From e25d1781f26fa6ec3f44d10806e5f119076abdd6 Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 18 Oct 2005 14:52:48 +0000 Subject: [PATCH] This commit was generated by cvs2git to create tag 'TG-Start-D5-38-2003'. Sprout from master 2005-08-29 08:05:24 UTC mzn 'Fix for problem: SIGSEGV appears if to select group after opening "Edit Group" dialog box.' Cherrypick from master 2005-10-18 14:52:45 UTC smh 'Preparation of 3.1.0a2: version ID. compilation with new HEAD and new MED (with polyhedres)': src/OBJECT/SMESH_Actor.cxx src/SMESH_I/Makefile.in Cherrypick from master 2005-09-07 06:22:45 UTC mzn 'Fix for problem: Preferences-Mesh-General tab: Display modes ?Nodes? and ?Shrink? are permuted.': src/SMESHGUI/SMESHGUI.cxx Delete: ChangeLog INSTALL LICENCE Makefile.in adm_local/unix/config_files/check_Geom.m4 adm_local/unix/config_files/check_Med.m4 adm_local/unix/make_commence.in adm_local/unix/make_conclude.in adm_local/unix/make_omniorb.in bin/VERSION build_configure configure.in.base cvs-tags doc/Makefile.in doc/salome/AddNetgenInSalome2.pdf doc/salome/AddNetgenInSalome2.ps doc/salome/AddNetgenInSalome2.sxw doc/salome/Makefile.in doc/salome/PluginMeshers.txt doc/salome/SMESH_index.html doc/salome/gui/Makefile.in doc/salome/gui/SMESH/SMESH.log doc/salome/gui/SMESH/cshdat_robohelp.htm doc/salome/gui/SMESH/cshdat_webhelp.htm doc/salome/gui/SMESH/default.css doc/salome/gui/SMESH/default.skn doc/salome/gui/SMESH/default_ns.css doc/salome/gui/SMESH/ehlpdhtm.js doc/salome/gui/SMESH/extrusion.htm doc/salome/gui/SMESH/files/1d_meshing_algorithm.htm doc/salome/gui/SMESH/files/2d_(quadrangle)_meshing_algorithm.htm doc/salome/gui/SMESH/files/2d_meshing_algorithm.htm doc/salome/gui/SMESH/files/3d_meshing_algorithm.htm doc/salome/gui/SMESH/files/about_hypotheses.htm doc/salome/gui/SMESH/files/about_meshes.htm doc/salome/gui/SMESH/files/about_meshing_algorithms.htm doc/salome/gui/SMESH/files/about_modification_of_meshes.htm doc/salome/gui/SMESH/files/about_quality_controls.htm doc/salome/gui/SMESH/files/adding_nodes_and_elements.htm doc/salome/gui/SMESH/files/area_of_elements.htm doc/salome/gui/SMESH/files/arithmetic_1d.htm doc/salome/gui/SMESH/files/aspect_ratio.htm doc/salome/gui/SMESH/files/changing_orientation_of_elements.htm doc/salome/gui/SMESH/files/computing_meshes.htm doc/salome/gui/SMESH/files/connectivity.htm doc/salome/gui/SMESH/files/constructing_groups_of_specific_elements.htm doc/salome/gui/SMESH/files/constructing_meshes.htm doc/salome/gui/SMESH/files/constructing_submeshes.htm doc/salome/gui/SMESH/files/creating_groups.htm doc/salome/gui/SMESH/files/cutting_quadrangles.htm doc/salome/gui/SMESH/files/deflection_1d.htm doc/salome/gui/SMESH/files/diagonal_iversion_of_elements.htm doc/salome/gui/SMESH/files/displacing_nodes.htm doc/salome/gui/SMESH/files/displaying_elements_numbers.htm doc/salome/gui/SMESH/files/displaying_nodes_numbers.htm doc/salome/gui/SMESH/files/editing_groups.htm doc/salome/gui/SMESH/files/editing_hypotheses.htm doc/salome/gui/SMESH/files/importing_and_exporting_meshes.htm doc/salome/gui/SMESH/files/introduction_to_smesh.htm doc/salome/gui/SMESH/files/length_from_edges.htm doc/salome/gui/SMESH/files/length_of_edges.htm doc/salome/gui/SMESH/files/local_length_hypothesis.htm doc/salome/gui/SMESH/files/max._element_area_hypothesis.htm doc/salome/gui/SMESH/files/max._element_volume_hypothsis.htm doc/salome/gui/SMESH/files/merging_nodes.htm doc/salome/gui/SMESH/files/minimum_angle.htm doc/salome/gui/SMESH/files/non_conform_mesh_allowed_hypothesis.htm doc/salome/gui/SMESH/files/number_of_segments_hypothesis.htm doc/salome/gui/SMESH/files/propagation_of_1d_hypothesis_on_opposite_edges.htm doc/salome/gui/SMESH/files/reassigning_hypotheses_and_algorithms.htm doc/salome/gui/SMESH/files/removing_nodes_and_elements.htm doc/salome/gui/SMESH/files/renumbering_nodes_and_elements.htm doc/salome/gui/SMESH/files/rotation.htm doc/salome/gui/SMESH/files/running_smesh_module.htm doc/salome/gui/SMESH/files/scalar_bar_properties.htm doc/salome/gui/SMESH/files/sewing_meshes.htm doc/salome/gui/SMESH/files/shading.htm doc/salome/gui/SMESH/files/shrink.htm doc/salome/gui/SMESH/files/skew.htm doc/salome/gui/SMESH/files/smoothing.htm doc/salome/gui/SMESH/files/start_and_end_length_hypothesis.htm doc/salome/gui/SMESH/files/symmetry.htm doc/salome/gui/SMESH/files/taper.htm doc/salome/gui/SMESH/files/tetrahedron_(ghs3d)_meshing_algorithm.htm doc/salome/gui/SMESH/files/tetrahedron_(netgen)_meshing_algorithm.htm doc/salome/gui/SMESH/files/translation.htm doc/salome/gui/SMESH/files/uniting_a_set_of_triangles.htm doc/salome/gui/SMESH/files/uniting_two_triangles.htm doc/salome/gui/SMESH/files/using_operations_on_groups.htm doc/salome/gui/SMESH/files/using_smesh_module.htm doc/salome/gui/SMESH/files/view_update.htm doc/salome/gui/SMESH/files/viewing_mesh_info.htm doc/salome/gui/SMESH/files/visualization_modes.htm doc/salome/gui/SMESH/files/visualization_properties.htm doc/salome/gui/SMESH/files/warp.htm doc/salome/gui/SMESH/files/wireframe.htm doc/salome/gui/SMESH/i_blue.jpg doc/salome/gui/SMESH/image10.jpg doc/salome/gui/SMESH/image11.jpg doc/salome/gui/SMESH/image12.gif doc/salome/gui/SMESH/image12.jpg doc/salome/gui/SMESH/image13.gif doc/salome/gui/SMESH/image14.gif doc/salome/gui/SMESH/image15.gif doc/salome/gui/SMESH/image16.gif doc/salome/gui/SMESH/image16.jpg doc/salome/gui/SMESH/image17.jpg doc/salome/gui/SMESH/image18.jpg doc/salome/gui/SMESH/image2.gif doc/salome/gui/SMESH/image20.jpg doc/salome/gui/SMESH/image21.jpg doc/salome/gui/SMESH/image22.gif doc/salome/gui/SMESH/image22.jpg doc/salome/gui/SMESH/image23.jpg doc/salome/gui/SMESH/image24.gif doc/salome/gui/SMESH/image24.jpg doc/salome/gui/SMESH/image25.gif doc/salome/gui/SMESH/image25.jpg doc/salome/gui/SMESH/image26.gif doc/salome/gui/SMESH/image26.jpg doc/salome/gui/SMESH/image27.gif doc/salome/gui/SMESH/image27.jpg doc/salome/gui/SMESH/image28.gif doc/salome/gui/SMESH/image28.jpg doc/salome/gui/SMESH/image29.gif doc/salome/gui/SMESH/image29.jpg doc/salome/gui/SMESH/image3.jpg doc/salome/gui/SMESH/image30.jpg doc/salome/gui/SMESH/image31.gif doc/salome/gui/SMESH/image31.jpg doc/salome/gui/SMESH/image32.gif doc/salome/gui/SMESH/image32.jpg doc/salome/gui/SMESH/image33.gif doc/salome/gui/SMESH/image34.gif doc/salome/gui/SMESH/image34.jpg doc/salome/gui/SMESH/image35.gif doc/salome/gui/SMESH/image35.jpg doc/salome/gui/SMESH/image36.gif doc/salome/gui/SMESH/image36.jpg doc/salome/gui/SMESH/image37.gif doc/salome/gui/SMESH/image38.gif doc/salome/gui/SMESH/image38.jpg doc/salome/gui/SMESH/image39.gif doc/salome/gui/SMESH/image39.jpg doc/salome/gui/SMESH/image4.gif doc/salome/gui/SMESH/image4.jpg doc/salome/gui/SMESH/image40.gif doc/salome/gui/SMESH/image40.jpg doc/salome/gui/SMESH/image41.gif doc/salome/gui/SMESH/image41.jpg doc/salome/gui/SMESH/image42.gif doc/salome/gui/SMESH/image42.jpg doc/salome/gui/SMESH/image43.gif doc/salome/gui/SMESH/image43.jpg doc/salome/gui/SMESH/image44.gif doc/salome/gui/SMESH/image44.jpg doc/salome/gui/SMESH/image45.gif doc/salome/gui/SMESH/image45.jpg doc/salome/gui/SMESH/image46.gif doc/salome/gui/SMESH/image46.jpg doc/salome/gui/SMESH/image47.gif doc/salome/gui/SMESH/image47.jpg doc/salome/gui/SMESH/image48.gif doc/salome/gui/SMESH/image48.jpg doc/salome/gui/SMESH/image49.gif doc/salome/gui/SMESH/image49.jpg doc/salome/gui/SMESH/image50.gif doc/salome/gui/SMESH/image50.jpg doc/salome/gui/SMESH/image51.gif doc/salome/gui/SMESH/image51.jpg doc/salome/gui/SMESH/image52.gif doc/salome/gui/SMESH/image52.jpg doc/salome/gui/SMESH/image53.gif doc/salome/gui/SMESH/image53.jpg doc/salome/gui/SMESH/image54.jpg doc/salome/gui/SMESH/image55.gif doc/salome/gui/SMESH/image55.jpg doc/salome/gui/SMESH/image56.gif doc/salome/gui/SMESH/image57.gif doc/salome/gui/SMESH/image57.jpg doc/salome/gui/SMESH/image58.jpg doc/salome/gui/SMESH/image59.jpg doc/salome/gui/SMESH/image6.gif doc/salome/gui/SMESH/image6.jpg doc/salome/gui/SMESH/image60.jpg doc/salome/gui/SMESH/image61.gif doc/salome/gui/SMESH/image61.jpg doc/salome/gui/SMESH/image62.jpg doc/salome/gui/SMESH/image63.gif doc/salome/gui/SMESH/image63.jpg doc/salome/gui/SMESH/image64.gif doc/salome/gui/SMESH/image64.jpg doc/salome/gui/SMESH/image65.gif doc/salome/gui/SMESH/image65.jpg doc/salome/gui/SMESH/image66.gif doc/salome/gui/SMESH/image66.jpg doc/salome/gui/SMESH/image67.gif doc/salome/gui/SMESH/image67.jpg doc/salome/gui/SMESH/image68.gif doc/salome/gui/SMESH/image68.jpg doc/salome/gui/SMESH/image69.gif doc/salome/gui/SMESH/image69.jpg doc/salome/gui/SMESH/image7.gif doc/salome/gui/SMESH/image7.jpg doc/salome/gui/SMESH/image70.gif doc/salome/gui/SMESH/image70.jpg doc/salome/gui/SMESH/image71.gif doc/salome/gui/SMESH/image71.jpg doc/salome/gui/SMESH/image72.gif doc/salome/gui/SMESH/image72.jpg doc/salome/gui/SMESH/image73.gif doc/salome/gui/SMESH/image73.jpg doc/salome/gui/SMESH/image74.gif doc/salome/gui/SMESH/image74.jpg doc/salome/gui/SMESH/image75.gif doc/salome/gui/SMESH/image75.jpg doc/salome/gui/SMESH/image76.gif doc/salome/gui/SMESH/image76.jpg doc/salome/gui/SMESH/image77.gif doc/salome/gui/SMESH/image77.jpg doc/salome/gui/SMESH/image78.gif doc/salome/gui/SMESH/image78.jpg doc/salome/gui/SMESH/image79.gif doc/salome/gui/SMESH/image8.gif doc/salome/gui/SMESH/image8.jpg doc/salome/gui/SMESH/image80.gif doc/salome/gui/SMESH/image80.jpg doc/salome/gui/SMESH/image81.gif doc/salome/gui/SMESH/image81.jpg doc/salome/gui/SMESH/image82.gif doc/salome/gui/SMESH/image82.jpg doc/salome/gui/SMESH/image83.gif doc/salome/gui/SMESH/image84.gif doc/salome/gui/SMESH/image85.gif doc/salome/gui/SMESH/image87.gif doc/salome/gui/SMESH/image88.gif doc/salome/gui/SMESH/image89.gif doc/salome/gui/SMESH/image9.gif doc/salome/gui/SMESH/image9.jpg doc/salome/gui/SMESH/image90.gif doc/salome/gui/SMESH/image91.gif doc/salome/gui/SMESH/image92.gif doc/salome/gui/SMESH/image93.gif doc/salome/gui/SMESH/image94.gif doc/salome/gui/SMESH/image95.gif doc/salome/gui/SMESH/image96.gif doc/salome/gui/SMESH/image97.gif doc/salome/gui/SMESH/image98.gif doc/salome/gui/SMESH/note1.gif doc/salome/gui/SMESH/pattern_mapping.htm doc/salome/gui/SMESH/pics/exemple.gif doc/salome/gui/SMESH/pics/new.jpg doc/salome/gui/SMESH/revolution.htm doc/salome/gui/SMESH/smesh.htm doc/salome/gui/SMESH/smesh.html doc/salome/gui/SMESH/smesh_csh.htm doc/salome/gui/SMESH/smesh_csh.html doc/salome/gui/SMESH/smesh_rhc.htm doc/salome/gui/SMESH/smesh_rhc.html doc/salome/gui/SMESH/tetrahedron_(ghs3d)_meshing_algorithm.htm doc/salome/gui/SMESH/texture_horiz_ltbluebubbles.jpg doc/salome/gui/SMESH/webhelp.cab doc/salome/gui/SMESH/webhelp.jar doc/salome/gui/SMESH/whdata/whftdata.js doc/salome/gui/SMESH/whdata/whftdata0.htm doc/salome/gui/SMESH/whdata/whftdata0.xml doc/salome/gui/SMESH/whdata/whfts.htm doc/salome/gui/SMESH/whdata/whfts.js doc/salome/gui/SMESH/whdata/whfts.xml doc/salome/gui/SMESH/whdata/whfwdata.js doc/salome/gui/SMESH/whdata/whfwdata0.htm doc/salome/gui/SMESH/whdata/whfwdata0.xml doc/salome/gui/SMESH/whdata/whgdata.js doc/salome/gui/SMESH/whdata/whgdata0.htm doc/salome/gui/SMESH/whdata/whgdata0.xml doc/salome/gui/SMESH/whdata/whglo.htm doc/salome/gui/SMESH/whdata/whglo.js doc/salome/gui/SMESH/whdata/whglo.xml doc/salome/gui/SMESH/whdata/whidata.js doc/salome/gui/SMESH/whdata/whidx.htm doc/salome/gui/SMESH/whdata/whidx.js doc/salome/gui/SMESH/whdata/whidx.xml doc/salome/gui/SMESH/whdata/whtdata.js doc/salome/gui/SMESH/whdata/whtdata0.htm doc/salome/gui/SMESH/whdata/whtdata0.xml doc/salome/gui/SMESH/whdata/whtoc.htm doc/salome/gui/SMESH/whdata/whtoc.js doc/salome/gui/SMESH/whdata/whtoc.xml doc/salome/gui/SMESH/whestart.ico doc/salome/gui/SMESH/whfbody.htm doc/salome/gui/SMESH/whfdhtml.htm doc/salome/gui/SMESH/whfform.htm doc/salome/gui/SMESH/whfhost.js doc/salome/gui/SMESH/whform.js doc/salome/gui/SMESH/whframes.js doc/salome/gui/SMESH/whgbody.htm doc/salome/gui/SMESH/whgdata/whexpbar.gif doc/salome/gui/SMESH/whgdata/whlstf0.htm doc/salome/gui/SMESH/whgdata/whlstf1.htm doc/salome/gui/SMESH/whgdata/whlstf2.htm doc/salome/gui/SMESH/whgdata/whlstf3.htm doc/salome/gui/SMESH/whgdata/whlstf4.htm doc/salome/gui/SMESH/whgdata/whlstf5.htm doc/salome/gui/SMESH/whgdata/whlstf6.htm doc/salome/gui/SMESH/whgdata/whlstf7.htm doc/salome/gui/SMESH/whgdata/whlstfl0.htm doc/salome/gui/SMESH/whgdata/whlstfl1.htm doc/salome/gui/SMESH/whgdata/whlstfl10.htm doc/salome/gui/SMESH/whgdata/whlstfl11.htm doc/salome/gui/SMESH/whgdata/whlstfl12.htm doc/salome/gui/SMESH/whgdata/whlstfl13.htm doc/salome/gui/SMESH/whgdata/whlstfl14.htm doc/salome/gui/SMESH/whgdata/whlstfl15.htm doc/salome/gui/SMESH/whgdata/whlstfl16.htm doc/salome/gui/SMESH/whgdata/whlstfl17.htm doc/salome/gui/SMESH/whgdata/whlstfl18.htm doc/salome/gui/SMESH/whgdata/whlstfl19.htm doc/salome/gui/SMESH/whgdata/whlstfl2.htm doc/salome/gui/SMESH/whgdata/whlstfl20.htm doc/salome/gui/SMESH/whgdata/whlstfl21.htm doc/salome/gui/SMESH/whgdata/whlstfl22.htm doc/salome/gui/SMESH/whgdata/whlstfl23.htm doc/salome/gui/SMESH/whgdata/whlstfl3.htm doc/salome/gui/SMESH/whgdata/whlstfl4.htm doc/salome/gui/SMESH/whgdata/whlstfl5.htm doc/salome/gui/SMESH/whgdata/whlstfl6.htm doc/salome/gui/SMESH/whgdata/whlstfl7.htm doc/salome/gui/SMESH/whgdata/whlstfl8.htm doc/salome/gui/SMESH/whgdata/whlstfl9.htm doc/salome/gui/SMESH/whgdata/whlstg0.htm doc/salome/gui/SMESH/whgdata/whlsti0.htm doc/salome/gui/SMESH/whgdata/whlstt0.htm doc/salome/gui/SMESH/whgdata/whlstt1.htm doc/salome/gui/SMESH/whgdata/whlstt10.htm doc/salome/gui/SMESH/whgdata/whlstt11.htm doc/salome/gui/SMESH/whgdata/whlstt12.htm doc/salome/gui/SMESH/whgdata/whlstt13.htm doc/salome/gui/SMESH/whgdata/whlstt2.htm doc/salome/gui/SMESH/whgdata/whlstt3.htm doc/salome/gui/SMESH/whgdata/whlstt4.htm doc/salome/gui/SMESH/whgdata/whlstt5.htm doc/salome/gui/SMESH/whgdata/whlstt6.htm doc/salome/gui/SMESH/whgdata/whlstt7.htm doc/salome/gui/SMESH/whgdata/whlstt8.htm doc/salome/gui/SMESH/whgdata/whlstt9.htm doc/salome/gui/SMESH/whgdata/whnvf30.htm doc/salome/gui/SMESH/whgdata/whnvf31.htm doc/salome/gui/SMESH/whgdata/whnvf32.htm doc/salome/gui/SMESH/whgdata/whnvf33.htm doc/salome/gui/SMESH/whgdata/whnvl31.htm doc/salome/gui/SMESH/whgdata/whnvl32.htm doc/salome/gui/SMESH/whgdata/whnvl33.htm doc/salome/gui/SMESH/whgdata/whnvp30.htm doc/salome/gui/SMESH/whgdata/whnvp31.htm doc/salome/gui/SMESH/whgdata/whnvp32.htm doc/salome/gui/SMESH/whgdata/whnvp33.htm doc/salome/gui/SMESH/whgdata/whnvt30.htm doc/salome/gui/SMESH/whgdata/whnvt31.htm doc/salome/gui/SMESH/whgdata/whnvt32.htm doc/salome/gui/SMESH/whgdata/whnvt33.htm doc/salome/gui/SMESH/whgdef.htm doc/salome/gui/SMESH/whgdhtml.htm doc/salome/gui/SMESH/whghost.js doc/salome/gui/SMESH/whhost.js doc/salome/gui/SMESH/whibody.htm doc/salome/gui/SMESH/whidhtml.htm doc/salome/gui/SMESH/whiform.htm doc/salome/gui/SMESH/whihost.js doc/salome/gui/SMESH/whlang.js doc/salome/gui/SMESH/whmozemu.js doc/salome/gui/SMESH/whmsg.js doc/salome/gui/SMESH/whnjs.htm doc/salome/gui/SMESH/whphost.js doc/salome/gui/SMESH/whproj.htm doc/salome/gui/SMESH/whproj.js doc/salome/gui/SMESH/whproj.xml doc/salome/gui/SMESH/whproxy.js doc/salome/gui/SMESH/whres.xml doc/salome/gui/SMESH/whrstart.ico doc/salome/gui/SMESH/whskin_banner.htm doc/salome/gui/SMESH/whskin_blank.htm doc/salome/gui/SMESH/whskin_frmset01.htm doc/salome/gui/SMESH/whskin_frmset010.htm doc/salome/gui/SMESH/whskin_info.htm doc/salome/gui/SMESH/whskin_mbars.htm doc/salome/gui/SMESH/whskin_papplet.htm doc/salome/gui/SMESH/whskin_pdhtml.htm doc/salome/gui/SMESH/whskin_plist.htm doc/salome/gui/SMESH/whskin_tbars.htm doc/salome/gui/SMESH/whst_topics.xml doc/salome/gui/SMESH/whstart.ico doc/salome/gui/SMESH/whstart.js doc/salome/gui/SMESH/whstub.js doc/salome/gui/SMESH/wht_abge.jpg doc/salome/gui/SMESH/wht_abgi.jpg doc/salome/gui/SMESH/wht_abgw.jpg doc/salome/gui/SMESH/wht_abte.jpg doc/salome/gui/SMESH/wht_abti.jpg doc/salome/gui/SMESH/wht_abtw.jpg doc/salome/gui/SMESH/wht_fts_h.gif doc/salome/gui/SMESH/wht_fts_n.gif doc/salome/gui/SMESH/wht_glo_h.gif doc/salome/gui/SMESH/wht_glo_n.gif doc/salome/gui/SMESH/wht_go.gif doc/salome/gui/SMESH/wht_hide.gif doc/salome/gui/SMESH/wht_idx_h.gif doc/salome/gui/SMESH/wht_idx_n.gif doc/salome/gui/SMESH/wht_logo1.gif doc/salome/gui/SMESH/wht_logo2.gif doc/salome/gui/SMESH/wht_next.gif doc/salome/gui/SMESH/wht_next_g.gif doc/salome/gui/SMESH/wht_prev.gif doc/salome/gui/SMESH/wht_prev_g.gif doc/salome/gui/SMESH/wht_spac.gif doc/salome/gui/SMESH/wht_sync.gif doc/salome/gui/SMESH/wht_tab0.gif doc/salome/gui/SMESH/wht_tab1.gif doc/salome/gui/SMESH/wht_tab2.gif doc/salome/gui/SMESH/wht_tab3.gif doc/salome/gui/SMESH/wht_tab4.gif doc/salome/gui/SMESH/wht_tab5.gif doc/salome/gui/SMESH/wht_tab6.gif doc/salome/gui/SMESH/wht_tab7.gif doc/salome/gui/SMESH/wht_tab8.gif doc/salome/gui/SMESH/wht_toc1.gif doc/salome/gui/SMESH/wht_toc2.gif doc/salome/gui/SMESH/wht_toc3.gif doc/salome/gui/SMESH/wht_toc4.gif doc/salome/gui/SMESH/wht_toc_h.gif doc/salome/gui/SMESH/wht_toc_n.gif doc/salome/gui/SMESH/wht_ws.gif doc/salome/gui/SMESH/wht_ws_g.gif doc/salome/gui/SMESH/whtbar.js doc/salome/gui/SMESH/whtdhtml.htm doc/salome/gui/SMESH/whthost.js doc/salome/gui/SMESH/whtopic.js doc/salome/gui/SMESH/whutils.js doc/salome/gui/SMESH/whver.js doc/salome/tui/Makefile.in doc/salome/tui/SMESH/HTML/SMESH_BasicHypothesis.html doc/salome/tui/SMESH/HTML/SMESH_Gen.html doc/salome/tui/SMESH/HTML/SMESH_Hypothesis.html doc/salome/tui/SMESH/HTML/SMESH_Mesh.html doc/salome/tui/SMESH/doxyfile doc/salome/tui/SMESH/doxyfile_py doc/salome/tui/SMESH/sources/Application-About.png doc/salome/tui/SMESH/sources/Application-About1.jpg doc/salome/tui/SMESH/sources/application.gif doc/salome/tui/SMESH/sources/application.jpg doc/salome/tui/SMESH/sources/bg_salome.gif doc/salome/tui/SMESH/sources/logocorp.gif doc/salome/tui/SMESH/sources/myheader.html doc/salome/tui/SMESH/sources/myheader_py2.html doc/salome/tui/SMESH/sources/occ.gif doc/salome/tui/SMESH/sources/static/PluginMeshers.html doc/salome/tui/SMESH/sources/static/doxygen.css doc/salome/tui/SMESH/sources/static/page2.html doc/salome/tui/SMESH/sources/static/tree.js doc/salome/tui/SMESH/sources/static/treeview.js idl/Makefile.in idl/SMESH_BasicHypothesis.idl idl/SMESH_Filter.idl idl/SMESH_Gen.idl idl/SMESH_Group.idl idl/SMESH_Hypothesis.idl idl/SMESH_Mesh.idl idl/SMESH_Pattern.idl resources/ModuleMesh.png resources/SMESH.config resources/SMESHCatalog.xml resources/SMESH_en.xml resources/SMESH_fr.xml resources/StdMeshers.xml resources/advanced_mesh_info.png resources/delete.png resources/flight_solid.brep resources/mesh.png resources/mesh_add.png resources/mesh_add_sub.png resources/mesh_algo_hexa.png resources/mesh_algo_mefisto.png resources/mesh_algo_netgen.png resources/mesh_algo_quad.png resources/mesh_algo_regular.png resources/mesh_algo_tetra.png resources/mesh_angle.png resources/mesh_area.png resources/mesh_aspect.png resources/mesh_aspect_3d.png resources/mesh_compute.png resources/mesh_connectivity.png resources/mesh_cutGroups.png resources/mesh_cutquad.png resources/mesh_deleteGroups.png resources/mesh_diagonal.png resources/mesh_edit.png resources/mesh_edit_group.png resources/mesh_extrusion.png resources/mesh_extrusionpath.png resources/mesh_free_edges.png resources/mesh_free_edges_2d.png resources/mesh_hexa.png resources/mesh_hexa_n.png resources/mesh_hypo_area.png resources/mesh_hypo_edit.png resources/mesh_hypo_length.png resources/mesh_hypo_segment.png resources/mesh_hypo_volume.png resources/mesh_info.png resources/mesh_init.png resources/mesh_intersectGroups.png resources/mesh_length.png resources/mesh_length_2d.png resources/mesh_line.png resources/mesh_line_n.png resources/mesh_make_group.png resources/mesh_merge_elements.png resources/mesh_merge_nodes.png resources/mesh_move_node.png resources/mesh_multi_edges.png resources/mesh_multi_edges_2d.png resources/mesh_orientation.png resources/mesh_pattern.png resources/mesh_points.png resources/mesh_polygon.png resources/mesh_polyhedron.png resources/mesh_pyramid.png resources/mesh_pyramid_n.png resources/mesh_quad.png resources/mesh_quad_n.png resources/mesh_rem_element.png resources/mesh_rem_node.png resources/mesh_remove.png resources/mesh_renumbering_elements.png resources/mesh_renumbering_nodes.png resources/mesh_revolution.png resources/mesh_rotation.png resources/mesh_set_algo.png resources/mesh_set_hypo.png resources/mesh_sew_bordertoside.png resources/mesh_sew_conform_freeborders.png resources/mesh_sew_freeborders.png resources/mesh_sew_sideelements.png resources/mesh_shading.png resources/mesh_shrink.png resources/mesh_skew.png resources/mesh_smoothing.png resources/mesh_symmetry_axis.png resources/mesh_symmetry_plane.png resources/mesh_symmetry_point.png resources/mesh_taper.png resources/mesh_tetra.png resources/mesh_tetra_n.png resources/mesh_translation_points.png resources/mesh_translation_vector.png resources/mesh_tree_algo.png resources/mesh_tree_algo_hexa.png resources/mesh_tree_algo_mefisto.png resources/mesh_tree_algo_netgen.png resources/mesh_tree_algo_quad.png resources/mesh_tree_algo_regular.png resources/mesh_tree_algo_tetra.png resources/mesh_tree_group.png resources/mesh_tree_hypo.png resources/mesh_tree_hypo_area.png resources/mesh_tree_hypo_length.png resources/mesh_tree_hypo_segment.png resources/mesh_tree_hypo_volume.png resources/mesh_tree_importedmesh.png resources/mesh_tree_mesh.png resources/mesh_tree_mesh_warn.png resources/mesh_triangle.png resources/mesh_triangle_n.png resources/mesh_union2tri.png resources/mesh_unionGroups.png resources/mesh_uniontri.png resources/mesh_update.png resources/mesh_vertex.png resources/mesh_vertex_n.png resources/mesh_wireframe.png resources/mesh_wrap.png resources/pattern_sample_2d.png resources/pattern_sample_3D.png resources/select1.png resources/standard_mesh_info.png src/Controls/Makefile.in src/Controls/SMESHControls.cxx src/Controls/SMESH_Controls.cxx src/Controls/SMESH_Controls.hxx src/Controls/SMESH_ControlsDef.hxx src/Driver/Driver_Document.cxx src/Driver/Driver_Document.h src/Driver/Driver_Mesh.cxx src/Driver/Driver_Mesh.h src/Driver/Driver_SMDS_Mesh.cxx src/Driver/Driver_SMDS_Mesh.h src/Driver/Driver_SMESHDS_Mesh.cxx src/Driver/Driver_SMESHDS_Mesh.h src/Driver/Makefile.in src/DriverDAT/DAT_Test.cxx src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx src/DriverDAT/DriverDAT_R_SMDS_Mesh.h src/DriverDAT/DriverDAT_R_SMESHDS_Document.cxx src/DriverDAT/DriverDAT_R_SMESHDS_Document.h src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.cxx src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.h src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx src/DriverDAT/DriverDAT_W_SMDS_Mesh.h src/DriverDAT/DriverDAT_W_SMESHDS_Document.cxx src/DriverDAT/DriverDAT_W_SMESHDS_Document.h src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.cxx src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.h src/DriverDAT/Makefile.in src/DriverMED/DriverMED_Family.cxx src/DriverMED/DriverMED_Family.h src/DriverMED/DriverMED_R_SMDS_Mesh.cxx src/DriverMED/DriverMED_R_SMDS_Mesh.h src/DriverMED/DriverMED_R_SMESHDS_Document.cxx src/DriverMED/DriverMED_R_SMESHDS_Document.h src/DriverMED/DriverMED_R_SMESHDS_Mesh.h src/DriverMED/DriverMED_W_SMDS_Mesh.cxx src/DriverMED/DriverMED_W_SMDS_Mesh.h src/DriverMED/DriverMED_W_SMESHDS_Document.cxx src/DriverMED/DriverMED_W_SMESHDS_Document.h src/DriverMED/DriverMED_W_SMESHDS_Mesh.h src/DriverMED/MED_Test.cxx src/DriverMED/Makefile.in src/DriverSTL/DriverSTL_R_SMDS_Mesh.cxx src/DriverSTL/DriverSTL_R_SMDS_Mesh.h src/DriverSTL/DriverSTL_W_SMDS_Mesh.cxx src/DriverSTL/DriverSTL_W_SMDS_Mesh.h src/DriverSTL/Makefile.in src/DriverSTL/STL_Test.cxx src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx src/DriverUNV/DriverUNV_R_SMDS_Mesh.h src/DriverUNV/DriverUNV_R_SMESHDS_Document.cxx src/DriverUNV/DriverUNV_R_SMESHDS_Document.h src/DriverUNV/DriverUNV_R_SMESHDS_Mesh.cxx src/DriverUNV/DriverUNV_R_SMESHDS_Mesh.h src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx src/DriverUNV/DriverUNV_W_SMDS_Mesh.h src/DriverUNV/DriverUNV_W_SMESHDS_Document.cxx src/DriverUNV/DriverUNV_W_SMESHDS_Document.h src/DriverUNV/DriverUNV_W_SMESHDS_Mesh.cxx src/DriverUNV/DriverUNV_W_SMESHDS_Mesh.h src/DriverUNV/Makefile.in src/DriverUNV/UNV2411_Structure.cxx src/DriverUNV/UNV2411_Structure.hxx src/DriverUNV/UNV2412_Structure.cxx src/DriverUNV/UNV2412_Structure.hxx src/DriverUNV/UNV_Test.cxx src/DriverUNV/UNV_Utilities.cxx src/DriverUNV/UNV_Utilities.hxx src/MEFISTO2/Makefile.in src/MEFISTO2/Rn.h src/MEFISTO2/aptrte.cxx src/MEFISTO2/aptrte.h src/MEFISTO2/areteideale.f src/MEFISTO2/trte.f src/Makefile.in src/NETGEN/Makefile.in src/NETGEN/ReadMeForNgUsers src/NETGEN/netgen43ForSalome.patch src/NETGENPlugin/Makefile.in src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.cxx src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.hxx src/NETGENPlugin/NETGENPlugin_i.cxx src/NETGENPlugin/NETGENPlugin_icons.po src/OBJECT/Makefile.in src/OBJECT/SMESH_Actor.h src/OBJECT/SMESH_ActorDef.h src/OBJECT/SMESH_ActorUtils.cxx src/OBJECT/SMESH_ActorUtils.h src/OBJECT/SMESH_DeviceActor.cxx src/OBJECT/SMESH_DeviceActor.h src/OBJECT/SMESH_ExtractGeometry.cxx src/OBJECT/SMESH_ExtractGeometry.h src/OBJECT/SMESH_Object.cxx src/OBJECT/SMESH_Object.h src/OBJECT/SMESH_ObjectDef.h src/SMDS/Makefile.in src/SMDS/SMDSAbs_ElementType.hxx src/SMDS/SMDS_EdgePosition.cxx src/SMDS/SMDS_EdgePosition.hxx src/SMDS/SMDS_ElemIterator.hxx src/SMDS/SMDS_FaceOfEdges.cxx src/SMDS/SMDS_FaceOfEdges.hxx src/SMDS/SMDS_FaceOfNodes.cxx src/SMDS/SMDS_FaceOfNodes.hxx src/SMDS/SMDS_FacePosition.cxx src/SMDS/SMDS_FacePosition.hxx src/SMDS/SMDS_Iterator.hxx src/SMDS/SMDS_IteratorOfElements.cxx src/SMDS/SMDS_IteratorOfElements.hxx src/SMDS/SMDS_Mesh.cxx src/SMDS/SMDS_Mesh.hxx src/SMDS/SMDS_MeshEdge.cxx src/SMDS/SMDS_MeshEdge.hxx src/SMDS/SMDS_MeshElement.cxx src/SMDS/SMDS_MeshElement.hxx src/SMDS/SMDS_MeshElementIDFactory.cxx src/SMDS/SMDS_MeshElementIDFactory.hxx src/SMDS/SMDS_MeshFace.cxx src/SMDS/SMDS_MeshFace.hxx src/SMDS/SMDS_MeshGroup.cxx src/SMDS/SMDS_MeshGroup.hxx src/SMDS/SMDS_MeshIDFactory.cxx src/SMDS/SMDS_MeshIDFactory.hxx src/SMDS/SMDS_MeshNode.cxx src/SMDS/SMDS_MeshNode.hxx src/SMDS/SMDS_MeshObject.cxx src/SMDS/SMDS_MeshObject.hxx src/SMDS/SMDS_MeshVolume.cxx src/SMDS/SMDS_MeshVolume.hxx src/SMDS/SMDS_PolygonalFaceOfNodes.cxx src/SMDS/SMDS_PolygonalFaceOfNodes.hxx src/SMDS/SMDS_PolyhedralVolumeOfNodes.cxx src/SMDS/SMDS_PolyhedralVolumeOfNodes.hxx src/SMDS/SMDS_Position.cxx src/SMDS/SMDS_Position.hxx src/SMDS/SMDS_SpacePosition.cxx src/SMDS/SMDS_SpacePosition.hxx src/SMDS/SMDS_TypeOfPosition.hxx src/SMDS/SMDS_VertexPosition.cxx src/SMDS/SMDS_VertexPosition.hxx src/SMDS/SMDS_VolumeOfFaces.cxx src/SMDS/SMDS_VolumeOfFaces.hxx src/SMDS/SMDS_VolumeOfNodes.cxx src/SMDS/SMDS_VolumeOfNodes.hxx src/SMDS/SMDS_VolumeTool.cxx src/SMDS/SMDS_VolumeTool.hxx src/SMESH/Makefile.in src/SMESH/SMESH_1D_Algo.cxx src/SMESH/SMESH_1D_Algo.hxx src/SMESH/SMESH_2D_Algo.cxx src/SMESH/SMESH_2D_Algo.hxx src/SMESH/SMESH_3D_Algo.cxx src/SMESH/SMESH_3D_Algo.hxx src/SMESH/SMESH_Algo.cxx src/SMESH/SMESH_Algo.hxx src/SMESH/SMESH_Block.cxx src/SMESH/SMESH_Block.hxx src/SMESH/SMESH_Gen.cxx src/SMESH/SMESH_Gen.hxx src/SMESH/SMESH_Group.cxx src/SMESH/SMESH_Group.hxx src/SMESH/SMESH_HypoFilter.cxx src/SMESH/SMESH_HypoFilter.hxx src/SMESH/SMESH_Hypothesis.cxx src/SMESH/SMESH_Hypothesis.hxx src/SMESH/SMESH_Mesh.cxx src/SMESH/SMESH_Mesh.hxx src/SMESH/SMESH_MeshEditor.cxx src/SMESH/SMESH_MeshEditor.hxx src/SMESH/SMESH_Pattern.cxx src/SMESH/SMESH_Pattern.hxx src/SMESH/SMESH_subMesh.cxx src/SMESH/SMESH_subMesh.hxx src/SMESHDS/Makefile.in src/SMESHDS/SMESHDS_Command.cxx src/SMESHDS/SMESHDS_Command.hxx src/SMESHDS/SMESHDS_CommandType.hxx src/SMESHDS/SMESHDS_Document.cxx src/SMESHDS/SMESHDS_Document.hxx src/SMESHDS/SMESHDS_Group.cxx src/SMESHDS/SMESHDS_Group.hxx src/SMESHDS/SMESHDS_GroupBase.cxx src/SMESHDS/SMESHDS_GroupBase.hxx src/SMESHDS/SMESHDS_GroupOnGeom.cxx src/SMESHDS/SMESHDS_GroupOnGeom.hxx src/SMESHDS/SMESHDS_Hypothesis.cxx src/SMESHDS/SMESHDS_Hypothesis.hxx src/SMESHDS/SMESHDS_Mesh.cxx src/SMESHDS/SMESHDS_Mesh.hxx src/SMESHDS/SMESHDS_Script.cxx src/SMESHDS/SMESHDS_Script.hxx src/SMESHDS/SMESHDS_SubMesh.cxx src/SMESHDS/SMESHDS_SubMesh.hxx src/SMESHFiltersSelection/Handle_SMESH_TypeFilter.hxx src/SMESHFiltersSelection/SMESH_LogicalFilter.cxx src/SMESHFiltersSelection/SMESH_LogicalFilter.hxx src/SMESHFiltersSelection/SMESH_NumberFilter.cxx src/SMESHFiltersSelection/SMESH_NumberFilter.hxx src/SMESHFiltersSelection/SMESH_Type.h src/SMESHFiltersSelection/SMESH_TypeFilter.cxx src/SMESHFiltersSelection/SMESH_TypeFilter.hxx src/SMESHFiltersSelection/SMESH_TypeFilter.ixx src/SMESHFiltersSelection/SMESH_TypeFilter.jxx src/SMESHGUI/Makefile.in src/SMESHGUI/SMESHBin.cxx src/SMESHGUI/SMESHGUI.h src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx src/SMESHGUI/SMESHGUI_AddMeshElementDlg.h src/SMESHGUI/SMESHGUI_AddSubMeshDlg.cxx src/SMESHGUI/SMESHGUI_AddSubMeshDlg.h src/SMESHGUI/SMESHGUI_ClippingDlg.cxx src/SMESHGUI/SMESHGUI_ClippingDlg.h src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.cxx src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.h src/SMESHGUI/SMESHGUI_CreatePatternDlg.cxx src/SMESHGUI/SMESHGUI_CreatePatternDlg.h src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.h src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx src/SMESHGUI/SMESHGUI_DeleteGroupDlg.h src/SMESHGUI/SMESHGUI_Dialog.cxx src/SMESHGUI/SMESHGUI_Dialog.h src/SMESHGUI/SMESHGUI_EditHypothesesDlg.cxx src/SMESHGUI/SMESHGUI_EditHypothesesDlg.h src/SMESHGUI/SMESHGUI_EditMeshDlg.cxx src/SMESHGUI/SMESHGUI_EditMeshDlg.h src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.h src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx src/SMESHGUI/SMESHGUI_ExtrusionDlg.h src/SMESHGUI/SMESHGUI_Filter.cxx src/SMESHGUI/SMESHGUI_Filter.h src/SMESHGUI/SMESHGUI_FilterDlg.h src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx src/SMESHGUI/SMESHGUI_FilterLibraryDlg.h src/SMESHGUI/SMESHGUI_FilterUtils.cxx src/SMESHGUI/SMESHGUI_FilterUtils.h src/SMESHGUI/SMESHGUI_GEOMGenUtils.cxx src/SMESHGUI/SMESHGUI_GEOMGenUtils.h src/SMESHGUI/SMESHGUI_GroupDlg.h src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx src/SMESHGUI/SMESHGUI_GroupOpDlg.h src/SMESHGUI/SMESHGUI_GroupUtils.cxx src/SMESHGUI/SMESHGUI_GroupUtils.h src/SMESHGUI/SMESHGUI_Hypotheses.h src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx src/SMESHGUI/SMESHGUI_HypothesesUtils.h src/SMESHGUI/SMESHGUI_IdValidator.h src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx src/SMESHGUI/SMESHGUI_InitMeshDlg.h src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx src/SMESHGUI/SMESHGUI_MergeNodesDlg.h src/SMESHGUI/SMESHGUI_MeshDlg.cxx src/SMESHGUI/SMESHGUI_MeshDlg.h src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx src/SMESHGUI/SMESHGUI_MeshInfosDlg.h src/SMESHGUI/SMESHGUI_MeshOp.cxx src/SMESHGUI/SMESHGUI_MeshOp.h src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx src/SMESHGUI/SMESHGUI_MeshPatternDlg.h src/SMESHGUI/SMESHGUI_MeshUtils.cxx src/SMESHGUI/SMESHGUI_MeshUtils.h src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx src/SMESHGUI/SMESHGUI_MoveNodesDlg.h src/SMESHGUI/SMESHGUI_MultiEditDlg.h src/SMESHGUI/SMESHGUI_NodesDlg.cxx src/SMESHGUI/SMESHGUI_NodesDlg.h src/SMESHGUI/SMESHGUI_Operation.cxx src/SMESHGUI/SMESHGUI_Operation.h src/SMESHGUI/SMESHGUI_PatternUtils.cxx src/SMESHGUI/SMESHGUI_PatternUtils.h src/SMESHGUI/SMESHGUI_PatternWidget.cxx src/SMESHGUI/SMESHGUI_PatternWidget.h src/SMESHGUI/SMESHGUI_PrecisionDlg.cxx src/SMESHGUI/SMESHGUI_PrecisionDlg.h src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.h src/SMESHGUI/SMESHGUI_Preferences_SelectionDlg.cxx src/SMESHGUI/SMESHGUI_Preferences_SelectionDlg.h src/SMESHGUI/SMESHGUI_RemoveElementsDlg.h src/SMESHGUI/SMESHGUI_RemoveNodesDlg.h src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx src/SMESHGUI/SMESHGUI_RenumberingDlg.h src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx src/SMESHGUI/SMESHGUI_RevolutionDlg.h src/SMESHGUI/SMESHGUI_RotationDlg.cxx src/SMESHGUI/SMESHGUI_RotationDlg.h src/SMESHGUI/SMESHGUI_SMESHGenUtils.cxx src/SMESHGUI/SMESHGUI_SMESHGenUtils.h src/SMESHGUI/SMESHGUI_Selection.h src/SMESHGUI/SMESHGUI_SelectionOp.cxx src/SMESHGUI/SMESHGUI_SelectionOp.h src/SMESHGUI/SMESHGUI_SewingDlg.cxx src/SMESHGUI/SMESHGUI_SewingDlg.h src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx src/SMESHGUI/SMESHGUI_SingleEditDlg.h src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx src/SMESHGUI/SMESHGUI_SmoothingDlg.h src/SMESHGUI/SMESHGUI_SpinBox.cxx src/SMESHGUI/SMESHGUI_SpinBox.h src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.cxx src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.h src/SMESHGUI/SMESHGUI_Swig.cxx src/SMESHGUI/SMESHGUI_Swig.hxx src/SMESHGUI/SMESHGUI_Swig.i src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx src/SMESHGUI/SMESHGUI_SymmetryDlg.h src/SMESHGUI/SMESHGUI_TranslationDlg.cxx src/SMESHGUI/SMESHGUI_TranslationDlg.h src/SMESHGUI/SMESHGUI_TransparencyDlg.cxx src/SMESHGUI/SMESHGUI_TransparencyDlg.h src/SMESHGUI/SMESHGUI_Utils.cxx src/SMESHGUI/SMESHGUI_Utils.h src/SMESHGUI/SMESHGUI_XmlHandler.cxx src/SMESHGUI/SMESHGUI_XmlHandler.h src/SMESHGUI/SMESHGUI_aParameter.cxx src/SMESHGUI/SMESHGUI_aParameter.h src/SMESHGUI/SMESHGUI_aParameterDlg.cxx src/SMESHGUI/SMESHGUI_aParameterDlg.h src/SMESHGUI/SMESH_icons.po src/SMESHGUI/SMESH_images.po src/SMESHGUI/SMESH_msg_en.po src/SMESH_I/SMESH.hxx src/SMESH_I/SMESHEngine.cxx src/SMESH_I/SMESH_1D_Algo_i.cxx src/SMESH_I/SMESH_1D_Algo_i.hxx src/SMESH_I/SMESH_2D_Algo_i.cxx src/SMESH_I/SMESH_2D_Algo_i.hxx src/SMESH_I/SMESH_3D_Algo_i.cxx src/SMESH_I/SMESH_3D_Algo_i.hxx src/SMESH_I/SMESH_Algo_i.cxx src/SMESH_I/SMESH_Algo_i.hxx src/SMESH_I/SMESH_DumpPython.cxx src/SMESH_I/SMESH_Filter_i.cxx src/SMESH_I/SMESH_Filter_i.hxx src/SMESH_I/SMESH_Gen_i.cxx src/SMESH_I/SMESH_Gen_i.hxx src/SMESH_I/SMESH_Gen_i_1.cxx src/SMESH_I/SMESH_Group_i.cxx src/SMESH_I/SMESH_Group_i.hxx src/SMESH_I/SMESH_Hypothesis_i.cxx src/SMESH_I/SMESH_Hypothesis_i.hxx src/SMESH_I/SMESH_MEDFamily_i.cxx src/SMESH_I/SMESH_MEDFamily_i.hxx src/SMESH_I/SMESH_MEDMesh_i.cxx src/SMESH_I/SMESH_MEDMesh_i.hxx src/SMESH_I/SMESH_MEDSupport_i.cxx src/SMESH_I/SMESH_MEDSupport_i.hxx src/SMESH_I/SMESH_MeshEditor_i.cxx src/SMESH_I/SMESH_MeshEditor_i.hxx src/SMESH_I/SMESH_Mesh_i.cxx src/SMESH_I/SMESH_Mesh_i.hxx src/SMESH_I/SMESH_Pattern_i.cxx src/SMESH_I/SMESH_Pattern_i.hxx src/SMESH_I/SMESH_PythonDump.hxx src/SMESH_I/SMESH_subMesh_i.cxx src/SMESH_I/SMESH_subMesh_i.hxx src/SMESH_I/smeshpy.py src/SMESH_SWIG/Makefile.in src/SMESH_SWIG/PAL_MESH_041_mesh.py src/SMESH_SWIG/PAL_MESH_043_2D.py src/SMESH_SWIG/PAL_MESH_043_3D.py src/SMESH_SWIG/SMESH_BelongToGeom.py src/SMESH_SWIG/SMESH_GroupFromGeom.py src/SMESH_SWIG/SMESH_GroupFromGeom2.py src/SMESH_SWIG/SMESH_GroupLyingOnGeom.py src/SMESH_SWIG/SMESH_Nut.py src/SMESH_SWIG/SMESH_Partition1_tetra.py src/SMESH_SWIG/SMESH_Sphere.py src/SMESH_SWIG/SMESH_blocks.py src/SMESH_SWIG/SMESH_box.py src/SMESH_SWIG/SMESH_box2_tetra.py src/SMESH_SWIG/SMESH_box3_tetra.py src/SMESH_SWIG/SMESH_box_tetra.py src/SMESH_SWIG/SMESH_controls.py src/SMESH_SWIG/SMESH_demo_hexa2_upd.py src/SMESH_SWIG/SMESH_fixation.py src/SMESH_SWIG/SMESH_fixation_hexa.py src/SMESH_SWIG/SMESH_fixation_tetra.py src/SMESH_SWIG/SMESH_flight_skin.py src/SMESH_SWIG/SMESH_freebord.py src/SMESH_SWIG/SMESH_hexaedre.py src/SMESH_SWIG/SMESH_mechanic.py src/SMESH_SWIG/SMESH_mechanic_editor.py src/SMESH_SWIG/SMESH_mechanic_tetra.py src/SMESH_SWIG/SMESH_reg.py src/SMESH_SWIG/SMESH_shared_modules.py src/SMESH_SWIG/SMESH_test.py src/SMESH_SWIG/SMESH_test0.py src/SMESH_SWIG/SMESH_test1.py src/SMESH_SWIG/SMESH_test2.py src/SMESH_SWIG/SMESH_test3.py src/SMESH_SWIG/SMESH_test4.py src/SMESH_SWIG/SMESH_test5.py src/SMESH_SWIG/batchmode_mefisto.py src/SMESH_SWIG/batchmode_smesh.py src/SMESH_SWIG/ex00_all.py src/SMESH_SWIG/ex01_cube2build.py src/SMESH_SWIG/ex02_cube2primitive.py src/SMESH_SWIG/ex03_cube2partition.py src/SMESH_SWIG/ex04_cube5tetraHexa.py src/SMESH_SWIG/ex05_hole1build.py src/SMESH_SWIG/ex06_hole1boolean.py src/SMESH_SWIG/ex07_hole1partition.py src/SMESH_SWIG/ex08_hole2build.py src/SMESH_SWIG/ex09_grid4build.py src/SMESH_SWIG/ex10_grid4geometry.py src/SMESH_SWIG/ex11_grid3partition.py src/SMESH_SWIG/ex12_grid17partition.py src/SMESH_SWIG/ex13_hole1partial.py src/SMESH_SWIG/ex14_cyl1holed.py src/SMESH_SWIG/ex15_cyl2geometry.py src/SMESH_SWIG/ex16_cyl2complementary.py src/SMESH_SWIG/ex17_dome1.py src/SMESH_SWIG/ex18_dome2.py src/SMESH_SWIG/ex19_sphereINcube.py src/SMESH_SWIG/libSMESH_Swig.i src/SMESH_SWIG/smesh.py src/StdMeshers/Makefile.in src/StdMeshers/StdMeshers_Arithmetic1D.cxx src/StdMeshers/StdMeshers_Arithmetic1D.hxx src/StdMeshers/StdMeshers_Deflection1D.cxx src/StdMeshers/StdMeshers_Deflection1D.hxx src/StdMeshers/StdMeshers_Hexa_3D.cxx src/StdMeshers/StdMeshers_Hexa_3D.hxx src/StdMeshers/StdMeshers_LengthFromEdges.cxx src/StdMeshers/StdMeshers_LengthFromEdges.hxx src/StdMeshers/StdMeshers_LocalLength.cxx src/StdMeshers/StdMeshers_LocalLength.hxx src/StdMeshers/StdMeshers_MEFISTO_2D.cxx src/StdMeshers/StdMeshers_MEFISTO_2D.hxx src/StdMeshers/StdMeshers_MaxElementArea.cxx src/StdMeshers/StdMeshers_MaxElementArea.hxx src/StdMeshers/StdMeshers_MaxElementVolume.cxx src/StdMeshers/StdMeshers_MaxElementVolume.hxx src/StdMeshers/StdMeshers_NotConformAllowed.cxx src/StdMeshers/StdMeshers_NotConformAllowed.hxx src/StdMeshers/StdMeshers_NumberOfSegments.cxx src/StdMeshers/StdMeshers_NumberOfSegments.hxx src/StdMeshers/StdMeshers_Penta_3D.cxx src/StdMeshers/StdMeshers_Penta_3D.hxx src/StdMeshers/StdMeshers_Propagation.cxx src/StdMeshers/StdMeshers_Propagation.hxx src/StdMeshers/StdMeshers_Quadrangle_2D.cxx src/StdMeshers/StdMeshers_Quadrangle_2D.hxx src/StdMeshers/StdMeshers_Regular_1D.cxx src/StdMeshers/StdMeshers_Regular_1D.hxx src/StdMeshers/StdMeshers_StartEndLength.cxx src/StdMeshers/StdMeshers_StartEndLength.hxx src/StdMeshersGUI/Makefile.in src/StdMeshersGUI/StdMeshersGUI.cxx src/StdMeshersGUI/StdMeshersGUI_CreateHypothesisDlg.cxx src/StdMeshersGUI/StdMeshersGUI_CreateHypothesisDlg.h src/StdMeshersGUI/StdMeshersGUI_CreateStdHypothesisDlg.cxx src/StdMeshersGUI/StdMeshersGUI_CreateStdHypothesisDlg.h src/StdMeshersGUI/StdMeshersGUI_Parameters.cxx src/StdMeshersGUI/StdMeshersGUI_Parameters.h src/StdMeshersGUI/StdMeshers_icons.po src/StdMeshersGUI/StdMeshers_images.po src/StdMeshersGUI/StdMeshers_msg_en.po src/StdMeshers_I/Makefile.in src/StdMeshers_I/StdMeshers_Arithmetic1D_i.cxx src/StdMeshers_I/StdMeshers_Arithmetic1D_i.hxx src/StdMeshers_I/StdMeshers_Deflection1D_i.cxx src/StdMeshers_I/StdMeshers_Deflection1D_i.hxx src/StdMeshers_I/StdMeshers_Hexa_3D_i.cxx src/StdMeshers_I/StdMeshers_Hexa_3D_i.hxx src/StdMeshers_I/StdMeshers_LengthFromEdges_i.cxx src/StdMeshers_I/StdMeshers_LengthFromEdges_i.hxx src/StdMeshers_I/StdMeshers_LocalLength_i.cxx src/StdMeshers_I/StdMeshers_LocalLength_i.hxx src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.cxx src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.hxx src/StdMeshers_I/StdMeshers_MaxElementArea_i.cxx src/StdMeshers_I/StdMeshers_MaxElementArea_i.hxx src/StdMeshers_I/StdMeshers_MaxElementVolume_i.cxx src/StdMeshers_I/StdMeshers_MaxElementVolume_i.hxx src/StdMeshers_I/StdMeshers_NotConformAllowed_i.cxx src/StdMeshers_I/StdMeshers_NotConformAllowed_i.hxx src/StdMeshers_I/StdMeshers_NumberOfSegments_i.cxx src/StdMeshers_I/StdMeshers_NumberOfSegments_i.hxx src/StdMeshers_I/StdMeshers_Propagation_i.cxx src/StdMeshers_I/StdMeshers_Propagation_i.hxx src/StdMeshers_I/StdMeshers_Quadrangle_2D_i.cxx src/StdMeshers_I/StdMeshers_Quadrangle_2D_i.hxx src/StdMeshers_I/StdMeshers_Regular_1D_i.cxx src/StdMeshers_I/StdMeshers_Regular_1D_i.hxx src/StdMeshers_I/StdMeshers_StartEndLength_i.cxx src/StdMeshers_I/StdMeshers_StartEndLength_i.hxx src/StdMeshers_I/StdMeshers_i.cxx --- ChangeLog | 1811 -- INSTALL | 6 - LICENCE | 504 - Makefile.in | 209 - adm_local/unix/config_files/check_Geom.m4 | 45 - adm_local/unix/config_files/check_Med.m4 | 45 - adm_local/unix/make_commence.in | 252 - adm_local/unix/make_conclude.in | 342 - adm_local/unix/make_omniorb.in | 59 - bin/VERSION | 2 - build_configure | 216 - configure.in.base | 391 - cvs-tags | 35 - doc/Makefile.in | 40 - doc/salome/AddNetgenInSalome2.pdf | Bin 70678 -> 0 bytes doc/salome/AddNetgenInSalome2.ps | 13935 ---------------- doc/salome/AddNetgenInSalome2.sxw | Bin 13363 -> 0 bytes doc/salome/Makefile.in | 44 - doc/salome/PluginMeshers.txt | 188 - doc/salome/SMESH_index.html | 95 - doc/salome/gui/Makefile.in | 33 - doc/salome/gui/SMESH/SMESH.log | 401 - doc/salome/gui/SMESH/cshdat_robohelp.htm | 252 - doc/salome/gui/SMESH/cshdat_webhelp.htm | 251 - doc/salome/gui/SMESH/default.css | 209 - doc/salome/gui/SMESH/default.skn | 262 - doc/salome/gui/SMESH/default_ns.css | 122 - doc/salome/gui/SMESH/ehlpdhtm.js | 4033 ----- doc/salome/gui/SMESH/extrusion.htm | 184 - .../gui/SMESH/files/1d_meshing_algorithm.htm | 125 - .../2d_(quadrangle)_meshing_algorithm.htm | 125 - .../gui/SMESH/files/2d_meshing_algorithm.htm | 125 - .../gui/SMESH/files/3d_meshing_algorithm.htm | 125 - .../gui/SMESH/files/about_hypotheses.htm | 245 - doc/salome/gui/SMESH/files/about_meshes.htm | 274 - .../SMESH/files/about_meshing_algorithms.htm | 212 - .../files/about_modification_of_meshes.htm | 106 - .../SMESH/files/about_quality_controls.htm | 154 - .../SMESH/files/adding_nodes_and_elements.htm | 276 - .../gui/SMESH/files/area_of_elements.htm | 143 - doc/salome/gui/SMESH/files/arithmetic_1d.htm | 164 - doc/salome/gui/SMESH/files/aspect_ratio.htm | 185 - .../changing_orientation_of_elements.htm | 172 - .../gui/SMESH/files/computing_meshes.htm | 128 - doc/salome/gui/SMESH/files/connectivity.htm | 106 - ...nstructing_groups_of_specific_elements.htm | 126 - .../gui/SMESH/files/constructing_meshes.htm | 185 - .../SMESH/files/constructing_submeshes.htm | 196 - .../gui/SMESH/files/creating_groups.htm | 230 - .../gui/SMESH/files/cutting_quadrangles.htm | 215 - doc/salome/gui/SMESH/files/deflection_1d.htm | 171 - .../files/diagonal_iversion_of_elements.htm | 165 - .../gui/SMESH/files/displacing_nodes.htm | 188 - .../files/displaying_elements_numbers.htm | 152 - .../SMESH/files/displaying_nodes_numbers.htm | 152 - doc/salome/gui/SMESH/files/editing_groups.htm | 139 - .../gui/SMESH/files/editing_hypotheses.htm | 153 - .../files/importing_and_exporting_meshes.htm | 150 - .../gui/SMESH/files/introduction_to_smesh.htm | 200 - .../gui/SMESH/files/length_from_edges.htm | 135 - .../gui/SMESH/files/length_of_edges.htm | 140 - .../SMESH/files/local_length_hypothesis.htm | 171 - .../files/max._element_area_hypothesis.htm | 135 - .../files/max._element_volume_hypothsis.htm | 129 - doc/salome/gui/SMESH/files/merging_nodes.htm | 136 - doc/salome/gui/SMESH/files/minimum_angle.htm | 139 - .../non_conform_mesh_allowed_hypothesis.htm | 129 - .../files/number_of_segments_hypothesis.htm | 171 - ...ion_of_1d_hypothesis_on_opposite_edges.htm | 127 - .../reassigning_hypotheses_and_algorithms.htm | 218 - .../files/removing_nodes_and_elements.htm | 244 - .../files/renumbering_nodes_and_elements.htm | 184 - doc/salome/gui/SMESH/files/rotation.htm | 151 - .../gui/SMESH/files/running_smesh_module.htm | 172 - .../gui/SMESH/files/scalar_bar_properties.htm | 106 - doc/salome/gui/SMESH/files/sewing_meshes.htm | 328 - doc/salome/gui/SMESH/files/shading.htm | 109 - doc/salome/gui/SMESH/files/shrink.htm | 109 - doc/salome/gui/SMESH/files/skew.htm | 158 - doc/salome/gui/SMESH/files/smoothing.htm | 217 - .../files/start_and_end_length_hypothesis.htm | 165 - doc/salome/gui/SMESH/files/symmetry.htm | 164 - doc/salome/gui/SMESH/files/taper.htm | 142 - .../tetrahedron_(ghs3d)_meshing_algorithm.htm | 130 - ...tetrahedron_(netgen)_meshing_algorithm.htm | 148 - doc/salome/gui/SMESH/files/translation.htm | 148 - .../files/uniting_a_set_of_triangles.htm | 191 - .../gui/SMESH/files/uniting_two_triangles.htm | 166 - .../files/using_operations_on_groups.htm | 243 - .../gui/SMESH/files/using_smesh_module.htm | 106 - doc/salome/gui/SMESH/files/view_update.htm | 111 - .../gui/SMESH/files/viewing_mesh_info.htm | 152 - .../gui/SMESH/files/visualization_modes.htm | 168 - .../SMESH/files/visualization_properties.htm | 106 - doc/salome/gui/SMESH/files/warp.htm | 171 - doc/salome/gui/SMESH/files/wireframe.htm | 109 - doc/salome/gui/SMESH/i_blue.jpg | Bin 1337 -> 0 bytes doc/salome/gui/SMESH/image10.jpg | Bin 72076 -> 0 bytes doc/salome/gui/SMESH/image11.jpg | Bin 39989 -> 0 bytes doc/salome/gui/SMESH/image12.gif | Bin 983 -> 0 bytes doc/salome/gui/SMESH/image12.jpg | Bin 55339 -> 0 bytes doc/salome/gui/SMESH/image13.gif | Bin 950 -> 0 bytes doc/salome/gui/SMESH/image14.gif | Bin 978 -> 0 bytes doc/salome/gui/SMESH/image15.gif | Bin 998 -> 0 bytes doc/salome/gui/SMESH/image16.gif | Bin 1026 -> 0 bytes doc/salome/gui/SMESH/image16.jpg | Bin 20555 -> 0 bytes doc/salome/gui/SMESH/image17.jpg | Bin 18256 -> 0 bytes doc/salome/gui/SMESH/image18.jpg | Bin 21345 -> 0 bytes doc/salome/gui/SMESH/image2.gif | Bin 30455 -> 0 bytes doc/salome/gui/SMESH/image20.jpg | Bin 32034 -> 0 bytes doc/salome/gui/SMESH/image21.jpg | Bin 38677 -> 0 bytes doc/salome/gui/SMESH/image22.gif | Bin 1287 -> 0 bytes doc/salome/gui/SMESH/image22.jpg | Bin 34642 -> 0 bytes doc/salome/gui/SMESH/image23.jpg | Bin 36428 -> 0 bytes doc/salome/gui/SMESH/image24.gif | Bin 14544 -> 0 bytes doc/salome/gui/SMESH/image24.jpg | Bin 7980 -> 0 bytes doc/salome/gui/SMESH/image25.gif | Bin 6114 -> 0 bytes doc/salome/gui/SMESH/image25.jpg | Bin 1025 -> 0 bytes doc/salome/gui/SMESH/image26.gif | Bin 945 -> 0 bytes doc/salome/gui/SMESH/image26.jpg | Bin 6922 -> 0 bytes doc/salome/gui/SMESH/image27.gif | Bin 4187 -> 0 bytes doc/salome/gui/SMESH/image27.jpg | Bin 15997 -> 0 bytes doc/salome/gui/SMESH/image28.gif | Bin 1137 -> 0 bytes doc/salome/gui/SMESH/image28.jpg | Bin 32873 -> 0 bytes doc/salome/gui/SMESH/image29.gif | Bin 5792 -> 0 bytes doc/salome/gui/SMESH/image29.jpg | Bin 35524 -> 0 bytes doc/salome/gui/SMESH/image3.jpg | Bin 66199 -> 0 bytes doc/salome/gui/SMESH/image30.jpg | Bin 30000 -> 0 bytes doc/salome/gui/SMESH/image31.gif | Bin 5383 -> 0 bytes doc/salome/gui/SMESH/image31.jpg | Bin 29277 -> 0 bytes doc/salome/gui/SMESH/image32.gif | Bin 980 -> 0 bytes doc/salome/gui/SMESH/image32.jpg | Bin 14908 -> 0 bytes doc/salome/gui/SMESH/image33.gif | Bin 987 -> 0 bytes doc/salome/gui/SMESH/image34.gif | Bin 974 -> 0 bytes doc/salome/gui/SMESH/image34.jpg | Bin 22197 -> 0 bytes doc/salome/gui/SMESH/image35.gif | Bin 964 -> 0 bytes doc/salome/gui/SMESH/image35.jpg | Bin 21749 -> 0 bytes doc/salome/gui/SMESH/image36.gif | Bin 987 -> 0 bytes doc/salome/gui/SMESH/image36.jpg | Bin 13508 -> 0 bytes doc/salome/gui/SMESH/image37.gif | Bin 1001 -> 0 bytes doc/salome/gui/SMESH/image38.gif | Bin 970 -> 0 bytes doc/salome/gui/SMESH/image38.jpg | Bin 14183 -> 0 bytes doc/salome/gui/SMESH/image39.gif | Bin 997 -> 0 bytes doc/salome/gui/SMESH/image39.jpg | Bin 17825 -> 0 bytes doc/salome/gui/SMESH/image4.gif | Bin 16550 -> 0 bytes doc/salome/gui/SMESH/image4.jpg | Bin 60769 -> 0 bytes doc/salome/gui/SMESH/image40.gif | Bin 1000 -> 0 bytes doc/salome/gui/SMESH/image40.jpg | Bin 13980 -> 0 bytes doc/salome/gui/SMESH/image41.gif | Bin 2145 -> 0 bytes doc/salome/gui/SMESH/image41.jpg | Bin 34209 -> 0 bytes doc/salome/gui/SMESH/image42.gif | Bin 1087 -> 0 bytes doc/salome/gui/SMESH/image42.jpg | Bin 13176 -> 0 bytes doc/salome/gui/SMESH/image43.gif | Bin 4497 -> 0 bytes doc/salome/gui/SMESH/image43.jpg | Bin 9197 -> 0 bytes doc/salome/gui/SMESH/image44.gif | Bin 4554 -> 0 bytes doc/salome/gui/SMESH/image44.jpg | Bin 14292 -> 0 bytes doc/salome/gui/SMESH/image45.gif | Bin 1077 -> 0 bytes doc/salome/gui/SMESH/image45.jpg | Bin 19039 -> 0 bytes doc/salome/gui/SMESH/image46.gif | Bin 2274 -> 0 bytes doc/salome/gui/SMESH/image46.jpg | Bin 16104 -> 0 bytes doc/salome/gui/SMESH/image47.gif | Bin 1040 -> 0 bytes doc/salome/gui/SMESH/image47.jpg | Bin 18787 -> 0 bytes doc/salome/gui/SMESH/image48.gif | Bin 4473 -> 0 bytes doc/salome/gui/SMESH/image48.jpg | Bin 14192 -> 0 bytes doc/salome/gui/SMESH/image49.gif | Bin 4423 -> 0 bytes doc/salome/gui/SMESH/image49.jpg | Bin 25380 -> 0 bytes doc/salome/gui/SMESH/image50.gif | Bin 995 -> 0 bytes doc/salome/gui/SMESH/image50.jpg | Bin 27180 -> 0 bytes doc/salome/gui/SMESH/image51.gif | Bin 1068 -> 0 bytes doc/salome/gui/SMESH/image51.jpg | Bin 22124 -> 0 bytes doc/salome/gui/SMESH/image52.gif | Bin 990 -> 0 bytes doc/salome/gui/SMESH/image52.jpg | Bin 22197 -> 0 bytes doc/salome/gui/SMESH/image53.gif | Bin 990 -> 0 bytes doc/salome/gui/SMESH/image53.jpg | Bin 21043 -> 0 bytes doc/salome/gui/SMESH/image54.jpg | Bin 32186 -> 0 bytes doc/salome/gui/SMESH/image55.gif | Bin 1040 -> 0 bytes doc/salome/gui/SMESH/image55.jpg | Bin 18872 -> 0 bytes doc/salome/gui/SMESH/image56.gif | Bin 1044 -> 0 bytes doc/salome/gui/SMESH/image57.gif | Bin 11122 -> 0 bytes doc/salome/gui/SMESH/image57.jpg | Bin 17172 -> 0 bytes doc/salome/gui/SMESH/image58.jpg | Bin 20235 -> 0 bytes doc/salome/gui/SMESH/image59.jpg | Bin 19842 -> 0 bytes doc/salome/gui/SMESH/image6.gif | Bin 15409 -> 0 bytes doc/salome/gui/SMESH/image6.jpg | Bin 71431 -> 0 bytes doc/salome/gui/SMESH/image60.jpg | Bin 8061 -> 0 bytes doc/salome/gui/SMESH/image61.gif | Bin 2241 -> 0 bytes doc/salome/gui/SMESH/image61.jpg | Bin 10055 -> 0 bytes doc/salome/gui/SMESH/image62.jpg | Bin 10571 -> 0 bytes doc/salome/gui/SMESH/image63.gif | Bin 929 -> 0 bytes doc/salome/gui/SMESH/image63.jpg | Bin 12348 -> 0 bytes doc/salome/gui/SMESH/image64.gif | Bin 954 -> 0 bytes doc/salome/gui/SMESH/image64.jpg | Bin 11306 -> 0 bytes doc/salome/gui/SMESH/image65.gif | Bin 5679 -> 0 bytes doc/salome/gui/SMESH/image65.jpg | Bin 9630 -> 0 bytes doc/salome/gui/SMESH/image66.gif | Bin 5260 -> 0 bytes doc/salome/gui/SMESH/image66.jpg | Bin 11280 -> 0 bytes doc/salome/gui/SMESH/image67.gif | Bin 945 -> 0 bytes doc/salome/gui/SMESH/image67.jpg | Bin 12193 -> 0 bytes doc/salome/gui/SMESH/image68.gif | Bin 6133 -> 0 bytes doc/salome/gui/SMESH/image68.jpg | Bin 11843 -> 0 bytes doc/salome/gui/SMESH/image69.gif | Bin 4706 -> 0 bytes doc/salome/gui/SMESH/image69.jpg | Bin 12705 -> 0 bytes doc/salome/gui/SMESH/image7.gif | Bin 1047 -> 0 bytes doc/salome/gui/SMESH/image7.jpg | Bin 72829 -> 0 bytes doc/salome/gui/SMESH/image70.gif | Bin 979 -> 0 bytes doc/salome/gui/SMESH/image70.jpg | Bin 12029 -> 0 bytes doc/salome/gui/SMESH/image71.gif | Bin 988 -> 0 bytes doc/salome/gui/SMESH/image71.jpg | Bin 11550 -> 0 bytes doc/salome/gui/SMESH/image72.gif | Bin 4721 -> 0 bytes doc/salome/gui/SMESH/image72.jpg | Bin 24132 -> 0 bytes doc/salome/gui/SMESH/image73.gif | Bin 2977 -> 0 bytes doc/salome/gui/SMESH/image73.jpg | Bin 20374 -> 0 bytes doc/salome/gui/SMESH/image74.gif | Bin 987 -> 0 bytes doc/salome/gui/SMESH/image74.jpg | Bin 25111 -> 0 bytes doc/salome/gui/SMESH/image75.gif | Bin 5735 -> 0 bytes doc/salome/gui/SMESH/image75.jpg | Bin 24687 -> 0 bytes doc/salome/gui/SMESH/image76.gif | Bin 5694 -> 0 bytes doc/salome/gui/SMESH/image76.jpg | Bin 22981 -> 0 bytes doc/salome/gui/SMESH/image77.gif | Bin 5632 -> 0 bytes doc/salome/gui/SMESH/image77.jpg | Bin 26424 -> 0 bytes doc/salome/gui/SMESH/image78.gif | Bin 8236 -> 0 bytes doc/salome/gui/SMESH/image78.jpg | Bin 25224 -> 0 bytes doc/salome/gui/SMESH/image79.gif | Bin 956 -> 0 bytes doc/salome/gui/SMESH/image8.gif | Bin 998 -> 0 bytes doc/salome/gui/SMESH/image8.jpg | Bin 69191 -> 0 bytes doc/salome/gui/SMESH/image80.gif | Bin 977 -> 0 bytes doc/salome/gui/SMESH/image80.jpg | Bin 20488 -> 0 bytes doc/salome/gui/SMESH/image81.gif | Bin 8606 -> 0 bytes doc/salome/gui/SMESH/image81.jpg | Bin 15777 -> 0 bytes doc/salome/gui/SMESH/image82.gif | Bin 984 -> 0 bytes doc/salome/gui/SMESH/image82.jpg | Bin 13186 -> 0 bytes doc/salome/gui/SMESH/image83.gif | Bin 4552 -> 0 bytes doc/salome/gui/SMESH/image84.gif | Bin 956 -> 0 bytes doc/salome/gui/SMESH/image85.gif | Bin 10574 -> 0 bytes doc/salome/gui/SMESH/image87.gif | Bin 4901 -> 0 bytes doc/salome/gui/SMESH/image88.gif | Bin 942 -> 0 bytes doc/salome/gui/SMESH/image89.gif | Bin 5212 -> 0 bytes doc/salome/gui/SMESH/image9.gif | Bin 30034 -> 0 bytes doc/salome/gui/SMESH/image9.jpg | Bin 69575 -> 0 bytes doc/salome/gui/SMESH/image90.gif | Bin 9562 -> 0 bytes doc/salome/gui/SMESH/image91.gif | Bin 975 -> 0 bytes doc/salome/gui/SMESH/image92.gif | Bin 984 -> 0 bytes doc/salome/gui/SMESH/image93.gif | Bin 14366 -> 0 bytes doc/salome/gui/SMESH/image94.gif | Bin 5678 -> 0 bytes doc/salome/gui/SMESH/image95.gif | Bin 3941 -> 0 bytes doc/salome/gui/SMESH/image96.gif | Bin 4286 -> 0 bytes doc/salome/gui/SMESH/image97.gif | Bin 6203 -> 0 bytes doc/salome/gui/SMESH/image98.gif | Bin 965 -> 0 bytes doc/salome/gui/SMESH/note1.gif | Bin 1505 -> 0 bytes doc/salome/gui/SMESH/pattern_mapping.htm | 307 - doc/salome/gui/SMESH/pics/exemple.gif | Bin 1340 -> 0 bytes doc/salome/gui/SMESH/pics/new.jpg | Bin 957 -> 0 bytes doc/salome/gui/SMESH/revolution.htm | 171 - doc/salome/gui/SMESH/smesh.htm | 150 - doc/salome/gui/SMESH/smesh.html | 150 - doc/salome/gui/SMESH/smesh_csh.htm | 100 - doc/salome/gui/SMESH/smesh_csh.html | 100 - doc/salome/gui/SMESH/smesh_rhc.htm | 100 - doc/salome/gui/SMESH/smesh_rhc.html | 100 - .../tetrahedron_(ghs3d)_meshing_algorithm.htm | 132 - .../gui/SMESH/texture_horiz_ltbluebubbles.jpg | Bin 1255 -> 0 bytes doc/salome/gui/SMESH/webhelp.cab | Bin 87764 -> 0 bytes doc/salome/gui/SMESH/webhelp.jar | Bin 132680 -> 0 bytes doc/salome/gui/SMESH/whdata/whftdata.js | 24 - doc/salome/gui/SMESH/whdata/whftdata0.htm | 83 - doc/salome/gui/SMESH/whdata/whftdata0.xml | 71 - doc/salome/gui/SMESH/whdata/whfts.htm | 16 - doc/salome/gui/SMESH/whdata/whfts.js | 39 - doc/salome/gui/SMESH/whdata/whfts.xml | 7 - doc/salome/gui/SMESH/whdata/whfwdata.js | 36 - doc/salome/gui/SMESH/whdata/whfwdata0.htm | 610 - doc/salome/gui/SMESH/whdata/whfwdata0.xml | 598 - doc/salome/gui/SMESH/whdata/whgdata.js | 25 - doc/salome/gui/SMESH/whdata/whgdata0.htm | 31 - doc/salome/gui/SMESH/whdata/whgdata0.xml | 22 - doc/salome/gui/SMESH/whdata/whglo.htm | 14 - doc/salome/gui/SMESH/whdata/whglo.js | 33 - doc/salome/gui/SMESH/whdata/whglo.xml | 5 - doc/salome/gui/SMESH/whdata/whidata.js | 88 - doc/salome/gui/SMESH/whdata/whidx.htm | 13 - doc/salome/gui/SMESH/whdata/whidx.js | 33 - doc/salome/gui/SMESH/whdata/whidx.xml | 4 - doc/salome/gui/SMESH/whdata/whtdata.js | 58 - doc/salome/gui/SMESH/whdata/whtdata0.htm | 86 - doc/salome/gui/SMESH/whdata/whtdata0.xml | 90 - doc/salome/gui/SMESH/whdata/whtoc.htm | 14 - doc/salome/gui/SMESH/whdata/whtoc.js | 28 - doc/salome/gui/SMESH/whdata/whtoc.xml | 4 - doc/salome/gui/SMESH/whestart.ico | Bin 10134 -> 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 | 916 - doc/salome/gui/SMESH/whform.js | 215 - doc/salome/gui/SMESH/whframes.js | 78 - doc/salome/gui/SMESH/whgbody.htm | 35 - doc/salome/gui/SMESH/whgdata/whexpbar.gif | Bin 67 -> 0 bytes doc/salome/gui/SMESH/whgdata/whlstf0.htm | 46 - doc/salome/gui/SMESH/whgdata/whlstf1.htm | 43 - doc/salome/gui/SMESH/whgdata/whlstf2.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstf3.htm | 49 - doc/salome/gui/SMESH/whgdata/whlstf4.htm | 51 - doc/salome/gui/SMESH/whgdata/whlstf5.htm | 49 - doc/salome/gui/SMESH/whgdata/whlstf6.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstf7.htm | 52 - doc/salome/gui/SMESH/whgdata/whlstfl0.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl1.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl10.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl11.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl12.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl13.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl14.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl15.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl16.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl17.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl18.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl19.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl2.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl20.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl21.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl22.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl23.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl3.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl4.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl5.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl6.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl7.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl8.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstfl9.htm | 45 - doc/salome/gui/SMESH/whgdata/whlstg0.htm | 112 - doc/salome/gui/SMESH/whgdata/whlsti0.htm | 38 - doc/salome/gui/SMESH/whgdata/whlstt0.htm | 50 - doc/salome/gui/SMESH/whgdata/whlstt1.htm | 58 - doc/salome/gui/SMESH/whgdata/whlstt10.htm | 62 - doc/salome/gui/SMESH/whgdata/whlstt11.htm | 72 - doc/salome/gui/SMESH/whgdata/whlstt12.htm | 77 - doc/salome/gui/SMESH/whgdata/whlstt13.htm | 61 - doc/salome/gui/SMESH/whgdata/whlstt2.htm | 65 - doc/salome/gui/SMESH/whgdata/whlstt3.htm | 76 - doc/salome/gui/SMESH/whgdata/whlstt4.htm | 69 - doc/salome/gui/SMESH/whgdata/whlstt5.htm | 70 - doc/salome/gui/SMESH/whgdata/whlstt6.htm | 71 - doc/salome/gui/SMESH/whgdata/whlstt7.htm | 72 - doc/salome/gui/SMESH/whgdata/whlstt8.htm | 60 - doc/salome/gui/SMESH/whgdata/whlstt9.htm | 66 - doc/salome/gui/SMESH/whgdata/whnvf30.htm | 12 - doc/salome/gui/SMESH/whgdata/whnvf31.htm | 14 - doc/salome/gui/SMESH/whgdata/whnvf32.htm | 14 - doc/salome/gui/SMESH/whgdata/whnvf33.htm | 14 - doc/salome/gui/SMESH/whgdata/whnvl31.htm | 42 - doc/salome/gui/SMESH/whgdata/whnvl32.htm | 71 - doc/salome/gui/SMESH/whgdata/whnvl33.htm | 71 - doc/salome/gui/SMESH/whgdata/whnvp30.htm | 14 - doc/salome/gui/SMESH/whgdata/whnvp31.htm | 14 - doc/salome/gui/SMESH/whgdata/whnvp32.htm | 15 - doc/salome/gui/SMESH/whgdata/whnvp33.htm | 14 - doc/salome/gui/SMESH/whgdata/whnvt30.htm | 46 - doc/salome/gui/SMESH/whgdata/whnvt31.htm | 44 - doc/salome/gui/SMESH/whgdata/whnvt32.htm | 44 - doc/salome/gui/SMESH/whgdata/whnvt33.htm | 44 - doc/salome/gui/SMESH/whgdef.htm | 98 - doc/salome/gui/SMESH/whgdhtml.htm | 150 - doc/salome/gui/SMESH/whghost.js | 217 - doc/salome/gui/SMESH/whhost.js | 1290 -- doc/salome/gui/SMESH/whibody.htm | 288 - doc/salome/gui/SMESH/whidhtml.htm | 30 - doc/salome/gui/SMESH/whiform.htm | 91 - doc/salome/gui/SMESH/whihost.js | 432 - doc/salome/gui/SMESH/whlang.js | 452 - doc/salome/gui/SMESH/whmozemu.js | 68 - doc/salome/gui/SMESH/whmsg.js | 64 - doc/salome/gui/SMESH/whnjs.htm | 15 - doc/salome/gui/SMESH/whphost.js | 526 - doc/salome/gui/SMESH/whproj.htm | 24 - doc/salome/gui/SMESH/whproj.js | 82 - doc/salome/gui/SMESH/whproj.xml | 3 - doc/salome/gui/SMESH/whproxy.js | 63 - doc/salome/gui/SMESH/whres.xml | 239 - doc/salome/gui/SMESH/whrstart.ico | Bin 10134 -> 0 bytes doc/salome/gui/SMESH/whskin_banner.htm | 41 - doc/salome/gui/SMESH/whskin_blank.htm | 10 - doc/salome/gui/SMESH/whskin_frmset01.htm | 172 - doc/salome/gui/SMESH/whskin_frmset010.htm | 50 - doc/salome/gui/SMESH/whskin_info.htm | 20 - doc/salome/gui/SMESH/whskin_mbars.htm | 56 - doc/salome/gui/SMESH/whskin_papplet.htm | 357 - doc/salome/gui/SMESH/whskin_pdhtml.htm | 57 - doc/salome/gui/SMESH/whskin_plist.htm | 204 - doc/salome/gui/SMESH/whskin_tbars.htm | 98 - doc/salome/gui/SMESH/whst_topics.xml | 81 - doc/salome/gui/SMESH/whstart.ico | Bin 10134 -> 0 bytes doc/salome/gui/SMESH/whstart.js | 244 - doc/salome/gui/SMESH/whstub.js | 156 - doc/salome/gui/SMESH/wht_abge.jpg | Bin 23356 -> 0 bytes doc/salome/gui/SMESH/wht_abgi.jpg | Bin 24385 -> 0 bytes doc/salome/gui/SMESH/wht_abgw.jpg | Bin 22665 -> 0 bytes doc/salome/gui/SMESH/wht_abte.jpg | Bin 8785 -> 0 bytes doc/salome/gui/SMESH/wht_abti.jpg | Bin 6985 -> 0 bytes doc/salome/gui/SMESH/wht_abtw.jpg | Bin 7382 -> 0 bytes doc/salome/gui/SMESH/wht_fts_h.gif | Bin 188 -> 0 bytes doc/salome/gui/SMESH/wht_fts_n.gif | Bin 188 -> 0 bytes doc/salome/gui/SMESH/wht_glo_h.gif | Bin 142 -> 0 bytes doc/salome/gui/SMESH/wht_glo_n.gif | Bin 142 -> 0 bytes doc/salome/gui/SMESH/wht_go.gif | Bin 260 -> 0 bytes doc/salome/gui/SMESH/wht_hide.gif | Bin 842 -> 0 bytes doc/salome/gui/SMESH/wht_idx_h.gif | Bin 168 -> 0 bytes doc/salome/gui/SMESH/wht_idx_n.gif | Bin 168 -> 0 bytes doc/salome/gui/SMESH/wht_logo1.gif | Bin 1405 -> 0 bytes doc/salome/gui/SMESH/wht_logo2.gif | Bin 1393 -> 0 bytes doc/salome/gui/SMESH/wht_next.gif | Bin 73 -> 0 bytes doc/salome/gui/SMESH/wht_next_g.gif | Bin 73 -> 0 bytes doc/salome/gui/SMESH/wht_prev.gif | Bin 73 -> 0 bytes doc/salome/gui/SMESH/wht_prev_g.gif | Bin 73 -> 0 bytes doc/salome/gui/SMESH/wht_spac.gif | Bin 43 -> 0 bytes doc/salome/gui/SMESH/wht_sync.gif | Bin 846 -> 0 bytes doc/salome/gui/SMESH/wht_tab0.gif | Bin 285 -> 0 bytes doc/salome/gui/SMESH/wht_tab1.gif | Bin 237 -> 0 bytes doc/salome/gui/SMESH/wht_tab2.gif | Bin 226 -> 0 bytes doc/salome/gui/SMESH/wht_tab3.gif | Bin 209 -> 0 bytes doc/salome/gui/SMESH/wht_tab4.gif | Bin 198 -> 0 bytes doc/salome/gui/SMESH/wht_tab5.gif | Bin 221 -> 0 bytes doc/salome/gui/SMESH/wht_tab6.gif | Bin 212 -> 0 bytes doc/salome/gui/SMESH/wht_tab7.gif | Bin 236 -> 0 bytes doc/salome/gui/SMESH/wht_tab8.gif | Bin 225 -> 0 bytes doc/salome/gui/SMESH/wht_toc1.gif | Bin 124 -> 0 bytes doc/salome/gui/SMESH/wht_toc2.gif | Bin 922 -> 0 bytes doc/salome/gui/SMESH/wht_toc3.gif | Bin 911 -> 0 bytes doc/salome/gui/SMESH/wht_toc4.gif | Bin 953 -> 0 bytes doc/salome/gui/SMESH/wht_toc_h.gif | Bin 204 -> 0 bytes doc/salome/gui/SMESH/wht_toc_n.gif | Bin 195 -> 0 bytes doc/salome/gui/SMESH/wht_ws.gif | Bin 973 -> 0 bytes doc/salome/gui/SMESH/wht_ws_g.gif | Bin 949 -> 0 bytes doc/salome/gui/SMESH/whtbar.js | 1990 --- doc/salome/gui/SMESH/whtdhtml.htm | 49 - doc/salome/gui/SMESH/whthost.js | 1372 -- doc/salome/gui/SMESH/whtopic.js | 662 - doc/salome/gui/SMESH/whutils.js | 463 - doc/salome/gui/SMESH/whver.js | 54 - doc/salome/tui/Makefile.in | 58 - .../tui/SMESH/HTML/SMESH_BasicHypothesis.html | 186 - doc/salome/tui/SMESH/HTML/SMESH_Gen.html | 58 - .../tui/SMESH/HTML/SMESH_Hypothesis.html | 58 - doc/salome/tui/SMESH/HTML/SMESH_Mesh.html | 306 - doc/salome/tui/SMESH/doxyfile | 203 - doc/salome/tui/SMESH/doxyfile_py | 200 - .../tui/SMESH/sources/Application-About.png | Bin 19226 -> 0 bytes .../tui/SMESH/sources/Application-About1.jpg | Bin 14327 -> 0 bytes doc/salome/tui/SMESH/sources/application.gif | Bin 2602 -> 0 bytes doc/salome/tui/SMESH/sources/application.jpg | Bin 792 -> 0 bytes doc/salome/tui/SMESH/sources/bg_salome.gif | Bin 17294 -> 0 bytes doc/salome/tui/SMESH/sources/logocorp.gif | Bin 1792 -> 0 bytes doc/salome/tui/SMESH/sources/myheader.html | 24 - .../tui/SMESH/sources/myheader_py2.html | 24 - doc/salome/tui/SMESH/sources/occ.gif | Bin 14790 -> 0 bytes .../SMESH/sources/static/PluginMeshers.html | 344 - .../tui/SMESH/sources/static/doxygen.css | 49 - .../tui/SMESH/sources/static/page2.html | 50 - doc/salome/tui/SMESH/sources/static/tree.js | 29 - .../tui/SMESH/sources/static/treeview.js | 505 - idl/Makefile.in | 74 - idl/SMESH_BasicHypothesis.idl | 284 - idl/SMESH_Filter.idl | 435 - idl/SMESH_Gen.idl | 143 - idl/SMESH_Group.idl | 123 - idl/SMESH_Hypothesis.idl | 102 - idl/SMESH_Mesh.idl | 773 - idl/SMESH_Pattern.idl | 189 - resources/ModuleMesh.png | Bin 2629 -> 0 bytes resources/SMESH.config | 2 - resources/SMESHCatalog.xml | 170 - resources/SMESH_en.xml | 483 - resources/SMESH_fr.xml | 262 - resources/StdMeshers.xml | 109 - resources/advanced_mesh_info.png | Bin 372 -> 0 bytes resources/delete.png | Bin 943 -> 0 bytes resources/flight_solid.brep | 13835 --------------- resources/mesh.png | Bin 319 -> 0 bytes resources/mesh_add.png | Bin 459 -> 0 bytes resources/mesh_add_sub.png | Bin 408 -> 0 bytes resources/mesh_algo_hexa.png | Bin 371 -> 0 bytes resources/mesh_algo_mefisto.png | Bin 556 -> 0 bytes resources/mesh_algo_netgen.png | Bin 371 -> 0 bytes resources/mesh_algo_quad.png | Bin 493 -> 0 bytes resources/mesh_algo_regular.png | Bin 581 -> 0 bytes resources/mesh_algo_tetra.png | Bin 616 -> 0 bytes resources/mesh_angle.png | Bin 369 -> 0 bytes resources/mesh_area.png | Bin 340 -> 0 bytes resources/mesh_aspect.png | Bin 419 -> 0 bytes resources/mesh_aspect_3d.png | Bin 482 -> 0 bytes resources/mesh_compute.png | Bin 826 -> 0 bytes resources/mesh_connectivity.png | Bin 346 -> 0 bytes resources/mesh_cutGroups.png | Bin 340 -> 0 bytes resources/mesh_cutquad.png | Bin 417 -> 0 bytes resources/mesh_deleteGroups.png | Bin 212 -> 0 bytes resources/mesh_diagonal.png | Bin 435 -> 0 bytes resources/mesh_edit.png | Bin 547 -> 0 bytes resources/mesh_edit_group.png | Bin 543 -> 0 bytes resources/mesh_extrusion.png | Bin 427 -> 0 bytes resources/mesh_extrusionpath.png | Bin 389 -> 0 bytes resources/mesh_free_edges.png | Bin 489 -> 0 bytes resources/mesh_free_edges_2d.png | Bin 501 -> 0 bytes resources/mesh_hexa.png | Bin 296 -> 0 bytes resources/mesh_hexa_n.png | Bin 681 -> 0 bytes resources/mesh_hypo_area.png | Bin 536 -> 0 bytes resources/mesh_hypo_edit.png | Bin 914 -> 0 bytes resources/mesh_hypo_length.png | Bin 641 -> 0 bytes resources/mesh_hypo_segment.png | Bin 610 -> 0 bytes resources/mesh_hypo_volume.png | Bin 376 -> 0 bytes resources/mesh_info.png | Bin 254 -> 0 bytes resources/mesh_init.png | Bin 420 -> 0 bytes resources/mesh_intersectGroups.png | Bin 324 -> 0 bytes resources/mesh_length.png | Bin 342 -> 0 bytes resources/mesh_length_2d.png | Bin 461 -> 0 bytes resources/mesh_line.png | Bin 164 -> 0 bytes resources/mesh_line_n.png | Bin 363 -> 0 bytes resources/mesh_make_group.png | Bin 432 -> 0 bytes resources/mesh_merge_elements.png | Bin 258 -> 0 bytes resources/mesh_merge_nodes.png | Bin 560 -> 0 bytes resources/mesh_move_node.png | Bin 285 -> 0 bytes resources/mesh_multi_edges.png | Bin 480 -> 0 bytes resources/mesh_multi_edges_2d.png | Bin 508 -> 0 bytes resources/mesh_orientation.png | Bin 351 -> 0 bytes resources/mesh_pattern.png | Bin 292 -> 0 bytes resources/mesh_points.png | Bin 499 -> 0 bytes resources/mesh_polygon.png | Bin 231 -> 0 bytes resources/mesh_polyhedron.png | Bin 400 -> 0 bytes resources/mesh_pyramid.png | Bin 278 -> 0 bytes resources/mesh_pyramid_n.png | Bin 621 -> 0 bytes resources/mesh_quad.png | Bin 214 -> 0 bytes resources/mesh_quad_n.png | Bin 512 -> 0 bytes resources/mesh_rem_element.png | Bin 313 -> 0 bytes resources/mesh_rem_node.png | Bin 225 -> 0 bytes resources/mesh_remove.png | Bin 386 -> 0 bytes resources/mesh_renumbering_elements.png | Bin 346 -> 0 bytes resources/mesh_renumbering_nodes.png | Bin 388 -> 0 bytes resources/mesh_revolution.png | Bin 450 -> 0 bytes resources/mesh_rotation.png | Bin 646 -> 0 bytes resources/mesh_set_algo.png | Bin 263 -> 0 bytes resources/mesh_set_hypo.png | Bin 235 -> 0 bytes resources/mesh_sew_bordertoside.png | Bin 359 -> 0 bytes resources/mesh_sew_conform_freeborders.png | Bin 419 -> 0 bytes resources/mesh_sew_freeborders.png | Bin 412 -> 0 bytes resources/mesh_sew_sideelements.png | Bin 295 -> 0 bytes resources/mesh_shading.png | Bin 352 -> 0 bytes resources/mesh_shrink.png | Bin 483 -> 0 bytes resources/mesh_skew.png | Bin 351 -> 0 bytes resources/mesh_smoothing.png | Bin 416 -> 0 bytes resources/mesh_symmetry_axis.png | Bin 430 -> 0 bytes resources/mesh_symmetry_plane.png | Bin 426 -> 0 bytes resources/mesh_symmetry_point.png | Bin 430 -> 0 bytes resources/mesh_taper.png | Bin 393 -> 0 bytes resources/mesh_tetra.png | Bin 267 -> 0 bytes resources/mesh_tetra_n.png | Bin 585 -> 0 bytes resources/mesh_translation_points.png | Bin 469 -> 0 bytes resources/mesh_translation_vector.png | Bin 458 -> 0 bytes resources/mesh_tree_algo.png | Bin 169 -> 0 bytes resources/mesh_tree_algo_hexa.png | Bin 148 -> 0 bytes resources/mesh_tree_algo_mefisto.png | Bin 182 -> 0 bytes resources/mesh_tree_algo_netgen.png | Bin 148 -> 0 bytes resources/mesh_tree_algo_quad.png | Bin 161 -> 0 bytes resources/mesh_tree_algo_regular.png | Bin 134 -> 0 bytes resources/mesh_tree_algo_tetra.png | Bin 281 -> 0 bytes resources/mesh_tree_group.png | Bin 411 -> 0 bytes resources/mesh_tree_hypo.png | Bin 153 -> 0 bytes resources/mesh_tree_hypo_area.png | Bin 163 -> 0 bytes resources/mesh_tree_hypo_length.png | Bin 153 -> 0 bytes resources/mesh_tree_hypo_segment.png | Bin 142 -> 0 bytes resources/mesh_tree_hypo_volume.png | Bin 159 -> 0 bytes resources/mesh_tree_importedmesh.png | Bin 912 -> 0 bytes resources/mesh_tree_mesh.png | Bin 186 -> 0 bytes resources/mesh_tree_mesh_warn.png | Bin 166 -> 0 bytes resources/mesh_triangle.png | Bin 215 -> 0 bytes resources/mesh_triangle_n.png | Bin 446 -> 0 bytes resources/mesh_union2tri.png | Bin 504 -> 0 bytes resources/mesh_unionGroups.png | Bin 425 -> 0 bytes resources/mesh_uniontri.png | Bin 417 -> 0 bytes resources/mesh_update.png | Bin 554 -> 0 bytes resources/mesh_vertex.png | Bin 104 -> 0 bytes resources/mesh_vertex_n.png | Bin 235 -> 0 bytes resources/mesh_wireframe.png | Bin 322 -> 0 bytes resources/mesh_wrap.png | Bin 454 -> 0 bytes resources/pattern_sample_2d.png | Bin 1180 -> 0 bytes resources/pattern_sample_3D.png | Bin 2160 -> 0 bytes resources/select1.png | Bin 976 -> 0 bytes resources/standard_mesh_info.png | Bin 355 -> 0 bytes src/Controls/Makefile.in | 52 - src/Controls/SMESHControls.cxx | 45 - src/Controls/SMESH_Controls.cxx | 2332 --- src/Controls/SMESH_Controls.hxx | 43 - src/Controls/SMESH_ControlsDef.hxx | 639 - src/Driver/Driver_Document.cxx | 36 - src/Driver/Driver_Document.h | 44 - src/Driver/Driver_Mesh.cxx | 46 - src/Driver/Driver_Mesh.h | 57 - src/Driver/Driver_SMDS_Mesh.cxx | 31 - src/Driver/Driver_SMDS_Mesh.h | 38 - src/Driver/Driver_SMESHDS_Mesh.cxx | 31 - src/Driver/Driver_SMESHDS_Mesh.h | 38 - src/Driver/Makefile.in | 60 - src/DriverDAT/DAT_Test.cxx | 28 - src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx | 170 - src/DriverDAT/DriverDAT_R_SMDS_Mesh.h | 31 - .../DriverDAT_R_SMESHDS_Document.cxx | 20 - src/DriverDAT/DriverDAT_R_SMESHDS_Document.h | 28 - src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.cxx | 20 - src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.h | 28 - src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx | 144 - src/DriverDAT/DriverDAT_W_SMDS_Mesh.h | 38 - .../DriverDAT_W_SMESHDS_Document.cxx | 20 - src/DriverDAT/DriverDAT_W_SMESHDS_Document.h | 28 - src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.cxx | 20 - src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.h | 35 - src/DriverDAT/Makefile.in | 61 - src/DriverMED/DriverMED_Family.cxx | 390 - src/DriverMED/DriverMED_Family.h | 120 - src/DriverMED/DriverMED_R_SMDS_Mesh.cxx | 20 - src/DriverMED/DriverMED_R_SMDS_Mesh.h | 28 - .../DriverMED_R_SMESHDS_Document.cxx | 20 - src/DriverMED/DriverMED_R_SMESHDS_Document.h | 28 - src/DriverMED/DriverMED_R_SMESHDS_Mesh.h | 58 - src/DriverMED/DriverMED_W_SMDS_Mesh.cxx | 20 - src/DriverMED/DriverMED_W_SMDS_Mesh.h | 28 - .../DriverMED_W_SMESHDS_Document.cxx | 27 - src/DriverMED/DriverMED_W_SMESHDS_Document.h | 28 - src/DriverMED/DriverMED_W_SMESHDS_Mesh.h | 83 - src/DriverMED/MED_Test.cxx | 28 - src/DriverMED/Makefile.in | 71 - src/DriverSTL/DriverSTL_R_SMDS_Mesh.cxx | 343 - src/DriverSTL/DriverSTL_R_SMDS_Mesh.h | 45 - src/DriverSTL/DriverSTL_W_SMDS_Mesh.cxx | 261 - src/DriverSTL/DriverSTL_W_SMDS_Mesh.h | 51 - src/DriverSTL/Makefile.in | 61 - src/DriverSTL/STL_Test.cxx | 28 - src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx | 153 - src/DriverUNV/DriverUNV_R_SMDS_Mesh.h | 33 - .../DriverUNV_R_SMESHDS_Document.cxx | 20 - src/DriverUNV/DriverUNV_R_SMESHDS_Document.h | 28 - src/DriverUNV/DriverUNV_R_SMESHDS_Mesh.cxx | 20 - src/DriverUNV/DriverUNV_R_SMESHDS_Mesh.h | 28 - src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx | 186 - src/DriverUNV/DriverUNV_W_SMDS_Mesh.h | 32 - .../DriverUNV_W_SMESHDS_Document.cxx | 20 - src/DriverUNV/DriverUNV_W_SMESHDS_Document.h | 28 - src/DriverUNV/DriverUNV_W_SMESHDS_Mesh.cxx | 20 - src/DriverUNV/DriverUNV_W_SMESHDS_Mesh.h | 28 - src/DriverUNV/Makefile.in | 73 - src/DriverUNV/UNV2411_Structure.cxx | 124 - src/DriverUNV/UNV2411_Structure.hxx | 46 - src/DriverUNV/UNV2412_Structure.cxx | 203 - src/DriverUNV/UNV2412_Structure.hxx | 61 - src/DriverUNV/UNV_Test.cxx | 69 - src/DriverUNV/UNV_Utilities.cxx | 37 - src/DriverUNV/UNV_Utilities.hxx | 104 - src/MEFISTO2/Makefile.in | 32 - src/MEFISTO2/Rn.h | 230 - src/MEFISTO2/aptrte.cxx | 786 - src/MEFISTO2/aptrte.h | 255 - src/MEFISTO2/areteideale.f | 30 - src/MEFISTO2/trte.f | 8332 --------- src/Makefile.in | 39 - src/NETGEN/Makefile.in | 152 - src/NETGEN/ReadMeForNgUsers | 102 - src/NETGEN/netgen43ForSalome.patch | 221 - src/NETGENPlugin/Makefile.in | 67 - src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx | 1064 -- src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx | 43 - src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.cxx | 85 - src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.hxx | 58 - src/NETGENPlugin/NETGENPlugin_i.cxx | 60 - src/NETGENPlugin/NETGENPlugin_icons.po | 20 - src/OBJECT/Makefile.in | 58 - src/OBJECT/SMESH_Actor.cxx | 25 +- src/OBJECT/SMESH_Actor.h | 121 - src/OBJECT/SMESH_ActorDef.h | 277 - src/OBJECT/SMESH_ActorUtils.cxx | 101 - src/OBJECT/SMESH_ActorUtils.h | 41 - src/OBJECT/SMESH_DeviceActor.cxx | 676 - src/OBJECT/SMESH_DeviceActor.h | 155 - src/OBJECT/SMESH_ExtractGeometry.cxx | 254 - src/OBJECT/SMESH_ExtractGeometry.h | 61 - src/OBJECT/SMESH_Object.cxx | 1270 -- src/OBJECT/SMESH_Object.h | 70 - src/OBJECT/SMESH_ObjectDef.h | 202 - src/SMDS/Makefile.in | 143 - src/SMDS/SMDSAbs_ElementType.hxx | 41 - src/SMDS/SMDS_EdgePosition.cxx | 76 - src/SMDS/SMDS_EdgePosition.hxx | 48 - src/SMDS/SMDS_ElemIterator.hxx | 40 - src/SMDS/SMDS_FaceOfEdges.cxx | 157 - src/SMDS/SMDS_FaceOfEdges.hxx | 59 - src/SMDS/SMDS_FaceOfNodes.cxx | 177 - src/SMDS/SMDS_FaceOfNodes.hxx | 57 - src/SMDS/SMDS_FacePosition.cxx | 98 - src/SMDS/SMDS_FacePosition.hxx | 49 - src/SMDS/SMDS_Iterator.hxx | 46 - src/SMDS/SMDS_IteratorOfElements.cxx | 106 - src/SMDS/SMDS_IteratorOfElements.hxx | 52 - src/SMDS/SMDS_Mesh.cxx | 2203 --- src/SMDS/SMDS_Mesh.hxx | 351 - src/SMDS/SMDS_MeshEdge.cxx | 150 - src/SMDS/SMDS_MeshEdge.hxx | 55 - src/SMDS/SMDS_MeshElement.cxx | 194 - src/SMDS/SMDS_MeshElement.hxx | 75 - src/SMDS/SMDS_MeshElementIDFactory.cxx | 169 - src/SMDS/SMDS_MeshElementIDFactory.hxx | 63 - src/SMDS/SMDS_MeshFace.cxx | 27 - src/SMDS/SMDS_MeshFace.hxx | 38 - src/SMDS/SMDS_MeshGroup.cxx | 163 - src/SMDS/SMDS_MeshGroup.hxx | 76 - src/SMDS/SMDS_MeshIDFactory.cxx | 83 - src/SMDS/SMDS_MeshIDFactory.hxx | 46 - src/SMDS/SMDS_MeshNode.cxx | 246 - src/SMDS/SMDS_MeshNode.hxx | 65 - src/SMDS/SMDS_MeshObject.cxx | 28 - src/SMDS/SMDS_MeshObject.hxx | 35 - src/SMDS/SMDS_MeshVolume.cxx | 38 - src/SMDS/SMDS_MeshVolume.hxx | 38 - src/SMDS/SMDS_PolygonalFaceOfNodes.cxx | 174 - src/SMDS/SMDS_PolygonalFaceOfNodes.hxx | 60 - src/SMDS/SMDS_PolyhedralVolumeOfNodes.cxx | 182 - src/SMDS/SMDS_PolyhedralVolumeOfNodes.hxx | 72 - src/SMDS/SMDS_Position.cxx | 76 - src/SMDS/SMDS_Position.hxx | 56 - src/SMDS/SMDS_SpacePosition.cxx | 59 - src/SMDS/SMDS_SpacePosition.hxx | 45 - src/SMDS/SMDS_TypeOfPosition.hxx | 39 - src/SMDS/SMDS_VertexPosition.cxx | 60 - src/SMDS/SMDS_VertexPosition.hxx | 41 - src/SMDS/SMDS_VolumeOfFaces.cxx | 138 - src/SMDS/SMDS_VolumeOfFaces.hxx | 66 - src/SMDS/SMDS_VolumeOfNodes.cxx | 212 - src/SMDS/SMDS_VolumeOfNodes.hxx | 79 - src/SMDS/SMDS_VolumeTool.cxx | 1045 -- src/SMDS/SMDS_VolumeTool.hxx | 251 - src/SMESH/Makefile.in | 85 - src/SMESH/SMESH_1D_Algo.cxx | 57 - src/SMESH/SMESH_1D_Algo.hxx | 42 - src/SMESH/SMESH_2D_Algo.cxx | 92 - src/SMESH/SMESH_2D_Algo.hxx | 46 - src/SMESH/SMESH_3D_Algo.cxx | 58 - src/SMESH/SMESH_3D_Algo.hxx | 42 - src/SMESH/SMESH_Algo.cxx | 149 - src/SMESH/SMESH_Algo.hxx | 90 - src/SMESH/SMESH_Block.cxx | 1391 -- src/SMESH/SMESH_Block.hxx | 275 - src/SMESH/SMESH_Gen.cxx | 721 - src/SMESH/SMESH_Gen.hxx | 106 - src/SMESH/SMESH_Group.cxx | 66 - src/SMESH/SMESH_Group.hxx | 67 - src/SMESH/SMESH_HypoFilter.cxx | 290 - src/SMESH/SMESH_HypoFilter.hxx | 163 - src/SMESH/SMESH_Hypothesis.cxx | 162 - src/SMESH/SMESH_Hypothesis.hxx | 74 - src/SMESH/SMESH_Mesh.cxx | 1429 -- src/SMESH/SMESH_Mesh.hxx | 254 - src/SMESH/SMESH_MeshEditor.cxx | 5053 ------ src/SMESH/SMESH_MeshEditor.hxx | 314 - src/SMESH/SMESH_Pattern.cxx | 4344 ----- src/SMESH/SMESH_Pattern.hxx | 353 - src/SMESH/SMESH_subMesh.cxx | 1698 -- src/SMESH/SMESH_subMesh.hxx | 182 - src/SMESHDS/Makefile.in | 83 - src/SMESHDS/SMESHDS_Command.cxx | 410 - src/SMESHDS/SMESHDS_Command.hxx | 76 - src/SMESHDS/SMESHDS_CommandType.hxx | 52 - src/SMESHDS/SMESHDS_Document.cxx | 192 - src/SMESHDS/SMESHDS_Document.hxx | 63 - src/SMESHDS/SMESHDS_Group.cxx | 164 - src/SMESHDS/SMESHDS_Group.hxx | 68 - src/SMESHDS/SMESHDS_GroupBase.cxx | 150 - src/SMESHDS/SMESHDS_GroupBase.hxx | 90 - src/SMESHDS/SMESHDS_GroupOnGeom.cxx | 112 - src/SMESHDS/SMESHDS_GroupOnGeom.hxx | 56 - src/SMESHDS/SMESHDS_Hypothesis.cxx | 98 - src/SMESHDS/SMESHDS_Hypothesis.hxx | 56 - src/SMESHDS/SMESHDS_Mesh.cxx | 1127 -- src/SMESHDS/SMESHDS_Mesh.hxx | 262 - src/SMESHDS/SMESHDS_Script.cxx | 247 - src/SMESHDS/SMESHDS_Script.hxx | 77 - src/SMESHDS/SMESHDS_SubMesh.cxx | 291 - src/SMESHDS/SMESHDS_SubMesh.hxx | 63 - .../Handle_SMESH_TypeFilter.hxx | 89 - .../SMESH_LogicalFilter.cxx | 81 - .../SMESH_LogicalFilter.hxx | 33 - .../SMESH_NumberFilter.cxx | 200 - .../SMESH_NumberFilter.hxx | 69 - src/SMESHFiltersSelection/SMESH_Type.h | 27 - .../SMESH_TypeFilter.cxx | 137 - .../SMESH_TypeFilter.hxx | 25 - .../SMESH_TypeFilter.ixx | 71 - .../SMESH_TypeFilter.jxx | 3 - src/SMESHGUI/Makefile.in | 202 - src/SMESHGUI/SMESHBin.cxx | 4 - src/SMESHGUI/SMESHGUI.cxx | 28 +- src/SMESHGUI/SMESHGUI.h | 140 - src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx | 756 - src/SMESHGUI/SMESHGUI_AddMeshElementDlg.h | 135 - src/SMESHGUI/SMESHGUI_AddSubMeshDlg.cxx | 535 - src/SMESHGUI/SMESHGUI_AddSubMeshDlg.h | 129 - src/SMESHGUI/SMESHGUI_ClippingDlg.cxx | 745 - src/SMESHGUI/SMESHGUI_ClippingDlg.h | 131 - src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.cxx | 294 - src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.h | 94 - src/SMESHGUI/SMESHGUI_CreatePatternDlg.cxx | 720 - src/SMESHGUI/SMESHGUI_CreatePatternDlg.h | 146 - .../SMESHGUI_CreatePolyhedralVolumeDlg.cxx | 999 -- .../SMESHGUI_CreatePolyhedralVolumeDlg.h | 134 - src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx | 305 - src/SMESHGUI/SMESHGUI_DeleteGroupDlg.h | 95 - src/SMESHGUI/SMESHGUI_Dialog.cxx | 139 - src/SMESHGUI/SMESHGUI_Dialog.h | 66 - src/SMESHGUI/SMESHGUI_EditHypothesesDlg.cxx | 963 -- src/SMESHGUI/SMESHGUI_EditHypothesesDlg.h | 151 - src/SMESHGUI/SMESHGUI_EditMeshDlg.cxx | 323 - src/SMESHGUI/SMESHGUI_EditMeshDlg.h | 85 - .../SMESHGUI_ExtrusionAlongPathDlg.cxx | 1169 -- src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.h | 165 - src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx | 757 - src/SMESHGUI/SMESHGUI_ExtrusionDlg.h | 128 - src/SMESHGUI/SMESHGUI_Filter.cxx | 497 - src/SMESHGUI/SMESHGUI_Filter.h | 191 - src/SMESHGUI/SMESHGUI_FilterDlg.h | 306 - src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx | 1133 -- src/SMESHGUI/SMESHGUI_FilterLibraryDlg.h | 157 - src/SMESHGUI/SMESHGUI_FilterUtils.cxx | 35 - src/SMESHGUI/SMESHGUI_FilterUtils.h | 34 - src/SMESHGUI/SMESHGUI_GEOMGenUtils.cxx | 92 - src/SMESHGUI/SMESHGUI_GEOMGenUtils.h | 39 - src/SMESHGUI/SMESHGUI_GroupDlg.h | 166 - src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx | 384 - src/SMESHGUI/SMESHGUI_GroupOpDlg.h | 109 - src/SMESHGUI/SMESHGUI_GroupUtils.cxx | 53 - src/SMESHGUI/SMESHGUI_GroupUtils.h | 36 - src/SMESHGUI/SMESHGUI_Hypotheses.h | 80 - src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx | 524 - src/SMESHGUI/SMESHGUI_HypothesesUtils.h | 78 - src/SMESHGUI/SMESHGUI_IdValidator.h | 68 - src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx | 498 - src/SMESHGUI/SMESHGUI_InitMeshDlg.h | 124 - src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx | 700 - src/SMESHGUI/SMESHGUI_MergeNodesDlg.h | 142 - src/SMESHGUI/SMESHGUI_MeshDlg.cxx | 447 - src/SMESHGUI/SMESHGUI_MeshDlg.h | 120 - src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx | 530 - src/SMESHGUI/SMESHGUI_MeshInfosDlg.h | 111 - src/SMESHGUI/SMESHGUI_MeshOp.cxx | 999 -- src/SMESHGUI/SMESHGUI_MeshOp.h | 93 - src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx | 1331 -- src/SMESHGUI/SMESHGUI_MeshPatternDlg.h | 176 - src/SMESHGUI/SMESHGUI_MeshUtils.cxx | 47 - src/SMESHGUI/SMESHGUI_MeshUtils.h | 36 - src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx | 564 - src/SMESHGUI/SMESHGUI_MoveNodesDlg.h | 108 - src/SMESHGUI/SMESHGUI_MultiEditDlg.h | 228 - src/SMESHGUI/SMESHGUI_NodesDlg.cxx | 579 - src/SMESHGUI/SMESHGUI_NodesDlg.h | 122 - src/SMESHGUI/SMESHGUI_Operation.cxx | 226 - src/SMESHGUI/SMESHGUI_Operation.h | 62 - src/SMESHGUI/SMESHGUI_PatternUtils.cxx | 31 - src/SMESHGUI/SMESHGUI_PatternUtils.h | 34 - src/SMESHGUI/SMESHGUI_PatternWidget.cxx | 165 - src/SMESHGUI/SMESHGUI_PatternWidget.h | 74 - src/SMESHGUI/SMESHGUI_PrecisionDlg.cxx | 202 - src/SMESHGUI/SMESHGUI_PrecisionDlg.h | 97 - .../SMESHGUI_Preferences_ColorDlg.cxx | 396 - src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h | 105 - .../SMESHGUI_Preferences_ScalarBarDlg.cxx | 765 - .../SMESHGUI_Preferences_ScalarBarDlg.h | 120 - .../SMESHGUI_Preferences_SelectionDlg.cxx | 314 - .../SMESHGUI_Preferences_SelectionDlg.h | 99 - src/SMESHGUI/SMESHGUI_RemoveElementsDlg.h | 121 - src/SMESHGUI/SMESHGUI_RemoveNodesDlg.h | 124 - src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx | 421 - src/SMESHGUI/SMESHGUI_RenumberingDlg.h | 115 - src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx | 910 - src/SMESHGUI/SMESHGUI_RevolutionDlg.h | 155 - src/SMESHGUI/SMESHGUI_RotationDlg.cxx | 819 - src/SMESHGUI/SMESHGUI_RotationDlg.h | 150 - src/SMESHGUI/SMESHGUI_SMESHGenUtils.cxx | 43 - src/SMESHGUI/SMESHGUI_SMESHGenUtils.h | 35 - src/SMESHGUI/SMESHGUI_Selection.h | 75 - src/SMESHGUI/SMESHGUI_SelectionOp.cxx | 508 - src/SMESHGUI/SMESHGUI_SelectionOp.h | 163 - src/SMESHGUI/SMESHGUI_SewingDlg.cxx | 926 - src/SMESHGUI/SMESHGUI_SewingDlg.h | 141 - src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx | 560 - src/SMESHGUI/SMESHGUI_SingleEditDlg.h | 132 - src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx | 751 - src/SMESHGUI/SMESHGUI_SmoothingDlg.h | 139 - src/SMESHGUI/SMESHGUI_SpinBox.cxx | 101 - src/SMESHGUI/SMESHGUI_SpinBox.h | 58 - .../SMESHGUI_StandardMeshInfosDlg.cxx | 446 - src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.h | 88 - src/SMESHGUI/SMESHGUI_Swig.cxx | 485 - src/SMESHGUI/SMESHGUI_Swig.hxx | 94 - src/SMESHGUI/SMESHGUI_Swig.i | 60 - src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx | 893 - src/SMESHGUI/SMESHGUI_SymmetryDlg.h | 150 - src/SMESHGUI/SMESHGUI_TranslationDlg.cxx | 826 - src/SMESHGUI/SMESHGUI_TranslationDlg.h | 144 - src/SMESHGUI/SMESHGUI_TransparencyDlg.cxx | 253 - src/SMESHGUI/SMESHGUI_TransparencyDlg.h | 79 - src/SMESHGUI/SMESHGUI_Utils.cxx | 272 - src/SMESHGUI/SMESHGUI_Utils.h | 130 - src/SMESHGUI/SMESHGUI_XmlHandler.cxx | 210 - src/SMESHGUI/SMESHGUI_XmlHandler.h | 64 - src/SMESHGUI/SMESHGUI_aParameter.cxx | 941 -- src/SMESHGUI/SMESHGUI_aParameter.h | 442 - src/SMESHGUI/SMESHGUI_aParameterDlg.cxx | 255 - src/SMESHGUI/SMESHGUI_aParameterDlg.h | 82 - src/SMESHGUI/SMESH_icons.po | 222 - src/SMESHGUI/SMESH_images.po | 338 - src/SMESHGUI/SMESH_msg_en.po | 2908 ---- src/SMESH_I/Makefile.in | 2 +- src/SMESH_I/SMESH.hxx | 56 - src/SMESH_I/SMESHEngine.cxx | 23 - src/SMESH_I/SMESH_1D_Algo_i.cxx | 89 - src/SMESH_I/SMESH_1D_Algo_i.hxx | 56 - src/SMESH_I/SMESH_2D_Algo_i.cxx | 75 - src/SMESH_I/SMESH_2D_Algo_i.hxx | 56 - src/SMESH_I/SMESH_3D_Algo_i.cxx | 76 - src/SMESH_I/SMESH_3D_Algo_i.hxx | 56 - src/SMESH_I/SMESH_Algo_i.cxx | 85 - src/SMESH_I/SMESH_Algo_i.hxx | 56 - src/SMESH_I/SMESH_DumpPython.cxx | 683 - src/SMESH_I/SMESH_Filter_i.cxx | 2730 --- src/SMESH_I/SMESH_Filter_i.hxx | 781 - src/SMESH_I/SMESH_Gen_i.cxx | 2587 --- src/SMESH_I/SMESH_Gen_i.hxx | 444 - src/SMESH_I/SMESH_Gen_i_1.cxx | 845 - src/SMESH_I/SMESH_Group_i.cxx | 436 - src/SMESH_I/SMESH_Group_i.hxx | 115 - src/SMESH_I/SMESH_Hypothesis_i.cxx | 181 - src/SMESH_I/SMESH_Hypothesis_i.hxx | 115 - src/SMESH_I/SMESH_MEDFamily_i.cxx | 300 - src/SMESH_I/SMESH_MEDFamily_i.hxx | 90 - src/SMESH_I/SMESH_MEDMesh_i.cxx | 1206 -- src/SMESH_I/SMESH_MEDMesh_i.hxx | 233 - src/SMESH_I/SMESH_MEDSupport_i.cxx | 401 - src/SMESH_I/SMESH_MEDSupport_i.hxx | 111 - src/SMESH_I/SMESH_MeshEditor_i.cxx | 1702 -- src/SMESH_I/SMESH_MeshEditor_i.hxx | 229 - src/SMESH_I/SMESH_Mesh_i.cxx | 1606 -- src/SMESH_I/SMESH_Mesh_i.hxx | 268 - src/SMESH_I/SMESH_Pattern_i.cxx | 510 - src/SMESH_I/SMESH_Pattern_i.hxx | 103 - src/SMESH_I/SMESH_PythonDump.hxx | 85 - src/SMESH_I/SMESH_subMesh_i.cxx | 487 - src/SMESH_I/SMESH_subMesh_i.hxx | 93 - src/SMESH_I/smeshpy.py | 96 - src/SMESH_SWIG/Makefile.in | 120 - src/SMESH_SWIG/PAL_MESH_041_mesh.py | 103 - src/SMESH_SWIG/PAL_MESH_043_2D.py | 102 - src/SMESH_SWIG/PAL_MESH_043_3D.py | 104 - src/SMESH_SWIG/SMESH_BelongToGeom.py | 28 - src/SMESH_SWIG/SMESH_GroupFromGeom.py | 49 - src/SMESH_SWIG/SMESH_GroupFromGeom2.py | 53 - src/SMESH_SWIG/SMESH_GroupLyingOnGeom.py | 23 - src/SMESH_SWIG/SMESH_Nut.py | 161 - src/SMESH_SWIG/SMESH_Partition1_tetra.py | 200 - src/SMESH_SWIG/SMESH_Sphere.py | 111 - src/SMESH_SWIG/SMESH_blocks.py | 43 - src/SMESH_SWIG/SMESH_box.py | 73 - src/SMESH_SWIG/SMESH_box2_tetra.py | 160 - src/SMESH_SWIG/SMESH_box3_tetra.py | 171 - src/SMESH_SWIG/SMESH_box_tetra.py | 132 - src/SMESH_SWIG/SMESH_controls.py | 209 - src/SMESH_SWIG/SMESH_demo_hexa2_upd.py | 210 - src/SMESH_SWIG/SMESH_fixation.py | 294 - src/SMESH_SWIG/SMESH_fixation_hexa.py | 101 - src/SMESH_SWIG/SMESH_fixation_tetra.py | 131 - src/SMESH_SWIG/SMESH_flight_skin.py | 115 - src/SMESH_SWIG/SMESH_freebord.py | 66 - src/SMESH_SWIG/SMESH_hexaedre.py | 148 - src/SMESH_SWIG/SMESH_mechanic.py | 257 - src/SMESH_SWIG/SMESH_mechanic_editor.py | 308 - src/SMESH_SWIG/SMESH_mechanic_tetra.py | 212 - src/SMESH_SWIG/SMESH_reg.py | 181 - src/SMESH_SWIG/SMESH_shared_modules.py | 19 - src/SMESH_SWIG/SMESH_test.py | 200 - src/SMESH_SWIG/SMESH_test0.py | 63 - src/SMESH_SWIG/SMESH_test1.py | 157 - src/SMESH_SWIG/SMESH_test2.py | 65 - src/SMESH_SWIG/SMESH_test3.py | 94 - src/SMESH_SWIG/SMESH_test4.py | 52 - src/SMESH_SWIG/SMESH_test5.py | 80 - src/SMESH_SWIG/batchmode_mefisto.py | 136 - src/SMESH_SWIG/batchmode_smesh.py | 304 - src/SMESH_SWIG/ex00_all.py | 25 - src/SMESH_SWIG/ex01_cube2build.py | 293 - src/SMESH_SWIG/ex02_cube2primitive.py | 95 - src/SMESH_SWIG/ex03_cube2partition.py | 82 - src/SMESH_SWIG/ex04_cube5tetraHexa.py | 87 - src/SMESH_SWIG/ex05_hole1build.py | 122 - src/SMESH_SWIG/ex06_hole1boolean.py | 139 - src/SMESH_SWIG/ex07_hole1partition.py | 79 - src/SMESH_SWIG/ex08_hole2build.py | 112 - src/SMESH_SWIG/ex09_grid4build.py | 115 - src/SMESH_SWIG/ex10_grid4geometry.py | 77 - src/SMESH_SWIG/ex11_grid3partition.py | 98 - src/SMESH_SWIG/ex12_grid17partition.py | 113 - src/SMESH_SWIG/ex13_hole1partial.py | 231 - src/SMESH_SWIG/ex14_cyl1holed.py | 116 - src/SMESH_SWIG/ex15_cyl2geometry.py | 175 - src/SMESH_SWIG/ex16_cyl2complementary.py | 118 - src/SMESH_SWIG/ex17_dome1.py | 78 - src/SMESH_SWIG/ex18_dome2.py | 115 - src/SMESH_SWIG/ex19_sphereINcube.py | 138 - src/SMESH_SWIG/libSMESH_Swig.i | 30 - src/SMESH_SWIG/smesh.py | 491 - src/StdMeshers/Makefile.in | 90 - src/StdMeshers/StdMeshers_Arithmetic1D.cxx | 139 - src/StdMeshers/StdMeshers_Arithmetic1D.hxx | 55 - src/StdMeshers/StdMeshers_Deflection1D.cxx | 136 - src/StdMeshers/StdMeshers_Deflection1D.hxx | 53 - src/StdMeshers/StdMeshers_Hexa_3D.cxx | 1081 -- src/StdMeshers/StdMeshers_Hexa_3D.hxx | 140 - src/StdMeshers/StdMeshers_LengthFromEdges.cxx | 139 - src/StdMeshers/StdMeshers_LengthFromEdges.hxx | 57 - src/StdMeshers/StdMeshers_LocalLength.cxx | 137 - src/StdMeshers/StdMeshers_LocalLength.hxx | 55 - src/StdMeshers/StdMeshers_MEFISTO_2D.cxx | 875 - src/StdMeshers/StdMeshers_MEFISTO_2D.hxx | 100 - src/StdMeshers/StdMeshers_MaxElementArea.cxx | 139 - src/StdMeshers/StdMeshers_MaxElementArea.hxx | 55 - .../StdMeshers_MaxElementVolume.cxx | 141 - .../StdMeshers_MaxElementVolume.hxx | 57 - .../StdMeshers_NotConformAllowed.cxx | 98 - .../StdMeshers_NotConformAllowed.hxx | 48 - .../StdMeshers_NumberOfSegments.cxx | 496 - .../StdMeshers_NumberOfSegments.hxx | 173 - src/StdMeshers/StdMeshers_Penta_3D.cxx | 1593 -- src/StdMeshers/StdMeshers_Penta_3D.hxx | 256 - src/StdMeshers/StdMeshers_Propagation.cxx | 102 - src/StdMeshers/StdMeshers_Propagation.hxx | 47 - src/StdMeshers/StdMeshers_Quadrangle_2D.cxx | 1117 -- src/StdMeshers/StdMeshers_Quadrangle_2D.hxx | 104 - src/StdMeshers/StdMeshers_Regular_1D.cxx | 885 - src/StdMeshers/StdMeshers_Regular_1D.hxx | 100 - src/StdMeshers/StdMeshers_StartEndLength.cxx | 143 - src/StdMeshers/StdMeshers_StartEndLength.hxx | 53 - src/StdMeshersGUI/Makefile.in | 79 - src/StdMeshersGUI/StdMeshersGUI.cxx | 184 - .../StdMeshersGUI_CreateHypothesisDlg.cxx | 435 - .../StdMeshersGUI_CreateHypothesisDlg.h | 119 - .../StdMeshersGUI_CreateStdHypothesisDlg.cxx | 109 - .../StdMeshersGUI_CreateStdHypothesisDlg.h | 59 - .../StdMeshersGUI_Parameters.cxx | 479 - src/StdMeshersGUI/StdMeshersGUI_Parameters.h | 65 - src/StdMeshersGUI/StdMeshers_icons.po | 113 - src/StdMeshersGUI/StdMeshers_images.po | 113 - src/StdMeshersGUI/StdMeshers_msg_en.po | 119 - src/StdMeshers_I/Makefile.in | 98 - .../StdMeshers_Arithmetic1D_i.cxx | 144 - .../StdMeshers_Arithmetic1D_i.hxx | 66 - .../StdMeshers_Deflection1D_i.cxx | 144 - .../StdMeshers_Deflection1D_i.hxx | 70 - src/StdMeshers_I/StdMeshers_Hexa_3D_i.cxx | 84 - src/StdMeshers_I/StdMeshers_Hexa_3D_i.hxx | 61 - .../StdMeshers_LengthFromEdges_i.cxx | 135 - .../StdMeshers_LengthFromEdges_i.hxx | 68 - src/StdMeshers_I/StdMeshers_LocalLength_i.cxx | 144 - src/StdMeshers_I/StdMeshers_LocalLength_i.hxx | 70 - src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.cxx | 85 - src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.hxx | 61 - .../StdMeshers_MaxElementArea_i.cxx | 144 - .../StdMeshers_MaxElementArea_i.hxx | 67 - .../StdMeshers_MaxElementVolume_i.cxx | 144 - .../StdMeshers_MaxElementVolume_i.hxx | 67 - .../StdMeshers_NotConformAllowed_i.cxx | 81 - .../StdMeshers_NotConformAllowed_i.hxx | 57 - .../StdMeshers_NumberOfSegments_i.cxx | 348 - .../StdMeshers_NumberOfSegments_i.hxx | 102 - src/StdMeshers_I/StdMeshers_Propagation_i.cxx | 91 - src/StdMeshers_I/StdMeshers_Propagation_i.hxx | 60 - .../StdMeshers_Quadrangle_2D_i.cxx | 86 - .../StdMeshers_Quadrangle_2D_i.hxx | 61 - src/StdMeshers_I/StdMeshers_Regular_1D_i.cxx | 85 - src/StdMeshers_I/StdMeshers_Regular_1D_i.hxx | 58 - .../StdMeshers_StartEndLength_i.cxx | 145 - .../StdMeshers_StartEndLength_i.hxx | 70 - src/StdMeshers_I/StdMeshers_i.cxx | 98 - 1082 files changed, 40 insertions(+), 201668 deletions(-) delete mode 100644 ChangeLog delete mode 100644 INSTALL delete mode 100644 LICENCE delete mode 100644 Makefile.in delete mode 100644 adm_local/unix/config_files/check_Geom.m4 delete mode 100644 adm_local/unix/config_files/check_Med.m4 delete mode 100644 adm_local/unix/make_commence.in delete mode 100644 adm_local/unix/make_conclude.in delete mode 100644 adm_local/unix/make_omniorb.in delete mode 100755 bin/VERSION delete mode 100755 build_configure delete mode 100644 configure.in.base delete mode 100644 cvs-tags delete mode 100644 doc/Makefile.in delete mode 100644 doc/salome/AddNetgenInSalome2.pdf delete mode 100644 doc/salome/AddNetgenInSalome2.ps delete mode 100644 doc/salome/AddNetgenInSalome2.sxw delete mode 100644 doc/salome/Makefile.in delete mode 100644 doc/salome/PluginMeshers.txt delete mode 100644 doc/salome/SMESH_index.html delete mode 100644 doc/salome/gui/Makefile.in delete mode 100755 doc/salome/gui/SMESH/SMESH.log 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.skn delete mode 100755 doc/salome/gui/SMESH/default_ns.css 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/files/1d_meshing_algorithm.htm delete mode 100755 doc/salome/gui/SMESH/files/2d_(quadrangle)_meshing_algorithm.htm delete mode 100755 doc/salome/gui/SMESH/files/2d_meshing_algorithm.htm delete mode 100755 doc/salome/gui/SMESH/files/3d_meshing_algorithm.htm delete mode 100755 doc/salome/gui/SMESH/files/about_hypotheses.htm delete mode 100755 doc/salome/gui/SMESH/files/about_meshes.htm delete mode 100755 doc/salome/gui/SMESH/files/about_meshing_algorithms.htm delete mode 100755 doc/salome/gui/SMESH/files/about_modification_of_meshes.htm delete mode 100755 doc/salome/gui/SMESH/files/about_quality_controls.htm delete mode 100755 doc/salome/gui/SMESH/files/adding_nodes_and_elements.htm delete mode 100755 doc/salome/gui/SMESH/files/area_of_elements.htm delete mode 100755 doc/salome/gui/SMESH/files/arithmetic_1d.htm delete mode 100755 doc/salome/gui/SMESH/files/aspect_ratio.htm delete mode 100755 doc/salome/gui/SMESH/files/changing_orientation_of_elements.htm delete mode 100755 doc/salome/gui/SMESH/files/computing_meshes.htm delete mode 100755 doc/salome/gui/SMESH/files/connectivity.htm delete mode 100755 doc/salome/gui/SMESH/files/constructing_groups_of_specific_elements.htm delete mode 100755 doc/salome/gui/SMESH/files/constructing_meshes.htm delete mode 100755 doc/salome/gui/SMESH/files/constructing_submeshes.htm delete mode 100755 doc/salome/gui/SMESH/files/creating_groups.htm delete mode 100755 doc/salome/gui/SMESH/files/cutting_quadrangles.htm delete mode 100755 doc/salome/gui/SMESH/files/deflection_1d.htm delete mode 100755 doc/salome/gui/SMESH/files/diagonal_iversion_of_elements.htm delete mode 100755 doc/salome/gui/SMESH/files/displacing_nodes.htm delete mode 100755 doc/salome/gui/SMESH/files/displaying_elements_numbers.htm delete mode 100755 doc/salome/gui/SMESH/files/displaying_nodes_numbers.htm delete mode 100755 doc/salome/gui/SMESH/files/editing_groups.htm delete mode 100755 doc/salome/gui/SMESH/files/editing_hypotheses.htm delete mode 100755 doc/salome/gui/SMESH/files/importing_and_exporting_meshes.htm delete mode 100755 doc/salome/gui/SMESH/files/introduction_to_smesh.htm delete mode 100755 doc/salome/gui/SMESH/files/length_from_edges.htm delete mode 100755 doc/salome/gui/SMESH/files/length_of_edges.htm delete mode 100755 doc/salome/gui/SMESH/files/local_length_hypothesis.htm delete mode 100755 doc/salome/gui/SMESH/files/max._element_area_hypothesis.htm delete mode 100755 doc/salome/gui/SMESH/files/max._element_volume_hypothsis.htm delete mode 100755 doc/salome/gui/SMESH/files/merging_nodes.htm delete mode 100755 doc/salome/gui/SMESH/files/minimum_angle.htm delete mode 100755 doc/salome/gui/SMESH/files/non_conform_mesh_allowed_hypothesis.htm delete mode 100755 doc/salome/gui/SMESH/files/number_of_segments_hypothesis.htm delete mode 100755 doc/salome/gui/SMESH/files/propagation_of_1d_hypothesis_on_opposite_edges.htm delete mode 100755 doc/salome/gui/SMESH/files/reassigning_hypotheses_and_algorithms.htm delete mode 100755 doc/salome/gui/SMESH/files/removing_nodes_and_elements.htm delete mode 100755 doc/salome/gui/SMESH/files/renumbering_nodes_and_elements.htm delete mode 100755 doc/salome/gui/SMESH/files/rotation.htm delete mode 100755 doc/salome/gui/SMESH/files/running_smesh_module.htm delete mode 100755 doc/salome/gui/SMESH/files/scalar_bar_properties.htm delete mode 100755 doc/salome/gui/SMESH/files/sewing_meshes.htm delete mode 100755 doc/salome/gui/SMESH/files/shading.htm delete mode 100755 doc/salome/gui/SMESH/files/shrink.htm delete mode 100755 doc/salome/gui/SMESH/files/skew.htm delete mode 100755 doc/salome/gui/SMESH/files/smoothing.htm delete mode 100755 doc/salome/gui/SMESH/files/start_and_end_length_hypothesis.htm delete mode 100755 doc/salome/gui/SMESH/files/symmetry.htm delete mode 100755 doc/salome/gui/SMESH/files/taper.htm delete mode 100755 doc/salome/gui/SMESH/files/tetrahedron_(ghs3d)_meshing_algorithm.htm delete mode 100755 doc/salome/gui/SMESH/files/tetrahedron_(netgen)_meshing_algorithm.htm delete mode 100755 doc/salome/gui/SMESH/files/translation.htm delete mode 100755 doc/salome/gui/SMESH/files/uniting_a_set_of_triangles.htm delete mode 100755 doc/salome/gui/SMESH/files/uniting_two_triangles.htm delete mode 100755 doc/salome/gui/SMESH/files/using_operations_on_groups.htm delete mode 100755 doc/salome/gui/SMESH/files/using_smesh_module.htm delete mode 100755 doc/salome/gui/SMESH/files/view_update.htm delete mode 100755 doc/salome/gui/SMESH/files/viewing_mesh_info.htm delete mode 100755 doc/salome/gui/SMESH/files/visualization_modes.htm delete mode 100755 doc/salome/gui/SMESH/files/visualization_properties.htm delete mode 100755 doc/salome/gui/SMESH/files/warp.htm delete mode 100755 doc/salome/gui/SMESH/files/wireframe.htm delete mode 100755 doc/salome/gui/SMESH/i_blue.jpg delete mode 100755 doc/salome/gui/SMESH/image10.jpg delete mode 100755 doc/salome/gui/SMESH/image11.jpg delete mode 100755 doc/salome/gui/SMESH/image12.gif delete mode 100755 doc/salome/gui/SMESH/image12.jpg delete mode 100755 doc/salome/gui/SMESH/image13.gif delete mode 100755 doc/salome/gui/SMESH/image14.gif delete mode 100755 doc/salome/gui/SMESH/image15.gif delete mode 100755 doc/salome/gui/SMESH/image16.gif delete mode 100755 doc/salome/gui/SMESH/image16.jpg delete mode 100755 doc/salome/gui/SMESH/image17.jpg delete mode 100755 doc/salome/gui/SMESH/image18.jpg delete mode 100755 doc/salome/gui/SMESH/image2.gif delete mode 100755 doc/salome/gui/SMESH/image20.jpg delete mode 100755 doc/salome/gui/SMESH/image21.jpg delete mode 100755 doc/salome/gui/SMESH/image22.gif delete mode 100755 doc/salome/gui/SMESH/image22.jpg delete mode 100755 doc/salome/gui/SMESH/image23.jpg delete mode 100755 doc/salome/gui/SMESH/image24.gif delete mode 100755 doc/salome/gui/SMESH/image24.jpg delete mode 100755 doc/salome/gui/SMESH/image25.gif delete mode 100755 doc/salome/gui/SMESH/image25.jpg delete mode 100755 doc/salome/gui/SMESH/image26.gif delete mode 100755 doc/salome/gui/SMESH/image26.jpg delete mode 100755 doc/salome/gui/SMESH/image27.gif delete mode 100755 doc/salome/gui/SMESH/image27.jpg delete mode 100755 doc/salome/gui/SMESH/image28.gif delete mode 100755 doc/salome/gui/SMESH/image28.jpg delete mode 100755 doc/salome/gui/SMESH/image29.gif delete mode 100755 doc/salome/gui/SMESH/image29.jpg delete mode 100755 doc/salome/gui/SMESH/image3.jpg delete mode 100755 doc/salome/gui/SMESH/image30.jpg delete mode 100755 doc/salome/gui/SMESH/image31.gif delete mode 100755 doc/salome/gui/SMESH/image31.jpg delete mode 100755 doc/salome/gui/SMESH/image32.gif delete mode 100755 doc/salome/gui/SMESH/image32.jpg delete mode 100755 doc/salome/gui/SMESH/image33.gif delete mode 100755 doc/salome/gui/SMESH/image34.gif delete mode 100755 doc/salome/gui/SMESH/image34.jpg delete mode 100755 doc/salome/gui/SMESH/image35.gif delete mode 100755 doc/salome/gui/SMESH/image35.jpg delete mode 100755 doc/salome/gui/SMESH/image36.gif delete mode 100755 doc/salome/gui/SMESH/image36.jpg delete mode 100755 doc/salome/gui/SMESH/image37.gif delete mode 100755 doc/salome/gui/SMESH/image38.gif delete mode 100755 doc/salome/gui/SMESH/image38.jpg delete mode 100755 doc/salome/gui/SMESH/image39.gif delete mode 100755 doc/salome/gui/SMESH/image39.jpg delete mode 100755 doc/salome/gui/SMESH/image4.gif delete mode 100755 doc/salome/gui/SMESH/image4.jpg delete mode 100755 doc/salome/gui/SMESH/image40.gif delete mode 100755 doc/salome/gui/SMESH/image40.jpg delete mode 100755 doc/salome/gui/SMESH/image41.gif delete mode 100755 doc/salome/gui/SMESH/image41.jpg delete mode 100755 doc/salome/gui/SMESH/image42.gif delete mode 100755 doc/salome/gui/SMESH/image42.jpg delete mode 100755 doc/salome/gui/SMESH/image43.gif delete mode 100755 doc/salome/gui/SMESH/image43.jpg delete mode 100755 doc/salome/gui/SMESH/image44.gif delete mode 100755 doc/salome/gui/SMESH/image44.jpg delete mode 100755 doc/salome/gui/SMESH/image45.gif delete mode 100755 doc/salome/gui/SMESH/image45.jpg delete mode 100755 doc/salome/gui/SMESH/image46.gif delete mode 100755 doc/salome/gui/SMESH/image46.jpg delete mode 100755 doc/salome/gui/SMESH/image47.gif delete mode 100755 doc/salome/gui/SMESH/image47.jpg delete mode 100755 doc/salome/gui/SMESH/image48.gif delete mode 100755 doc/salome/gui/SMESH/image48.jpg delete mode 100755 doc/salome/gui/SMESH/image49.gif delete mode 100755 doc/salome/gui/SMESH/image49.jpg delete mode 100755 doc/salome/gui/SMESH/image50.gif delete mode 100755 doc/salome/gui/SMESH/image50.jpg delete mode 100755 doc/salome/gui/SMESH/image51.gif delete mode 100755 doc/salome/gui/SMESH/image51.jpg delete mode 100755 doc/salome/gui/SMESH/image52.gif delete mode 100755 doc/salome/gui/SMESH/image52.jpg delete mode 100755 doc/salome/gui/SMESH/image53.gif delete mode 100755 doc/salome/gui/SMESH/image53.jpg delete mode 100755 doc/salome/gui/SMESH/image54.jpg delete mode 100755 doc/salome/gui/SMESH/image55.gif delete mode 100755 doc/salome/gui/SMESH/image55.jpg delete mode 100755 doc/salome/gui/SMESH/image56.gif delete mode 100755 doc/salome/gui/SMESH/image57.gif delete mode 100755 doc/salome/gui/SMESH/image57.jpg delete mode 100755 doc/salome/gui/SMESH/image58.jpg delete mode 100755 doc/salome/gui/SMESH/image59.jpg delete mode 100755 doc/salome/gui/SMESH/image6.gif delete mode 100755 doc/salome/gui/SMESH/image6.jpg delete mode 100755 doc/salome/gui/SMESH/image60.jpg delete mode 100755 doc/salome/gui/SMESH/image61.gif delete mode 100755 doc/salome/gui/SMESH/image61.jpg delete mode 100755 doc/salome/gui/SMESH/image62.jpg delete mode 100755 doc/salome/gui/SMESH/image63.gif delete mode 100755 doc/salome/gui/SMESH/image63.jpg delete mode 100755 doc/salome/gui/SMESH/image64.gif delete mode 100755 doc/salome/gui/SMESH/image64.jpg delete mode 100755 doc/salome/gui/SMESH/image65.gif delete mode 100755 doc/salome/gui/SMESH/image65.jpg delete mode 100755 doc/salome/gui/SMESH/image66.gif delete mode 100755 doc/salome/gui/SMESH/image66.jpg delete mode 100755 doc/salome/gui/SMESH/image67.gif delete mode 100755 doc/salome/gui/SMESH/image67.jpg delete mode 100755 doc/salome/gui/SMESH/image68.gif delete mode 100755 doc/salome/gui/SMESH/image68.jpg delete mode 100755 doc/salome/gui/SMESH/image69.gif delete mode 100755 doc/salome/gui/SMESH/image69.jpg delete mode 100755 doc/salome/gui/SMESH/image7.gif delete mode 100755 doc/salome/gui/SMESH/image7.jpg delete mode 100755 doc/salome/gui/SMESH/image70.gif delete mode 100755 doc/salome/gui/SMESH/image70.jpg delete mode 100755 doc/salome/gui/SMESH/image71.gif delete mode 100755 doc/salome/gui/SMESH/image71.jpg delete mode 100755 doc/salome/gui/SMESH/image72.gif delete mode 100755 doc/salome/gui/SMESH/image72.jpg delete mode 100755 doc/salome/gui/SMESH/image73.gif delete mode 100755 doc/salome/gui/SMESH/image73.jpg delete mode 100755 doc/salome/gui/SMESH/image74.gif delete mode 100755 doc/salome/gui/SMESH/image74.jpg delete mode 100755 doc/salome/gui/SMESH/image75.gif delete mode 100755 doc/salome/gui/SMESH/image75.jpg delete mode 100755 doc/salome/gui/SMESH/image76.gif delete mode 100755 doc/salome/gui/SMESH/image76.jpg delete mode 100755 doc/salome/gui/SMESH/image77.gif delete mode 100755 doc/salome/gui/SMESH/image77.jpg delete mode 100755 doc/salome/gui/SMESH/image78.gif delete mode 100755 doc/salome/gui/SMESH/image78.jpg delete mode 100755 doc/salome/gui/SMESH/image79.gif delete mode 100755 doc/salome/gui/SMESH/image8.gif delete mode 100755 doc/salome/gui/SMESH/image8.jpg delete mode 100755 doc/salome/gui/SMESH/image80.gif delete mode 100755 doc/salome/gui/SMESH/image80.jpg delete mode 100755 doc/salome/gui/SMESH/image81.gif delete mode 100755 doc/salome/gui/SMESH/image81.jpg delete mode 100755 doc/salome/gui/SMESH/image82.gif delete mode 100755 doc/salome/gui/SMESH/image82.jpg delete mode 100755 doc/salome/gui/SMESH/image83.gif delete mode 100755 doc/salome/gui/SMESH/image84.gif delete mode 100755 doc/salome/gui/SMESH/image85.gif delete mode 100755 doc/salome/gui/SMESH/image87.gif delete mode 100755 doc/salome/gui/SMESH/image88.gif delete mode 100755 doc/salome/gui/SMESH/image89.gif delete mode 100755 doc/salome/gui/SMESH/image9.gif delete mode 100755 doc/salome/gui/SMESH/image9.jpg delete mode 100755 doc/salome/gui/SMESH/image90.gif delete mode 100755 doc/salome/gui/SMESH/image91.gif delete mode 100755 doc/salome/gui/SMESH/image92.gif delete mode 100755 doc/salome/gui/SMESH/image93.gif delete mode 100755 doc/salome/gui/SMESH/image94.gif delete mode 100755 doc/salome/gui/SMESH/image95.gif delete mode 100755 doc/salome/gui/SMESH/image96.gif delete mode 100755 doc/salome/gui/SMESH/image97.gif delete mode 100755 doc/salome/gui/SMESH/image98.gif delete mode 100755 doc/salome/gui/SMESH/note1.gif delete mode 100755 doc/salome/gui/SMESH/pattern_mapping.htm delete mode 100755 doc/salome/gui/SMESH/pics/exemple.gif delete mode 100755 doc/salome/gui/SMESH/pics/new.jpg delete mode 100755 doc/salome/gui/SMESH/revolution.htm delete mode 100755 doc/salome/gui/SMESH/smesh.htm delete mode 100755 doc/salome/gui/SMESH/smesh.html delete mode 100755 doc/salome/gui/SMESH/smesh_csh.htm delete mode 100755 doc/salome/gui/SMESH/smesh_csh.html delete mode 100755 doc/salome/gui/SMESH/smesh_rhc.htm delete mode 100755 doc/salome/gui/SMESH/smesh_rhc.html delete mode 100755 doc/salome/gui/SMESH/tetrahedron_(ghs3d)_meshing_algorithm.htm delete mode 100755 doc/salome/gui/SMESH/texture_horiz_ltbluebubbles.jpg 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/whdata/whftdata.js delete mode 100755 doc/salome/gui/SMESH/whdata/whftdata0.htm delete mode 100755 doc/salome/gui/SMESH/whdata/whftdata0.xml delete mode 100755 doc/salome/gui/SMESH/whdata/whfts.htm delete mode 100755 doc/salome/gui/SMESH/whdata/whfts.js delete mode 100755 doc/salome/gui/SMESH/whdata/whfts.xml delete mode 100755 doc/salome/gui/SMESH/whdata/whfwdata.js delete mode 100755 doc/salome/gui/SMESH/whdata/whfwdata0.htm delete mode 100755 doc/salome/gui/SMESH/whdata/whfwdata0.xml delete mode 100755 doc/salome/gui/SMESH/whdata/whgdata.js delete mode 100755 doc/salome/gui/SMESH/whdata/whgdata0.htm delete mode 100755 doc/salome/gui/SMESH/whdata/whgdata0.xml delete mode 100755 doc/salome/gui/SMESH/whdata/whglo.htm delete mode 100755 doc/salome/gui/SMESH/whdata/whglo.js delete mode 100755 doc/salome/gui/SMESH/whdata/whglo.xml delete mode 100755 doc/salome/gui/SMESH/whdata/whidata.js delete mode 100755 doc/salome/gui/SMESH/whdata/whidx.htm delete mode 100755 doc/salome/gui/SMESH/whdata/whidx.js delete mode 100755 doc/salome/gui/SMESH/whdata/whidx.xml delete mode 100755 doc/salome/gui/SMESH/whdata/whtdata.js delete mode 100755 doc/salome/gui/SMESH/whdata/whtdata0.htm delete mode 100755 doc/salome/gui/SMESH/whdata/whtdata0.xml delete mode 100755 doc/salome/gui/SMESH/whdata/whtoc.htm delete mode 100755 doc/salome/gui/SMESH/whdata/whtoc.js delete mode 100755 doc/salome/gui/SMESH/whdata/whtoc.xml delete mode 100755 doc/salome/gui/SMESH/whestart.ico 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/whgdata/whexpbar.gif delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstf0.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstf1.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstf2.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstf3.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstf4.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstf5.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstf6.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstf7.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl0.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl1.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl10.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl11.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl12.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl13.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl14.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl15.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl16.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl17.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl18.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl19.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl2.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl20.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl21.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl22.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl23.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl3.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl4.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl5.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl6.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl7.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl8.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstfl9.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstg0.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlsti0.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstt0.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstt1.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstt10.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstt11.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstt12.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstt13.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstt2.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstt3.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstt4.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstt5.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstt6.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstt7.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstt8.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whlstt9.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvf30.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvf31.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvf32.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvf33.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvl31.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvl32.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvl33.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvp30.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvp31.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvp32.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvp33.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvt30.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvt31.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvt32.htm delete mode 100755 doc/salome/gui/SMESH/whgdata/whnvt33.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/whrstart.ico delete mode 100755 doc/salome/gui/SMESH/whskin_banner.htm delete mode 100755 doc/salome/gui/SMESH/whskin_blank.htm delete mode 100755 doc/salome/gui/SMESH/whskin_frmset01.htm delete mode 100755 doc/salome/gui/SMESH/whskin_frmset010.htm delete mode 100755 doc/salome/gui/SMESH/whskin_info.htm delete mode 100755 doc/salome/gui/SMESH/whskin_mbars.htm delete mode 100755 doc/salome/gui/SMESH/whskin_papplet.htm delete mode 100755 doc/salome/gui/SMESH/whskin_pdhtml.htm delete mode 100755 doc/salome/gui/SMESH/whskin_plist.htm delete mode 100755 doc/salome/gui/SMESH/whskin_tbars.htm delete mode 100755 doc/salome/gui/SMESH/whst_topics.xml delete mode 100755 doc/salome/gui/SMESH/whstart.ico 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/wht_abge.jpg delete mode 100755 doc/salome/gui/SMESH/wht_abgi.jpg delete mode 100755 doc/salome/gui/SMESH/wht_abgw.jpg delete mode 100755 doc/salome/gui/SMESH/wht_abte.jpg delete mode 100755 doc/salome/gui/SMESH/wht_abti.jpg delete mode 100755 doc/salome/gui/SMESH/wht_abtw.jpg delete mode 100755 doc/salome/gui/SMESH/wht_fts_h.gif delete mode 100755 doc/salome/gui/SMESH/wht_fts_n.gif delete mode 100755 doc/salome/gui/SMESH/wht_glo_h.gif delete mode 100755 doc/salome/gui/SMESH/wht_glo_n.gif delete mode 100755 doc/salome/gui/SMESH/wht_go.gif delete mode 100755 doc/salome/gui/SMESH/wht_hide.gif delete mode 100755 doc/salome/gui/SMESH/wht_idx_h.gif delete mode 100755 doc/salome/gui/SMESH/wht_idx_n.gif delete mode 100755 doc/salome/gui/SMESH/wht_logo1.gif delete mode 100755 doc/salome/gui/SMESH/wht_logo2.gif delete mode 100755 doc/salome/gui/SMESH/wht_next.gif delete mode 100755 doc/salome/gui/SMESH/wht_next_g.gif delete mode 100755 doc/salome/gui/SMESH/wht_prev.gif delete mode 100755 doc/salome/gui/SMESH/wht_prev_g.gif delete mode 100755 doc/salome/gui/SMESH/wht_spac.gif delete mode 100755 doc/salome/gui/SMESH/wht_sync.gif delete mode 100755 doc/salome/gui/SMESH/wht_tab0.gif delete mode 100755 doc/salome/gui/SMESH/wht_tab1.gif delete mode 100755 doc/salome/gui/SMESH/wht_tab2.gif delete mode 100755 doc/salome/gui/SMESH/wht_tab3.gif delete mode 100755 doc/salome/gui/SMESH/wht_tab4.gif delete mode 100755 doc/salome/gui/SMESH/wht_tab5.gif delete mode 100755 doc/salome/gui/SMESH/wht_tab6.gif delete mode 100755 doc/salome/gui/SMESH/wht_tab7.gif delete mode 100755 doc/salome/gui/SMESH/wht_tab8.gif delete mode 100755 doc/salome/gui/SMESH/wht_toc1.gif delete mode 100755 doc/salome/gui/SMESH/wht_toc2.gif delete mode 100755 doc/salome/gui/SMESH/wht_toc3.gif delete mode 100755 doc/salome/gui/SMESH/wht_toc4.gif delete mode 100755 doc/salome/gui/SMESH/wht_toc_h.gif delete mode 100755 doc/salome/gui/SMESH/wht_toc_n.gif delete mode 100755 doc/salome/gui/SMESH/wht_ws.gif delete mode 100755 doc/salome/gui/SMESH/wht_ws_g.gif delete mode 100755 doc/salome/gui/SMESH/whtbar.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 delete mode 100644 doc/salome/tui/Makefile.in delete mode 100644 doc/salome/tui/SMESH/HTML/SMESH_BasicHypothesis.html delete mode 100644 doc/salome/tui/SMESH/HTML/SMESH_Gen.html delete mode 100644 doc/salome/tui/SMESH/HTML/SMESH_Hypothesis.html delete mode 100644 doc/salome/tui/SMESH/HTML/SMESH_Mesh.html delete mode 100755 doc/salome/tui/SMESH/doxyfile delete mode 100755 doc/salome/tui/SMESH/doxyfile_py delete mode 100755 doc/salome/tui/SMESH/sources/Application-About.png delete mode 100755 doc/salome/tui/SMESH/sources/Application-About1.jpg delete mode 100644 doc/salome/tui/SMESH/sources/application.gif delete mode 100755 doc/salome/tui/SMESH/sources/application.jpg delete mode 100755 doc/salome/tui/SMESH/sources/bg_salome.gif delete mode 100755 doc/salome/tui/SMESH/sources/logocorp.gif delete mode 100755 doc/salome/tui/SMESH/sources/myheader.html delete mode 100755 doc/salome/tui/SMESH/sources/myheader_py2.html delete mode 100755 doc/salome/tui/SMESH/sources/occ.gif delete mode 100755 doc/salome/tui/SMESH/sources/static/PluginMeshers.html delete mode 100755 doc/salome/tui/SMESH/sources/static/doxygen.css delete mode 100755 doc/salome/tui/SMESH/sources/static/page2.html delete mode 100755 doc/salome/tui/SMESH/sources/static/tree.js delete mode 100644 doc/salome/tui/SMESH/sources/static/treeview.js delete mode 100644 idl/Makefile.in delete mode 100644 idl/SMESH_BasicHypothesis.idl delete mode 100644 idl/SMESH_Filter.idl delete mode 100644 idl/SMESH_Gen.idl delete mode 100644 idl/SMESH_Group.idl delete mode 100644 idl/SMESH_Hypothesis.idl delete mode 100644 idl/SMESH_Mesh.idl delete mode 100644 idl/SMESH_Pattern.idl delete mode 100755 resources/ModuleMesh.png delete mode 100644 resources/SMESH.config delete mode 100644 resources/SMESHCatalog.xml delete mode 100644 resources/SMESH_en.xml delete mode 100644 resources/SMESH_fr.xml delete mode 100644 resources/StdMeshers.xml delete mode 100644 resources/advanced_mesh_info.png delete mode 100644 resources/delete.png delete mode 100644 resources/flight_solid.brep delete mode 100644 resources/mesh.png delete mode 100755 resources/mesh_add.png delete mode 100644 resources/mesh_add_sub.png delete mode 100644 resources/mesh_algo_hexa.png delete mode 100644 resources/mesh_algo_mefisto.png delete mode 100644 resources/mesh_algo_netgen.png delete mode 100644 resources/mesh_algo_quad.png delete mode 100644 resources/mesh_algo_regular.png delete mode 100644 resources/mesh_algo_tetra.png delete mode 100644 resources/mesh_angle.png delete mode 100644 resources/mesh_area.png delete mode 100644 resources/mesh_aspect.png delete mode 100644 resources/mesh_aspect_3d.png delete mode 100644 resources/mesh_compute.png delete mode 100644 resources/mesh_connectivity.png delete mode 100644 resources/mesh_cutGroups.png delete mode 100644 resources/mesh_cutquad.png delete mode 100644 resources/mesh_deleteGroups.png delete mode 100644 resources/mesh_diagonal.png delete mode 100644 resources/mesh_edit.png delete mode 100644 resources/mesh_edit_group.png delete mode 100644 resources/mesh_extrusion.png delete mode 100644 resources/mesh_extrusionpath.png delete mode 100755 resources/mesh_free_edges.png delete mode 100644 resources/mesh_free_edges_2d.png delete mode 100644 resources/mesh_hexa.png delete mode 100644 resources/mesh_hexa_n.png delete mode 100644 resources/mesh_hypo_area.png delete mode 100644 resources/mesh_hypo_edit.png delete mode 100644 resources/mesh_hypo_length.png delete mode 100644 resources/mesh_hypo_segment.png delete mode 100644 resources/mesh_hypo_volume.png delete mode 100644 resources/mesh_info.png delete mode 100644 resources/mesh_init.png delete mode 100644 resources/mesh_intersectGroups.png delete mode 100644 resources/mesh_length.png delete mode 100644 resources/mesh_length_2d.png delete mode 100644 resources/mesh_line.png delete mode 100644 resources/mesh_line_n.png delete mode 100644 resources/mesh_make_group.png delete mode 100644 resources/mesh_merge_elements.png delete mode 100644 resources/mesh_merge_nodes.png delete mode 100644 resources/mesh_move_node.png delete mode 100755 resources/mesh_multi_edges.png delete mode 100644 resources/mesh_multi_edges_2d.png delete mode 100644 resources/mesh_orientation.png delete mode 100755 resources/mesh_pattern.png delete mode 100644 resources/mesh_points.png delete mode 100644 resources/mesh_polygon.png delete mode 100644 resources/mesh_polyhedron.png delete mode 100644 resources/mesh_pyramid.png delete mode 100644 resources/mesh_pyramid_n.png delete mode 100644 resources/mesh_quad.png delete mode 100644 resources/mesh_quad_n.png delete mode 100644 resources/mesh_rem_element.png delete mode 100644 resources/mesh_rem_node.png delete mode 100755 resources/mesh_remove.png delete mode 100644 resources/mesh_renumbering_elements.png delete mode 100644 resources/mesh_renumbering_nodes.png delete mode 100644 resources/mesh_revolution.png delete mode 100644 resources/mesh_rotation.png delete mode 100644 resources/mesh_set_algo.png delete mode 100644 resources/mesh_set_hypo.png delete mode 100644 resources/mesh_sew_bordertoside.png delete mode 100644 resources/mesh_sew_conform_freeborders.png delete mode 100644 resources/mesh_sew_freeborders.png delete mode 100644 resources/mesh_sew_sideelements.png delete mode 100644 resources/mesh_shading.png delete mode 100644 resources/mesh_shrink.png delete mode 100644 resources/mesh_skew.png delete mode 100644 resources/mesh_smoothing.png delete mode 100644 resources/mesh_symmetry_axis.png delete mode 100644 resources/mesh_symmetry_plane.png delete mode 100644 resources/mesh_symmetry_point.png delete mode 100644 resources/mesh_taper.png delete mode 100644 resources/mesh_tetra.png delete mode 100644 resources/mesh_tetra_n.png delete mode 100644 resources/mesh_translation_points.png delete mode 100644 resources/mesh_translation_vector.png delete mode 100644 resources/mesh_tree_algo.png delete mode 100644 resources/mesh_tree_algo_hexa.png delete mode 100644 resources/mesh_tree_algo_mefisto.png delete mode 100644 resources/mesh_tree_algo_netgen.png delete mode 100644 resources/mesh_tree_algo_quad.png delete mode 100644 resources/mesh_tree_algo_regular.png delete mode 100644 resources/mesh_tree_algo_tetra.png delete mode 100644 resources/mesh_tree_group.png delete mode 100644 resources/mesh_tree_hypo.png delete mode 100644 resources/mesh_tree_hypo_area.png delete mode 100644 resources/mesh_tree_hypo_length.png delete mode 100644 resources/mesh_tree_hypo_segment.png delete mode 100644 resources/mesh_tree_hypo_volume.png delete mode 100644 resources/mesh_tree_importedmesh.png delete mode 100644 resources/mesh_tree_mesh.png delete mode 100644 resources/mesh_tree_mesh_warn.png delete mode 100644 resources/mesh_triangle.png delete mode 100644 resources/mesh_triangle_n.png delete mode 100644 resources/mesh_union2tri.png delete mode 100644 resources/mesh_unionGroups.png delete mode 100644 resources/mesh_uniontri.png delete mode 100644 resources/mesh_update.png delete mode 100644 resources/mesh_vertex.png delete mode 100644 resources/mesh_vertex_n.png delete mode 100644 resources/mesh_wireframe.png delete mode 100644 resources/mesh_wrap.png delete mode 100755 resources/pattern_sample_2d.png delete mode 100755 resources/pattern_sample_3D.png delete mode 100644 resources/select1.png delete mode 100644 resources/standard_mesh_info.png delete mode 100644 src/Controls/Makefile.in delete mode 100644 src/Controls/SMESHControls.cxx delete mode 100644 src/Controls/SMESH_Controls.cxx delete mode 100644 src/Controls/SMESH_Controls.hxx delete mode 100644 src/Controls/SMESH_ControlsDef.hxx delete mode 100644 src/Driver/Driver_Document.cxx delete mode 100644 src/Driver/Driver_Document.h delete mode 100644 src/Driver/Driver_Mesh.cxx delete mode 100644 src/Driver/Driver_Mesh.h delete mode 100644 src/Driver/Driver_SMDS_Mesh.cxx delete mode 100644 src/Driver/Driver_SMDS_Mesh.h delete mode 100644 src/Driver/Driver_SMESHDS_Mesh.cxx delete mode 100644 src/Driver/Driver_SMESHDS_Mesh.h delete mode 100644 src/Driver/Makefile.in delete mode 100644 src/DriverDAT/DAT_Test.cxx delete mode 100644 src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx delete mode 100644 src/DriverDAT/DriverDAT_R_SMDS_Mesh.h delete mode 100644 src/DriverDAT/DriverDAT_R_SMESHDS_Document.cxx delete mode 100644 src/DriverDAT/DriverDAT_R_SMESHDS_Document.h delete mode 100644 src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.cxx delete mode 100644 src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.h delete mode 100644 src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx delete mode 100644 src/DriverDAT/DriverDAT_W_SMDS_Mesh.h delete mode 100644 src/DriverDAT/DriverDAT_W_SMESHDS_Document.cxx delete mode 100644 src/DriverDAT/DriverDAT_W_SMESHDS_Document.h delete mode 100644 src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.cxx delete mode 100644 src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.h delete mode 100644 src/DriverDAT/Makefile.in delete mode 100644 src/DriverMED/DriverMED_Family.cxx delete mode 100644 src/DriverMED/DriverMED_Family.h delete mode 100644 src/DriverMED/DriverMED_R_SMDS_Mesh.cxx delete mode 100644 src/DriverMED/DriverMED_R_SMDS_Mesh.h delete mode 100644 src/DriverMED/DriverMED_R_SMESHDS_Document.cxx delete mode 100644 src/DriverMED/DriverMED_R_SMESHDS_Document.h delete mode 100644 src/DriverMED/DriverMED_R_SMESHDS_Mesh.h delete mode 100644 src/DriverMED/DriverMED_W_SMDS_Mesh.cxx delete mode 100644 src/DriverMED/DriverMED_W_SMDS_Mesh.h delete mode 100644 src/DriverMED/DriverMED_W_SMESHDS_Document.cxx delete mode 100644 src/DriverMED/DriverMED_W_SMESHDS_Document.h delete mode 100644 src/DriverMED/DriverMED_W_SMESHDS_Mesh.h delete mode 100644 src/DriverMED/MED_Test.cxx delete mode 100644 src/DriverMED/Makefile.in delete mode 100644 src/DriverSTL/DriverSTL_R_SMDS_Mesh.cxx delete mode 100644 src/DriverSTL/DriverSTL_R_SMDS_Mesh.h delete mode 100644 src/DriverSTL/DriverSTL_W_SMDS_Mesh.cxx delete mode 100644 src/DriverSTL/DriverSTL_W_SMDS_Mesh.h delete mode 100644 src/DriverSTL/Makefile.in delete mode 100644 src/DriverSTL/STL_Test.cxx delete mode 100644 src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx delete mode 100644 src/DriverUNV/DriverUNV_R_SMDS_Mesh.h delete mode 100644 src/DriverUNV/DriverUNV_R_SMESHDS_Document.cxx delete mode 100644 src/DriverUNV/DriverUNV_R_SMESHDS_Document.h delete mode 100644 src/DriverUNV/DriverUNV_R_SMESHDS_Mesh.cxx delete mode 100644 src/DriverUNV/DriverUNV_R_SMESHDS_Mesh.h delete mode 100644 src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx delete mode 100644 src/DriverUNV/DriverUNV_W_SMDS_Mesh.h delete mode 100644 src/DriverUNV/DriverUNV_W_SMESHDS_Document.cxx delete mode 100644 src/DriverUNV/DriverUNV_W_SMESHDS_Document.h delete mode 100644 src/DriverUNV/DriverUNV_W_SMESHDS_Mesh.cxx delete mode 100644 src/DriverUNV/DriverUNV_W_SMESHDS_Mesh.h delete mode 100644 src/DriverUNV/Makefile.in delete mode 100644 src/DriverUNV/UNV2411_Structure.cxx delete mode 100644 src/DriverUNV/UNV2411_Structure.hxx delete mode 100644 src/DriverUNV/UNV2412_Structure.cxx delete mode 100644 src/DriverUNV/UNV2412_Structure.hxx delete mode 100644 src/DriverUNV/UNV_Test.cxx delete mode 100644 src/DriverUNV/UNV_Utilities.cxx delete mode 100644 src/DriverUNV/UNV_Utilities.hxx delete mode 100644 src/MEFISTO2/Makefile.in delete mode 100755 src/MEFISTO2/Rn.h delete mode 100755 src/MEFISTO2/aptrte.cxx delete mode 100755 src/MEFISTO2/aptrte.h delete mode 100755 src/MEFISTO2/areteideale.f delete mode 100755 src/MEFISTO2/trte.f delete mode 100644 src/Makefile.in delete mode 100644 src/NETGEN/Makefile.in delete mode 100644 src/NETGEN/ReadMeForNgUsers delete mode 100644 src/NETGEN/netgen43ForSalome.patch delete mode 100644 src/NETGENPlugin/Makefile.in delete mode 100644 src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx delete mode 100644 src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx delete mode 100644 src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.cxx delete mode 100644 src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.hxx delete mode 100644 src/NETGENPlugin/NETGENPlugin_i.cxx delete mode 100644 src/NETGENPlugin/NETGENPlugin_icons.po delete mode 100644 src/OBJECT/Makefile.in delete mode 100644 src/OBJECT/SMESH_Actor.h delete mode 100644 src/OBJECT/SMESH_ActorDef.h delete mode 100644 src/OBJECT/SMESH_ActorUtils.cxx delete mode 100644 src/OBJECT/SMESH_ActorUtils.h delete mode 100644 src/OBJECT/SMESH_DeviceActor.cxx delete mode 100644 src/OBJECT/SMESH_DeviceActor.h delete mode 100644 src/OBJECT/SMESH_ExtractGeometry.cxx delete mode 100644 src/OBJECT/SMESH_ExtractGeometry.h delete mode 100644 src/OBJECT/SMESH_Object.cxx delete mode 100644 src/OBJECT/SMESH_Object.h delete mode 100644 src/OBJECT/SMESH_ObjectDef.h delete mode 100644 src/SMDS/Makefile.in delete mode 100644 src/SMDS/SMDSAbs_ElementType.hxx delete mode 100644 src/SMDS/SMDS_EdgePosition.cxx delete mode 100644 src/SMDS/SMDS_EdgePosition.hxx delete mode 100755 src/SMDS/SMDS_ElemIterator.hxx delete mode 100644 src/SMDS/SMDS_FaceOfEdges.cxx delete mode 100644 src/SMDS/SMDS_FaceOfEdges.hxx delete mode 100644 src/SMDS/SMDS_FaceOfNodes.cxx delete mode 100644 src/SMDS/SMDS_FaceOfNodes.hxx delete mode 100644 src/SMDS/SMDS_FacePosition.cxx delete mode 100644 src/SMDS/SMDS_FacePosition.hxx delete mode 100644 src/SMDS/SMDS_Iterator.hxx delete mode 100644 src/SMDS/SMDS_IteratorOfElements.cxx delete mode 100644 src/SMDS/SMDS_IteratorOfElements.hxx delete mode 100644 src/SMDS/SMDS_Mesh.cxx delete mode 100644 src/SMDS/SMDS_Mesh.hxx delete mode 100644 src/SMDS/SMDS_MeshEdge.cxx delete mode 100644 src/SMDS/SMDS_MeshEdge.hxx delete mode 100644 src/SMDS/SMDS_MeshElement.cxx delete mode 100644 src/SMDS/SMDS_MeshElement.hxx delete mode 100644 src/SMDS/SMDS_MeshElementIDFactory.cxx delete mode 100644 src/SMDS/SMDS_MeshElementIDFactory.hxx delete mode 100644 src/SMDS/SMDS_MeshFace.cxx delete mode 100644 src/SMDS/SMDS_MeshFace.hxx delete mode 100644 src/SMDS/SMDS_MeshGroup.cxx delete mode 100644 src/SMDS/SMDS_MeshGroup.hxx delete mode 100644 src/SMDS/SMDS_MeshIDFactory.cxx delete mode 100644 src/SMDS/SMDS_MeshIDFactory.hxx delete mode 100644 src/SMDS/SMDS_MeshNode.cxx delete mode 100644 src/SMDS/SMDS_MeshNode.hxx delete mode 100644 src/SMDS/SMDS_MeshObject.cxx delete mode 100644 src/SMDS/SMDS_MeshObject.hxx delete mode 100644 src/SMDS/SMDS_MeshVolume.cxx delete mode 100644 src/SMDS/SMDS_MeshVolume.hxx delete mode 100644 src/SMDS/SMDS_PolygonalFaceOfNodes.cxx delete mode 100644 src/SMDS/SMDS_PolygonalFaceOfNodes.hxx delete mode 100644 src/SMDS/SMDS_PolyhedralVolumeOfNodes.cxx delete mode 100644 src/SMDS/SMDS_PolyhedralVolumeOfNodes.hxx delete mode 100644 src/SMDS/SMDS_Position.cxx delete mode 100644 src/SMDS/SMDS_Position.hxx delete mode 100644 src/SMDS/SMDS_SpacePosition.cxx delete mode 100644 src/SMDS/SMDS_SpacePosition.hxx delete mode 100644 src/SMDS/SMDS_TypeOfPosition.hxx delete mode 100644 src/SMDS/SMDS_VertexPosition.cxx delete mode 100644 src/SMDS/SMDS_VertexPosition.hxx delete mode 100644 src/SMDS/SMDS_VolumeOfFaces.cxx delete mode 100644 src/SMDS/SMDS_VolumeOfFaces.hxx delete mode 100644 src/SMDS/SMDS_VolumeOfNodes.cxx delete mode 100644 src/SMDS/SMDS_VolumeOfNodes.hxx delete mode 100644 src/SMDS/SMDS_VolumeTool.cxx delete mode 100644 src/SMDS/SMDS_VolumeTool.hxx delete mode 100644 src/SMESH/Makefile.in delete mode 100644 src/SMESH/SMESH_1D_Algo.cxx delete mode 100644 src/SMESH/SMESH_1D_Algo.hxx delete mode 100644 src/SMESH/SMESH_2D_Algo.cxx delete mode 100644 src/SMESH/SMESH_2D_Algo.hxx delete mode 100644 src/SMESH/SMESH_3D_Algo.cxx delete mode 100644 src/SMESH/SMESH_3D_Algo.hxx delete mode 100644 src/SMESH/SMESH_Algo.cxx delete mode 100644 src/SMESH/SMESH_Algo.hxx delete mode 100644 src/SMESH/SMESH_Block.cxx delete mode 100644 src/SMESH/SMESH_Block.hxx delete mode 100644 src/SMESH/SMESH_Gen.cxx delete mode 100644 src/SMESH/SMESH_Gen.hxx delete mode 100644 src/SMESH/SMESH_Group.cxx delete mode 100644 src/SMESH/SMESH_Group.hxx delete mode 100644 src/SMESH/SMESH_HypoFilter.cxx delete mode 100644 src/SMESH/SMESH_HypoFilter.hxx delete mode 100644 src/SMESH/SMESH_Hypothesis.cxx delete mode 100644 src/SMESH/SMESH_Hypothesis.hxx delete mode 100644 src/SMESH/SMESH_Mesh.cxx delete mode 100644 src/SMESH/SMESH_Mesh.hxx delete mode 100644 src/SMESH/SMESH_MeshEditor.cxx delete mode 100644 src/SMESH/SMESH_MeshEditor.hxx delete mode 100644 src/SMESH/SMESH_Pattern.cxx delete mode 100644 src/SMESH/SMESH_Pattern.hxx delete mode 100644 src/SMESH/SMESH_subMesh.cxx delete mode 100644 src/SMESH/SMESH_subMesh.hxx delete mode 100644 src/SMESHDS/Makefile.in delete mode 100644 src/SMESHDS/SMESHDS_Command.cxx delete mode 100644 src/SMESHDS/SMESHDS_Command.hxx delete mode 100644 src/SMESHDS/SMESHDS_CommandType.hxx delete mode 100644 src/SMESHDS/SMESHDS_Document.cxx delete mode 100644 src/SMESHDS/SMESHDS_Document.hxx delete mode 100644 src/SMESHDS/SMESHDS_Group.cxx delete mode 100644 src/SMESHDS/SMESHDS_Group.hxx delete mode 100644 src/SMESHDS/SMESHDS_GroupBase.cxx delete mode 100644 src/SMESHDS/SMESHDS_GroupBase.hxx delete mode 100644 src/SMESHDS/SMESHDS_GroupOnGeom.cxx delete mode 100644 src/SMESHDS/SMESHDS_GroupOnGeom.hxx delete mode 100644 src/SMESHDS/SMESHDS_Hypothesis.cxx delete mode 100644 src/SMESHDS/SMESHDS_Hypothesis.hxx delete mode 100644 src/SMESHDS/SMESHDS_Mesh.cxx delete mode 100644 src/SMESHDS/SMESHDS_Mesh.hxx delete mode 100644 src/SMESHDS/SMESHDS_Script.cxx delete mode 100644 src/SMESHDS/SMESHDS_Script.hxx delete mode 100644 src/SMESHDS/SMESHDS_SubMesh.cxx delete mode 100644 src/SMESHDS/SMESHDS_SubMesh.hxx delete mode 100644 src/SMESHFiltersSelection/Handle_SMESH_TypeFilter.hxx delete mode 100644 src/SMESHFiltersSelection/SMESH_LogicalFilter.cxx delete mode 100644 src/SMESHFiltersSelection/SMESH_LogicalFilter.hxx delete mode 100644 src/SMESHFiltersSelection/SMESH_NumberFilter.cxx delete mode 100644 src/SMESHFiltersSelection/SMESH_NumberFilter.hxx delete mode 100644 src/SMESHFiltersSelection/SMESH_Type.h delete mode 100644 src/SMESHFiltersSelection/SMESH_TypeFilter.cxx delete mode 100644 src/SMESHFiltersSelection/SMESH_TypeFilter.hxx delete mode 100644 src/SMESHFiltersSelection/SMESH_TypeFilter.ixx delete mode 100644 src/SMESHFiltersSelection/SMESH_TypeFilter.jxx delete mode 100644 src/SMESHGUI/Makefile.in delete mode 100644 src/SMESHGUI/SMESHBin.cxx delete mode 100644 src/SMESHGUI/SMESHGUI.h delete mode 100644 src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_AddMeshElementDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_AddSubMeshDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_AddSubMeshDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_ClippingDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_ClippingDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.h delete mode 100755 src/SMESHGUI/SMESHGUI_CreatePatternDlg.cxx delete mode 100755 src/SMESHGUI/SMESHGUI_CreatePatternDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_DeleteGroupDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_Dialog.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_Dialog.h delete mode 100644 src/SMESHGUI/SMESHGUI_EditHypothesesDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_EditHypothesesDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_EditMeshDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_EditMeshDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_ExtrusionDlg.h delete mode 100755 src/SMESHGUI/SMESHGUI_Filter.cxx delete mode 100755 src/SMESHGUI/SMESHGUI_Filter.h delete mode 100755 src/SMESHGUI/SMESHGUI_FilterDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_FilterLibraryDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_FilterUtils.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_FilterUtils.h delete mode 100644 src/SMESHGUI/SMESHGUI_GEOMGenUtils.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_GEOMGenUtils.h delete mode 100644 src/SMESHGUI/SMESHGUI_GroupDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_GroupOpDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_GroupUtils.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_GroupUtils.h delete mode 100644 src/SMESHGUI/SMESHGUI_Hypotheses.h delete mode 100644 src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_HypothesesUtils.h delete mode 100644 src/SMESHGUI/SMESHGUI_IdValidator.h delete mode 100644 src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_InitMeshDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_MergeNodesDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_MeshDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_MeshDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_MeshInfosDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_MeshOp.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_MeshOp.h delete mode 100755 src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx delete mode 100755 src/SMESHGUI/SMESHGUI_MeshPatternDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_MeshUtils.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_MeshUtils.h delete mode 100644 src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_MoveNodesDlg.h delete mode 100755 src/SMESHGUI/SMESHGUI_MultiEditDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_NodesDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_NodesDlg.h delete mode 100755 src/SMESHGUI/SMESHGUI_Operation.cxx delete mode 100755 src/SMESHGUI/SMESHGUI_Operation.h delete mode 100644 src/SMESHGUI/SMESHGUI_PatternUtils.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_PatternUtils.h delete mode 100644 src/SMESHGUI/SMESHGUI_PatternWidget.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_PatternWidget.h delete mode 100755 src/SMESHGUI/SMESHGUI_PrecisionDlg.cxx delete mode 100755 src/SMESHGUI/SMESHGUI_PrecisionDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_Preferences_SelectionDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_Preferences_SelectionDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_RemoveElementsDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_RemoveNodesDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_RenumberingDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_RevolutionDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_RotationDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_RotationDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_SMESHGenUtils.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_SMESHGenUtils.h delete mode 100644 src/SMESHGUI/SMESHGUI_Selection.h delete mode 100644 src/SMESHGUI/SMESHGUI_SelectionOp.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_SelectionOp.h delete mode 100644 src/SMESHGUI/SMESHGUI_SewingDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_SewingDlg.h delete mode 100755 src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx delete mode 100755 src/SMESHGUI/SMESHGUI_SingleEditDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_SmoothingDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_SpinBox.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_SpinBox.h delete mode 100644 src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_Swig.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_Swig.hxx delete mode 100644 src/SMESHGUI/SMESHGUI_Swig.i delete mode 100644 src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_SymmetryDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_TranslationDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_TranslationDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_TransparencyDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_TransparencyDlg.h delete mode 100644 src/SMESHGUI/SMESHGUI_Utils.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_Utils.h delete mode 100644 src/SMESHGUI/SMESHGUI_XmlHandler.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_XmlHandler.h delete mode 100644 src/SMESHGUI/SMESHGUI_aParameter.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_aParameter.h delete mode 100644 src/SMESHGUI/SMESHGUI_aParameterDlg.cxx delete mode 100644 src/SMESHGUI/SMESHGUI_aParameterDlg.h delete mode 100644 src/SMESHGUI/SMESH_icons.po delete mode 100644 src/SMESHGUI/SMESH_images.po delete mode 100644 src/SMESHGUI/SMESH_msg_en.po delete mode 100644 src/SMESH_I/SMESH.hxx delete mode 100644 src/SMESH_I/SMESHEngine.cxx delete mode 100644 src/SMESH_I/SMESH_1D_Algo_i.cxx delete mode 100644 src/SMESH_I/SMESH_1D_Algo_i.hxx delete mode 100644 src/SMESH_I/SMESH_2D_Algo_i.cxx delete mode 100644 src/SMESH_I/SMESH_2D_Algo_i.hxx delete mode 100644 src/SMESH_I/SMESH_3D_Algo_i.cxx delete mode 100644 src/SMESH_I/SMESH_3D_Algo_i.hxx delete mode 100644 src/SMESH_I/SMESH_Algo_i.cxx delete mode 100644 src/SMESH_I/SMESH_Algo_i.hxx delete mode 100644 src/SMESH_I/SMESH_DumpPython.cxx delete mode 100644 src/SMESH_I/SMESH_Filter_i.cxx delete mode 100644 src/SMESH_I/SMESH_Filter_i.hxx delete mode 100644 src/SMESH_I/SMESH_Gen_i.cxx delete mode 100644 src/SMESH_I/SMESH_Gen_i.hxx delete mode 100644 src/SMESH_I/SMESH_Gen_i_1.cxx delete mode 100644 src/SMESH_I/SMESH_Group_i.cxx delete mode 100644 src/SMESH_I/SMESH_Group_i.hxx delete mode 100644 src/SMESH_I/SMESH_Hypothesis_i.cxx delete mode 100644 src/SMESH_I/SMESH_Hypothesis_i.hxx delete mode 100644 src/SMESH_I/SMESH_MEDFamily_i.cxx delete mode 100644 src/SMESH_I/SMESH_MEDFamily_i.hxx delete mode 100644 src/SMESH_I/SMESH_MEDMesh_i.cxx delete mode 100644 src/SMESH_I/SMESH_MEDMesh_i.hxx delete mode 100644 src/SMESH_I/SMESH_MEDSupport_i.cxx delete mode 100644 src/SMESH_I/SMESH_MEDSupport_i.hxx delete mode 100644 src/SMESH_I/SMESH_MeshEditor_i.cxx delete mode 100644 src/SMESH_I/SMESH_MeshEditor_i.hxx delete mode 100644 src/SMESH_I/SMESH_Mesh_i.cxx delete mode 100644 src/SMESH_I/SMESH_Mesh_i.hxx delete mode 100644 src/SMESH_I/SMESH_Pattern_i.cxx delete mode 100644 src/SMESH_I/SMESH_Pattern_i.hxx delete mode 100644 src/SMESH_I/SMESH_PythonDump.hxx delete mode 100644 src/SMESH_I/SMESH_subMesh_i.cxx delete mode 100644 src/SMESH_I/SMESH_subMesh_i.hxx delete mode 100644 src/SMESH_I/smeshpy.py delete mode 100644 src/SMESH_SWIG/Makefile.in delete mode 100755 src/SMESH_SWIG/PAL_MESH_041_mesh.py delete mode 100755 src/SMESH_SWIG/PAL_MESH_043_2D.py delete mode 100755 src/SMESH_SWIG/PAL_MESH_043_3D.py delete mode 100644 src/SMESH_SWIG/SMESH_BelongToGeom.py delete mode 100644 src/SMESH_SWIG/SMESH_GroupFromGeom.py delete mode 100755 src/SMESH_SWIG/SMESH_GroupFromGeom2.py delete mode 100644 src/SMESH_SWIG/SMESH_GroupLyingOnGeom.py delete mode 100755 src/SMESH_SWIG/SMESH_Nut.py delete mode 100644 src/SMESH_SWIG/SMESH_Partition1_tetra.py delete mode 100644 src/SMESH_SWIG/SMESH_Sphere.py delete mode 100644 src/SMESH_SWIG/SMESH_blocks.py delete mode 100755 src/SMESH_SWIG/SMESH_box.py delete mode 100644 src/SMESH_SWIG/SMESH_box2_tetra.py delete mode 100644 src/SMESH_SWIG/SMESH_box3_tetra.py delete mode 100644 src/SMESH_SWIG/SMESH_box_tetra.py delete mode 100644 src/SMESH_SWIG/SMESH_controls.py delete mode 100755 src/SMESH_SWIG/SMESH_demo_hexa2_upd.py delete mode 100644 src/SMESH_SWIG/SMESH_fixation.py delete mode 100644 src/SMESH_SWIG/SMESH_fixation_hexa.py delete mode 100644 src/SMESH_SWIG/SMESH_fixation_tetra.py delete mode 100644 src/SMESH_SWIG/SMESH_flight_skin.py delete mode 100644 src/SMESH_SWIG/SMESH_freebord.py delete mode 100755 src/SMESH_SWIG/SMESH_hexaedre.py delete mode 100644 src/SMESH_SWIG/SMESH_mechanic.py delete mode 100644 src/SMESH_SWIG/SMESH_mechanic_editor.py delete mode 100644 src/SMESH_SWIG/SMESH_mechanic_tetra.py delete mode 100644 src/SMESH_SWIG/SMESH_reg.py delete mode 100644 src/SMESH_SWIG/SMESH_shared_modules.py delete mode 100644 src/SMESH_SWIG/SMESH_test.py delete mode 100644 src/SMESH_SWIG/SMESH_test0.py delete mode 100644 src/SMESH_SWIG/SMESH_test1.py delete mode 100644 src/SMESH_SWIG/SMESH_test2.py delete mode 100644 src/SMESH_SWIG/SMESH_test3.py delete mode 100755 src/SMESH_SWIG/SMESH_test4.py delete mode 100644 src/SMESH_SWIG/SMESH_test5.py delete mode 100644 src/SMESH_SWIG/batchmode_mefisto.py delete mode 100644 src/SMESH_SWIG/batchmode_smesh.py delete mode 100644 src/SMESH_SWIG/ex00_all.py delete mode 100644 src/SMESH_SWIG/ex01_cube2build.py delete mode 100644 src/SMESH_SWIG/ex02_cube2primitive.py delete mode 100644 src/SMESH_SWIG/ex03_cube2partition.py delete mode 100644 src/SMESH_SWIG/ex04_cube5tetraHexa.py delete mode 100644 src/SMESH_SWIG/ex05_hole1build.py delete mode 100644 src/SMESH_SWIG/ex06_hole1boolean.py delete mode 100644 src/SMESH_SWIG/ex07_hole1partition.py delete mode 100644 src/SMESH_SWIG/ex08_hole2build.py delete mode 100644 src/SMESH_SWIG/ex09_grid4build.py delete mode 100644 src/SMESH_SWIG/ex10_grid4geometry.py delete mode 100644 src/SMESH_SWIG/ex11_grid3partition.py delete mode 100644 src/SMESH_SWIG/ex12_grid17partition.py delete mode 100644 src/SMESH_SWIG/ex13_hole1partial.py delete mode 100644 src/SMESH_SWIG/ex14_cyl1holed.py delete mode 100644 src/SMESH_SWIG/ex15_cyl2geometry.py delete mode 100644 src/SMESH_SWIG/ex16_cyl2complementary.py delete mode 100644 src/SMESH_SWIG/ex17_dome1.py delete mode 100644 src/SMESH_SWIG/ex18_dome2.py delete mode 100644 src/SMESH_SWIG/ex19_sphereINcube.py delete mode 100644 src/SMESH_SWIG/libSMESH_Swig.i delete mode 100644 src/SMESH_SWIG/smesh.py delete mode 100644 src/StdMeshers/Makefile.in delete mode 100644 src/StdMeshers/StdMeshers_Arithmetic1D.cxx delete mode 100644 src/StdMeshers/StdMeshers_Arithmetic1D.hxx delete mode 100644 src/StdMeshers/StdMeshers_Deflection1D.cxx delete mode 100644 src/StdMeshers/StdMeshers_Deflection1D.hxx delete mode 100644 src/StdMeshers/StdMeshers_Hexa_3D.cxx delete mode 100644 src/StdMeshers/StdMeshers_Hexa_3D.hxx delete mode 100644 src/StdMeshers/StdMeshers_LengthFromEdges.cxx delete mode 100644 src/StdMeshers/StdMeshers_LengthFromEdges.hxx delete mode 100644 src/StdMeshers/StdMeshers_LocalLength.cxx delete mode 100644 src/StdMeshers/StdMeshers_LocalLength.hxx delete mode 100644 src/StdMeshers/StdMeshers_MEFISTO_2D.cxx delete mode 100644 src/StdMeshers/StdMeshers_MEFISTO_2D.hxx delete mode 100644 src/StdMeshers/StdMeshers_MaxElementArea.cxx delete mode 100644 src/StdMeshers/StdMeshers_MaxElementArea.hxx delete mode 100644 src/StdMeshers/StdMeshers_MaxElementVolume.cxx delete mode 100644 src/StdMeshers/StdMeshers_MaxElementVolume.hxx delete mode 100644 src/StdMeshers/StdMeshers_NotConformAllowed.cxx delete mode 100644 src/StdMeshers/StdMeshers_NotConformAllowed.hxx delete mode 100644 src/StdMeshers/StdMeshers_NumberOfSegments.cxx delete mode 100644 src/StdMeshers/StdMeshers_NumberOfSegments.hxx delete mode 100644 src/StdMeshers/StdMeshers_Penta_3D.cxx delete mode 100644 src/StdMeshers/StdMeshers_Penta_3D.hxx delete mode 100644 src/StdMeshers/StdMeshers_Propagation.cxx delete mode 100644 src/StdMeshers/StdMeshers_Propagation.hxx delete mode 100644 src/StdMeshers/StdMeshers_Quadrangle_2D.cxx delete mode 100644 src/StdMeshers/StdMeshers_Quadrangle_2D.hxx delete mode 100644 src/StdMeshers/StdMeshers_Regular_1D.cxx delete mode 100644 src/StdMeshers/StdMeshers_Regular_1D.hxx delete mode 100644 src/StdMeshers/StdMeshers_StartEndLength.cxx delete mode 100644 src/StdMeshers/StdMeshers_StartEndLength.hxx delete mode 100644 src/StdMeshersGUI/Makefile.in delete mode 100644 src/StdMeshersGUI/StdMeshersGUI.cxx delete mode 100644 src/StdMeshersGUI/StdMeshersGUI_CreateHypothesisDlg.cxx delete mode 100644 src/StdMeshersGUI/StdMeshersGUI_CreateHypothesisDlg.h delete mode 100644 src/StdMeshersGUI/StdMeshersGUI_CreateStdHypothesisDlg.cxx delete mode 100644 src/StdMeshersGUI/StdMeshersGUI_CreateStdHypothesisDlg.h delete mode 100644 src/StdMeshersGUI/StdMeshersGUI_Parameters.cxx delete mode 100644 src/StdMeshersGUI/StdMeshersGUI_Parameters.h delete mode 100644 src/StdMeshersGUI/StdMeshers_icons.po delete mode 100644 src/StdMeshersGUI/StdMeshers_images.po delete mode 100644 src/StdMeshersGUI/StdMeshers_msg_en.po delete mode 100644 src/StdMeshers_I/Makefile.in delete mode 100644 src/StdMeshers_I/StdMeshers_Arithmetic1D_i.cxx delete mode 100644 src/StdMeshers_I/StdMeshers_Arithmetic1D_i.hxx delete mode 100644 src/StdMeshers_I/StdMeshers_Deflection1D_i.cxx delete mode 100644 src/StdMeshers_I/StdMeshers_Deflection1D_i.hxx delete mode 100644 src/StdMeshers_I/StdMeshers_Hexa_3D_i.cxx delete mode 100644 src/StdMeshers_I/StdMeshers_Hexa_3D_i.hxx delete mode 100644 src/StdMeshers_I/StdMeshers_LengthFromEdges_i.cxx delete mode 100644 src/StdMeshers_I/StdMeshers_LengthFromEdges_i.hxx delete mode 100644 src/StdMeshers_I/StdMeshers_LocalLength_i.cxx delete mode 100644 src/StdMeshers_I/StdMeshers_LocalLength_i.hxx delete mode 100644 src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.cxx delete mode 100644 src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.hxx delete mode 100644 src/StdMeshers_I/StdMeshers_MaxElementArea_i.cxx delete mode 100644 src/StdMeshers_I/StdMeshers_MaxElementArea_i.hxx delete mode 100644 src/StdMeshers_I/StdMeshers_MaxElementVolume_i.cxx delete mode 100644 src/StdMeshers_I/StdMeshers_MaxElementVolume_i.hxx delete mode 100644 src/StdMeshers_I/StdMeshers_NotConformAllowed_i.cxx delete mode 100644 src/StdMeshers_I/StdMeshers_NotConformAllowed_i.hxx delete mode 100644 src/StdMeshers_I/StdMeshers_NumberOfSegments_i.cxx delete mode 100644 src/StdMeshers_I/StdMeshers_NumberOfSegments_i.hxx delete mode 100644 src/StdMeshers_I/StdMeshers_Propagation_i.cxx delete mode 100644 src/StdMeshers_I/StdMeshers_Propagation_i.hxx delete mode 100644 src/StdMeshers_I/StdMeshers_Quadrangle_2D_i.cxx delete mode 100644 src/StdMeshers_I/StdMeshers_Quadrangle_2D_i.hxx delete mode 100644 src/StdMeshers_I/StdMeshers_Regular_1D_i.cxx delete mode 100644 src/StdMeshers_I/StdMeshers_Regular_1D_i.hxx delete mode 100644 src/StdMeshers_I/StdMeshers_StartEndLength_i.cxx delete mode 100644 src/StdMeshers_I/StdMeshers_StartEndLength_i.hxx delete mode 100644 src/StdMeshers_I/StdMeshers_i.cxx diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index 46cf0c992..000000000 --- a/ChangeLog +++ /dev/null @@ -1,1811 +0,0 @@ -############################################################################### -#This is the SMESH change log. Do not modify because it is automatically -#created with : -#cvs2cl.pl -l "-b" -U users.cvs2cl --header header.cvs2cl -T -b --utc -############################################################################### - -2004-01-30 13:18 Nicolas Rejneri - - * doc/html/INPUT/: doxyfile, sources/static/tree.js: NRI : 1.4.0 - version - -2004-01-29 17:52 Jerome Robert - - * INSTALL, bin/VERSION: Upgrade to version 1.4.0. - -2004-01-29 17:33 Jerome Robert - - * src/: SMESHGUI/SMESHGUI_StudyAPI.cxx, SMESHGUI/SMESHGUI_Swig.cxx, - SMESH_I/SMESH_Gen_i.cxx: Merge branch merge_1_2_d - -2004-01-14 09:24 Nicolas Rejneri - - * doc/html/Makefile.in: NRI : bug KERNEL5014 fixed. - -2004-01-06 15:19 Nadir Bouhamou - - * src/SMESH_SWIG/SMESH_flight_skin.py: removing the call to the - tetrahedron generator NETGEN, because I did not yet manage to - make NETGEN running on the flight geometry. - -2004-01-06 15:16 Nadir Bouhamou - - * resources/SMESH_en.xml, resources/SMESH_fr.xml, - src/SMESHGUI/SMESHGUI.cxx: Mounting the hypothesis - LengthFromEdges in th GUI of SMESH. This functionality was only - in the C++ API, and in the CORBA API. - -2004-01-05 16:14 Jerome Robert - - * adm_local/unix/config_files/check_Netgen.m4: Fix a mispelled - environment variable for idl python - -2004-01-05 14:28 tag V1_3_1 - -2004-01-05 13:53 Jerome Robert - - * src/NETGEN/: ReadMeForNgUsers, netgen43ForSalome.patch: Add a - patch to make the build of netgen more user-friendly - -2004-01-05 13:52 Jerome Robert - - * src/NETGEN/Makefile.in: We do not need OCAF in Netgen - -2004-01-05 13:38 Jerome Robert - - * adm_local/unix/config_files/check_Netgen.m4: Fix some quotes - problems. - -2004-01-05 09:05 Jerome Robert - - * src/: SMDS/SMDS_Mesh.cxx, SMESHDS/SMESHDS_Document.cxx: [Bug - SMESH4830] bug in instal with gcc 2.95. Bug fixed. Note: SGI say - that is requiered to use set_intersection (see - http://www.sgi.com/tech/stl/set_intersection.html). - -2003-12-16 15:27 Nadir Bouhamou - - * adm_local/unix/config_files/check_Netgen.m4: Since there is an - idl precompilation directive in SMESH_BasicHypothesis.idl file, a - -DHAVE_NETGEN idl has to be added when compiling SMESH with - netgen to the idl c++ flags as well as to the idl python flags. - -2003-12-15 13:15 Nadir Bouhamou - - * src/SMESHDS/SMESHDS_Script.cxx: correct a small bug found by the - EDF developpement team (PN and AT) : AddVolume in the case of a - Tetrahedron. - -2003-12-11 09:51 Jerome Robert - - * src/SMESHGUI/SMESHGUI.cxx: [Bug SMESH4598] Crash of the session - when compute and update are not done in the same view. Bug fixed. - -2003-12-11 09:49 Jerome Robert - - * src/SMESH/SMESH_HypothesisFactory.cxx: HAVE_NETGEN (#define) to - remove an unresolved symbol when building without netgen - -2003-12-10 17:23 Jerome Robert - - * adm_local/unix/config_files/check_Netgen.m4, - idl/SMESH_BasicHypothesis.idl, - src/SMESH_I/SMESH_HypothesisFactory_i.cxx: Create and use - HAVE_NETGEN (#define) to avoid unresolved symbols in libraries. - -2003-12-10 16:05 Jerome Robert - - * src/SMESHGUI/SMESHGUI.cxx: Cosmetics - -2003-12-09 14:13 Nadir Bouhamou - - * src/SMESH/Makefile.in: Correcting a problem araising when - building the SMESH module whithout Netgen. - -2003-12-09 10:00 Nadir Bouhamou - - * doc/: AddNetgenInSalome2.pdf, AddNetgenInSalome2.ps, - AddNetgenInSalome2.sxw: updating or adding when merging in the - main trunk with the version in the branch nadir_1_2_2 !! Here a - document related to the integration of NETGEN in the SMESH module - has been added for future work in the integration of other - mesher. - -2003-12-08 15:30 Nadir Bouhamou - - * INSTALL, Makefile.in, configure.in.base, - adm_local/unix/make_commence.in, - adm_local/unix/config_files/check_Netgen.m4, bin/VERSION, - idl/SMESH_BasicHypothesis.idl, resources/SMESH_en.xml, - resources/SMESH_fr.xml, resources/flight_solid.brep, - resources/mesh_algo_netgen.png, resources/mesh_algo_tetra.png, - resources/mesh_tree_algo_netgen.png, - resources/mesh_tree_algo_tetra.png, src/Makefile.in, - src/DriverMED/DriverMED_R_SMDS_Mesh.cxx, - src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx, - src/DriverMED/DriverMED_W_SMDS_Mesh.cxx, - src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx, - src/NETGEN/Makefile.in, src/NETGEN/ReadMeForNgUsers, - src/SMESH/Makefile.in, src/SMESH/SMESH_HypothesisFactory.cxx, - src/SMESH/SMESH_MEFISTO_2D.cxx, - src/SMESH/SMESH_MaxElementVolume.cxx, - src/SMESH/SMESH_MaxElementVolume.hxx, - src/SMESH/SMESH_NETGEN_3D.cxx, src/SMESH/SMESH_NETGEN_3D.hxx, - src/SMESH/SMESH_subMesh.cxx, src/SMESHGUI/SMESHGUI.cxx, - src/SMESHGUI/SMESHGUI.h, src/SMESHGUI/SMESHGUI_NbSegmentsDlg.cxx, - src/SMESHGUI/SMESHGUI_icons.po, src/SMESH_I/Makefile.in, - src/SMESH_I/SMESH_Gen_i.cxx, - src/SMESH_I/SMESH_HypothesisFactory_i.cxx, - src/SMESH_I/SMESH_LengthFromEdges_i.cxx, - src/SMESH_I/SMESH_LengthFromEdges_i.hxx, - src/SMESH_I/SMESH_MEDMesh_i.cxx, - src/SMESH_I/SMESH_MEDSupport_i.cxx, - src/SMESH_I/SMESH_MaxElementVolume_i.cxx, - src/SMESH_I/SMESH_MaxElementVolume_i.hxx, - src/SMESH_I/SMESH_NETGEN_3D_i.cxx, - src/SMESH_I/SMESH_NETGEN_3D_i.hxx, src/SMESH_SWIG/Makefile.in, - src/SMESH_SWIG/SMESH_Partition1_tetra.py, - src/SMESH_SWIG/SMESH_box2_tetra.py, - src/SMESH_SWIG/SMESH_box3_tetra.py, - src/SMESH_SWIG/SMESH_box_tetra.py, - src/SMESH_SWIG/SMESH_fixation_hexa.py, - src/SMESH_SWIG/SMESH_fixation_tetra.py, - src/SMESH_SWIG/SMESH_flight_skin.py, - src/SMESH_SWIG/SMESH_mechanic_tetra.py: updating or adding when - merging in the main trunk with the version in the branch - nadir_1_2_2 !! - -2003-12-05 14:49 Jerome Robert - - * src/MEFISTO2/trte.f: Remove "pause" primitive call. - -2003-11-27 11:45 Jerome Robert - - * resources/SMESH_en.xml, resources/SMESH_fr.xml, - src/SMESHGUI/SMESHGUI.cxx: [Bug SMESH839] Spelling: Hypotheses - - Hexa?edron (i,j,k). Bug Fixed. - -2003-11-25 08:52 tag V1_3_0 - -2003-11-25 08:52 Nicolas Rejneri - - * bin/VERSION, INSTALL: NRI: 1.3.0 version. - -2003-11-20 12:45 tag V1_3_0_b3 - -2003-11-20 12:45 Nicolas Rejneri - - * doc/html/INPUT/sources/static/: doxygen.css, page2.html, tree.js, - treeview.js: NRI : Add static documentation. - -2003-11-20 12:45 Nicolas Rejneri - - * doc/html/INPUT/sources/: Application-About.png, - Application-About1.jpg, application.gif, application.jpg, - bg_salome.gif, bg_salomepro.gif, doxygen.css: NRI : Update - images. - -2003-11-20 12:44 Nicolas Rejneri - - * doc/html/INPUT/doxyfile: NRI : Generate TreeView. - -2003-11-20 12:43 Nicolas Rejneri - - * doc/html/Makefile.in: NRI : Add static directory. - -2003-11-18 15:01 tag V1_3_0b2 - -2003-11-18 15:01 Jerome Robert - - * ChangeLog, INSTALL, cvs-tags: update for V1_3_0_b2 - -2003-11-18 09:19 Nadir Bouhamou - - * src/SMESH_I/: SMESH_MEDFamily_i.cxx, SMESH_MEDFamily_i.hxx, - SMESH_MEDMesh_i.cxx, SMESH_MEDMesh_i.hxx, SMESH_MEDSupport_i.cxx, - SMESH_MEDSupport_i.hxx: merge with the branch - nadir_update_MED_v1_3_0 (branch to build the V1_3_0 version of - the module. - -2003-11-12 13:20 tag V1_3_0_b1 - -2003-11-12 13:20 Jerome Robert - - * ChangeLog, INSTALL, cvs-tags, bin/VERSION: Update for V1.3.0b1 - -2003-11-12 11:40 Jerome Robert - - * src/OBJECT/SMESH_Actor.cxx: MergeV1_2c-1 - -2003-11-06 14:43 Nicolas Rejneri - - * src/SMESHGUI/SMESHGUI.cxx: NRI : MergeV1_2c-1. - -2003-11-06 14:34 Nicolas Rejneri - - * src/MEFISTO2/: areteideale.f, trte.f: NRI : Add licence header. - -2003-11-06 11:34 Nicolas Rejneri - - * LICENCE: NRI : add LICENCE file - -2003-11-03 15:50 Nicolas Rejneri - - * doc/html/Makefile.in: NRI : Relative path !!!! - -2003-10-22 15:28 Jerome Robert - - * src/SMDS/: SMDS_Mesh.cxx, SMDS_Mesh.hxx: Fix/implement - removeNode, removeEdge, removeFace, removeVolume and - removeElement - -2003-10-20 16:26 Jerome Robert - - * src/SMESHGUI/SMESHGUI.cxx: When the main window was maximized - some dialogs were cropped at the bottom of the screen. It's now - fixed. - -2003-10-17 16:31 Jerome Robert - - * src/SMDS/SMDS_Mesh.cxx: Fix a bug. Quadrangles were added as - triangles. - -2003-10-06 10:50 tag MergeV1_2c-1 - -2003-10-06 10:50 Jerome Robert - - * cvs-tags: Update. Created a new branch for user nadir. - -2003-10-02 16:16 Nicolas Rejneri - - * build_configure: NRI : RedHat 9 compatibility (M. Tajchman). - -2003-09-26 15:14 tag V1_2_2 - -2003-09-26 15:14 Jerome Robert - - * INSTALL, cvs-tags: Add a tag file to track branch and tag. Update - INSTALL to prepare V1_2_2 tag. - -2003-09-26 14:21 tag V1_2_1 - -2003-09-26 14:21 Nicolas Rejneri - - * INSTALL: NRI : INSTALL file defined into SALOME2_PRODUCTION_CYCLE - document. - -2003-09-23 14:33 Jerome Robert - - * src/: SMDS/SMDS_FaceOfEdges.hxx, SMESHDS/SMESHDS_Mesh.hxx, - SMDS/SMDS_FaceOfNodes.hxx, SMDS/SMDS_MeshEdge.hxx, - SMDS/SMDS_MeshElement.hxx, SMDS/SMDS_Tria3OfNodes.hxx, - SMDS/SMDS_VolumeOfFaces.hxx: Keep compatible with gcc 2 - -2003-09-23 11:52 Nicolas Rejneri - - * src/SMESHGUI/SMESHGUI_StudyAPI.cxx: NRI : Display Component - UserName and Icon. - -2003-09-22 12:23 Jerome Robert - - * src/SMDS/SMDS_IteratorOfArray.hxx: Freshly added file - -2003-09-12 15:12 Jerome Robert - - * src/SMDS/: Makefile.in, SMDS_HexahedronOfNodes.cxx, - SMDS_HexahedronOfNodes.hxx, SMDS_Mesh.cxx, SMDS_Tria3OfNodes.cxx, - SMDS_Tria3OfNodes.hxx: Add HexahedronOfNodes and Tria3OfNodes to - improve performance - -2003-09-12 15:11 Jerome Robert - - * src/SMDS/SMDS_VolumeOfNodes.cxx: Fix bug. Was always printing 8 - nodes - -2003-09-08 15:04 Jerome Robert - - * src/SMDS/: SMDS_Mesh.cxx, SMDS_VolumeOfNodes.cxx, - SMDS_VolumeOfNodes.hxx: Add support for tetra, pyramid and prism - -2003-09-08 13:41 Jerome Robert - - * src/SMDS/: SMDS_Mesh.cxx, SMDS_MeshElement.cxx: Add some comments - -2003-09-05 12:19 Jerome Robert - - * src/SMDS/SMDS_MeshNode.cxx: Some forgotten return statments - -2003-09-05 11:45 Jerome Robert - - * src/: DriverDAT/DriverDAT_W_SMESHDS_Mesh.cxx, - DriverMED/DriverMED_W_SMESHDS_Mesh.cxx, SMESH/SMESH_Hexa_3D.cxx: - Correct some memory leaks - -2003-09-05 10:31 Jerome Robert - - * src/: DriverMED/DriverMED_W_SMESHDS_Mesh.cxx, - SMESH/SMESH_Hexa_3D.cxx, SMESH/SMESH_Hexa_3D.hxx, - SMESH/SMESH_MEFISTO_2D.cxx, SMESH/SMESH_MEFISTO_2D.hxx, - SMESH/SMESH_Quadrangle_2D.cxx, SMESH/SMESH_Quadrangle_2D.hxx, - SMESH/SMESH_Regular_1D.cxx, SMESH/SMESH_subMesh.cxx, - SMESHDS/SMESHDS_Mesh.cxx, SMESHDS/SMESHDS_Mesh.hxx, - SMESHDS/SMESHDS_SubMesh.cxx, SMESHDS/SMESHDS_SubMesh.hxx, - SMESH_I/SMESH_MEDSupport_i.cxx, SMESH_I/SMESH_MeshEditor_i.cxx: - Use nodes and elements pointer instead on IDs - -2003-09-05 10:20 Jerome Robert - - * src/SMDS/: SMDS_Mesh.cxx, SMDS_Mesh.hxx: Change API to use - pointer on elements and no longer ID of elements - -2003-09-04 15:04 Jerome Robert - - * src/SMESHDS/: Handle_SMESHDS_Command.hxx, - Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerMesh.hxx, - Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis.hxx, - Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh.hxx, - Handle_SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis.hxx, - Handle_SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh.hxx, - Handle_SMESHDS_Document.hxx, - Handle_SMESHDS_ListNodeOfListOfAsciiString.hxx, - Handle_SMESHDS_ListNodeOfListOfCommand.hxx, - Handle_SMESHDS_ListNodeOfListOfPtrHypothesis.hxx, - Handle_SMESHDS_Mesh.hxx, Handle_SMESHDS_Script.hxx, - Handle_SMESHDS_SubMesh.hxx, SMESHDS.cdl, SMESHDS_Command.cdl, - SMESHDS_Command.ixx, SMESHDS_Command.jxx, - SMESHDS_DataMapIteratorOfDataMapOfIntegerMesh.hxx, - SMESHDS_DataMapIteratorOfDataMapOfIntegerMesh_0.cxx, - SMESHDS_DataMapIteratorOfDataMapOfIntegerPtrHypothesis.hxx, - SMESHDS_DataMapIteratorOfDataMapOfIntegerPtrHypothesis_0.cxx, - SMESHDS_DataMapIteratorOfDataMapOfIntegerSubMesh.hxx, - SMESHDS_DataMapIteratorOfDataMapOfIntegerSubMesh_0.cxx, - SMESHDS_DataMapIteratorOfDataMapOfShapeListOfPtrHypothesis.hxx, - SMESHDS_DataMapIteratorOfDataMapOfShapeListOfPtrHypothesis_0.cxx, - SMESHDS_DataMapIteratorOfDataMapOfShapeSubMesh.hxx, - SMESHDS_DataMapIteratorOfDataMapOfShapeSubMesh_0.cxx, - SMESHDS_DataMapNodeOfDataMapOfIntegerMesh.hxx, - SMESHDS_DataMapNodeOfDataMapOfIntegerMesh_0.cxx, - SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis.hxx, - SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis_0.cxx, - SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh.hxx, - SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh_0.cxx, - SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis.hxx, - SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis_0.cxx, - SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh.hxx, - SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh_0.cxx, - SMESHDS_DataMapOfIntegerMesh.hxx, - SMESHDS_DataMapOfIntegerMesh_0.cxx, - SMESHDS_DataMapOfIntegerPtrHypothesis.hxx, - SMESHDS_DataMapOfIntegerPtrHypothesis_0.cxx, - SMESHDS_DataMapOfIntegerSubMesh.hxx, - SMESHDS_DataMapOfIntegerSubMesh_0.cxx, - SMESHDS_DataMapOfShapeListOfPtrHypothesis.hxx, - SMESHDS_DataMapOfShapeListOfPtrHypothesis_0.cxx, - SMESHDS_DataMapOfShapeSubMesh.hxx, - SMESHDS_DataMapOfShapeSubMesh_0.cxx, SMESHDS_Document.cdl, - SMESHDS_Document.ixx, SMESHDS_Document.jxx, - SMESHDS_ListIteratorOfListOfAsciiString.hxx, - SMESHDS_ListIteratorOfListOfAsciiString_0.cxx, - SMESHDS_ListIteratorOfListOfCommand.hxx, - SMESHDS_ListIteratorOfListOfCommand_0.cxx, - SMESHDS_ListIteratorOfListOfPtrHypothesis.hxx, - SMESHDS_ListIteratorOfListOfPtrHypothesis_0.cxx, - SMESHDS_ListNodeOfListOfAsciiString.hxx, - SMESHDS_ListNodeOfListOfAsciiString_0.cxx, - SMESHDS_ListNodeOfListOfCommand.hxx, - SMESHDS_ListNodeOfListOfCommand_0.cxx, - SMESHDS_ListNodeOfListOfPtrHypothesis.hxx, - SMESHDS_ListNodeOfListOfPtrHypothesis_0.cxx, - SMESHDS_ListOfAsciiString.hxx, SMESHDS_ListOfAsciiString_0.cxx, - SMESHDS_ListOfCommand.hxx, SMESHDS_ListOfCommand_0.cxx, - SMESHDS_ListOfPtrHypothesis.hxx, - SMESHDS_ListOfPtrHypothesis_0.cxx, SMESHDS_Mesh.cdl, - SMESHDS_Mesh.ixx, SMESHDS_Mesh.jxx, SMESHDS_PtrHypothesis.hxx, - SMESHDS_Script.cdl, SMESHDS_Script.ixx, SMESHDS_Script.jxx, - SMESHDS_SubMesh.cdl, SMESHDS_SubMesh.ixx, SMESHDS_SubMesh.jxx: - Remove no longer needed files - -2003-09-04 14:50 Jerome Robert - - * src/SMDS/: Handle_SMDSControl_BoundaryEdges.hxx, - Handle_SMDSControl_BoundaryFaces.hxx, - Handle_SMDSControl_MeshBoundary.hxx, - Handle_SMDS_DataMapNodeOfDataMapOfIntegerMeshElement.hxx, - Handle_SMDS_DataMapNodeOfDataMapOfPntInteger.hxx, - Handle_SMDS_EdgePosition.hxx, Handle_SMDS_FacePosition.hxx, - Handle_SMDS_HSequenceOfMesh.hxx, - Handle_SMDS_ListNodeOfListOfMesh.hxx, - Handle_SMDS_ListNodeOfListOfMeshElement.hxx, - Handle_SMDS_ListNodeOfListOfMeshGroup.hxx, Handle_SMDS_Mesh.hxx, - Handle_SMDS_MeshEdge.hxx, Handle_SMDS_MeshElement.hxx, - Handle_SMDS_MeshElementIDFactory.hxx, Handle_SMDS_MeshFace.hxx, - Handle_SMDS_MeshGroup.hxx, Handle_SMDS_MeshHexahedron.hxx, - Handle_SMDS_MeshIDFactory.hxx, Handle_SMDS_MeshNode.hxx, - Handle_SMDS_MeshNodeIDFactory.hxx, Handle_SMDS_MeshObject.hxx, - Handle_SMDS_MeshPrism.hxx, Handle_SMDS_MeshPyramid.hxx, - Handle_SMDS_MeshQuadrangle.hxx, Handle_SMDS_MeshTetrahedron.hxx, - Handle_SMDS_MeshTriangle.hxx, Handle_SMDS_MeshVolume.hxx, - Handle_SMDS_Position.hxx, - Handle_SMDS_SequenceNodeOfSequenceOfMesh.hxx, - Handle_SMDS_SpacePosition.hxx, - Handle_SMDS_StdMapNodeOfExtendedMap.hxx, - Handle_SMDS_StdMapNodeOfExtendedOrientedMap.hxx, - Handle_SMDS_VertexPosition.hxx, SMDS.cdl, SMDSAbs.cdl, - SMDSControl.cdl, SMDSControl.ixx, SMDSControl.jxx, - SMDSControl_BoundaryEdges.cdl, SMDSControl_BoundaryEdges.ixx, - SMDSControl_BoundaryEdges.jxx, SMDSControl_BoundaryFaces.cdl, - SMDSControl_BoundaryFaces.ixx, SMDSControl_BoundaryFaces.jxx, - SMDSControl_MeshBoundary.cdl, SMDSControl_MeshBoundary.ixx, - SMDSControl_MeshBoundary.jxx, SMDSEdit.cdl, - SMDSEdit_Transform.cdl, SMDSEdit_Transform.ixx, - SMDSEdit_Transform.jxx, SMDS_BasicMap.lxx, - SMDS_BasicMapIterator.lxx, - SMDS_DataMapIteratorOfDataMapOfIntegerMeshElement.hxx, - SMDS_DataMapIteratorOfDataMapOfIntegerMeshElement_0.cxx, - SMDS_DataMapIteratorOfDataMapOfPntInteger.hxx, - SMDS_DataMapIteratorOfDataMapOfPntInteger_0.cxx, - SMDS_DataMapNodeOfDataMapOfIntegerMeshElement.hxx, - SMDS_DataMapNodeOfDataMapOfIntegerMeshElement_0.cxx, - SMDS_DataMapNodeOfDataMapOfPntInteger.hxx, - SMDS_DataMapNodeOfDataMapOfPntInteger_0.cxx, - SMDS_DataMapOfIntegerMeshElement.hxx, - SMDS_DataMapOfIntegerMeshElement_0.cxx, - SMDS_DataMapOfPntInteger.hxx, SMDS_DataMapOfPntInteger_0.cxx, - SMDS_EdgePosition.cdl, SMDS_EdgePosition.ixx, - SMDS_EdgePosition.jxx, SMDS_EdgePosition.lxx, - SMDS_ExtendedMap.hxx, SMDS_ExtendedMap_0.cxx, - SMDS_ExtendedOrientedMap.hxx, SMDS_ExtendedOrientedMap_0.cxx, - SMDS_FacePosition.cdl, SMDS_FacePosition.ixx, - SMDS_FacePosition.jxx, SMDS_FacePosition.lxx, - SMDS_HSequenceOfMesh.hxx, SMDS_HSequenceOfMesh_0.cxx, - SMDS_ListIteratorOfListOfMesh.hxx, - SMDS_ListIteratorOfListOfMeshElement.hxx, - SMDS_ListIteratorOfListOfMeshElement_0.cxx, - SMDS_ListIteratorOfListOfMeshGroup.hxx, - SMDS_ListIteratorOfListOfMeshGroup_0.cxx, - SMDS_ListIteratorOfListOfMesh_0.cxx, - SMDS_ListNodeOfListOfMesh.hxx, - SMDS_ListNodeOfListOfMeshElement.hxx, - SMDS_ListNodeOfListOfMeshElement_0.cxx, - SMDS_ListNodeOfListOfMeshGroup.hxx, - SMDS_ListNodeOfListOfMeshGroup_0.cxx, - SMDS_ListNodeOfListOfMesh_0.cxx, SMDS_ListOfMesh.hxx, - SMDS_ListOfMeshElement.hxx, SMDS_ListOfMeshElement_0.cxx, - SMDS_ListOfMeshGroup.hxx, SMDS_ListOfMeshGroup_0.cxx, - SMDS_ListOfMesh_0.cxx, SMDS_Map.gxx, SMDS_MapHasher.gxx, - SMDS_MapIterator.gxx, SMDS_MapIteratorOfExtendedMap.hxx, - SMDS_MapIteratorOfExtendedMap_0.cxx, - SMDS_MapIteratorOfExtendedOrientedMap.hxx, - SMDS_MapIteratorOfExtendedOrientedMap_0.cxx, SMDS_MapNode.lxx, - SMDS_MapOfMeshElement.cdl, SMDS_MapOfMeshElement.cxx, - SMDS_MapOfMeshElement.hxx, SMDS_MapOfMeshElement.ixx, - SMDS_MapOfMeshElement.jxx, SMDS_MapOfMeshElement.lxx, - SMDS_MapOfMeshOrientedElement.cdl, - SMDS_MapOfMeshOrientedElement.cxx, - SMDS_MapOfMeshOrientedElement.hxx, - SMDS_MapOfMeshOrientedElement.ixx, - SMDS_MapOfMeshOrientedElement.jxx, - SMDS_MapOfMeshOrientedElement.lxx, SMDS_Mesh.cdl, SMDS_Mesh.ixx, - SMDS_Mesh.jxx, SMDS_Mesh.lxx, SMDS_MeshEdge.cdl, - SMDS_MeshEdge.ixx, SMDS_MeshEdge.jxx, SMDS_MeshEdge.lxx, - SMDS_MeshEdgesIterator.cdl, SMDS_MeshEdgesIterator.cxx, - SMDS_MeshEdgesIterator.hxx, SMDS_MeshEdgesIterator.ixx, - SMDS_MeshEdgesIterator.jxx, SMDS_MeshElement.cdl, - SMDS_MeshElement.ixx, SMDS_MeshElement.jxx, SMDS_MeshElement.lxx, - SMDS_MeshElementIDFactory.cdl, SMDS_MeshElementIDFactory.ixx, - SMDS_MeshElementIDFactory.jxx, SMDS_MeshElementIDFactory.lxx, - SMDS_MeshElementMapHasher.cdl, SMDS_MeshElementMapHasher.cxx, - SMDS_MeshElementMapHasher.hxx, SMDS_MeshElementMapHasher.ixx, - SMDS_MeshElementMapHasher.jxx, SMDS_MeshElementMapHasher.lxx, - SMDS_MeshElementsIterator.cdl, SMDS_MeshElementsIterator.cxx, - SMDS_MeshElementsIterator.hxx, SMDS_MeshElementsIterator.ixx, - SMDS_MeshElementsIterator.jxx, SMDS_MeshElementsIterator.lxx, - SMDS_MeshFace.cdl, SMDS_MeshFace.ixx, SMDS_MeshFace.jxx, - SMDS_MeshFace.lxx, SMDS_MeshFacesIterator.cdl, - SMDS_MeshFacesIterator.cxx, SMDS_MeshFacesIterator.hxx, - SMDS_MeshFacesIterator.ixx, SMDS_MeshFacesIterator.jxx, - SMDS_MeshGroup.cdl, SMDS_MeshGroup.ixx, SMDS_MeshGroup.jxx, - SMDS_MeshGroup.lxx, SMDS_MeshHexahedron.cdl, - SMDS_MeshHexahedron.ixx, SMDS_MeshHexahedron.jxx, - SMDS_MeshHexahedron.lxx, SMDS_MeshIDFactory.cdl, - SMDS_MeshIDFactory.ixx, SMDS_MeshIDFactory.jxx, - SMDS_MeshIDFactory.lxx, SMDS_MeshNode.cdl, SMDS_MeshNode.ixx, - SMDS_MeshNode.jxx, SMDS_MeshNode.lxx, SMDS_MeshNodeIDFactory.cdl, - SMDS_MeshNodeIDFactory.ixx, SMDS_MeshNodeIDFactory.jxx, - SMDS_MeshNodeIDFactory.lxx, SMDS_MeshNodesIterator.cdl, - SMDS_MeshNodesIterator.cxx, SMDS_MeshNodesIterator.hxx, - SMDS_MeshNodesIterator.ixx, SMDS_MeshNodesIterator.jxx, - SMDS_MeshObject.cdl, SMDS_MeshObject.ixx, SMDS_MeshObject.jxx, - SMDS_MeshOrientedElementMapHasher.cdl, - SMDS_MeshOrientedElementMapHasher.cxx, - SMDS_MeshOrientedElementMapHasher.hxx, - SMDS_MeshOrientedElementMapHasher.ixx, - SMDS_MeshOrientedElementMapHasher.jxx, - SMDS_MeshOrientedElementMapHasher.lxx, SMDS_MeshPrism.cdl, - SMDS_MeshPrism.ixx, SMDS_MeshPrism.jxx, SMDS_MeshPrism.lxx, - SMDS_MeshPyramid.cdl, SMDS_MeshPyramid.ixx, SMDS_MeshPyramid.jxx, - SMDS_MeshPyramid.lxx, SMDS_MeshQuadrangle.cdl, - SMDS_MeshQuadrangle.ixx, SMDS_MeshQuadrangle.jxx, - SMDS_MeshQuadrangle.lxx, SMDS_MeshTetrahedron.cdl, - SMDS_MeshTetrahedron.ixx, SMDS_MeshTetrahedron.jxx, - SMDS_MeshTetrahedron.lxx, SMDS_MeshTriangle.cdl, - SMDS_MeshTriangle.ixx, SMDS_MeshTriangle.jxx, - SMDS_MeshTriangle.lxx, SMDS_MeshVolume.cdl, SMDS_MeshVolume.ixx, - SMDS_MeshVolume.jxx, SMDS_MeshVolume.lxx, - SMDS_MeshVolumesIterator.cdl, SMDS_MeshVolumesIterator.cxx, - SMDS_MeshVolumesIterator.hxx, SMDS_MeshVolumesIterator.ixx, - SMDS_MeshVolumesIterator.jxx, SMDS_PntHasher.cdl, - SMDS_PntHasher.cxx, SMDS_PntHasher.hxx, SMDS_PntHasher.ixx, - SMDS_PntHasher.jxx, SMDS_PntHasher.lxx, SMDS_Position.cdl, - SMDS_Position.ixx, SMDS_Position.jxx, SMDS_Position.lxx, - SMDS_SequenceNodeOfSequenceOfMesh.hxx, - SMDS_SequenceNodeOfSequenceOfMesh_0.cxx, SMDS_SequenceOfMesh.hxx, - SMDS_SequenceOfMesh_0.cxx, SMDS_SpacePosition.cdl, - SMDS_SpacePosition.ixx, SMDS_SpacePosition.jxx, - SMDS_SpacePosition.lxx, SMDS_StdMapNode.gxx, SMDS_StdMapNode.lxx, - SMDS_StdMapNodeOfExtendedMap.hxx, - SMDS_StdMapNodeOfExtendedMap_0.cxx, - SMDS_StdMapNodeOfExtendedOrientedMap.hxx, - SMDS_StdMapNodeOfExtendedOrientedMap_0.cxx, - SMDS_VertexPosition.cdl, SMDS_VertexPosition.ixx, - SMDS_VertexPosition.jxx: Remove no longer needed files - -2003-09-04 13:28 Jerome Robert - - * build_configure: It seems "make_omniorb" and "make_commence" need - to be before and after "envScript" - -2003-09-04 12:57 Jerome Robert - - * build_configure: make_commence and make_omniorb were detected - twice. Only one is requiered in AC_OUTPUT - -2003-09-04 12:03 Jerome Robert - - * src/: DriverDAT/DriverDAT_R_SMDS_Mesh.cxx, - DriverDAT/DriverDAT_R_SMDS_Mesh.h, - DriverDAT/DriverDAT_R_SMESHDS_Document.cxx, - DriverDAT/DriverDAT_R_SMESHDS_Mesh.cxx, - DriverDAT/DriverDAT_R_SMESHDS_Mesh.h, - DriverDAT/DriverDAT_W_SMDS_Mesh.cxx, - DriverDAT/DriverDAT_W_SMDS_Mesh.h, - DriverDAT/DriverDAT_W_SMESHDS_Document.cxx, - DriverDAT/DriverDAT_W_SMESHDS_Mesh.cxx, - DriverDAT/DriverDAT_W_SMESHDS_Mesh.h, - DriverMED/DriverMED_R_SMDS_Mesh.cxx, - DriverMED/DriverMED_R_SMDS_Mesh.h, - DriverMED/DriverMED_R_SMESHDS_Document.cxx, - DriverMED/DriverMED_R_SMESHDS_Mesh.cxx, - DriverMED/DriverMED_R_SMESHDS_Mesh.h, - DriverMED/DriverMED_W_SMDS_Mesh.cxx, - DriverMED/DriverMED_W_SMDS_Mesh.h, - DriverMED/DriverMED_W_SMESHDS_Document.cxx, - DriverMED/DriverMED_W_SMESHDS_Mesh.cxx, - DriverMED/DriverMED_W_SMESHDS_Mesh.h, - DriverUNV/DriverUNV_R_SMDS_Mesh.cxx, - DriverUNV/DriverUNV_R_SMDS_Mesh.h, - DriverUNV/DriverUNV_R_SMESHDS_Document.cxx, - DriverUNV/DriverUNV_R_SMESHDS_Mesh.cxx, - DriverUNV/DriverUNV_R_SMESHDS_Mesh.h, - DriverUNV/DriverUNV_W_SMDS_Mesh.cxx, - DriverUNV/DriverUNV_W_SMDS_Mesh.h, - DriverUNV/DriverUNV_W_SMESHDS_Document.cxx, - DriverUNV/DriverUNV_W_SMESHDS_Mesh.cxx, - DriverUNV/DriverUNV_W_SMESHDS_Mesh.h: Update to match the changes - in SMDS - -2003-09-04 11:03 Jerome Robert - - * src/: DriverDAT/Makefile.in, DriverMED/Makefile.in, - DriverUNV/Makefile.in: Remove OCC_LIBS from LDFLAGS - -2003-09-04 10:56 Jerome Robert - - * src/Driver/: Document_Reader.cxx, Document_Reader.h, - Document_Writer.cxx, Document_Writer.h, Mesh_Reader.h, - Mesh_Writer.h: Update to mach the changes in SMDS - -2003-09-04 10:44 Jerome Robert - - * src/Driver/Makefile.in: Remove OCC_LIBS from LDFLAGS - -2003-09-04 10:41 Jerome Robert - - * src/SMESH_I/: SMESH_Gen_i.cxx, SMESH_MEDMesh_i.cxx, - SMESH_MEDMesh_i.hxx, SMESH_MEDSupport_i.cxx, - SMESH_MEDSupport_i.hxx, SMESH_MeshEditor_i.cxx, - SMESH_MeshEditor_i.hxx, SMESH_Mesh_i.cxx: Update to match the new - implementation of SMDS - -2003-09-04 10:10 Jerome Robert - - * src/SMESH/SMESH_MaxElementArea.cxx: make GetMaxArea const - -2003-09-04 10:10 Jerome Robert - - * src/SMESH/: SMESH_MEFISTO_2D.hxx, SMESH_Regular_1D.hxx: make - hypothesis const - -2003-09-04 09:55 Jerome Robert - - * src/SMESH/SMESH_Hexa_3D.hxx: Update to match the change of SMDS - (new DS). - -2003-09-04 09:51 Jerome Robert - - * src/SMESH_I/sstream: Use the file include in gcc instead of this - one - -2003-09-04 09:21 Jerome Robert - - * src/SMESH/: SMESH_Algo.cxx, SMESH_Algo.hxx, SMESH_Gen.cxx, - SMESH_Gen.hxx, SMESH_Hexa_3D.cxx, SMESH_MEFISTO_2D.cxx, - SMESH_MaxElementArea.hxx, SMESH_Mesh.cxx, SMESH_Mesh.hxx, - SMESH_Quadrangle_2D.cxx, SMESH_Regular_1D.cxx, SMESH_subMesh.cxx, - SMESH_subMesh.hxx: Update to match the change of SMDS (new DS). - -2003-09-04 09:13 Jerome Robert - - * src/SMESH/: SMESH_NumberOfSegments.cxx, - SMESH_NumberOfSegments.hxx: make GetNumberOfSegments and - GetScaleFactor const - -2003-09-04 09:10 Jerome Robert - - * src/SMESH/: SMESH_LocalLength.cxx, SMESH_LocalLength.hxx: make - GetLength const - -2003-09-04 08:09 Jerome Robert - - * src/SMESHFiltersSelection/Makefile.in: Change OCC_LIBS to - OCC_KERNEL_LIBS - -2003-09-04 07:55 Jerome Robert - - * src/SMESHGUI/Makefile.in: Change OCC_LIBS to OCC_KERNEL_LIBS - -2003-09-04 07:39 Jerome Robert - - * src/SMESHGUI/: SMESHGUI.cxx, SMESHGUI.h: Change - Handle(SMESHDS_Document) to SMESHDS_Document* - -2003-09-04 07:21 Jerome Robert - - * src/MEFISTO2/Makefile.in: Remove OCC_LIBS from LDFLAGS - -2003-09-04 07:14 Jerome Robert - - * src/SMESHDS/: Makefile.in, SMESHDS_Command.cxx, - SMESHDS_Command.hxx, SMESHDS_Document.cxx, SMESHDS_Document.hxx, - SMESHDS_Hypothesis.cxx, SMESHDS_Hypothesis.hxx, SMESHDS_Mesh.cxx, - SMESHDS_Mesh.hxx, SMESHDS_Script.cxx, SMESHDS_Script.hxx, - SMESHDS_SubMesh.cxx, SMESHDS_SubMesh.hxx: Remove Opencascade - dependencies. Change to STL. - -2003-09-03 17:31 Jerome Robert - - * src/OBJECT/Makefile.in: Change OCC_LIBS to OCC_KERNEL_LIBS - -2003-09-03 17:30 Jerome Robert - - * src/SMDS/: SMDS_Mesh.cxx, SMDS_Mesh.hxx, SMDS_MeshEdge.cxx, - SMDS_MeshEdge.hxx, SMDS_MeshElement.cxx, SMDS_MeshElement.hxx, - SMDS_MeshNode.cxx, SMDS_MeshNode.hxx, SMDS_MeshVolume.cxx, - SMDS_MeshVolume.hxx, SMDS_MeshFace.cxx, SMDS_MeshFace.hxx: New DS - implementation - -2003-09-03 17:29 Jerome Robert - - * src/SMDS/: SMDS_EdgePosition.cxx, SMDS_EdgePosition.hxx, - SMDS_FacePosition.cxx, SMDS_FacePosition.hxx, - SMDS_MeshElementIDFactory.cxx, SMDS_MeshElementIDFactory.hxx, - SMDS_MeshGroup.cxx, SMDS_MeshGroup.hxx, SMDS_MeshIDFactory.cxx, - SMDS_MeshIDFactory.hxx, SMDS_MeshObject.cxx, SMDS_MeshObject.hxx, - SMDS_Position.cxx, SMDS_Position.hxx, SMDS_SpacePosition.cxx, - SMDS_SpacePosition.hxx, SMDS_TypeOfPosition.hxx, - SMDS_VertexPosition.cxx, SMDS_VertexPosition.hxx: Remove - Opencascade dependencies - -2003-09-03 17:21 Jerome Robert - - * src/SMDS/SMDSAbs_ElementType.hxx: comments - -2003-09-03 17:21 Jerome Robert - - * src/SMDS/: SMDS_Iterator.hxx, SMDS_IteratorOfElements.cxx, - SMDS_IteratorOfElements.hxx: Add iterator classes - -2003-09-03 17:16 Jerome Robert - - * src/SMDS/Makefile.in: Remove wok files. Comment no longer needed - files - -2003-09-03 17:09 Jerome Robert - - * src/SMDS/: SMDS_FaceOfEdges.cxx, SMDS_FaceOfEdges.hxx, - SMDS_FaceOfNodes.cxx, SMDS_FaceOfNodes.hxx, - SMDS_VolumeOfFaces.cxx, SMDS_VolumeOfFaces.hxx, - SMDS_VolumeOfNodes.cxx, SMDS_VolumeOfNodes.hxx: Add needed class - for the new DS - -2003-07-18 12:19 Nicolas Rejneri - - * src/SMESHGUI/SMESHGUI_StudyAPI.cxx: NRI : correction wrong merge. - -2003-07-11 07:32 Nicolas Rejneri - - * bin/VERSION, doc/html/Makefile.in, doc/html/INPUT/doxyfile: NRI : - Merge from V1_2. - -2003-07-10 17:51 Nicolas Rejneri - - * configure.in.base: NRI : Merge from V1_2. - -2003-07-10 16:31 Nicolas Rejneri - - * src/SMESHGUI/: SMESHGUI_Swig.cxx, SMESHGUI_Swig.i: NRI : Merge - from V1_2. - -2003-07-10 16:06 Nicolas Rejneri - - * src/SMESHGUI/SMESHGUI_Swig.cxx: NRI : Merge from V1_2. - -2003-07-10 15:36 Nicolas Rejneri - - * src/Driver/Makefile.in: NRI : Merge from V1_2. - -2003-07-10 15:03 Nicolas Rejneri - - * src/SMESH/Makefile.in, src/SMESH_I/Makefile.in, - idl/SMESH_BasicHypothesis.idl, idl/SMESH_Gen.idl, - idl/SMESH_Hypothesis.idl, idl/SMESH_Mesh.idl, - adm_local/unix/make_commence.in: NRI : Merge from V1_2. - -2003-07-10 14:47 Nicolas Rejneri - - * configure.in.base: NRI : Merge from V1_2. - -2003-07-10 14:31 Nicolas Rejneri - - * src/Driver/Makefile.in: NRI : Merge from V1_2. - -2003-07-10 13:35 Yves Fricaud - - * src/: SMESH_I/Makefile.in, SMESH_I/SMESH_1D_Algo_i.cxx, - SMESH_I/SMESH_1D_Algo_i.hxx, SMESH_I/SMESH_2D_Algo_i.cxx, - SMESH_I/SMESH_2D_Algo_i.hxx, SMESH_I/SMESH_3D_Algo_i.cxx, - SMESH_I/SMESH_3D_Algo_i.hxx, SMESH_I/SMESH_Algo_i.cxx, - SMESH_I/SMESH_Algo_i.hxx, SMESH_I/SMESH_Gen_i.cxx, - SMESH_I/SMESH_Gen_i.hxx, SMESH_I/SMESH_Hexa_3D_i.cxx, - SMESH_I/SMESH_Hexa_3D_i.hxx, - SMESH_I/SMESH_HypothesisFactory_i.cxx, - SMESH_I/SMESH_HypothesisFactory_i.hxx, - SMESH_I/SMESH_Hypothesis_i.cxx, SMESH_I/SMESH_Hypothesis_i.hxx, - SMESH_I/SMESH_LocalLength_i.cxx, SMESH_I/SMESH_LocalLength_i.hxx, - SMESH_I/SMESH_MEDFamily_i.cxx, SMESH_I/SMESH_MEDFamily_i.hxx, - SMESH_I/SMESH_MEDMesh_i.cxx, SMESH_I/SMESH_MEDMesh_i.hxx, - SMESH_I/SMESH_MEDSupport_i.cxx, SMESH_I/SMESH_MEDSupport_i.hxx, - SMESH_I/SMESH_MEFISTO_2D_i.cxx, SMESH_I/SMESH_MEFISTO_2D_i.hxx, - SMESH_I/SMESH_MaxElementArea_i.cxx, - SMESH_I/SMESH_MaxElementArea_i.hxx, - SMESH_I/SMESH_MaxElementVolume_i.cxx, - SMESH_I/SMESH_MaxElementVolume_i.hxx, - SMESH_I/SMESH_MeshEditor_i.cxx, SMESH_I/SMESH_MeshEditor_i.hxx, - SMESH_I/SMESH_Mesh_i.cxx, SMESH_I/SMESH_Mesh_i.hxx, - SMESH_I/SMESH_NumberOfSegments_i.cxx, - SMESH_I/SMESH_NumberOfSegments_i.hxx, - SMESH_I/SMESH_Quadrangle_2D_i.cxx, - SMESH_I/SMESH_Quadrangle_2D_i.hxx, - SMESH_I/SMESH_Regular_1D_i.cxx, SMESH_I/SMESH_Regular_1D_i.hxx, - SMESH_I/SMESH_subMesh_i.cxx, SMESH_I/SMESH_subMesh_i.hxx, - SMESH_I/SMESH_test.py, SMESH_I/SMESH_topo.cxx, - SMESH_I/SMESH_topo.hxx, SMESH_I/smeshpy.py, - SMESH_SWIG/Makefile.in, SMESH_SWIG/SMESH_fixation.py, - SMESH_SWIG/SMESH_mechanic.py, SMESH_SWIG/SMESH_test0.py, - SMESH_SWIG/SMESH_test1.py, SMESH_SWIG/SMESH_test2.py, - SMESH_SWIG/SMESH_test3.py, SMESH_SWIG/batchmode_smesh.py, - SMESH_SWIG/libSMESH_Swig.i: yfr : merge 1.2 - -2003-07-10 13:18 Yves Fricaud - - * src/SMESHGUI/: SMESHGUI.h, SMESHGUI_AddAlgorithmDlg.cxx, - SMESHGUI_AddAlgorithmDlg.h, SMESHGUI_AddEdgeDlg.cxx, - SMESHGUI_AddEdgeDlg.h, SMESHGUI_AddFaceDlg.cxx, - SMESHGUI_AddFaceDlg.h, SMESHGUI_AddHypothesisDlg.cxx, - SMESHGUI_AddHypothesisDlg.h, SMESHGUI_AddSubMeshDlg.cxx, - SMESHGUI_AddSubMeshDlg.h, SMESHGUI_AddVolumeDlg.cxx, - SMESHGUI_AddVolumeDlg.h, SMESHGUI_ComputeScalarValue.cxx, - SMESHGUI_ComputeScalarValue.h, SMESHGUI_DiagonalInversionDlg.cxx, - SMESHGUI_DiagonalInversionDlg.h, - SMESHGUI_EdgesConnectivityDlg.cxx, - SMESHGUI_EdgesConnectivityDlg.h, SMESHGUI_EditHypothesesDlg.cxx, - SMESHGUI_EditHypothesesDlg.h, SMESHGUI_EditScalarBarDlg.cxx, - SMESHGUI_EditScalarBarDlg.h, SMESHGUI_InitMeshDlg.cxx, - SMESHGUI_InitMeshDlg.h, SMESHGUI_LocalLengthDlg.cxx, - SMESHGUI_LocalLengthDlg.h, SMESHGUI_MaxElementAreaDlg.cxx, - SMESHGUI_MaxElementAreaDlg.h, SMESHGUI_MaxElementVolumeDlg.cxx, - SMESHGUI_MaxElementVolumeDlg.h, SMESHGUI_MeshInfosDlg.cxx, - SMESHGUI_MeshInfosDlg.h, SMESHGUI_MoveNodesDlg.cxx, - SMESHGUI_MoveNodesDlg.h, SMESHGUI_NbSegmentsDlg.cxx, - SMESHGUI_NbSegmentsDlg.h, SMESHGUI_NodesDlg.cxx, - SMESHGUI_NodesDlg.h, SMESHGUI_OrientationElementsDlg.cxx, - SMESHGUI_OrientationElementsDlg.h, - SMESHGUI_Preferences_ColorDlg.cxx, - SMESHGUI_Preferences_ColorDlg.h, - SMESHGUI_Preferences_ScalarBarDlg.cxx, - SMESHGUI_Preferences_ScalarBarDlg.h, - SMESHGUI_RemoveElementsDlg.cxx, SMESHGUI_RemoveElementsDlg.h, - SMESHGUI_RemoveNodesDlg.cxx, SMESHGUI_RemoveNodesDlg.h, - SMESHGUI_SpinBox.cxx, SMESHGUI_SpinBox.h, SMESHGUI_StudyAPI.cxx, - SMESHGUI_StudyAPI.h, SMESHGUI_Swig.cxx, SMESHGUI_Swig.hxx, - SMESHGUI_Swig.i, SMESHGUI_TransparencyDlg.cxx, - SMESHGUI_TransparencyDlg.h, SMESHGUI_aParameterDlg.cxx, - SMESHGUI_aParameterDlg.h: yfr : merge 1.2 - -2003-07-10 12:18 Yves Fricaud - - * src/SMESHGUI/: Makefile.in, SMESHGUI.cxx: yfr : Merge V1.2 - -2003-07-10 11:35 Yves Fricaud - - * src/SMESHFiltersSelection/Makefile.in: yfr : Merge with v1.2 - -2003-07-10 10:04 Yves Fricaud - - * src/: SMESHDS/Handle_SMESHDS_Command.hxx, - SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerMesh.hxx, - SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis.hxx, - SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh.hxx, - SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis.hxx, - SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh.hxx, - SMESHDS/Handle_SMESHDS_Document.hxx, - SMESHDS/Handle_SMESHDS_ListNodeOfListOfAsciiString.hxx, - SMESHDS/Handle_SMESHDS_ListNodeOfListOfCommand.hxx, - SMESHDS/Handle_SMESHDS_ListNodeOfListOfPtrHypothesis.hxx, - SMESHDS/Handle_SMESHDS_Mesh.hxx, - SMESHDS/Handle_SMESHDS_Script.hxx, - SMESHDS/Handle_SMESHDS_SubMesh.hxx, SMESHDS/Makefile.in, - SMESHDS/SMESHDS.cdl, SMESHDS/SMESHDS_Command.cdl, - SMESHDS/SMESHDS_Command.cxx, SMESHDS/SMESHDS_Command.hxx, - SMESHDS/SMESHDS_Command.ixx, SMESHDS/SMESHDS_Command.jxx, - SMESHDS/SMESHDS_CommandType.hxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerMesh.hxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerMesh_0.cxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerPtrHypothesis.hxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerSubMesh.hxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerSubMesh_0.cxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeListOfPtrHypothesis.hxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeListOfPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeSubMesh.hxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeSubMesh_0.cxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerMesh.hxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerMesh_0.cxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis.hxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh.hxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh_0.cxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis.hxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh.hxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh_0.cxx, - SMESHDS/SMESHDS_DataMapOfIntegerMesh.hxx, - SMESHDS/SMESHDS_DataMapOfIntegerMesh_0.cxx, - SMESHDS/SMESHDS_DataMapOfIntegerPtrHypothesis.hxx, - SMESHDS/SMESHDS_DataMapOfIntegerPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_DataMapOfIntegerSubMesh.hxx, - SMESHDS/SMESHDS_DataMapOfIntegerSubMesh_0.cxx, - SMESHDS/SMESHDS_DataMapOfShapeListOfPtrHypothesis.hxx, - SMESHDS/SMESHDS_DataMapOfShapeListOfPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_DataMapOfShapeSubMesh.hxx, - SMESHDS/SMESHDS_DataMapOfShapeSubMesh_0.cxx, - SMESHDS/SMESHDS_Document.cdl, SMESHDS/SMESHDS_Document.cxx, - SMESHDS/SMESHDS_Document.hxx, SMESHDS/SMESHDS_Document.ixx, - SMESHDS/SMESHDS_Document.jxx, SMESHDS/SMESHDS_Hypothesis.cxx, - SMESHDS/SMESHDS_Hypothesis.hxx, - SMESHDS/SMESHDS_ListIteratorOfListOfAsciiString.hxx, - SMESHDS/SMESHDS_ListIteratorOfListOfAsciiString_0.cxx, - SMESHDS/SMESHDS_ListIteratorOfListOfCommand.hxx, - SMESHDS/SMESHDS_ListIteratorOfListOfCommand_0.cxx, - SMESHDS/SMESHDS_ListIteratorOfListOfPtrHypothesis.hxx, - SMESHDS/SMESHDS_ListIteratorOfListOfPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_ListNodeOfListOfAsciiString.hxx, - SMESHDS/SMESHDS_ListNodeOfListOfAsciiString_0.cxx, - SMESHDS/SMESHDS_ListNodeOfListOfCommand.hxx, - SMESHDS/SMESHDS_ListNodeOfListOfCommand_0.cxx, - SMESHDS/SMESHDS_ListNodeOfListOfPtrHypothesis.hxx, - SMESHDS/SMESHDS_ListNodeOfListOfPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_ListOfAsciiString.hxx, - SMESHDS/SMESHDS_ListOfAsciiString_0.cxx, - SMESHDS/SMESHDS_ListOfCommand.hxx, - SMESHDS/SMESHDS_ListOfCommand_0.cxx, - SMESHDS/SMESHDS_ListOfPtrHypothesis.hxx, - SMESHDS/SMESHDS_ListOfPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_Mesh.cdl, SMESHDS/SMESHDS_Mesh.cxx, - SMESHDS/SMESHDS_Mesh.hxx, SMESHDS/SMESHDS_Mesh.ixx, - SMESHDS/SMESHDS_Mesh.jxx, SMESHDS/SMESHDS_PtrHypothesis.hxx, - SMESHDS/SMESHDS_Script.cdl, SMESHDS/SMESHDS_Script.cxx, - SMESHDS/SMESHDS_Script.hxx, SMESHDS/SMESHDS_Script.ixx, - SMESHDS/SMESHDS_Script.jxx, SMESHDS/SMESHDS_SubMesh.cdl, - SMESHDS/SMESHDS_SubMesh.cxx, SMESHDS/SMESHDS_SubMesh.hxx, - SMESHDS/SMESHDS_SubMesh.ixx, SMESHDS/SMESHDS_SubMesh.jxx, - SMESH/Makefile.in, SMESH/SMESH_1D_Algo.cxx, - SMESH/SMESH_1D_Algo.hxx, SMESH/SMESH_2D_Algo.cxx, - SMESH/SMESH_2D_Algo.hxx, SMESH/SMESH_3D_Algo.cxx, - SMESH/SMESH_3D_Algo.hxx, SMESH/SMESH_Algo.cxx, - SMESH/SMESH_Algo.hxx, SMESH/SMESH_Gen.cxx, SMESH/SMESH_Gen.hxx, - SMESH/SMESH_Hexa_3D.cxx, SMESH/SMESH_Hexa_3D.hxx, - SMESH/SMESH_Hypothesis.cxx, SMESH/SMESH_Hypothesis.hxx, - SMESH/SMESH_HypothesisCreator.hxx, - SMESH/SMESH_HypothesisFactory.cxx, - SMESH/SMESH_HypothesisFactory.hxx, - SMESH/SMESH_LengthFromEdges.cxx, SMESH/SMESH_LengthFromEdges.hxx, - SMESH/SMESH_LocalLength.cxx, SMESH/SMESH_LocalLength.hxx, - SMESH/SMESH_MEFISTO_2D.cxx, SMESH/SMESH_MEFISTO_2D.hxx, - SMESH/SMESH_MaxElementArea.cxx, SMESH/SMESH_MaxElementArea.hxx, - SMESH/SMESH_MaxElementVolume.cxx, - SMESH/SMESH_MaxElementVolume.hxx, SMESH/SMESH_Mesh.cxx, - SMESH/SMESH_Mesh.hxx, SMESH/SMESH_NumberOfSegments.cxx, - SMESH/SMESH_NumberOfSegments.hxx, SMESH/SMESH_Quadrangle_2D.cxx, - SMESH/SMESH_Quadrangle_2D.hxx, SMESH/SMESH_Regular_1D.cxx, - SMESH/SMESH_Regular_1D.hxx, SMESH/SMESH_subMesh.cxx, - SMESH/SMESH_subMesh.hxx: yfr : Merge with v1.2 - -2003-07-10 09:49 Yves Fricaud - - * src/SMDS/: Handle_SMDSControl_BoundaryEdges.hxx, - Handle_SMDSControl_BoundaryFaces.hxx, - Handle_SMDSControl_MeshBoundary.hxx, - Handle_SMDS_DataMapNodeOfDataMapOfIntegerMeshElement.hxx, - Handle_SMDS_DataMapNodeOfDataMapOfPntInteger.hxx, - Handle_SMDS_EdgePosition.hxx, Handle_SMDS_FacePosition.hxx, - Handle_SMDS_HSequenceOfMesh.hxx, - Handle_SMDS_ListNodeOfListOfMesh.hxx, - Handle_SMDS_ListNodeOfListOfMeshElement.hxx, - Handle_SMDS_ListNodeOfListOfMeshGroup.hxx, Handle_SMDS_Mesh.hxx, - Handle_SMDS_MeshEdge.hxx, Handle_SMDS_MeshElement.hxx, - Handle_SMDS_MeshElementIDFactory.hxx, Handle_SMDS_MeshFace.hxx, - Handle_SMDS_MeshGroup.hxx, Handle_SMDS_MeshHexahedron.hxx, - Handle_SMDS_MeshIDFactory.hxx, Handle_SMDS_MeshNode.hxx, - Handle_SMDS_MeshNodeIDFactory.hxx, Handle_SMDS_MeshObject.hxx, - Handle_SMDS_MeshPrism.hxx, Handle_SMDS_MeshPyramid.hxx, - Handle_SMDS_MeshQuadrangle.hxx, Handle_SMDS_MeshTetrahedron.hxx, - Handle_SMDS_MeshTriangle.hxx, Handle_SMDS_MeshVolume.hxx, - Handle_SMDS_Position.hxx, - Handle_SMDS_SequenceNodeOfSequenceOfMesh.hxx, - Handle_SMDS_SpacePosition.hxx, - Handle_SMDS_StdMapNodeOfExtendedMap.hxx, - Handle_SMDS_StdMapNodeOfExtendedOrientedMap.hxx, - Handle_SMDS_VertexPosition.hxx, Makefile.in, SMDS.cdl, - SMDSAbs.cdl, SMDSAbs_ElementType.hxx, SMDSControl.cdl, - SMDSControl.cxx, SMDSControl.hxx, SMDSControl.ixx, - SMDSControl.jxx, SMDSControl_BoundaryEdges.cdl, - SMDSControl_BoundaryEdges.cxx, SMDSControl_BoundaryEdges.hxx, - SMDSControl_BoundaryEdges.ixx, SMDSControl_BoundaryEdges.jxx, - SMDSControl_BoundaryFaces.cdl, SMDSControl_BoundaryFaces.cxx, - SMDSControl_BoundaryFaces.hxx, SMDSControl_BoundaryFaces.ixx, - SMDSControl_BoundaryFaces.jxx, SMDSControl_MeshBoundary.cdl, - SMDSControl_MeshBoundary.cxx, SMDSControl_MeshBoundary.hxx, - SMDSControl_MeshBoundary.ixx, SMDSControl_MeshBoundary.jxx, - SMDSEdit.cdl, SMDSEdit_Transform.cdl, SMDSEdit_Transform.cxx, - SMDSEdit_Transform.hxx, SMDSEdit_Transform.ixx, - SMDSEdit_Transform.jxx, SMDS_BasicMap.lxx, - SMDS_BasicMapIterator.lxx, - SMDS_DataMapIteratorOfDataMapOfIntegerMeshElement.hxx, - SMDS_DataMapIteratorOfDataMapOfIntegerMeshElement_0.cxx, - SMDS_DataMapIteratorOfDataMapOfPntInteger.hxx, - SMDS_DataMapIteratorOfDataMapOfPntInteger_0.cxx, - SMDS_DataMapNodeOfDataMapOfIntegerMeshElement.hxx, - SMDS_DataMapNodeOfDataMapOfIntegerMeshElement_0.cxx, - SMDS_DataMapNodeOfDataMapOfPntInteger.hxx, - SMDS_DataMapNodeOfDataMapOfPntInteger_0.cxx, - SMDS_DataMapOfIntegerMeshElement.hxx, - SMDS_DataMapOfIntegerMeshElement_0.cxx, - SMDS_DataMapOfPntInteger.hxx, SMDS_DataMapOfPntInteger_0.cxx, - SMDS_EdgePosition.cdl, SMDS_EdgePosition.cxx, - SMDS_EdgePosition.hxx, SMDS_EdgePosition.ixx, - SMDS_EdgePosition.jxx, SMDS_EdgePosition.lxx, - SMDS_ExtendedMap.hxx, SMDS_ExtendedMap_0.cxx, - SMDS_ExtendedOrientedMap.hxx, SMDS_ExtendedOrientedMap_0.cxx, - SMDS_FacePosition.cdl, SMDS_FacePosition.cxx, - SMDS_FacePosition.hxx, SMDS_FacePosition.ixx, - SMDS_FacePosition.jxx, SMDS_FacePosition.lxx, - SMDS_HSequenceOfMesh.hxx, SMDS_HSequenceOfMesh_0.cxx, - SMDS_ListIteratorOfListOfMesh.hxx, - SMDS_ListIteratorOfListOfMeshElement.hxx, - SMDS_ListIteratorOfListOfMeshElement_0.cxx, - SMDS_ListIteratorOfListOfMeshGroup.hxx, - SMDS_ListIteratorOfListOfMeshGroup_0.cxx, - SMDS_ListIteratorOfListOfMesh_0.cxx, - SMDS_ListNodeOfListOfMesh.hxx, - SMDS_ListNodeOfListOfMeshElement.hxx, - SMDS_ListNodeOfListOfMeshElement_0.cxx, - SMDS_ListNodeOfListOfMeshGroup.hxx, - SMDS_ListNodeOfListOfMeshGroup_0.cxx, - SMDS_ListNodeOfListOfMesh_0.cxx, SMDS_ListOfMesh.hxx, - SMDS_ListOfMeshElement.hxx, SMDS_ListOfMeshElement_0.cxx, - SMDS_ListOfMeshGroup.hxx, SMDS_ListOfMeshGroup_0.cxx, - SMDS_ListOfMesh_0.cxx, SMDS_MapIteratorOfExtendedMap.hxx, - SMDS_MapIteratorOfExtendedMap_0.cxx, - SMDS_MapIteratorOfExtendedOrientedMap.hxx, - SMDS_MapIteratorOfExtendedOrientedMap_0.cxx, SMDS_MapNode.lxx, - SMDS_MapOfMeshElement.cdl, SMDS_MapOfMeshElement.cxx, - SMDS_MapOfMeshElement.hxx, SMDS_MapOfMeshElement.ixx, - SMDS_MapOfMeshElement.jxx, SMDS_MapOfMeshElement.lxx, - SMDS_MapOfMeshOrientedElement.cdl, - SMDS_MapOfMeshOrientedElement.cxx, - SMDS_MapOfMeshOrientedElement.hxx, - SMDS_MapOfMeshOrientedElement.ixx, - SMDS_MapOfMeshOrientedElement.jxx, - SMDS_MapOfMeshOrientedElement.lxx, SMDS_Mesh.cdl, SMDS_Mesh.cxx, - SMDS_Mesh.hxx, SMDS_Mesh.ixx, SMDS_Mesh.jxx, SMDS_Mesh.lxx, - SMDS_MeshEdge.cdl, SMDS_MeshEdge.cxx, SMDS_MeshEdge.hxx, - SMDS_MeshEdge.ixx, SMDS_MeshEdge.jxx, SMDS_MeshEdge.lxx, - SMDS_MeshEdgesIterator.cdl, SMDS_MeshEdgesIterator.cxx, - SMDS_MeshEdgesIterator.hxx, SMDS_MeshEdgesIterator.ixx, - SMDS_MeshEdgesIterator.jxx, SMDS_MeshElement.cdl, - SMDS_MeshElement.cxx, SMDS_MeshElement.hxx, SMDS_MeshElement.ixx, - SMDS_MeshElement.jxx, SMDS_MeshElement.lxx, - SMDS_MeshElementIDFactory.cdl, SMDS_MeshElementIDFactory.cxx, - SMDS_MeshElementIDFactory.hxx, SMDS_MeshElementIDFactory.ixx, - SMDS_MeshElementIDFactory.jxx, SMDS_MeshElementIDFactory.lxx, - SMDS_MeshElementMapHasher.cdl, SMDS_MeshElementMapHasher.cxx, - SMDS_MeshElementMapHasher.hxx, SMDS_MeshElementMapHasher.ixx, - SMDS_MeshElementMapHasher.jxx, SMDS_MeshElementMapHasher.lxx, - SMDS_MeshElementsIterator.cdl, SMDS_MeshElementsIterator.cxx, - SMDS_MeshElementsIterator.hxx, SMDS_MeshElementsIterator.ixx, - SMDS_MeshElementsIterator.jxx, SMDS_MeshElementsIterator.lxx, - SMDS_MeshFace.cdl, SMDS_MeshFace.cxx, SMDS_MeshFace.hxx, - SMDS_MeshFace.ixx, SMDS_MeshFace.jxx, SMDS_MeshFace.lxx, - SMDS_MeshFacesIterator.cdl, SMDS_MeshFacesIterator.cxx, - SMDS_MeshFacesIterator.hxx, SMDS_MeshFacesIterator.ixx, - SMDS_MeshFacesIterator.jxx, SMDS_MeshGroup.cdl, - SMDS_MeshGroup.cxx, SMDS_MeshGroup.hxx, SMDS_MeshGroup.ixx, - SMDS_MeshGroup.jxx, SMDS_MeshGroup.lxx, SMDS_MeshHexahedron.cdl, - SMDS_MeshHexahedron.cxx, SMDS_MeshHexahedron.hxx, - SMDS_MeshHexahedron.ixx, SMDS_MeshHexahedron.jxx, - SMDS_MeshHexahedron.lxx, SMDS_MeshIDFactory.cdl, - SMDS_MeshIDFactory.cxx, SMDS_MeshIDFactory.hxx, - SMDS_MeshIDFactory.ixx, SMDS_MeshIDFactory.jxx, - SMDS_MeshIDFactory.lxx, SMDS_MeshNode.cdl, SMDS_MeshNode.cxx, - SMDS_MeshNode.hxx, SMDS_MeshNode.ixx, SMDS_MeshNode.jxx, - SMDS_MeshNode.lxx, SMDS_MeshNodeIDFactory.cdl, - SMDS_MeshNodeIDFactory.cxx, SMDS_MeshNodeIDFactory.hxx, - SMDS_MeshNodeIDFactory.ixx, SMDS_MeshNodeIDFactory.jxx, - SMDS_MeshNodeIDFactory.lxx, SMDS_MeshNodesIterator.cdl, - SMDS_MeshNodesIterator.cxx, SMDS_MeshNodesIterator.hxx, - SMDS_MeshNodesIterator.ixx, SMDS_MeshNodesIterator.jxx, - SMDS_MeshObject.cdl, SMDS_MeshObject.cxx, SMDS_MeshObject.hxx, - SMDS_MeshObject.ixx, SMDS_MeshObject.jxx, - SMDS_MeshOrientedElementMapHasher.cdl, - SMDS_MeshOrientedElementMapHasher.cxx, - SMDS_MeshOrientedElementMapHasher.hxx, - SMDS_MeshOrientedElementMapHasher.ixx, - SMDS_MeshOrientedElementMapHasher.jxx, - SMDS_MeshOrientedElementMapHasher.lxx, SMDS_MeshPrism.cdl, - SMDS_MeshPrism.cxx, SMDS_MeshPrism.hxx, SMDS_MeshPrism.ixx, - SMDS_MeshPrism.jxx, SMDS_MeshPrism.lxx, SMDS_MeshPyramid.cdl, - SMDS_MeshPyramid.cxx, SMDS_MeshPyramid.hxx, SMDS_MeshPyramid.ixx, - SMDS_MeshPyramid.jxx, SMDS_MeshPyramid.lxx, - SMDS_MeshQuadrangle.cdl, SMDS_MeshQuadrangle.cxx, - SMDS_MeshQuadrangle.hxx, SMDS_MeshQuadrangle.ixx, - SMDS_MeshQuadrangle.jxx, SMDS_MeshQuadrangle.lxx, - SMDS_MeshTetrahedron.cdl, SMDS_MeshTetrahedron.cxx, - SMDS_MeshTetrahedron.hxx, SMDS_MeshTetrahedron.ixx, - SMDS_MeshTetrahedron.jxx, SMDS_MeshTetrahedron.lxx, - SMDS_MeshTriangle.cdl, SMDS_MeshTriangle.cxx, - SMDS_MeshTriangle.hxx, SMDS_MeshTriangle.ixx, - SMDS_MeshTriangle.jxx, SMDS_MeshTriangle.lxx, - SMDS_MeshVolume.cdl, SMDS_MeshVolume.cxx, SMDS_MeshVolume.hxx, - SMDS_MeshVolume.ixx, SMDS_MeshVolume.jxx, SMDS_MeshVolume.lxx, - SMDS_MeshVolumesIterator.cdl, SMDS_MeshVolumesIterator.cxx, - SMDS_MeshVolumesIterator.hxx, SMDS_MeshVolumesIterator.ixx, - SMDS_MeshVolumesIterator.jxx, SMDS_PntHasher.cdl, - SMDS_PntHasher.cxx, SMDS_PntHasher.hxx, SMDS_PntHasher.ixx, - SMDS_PntHasher.jxx, SMDS_PntHasher.lxx, SMDS_Position.cdl, - SMDS_Position.cxx, SMDS_Position.hxx, SMDS_Position.ixx, - SMDS_Position.jxx, SMDS_Position.lxx, - SMDS_SequenceNodeOfSequenceOfMesh.hxx, - SMDS_SequenceNodeOfSequenceOfMesh_0.cxx, SMDS_SequenceOfMesh.hxx, - SMDS_SequenceOfMesh_0.cxx, SMDS_SpacePosition.cdl, - SMDS_SpacePosition.cxx, SMDS_SpacePosition.hxx, - SMDS_SpacePosition.ixx, SMDS_SpacePosition.jxx, - SMDS_SpacePosition.lxx, SMDS_StdMapNode.lxx, - SMDS_StdMapNodeOfExtendedMap.hxx, - SMDS_StdMapNodeOfExtendedMap_0.cxx, - SMDS_StdMapNodeOfExtendedOrientedMap.hxx, - SMDS_StdMapNodeOfExtendedOrientedMap_0.cxx, - SMDS_TypeOfPosition.hxx, SMDS_VertexPosition.cdl, - SMDS_VertexPosition.cxx, SMDS_VertexPosition.hxx, - SMDS_VertexPosition.ixx, SMDS_VertexPosition.jxx: yfr : Merge - with v1.2 - -2003-07-10 09:32 Yves Fricaud - - * src/: DriverDAT/Makefile.in, DriverUNV/Makefile.in, - MEFISTO2/Makefile.in, OBJECT/Makefile.in, OBJECT/SMESH_Actor.cxx, - OBJECT/SMESH_Actor.h, OBJECT/SMESH_Grid.cxx, OBJECT/SMESH_Grid.h: - yfr : Merge with v1.2 - -2003-07-10 09:14 Yves Fricaud - - * src/Makefile.in: yfr : Merge with v1.2 - -2003-07-10 09:00 Yves Fricaud - - * src/: Driver/Document_Reader.cxx, Driver/Document_Reader.h, - Driver/Document_Writer.cxx, Driver/Document_Writer.h, - Driver/Driver_dl.cxx, Driver/Makefile.in, Driver/Mesh_Reader.cxx, - Driver/Mesh_Reader.h, Driver/Mesh_Writer.cxx, - Driver/Mesh_Writer.h, Driver/SMESHDriver.cxx, - Driver/SMESHDriver.h, DriverDAT/DriverDAT_R_SMDS_Mesh.cxx, - DriverDAT/DriverDAT_R_SMDS_Mesh.h, - DriverDAT/DriverDAT_R_SMESHDS_Document.cxx, - DriverDAT/DriverDAT_R_SMESHDS_Document.h, - DriverDAT/DriverDAT_R_SMESHDS_Mesh.cxx, - DriverDAT/DriverDAT_R_SMESHDS_Mesh.h, - DriverDAT/DriverDAT_W_SMDS_Mesh.cxx, - DriverDAT/DriverDAT_W_SMDS_Mesh.h, - DriverDAT/DriverDAT_W_SMESHDS_Document.cxx, - DriverDAT/DriverDAT_W_SMESHDS_Document.h, - DriverDAT/DriverDAT_W_SMESHDS_Mesh.cxx, - DriverDAT/DriverDAT_W_SMESHDS_Mesh.h, DriverDAT/Makefile.in, - DriverMED/DriverMED_R_SMDS_Mesh.cxx, - DriverMED/DriverMED_R_SMESHDS_Document.cxx, - DriverMED/DriverMED_R_SMESHDS_Mesh.cxx, - DriverMED/DriverMED_W_SMDS_Mesh.cxx, - DriverMED/DriverMED_W_SMESHDS_Document.cxx, - DriverMED/DriverMED_W_SMESHDS_Mesh.cxx, DriverMED/Makefile.in, - MEFISTO2/Makefile.in, MEFISTO2/Rn.h, MEFISTO2/aptrte.cxx, - MEFISTO2/aptrte.h: yfr : Merge with v1.2 - -2003-07-10 08:12 Yves Fricaud - - * src/SMESHGUI/SMESHGUI_icons.po: Initial revision - -2003-07-10 08:09 tag V1_2 - -2003-07-10 08:09 Yves Fricaud - - * src/: DriverMED/DriverMED_R_SMESHDS_Document.h, - DriverMED/DriverMED_W_SMESHDS_Document.h, - SMESHGUI/SMESHGUI_msg_en.po: sources v1.2 - -2003-06-29 13:17 Paul Rascle - - * src/SMESH_SWIG/: Makefile.in, SMESH_shared_modules.py: PR: needed - by merge C. CAREMOLI branch CCAR_br1 - -2003-06-12 10:37 Paul Rascle - - * Makefile.in: PR: avoids unnecessary compilation after - regeneration of SALOMEconfig.h, with gcc3.2 - -2003-06-12 10:34 Paul Rascle - - * src/SMESH_SWIG/SMESH_fixation.py: PR: bug on subshapes not sorted - -2003-05-28 16:42 Nicolas Rejneri - - * adm_local/unix/make_commence.in: NRI : Add path fro GEOM and MED - idls. - -2003-05-28 16:26 Nicolas Rejneri - - * idl/Makefile.in, adm_local/unix/make_commence.in, - adm_local/unix/make_omniorb.in, build_configure, - configure.in.base: NRI : Update IDL Dependancies. - -2003-05-28 07:20 Nicolas Rejneri - - * bin/VERSION, Makefile.in: NRI : Add MODULE version info. - -2003-05-28 07:16 Nicolas Rejneri - - * configure.in.base, adm_local/unix/config_files/check_Med.m4: NRI - : Add Check of MED. - -2003-05-26 14:21 Nicolas Rejneri - - * adm_local/unix/config_files/check_Geom.m4, configure.in.base: NRI - : Add GEOM check local. - -2003-05-26 14:00 Nicolas Rejneri - - * build_configure: NRI : updated aclocal. - -2003-05-23 11:40 tag Start-v1_1a - -2003-05-23 11:40 Nicolas Rejneri - - * src/SMESHGUI/: SMESHGUI_AddAlgorithmDlg.cxx, - SMESHGUI_AddEdgeDlg.cxx, SMESHGUI_AddFaceDlg.cxx, - SMESHGUI_AddHypothesisDlg.cxx, SMESHGUI_AddSubMeshDlg.cxx, - SMESHGUI_AddVolumeDlg.cxx, SMESHGUI_DiagonalInversionDlg.cxx, - SMESHGUI_EdgesConnectivityDlg.cxx, - SMESHGUI_EditHypothesesDlg.cxx, SMESHGUI_InitMeshDlg.cxx, - SMESHGUI_LocalLengthDlg.cxx, SMESHGUI_MaxElementAreaDlg.cxx, - SMESHGUI_MaxElementVolumeDlg.cxx, SMESHGUI_MoveNodesDlg.cxx, - SMESHGUI_NbSegmentsDlg.cxx, SMESHGUI_NodesDlg.cxx, - SMESHGUI_OrientationElementsDlg.cxx, - SMESHGUI_RemoveElementsDlg.cxx, SMESHGUI_RemoveNodesDlg.cxx: NRI - : loadPixmap( "SMESH", ...) instead of "SMESHGUI". - -2003-05-22 09:52 Nicolas Rejneri - - * doc/: Makefile.in, html/Makefile.in, html/INPUT/doxyfile, - html/INPUT/sources/Application-About.png, - html/INPUT/sources/Application-About1.jpg, - html/INPUT/sources/application.gif, - html/INPUT/sources/application.jpg, - html/INPUT/sources/bg_salomepro.gif, - html/INPUT/sources/doxygen.css, html/INPUT/sources/logocorp.gif, - html/INPUT/sources/myheader.html, html/INPUT/sources/occ.gif, - html/INPUT/HTML/SMESH_BasicHypothesis.html, - html/INPUT/HTML/SMESH_Gen.html, - html/INPUT/HTML/SMESH_Hypothesis.html, - html/INPUT/HTML/SMESH_Mesh.html: NRI : Add documentation. - -2003-05-22 09:51 Nicolas Rejneri - - * configure.in.base: NRI : Add check HTML generators. - -2003-05-20 07:17 Nicolas Rejneri - - * src/: SMESH_I/SMESH_Gen_i.cxx, SMESH_I/SMESH_test.py, - SMESH_I/smeshpy.py, SMESH_SWIG/SMESH_fixation.py, - SMESH_SWIG/SMESH_mechanic.py, SMESH_SWIG/SMESH_test0.py, - SMESH_SWIG/SMESH_test1.py, SMESH_SWIG/SMESH_test3.py, - SMESHGUI/SMESHGUI.cxx: NRI : Use GEOM instead of Geometry. - -2003-05-20 07:16 Nicolas Rejneri - - * resources/SMESHCatalog.xml: NRI : Add component-username tag. - -2003-05-20 07:15 Nicolas Rejneri - - * Makefile.in: NRI : Add SMESHCatalog.xml - -2003-05-19 14:50 Nicolas Rejneri - - * src/SMESHGUI/SMESHGUI_StudyAPI.cxx: NRI : Add QAD_Desktop.h. - -2003-05-19 14:49 Nicolas Rejneri - - * src/SMESHGUI/Makefile.in: NRI : Add GEOM includes and libs. - -2003-05-19 14:38 Nicolas Rejneri - - * src/SMESHFiltersSelection/Makefile.in: NRI : Add KERNEL includes. - -2003-05-19 14:34 Nicolas Rejneri - - * src/SMESH_I/Makefile.in: NRI : Change lGeometryClient by - lGEOMClient. - -2003-05-19 14:32 Nicolas Rejneri - - * src/SMESH_I/Makefile.in: NRI : Add GEOM includes and libs. - -2003-05-19 14:11 Nicolas Rejneri - - * src/: SMESH/Makefile.in, SMESHDS/Makefile.in: NRI : Add KERNEL - includes and libs. - -2003-05-19 14:09 Nicolas Rejneri - - * src/: DriverDAT/Makefile.in, DriverMED/Makefile.in, - DriverUNV/Makefile.in: NRI : Add KERNEL includes. - -2003-05-19 14:08 Nicolas Rejneri - - * idl/Makefile.in: NRI : Add MED.idl - -2003-05-19 14:01 Nicolas Rejneri - - * src/: SMESH_SWIG/Makefile.in, SMESH_SWIG/SMESH_fixation.py, - SMESH_SWIG/SMESH_mechanic.py, SMESH_SWIG/SMESH_test0.py, - SMESH_SWIG/SMESH_test1.py, SMESH_SWIG/SMESH_test2.py, - SMESH_SWIG/SMESH_test3.py, SMESH_SWIG/batchmode_smesh.py, - SMESH_SWIG/libSMESH_Swig.i, Makefile.in, - SMESHFiltersSelection/Handle_SMESH_TypeFilter.hxx, - SMESHFiltersSelection/Makefile.in, - SMESHFiltersSelection/SMESH_Type.h, - SMESHFiltersSelection/SMESH_TypeFilter.cxx, - SMESHFiltersSelection/SMESH_TypeFilter.hxx, - SMESHFiltersSelection/SMESH_TypeFilter.ixx, - SMESHFiltersSelection/SMESH_TypeFilter.jxx, MEFISTO2/Makefile.in, - MEFISTO2/Rn.h, MEFISTO2/aptrte.cxx, MEFISTO2/aptrte.h, - MEFISTO2/areteideale.f, MEFISTO2/trte.f, OBJECT/Makefile.in, - OBJECT/SMESH_Actor.cxx, OBJECT/SMESH_Actor.h, - OBJECT/SMESH_Grid.cxx, OBJECT/SMESH_Grid.h, - Driver/Document_Reader.cxx, Driver/Document_Reader.h, - Driver/Document_Writer.cxx, Driver/Document_Writer.h, - Driver/Driver_dl.cxx, Driver/Makefile.in, Driver/Mesh_Reader.cxx, - Driver/Mesh_Reader.h, Driver/Mesh_Writer.cxx, - Driver/Mesh_Writer.h, Driver/SMESHDriver.cxx, - Driver/SMESHDriver.h: NRI : First integration. - -2003-05-19 13:48 Nicolas Rejneri - - * src/: SMDS/Handle_SMDSControl_BoundaryEdges.hxx, - SMDS/Handle_SMDSControl_BoundaryFaces.hxx, - SMDS/Handle_SMDSControl_MeshBoundary.hxx, - SMDS/Handle_SMDS_DataMapNodeOfDataMapOfIntegerMeshElement.hxx, - SMDS/Handle_SMDS_DataMapNodeOfDataMapOfPntInteger.hxx, - SMDS/Handle_SMDS_EdgePosition.hxx, - SMDS/Handle_SMDS_FacePosition.hxx, - SMDS/Handle_SMDS_HSequenceOfMesh.hxx, - SMDS/Handle_SMDS_ListNodeOfListOfMesh.hxx, - SMDS/Handle_SMDS_ListNodeOfListOfMeshElement.hxx, - SMDS/Handle_SMDS_ListNodeOfListOfMeshGroup.hxx, - SMDS/Handle_SMDS_Mesh.hxx, SMDS/Handle_SMDS_MeshEdge.hxx, - SMDS/Handle_SMDS_MeshElement.hxx, - SMDS/Handle_SMDS_MeshElementIDFactory.hxx, - SMDS/Handle_SMDS_MeshFace.hxx, SMDS/Handle_SMDS_MeshGroup.hxx, - SMDS/Handle_SMDS_MeshHexahedron.hxx, - SMDS/Handle_SMDS_MeshIDFactory.hxx, - SMDS/Handle_SMDS_MeshNode.hxx, - SMDS/Handle_SMDS_MeshNodeIDFactory.hxx, - SMDS/Handle_SMDS_MeshObject.hxx, SMDS/Handle_SMDS_MeshPrism.hxx, - SMDS/Handle_SMDS_MeshPyramid.hxx, - SMDS/Handle_SMDS_MeshQuadrangle.hxx, - SMDS/Handle_SMDS_MeshTetrahedron.hxx, - SMDS/Handle_SMDS_MeshTriangle.hxx, - SMDS/Handle_SMDS_MeshVolume.hxx, SMDS/Handle_SMDS_Position.hxx, - SMDS/Handle_SMDS_SequenceNodeOfSequenceOfMesh.hxx, - SMDS/Handle_SMDS_SpacePosition.hxx, - SMDS/Handle_SMDS_StdMapNodeOfExtendedMap.hxx, - SMDS/Handle_SMDS_StdMapNodeOfExtendedOrientedMap.hxx, - SMDS/Handle_SMDS_VertexPosition.hxx, SMDS/Makefile.in, - SMDS/SMDS.cdl, SMDS/SMDSAbs.cdl, SMDS/SMDSAbs_ElementType.hxx, - SMDS/SMDSControl.cdl, SMDS/SMDSControl.cxx, SMDS/SMDSControl.hxx, - SMDS/SMDSControl.ixx, SMDS/SMDSControl.jxx, - SMDS/SMDSControl_BoundaryEdges.cdl, - SMDS/SMDSControl_BoundaryEdges.cxx, - SMDS/SMDSControl_BoundaryEdges.hxx, - SMDS/SMDSControl_BoundaryEdges.ixx, - SMDS/SMDSControl_BoundaryEdges.jxx, - SMDS/SMDSControl_BoundaryFaces.cdl, - SMDS/SMDSControl_BoundaryFaces.cxx, - SMDS/SMDSControl_BoundaryFaces.hxx, - SMDS/SMDSControl_BoundaryFaces.ixx, - SMDS/SMDSControl_BoundaryFaces.jxx, - SMDS/SMDSControl_MeshBoundary.cdl, - SMDS/SMDSControl_MeshBoundary.cxx, - SMDS/SMDSControl_MeshBoundary.hxx, - SMDS/SMDSControl_MeshBoundary.ixx, - SMDS/SMDSControl_MeshBoundary.jxx, SMDS/SMDSEdit.cdl, - SMDS/SMDSEdit_Transform.cdl, SMDS/SMDSEdit_Transform.cxx, - SMDS/SMDSEdit_Transform.hxx, SMDS/SMDSEdit_Transform.ixx, - SMDS/SMDSEdit_Transform.jxx, SMDS/SMDS_BasicMap.lxx, - SMDS/SMDS_BasicMapIterator.lxx, - SMDS/SMDS_DataMapIteratorOfDataMapOfIntegerMeshElement.hxx, - SMDS/SMDS_DataMapIteratorOfDataMapOfIntegerMeshElement_0.cxx, - SMDS/SMDS_DataMapIteratorOfDataMapOfPntInteger.hxx, - SMDS/SMDS_DataMapIteratorOfDataMapOfPntInteger_0.cxx, - SMDS/SMDS_DataMapNodeOfDataMapOfIntegerMeshElement.hxx, - SMDS/SMDS_DataMapNodeOfDataMapOfIntegerMeshElement_0.cxx, - SMDS/SMDS_DataMapNodeOfDataMapOfPntInteger.hxx, - SMDS/SMDS_DataMapNodeOfDataMapOfPntInteger_0.cxx, - SMDS/SMDS_DataMapOfIntegerMeshElement.hxx, - SMDS/SMDS_DataMapOfIntegerMeshElement_0.cxx, - SMDS/SMDS_DataMapOfPntInteger.hxx, - SMDS/SMDS_DataMapOfPntInteger_0.cxx, SMDS/SMDS_EdgePosition.cdl, - SMDS/SMDS_EdgePosition.cxx, SMDS/SMDS_EdgePosition.hxx, - SMDS/SMDS_EdgePosition.ixx, SMDS/SMDS_EdgePosition.jxx, - SMDS/SMDS_EdgePosition.lxx, SMDS/SMDS_ExtendedMap.hxx, - SMDS/SMDS_ExtendedMap_0.cxx, SMDS/SMDS_ExtendedOrientedMap.hxx, - SMDS/SMDS_ExtendedOrientedMap_0.cxx, SMDS/SMDS_FacePosition.cdl, - SMDS/SMDS_FacePosition.cxx, SMDS/SMDS_FacePosition.hxx, - SMDS/SMDS_FacePosition.ixx, SMDS/SMDS_FacePosition.jxx, - SMDS/SMDS_FacePosition.lxx, SMDS/SMDS_HSequenceOfMesh.hxx, - SMDS/SMDS_HSequenceOfMesh_0.cxx, - SMDS/SMDS_ListIteratorOfListOfMesh.hxx, - SMDS/SMDS_ListIteratorOfListOfMeshElement.hxx, - SMDS/SMDS_ListIteratorOfListOfMeshElement_0.cxx, - SMDS/SMDS_ListIteratorOfListOfMeshGroup.hxx, - SMDS/SMDS_ListIteratorOfListOfMeshGroup_0.cxx, - SMDS/SMDS_ListIteratorOfListOfMesh_0.cxx, - SMDS/SMDS_ListNodeOfListOfMesh.hxx, - SMDS/SMDS_ListNodeOfListOfMeshElement.hxx, - SMDS/SMDS_ListNodeOfListOfMeshElement_0.cxx, - SMDS/SMDS_ListNodeOfListOfMeshGroup.hxx, - SMDS/SMDS_ListNodeOfListOfMeshGroup_0.cxx, - SMDS/SMDS_ListNodeOfListOfMesh_0.cxx, SMDS/SMDS_ListOfMesh.hxx, - SMDS/SMDS_ListOfMeshElement.hxx, - SMDS/SMDS_ListOfMeshElement_0.cxx, SMDS/SMDS_ListOfMeshGroup.hxx, - SMDS/SMDS_ListOfMeshGroup_0.cxx, SMDS/SMDS_ListOfMesh_0.cxx, - SMDS/SMDS_Map.gxx, SMDS/SMDS_MapHasher.gxx, - SMDS/SMDS_MapIterator.gxx, - SMDS/SMDS_MapIteratorOfExtendedMap.hxx, - SMDS/SMDS_MapIteratorOfExtendedMap_0.cxx, - SMDS/SMDS_MapIteratorOfExtendedOrientedMap.hxx, - SMDS/SMDS_MapIteratorOfExtendedOrientedMap_0.cxx, - SMDS/SMDS_MapNode.lxx, SMDS/SMDS_MapOfMeshElement.cdl, - SMDS/SMDS_MapOfMeshElement.cxx, SMDS/SMDS_MapOfMeshElement.hxx, - SMDS/SMDS_MapOfMeshElement.ixx, SMDS/SMDS_MapOfMeshElement.jxx, - SMDS/SMDS_MapOfMeshElement.lxx, - SMDS/SMDS_MapOfMeshOrientedElement.cdl, - SMDS/SMDS_MapOfMeshOrientedElement.cxx, - SMDS/SMDS_MapOfMeshOrientedElement.hxx, - SMDS/SMDS_MapOfMeshOrientedElement.ixx, - SMDS/SMDS_MapOfMeshOrientedElement.jxx, - SMDS/SMDS_MapOfMeshOrientedElement.lxx, SMDS/SMDS_Mesh.cdl, - SMDS/SMDS_Mesh.cxx, SMDS/SMDS_Mesh.hxx, SMDS/SMDS_Mesh.ixx, - SMDS/SMDS_Mesh.jxx, SMDS/SMDS_Mesh.lxx, SMDS/SMDS_MeshEdge.cdl, - SMDS/SMDS_MeshEdge.cxx, SMDS/SMDS_MeshEdge.hxx, - SMDS/SMDS_MeshEdge.ixx, SMDS/SMDS_MeshEdge.jxx, - SMDS/SMDS_MeshEdge.lxx, SMDS/SMDS_MeshEdgesIterator.cdl, - SMDS/SMDS_MeshEdgesIterator.cxx, SMDS/SMDS_MeshEdgesIterator.hxx, - SMDS/SMDS_MeshEdgesIterator.ixx, SMDS/SMDS_MeshEdgesIterator.jxx, - SMDS/SMDS_MeshElement.cdl, SMDS/SMDS_MeshElement.cxx, - SMDS/SMDS_MeshElement.hxx, SMDS/SMDS_MeshElement.ixx, - SMDS/SMDS_MeshElement.jxx, SMDS/SMDS_MeshElement.lxx, - SMDS/SMDS_MeshElementIDFactory.cdl, - SMDS/SMDS_MeshElementIDFactory.cxx, - SMDS/SMDS_MeshElementIDFactory.hxx, - SMDS/SMDS_MeshElementIDFactory.ixx, - SMDS/SMDS_MeshElementIDFactory.jxx, - SMDS/SMDS_MeshElementIDFactory.lxx, - SMDS/SMDS_MeshElementMapHasher.cdl, - SMDS/SMDS_MeshElementMapHasher.cxx, - SMDS/SMDS_MeshElementMapHasher.hxx, - SMDS/SMDS_MeshElementMapHasher.ixx, - SMDS/SMDS_MeshElementMapHasher.jxx, - SMDS/SMDS_MeshElementMapHasher.lxx, - SMDS/SMDS_MeshElementsIterator.cdl, - SMDS/SMDS_MeshElementsIterator.cxx, - SMDS/SMDS_MeshElementsIterator.hxx, - SMDS/SMDS_MeshElementsIterator.ixx, - SMDS/SMDS_MeshElementsIterator.jxx, - SMDS/SMDS_MeshElementsIterator.lxx, SMDS/SMDS_MeshFace.cdl, - SMDS/SMDS_MeshFace.cxx, SMDS/SMDS_MeshFace.hxx, - SMDS/SMDS_MeshFace.ixx, SMDS/SMDS_MeshFace.jxx, - SMDS/SMDS_MeshFace.lxx, SMDS/SMDS_MeshFacesIterator.cdl, - SMDS/SMDS_MeshFacesIterator.cxx, SMDS/SMDS_MeshFacesIterator.hxx, - SMDS/SMDS_MeshFacesIterator.ixx, SMDS/SMDS_MeshFacesIterator.jxx, - SMDS/SMDS_MeshGroup.cdl, SMDS/SMDS_MeshGroup.cxx, - SMDS/SMDS_MeshGroup.hxx, SMDS/SMDS_MeshGroup.ixx, - SMDS/SMDS_MeshGroup.jxx, SMDS/SMDS_MeshGroup.lxx, - SMDS/SMDS_MeshHexahedron.cdl, SMDS/SMDS_MeshHexahedron.cxx, - SMDS/SMDS_MeshHexahedron.hxx, SMDS/SMDS_MeshHexahedron.ixx, - SMDS/SMDS_MeshHexahedron.jxx, SMDS/SMDS_MeshHexahedron.lxx, - SMDS/SMDS_MeshIDFactory.cdl, SMDS/SMDS_MeshIDFactory.cxx, - SMDS/SMDS_MeshIDFactory.ixx, SMDS/SMDS_MeshIDFactory.jxx, - SMDS/SMDS_MeshIDFactory.lxx, SMDS/SMDS_MeshNode.cdl, - SMDS/SMDS_MeshNode.cxx, SMDS/SMDS_MeshNode.hxx, - SMDS/SMDS_MeshNode.ixx, SMDS/SMDS_MeshNode.jxx, - SMDS/SMDS_MeshNode.lxx, SMDS/SMDS_MeshNodeIDFactory.cdl, - SMDS/SMDS_MeshNodeIDFactory.cxx, SMDS/SMDS_MeshNodeIDFactory.hxx, - SMDS/SMDS_MeshNodeIDFactory.ixx, SMDS/SMDS_MeshNodeIDFactory.jxx, - SMDS/SMDS_MeshNodeIDFactory.lxx, SMDS/SMDS_MeshNodesIterator.cdl, - SMDS/SMDS_MeshNodesIterator.cxx, SMDS/SMDS_MeshNodesIterator.hxx, - SMDS/SMDS_MeshNodesIterator.ixx, SMDS/SMDS_MeshNodesIterator.jxx, - SMDS/SMDS_MeshObject.cdl, SMDS/SMDS_MeshObject.cxx, - SMDS/SMDS_MeshObject.hxx, SMDS/SMDS_MeshObject.ixx, - SMDS/SMDS_MeshObject.jxx, - SMDS/SMDS_MeshOrientedElementMapHasher.cdl, - SMDS/SMDS_MeshOrientedElementMapHasher.cxx, - SMDS/SMDS_MeshOrientedElementMapHasher.hxx, - SMDS/SMDS_MeshOrientedElementMapHasher.ixx, - SMDS/SMDS_MeshOrientedElementMapHasher.jxx, - SMDS/SMDS_MeshOrientedElementMapHasher.lxx, - SMDS/SMDS_MeshPrism.cdl, SMDS/SMDS_MeshPrism.cxx, - SMDS/SMDS_MeshPrism.hxx, SMDS/SMDS_MeshPrism.ixx, - SMDS/SMDS_MeshPrism.jxx, SMDS/SMDS_MeshPrism.lxx, - SMDS/SMDS_MeshPyramid.cdl, SMDS/SMDS_MeshPyramid.cxx, - SMDS/SMDS_MeshPyramid.hxx, SMDS/SMDS_MeshPyramid.ixx, - SMDS/SMDS_MeshPyramid.jxx, SMDS/SMDS_MeshPyramid.lxx, - SMDS/SMDS_MeshQuadrangle.cdl, SMDS/SMDS_MeshQuadrangle.cxx, - SMDS/SMDS_MeshQuadrangle.hxx, SMDS/SMDS_MeshQuadrangle.ixx, - SMDS/SMDS_MeshQuadrangle.jxx, SMDS/SMDS_MeshQuadrangle.lxx, - SMDS/SMDS_MeshTetrahedron.cdl, SMDS/SMDS_MeshTetrahedron.cxx, - SMDS/SMDS_MeshTetrahedron.hxx, SMDS/SMDS_MeshTetrahedron.ixx, - SMDS/SMDS_MeshTetrahedron.jxx, SMDS/SMDS_MeshTetrahedron.lxx, - SMDS/SMDS_MeshTriangle.cdl, SMDS/SMDS_MeshTriangle.cxx, - SMDS/SMDS_MeshTriangle.hxx, SMDS/SMDS_MeshTriangle.ixx, - SMDS/SMDS_MeshTriangle.jxx, SMDS/SMDS_MeshTriangle.lxx, - SMDS/SMDS_MeshVolume.cdl, SMDS/SMDS_MeshVolume.cxx, - SMDS/SMDS_MeshVolume.hxx, SMDS/SMDS_MeshVolume.ixx, - SMDS/SMDS_MeshVolume.jxx, SMDS/SMDS_MeshVolume.lxx, - SMDS/SMDS_MeshVolumesIterator.cdl, - SMDS/SMDS_MeshVolumesIterator.cxx, - SMDS/SMDS_MeshVolumesIterator.hxx, - SMDS/SMDS_MeshVolumesIterator.ixx, - SMDS/SMDS_MeshVolumesIterator.jxx, SMDS/SMDS_PntHasher.cdl, - SMDS/SMDS_PntHasher.cxx, SMDS/SMDS_PntHasher.hxx, - SMDS/SMDS_PntHasher.ixx, SMDS/SMDS_PntHasher.jxx, - SMDS/SMDS_PntHasher.lxx, SMDS/SMDS_Position.cdl, - SMDS/SMDS_Position.cxx, SMDS/SMDS_Position.hxx, - SMDS/SMDS_Position.ixx, SMDS/SMDS_Position.jxx, - SMDS/SMDS_Position.lxx, - SMDS/SMDS_SequenceNodeOfSequenceOfMesh.hxx, - SMDS/SMDS_SequenceNodeOfSequenceOfMesh_0.cxx, - SMDS/SMDS_SequenceOfMesh.hxx, SMDS/SMDS_SequenceOfMesh_0.cxx, - SMDS/SMDS_SpacePosition.cdl, SMDS/SMDS_SpacePosition.cxx, - SMDS/SMDS_SpacePosition.hxx, SMDS/SMDS_SpacePosition.ixx, - SMDS/SMDS_SpacePosition.jxx, SMDS/SMDS_SpacePosition.lxx, - SMDS/SMDS_StdMapNode.gxx, SMDS/SMDS_StdMapNode.lxx, - SMDS/SMDS_StdMapNodeOfExtendedMap.hxx, - SMDS/SMDS_StdMapNodeOfExtendedMap_0.cxx, - SMDS/SMDS_StdMapNodeOfExtendedOrientedMap.hxx, - SMDS/SMDS_StdMapNodeOfExtendedOrientedMap_0.cxx, - SMDS/SMDS_TypeOfPosition.hxx, SMDS/SMDS_VertexPosition.cdl, - SMDS/SMDS_VertexPosition.cxx, SMDS/SMDS_VertexPosition.hxx, - SMDS/SMDS_VertexPosition.ixx, SMDS/SMDS_VertexPosition.jxx, - SMDS/SMDS_MeshIDFactory.hxx, SMESH_I/Makefile.in, - SMESH_I/SMESH_1D_Algo_i.cxx, SMESH_I/SMESH_1D_Algo_i.hxx, - SMESH_I/SMESH_2D_Algo_i.cxx, SMESH_I/SMESH_2D_Algo_i.hxx, - SMESH_I/SMESH_3D_Algo_i.cxx, SMESH_I/SMESH_3D_Algo_i.hxx, - SMESH_I/SMESH_Algo_i.cxx, SMESH_I/SMESH_Algo_i.hxx, - SMESH_I/SMESH_Gen_i.cxx, SMESH_I/SMESH_Gen_i.hxx, - SMESH_I/SMESH_Hexa_3D_i.cxx, SMESH_I/SMESH_Hexa_3D_i.hxx, - SMESH_I/SMESH_HypothesisFactory_i.cxx, - SMESH_I/SMESH_HypothesisFactory_i.hxx, - SMESH_I/SMESH_Hypothesis_i.cxx, SMESH_I/SMESH_Hypothesis_i.hxx, - SMESH_I/SMESH_LocalLength_i.cxx, SMESH_I/SMESH_LocalLength_i.hxx, - SMESH_I/SMESH_MEDFamily_i.cxx, SMESH_I/SMESH_MEDFamily_i.hxx, - SMESH_I/SMESH_MEDMesh_i.cxx, SMESH_I/SMESH_MEDMesh_i.hxx, - SMESH_I/SMESH_MEDSupport_i.cxx, SMESH_I/SMESH_MEDSupport_i.hxx, - SMESH_I/SMESH_MEFISTO_2D_i.cxx, SMESH_I/SMESH_MEFISTO_2D_i.hxx, - SMESH_I/SMESH_MaxElementArea_i.cxx, - SMESH_I/SMESH_MaxElementArea_i.hxx, - SMESH_I/SMESH_MaxElementVolume_i.cxx, - SMESH_I/SMESH_MaxElementVolume_i.hxx, - SMESH_I/SMESH_MeshEditor_i.cxx, SMESH_I/SMESH_MeshEditor_i.hxx, - SMESH_I/SMESH_Mesh_i.cxx, SMESH_I/SMESH_Mesh_i.hxx, - SMESH_I/SMESH_NumberOfSegments_i.cxx, - SMESH_I/SMESH_NumberOfSegments_i.hxx, - SMESH_I/SMESH_Quadrangle_2D_i.cxx, - SMESH_I/SMESH_Quadrangle_2D_i.hxx, - SMESH_I/SMESH_Regular_1D_i.cxx, SMESH_I/SMESH_Regular_1D_i.hxx, - SMESH_I/SMESH_subMesh_i.cxx, SMESH_I/SMESH_subMesh_i.hxx, - SMESH_I/SMESH_test.py, SMESH_I/SMESH_topo.cxx, - SMESH_I/SMESH_topo.hxx, SMESH_I/smeshpy.py, SMESH_I/sstream, - SMESHGUI/Makefile.in, SMESHGUI/SMESHGUI.cxx, SMESHGUI/SMESHGUI.h, - SMESHGUI/SMESHGUI_AddAlgorithmDlg.cxx, - SMESHGUI/SMESHGUI_AddAlgorithmDlg.h, - SMESHGUI/SMESHGUI_AddEdgeDlg.cxx, SMESHGUI/SMESHGUI_AddEdgeDlg.h, - SMESHGUI/SMESHGUI_AddFaceDlg.cxx, SMESHGUI/SMESHGUI_AddFaceDlg.h, - SMESHGUI/SMESHGUI_AddHypothesisDlg.cxx, - SMESHGUI/SMESHGUI_AddHypothesisDlg.h, - SMESHGUI/SMESHGUI_AddSubMeshDlg.cxx, - SMESHGUI/SMESHGUI_AddSubMeshDlg.h, - SMESHGUI/SMESHGUI_AddVolumeDlg.cxx, - SMESHGUI/SMESHGUI_AddVolumeDlg.h, - SMESHGUI/SMESHGUI_ComputeScalarValue.cxx, - SMESHGUI/SMESHGUI_ComputeScalarValue.h, - SMESHGUI/SMESHGUI_DiagonalInversionDlg.cxx, - SMESHGUI/SMESHGUI_DiagonalInversionDlg.h, - SMESHGUI/SMESHGUI_EdgesConnectivityDlg.cxx, - SMESHGUI/SMESHGUI_EdgesConnectivityDlg.h, - SMESHGUI/SMESHGUI_EditHypothesesDlg.cxx, - SMESHGUI/SMESHGUI_EditHypothesesDlg.h, - SMESHGUI/SMESHGUI_EditScalarBarDlg.cxx, - SMESHGUI/SMESHGUI_EditScalarBarDlg.h, - SMESHGUI/SMESHGUI_InitMeshDlg.cxx, - SMESHGUI/SMESHGUI_InitMeshDlg.h, - SMESHGUI/SMESHGUI_LocalLengthDlg.cxx, - SMESHGUI/SMESHGUI_LocalLengthDlg.h, - SMESHGUI/SMESHGUI_MaxElementAreaDlg.cxx, - SMESHGUI/SMESHGUI_MaxElementAreaDlg.h, - SMESHGUI/SMESHGUI_MaxElementVolumeDlg.cxx, - SMESHGUI/SMESHGUI_MaxElementVolumeDlg.h, - SMESHGUI/SMESHGUI_MeshInfosDlg.cxx, - SMESHGUI/SMESHGUI_MeshInfosDlg.h, - SMESHGUI/SMESHGUI_MoveNodesDlg.cxx, - SMESHGUI/SMESHGUI_MoveNodesDlg.h, - SMESHGUI/SMESHGUI_NbSegmentsDlg.cxx, - SMESHGUI/SMESHGUI_NbSegmentsDlg.h, - SMESHGUI/SMESHGUI_NodesDlg.cxx, SMESHGUI/SMESHGUI_NodesDlg.h, - SMESHGUI/SMESHGUI_OrientationElementsDlg.cxx, - SMESHGUI/SMESHGUI_OrientationElementsDlg.h, - SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx, - SMESHGUI/SMESHGUI_Preferences_ColorDlg.h, - SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx, - SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.h, - SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx, - SMESHGUI/SMESHGUI_RemoveElementsDlg.h, - SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx, - SMESHGUI/SMESHGUI_RemoveNodesDlg.h, - SMESHGUI/SMESHGUI_SpinBox.cxx, SMESHGUI/SMESHGUI_SpinBox.h, - SMESHGUI/SMESHGUI_StudyAPI.cxx, SMESHGUI/SMESHGUI_StudyAPI.h, - SMESHGUI/SMESHGUI_Swig.cxx, SMESHGUI/SMESHGUI_Swig.hxx, - SMESHGUI/SMESHGUI_Swig.i, SMESHGUI/SMESHGUI_TransparencyDlg.cxx, - SMESHGUI/SMESHGUI_TransparencyDlg.h, - SMESHGUI/SMESHGUI_aParameterDlg.cxx, - SMESHGUI/SMESHGUI_aParameterDlg.h, SMESHGUI/SMESH_icons.po, - SMESHGUI/SMESH_msg_en.po: NRI : First integration. - -2003-05-19 13:18 Nicolas Rejneri - - * src/: SMESH/Makefile.in, SMESH/SMESH_1D_Algo.cxx, - SMESH/SMESH_1D_Algo.hxx, SMESH/SMESH_2D_Algo.cxx, - SMESH/SMESH_2D_Algo.hxx, SMESH/SMESH_3D_Algo.cxx, - SMESH/SMESH_3D_Algo.hxx, SMESH/SMESH_Algo.cxx, - SMESH/SMESH_Algo.hxx, SMESH/SMESH_Gen.cxx, SMESH/SMESH_Gen.hxx, - SMESH/SMESH_Hexa_3D.cxx, SMESH/SMESH_Hexa_3D.hxx, - SMESH/SMESH_Hypothesis.cxx, SMESH/SMESH_Hypothesis.hxx, - SMESH/SMESH_HypothesisCreator.hxx, - SMESH/SMESH_HypothesisFactory.cxx, - SMESH/SMESH_HypothesisFactory.hxx, - SMESH/SMESH_LengthFromEdges.cxx, SMESH/SMESH_LengthFromEdges.hxx, - SMESH/SMESH_LocalLength.cxx, SMESH/SMESH_LocalLength.hxx, - SMESH/SMESH_MEFISTO_2D.cxx, SMESH/SMESH_MEFISTO_2D.hxx, - SMESH/SMESH_MaxElementArea.cxx, SMESH/SMESH_MaxElementArea.hxx, - SMESH/SMESH_MaxElementVolume.cxx, - SMESH/SMESH_MaxElementVolume.hxx, SMESH/SMESH_Mesh.cxx, - SMESH/SMESH_Mesh.hxx, SMESH/SMESH_NumberOfSegments.cxx, - SMESH/SMESH_NumberOfSegments.hxx, SMESH/SMESH_Quadrangle_2D.cxx, - SMESH/SMESH_Quadrangle_2D.hxx, SMESH/SMESH_Regular_1D.cxx, - SMESH/SMESH_Regular_1D.hxx, SMESH/SMESH_subMesh.cxx, - SMESH/SMESH_subMesh.hxx, SMESHDS/Handle_SMESHDS_Command.hxx, - SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerMesh.hxx, - SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis.hxx, - SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh.hxx, - SMESHDS/Handle_SMESHDS_ListNodeOfListOfCommand.hxx, - SMESHDS/Handle_SMESHDS_Mesh.hxx, - SMESHDS/Handle_SMESHDS_Script.hxx, SMESHDS/Makefile.in, - SMESHDS/SMESHDS_Command.cdl, SMESHDS/SMESHDS_Command.cxx, - SMESHDS/SMESHDS_Command.ixx, SMESHDS/SMESHDS_Command.jxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerMesh_0.cxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerSubMesh.hxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerSubMesh_0.cxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeListOfPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeSubMesh.hxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerMesh.hxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh.hxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh_0.cxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis.hxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh.hxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh_0.cxx, - SMESHDS/SMESHDS_DataMapOfIntegerMesh.hxx, - SMESHDS/SMESHDS_DataMapOfIntegerMesh_0.cxx, - SMESHDS/SMESHDS_DataMapOfIntegerPtrHypothesis.hxx, - SMESHDS/SMESHDS_DataMapOfIntegerPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_DataMapOfIntegerSubMesh.hxx, - SMESHDS/SMESHDS_DataMapOfIntegerSubMesh_0.cxx, - SMESHDS/SMESHDS_DataMapOfShapeSubMesh.hxx, - SMESHDS/SMESHDS_DataMapOfShapeSubMesh_0.cxx, - SMESHDS/SMESHDS_Document.cdl, SMESHDS/SMESHDS_Document.hxx, - SMESHDS/SMESHDS_Document.ixx, SMESHDS/SMESHDS_Hypothesis.hxx, - SMESHDS/SMESHDS_ListIteratorOfListOfAsciiString_0.cxx, - SMESHDS/SMESHDS_ListIteratorOfListOfCommand.hxx, - SMESHDS/SMESHDS_ListIteratorOfListOfCommand_0.cxx, - SMESHDS/SMESHDS_ListIteratorOfListOfPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_ListNodeOfListOfAsciiString.hxx, - SMESHDS/SMESHDS_ListNodeOfListOfAsciiString_0.cxx, - SMESHDS/SMESHDS_ListNodeOfListOfCommand.hxx, - SMESHDS/SMESHDS_ListNodeOfListOfCommand_0.cxx, - SMESHDS/SMESHDS_ListNodeOfListOfPtrHypothesis.hxx, - SMESHDS/SMESHDS_ListOfCommand.hxx, - SMESHDS/SMESHDS_ListOfPtrHypothesis.hxx, - SMESHDS/SMESHDS_ListOfPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_Mesh.cdl, SMESHDS/SMESHDS_Mesh.hxx, - SMESHDS/SMESHDS_Script.cdl, SMESHDS/SMESHDS_Script.cxx, - SMESHDS/SMESHDS_Script.hxx, SMESHDS/SMESHDS_Script.ixx, - SMESHDS/SMESHDS_Script.jxx, SMESHDS/SMESHDS_SubMesh.cdl, - SMESHDS/SMESHDS_SubMesh.cxx, SMESHDS/SMESHDS_SubMesh.hxx, - SMESHDS/SMESHDS_SubMesh.ixx, SMESHDS/SMESHDS_SubMesh.jxx, - SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis.hxx, - SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh.hxx, - SMESHDS/Handle_SMESHDS_Document.hxx, - SMESHDS/Handle_SMESHDS_ListNodeOfListOfAsciiString.hxx, - SMESHDS/Handle_SMESHDS_ListNodeOfListOfPtrHypothesis.hxx, - SMESHDS/Handle_SMESHDS_SubMesh.hxx, SMESHDS/SMESHDS.cdl, - SMESHDS/SMESHDS_Command.hxx, SMESHDS/SMESHDS_CommandType.hxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerMesh.hxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerPtrHypothesis.hxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeListOfPtrHypothesis.hxx, - SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeSubMesh_0.cxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerMesh_0.cxx, - SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis.hxx, - SMESHDS/SMESHDS_DataMapOfShapeListOfPtrHypothesis.hxx, - SMESHDS/SMESHDS_DataMapOfShapeListOfPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_Document.cxx, SMESHDS/SMESHDS_Document.jxx, - SMESHDS/SMESHDS_Hypothesis.cxx, - SMESHDS/SMESHDS_ListIteratorOfListOfAsciiString.hxx, - SMESHDS/SMESHDS_ListIteratorOfListOfPtrHypothesis.hxx, - SMESHDS/SMESHDS_ListNodeOfListOfPtrHypothesis_0.cxx, - SMESHDS/SMESHDS_ListOfAsciiString.hxx, - SMESHDS/SMESHDS_ListOfAsciiString_0.cxx, - SMESHDS/SMESHDS_ListOfCommand_0.cxx, SMESHDS/SMESHDS_Mesh.cxx, - SMESHDS/SMESHDS_Mesh.ixx, SMESHDS/SMESHDS_Mesh.jxx, - SMESHDS/SMESHDS_PtrHypothesis.hxx: NRI : First integration. - -2003-05-19 13:03 Nicolas Rejneri - - * Makefile.in, build_configure, configure.in.base, - resources/ModuleMesh.png, resources/SMESHCatalog.xml, - resources/SMESH_en.xml, resources/SMESH_fr.xml, - resources/delete.png, resources/mesh.png, - resources/mesh_add_sub.png, resources/mesh_algo_hexa.png, - resources/mesh_algo_mefisto.png, resources/mesh_algo_quad.png, - resources/mesh_algo_regular.png, resources/mesh_angle.png, - resources/mesh_area.png, resources/mesh_aspect.png, - resources/mesh_compute.png, resources/mesh_connectivity.png, - resources/mesh_diagonal.png, resources/mesh_edit.png, - resources/mesh_hexa.png, resources/mesh_hexa_n.png, - resources/mesh_hypo_area.png, resources/mesh_hypo_length.png, - resources/mesh_hypo_segment.png, resources/mesh_hypo_volume.png, - resources/mesh_info.png, resources/mesh_init.png, - resources/mesh_length.png, resources/mesh_line.png, - resources/mesh_line_n.png, resources/mesh_move_node.png, - resources/mesh_orientation.png, resources/mesh_pyramid.png, - resources/mesh_pyramid_n.png, resources/mesh_quad.png, - resources/mesh_quad_n.png, resources/mesh_rem_element.png, - resources/mesh_rem_node.png, resources/mesh_set_algo.png, - resources/mesh_set_hypo.png, resources/mesh_shading.png, - resources/mesh_shrink.png, resources/mesh_skew.png, - resources/mesh_taper.png, resources/mesh_tetra.png, - resources/mesh_tetra_n.png, resources/mesh_tree_algo.png, - resources/mesh_tree_algo_hexa.png, - resources/mesh_tree_algo_mefisto.png, - resources/mesh_tree_algo_quad.png, - resources/mesh_tree_algo_regular.png, - resources/mesh_tree_hypo.png, resources/mesh_tree_hypo_area.png, - resources/mesh_tree_hypo_length.png, - resources/mesh_tree_hypo_segment.png, - resources/mesh_tree_hypo_volume.png, - resources/mesh_tree_mesh.png, resources/mesh_tree_mesh_warn.png, - resources/mesh_triangle.png, resources/mesh_triangle_n.png, - resources/mesh_update.png, resources/mesh_vertex.png, - resources/mesh_vertex_n.png, resources/mesh_wireframe.png, - resources/mesh_wrap.png, resources/select1.png, idl/Makefile.in, - idl/SMESH_BasicHypothesis.idl, idl/SMESH_Gen.idl, - idl/SMESH_Hypothesis.idl, idl/SMESH_Mesh.idl, - src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx, - src/DriverDAT/DriverDAT_R_SMDS_Mesh.h, - src/DriverDAT/DriverDAT_R_SMESHDS_Document.cxx, - src/DriverDAT/DriverDAT_R_SMESHDS_Document.h, - src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.cxx, - src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.h, - src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx, - src/DriverDAT/DriverDAT_W_SMDS_Mesh.h, - src/DriverDAT/DriverDAT_W_SMESHDS_Document.cxx, - src/DriverDAT/DriverDAT_W_SMESHDS_Document.h, - src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.cxx, - src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.h, - src/DriverDAT/Makefile.in, - src/DriverMED/DriverMED_R_SMDS_Mesh.cxx, - src/DriverMED/DriverMED_R_SMESHDS_Document.cxx, - src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx, - src/DriverMED/DriverMED_W_SMDS_Mesh.cxx, - src/DriverMED/DriverMED_W_SMESHDS_Document.cxx, - src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx, - src/DriverMED/Makefile.in, - src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx, - src/DriverUNV/DriverUNV_R_SMDS_Mesh.h, - src/DriverUNV/DriverUNV_R_SMESHDS_Document.cxx, - src/DriverUNV/DriverUNV_R_SMESHDS_Document.h, - src/DriverUNV/DriverUNV_R_SMESHDS_Mesh.cxx, - src/DriverUNV/DriverUNV_R_SMESHDS_Mesh.h, - src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx, - src/DriverUNV/DriverUNV_W_SMDS_Mesh.h, - src/DriverUNV/DriverUNV_W_SMESHDS_Document.cxx, - src/DriverUNV/DriverUNV_W_SMESHDS_Document.h, - src/DriverUNV/DriverUNV_W_SMESHDS_Mesh.cxx, - src/DriverUNV/DriverUNV_W_SMESHDS_Mesh.h, - src/DriverUNV/Makefile.in: NRI : First integration. - -2003-03-07 14:55 tag V1 - -2003-03-07 14:55 cvsadmin - - * src/DriverMED/: DriverMED_R_SMESHDS_Document.h, - DriverMED_W_SMESHDS_Document.h: - Initialisation module SMESH_SRC de la base SMESH - -2003-03-07 14:55 cvsadmin - - * src/DriverMED/: DriverMED_R_SMDS_Mesh.cxx, - DriverMED_R_SMDS_Mesh.h, DriverMED_R_SMESHDS_Document.cxx, - DriverMED_R_SMESHDS_Mesh.cxx, DriverMED_R_SMESHDS_Mesh.h, - DriverMED_W_SMDS_Mesh.cxx, DriverMED_W_SMDS_Mesh.h, - DriverMED_W_SMESHDS_Document.cxx, DriverMED_W_SMESHDS_Mesh.cxx, - DriverMED_W_SMESHDS_Mesh.h, Makefile.in: Initial revision - diff --git a/INSTALL b/INSTALL deleted file mode 100644 index 6427893e5..000000000 --- a/INSTALL +++ /dev/null @@ -1,6 +0,0 @@ -This is the version 3.0.0 of SMESH -Compatible with : - - KERNEL 3.0.0 - - SALOMEGUI 3.0.0 - - GEOM 3.0.0 - - MED 3.0.0 diff --git a/LICENCE b/LICENCE deleted file mode 100644 index b1e3f5a26..000000000 --- a/LICENCE +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/Makefile.in b/Makefile.in deleted file mode 100644 index 26c7358b5..000000000 --- a/Makefile.in +++ /dev/null @@ -1,209 +0,0 @@ -# -* Makefile *- -# -# Author : Patrick GOLDBRONN (CEA) -# Date : 28/06/2001 -# $Header$ -# - -# source path -top_srcdir=@top_srcdir@ -top_builddir=. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/bin:@top_srcdir@/resources:./bin:@top_srcdir@/idl - - -@COMMENCE@ - -SUBDIRS = idl src doc - -RESOURCES_FILES = \ -delete.png \ -mesh_add_sub.png \ -mesh_algo_hexa.png \ -mesh_algo_mefisto.png \ -mesh_algo_quad.png \ -mesh_algo_regular.png \ -mesh_algo_tetra.png \ -mesh_angle.png \ -mesh_area.png \ -mesh_aspect.png \ -mesh_aspect_3d.png \ -mesh_compute.png \ -mesh_connectivity.png \ -mesh_diagonal.png \ -mesh_edit.png \ -mesh_hexa_n.png \ -mesh_hexa.png \ -mesh_hypo_area.png \ -mesh_hypo_length.png \ -mesh_hypo_segment.png \ -mesh_hypo_volume.png \ -mesh_hypo_edit.png \ -mesh_info.png \ -advanced_mesh_info.png \ -standard_mesh_info.png \ -mesh_init.png \ -mesh_length.png \ -mesh_length_2d.png \ -mesh_free_edges.png \ -mesh_free_edges_2d.png \ -mesh_multi_edges.png \ -mesh_multi_edges_2d.png \ -mesh_line_n.png \ -mesh_line.png \ -mesh_move_node.png \ -mesh_orientation.png \ -mesh.png \ -mesh_polygon.png \ -mesh_polyhedron.png \ -mesh_pyramid_n.png \ -mesh_pyramid.png \ -mesh_quad_n.png \ -mesh_quad.png \ -mesh_rem_element.png \ -mesh_rem_node.png \ -mesh_set_algo.png \ -mesh_set_hypo.png \ -mesh_shading.png \ -mesh_shrink.png \ -mesh_skew.png \ -mesh_taper.png \ -mesh_tetra_n.png \ -mesh_tetra.png \ -mesh_tree_algo_hexa.png \ -mesh_tree_algo_mefisto.png \ -mesh_tree_algo.png \ -mesh_tree_algo_quad.png \ -mesh_tree_algo_regular.png \ -mesh_tree_algo_tetra.png \ -mesh_tree_hypo_area.png \ -mesh_tree_hypo_length.png \ -mesh_tree_hypo.png \ -mesh_tree_hypo_segment.png \ -mesh_tree_hypo_volume.png \ -mesh_tree_mesh.png \ -mesh_tree_importedmesh.png \ -mesh_tree_mesh_warn.png \ -mesh_triangle_n.png \ -mesh_triangle.png \ -mesh_update.png \ -mesh_vertex_n.png \ -mesh_vertex.png \ -mesh_wireframe.png \ -mesh_points.png \ -mesh_wrap.png \ -mesh_tree_group.png \ -mesh_edit_group.png \ -mesh_make_group.png \ -mesh_union2tri.png \ -mesh_uniontri.png \ -mesh_cutquad.png \ -mesh_smoothing.png \ -mesh_renumbering_nodes.png \ -mesh_renumbering_elements.png \ -mesh_extrusion.png \ -mesh_extrusionpath.png \ -mesh_revolution.png \ -ModuleMesh.png \ -mesh_unionGroups.png \ -mesh_intersectGroups.png \ -mesh_cutGroups.png \ -mesh_deleteGroups.png \ -mesh_translation_vector.png \ -mesh_translation_points.png \ -mesh_rotation.png \ -mesh_symmetry_point.png \ -mesh_symmetry_axis.png \ -mesh_symmetry_plane.png \ -mesh_sew_freeborders.png \ -mesh_sew_conform_freeborders.png \ -mesh_sew_bordertoside.png \ -mesh_sew_sideelements.png \ -mesh_merge_nodes.png \ -mesh_merge_elements.png \ -select1.png \ -SMESH_en.xml \ -SMESH.config \ -StdMeshers.xml \ -SMESHCatalog.xml \ -flight_solid.brep \ -mesh_pattern.png \ -pattern_sample_2d.png \ -pattern_sample_3D.png \ -mesh_add.png \ -mesh_remove.png - -BIN_SCRIPT= \ -VERSION - -# copy header files in common directory -ifeq ($(HAVE_SSTREAM),yes) - include_list=include/salome/SALOMEconfig.h -else - include_list=include/salome/SALOMEconfig.h include/salome/sstream -endif - -inc: idl $(include_list) - -include/salome/SALOMEconfig.h: salome_adm/unix/SALOMEconfig.ref - -$(RM) $@ - $(LN_S) ../../$< $@ - -# test if SALOMEconfig.h has changed (contents) -salome_adm/unix/SALOMEconfig.ref: salome_adm/unix/SALOMEconfig.h - @if ! [ -a $@ ]; then \ - cp -p -f $< $@; \ - fi; \ - if ! cmp $< $@; then \ - cp -p -f $< $@; \ - fi; \ - -include/salome/sstream: salome_adm/unix/sstream - -$(RM) $@ - $(LN_S) ../../$< $@ - -depend: depend_idl - -depend_idl: - (cd idl ; $(MAKE) $@) || exit 1 - -# doc is already build : if you want to had documents, go manually to doc and run 'make doc' -#doc: -# (cd doc && $(MAKE) $@) || exit 1 - -install-end: -# finish libtool install -# @$(LT) --mode=finish $(libdir) - -install-include: $(include_list) - $(INSTALL) -d $(includedir) - @for f in X $(include_list); do \ - if test $$f != X; then \ - ($(INSTALL_DATA) -p $$f $(includedir)/. || exit 1); \ - fi; \ - done - -# install script in $(bindir) : -install-bin: $(BIN_SCRIPT) - $(INSTALL) -d $(bindir) - if test $(BIN_SCRIPT)X != X; then \ - $(INSTALL_PROGRAM) $^ $(bindir); \ - fi - -uninstall: uninstall-idl - -uninstall-idl: - $(RM) $(idldir)/*.idl - -distclean: distclean-other - -distclean-other: - -$(RM) salome_adm/unix/*~ salome_adm/unix/*% salome_adm/unix/*.bak salome_adm/unix/*.new salome_adm/unix/*.old - -$(RM) salome_adm/unix/make_* - -$(RM) salome_adm/unix/depend salome_adm/unix/SALOMEconfig.h - -$(RM) config.cache config.log config.status - -@MODULE@ - -install: install-bin install-include install-end - diff --git a/adm_local/unix/config_files/check_Geom.m4 b/adm_local/unix/config_files/check_Geom.m4 deleted file mode 100644 index 13f3be40c..000000000 --- a/adm_local/unix/config_files/check_Geom.m4 +++ /dev/null @@ -1,45 +0,0 @@ -# Check availability of Geom binary distribution -# -# Author : Nicolas REJNERI (OPEN CASCADE, 2003) -# - -AC_DEFUN([CHECK_GEOM],[ - -AC_CHECKING(for Geom) - -Geom_ok=no - -AC_ARG_WITH(geom, - [ --with-geom=DIR root directory path of GEOM installation ], - GEOM_DIR="$withval",GEOM_DIR="") - -if test "x$GEOM_DIR" == "x" ; then - -# no --with-geom-dir option used - - if test "x$GEOM_ROOT_DIR" != "x" ; then - - # GEOM_ROOT_DIR environment variable defined - GEOM_DIR=$GEOM_ROOT_DIR - - fi -# -fi - -if test -f ${GEOM_DIR}/lib/salome/libGEOMClient.so ; then - Geom_ok=yes - AC_MSG_RESULT(Using Geom module distribution in ${GEOM_DIR}) - - if test "x$GEOM_ROOT_DIR" == "x" ; then - GEOM_ROOT_DIR=${GEOM_DIR} - fi - AC_SUBST(GEOM_ROOT_DIR) - -else - AC_MSG_WARN("Cannot find compiled Geom module distribution") -fi - -AC_MSG_RESULT(for Geom: $Geom_ok) - -])dnl - diff --git a/adm_local/unix/config_files/check_Med.m4 b/adm_local/unix/config_files/check_Med.m4 deleted file mode 100644 index 727bf4381..000000000 --- a/adm_local/unix/config_files/check_Med.m4 +++ /dev/null @@ -1,45 +0,0 @@ -# Check availability of Med binary distribution -# -# Author : Nicolas REJNERI (OPEN CASCADE, 2003) -# - -AC_DEFUN([CHECK_MED],[ - -AC_CHECKING(for Med) - -Med_ok=no - -AC_ARG_WITH(med, - [ --with-med=DIR root directory path of MED installation ], - MED_DIR="$withval",MED_DIR="") - -if test "x$MED_DIR" == "x" ; then - -# no --with-med-dir option used - - if test "x$MED_ROOT_DIR" != "x" ; then - - # MED_ROOT_DIR environment variable defined - MED_DIR=$MED_ROOT_DIR - - fi -# -fi - -if test -f ${MED_DIR}/idl/salome/MED.idl ; then - Med_ok=yes - AC_MSG_RESULT(Using Med module distribution in ${MED_DIR}) - - if test "x$MED_ROOT_DIR" == "x" ; then - MED_ROOT_DIR=${MED_DIR} - fi - AC_SUBST(MED_ROOT_DIR) - -else - AC_MSG_WARN("Cannot find Med module sources") -fi - -AC_MSG_RESULT(for Med: $Med_ok) - -])dnl - diff --git a/adm_local/unix/make_commence.in b/adm_local/unix/make_commence.in deleted file mode 100644 index e7e10c9a5..000000000 --- a/adm_local/unix/make_commence.in +++ /dev/null @@ -1,252 +0,0 @@ -# common directories to put headerfiles -inc_builddir=$(top_builddir)/include/salome - -@SET_MAKE@ -SHELL=/bin/sh - -# header missing - -HAVE_SSTREAM=@HAVE_SSTREAM@ - - -LIBS=@LIBS@ -LIBSFORBIN=@LIBS@ -LDFLAGS=@LDFLAGS@ -L$(top_builddir)/lib/salome -Xlinker -rpath-link -Xlinker $(top_builddir)/lib/salome -LDFLAGSFORBIN=@LDFLAGS@ -L$(top_builddir)/lib/salome -Xlinker -rpath-link -Xlinker $(top_builddir)/lib/salome -# add libstdc++ to link c++ library with libtool ! -LDFLAGS+= -lstdc++ -LDFLAGSFORBIN+= -lstdc++ - -CP=@CP@ - -# CPP - -CPP=@CPP@ -CXXCPP=@CXXCPP@ -CPPFLAGS=@CPPFLAGS@ -I$(inc_builddir) -I$(srcdir) -I. - -# C - -CC = @CC@ -CFLAGS = @CFLAGS@ -C_DEPEND_FLAG = @C_DEPEND_FLAG@ - -# C++ - -CXX = @CXX@ -CXXFLAGS = @CXXFLAGS@ -CXX_DEPEND_FLAG = @CXX_DEPEND_FLAG@ - -# BOOST Library - -BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ - -# JAVA - -JAVA_INCLUDES = @JAVA_INCLUDES@ -JAVA_LIBS = @JAVA_LIBS@ -JAVA_LDPATH = @JAVA_LDPATH@ - -# PYTHON - -PYTHON = @PYTHON@ -PYTHONHOME = @PYTHONHOME@ -PYTHON_INCLUDES = @PYTHON_INCLUDES@ -PYTHON_LIBS = @PYTHON_LIBS@ -PYTHON_VERSION = @PYTHON_VERSION@ -PYTHON_SITE = @PYTHON_SITE@ -PYTHON_SITE_INSTALL = @PYTHON_SITE_INSTALL@ - -# QT - -QT_ROOT = @QT_ROOT@ -QT_INCLUDES = @QT_INCLUDES@ -QT_MT_INCLUDES = @QT_INCLUDES@ -DQT_THREAD_SUPPORT -QT_LIBS = @QT_LIBS@ -QT_MT_LIBS = @QT_MT_LIBS@ - -MOC = @MOC@ -UIC = @UIC@ -MSG2QM = @MSG2QM@ - -#QWT - -QWT_INCLUDES=@QWT_INCLUDES@ -QWT_LIBS=@QWT_LIBS@ - -# SIP -SIP = @SIP@ -SIP_INCLUDES = @SIP_INCLUDES@ -SIP_LIBS = @SIP_LIBS@ - -# PYQT -PYQT_SIPS = @PYQT_SIPS@ -PYQT_LIBS = @PYQT_LIBS@ - -# openGL -OGL_INCLUDES=@OGL_INCLUDES@ -OGL_LIBS=@OGL_LIBS@ - -# VTK -VTK_INCLUDES=@VTK_INCLUDES@ -VTK_LIBS=@VTK_LIBS@ - -# HDF5 - -HDF5_INCLUDES=@HDF5_INCLUDES@ -HDF5_LIBS=@HDF5_LIBS@ -HDF5_MT_LIBS=@HDF5_MT_LIBS@ - -# OpenCasCade - -OCC_INCLUDES=@CAS_CPPFLAGS@ -OCC_CXXFLAGS=@CAS_CXXFLAGS@ - -OCC_KERNEL_LIBS=@CAS_KERNEL@ -OCC_OCAF_LIBS=@CAS_OCAF@ -OCC_VIEWER_LIBS=@CAS_VIEWER@ -OCC_MODELER_LIBS=@CAS_MODELER@ -OCC_DATAEXCHANGE_LIBS=@CAS_DATAEXCHANGE@ -OCC_LIBS=@CAS_LDFLAGS@ - -# MPICH - -MPICH_INCLUDES=@MPICH_INCLUDES@ -MPICH_LIBS=@MPICH_LIBS@ - -# Swig C++ Python - -SWIG = @SWIG@ -SWIG_FLAGS = @SWIG_FLAGS@ -I$(inc_builddir) -I$(srcdir) -I. - -# OMNIORB - -OMNIORB_ROOT = @OMNIORB_ROOT@ -OMNIORB_INCLUDES = @OMNIORB_INCLUDES@ -OMNIORB_LIBS = @OMNIORB_LIBS@ -OMNIORB_CXXFLAGS = @OMNIORB_CXXFLAGS@ - -OMNIORB_IDL = @OMNIORB_IDL@ -OMNIORB_IDLCXXFLAGS = @OMNIORB_IDLCXXFLAGS@ -OMNIORB_IDLPYFLAGS = @OMNIORB_IDLPYFLAGS@ -I$(top_srcdir)/idl -I$(top_builddir)/idl/salome \ - -I$(KERNEL_ROOT_DIR)/idl/salome -I$(GEOM_ROOT_DIR)/idl/salome -I$(MED_ROOT_DIR)/idl/salome - -OMNIORB_IDL_CLN_H = @OMNIORB_IDL_CLN_H@ -OMNIORB_IDL_CLN_CXX = @OMNIORB_IDL_CLN_CXX@ -OMNIORB_IDL_CLN_OBJ = @OMNIORB_IDL_CLN_OBJ@ - -OMNIORB_IDL_SRV_H = @OMNIORB_IDL_SRV_H@ -OMNIORB_IDL_SRV_CXX = @OMNIORB_IDL_SRV_CXX@ -OMNIORB_IDL_SRV_OBJ = @OMNIORB_IDL_SRV_OBJ@ - -# Default ORB - -CORBA_ROOT = @CORBA_ROOT@ -CORBA_INCLUDES = @CORBA_INCLUDES@ -CORBA_LIBS = @CORBA_LIBS@ -CORBA_CXXFLAGS = @CORBA_CXXFLAGS@ - -IDLCXXFLAGS = -bcxx @IDLCXXFLAGS@ -I$(top_srcdir)/idl -I$(top_builddir)/idl/salome \ - -I$(KERNEL_ROOT_DIR)/idl/salome -I$(GEOM_ROOT_DIR)/idl/salome -I$(MED_ROOT_DIR)/idl/salome -IDLPYFLAGS = @IDLPYFLAGS@ - -IDL = @IDL@ - -IDL_CLN_H = @IDL_CLN_H@ -IDL_CLN_CXX = @IDL_CLN_CXX@ -IDL_CLN_OBJ = @IDL_CLN_OBJ@ - -IDL_SRV_H = @IDL_SRV_H@ -IDL_SRV_CXX = @IDL_SRV_CXX@ -IDL_SRV_OBJ = @IDL_SRV_OBJ@ - -CPPFLAGS+= $(CORBA_INCLUDES) -CXXFLAGS+= $(CORBA_CXXFLAGS) - -# add corba libs when link salome application ! -#LDFLAGS+= $(CORBA_LIBS) -LIBS+=$(CORBA_LIBS) - -## Shared libraries -LT_STATIC_EXEC=@LT_STATIC_EXEC@ -DYNAMIC_DIRS=@DYNAMIC_DIRS@ -LT_LIB=libtool -LT=$(top_builddir)/libtool -LT_COMPILE=$(LT) --mode=compile $(CC) -LT_LINK_LIB=$(LT_LIB) --mode=link $(CC) -rpath $(libdir) -LT_LINK_EXE=$(LT) --mode=link $(CC) $(LT_STATIC_EXEC) -dlopen self -rpath $(bindir) $(DYNAMIC_DIRS) -LT_RUN=$(LT) --mode=execute -LT_INSTALL_PROG=$(LT) --mode=install $(INSTALL_PROGRAM) -LT_INSTALL_LIB=$(LT) --mode=install $(INSTALL_DATA) -LT_UNINSTALL=$(LT) --mode=uninstall $(RM) - -INSTALL=@INSTALL@ -INSTALL_PROGRAM=@INSTALL_PROGRAM@ -INSTALL_DATA=@INSTALL_DATA@ - -# create a symbolic link (or a copie ?) -LN_S=@LN_S@ - -## Installation points -prefix=@prefix@ -exec_prefix=@exec_prefix@ -bindir=@bindir@/salome -libdir=@libdir@/salome -# warning : if user give this path in configure we could have salome/salome :-( -includedir=@includedir@/salome -datadir=@datadir@/salome -idldir=$(prefix)/idl/salome -sharedpydir=@libdir@/python$(PYTHON_VERSION)/site-packages/salome/shared_modules - -docdir=${prefix}/doc/salome - -# -# begin of package rules -# - -.PHONY: all lib bin inc resources docs tests install uninstall dep depend depend_idl cleandep mostlyclean clean distclean - -.SUFFIXES: .cxx .cc .c .f .o .lo .idl .py .i .ui .po .qm - -all: - $(MAKE) inc - $(MAKE) depend_idl - $(MAKE) depend - $(MAKE) lib - $(MAKE) bin - $(MAKE) resources - -# -# add target to build administrative files -# - -Makefile: $(top_builddir)/config.status $(srcdir)/Makefile.in - cd $(top_builddir) ; ./config.status - -$(top_builddir)/config.status: $(top_srcdir)/configure - cd $(top_builddir) ; ./config.status --recheck - -# VPATH contain $(srcdir), so make configure is good in top_srcdir and we must add target configure otherwise :-) -ifneq ($(top_srcdir),$(srcdir)) -configure: $(top_srcdir)/configure -endif - -$(top_srcdir)/configure: $(top_srcdir)/configure.in $(top_srcdir)/aclocal.m4 - cd $(top_srcdir) ; autoconf - -$(top_srcdir)/configure.in: $(top_srcdir)/configure.in.base - cd $(top_srcdir) && ./build_configure - - -ACLOCAL_SRC = \ -ac_cxx_bool.m4 check_corba.m4 check_vtk.m4 \ -ac_cxx_depend_flag.m4 check_hdf5.m4 enable_pthreads.m4 \ -ac_cxx_mutable.m4 check_mico.m4 libtool.m4 \ -ac_cxx_namespaces.m4 check_omniorb.m4 pyembed.m4 \ -ac_cxx_partial_specialization.m4 check_opengl.m4 python.m4 \ -ac_cxx_typename.m4 check_pthreads.m4 check_cas.m4 \ -ac_cc_warnings.m4 check_qt.m4 check_boost.m4 \ -check_swig.m4 - -$(top_srcdir)/aclocal.m4: $(ACLOCAL_SRC:%=@KERNEL_ROOT_DIR@/salome_adm/unix/config_files/%) - cd $(top_srcdir) ; aclocal --acdir=adm_local/unix/config_files -I @KERNEL_ROOT_DIR@/salome_adm/unix/config_files diff --git a/adm_local/unix/make_conclude.in b/adm_local/unix/make_conclude.in deleted file mode 100644 index f4827fd31..000000000 --- a/adm_local/unix/make_conclude.in +++ /dev/null @@ -1,342 +0,0 @@ -#======================================================================= -# This section of this makefile comes from the file -# 'adm/unix/make_conclude' which was generated with config.status -# from file adm/unix/make_conclude.in -#======================================================================= -# -* Makefile *- -# -# Authors : Patrick GOLDBRONN (CEA) - Marc Tajchman (CEA) -# Date : 6/07/2001 -# $Header$ -# - -# ORB Specifics rules -@CORBA@ - -# transform idl reference in appropriate obj file -LIB_CLIENT_SRC = $(LIB_CLIENT_IDL:%.idl=%$(IDL_CLN_CXX)) -LIB_SERVER_SRC = $(LIB_SERVER_IDL:%.idl=%$(IDL_SRV_CXX)) -LIB_MOC_SRC = $(LIB_MOC:%.h=%_moc.cxx) -LIB_SRC+=$(LIB_MOC_SRC) -LIB_SWIG_SRC = $(SWIG_DEF:%.i=%_wrap.cxx) -LIB_DEP= $(LIB_SRC) $(LIB_CLIENT_SRC) $(LIB_SERVER_SRC) $(LIB_SWIG_SRC) - -LIB_CLIENT_OBJ = $(LIB_CLIENT_IDL:%.idl=%$(IDL_CLN_OBJ)) -LIB_SERVER_OBJ = $(LIB_SERVER_IDL:%.idl=%$(IDL_SRV_OBJ)) - - -# transform c file in appropriate libtool obj file (.c, .cc and .cxx) -LIB_OBJ_C = $(patsubst %.c, %.lo, $(filter %.c, $(LIB_SRC))) -LIB_OBJ_CC = $(patsubst %.cc, %.lo, $(filter %.cc, $(LIB_SRC))) -LIB_OBJ_CXX = $(patsubst %.cxx, %.lo, $(filter %.cxx, $(LIB_SRC))) -LIB_SWIG_OBJ = $(LIB_SWIG_SRC:%.cxx=%.lo) -LIB_OBJ_F = $(patsubst %.f, %.lo, $(filter %.f, $(LIB_SRC))) - -# all libtool obj file in library -LIB_OBJ = $(LIB_OBJ_CXX) $(LIB_OBJ_CC) $(LIB_OBJ_C) $(LIB_CLIENT_OBJ:%.o=%.lo) $(LIB_SERVER_OBJ:%.o=%.lo) $(LIB_SWIG_OBJ) $(LIB_OBJ_F) - -# LIB_BUILD = $(LIB:%.la=$(top_builddir)/lib/salome/%.la) -LIB_BUILD = $(patsubst %.la, $(top_builddir)/lib/salome/%.la, $(filter %.la, $(LIB))) -LIB_BUILD_A = $(patsubst %.a, $(top_builddir)/lib/salome/%.a, $(filter %.a, $(LIB))) - -ifneq ($(findstring cmodule.la,$(filter %.la, $(LIB))),) -LIB_SWIG = $(patsubst %cmodule.la,%.so, $(filter %.la, $(LIB))) -else -LIB_SWIG = -endif - -lib: $(LIB_BUILD) $(LIB_CLIENT_PY) -# we don't build static library ! - -$(LIB_BUILD): $(top_builddir)/lib/salome/%.la: %.la - -$(RM) $@ - -$(RM) $(patsubst %.la, %.so, $@) - -$(RM) $(patsubst %.la, %.a, $@) - ln -sf $(CURDIR)/$< $@ || true - ln -sf $(patsubst %.la, %.so, $(CURDIR)/.libs/$<) \ - $(patsubst %.la, %.so, $@) || true - ln -sf $(patsubst %.la, %.so, $(CURDIR)/.libs/$<).0 \ - $(patsubst %.la, %.so, $@).0 || true - - if ! test -z $(LIB_SWIG) ; then \ - ln -sf $(patsubst %.la,%.so, $(CURDIR)/.libs/$<) $(top_builddir)/lib/salome/_$(LIB_SWIG) || true;\ - fi; - -$(LIB_BUILD_A): $(top_builddir)/lib/salome/%.a: %.a - -$(RM) $@ - ln -sf $(CURDIR)/$< $@ || true - -$(LIB): $(LIB_OBJ) - @$(LT) --mode=link $(CXX) -rpath $(libdir) -o $@ $(CXXFLAGS) $(LIB_OBJ) $(LDFLAGS) $(LIBS) - -# transform idl reference in appropriate obj file -BIN_CLIENT_SRC = $(BIN_CLIENT_IDL:%.idl=%$(IDL_CLN_CXX)) -BIN_SERVER_SRC = $(BIN_SERVER_IDL:%.idl=%$(IDL_SRV_CXX)) -BIN_MOC_SRC = $(BIN_MOC:%.h=%_moc.cxx) -BIN_SRC+=$(BIN_MOC_SRC) -BIN_DEP=$(BIN:%=%.cxx) $(BIN_SRC) $(BIN_CLIENT_SRC) $(BIN_SERVER_SRC) - -BIN_CLIENT_OBJ = $(BIN_CLIENT_IDL:%.idl=%$(IDL_CLN_OBJ)) -BIN_SERVER_OBJ = $(BIN_SERVER_IDL:%.idl=%$(IDL_SRV_OBJ)) -# transform c file in appropriate libtool obj file (.c) -BIN_OBJ_C = $(patsubst %.c, %.o, $(filter %.c, $(BIN_SRC))) -# transform c++ file in appropriate libtool obj file (.cc and .cxx) -BIN_OBJ_CC = $(patsubst %.cc, %.o, $(filter %.cc, $(BIN_SRC))) -BIN_OBJ_CXX = $(patsubst %.cxx, %.o, $(filter %.cxx, $(BIN_SRC))) -# all obj file in bin target -BIN_OBJ = $(BIN_OBJ_CC) $(BIN_OBJ_CXX) $(BIN_OBJ_C) $(BIN_CLIENT_OBJ) $(BIN_SERVER_OBJ) - -bin: $(BIN:%=$(top_builddir)/bin/salome/%) $(BIN) $(LIB) pyscripts sharedpyscripts - -BIN_LIB=$(LIB:lib%.la=-l%) - -$(BIN:%=$(top_builddir)/bin/salome/%) $(TEST_PROGS:%=$(top_builddir)/bin/salome/%): $(top_builddir)/bin/salome/%: % - -$(RM) $@ - ln -sf $(CURDIR)/$< $@ - -$(BIN) $(TEST_PROGS): %: %.lo $(BIN_OBJ) - $(CXX) $(CXXFLAGS) -o $@ $^ $(BIN_LIB) $(LDFLAGSFORBIN) $(LIBSFORBIN) - -# copy python scripts in $(top_builddir)/bin/salome -# -DEST_PYSCRIPTS = $(EXPORT_PYSCRIPTS:%=$(top_builddir)/bin/salome/%) -pyscripts: $(DEST_PYSCRIPTS) -$(DEST_PYSCRIPTS): $(top_builddir)/bin/salome/%: % - cp -f $< $@ - -# copy pyqt files in $(PYTHON_SHARED_SITE) -# -PYTHON_SHARED_SITE=$(top_builddir)/lib/python$(PYTHON_VERSION)/site-packages/salome/shared_modules - -$(PYTHON_SHARED_SITE): - $(INSTALL) -d $@ - -DEST_SHAREDPYSCRIPTS = $(EXPORT_SHAREDPYSCRIPTS:%=$(PYTHON_SHARED_SITE)/%) -sharedpyscripts: $(PYTHON_SHARED_SITE) $(DEST_SHAREDPYSCRIPTS) -$(DEST_SHAREDPYSCRIPTS): $(PYTHON_SHARED_SITE)/%: % - cp -f $< $@ - -check: test - -tests: test - -test: $(LIB) $(TEST_PROGS:%=$(top_builddir)/bin/salome/%) - - -# copy header file in $(inc_builddir) -# -DEST_HEADERS = $(EXPORT_HEADERS:%=$(inc_builddir)/%) -inc: $(DEST_HEADERS) -$(DEST_HEADERS): $(inc_builddir)/%: % - cp -f $< $@ - -# build resources file (icons and messages) : .qm file from .po file -resources: $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/%.qm) - -# Make installation directories if they don't exist. -$(libdir) $(includedir) $(bindir) $(datadir) $(idldir) $(sharedpydir): - $(INSTALL) -d $@ && chmod 755 $@ - -# Install the library, the public header files, and programs. -install: $(LIB) $(BIN) $(TEST_PROGS) $(libdir) $(includedir) $(bindir) $(datadir) $(idldir) install-python install-sharedpyqt install-qm - @for f in X $(LIB); do \ - if test $$f != X; then \ - ($(LT_INSTALL_LIB) $$f $(libdir)/. || exit 1); \ - fi; \ - done - @if ! test -z $(LIB_SWIG) ; then \ - (cd $(libdir); ln -sf $(patsubst %.so, %cmodule.so, $(LIB_SWIG)) _$(LIB_SWIG) || true); \ - fi; - @for f in X $(BIN); do \ - if test $$f != X; then \ - ($(LT_INSTALL_PROG) $$f $(bindir)/. || exit 1); \ - fi; \ - done -# Install tests programmes in bindir - @for f in X $(TEST_PROGS); do \ - if test $$f != X; then \ - ($(LT_INSTALL_PROG) $$f $(bindir)/. || exit 1); \ - fi; \ - done -# Install exported includes in includedir - @for f in X $(EXPORT_HEADERS:%=$(srcdir)/%); do \ - if test $$f != X; then \ - (cp -p -f $$f $(includedir) || exit 1); \ - fi; \ - done - -# Install python script in $(bindir) -install-python: $(bindir) $(EXPORT_PYSCRIPTS:%=install-%) - -$(EXPORT_PYSCRIPTS:%=install-%): install-%: % - $(INSTALL_PROGRAM) $< $(bindir)/. - -#install-python: $(bindir) $(EXPORT_PYSCRIPTS) -# @for f in X $(EXPORT_PYSCRIPTS); do \ -# if test $$f != X; then \ -# ($(INSTALL_PROGRAM) $$f $(bindir)/. || exit 1); \ -# fi; \ -# done - -# Install pyqt script in $(install-sharedpyqt) -install-sharedpyqt: $(sharedpydir) $(EXPORT_SHAREDPYSCRIPTS:%=install-%) - -$(EXPORT_SHAREDPYSCRIPTS:%=install-%): install-%: % - $(INSTALL_PROGRAM) $< $(sharedpydir)/. - - -# generic rule to install .qm files : -install-qm: resources - $(INSTALL) -d $(datadir)/resources - @for f in X $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/%.qm); do \ - if test $$f != X; then \ - ($(INSTALL_DATA) $$f $(datadir)/resources/. || exit 1); \ - fi; \ - done - -# Removes those things that `make install' (would have) installed. -uninstall: - @if test "X$(LIB)" != X; then \ - for f in $(LIB); do \ - $(LT_UNINSTALL) $(libdir)/$$f; \ - done; \ - fi - @if test "X$(BIN)" != X; then \ - for f in $(BIN); do \ - $(LT_UNINSTALL) $(bindir)/$$f; \ - done; \ - fi - @for f in X $(TEST_PROGS); do \ - if test $$f != X; then \ - $(LT_UNINSTALL) $(bindir)/$$f; \ - fi; \ - done -# Uninstall exported includes in includedir - @for f in X $(EXPORT_HEADERS); do \ - if test $$f != X; then \ - $(LT_UNINSTALL) $(includedir)/$$f; \ - fi; \ - done -# Uninstall python script in $(bindir) - @for f in X $(EXPORT_PYSCRIPTS); do \ - if test $$f != X; then \ - $(LT_UNINSTALL) $(bindir)/$$f ; \ - fi; \ - done - -# Uninstall pyqt script in $(sharedpydir) - @for f in X $(EXPORT_SHAREDPYSCRIPTS); do \ - if test $$f != X; then \ - $(LT_UNINSTALL) $(sharedpydir)/$$f ; \ - fi; \ - done - -# Uninstall qm files - @for f in X $(PO_FILES:%.po=%.qm); do \ - if test $$f != X; then \ - $(LT_UNINSTALL) $(datadir)/resources/$$f ; \ - fi; \ - done - -# remove all dependencies files -# -cleandep: - -$(RM) .dep* - -# Removes temporary files without removing the final target files. That is, -# remove things like object files but not libraries or executables. -# -mostlyclean: cleandep - -$(RM) $(LIB_OBJ) $(LIB_OBJ:.lo=.o) - -$(RM) $(BIN_OBJ) $(BIN:%=%.o) - -$(RM) $(TEST_OBJ) $(TEST_OBJ:.lo=.o) - -$(RM) $(PROG_OBJ) $(PROG_OBJ:.lo=.o) $(MOSTLYCLEAN) - -# Like `mostlyclean' except it also removes the final targets: things like -# libraries and executables. This target doesn't remove any file that -# is part of the SALOME distribution. -# -clean: mostlyclean - -$(RM) $(LIB) $(TEST_PROGS) $(BIN) $(CLEAN) - -$(RM) TAGS *~ *# core *.core - -$(RM) -r .libs - -$(RM) $(top_builddir)/lib/salome/$(LIB) - -$(RM) $(patsubst %,$(top_builddir)/bin/salome/%, $(BIN)) - -$(RM) $(patsubst %.la, %.so, $(top_builddir)/lib/salome/$(LIB)) - -$(RM) $(patsubst %.la, %.a, $(top_builddir)/lib/salome/$(LIB)) -# remove idl generated files (sources) - -$(RM) $(LIB_CLIENT_SRC) $(LIB_SERVER_SRC) $(BIN_CLIENT_SRC) $(BIN_SERVER_SRC) -# remove idl generated files (headers) - -$(RM) $(LIB_CLIENT_IDL:%.idl=%$(IDL_CLN_H)) $(LIB_SERVER_IDL:%.idl=%$(IDL_SRV_H)) - -$(RM) $(BIN_CLIENT_IDL:%.idl=%$(IDL_CLN_H)) $(BIN_SERVER_IDL:%.idl=%$(IDL_SRV_H)) - -$(RM) $(LIB_MOC_SRC) $(BIN_MOC_SRC) - -$(RM) $(LIB_SWIG_SRC) - -# Like `clean' except it also removes files that were created by running -# configure. If you've unpacked the source and built without creating -# any other files, then `make distclean' will leave only the files that were -# in the distribution. -# -distclean: clean - #remove qm file ! - -$(RM) $(PO_FILES:%.po=%.qm) $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/%.qm) - #remove include files - -$(RM) $(DEST_HEADERS) - -$(RM) $(DISTCLEAN) *.bak *.old *.new .dep* - @if test -f $(srcdir)/Makefile.in; then \ - (@SETX@; $(RM) Makefile); \ - fi - - -#implicits rules -.cc.o: - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< - -.cc.lo: - $(LT) --mode=compile $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< - -.cxx.o: - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< - -.cxx.lo: - $(LT) --mode=compile $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< - -.c.o: - $(CC) $(CFLAGS) $(CPPFLAGS) -c $< - -.c.lo: - $(LT_COMPILE) $(CFLAGS) $(CPPFLAGS) -c $< - -.f.o: - $(FC) $(FFLAGS) -c $< -o $@ - -.f.lo: - $(LT) --mode=compile $(FC) $(FFLAGS) -c $< - -.ui.h: - $(UIC) -o $@ $< - -.ui.cxx: - $(UIC) -o $@ -i $*.h $< - -#pattern rules -%_moc.cxx : %.h - $(MOC) $< -o $@ - -%_wrap.cxx : %.i - $(SWIG) $(SWIG_FLAGS) -o $@ $< - -$(top_builddir)/share/salome/resources/%.qm: %.po - $(MSG2QM) $< $@ ; \ - -#------------------------------------------------------------------------------ -# The following section of this makefile contains dependencies between the -# source files and the header files. If GNU make and GCC are being used then -# the dependencies are in the form of rules that cause the information to -# be kept updated automatically. Otherwise the dependencies are listed -# explicitly and come from the `.distdep' files in the various directories. -# These files are part of the distribution and are generated automatically on -# GNU/GCC systems. -#------------------------------------------------------------------------------ - -@DEPEND@ diff --git a/adm_local/unix/make_omniorb.in b/adm_local/unix/make_omniorb.in deleted file mode 100644 index 1299082fa..000000000 --- a/adm_local/unix/make_omniorb.in +++ /dev/null @@ -1,59 +0,0 @@ -#======================================================================= -# Begin specific part to omniorb -# (include from file adm/unix/make_omniorb generated by -# adm/unix/make_omniorb.in) -#======================================================================= -# -* Makefile *- -# -# Author : Patrick GOLDBRONN (CEA) -# Date : 29/06/2001 -# $Header$ -# - -# Client and server object are the same with omniorb -# There are one header file and one source file generate - -#IDLOBJ=$(IDLSRC:%.idl=%$(IDL_CLN_OBJ)) - -# dependancies between idl and it's generated files -%$(OMNIORB_IDL_CLN_CXX) %$(OMNIORB_IDL_CLN_H): ${KERNEL_ROOT_DIR}/idl/salome/%.idl - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< - -%$(OMNIORB_IDL_CLN_CXX) %$(OMNIORB_IDL_CLN_H): ${GEOM_ROOT_DIR}/idl/salome/%.idl - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< - -%$(OMNIORB_IDL_CLN_CXX) %$(OMNIORB_IDL_CLN_H): ${MED_ROOT_DIR}/idl/salome/%.idl - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< - -%$(OMNIORB_IDL_CLN_CXX) %$(OMNIORB_IDL_CLN_H): ${top_srcdir}/idl/%.idl - $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< - -# dependncies between idl files -depend_idl: .depidl - -# we use cpp to generate dependencies between idl files. -# we change cpp output to keep only idl file and transform it to get a suitable rule -.depidl: $(IDL_FILES) - @touch $@ - @for dep in $? dummy; do \ - if [ $$dep != "dummy" ]; then \ - echo Building dependencies for $$dep; \ - basedep=`basename $$dep .idl`; \ - header="$$basedep"$(IDL_CLN_H); \ - sed '\%^'"$$header"':%,\%[^\\]$$%d' <$@ >$@- && mv $@- $@; \ - $(CPP) $(C_DEPEND_FLAG) -I$(srcdir) $$dep 2>/dev/null | \ - sed `echo "s%$$basedep\\.idl%$$header:%g"` | \ - sed 's% $(srcdir)/% %g' | \ - sed 's% $(top_srcdir)/% %g' | \ - sed 's% $(top_builddir)/% %g' | \ - sed 's%^.*:\.o: *%%' | sed 's%^ *\\ *%%'| sed 's%^ *\(.*\):%\1:%' | \ - sed 's/\.idl/$(IDL_CLN_H)/' >>$@; \ - echo '' >>$@; \ - fi; \ - done ; - --include .depidl - -#======================================================================= -# End specific part to omniorb -#======================================================================= diff --git a/bin/VERSION b/bin/VERSION deleted file mode 100755 index 2b1989d5b..000000000 --- a/bin/VERSION +++ /dev/null @@ -1,2 +0,0 @@ -THIS IS SALOME - SMESH VERSION: 3.0.1 - diff --git a/build_configure b/build_configure deleted file mode 100755 index a0dda39dc..000000000 --- a/build_configure +++ /dev/null @@ -1,216 +0,0 @@ -#!/bin/bash - -# -# Tool for updating list of .in file for the SALOME project -# and regenerating configure script -# -# Author : Marc Tajchman - CEA -# Date : 10/10/2002 -# $Header$ -# - -ORIG_DIR=`pwd` -CONF_DIR=`echo $0 | sed -e "s,[^/]*$,,;s,/$,,;s,^$,.,"` - -######################################################################## -# Test if the KERNEL_ROOT_DIR is set correctly - -if test ! -d "${KERNEL_ROOT_DIR}"; then - echo "failed : KERNEL_ROOT_DIR variable is not correct !" - exit -fi - -# Test if the KERNEL_SRC is set correctly - -#if test ! -d "${KERNEL_SRC}"; then -# echo "failed : KERNEL_SRC variable is not correct !" -# exit -#fi -######################################################################## -# find_in - utility function -# -# usage : -# find_in directory filename -# -# Finds files following the *.in pattern, recursively in the -# directory (first argument). -# Results are appended into the file (second argument) -# -# Difference from the standard unix find is that files are tested -# before directories -# - -find_in() -{ - local i - local f=$2 - -# if the first argument is not a directory, returns - - if [ ! -d "$1" ] ; then - return - fi - -# dont look in the CVS directories - - case $1 in - */CVS) return ;; - */adm_local/*) return ;; - *) ;; - esac - -# for each regular file contained in the directory -# test if it's a .in file - - for i in "$1"/* - do - if [ -f "$i" ] ; then - case $i in - *.in) echo " "$i" \\" >> $f;; - *) ;; - esac - fi - done - -# for each subdirectory of the first argument, proceeds recursively - - for i in "$1"/* - do - if [ -d "$i" ] ; then - find_in "$i" "$f" - fi - done -} - - -####################################################################### -# Generate list of .in files (Makefile.in, config.h.in, etc) -# appending it in file configure.in - -cd ${CONF_DIR} -ABS_CONF_DIR=`pwd` - -# -# Common part of the configure.in file -# -chmod u+w configure.in.base -if ! \cp -f configure.in.base configure.in_tmp1 -then - echo - echo "error : can't create files in" ${CONF_DIR} - echo "aborting ..." - chmod u-w configure.in.base - exit -fi -chmod u-w configure.in.base - -if [ -e "${CONF_DIR}/salome_adm" ] ; then - \rm -f ${CONF_DIR}/salome_adm -fi - -# make a link allowing AC_OUTPUT to find the salome_adm/.../*.in files -echo "" >> configure.in_tmp1 -echo 'ln -fs ${KERNEL_ROOT_DIR}/salome_adm ${ROOT_SRCDIR}/salome_adm' >> configure.in_tmp1 - -echo "" >> configure.in_tmp1 -echo "AC_OUTPUT([ \\" >> configure.in_tmp1 - -# -# List of .in files in the adm/unix directory -# These files MUST be on top of AC_OUTPUT list so we -# put them "manually" -# - -echo " ./salome_adm/unix/SALOMEconfig.h \\" >> configure.in_tmp1 -echo " ./salome_adm/unix/F77config.h \\" >> configure.in_tmp1 -echo " ./salome_adm/unix/sstream \\" >> configure.in_tmp1 -echo " ./salome_adm/unix/depend \\" >> configure.in_tmp1 -echo " ./adm_local/unix/make_omniorb \\" >> configure.in_tmp1 -echo " ./salome_adm/unix/envScript \\" >> configure.in_tmp1 -echo " ./adm_local/unix/make_commence \\" >> configure.in_tmp1 -echo " ./adm_local/unix/make_conclude \\" >> configure.in_tmp1 -echo " ./salome_adm/unix/make_module \\" >> configure.in_tmp1 - -\rm -f configure.in_tmp2 configure.in_tmp3 -touch configure.in_tmp2 -find_in . configure.in_tmp2 -sed -e '/^...salome_adm/d' configure.in_tmp2 > configure.in_tmp3 -sed -e '/^...adm_local.unix.make_omniorb/d' configure.in_tmp3 configure.in_tmp2 -sed -e '/^...adm_local.unix.make_commence/d' configure.in_tmp2 > configure.in_tmp3 -sed -e '/configure.in/d' configure.in_tmp3 > configure.in_tmp2 -sed -e 's/.in / /' configure.in_tmp2 >> configure.in_tmp1 -#sed '/^.salome_adm/d' configure.in_tmp2 > configure.in_tmp3 -#sed '/configure.in/d' configure.in_tmp3 > configure.in_tmp2 -#sed 's/.in / /' configure.in_tmp2 >> configure.in_tmp1 - -echo "])" >> configure.in_tmp1 - -# delete the link created for AC_OUTPUT -echo "" >> configure.in_tmp1 -#echo 'rm -f ${ROOT_SRCDIR}/salome_adm' >> configure.in_tmp1 -\mv configure.in_tmp1 configure.in_new -\rm -f configure.in_tmp2 configure.in_tmp3 - - -######################################################################## -# Create new (or replace old) configure.in file -# Print a message if the file is write protected -# - -echo -if test ! -f configure.in -then - echo -n "Creating new file 'configure.in' ... " - if \mv configure.in_new configure.in >& /dev/null - then - echo "done" - else - echo "error, check your file permissions" - fi -else - echo -n "Updating 'configure.in' file ... " - if ! \cp configure.in configure.in_old >& /dev/null - then - echo - echo - echo "Can't backup previous configure.in" - echo -n "Continue (you will not be able to revert) - (Y/N) ? " - read R - case "x$R" in - xn*) exit;; - xN*) exit;; - esac - echo - echo -n " " - fi - if \cp configure.in_new configure.in >& /dev/null - then - echo "done" - else - echo - echo "error, can't update previous configure.in" - fi -fi - -######################################################################## -# Use autoconf to rebuild the configure script -# - -if test -f configure -then - echo -n "Updating 'configure' script ... " -else - echo -n "Creating 'configure' script ... " -fi - -aclocal --acdir=adm_local/unix/config_files -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files -if autoconf -then - echo "done" -else - echo "failed (check file permissions and/or user quotas ...)" -fi - -cd ${ORIG_DIR} - -echo diff --git a/configure.in.base b/configure.in.base deleted file mode 100644 index 71cdbb9d6..000000000 --- a/configure.in.base +++ /dev/null @@ -1,391 +0,0 @@ -# -# PLEASE DO NOT MODIFY configure.in FILE -# -# ALL CHANGES WILL BE DISCARDED BY THE NEXT -# build_configure COMMAND -# -# CHANGES MUST BE MADE IN configure.in.base FILE -# -# -# Author : Marc Tajchman (CEA) -# Date : 28/06/2001 -# Modified by : Patrick GOLDBRONN (CEA) -# Modified by : Marc Tajchman (CEA) -# -# Created from configure.in.base -# - -AC_INIT(src) -AC_CONFIG_AUX_DIR(${KERNEL_ROOT_DIR}/salome_adm/unix/config_files) -AC_CANONICAL_HOST - -PACKAGE=salome -AC_SUBST(PACKAGE) - -VERSION=0.0.1 -AC_SUBST(VERSION) - -dnl -dnl Initialize source and build root directories -dnl - -ROOT_BUILDDIR=`pwd` -ROOT_SRCDIR=`echo $0 | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"` -cd $ROOT_SRCDIR -ROOT_SRCDIR=`pwd` -cd $ROOT_BUILDDIR - -AC_SUBST(ROOT_SRCDIR) -AC_SUBST(ROOT_BUILDDIR) - -echo -echo Source root directory : $ROOT_SRCDIR -echo Build root directory : $ROOT_BUILDDIR -echo -echo - -if test -z "$AR"; then - AC_CHECK_PROGS(AR,ar xar,:,$PATH) -fi -AC_SUBST(AR) - -dnl Export the AR macro so that it will be placed in the libtool file -dnl correctly. -export AR - -echo -echo --------------------------------------------- -echo testing make -echo --------------------------------------------- -echo - -AC_PROG_MAKE_SET -AC_PROG_INSTALL -dnl -dnl libtool macro check for CC, LD, NM, LN_S, RANLIB, STRIP + pour les librairies dynamiques ! - -AC_ENABLE_DEBUG(yes) -AC_DISABLE_PRODUCTION - -echo --------------------------------------------- -echo testing libtool -echo --------------------------------------------- - -dnl first, we set static to no! -dnl if we want it, use --enable-static -AC_ENABLE_STATIC(no) - -AC_LIBTOOL_DLOPEN -AC_PROG_LIBTOOL - -dnl Fix up the INSTALL macro if it s a relative path. We want the -dnl full-path to the binary instead. -case "$INSTALL" in - *install-sh*) - INSTALL='\${KERNEL_ROOT_DIR}'/salome_adm/unix/config_files/install-sh - ;; -esac - -echo -echo --------------------------------------------- -echo testing C/C++ -echo --------------------------------------------- -echo - -cc_ok=no -dnl inutil car libtool -dnl AC_PROG_CC -AC_PROG_CXX -AC_DEPEND_FLAG -# AC_CC_WARNINGS([ansi]) -cc_ok=yes - -dnl Library libdl : -AC_CHECK_LIB(dl,dlopen) - -dnl add library libm : -AC_CHECK_LIB(m,ceil) - -dnl -dnl Well we use sstream which is not in gcc pre-2.95.3 -dnl We must test if it exists. If not, add it in include ! -dnl - -AC_CXX_HAVE_SSTREAM - -echo -echo --------------------------------------------- -echo BOOST Library -echo --------------------------------------------- -echo - -CHECK_BOOST - -dnl -dnl --------------------------------------------- -dnl testing MPICH -dnl --------------------------------------------- -dnl - -CHECK_MPICH - -echo -echo --------------------------------------------- -echo testing LEX \& YACC -echo --------------------------------------------- -echo - -lex_yacc_ok=no -AC_PROG_YACC -AC_PROG_LEX -lex_yacc_ok=yes - -echo -echo --------------------------------------------- -echo testing python -echo --------------------------------------------- -echo - -CHECK_PYTHON - -dnl echo -dnl echo --------------------------------------------- -dnl echo testing java -dnl echo --------------------------------------------- -dnl echo - -dnl CHECK_JAVA - -echo -echo --------------------------------------------- -echo testing swig -echo --------------------------------------------- -echo - -CHECK_SWIG - -echo -echo --------------------------------------------- -echo testing threads -echo --------------------------------------------- -echo - -ENABLE_PTHREADS - -echo -echo --------------------------------------------- -echo testing omniORB -echo --------------------------------------------- -echo - -CHECK_OMNIORB - -dnl echo -dnl echo --------------------------------------------- -dnl echo testing mico -dnl echo --------------------------------------------- -dnl echo - -dnl CHECK_MICO - -echo -echo --------------------------------------------- -echo default ORB : omniORB -echo --------------------------------------------- -echo - -DEFAULT_ORB=omniORB -CHECK_CORBA - -AC_SUBST_FILE(CORBA) -corba=make_$ORB -CORBA=adm_local/unix/$corba - -echo -echo --------------------------------------------- -echo testing openGL -echo --------------------------------------------- -echo - -CHECK_OPENGL - -echo -echo --------------------------------------------- -echo testing QT -echo --------------------------------------------- -echo - -CHECK_QT - -echo -echo --------------------------------------------- -echo testing MSG2QM -echo --------------------------------------------- -echo - -CHECK_MSG2QM - -echo -echo --------------------------------------------- -echo testing VTK -echo --------------------------------------------- -echo - -CHECK_VTK - -echo -echo --------------------------------------------- -echo testing HDF5 -echo --------------------------------------------- -echo - -CHECK_HDF5 - -echo -echo --------------------------------------------- -echo Testing OpenCascade -echo --------------------------------------------- -echo - -CHECK_CAS - -echo -echo --------------------------------------------- -echo Testing html generators -echo --------------------------------------------- -echo - -CHECK_HTML_GENERATORS - -echo -echo --------------------------------------------- -echo Testing Kernel -echo --------------------------------------------- -echo - -CHECK_KERNEL - -echo -echo --------------------------------------------- -echo Testing Geom -echo --------------------------------------------- -echo - -CHECK_GEOM - -echo -echo --------------------------------------------- -echo Testing Med -echo --------------------------------------------- -echo - -CHECK_MED - -echo -echo --------------------------------------------- -echo Summary -echo --------------------------------------------- -echo - -echo Configure -variables="cc_ok boost_ok lex_yacc_ok python_ok swig_ok threads_ok OpenGL_ok qt_ok vtk_ok hdf5_ok omniORB_ok occ_ok doxygen_ok graphviz_ok Kernel_ok Geom_ok Med_ok" - -for var in $variables -do - printf " %10s : " `echo \$var | sed -e "s,_ok,,"` - eval echo \$$var -done - -echo -echo "Default ORB : $DEFAULT_ORB" -echo - -dnl generals files which could be included in every makefile - -AC_SUBST_FILE(COMMENCE) COMMENCE=adm_local/unix/make_commence -AC_SUBST_FILE(CONCLUDE) CONCLUDE=adm_local/unix/make_conclude -AC_SUBST_FILE(MODULE) MODULE=salome_adm/unix/make_module - -dnl les dependences -AC_SUBST_FILE(DEPEND) DEPEND=salome_adm/unix/depend - -dnl We don t need to say when we re entering directories if we re using -dnl GNU make becuase make does it for us. -if test "X$GMAKE" = "Xyes"; then - AC_SUBST(SETX) SETX=":" -else - AC_SUBST(SETX) SETX="set -x" -fi - -# make other build directories -for rep in salome_adm adm_local doc bin/salome include/salome lib/salome share/salome/resources idl -do -# if test ! -d $rep ; then -# eval mkdir $rep -# fi - $INSTALL -d $rep -done - -echo -echo --------------------------------------------- -echo copying resource files, shell scripts, and -echo xml files -echo --------------------------------------------- -echo - - -dnl copy resources directories - -#for i in `find $ROOT_SRCDIR -name 'resources' -print` -#do -# local_res=`echo $i | sed -e "s,$ROOT_SRCDIR,.,"` -# local_res_dir=`echo $local_res | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"` -# mkdir -p $local_res_dir -# cd $local_res_dir -# ln -fs $i -# echo $local_res -# cd $ROOT_BUILDDIR -#done - -dnl copy shells and utilities contained in the bin directory -dnl excluding .in files (treated in AC-OUTPUT below) and CVS -dnl directory - -mkdir -p bin/salome -cd bin/salome -for i in $ROOT_SRCDIR/bin/* -do - local_bin=`echo $i | sed -e "s,$ROOT_SRCDIR,.,"` - case "$local_bin" in - *.in | *~) ;; - ./bin/CVS | ./bin/salome) ;; - *) /usr/bin/install $i .; echo $local_bin ;; - esac -done -cd $ROOT_BUILDDIR - -AC_SUBST_FILE(ENVSCRIPT) ENVSCRIPT=salome_adm/unix/envScript - -dnl copy xml files to the build tree (lib directory) -dnl pourquoi ???? - -#cd lib -#for i in `find $ROOT_SRCDIR -name "*.xml" -print` -#do -# ln -fs $i -# echo `echo $i | sed -e "s,$ROOT_SRCDIR,.,"` -#done -#cd $ROOT_BUILDDIR - - -echo -echo --------------------------------------------- -echo generating Makefiles and configure files -echo --------------------------------------------- -echo - -AC_OUTPUT_COMMANDS([ \ - chmod +x ./bin/* \ -]) - -## do not delete this line diff --git a/cvs-tags b/cvs-tags deleted file mode 100644 index 6991d061f..000000000 --- a/cvs-tags +++ /dev/null @@ -1,35 +0,0 @@ -Start-v1_1a: ? - ? - -V1_2_1: ? - ? - -V1_2_2: 2003-09-26 17:00 - New data structure in SMDS. - -nadir_1_2_2: 2003-10-06 12:50 - Branch after V1_2_2. Developpement branch for user nadir - -merge_1_2_c__1_2_2: 2003-10-17 14:35 - Branch after V1_2_2. Branch to merge Salome 1.2c. Initiated by Paul Rascle. - -MergeV1_2c-1: 2003-10-19 13:49 - End of merge_1_2_c__1_2_2 branch. This branch is ready to be merge with the head. - -V1_3_0b1: 2003-11-12 - First pre-release of 1.3.0. Include the merge of 1.2c branch. - -nadir_update_MED_v1_3_0: 2003-11-17 10:22 - New branch for user nadir. Synchronization of API with MED 1.3. - -V1_3_0b2: 2003-11-18 - Second pre-release of 1.3.0. Synchronization of API with MED 1.3. - -V1_3_0: 2003-11-25 08:52 - Release 1.3.0. - -V1_3_1: 2004-01-05 14:28 - Release 1.3.1. Added Netgen. - -merge_1_2_d: 2003-01-20 11:25 - Branch to merge Release 1.2d of Salome Pro. diff --git a/doc/Makefile.in b/doc/Makefile.in deleted file mode 100644 index 7295ede75..000000000 --- a/doc/Makefile.in +++ /dev/null @@ -1,40 +0,0 @@ - -# -* Makefile *- -# -# Author : Patrick GOLDBRONN (CEA) -# Date : 30/11/2001 -# $Header$ -# -# source path -top_srcdir=@top_srcdir@ -top_builddir=.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - -SUBDIRS= salome - -@COMMENCE@ - -docs: - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done -clean: - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done - -distclean: clean - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done - -install: - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done - -uninstall: - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done diff --git a/doc/salome/AddNetgenInSalome2.pdf b/doc/salome/AddNetgenInSalome2.pdf deleted file mode 100644 index 34fd25204d7f2506a236b2629cfd6157ad7c1936..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70678 zcmdqJRX`rux&;{AfzP4wZ~!C>t&AN^@R;99_T?az}Lw#!lLoP08dj~s1T}x<}^bF-OyA>vc_G7X;BX(qd0>S6}!a7;x ziNPBEVs3~D6Fj6G1pg1PKB2LnM~-(?ZeiVyf%6EL?JVkNeRuR;?^iUBaMTEW5}y?B zSDvCodZkNZG6w&z zz6Dtdy1uISdMRD*KKbeHYjzF$$p)z(M^b zh``o~lX`|A3Z>F%nt!N?4$%=)NfgPT`%jv(L@gU2%-8#Ltfs*C;C`oR$(so{EYfS5 z$0R?{pt;^V0cG|7;1^pNH7tg&;6&7g;#%?1zippKSD(2vzgi&}Hr`7p0ZgSRc zcjqBgY{Vm7S0IP0V2b^K6#wuZ+@I<&0zMzRK{R-;r(K$MI)GO>pP8+6)OEKuec3Q> zL;*#}2BCQ7QnZ(<0^-)@>aUa(;AK=0Q|R%XnEejL&flK+Hhg=>TRNU~}o;0b1k zys=eEXgU;=kHXW$v5Pl?ebw|tt=T4-96YW8*)Y}VS-C2GzPWA4li-BnsNX}cZB zu63zr9@^nuS&tH>~jl2aJggO-=ZLb72-JmO*6YxNbXHDex>zTfeh8bKd)P z>>oJg-;=8yzk6=91mlblI=jvOLXMoSNlHj7iFNe?E%n9Dk|26Yr}5n+3eB#l691V` z&5&`vckP@F)$gllFQv|06o<^F%vLNG?pvz~Yb~uj%-XeS^l-Pf8?6yeGSiqVduYCM z8TyIFo|?a%0Vl2Bj0>RAU^U_8m;A`_4Oz5{F#saL5tgv2b)~7H%8KlvOY2ClAQiv9 z2C0d<2`Kfrs1=zidK| z?s=Qx+7r~v+e_6}7zL+37h^?NBQ;euMP1*`o=P7XrEiSthtludeT42so?F~2#a6TY zSiLSD49n#+@TzwG=@Gy`B_bsYX}84b_NB};(;CD+ie=ce8a(20w`Ql})caQ| zWDECtn4xmD9lH~F9_r&R7WTu{O;Udvxwhu7*5Y=fadkogPm5ruvXeWr7I~XD&)3o^4iFyCZELQIfn%P4auo zo+EpYZ!bqjl2QPNZYtf!&P1W%*!r71d#voWVFOlU54A#>C@jO>`W=ysH(ys}?}Q`@ zoE}S+mS{v%Sm#&2E!NHxduy~-;_RDo)_&v_zXDiwH;Ay`bg~Q4c@V1U-l0u7Y2Fxy zfN3YO-@J-aE&Vk4W}dF-Dc=_iP%2F}l_H6Kx6e4*uTZyfIHq_WP2sHPb~ z4u2_g8p|FxIEH=1r@*a+%#ctE`qIN67(yJDILjD)Y({MtT<*%0Dp3CHWkd5gMQ0)D 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 diff --git a/doc/salome/AddNetgenInSalome2.ps b/doc/salome/AddNetgenInSalome2.ps deleted file mode 100644 index a81aa9658..000000000 --- a/doc/salome/AddNetgenInSalome2.ps +++ /dev/null @@ -1,13935 +0,0 @@ -%!PS-Adobe-3.0 -%%BoundingBox: 0 0 595 842 -%%Creator: OpenOffice.org 1.0.2 -%%For: nadir -%%CreationDate: Tue Dec 9 10:49:18 2003 -%%Title: Proc?dure de rajout de DATA dans le produit SalomePro -%%LanguageLevel: 2 -%%DocumentData: Clean7Bit -%%Pages: (atend) -%%PageOrder: Ascend -%%EndComments -%%BeginProlog -/ISO1252Encoding [ -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle -/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash -/zero /one /two /three /four /five /six /seven -/eight /nine /colon /semicolon /less /equal /greater /question -/at /A /B /C /D /E /F /G -/H /I /J /K /L /M /N /O -/P /Q /R /S /T /U /V /W -/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore -/grave /a /b /c /d /e /f /g -/h /i /j /k /l /m /n /o -/p /q /r /s /t /u /v /w -/x /y /z /braceleft /bar /braceright /asciitilde /unused -/Euro /unused /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl -/circumflex /perthousand /Scaron /guilsinglleft /OE /unused /Zcaron /unused -/unused /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash -/tilde /trademark /scaron /guilsinglright /oe /unused /zcaron /Ydieresis -/space /exclamdown /cent /sterling /currency /yen /brokenbar /section -/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron -/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered -/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown -/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla -/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis -/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply -/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls -/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla -/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis -/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide -/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] def - -/psp_definefont { exch dup findfont dup length dict begin { 1 index /FID ne -{ def } { pop pop } ifelse } forall /Encoding 3 -1 roll def -currentdict end exch pop definefont pop } def - -/pathdict dup 8 dict def load begin -/rcmd { { currentfile 1 string readstring pop 0 get dup 32 gt { exit } -{ pop } ifelse } loop dup 126 eq { pop exit } if 65 sub dup 16#3 and 1 -add exch dup 16#C and -2 bitshift 16#3 and 1 add exch 16#10 and 16#10 -eq 3 1 roll exch } def -/rhex { dup 1 sub exch currentfile exch string readhexstring pop dup 0 -get dup 16#80 and 16#80 eq dup 3 1 roll { 16#7f and } if 2 index 0 3 --1 roll put 3 1 roll 0 0 1 5 -1 roll { 2 index exch get add 256 mul } -for 256 div exch pop exch { neg } if } def -/xcmd { rcmd exch rhex exch rhex exch 5 -1 roll add exch 4 -1 roll add -1 index 1 index 5 -1 roll { moveto } { lineto } ifelse } def end -/readpath { 0 0 pathdict begin { xcmd } loop end pop pop } def - -systemdict /languagelevel known not { -/xshow { exch dup length 0 1 3 -1 roll 1 sub { dup 3 index exch get -exch 2 index exch get 1 string dup 0 4 -1 roll put currentpoint 3 -1 -roll show moveto 0 rmoveto } for pop pop } def -/rectangle { 4 -2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 -rlineto closepath } def -/rectfill { rectangle fill } def -/rectstroke { rectangle stroke } def } if - -/psp_lzwfilter { currentfile /ASCII85Decode filter /LZWDecode filter } def -/psp_ascii85filter { currentfile /ASCII85Decode filter } def -/psp_lzwstring { psp_lzwfilter 1024 string readstring } def -/psp_ascii85string { psp_ascii85filter 1024 string readstring } def -/psp_imagedict { -/psp_bitspercomponent { 3 eq { 1 }{ 8 } ifelse } def -/psp_decodearray { [ [0 1 0 1 0 1] [0 255] [0 1] [0 255] ] exch get } -def 7 dict dup -/ImageType 1 put dup -/Width 7 -1 roll put dup -/Height 5 index put dup -/BitsPerComponent 4 index psp_bitspercomponent put dup -/Decode 5 -1 roll psp_decodearray put dup -/ImageMatrix [1 0 0 1 0 0] dup 5 8 -1 roll put put dup -/DataSource 4 -1 roll 1 eq { psp_lzwfilter } { psp_ascii85filter } ifelse put -} def -%%EndProlog -%%Page: 0 0 -%%PageBoundingBox: 18 18 577 824 -%%BeginSetup -% -%%BeginFeature: *PageSize A4 -<> setpagedevice -%%EndFeature -%%EndSetup -%%BeginPageSetup -% -gsave -[0.24 0 0 -0.24 18 824] concat -gsave -%%EndPageSetup -%%BeginResource: font NimbusMonL-Regu -%!PS-AdobeFont-1.0: NimbusMonL-Regu 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file PUBLIC (Aladdin Free Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file PUBLIC (Aladdin Free Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Mono L Regular) readonly def -/FamilyName (Nimbus Mono L) readonly def -/Weight (Regular) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /NimbusMonL-Regu def -/PaintType 0 def -/WMode 0 def -/FontBBox {-12 -237 650 811} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -/UniqueID 5020945 def -currentdict end -currentfile eexec -E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942BF7D6DD84F1664B89 -699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED2AC419FF2B2BDE605B8EE3264EDD6641 -2D4F21C64AC522BDFC7C5502F9C3F3E5592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A2 -5032519D1868816E44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8A123E6A2261C63C769D2F4B60FA2C438AD7D199D8E4 -5F7E7C9A605C8CA14E21FCD81C9A515FB8DB6F99604534D06EA9D87FE0FAA852899C9D0595C7A97E -6C55F79FAC45CD38E87B10D210CE7501E88C8FCD3444354365FB893A12F596AE2C1E70D5819EE0D0 -87D10BF8DA96F3DABD5405D28C4228C6C31BA4052464859640933FEEFD8071C0C84CDD829A9B1D0B -A01F25A4D50EE2EA2B45160CA6333B2D2800306ED2BEFDFE155E9D9F9342EB8D5B0ADBF2460CCC98 -643FB1287CCD28ABA7B5CAB92EC39EE2E918990372B16F8487EBA30EAE88708B6CF33B6C015D8096 -C7CFE2F139F52052E3925C0D50FD64CE68236D59CB83EF56BFC584150EC38065059F3308AD6F9A99 -F83EF4E6CB13855C8175E31417D190D036B387D3952344A950F4D8C7781B307A094DF1ECAEE4D2C2 -FD747BC6F7F9C6BD0E90C19294F96C8C5CFE88FB34C477574A1B1630B8CC591529E59B20794DA32E -61DECDA8ABBD1AE956CF74012AA01D42EE01E861B0AA6897C864788AE59DEF43C493246FDB1ACA55 -4C12594BC7B33657A9ECC9E3D1472EF826073F632BE540C35FF6FB40566773F3BB2204D3A579A08C -CBC844C14B18C350F003B9DA23A570C362D6003893CA32F86F59B829C78EE3188B6E3F7FA81D7F62 -2825C639638DFB78B7AF1F500F5B450FA54DBFA5CBA277C794ECE93275A3DE0B452FDC8DDC2993BA -A42F28A636008CDCB03EBF71BDCAF35019778993443F88412AD2AD0D7155A3944606463266322DBC -0244B07DA1E9C27A27B59664E8566D7A54CC03E995AAD008B0A17E2C3EF61F720CE7F7788599C4E4 -4C709CD5C31B11107F16AD70B17B9AFE2E8CD922A7428DAC171427FFAF51067307FAB0ADB530E701 -FD22DA22C4CD3064067BD4F6089C4B2C87937DD426E4E9D2F60E608288BAC9056554D04947E69200 -61E379CF5E81BFD32FD37EFAC1F61CEBEE551B0851516471A7472C60DF89DAA9EB1DC5A67E479745 -3E69B9E22BAF4E3CCA4192D603295B018C4AB69D18DE52DFDF15E96B557F290A4B8C5B1E7A6CACA8 -1F2351B97ADFC36995ABA43803A6E5AC04A3C93495F6D38106B8B144449C07D1358210F9176E1565 -72363CFBDE576BFDF99FA329DD1346E83F79E06CF68250CA57A68931BC7F342AD295D0CBA17AA95B -B8EEB53EA6E8E660B814E9F857CECB14F44A43288B69A9E7908D55BF19E844359879D28CAEF1C38A -36420185D20DFB32C2E002202800E8EF3D67C5D50E919657CA958B538D537D503444865331D79BFC -40312068D72364503BD0CC84B5F30A74D8B5B6A26AF2DB764564FB65A6BA8F9051AE2B4EA458D46A -4569F30C6E77DC097356770362E6CF3F1661074778EBB44FF7D1E3B64FF75E77E11FE525BB121C65 -46CFD13300CA1F02D571B82A5825E6226D14FDCF27F06D87452A8B6C5DCA658535CEE2A795E58137 -D48E566B69D53A0C3B766E84C51EAA221C46999CC8065ADB2F129D5B630FAB1814C0C33B5AEA0EFB -B6E994D80941B53079AF96D90A0B924F9B0E319BED9836B8F9053F868363D3CA554CBB181863301F -8CB940872ED5FA7BD18CE39218B5AD8AC57D0F752D941076B1C64D99BE0DB86D7A6D96510D772EB2 -4C587F11779BD21CFE5BDE1F29C1EF9022B2B8BCD7F91153C845906722477829C40111D810480F3C -F62DE8DBA7FD86CD236E656618CAF6FC46827FBC4898EA7672F8C9971AFE43E0E01EC8B77D4AF48C -BF1210E98C1DB15C16D149BFF58AB0270CF015B107A3A50F5DC8F37FFB92EEC8CB6778DDB7CE4AAB -C464C4AFF654223006A550EB52485A23D2B4AA7198D3CD54418102F1E9A4FBDE37B841E56F5C2C53 -966DB9B66B000E4588282E3FB80C2C519339F0002D2F83C979EDC5827A3B3C8EF8810A0F9DACB6B9 -998E9AF6551F56313DC4011904CB979AA2D32B11A811BC248141E4B9734D9FB7982A5671002D8279 -CAB93ABE057474628DEFC95D43890DB1ED34CFA8A20BDC3D874E7679A396158E522ED0AB969A4E3E -C7E4474E192590504D54DEB7B260B7935C4E56548A7D121AC1F741F8CDF259EA1B5813175A77A1D2 -D30BA26F65EB765A04C09ED51F69F41551ADF399E6AA2FC09788137BEA4913F17B8EB838C38FB272 -1FDCB55FD65697FF0B850E7D3D1CE266BF90F7EC06A9A0876BDFE767D3A918B092FC78C775F945CF -1F96E859C03DBF630D9A940939654C3549D8F7921CB94EE23D5A0535DE9DF31EA0F937F860B4F220 -A99ADDFC343D7CF7BFA0B803C12C26403F0DCFFC8EA786D0D8A8D9C367419CA8AE41190CE93A8086 -583A1E6C9D70B612C84D87D2EEAA71EC2DC12F4CDE6A821303D5F6A9BBDB7EEDCD289E80FA3B75F4 -7F481B50719DCF4A142069393593B9AF9CCEEAEC56A35B8787193D7C88113E9E1E221D151E093B01 -9EF89F6118BEC4735103CC8003CC5AD1B6727B3226CD44C497DA7052DD681695DBEC3397F9598C91 -77701C73BF0594CE93F23D50EC5BEE2FB9DA1FC966DF148B27B28EE3C89526DD6625E2887F9FA076 -7C127C609EE315626BC14D274FBEA56528DC06A27B2D476D46E9E7916590B156A5DF04A6CB15E362 -45D77021767B6E5BDFCC679670263FD891446C3371B11BB6E1DF60F960AAB4149D7753E6A5C33810 -C42C8BFF4E935003388506F8278BD7CB672F132E065AE684DCA0B9064D01DD620E7FFDFE04F14277 -EFE8E60159BA0FCA3FE2F28B902D4AC275D19F0AC6971EBE827C4A232D87650D2688345BCA78F879 -077114F0463C5F058107B669566F8171E4E284D278405580F04BFFC9902784216E0C9A17AA9B2935 -E66E18A783F723BE044389B7E9D62AA36818FF2EA406C3C1A9D2F3436F3EE7DB8BE86AFA8DAA6A4B -1B84611350D8D27605509612B515E16AA843164D5D0805E36A2B9EF74C5F6A0B9D59A04B55697123 -27F4B1B30E9587CD103337639967CBDC655AA46E80D2CFD24BEB50815B5338E522B3A7AFE8362AB4 -F05D8BC52BBA9C5089ADA8C89529B0275AF422EB540D31A938B8740860756325B966B36817115213 -FAAF92DE63F6BAE1E0064BFBC5588098B61EB83C71F1C2082436D37DAF1ACBE186FEDC4BE7C1233B -6F18BEC5F99002D21CB7864E4811F7AB3C03003E1E4490AD1AC793BD28FCD5EF0E6CC30EF39A08C5 -2F71939B0CEF620DC69E31E39D6DB969049031B0C92EF2DB653D97F370141456A52985076B268652 -FA2648C792780BAD637C4D7581FB2D62011D57E293719487CF2D1F013CFAA532E1C2D39178D51272 -A6AF041440BCA174B5CC902BD7390C7D3695056CB4BD7791F9FB6D88E7A70DEF2C97869F5DBC5BD8 -23C517C7B7C39D624DF627DC9653EA5347BFDA80B723F05F6DBB4C9EA501D862ACE05B9DBDF21B70 -56FBCD8C6D4B85873DCEE6166C8B5ADC0316CA12D9639F361B15A42F00E1D62EDBCA1111972FA0F4 -5758BECB31DB38316F3CDFE1B41748C93ED58B67E9B57ABBED5924A6D53E99FBC9A994A6489A8BDF -13EB685548B4DC6D62DA7426C22227D4D43B6FFC7B5EA91C896730253E8941AFEE588359C2BECF6F -FC415B9EB6D31CCB0F6C7F85853E6449FA6D627A97A3CE8303F148393ADCCCDFA2FE085C6908BE5C -3C05AF00A6F02840206C3253A559AC5C049BDDFD11AD9B118403B84DA10AE3C470CB9A9A2D1D7B73 -2F59F5FE146DEDA60AE750F551AAC934621B4470E1BC324C436303E25F81D0DC3188BE0D6FEC5414 -C20E4CB18952E12CB6423DF7124627ACDE145500D77A97A8BFD9CB50D1FAA008E2CE2B2505A4749F -1EBBB092C347023714055A9B63353AF9E7FEE05BB54C9843698101F79888A91531773830C2C967B5 -88D3ACD2192883D5CE3962D51084FC653EAE2C5FB2DA41DACEFB5C76812D2EDB5B109677289CD199 -8D457FB1023A19AC67295BBC1A9A20A426B06A368DF3C5DD083CB1180D287F5500F2C635EDE157EE -FCEEC5503447382D15C748C1E35F68753992E5C90F900DE54D18F8E1B355D1076ADFB1F3590135FA -D1A36F028E44F48ABB149B80CA9A54614D467F8D71CB310BBC7AC7100261092DB8C5BFD39E0AC6BC -2C9D6CBC3A8C05FF8A74CB21608EC4A4CFE4CBAA2D056DBA14206106044DECF59F957EF8A9CADE4C -9B19D8D30DD4FDE6A9548E50DB51ACA73330142153FC36B69C1C8D5B26D0C689B7040E81AC2C864F -D7C097C99BE5953843E172C97AB5684F35FB03A725A89DBF371F08DDF40A1531FC1B676DB0E1543A -EC6E97D3D2E4AA3D5831D8B3C952ABBFA112352814FB6FAB61A0D680E6640F6AEC8426200CF61286 -F7422CB2F78C61EBAA36D47EC16D7FAF8B4AF31D090CDFA255D9D7C61D46CFB22A7D6E1758E71ED5 -67E00CBD8E8F468DDFB477F091A2F915627F22FF47B876544BC1F03B6BBB98385F009C20BB1AA2A7 -A78674692B8EAC2E3C8069B79E679338DA57F72976810F845BEB6B9ADD32B95D78E5E60F16DD1668 -9C05FD82D36A3115BE8ED494A74DD211D58A2CDF983FCB9CDC29BF7F0E29988FA23560EDF514BC1D -183F3B2A22C09FB179B47E05ADEF48DF02F31C29875D1915037B19407764A4292FE44E741651A8E3 -BEB5F0D972B6327090F664417C84F84FFBF0AFFF8B1D85C822D90730AB4140C42A51AA8B1DBE4398 -4EA8566040EB8B341CCE23FD3F69DD235A080BA5C69AECB9BC732BC2D7D40617DDA6B79FB6EE40C3 -556C7DF9B23DAD89E94054B1345DB8402AE679FC4655A4A776C0150463F8DB2BFC0608EA1F124E22 -1DDAE6026B5E5D007A7E4A0D6B3B0CF3A2669E67C5E4F01551966A7BC48F2F4B6A87E740D8095E63 -F77C7A027F26B52F2299DE5B8A2F6209BCF3D31CB0235F998F781E5CC81E31DC424E008D46EC0920 -2951E5684804A0592EA47D6C788A20487BEA2EC8F2E6C1D7F378B62DB43CA43C4B366F8B4319631C -FE9854F0E10321CFA3B01C873584863BBEFC23C72C05E695B56E8A52E89AA2DAB543834D34DCAC5F -ED08DC51825C5257AE59850D101D84F4CAA1D29FC932F9E0EFFBF7A9A7F3685F61F0490CD3CC8988 -2DB52A757A6AF4C4E67B407BD2316B1C0FFE7DC54E43C87B874F57E4903334E2140B011484863CDC -ACA331175F2CF3D72E0042855983AAF8853D3015E870FF0807014C31D55060DF3FE1FCE157324481 -2744AB51322444632F9AFDA6706E320FFE82B8CBE242A19DF00CE73EE48E25FF49D5871BD3E60652 -298FE3E8D400609E232E0DDC794C0579ACEF89E841B2EDCA50D51151F65E8C1CC3B01EF1870558F0 -BF5743718C3E068617E81BFE120C6CA16E0924BFC2541177D53671CAA3AB641C41557DCDAE1A3461 -47B5E999C4541B08B4AFCBC187AFD653D5B5F8386DF6AD8FE69E21BD0567DF494F736C6A184FA4DE -48DC9F347787CA96E2E00A296C2DA05C2AD9BC423E9CA428D7F1FA12DC9353A302FB8C529AF8688C -BB543B45B2717EBF8F6C497935F4F3BFFD285E0402AB7544B3CA4643AE5A8B5250ED987A95FC1F27 -5B9707ACD0641BD0EE2AE9758494F8D8A51DCE408A38AC20EAF0852D72D84D0C6BE973326793AEB9 -55EAC6FE0A2813A355DCD22F6F2CE56588D1C055CDDFA98878BCEB6A018DB22922D2B600A20F8184 -2E665DF41013CA0947C4237C2BD60A75E2FD1A3FB8C8FA19485730B87461AD466ACB02DF8CA24091 -4FB090B3D2B41EB6B8FF05E1A59D9FD668AF70BA5BB72778953BA55FC5F9F626043450E1D09BC83D -8605098ABEF884639A37809A32565CBEFB3FF39EE53D6C18C58C272BB928E4410E361E59A50F242D -69747A032617C52DEBBF62364AB5A96EFAF642D9D82BA679B1D70FAC10A4EB62FA5CFC308E86368A -AAD7E75948F43598CD1C544A0D4091374D7E88D4522CBE902391641327E888E7748FA889DCE67ADE -61699E7D77763681CAEE9B1CA8837B2F7EF9C18CBCC538C465C8E2DD34616953CCB6030A222C728B -834911C1A179E2C770289407AB28B303E724D97F747D6134B425216A64C6E0B60F633E2B85300047 -E4C90339CE030A0FAE31E830C8ABA5AB3386A3B69267351A7BFDD66356AE5E57FB2994452993E90D -E7C4E260ABAB93C37831856A650D56E44172FECA01D6C7C380F250B82473960D2A2A5FB6B4DA668F -46E624ACF7FA0FD4490F485D640A3ADFC9F8652E7A38CE5799F770C3606DB4B8B947F93967F779E3 -A3C0572F13A5A187D31D7BD12A5C7BE23CB6ED6192086241B76C5BA6983DB9C93E4B208D707D3760 -F03CD6272EF3A4CE89B8E52E6AC5871A3D03EB975759AB4BE239E5EC7842CBB333E692CC607C722E -185D3C39164DD320C6945629C70FF66A5237C0A9520A1FAD6EB9816069351AB0F135D90CC0982B14 -7D2294AE4A38A527EE40BE9CDE2512AAEBB590E134388BB171D0956A7C4566D65A9A041BE6C4F883 -6B3EC3D2ED1B48B566A783292B15B6127920D247D494F070BB20BEFF60640B11B276DDEEE49706E8 -B2B21BB40B7F00AAFC594C492C25DCA774E0B80D82E927448DE2E74A9D0DC7AC9260096EAF187B6C -D6AEAA6D1DC4205B4411122751A5B22688404EA7C5861730371FFAC10F5AFD4727A0E402AB5EA757 -606B75EB86A05E8F774D6E430A1A3FE2A37EBB06700474239FB1CFA05EE44B91B82244C575B52E7F -AF934B04EEB0D933FEB57EBE326D75821C8B23EAA85B583AED4320B7F04B9F2DC591091216FDE52E -064BAAA9C2C9D9714B95A4558C21F3CEBE624B5403B31508F178581AF6863083ED762F1E2E34A45C -FDD71660D626FF8648F5D6C5E580D4765A67FB6159EC8077A9F0A88038C8D3D7C77FF0926E2123BE -874F7BCAF129D55A5B5960F824BD1728ABCFCC51D23936DE9A25C408D786E44C3A2BAFA4423177AD -060D21D38E15E23EB6FFC0B4120E814695D423EEFC2744A1FC81B4DF89D76F0A6803D8B14E75538C -AAD03A72517B86514F6952F6FD619D9E910D980F00964DB325318C045BDF79647F453D4A5CF4E61D -D5359782827229310405FBCF6107C3AD9DDEF9A9A339D5D5A6EB2E7838A0A43221BD62CBDF732DB0 -A638A52016FB35BA7761AEC846A023D3BF2D1BB183543E81EB7CAC1E5970CDC6F068C5EA118C7AAE -528D1396E6DC939112DA4460C890EAD5C01BDC438F5BB734218BA6270ADD0DC1778FD8AB16831D6A -302B814A1A44B07EDC65956C9E6CF4875DF521F3CE5B422F71081B6D69BD270F739095C9E81C0377 -934A8BC6390C420C4E4CDD9CF7E32544C68D884E15ACA3BCC07FC8C132D8FB9D752C15D75C52C288 -57E2EA461A6FCAD90C56843513F74461F18D7164BC597A28AE4BA7C86EE1703535A9B9ED50122627 -71FC12F102E800E0E1AF7BB46681BD2B14B614CEA91B7B2AAA35235DE76C0E113C92688F8EC81277 -D58C3406778E1EC1CC15F1CD9A137C8FFDAAB99ACE3BFC782916F1A877170589A92DC921E6740A22 -B84DC6BACDABCC76E64C79E3A588D80F8F4D376E1B426F15751CF7391102102F0AFAFD8B22DFDEB5 -48AEB5F30B1673023D22054A13391A0EC08DE6E7B685A0D031AABF20B7C62187C0284892D5EAADF1 -21BA28263EB863D5E36EA9C06A77CCFC0E17F593961591F84D82AF823EFE41044C8D606FEF83CCC7 -B0E961E7994DF8A3CC36B209D953E250ADAB8D22D7F2B4E2C9CA39EFA2D93E56195C1560E30A5190 -CC5B17FAEFCF250DF79F6B624A4B917E11C332222FCCFEC4F6A47BD9E75DA9854FC3F7AE554E91ED -DE144D7AEF38A0E3EDB5E5A5626374DB94F022C8CF549093041DE00D7269B7CE544E748439BA2870 -718C08E58FB4A77D93EBC04B7957D272AE1601D41BF85A2BADAA0DF73B0D3841D4839C85677FB2E1 -5F1D6CE592669FF4BBC9C69DBA334DC37706F2F6BE83D5863E8CD6A30C08640AAC4C233684E66B4F -E6B62D4A8BE9D531E47BEF5640D9B5C27D990092BE1597F6995C8A77BE9C18AAE6C1CF130775DDAC -41D34438FC7AD8E042CB56CBF2944932EBA7D053E9376FF398367450E35A1945FE23E05C921096A1 -5454721FFD0F429A3E06DC3ED36F1C170BE79C66996EF8337AFF85B90C5D3A4A94455AE9FA32E211 -7A63E59001F052D5F6223125BFAFA40901E98960ADF7BB886729DCA82FC3B8CC52B37FF2517299E1 -D769057F8154FB95582F02CB0BECC873A9C71796ADBD3E91324FAA94F2C41CF57C30B5897D031C02 -D256C909E080E70BFD1F32E69EF67031138C2DDCD1A8E4B65E485C23C3E450ABDD9815512D6F34A8 -4B9DB715DB2C7A93BFB424316E1AA44397749CB01088428F149A3B4324737ED9957FD388248462AC -1B2610D72BF5C073ECA567E7385CC959E37CAC7E05470160FFA5A9F63B8E9B082937E911586EA165 -374938F492EDF28CE6020953A5B5CCEC7737F9D9CC8538C4339567AAED3794ABA3B9F4EAE65466E8 -E326F6C399B36355935FBDCB9972F10B13494DC25097FCEC5A6398F275C8C151558E74C5175F7BAF -4155E36B733F75CF9D5C5979B0764F14D8306E06BA24BF791141E404C69F3F8FCCD91B9C58C2C671 -AAE7D4F9E5D6414E46ED633A5F78AA5BF04E652246A066EAD9E582B181CC196EA2D3CFAA383B5D0E -4CAC9336E119C08CC6AC55CBFBAE147C623B400453BBF447E96DE036FC025624384359EED7C7D5F7 -858DC0521377CF647A157FC3F188DE5EEF094DBA125510FDE34C570D7BE76AB5DF0A28BF45DDAADB -EA7EEEDB936332DFE93081E0AFD3FDD46BED08D6914B2EFCFDC41662A33B90B03D76D34F48D30FC6 -BBBB600E90E6AC7243FDF026762A44B4D6E4ECBEF48C9D7B696AF29EEE063E557D8FCF0F09E0136F -45D17E608DA36E59F2AECF8493F8D62536119B5F7E1554DFE3F6E8D7C9A2C6F557D18B4AF92C9F6E -050975C3B5C54F9B5F4E39D600B6FA2CD6DE203A174028CBB2A201AF126D1013C229BB82CFD013ED -199D01E51EE2780FE896E01C63C655087A3E61A7F1029FA5E97EA1872F1B45F22282DDC317E17926 -7368CB52DA9444F6055A3C653659CAD2A1D8712BC2B1B32C1DC6906D957FB88524EE066156ED6BDE -B8D832F9338F9912E29A250A8C4674E667C1C278B677AEC9972BE83CBA3FB779893FCB8F81A323AC -91474BA2A2334A07BB5628E905C518E634F6761A3289056F83D5DD7B3890987EEE1C18FB2D379CC1 -905F1AEB3B3D2AD578F0D6C845D2D40C4BCEE3F71C90E68E5417BB8CDDD878D83BA80AD8485F4067 -E5C3CABF28AB56CBB219C0AAB8FFC6C7E192BEC8CBCA1459AE4450AFCC81B9548F40CE2622E5A7C2 -81F74DCC02DAD57EFD92D072318DDF05BF42F1EA8163071E23949B0179CF7DE64677CA99B23CB926 -B3E294194EC13397EA1DC9A5E1CDCD828156CD71F81B64167D4FB01E6002713BD8AC6F82B20CD369 -9C6CA4704DC5C65A2D66EB155B7AF1C9BB46469416FB49C1C7E17A30A5F045271D7DF3FFF2F42C6B -470701C381E3456A500C6BB3D0E47B4D91C5F34B49BB6272F1F8698B307D89EDA3A1565DAD1C0864 -627560CF922DCF5B34C67860352390B282F95394AA2CDE0E97CE3ED39546A6AF1C52BFCF81A29BE8 -2C47C99E8050E4889E4575B75F39E662F2DB7420673797E2ED3D67CDA7AE2C15D0A0A794D57D168E -BE13214E89E0209AB2C0EB7784E9491AEFA3C02D0DF3AE5365A0FC4AE023CAB528162C7A1B173664 -9DFADDACA8DA5FA18B7D6489E4229E9E24D38A620464A744A5C60F6F9D334B908706B738AED18669 -8A8B278341FA4D65A0A88680BA484694921512F7DE93337FC1C02BBE6E64AF2DAD07603279D87329 -1D1F4D39C1DD6D89C90F65240F4808F6F1115CA55B88E242565E59F3BBF1F10EC7B88872E9AE61D4 -4CAE185463EDFAF7DF63DE4D2207D307AFB61501892965170D2945846FCF5973A1D458607F50C15E -06E5BEC715E0C156259AAA6C735593E5564F65F443B78CC7512EC35A56F126DF9D30974A40872E42 -65E1AE5FD483CFCBBBA26DEE426CDC4721F19C3FDA86ED7AD4FA1120F63669BEFE7002B128CEAFD8 -C63E8AC09943B6CBDFB3D2476A026C00A8FF81B1F651B97F310C82ABA5F388CC1DB5AFCFF5996D52 -52A6A42FA4D972E41EE56088F78CB966F9051171C472C774879AECFFF08BFD9CEA40D7C298922ACE -64F28C14E0B81F4DCADE81D71DE3983D87D905192EF13CEE71B2D3FF1A88AEC671EC318917DF98A3 -C9054E372D22A3CEC82FCC217F47319A40900312F6E32B536B9E7A7FA0837EC65CCDB5FB0D414371 -17596CB39D9382262DE6E65379D3A9709B2CFBABF5FC5D5B352425F06F88CD31012A2A4147B112F0 -C1C0ACCC808CD625E0228EEF66661F70AF96D3DCFECD402700E4F6522AC9A856DA466D55C84F65BE -2810A1565163872D62EB81333A698ED7B68352CACCA2D7AD38AB55C19E4F5582F75818302F5FDADF -1DCED09D94872F2D48FB636C8E38C7563C72C771A08C6B1F041F3532BDB39006C89A33C09BE1E3E6 -03622D891F98010BF1DE5355F557A1E09448D486ADEF565705277B31B8BF2B86761E32631E3435B6 -88B79D566F1747BA456DDB43CD239FB47FF7B425EAA4C657C8EEC26EE01AED07CF916E77D53634C1 -37AEEA009C6B515B6342C54BE2C7B95955B1A9DA277A0ABCDA2346E88018C726F481F71D6011AA42 -F8852F2E5749518FE3B3AB668213FE1A05C10A1C53953D75312631D6BBBA01D418199DFEFF8CF548 -6109B099FE8E2F606165FE30F532C03567785D5362AA873C9D3EECEB20F1945D55F49B0CCAC84967 -59FCC7292E46938943C262D78F3212D3F9D0F7B103157F423D71B1ED54B2A603F4C269029918F238 -EC6828FFCEC66009DB9C9E59534EABB183F31D7AD4C57B1BDF0BD2CE5A421882BC10CC1BCE6A970E -2B586BB221567CCA483989DD0B8DEC424C1D1FF042DCB7834423CF244EDA28D2D969B17440CAEAF0 -24A6119DB010CE366821AFA424D1B8299609C04148275AE6E5257A7ACB3C766C747CE99CBA2D703C -F19B7CF301B634D8B613DDC4AFE4633A4D77BFF8E00CFB5E289EBBCAC90A24307E7941EC1685CBAE -400CADD876FCEF7F6557EEE167D2035A05120293527700DC510B038A496BE1D5CBAEF24ED39F7421 -1A93AADF22214ED606A80582485AFE358E3A46D0671148998A3B3BE209467009B43400870359D418 -9A8CEB4D5866AB52D16D9CEB1EAB71C07E6CAA34B70E3096BF7604C22C40D5FBFEEA616DA3BABD59 -DCDB97D883FC8742B8267A16A99B7953225F7144568D566E64542C92E538AC140C851E5D295528EB -7CBB49909B1CAF6409C9BCCEB325468FA0B5F7CB2987382616B477CCFE4F4AC79E4A6F7165363543 -F04DE5B6F6E1C2E910CDC3CDD6C4C92737198F892337DCB6647BD226C820AC99C65D8E7772BBB74F -E65DCAA8A22C33BC168BF48E40A82700A3A7668C5A9A71E397ACDFEE7D556C5C19467B7AA69C260B -727407AC837BDB7D67DEC055C1F45D8BAC61048C45BC9FB3CEFE7549EAA2992D2EDC126FF7A05EAE -58613332A2BC1465B2BC0429162B907D65F793D236EDDD8D35405866D71B25F62DC4A7E06D4DEE82 -840ACCAABC0774F8A63E9C0F7FC980B3583E7A8B01C46590E3BC04EBA565C2EA94F057D964A78A90 -EA9F52ABFD70F84E44E434BD10A42E98C794065724341F907E35D3CB257161E01C7084E3A0166D15 -CED65DA7BA87DBB2EA33D39BD99AFB93D3548358D08330E807F8552CECF63C84F805205491BA3A1A -622E70C232FADF3BF2DCFD6F0539158D3306506F150B0518371912A25EB96163D73E9EEED42EDC84 -D688BC7F7708D9DCA348FAB4DF62E5809BD094842D0A31DBB7C4B41F94D946810C5EC10B69AABC2C -91A59500B2E5D37F4755DDFB7AE4ABF757F4C5BCF77C7F95E6A616646456FE8F18407080BCABBFA5 -7704287AD26222DF91AB2613951E2D679472F8ADF06EA2A20205EC19972299A78BAC52114334470C -5F5890C2F846B4C6042D73945127F2E3910ECA1C4CD7A16EFE4B4BE38A15AAA710682C3836A8CA83 -FD384970139D8B46FB0AEBB002DD224199672FFA02250FBCFA4E649E335428FC71F50F45E498419E -DB0E970F46894A48F65580881C9C4250FCEF65C9B28699408E18B26FE6DB7F1CBDB767564E73CB59 -54C6D639CE33220C894F36E70F71C9F9AA3FE2AE0AA0E3F2E304EC5ABC661675CDE2E70519E4220A -E26FBACBD01D5169EB844750753E6CED53E3678FDCD08AB93E10067E9C64F38B40B76D99B6CD92BD -F4155A1EA5CC824998B59AAD06E09E5F15EBB2288D66EA71B296616734FEF2796F07FF0D8B047074 -A1111D68B99C2B70FC56E74A51B062F4998ACC85B1943C9477E436E5CD7AB18DBC898D21BB93475A -623BDDA71D7B895BA2D4C10F4B90BF335126F4FD57D73AFA50170F6B3C364922E551D40E35DA75FA -891762FA23401D39260F2E92C7807C746F13BB35CEF9DBF2E76E66A72FEFF095DA482A4DE8A42091 -7065736CF4DE904FB52E649A32255E2030A7B31B686353492F31C064A3C4B0448C4BFD44B8E15384 -FD809B8761EE26A7DFA1758D57CE4F0BC376EB2B3833534B15A83436BA553955ACB5A7A66796AC5B -92DB5388BC53EFA27508B08E82821E5CF669BCE52BB860780F749B4F38ACDF5FF12726BF3EC2743F -01014CDE96FE6B4C40A034E9EAFCA2A35CCC776C2669E6AD138070A40F48ED79136D7FF57E993E09 -B81C543FBADD350FF5B5F7A46F060F88E30FE2D8233832D18B6C323EE017EBC1DF5C838321CDC8A8 -4CABCAB20B60A1A3AA028F36EA6E87C850AF8AF7CD50AA6359038BFA8818821D02CEE8F51DAB8C05 -F7AE9797814D97F3DB8CCDDE45B21DBB15CEE292FAA534A5F317B357F4091F3DA357325B8B9F5EDB -45865415973C143E5E5BAA483FBF2D06CDD4246675EC58B84C6AE65CA743117FF00F229243772561 -31A7F2BA26A9115AFD96C18216CFDF41B7220ED0CB3FCC26C36380007B382A02AEAE428887DC8BE5 -FDD630AC57EE3DC156C7B8B29E687F24442E35CE10BA4087295A641F7139C831F7CCDA6CCEB5DAFE -537CC1A97C5A337D3C48A6AE947F58A30DC08CC7B58DBBB4737AD52783C573FC1E9408F55495A80E -7FDA61F0B9C4F090158F1A416249EBBA936C27BEFDEF19D1BFB839EB70576A010706D8B95657B218 -9C2AE04C11EF9E57FE09880273761FB4302C388BD608FA0C7F00F033C9C00F4E3D5CE2D903E0DA52 -E69C7745EE9FA75E2AD93DC6CB5CCFCD3782A699B807AFC36AD1F62B05856D5DFD6F88831B90EB3D -CD523582A49732E3FD7253126D39E8AFB8458B5F7AD7F94A8DAC13365F433C857AF4A42C0A08C4DB -9887C4957259ED22D13CFDF5995DA957EA5A0F620B0214FBFE08AB6D552DBF048D62CEF6EFF12F15 -3511ECA7833E0E3E95F85E6AC0F95438AC4C126E1F1ECF336ED31CCA7EB216D279877123FD9FCD8F -B5E52B587CFFC4428456DDCA816819A8A4A211D8F1629E5D42BA4C5C356E580C8A22C61D987552FA -A97893816DA73D423686E4EBD44375C257F031318865A20F22115E72BF1EB9F93AAA169C140A33A0 -6C35BD4526A38BE79CF40AD1EFA10411E8F3300A8A8B97AB140EE6734E1BEE6C8EE443D698D34159 -97649C6F10F20ACD80236422E215E146D744A262DA3FC88DC0D86FF66512F49D3F957D3C5CFFEB42 -4823509F33F155057A4C6F37B52F4667767BA94F6B8B62856B553F307E5D230C44CBFDC9A97A45B1 -39FFB2F2565EB0E22026972FAD0FB7B9576FB6F368B61979943A398773600E7EE1DFEFBF26D45D40 -BDA66EBB96A56EE9CAE0B2420C5DD83E24DBA9FF885BB844BF3D2BF93B07325DFF60C0CB5FDCCA0A -C8FB5A2E119D5AF26E53AB8E3B428481C2871DDA26EF0B621CD8572B3C664BC7AAC01A1D05B98F79 -1A7080D294BE81099BDA7982432F3DFF4775C44D23F4F1B2E0162B61A8B2CB5EE8564BF98E2ED403 -2219085FE6194C19DAC98A421826CAED7F1AB1477AB327506010217283894235D7DBFC1153D5ECC4 -8AA7293F19592B4D7E95FE55151889BCD1D7FA7DC2370D2DFE11D7E4EA34B5C7A8E73BD3A348FD38 -9EF45B6167FB90BA44C23E912F9A4F2FC0427ED070592F7110183BFDB2C400393BA7569058227926 -351F07FED4F33633BA03A72AA2DC6B598E49B96021DD868DAD0F352E5722FB714F667C15C68D49C0 -3D822D82677EDFE86FE9668E537DA284068C9B0AED83074C92A5B939296D505B837E6A9DDAB1AEAB -7455A08A114C2222B339284674B74BF4CA9EE0C020BF2A148B439C71C6BE51A94CB64FBE4A7EB295 -5A455047CF5CB348B062ED4F6471CBC3E9ADD9BE9B96879AC7BC71BCE02FD02F17C6063985A5E898 -3D205AA1489DA13C408990ABA1C54F2F501AA172F530480D789C848118C0A74EF98D5F607A067BAF -F6030D887AC6A6497F9A0B38F9705F328AAD4BFBB634F739386177B07F22D5771282444E5EE17335 -B4D0EC86117C697E79A5F4F65FDC08E4904DAEDAB20067EAE2448FD4301849E456D085F392DD1316 -7ADF75CCFDB723E2904A9C0C976D6B84DDEF9D92B0E15FB246C3ECC2D0BF314CFB957757B3A3E8E5 -801F520644E4601D291DA0F7507C06F3B9BB36FC1C70EAA444E14E56C0CFF06C7F853DF36DA9D8B6 -AF2544B853DFFF535A7E5C6FC145250CDDA229956019659D0D253A19A7B51A4E538BDC01F74D7704 -9949C2C97C7EC6392C2E61CCC0992B66DAF1AB08551063E53180D2A67DE496716CCBAA45462D9F91 -B66A22545962DDAB120511FF08627131B95E5DEEB8B4DD9643E7B2AF65C0FDCE11F5F1E8DD468DA1 -8D41C8C4F00EA73836F4F70EC50FC3EC6D358C0658A4261C6D15A582A2C7C994E7882E661855B352 -014576858A265FFBC425160669CE159D07EDAC04D060B44E5800A7AAE8E339C29B929AA81D2F515C -46229D2080D5917AB20AB6B34FDCA8E4AF64ED660A3173786FB1A1D005D575C2A5187D3F7CFDC94C -CC44A38C5CD523E9DA726D8EFA6DA7B6131DFF3435FEE838B2C7D6B97934295F06202D307FF78D90 -6699CB9C5BBB10D1D4DEA5FDA5BFB094E704607083B646D37F5DA1FC7AD21B813F44D8C1AFEAB666 -55AAA19703BEA2E77DF3BF350E17C74B3447A452235919452B5175570A006C7680AC05E8950A62E1 -1D7E3ACA35A397D1E19630D094A86807593C97F4C484E4E06BCFF708B6DCA972E3A0009E1CAC0EA4 -141530F5C1B8AEF5E1B933F37FDDBC4BE22B74FE346D1A3F5FEC0818F8E61765568A2AC04713E828 -F98C449D9A1CCE52D10D61DD8BFD084C8D099A75D89DEA64D5A7CC68BD5B0593D97953DADA976383 -F5015915618AEC56D71D1DCD55B89736395C609B315A3F1E1255432FDBD37F38CC43C354FB4B7C44 -F1A7318B0B7E99C3C08C33B953727B6A6328051783A0A33E3CD9E498346A3CA6A77B517096EDD52A -E443B87643A646C3A7BB97F742888D33F9B3127E61942F4103C1DBDCD8EAC8F9E259773066736CA6 -53CE57E8822651261D847C131321BB9D6626A1AC50D047C0BA47B411DF2A995545BD68EC0287CC9B -31D5DDCA8755EBEB10ACCB3903AB0FD5788E984220443B8459E7C078DA4289F1350905881AD6DFDE -C47302B0ACB0D4AF8CAED02B4B70DF3CF8FEC118F0FC2D3DDE3E494CD160E676E300BC464BD4400D -B50EE43B314E0517037BF971ACD7CD327CB2134893B8A0410E68DDC518F5DEC966C7884CF5FDFE74 -723177F20DEDC039D879056CAAB4BF045062D3904F615C5CFE109AC7A35599C94024B41019B9AFD4 -04A80ACAA4837929F5C9317680A13D157A03B59A5588DF79D2E113F5F51021D6F6F90E8BBBA2C252 -FD10651BE80BAFD59C53A3367BA3C28DB6EB9DABF1EA99F47B503F627E15DCF3FD645FC52C5D5D0F -2F07DB4C25C0D1E1C00146E1C4D973E613CCDBD3F9450CC0F5343D79F05E9492E86A1BB889ADF405 -03BD7F3E7543436859184A5B20BD8A172F350D846B7570803990ADAA48D4B9155A2B4C4BFBEF1E1A -065C08E03928559735BDD442FF1E83E1FA20A5DA57D8BDB2FF5427C034CF0128AF111E6E73099E04 -6E0C240E80A73D7BE72B87834E45898D475521CA3306707631F5C6136199F354632D1A085F12A1C7 -C473868B62E534D15F5484323E63D0574196A19EF175214EB35A90873EFCFB92D6CF68761D45E37E -AA61E1A1979A82009507CA193E44B36A806486665CEDBCF387053ACEAB979BD35D30978FC7659ABB -E844F4ECAB3303318ECE80777A5FA5A9DD91B3D06804C4B4E9B4EFCF07EB89866D0DD8CA390CFD15 -98651417114D78776B1A1D36B4BA17746D6BE7FC123D473EF1EFED1C3BC1D555F914536869FD5B0C -35F9C83F65B0E6BF7A627B9202D787D72C600DDB6BCCE613D88492E13CA0AAAB196E8A49928C62CE -A4FFE2D0208EDA334ACF47F20BD793124D2C5546C03F4A364369A76A0425262F9D9118AF54E37D32 -E33AB25DD533A49DF5FBF1BAF4CEAC2D9D378CDCD13B00FDA432D9042F623DA41AFB80699B5538A2 -5403B0B3EABEC9E8EFCF42FEF3EA9F91766902CD206B0787C187D5370B60AD6DCD002DE2DE8DCDC0 -B4719A797C5E26BAA67665016DA0D967FA1346F9588AEDA174CA001B31213617FE19EA218EC23597 -79D979E2663166489C06993230B0D07973A117C4E3F4A4C93CF8428248DD5389414D679C69644142 -67C7FEA17E35B0CEE456667A9B1875C81B2302BDDEA2818D6019FC1622A82051F60584ABC904CD91 -8676305DC03FFBCC64FDDAC8D8AA9CE2EA00D6C97BC63C8A617DEDFC0E40775649438E9F61AFD179 -5E3B20560B01BE5E0983F136CF48AB206954E41DEE0D9DDD953DFD01CAEB569151D6BC0DFEF29D70 -FAE3E198E7EDD8922C0E0BCB8BCCF1C016142C1A8B337AFA7A05A9D7534B184BF3BF827F371E9BD1 -9A71244ECA1BA73D484CD2FAD54DB2F0EEFBD54B536EBCB5094E6BC2F5B2AAE41F05B4B311115876 -ED42C34F8E643B53372E3F6350DB8A38445822EA9A33E27FB0CC42CEDCD1FE2FDF723FC47C996EE3 -56C402112F24D0AF899B2D00BEA1CFD427998BD22B2A09046D6737814448ACFB10D387547D7009FB -384AF0562C85694C071584236D0F1F3D3FCD0CFB38B77C81889061E668BA7AB37AA60F58A3967DE2 -6F939B79CBF10A9DCC42852561D8D6754F1B660D216AAB1E133FBAA321C56E2584BE5C9BAE20CCF0 -0E8DBE6D9C2FCEBEBAD945C3C04101D2387351F132628786F6D9D4CAB83419288D31F9BC600D9664 -12E6AA457CE6CAD26A4C0671097B98C2384C81DD8B9A3222D4F4BBDA7017895C3EDC26662779AEE7 -40D9D7E24185FB821970B0A3A94041A69E4805EC88EE1EE521981536F2844FB8F5EF645F67D42CE5 -148E2DDE43AD5AEF200EDB3A2C7866C98458A92666E5F9E070178BCC39F65A893102A10564AF4E8C -AAA5075D2F8CD7FAB0401C03AF299EA3515CC93066744EB5AF7CF0ED06675BF049A6E3C211A89E16 -DE5BF0445A7CCA6EE8EB0347454950485D884606651E5887FE8B24323E2AA16DE22FC1FC8C4F06A8 -2A1FDE5758976024068197E1F4506E4D3D8A16D40461A4586338B374A592DC60334402F76388AD6A -457DC3F54E6169CF7AE3959676E966A45609621055EC3AF80E182633300A4418E34A66DDFA6B569E -5A13C9115B5FD3EC1CEBE50FBA247F60803AA83976F00117536342DC3D9890C49B2AC701D370E43A -955118967827760F7091469C5406F08F18D7E3548148CF0E312B1DC71DF67A5E7A1656CF2F47F3AF -F3DD50FFC2FCDAB7177285B29C17CA43019F62AC6FBA52D1493ED7C427526470ACC8389BAE827759 -4958908F517B2863B83292EB5AB3F57FFFB08393CA610FB1FE905D88A0A16AC395E2A2A6DD033D6A -0D68992F830B2E1B95FE357BF672716E88FFB92FFC3D62945D1EAD22BC68C51EE0E10A43011DB94C -44685A5C4576F6EF44CBFB45F2A4BF110A01657DB51FD499767E78058199B31DFD60813F1A344F86 -289F9378231D5B151C92385E3650B4FEB1DC91018EAB8474CBF69FDC1496A4D078D2C351C8196451 -247A9DCF8117E5B637371D8E22E248C64D999015C3FD2311E9950B8EE0922FBDD3D7BFF766BFE9E7 -CE0BE12F318FF2A7B5A9C6D00A54401609304ED2C55F5C1EAC3D4B38355BBD85D66D61636FA6E30C -2E82829376BEC979A6FEEE040E452359768ECF90CC539A546F17AE906C76F14F86FF697797322B05 -1EB311A759FE260C1EEE5DACF383816AAF1294CFFA7BF87A4D9BC595EE8F2C2F86FEEE11AD959D86 -F22FDAF4CEC098942A57E57813A0FA99239E994FFF353C1E781D666B8928CFC648FCF0869FC68468 -BDBDA7D280DFAB8B0B3A4CA35B074B686DE8D372C61FB32305169A1A9912F6541DA16CD6316A6EA4 -51524757BE5CF6E820011BE3859FB8B8578C100FF029680E05F0E0BF11D33FE19460C85EA5E4C0EF -28E29407C8AE6BE01CFA0D5022BF9FB01416FFF722A784DFC8FCE330EC95737A854471D334FDC58F -AB42867A7B62836A8B56466E9A6C1247D46EBAFFB905CD4321970F59FB8D6FF65FDDD34BF913AD32 -2E68455C5FF2D23C1A5EAE687F259BC982B6A384D35440F7C693CF50B9ECAC0B5578CAEE87588B56 -2EB6B7F42034C9F2E545EC866316552354EB3728C7D26527ED75174EAF635E048B08DC5D23E88981 -070AD5641A652F2344956E9CF4C16E652A99F4A644D1787D6D36537489DA4D74E61B2FC4DFDF1D1D -9D58F9C26C5EB63200526AFD168AC57D5611ADE4D4A382FC28BB60F9E7D626A6C67AFBCCD1183C5E -3CF2EF210D0BF5CFA7BB10FA3887BDD4CD96EEEAA8F9219AA2F10ABC0A960C3B57C0EC0313AE10CC -FF1F522124CFC8D2D49BFBB0C193EAFFC5B48FB3FF30B21CB76F0A4C0F1377C9223145BB0468A5D7 -1B9BC25873EA12E1C60334571C67385C00D0B570D3FFC6C7FF0DE62C183C76AEEB12DFFEE1459E0F -C818C621B8D12FA1357E2B55D48935D70BF140B4CFFE8813DEFD479350B20DC2EB1D3CBB1A2D3DC6 -EE975D58C89D61FC50E6A0197DA9A586B72255023DE47DABEFB11E8AA02414C2FF6258A281219B9D -DDFE41BA7D7977D0D6F18224FE22F7D4E9355FDB35BF7ED3418F4F68D093AC48F7D8FE4194FEB6C8 -0B9DC1F74E023C604DEA27089F98C3973FF9F4AD7BF7BAE601DB89B08D5D8139B95EDCF6C885FFA8 -B3E4B0477E7040225733826BACFD1EC4A0DD72DC41734856AB9FB700DF83CA2CE812913BD142D84C -5C83C0B2583768198AF9E885F2BA74877A414233207234AA5F18840557CA11682AABDE8993533887 -7C6D404BDE4153C9827EB16D66C1D73A8143C8A2D3604FF72CE579FAA3C5224BAC48EA83BA848429 -9472007DE96466B5B29ACC7C03B05DCAA38A48BFF9F214DE43146AE4E04FA705421917F99BC54533 -F0EBC01849E396216B9F0794E6F6C6B61B52EF1B1950C0FB609895C3C55FF574163FC8B6B09E66AB -AED1810E698FF37CC1F926B2CDA3B48C7D77790EBD2D514B6F385D397F713EC3AD3954EA9C846158 -6031D369E8B99E53408A79D64C34EB5A56DE8A67DE91837960E98A66FC04DFA0EBDE21DB003234BB -78665B039D0A469A0221BD541AF7149A2A659C300132C14581EF766FFFBECBA8B58A5EB3F95446DE -F49AF863A8113D17B2E7E6ECDEAFC3834D4DF900E3475596E86FBB4E2974C090DB4AD61A737D611D -92B4535AC291C56AD8B1C031D2F9B505BB77517B737D70AB3723DB52AE2ACCD5DD2F617423ED3CC3 -9CA882EF41757BF7151806A9B8B0F312808863E3673FB54DE939B35CDECA7FBC4DC3BDF5A5F47D35 -E345916C39366C8B4F439CE1C6F1835C320BD1E67375B03B5DE18C93256F251761A4C8CEC01019C0 -68E34447BCC503B9571FE8000627A6B3DAD5854CBC0A2D69E5A8F46BC78F6A7B1422334EC7A98ABE -FE9B83E01DCF3C6C9273B346F3240EA225AE4A4083CC7B0EA141A0773FDE940768358EB4B13D82AA -304A1386D450C1C0C6A7D5A8FD2BD313F78F85248B5196241E31E5595F3BC01F37700A2DD3D4A0EE -2DD01A36569CD507130E8F5B1E96CB560BB7DA15560CCADF3B2C9804A11D9E8055C9EC70E48C1D21 -3EB756A1376F2EDCB7189D78CD3D6CA5865537EEC31C17D801605EFD860B0B629472690588D02575 -02C6F7A75B9A1C1B397781329832CF3EC43C09F1559CD562C48FA9500295CD3B0A790DD3FCD4684A -7C7AC49AC9BFFF36B39A9FB148BC28D37907433943CBBF0CBDAB46D3EA86DC8F81C859C52D15302B -94A9B51C199B7104DEEC9D769C2634CECF8B700CE9C04152CC59C9326BDACBEC4312DEED92DD087A -1C4840868D9F97CAC046581F762F75E8D24D6445370A3F1E0AE74A6478D9DAC37E7FA5BEBEC0A1E0 -81AF89C1BBF7F51E3E2E22C8C405E8671BA85F1BF0DF79A465DAC7EC07F731E00632E017D190A99D -83E27E5C2E63D7DABBA23B2E88334C63721AC5A4CBC5D45F4C177259F34C2EADE01FA008AF65EBC6 -01D8DD16436D86AA94C99F3CC0A2F87134E73BF22F108B825A8963B49C6C685474AFE4A542C8641D -C0375D7EFE9AC1168D9700459BE52D0DA399023E141969F25C0DAC4668534B6647EC85454BE945E8 -26B26DE6E3C4584B97A38E2B40A0D23481BCA78084FE80E00A71A790BF31DF468A435ECC88E60A57 -860BBCA3D65930186E9917CBD209C230E8F8255A7ABC7D3F043AE4D7AD63D9980BEDF062B7D5C298 -C40225B6D03F29A0339E0FCA02138E526F06B9EF47F5E7A8068A846CFDE2BFDEBD24F5A73A66C079 -18662AEC80B43246284FA4E2EE0D9AAB172B1E59A6CC46B801149D8C0DF6DEC9A55D8E1B0EFD9D30 -2FF618075944CCCB6831D336B11617107B0530D09885E5CA11A5F1FCC8D69D603DA16BEA51116D42 -CAB1AA1E4D7B9B4D79993F2BFE53EAC904FEB70B2D330A89780EAC10D12CC0C35B8399F218AC2976 -E57A26BAD20CE2FA2AE2363D3FD2A8A971747556F2959DA74A8963C20B504711AE1CB0D0C02457FF -2E9BF696B159AF031DD5155F21C0F5549B0471A3C5DC8918B675CEBCB23E29322B959ABC05283A70 -2E878DE8EF25EA760F3C5C7B7B49D398283DE2ED837FD59F7C22D62C58FE4448B1049FDEBFC8787E -67D7DAFE9774979BB3802254DA59BCC0219F98C219F84D995CA768B8B5D9D4A32525DFECE003675E -E4BD5D8DFFC11025AF2B468F9207B5B2B42349B98232BAC0759758C1F4A283405815BD7145C93FA0 -8F3ED2826655053A3C2559073D8ACD199DEA2C5BA5F616A2E48548B4370EC73493BA07E197165DCA -774438B0766867819C1154D1959FE6E01E6312E0AB91FC2E2BD240FC8652A2D456A1DE7F34EF372A -53794D4C4E050BF3CA5B7BD2F1B8DE93B4C8002485CB219AD2D029739FD3C81CC6E78EDF38723576 -1A57143EEDE5CC887F282FECD261F6A25D0A7E154ECDF5DC38E426811BE86AAA458577E5E0C5F0F7 -5AAFA9C41E5D1DC9D91ECD79B514F8CDF7A5F1A189470D35FDF4F9B8788879CCBD91B427822ED658 -389E981E0EE5F7FB87692A3E3E931DF8A1D1573E3B0166204240B7080089A09EF7487C9AEE2D665F -5A82F94C877FB5B0DC531CEBF1E71C6592CEA2401E4B5122E5091DF03D203DF979B9A6EFBA12E2F6 -B422FDF15D49AC0914D372D21E871DE65CBECD105FD4A3E4714B9CCA5C6803FA39DBB015EA8A88BE -7913502E562E5B170B87BFC8572DC9DF49AD63694311EF1334444BDF0B4CA3245271C1F7A4D7FAF1 -703E3AA0E1EA8D5C6E821B28707EE0C9B4F22F23796FE87356C58AE2CADC191F4C58E1FB58DA03B4 -5A25AC95DBAE13A293474217BDB214742B9D9D6AF35F70FED2891942EACE3E625E55FFB820543FBB -250A062D3D395BC0F219ECFE0D76686AC148BC41476A887BC494DDBD396BE200FD3E03CFA12EC9AF -6B934A283C42AA05589AA6B4A8D16946BB51F50419CABECEAEC5AEF9085C9989289E9B46BAFB6FB2 -782D84DE2B068F91A9744AAB237CEB1BA513E57E4C307108E993C972A3E0A898D5A8D27833155031 -FDB98863C3BE7FEF3004CBAA5CB60A1F2E3EB4D7290FF5FAFA088B1CECCB6CF51A58DAAD998F0839 -6CDFD68F5ABC9C1CCB8F6514107773C69C26873E889D1F79D10E866910E4684186FCD71C965ADF62 -39BA3418B313A27AD632300969B6F284519366ED85E7CD968D64823F8C59B5911A72D0A20EB72B60 -3A61E36F52F256FFCDF706B4560B4DFA5D918FBC530D83A4B3C01BDD3CB4572E24242D141BF9E775 -36693A0407D002E09CDA5B195BF1CCF430AE9824C07928A050D0B460F2704BE8F9E647A4884C4567 -0A81EACF7CC038643EB0FF18A376FF6F32B6FE4F197273327FBBDEC6443A299CAD4B26F7778A99F6 -5A11BDE047153E764039EDB251936AA43DEE50DDFDF8856519056AAFC4C5AE6F2051AF0579A9ACD4 -1D00775D7DBE70022CC263DCA5E0A25B9C7C4F5C418587666B2FE24816B1E0EC92F9074F1403BB83 -AFC3F1D52CA79C387BDEF864366E34C90BE52F7AA09935373A07E4E026224E76F9EC3CB9E7EDE50D -EFDA48248D61F3CEC880A3B8843306375D9711E58645F3625BDB8E87052DA67F9794EF4AF8DB0BCF -E00677C3A26907DC651BC838C40EC39E2B5A5DC0DBD345944A6C32226089D63C52490FA10B215AE7 -03CFB663EB8A47793B84CE7364DA1C4E7FCE32DFEF09490121222774915BA59C78C2275F829D15CF -4D8686B095C38C731B83D48738C25F40B8ADD487C350A2EBE846C3916AE384CB1050F9F5DFE09FCB -D9129C6270FD86D55A459618FDFA4F907E6B4746196BB717865AB378414029017551161A52E9D24B -E4F7EED553A927933D4ABC8F25DF607779A717909CB4D810DE8F5762581900E224E4B91598149BA4 -71CF8068ABE8744356B261600BFCC57FB8BE45036CF6571D9B2A95304933BD4F17215F8EF53F8E08 -1AF61FA7F9583C34EB5655CB0ECB82246959F09091F36989EBDD646BEDCA614B9A61AB7696B3FF18 -1058A150FA6EC1BE2EBC7F64357A3FF2A2B0491D2F4E0B970DE5B7788B467CA678039B5EF55C88A3 -84578D427FD2CB16C87B0BF0A3D37CE8ED43E0F049AF2436344D5F47C948C632C94A287509282561 -6C64C5D262FE5B24916FFEE982A69A6CCF888BD01D62EA591EEC51F4B7DDFAFFBEEA93FE08D736C2 -0129E345D06B10246A5F57151C198D407730713F32299638EFBDC01367E23EB59AAD42A83AB41B43 -2DB462652E29813740F4680A5D4BD47B18328FAE6BDF4200CFA4CE3773809B45E8887C9B2E423698 -9F6C48D64F5986F563D9A7538A8716082F81936AEBD0461E6F4BD470436D8B7656F0FDF89108E6DD -02ABDEF907731D458D690BC608EA9CED09EB1E6E64C0790C7A2378201CE997FFE0317679EE1D4EE9 -F91157449323E53B4ADA8096CD628B5861BF794543A98F2FA2AB54FF0F25A13DAD43DAF9394329B9 -5AA53CA32749FECB0B2BC035DD1EBD53FF9FB5AD8BCE06CD89E5568091C1CC314CFB1D9821D7F9AC -7C55F55E0A16E39A87D43148201B928F3C42B110FC056189DEF183745F3B637441DE8BD4C3C7EF12 -F4258E306B2877ADAEC63441010750DB4E6269A4C78A0AC01BB3603C386651FE814031CB5D8C1F14 -9EEAFF652A53E57BBD4C8C0CE36A84A319A53BC1E5FD3F1ED1EE72F4C1A9BF264B594062FCAFB22C -C1FDE3F2E3D3C17DD3F7FE0E15EBD812D550227C06D01127385374A11438ABD50048E17255FCD2BB -85122A6FB9B7DA9D5E9DE8A747FAE0DA45A1FCEFE92B9E70A5B2CAC668D4D07527A5C1403267D823 -048BE671F725CFC7474B44FC5AAA348420B2D7C23C6CA066666FD6F2208E329878D90CEF1C2E77ED -22D3BEBB9D547810B189F08920A27E7107F208591A84D463CE2576C70C3DFE6643E4EA93F4E1DAEB -41D46F0E2F56FC10C69AD5034FC9859D31CF27A3A1EE256C93111F81C11ACF1FC0CE20B90BAC9AA3 -27A5C85A7985B951519FD4B03C40BE637162AF41B2FDA68F0D1E9B7602FE2659D3D75955C579AC51 -DF6A552EB9581AC3F712F083F19B52A6C4F560F36C59CEEB0C996AAF1728A2AA45DCAD79BD7B23AB -388D5B0B64A2B95154B6259B730B0F4A72C8C7F7CC93C7D64D9D8810D1F63FF8ABD4DB89824E2D26 -4FDEE916C41E299211DB1A53256E1DB5CDD04862F034D9404B73183A99D3D13D642A663F129B6D16 -7095BEB4EAEFD03DF2FF2F0B6B594C1EE90FDB203DA89FACEE23F1BA3901FECC75FE1811BD701259 -343011262B6A0A9707AAA6316BC3C17F787BB80AC8DA5AAC942D90F80C5A3BB59E47EC767244AA95 -C63E50BF809998957936D3BF6ABC24B0A397258F9EB4DC8F65692CB023D9091FB180C69498CD0C08 -BBEBADC84A7E0016E8F8BEA325D924EB0DF82E75D2CC2CCBF039B11934363D4332C5FBC5EC556BE8 -5EE4E707CC2753CCC43D2ED50558E51A104221C9323CDCB0199B7B83454DE3FDC810D0F362C0299F -5DD981B31D8E3DDA284FEF9DC8F9C8DE138D3065437A7FE8C30572AD06D62E8527AD37AE39AAB0B2 -25F76A25F6C6505241ED73BA494CF923E919F688DDEBF193E188F8C4C154F21631080763B4D091E8 -AD1D2FD6649E0CD9360E8D1A67A5B5FAFC67547CA31C95A5EA8D4EB5D68B9F6D6532DB9B54584735 -9558542A2AE58C09F3BD2918EFBE1699E9C8F2C2A11EA4D224C726D2ACD4A8D8ABAEDC6588CF2AE5 -66528B94F55B823A2A1F7BE19000F3E7579D094E047075DF18C8C868760295533B26EB3ED90635B1 -29C17ACA679C3E88B06998CE5A7A2544B700229F5A6A504BD3E45B276471959C8A3F81917A534287 -39B5EF9E3D463B3BA7318448E2A3E79520D2D245A2A72F31FF7070B6E4624E3A5E216BD103640C8D -F387E49D732529C611F8B971073F17EBD2F6EB18F9B74A67E1997926DF178D4C9EDED435B9682F1A -279C81BB9F60DAFE125845A2FF3B02979E5481C78A45C479BEFB9FEF3CE2BA9BC46C77B50B03E48D -A6D17B76F06F3AD118371ADC69E178C52B5FB4B261C9311874ED07DD6D5B3226A005FDD7A6D53848 -09E7063F036CDEA41619122635E835D2D74CBB6AA9B38CAA4D819C26E95115FE0DBAB4198FC5838F -2C91B7A87B07D734C6D4F4F83444C1E90AA9BFC908A2BAC4B3DEF9157AFCA5248F2DA31CA87BD363 -AC25E9E77F741D4B2C6E02F04987A6F49D30E9038CEFC41BA172DD675AED8B392164411144E5B738 -F3210B0E66B17A13CB9631C33D44484E792A7C082DD0A5382F34C5637653261B1EB6D2035B08B4D9 -1FA9AB770CAF40A103629511F7B43F2743D7E583433DECFB19C21FD4FD0AFCC22A4119E77C87BFE6 -FE50068B22479015BE5A9F06BEAB4D37412E062A45E0CBCD7BB39FEE747E96306F79FC4F2E8942DF -5D9DA0E55AACCDA547DA19D30B8404FA121298B44C9CCE198C708C69A8D6BF17591C5C50D3FC5BE6 -961F7ABA8F366DAE957A1C3730DA4A5B4F035A9274675EE3BBF0CA8CE9D8349F50CABB1C3EA4948A -BE6F9F143592F1EA95404E6909A909168E3279A957AE1924245C356331A75E7008BEE92BEAA304BA -40B7C3F48F74D9018B3247DF50EBD7CE541DA48ECCB1B0BE51A455C3C13C279D4D8676078C3EBE43 -08748D52C9B041D3E7244C745B1F2F742D010A9E60695F3EC4FDC1050AC082B905D6A57E8F407A3B -472F731011A5798965B7B1A307E252FE02C8F79CEEDDEB6E165F1A94D7FFF18DDBDF79477F14E9E9 -3981ABD200FE7771B29D1D2D120EE79D28B9543818527039AC74085EAFF241B56D08220C958B5D9C -87C0C04A14D52AFD475B542D391BC54FF33DEF8D9484AFF6873BEED32DDA4B371112B523B6CE22B4 -0D1B416B64C9370F1CDF2C548F4CCBE9E12E21C36CC3EA52DA232DCFB65F66B22B5E2EC04852510D -5E264EE939BB67AEC4764B87062AEB7F680B40BCEE04AD45C7519EB3B6199C9E0E332661463647F2 -FB7EDF303EFEF84891CEBCF0FAC5F723A9D0476C3F8C092604C87FC69C7A90F4D64AE45A478EE8BA -2DF50FB93F55A3546123F0B0E2C1C40C98EAAE9F0F26B8F80FFE6E6B94B7E27D2884D58B8A119662 -2DF6BE608C5569D7864BB756DF2EDD184B90812B44ED4A32D001C31383A40AEEE9743651F7950846 -15C48E402DBC01C818D477EAC0347795CB2792E9C11E8FD4A02E194EED1C919D4598FEC003B6D9A8 -A0BC7D456047A1C0579453FC1D7CB2D158D466939A23D7A7B8ABED7E2777EC7487973E73F2266D9C -250CE30729E3C5223AD93B9AE8443B35711E446A3DC660123ED45CE1942A1A2AD0610467E081CE2C -8B92A6C82F0B17B5D2429E99F1A6268072C6B5AAAA6EB6283A872C54D3694CD825EB2926E57DBBC7 -C1663075E687A144E4D61C225781D80FCAE1497B442342B4A3F1CD6BDB50E31791CC3928C30835FE -F845B6BE5E2D7E3F2F5F085AA3FAEB45CAD0D76BCBB1ED859A9CEBB9F7457036F0BC3F195CB1A98C -9C8648F6583CDBB23894BC719D68C2DBD8003B10D08C8CAA40BCE784D7BFB4EEC9EA5359AC056E57 -B8B0F2EBCB1F4CE40C87FC7861180133E0CB6CE2FC4FE690756D327A2B5AE063E3021C0C0BD420D0 -56F0B941E6B36088A55BA11D0C35FD0132D5F48E5D9673572347171B4328D4807B972831C0D74CFF -A5638C145B89C989E6EC942148207D6DB82257585958034D9F9D4221C7C9F7013790DBD130F277E0 -BC88BB179DD09E27062379ED06F25EEA8B7FB33C35861A0034776E3813D2E9E5C10E227CC569AB36 -CB2D9DF2E7B7B44758F9DC4FFAD7A24AC7E9F47AA850C221048C3CB35A37CE8EA75632AE65FE3212 -175146FECD6334AE3D3C5F492F067F795E1E8FF386BA198CB74F0BB4DC0000DA383BC4CC3F070DE1 -7721431988D69C8B1A5AFDCCC83C22E16A87E01C6D3E79DC7AFA3DB0371B0866EFB8B6F88900472A -FEF1C4A878243C52D4E02E82658979731C841C489A6B97E271C4C93800EC7D91F93EB9B9C659A554 -E1FCE42A5EC65AC39190EF4B66DEAF6FC0569A000A9E1495F42F706FBEA4D32EB7EF11A648910259 -6A65CF899C2F322F5679C6D123469192A9BF1A7F1F2C81C554ADB97BD19ADB746A4F81A4D5559E60 -AB94C483DBABF6CE2F28CDB412D50FF3FCFA3B3DAAACC6A83CFED910CCB3B8D2C19590AFF4D75303 -4A6CE7F4156896A13808E0DFEAC547E69D3C886691728E4A35ACD575B40D721E8FCC5385A2EB28D7 -08101DC50811529528F5CB0C009BA7E3C88468E37768FB0D83895AB54DB2DD5426562AF9D8AF304B -F6EDA54E9C92643DF926F5C3578269750120302A37CB140A18BA56BA01108D4ACACE8FEAE640A6C6 -958EF156B588ADB0EA5F3B0F37BBA12B7BCB221C811415387B024B7076FA4403A3AD6EBB5D9C26EF -EBDB7ADE7C60B444AB9F90EA493B658B7767AE2BE649BDBB3FE85F460F1ED137C61BD95F7CD3D8B0 -15CE45138538930AB62AA0E54B4CE1A5EC5FEC0A2B28B345B67089A4E4AE14D2E1F5A9C8848DA688 -CA298F93860649EC3AAFEF3E820D86988C8E3E5A4D4BB937791827994AA3E81D0BB3EE115EC36D5F -B9A392D09E79AF514D11C7B3A03C9F9C13355CE79E119A19177FFDCA34704D38118A8976D1EE5AA0 -2D14FEB1414419F5E85244ADC5C0A765A522EEF36170064BB19FEE3B5F7B441E4DB967DAE0BAC2C4 -8FC6A836E0EF5A69F073BEE1699F55E9C757EBD6FD8B514E2B49D6333815B7DBD1E0694695FCA3D2 -1320A0C4B852D9706DADD8369A95FDD917328BE93DD33818954DBD2C212D2CA81560ED5BC284EB04 -7A5F389E24E43F4FA8C97FECF46589FA7341076555CF55B1C21B28E0C1CBB00AB8B6F67472F27BC0 -D11148F407824B0159B5188D4BB7386FBDBF1C0FAF34721B7BCB5C0FCB7C4010DCB6A1284E9D7883 -9E3C2111A05D29AB7997073B590A81C6168020F1D48951BC7D8476D5BA593F4F23CAC1F9BB0E091E -84B4E99E5C584D1370DD12DEE8DF16AF8BC6B7B23E2FEABDB7F32779AF8E2B5094A6E9B7A7225F24 -C43A8E5D2B977E1E19E633C26771E23017ED233DBB02C64F8CF03992C6484528D0C8464B46F24F9E -8380F385D5D01B8893C67FC103498983CF939432AA380CA576D09030CD52FD99BDC3BE16C7204CDC -3365BF76294A83A1FC14A236F5FE5321904E779B13232A76F8FE521F425562678436359C2461BEA5 -AB27209541F557AE2AA60009C9CA0A9FC7898C14306CE35A50017BADEFDECBBF94EE2905220706DC -806409EF87DB1D73EAB0698AD2DB72CDCDB293E7FB13C94D9FC87E74502E6927A212F0D7D2F2D194 -64F7A66AC07872E18CB1DDE8F11835DCBC5C4EF039333FFFC0FC1456DAADE7DAE3EC2EE0D3415B0C -ABB69FC5006F4D14A4EE1A5CA99AD4D5E629C0DD1E0F097B5B93DE2DD001A8C418234C9C45E8C13D -1AE04E9466DAB8CF1ECB88A4E059C111A6468D2DABB90DA79C7C79E94DB28F6968B1A632F8C57D9E -565FF91C6916026FFAC0661856B9FB8DE9C81661816221B1FC159CFEF1751E7E403F5F2CE32529DD -540792FC17A12A3DCD7C50D38EEAADBD10ADBF5D8A82442AA900CE6150EB7A4639DD9FB6E385B2FD -093493DCCD9014B23EB172E21AA89643A6CAD1093343D85D81261972DE0ACB16A4C6B5F0BE4C978B -FA12D3CAF0134F9EA49F6E9687C8F99A456745EA252F0BA9968C7F9586E3DD841AA92DC7705BDD68 -2DAE41518A09DF0E209F321D7FA3417202F4BA76A984DA3ADDBC58136885362F02F0A24EBC439B3D -BBDACFFD8498EBD29F88F016B1FEABC10785438EAC860B554525F3266097A675299AA0967BD3B7A0 -EEEE3FC578D1BE99D3533BD91571AED904BFC9DA1A1451FDC5406E1CD614E0C7FBC733563CD6CE6C -C31E9237CA153F1F0411114361D731636BCF98555ABF12848AD109371A42B63675A4130B81E97C2A -2EE2BB5D8FAE2640156001AF0F55D9D5DF8FF23C8AEFE14F120000F14149A36E5C94CD9081DEC277 -C2C34870D05011F99D48B0875A5FF542F067F7E9880109F586BCF2B50522A1F23ECE44349E539E70 -F84E207DC9BEC7CDF856A046F1A03226AA41F541719AD1AF88FF211E57DD0C1275DD0B7B47440DA0 -89B98C6EE92A7D94700B83CEBE19EAEDD8A615F6587587BA8BBA3CE3AA5E8EAFB1FB0F486BE3609B -169EFB178A4292F4C0378AFE5D24EED1CAAB514DDC66C696D8E37F294A6579131DDF5488E9436609 -ACD750C3DB0A940C84FE022B22ADC2676F62E91E8F891225F891FBA537679B24547BBBF35F04915D -20B11739F620D18B5B216921D222F15044368569AA302980B9225BB839F494588481B94B0C724352 -B2DF600A22B062561D86CB8F81514FBDAA4F8A043A0265F992FAB71FC9124A45B8475E1EF3DF6B6D -E35CF329777D45F08325E8505EC0D979F542807AE77E57E453525F23BC59A50740371EFA98678AEE -6C425374AEB745B99DDB5D8D908FDB551FBC0DB15832107BBECC4E11A1A8DEC69358A574A2ED46CC -31D564549EFF23102D92BFDCBB2BB985F78F36033E34F59C0EBAFA3BDD71338736464CEFDBA91398 -33995EDA4207BFD4A9867D32E867FBEB7DE60D132803EF9347CB17BD91315484EF6570892297DD8B -7D966103339535E28A00CB1EECA4A9775F60A9F5FC9BD8B06D78FE8E6318C31DA2E847E3F9CA587C -B01AE2BA0A2EBDE308314413F4F230A758184ED60D4F71F6CEC22A93A01B6C54E0449A3860FCA895 -4A347B7588329A80974ECBECDA1070FBC055666375229F13DD995E99265DF870BC8B8CC6347FADBC -1A6AF64599271A475B9123493D46BEC41289BEEB67EB97A8DED7A9C9730D37C65164CFBDC22E5CA5 -89D2E7954C7136EF4E084C43A6C7F361A3E96989239BDDB9A593CC2A80BA16DE9EE90E95CD39393C -212AB22EECB677FD36D34DEB46C4AD0D21BF7E6D7CBD0C8083842FCD87B18FEA7CECF939987E99BA -34C214E44DD84C176C9CC5A4CEA76D380CB316BB4EF9DE73D73B4AFD4ADB54451591DEF86621D138 -D5A0A29441502BF6C2ADE671CEC3CB5CAB903A657EB2D70C943F976C110E46C5D9D29BC00A875F27 -38E5D22496A43E096E009C5D3CB724B4CABB32838DBE527F83B18CB457E57B092C302EE557FD4F00 -DB9C56E66C9FDF4EC9FFAAB85F60D02BA79694FABA476A199A0331C30A78A92E10417BA236E23364 -8174C826331DC1BAB87C5F95027846130C6A2B4027930EBF9A97BA1B039D386FC51C302648E25980 -212F6A582CDE2778C677A01FBFB3C5D1B8A374ADAF6ADBF7DC94075F25ED66D440B3922C5F255FB2 -3FD8F6E21EA65B1D93BB225684B50F11310E242B087575973345B229BA62C1E2C35BDAEC04D10148 -F5B2F3BCF7399BDFDF1F3F79119714AEA697245BC647316EA157484ECB951BE367234FD02E8B1F09 -1AAC3D29BF282DFF4011BC0CBA8E55234D943DB3017CC7A766720BBC29B2D097A956C0F1067177F0 -12D42ADCB473CDE8D1BA35B4030757FA1D8211989DF3BD22CE5D501C21EF8708FB3449DF47D88650 -9FF7B59B76C0DBAE443F336FEE2D615D7EED1C284F14335BC8A26BF4621E10DE9611FB2F1DBD52E4 -B7565D8C65B54EA36D508BCF0C578A49A2665227CDE1F9768EFE847F9D94F1BBB7DB83701C232198 -5C7283D47B2E40B27A268428AAEFE75F6B2F8764A8494E5827573758CB9CA46FA93208836BCCC8B5 -564A69F5AD882052AF1C1417C3FA7F580569528682C77080F3688B65E7FC24D2A3AEB61574B4A321 -5927281544DDD7A6EE0A3E9388F8F631CE7251724DF70726E5912DDCCC8C652DD6C9608F8462303D -867F589DE0F2F71711B35142EE6EF93B64D6326C4DD7DC83278E057100EE772082E6BA368ED91A55 -53ECFE2293A481E42F83BC8F9148C70EACE91F7B7D9CB8A72415BDB3AF66F68EA733A17ABE9DB005 -3BF148629132969589F38D30EABFA96A01FAC72650B5A6FF3935670198A1EA33810A9B11E330EB8B -451F24F93544263436F669AB5A90A53B16CCEEAC36B1445574EFA7E802DE73522BE725E68704822C -B7D3912717333367895BBFBE06966A5CC653AAB5E9B3596702086BF0010085B900711932A95ACF15 -CA4DC45A754EA334E9EB84D6FC8E3FC4F897456BED64BB93B593549FF0D5352275D8E417172A6664 -C5E0ECED1019494A7ED49AB0B965BEC1A82E5873766BB38D7D856049CCE2FCA65AAF61E961B60634 -E2A69EF059754C9D8163D87F928C222772D070D83FEC6FA5AC734AF65E40BFDE521F7D9CB1650FDF -64754BFF21EA3FF0AF7611A93D525EC9B28C51AFECB04E7FC8323DD6C9B0D8539A34FC3CD8CEB795 -8E8EBBFED4313C77ED469C199552A9FF70BA5423B03B6148D4EAAE17B71C5B39DC436AC53D6BA8A7 -AD81AA8B02335A8B2B11E9F4FA913159A725B8AB60F52F1A2EA50EAF4D56656E615BF382CC68A690 -BF83DFF24FE986570ADC0290ED1A37C1C2AD469CE789E0EA0BB5CE01020100E729721AF3B5BADD33 -A2DAA6C33EB8F9064F5292F715F820B4BBFDD56F76D42E7A1A068C1CBDCE4640082F6E7D582D1939 -990CE6EE8D270015A2C461798B37DCB5798EE9F7512168B76D26C28BE4A49A1BF96C89D235F21A1D -B6A96E5DA474D0B19B808D13D7A11BF39EA8647499C410ED9894A1ADF33D41B6FC2E614D8087F4C8 -4E437B136F3CB32DB8393C49177A0675A0C9E7EECEF448A97AFDBE840FA01FC7E5F2E8FECEDC1884 -84C312E8635CD79195475DDBFDD4D38D5A0246DE2C7F21608F8D2C0DA1371D302E941572E5792A3C -F4E51A33228B93A814D03FD4FC223C314CF3714BB3A34BD4F7ED6348577FEED9DEB082C4049E57B5 -D3CDB7F26629E9F3BA36893E09E3C7463D02A22D7056BE76B87763260E46E48BB832B7EE13F8DC05 -37EC8E81E9BDFEAD8C27EBDF1AD706933EFD11131E12814F236EBB01BE85B7F1B2D627413B324918 -D247604F56EC128909873FEC3857028BEF76A3494364C2A7002D104D486236C30B48E2B75D851C34 -EA50BA7FFEB4E19190898AE21768C157C0CAC628A2181A32796FBC1A7271D2473CD88E5395DDBDB1 -FC3AA8DF0F3D588637F19A8B833AFDEB5F655A8838EECD684E2315B72C75CEEFBCEF94344ACE8D6A -DBE355008EC72FE7CEEAB01363A895F4E73F867639BE0A0BE67333848816B05B419221BE8F9066C3 -62C23FE85B7F392930BFE4C12B9526FF2FDEC38F23A159ED61A0718E7115C24597D849FA76369153 -54A40C965D4D72EC94DA61A03766AB39AAB684E134FD1407A5B1B19BFEBA52AA0DA5D99CBE5C82DB -AA663711E6DEBA180E1D4A39C320516A4350D296BC19BF1BE054859A0889C7E9727A021F3176FE62 -0FB0C837E4141FECE531A950C03D319E3255703220B7185BD20FE5DBA673F8129AB211EFCF36EE39 -4C7E00EB0876624BC840FA86E58B2F584754CB6BFDFD76810E300741EBE4544E5AC17413ADEB21C6 -2F66CA4F075C32381796BA709782DE34A675B717A2C7F6D88104CB924FDE5DF775B4F0B68E0E2E5C -2F788BBDEAF06D8E1FC2105CCBBD5827C0B03FD6CD64F0D073F3192D5F94839644E5EC6C5185BADC -F04112A65F49A8C83174A9AE958E76A2F5AF469E8B76C833782C5FFB8BD7B1BBBB3EA0CB7C9786C3 -BE2ADE5E7AFA8C8F20892659A59BC421E28845A108E34EE17864042EF587A6D67DECDFB3F510EB40 -D2229585347A0035670FCC76C2837A4E4D68304FE113C539B35C1F0234B5079B8E32934546982978 -C5E4DF955A454EA263C3CA5D7101F31A318D82A3F9FCB5A8AFD7A65209663B0FC9DA400B26F285EF -46D0E1EAF8ACB1F1CB805E3986D04BC585073FC64895E4DAE1CCB749BB439CB32EA91176D5C39C36 -50D10AFB9C9884D5FB90183424CEE67EF2175D01D2478D67511EC9F54F88763C152697B06D948BED -49240096EEE3D06AB4575E8E8B2CB8263B5BCF4FA1608720F52B675309833071879DF52C3EC2871D -20F398B5CAC8F8A4D41D0F1D47584DD90DCDAEA4A1CF160C4B3BF1AAB890B5CEB6CB3488672AA68F -BD938281DBC1D8BCFE92FBF514DA5358443CB6E0147254E91B38CE6787B2BB0DEDD2D38F5938737A -977B5EA42892520C58F8FBB53C994B57382379E9490F0D6970B980E1BDF8CF9F4C3C5E0A18F66E86 -EE93FFE7FE546DE50F41364BCB3721B637072571FA1779F1D672FAD260C16D7F13CBDF3E4376E7FF -56D2A710AC5AC35FCBDBCE2C9C17E523BBE6218617B13C1FA6679B308979AE7C61DA6E68369324C6 -CBC7DDEC364E5A86707266C0B459EE7B2C03FE584E529BFFDCE98C90A2F3D9305AA74D3ED8430DBF -3A49FE2ECFD9C4BC9FEFD22618FE9C8A973AD072AB6F713E4DF02DCDA7AC5359B2D652013E131B76 -B3ED6C75FD53BA58D862846264627F6B9E70D8800F6D9B32242B747A67BB2B45675840D34F852AA8 -062FA6B01E31ED24DAE02F6CF788A17F7B9368175195DB0072259CCE0FFB2C1035C1D26E1777CCA3 -D56A827C3242069E76D6DD69B653768614B9ACFF16567FEA61508D51454BC02F6C60F755AEF6AFAE -3536BBFA1823F8E1A53C41124DE983E51CEC92AEF4F99785D554488A51C20885346D1F761DA79017 -940A0C557D93F1DB6B3D00FFD61D08E96FF3AFCE5FEDF545CC9F47A2B1BB26713431D6D1E47FD6BD -6E3C668B0368241F0EBB5FA9C991DF79890E52E83A3675EE699B61BAF869DE91F67278F510061C6F -E41DE2D883F48CD0E068E2A652B244128D82E5CD52F35F210DDAE3054691ED55A7D99088AAE8FB04 -F525C2084AC09F5EDF80A4EFAFE981F74C0DE9D194320709B3464F3FF2C0F6AAEA6D973D9C323F53 -DE3D741F698FBF01036716BBD62957CB32CD81D3A2674560FFBC5BDC5C6E4F547E589AD0B1CFE14F -5E17FED1C4A8ABE4E67CCF8A49F32C4C6044F1431E1CC382E7758722A6D0DF9ED23E51F8AD14D11D -7B6428E27443715EBA4E9C05D6F238378F9498AEF0E7EE4FE6856622CC8E6ED141EE5F109E343CB6 -695C4BE1E0F66601C27975983BF557C04ACFC19227A1AD7E6C44C00529FC7EDD7F886D24B7E029B9 -C395260088BBFB96972199A7B32796D27257DE83A7402291C14FECDF7998C5C96B1EDADE0280F856 -8A8F5007852EED303969180B3329917973C2D32C080C9765B6BAB0673BC7ECFDBBFBEA980C263843 -39B7F1052591D91667D4FEE413AFC23DE2D4B9DA742F4269C6C939F5FC32A38040730A018155AD73 -3F231E4D5B9D01C03A58EAE7B5F590CCFAF25EDC8552CFC8D95C60EBAE1837D7A97CA137E9D4A4BD -2CD34AEFD68D64B3F4F62326AC429921D7FB3C235184FE0899690A0B775F1A566EC29D5830D32372 -6526F7E7F5AFDD71B77E07613DDC4FC63EDF49051AEB59E6337AC0A4B6DD872E776C9CD0CCB86130 -5322D816732124F5978A86C186BF0A0F88E733CE38E4D7C1BA5378C5629B1EFC97806059990ED42C -5CD183BAD7E94070E4058569DA2E51831FFE0D080301AEAB4350BA290318AEC582C78D05DD92E5AF -B4424EA808629BC972E68F4FF2489C245593F07555CA6A2B25964794CF31CBD3AE5C229AB9B8C298 -06C01D116EBD0FF0F159ED2D3D7DFC73EAB4910BFF5B0B0B587CD9EA6E6FC45D63C09766224D8346 -1F0588140B258B1729F70BAE7962189B1554483392988CF230AF4077193E53330519394DD99BA135 -6D4730AB221DC6A66019BFAE564893DDAD7B177DADD16ADD21D396CFA6C3DC818052E2F71149FD59 -4A16DE0C2FFDD366C99B486C55A6E991E4D22CCB15843F0C3363676AF2F5B2D1B7EF66CCF2F12DC5 -0D63776BFFB058D70A9C76DCE96C754872D72C82A0C33F90D49C935402CDD26B6D743B1F43BED5D8 -B539424849C1495DAE73044E885A7D0F307F1816DF6244A6F2D97BFD4E200E93F69B08AF39EA21E6 -E347A47CEEBF803F73B978ADBFCF056789BB8E6E2563DE87DD9A8C877157B934102DCEDAC54D487A -1BB2694F0034093C48F10A17D32E2BDD0C723CAF59ADDD1BE373AF8C9BEB4415AA5AF36310C31F24 -354A53C0B962573148BEF91D994FE3F3D8450DD4D686725799F53C373A0A3E3C060C2E1A3E800504 -9F26D716E1F381B9F83125E4683264A07E2D8938F605978E2513DD2050B3D8A1012797CBA8961632 -BED260916338A812AE751C7B657E086A0C7DDCD3BFDDFF3E48B84751925736D1310C4910FC114387 -F3ED7FE163F91895EBF55FCB425CEF5729D99BD8F2C072E36C310523E75CD8E5DE49C031C4263410 -9D56E91A46C8C8E89FD92012A00C33D0DEC52597B5C6933291A7BDC5CEDA95DCDA5600F9AE1C8250 -54E7EE1067458CCB66610704C58E4A4FC0CB5FC933D0322A716B2CD430A3AD48DAB3D4CBE9D23F2D -092368CFC4E1F5495C133A92942EC62118D45C17723646E69407B4A89DCDFD2AB3FFC099A21D9D29 -741D68270629AA3A414FE58658DC9170C247B6E23F35C4BC5FF83009F462F2EEF4DBAC5FD158A658 -57F9B6DC1F5192DFB169DCB65621CAB2F1B07BD22F4155A8E9E2B6388D430FDE5EC1C834D22EA035 -C52E1E34482EADC36B4CAE902AAE89A7284E62B3C84B608D6BD05F75BC31310B2DD3B2C08A00E073 -7F104F03A41989D5F6B9A2C38B22F1D1803EE5D7A4D8DE44E4ABD496A1DE0C0E12C4BC96D0122846 -3F0EA9CE9509FEE987139F3DD3F9D0DF4313F555BE85433718F6D05F197C41A9D9C7A8B0D2740196 -82D49F58DD5F66B12A6520D9F226D1DF1F1B65CDFA261F980CA25A92645B86B64606293F8BFDE364 -C47D2AF2C709BBE77A70A5712F2CC26F3D66F5BE2C307A48E6F887F681D30121E32BBD87271B5DC4 -615D28C309F15AD263FB37424E56DDA6E17B998B45BE6C7FC6C28E3394A8764C9EB2DF5C06626593 -B5C665D550D4600172791CD208AE9F37BC082B0B242B0A504B751B18F4D7495172B697EE217834A8 -A4FB7CC16D6F9E8BB400BE8AEB0850960283DCE725249FCC4DE97D9886745AB6066C3E2F64DD8AB7 -9AA11667F11188D7965DC11EB760B772E282DBF13249F31986AC6898FEBFE23E3E8B8D2C33E00EA6 -FC493850ECB2E6D831D1EFCA3C2EC8EE2E394599091ED58BEDE97D7A43B6F739EB0F845EAC1DF6B1 -EBFE876009CC5D804B15ED4B56761B3CE1AF59C07B49DC798A44532297AD73D5101ED47F36A3678F -818297CC27F6AAA2AACCC9AA9B6F5459911D8C56CF499E390AE607F3790450B2B9C9BE0F006EDA0C -715B5CA0481734CFB0597478E7602B0D2C1E4F78F03C68C17C70E4B42D7D2D3C95CF40F73488B371 -8E2CB05A549944D86944D78724E266C3319AF89AE430E777E95F0D792B1C654306E421F3D63A26B2 -1E74B6E8B21B2E2B9DC596D013CDA16D08E65E8F24A84B12B2BADC653E6E1110DE2E709C1C1BED13 -707B70A421B384F20CA7A9A9D20324DD383F28B2D3C7A9C53F5D4C6B7C378D26DF11CF55238BE1B2 -4FA70DCC178DAD3D35670FE4919085EB1CD905971D76A368FDFCF9D2F0A23739851A3A6D2E02D65D -54DEE69ED5D81315D3EA5E356F94EF256DD267FD1E1A9EDC9CD63E743F299BCC4A4506233B8DD765 -2CA067F741603F93250C087D368F9E9CC4CC1A6DED567487C05BAA992B0056A77F630A72008E3946 -15A9DB24FE56A956650EC9DE90A6C2259189440247970541CA198748928215C0E132A81AA13208D8 -63C1FE817F70CA573B54577D10B73100AF8EA088208A44FB92ACA314AE5879706180788C17BB1D0B -81B6B95A1C4E0F9EA66F9B39BFE12444A6446691A7BDB03E0F03D9F07A10A7598F2166F108529F34 -CD90E601FFED3479ABCFCBDE8F051C348E48C61D95B00C59EA1287423F05666C3D36288844067E83 -E14F6B5210842C742B89F13ACD126B9FC50ABE2CA7D7ED513D43B6AC7F41EEDA416BFFFCC5C844AB -2D23D4DC09B2D510504CE98D02E72020D9E669DDAA344C63A1B75632F912A1C0DA3885DA4AF7E243 -E4A4C6493D6595BB6D56B0359106957259E59E336BAAF35BD1CEC5CDE735272EBCCAE8D4904AEBD2 -B32610C6FEA2B69941D6542ECB44D71092A3CF067708A3D087AE99FF29671AB7DD8758759B971A08 -AE1BAD78270D2FBEE37AA2DCB119D72F6C7B0C8509018A70D0B0BE2C6830EF8E0B24B1CE1141EF87 -3A4D7DCC501F808BFD94E4DC0F2915AA023076BCC8006490A43685EA25AAFC187302EBDE7FE1965A -04A5A398985D29F08E085127B56B057334D88EB638A4DDE64AFD204974C3939536B1B66A54B4DB81 -151853915718F70813F096CC1B0EA25E363B49264C2AD17158A4489F91453FBEDBDE15D7B74D7F98 -E81DF23251785D58295BA297F295AA6248A912CDD4F1111E6B628EECBB5139709E76EA4AB743CEC8 -26621D08E6BC64691CC90B3C3C1778931A28D3D5B1E20E96C643316613FC487C9B604C43463FA453 -3BCA1236286E6F5A6EEB2F1D9C34BDDE4595495A365F88055D9268541CF1654ACF478D384A5496A8 -772EA1402751A093582A6625A0A44816B5FDBE166835D598644296249B92CC90AA3FD6445C9A19BF -27F59CB0616C7306070F33C7DF4E1DE64AC8C5BB2FFAC1EF2B1B30E5A0275E6004CF64BBE2C6710E -DCFC3AA4ADD60106334708862FFA6652825BC84842736E47AE6917180365C75B27505EED3C6108E9 -898A780E20C3F606A860229AC46D0471ACA0187D6D539A1B8820F620F72B41AD1D3BF3834BF48CA2 -AFEA8BF535AF74C4562DEADCB63D2F5C7585722B77C989342D190FF926C8A5263B4F25286F99CF6F -C62EE6E2AD61C82B29D82468AC10FD27764278E5558CE8B41BA111CB2F040914451A480C93084237 -CAC8F66BB7C6689F340B8ABF0150E06D5B1177278A4C08742FE22F42C28680F190900344ADFA486D -59718C25D37275BCE4DF981AAC35D2C7E85C72A0188B8953CFA516FD545AEE0BF4B8BA301CFDE214 -4241FBDF3D204E3D2823301572E23F204C97305A82401660E12926EE7BA6EA1A81FF5C007933AFC7 -3266FAC4C134ED818A48E7DA01C71A46335C845F9DA5E960B25339D551582B375814148D94CFB781 -FC56093827B78578A73D4FF67B6B87F40CFA5E3F4325D9108CDB64BD06427B88C84105187316FA29 -90B4E3E8EDB6C78ABF164F4A9717D523794B2FE772A04DABBE688CCA977090979B5F47CEB90A1DBC -167D305EAB231C9F4260C4AD10889CB785169902FC0BED78DA15B8417453BB65856EA0BEA5245BA0 -573F623D215F6C0CF801851C305B355D26B52B0B343645FE25C78A3526841EDA480919A1BBE5F56F -C10ABEAA3E1FCCA7C43EE560F067F1AA2AFD642F769D1ACE8E2AAAF38850F0D757CD808C921D716E -96FBC07DA7860DFA70CEAE2888C0ED3CBF9586443532B68DAED9A926655C157A416C383A53D8F283 -2A4E67468112A09ADC837ED8EC95F70852921F50D4417239FC42EE3624CA97F682745CC5E76CC7C6 -7BD99F2180F8C0B7FB49539C8CC474C25C0DDE491671FF329E51BCFA779346D4686835A3AD6633FC -B5E0F67E0CA9CED8F215BEF4D240453EB2EDD6ADB22278AA5B985FA140C9834D38753DF2014F8C0E -E6DAD19E8FC54C03C1F6CB0F858986691D99592562CAD95FA0A5B2ABE4A8B54B457D42E8C33A2D19 -51C0419A72FB94FDA78ECD92BD2A1416459E9DECA9469F35E4C47DB531726DEE8F203D7042EDB32F -025DF3D582547BB1D45F7A5B70D317DF4EBB16E36B0D798E0932FD2A85B04FD67143E4B287A50416 -2C1F5A037CCD780088C5476385AF8168E12D97D44B0630621759173C8F1E3006B5B1C6D7138B7EEF -C3CC5F54E24B2C3CA7B41AACFD25E554880AAF406EA4C3C6E21D3B550B040FB1952598A7E8E6488F -E38288B2AEB6C4718338598A2BFE4D2B9D14C65732DA304C16FF3E1F8F03046EF095B65FD609DA87 -EC24A69278BFE65C905CD0329F6A486B8525B7EEA4F7AE56C2633CD83543269E8ACD6D71F500D82F -DFBDE7F7F7B1AEE67328549232E26CA55085B6E84D9E2E7F74068F93A90C4654F2F396E57C5F76F7 -E61CBBE523DBFBA6E76638BBA3064DA025A79E3A294FE7F1CC28A3B4C57DD6FDC48E541A85534B25 -E1BC11B4F78019457239EAEFD4BE9007D205F1D985F389DB22400B279C10948551A6B4A17FBDA0FF -C9428B18B43DC76EFB15FC2182216F1B60B4E344A03AD6C00F141EF99F89F24C819C3E32877A927D -84C2D006940F39CA8B71E5951673EA9BFD1749923219DE38929ECAA9CE43B06CFA7DA1BBEDFDA56C -61FF6C24F40E59B13870D5FDEB82D981154FAE5D6D5152DE69339359461A41A9713B6BBE47E868C9 -33CD74C75DB71D13BAE4DEC85E02FAA14EAD6C0A253B16C79514657B15E68CCFF9EE6AA385CFF9E2 -C53D9AE40F85C793E4E8FF50B2B7420F4FE69807BC5F37C3E300E6B3C3549D1D3246A2E70F091054 -1135BDF805E0A698E236B6496702D061241687B7B8D1A0E517DF0476DA09D89667A7AB375FD2672D -CBAB8124E511502DDBD08BA04D941DF1CEBDCCF7ED48405CBCC33774A68C5212FC6F132641FF413C -984F8B43BDFD7B1A2A3435F15AF07EF4970D3E4A0BB947C181E9CA27CC14A35BD1BD096875B45873 -8CA244F88C28728B74E25CB8C4FC1095A56CA75E4569AD3082EF194ADD11350DB3B74B96761D4538 -596FF7243B1E1B724716A144106E080D42036444FD472998460CE9ABBD05B42AF9389AC452BDBBA3 -A13A96890025789F16B9D92251FD3B3BEB2C61EDDB370A20456E3BFE5F4039E2557C451C524F8087 -015BAF3FF05F51869FB97512968BDB2B49589C1C7AF1E085250A47657465F480B7023E24C76731AC -0EAB6704123D77977D3A2C4C56B691346EBE589C619C04515D34F81FC6A17527D5D8319013C5D4FF -27CC3925E24C99231AC7FB9EAF0BBA482D3B75807AC85D03CD09DE5D9AE0B07B7A813F0449786500 -0AE8A7E00080300F0AB8C399057EDDBA273DD2E1B2A0DCEFAD3B332E6D4AC1FFAD846167DFD70E03 -46DAF84AF292D4F424256ED5AC4E104F80697050D50844A708EAC9E7F7784FD01646F3BD0C595CA5 -1EE6BD607D254E78ADDC5E15C3B6AC4940EC865A5C23105B6BE09EA09F2C05D6D76960A843B81EE4 -33977FAAC3CBDA85CDD2F4DB7C28293A77825635992AF8F3B38B4480D9A139B1662345A8ABE1634A -77496C3F57597D2985E9E54717AB2E99CA35789441BCDDEDE9A9E2106B401D9684ADBEFE40D607F0 -75C179E9CC03E59E65430DB70B441D43DF03F2AA6FF06F224B6E455B01C64FB89EEC9103E48453A9 -749B4D602808C7E408A8903091D85E06AAF635D0D529C3CDD1B8479AC0F4208C284BB678A547F2BD -77BB17C86D4560434F7AD1937760A6AA55B614CFA9FF8C9C96561AE6C8F2121C4E20237428BC51DF -2099B6C49E3EFA18E6D439E6E6981E746EBB1DC461259D8EA0F8099C47CCA27B2D982B72C9A07CF2 -1B3C05D6E26E6E286E348B8944078E24809F9C5F3D014B4CBA02533F5621BFBA1F0EDB776C634746 -703C9F73BA89B1960A496420C68F54E5B901A6D733D7ACC79F275FFFB253F389AA480084468BB34D -A1E797E43B7F6E8CAF5E8C93069A3A2730E57EC39B677BB73E3F07C2055599F7062E53B37A5F0099 -907D2ED87FF7A82C95FBAEB888033BDFD67BA3A6031A4CDC56CB1E4CF5B06B46E16D988BECCEFACB -9E1C037023D7BF5CCF5D65AA66A17AB361BE7981F132A578F3ABFB97960A6034F052D9D5AFDC0679 -782EC90F240F943A5F9A3D969ED7399254FF67D89DF668F7C56FCEA1FFDCF20481474AC8495D3AF4 -B6D7EE093E369C057F0B70858220693B398ACF8E8143558132E4391405E30A73937C53402E459F4A -A3539CF7A99A3F51C0307D045DF8B77757E92EA2F51BF0BB4F77D3904DD355665870C2B59F1ED7F8 -4FC71FDD7F0B6C5D3182DB77827CA6A2060D2B8C83C4EA4A432EF43A4D0A952CC6CBBE52A9F0CD66 -1A538973DE41FFE9C5CF55F2506B9EFEE51FBAE5E63BDCF5528499A47C031163C88D3022606784DE -2F46A9C9235AEE3D4F71D4959B0CFDC5B7E78C8C0A8F9DC99440C2263DBACB343C5C648577F5610B -50EAB1CF7FD02419EF3941C7CA0B0E64EBAD4B2CB05A0793DBC38F1946D44767BD287F5E9779C611 -CA0DAAA1E7393DBE0683C8D3455CDFEBC0E64B54B737E298DDA605227C0C4BBA87AA3EC7FA6EBAEC -39E6EF2537D5974391D31739D9FC42983D81AEE44711C823F35F8E2321AC74943871739D2DBE9748 -FE68592263E7713F27E0D49B9B5CB7A4E55DE54E6B800D15856450FFD3AE5F287B12AE4F438B20AE -9E27E6CAA00F3EAEADBE08432684FDF9931E925544A680182602A3C1997DE5D0630BD5A010535E66 -E1C123013D23966B3545C7431C39B97295BFA4099D14461004C42C85095EEACB9B47C593BC6DB863 -533A8619BAE09095DE8ECA432D4DDD49AA600D277E75DC3F5C6631E2A05382CB007825FADB77438D -CFA78E252D79B6A196D5164C2FEB85D75ECA25FF80B1D97FE10E87960CA0FC47C41D3A213BF141B4 -8BC3AAA93FA86245064668394665BFD52D12C3BE4CE39EFD8111754398A944C3FD1AFA98EC337BAA -AF899D35E804CF416AD7FE45FFF13FC6354007501043F98FE8428DE8013901BA6A28711A2CA85A27 -0BB135B72F1D5026E8217581860729E94F2F1878A0E96C59E9F62714FB5F8F25003DFC7347E99007 -8A9A331CB3A6A535BC61866F02513DEB982C4A13ADBFBAC3FF70A7335F40D5489E48E5EDEDEF1619 -1973D932479C62183B0E25EE8C4F76D4F1AE45DAEA4A12AEDD9EF81D248E8D19F8C8A5BECDD1EA1E -98783EB7A38149170851B1942C96C53DE06DEF80913BFC04E539EC67C110498D15B78268853E5C72 -F485F8A27B768569E54241F6115875E2973292CF48FF91D45EBED627AE9F0766D22201B20AFDD40E -5B17CF337F2999E0BD15B86E46EB3C18FC12B7DCADCF9DD50C6C7E3F37E615A892DB3F57E250A072 -A49F7277DD6A2C8042698233D35A699B17ECA5DBDA6D250ED4A16FCC893BF0DC2E33FB1EBD7DEDEA -3C1C39603C8B7E1A5A833A8FCDD5570BD088749BB232615366687962C7E56ED089CD7B092505CAFA -5A80F503C4CF337F07ADF0D106937E25670839D491F7BFF7A523DB609D126328C16113ECBCBF9C40 -04904427A108618AE5D4ED809F8CCAF72251104C94EC5BEE21F91B179D31DBA79CEEE5EC7FF698EB -84AB1D2D1A624F58B3622A78844CE51498B2CEF38EAFE259D22C7BA61104651A862008BC1DDDA58C -C45F663EB26428DAA85E7785363A69D2790996EF5D9621D53042F42F794962FEA46E46F37B8AD1FB -76FC8D5CF2146843F8CC625139C75FB42DDA71A752BAC48F294E4C0C8289FC46DA5EFD9C91BDA6D0 -27518B7E81E8B21F755A9615627D5812ACA674D1527A1185EED4E3C628196E7D0759B1CAE6B9B7E9 -01E9599A65230F1EE469CD33B9BD9C104C44E3C1AB966C9678BD0AD78111A4E0F2D07A01A038CEDE -7036D0534D684A1562A17AD64A00F279200C0371B1CBA61747671D2A21D3F9646CA290F6B82418A9 -6FA177C6278277504B7FBA936325F5FA124AB018A15DC18D2C5E8F93CDEEA52BEEDB78A57828D81A -3E6C38B9FAF3DC4EB7273ECE3EA4482A1C6242A335862C2C3717F9C9ED95F77B140C4E1569B2192F -C7DCF702D0BC9A50428EC406F8BD0CAF886B4D979320D3E429816D88F7C7146D960AC12E70F2CB7A -9F4E3E366665AB3F1B4B6440F55EEA26DC9EE0096BB7763731740A537766490C8C174723BF0EB40C -53701AAD12B21D436ADCE22203C1053A9DC4E9F17AE617888C4B4E6F3A720E4E6366BA628221A387 -D8AB15E04AD69387C310D3528BD2FAA5B22BFF3FA494F5FBFAC4F771C9C7402B95580C5AC4BB3AF6 -92A70CB2C851FA5CF1173EEC3EC29B5A05A0B728BBBB51D3B7AD8B0AF17A1563E82FAFD93F8B7118 -1FB7AFE352874F4EC6D334AB6747519AB8E847B7BCED33EB5458A828E074E74BA621BDCD03FEA604 -7F7B6ABDA01FC7514BA1AFF0D4D0C0CB8F4E42D5A87E395D9ACDD02CCC220C157153422018725846 -009A3ACD8C8CDDB66BC6836B4026FD9F526AA275D06C813179E5924F26A25094E7BDA8BD26AFC4CE -B41D8964D4FC4AF1DFB0595BC5D6714C32F15DC7194E9A3A73013C45D8FA55CC0550A12D9AAE8E9F -F199FA28EFC2426D8D1DEFB93A65717AF3EA8E2D5B4AA8EF0EF38E9600F7D4E7D9F1D67A2E63ECE4 -789FA74B159BFE2F91C19B0378BA52E93DF12830D99553B6618645E26126842AB70262D96E35E5E7 -50ECA0CE3458B3E51BEE2F21191136DFDBCA39BDC07939E521E4F492F392DEBD029C1EA237BD89AF -76BC89F618D530160AB16269FA6B693CF14BDC4EC7C630025703C5337F61458FA09104EB15C7CB20 -AA4C9BDB7CEF3A09F25BC7F3149951A7CD75372993B80CD2112F7674CEFD6AFA764AA3486730D2C1 -897A264D82A91709FEC4A21E30D812F558451804EE6F3DEE2C4C437846BCBDA07C5B6CBA1D94AF02 -9163B7383CAC6E088AB1DC14ED3743EE77E26EA7AD3119A76C0B5F925C4DE305CD7BB3A09A453947 -5B9BD79BE28FC462D8718CE05F9D94CAF3387BA55E6E447BF81A9EDDD3A34E17BE66BC52B0C0BB6F -86F6F008829173816D205182ED2ECED319864A796AB65D4E3950288BADA94FA32B6F453AFDFC6C39 -A4FCFE60353A64627E2057D4B379D3240012B3BB0ED0C7876CB83C1BA5EFB6E2A03F340C2B576731 -F848F762A7E1CCAF267EE06D621BC33FC245D0E1547ADC12CC0EB58B26BABDB8EAE9CBFBAB93836F -FF22BDA1831DD01B7346AD377AA298D84628BF1C07433284B0A90FC89F5AEB2651BA2CEA405D4F52 -DDC0E74B871D43F71EB4ACE0D2B401F9348EAC3A2EF0AD295036BF6CF6F870D58E00B619D50EA7DD -77BC28DEF91D805CD527DCBCFDC16C042BF9B874E3B1567EBA4C1E70744B9E7E5BD1FDA6A5FF6E10 -1613FBE58DC46CFAC1A65ADAF65E49757E9304E2AC9A91E0588600C709A61D4231730073A36D473F -518A145E141D0A5A494441B9EA99AC23F60F54F8127B477E1CE698BB4129B4B1DFEEDF10D9E665C2 -47A62F112F5CA30B0AE5DBF3E495FF06EB28EB438CE8AAAD84D5F50FB56A3AF002C23BCF66ABC270 -7AC233FC0F2723DB99D2CFE7D3B3667732A531F5DC315CE74EDB9050BF75D29E6430F57CB6778B2A -CBD57DFCEF896E6766C8FC5C9F9FBD701CD62CACF33EE0FC95E78DADD205B5F42CC63024624BAA0A -B4DD447832B4E1DBA77BDFADD223989F8E958C8D759AAA37930664C6EFEC708116248A2A7AF3D656 -DDEAFD009B7F5333854608E67E5E588A857167ADF9225CF6C641F5E19C3E08678A281199EDDAC831 -B57223B1BEEADFDCBC8F6F25D32FCA2336C808162E8F381656E847FB6CB13969572425AA05AC830C -33DE6E030F86A3A85D2A66A77F103C7042C97205526DC882EA9A00EB8BD5519847EB424C15F808A9 -1652A6CC89B66A5731126DEBADE123C63D88A2E550FACDEB3886FF98646000C64B3A91078012CA30 -904B71737CEF6BECABD43DD702880538F5A70085E6CC6015D2163681067C3D513A8C66032C34A0FE -17A58AD4BC97CA69BF41F11D5E910FDFE9729652D3EA21F8DD8CC19160A8FC77573B1E9CEF4E790A -79D8AD6723B6804E9616466C935303E063DEE29CAA6C3BAEBF278B818C2EC2F13ED645AB452397BF -00DB8B26E115026E256746CD0C78A959364FDE6DEDDCD0F441A61A1EBA32C7BC172BB09512148D1E -BAC9E791B7D51B71CAD2DC9B83B2F99B3726607D9CBE58B499A13753CE87FCDCE21C0AD0528ED0EF -B9B2C927F57C78C626248AA2B835A0791244C5896686A66173EC9F802C4C633A42B086334D2A4878 -0E53D00809247BE64E529F96AD2F8B3922A6097D414DDE1EC76F9552F9B8D58B8E34F359AD792B2B -E50C26DB05035E7497162E7C49C38D3CD9B98D620AA67492BE5AFCA3A81A7080185C7F0B5105223F -1FA77805502A2E8C5FEEA27699858D84A95842C5F2FB68686D59FE24091FCDDE139B6463BC6C7B1E -0E90D20A83651AF00C85797BB9F53ECEC1675C7EE636D0D9E77DBD8F89670F855EE4D4800FF3F695 -0EFF09BBF8A0DAF6B8242840CFA5BA73BEB95115F4A78BCC02D85ECCE0C0F2EF6F328AD1DD6CC049 -5A3315B414A4D61DA50DA46D7ACCEFF6EE56451805D26B0359AF193531F95F6589CEAD6FA041AF15 -3067F88A0A2FECD135C56682DB2B45A71D1FA737C064EE9A4F404BB72A70B3AF0330359393247EC7 -81512482579865240A23CD8479F21C2C44A119EBC4E81B308DD8AA86E60C3DD8ADA50E0DFE8308EB -1A7F201EDE8DCFDA405AEFB47E0E6CA7DDB376DCB21D37F7ACC4D3E9F26B03A8DE0E8940CA3A9E75 -963A389DF8038D2C486072F61C0CEAF500753C7A6352B1CD0338D9212B42A4D3DA23D5BDF44C27C9 -4B88A415A3242FFE2E1B332477A21D2B9CE075EE479C6E657A4D8874A8C53964229310E01ED4F3C6 -86FEF5258EDF3B464DD6FFD7F1CAF473BBE722D60FB14AB4918E93878A8AE4773930B8CEE110F476 -7F42A52D9304C55BE12846C911A10AB9B2E036BF9DFD597F5348D42233315FA80D0F563C388BC253 -2103F05E90DBF1923F229F980A2F4585C7A373511372D07DCBACA583099EA972C03E5AA67E663882 -6DB134564DB993CEEB6E7A6659C7C5C05C310267D5F8A24EEC2D5CC3E3F3C808E6D6068D1A57646B -37FABD98ECB7BAF99E7D9AC4414A491A73CA34C52F394352F6B5A15F0FC4D88622DAC694699C2464 -84ADAC3B1D366AFEDE2A2CD2042C90516A666A19A91C80248B11224BEDDF1A320E230739E755D098 -B6A67315535F4C187CFA67ED817A035056353FC859BF286317996FFFB478A2248B908FF12ABDE705 -402224A3EE5F463DD3D243875C84E02DB968ECA1CC52C75171EA50D6A88CA91327A7AA5795019F36 -C0A19C093A1C9D3723C7568F9D41F2E4FFB712FD47F897703D7A620B586B81936C84AAED61D84332 -B3BEBC4F95B796B93EF7A1F565C494F8A65EDB21E2EE18DC025522EF8E599887CA2836069CDDD889 -88E5862977B7472584303198CCE97EF9F9E1446D1F1F5ED1CFC666A8A0C3A03E1792EFB60A9B4065 -49E0DEDF6ACCDBD98742568B4735A747D8E5DE21E630125AE0C691D054E42199C15B1F80CAFA6E7B -B2005F374A9A5F9900ABB7409CCD50C3AFCCAB1214E6A856F7C7EBA89BC3291801E1343DA9DAD2C6 -ED075C8ECA1423B43E587AEC67E6145272814B3F191B3C285639F9E2D6E148A02DC2CBC0E054D629 -5CD05DBAC1950400A9189316F0265B86A732D302C5BEE8ED233768F237C62600CBAAFF3A110D5EFB -6CC7CA3B92D965CA7C5E8D3E64ECF239FE2507FC797FDBE54C1112B28D4DA44C60AB09D994C5BA78 -D663A2591934CC052BC70CD1DCA3325C66C9CB982E2039F5DB70C848D3DCEF655B1C2CD0CEC8865F -E8E1C0A267BE4F707ECE6F5A3DFCA3CC1EDF92C760439F51AA69A4C1801E96CA4D6EA4AD980258F3 -D15C893913ABCE09101984C61B91D603053E49A97CB82FBA707DAE8AF1D579FD69C8481CB7B712CB -CDDB4D287BE995E32C02B399602A08B9DD849039B5673F1930BEC7BF366EB082D2CA5DB2385C8CC4 -5BE3FC0E31820191A814EBA7C4F23B1938E6C4D800732787CD2CB97F762DFC85D4B798809B5F2254 -D826CA42B32695428D120298B44CF38494E56240B75DF1E41E46E53C44DC505452256DFEC819408D -605FF14D6C1F3F152F2FEA96EA0AB3B472D8704E06BE9F8C3E8395CAADD06D6DA033E81ADE5DC3B8 -3DAFF743C6E9E48716003D358DF63CD7FD3E2F727D1F2D0C29962F76D5C95ED44B6F08D052025A66 -5785F264A3D5F5593677B630E628B5EA81FB37CFFD7A30B7FAD226B6FDC82B0878AF4C0EC4F4243A -807B9839EA62BCBDF7C2E9B30A623876E632E084EBF4A21EDA04FC88A1C07021D0C72EC3E969D449 -FEB08E5826EC20E55B21EA71EA59F6E3B0710B0DDAB3261B4A2029ECAB68C19ADD5174E55D5E984A -4E5F38F592A302FEE6ECE732DDE841A28672C620CC5D687455A5C06FA9FE688394A04F96312ED025 -B7AA6FBCE2925F3AE559CC1886BEECDB70822E2E5CA3F732A87404B1536AAC469989E9610CFA440A -CE43875A70CA51F36CB6F629D9424C1E35A88F92D5DA3CD8CBAE6E8425A36968E21F4F30349749E0 -205BFF8D552837D6FC39532525370BBAC833F75F1854C93FC533A4AA53ADF7008173A70D94A4EBF5 -38EA9E62BCDA7C20E0A073BEE2EFAC34D2EF1D03BABD5147659E50B557045B2EB89DB303749B04D3 -F54B43FED612FCC68206E001A7AFE90230D9C12F74A32C7EDB5D0241DC3A5D51481FD7C8FAE08FEE -263FBCED7C7D911B3A303C835AF5FADFD218F61A9D6DE80485ABCA88200047B094441F7767B97A24 -E8C612590FA2407BAB1E8B56C71914EEF2355DD97CFAFCC192BC06FCE063D3D9D1A629AADC75E3BF -207234C208E7E30663EDD691043065C9CBC473D97C6D4DD3DFF59D6A9ABCDD4412C3128F603160AA -D8F81C6E7A4DCAF35F3A99B4EA10A34375B477C2BF846521A7EABD4D28078E9340452A198F3F5ACC -3DB7E3908939FF6E3709C6A3FD9889439A4AE3E10B618CC92E14B68429A3AD2C80940A1079452EC2 -66F254657BE7D79A2A24084AF73F6DF71FBCD32BF6913A3FAB25F977787F7BB0C3A3E8BAB38D7A2D -B0B4826950643DD1E03BD7DD1FB149A33862A89226B7CB454DAF613128C2075470E42E70A9444A8E -6ECA526345AB48E6F5160BA23B5BDDFDA6049EC44ED1461C7E0DD514B16E2FB285F72039DE3C7982 -EFD40D7F6C8E8F4CF35AC71B467BFC578002E8D2239A2FD2C4BCCDD8AF3D7DB1F4AE7F2D2E0811DF -9D0155BA6EDE50B5F052F14F6AB884FFF244D8806C07EBCB49ED22D85DF696995991A954AA97A1EC -D86ACD76E061B7541E87997FEF0657A826BD88EF3A4A5920462C6595E7A156F453291CA044CED810 -860C3B0149BCE73BECA713040664AD0591304106129600AF71317B0D2907839CEAC99515D357E980 -B1937B6E1200AACADA205421001F1B2F91753E80D2263C56AA164A74701A8D5FD28E46480B0DD963 -A683A1F355D7FB4463C7347C94EA5E2CA40B60B56297CB22D972C5BB10E56715A955605256C1541D -9F3BC5768A6F355CD3B863F0FA1A781EDB49368F51B29481CBB41D4AEB07AF9DBE8F52C5D0FF75F7 -FB6431D37D6AED84D78C778871CB0F715B4F07580F23B586C969C81B471FF6A6C7276F7E141E02A8 -584D4B9AB00E7BD643D2C3FAAA299B1F1E25048461952EA42D4882768A70DE46B213A287F8D31AC4 -6D5436F22A796C05D1FE50A9BC2A928066627A0D87DD57A3AD91DB446404B41557D1457873482005 -EA20916BBE46C613F456C849D46BA79D20627B446B2F49E3FA309AE14F8C420CFD94922CBC0FB9D3 -5A0F7DBEF577F1849A1A80E0011DA8AC082A8C6F61658E65AD177ABDF23EE17C8CF0D26B9FA3A6E9 -4837EB9E930336889767A8D7EA3CE980A8EA95528B004957BE6067CD9BD8E02A0F23CC1762CCA656 -D33412FF45E917FD4A03EB6E8C1F43FDB0A8965A33B4FD26BC24A20B304CA817E88495BA9B361A3E -933717FFB0271F7F70C5D3CBA1E86D0F51BF3ABA194DAF32C35C796627D00C7B2271ACE2463E37E9 -7B3C826CF3DB60028F240F9452CBE08F7EBCC5FDB1BCBB3C327A9F450B9E5671916101D6E3E5E458 -CA31F04D12F592F83BADA2C3683D3886AA3B403963AB5DBE220FEC00037A745839F67A3635DFD3BF -F08F367482962DED88ECF6322852D643A54D5D303EB04BFDDEE9BBA1EBCCBA7C653B3A613A8E719A -DEBE3CE1BD7E754E5F4977E863E3C2D388A65227B451D4F3A4F94E06513CBA4AC1F2F511613FF035 -611684CCC461599000E546E4D972CA6960E095A526E4735A23421A4C9B597ECE08AFA2753592BD16 -DED93255A1E33DEECE3C5EB77B94670E8137F2A4A4B98AC193258E7DEA5DB8408A806188F2D1DDC4 -40CCF0E9A6E2F0C78FDBD7B68DD4939D2458C1965BF8BED4564B32462FFF3EC892C03B11D3EA813F -AB4CFBE8D3016329C5B7E3DFED0F08284D44AA0B7A2F6BC96EA4503E8EF52A64C22BED6B452581AE -8FF8917D53976471941A9116A2D878FB2541B561767ABD4E31CCD8A590CA03494C62AFFD64EA0A1B -C779173DAD84999C7A8D844EB1259DE7BB5B25CD023537A474A524EBE4660B22568949E624D8FEA0 -AD37F4CE1EC75955EEFA49C6BF1803BE87E9C9865FF3F6B8525B8C15FE8835CA153D27E6C0FF0CA5 -1029A7A9185D25F0F14D86FC797DCC1F99EE97E2054B9C2A2E06FDBEB8DEF6CDD368BF23A858D9F8 -C1DEFDCEAF1B4A8DE5EAFC604CECCF0D285BE00AA912EAB66EFF4D37AD2EFE34853BBFD87CE09B18 -749B489943EECAE7887B006FB827D10191DAD18466CD1F86505879310A8B171F902EA0C26A388E13 -B53C700272CEE2BFB47ACB58247C13449C6BB9D01232C32517358F1A3DE064D43C18F8827D53789C -CF3CE2EBE78949A6ABFA1A6B8414CE360A5E22AFB7D1DCE6F5A06182C3B984B4F9BB1A905A9D5A14 -83750A1DE0A857CD5C06945EB7D4A2A6BF1237F32A154FDC06D51A703D44FE052FD3C53E9E8F417B -35D1C851F9203A8997521529F21AD8498F96930AA77EBAF82EE02A57BC77C792D9F220294B45F48E -A8FD94E01CD25645D36D168923562F3FDC93CB79DD4760DA0C103C2675722D7A1B79FCB4245ED12F -A0DB52492C9CCE58B333CFEE822812F7DCA68E802C451B5CFAEBAC608B950386B6C58239D1C62D62 -4DD5D15782FC552222CCA06DDF387B373E32C3C2864C63C768350C37283760F3515A5B0AFD66C48A -B522EB3E808C061F5CD6BD96CD18C9839D30508E7D4EDB88E8F11E31E10919B16B7971F06D7877A0 -58D8A4944C84FC6CAEDF3341B48B6E0D3C7B85D710E0C35F5B5053CF4B4798B3778CC28B2DC7AE0D -F3A49F9F3BCD8E95D746C35C3F47D68B8AA35D97AA08E711B5FBE70D1A623C82541EBDC51A827D0A -69E6C049087AD26F256EB7577F58CCFFBCCBA5A95D093DC29464C9A38DE95BC6B1853963B2DEB0B5 -7AD1248D6F1625E115EEB9510B5772AAE4E3C866657DB0B3BF0E0AC345E116F8D4976B770876FFE3 -748C36165522991F46A36F193DD1A1C94713673C7E4C81582391B636C72DE94CE6254374F99B623E -5686C13D8A8322E83E11BB0B0A896C6A8C2C4F756C5385CD7017F26D23F7C3EE97372C868C8C9155 -81723BB6B76B4C3CE8998E4FA6CA40B633DFDAA59BA902A4952DA90EC4FC3CF0F2676ACFA7F76F78 -236FA2DE10FD3545357215246BB7E527F277C28B353CC6D79DCEF21BCC8F77603CDD58A2CCDDBE3A -9802F941CED8E035313875319548C41992A2BE939A17CC109426E33825AE59BCD17CB19F50D972FF -CBE7D9B4B0BB095303D9DC9D406696C2508D6CE99E11CF00F6461147E97449ED5F486D480A86D3A7 -ACECB7E9A945984724EFC21C5079B1FD03ED803C2DEAFCE3327D2D7827715FD65D9506216C88B0FA -26935E95C64114A51919D419038B1A7E9C1E829FBFB53275093752DF19891A97F3CBF7719C1FD6CB -17019A6D2D25360ECA804C4B35172662CC4769D2B785C6C87E5A4ECCE31704E59F71263B7C3CAEC8 -ACB4C7426EC25F11A0042323EE6C3EEB04284DBAE2C770BC419DCE79BD4560AEA41571C3B595F525 -60191DC7A8FBF63D413A77A0905E517441B16C2B501EA2F9E99CC38D052679F288FDF1894542E3A6 -6989A0090185EB2E75134BFA3D9147C3DB8A621D9D35E37786853779E157B47F71626D6B3E633005 -9159C17596C1B87FE2B4FF47ED9D78FA4C2160077276C8B58CEF5DC030B4A5D83CF257096C047FE6 -4DE307C598B815058E72D5F57DF5C369E664E137DE29349E2F9DCD8C9F4EBA6E765B6327D7A20DFC -B20711273FD8091CBA605C4C494248076F7E03DF65A6A50164980BBBB708741E5BF6056E6F996DC0 -7FFF408C5B8EAB8DCEC315E92873228C805D4440A6470E3EE3983758DD211C9CECDBFAA4C9300CBA -00608A4B2404A3C7AF017A3B7E67F39F0B51ACF950D3E75CC7BC2B8D3480202FA958E8EE0B240501 -5232EE0D264C7CA02C18CA45CB3C2DE322D3EB7F00F9455DB6C5B1F4E59C3E95520EC36D7D903CBB -625D70B54BF6F8255E412604BBB29FEE026CC660577F91DB1DB4A613EEEFB20CF7AE3CD89D565AC8 -38416B01B5DE4FFA5550D17FB51FBBEBE21CF1D56038863EE931B90DEC2E211ED42BA92EC244D4CE -2C4EC5CA87A026992772DC2AF754FC982B94F36EA7B7BF75E0ECE90CBB2A6AA1A012E8898BD679C2 -3CB3827C35D5D02F0569C7AA82615D4AA67518ECF668D3B57D6EF1A8013424AC2268BA0D9A74D588 -79EDCF6382A89D397864940303EAEC45A38304BA8B1CB198967AE23EB81054BE74B16909A405E8A7 -799CEE3C270FE2A6DC50BD7370B6B2C8FDB9A87D88D5D40348D3984E39C693B6F4486D994778607A -80A3122872DD65E40492107C71C3CF708A9717E9EEFAFBDDC239C53AA9645B711038E59C8B861B37 -411AB2039BEDF9CFD00F08D9C5D76154427FF5DD39878CECC5D7BFB3F1F035087185C0981F3C2139 -BE84872FFAD3408531C4EA9387B89F5E3EC779E8850D50992DFDCF9132BC551E985943B07618AC10 -D1150451F0844C0DC41D6E17EB508DC8689EC726400D5A7F6FEB3CC7BCE05F09228B7CB2C5393664 -D8DD9A4B96B1020EF25D70AA2D91CAE93AFB5F2BF0AA18CA5C599FA1A708EF35BF8F7FFEC9AFC1F2 -42870D028B2B1459063B493943EF1283829783E1010242E5CF4DA39D93D506F3892936E7D6CF1124 -70A521D397438733D053944CFF12D6FFAE8246F20618684F263715AA98E15D72A526383E05C23214 -B78338E5B476F0981D90056E6E5D0DB66B1DF2298E597B2ABE1D817E18BEB056E65EDB4234342D96 -00470B1420C9210419D834E431B82F58608C87AC361A02D0F1FE4B470A3D71E0D21BB87E1023D428 -E23D596CB9E1A2184403A16E36E644BCCF9BBDE27290485057E62827283E7380AF786BF395B3961B -A5EA469C315763FA59E0F176EF81985F38B882DE56A74D128E256D1B89939728E55A92ABA21A6B78 -44FAC1BA7BBDD8B34A18194A2984B000380FE9F672E83EFDBF276FE797A325815B0F25CC95C97A9D -ACF56D583486305D7C9E51A7E337D14E3B900333EB38FD93A99587DA2341B10C059C71CE080FE753 -3C0F059FA40E560AF9C4A41A4BE6FB45846FF8F78165E10B4AD40F264BCF5596A1E8EF8CB6EA4B1A -3A5C69059AB1563843679ECB2511A90E8898F54295649CB73D277760D8D04ABACC7BCC6E777A0530 -E2067CCBC08673F9C8C178F9D672AC8A15E5367F0C5651B53E75E0CFA57C931746AE1A679C246D7C -9417F1CD89DDDBD1173C2F880B7B3847CBCCEBF99F7122E832D7C9BAFE2B54CBAA1ED48158DE3F36 -238B76B0E67644A28AEA996DDC006F6AC0242E4B667639E7523CBC90A0561193C1AF34481C2EF402 -EE43A82E1EBF4E3D601BB36B2D95CD93550D61CEE7A94E72F6D30C32C8F91A61E964B1F66ACFC398 -7F95D4028F116E9A9A8474AA29C1C1A984BE0E393BDC41DCEF6A6F1018DB60D52024899D8EB5D55D -324D73F39BFA47377B9E15B3B06A7585589FCF52A54684173E5183367E7B0952DC4BC2767C4C6247 -B1D6103E52BC7B7EA6298F454C5D97AC575F19C10ACDFF4E10C7D3755CFAB4200CAC545269FF1D8D -B0D607C7AD47F40DDF257AB4E7D0750577003C13E4941960C3DD7B0774DDAC18E8ABAF8F53E03CBE -F6D57B44F24CF821014C064278FD51B3427593D17694B4ABCE81F49CBB984C5878CDF0C38D1ED7FD -99B0B9A3BD8D8FF6219588B3B8FA59D0CDD1D9B2F65122AB45E48F1757467B9204926140E3C350C5 -A927A2E700173053EC35D3F1DA2D7258714C97FAA857F0898917BD94625C6D1E2D77138EFCAAAF51 -7B17FE187A2212C24A881A2C6A647DEF6376ED80AE4175C5EE80921F001995B44E49F0D33DD9075A -CF33BB03671C0BCC34AD5784AD1CDFED3A6D9BA103B3DDC1CC2DE74DBB576A0277715275218CD19C -A8899209125266D8BF1286F881DCC2C383749D1E768D670F4099F7DE959EDFE852583183C9111601 -2881A56A24AAF020EA45CD5F39660DEBCE30AC1C7B8CFC60387B1B0C3E361BE612FDFA9F01B7E4B4 -A18839A2C7E0E393EBC5AD9A8A4EBC316A740C1C295D9EF5F4DFFA0667F9582C0BB837B142C4CFC6 -B1798E9476D0631111033B8BA75A10FDC800E2AB1E0E829632F869CFE4737BE9E2800759EE0831DC -7D1195EAF80555771981DD6DC6606812D92CB8EF86447F5F6C6F626D0E265C67E52A6319189EE349 -D48E49DFE6A9E98F76C414A1E3217AE0A215A17E54AA498F4ECDC50242ACC7E2322F63BB2FF2189D -057E7354E32A3ED1803116176B9B9D0129930F919E2FEC280B2C8924E49E7BB75768A2EE1DA8ADBE -D4E3589906DF1B923AEF84C1BD327438B731012E69BB0D43A1842CB88BB54EA4516477F704CFEB28 -6E3EA483445AD4D74586FCF32E96D366901084365F693A53C5FB532FBFE7BC0CADC404C4985042D6 -8DBB90A6DCDA3531EE324D558A214F935CD9FCC9A0CEBE9B5FB0323F4B3820529599EF48EE068B5A -CE85004FEA2984F0A86F5AC9D56163BBFE1142B774148F1EB0A4DC89C3349052533A7DE66729DB24 -41B82F8F7360111DACF69293C9B281A0534F3E9E9224A75C49A832F28B2E497262475507B6DDFA9F -01CA0A6696E3F5AC7EA68595EBA0C2EB8A47813FF936D84AC1B23ECA7AA2862B793CCBB0DF9FDD49 -31BEF354CEC12FBF478559FEC29F81ADF4452E83963E56541D31F3691C93A50F0BBA5E9552C4F2A2 -3A6E53060729854A3DD71CC4308B91957DB19E66AAA18FA67055A950F1C2CFF78A03BC1A588CF624 -696068068719AFB1001C4581EE072113882D9052B21E355D401ED8CD24D067B99E616BDA5A0A5A93 -36FC499632B79FF2FD0DEFB096EF46B75E2D4E0F48DAEA239719FEC4D9A29818F5875FC5041A9EDB -D26CAF0ACE14CC80BA49BBA59E918EB3D8F1E541AA16026585A2F72DF7D83541816DE46981FB3EFD -0C30E458CFAD04C79421AB7C4925E23AEA07F9F018431C790002596D26BD9663B51B699DF53E4882 -CBC34EDE88EB55045B889B6062E35FD1E018BCE785157B85EC3B9CA6C85D4B16238275385B8285DB -012D8FB7C9F5B946A41D7A0FB878FF72C39683144D8A007CFF631B43748F2D5FC690300F9BC0C837 -006B92ECEBE0605E8C3A4A400E18AE8997D1B45FEE10068E247C647CF82C6DFBE5E881D511FFA687 -B7AEB78546BFD07D5F7EC242DCEF4930D8AAAD8C6152B6642AAC325963FD147F236BB850A9966573 -9D06CDBD7CA79A527DCF461E33F22BC9C5DB00DA2BD3DDDD8C99D99793BC98282AA8872FF96C3942 -85D82D9419EB78B6AE37A5F519397700F75D624A09BD255B576E955A323E784E8FC31131F003B0E3 -024A4F58FEF2A6C043796201FC425482E1155E229D1B2D43EF7B0D22322B22EF5C9A1BE026A1C3D3 -75EDAFF99597E1E5477952A4E8D2ACF5D014BC00DC2A272FA62B6983E27D228881E2EF2B8B95A681 -CBE90C5FDE16331C85222FE2A16F0A3C3000A63E2E21666C0C119F8AF89A543D37977069A5ACF155 -6324F05204CE8CAD50FF4FB630D9CBBFC324DEDA584AA56A99D3A76FF55BDC2C2EA3A021361CCD4A -83C7A5E2768D210FA6DE889FD48A39D679C94EC3C99A8D33FF11377DA7F6F1B71A2A05B302ECDE95 -4F26773F39AC881542F0D0969C3995C3519A8EF70B4220D86BF01BEECC6462855E7B686E1AFF1CA9 -1FB8FD8B4A69E10EE0C2AD94ADD44449506F9B6EF43641F2026EFF6E605C670560C2B74706FB949A -A7E8CC6A2D0D6207E457E7FD87EC1B9092DC68B9143947CC8ED14AFDDCBF8FDDA228A76847F96802 -E561F67CEEFDE45AE587673983FC04C96744DBAA83F2DC838D633943C75DCB9E6410474EB27B348F -26E505F0AB90878940E846C5E9F3C5FE8C3558C3236B1B88C405716949B8506841CABE1717474BB7 -C30DB91CDEE33B0F844811762FAEC535BDCF84C1C747CEF9B1FA61D2AFB5A81335BC42C06A94D7D5 -9B7EDE55BCF6F9867AEE107555CDD084B7684C2C87087475A39A9DA6347BE281CE5635A4D07865BA -98CE26C1465B1AB0343F49FF37B4D0CA9F3BB693D78DC3B21925CB996A038DCC172527FE57C07460 -EF39C07D4396E7FA970D9F22ABD21A9C794B64AD96762C7428F59A8757C36D6C4FFB23216195A04C -2A2C2E7B10EF7193931544D782FEE4B91E01119C5553BBC6252270A8D8C56DD62D448F5AD8DC69CC -B45E1F17F0AA1E445129DD00F000005B23D38DE93A3BE55A4C041947F36B4E4536E307D0180553F9 -2E46B743881CB5D5386C48C7D5F84C2BCD06B9C501F78C7EE61FA23516791FCF4DB278AF688A2E60 -10A56692AD92008497487EDFE4BD5FA083FA544138B20D6940020887E35D46E093B71F7A04A67460 -DC8116B4D4839625D7CA6959D6831CD93F81AC4EA2709036DD738364FDE71113BF22EBF13DFE1642 -E564701E6F0FFE7511EDF03FE448C2B28C64FB7D54B94CA576E481FA56B2B18AF10C71F699B6BFD4 -7459CDE1869D0FD306BF489A6F42E5B2F05CCF55BB6B9526973D19CB134CA7F13F1DB3716F8CC217 -73A832568C16250B5CDB16DF24BF81D49F5B37018BD310262EA7078107868AB0216CEC83CEFCAB1E -9F2C665A31585CA04DC01879CAA79AAA5AB201B516F7052B01B16BEE5606098393B0E5D9F9E5E3F4 -EB20F63C958E796DF41CF28839F5C62A0431648745D7837B519F3AA36BC6C08EF040CCF53D9B6D8C -0C7D1A84D707EC57A3C6AC9A62AB37251A01A5ED40FDEC6F5BE6E34C6A91D058319439778A2EE5D0 -363E2E1F33463C33327D05FFC0CBF08D5BC457C7230448972FB9B4D0D782BA7DBF10D3FFEF8BF523 -6EC16D4DD6D0D870D9D5EB5C64C9A46A4F583D4F831FEE74B0E5B33A09ABFD4444929BD8F638CD72 -EAB99CF2E9551DF427683964A592E49D186F285258C5D5F62196A98532421D73E3495F82695FEEC6 -E1952C562D546B28618FFAEEBEFF03A57F4D855021F85B0C7BC37FCC6DA9AECA099B646B99D41896 -09D3FF2D56422F8C37E97640293EC7C90E3380887836F4938FBF495CAC14FBA5648D89282D8D49D9 -1AF73ED36581139D8BD42551E263E830EA3C6EB381D85C42D74C50DB0CCAEC03F535ADE92128A016 -0E811C34748309AF7604919B66CD43EB5CA975302DCB6076FEB6BDD6FF55976FE990FB0CE9ABB11B -195403FB26E3D6C6A0DE1C5BE79E171A61E21F79EE8DBE7A832519813EF6B33EA098C2C32ADEA219 -AB2AAC8B093F40000995539D1276D5F2EF84CCD099B71FE4269BDBDB6A8D59C86F7D2E3FBCCF8773 -D0FAE97640BC1AD43CB4B992BFADFB09DBD0CAAEB8CD9DA264187C4F97300E9A6C9DEED5525479E6 -05C65AE336CBBDF4E5D7F79AD098F977285E065579B748FEAA97F2A753E1F962FCAB68D72BAA8EE4 -FF6691C23E31BC0F3E981A96FB440404856AE1AB32A7205B17D411D8F21C8C93B704D07EC594422A -BC368CDA2B1610CE6A973F4474E12B78B532666797F5755D269772C9F5400B3BFC6C58395D38527E -2CCCF29B56123F7DCEF3BDE5DC1DFC5B0293BB125085B1D2D929BC3EE84F4FAD571A4991C3DEE03F -2DB3A3097E52B1A7D5C73CCB6148EAC62E8E36DE9A71C57638C6E4D5D9DED18174E8C390E50B4A5B -913C074EEAEBE390B214B3A68F02862B9A296DB4B409769649E51D738CBBDFB7702E15C73C2AFC6B -C37CE15171F4E822CF20EFE55D9F061AA43E648989628FF79E65932390CBB15D8E621333B18B11C3 -BDF96F841D7434E01AD501FEA964A75B248A35CD9DF9A37E48A1E5A09C624B93CE44F0042FA00D7F -9EE89B9F7AB785E9C718CF6E7228F743271C2C9BBA17E5208B920E44E765D99D86650EB454B0FAAA -112753AA1BD3A24239E9C5FC47EEB1547AC9D23731B8DC48B9707830DAEC60C8D3790BBA1120F776 -4EFAC542CFFBCD5C05F9510B27B2534B704ECD36C8B041FD49A96881302FFF5B0163A2DD09C751D6 -D6AFEA9170A4F4C4AB8D46E62F763FE1BDA51DD1CE4A27E772F3A2869155F762FF26B7AA6FCFA4F1 -292E56F03AAB6322BF867E7710C34D43B5D85B45AA68014AD7879EED051B1933E491496E3E26D9AA -8B80A07BF2B94F1077E84A9726F08199887D66DE7A307BF33C30DD9CF3DA188088C03B2BAD09A217 -6B110DB2C868B53DA9A66C85737BA66C93C58A259860E294AD0191E3A72C73F40B0BD98699AA08DA -F03587B78F391F3A4313C58D9F29B53C70785637BD0C58310109C54091AB0A34CBB0C478613A7AC0 -FB8F0A8B4645AC966395D8BA775262CD291136AFFDDF01C1D83DD4EB3B59CCAD18057FE7D92A8CD4 -A58F22508D9FD7CF356571F701BBB23E749BDDCBF8A317FDA0AEFD952BB18545610FFAD3AC143D35 -1B8DB3F66293375E0E50235F0D0466932181D377EDD32A5F0FFA4E22B5A0CB4F343D9A7E4A342E9D -09DFF6C697630CD3971802C277A5590B8CA94BDE6B38446C794D072BBCCB724D5BC208EEF1B018D7 -39373BB910D668882CAA779C2D686081DE6A2606417B54D7C20E0E7F722648D893E4EDBAE8F00D6A -6DA3712F91AE860C756D1127D133AB828E9D80023B50B162C5A1C5CDF70CCB3FDD7EA060ED20838B -E1E50C4094C9E79E1A0187CDF780CAF45A725964F004253E034C5BE46BBF89D94631F1A33BAA35B8 -4FA2A9D08481C6674126CD96ED05DCE48BDA069D902D6836D5DFBA701DC0F98A863E64F0E312145D -8DC0B77F25B43AEC729A1243B45B08CA228DD6101CAA2AC5ADCC8EFF84A4CA3F254176C2CC711EE6 -C273835D0FD3528ECA2A976B88E51FE347FDB60F32370B66D338931D6581630ED586F349C638960C -31AE4204E89521A96E1219E696B913DEB2AAB7A3B022D06F34FDFCB810A04E60A4FEBE284C2F063E -0AE9EDF87704921CCFA193BDC912B747E13570066223A49F1F6E2AF0D4D65DA04CA876FF7A462FFC -9C0BA2CC545C3BD36DBE762F32B2D6BE5867C59F479195C92440DC165098B74EA5C3AD93CDF2D410 -B04C16BC7801E7956F4E5107450787AA592493171C3628E6B8F49D4F8429EB98DC52EF025F001387 -BC1A7093F7A99F10B5D2D7DD8BBB393BF6E56F08F4F7FA1A343F220D5A1EAE7168C74D41BE1DC1A8 -3BD65B72B982F4F7B34F24F97F9EC9A91011064031FACFF2A14921A32024385F4E061CD07D152E74 -1BF97156D951A342488FA7F5EF934CCAD13E2753A0AB7A1F565C2F7F6B349DF03BBC25BBD972A9AD -F809BB5C5048A8CCEF9297B2ED3324D18867F293CC66E88B3A39D107B610DFE79A3B4E83A96D3D52 -A17FE8A62C9FDD271130148366942C9CE57558D023DA5F7501319EBFA33DE9E6D1E76D7C20DB8A09 -B657839DA99F3D8143F1EE6253A3295C9651FA4366547893C2DC7ABCBF4BB7609DE5D001E0A36D9F -FBE01F7D0903B3208AE8547E2E5F14EC1AF4C2535CA8F4EA37E3F3CE172C7A1E8308995B1CC23E6E -81190246BCAB6E755BF868D449BB02A2AA87C44C9CC0F571ADC72547CEECBE104BB274B8AC16DCB7 -5D5F458D356466B921ACDEEAE384E2EB1DF6EF393B41B9747F0A4FAEB4AF1928D9AD6FB7E06FDC62 -1E4C6FC98CFB43F88584BD55D9B97CC9549093EDE586912161931162B1B1D52D0443260DABA02AF2 -B4432100D5506546013DA703573FA8013685CC798CE501960093DED713FFCCF89CA2B9106390198C -29A00864108CDCC1984A8BAB53919028C01B26ECC7925E38CBE6CCA8978EE21C2B06E7B3E48FBA97 -8E2A7D186E563C088F84AA23178B60E4729EE87D67B1091F3B6973676C1CBFE6530EB773C62E2C24 -97014AB0E8B71A1F4E86A378AA26591511BEE3CF3D64C94848582E1354E1605B6457823F2C5E640A -D3802946BB2E7E8E594E8C04B430C2385DD40746CE8534F50842E74D7115F3DB0C72D1C9C607C657 -3B094AEB73B7A79876CFFC3E2F8C9FEAAA07D3BFCE05B61F7749A8793BE90CCCECA2D7077F25E899 -D3331FE161A7E86C842495D584C6E4A0880B2951D8A13B88C4672080A0B1BE36BF47C3ACE7288CFE -41A8C1BAA6F0814A947FBD6B3AA72B6C73A8C578CA51CCC96F2352316C467BB960E981F2B6485BFB -44B577E71EFDA16E7405954BC7C9F0759F5A9F1EBCD2FA9CC9648D5831A68887F41B15081A204C24 -B4B992A231DEF9E698D4C3A25B6F5474F5BE6A601F2D337A58A0D21FF37FD91EB86D1D738893A03A -69F0CD743F611CDFFE69DB2C6ED0E4611D56F803BB0DC06E7FE85A303839612707647B1BE9FAF8D6 -84122CA9E5CB8BDE2936D3F4FF254D31529D7538BBD4D35539489F9E7316F24214B996BCDCF1818E -749A71CF0E8845AA1E2A58AA62A48E02BA4564625D20AA220EE719608521D7D7A7FCA0BD8904A401 -9819D371F3F59D46C1354E5FC1A6E5F79B20CF4ACA2BF0F2DE73DA193A6F9ACBFE0B4731C4BCEBE6 -D96FE822965DE965232282A3A130361F188B3AABDA95A8A2790D9240BE008B6A6DE4BBFCADA05B67 -86B9BB8E0DFA0C30043A3B07ED46277E07B9808422C8ED16758B9C396F4EA929D769785B2C9568E5 -70A83B989B25CE200F1727D41E2B702E7F88F1784F4C83FA60A74EB26B2DA95126E508ED519A61CC -151DB6804F61826C5F86D8FA89D06E526FED97A0DB88EDB432FF32C1ACC9B622EEDF601081AF7B96 -3C9CFC1D13E4A9C74FEA0A1C8E3D8653CD92A944D4CA6B0D306619AFD503506D77732D6514F604BE -4610C2560931BDE0B40939BC1D126B0E97F72AE1B4A9252123B54F7A27E0CFA4425B4546526FD741 -CA77952B10D13E0AC2E32006A903808FF0CD013F936238C74CC75FD915244C56A8412F37F0134840 -347699508D6F3D7F3203A25B7C70100719582CD588590EE34B3AB13E255B613A6D00386A0104CC5E -D2C646F09A88888D3751651D5646C5227A3C80E8DA1B0A331121DD2429F1F4775D30564DFF47D01B -BE2C6C72CE4D1FD9A2077C04D2B0274B8916F6A9D1A4A6964A534F47CF241D5A8E34B23F85BE9ACF -FC2FEA961F277539F215F8728D6788F67BEAF45502839BCF23D8763C3949352F00C579A9A4FC408E -C625E310DAE61512DFE6844E82D36A2F81709E1F05B38AE9C222ED62C961EE63593CED7AAF73CE2E -D3667740C77B309B93EEFE1B4BA65D48575A66BE86743DC9E5D3C2FF418D11F7F211B86E827EE1DF -C3613E7498030F07050524536D1F8A94DDB6698BE7B963C55CB3F74B676CD815A7B3DF4B1A0EA2BE -1B0B9A11FFBFD5B1FA49668AEE14629316AF436A0821C20BEEF7B3480847934A99F6D85B68F4DDF8 -859A754E009428AF89A90D1852C220A607FF0806E8080726EDC94D691D214B4521C147C4273AEBDD -BB4A697EF16448CD9B2FC95293305858DECFD406B89B9F3FDAE2AC579E80CF321EBAE5701FB2F7CA -D8ED04B4A63115886D45D6120F69AEF1A21D80AD3C2D35D2899F1902242B96CD349E0AAADA40F7A1 -1282B6B52BDD97708E58DC5E2D22D1153E5FA3F3B300BCDFAF98DEC2F4E3C82A1C85F985735F3987 -4F557579F422664E07CBE19DA680EFB0FC82C323EC5C4644C51709AC8D674608A8043C91E6C7988D -430F10BA6CE1FC7FC0604FCD8F723895250AEC36CC35B3FA14FE2A0D24095DCC30B2093F2298F5F0 -A97676A0BE66C3DC9ADACFE2FC0F721A20E945AFC1096A619075D5E9A264C796EC6C90EF1AEEA8DC -089B44FFC13D27CB2370070A52D4416C53F364393E46EDD7EDE00799960CE6E0D57E4909E88ADD64 -BDD2B0EBE2D73FA6ACF8B40280DAA0637E705C65AABD523B8815F22F23E9FF81E7829C7E4BC980C9 -143AEBE1A04DC0D253396BBB7268BD5AEEA356B610D5DCEE03135E00AE34388251F31714A1C40E18 -2652C48CDA2211A22CB6F02490E69A44CECB169754C53B16028D352E0119F5D5FAE0BD7EA1CDA647 -12A6147374B64244E21E9EC9F0D1381AD22D5B6212B26C3F9AA5F6045F25DD9F5EB4489EA39B1945 -331AC70510C5752557DE21D0A6CFC1EB10A98FA867B76DA6E4249469F591FD154D39E89364A43DB0 -07AA0D7A911CFAE6CE2B557997FBC44F55A27F622BD7B8B10EC9F5D10F2649A646FD964AE1B111B3 -5B46A252C4DEE44E7426EB5739F24E8A390694597DB3A1FE7800C97E59558322F0E49A0CCE2AD94B -1E2D1026AFA771723E3F523916F55ED866C9FB4A2F759651C613A2CFF362028CDF9D38F05D4C7C60 -24C533E930B64B099FB1AF04B01F5FB9CA6867E6EFF55A772C5391831059987E10CBF987E3F378E0 -1329F73D54DC0484177D3C3C06F67397955FF1CA4EF8AD1606B70455255D631A7D6EB92BFDBA14A0 -FF28B2ACE7E81AD666EA9B3A0F5A6BA3B5DFE35044FA4B3D8ED956009C60E98CC132F2E84967F4A9 -8A67B336D5EE7CAF7DD1F74D1FA08619941361FA7312CF225D89CEF97E864C8369EAFAB94D97F056 -5505D825972B754F6729596EEA91210B75DD8F645382ACE36DE60819A02B3B48DD00F5485F9264F9 -FA926D732E2C267B0BE8CA98526F124F97EFDB86132C5EF16B103908172FC51F286FFE45FF253512 -E0033F037FF182BA536A9EB2DF2D1DB257D9C86C46E1B002FB32AC70CA9462E6EB48994752CEBCE3 -9F08ABD4F4B0889283E55500702185A841E328 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/Times-Bold-iso1252 /Times-Bold ISO1252Encoding psp_definefont -/Times-Roman-iso1252 /Times-Roman ISO1252Encoding psp_definefont -/NimbusMonL-Regu-iso1252 /NimbusMonL-Regu ISO1252Encoding psp_definefont -253 283 moveto -0 0 0 setrgbcolor -/Times-Bold-iso1252 findfont 67 -67 matrix scale makefont setfont -<50726F63E9647572652064652072616A6F75742065742064652074657374206475206D61696C6C -6575722074E974726168E9647269717565204E657467656E> -show -403 361 moveto -<64616E73206C65206D6F64756C6520534D455348206465206C27656E7669726F6E6E656D656E74 -2053616C6F6D652032> -show -220 439 moveto -<202020202020> -show -220 508 moveto -/Times-Bold-iso1252 findfont 58 -58 matrix scale makefont setfont -<20202020205072E9616C61626C65733A> -show -295 566 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4F6E20737570706F736520717565204E657467656E206120E974E920696E7374616C6CE9206461 -6E73206C6120636F6E66696775726174696F6E2073756976616E7465> -show -1647 566 moveto -<20> -show -1659 566 moveto -<3A> -show -312 683 moveto -<6C732020206E657467656E5F696E7374616C6C6174696F6E5F706174682F696E636C756465> -show -312 739 moveto -<6E676C69622E68> -show -312 795 moveto -<6C73206E657467656E5F696E7374616C6C6174696F6E5F706174682F6C69622F4C494E5558> -show -312 851 moveto -<6C69626373672E61202020206C6962677072696D2E61202020206C69626D6573682E6120202020 -202020202020202020206C69626F7074692E61202020202020202020206C69627669732E61> -show -312 907 moveto -<6C696267656E2E61202020206C69626C612E61202020202020202020206C69626E67696E746572 -666163652E61202020206C696273746C67656F6D2E61> -show -312 963 moveto -<6C73206E657467656E5F696E7374616C6C6174696F6E5F706174682F62696E2F4C494E5558> -show -312 1019 moveto -<6469616C6F672E74636C20202020202020206D656E75737461742E74636C202020206E6768656C -702E74636C202020206E672E74636C2020202020202020202020202020706172616D65746572732E -74636C202020207661726961626C65732E74636C> -show -312 1075 moveto -<64726177696E672E74636C202020206E6720202020202020202020202020202020202020206E67 -69636F6E2E74636C202020206E6776697375616C2E74636C20202020737461727475702E74636C> -show -295 1191 moveto -<6FF9206E657467656E5F696E7374616C6C6174696F6E5F7061746820657374206C612064697265 -63746F7279206427696E7374616C6C6174696F6E206465204E657467656E2E204C65732066696368 -69657273> -show -295 1247 moveto -<6E657467656E5F696E7374616C6C6174696F6E5F706174682F62696E2F4C494E55582F2A2E7463 -6C20736F6E74206C657320666963686965727320646520636F6D6D616E642074636C20706F757220 -70696C6F746572206C65> -show -295 1303 moveto -<6D61696C6C657572204E657467656E20E0207472617665727320736F6E2049484D2E206E657467 -656E5F696E7374616C6C6174696F6E5F706174682F62696E2F4C494E55582F6E6720657374> -show -295 1359 moveto -<6C276578E963757461626C65206465204E657467656E206176656320736F6E2049484D20656D62 -61727175E9652E204C6573206C696272616972696573202A2E612064616E73> -show -295 1415 moveto -<6E657467656E5F696E7374616C6C6174696F6E5F706174682F6C69622F4C494E55582F20646F69 -76656E7420EA74726520636F6D70696CE97320656E20656E6C6576616E74206C276F7074696F6E> -show -295 1471 moveto -<2D444F50454E474C20717569206E27657374207574696C652071756520706F7572206C27484D20 -6465204E657467656E2E204C61206C6962726169726965206C69626E67696E746572666163652E61 -20646F6974> -show -295 1528 moveto -<636F6E74656E6972206C276F626A6574206E676C69622E6F206574206E6520646F697420706173 -20636F6E74656E6972206E676E657764656C6574652E6F2E> -show -295 1640 moveto -<4C612070726F63E96475726520E02061646F707465722065737420746F757420642761626F7264 -20646520636F6D70696C6572204E657467656E2028766F6972206C6520524541444D452E494E5354 -414C4C> -show -295 1696 moveto -<76656E616E742061766563206C6120646973747269627574696F6E293B20636520717569207072 -6F6475697261206C276578E963757461626C65206E6720206C696E6BE92073746174697175656D65 -6E742061766563206C6573> -show -295 1752 moveto -<6C696272616972696573202A2E612E205075697320617072E87320696C20666175647261697420 -6D6F646966696572206C657320646966666572656E7473204D616B6566696C6520706F757220656E -6C65766572206C276F7074696F6E20> -show -295 1808 moveto -<2D444F50454E474C2C202072616A6F75746572206C276F626A6574206E676C69622E6F2C206578 -636C757265206C276F626A657420206E676E657764656C6574652E6F20E0206C61206C6962726169 -726965> -show -295 1864 moveto -<6C69626E67696E746572666163652E6120657420656E66696E207265636F6D70696C6572207365 -756C656D656E74206C6573206C6962726169726965732E> -show -343 1984 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -418 1984 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4F6E206120E0206E6F74726520646973706F736974696F6E20286465206C612070617274206465 -204E616469722920756E652061726368697665204E657467656E2E74677A20636F6E74656E616E74 -206C6573> -show -295 2044 moveto -<2020202020202020202020736F757263657320646520534D45534820717569207772617070656E -74206C657320617070656C732061757820726F7574696E6573206465204E657467656E> -show -1779 2044 moveto -<20> -show -1791 2044 moveto -<706F7572206C65> -show -295 2100 moveto -<20202020202020202020206D61696C6C6575722074E974726168E96472697175653A> -show -294 2201 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<63642053414C4F4D45325F524F4F54> -show -294 2245 moveto -<746172207A787666204E657467656E2E74677A> -show -294 2289 moveto -<2E2F534D4553485F5352432F7372632F4E455447454E2F4D616B6566696C652E696E> -show -294 2333 moveto -<2E2F534D4553485F5352432F7372632F534D4553482F534D4553485F4E455447454E5F33442E63 -7878> -show -294 2377 moveto -<2E2F534D4553485F5352432F7372632F534D4553482F534D4553485F4E455447454E5F33442E68 -7878> -show -294 2421 moveto -<2E2F534D4553485F5352432F7372632F534D4553482F534D4553485F4D6178456C656D656E7456 -6F6C756D652E637878> -show -294 2465 moveto -<2E2F534D4553485F5352432F7372632F534D4553482F534D4553485F4D6178456C656D656E7456 -6F6C756D652E687878> -show -294 2509 moveto -<2E2F534D4553485F5352432F7372632F534D4553485F492F534D4553485F4E455447454E5F3344 -5F692E637878> -show -294 2553 moveto -<2E2F534D4553485F5352432F7372632F534D4553485F492F534D4553485F4E455447454E5F3344 -5F692E687878> -show -294 2597 moveto -<2E2F534D4553485F5352432F7372632F534D4553485F492F534D4553485F4D6178456C656D656E -74566F6C756D655F692E637878> -show -294 2641 moveto -<2E2F534D4553485F5352432F7372632F534D4553485F492F534D4553485F4D6178456C656D656E -74566F6C756D655F692E687878> -show -294 2685 moveto -<2E2F534D4553485F5352432F7372632F534D4553485F492F534D4553485F4C656E67746846726F -6D45646765735F692E637878> -show -294 2729 moveto -<2E2F534D4553485F5352432F7372632F534D4553485F492F534D4553485F4C656E67746846726F -6D45646765735F692E687878> -show -294 2773 moveto -<2E2F534D4553485F5352432F7372632F534D4553485F535749472F534D4553485F626F785F7465 -7472612E7079> -show -294 2816 moveto -<2E2F534D4553485F5352432F7372632F534D4553485F535749472F534D4553485F626F78325F74 -657472612E7079> -show -294 2860 moveto -<2E2F534D4553485F5352432F7372632F534D4553485F535749472F534D4553485F626F78335F74 -657472612E7079> -show -294 2904 moveto -<2E2F534D4553485F5352432F7372632F534D4553485F535749472F534D4553485F666978617469 -6F6E5F74657472612E7079> -show -294 2948 moveto -<2E2F534D4553485F5352432F7372632F534D4553485F535749472F534D4553485F666978617469 -6F6E5F686578612E7079> -show -294 2992 moveto -<2E2F534D4553485F5352432F7372632F534D4553485F535749472F534D4553485F506172746974 -696F6E315F74657472612E7079> -show -294 3036 moveto -<2E2F534D4553485F5352432F7372632F534D4553485F535749472F534D4553485F666C69676874 -5F736B696E2E7079> -show -294 3080 moveto -<2E2F> -show -344 3080 moveto -<534D4553485F5352432F> -show -596 3080 moveto -<61646D5F6C6F63616C2F756E69782F636F6E6669675F66696C65732F636865636B5F4E65746765 -6E2E6D34> -show -296 634 1 457 rectfill -2109 634 1 457 rectfill -296 634 1814 1 rectfill -296 1090 1814 1 rectfill -280 2167 1 924 rectfill -2125 2167 1 924 rectfill -280 2167 1846 1 rectfill -280 3090 1846 1 rectfill -showpage -grestore grestore -%%PageTrailer - -%%Page: 1 1 -%%PageBoundingBox: 18 18 577 824 -%%BeginSetup -% -%%EndSetup -%%BeginPageSetup -% -gsave -[0.24 0 0 -0.24 18 824] concat -gsave -%%EndPageSetup -%%BeginResource: font NimbusMonL-ReguObli -%!PS-AdobeFont-1.0: NimbusMonL-ReguObli 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file PUBLIC (Aladdin Free Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file PUBLIC (Aladdin Free Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Mono L Regular Oblique) readonly def -/FamilyName (Nimbus Mono L) readonly def -/Weight (Regular) readonly def -/ItalicAngle -12.0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /NimbusMonL-ReguObli def -/PaintType 0 def -/WMode 0 def -/FontBBox {-61 -237 774 811} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -/UniqueID 5020947 def -currentdict end -currentfile eexec -E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942BF7D6DD84F1664B89 -699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED2AC419FF2B2BDE605B8EE3264EDD6641 -2D4F21C64AC522BDFC7C5502F9C3F3E5592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A2 -5032519D1868816E44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8A123E6A208511C6D0C255B9A5BB2FDEDB4D399C6CF1 -94FFAC236883767C0F68F4EF84EE696B677DE704EC3B097384F2E673A1F51692B7B260693738C211 -9F7D90FFDB21EB715FD5B8134FC87DBA320EE54C2CEC6A4D6BB350555EAFF2EC4F84365CCC0802DB -B3BD0E3F0D9F858647DD637725C2CAF9557FDF842A0DA6A0CA0F1B442EF8EE6CBF2B03858468A466 -AC5883CBBD3815B283343B39205803C02C917D06825C09E2BB14609FA32C28D720C0E14A4B12D4F1 -25FF6281FF324DA33A56FC49987AC7D3AA206540F8127273FFE9A3DACFFE2B1C269D3DB9A811578A -C7D532C2EFC18376F473FBB2B32EF642B19CDEC1D6DE83643723E3C6DFC87F97A7007B6081894BBC -45C955B7001EB36211B26AD7A3D07459CFB33F9C54A40A360CB802FD202C8E93D4DB888B325CE246 -D02D1220ABF55CE646DFB45F07CB848406E470362F80CE4C02D98DD845189877732744CC16C7F566 -9F77EF096EA55AFF98AA103EEAEFB971731EBF3782E6AB725D4E9E35B2968689E8007C038CF25B6A -E69451A4731E79AC22BD268F56942A233E52D71873E83E00A1874E04D3B22E72FB2D0671AF81C698 -53C389B51F4A257373AEBF4DE2DA1E4DA5E2CA88941F81EAE0E32D982064C8AFDD7A9A600D56D736 -05B9463C6240606B3361BAF22AF74EF89AC804A5793BD512DA2D13F4BB1B73EFCA1E621ED2A65D66 -5AAD0AD228B3B7E3D90DBDB6061E172B686E92355A7C7459D83199040A368B5697DDC3B81DDAD341 -6FF4405E1096B1240EDC18A0E9985CA55A0D697972BB11E9F1BC30765D6775BB68C69704BE200EEF -4E11B78ADDB6229D8FA49A6B1525ADADF17122C0FFF51A08AA7AED158724AC4352EBB91ED0C157E2 -4281BDC1FD610195F495E87062A8C38E0D046DA4067EE16E81BC5F87E583315B973184E474064482 -9B2A52E0D37E249BAB31988B906F891AC904D1BB8901F0673AECE60ACEDE97B8DB7935C6488ADE8D -FD898027424AA85A11A3DA494498B084133B857017A6D507D70A3421235486EB3CF7613C59139FD4 -DCB92EADC60BB6225D9CD0599779217BDAF4813A453989B2E56903F4DBB83D83DF4837C86BB4C3D3 -CCF98F07A23EBBF7AB5687C3E1E6792E40F92A7A466DE352294064537505EEF3F9C308C9EB94506D -B02CFAE289F10005A6E42D2DCE43731A7AE368564B2983038DAD6987F67062199018395BC0FCAF28 -7A2B040C71F7325FA1E9A9808979B2FEF19096B98B8A0A728EB98F2BA3D33B49E3C20BE992822C7A -1BCCA5B4E4D1099D456D8D7D83C57ECBA0FF21428024F7572A1470317CB8CBC8679A974E13D88C68 -1338C68C9AC9557F97784F4E1C8C2E61F26023ACF46232CBBDF3C0BCC5583B935FE9FA09A562129A -8927AE73988DB0F7E733C6561CA7C9716DCA9B88208A715166F2FAE6D5EFF289A9B2EDCE813403A4 -16F243F1B57EEDE7D81E10C2DA4065A3082BC92A38B2457368EEC9C3C17296CB09819E9E642D7365 -F9A6EF430FC7DD611EA5FDBDEDFA72634AB599EB666A5DC178B0A0BD1FAB042792115EF3B6222C12 -41DCE36CB38B738F68B1B3CB489FED9E53315553F3C5C3BBCE40451E47B7EA53FD3D3ABA6CE0AD22 -5DAEE734BDFA3BF1D81C1B42C6D856A05D0924E03F7627C5EB24D7FBEA3BD85716207F961B56803D -BE046E81ED5FDC378F9CA52C14FD8544CA7C539201BEE06487EBDC30FF3B28E8264EC7FD5DA7E080 -65B0A9147344CE28DA5182335875E9F8B2347A44E33DFAA167232A5C3E69E8C5B58B7C7216537827 -C936F5741B87FC68753EB0D4A466961D0050DB59DF3195BD3379F5647F8CFED35DA952D7CF2DED45 -EB442DBFE992711D22EB228BDDF36B8D7DBA27062D60D2271EA8E8412F4290B58F5BE26FF06F0559 -872F9DE4DEAABA015EAB4904BA1F509F6D517C6E897312DDD571D769BC474FD378AF4360E8B1F103 -AA75F48721B9E0BA589319E15D74AC0B03D730C3EF708C7C504787483F134EA6297097B46D2680FF -8AA50B7A255563C88D594B912F5574564A1371463674793E4834AF11D14C7991E7FDB3A6ABF8529E -1A4F10CAE79C60D37429579093DBD041ECAF03824DF9C007E96F45595A524B27EF8774A83AEEBD3A -7134AB4435C80944DEFF5C1CBA921B0A41B9651968581DA4834B3C0E6D4DE13C1E792FCEED26A72A -DC4D9E3903661D8803DDB58EB2B929CE31FC9F50A694116B00AC9F3EEF53FFDB1ACA3394BF111610 -38F39917B022394C75A0D467D64B89A44E5505DED7D9C6B8BA6BA098F140C9C00E09200EB4828356 -A2D6BE9EC1D5524B09C06D9C6FCB5E2808050A339B5E5FD4DD6C2035A48FE9674520901EDCAD107F -67AC8C8E508E6003011978D77ED225F361BC0F86A98B6120EEAFB73F7377DB1E7213E02D12C330F5 -492511B4DDE08558D75D5B8AA2D56A3111DCCD257EE96E3446EF1C76F000C8916C4CE261425ED9D1 -5B58CED128DAA6C1300466E7B152BCFB5E6FAAB2519B8A98F26B29F98133AF886A0AA7E586A090BD -A1DC6120DBB5640885C609A8BDADEEFE5DE0DA5B75A8A29E92515E86E7E66BB29581E5AFF8CB6551 -D8D1103DF60D558E7987E6F56126A13DB2C9A04886C655064E68A0A20D1B7DE24DAD22BBFEE1B7C3 -C208D4FD6A58DE78D6A0A6126EFDEE3B1A9713DEE94069A9F0A2B392A2F391C4C75327803B53F252 -CC9EF0323F84929BA4716C50385681FF5B4ED54929821594F9026B7C1297941B178C3F8A704CE097 -60533DBC6CF4B18AFBCBAD039ECB2EBDC7838A9410E7B227924BED7123944675A5DBCA388B710F8A -F6048B03DFB713F881EA0F3B191A5CD989EA150B979059C8AADE403855815D8F7980CE6288F47EAA -37C1097D33F13776F08779063C5217D7408D9835AACBE5C071EA40C9AE6DF685F4A9827B828815D8 -F3A672E73A418E5CB15684EB6C6FE0998A386E124D76620446907F993BE16FE5AFCEC681F585601E -18182EDCFD3024062A3082AF97E803C47D32229D0A24596CF7E03F18229FA631175699E2F0D60FC0 -9C4F1954C5D12D03BFB4395F0E5EB6C6877083807D91D93CA4177A6B5A8D2AA500131FCB670E7118 -73F8A3C77575EC93A3ACBA37EA117DB268CF10D04AD0F079484DB124F6DC14A50AD3B0294F7157D0 -837D8F9A6060FBCB385606066401708C041594E0396A0BE4B8B66FEA141CCE4BD29366A986ADB98D -9A6935C49C57F8CD415E93FF8AE0DF75E463E02AAC68DF064C1B789B685F84E15E512404E065A39E -9E8F5568A7D97671AE1602605FC7E4933975189837586FB1A55007FBB0E91382A629277C36A190BC -85AF49EF3F0F38D4ADD2B5DEE09916B79690EC83473C63E92CF617617A66DF472A49641DA10654E3 -AD3880D060B02A4A6C75B51E4E9917A2B6D8EFDA12D59DE5A8E222DC7E82F02F23A9D3DBF637154F -719B14114DBB102BE5EB76B441D7E9990EF6420C2E80942C8AED5A1D0B19BCE115B5929AB9E145F1 -496753DD6B1798324F5EC1D0C7F26FC3045D7BB46A14110C99BA07A45EC16002CB754C0BAE7A1A88 -EB387BB345FA70B0A38AB4D532C2DE49274D4F86F2582728A2CC54B4C09D26C0CDEB8FEE6A42885C -6207D74953CFCC583ED82DD7C0F29D35BDAE5BB251B8A2D4B1DC97E2264DCE035E359DFBADDE84F7 -37EA6A59C23D1A64D963E635769233624F7682EA34636B595CCD064AAFF3887D916867475731BFCB -F7F96D5E5E1FBE6AABF454C2F504EA4E8EB382911560195295C87793D5F7739AD7EC7176E126413C -D4D1058EBD7D6EBEE14BB94A1ECF28B686411D91E07373E891F78C4C0A05D2E8D90A8AE2614F7FC2 -63A762D0F43485473A54C31726F8547701D4A38D20565ED1707847AED9C805780F062B847E668E15 -565CBA07A72B0BA99F03FB57D26FA26FF579C30EED0AAB6FEC1B5DBEA81AA88F16F0C9BE869505BE -18C1CB79657D91D6706E2A3F0BE9920655B93EBBAE2B4D0B5DF6BE622C951F2CFA42AEDBF7AE649E -2150FE87CDBF5C2685EF36051080BF39D864573A45AE2648AD97662B1F69787031B9BC43511FB841 -55ECDC3D91E2475D072BDE6A5207ACEA1E0D2ECB1DA8A1BC4BEEC335A5C7102963E84B97BE741C44 -58ACC3D72A7E53B1F08C955F33EDC3A0DC3E7308270C0F7FF814B111459985733C62E8863625A551 -837952F3CBF32ADCFD9F345E14B585B23ECC440775310654DAF7F41E56FF45F89701292019A94BF3 -0EB2D65E14B1A1D6BF89D4CC43187ADADF3F6E03A90ED01E5D876BD3AA56E5EE84DBAA4DAD9824DE -9984BD45AF96FB8A56C010B3C3A3C6139D58E9D69D9109DB18561B55EAD6452497840B9AE90C749C -155B6329716F0152A7AD52DBD0B8A25B9995E1416681F38FDBDFA443879B5C4C25AA29E0DCC07DE8 -BB161C36D76EF286EC88D57C74BF44DBCB4FEFF771D3BD82C8F4E233357C48E516EFE3DB9E60EF16 -8E2C45B54651DF9A5ACB5F1790F7929BCB16CE5E9F6A43919AD287DBC8E12D9F9E97E5DBAA592879 -1A5A02D39D259F3CE273A870906A643CC18D86E23F115D2A35DE6926053D8C84B940B362E7DB183C -4905060316B269223DAD309EB5AC96DEBA757BEA45FA3100F77F4765334EDF3D659E09BD1A5552DA -492BE9174DD406F8353A059ECFEE3709422940A8C369919EE1F22F7C02412C995FE93DC4559D32A3 -155DD22D3526D89B16D9ADDC30CB7ADA6E52D62C5F2DFD142D4D7B6E066671EBAD08F54917E31704 -1F410CFD8A3243F8B39459C418B7B7C6494551C6F6753A94072D09E0D812351D62916383C6E061F3 -5ED864923002007E626089772D269B298DCA2CC1F25D9BE43FD8AD62D554C16AFEB7EF6E5DDA66D0 -5A810F003CDDCFD2C02FFF02BB61344968091F67D3862C1499409ECCA137B9A2A9BE314995B818AC -CDAE27ED4AD583BE29DDE4E8C2400C5F8152C85709AD2A4737BAC768FEB70CE81A92C9657DDDB2D0 -BCF9169D272A063C75C150ADDFCBC2F5F2503DE3D13231AA8CFB396DB38E80197A605F6BC20EFA1E -DE40CF424CF221218D51BEACE64A3DC88377E4F3EFE43DB4F4FC0803BF61764104CFF0B618C90311 -98B094E20B0FACFB94240B438B67BA298E31D3F4E31FD190E48BFCE27B1BE29D36E765E7D295E96E -DCE09094FAC43B87E294818FDE9363FC7DC5EA36A1497EE25762D02DFA00A9BE53F87ABE62E52ED6 -F59818FDFCA643042EC13D670DED1980413950EE43372D31AE2694B83DDA42E1FBB049F7E7B7E69C -93FFA3195A2462423DD2C022E5141783FFA07E192AEBC5070F08B23AEC9142EED56DA74F93BDB504 -78DA55DDD0A9987FEA131E4CCA0EFC51064E4B37632728261369C3FEDACA100F1AA78FB718ECE7A9 -F56296C5FB43781E63F36B0E1D34BB748EFF35E1953941F94D1A9B0FA474FD68B47183F2AC53A63F -9F1D30B9B89C5FE54C3765B43DB403D57994701C133E42B950D9BB1CA202F15B5E590EE75598FAE4 -3D5CF1546572770BBA9A6373F100CDC61DB4E5EBBE0A93E0E51C86005E333F69110B1C8E492F2BF2 -52CADD5B73E7D3EBB53E759353F1EF3C9B8B39C230D13AB7158A5D92EE4C452F81F6DFC18803280A -A023832FD0DCB482CE5AF615C952BC3F7E58F6417D69775FC7C0D5B405AAC632857736ACF32B2EE0 -F2A2C0F3B3CAD483C614505BE94706322F2A2830FC5AB592907D0291ED1873377E7A6158140C2CDB -1B0E27EEC9CA50176102200992308045CCB5A169B61EA0546778B8D280737319046716604945A21F -2A1CB9E15E3A5DB31E0FB5A3B0AFDFDF6F3424B7536D473F9756CA3694DEE4301FB1AB1AE47128F8 -D2B461C051C1B999DBB010E78DD13AFCBBA6F7D5226D540527F17881A18F551B3EEF76A7E28B4FDD -879381A2217EF2FF9F9982E9EA70AD2003B862D7C36D57C5FF9FBEAAB56040FEE973EFC3B34D8319 -1960010110BA10694C17B7635AE03CC1CD087C0B05522A7A791F0CA34022A3F5860B536D9551BDFD -BF560A07F63AA4E687407E5E48584E689591F1B52671213E430A708C06A34D2E1D51CFA6B328A122 -007C81B5EB263B967746961BCFC8772F8502DD95898724ABF369B0877F3313A167F3F714023C229C -5757D4D46FCD9B4AFECD093DCABE52B78132CE9AB6225C9A344C4BF8D96F2C50C4272CB9AA0D606F -013B2642F8C880E08EA2822C8CF5097D2CDB64932FE195ABD5FDF36D3BE123AEDD8BA2F82A8A628D -BE3ED6129DC0FDC4BE50D5574AE4FECC65062E70F4703BFECB35EADE196294FE173EA57938679DBA -6D15448FF44C0D1A903B202439DA93C0B0E612110068F8079219AA89F435E44D0464F54833BEB338 -670BD820D941DF4B31F51B895BEDF833F9C43CB7616DB80F988CE72FD3C12C7D49F740CF85B4766C -0ED398EB837695D102DEC16E24B7475A0F5DDE88FBF2D6B94F126417C811E8362B9CCC52D8891C13 -C10937AACC228D621D4712CB9DE0BAB60EDE2A97E9292BE04E42E6D3425594DF56931A61E1F96172 -6AF6E6891D63B240E6E79E5BF30C052091D681BA1102409874CFD8EDC3EE2BE331676E31AC00F807 -91D1019BB789CA4F5907F4823B002AF3581448C352BB67D80FDFFCD1C5BEEF60523330AA2C045600 -8F62DEB55E69AC2F86369FAB1ECC90D2487954E61117A90D9269A65DFBDF297EBD29C3DD1F62755F -8F289C42A534F59650685F8576EA2FC5D26B99B8E3DCD3F1FEEC73131000F99AA9868EA9BAC0B56D -AE2CF46DA6CC1D18C0AB8D77BECFF7B89992175CBA2E22779C13DB9DF53FF5B1C8FE95E164997D94 -202C37175E562C8622989B075CDCDE173452C064274354D5DB8F7D5A78D48AD4A103B9E47500D08E -DC7C51C1F3CFA7F43C3686A3C24A7EB5018B0F419961564F87E212CE0A0741AC68D6822C7AB9FD68 -85F5D0B2AC249CB7F50E2353CC4B0A6A24562F564FBBC7090C3FDF1284AB0EC615E0B3FBE132F315 -70C8A65C814F93910AA4BB80D516CB70D2E1D11969238E6F022D628FA2F33A0A15C4EF0CE7F753DF -80A8AD9494885A1B9ADAE6C38AC9DA6FB0A61696AD3A502630252AD7B574C841117D34BD20BD6581 -217D977B35F5D04E02B933E1E84F5C090F6615AF484D63265D28517BA74BEA8876FDA332A84AEA12 -E6CD82B94AE10A778CD3A216ABC08495EF319F06AD6FF8ADD237D911F846A514FDBFAA8A1EC8E0AA -9F80F11F1CE615519A4B044F3D1CF1A17D7F3D2174222A5FFA8B39F20197FF6CAF250B6ADBDBF519 -1C525070C8D38220FB501C223F493D80F498621A02EBCCD6EFE914F16B2A435D60C0A1A453E288A5 -3D818FE1EDCA7D55A26A017F2EE47A816E90D6C3FCDF0035EEA307DFB06D2BCCE43458A67354A4ED -B6E5C57233DE4FBE41ED07EE5EC77A5DFADC4032138DA9E1B74428CAD02A913E40152F8063A774D4 -FDD4070E4B8A6C089F199AF7C529C277E902195DB760D81EC655DFFD1BB283F3C5AA8BB58F2476BC -797B2892E94414ABBE96D4DB93E280CF7DE23EB852E7CA954D6682A6F1A4BE0507884C2A05AC863D -2BA73F3B54668397B6C54DC2F4183130AB414875F3C3D8792BF7E5FC4D228DF87748BF0B14178DB7 -E3FFB7891D700A1E9520D778B095DA80E4801F53442D5C073EDEB706A5DB8466FFE7E701ABA9C364 -A37169F585C883A83713A61C9C3BD9336A667EA4E3DB5F4DF6BC6A552BE8D3EF093639EC67E5FF71 -8959F9902477F5AA894ED2D1CD312ED82EE417D95C49C96671B23FB0E1738E892ADFFE62EC1C3D4C -BEB6CD089C98DE8D247DF7ED17DFA2959D3662F105E8386D75AD308480536959F8E6CF8F2C6937B0 -9F2E8137C811327D6B165ABE46C51834A955FE8306D10033F8C2A34667F13A8BA831CCF52C7A21C1 -3DB92F3E77B55CE291F6190BB1D194A33FD73151C3F61ABD2D8A0C9BDE90E796BD996D2D0094DB2B -E98657E751BDEEFE8A43EE4501B98F0CC6D80805189438872A60047A8CAA9039893530A3E5F6BD75 -BB466B25165737C939AFF3EA59BFF4A7DB09C2A5B36B8A1F0C6C5E5870C7C9412589877EF44F8428 -4B8A53B5B74315CE72D2EAFC631BC4CC2E5B71DC958B5A6350CB5F615C3A4502E973622E3E18193B -69572DEF1D02303A375ED60ABA1BC8A179FAA0F221A49078FE15AE13383585FB45FF4D5F3BB3D0F6 -D8BF62E9BD6BAB3C9A7D38C8A5AB0BE57ACDADCBD02B1DC7952D73AEF702D406F62719922BEA96B8 -FDC9B879708E794891C7A0A42F2CCD6812C3F4DB030B5178E3A627C3E77621D312CE4EBE815CD387 -7208FAD92761A5396B67E835222609F823728B1C987857CFEAAE21F2AD5EA9D841212993508091A4 -A2C268BF1D8DA1C650F6AB93995E7C13A3F84DB55748C626FD09C0DA1E3325CCB0BF091E996245BF -51EB486680162BAE63B6513C74CE83B92359938439921950D713C69324A87BCE67B45A030C9CF10A -DFA0A82781D49FF224AC57A23C6CB321F95915C5E14E41FA852F66E1E2044A9E7B1DC3BE9E818515 -D28B2C4D2F2210098C39557067062BA4239F2AAE28816D999955910298A450741947A9A1AABCBD8A -FF3530626089978C87DFC73618C044731B6DB8007739A9699ABC354A6F985E03C11D750B8B9E9AE0 -5436205FAAD1B895B159E2C90562B82A62EA1A7FFB501767DCE2B11C51D55A17529EF5ADF0A0EE9A -96D0E7E89F68E50EED813836531B4B46E9071E84AA413F4135CC882CE832BF78ECFA7CAB0C9F64EB -92C86DFCD1152BB7D4AB33831AA0C139B555967F6346068D5C3351A7A4368EEBD2933E6B9F789DAF -37EF536FCF965C397AF1B7F98AF864B301F3F440B7ACF704B59540453678FD6C1504519481893812 -3E2F47B265EC4F5CF2172D394543D84CD4281165CBEB11349B315A85DEB2D1699507B0C8C110C726 -62EA2959C4962FF093AA5EE6F21F89B3CCB0149CEFEF1855B9A48D28BB363416C015A1F4EA1975C3 -D8807F616C5817C8162536176F464A198EBEE6C97029F15F414275A39B8219128B8C8542E9483550 -7FC2D3908BB0EC375771280B9EBE87E827811418EF93E52EF70546891BFC0FB34969FD7DEA4CE752 -4D9EEFF2B46BED908C0FB2E02EFC1D1624642EAEA1CAC1EB4841E020532E88E59AC890E6C3F44734 -B99722E9816402D1D0FDF8045C5481EC055100836EBFB48E9FBC392143032C909853C9BA38A19363 -141BED09DAF02FDF4E7CC9808321CD0708A1B45270BFFCC3A0D7C27F7E781713D5DECE82C72ED303 -86B02D14575A1A6447547ECC7FAAC1BDFF332C92984758E242256C054656CDD2C45D46E67AEC6F83 -9F95D74E222A6EAE12EFAAB723A7C816D4E42D4ED2725A794743F67597F3DB8CCDDE45BAABC25726 -B851E02E56341EBE69E4D91F2A233583EC816F18A1DECBDA4AB69320F55E730617360FCFB8AC2D2B -737675B406297F7F8C4BC370CB084C22BFEC5FEF02E9AB290282F7B153F0A4B1AE569F1E52371A43 -46A748DDE09336CAD1F5337FC3D7CF0677091E59480AB15021E023E356B0E1BAC6C6471AD53625C7 -0206C338536F4D0D40733AB217E2297F86B593717C61458B6C93A16027CC886A8CFDC01EF19C34C9 -A608B95A84B6A2E31454BC03C10FA55CDCB7B1EB7DC16AC1E93981A46DECD7E7F00638DCAC568744 -69A2D9B45CBC81398727E4ED3DB5DB31965F358D8179CBF934EE2C4D652C9CC211807F070C80E3A8 -222B4C31FFEC8DFB9EE07A94C973462254BC1B1581903EE6F9AD91524A787129A63FCE048B45BBE6 -855826750C586B6B23B805FEC3E7AAAC079576949A06F422FC2C826BDB78AE96135E9E2C20C2B2EF -F6171D610B2EB8635ACAB7C5C5ED9C9FFC26CD54D2FD4CB9E4294E178CECA1E16CC8E3FC06518BD1 -6F4D63AE2B435753538834CDD9D8AE7DE624006CE688938031336351A6578C304C2E5480A3FCB43A -8BEE4953DABC30558B7790C6E7A6F0F9FFA557C50417407AC6A0DDA1E736F7070BC89455FC293453 -3DB004AA9070734C8C2608A07330E421A0220DAB99F8A77489132F6413ADB9EA637F3B75948050E6 -67276A55BEB09D4153DC126BBDBE0DB9298AC799A943D72AFB769BFA1488D311BEB86A907EC9385A -AE4F77835DFFE4389E3D9ADED1B08BBC2B1ED6084B3D1074A326CCBF38E06BD026919107BD03BD9C -30470DB779508DFE0DC82DFFD2DED749E872EB7EB9DDF509D5319865070DD76846C34E4E43691AF4 -29AA40DB4BF2CDD50B275589987D8081F7C5A0461AA5D1455A660178A94A0BA0DCB69C3CEBF5EE04 -26D6534F6F919D9795AD6A0E1A1F452AF3B4CB2EA54D6011FA809132421D111EFC51174E223AB6A1 -3596411A9723079231B050CEDAE7659CF168C39AEA9C6902C2CD37D25492CEE00096EDD63DC7643B -667FDFDE5B595DC54F0A72C2650E1E46990584C78A5CEF9BFC3C5F88CFB0C49CD6CADD9DBA675177 -D601927D75C6902B55AAED0E9E3CB52A577C887D581B3CE6201A1C77C9546CEE5A13B92963337F17 -070E2BF9F5C5E86B84225863874618AA50F4DE855DE567BF2AB7163944ED43DBD7F4BBC0E1623180 -7C43DCB47B2EB694E6FEDCFBE26194D2D9943A1BFE32AA1E5305F5E341EA021F91532162978DD1B8 -C5295A5E7551E2DEE46DC2347C6B32197AF430AF3BB676A53BCA9BD1EA88678377DC0A9A86E2AB6D -E29E3E261BFD5573C66FB5687BA9C0544D894A759866B066E1DB5C66E60AE071CC3A1C4AE40197CD -E4EC723F7B80137619DEDC99AF57A5497D6E03C1C9E672E74F48F6C213A3CFACF2699CAE72345A51 -C71C1D69348DE5BC5F443EC0EADE1E76A8A33066922CF3869E3C1D26A3B34E540DC08EA4DA2DDE3E -EB17C16790DA4EF1A3A76D71D34B788A87838BF2A5A3DB8176F9C097D2320050A79EA6C4A94926DA -11ABCDCD26DBA09FD33F30AEED977E8B5AD928F3967F607628859429DCB4ECEC7DA3411BE35A0385 -1017B535985632639D378CDCD13B00FE537A49FD9EB6DF1E3AAF5C41EBE35721FA6833C2FE08AA3C -FFC3477E7FCEBF9EF9F4DAE62FF78F319481C3F1E72999C8A493EC6EE295316B58A5CD62FFAB62C8 -96E521B678342F04BCE1613CF7F6778CBF5227BA20504500D743270771953ACBD5C6586432F3FA6C -0987BAD33B88BC6C15D29C4B3CC54A9DD72A2357AA5BAEB2CB057CDCE72DC80CC98C62B16AC50B4C -6A7641379B766CDDF990DBB2FC7F9CDBBA755B6E3DEA438FD6699C30A99A8B3178E6D613AA938120 -835E517431D28114BCA1AB745C11FE6E52ADB82B9D3D53A33BCC49740C93017D9531ECF43831359C -5C93CB0E926DB440B139E3125CC2E069B1CF6D96EF68407F32DB517242C3AE0BC6723E560B0F45FC -7F87A5E44E1751C8B7F9F669C24AD5CF16F84FB03BA121B86B0694234D8F2C9C947269AF96FCA08A -78F736E4E04ACEA44C5BAAFDE360FCD8BA6A59724CA86160A5527FD564468123D302DB45173C1B21 -6B01DC5B6D3415B13FBDBBD3121A5493374B3357EFB131CABFE5087AA1D2C7472B0377066B3632C8 -2073C6A846285CC953A8F28E131CF587B35217EE498D9A1DB57B063CE068DAF55D8CC1771C0C3099 -9CA4FDC5D67BE4E7E69418F6334BC6149000821B89A7437CCDF9A6A0ED702D5968F1E04F7E4FE9FE -C9D1E994885CB624035BBC5426CB8EDF0456828F8EEE75BE491B45FAC192A405EBA25CAA4F4C66C0 -DC234D7B417628DA5276C08260BE512B2432256C401A66E3B583E69D23E9FD278CD5F2178544D054 -16B9B4F61A88A4728AF2CEED07C08E207F31D644E8E3BA1E4E2F9D8E30936BCB9C6AEB54E37DB46B -D64F2ECC1021336D0564DF0F18E5A6B6BA470233D8D41FDD9D1079706EA685B6D8A740570BFB78E3 -984BB155C3155C69BCCCB41CB51975EEA1C1B4294CB546CFB03DC31BF86EC3BCB1977E8F94A771CA -B09DE12A82F1D6C791FA7800E5A21DF81C9C8FCDA78622ABE75B54AEEA747AA4F26D563200992E33 -7231A430137C720A17D44F3AD6CFFE63B2DE12D3184BD3E151F955786B8DDCCCB290C42718F3A219 -1759DF76371C2FC177544A6C425CAB14AAAB31628A9CF9D71B5257AFF0D59843989CF0D747375A26 -DC9ED29B66AC2147DA0168306C48C2484C70CA92F33C0C138F92F276F5EAF5EA3082A8A1CB12DB66 -1633C2F71E3B69918F509060AC949FCD52C36498A2ABB77D139DF1EB33E3B846A7C1BBDCEF5DEECA -4EF0AD250CEA9C2751E13EF7681E8FAE0491CFA6C144DBAC1FC39D39E76EB12D3EE9CA159AA77D27 -94F0C433345B135BA632F544082BBDC9471E9FA3AED3A7D465AB7158E8AC97F68B1FBC8D368E2350 -45C18EFCCADEE98778D894D96301F903283C5AE355A863BB0DC5809158F7E108662D04A5C1234915 -E7BD5B4C30F9EFA55E702E54F87FCA06FB321507BC57A1E55CC117E21AA4E3A4DFB77C1A949EFE36 -6D93F2BD827EF8CC16D387CA82AC039F77FE995BE6D9AEFC87F8D809E90C1017803BCFA1C737DAD5 -F1A631EBE6894AD20C70791665E7BC71F21C2C3F4462F60FDE75C8A377CF49BE99314663C6ECB538 -B1BF021B2F2174D2B22CF6FAD115EB0ECE8A2E64097A5FB0A2AF666E1EE13276AEC59FD0C9D4BFF2 -3F71E835984E5EEEE36490C54E077AD7355DBC98BDD37DF29B3DDF8C55480B7349C4D17322418705 -796A8C521FFF920DD11773FC44FC631C7D6E9B420D7965D7F62EC7385F2BE30A51E2D796483134F8 -40AEC71FA19ED1272C27F98F2CDC9C7E54DAB585AC1703ED08F5F9E825564902EFD08EDF99DFD494 -44C21FA6BE16CB8A1B6D0C8A5ABF80A50BB8D055483176FD0AA07EBAEAD88FD694F96FEBD60751E5 -C4D8F9BC747D4F4030BCDF9B0370B7A5E0A6923FF60DEA16EF47F886F10CCEE6956ECF41A21F7C59 -6F3BC78299A9657266807E01762B2B2878E551914CA312C2A68D34CD91E4F5115EA1FBE801346E14 -AE529049089B6B0273E258785773A9CE8E4B6C4211CB7C2767319576758F811CBAF3A3FFB41B3130 -6C49F3798B698A47BFA2E3CA0251C4D90C0B02ACA28C611744526906791D9E157E54CE4E1BCF5B68 -6990BA8AB7897D624EF00EAB92CBAC255AE9177DA9F0D86447D35B452CD2F337147B5D3EBBF2B952 -35778A72914EB3707EA78294B3A3BC4ACB19FE87C72AA1D982E4B822F07B115CADF4D3E7EE3D1BA7 -08653BEC6F0A352A0C33252ED0630E7274961896D461EE8BF523D5911BAC1C8AC763E5FB11FDD217 -4E1F129675969C195476C7A5E18A81BF9A11ED9F2336D5301E3BD32174ED5C933E8C85D6272EA218 -52A6F7E2AAB174E0965F73E0EF89E906BAFB181DBCF8B1F5AA0C12D12C6272753C016AFEC2EC9F95 -41B8757874D6F2E061ABBE8B29281677246305B3C41E90418426C575BAA216CEE3C5EC29B2FDEE1C -77C14FDF940792F48A56AE80AA33E370B037CB28A7373F882022AF378F26B6006A049FD3B35074A8 -65C97D153352ACC156992C00DE26AD21C982C71F0EDCFEB61593BB40FA5F2CEBF23C4FF34A4F4BDB -73CA273C269242D1C6117262B7C47771F2619FE5710855134A80FA8F92BB2425CF88940CA3450F81 -234ABF2B11775929B12CFF86442B2AA0F4243D324A5983E5D1829775B3C7A111D5622D1C4E2B2A2F -982FC8A95F789881416DCB34950A393F4F1720D2212F3D343A17683060182355DE9E4718506D76C9 -184F8DAC55788D7E603CFAF4907DDE965A49C323DFF425FE88C09AA4A4D16283F9B14AB9EF1BB885 -A954034710B4A9DA4C88A8A0932B18D139A687303EE562EC9F656F12F3E8F27DAA9C75DB0FA946FD -0E1A982BB58E040BFC0A49A4AD8CD668493FCB573C849EC5474049A693CBEBD4D79AC7515047CC34 -7A9A7570C90861F3ECFB57B9F53AB9C0D6B05C8C570A8F3C04D58555A45524C98FF091B8F8A422F2 -E0E9E5A7B7FF69F1CEFC13E42F1CA276BCD584516D266BA6838D5E9CA9E9854F50C7D92CAED61AAC -AF758A7C7BE59C3BAA82BF32B691ACA3E8EB171E08AD22C39FBE586A54E6E4DE2CD86B31138546BB -8DA5834B2C6E4838547A1B67E651964E43988C8036931088904BBB589CA901E7EBBC094C0DA81E09 -1915D9E46828AD8596FD0FCA39FF12A6C27A359337F973809E81B2E9E3D43B3146F2516667E607FF -EB9AC80FC95A7B7D4DED551FEE0F3561C70DB2D69ABA96673E39E3397F1C3F8FE5F48BAB8AD6E0ED -8901F90F6CFF24E80CB5DCAC498506C4D01033E497C1241E413B022227A3264DA68BC3F91B35781F -A2D018475C199F43CBA7D3A0D5697B45321BAD2C394B207136E1E16B41794975E8903EF2B2E1C33F -87CF72C325C11EC0B92FD3890ACDF60B521DA32596763BDFCDCA837ADC6F26F129B23CA32F9CD39B -33E64576970DF3C05B8DCA4BFE2F17E6C5678B84D69494F1DBA9FE0446AE6AFEAA1FF245C07916C7 -B7569E6267C42B459435A1D116CEC665B311E404171774C0ACC8DDE96B0D9167C8CC7D99C4240559 -2D745C4428755500EB4719340D2FC6BC215B67823F69FA949C08B5EC985D7AA87C9AC1F9BCC8994C -6CBCE6027B7D1E0C22A83A5DE61DBA05D4AF6884C95F46BA7F253E0B2337E312916E163CAF9DB2EC -56C5425990FE73EE53E42B3BCCA1CF642F02B0C5ABD529B568E9ADFF865B9DC190240AD78AD226ED -884BED3C285B4CB0E3929E805C67F1318D186504D92085764B70DE6AB5AB6990F181BDA50FC31262 -348D980EC76608CF08176C2502E065AC2D8EA5CF9E2D44E2B70A7DDC7B922047C471DF8A0B2087D1 -106B5BD8A830EC0E53223CE3C96EF56E5541191167860EEA58D696EC357EC55799438C90156BBF2B -13A0D5C9EE93227746654ED73EA5B9CAB61DAC5BC690F89C87FECAF9AD03BD39E438F43B81D39E07 -E0422F94E8B096AB38C88BC2E1A043811D8141C1A35DD3A6DBE41620E83C8ED3A379CD80D4F9BC30 -41BB44B933DACA7C5D4427AE94A176829F24B5968B713431CB8BD9F53080832C6B784CEA9B515687 -F121983EB9D9C9CE8BD4FA3BEC48AFE64E643B7BD86D8383D07521FE5D091392BE124CCC91113604 -3824B686988E7C83AEBF406D2DA88FD952D0FA9327F4AD04C55FEDBFBFA76ECAE8A176C516479AE1 -467125B7EB3C9E7C5B103BC0C470946346DF271F8EE19DF7E3FF7478C35EE059297F4BF21A5C7B95 -993BE6202E897776952A7ED0613A5CACAFA731FFC633CAB62963150E86EDAC796026CE02EB235B9F -7A54E0B0C5281567138A612BAFE409A818C216DA8EAC5EDF9D1E3A1E3514AE50735A111B4D2AA083 -4EC6C11E290D58FF340F82F0E079F1C7B3566F2336EAA45BF72BCF88569988DB5F65D4C1E59B50F3 -41E45A899656A0B522847ED567B49CD5284FE50E5F8652CDAC1C076804F2B2185F6A51ED19DD4941 -2E65A0D2DBC844B75E2DF71B009776D9F97A4C6F786EFFEB87A307FB6B912BB659DC2BCC6D509A9F -BDE87DE8D716040A8551B6CCFB7743978AD992D14D2B85CA052E87326138DB196C24593F8F7ECD6F -486F85D1666B9DE2ACA6C7900044EE369D223524664A2790B773F9EA26E0A4CDFD709942A44298B8 -249506EB9B77BC887DC0EF947DDDC7CB3CFC6B48F060DBF032A11884E6C226D9D447A5A458CBA325 -D57E144C6DC295262763E7BB8FF6A0CA473EB7661C12E0E8E23EA37E8AB3387B9E54686F3E57765D -4067E521BC1AFAE52394227793C737C19208803F2F2DA920B553E2AAF94EB992AB17E31B58C15CC4 -AA8A1B444DF5B3E7CD937CF03E1F7FAC63342731B4589F16939D16E8E497A74CDE5686F529E9495E -1603D74875288CF53271DB9313A4511B104F80B179FCF213558970A002E945281BF3AE51E668DD6D -13D9E85152747F562CA0B75DDEC8FE9FE31F8D05B0F59E802888A7A4F19B29954A31108D2F041367 -DEBD6AA1CAD856BDD1427E9EFE89956FE28D500CDC6A0CB80A76902A08D0BC6705583243F1DD8020 -749B257EDF4803BCAA653F7FD6D8B91690995BA5EA3EE92FCD367C11601C6B8ADCEDCE67B16C596C -5D200693AC5FA15D4CC6CE9DF7A71C8A925E99F5085313D60FAD25C1BBAAD28D4AC2B69062D68F39 -0530A976319A3904CEE44DC9451E441AAB4780425440F8C499B81460B5D3E268974145117ED843B1 -71BB14AA84C3A084A7D8E07B9979260675D5CE6534DC176DDB60DDE90F6A3674F67462EF78195F8D -FF74FB5882B079DEE31FE92816F16CE1A70D07752EA25FAF5000ADF79BBE7D17EB1BD2F9BF6CDBB6 -F078CAF97986442680A8FC4121866F9CE86C385DE34E30D8B9768A0136D9EEF79A4B38EE99CBB9A4 -D32316564C9D56996E2595753EA71BEF684834FD030D38BB100E2332B026B046316A53270A96DAB2 -182E994E91262FB03D1AFFBAD623F1689228409884F91DBA153030870A7BEB2C7EE2DEC51875B137 -33B7929041F8D23A94904BD54DD4BC9B432DD0C78DD81639F46D686FFAD39AAFBD1B6C1A37E248CE -48F23E12464D5379B4AED0D50B5A41577E6ECB75270E9AD3EA7D0FC09DAB271FB18B51DCFC0069F1 -5D72546E6C51049F3425AD005F88FD7F02042DABE9F097F9D6A076B30D8CD777B1EC12BD163FDABA -5972EAA61E3C87E9AC007A052B1A3FFE14D7D43C7A0ADC89B1DD4CB4F9C762A84A6C0701494B2D8C -4E4E1A9245738BE4111805C2F153A20ED9FECF2DCF4C8F7C3BAF84D60454A7403D4F5F81C6404173 -A7BA81BB0CEAECFD493D877465DC5735D43E3102CEC57B8A589182FC65A4704661A9E351FCCBC731 -5A87E62F65D24EEB9CEE979C6E10DBCF5C162ADB926EC8CC9BFFE381F6B8A3AC0A19D1631BEA2938 -731AFC99E8EAA39BC75DDB3A39D01AD8F0BC1838F4D674B9BEE9F6F7BE4D9C8BD97E8D171EFF330C -15B76614A1FFD25B3BE19E4A201BCC850F926ED51616318C965AD2F0E56F9433B1247C6D5B72EDF3 -D408A3E0674A509BF30BE813A5E669D72B978794683CA8B85E3469EACB167C30F7666DB5E081B81E -E99ECFBC1704B9646B1A29E4A4CE5654CA8409ADD60145DFC54225BDB8485E39CC98CBC3F38FD0A7 -97E5DFC2099452A2418C6636BD2D5F6B24345ACFA65F4E7DBD2D0AA0C1776A4920B4466C509BB5BC -7D6627946C4DCB38A27098B7B5BEEDC2B3BA18F927077F71E38644597719652037621BB350BB5369 -DCCC073954026E6438FD8393DDB3630C4473F06D9FB9E422E435566C396B12FDCD5605DFEA232171 -CD8EF298786806E9159B84599C26D4C7D8C3BB064665CDD072E2083190372AA808B2268B3FEC8878 -B6420CA829BCF995DC20E067EE6B8E44D2869D51BA3AEDD1763F7F8D2CFB8EC41E6E9E0129DE5343 -1457960CC51D546B10B8B6CE08A1C2B79FBA448DF9783D815608A16C55E589DCD8EF6B04C66232F4 -7A473973A35618000D79B8173258B7365C9691DDFE47B16EEB08B28F881828B946FB5D6FE10ECC6A -FC4EA1F762E90B3320403382E42AF4885B183AA48DB5E4DFC9A54E0B4FFBF7C26EB17A4F13B4BB93 -12234434FFF05549E7587BA0373ACB3E31418BFAF400D8938FC6466B94273D1735306AB912AAB13E -31DA3541C1733E2A7E4DA5B82767D37F3084AA7A7C488CDCA7ABEF77D19E42B4448ABBD346E9BC28 -8ABC4540C0A1CFD0BF46C5BC7454B25E27E9906A3E6CBF678BFECAD1B19B4E42398A210CD567EC35 -FB115D5C0DF0EEECE593982056B0E1D14C292F70B3E049984F8881C8B477956AD3140B4AA22256DA -AC0D11C4126808B5B9F922BCC5F24A77FF352E2C621A3941AC07A20E550A69C49B1B87D116EE6F2F -970918F0F1A501166AC4423FC212E4EC8039AC7F9C212D864F418CBB92948FBD588228108FAC1AD1 -837070512305C110F0FC3FAFE6E1529C2BD0DDE868A9EBE5137DFDFC5C12A3D08014BF0EE27B1080 -02AAD6B607F5C5C0F1B1EED3C552919C9A2E97204A8127F97B1066607ECFB47BA95EF2B51F007C29 -3B2F6A63041A9C1120D9CFCD5357222E5B02DFC73CF94CF9B5CB00EAF073E9BF253E30E09B50341E -57BF245A746EA31BFFD0B00201C34CF0881BBD1006BC9BA7D420A48E53686B598BEDB3449924EBA5 -8D5DB1B1B01AE2BA281D5758C99EFE38ADCE18F7B182FBD0D0622A6EA497A4E7C00C7D17299A2765 -EFD8DE376C214D01A21819451FC04A0277EC84A151FF93903D61C78AB7886911E36E12526ED855AB -43F6289C1890222602B8EFBF15782B374AC1E580B6E963403D6D15A051DB8558F2E61C0B9476C6DE -5D4861585CF515CE951732F20D32969F39192FBF1690D242AC04D47E0C53D467D0FE4656B9526C0F -7F852348B0437737CB0F29ECF9B54A5E17185236DD0C16349C3496F3ABA569EA20E343F6D771210C -39DC932DC65ECEF94575C6E76902CDF6C8C8361F9C757A2577DA535187FD526699917CFE0AD438C2 -A758727B306BC7979547E68B94E87ED820614BDBC649D469EF6B4E4E3DD2EAEB5F80B22FE576CED2 -56495467C76A75F589460061E03F3A1B065121A5ABE3E2C51148B3DDC9F624C97889AAF7FB84B158 -C015EDA5670746C6359D27B0C2BD65144F2B88A64331816DA904572BE398E015A9924218B3EEF951 -23AABFC3AC8217B7B4F691219A1C9DD0A3EDD5C04E63ACBDE71B423522532561F4B71B7028415C34 -37E346BE728A415596AB749015C1D59BD8328E39A850CB98085B34B57FB52DD1D154F98FEC49B3AE -BFCB1672762E4D2A1ECF02787F59DF1EBF2625C3631BED849B298C6D226BE4E6EA2AB66A287D2BA9 -2A6C9C612A5F849B3CB3C25F17164BE286F6E4F5E7E4C9EB17BC68AA5EF0190B64696A570442E1D9 -BDD1A30E7692524E30E4B4C3DF84481DCEC6E10E7308E65DE9D90099F3FABB3F4F766BB86CC98594 -6D2003E21287761A7386CD8461615B570BDA015F5EFA23D18E83C325EE444EC166A1A32D9818C2A6 -5A092D44156C06D3FD079B92450B8A491CBB3529DDAC7D95AFE8EAF33777FBB265FEB8A4B9AFF2CE -CEFFF49AFBDCF6C4197497D3B448866D70EF28D8E4B17E7CE95F43F64BB48C4A73EB84B26650F62D -3E5199D64DB0B5B87702650ED0B850FD5D16C848D096E4C7E61BC63B2A3ECFC099CD713E12C91A65 -77A88D6F55D348617C7A49890A86EA8FE2045704B5ED529DB128C9B19EE129E5FE6498CC97087F6B -DE96007C9D01CE9CAF75646E5A5B32BFEAD9362A52223D746943A2D09C536CFAF78E601BC2D2F0B7 -63AD722E3A7AE7069D65F9F2BDED7278511D0120F5EA071D41A69F8C2A2D720D3B24B4BE61C83FFB -EFFAE21B0560A6FD1A44E53E42E0D10E0E93F421A8A7E167BB65F0D7F1DDE2809FA3CDFD931CCC69 -B119C83238C1C00EC100D8E7AB1C7FB02EDE97073C8A5860371A8132BE391EB1C397B61F93876FEB -438C288EF2E38DDCD182A5CFBBA994A94A1BF818312CD8234215FCCD7C240A15AC01A885E1179E5D -7D6305DC2F534BAA141F25EA6A5F356486E5FA0AE3C6980A9F5E8E99E7AE5B95AC42977510970245 -4FC951E4319AE4B1DDC9B07D0998372C0A95ABA6985A4DBE6DC633154FAA30ACE689D36A7F17011B -F29CEDC58A6692A8B3B0A5742E6CEC2F69B255BCEDA762DEE72F125EBA98891CFF4D88AAC14188A1 -8D81424979C9079E44890D94EE094D4CADDC1C7AC5F6791FAB8849CC0240A579ABD800EFE3AA4EE2 -F78119A3C2806C05C2B1F17940BE73984982D1C0065433A9BD658EA31AC819DA9A11B87475BB565C -C294B6F302FE3F7752ED9B963C5279B5F1196762D0E12E6DA46FF9A0CADE3876D7DF695D8965CB4B -47B351FA3F759811269376B2C3134403633FDE27C9B024F6BA81F3E1699CF64A426618428BA6C326 -6BF016C5DAA5FA4CC82FB6DC23FF2D742160518CD3A65ADB38E53F1067076CA1625466E0C64670A1 -564A54CE14DC5C57D24A12283FBCBFFD0FD594AC2A56EE58B552F7586825E4FB1EC23F8221711692 -C8C56F42272B87EBFF3865191F1C11943BB76D8C0CFC53ED452AE49404D2C8193ECC2A7BB8CFBF24 -870ABA38D2CCF7869E9363DC0AD94FACAED5922B324DC3B6FE83E7B34FE29ABC1EAD62B49FFBCB81 -1ADBB5148D5AC2743E3A058386036FADAB6FF071BC1C3B8023F908B6FF48DB0AB1C9C67487C35211 -D40995E1892C8B66AD6C9C6203F6F8B513B11117B10DA8725AB45B4437B5A88A96AF3178D856D601 -196E8162868A83DA64E408FDDEBD14D6591881EA652032CF2F88B3FD6C0479C8F89AC68D14D01AF0 -CEAFD95AD146E68FAE01A07F39E7A0C5E4FFA6D6A91D710827CA5ACFE7D1F946A8D7B67621D60F53 -41F32C12A6EFB03AE5AC5373A382C044A276F6B41C173D0AAAAE0C1DE4C3CC71EC2637225CCBFBD4 -5EAB92BF39357C57195B410F74283585B12B926438AC72AFADAAD2D0FA2CCA728C8E86BD3FE75D47 -B8BEB96AB13B5480F7A3D5741EB51E3E40C21FF2ED7D9221D9877C7D1A8CECF394E4023FCF8C4EFD -B38B839499FF5CD96A46AB4FDB46F35D3B48B91757C0159328120E93CF1F2739E936E28908FB1947 -1D3AD7F6F1AD2BD1EC364986A411CC1B547D0CA104FBC10B1CA7B638A60E75485574034561DB345D -DA68415146AAC632DFA34769B6ED7D7D4694E92CBFF4EFB16B55495908102E85E827FC623CF1BBE6 -A13CBF64E878E1A2A159948B5529B75E071744A5F0E50DF18C110B0AF117CE7F33F8C959D4C98CED -5A9D492AE6F56DA57B0F17495DACB130660BCEFB064FD8309D965ABE8D2BE98F6898C1B7A39CBBE3 -E75DA0FFEF6CC3945CE76DA3BE915546FE8A5310130AE0ACAA9AB73C7E041C00533B4BC7724657AA -649B9388B791AAC5EABFCDDDEA2CC67A0FD0AE9BE37DF9AD40636538EE55A83F60E9E026C64FBD8B -220CEB46E67410144A520FCEACA252E8165448F84D8EA083C793AD09B90B3EE83B73FEFC3365C729 -E3C738894B8C01C2F8AEE0CC8B114E1175EFB44CC4C6CEF5C8754B1CC7CEC200AD8BF1189D741CB7 -5BCA4E88BE959E32216AD33F674F49AB20A354CF3969F1611A95D3934E148831AE7C81A7EBE3C524 -4F743E66A82E10D16CC09F8194EA7A596BC5981D833318AB4F7DBF2ABCE543E410B649D18D146F01 -486159683DF61A3F880F9B21EBFAB77E908C6CFC79F89BA5F51114F0BF7C3CCEC7BF0F3B057C3195 -CFBA6908E31E0DF10DF69163C9DA7BABC00E9A580FA7FAC202910615BD479BBF76FB8068630D1EC2 -1CD2926D351E869E16C2CF1E023CF04D4FC61607DAEFEEEDFF5593E6023492F00029E2AE4B4A2C14 -50954EFA2792F32B4934A768F892171245A1E2F034E2B9F39833F1B331A19A386BAACFEC8C929BA6 -B67CD8922BBC9DC005EC3976575D5B0508D0717C6BF11123EA36D8FD37FA77A6F1F5AA84D4AD8D25 -B2C11D1877A6E2F9B74F3B5829FAEFD4F7209CE9785AA6FDE68672554A6F29D8BF03FE108ED90A7F -58690FAC399A8AD3A26899072B832874DDB629581A51B3325CD9EDFD49E890EA8959DB937DAB83C7 -77F2A426B967AF5888C33A3635B78D647AD6BA441E222C958EA58D61945F781D7EF409771B89B202 -42AD7D07C2EF592CBF413C5FC89EC30FC9EBEE4BC63709AE33B65EE3091CECBE610B847E12C556A2 -79C8B114C3E460822D3330ADFD72BD69F54C08A81848C2002A08326CF3B09B1305490D35AEE59179 -08E1604ECE75BBE811A715AE8AF7EA9C371B322D0428EDF4C893FDEA607E70E1B6F6614947326101 -EAEF18E29BE0557D2A92CF1FC1505E8B434BC368CE07CCAABC0774F8A63E1073FBBCEB3F4052462A -A9008A1E53F188C9EAE339FABA74AFD6D60F47282CD9FF721F64BD51787F3C13B5A6C5A5F7861171 -0111F5E0471E206D72520F1DFA465F4A23C71DCF99A04CEEF11B0E3BDFC35B7461A60753D3AC26DC -50A5956C9195A4F5226388E0953DDD03AF128A98F03BDFA0602CBBAA20AB9ECCDF7255962A332E16 -D4380762E498FDA4885C64FF5F9B480DA487C58E78943DF62616E6E2C69EEC8836DFCFA9EBF58938 -A878F3E792E8BD8C5D6DF557A5D82018DBAE1CA9C64BA5AF8E21BE1B6680FC5DB22422220B776E9B -A0BF1ED2B7212F8BF111EC8C8C77B223C05EB5E5F1CFABD2D037F4BA0F9503E2CD83F4519D180476 -63F09E308883F5DA5228F83045FF41214D2273B2FE0A9017D5E0557BC2A198C35D1E7E81F7965444 -5760CBA1D3F05EA4B90658E53FDF0823BDB1501ED51DA75C47395073D8980D1E3504E3F67DB3259E -4EE73A87CFD96F84E221796573958D364A51E635FC55478C9CBF9AEA16B7D8C25F2115CFE4B7F598 -54E24968833BA0D64D1D332A666DFA2A3FD71B05A26BAB7DA382907B13DE0B80871DF184D3622B62 -3D7E09BC32A4F6EA2E6DA450A906EAD36D53FDEC7F83E101FEF32F4FAEC581B000686D86A0D3861C -1E67F18A4C4647F51F978484D9E3100B37BE9D20AE84C085461C1FBF929C669E936659050C2627AC -1B019837BAA75757F5B0A82E8AE9CF2111931A38BFC94744E2FDE3F8710342AC615286E4ACE7F269 -743AA05463AF537D9416230ECCA859D8C99B7C6E70BE7FE11DB698589BE9E11900C8E9582A4EF5EA -94B5F62820C90DBC022A620EC536E06CB8BE7526A789996D0E741AAD980880A33800A6FE92286CCD -02C9CB407EB31FB95D9C9F4AFF38B37087AC582C1F7B64A7C3D2202BDD62E9AEB31BCA85C4CF323F -03DA9D318B91F78FDC0D266630F7444ED068B55C05461C97552366A82C2E743CEC353D51028FDCF5 -403B3B74D379B82EB69C4380ED40239E15A86B2E5C860891E26781CC111FB5705E3B7C7AF1946006 -54B5FA1B5FC54FD0BA43666E7BABD2C91C859F393ED49F7123EDFB648A3D6152F2C17F7E438C0A63 -8968AC06B4FB3F77F64F358AE063820BD33F0213C85C40E4D97ED100EC2DA1C2E1EA258BF107AF67 -5A9D995F60BFA37222B9C2B325C0052BB8537D2B27DD43A129C7E8FF42757B3AC9B447703D382108 -DA520B8B3BB3E8C7295B776B44ED28F863B8E1F81B0BD1DAEE8A171525D09D2620C04DD3219D880C -2ECC79282DD7B1772A9CBBCA706909AE8BC7798E6EC7375189B6CFCE8A875849176E5913B85A18FB -197A33CA4B5B4058603CF1FA79A56856B43D538E9ECE117D99AFA73B57E307364F553644DE01EDB4 -6234EFAC13046B6E047ECC8F63942F20097AD7ACF0A45C0501A95263DE9439A880D6B5C5214D2918 -0A54D7FE9B2E627EF49E189B59FCC78745E878E45B46C0A648955D3EA8C935113D94F92EC963F66C -F3CF3A526BA71CDF3CD4CA69EFAB08B7389E3390716892A4872BD29DC1E0889A42D7FFB4190E9A8D -05D84EB9C5741BE6B02716BC75E0106F5F94BD3778BE985E03860D27E44088C3CB2A059DEBC420DC -E3A8F4087A9548485E616C409AC400DD1C411CE4B6A229D091B253EB68F06E43511EC5AA6ECA4D6E -4818D6AA2068DA1AEFCA377611BFA816B5215182432D5683294D67A7C1FD76C52233087CA44943EC -7280005E93145F5E7AE50100C18364E1B36741E9647C4DC1F68A58EC44095920FDCF05532F603717 -80F78420077EF5C24D63E26040CDDFF8DFD65D871DB943F50CDE84900C1372EF33FD8AB9889C82F9 -4F61A0E6842219A0F39EC7B232CBF802C4A744F33159432E827006C7CA77E480A48A9B0E6A876158 -8A3102E3F98A77BBD62A3A23150FD140D3941773BF7CBBA2338FF37B9EB640558A2313E8824E8E62 -0331568A9B76F4897198A709F9313F4AC40827D8C3A71F2ABFF02BFD57D30D0B14012FB5C39B85AF -540DDA0ADC27A85B31694E8D7B61F9D9B476571022D98F2D768246550A877293F3FF6ED918A498D6 -A600223E1A61890C49ACFB60265867CE9464F9C32C59E94F7641C3873FB4FA6EB237F8ED94579957 -270D6FD640BD9543E683F2372CCD7B60AAD269E03A72C5CDB732B128818D41A6DDD2BC139F7D3911 -F48E1B1D263DD4AE8E4CE1A686F3A00A2CBF48978631CD243566E22E68F8D7397134A3530EA3745E -4F1EACB4D6A5FD84C3011094F37573F7F9902305020C53926716D4780C6B0A257BF711AD94C83F1D -41A02C1C7DD203A3E6E4B14EDA2FDBB36B063A3E074495F626B0EEA146D22AC33457F44F41675967 -6D2A0566EC2B726D2F0540ABF225339F02F406D4E7A62E5233DDF20AE7C86CA0CDD561F33C422654 -BF2DC3685CA91BB9D4B09AC8B15A24A99FF56E2894F11F7BB4728FE8F0F5B799F74F475D2D01F61B -7E9E0E541F7FEB8A557486D7DF2CE50927515D833BCAA1CD9BF7A650BEE9E003A5951C98ED147C4C -52F64F692AB281984EE65A47E44A4A5FA93D6F18D276D3B01C5E5F6135AC6940524CD713DF4077FB -4943E8AC927A68489EA52ACF7A854393CD027EB52EA2DC6234EF034F3DC742D6DB5A67FC21D22B97 -146B9C268BA97C30161CE01EDC69A6A1F05EFB0E06F22644E1A368F0E2C0C6C1C832878E0614B74B -D645F5CB293CFDB7618B837FFF14A1210AA061C8C81867244305B80DAA73CB25A417228E9559E7BD -52C119B0CCDB7C4DCE7E1B9F7E8EBBCB575E5BD213BDD6DB88769DACB05E5870232F0EF82F448559 -187423409EEF756BA6247493BE24CB1879B5DD822E03D0ADEA1EDBDD83D3FC46759C679B921F0616 -F27212903F728AB44C1784E8A7DCED0DF5625A7D3F48A20FCA34008184CECD145CCD98E31B79E174 -CF107E8F35C40C19D86B40BAEE6164353408801EDF75A619FFC5B6FAF3F3A95F64795CC40C1F8963 -4FD8C13852D265FBCEF834C800AB46E3E8167476B23CDD8AFF6E2F997C99A86A9CB30EF8C853154D -0D89EEE9B9CDC1B4F27BDA32432A4173B55CA8D9FB50ACB2D886AD8E5862FFD5DFF224BA13C8B8A5 -4A7F1A9F987FBBDBC5A3C3D762A5BE309D5D926AE5093C40AA47B3B1BD828797CBB9BC9FEC9D19EE -A73D2A39764816113A8EDC6CFA6E605AD578FC8E30ABD600658A49ABCD5AC54655D29C50FDB72070 -169D1B389F114B7C71EF95A80D82AB537AC8C165D47371FC142A51625029A990A577EB1618480D72 -6DA93C98E5C5F24F622A850CDD94BADAEA91D4BC32CD50CE69E9F00E77DEA8EC1D37916398FB7092 -402605359DF08AFE7B99C76C2A7C70383F28A7C000C696F45291BB8F074791798197CAFF1544C76C -EEA8C9E6D76EDCBD92A86DF889481F3BBFF0865442264F0EA40D3CAA69AE467A08003F9C30FF7F2B -77E767580575398462D5B1171DD441D8986F33BC7BDA17D413EBB6B7A32642E33F20B284BF3EDED0 -02352FC66C6F7741A542155F4A159CD778BE56B9492CD95115C1A06189A216CFD2E6725965A13DE9 -73765A05114D9A5A4BE0615AF8BF6A5EAFF84468B849954D15BEAE1CDD57C435788B331905C01421 -B50F20B184506A0BEF746330BC98E9C89AAA8F9D102F158043BEB6A682059A1C8B8CF67B2F3D7AF4 -D8BBE086254CDE53765E3226BA2F95AE8063649F9F94BD9519411DAF8A0287307335668190638806 -E29484A4FFBC1E46B1800E03B162C23B1DC0B4C0DD3C7ABED2F00762972EF06EEB9BCDC7B3F39C70 -BE32789D366F073AC3280C273DFF2979507671B3E1E7685A9A4F0FD3867F96DD675BF05F25ED986A -79249B75F182FD73CDA2A6A66D693E4CC5AFE3402431B2C816DA1486C34BC9DCA4E2D51C868688A7 -787CD10ABB9ACA14B7181369DE89913CD8FAB58FC84519EA2AA14E54B7A8CE474F213E07CF2DE2E8 -88093DEEC937526816B71C96ED75FA9E2EDC0F9E6E84569C12BB8E39AAEDBF546630745553D6084F -F9524FEC6A7264F88CEB7EC3358E923B392474E3A48865564431662988FEA768CE555AB0DA48BD52 -6A84B0CB17B4584066C1640C1023D91F7869EF0C4D701BE121A6E3C832010427490758AED7A2B30D -6028F2215AA44E86D852FDC67DA5CCBA79EEA863BAC9EDC2535B66AB0E54EC4D4411390FDEB8D1FB -C1743F15C3B68DC92A8659E7A892D5E53872EA51EE8CA7EF51103E87C29A2714E907C79DB9CF3744 -1785D2F73A1EE58550111A4D9BCCBEBF2E39CD3B93DCA300FAC3ED1ADD8215301E5766C30C8CF296 -75746C5A77BF1FE3CD75D25CF193DE8D9AF02AF8F7A6E8F84B548058CDD3C6998ED13463FADE7391 -26D83D3CE2C7201F955382832E32C10DCBCCA35835985B9A93F8E3B0208BE6E92428787C47D3808A -0F77B8F1D76E6BF6A17FF81CDB065180E03809D03638307BD7BF5CEDBF64904E918FC805AC905379 -928B816480F6E3BDEE47042CBA98539DA0E113B1A5F23EAF1A3210BD18561985E6436EAB90395DA4 -77C7A6D7888D2377B3FC4169368357D880CE041E1F7C875E956600DB7D9B35D1EE66BE476E9DD806 -4CC02230276829C2C0A098F051502E828A0CC505AFD8C3DF293DA1508AC4D25866BEEE6BBD5A230E -9C2DCDD4F06883936381F476DDCD86CCFE15C2CE3C3243E148CBE603B8513A7CE7A6910A66A90B70 -89E5CCD4368BEFFF2BCF8E918BFE0A1B069AB2A914CA7BB91A0AC3B3C0B060FA1A0316F6135E890E -E549315897C8464496CC6DEA0F7E3AF43FFA4C3281156067582CA255B1D2E80F999A3AC0402BBD17 -01824C3BB524130F5B82A45275807BC2F3A0655EA208F968B297F98C369192C8ACA26BEBA7DC4506 -FBD1305E2EFA4DBE5375281A88EE2D6FC88FC0A755E72934B4B58F6DD3BDAF7171A4A3C776576735 -2492BFA9A7758504750AB7F38754683B70E9E293CB1CD7B23BA62BD7397ABB84D7EDB22EF6C3F58B -3EEAF656E361747ED04020163253D1CF3F905B5E85F83FFF30AB2778CAE43781667C0F65C8FD404D -6B9202A99EA76AF9AE1236631550B66B063847180B6DCA832EA8DC4A6EFDB674B5A26552A7C7D54C -2799C7D4E03C24F661A91103086DE3A90A774A6988347656344CFBA06065AB22476BB09FB68F9928 -C0045F2764AF643CFEF0516D87FDE6DBF93BAE2829B176CB507BB99835E01BAD5E55C2F8798C93FA -35EB3FEF02CFA31D3D21B030547F86D27B9448D68E2B155A65C742BD2999DAA0C3AED64447B9CC67 -F7AF33B63AFAF25F3CF7EF86657FE8F952288CA4B691D369E8F1935CDA44A180A6767560C2ED3F2F -CC38B6BD7991D4170C7C566D690A8A25BE03212A80871108D18CCEFF246623E653107631F29227D6 -4754B2208D19F84E547799E691CA473780DDD56AE620CD953D5133D135E3D51F237078FEEBB73714 -54EE633CFE238AEA63F9999E32850E6C197687A0EC4E5908D2A18C5349627E336AB5E3185B218228 -603A4B1852069F5EE849D571B8387DCE1F8F8E9FE94FADEF128BA83BDD245F8C1C27C11F2ED1A8AB -2D6D601726842CEE744EE7AAC6B6FA16CCAA39DBF5B3B1D47339F31DFA562671A9CF7DDE6915FEF9 -F19B3E068A464DD350A3AD146D1A241673B5112A4A8768F976723E6E184790C0604506C46591BEF2 -106C40789B733331A80740D59ABED39868F80BECC2AA21C400A0BD0CC326D186FFF9EB37680F1EDC -32AC78F9059280D07B5FF2E354FED545129FA5FA8F3D4317FF21E027602FDB2522F049BB545FF4DA -60248130F81F4E348373142F3148DED038AFBA818F26D5B49FC02DE9800D894E9239C88EE0EDE431 -F8083697CB0BE3B497473473E5714717C914A1A926730C249413FEA2615EF72BDB0906933387A892 -370F77EEBF62D26CD583EE643B02E323821379C0DC966407D36AE3CDF646B95DEDC7D7FD0F28E950 -78F12DFC0D6400B327B743C548A0A3517A175A7ED963ED756B1E107AE7087E2446BA702CD4E26E2D -CDC1A8B697108B5B5E81E9F03105F220C72D4AEBC57665887C8C7964089FBE9424120EFDB14D76EE -F8C6F7A30B13E1AE90CB9D93D2E14BDE47F4A1D05ED5B18D32AA39911B92D24C93976ACEB7EF597A -75161923A73B2CC761785493D0EEDC08B5AFE95F3C006B41438A0785C962B070DE2BD096CB63B847 -C87539880AA3D3FC5C345E0992D7BE77C6CFF4948617FDDA784CC55652192B0ED775129C4EA4245A -41BCF3875BE319DA0EE2DAFEFAE920CD2B6C6C2001762F88C0C5C05053025C0349DB17104360FCE1 -5D7F3A8E30ED13155A74FAF91DC77B8AABDD6FBD5A1EAF255DB209D7F2B90822296B5603FB5E2CC9 -5CBC5F7A6044058B8044ADCE73ACFD896177F1F70EAD2F6534DC3AD755AB2BA87126D63CA2E9C441 -DF0965BDDD6BE494E58D6B5057A561D1E31BD38E92CB73C1465AF6B9C001F7229059BCA4104847D1 -639E124E082F7364B56548BF8112D0EB461B316B2449049F6A476D36D6B7C0C1126C08F2E9A1246A -3B5B21E7C8FAC6E23B82E33A7783E4F31F0240E96E69C9444E7D7A928636CFD086475DF1E0A28464 -81387BB2010655B9F81A0744121699B4905AAEDCC84BC5D5AB3674601DBBB651EDE7B5DF05C8A463 -DAB41F79706D285C4F9063997F7AC8CEF35CAD51FBE5F5BB1B3FA6DA2C3ABF2B3E925581349728D6 -DA0D59C1EF6444539742EE9A23A5727F20CF9377F4F84DEA420607015A30FB14632D084A2DD181BB -02FC3A84FC499B318156B675B9CA3CCABD87FDB2497C6705FA70EBA43ADDB6CF961B30E8F6AB9F84 -E1DD8D6DB3314B34B7F7AA3BBE19D5BDC75ECADFD8EAE19E07B387A1FC586F0F30DB695926764B54 -0D89F1D854B0FF86528AD9523CAF56371E29498C11AFB2F4D5202670C834E930103F039D13348824 -16A49BF93B84FD3CF1209EEF7D4994C8302436C0794497461C11F5B8BA152BACBCC08AF8A15F4A4D -F3EFFB7227CA97FC21D2D0356C93390C749CBE9750B821F1A7BCFAE2C8BC6D9A27F844D8AD088320 -79ABF0EAD8ECD4EA72846DFEED021857F33C1ACE4C07BEC90398B629814C498D33BEB375B9A53DA0 -F926FE6E89E70322C72CB2DDBFB16B13EF7A4F50DF783316584C6AC2BD7D9029124933133B2229BF -74A228868AB30EA5C3E87C78C3F0962199480DBCADBEF53BDDE45849DA857A4FD85B96682F1EDEB8 -5384929DEE4AFAF84C51A09F5D572705673D885070303FDB47DC898F874E103A9E7C1E894115DFDD -AD81549C7375D4AEDCCE2E52C13E5130B47F206F7C5AFAF1F9EE83DA8188D70B473269CA280A6A02 -DE85300B93D8A4F6B402FB5DF58F1327470CE11CC63ECEF2EFAA396A6680A6746A20382D9529B58E -7CE684B39AC00F7086BCB47C2230DF0343BED9B9152A61C9826AEF9E00A1452D91305CF05490D4BC -0BADC9C6FCBFA93FAD52C3A80705A1956890497557C0873EBDCF61CCDD2219354A4F5621AB33B119 -32065C1D990A9B68858331EE7875CAC855F98563B14EF9E1060BEA90F195AFFF94728AE935453438 -DAB35123D0E2699475884DDAFC7307A5CC06920F35341728D85965F5BA86F261CFFCB1E29B429F97 -6970D42D10E6AF6C4B792B4384122AEF2448E22A58D3AA007743C71324EA08D06819FED14AC1F22A -4F0BE4787BC8738E1CEF240677571C65804ED3E748D72E89C94B6F310BE748FAEA31EE246859CAF7 -A1EA17CCB5B246C87EAB771E2AC5D378650191081514DDC2C66878E3766CB20DC49F630F2743A7FA -ECBE9DBE9E815A3CB57DADF2BFF5EF2FCE23A56298A30A2E052FEAEFBD698101F9DB992613706693 -CB0EFAF6F60C8BB5E7D0A50B3392B9831EF3A304A846CD4AF431E9F018FCD3A5B16387552D55DAEA -683D36257418AAA0E7BF8A03ED7BAB114D7C15119E6C71C1946BD7903C1C42E115E954619051B853 -BF05AE316E15E619A7DEE498F771E809D9435969C1056402725EF40C0200E083F3EC6E0EC27B8ED3 -8DFE32EA0E5E156AC36C4BB9AC5ED111A11678339703F1B9299345AEB1F251FCEFA11FB3101CC499 -907DC862B4463D5523B9B25C5B69F70AB6B29CFC1DF1ECAB8227EB3ED1F882E90B12080EE003714D -403EC43B7B54491446B6A3DD6EB641EFBFEF060C45E873E7398025B1CB7065441F1753028F6F8C49 -A96801C0D598E098EADC96A21117F817B6FD6E6947642F93E22425A00E8F6B592AD50B317B69C0F9 -4047386A45E5EBC9504FE55451A01EB29DDF9A41D4BAD85FC84CE280971E834F06CEF49C8C20ED2C -EAC889F158CB14A8C070900478804CFF1D1637CC880C81AA287D8382837FFA8F41FF3C9DF2F22CB2 -0044C171E4815D0D0F6C22D19A52114E780CECD71DAF63427782E85E463DCB333789F496340E8CFF -885A9D9A4250118B439C71C6BE51A9338BE29251AA794EDC67DEEC6337FA63CA9B03C1C9F75E733A -4A918646E7BC9792486CB5A4BCC5F84FBABDFE338C3792254A3EEA3D88903C2C47B91E076259DCCC -8BD3DCA90ECCC832C09C45141C6242026BFE309029A562C3EE0FCCDCD40E5CF265ED9C3DE582884E -0E14819DB98B3AF734B1B3276AC41D43384EBE73003D15CE39FFCC04109583390E470F431B4407F9 -8550E138F96C4564B494E5480F47C853BDD237E27301F55E42A3BED18FADA152572B7B465A581DBF -E7DB2619365CF16D71BF8F091862B9FCF04BF8D0859A76F46E7B5712F2757EDCE332D3213B8A30AC -2CE7D7797EEF6F30904906B0805DFA7CA36D32A20D989858497A66CE72491393DD79332003D55C09 -5A5AB5DF761C4BE5C041FA8407263D604E53091F7B6B15496245DBBEE96A63F10FC2978D99E65731 -28689366FE8B0BADA48B50185B861BAD03E3600F22BAD4274F2542B635F6C7944BEFC3BC741BDEF1 -1A8DD659038CB40FEF2E16AD1AE7EBEDB7D9BA15FDCF26355331505A386DD7399FB999535D6061EA -BC61DD76EF3EB457446F29D0BB6EC2FC0AABAC20B27A3C123C27BC27A76336D0A0A6D456DA070367 -4D959A4AFE428E2206A511BFC80039ECD56E75F69786DA0A8084D81A66644DD98B6018681F1D70AD -E09BD9BF3D16D68DD5D0A03AE26DCF1552549E459FE190B310A8776B2C8468C14CA8B1B9A7AF2956 -507A3B705AD75A17A0EEA7FE089273353CECD07BB8563465EC8DECA0EB42F43FE3664EB5F31E1D13 -24185539B28D508BCD065ED576D8814ED3FD637D576F027927162344AFB0255A91FFC616948E4E35 -8867E9FC76A9AFFACAEBFFE110808C1532A2BBB0DBEF3F010E45FFC73F228D28F12E98478B27397D -8F456781ED9E19711DF2E9EECBC3FE61F7493FDF1A59124668A91BE51F122F93DCA4BBD22DEEA339 -E6EDA3D6EBEE03DF958113E1CA49C8398D2C59DA6764882EE3663F62A55AE50A7E91B4FEAD1B11FE -0D50ACCC5D75F1A515F0C53616A500F1491381DFD0E2477E402AB0CF9F67D501A442629C8593ED5D -25A72EDB9746B02F2B0F0759CC9CDCB4C9D8B4519C8C617E569B432F0CF6890372AA879CA7DE46E1 -10D95E230A4F0E52CF65811C54365DF4A3E40D819E2FD379B47DA3233D0DEF0EFBCE04AD8BAA3888 -4F6A69FE5C373E38AE0FD0241480F2BE7CCD18AF85916D2703A049779FE7398FC47D348454CF03F2 -2EB3FECC064606957898B5643464845445C25C0C7D685C8DB042AF5D5882174374ACE90081C68678 -9BCA96AC602EB41D317BD652293EE628951875641661EC86A2C40A42E8F0813A861D41A0F5178E55 -43651CA0E99150462DB5EE0010F00DE6D55B0D7FD7EC5BAEA24ED3E90A7D6A0589761922B91A6A91 -3A7FEDDD3B68254D89ECF767CE8E27F966426A8B4FB1B4085384FD09D63E288405B78A646F44C87E -EE22C8596B13188085479F75F63D3D97A28F9C8306FD207DBFD38DEDF0FFEB7DD80B2A3292DFBF1E -D605ADF1B33E85B010309E3EC058FCD922B1325FEE71EFF2DBBC2E68DB52D513E024C01D47CF657B -B61C9734649A4AB63C0AF4720EC3EFCD82DD3CA6E80BB63BCF1B8DE810A0C6C517C63B76FE68C0B2 -86867BE102424FC31C4937048B6F323D039618586FC21731005D949E7D802A430DF8D2F0CE99F2A2 -376C2953EFC4184355E4D12F422C9E1E25C4DF38DEA334DBC89B540E14C61A7769D77115CE8968FB -76B27D0863CEA2496783114C24D4CC816DA884D953DA3F9B9D3AF8938BC607BF26A071956CA07E6A -5509EA2F5D80E5CBEB98041B197FAC760976EE75B470DC20AA023BA3F63C2876EB281FF5173BB490 -D6815604517AA1B1FA0631401B3C1A04CA103E2CA4ECCD83874D9CFC8ABC134CC0F9141D9AFA5684 -8BF222342016C556C14B3482482DCE5D0B6EF1AB522AA1812BDD8DD3397E05327EC12748FC480842 -9B97202E24E1DE0C7C0D272C046BA73B37D30930C5DE5A47D96955CB0F5DED8F3AD929A8B42D2839 -0458F5910A0F93610F79EDDB27078943DFE17C716D65F96589769349F3B66AB7B8C004CCC59EF688 -1F745EC7129865A76F9C2D029D4660CCFB4D5F9D412BA3372A27CB175E9D65F759575CF14A5899A8 -D31FF039AC02DBD8391C3397428AC0D5717C005200790785354813C8859BE90E0E17914F6CB9C674 -F1E9A9648657B54E5E1F52756C4F982DF74E73F6E4D40718C71D1D0E2420FB7462FEC9E457C0414A -96E475C6BE2C10437096FCA0C942E995A9ADA789AB637B648781D32DFB68E62E91C2CE7E13680F8D -31ECF8C824885FA7618981CD05FB335AA111B409C59EE337DF4E5F9DCC920A5FC0D620DC07F20DAD -63F4FF5E0EE5A2F390AF1C32122BA7780F210229E5A5E3ED97BC1C3CDDDD456E739CA782EDBF4B81 -0552368E9C734B0C78B0B8E3F8B2DD782862B74318871BB1EF087828CC173D7B049811FCF598B8EF -DE4D9BC5447F4848C98029C854F3AE461B9D46DDAD8CE67A521F3C811A81A396CB0F80F3C8D8EC88 -30532FB7F9624F7CAE0F8C6DF875073333DEB28AAA90AAF486AB8C932553CE697B885E71EC8E40C7 -835CD5D59A2C695DB9E51216FF9B77A15B0DA63717FF25B05B939E45CF7FBE490E51E9344213B32E -115C2DE14D76DFD5845088DE645B0E75042A61D82FB1753C445AD0A956A1263E5A096B681D3BC51A -9FF32EBAFFF7ECA8B59D40F0937EEFF38312AE57462C7BF3B1FE24D2BA8DFE84515270E09063CE3C -80DF4935E409F62EB4F54AF16A186D4329972B9BDF15FB08461B688ED49928429226CAD9F67C9D63 -6D1375CBB7B08A5631956B7FE29CC9EFA8D75C9E4919C8C2C54F401D2E0D7BFBA40C50CAE214D210 -C6F3EA5802339F63FC4C1C1995787617F3EC2C806CE44CF8E29F76606CD5836F6E5A2E423CD791BE -CD3F112F25657DFED9366FC4ADF90B685CCE4A5698E5FE16D7542B913FBC01B288DD13F43DB2B1ED -8CCB80159DBDC90A8132125DF8DF547C4851CA609D1F6F4D647741260E845B457937787827A89E37 -CDA06BB191669AC84B8608EAE132D10177F3FC384980F3A6E439B048A38D0D6B9CEF09F3F2D732AA -71BD058169D6D0F8C9D146D9DA046774027559A8B3843F6116B418427E78476AD8F0F81E8A6B1209 -8060FF7DD686503F972D6C42FD6CC29C083AC3D72E3751F21D2E44A572EEC80E81EE44C90FAA7AFA -BCD3ECEB98FD4068F6C3A4DED0E6CEC523C9A0054D1FC2A8D61A4A26F9BC250B8F302416924AB22E -722297888B85B9C12F8DFD2A744CBD143F9B2514C1CBE988D9CB4E77D90B2EFD5C2A528355A35F7C -4AF039C7D1D756305967B847D4ACBB81263D4992C001E2A262B9FEE2D1F5022BE5B15E1D8F1D67BC -52227344EE912C018CB73E5F47CED54FD202627777BB77AACF3EE6B22706FB2FA9062BEE87E22CD2 -802E7706322648DAA0C624EA885430175F746E1F536F9A8E1C610C4A761D07248426DB63C9319A88 -A3FA449C3FB8AC94C6003C745E6BAD717A3B2EA3862D1E08512A98E57772A62F85F1E2FFBA40E2EE -43AEC11203DA9CE5AFBF673436F2DB6AF85BBE89D802F7A9E5FA25A408DB69E51F0577DD26F94CF2 -BA2FC53EDDD6FBEB534AF15F74F66EF8D14E7FF77D8A5D284C8202DD5A6053CEAA606BF925992382 -5EF4EFFAA8D878652A4CAF2EE43ED26BF3590402686C876F86C1AE95046E527617CDD3C429BD4CC3 -F9654D2C76DD4102471FF746FA9FA379B16DF96BFE3836D43FCC0B8E95120C27370049ACA4AC313E -1D50D72D1814F2566B8B29FA9C9C20D0488743722A766436776783B939171FFFA00E04805A8B5821 -4D4F114F7B9C3C17CE7486AEA2BCC895ECDE809502BDE57981318A93F23016F056A421B733C4590E -34AB08BB348DA4A48F19B6BEFAA1DDD2A49A6C440443028333CDD48C85CD698ADAF3FD8676739E44 -400A98B575BE02350576F96CFA54D4184BA47555B8D12374B86D038D085F7FA51FF4BE2FF5981408 -999B48B2FAF305212ED54B2E371F5A0074CF68D1B0E5CD279BBC8BBAEF694A89A6C43F518D01BB4E -8402AADF34E96E9B3FCCAB4CBEA2741D3FD9ADF7AF32388F7771845AF99965A6078F4DA335EFA436 -BE36903E33A743C112C0267309F266DD44FA998C9A139704E400B89DAB952EECFE2AC09C82D9F497 -5371CCC27DA37890EC84123193314D8A7A707C217FFC951A547EE5B6D1B7C8ED85BEBD9D3F4B9B09 -6A78E5F7DF88C931E3F396973974454E59340CA51DBFEA1A00DE084B64630E26C6D6A3593B828814 -E27DB0186BF2A87EEF268AA1B135AC09B52CFE53051CBCC88CEC5657BD47F603C8E1A6249161684F -D9084AC279F57A4F9BBD0A546A87E147B62AC860911969A29B8AA20E3AAAD0079D64E6BF1B0F2CE8 -F0C54C9019207E1B403358253C2FA93A662F63B9380B65C5173C198D86A3D0DC1800D1F5378DA39C -E8523EB62C6AFAD8A0D7AD1629F2CECAD82B8FDE38975303768C7D3A08B91478EDB3C45A8C6B7725 -EA8596A8ED50B8355FB852FB8966479D12E1086223B1E6523A65FBA81DD106FE254F7309718768AB -009FF7714A8C363B09DDA73CD3F81BF9C0CD3B0C806CF3B7BBFAB73E46FACAD2480EEBA97AE68EC9 -4D3D79AA01ECC22067858EFFA9D7B7F997ABD2CE5AAA8781E5499E8580C405681CC63EEA53BB47E5 -5ECC5BA2A7A3C5472DF034B022F455C60FFF971B01583A29E211A87F7163187B190B0C1083D696B5 -86E9438FD8BAA45101A5EDCD1BE5AB9A585511089DDAC8DF1B1FDBE582ABD945E67F99ADC4452988 -A9859E39C90EF794C5C4E62997085B7A16A0D90107D08610BA175AD66377345662DA7DA4D8FEF847 -EE5D57E3AC54B928A0957CC1C944E7FF14658FE4A641CD26C61105C0F136A75950764B69CA17509E -3C19351D456B22C87C55E8DCC4ACD3E150D936333FF36499AD6B02B6403DE0F12901301ECB2EBA10 -324BA72B58206A13B8F37B0AEB12115D0C12879C8EA8A2EB70E85C95434564BA3DFF481C8972587E -FF74EEBBBAB14FB32B8A84B8FC42EBECA65D25E8C32C19CA5962832BF45DFDA4E871508AEC318495 -0D6DBE89019CEA29E40484C36E33D76B756255531ADD1DB24C03B2A64A47BD8FBA3FDCB1F5B96F8E -ECB60D5834AB001A70740498720AFB6EC03445CC35B51F7987109618C6C78CBE3041BEDC69B6FB12 -8142CEC5C8683B558AFE3024EFF7A12D04EF59A72E156DF11D33ABA08A8EEB16259DD9529CD003AD -4EF4137B6FF1654236473DFB93F597331A5E26C7796F528F65C94FE07B3B4F4DD49034FA0CC189DF -CDFF70C2F1C6D3DF30AE103E2AC5CFF20664AB934CE5C19693292071C93BD590383E0A1931E04D1D -DD18071DAFB628F5D7472E457BF81D6064EDFA8DEBFF91701C5038CB30865D6122076A336732DBCD -B0A625548773D0013648A76F07BBDC9C16284D158EC7A105AE37A62279419C3A2F360D0C7A74D6FD -D0E36DCA2A8BD59945A4196598F690878F84C894852C1811AFEA4BE3B9F6A5219E6628C66669DBD8 -FA9A0CFC2DDE7716A356FC4FB271D8A2CDDC8D4684DE447355BC7A287DC56852A638C5777826EB6E -B72FACCC86F80BEDDD0D649A883CFEEF4D74750172A90B5DD8252592FCFE19FFAAD868E99562DAEA -E70514F5DE296EF7B57E6F193737ABB6AA317956584423817E11664A67389197AD9F8F771EA59551 -98C9EE40A0761639E638CE9D890DF468642670235F1373D3AC6B1F43B5777FC0A91A96E095E89BB9 -FD62614DE456CE7AFD6B855112367573FD9FCBBD4A4F9C676E672D62DDD34A9BFE8311B6175A003C -D143C0DF15E4C0B48C735404086E48AEED6B6FA21FD9F40B84215DFF287F0677904E2DDFDA774A40 -19DF45CC877F553E95A1C65DF1D67BC0C60E0BBA4D205C0DA3DA80229FDD71859F65AD04506B308C -2B783839F31CFE4425263224F08C5C7E98A2C9D3DC8EA5AC1920F4E395413262E0836BC019A092A0 -DECA104EB2DF6B63392AE8E2136379140DE5FC98B0B69860FE8E31DAB5C5DF7807D19BEA34AC14E0 -ABC6F6519C51247B104DE7D912C5BF6EF11B48FC6DF84512E9F5FEBB48F72FF1B722BDC3BB2E835B -2E7CC6324BEE84893996B8DC2D4DC2793A4F69C18E63DAF04A7BB5C0A9076E2D5A343E134CC3C89C -4712900656FFC202E1988526D80C7FD9281FE47FBA8AB5D025E63A84051F6B13167BEC15B346212C -BD051AFE7A98BE3A2491F3C469718A58E783ED91F90E274FB4978F8719E92A99A1E8F142EA7E1F2C -46AFF0A2FB50F4D105130CE8EA309B0E480DC8F80D506172B609EA4BB4E2BBAE98D8882814FB273E -690DA990B60A9CDA20A2418246BD10AE67D846A0FA815AC25858145ADDA106A6778A11877FE59A2A -BE300D7DB9BBAB31CB5B960B7E4EF91D4600886D8795DC361CBDDDDE05EBD54B1941F426F7FA8399 -270D2F54C998BE92D146227270A8E89AF90C48BAFC4ECCCA01E6322AFC165743475E752F39BDAEC4 -9297290510FFA264342A0AFE2985F85DEEC66C36EB4A1D46683EE7C591A89B81569A8566AFBCA268 -10DDB0970577A76EC8A066622606B08315DB0F2E6C671F3259C73637D773D1A180AAD66ADADA2A65 -95B5F481E5F59E51CBA876FA06D21E1D674CFAB46A02D267E20234324D0891E7847C13C69BFCEEA3 -AC55F2EAF753726BCEB0DE1EECF42ADA964BF9E475953302C2FCA804B70B779482DC9319B40381E0 -9C0096460AE113C19A2DC9157FA138CF0E7758F71008E71D0F7599744D647B09B16E3C795C56EE5B -D14D8D63E7A512900D67487975EC9CEAEF69572FC3C2342AC5D365E8A4BCF462006B5268ECC15754 -94CAD9A9E7A9E8D9AFFE49AF647C017743EC7CFD5E66F4E4D845A6BBC836849274FBD270CBF263F1 -67DF7E26BA91F21C60F96257C07523AC37A2193010E976965CBD75751E312817C0564E1C5AE0CBA8 -BD12B01122D07020A0852120680985A8AC987BC33BE863EEC52AF13435B6E4048D951F5BCE36526E -07A8661CF2538F69D1F223BC53BF5896437D1BD46F57D9698F642F0E99C7392D8EE47134E34DCE94 -D392949B418D9821E12CAFA8337323E8469DAC24DADC6AAD4A0DADD7FF65694BA3A27964D28D8EB4 -1179458F91CD3F83B8F119BF5E76184DD29CC4C0718CF7945DCECC993A7A78739363136CEC7F2FB4 -95EEA8CEDB3EBF14373A058758C442939D36774435554851E9519B6F09C31EF26B6CD997DAFA11DA -91FA9759F17B7079164C5B47B99CCB7A876FBAB1D0D5D1E1A2683CD6914E6B3B755939CEF1C9168D -30B2738C4349650CF86C90D2542FC9B90F36A494C035A1C86DD716014AA16E6B9EC7AA03B16554BE -C436511DD3097FAB1FD0CD49EDAB96F74E8FD26400FC748CBD9EE1EEAEE24DA30DB6F8734B52818B -3A5E510AA5C14E42060898033E7E36CBA9A64042CF94A74E4B52E37AC027C0DC69BAC4944CCE12E7 -AD81AEDCE642EC34CA23E3FF07B8CD35DFF19F33C8D4DBB56A52534F8A827BE47AD4AEDCAD83B273 -38409FD1101C4DFF3F12D3DF79AD1FCE65B2F419451DD059C88BF066413E23DE27D3621DAC2DCC8F -9F3620DAD0F4B1A6E8C9E6E8ADB552E1EB2C4B2A3B73986AD53ED9ED8911F82F750DF05CD2EBA3E1 -B0DF208A87FB5ED44C3296B803881C1D9776D13350CD29C3F716F0B5A8B8557812024BA70069BE65 -89AA579EADB1F657712DF2570843D7C5FF7F4009D4D232D3547DC8B92ED5C4DB77B76255E661FF8B -163C6F3856DE5651B597EC7C78B84F0C6C1D6EA3A82286F1D3BB45F708D564E139E81F473C705AB2 -56346328DAA64D1EA8645DC10FD449092E0634D9D7344B2AEC3C75F6B6CD8B3F3867FF3CBB0F556B -186EE9A7C26BD2D17C8A773055D9D5013BD2F937D697A770C57BDB36D922CB911CD14E7FA14160BE -19C1A052E297B1A2D682D4BBC9F1D2493BCD7CAD2FA75D904C5F5479179DAF7DC6A4E0D269BACA2C -4F2430B4C8CF1572FBDC750A05DCD5B09FA3A9CD6F2F2A386E2B3D4D8E257BD43A783B38E63BCEE5 -03EA96FF2C373181744A607F0CB8D281D7DB1A6F4076AA3E2C61914BD796EF8A0873F79F964FDE28 -B792BA99A20C3F1F5ED1FD189FB1867C84DCD6AF43D49420C8B1F3DCE7DBAE71DEB17FE45644DB24 -4F44B1011C7C768EBB7254F4DACA64E9BA87AA7CD0F0C4B2228FFB9EBDCF3DDE4DCED39399FFEB34 -8811547D025320A88B480943A339E2CD2FA3605AAAE87939B1D7901465A1879BCB4C5BE1A179E7E3 -71F1BA2E0844F88AFBAE9B78DCCA47AE8AEDF5BD3D458C7D4A7A08ACCBF880D1F1DC69C636628DF1 -EBDC5C42FF88FF8B66351F3F72D703E52F3CE91E4E00759753A599FDD863788E99858498B66B93E5 -083BC3501C39A9BA928B0D763C28826FD237E949EF0BA85CCA9AA20C405DB6D5612DB718F7B4AD31 -D253AE306E4D7CB615C59AE668D347A4E60FFF7B103F8BD0E7CBDB142A763BE88AB40EEF6B8FC200 -458D728930AD0F94FE52ACBF0657C4907CC7942710AB1FD8BD149A9C9DEF6B8DCA7DB9062AA7B1B0 -11ABB5AAE8B77893A023F9EEEED4A20FBC30F922282A7AE2F1ACFF64151013D6B8AC2EAAE58171A1 -0F80BC18C3BBB5DE1E22EBE6033BF83040629023D74CCBAB3F1923CFA4A6735E1DFA8A1B261FBF1C -397E26F3BA9C2629CFDA84DFA3D1087EBB19DDA7E2D76E30DC2E15B8821D5291DA1DFD73940E5560 -A8A6DC91BE0075E3ED8D9E8CAC85AC20768D868CD2DC45DEADCC8B59AABE6EE5B2F891E0D7CBAE82 -0F83479332BF9707486698FE196C72EF72B52F54314329FC498171782BF160E1110A19B8208FC591 -EF0F0DA71AF657B43A7CC649A8488B759F7B69134B4F9DCF79DAEBC1CE52CC8015F324C9D46320F4 -4E1551EDA6D86139DFD1DB814CF38A22A89FABB4F75FB896B00E769820F763486E86668253CC466C -1529A5A924CC337C48448851A381DCEF63A0A302B65203D6571A1DD1FB9DC0C3BD6AEF4891497033 -109CEB5A481BFE442249940EC54096F1D0F2436D9E60495D0ACFF967A741B30467D24AC6B0032213 -18666B951EFD45324987B10BEF4AAA0FF1DF6887377A7F70F555DFB9FF1001C67438A167A00B05D2 -C37065655173A7ED9AE342DFA1497FB1F2FED6098901249A085D31B66DBB6AC25EF16C106B0A6FF3 -47CDF66434DC3F0012DAADE80B942D522CD59AF4C31C1C062157B3D000B9CB86E2AA7B4A5BF31605 -8A0D5A148EAA2C67977FAA0966E4C3454E08DF14C2498AD76E389AF65D2C139A6D8675298C46ACEB -7DBE6904C373C06E5F71399B2EDA0B40AB96E8BE991DDC39F92F1D24797F9EC9F2FAE25669B43754 -E2498E8EA5C44B176C3FB3E8F7A7A1481275A461F2549AFC4CC73E28417BD8C5212C13105EAB967D -AA679AE822B9B75B372A99C7E82D6BD83AA2BA00314DA4AC51B9CAA30D80507505BE24BAD0A87C5D -5D7336EDF60CCA4CEC8201D243C3932F74D171E2409D789AAD0D04A7BB22FB6DC3AB92AE33FFEA89 -7C484D741039F38C317EA396A0FBB9F15A27D87FCBE007558799BAB73212B6E5FAF2080BA074724E -AC87D88166DBC1464CF5D41B99428851FF1D99246944511CF42C3F9248513E9E51593F253D89C604 -388AD7132D6A169E9DD888E020AC1F8BA606F2E1EBB97977E505D8C40853653D8F398F71CC9F8F9C -540C22A1E6195BA578AE7262FC845FCCF77B33F33EEF266489AF8B81A615D6A13464BCA58BEC16C2 -3F31D678F14A938BEC31272DAC3CCB1B2DAE577A26BED852FC59843176A5FCFCFA0AB7FB00D2309D -E55C82CB9049F44FA61F1E313205A76317C4CF529A4456019D970624129681F46A9CD7950B8B5C40 -61853040113C8115319E68B37F88D864C6957DF813B305D09E6A1716B10F26F2EF5C727FC77AABBA -73E12B5AE6416AB19F6563CE14046B715BD4CB2B1E4D315F42D10F74CDEDE82BCDD524A1A5460921 -9084CF1CDABFE72CC8375478B41614BC18A914903596D6FC2F361EE519F875385F4ECB50F7053127 -4EBDEB14A5DBD906A60817246042E3799BB3AC647CDA7244B7998AE4F3BFBE5C767FD2142E48518A -4217599E0EC2CF5E86C8C270FF8B02F949EE001D6A439BCB4BC7D7F7C8167C3AE0A7E59687FB8BF6 -F37BEAA164541B8EAFD92E9D152E3FD0F413C99CCC34FCD8AA455A0B55DEC846A5874B94FC95CFF1 -BB386B2A1E22CD1C3914264B6D5BD1746972857C9235052D77A6C0DD3019F8A307FBEE63A3EF12B0 -39B224108276FFA84021F1AC5B745C54690B3FF587B4B1710AC3533A67BCEFC503ADF1F4B62B2910 -B31965E364EEC9CC437CC40181A7320CD52BE9C546B8F1DC824312216C2FD8232E2BB8D40EE2E314 -54C09772A387F9520E331456C269F51A078E6ABD9FB6A68BFD5F557215B0BBD2227B8959CBD1BD4A -EEAB094DD18E891C61FB00933C0A0D76174D169C0B6445D34C00DC9E06D85EB086C18F3BE27DF734 -EBB9CF078AFF6514438549CBE92A0C0D25EFE4A527D86F158B4E9D8870C7AC5D6C059643A3298079 -CC20398324CA87273B86ED801057D797D91BC3CF2F96C650EE1566CD3CF8656CC577D38B830201BE -718DC9A494268177A5019546EEEDBF101996BE593631654B638C75A6BAA648CD1E7AA9AC1EA60F4C -D604071C89DCCFF8B3E430A57ED6DE11C5837E78956ED991058F3646219BEAE94E4D9381A33D48CA -9B8FF12B54A73FF869D0EEED7E098D80152295E6016CDD809173C57D1F5FCE908A37010AD4C4471A -53451DE9B4363B63437C374C598F548F145D3D288F42531FCF36A9CDF72521F1C0868FCEEEB1857E -A983F6B75CE245D875BEAD1BCB8819E5464518E04717B78BD6E335F0AD77B832AF5682062A1E2AC7 -7CD5EDD5DC372EE456C96D38BF8BF348DAC2B4EBBB2440F2CE97B4B337F2E23247E3E8423BFA9237 -CA6CEB6FB93F960CAD894A96F0371168A33222052DE9B3BE04B022AB95C0C243486E35197721FC55 -311DC55F87BC72D09B6C940CA36E6640AEB66C394A5949A604E7F15DCE3A008BB41B0EEF2840A357 -F348443B4DCE064B4C15E5EC52E448C985FAA1C3D6526270B1CC691009959A7620C9A6202619A19B -E410FF7BD535A8B2640AAA459DFDCB8F2BB35112626497E8A397D4F9E04788322A738DC8907CB643 -15CF63C95809E90D06EF02F72AB04AA61FE02ECCF7E9049FF9F3EF2258A75656178AAAC9F3C2A26C -001341862D526CC14E92A81BD63502F959066E0BCD659CB9B5A45606153DD77039B8C5D5B13565F0 -0D95A41937CF97089F3938E39659A64DC3D6046D0E9EF66544CAF8A206635DF49926A3EEF3FDBC9D -CCEA2886EC855F1821C4B9CE1D02A19A11BBBEF43A7D4D536715548A62802F64AF30BBCBEA8C7E55 -AD56C801D8A569C8183615A78CD393CA42C103F155941E845712C335F4ACFC7807202B92A983111A -ED241BBB8501F15560E8F2157C29752BDCDB274008137277920053D6D7DCDC626A574A82A8A34F1E -77B2FC8CF7C1A7322F22DFCB450259EB450C52B70DF3584A7C54C813DB41E3DD81253A03B02BC252 -346AF0160716355797B6F8210C453DD7E1E756FF08C7E6A5F4F87605E1DFF35A130D79148A57B7AD -12D94A129FE3F055CF974EBA09A2B13DEECA2E02EA818A58B81E8743004646C7746110BC61B86ADF -2D5D8C45A6A5461EB34497FCCD09E711F47BFA742C73F87B257B53F30CB68D151424DC3C210D3E8A -C67C2495A8236EA2D7985A5E1DEAC699D7B700E6D38EEE2E93B191BAA5A8A2C916D206C63FE63427 -AAAFED2B5784276FC21EEFF2D70E47C8540DCCC3E00134642B703795CD3702631AE2A90E063A218B -61E5B89BBCFFF84F567E37A31A9B349717A8CDB9C9377215BA838FF7469BC486B64EF2B6D92519C0 -BF0826E3652903F40E400689F5749DF86FE3DE178E21E20EDF9053081F6510D8F19ACD021CBA481C -484D30EAD3B84ED0190087EE478A17154B243346C3938FDD5340CF6E47B185E64ABDF44F8CBCDB82 -94492B91929BFEB9DA2B033C3ACEE554F0F1A7F8A56DF7C06A3583C1E9C5CA458D40E550FDF3E2F2 -E7BE8312D5FEE98543388EDC8A04CA29F1B82B7AB4ADABBA3F2C331EFF3521B2B92F99C4377AB827 -A989B423750D36ADDD2E286E7F3B694E29B8BC403693C6F7CAB5FE34F1E48C8D41B47831E8C3F5BE -5ED5142E3C44ACF5180CD41FDA149B1F4AED36812E42BC184227F5034220F74F67830255E1CAEC12 -66DEFA358A87D2E3B4B4E7EF30181570D0B2B43072EE0311C2C157D32EE2BEA8EA4251B59F6B61D2 -B4FDEB654DEB67AA3DFF4AD65B727F0D6B7D61523E4B44D99BA5CD33540F340A35DDD466ABEA4E72 -E504FC9BAAE51D231C33A8CE7DC2970DE4C1FB5B096A3D9C641EF77DC9039886831DDD01C4F21E6E -168E38BBDDA5F4308C959C7BBF36A42D042DA6862937EB20D4FA2E5927741A58DA5CBFFD9553BEFF -BD92E6D64871D8B25D9049F4E71970A8FF5557D1DE83DD24286D6C3E4770EE00F9A1A0B0063C9999 -4AEC75E84D6F9C488434D1F3DCFD0A8BEE9ED8257CA97E75E8B1285747184D6D2228EF95D4A0B8DA -252318ABD35C8398FC6568B294D90AB308A7675F9F160140F0A08C88AD0CA1CA2CF85E4D031CFA3B -87635F1398EB7DBC666A259F02DB6741D13E11B230025DD6DD64C438409AF109090058151E4DFB8C -0E9CD65935C4CC063CC6100FDE70896E23E3661C7FC1B8228B26A55903E997F80207EDD8863FA074 -EE4FF23BE585BAF708040C9F8CFDEB42FB8EB71D4CB6D7757E973E4D8C9DDD082712C23F868E1135 -ECD91250BB4335958B07C12FDA75EEB56BE19D1644C1F76A8811C021122619F751CBBFEB1D3DC912 -999017FA163672A1EF754C5CB78962BAAB76EC48461B492FA88F9897170DE857CC8374C8BAE417D4 -C78A56047024731F4A45145F0393A27CAB614A7FF747BBC28E6880D4D01C0A6CF317A1DE5BB5ADFA -4B5FBFE0C57598C79F25AE57BB797A489D51F85A9B9CF8BEA64293F8FCC43B0D5484DF99DBE19152 -692CE756F6FBE8CE5831CF4B8A5AF47524E272C45C62ACBFBDFE7E60B05BB1A1A6AF0E9210012014 -69B3DBB49EC7B23A363FA68417B7118DCEA71D4ACA2E36F88C6DDEFB70205DF3AB7C74CF65CFD01F -F85FAF99F172689737331D4C6CFF7A29029772F487FBF625F17BDAD89B4AC076948277B4ED687840 -301016C2B7AD4C6D02F81E88C75B7A04D724E234E38A38269351582245E361A42C75B8256AFD5624 -B558ADA2190F960A896BBAE7A8C57E76DA10DC29E69BBF3AA86214C001A27B39C1D17C548DA5601E -86A5CF53E7B1896BF003AAE9387ABA9B102EB1E9002DD3754A378F3E49F2C6EECF47EB1BAC2CFCE1 -1AC0C5CB063672D32733563F3E1E891B6073739BC53AAA0043FC45E90E413DFBD4548DD320B681ED -70A7443A233D79E3F038D26975586E5CDD2115AA614727B1F6DD4024B85CCCFC79D10B7B6AFA789D -B37BD0E8C423C1A4A8681B5FF3A9FA1F61A46E46C4B1836D1AA41A89264A7F4B1C259E4B10ECDF37 -5BD26A1F412FE01FBDC03368FCAF48AA0EC28B1BD603A6A0D0DADE66D14C9B7285569230FAB76803 -35BE104305E4B748FA99FA31F23991608DFDD2097DA292551136F255051C9F7EEF3FB7C7FDB4E651 -C3D03A4CA357B587245236F4FF3252563F6BE08EF8A3EC09BE2BF27B9120F7D37801F6999EFB1C8A -D1A08698CC59CEAE2CFCDBF6BD8F94DEC94F7EBF33AF05F52C85760C63950B455510C6AB9398D09A -C288EFA09E8F631A59B03FBBC75BBDAFD675FFACCCF8ADF71E815A4A49F14BF70E42DB0B7347B528 -4E234C24010E2177DBBD57648E398FA6B54571A37BA8C989503594D03C6E60871A7F964599022154 -02BA168B8D1D2685F5CF8645D5E11A1769473027F42564C2966C10C0DEE1EE1B6975852A4870D492 -83A470E623337544A7CDA5C16FE2855BA2A548511FB4D4FF2E3E78D108E4C734F64EE2F12CC9562C -BDF363EFAF5201B673AD00583FF108AFF6B68055A5F299452D176EAAFB92C84F114C8C22A05EAD65 -64A3371420EA9E646308DE97D40705E1638DF08704FC90249CBC0D2D3E884A4562CC27370B1A9738 -9D8EFD237E644A7370B8B38ED1C377F522C75F981D878A5E87101E621DF9D85C7207BBE5A87CCB60 -7F93A2E52F660E05C83A7A6CE6D01AB4B62A1EF8DA47CF97D4BBA0FA8EFFA9C0F61A325A97ADA694 -45F23AB1FE27A66C271639F839203040D44B11ECC6E805FBE88843B34C4FD52D1D3C6C70FFED433F -C04501FC20536ABDFFA429B8DC8192B2D45DD9D646049CBF40719C3D674773F9676F9FCF32817DCB -55402A72C56D74AA4CE4035687C730B6B44A9CC614BCA5A3FD17C170ED949E588EE45E89E18B0766 -2A6327FB9E8475C43E5DA1B0AF07C23774B19C9EF59281F5D884990D6194170D8293A86DB52A0FE1 -7E88DA82209A00A16BD29B8B2F13FD60AA25FCFA9745F57C8216283C1D6EA1C119CB9B8D57C00419 -5210FFBD56395A3EC2D3098ED38F389EFC0324FD0E55EA339B3892568229D8D3E205A821E8219FCB -1A7713FCF3450F8BEF976CA0BECA47376A8CA73DF85B340C67EFE4534D459617996526B5E5D3D19E -17CC5449E5EF2B82B2C4C2131FF8A19FCFE6A186A9840D872D85C40665A7A04E67EE26B8BC9206C3 -5B44C8F8A1AFC3867D96DC6D48BD45063BE25B882E9BC0D0948C18DC870E6925818E1FE17D336217 -F174EB4481F5C0ED37A3BEAFAF4D46F857811B6728BEC461AE6468D87A736572F4FF95B58B04564A -9D3C22754587DF15495A319D822B838461764B73483C1F7CB930EECC6F7424841EE10E4087E95120 -2FE88A391375C96BEC4480328A54740213F741105B12A39F19808F3823507B88115D468C61B212A8 -ABAE7480E39BA52390A1892C7EC50271156B4E8076FC3ADA222695DF372385DA7B117A29E04CD2B8 -0A320F186D61C963FBDAFE9224E537057C49E82E405196AAB621B5FE4011E1782A747EF935ED8BB1 -1BDA39A141CC0BA42D04AE123383BC95A1D03A85A9440010C3B9613064FFECA76197E10919BA5006 -F35837ED9BCD7DE5E6D968AACB6FC91178091FA467EF6FDEB728E17293DC89DDE5A5261FAA95A2B0 -000FC750E7073900D4D88247DA464613ADC2B3903A6132D96AC0E1C564385FFBF6249DEA76BEA2A9 -9160632DD2FC2B99133E9F2F470F72B45D6F18B45020F604B06CD9174BA3805DB60EB9C5E6A9C789 -ACE76AE9C79C1BD34434E95E501BC968633AF93FF4883C6A596776254C0C74993710327086B2886B -02FD3E42A725A03459CB36EE34A094139AF5FCF487D3DFE63FAD20BF0DFB60DEEDA2ACCA3510E963 -189D1256EABD81253F7FF9D11263FDBC1DCFDA3D1EA2E52005CE3C605C993231258A717423F64BFE -EBC34684EFA676358B9B543C2042BEF954829FE3246A879845B30EBACB43D8DD7A20FCFEDF763AD2 -C5D20A798B69E08722DCE6A5762E249ACE3055B650D9E110599EA30DE5C4FE7200D5A8DA9E1FE268 -6350D0DF334877D0B9F6524C552D0B6DFFAE125EC4C18F7547BD51C14288E4ABB7F8A1A00458596C -390AEEE6FA308AC1F788FAE30D7F8928AFC91D4DE6352D20B19D8D8AB122B7378CB379C5BE7E3CE2 -922FE667EA057B5D7B3F0B51C7BF0C85F87AC2F360D82C38964F4DABCC9104B32F0FB8802235E8E8 -D9A5997D392259074C00AF2CE1D2BF7B8E90E2E2AC34185C68A03BAB8B267778292B227245D7FF86 -70786E3F746F86B9D4D17190DB859A0E144B2A61E6AC9254DE5DBAEF20E2E9DB0B2FF654B996E962 -F55E465DD238BD1643CE59DC2B5A58B1E6E4AE2DDC2D74D79AFF3C34E4E593E051FDA236B79CC0DB -268D2A89B1878051223BB8F33FF99BA87A4811C0B3BCC01171D0A731EB732ECD8749D27952C27886 -B252F9C3D190419FD2900987A0A255B9753FB7AA70C37462134C467A2C4B7920BED9F9E86F8F98B9 -6D00AF8B05A4BD5F14C2A0D914A9A84160D554FD0718F50ECB5DF5E76623065852DAA74C9AD6DA07 -A119DF12C3577FE276AE551D48B1C5CD8A50E84DEC9CB0840520D78FA7F9A7C2071E28CD20EC7649 -B991F3818CDE295CDB6085F24FCF93147E9F4DD084FBD32525326D2EA147ECD5B6C9D9F4A7166663 -AD18BF234E9CB92FF72138A8A49E73E527E9A6488A4CA808AECABC94D693CD2C0C357D285F65006F -A2F9197F61FBCA6EF07B013E2B558AB531D2FD270CEE7FA8E467FAB885E90C5884843AA08E2BBFEA -0AA575643727BA18ACC499FF34E3438645BE2AA71EA491E54687CD305E12BBC94FAEC848311AE816 -495B013BC5075A2D2AE54A7AD7C9105B64356CB51F18C2C28E3A83B9D81A4554DBEC9BEA9A660CF7 -E1BA89E6D4DFB3EEC6A3DE3FCDED9B2D614156EDAE8CFDAD5FF0EFEE31DA3E6A54D94CE9453A1CAA -D9756D91BE85315F6514BAFBC821EE810BB5D8E1B8F05F64F3F72C4B35D424F7E4DC3AB581B74ADE -B6D6297CDE7AA8278909F269FED79B7DFD39B1C0338E01D556C4DB9CA3A8578ACE3EC3D743ED4B9C -0145E4525E8C315F7A1B98584B975C70F0D415708C8CCC13F848B1D36AC8249B73638F95DE0CD27C -7EFB52BED4339EBDA4812564D7A77416DDF4CC88CFB52D07A252D89353C6826CA1832A153242979B -6CEE783ABDE65C8B40CF4EA7B42B8DBCC0E02423DD693108006F6A4AEBF053B666C3CB63D1861F86 -EAACD43BB9BB6F2C3A17293C189331D253B447757EE7CBF4518BABB73A1D44874D7F0625E6A013C6 -08E991B4AD17A9ADB36740D25E3E35B459B422F7370B134CDFFF3F3BCC4C32B4E9EBF6A2478013F6 -6933A1FA9403A2F1161EC632F1F04EDF95ED0F33DAD9665D54DD9DB2564E51DA7B65978CAB50D6DC -1568976E83B056EB0E3A6758518B6E17E9EBFE49B72EB148B472BA144BDC2AC95744C9BF1258F0A2 -E47470AB0EFF90E190A41108914AB8C1ED6B11E0681778521870E80C16AF2AFC723CAD8719ADB62D -3939D3BC8CC1D8A4E07E9D734F54ECA33D936D2C39D5C8055739C33E53359BD40E576C11E93B4B4C -122BDBC9B1BBF44243AF4F0BCDBDFADE68C526B5CD74E29CE3F70D62BA83C489034111FE8E4DAEA2 -F01F9D938ABB532DEEAC0E329F42453FF5C15DEC2AEA8C198323C9E8FEA55B3F5DC4751D2E2E16B6 -154E7F2ADD46860E9CA71DC114C99D80E7EA1DAB51E925DE161CEDD678EE6282AFF38E3CD0E65954 -9C970613209955A3F581E1ABE485E56402A3DB0D1E9B8A9DFD05C4B0B7F97FC6D0EED0B69AD6F182 -B1D028ADD2F24463834B13F5C1307F91D363891824E81108E57CFD5211F86400D3E96B107F3B1FE8 -9C4908649D04A46DC3CEE0DE66AF03A7FF9F4DAFECDD6DF4D93784CC899B527784DBE0718050FCE1 -85BDE3F39DEBCDD660B2488D23AB1CFF87B0546D02B48E7B7724C9E87B71BF34B5D6640E0F6ECE47 -B182D41C89461F712849C6CFDB7E3F5EBC1ACDD12D65A422BA362A8FD6CAAC5104CCC5AB5FC04A46 -E4309ACAC83D659DDDA256CCDDD1BFF9AB3622450C4FBC89C82214F00C42FB0311BCB1B722A691ED -839CAF9024FB1671F18E4639C96D84718C663A4341DEC037175C6BBD288BBF5A0478298CA726567A -9B74C32A527339C666A294A17F6821CBF243D13EA4B1603C292953308B566653423E7301A032E5D5 -E2B93F1C1434893633DD19501AD12728B5A1D9D36635B589FA2E151140B543D7C5E469AFAE8E80C4 -FC1D9CB6C3823CC1BB7EE40AECB58CBC1465792226B19E0FE79235115F6A3AFE19F98C5DB63D372D -D7C041CD940F4F79F2474D9CEEA0334FA04A97DC9773064895CF11CF73F11B4684F06E48F4469F6A -1AEB2CBBC52994DFAB3319DCE3A0C8C2EFA9627496F8CC84D3DF3BDC4FFCB61672780F294F453278 -AEB9262E66486856D37B7647141A82E049364ED3D03F925284A3F1FA3DDF4C0B48B3FE22E7DF9ABA -239D33CD300FFA8FD4B96192BD568FB18D325CAA8E1F1FD4B27527417B034841FD49E4A77F217062 -3CC8B22101166D80361EB15FA9020D24F61007B0A8274DF9DFCD8E97C85568E76D34AD5DB1779B02 -F034A69CCF9D4EBAA188EB3017EEF5B22A0A552696A574907F695098BD8A4849D5C8311F129447CD -7A3CF88B8191AEC0AFF30A38A9AB8135608A7829207A7D242F6E1FA7DDA19F5E4C28560D42DB4405 -77CC0C5F5803EEE897103ECA0BD944E320AC26553BEE7852EAA733BD13DF760056B2F5BD1243BEDA -BC3C1EA0531017D74B47E18F801A60074D6DF849FD0532234545E5B5E112D1E7385341D39A89551C -80DC2DEAED5D5DA2A4BE5015D297324E92BE64C68428132E6EC654DD4BDCC6640C68835FF8A05E09 -9604B8CD43D3AF2B2FE10C8AFEDEC5A70AF8509D12F662338CBF166D9452CD36331758AC4F4CBD7E -DD52139AD27DC52569877FE709F297444C4F31899D1945C81B14ABDECBF31DC463A4148F04EC4FB9 -703C158216C0FBE65CCD450043ABFD4E65BF8B28CC148252E9F3E797EA0B57B8721C94CBC2EA602D -F2C57E87938C887A382D2659226463BC7D6A1DA87F4A341A59BEA458177D3F18D1213539DC0E301F -6EFE0111FCF6921368BE17CCBB7428127E0C059C2C5ADB2A3F0197F0CEAB77FF7F3C027A8EC3EE76 -CF5C986EB47CB60561C773B3A2DA47B5A35394E29373DBD5C3FF4C9213A89AED77CC4F3FCFC49EF6 -EC7557C521979A546983C106B3627B5FD2D71CC5F08A32BF49332A89C5DA71AFBFB94C949A91220A -B1F885C981423AF93F73BC1CA4D92D9DBAE3EFE6A76E2DE3D0F74FD3255820636E3F1A6B7C185306 -23C12AF90CDCD2C0A728521E9B639EB6345D1DE8FFFC3B19C72E7A93823DFE3115E9E7BBBEB28CB7 -3DB121AED8920D47D8CC08EA2E472E39A4CAD5881B5C4204F2B732AF9D5189D25ABF413CC78714CB -01B1D8CA5565169A919DC481F6D2E67F1D490AEBC5CC62A8F62C1A323EBB55ED35AA5C8D6F8B970E -93205C2701CF4817BDA994FC16197B469ECC5F5E9DDF0FA05640C2E571849571CBD26402B1EB1E80 -3FCF423345007B9B52B13E3B034E8CB3984B925EBFFE719ED4F39F3D0E3343316A6FDC26BDBEA88C -4366D3B2F851D2B244CC4408251AE2C77348CCE9DD8BB9C89800B572D38C5D1CC34C740BEEBB5DDB -0A8BB251655FB989840D23205D16311A9FCCF7C85F6DFFEA9704492A4E7A8F6C0BDC29745AAC2ABF -AEBA02B0E7AEFEB92BA63AB0DF844EB09D505C3DFC1058CE42CDD8043B76398401E1DB862FF9F76C -05E8BC6260A4443CF494BC1755913D51745BF45ADF2F8C7A9546D7EF4FB11E9D94E4539632C2A396 -06D04480EE459408D7A2A869807A4C01881C1BB21C296A402B5E6E07093D833C3DFF075F4DD426EB -87B1B8DE16C146DE79F52F5943015331EEB852809CBB8E1D6460AC4D176FE96F8D19F6CCB22ABBBA -A27C4497D91312C3CFB5BB913B314E43D2EC6AB6897BA7C34CF2CAA6DB4BD69EB5DFCEE0AA917D69 -50E36A68A4C22A60DCC69379D47544A58D640EB10DFE120FCA843B588CA8B94F7869F97609A6FE03 -AC86EC1F7CEAD2EC8E81977D1B946E459DFCFEFE65A7BFF67E66F5F78A45D8DF65AF0146DF74E024 -FC042328886CC1DD7779F49CDBB750345CF83CD678A6A8897577299DEB38AD665DC4F21CE1892A18 -C256F318107DD3E9245C1AD3BC93CEF7B7BF057E33EC9A3F953251261AA3D1A8347261E70A46F777 -3A84F3D4D1A0DF6DD22A96429349DE0D180310E17955B10FBF53220EF6483D03C650A8D5C16D63DA -F65C21ADCD6C2D0B5D4ADEB2F5526AACF7CF42F9A8BF4832FB2D4F73F3D5FFD984B572232F87BD3E -59133ED3D2FA19F7856AD812515C74F7D851574019C532C25F8E163E595FC9C83E3E820C3CBF690D -A62578A980FC0803EB6DB9B1E90E3256BD4650816ABE5EA86CE65C2EB418D0ADDA5F3EA04E17AA8C -4536CC471AC20236E66ECA3619F161DFEFA485386C30EBB86A7AD930FD0AADF2DA69DCAF26C0F677 -206E2030E3B15B3662C0AD03DBC1636EBFAD1F2F2C37F5FA9856B0198C5B1D80B69C5EFFD94CE071 -5135C649C26B9BA1266B0A5B270CD08A706166C0B320915C87B27DE21DEB5D7E4806F6E700B7A06A -4E29B629CB40761983E9CA8E34E869ABD04DDA190BFE5A6EE8B22D7E511B84EA584A84211F27AF89 -18DC5AF8A1FF2D360B6BE3CA8E66BA4CD2CE6A25E7E89406684DA83FFBCCCCBFD0844FE3BECD7DE6 -7764C59C022DB1168D585FE25073FE00E30218D1DFE115CA1FC606AFCB04F2A082EF91788B6BD096 -84DEA31F20034A91AB9D971366F97B5009FEFBF1EF0AD941654081B1E8F0B2EA495069A1DDF11DC5 -6857D29533DC857958B49D1A0779732819FD22E437084BD9F3C4F2CDA4D12CA14431937AB63A03F9 -C040AF1D801F367ABDCA7302E18A9050D6026FBA5A5A7FAD44E31593173CDF277CD737D1CEF59FE9 -684252BC0DDD00A80E023B88222494C1C8C0884230AB11D1083225AFDCDBC1E24D4AD5FAB396D2E3 -70E44A7571B230660D510A5076D8E35F7DB72C0566DFC119EE1B8AC3C0406950A3C4A4DA36BDE297 -040A27F70753A87E6CD593DC6BE9962261A99AE5949340C5D45C94A9AA3DD636CE8B497BBB812345 -7C824F443A53B3EE595C38983FE3E07DBDC6ACD55CAE8BE1081AFD4857A5F52A3C925143507A3C37 -F1992CF72ED0D4C48D94AE6CADDC3BC87AC3A3EF035E02181F78449E4B063B0835E827644051551C -1603E2EAB5875F28FC77BEBA6923428D5521C698C6B7F133B0F689F105FDBAC30A8ED2F29F0255DD -F8A037B81F04EDF004CBE639C8DB0F94D0C5DB92D34D66C2FED66CF8B895AFC4E659D08388EA44EA -E83CE459E5BE306750A682B627802990037157339BF142BCB9C08FAFDC3C3FB16DC3544F62C6C7E3 -3E20CC4FC7CA21E2C3F6C546CD78DEE348F1A4C8CB548EF20C049678916771D83ACC9B7B22784AD8 -580134471A3C79BC86B5D6D0D305C32E6204274351C94F9DF45D9B2AD5B5087A89F90D6AA033E4B1 -D1BED022F36147C7ABD2B73134DFFD50907258E610C3B20949E141172B1C6A76DB238C375021CBA6 -645CDC26B717428B5A9B4D3F32A4B1E22FEFF3BB93FD889E1DEF8087718D5E3E650FE4A3330DA9C3 -7E9EB499DF5A342D8BA4C0A033C3347CB25A31BE143ECBF91384F2381E323E7FD3A82A3197C18905 -3200AE2C86B9D01AB0B289841EA7E9E9A26966E0DEF54DE0B85D8DF084B8C590081E444BAF1E1F60 -670FA12AB97159318624F2AF1B5EC7DD83C1073A99398D2143A52D10A13C201FB356BC9E90C63BB0 -BC2D4C42AF4A8B9C8C4D58A1B32E0597C63B3F8B3E893BD3BE8C60231838F1BC78E73A6C8CDD5E7F -2907F897FC8EE99BFFDA7338BCEFB5AEF950E5549ADFD207AEB15846B509FC57989883642498A381 -1B8E5CDE69C05924EFAEC232FA4CEF302EE3251366ECAEF57D25CFA3B4A9E6397D996F421C900BEB -CF73B038FE7B16FD0A1172AC2F40D19CE0B02FCEB8BC47DA5344CB933C7FEC950184F78ACB32D3E5 -E290E84BE753B9E7A7BFC4416CCF29D023760C06CDDEF2505806A65E1508990529245059AFD301DB -669D41BD72BF7A80A9DF66B876B3553FDF4DD38D15289AF7A1AFBC53FFFF135A6348DD784AB42A6C -0D6AA330B069607E2DF3CBEFCE79D6F63E274C9E73A33EB85246D5EBB986BFA923DF68B2B8CF82AF -6C33E785F35B25B1D1D614DE85A4F4510ADFE42D75B5FA5408A59ABE53859E28B3D000EB9C6A7D2F -67C91DD14C895BA87B9CB57B851E5193FCC2A443AF85FE28DF6F39537F23A058BCF81DD8C04CB2C2 -5040300F4C55975E856DCB4E21E2B5481BDCC05601942FB25BB8A6B6F93E2C2A33CD478B44655657 -C557EBB080179EE5D98C5CEBE0B25BFDD952FFEB258014D7A5BC4BCA4F1A23BBA73C454B12960451 -CE1752401B0151CB2E01D5C72595095EAE91D8D3BD55A54A2AEA89239FA176FA7CD6F16BB0733EF6 -CE6E77763A23AAC77DA88C8EFA7BBB2991E472FF2075FB25A75ACFA70A04C28764F4AE4C12051B25 -B120CAD2E3044DA35C1F94135DBD69B10DE147321CBBDC814CE99982AC1D76CE3D3330E41AB31F3C -76BF89B95EAB81AF3464C732D5B1411D97DB36C9063537F64756F205B16ED7058E2CB1D6946C00A1 -A0CDA9EBBE924BDA6C7D7B605C514A98133907B793C74CA858E82DA3519188CD974B34DAA74265DB -5BC8550D5F0B1173ACEB87458BCE2AB1F96996C811699A0FE4A9B849D39023725E2B1EE7E426D30A -6C5C75AE6BCEA6DB41E4EB2035F7F924E6B9F0DCD00EB2BB014222E55FE387FBF5B9B7C04F4688D5 -AE3529FDACB38B5EB0AF5C3A874C1AA6B17CDA8D1E22EEE05A3DA88449200D3D0D002DB86F6C51B3 -37C8E19F338E7BFA01E1202612D50E210140947D5F350E84F790286C3F679A5D7E43BCDC337265C2 -631527FD62D598B7CA1F5835C0441881B97F5197901ECDC4F195BC665A846823D2E41417373F8639 -567B228FE7B73D781F07A361AA49C3E9D80FE5B2A32C4C1E575D194E841967B08D10405FA44EEE28 -47DB9372C5CC931E50469532F1BAF577F680BAB4E30B7E1CFFA8574ABB679789F69A8A1BAC07B7C6 -4EF5CE5EB00E97B36FBEACA9BBA4A13B0293D34BDBC77AD1FF88E5744AF009823BC262511C4724DD -585E7E17D90F230F7A5861B0DFC42F0B4E49A04EE0EE4DADB908479DEF8372F334C53D2BA5D855CB -39DC7C9550F9D0F7F77E82D5A59FBBF34BFFE92DC9E6668B68FEEAA4F20053433D6749162BBAC5D0 -D428DCF2D58D49B127FA2E674EDC7D3613B1342F4D0ABD7F4C5B049FBF78E804D5F16505AE7EDCBF -4D6FA08D72890F5D55199034572AB4B0C9A7E7F6F5A403198864ADF113CAFF5BF9D4AB5B16F81D0F -C2188FC80875E10034D12E30C0364F8F72797F1AED525A2712A40D44210B813DF5A29C84E9F6D51B -1D60A5F6F938FAABF878D29E6AB252D95D05FC1ADF5D4CE1C9E585219112112BC6CD5C766411FBD2 -2731794B5DE0A27AC57D3C57926807469C360372BE529098C350EFE2154B87F1205A57A0B04C5206 -CC4FA66B8793BBBE492CC3271FB4F90A28D0066E0D7F63B8DD01549A05AFA5482C29560ABD628568 -75CAC16100087540162473498C14087B29B86B7BFAD693E81765CEC781F3FC80E9C7B410E9B55B88 -114191A1703C638DFBB469ED1DD8254B1407003A319CE74AD419B077F17047A01F0BC0AC8507191B -F72D77D9333C9DA8C9DA733EFB5305F49CB8C7BC451321ADD7D896395D269DCDFDD084EB3AA70338 -6C0697E962929651164135C094D9BB1C9B949D5EEBD3BB17F02C98C813CCBFB23C2C26218A2F4C63 -9A8B9DFF2C29406037F91938A5E1227310728428B56F48108CDEB33BD3191ECA89F947271983DB77 -6B2BC897A30EECF2601EE3B2A6F0E135397622AAC1F2DF523CE6E6BC720E13CB530CEF4AB9C8273B -D3D81563AC8A8E6C44A195112DAF824BC7A72FCDC4E129A480717BEB01085DEE65EE4344D0B41EC0 -BCDF842566B1D9F5353B1F6A063FFA6CDB06EF634C8BD5A7A63F991D178F56EACA653DD67685CE49 -E98C7554745A4AC533217662D23E1D6937135D13BC2208EB8D50560A2BAAC319DFAE478B6BA4CA5E -DA20222F0E9BDB0806320ED1665B54A347DE0C42E9F77842DE4D188E7E824EB2F0D7AD163F05480A -7FA99C5A603BBC5DBC843774CA66E889B945054C0ED0B1A4BB14324EF901B023C208CB95DFCE9284 -89789690CC45BAB97BE449F8E2F5AA9276C0571303E9788C46E7F789555BFCDC3FA9ED8DA8AD9BA4 -8B3AE09404664391E63A989EF1E24BB464043AA099E4F2D796E352EB277106D8D81BAF2F8562EF46 -BCFD1E0047E8018CBD973021DC1C1D821AF03F083F0B088A62EBCF2BF6C5B0FCFA441AAD1625FDB8 -34F943DD47A5A42EB3E9A5B49641F797C288B799A64897F1346070461B6D535E0C4ED099199C387A -3176AEDC7DA7E7D9E118E55565092A36F7C74ABF281720C0147F4E4F37D49436466C61FF12764E30 -43D8A6D027E70537164F0E7942F4ACA42BB2CB136177EF7197E76F49AB403F741C0EF902FEBC471A -D6C627424320A8C3A1F04C310C511B3F91C3937D9ACF459999C18A33F2C852EC38CA806599C728C5 -43714018C65E2C5F430F6270AF52AD71ED38813B60440779455F9529A4A1623CB9F5422B9216F9CD -BA913B9A1CD95DA225E254E8101216085020660509D03A034B5D7E32E3DB5E5962A9A27711D4C3E2 -9CD84057F7D0D7E8000947AFE896F8523253391D2E11FFFE523366B05C532D5629A90741EAB3D4A7 -31D3F6D4F03FF93233DDF88BB1913ABA22EB9AA6311E3144381DAE29BCC8639958EEE59ACCFA06F3 -5DCCC63E0609F542F3EE5DFB1CF718CA3F328455726F8F65E23ACD970E4049225998371B63E35AE9 -8DC54D8329B8DB0901FAA63129EDE21B158776981D4D094013C096E9CD020315D123C03DEBA21E97 -E4B584B4BC0AF25F5DCE53C2DC0F3E61F99BECAB40799478BE7F5AFD7F68E23EF50AD6645C967EE1 -1206B6E791769428ACDC370D64E4F2B3972E0E4F442297199350663D6E772FC6777A9B9DE215273D -082CCE4E8678FE9948DC8D5B0E459CD02F1645AC5620F3571A40B4D5A17DF5CFF48B6C843DDEAB5E -BF58FE13D7DA08E8AA7902119248B3B151DA583101CF80853B0150FE05BDEDBFB50A7FB0F65728C9 -3B9DF48CE8AF1DF1FAC25C1D58E1AD30274A00EB54CF2F16029E1AC0A0919C0655474B9A6936AEE0 -FB74BD185FE7D70BB84786997D34A40326A74356A4AFAEE67B6B26D1C1A7BCFF8697B55C816CCD77 -312C332A55315DC54F9BC0A0F12500E0A76B3936292A3DA2DDF5AA8CBB9B5DC32EDACC4827D684D2 -74E65B8B76FB2C2B19F7D5607523FA953E34BB39032C05B1C1244304606C55660D3CA8607E764EA5 -B03DB7FCAB5CF7788C6E60EC8C449BCAFD90BCABA4132B6CBCCFF16784FB59B36B77CF0A9EA572E4 -CA0A01C725A6CF2E4500CDDF5BACCB9094D48925434F044118CFDC2696AF5FC0CAB3884107ED17B9 -BDE0C0104B1292A1F8C99B06FC4A6360B24480BD59DF0488641899B0F42B1311B582717BA7ECFEE1 -4143654B5371C8B9B2D80685AD38D897AD1E64875C28C7020A84FBB3A3BBEE16617DCB9BC822B7C5 -9C5A18C0CF7E80163ADFB7AA03B7CDE8497C1697D90F2ED90F813095C5B91657FC294EF0E341DB33 -92ED860CB2E0AA09293D0F99AE9EB54C761CA2DB1E51E1CEAEAB276C7BD916C68510D72D9A67468B -09B3C39A7815628FB126CDFD5EFF59CC8184C0D35A5B5960F824BD175495DD3EB12A4E96008CB13B -8C5745303E66CF8608FF27C4709C1D854EB79608E52F068FEC0151A74C125EDEAEA555C198FC0802 -7BBBB802835E1D435077AE4B1CCDBF722354F6C572BEB1376D3E342195FA80AC9722EB2F46E44DE0 -5F5A227B731B8D4A4B6EDEF04AF2C5DEC2EEF8FF48C5B18710ADE3DBFA0C956505B6DA9CCB7CBB83 -4DB6CC754948855D833670FF0AC42A4773FEA8322BECEE04CA74AC2D66855132D11A51524488C547 -71B5B7A512796D7D7AE0F9C1FBC9CBDBA0831074F4D200349D0CA40537B92496692766F020AC43AC -01DB8B2AA2EFA9D21732BE3A315F6CAA402BB2E61D40DDEBDE11276D90C2C601A935C168BE600464 -76ADED15087D54A14C68EECBBBB590927C1E10D291C9285334CB0C80EDBD392BDE4D535EB61F8E76 -41F58AC1DF5B1C5A5D91E3E27E05CAF7EC97ECF0C85B6425197AA856521ED701E5AEB82A7F52A8BD -7DC97D5B3FB5C99A5DF84D1BAFF89072922509D76BC6EDB15CE5F9EB8F4154BEE1E82020240283BD -C83A8E49AA9A2649B7955D5C058F2818A63BD0BFE7EACED4A49063C489A626277AE1246F721C9926 -E2A2B6C31045FBCD235F3CC58BC4DD6C57FE998EBD1E9FA5154652BE3A1685BCD2EFAA079A3293F7 -8142A6473822FAB627927EACCD61B3E99C3077103D2D19382BC7EE15BAD0FDE489602D055A01DBBC -F91A566974559D1B477C209416887053169C3F8F59955BE4DE82B60558CC9AE15602A93F029F6B43 -29E0E62A03982DB32F5229714EFA1491A7B24AEFE18FEBC2C93DFE50B3F641B51BDD33DA38871BF5 -243C17502D00AEA2D9E9734E80A96788D4CF5BC12A42BC386162FC88A7435EE13200C1C2C6CCC5D2 -1A03941007B4C4291BDB711446CEAF27148104BB240357D5EDA0EA5A5CE27D4A83909D75BFC05D75 -F10AA74A6DE37D7DE15C1DDA3AC3045DA6CD48323D904E716B445E5E096FCB379353ED70CF4B6FAC -102C762711079EFAF13FB74C9B47AF75F3F6BDA2A4647D2AB47ECAB64DA6CC01479F618E8D2D0A36 -45445E8744683CBBC560D47C98078B84206E90EB839B02D37C852B8E284463D4E4D890203C3D5B20 -352110034EAD6BD7F41456B807E1DB1631A9D499E52E9D9853D86728B1A2E511F40F8CA1E4724A0D -17ECD640B52FF6C66E28693D89765FC391612E5889E77423EC85CBD0A038B6BA98B607701DC0C4B6 -6B3B28C7790A1F1EB8D051DC98276DD9CFEFAB3F65C1C928E48A060C992B392A43E56EAA6DED896D -EBCE71F8245BE4687F2F1B8FC0F43ECE8DB0BD0AB0811C5CE73CBE336023A0D66168B34A95B4B0A7 -50B3BF1D197E3C042C7914FA731D7831AF798E9429571CBB977E6258244E84701E5FF91D608F98FC -3D68A4EE5B81D5FF38B6C184F6118B875F022B4CE207DC7B37E1452DFDC591A3E506AE82C7E7BFF0 -011B0A3DBD616A993FBF878FB03B6C9F2055A2B095D29361F8253C2623653687FE0AB98078F6AEE5 -FC2C2BDE0405EABEDB3A33EB7F04CB6837176245F190C6BBBCD64522B12FE7F9CDCF201A1AA8A19A -7BBC4AC064B4958F44AA0F8DDA23835AD28A1FD0EA105DE2F395385DCCFBE2261DC5A89A23AF606A -3985E5038706B1FE0910400E16BF008F250F3BDE3AD806C735495D499F16F99275010478FD2127BF -7CEDD6B5BD505FBE9BD0065B4A7090C9D27CD5B36C3AD33E1B31EB6D44E375003B51B909DA50BD18 -218418B3CD22B43278B144BE78406EAF16C7DF6B6C1C6238004AAB73736B38E168441DC16F9A5CF6 -0793A18633BC43D78674D12D38CC979F7CAADA6EFE807CEA499CB9FE616496682A66E04BBDACE1DC -112B2156B9B0B20A58A8CB43FF0EEDB99805234B9A5789762AC7D65F5A319C33F4F7438CD15E06BB -80A7A97E976E8CEC23F4C646A5821880A82B2F1DC27767F090997E91488BFA15064B702F864FCE65 -05D6CEF87D2A0A12B55BA189AF269811E3B8B850C8401F3906C080D32618D9698A766732A40A9FC5 -A94E5BDDA3D028D823D6B603B6D17DD046DE181FD989EA0F80B4CA62F7973E4DF5E032A31FE6BC8F -5CDA678D4A72787EB8253EA5882C337CDF9AA3E1E7D9536DD09B047CD8962E773F72F6418A3AEF5A -289B3406C152A50CE7BD4B493FFFC27F6AA52F79EA67E362FD92559AA4F94A2F787F6C735DFADCF2 -F08AAF98B80C53CA5607A94F25F04AA65A70A75937840E73055B3D65FB054C63E2E48E68488C9315 -A13EE949E03E46723C11CC759D222CBFAD2E1A87CAD779B23D38F7E2F660DE1388EAF1CF4D18994D -75C6CC63F187FDB949940C18B537A0AFB12AC5F67B0283CA5EFE2E764C4369104B9D3B06490D1244 -C41D6085C85F1106082EC9DB84586230511C05C82412D2CDF3DAFBF4759A775628878F997415296B -C416AC8352A6C6988691FCB831CF95C10BAE691ADB3BA2918B35924BD5C3ACAD8B137397B10AF82B -479800FE16D472CD0CDBDAAB4F882A0649CF561004B8CB7CA32EC129D0A415BE6CB91DA2B65F44E8 -0D138808A127E851A7FCF927E99DAA0EA2D626B77A16C72E37F058A3B882FC4955DC8CB6312434BD -3BCED75780B13590BF4FE8D64ACF0371F9FB1D361B05025852AAB9EDA1A0C997CFA58052C454FD45 -1E6C1F194F4D363114E312F6DC35BBAF357A32CD200A3DD9654155134259887D677ACC44F89AA401 -CA27282DF7DC3F2F04A108CBEF2558DCCE28BAC2D87B8D5B7181EA927F61977764F882626D4AB338 -D95C9477C54E9C36012A3CFFBE199EC8120A99D2D70A21F9D9A0354E4EAC7947990E8A6E0601796A -AF6F14E758CABCABDFBD8204A8E748A3E5FEBA570D36E2BF474C0083229A63F96114182321B2EBE1 -BC76DD193724C4588C1D39D184C332FAEAF4C629F2B3B2F49996E46AA6C9F497428BEA52D58876B0 -DC07B460248BC85CC16773A5DAC36CDE8B152D96057F4EFAAF8B1DC10022038577368057699B3A37 -178A9F1F6C6CC60BAE820B7ADD0717911BD23A6DCDADAFA32473491AA80CFE90F2A77E24CE2826FF -77B18B869C33FA292FE01D6477765044C7D14A548B28B1360125C6933F05C58B0889390537CDD16F -8E967E0B38579449DFC1E07389B7069AA8594C5103465D5041CC929268DE863FADB6925B350AA94A -27D421FB7FCC81C6B35F906F12246B7A5140511A97211BA9BD6831A508E963FE8BE961332F557808 -488F06EAD75E86D60DE3FA2425AE8439ECB9112BC3E4D73747C1C8E87A649919827049832DB0BF6D -A8C85C9A2592AC002809070900ECAD52A56F1BFD456AFE066509694EAC075788456B0B0BDD7C192D -321E9FB6AADCAEF00F570F22CD4A5322FBCE8FA98FAEB681940895426270BB4319C11DA67D88552A -7373398AEC5DA7C9CAA9F3B34581C6E968DAAAB2751CC012199DD897B448986CFFBAE4D412BF9ECB -F46742715A9569932516259D3B3A5431CD7028E42FC751C434E2B714C718202BF02CAF9B8A2075DE -922322EA7CFA605C8376FA958B8FBE43031E1026FBE6126A3775F643EA67EBBD97F239FB3C435526 -75CD08B19CA5EBF53B40D728556B4481C7F73EC71CAB0F89E34D60C69B272FADC22E8E7BDC6210DB -09FDD913E209F49FD28E8712B8508904620250746CA3B21B026EDAE60A2822F59E912E626B93E0D2 -BFB3230DFD0E54E91A1DBA25A609B64D41ABD897A5D21764C351E85F9E87BEAB9E645149AD32AEEB -B3B1161032C701647115F98C1C2AAECE871862D91D321AB90F3E923B1FDEE00D927F897AA9812373 -6536E2E0700F10053D7E6C589BF66029D794883EAE4C8228941CE96565B50D48887B5314A2E55379 -59638222A6CA54C77CBABD460DAC11B063519AE4F50D93DE41763BA7CFBF4C7724360E750478EB62 -8921DAA065858341958E4F3EB5966C6DD77C05EEECDF4B5F6CF19AB507589B4219377959BD258EC9 -21C34FE1DB003F7D0FEA3E2FD6F5DDB0A2D62CA5A2CD3C7AB457DFF25094EFE04A9E1B9CE7AE3F30 -026B1CB039228D309A22899F6E9B9BFF922E117123347967D7C62C670E2C74579C35989925603022 -C17B1DCE378031ABC9B4B437C7B6E64620932E93189754C01D4B280B8B08699B2CA953AE4823BB9E -E34133C5C95B3290E1BF010705AD852C72BE87291E1034B09F44A95B6A2F83FEE8841DCF661770AF -44D0AC7F9CDB280939FC5D953D525E0B41B7BE188D5C794687330CD770D24D9CD53B895A253004E1 -8A31BE4E82B384 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -%%BeginResource: font NimbusMonL-Regu -%!PS-AdobeFont-1.0: NimbusMonL-Regu 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file PUBLIC (Aladdin Free Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file PUBLIC (Aladdin Free Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Mono L Regular) readonly def -/FamilyName (Nimbus Mono L) readonly def -/Weight (Regular) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /NimbusMonL-Regu def -/PaintType 0 def -/WMode 0 def -/FontBBox {-12 -237 650 811} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -/UniqueID 5020945 def -currentdict end -currentfile eexec -E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942BF7D6DD84F1664B89 -699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED2AC419FF2B2BDE605B8EE3264EDD6641 -2D4F21C64AC522BDFC7C5502F9C3F3E5592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A2 -5032519D1868816E44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8A123E6A2261C63C769D2F4B60FA2C438AD7D199D8E4 -5F7E7C9A605C8CA14E21FCD81C9A515FB8DB6F99604534D06EA9D87FE0FAA852899C9D0595C7A97E -6C55F79FAC45CD38E87B10D210CE7501E88C8FCD3444354365FB893A12F596AE2C1E70D5819EE0D0 -87D10BF8DA96F3DABD5405D28C4228C6C31BA4052464859640933FEEFD8071C0C84CDD829A9B1D0B -A01F25A4D50EE2EA2B45160CA6333B2D2800306ED2BEFDFE155E9D9F9342EB8D5B0ADBF2460CCC98 -643FB1287CCD28ABA7B5CAB92EC39EE2E918990372B16F8487EBA30EAE88708B6CF33B6C015D8096 -C7CFE2F139F52052E3925C0D50FD64CE68236D59CB83EF56BFC584150EC38065059F3308AD6F9A99 -F83EF4E6CB13855C8175E31417D190D036B387D3952344A950F4D8C7781B307A094DF1ECAEE4D2C2 -FD747BC6F7F9C6BD0E90C19294F96C8C5CFE88FB34C477574A1B1630B8CC591529E59B20794DA32E -61DECDA8ABBD1AE956CF74012AA01D42EE01E861B0AA6897C864788AE59DEF43C493246FDB1ACA55 -4C12594BC7B33657A9ECC9E3D1472EF826073F632BE540C35FF6FB40566773F3BB2204D3A579A08C -CBC844C14B18C350F003B9DA23A570C362D6003893CA32F86F59B829C78EE3188B6E3F7FA81D7F62 -2825C639638DFB78B7AF1F500F5B450FA54DBFA5CBA277C794ECE93275A3DE0B452FDC8DDC2993BA -A42F28A636008CDCB03EBF71BDCAF35019778993443F88412AD2AD0D7155A3944606463266322DBC -0244B07DA1E9C27A27B59664E8566D7A54CC03E995AAD008B0A17E2C3EF61F720CE7F7788599C4E4 -4C709CD5C31B11107F16AD70B17B9AFE2E8CD922A7428DAC171427FFAF51067307FAB0ADB530E701 -FD22DA22C4CD3064067BD4F6089C4B2C87937DD426E4E9D2F60E608288BAC9056554D04947E69200 -61E379CF5E81BFD32FD37EFAC1F61CEBEE551B0851516471A7472C60DF89DAA9EB1DC5A67E479745 -3E69B9E22BAF4E3CCA4192D603295B018C4AB69D18DE52DFDF15E96B557F290A4B8C5B1E7A6CACA8 -1F2351B97ADFC36995ABA43803A6E5AC04A3C93495F6D38106B8B144449C07D1358210F9176E1565 -72363CFBDE576BFDF99FA329DD1346E83F79E06CF68250CA57A68931BC7F342AD295D0CBA17AA95B -B8EEB53EA6E8E660B814E9F857CECB14F44A43288B69A9E7908D55BF19E844359879D28CAEF1C38A -36420185D20DFB32C2E002202800E8EF3D67C5D50E919657CA958B538D537D503444865331D79BFC -40312068D72364503BD0CC84B5F30A74D8B5B6A26AF2DB764564FB65A6BA8F9051AE2B4EA458D46A -4569F30C6E77DC097356770362E6CF3F1661074778EBB44FF7D1E3B64FF75E77E11FE525BB121C65 -46CFD13300CA1F02D571B82A5825E6226D14FDCF27F06D87452A8B6C5DCA658535CEE2A795E58137 -D48E566B69D53A0C3B766E84C51EAA221C46999CC8065ADB2F129D5B630FAB1814C0C33B5AEA0EFB -B6E994D80941B53079AF96D90A0B924F9B0E319BED9836B8F9053F868363D3CA554CBB181863301F -8CB940872ED5FA7BD18CE39218B5AD8AC57D0F752D941076B1C64D99BE0DB86D7A6D96510D772EB2 -4C587F11779BD21CFE5BDE1F29C1EF9022B2B8BCD7F91153C845906722477829C40111D810480F3C -F62DE8DBA7FD86CD236E656618CAF6FC46827FBC4898EA7672F8C9971AFE43E0E01EC8B77D4AF48C -BF1210E98C1DB15C16D149BFF58AB0270CF015B107A3A50F5DC8F37FFB92EEC8CB6778DDB7CE4AAB -C464C4AFF654223006A550EB52485A23D2B4AA7198D3CD54418102F1E9A4FBDE37B841E56F5C2C53 -966DB9B66B000E4588282E3FB80C2C519339F0002D2F83C979EDC5827A3B3C8EF8810A0F9DACB6B9 -998E9AF6551F56313DC4011904CB979AA2D32B11A811BC248141E4B9734D9FB7982A5671002D8279 -CAB93ABE057474628DEFC95D43890DB1ED34CFA8A20BDC3D874E7679A396158E522ED0AB969A4E3E -C7E4474E192590504D54DEB7B260B7935C4E56548A7D121AC1F741F8CDF259EA1B5813175A77A1D2 -D30BA26F65EB765A04C09ED51F69F41551ADF399E6AA2FC09788137BEA4913F17B8EB838C38FB272 -1FDCB55FD65697FF0B850E7D3D1CE266BF90F7EC06A9A0876BDFE767D3A918B092FC78C775F945CF -1F96E859C03DBF630D9A940939654C3549D8F7921CB94EE23D5A0535DE9DF31EA0F937F860B4F220 -A99ADDFC343D7CF7BFA0B803C12C26403F0DCFFC8EA786D0D8A8D9C367419CA8AE41190CE93A8086 -583A1E6C9D70B612C84D87D2EEAA71EC2DC12F4CDE6A821303D5F6A9BBDB7EEDCD289E80FA3B75F4 -7F481B50719DCF4A142069393593B9AF9CCEEAEC56A35B8787193D7C88113E9E1E221D151E093B01 -9EF89F6118BEC4735103CC8003CC5AD1B6727B3226CD44C497DA7052DD681695DBEC3397F9598C91 -77701C73BF0594CE93F23D50EC5BEE2FB9DA1FC966DF148B27B28EE3C89526DD6625E2887F9FA076 -7C127C609EE315626BC14D274FBEA56528DC06A27B2D476D46E9E7916590B156A5DF04A6CB15E362 -45D77021767B6E5BDFCC679670263FD891446C3371B11BB6E1DF60F960AAB4149D7753E6A5C33810 -C42C8BFF4E935003388506F8278BD7CB672F132E065AE684DCA0B9064D01DD620E7FFDFE04F14277 -EFE8E60159BA0FCA3FE2F28B902D4AC275D19F0AC6971EBE827C4A232D87650D2688345BCA78F879 -077114F0463C5F058107B669566F8171E4E284D278405580F04BFFC9902784216E0C9A17AA9B2935 -E66E18A783F723BE044389B7E9D62AA36818FF2EA406C3C1A9D2F3436F3EE7DB8BE86AFA8DAA6A4B -1B84611350D8D27605509612B515E16AA843164D5D0805E36A2B9EF74C5F6A0B9D59A04B55697123 -27F4B1B30E9587CD103337639967CBDC655AA46E80D2CFD24BEB50815B5338E522B3A7AFE8362AB4 -F05D8BC52BBA9C5089ADA8C89529B0275AF422EB540D31A938B8740860756325B966B36817115213 -FAAF92DE63F6BAE1E0064BFBC5588098B61EB83C71F1C2082436D37DAF1ACBE186FEDC4BE7C1233B -6F18BEC5F99002D21CB7864E4811F7AB3C03003E1E4490AD1AC793BD28FCD5EF0E6CC30EF39A08C5 -2F71939B0CEF620DC69E31E39D6DB969049031B0C92EF2DB653D97F370141456A52985076B268652 -FA2648C792780BAD637C4D7581FB2D62011D57E293719487CF2D1F013CFAA532E1C2D39178D51272 -A6AF041440BCA174B5CC902BD7390C7D3695056CB4BD7791F9FB6D88E7A70DEF2C97869F5DBC5BD8 -23C517C7B7C39D624DF627DC9653EA5347BFDA80B723F05F6DBB4C9EA501D862ACE05B9DBDF21B70 -56FBCD8C6D4B85873DCEE6166C8B5ADC0316CA12D9639F361B15A42F00E1D62EDBCA1111972FA0F4 -5758BECB31DB38316F3CDFE1B41748C93ED58B67E9B57ABBED5924A6D53E99FBC9A994A6489A8BDF -13EB685548B4DC6D62DA7426C22227D4D43B6FFC7B5EA91C896730253E8941AFEE588359C2BECF6F -FC415B9EB6D31CCB0F6C7F85853E6449FA6D627A97A3CE8303F148393ADCCCDFA2FE085C6908BE5C -3C05AF00A6F02840206C3253A559AC5C049BDDFD11AD9B118403B84DA10AE3C470CB9A9A2D1D7B73 -2F59F5FE146DEDA60AE750F551AAC934621B4470E1BC324C436303E25F81D0DC3188BE0D6FEC5414 -C20E4CB18952E12CB6423DF7124627ACDE145500D77A97A8BFD9CB50D1FAA008E2CE2B2505A4749F -1EBBB092C347023714055A9B63353AF9E7FEE05BB54C9843698101F79888A91531773830C2C967B5 -88D3ACD2192883D5CE3962D51084FC653EAE2C5FB2DA41DACEFB5C76812D2EDB5B109677289CD199 -8D457FB1023A19AC67295BBC1A9A20A426B06A368DF3C5DD083CB1180D287F5500F2C635EDE157EE -FCEEC5503447382D15C748C1E35F68753992E5C90F900DE54D18F8E1B355D1076ADFB1F3590135FA -D1A36F028E44F48ABB149B80CA9A54614D467F8D71CB310BBC7AC7100261092DB8C5BFD39E0AC6BC -2C9D6CBC3A8C05FF8A74CB21608EC4A4CFE4CBAA2D056DBA14206106044DECF59F957EF8A9CADE4C -9B19D8D30DD4FDE6A9548E50DB51ACA73330142153FC36B69C1C8D5B26D0C689B7040E81AC2C864F -D7C097C99BE5953843E172C97AB5684F35FB03A725A89DBF371F08DDF40A1531FC1B676DB0E1543A -EC6E97D3D2E4AA3D5831D8B3C952ABBFA112352814FB6FAB61A0D680E6640F6AEC8426200CF61286 -F7422CB2F78C61EBAA36D47EC16D7FAF8B4AF31D090CDFA255D9D7C61D46CFB22A7D6E1758E71ED5 -67E00CBD8E8F468DDFB477F091A2F915627F22FF47B876544BC1F03B6BBB98385F009C20BB1AA2A7 -A78674692B8EAC2E3C8069B79E679338DA57F72976810F845BEB6B9ADD32B95D78E5E60F16DD1668 -9C05FD82D36A3115BE8ED494A74DD211D58A2CDF983FCB9CDC29BF7F0E29988FA23560EDF514BC1D -183F3B2A22C09FB179B47E05ADEF48DF02F31C29875D1915037B19407764A4292FE44E741651A8E3 -BEB5F0D972B6327090F664417C84F84FFBF0AFFF8B1D85C822D90730AB4140C42A51AA8B1DBE4398 -4EA8566040EB8B341CCE23FD3F69DD235A080BA5C69AECB9BC732BC2D7D40617DDA6B79FB6EE40C3 -556C7DF9B23DAD89E94054B1345DB8402AE679FC4655A4A776C0150463F8DB2BFC0608EA1F124E22 -1DDAE6026B5E5D007A7E4A0D6B3B0CF3A2669E67C5E4F01551966A7BC48F2F4B6A87E740D8095E63 -F77C7A027F26B52F2299DE5B8A2F6209BCF3D31CB0235F998F781E5CC81E31DC424E008D46EC0920 -2951E5684804A0592EA47D6C788A20487BEA2EC8F2E6C1D7F378B62DB43CA43C4B366F8B4319631C -FE9854F0E10321CFA3B01C873584863BBEFC23C72C05E695B56E8A52E89AA2DAB543834D34DCAC5F -ED08DC51825C5257AE59850D101D84F4CAA1D29FC932F9E0EFFBF7A9A7F3685F61F0490CD3CC8988 -2DB52A757A6AF4C4E67B407BD2316B1C0FFE7DC54E43C87B874F57E4903334E2140B011484863CDC -ACA331175F2CF3D72E0042855983AAF8853D3015E870FF0807014C31D55060DF3FE1FCE157324481 -2744AB51322444632F9AFDA6706E320FFE82B8CBE242A19DF00CE73EE48E25FF49D5871BD3E60652 -298FE3E8D400609E232E0DDC794C0579ACEF89E841B2EDCA50D51151F65E8C1CC3B01EF1870558F0 -BF5743718C3E068617E81BFE120C6CA16E0924BFC2541177D53671CAA3AB641C41557DCDAE1A3461 -47B5E999C4541B08B4AFCBC187AFD653D5B5F8386DF6AD8FE69E21BD0567DF494F736C6A184FA4DE -48DC9F347787CA96E2E00A296C2DA05C2AD9BC423E9CA428D7F1FA12DC9353A302FB8C529AF8688C -BB543B45B2717EBF8F6C497935F4F3BFFD285E0402AB7544B3CA4643AE5A8B5250ED987A95FC1F27 -5B9707ACD0641BD0EE2AE9758494F8D8A51DCE408A38AC20EAF0852D72D84D0C6BE973326793AEB9 -55EAC6FE0A2813A355DCD22F6F2CE56588D1C055CDDFA98878BCEB6A018DB22922D2B600A20F8184 -2E665DF41013CA0947C4237C2BD60A75E2FD1A3FB8C8FA19485730B87461AD466ACB02DF8CA24091 -4FB090B3D2B41EB6B8FF05E1A59D9FD668AF70BA5BB72778953BA55FC5F9F626043450E1D09BC83D -8605098ABEF884639A37809A32565CBEFB3FF39EE53D6C18C58C272BB928E4410E361E59A50F242D -69747A032617C52DEBBF62364AB5A96EFAF642D9D82BA679B1D70FAC10A4EB62FA5CFC308E86368A -AAD7E75948F43598CD1C544A0D4091374D7E88D4522CBE902391641327E888E7748FA889DCE67ADE -61699E7D77763681CAEE9B1CA8837B2F7EF9C18CBCC538C465C8E2DD34616953CCB6030A222C728B -834911C1A179E2C770289407AB28B303E724D97F747D6134B425216A64C6E0B60F633E2B85300047 -E4C90339CE030A0FAE31E830C8ABA5AB3386A3B69267351A7BFDD66356AE5E57FB2994452993E90D -E7C4E260ABAB93C37831856A650D56E44172FECA01D6C7C380F250B82473960D2A2A5FB6B4DA668F -46E624ACF7FA0FD4490F485D640A3ADFC9F8652E7A38CE5799F770C3606DB4B8B947F93967F779E3 -A3C0572F13A5A187D31D7BD12A5C7BE23CB6ED6192086241B76C5BA6983DB9C93E4B208D707D3760 -F03CD6272EF3A4CE89B8E52E6AC5871A3D03EB975759AB4BE239E5EC7842CBB333E692CC607C722E -185D3C39164DD320C6945629C70FF66A5237C0A9520A1FAD6EB9816069351AB0F135D90CC0982B14 -7D2294AE4A38A527EE40BE9CDE2512AAEBB590E134388BB171D0956A7C4566D65A9A041BE6C4F883 -6B3EC3D2ED1B48B566A783292B15B6127920D247D494F070BB20BEFF60640B11B276DDEEE49706E8 -B2B21BB40B7F00AAFC594C492C25DCA774E0B80D82E927448DE2E74A9D0DC7AC9260096EAF187B6C -D6AEAA6D1DC4205B4411122751A5B22688404EA7C5861730371FFAC10F5AFD4727A0E402AB5EA757 -606B75EB86A05E8F774D6E430A1A3FE2A37EBB06700474239FB1CFA05EE44B91B82244C575B52E7F -AF934B04EEB0D933FEB57EBE326D75821C8B23EAA85B583AED4320B7F04B9F2DC591091216FDE52E -064BAAA9C2C9D9714B95A4558C21F3CEBE624B5403B31508F178581AF6863083ED762F1E2E34A45C -FDD71660D626FF8648F5D6C5E580D4765A67FB6159EC8077A9F0A88038C8D3D7C77FF0926E2123BE -874F7BCAF129D55A5B5960F824BD1728ABCFCC51D23936DE9A25C408D786E44C3A2BAFA4423177AD -060D21D38E15E23EB6FFC0B4120E814695D423EEFC2744A1FC81B4DF89D76F0A6803D8B14E75538C -AAD03A72517B86514F6952F6FD619D9E910D980F00964DB325318C045BDF79647F453D4A5CF4E61D -D5359782827229310405FBCF6107C3AD9DDEF9A9A339D5D5A6EB2E7838A0A43221BD62CBDF732DB0 -A638A52016FB35BA7761AEC846A023D3BF2D1BB183543E81EB7CAC1E5970CDC6F068C5EA118C7AAE -528D1396E6DC939112DA4460C890EAD5C01BDC438F5BB734218BA6270ADD0DC1778FD8AB16831D6A -302B814A1A44B07EDC65956C9E6CF4875DF521F3CE5B422F71081B6D69BD270F739095C9E81C0377 -934A8BC6390C420C4E4CDD9CF7E32544C68D884E15ACA3BCC07FC8C132D8FB9D752C15D75C52C288 -57E2EA461A6FCAD90C56843513F74461F18D7164BC597A28AE4BA7C86EE1703535A9B9ED50122627 -71FC12F102E800E0E1AF7BB46681BD2B14B614CEA91B7B2AAA35235DE76C0E113C92688F8EC81277 -D58C3406778E1EC1CC15F1CD9A137C8FFDAAB99ACE3BFC782916F1A877170589A92DC921E6740A22 -B84DC6BACDABCC76E64C79E3A588D80F8F4D376E1B426F15751CF7391102102F0AFAFD8B22DFDEB5 -48AEB5F30B1673023D22054A13391A0EC08DE6E7B685A0D031AABF20B7C62187C0284892D5EAADF1 -21BA28263EB863D5E36EA9C06A77CCFC0E17F593961591F84D82AF823EFE41044C8D606FEF83CCC7 -B0E961E7994DF8A3CC36B209D953E250ADAB8D22D7F2B4E2C9CA39EFA2D93E56195C1560E30A5190 -CC5B17FAEFCF250DF79F6B624A4B917E11C332222FCCFEC4F6A47BD9E75DA9854FC3F7AE554E91ED -DE144D7AEF38A0E3EDB5E5A5626374DB94F022C8CF549093041DE00D7269B7CE544E748439BA2870 -718C08E58FB4A77D93EBC04B7957D272AE1601D41BF85A2BADAA0DF73B0D3841D4839C85677FB2E1 -5F1D6CE592669FF4BBC9C69DBA334DC37706F2F6BE83D5863E8CD6A30C08640AAC4C233684E66B4F -E6B62D4A8BE9D531E47BEF5640D9B5C27D990092BE1597F6995C8A77BE9C18AAE6C1CF130775DDAC -41D34438FC7AD8E042CB56CBF2944932EBA7D053E9376FF398367450E35A1945FE23E05C921096A1 -5454721FFD0F429A3E06DC3ED36F1C170BE79C66996EF8337AFF85B90C5D3A4A94455AE9FA32E211 -7A63E59001F052D5F6223125BFAFA40901E98960ADF7BB886729DCA82FC3B8CC52B37FF2517299E1 -D769057F8154FB95582F02CB0BECC873A9C71796ADBD3E91324FAA94F2C41CF57C30B5897D031C02 -D256C909E080E70BFD1F32E69EF67031138C2DDCD1A8E4B65E485C23C3E450ABDD9815512D6F34A8 -4B9DB715DB2C7A93BFB424316E1AA44397749CB01088428F149A3B4324737ED9957FD388248462AC -1B2610D72BF5C073ECA567E7385CC959E37CAC7E05470160FFA5A9F63B8E9B082937E911586EA165 -374938F492EDF28CE6020953A5B5CCEC7737F9D9CC8538C4339567AAED3794ABA3B9F4EAE65466E8 -E326F6C399B36355935FBDCB9972F10B13494DC25097FCEC5A6398F275C8C151558E74C5175F7BAF -4155E36B733F75CF9D5C5979B0764F14D8306E06BA24BF791141E404C69F3F8FCCD91B9C58C2C671 -AAE7D4F9E5D6414E46ED633A5F78AA5BF04E652246A066EAD9E582B181CC196EA2D3CFAA383B5D0E -4CAC9336E119C08CC6AC55CBFBAE147C623B400453BBF447E96DE036FC025624384359EED7C7D5F7 -858DC0521377CF647A157FC3F188DE5EEF094DBA125510FDE34C570D7BE76AB5DF0A28BF45DDAADB -EA7EEEDB936332DFE93081E0AFD3FDD46BED08D6914B2EFCFDC41662A33B90B03D76D34F48D30FC6 -BBBB600E90E6AC7243FDF026762A44B4D6E4ECBEF48C9D7B696AF29EEE063E557D8FCF0F09E0136F -45D17E608DA36E59F2AECF8493F8D62536119B5F7E1554DFE3F6E8D7C9A2C6F557D18B4AF92C9F6E -050975C3B5C54F9B5F4E39D600B6FA2CD6DE203A174028CBB2A201AF126D1013C229BB82CFD013ED -199D01E51EE2780FE896E01C63C655087A3E61A7F1029FA5E97EA1872F1B45F22282DDC317E17926 -7368CB52DA9444F6055A3C653659CAD2A1D8712BC2B1B32C1DC6906D957FB88524EE066156ED6BDE -B8D832F9338F9912E29A250A8C4674E667C1C278B677AEC9972BE83CBA3FB779893FCB8F81A323AC -91474BA2A2334A07BB5628E905C518E634F6761A3289056F83D5DD7B3890987EEE1C18FB2D379CC1 -905F1AEB3B3D2AD578F0D6C845D2D40C4BCEE3F71C90E68E5417BB8CDDD878D83BA80AD8485F4067 -E5C3CABF28AB56CBB219C0AAB8FFC6C7E192BEC8CBCA1459AE4450AFCC81B9548F40CE2622E5A7C2 -81F74DCC02DAD57EFD92D072318DDF05BF42F1EA8163071E23949B0179CF7DE64677CA99B23CB926 -B3E294194EC13397EA1DC9A5E1CDCD828156CD71F81B64167D4FB01E6002713BD8AC6F82B20CD369 -9C6CA4704DC5C65A2D66EB155B7AF1C9BB46469416FB49C1C7E17A30A5F045271D7DF3FFF2F42C6B -470701C381E3456A500C6BB3D0E47B4D91C5F34B49BB6272F1F8698B307D89EDA3A1565DAD1C0864 -627560CF922DCF5B34C67860352390B282F95394AA2CDE0E97CE3ED39546A6AF1C52BFCF81A29BE8 -2C47C99E8050E4889E4575B75F39E662F2DB7420673797E2ED3D67CDA7AE2C15D0A0A794D57D168E -BE13214E89E0209AB2C0EB7784E9491AEFA3C02D0DF3AE5365A0FC4AE023CAB528162C7A1B173664 -9DFADDACA8DA5FA18B7D6489E4229E9E24D38A620464A744A5C60F6F9D334B908706B738AED18669 -8A8B278341FA4D65A0A88680BA484694921512F7DE93337FC1C02BBE6E64AF2DAD07603279D87329 -1D1F4D39C1DD6D89C90F65240F4808F6F1115CA55B88E242565E59F3BBF1F10EC7B88872E9AE61D4 -4CAE185463EDFAF7DF63DE4D2207D307AFB61501892965170D2945846FCF5973A1D458607F50C15E -06E5BEC715E0C156259AAA6C735593E5564F65F443B78CC7512EC35A56F126DF9D30974A40872E42 -65E1AE5FD483CFCBBBA26DEE426CDC4721F19C3FDA86ED7AD4FA1120F63669BEFE7002B128CEAFD8 -C63E8AC09943B6CBDFB3D2476A026C00A8FF81B1F651B97F310C82ABA5F388CC1DB5AFCFF5996D52 -52A6A42FA4D972E41EE56088F78CB966F9051171C472C774879AECFFF08BFD9CEA40D7C298922ACE -64F28C14E0B81F4DCADE81D71DE3983D87D905192EF13CEE71B2D3FF1A88AEC671EC318917DF98A3 -C9054E372D22A3CEC82FCC217F47319A40900312F6E32B536B9E7A7FA0837EC65CCDB5FB0D414371 -17596CB39D9382262DE6E65379D3A9709B2CFBABF5FC5D5B352425F06F88CD31012A2A4147B112F0 -C1C0ACCC808CD625E0228EEF66661F70AF96D3DCFECD402700E4F6522AC9A856DA466D55C84F65BE -2810A1565163872D62EB81333A698ED7B68352CACCA2D7AD38AB55C19E4F5582F75818302F5FDADF -1DCED09D94872F2D48FB636C8E38C7563C72C771A08C6B1F041F3532BDB39006C89A33C09BE1E3E6 -03622D891F98010BF1DE5355F557A1E09448D486ADEF565705277B31B8BF2B86761E32631E3435B6 -88B79D566F1747BA456DDB43CD239FB47FF7B425EAA4C657C8EEC26EE01AED07CF916E77D53634C1 -37AEEA009C6B515B6342C54BE2C7B95955B1A9DA277A0ABCDA2346E88018C726F481F71D6011AA42 -F8852F2E5749518FE3B3AB668213FE1A05C10A1C53953D75312631D6BBBA01D418199DFEFF8CF548 -6109B099FE8E2F606165FE30F532C03567785D5362AA873C9D3EECEB20F1945D55F49B0CCAC84967 -59FCC7292E46938943C262D78F3212D3F9D0F7B103157F423D71B1ED54B2A603F4C269029918F238 -EC6828FFCEC66009DB9C9E59534EABB183F31D7AD4C57B1BDF0BD2CE5A421882BC10CC1BCE6A970E -2B586BB221567CCA483989DD0B8DEC424C1D1FF042DCB7834423CF244EDA28D2D969B17440CAEAF0 -24A6119DB010CE366821AFA424D1B8299609C04148275AE6E5257A7ACB3C766C747CE99CBA2D703C -F19B7CF301B634D8B613DDC4AFE4633A4D77BFF8E00CFB5E289EBBCAC90A24307E7941EC1685CBAE -400CADD876FCEF7F6557EEE167D2035A05120293527700DC510B038A496BE1D5CBAEF24ED39F7421 -1A93AADF22214ED606A80582485AFE358E3A46D0671148998A3B3BE209467009B43400870359D418 -9A8CEB4D5866AB52D16D9CEB1EAB71C07E6CAA34B70E3096BF7604C22C40D5FBFEEA616DA3BABD59 -DCDB97D883FC8742B8267A16A99B7953225F7144568D566E64542C92E538AC140C851E5D295528EB -7CBB49909B1CAF6409C9BCCEB325468FA0B5F7CB2987382616B477CCFE4F4AC79E4A6F7165363543 -F04DE5B6F6E1C2E910CDC3CDD6C4C92737198F892337DCB6647BD226C820AC99C65D8E7772BBB74F -E65DCAA8A22C33BC168BF48E40A82700A3A7668C5A9A71E397ACDFEE7D556C5C19467B7AA69C260B -727407AC837BDB7D67DEC055C1F45D8BAC61048C45BC9FB3CEFE7549EAA2992D2EDC126FF7A05EAE -58613332A2BC1465B2BC0429162B907D65F793D236EDDD8D35405866D71B25F62DC4A7E06D4DEE82 -840ACCAABC0774F8A63E9C0F7FC980B3583E7A8B01C46590E3BC04EBA565C2EA94F057D964A78A90 -EA9F52ABFD70F84E44E434BD10A42E98C794065724341F907E35D3CB257161E01C7084E3A0166D15 -CED65DA7BA87DBB2EA33D39BD99AFB93D3548358D08330E807F8552CECF63C84F805205491BA3A1A -622E70C232FADF3BF2DCFD6F0539158D3306506F150B0518371912A25EB96163D73E9EEED42EDC84 -D688BC7F7708D9DCA348FAB4DF62E5809BD094842D0A31DBB7C4B41F94D946810C5EC10B69AABC2C -91A59500B2E5D37F4755DDFB7AE4ABF757F4C5BCF77C7F95E6A616646456FE8F18407080BCABBFA5 -7704287AD26222DF91AB2613951E2D679472F8ADF06EA2A20205EC19972299A78BAC52114334470C -5F5890C2F846B4C6042D73945127F2E3910ECA1C4CD7A16EFE4B4BE38A15AAA710682C3836A8CA83 -FD384970139D8B46FB0AEBB002DD224199672FFA02250FBCFA4E649E335428FC71F50F45E498419E -DB0E970F46894A48F65580881C9C4250FCEF65C9B28699408E18B26FE6DB7F1CBDB767564E73CB59 -54C6D639CE33220C894F36E70F71C9F9AA3FE2AE0AA0E3F2E304EC5ABC661675CDE2E70519E4220A -E26FBACBD01D5169EB844750753E6CED53E3678FDCD08AB93E10067E9C64F38B40B76D99B6CD92BD -F4155A1EA5CC824998B59AAD06E09E5F15EBB2288D66EA71B296616734FEF2796F07FF0D8B047074 -A1111D68B99C2B70FC56E74A51B062F4998ACC85B1943C9477E436E5CD7AB18DBC898D21BB93475A -623BDDA71D7B895BA2D4C10F4B90BF335126F4FD57D73AFA50170F6B3C364922E551D40E35DA75FA -891762FA23401D39260F2E92C7807C746F13BB35CEF9DBF2E76E66A72FEFF095DA482A4DE8A42091 -7065736CF4DE904FB52E649A32255E2030A7B31B686353492F31C064A3C4B0448C4BFD44B8E15384 -FD809B8761EE26A7DFA1758D57CE4F0BC376EB2B3833534B15A83436BA553955ACB5A7A66796AC5B -92DB5388BC53EFA27508B08E82821E5CF669BCE52BB860780F749B4F38ACDF5FF12726BF3EC2743F -01014CDE96FE6B4C40A034E9EAFCA2A35CCC776C2669E6AD138070A40F48ED79136D7FF57E993E09 -B81C543FBADD350FF5B5F7A46F060F88E30FE2D8233832D18B6C323EE017EBC1DF5C838321CDC8A8 -4CABCAB20B60A1A3AA028F36EA6E87C850AF8AF7CD50AA6359038BFA8818821D02CEE8F51DAB8C05 -F7AE9797814D97F3DB8CCDDE45B21DBB15CEE292FAA534A5F317B357F4091F3DA357325B8B9F5EDB -45865415973C143E5E5BAA483FBF2D06CDD4246675EC58B84C6AE65CA743117FF00F229243772561 -31A7F2BA26A9115AFD96C18216CFDF41B7220ED0CB3FCC26C36380007B382A02AEAE428887DC8BE5 -FDD630AC57EE3DC156C7B8B29E687F24442E35CE10BA4087295A641F7139C831F7CCDA6CCEB5DAFE -537CC1A97C5A337D3C48A6AE947F58A30DC08CC7B58DBBB4737AD52783C573FC1E9408F55495A80E -7FDA61F0B9C4F090158F1A416249EBBA936C27BEFDEF19D1BFB839EB70576A010706D8B95657B218 -9C2AE04C11EF9E57FE09880273761FB4302C388BD608FA0C7F00F033C9C00F4E3D5CE2D903E0DA52 -E69C7745EE9FA75E2AD93DC6CB5CCFCD3782A699B807AFC36AD1F62B05856D5DFD6F88831B90EB3D -CD523582A49732E3FD7253126D39E8AFB8458B5F7AD7F94A8DAC13365F433C857AF4A42C0A08C4DB -9887C4957259ED22D13CFDF5995DA957EA5A0F620B0214FBFE08AB6D552DBF048D62CEF6EFF12F15 -3511ECA7833E0E3E95F85E6AC0F95438AC4C126E1F1ECF336ED31CCA7EB216D279877123FD9FCD8F -B5E52B587CFFC4428456DDCA816819A8A4A211D8F1629E5D42BA4C5C356E580C8A22C61D987552FA -A97893816DA73D423686E4EBD44375C257F031318865A20F22115E72BF1EB9F93AAA169C140A33A0 -6C35BD4526A38BE79CF40AD1EFA10411E8F3300A8A8B97AB140EE6734E1BEE6C8EE443D698D34159 -97649C6F10F20ACD80236422E215E146D744A262DA3FC88DC0D86FF66512F49D3F957D3C5CFFEB42 -4823509F33F155057A4C6F37B52F4667767BA94F6B8B62856B553F307E5D230C44CBFDC9A97A45B1 -39FFB2F2565EB0E22026972FAD0FB7B9576FB6F368B61979943A398773600E7EE1DFEFBF26D45D40 -BDA66EBB96A56EE9CAE0B2420C5DD83E24DBA9FF885BB844BF3D2BF93B07325DFF60C0CB5FDCCA0A -C8FB5A2E119D5AF26E53AB8E3B428481C2871DDA26EF0B621CD8572B3C664BC7AAC01A1D05B98F79 -1A7080D294BE81099BDA7982432F3DFF4775C44D23F4F1B2E0162B61A8B2CB5EE8564BF98E2ED403 -2219085FE6194C19DAC98A421826CAED7F1AB1477AB327506010217283894235D7DBFC1153D5ECC4 -8AA7293F19592B4D7E95FE55151889BCD1D7FA7DC2370D2DFE11D7E4EA34B5C7A8E73BD3A348FD38 -9EF45B6167FB90BA44C23E912F9A4F2FC0427ED070592F7110183BFDB2C400393BA7569058227926 -351F07FED4F33633BA03A72AA2DC6B598E49B96021DD868DAD0F352E5722FB714F667C15C68D49C0 -3D822D82677EDFE86FE9668E537DA284068C9B0AED83074C92A5B939296D505B837E6A9DDAB1AEAB -7455A08A114C2222B339284674B74BF4CA9EE0C020BF2A148B439C71C6BE51A94CB64FBE4A7EB295 -5A455047CF5CB348B062ED4F6471CBC3E9ADD9BE9B96879AC7BC71BCE02FD02F17C6063985A5E898 -3D205AA1489DA13C408990ABA1C54F2F501AA172F530480D789C848118C0A74EF98D5F607A067BAF -F6030D887AC6A6497F9A0B38F9705F328AAD4BFBB634F739386177B07F22D5771282444E5EE17335 -B4D0EC86117C697E79A5F4F65FDC08E4904DAEDAB20067EAE2448FD4301849E456D085F392DD1316 -7ADF75CCFDB723E2904A9C0C976D6B84DDEF9D92B0E15FB246C3ECC2D0BF314CFB957757B3A3E8E5 -801F520644E4601D291DA0F7507C06F3B9BB36FC1C70EAA444E14E56C0CFF06C7F853DF36DA9D8B6 -AF2544B853DFFF535A7E5C6FC145250CDDA229956019659D0D253A19A7B51A4E538BDC01F74D7704 -9949C2C97C7EC6392C2E61CCC0992B66DAF1AB08551063E53180D2A67DE496716CCBAA45462D9F91 -B66A22545962DDAB120511FF08627131B95E5DEEB8B4DD9643E7B2AF65C0FDCE11F5F1E8DD468DA1 -8D41C8C4F00EA73836F4F70EC50FC3EC6D358C0658A4261C6D15A582A2C7C994E7882E661855B352 -014576858A265FFBC425160669CE159D07EDAC04D060B44E5800A7AAE8E339C29B929AA81D2F515C -46229D2080D5917AB20AB6B34FDCA8E4AF64ED660A3173786FB1A1D005D575C2A5187D3F7CFDC94C -CC44A38C5CD523E9DA726D8EFA6DA7B6131DFF3435FEE838B2C7D6B97934295F06202D307FF78D90 -6699CB9C5BBB10D1D4DEA5FDA5BFB094E704607083B646D37F5DA1FC7AD21B813F44D8C1AFEAB666 -55AAA19703BEA2E77DF3BF350E17C74B3447A452235919452B5175570A006C7680AC05E8950A62E1 -1D7E3ACA35A397D1E19630D094A86807593C97F4C484E4E06BCFF708B6DCA972E3A0009E1CAC0EA4 -141530F5C1B8AEF5E1B933F37FDDBC4BE22B74FE346D1A3F5FEC0818F8E61765568A2AC04713E828 -F98C449D9A1CCE52D10D61DD8BFD084C8D099A75D89DEA64D5A7CC68BD5B0593D97953DADA976383 -F5015915618AEC56D71D1DCD55B89736395C609B315A3F1E1255432FDBD37F38CC43C354FB4B7C44 -F1A7318B0B7E99C3C08C33B953727B6A6328051783A0A33E3CD9E498346A3CA6A77B517096EDD52A -E443B87643A646C3A7BB97F742888D33F9B3127E61942F4103C1DBDCD8EAC8F9E259773066736CA6 -53CE57E8822651261D847C131321BB9D6626A1AC50D047C0BA47B411DF2A995545BD68EC0287CC9B -31D5DDCA8755EBEB10ACCB3903AB0FD5788E984220443B8459E7C078DA4289F1350905881AD6DFDE -C47302B0ACB0D4AF8CAED02B4B70DF3CF8FEC118F0FC2D3DDE3E494CD160E676E300BC464BD4400D -B50EE43B314E0517037BF971ACD7CD327CB2134893B8A0410E68DDC518F5DEC966C7884CF5FDFE74 -723177F20DEDC039D879056CAAB4BF045062D3904F615C5CFE109AC7A35599C94024B41019B9AFD4 -04A80ACAA4837929F5C9317680A13D157A03B59A5588DF79D2E113F5F51021D6F6F90E8BBBA2C252 -FD10651BE80BAFD59C53A3367BA3C28DB6EB9DABF1EA99F47B503F627E15DCF3FD645FC52C5D5D0F -2F07DB4C25C0D1E1C00146E1C4D973E613CCDBD3F9450CC0F5343D79F05E9492E86A1BB889ADF405 -03BD7F3E7543436859184A5B20BD8A172F350D846B7570803990ADAA48D4B9155A2B4C4BFBEF1E1A -065C08E03928559735BDD442FF1E83E1FA20A5DA57D8BDB2FF5427C034CF0128AF111E6E73099E04 -6E0C240E80A73D7BE72B87834E45898D475521CA3306707631F5C6136199F354632D1A085F12A1C7 -C473868B62E534D15F5484323E63D0574196A19EF175214EB35A90873EFCFB92D6CF68761D45E37E -AA61E1A1979A82009507CA193E44B36A806486665CEDBCF387053ACEAB979BD35D30978FC7659ABB -E844F4ECAB3303318ECE80777A5FA5A9DD91B3D06804C4B4E9B4EFCF07EB89866D0DD8CA390CFD15 -98651417114D78776B1A1D36B4BA17746D6BE7FC123D473EF1EFED1C3BC1D555F914536869FD5B0C -35F9C83F65B0E6BF7A627B9202D787D72C600DDB6BCCE613D88492E13CA0AAAB196E8A49928C62CE -A4FFE2D0208EDA334ACF47F20BD793124D2C5546C03F4A364369A76A0425262F9D9118AF54E37D32 -E33AB25DD533A49DF5FBF1BAF4CEAC2D9D378CDCD13B00FDA432D9042F623DA41AFB80699B5538A2 -5403B0B3EABEC9E8EFCF42FEF3EA9F91766902CD206B0787C187D5370B60AD6DCD002DE2DE8DCDC0 -B4719A797C5E26BAA67665016DA0D967FA1346F9588AEDA174CA001B31213617FE19EA218EC23597 -79D979E2663166489C06993230B0D07973A117C4E3F4A4C93CF8428248DD5389414D679C69644142 -67C7FEA17E35B0CEE456667A9B1875C81B2302BDDEA2818D6019FC1622A82051F60584ABC904CD91 -8676305DC03FFBCC64FDDAC8D8AA9CE2EA00D6C97BC63C8A617DEDFC0E40775649438E9F61AFD179 -5E3B20560B01BE5E0983F136CF48AB206954E41DEE0D9DDD953DFD01CAEB569151D6BC0DFEF29D70 -FAE3E198E7EDD8922C0E0BCB8BCCF1C016142C1A8B337AFA7A05A9D7534B184BF3BF827F371E9BD1 -9A71244ECA1BA73D484CD2FAD54DB2F0EEFBD54B536EBCB5094E6BC2F5B2AAE41F05B4B311115876 -ED42C34F8E643B53372E3F6350DB8A38445822EA9A33E27FB0CC42CEDCD1FE2FDF723FC47C996EE3 -56C402112F24D0AF899B2D00BEA1CFD427998BD22B2A09046D6737814448ACFB10D387547D7009FB -384AF0562C85694C071584236D0F1F3D3FCD0CFB38B77C81889061E668BA7AB37AA60F58A3967DE2 -6F939B79CBF10A9DCC42852561D8D6754F1B660D216AAB1E133FBAA321C56E2584BE5C9BAE20CCF0 -0E8DBE6D9C2FCEBEBAD945C3C04101D2387351F132628786F6D9D4CAB83419288D31F9BC600D9664 -12E6AA457CE6CAD26A4C0671097B98C2384C81DD8B9A3222D4F4BBDA7017895C3EDC26662779AEE7 -40D9D7E24185FB821970B0A3A94041A69E4805EC88EE1EE521981536F2844FB8F5EF645F67D42CE5 -148E2DDE43AD5AEF200EDB3A2C7866C98458A92666E5F9E070178BCC39F65A893102A10564AF4E8C -AAA5075D2F8CD7FAB0401C03AF299EA3515CC93066744EB5AF7CF0ED06675BF049A6E3C211A89E16 -DE5BF0445A7CCA6EE8EB0347454950485D884606651E5887FE8B24323E2AA16DE22FC1FC8C4F06A8 -2A1FDE5758976024068197E1F4506E4D3D8A16D40461A4586338B374A592DC60334402F76388AD6A -457DC3F54E6169CF7AE3959676E966A45609621055EC3AF80E182633300A4418E34A66DDFA6B569E -5A13C9115B5FD3EC1CEBE50FBA247F60803AA83976F00117536342DC3D9890C49B2AC701D370E43A -955118967827760F7091469C5406F08F18D7E3548148CF0E312B1DC71DF67A5E7A1656CF2F47F3AF -F3DD50FFC2FCDAB7177285B29C17CA43019F62AC6FBA52D1493ED7C427526470ACC8389BAE827759 -4958908F517B2863B83292EB5AB3F57FFFB08393CA610FB1FE905D88A0A16AC395E2A2A6DD033D6A -0D68992F830B2E1B95FE357BF672716E88FFB92FFC3D62945D1EAD22BC68C51EE0E10A43011DB94C -44685A5C4576F6EF44CBFB45F2A4BF110A01657DB51FD499767E78058199B31DFD60813F1A344F86 -289F9378231D5B151C92385E3650B4FEB1DC91018EAB8474CBF69FDC1496A4D078D2C351C8196451 -247A9DCF8117E5B637371D8E22E248C64D999015C3FD2311E9950B8EE0922FBDD3D7BFF766BFE9E7 -CE0BE12F318FF2A7B5A9C6D00A54401609304ED2C55F5C1EAC3D4B38355BBD85D66D61636FA6E30C -2E82829376BEC979A6FEEE040E452359768ECF90CC539A546F17AE906C76F14F86FF697797322B05 -1EB311A759FE260C1EEE5DACF383816AAF1294CFFA7BF87A4D9BC595EE8F2C2F86FEEE11AD959D86 -F22FDAF4CEC098942A57E57813A0FA99239E994FFF353C1E781D666B8928CFC648FCF0869FC68468 -BDBDA7D280DFAB8B0B3A4CA35B074B686DE8D372C61FB32305169A1A9912F6541DA16CD6316A6EA4 -51524757BE5CF6E820011BE3859FB8B8578C100FF029680E05F0E0BF11D33FE19460C85EA5E4C0EF -28E29407C8AE6BE01CFA0D5022BF9FB01416FFF722A784DFC8FCE330EC95737A854471D334FDC58F -AB42867A7B62836A8B56466E9A6C1247D46EBAFFB905CD4321970F59FB8D6FF65FDDD34BF913AD32 -2E68455C5FF2D23C1A5EAE687F259BC982B6A384D35440F7C693CF50B9ECAC0B5578CAEE87588B56 -2EB6B7F42034C9F2E545EC866316552354EB3728C7D26527ED75174EAF635E048B08DC5D23E88981 -070AD5641A652F2344956E9CF4C16E652A99F4A644D1787D6D36537489DA4D74E61B2FC4DFDF1D1D -9D58F9C26C5EB63200526AFD168AC57D5611ADE4D4A382FC28BB60F9E7D626A6C67AFBCCD1183C5E -3CF2EF210D0BF5CFA7BB10FA3887BDD4CD96EEEAA8F9219AA2F10ABC0A960C3B57C0EC0313AE10CC -FF1F522124CFC8D2D49BFBB0C193EAFFC5B48FB3FF30B21CB76F0A4C0F1377C9223145BB0468A5D7 -1B9BC25873EA12E1C60334571C67385C00D0B570D3FFC6C7FF0DE62C183C76AEEB12DFFEE1459E0F -C818C621B8D12FA1357E2B55D48935D70BF140B4CFFE8813DEFD479350B20DC2EB1D3CBB1A2D3DC6 -EE975D58C89D61FC50E6A0197DA9A586B72255023DE47DABEFB11E8AA02414C2FF6258A281219B9D -DDFE41BA7D7977D0D6F18224FE22F7D4E9355FDB35BF7ED3418F4F68D093AC48F7D8FE4194FEB6C8 -0B9DC1F74E023C604DEA27089F98C3973FF9F4AD7BF7BAE601DB89B08D5D8139B95EDCF6C885FFA8 -B3E4B0477E7040225733826BACFD1EC4A0DD72DC41734856AB9FB700DF83CA2CE812913BD142D84C -5C83C0B2583768198AF9E885F2BA74877A414233207234AA5F18840557CA11682AABDE8993533887 -7C6D404BDE4153C9827EB16D66C1D73A8143C8A2D3604FF72CE579FAA3C5224BAC48EA83BA848429 -9472007DE96466B5B29ACC7C03B05DCAA38A48BFF9F214DE43146AE4E04FA705421917F99BC54533 -F0EBC01849E396216B9F0794E6F6C6B61B52EF1B1950C0FB609895C3C55FF574163FC8B6B09E66AB -AED1810E698FF37CC1F926B2CDA3B48C7D77790EBD2D514B6F385D397F713EC3AD3954EA9C846158 -6031D369E8B99E53408A79D64C34EB5A56DE8A67DE91837960E98A66FC04DFA0EBDE21DB003234BB -78665B039D0A469A0221BD541AF7149A2A659C300132C14581EF766FFFBECBA8B58A5EB3F95446DE -F49AF863A8113D17B2E7E6ECDEAFC3834D4DF900E3475596E86FBB4E2974C090DB4AD61A737D611D -92B4535AC291C56AD8B1C031D2F9B505BB77517B737D70AB3723DB52AE2ACCD5DD2F617423ED3CC3 -9CA882EF41757BF7151806A9B8B0F312808863E3673FB54DE939B35CDECA7FBC4DC3BDF5A5F47D35 -E345916C39366C8B4F439CE1C6F1835C320BD1E67375B03B5DE18C93256F251761A4C8CEC01019C0 -68E34447BCC503B9571FE8000627A6B3DAD5854CBC0A2D69E5A8F46BC78F6A7B1422334EC7A98ABE -FE9B83E01DCF3C6C9273B346F3240EA225AE4A4083CC7B0EA141A0773FDE940768358EB4B13D82AA -304A1386D450C1C0C6A7D5A8FD2BD313F78F85248B5196241E31E5595F3BC01F37700A2DD3D4A0EE -2DD01A36569CD507130E8F5B1E96CB560BB7DA15560CCADF3B2C9804A11D9E8055C9EC70E48C1D21 -3EB756A1376F2EDCB7189D78CD3D6CA5865537EEC31C17D801605EFD860B0B629472690588D02575 -02C6F7A75B9A1C1B397781329832CF3EC43C09F1559CD562C48FA9500295CD3B0A790DD3FCD4684A -7C7AC49AC9BFFF36B39A9FB148BC28D37907433943CBBF0CBDAB46D3EA86DC8F81C859C52D15302B -94A9B51C199B7104DEEC9D769C2634CECF8B700CE9C04152CC59C9326BDACBEC4312DEED92DD087A -1C4840868D9F97CAC046581F762F75E8D24D6445370A3F1E0AE74A6478D9DAC37E7FA5BEBEC0A1E0 -81AF89C1BBF7F51E3E2E22C8C405E8671BA85F1BF0DF79A465DAC7EC07F731E00632E017D190A99D -83E27E5C2E63D7DABBA23B2E88334C63721AC5A4CBC5D45F4C177259F34C2EADE01FA008AF65EBC6 -01D8DD16436D86AA94C99F3CC0A2F87134E73BF22F108B825A8963B49C6C685474AFE4A542C8641D -C0375D7EFE9AC1168D9700459BE52D0DA399023E141969F25C0DAC4668534B6647EC85454BE945E8 -26B26DE6E3C4584B97A38E2B40A0D23481BCA78084FE80E00A71A790BF31DF468A435ECC88E60A57 -860BBCA3D65930186E9917CBD209C230E8F8255A7ABC7D3F043AE4D7AD63D9980BEDF062B7D5C298 -C40225B6D03F29A0339E0FCA02138E526F06B9EF47F5E7A8068A846CFDE2BFDEBD24F5A73A66C079 -18662AEC80B43246284FA4E2EE0D9AAB172B1E59A6CC46B801149D8C0DF6DEC9A55D8E1B0EFD9D30 -2FF618075944CCCB6831D336B11617107B0530D09885E5CA11A5F1FCC8D69D603DA16BEA51116D42 -CAB1AA1E4D7B9B4D79993F2BFE53EAC904FEB70B2D330A89780EAC10D12CC0C35B8399F218AC2976 -E57A26BAD20CE2FA2AE2363D3FD2A8A971747556F2959DA74A8963C20B504711AE1CB0D0C02457FF -2E9BF696B159AF031DD5155F21C0F5549B0471A3C5DC8918B675CEBCB23E29322B959ABC05283A70 -2E878DE8EF25EA760F3C5C7B7B49D398283DE2ED837FD59F7C22D62C58FE4448B1049FDEBFC8787E -67D7DAFE9774979BB3802254DA59BCC0219F98C219F84D995CA768B8B5D9D4A32525DFECE003675E -E4BD5D8DFFC11025AF2B468F9207B5B2B42349B98232BAC0759758C1F4A283405815BD7145C93FA0 -8F3ED2826655053A3C2559073D8ACD199DEA2C5BA5F616A2E48548B4370EC73493BA07E197165DCA -774438B0766867819C1154D1959FE6E01E6312E0AB91FC2E2BD240FC8652A2D456A1DE7F34EF372A -53794D4C4E050BF3CA5B7BD2F1B8DE93B4C8002485CB219AD2D029739FD3C81CC6E78EDF38723576 -1A57143EEDE5CC887F282FECD261F6A25D0A7E154ECDF5DC38E426811BE86AAA458577E5E0C5F0F7 -5AAFA9C41E5D1DC9D91ECD79B514F8CDF7A5F1A189470D35FDF4F9B8788879CCBD91B427822ED658 -389E981E0EE5F7FB87692A3E3E931DF8A1D1573E3B0166204240B7080089A09EF7487C9AEE2D665F -5A82F94C877FB5B0DC531CEBF1E71C6592CEA2401E4B5122E5091DF03D203DF979B9A6EFBA12E2F6 -B422FDF15D49AC0914D372D21E871DE65CBECD105FD4A3E4714B9CCA5C6803FA39DBB015EA8A88BE -7913502E562E5B170B87BFC8572DC9DF49AD63694311EF1334444BDF0B4CA3245271C1F7A4D7FAF1 -703E3AA0E1EA8D5C6E821B28707EE0C9B4F22F23796FE87356C58AE2CADC191F4C58E1FB58DA03B4 -5A25AC95DBAE13A293474217BDB214742B9D9D6AF35F70FED2891942EACE3E625E55FFB820543FBB -250A062D3D395BC0F219ECFE0D76686AC148BC41476A887BC494DDBD396BE200FD3E03CFA12EC9AF -6B934A283C42AA05589AA6B4A8D16946BB51F50419CABECEAEC5AEF9085C9989289E9B46BAFB6FB2 -782D84DE2B068F91A9744AAB237CEB1BA513E57E4C307108E993C972A3E0A898D5A8D27833155031 -FDB98863C3BE7FEF3004CBAA5CB60A1F2E3EB4D7290FF5FAFA088B1CECCB6CF51A58DAAD998F0839 -6CDFD68F5ABC9C1CCB8F6514107773C69C26873E889D1F79D10E866910E4684186FCD71C965ADF62 -39BA3418B313A27AD632300969B6F284519366ED85E7CD968D64823F8C59B5911A72D0A20EB72B60 -3A61E36F52F256FFCDF706B4560B4DFA5D918FBC530D83A4B3C01BDD3CB4572E24242D141BF9E775 -36693A0407D002E09CDA5B195BF1CCF430AE9824C07928A050D0B460F2704BE8F9E647A4884C4567 -0A81EACF7CC038643EB0FF18A376FF6F32B6FE4F197273327FBBDEC6443A299CAD4B26F7778A99F6 -5A11BDE047153E764039EDB251936AA43DEE50DDFDF8856519056AAFC4C5AE6F2051AF0579A9ACD4 -1D00775D7DBE70022CC263DCA5E0A25B9C7C4F5C418587666B2FE24816B1E0EC92F9074F1403BB83 -AFC3F1D52CA79C387BDEF864366E34C90BE52F7AA09935373A07E4E026224E76F9EC3CB9E7EDE50D -EFDA48248D61F3CEC880A3B8843306375D9711E58645F3625BDB8E87052DA67F9794EF4AF8DB0BCF -E00677C3A26907DC651BC838C40EC39E2B5A5DC0DBD345944A6C32226089D63C52490FA10B215AE7 -03CFB663EB8A47793B84CE7364DA1C4E7FCE32DFEF09490121222774915BA59C78C2275F829D15CF -4D8686B095C38C731B83D48738C25F40B8ADD487C350A2EBE846C3916AE384CB1050F9F5DFE09FCB -D9129C6270FD86D55A459618FDFA4F907E6B4746196BB717865AB378414029017551161A52E9D24B -E4F7EED553A927933D4ABC8F25DF607779A717909CB4D810DE8F5762581900E224E4B91598149BA4 -71CF8068ABE8744356B261600BFCC57FB8BE45036CF6571D9B2A95304933BD4F17215F8EF53F8E08 -1AF61FA7F9583C34EB5655CB0ECB82246959F09091F36989EBDD646BEDCA614B9A61AB7696B3FF18 -1058A150FA6EC1BE2EBC7F64357A3FF2A2B0491D2F4E0B970DE5B7788B467CA678039B5EF55C88A3 -84578D427FD2CB16C87B0BF0A3D37CE8ED43E0F049AF2436344D5F47C948C632C94A287509282561 -6C64C5D262FE5B24916FFEE982A69A6CCF888BD01D62EA591EEC51F4B7DDFAFFBEEA93FE08D736C2 -0129E345D06B10246A5F57151C198D407730713F32299638EFBDC01367E23EB59AAD42A83AB41B43 -2DB462652E29813740F4680A5D4BD47B18328FAE6BDF4200CFA4CE3773809B45E8887C9B2E423698 -9F6C48D64F5986F563D9A7538A8716082F81936AEBD0461E6F4BD470436D8B7656F0FDF89108E6DD -02ABDEF907731D458D690BC608EA9CED09EB1E6E64C0790C7A2378201CE997FFE0317679EE1D4EE9 -F91157449323E53B4ADA8096CD628B5861BF794543A98F2FA2AB54FF0F25A13DAD43DAF9394329B9 -5AA53CA32749FECB0B2BC035DD1EBD53FF9FB5AD8BCE06CD89E5568091C1CC314CFB1D9821D7F9AC -7C55F55E0A16E39A87D43148201B928F3C42B110FC056189DEF183745F3B637441DE8BD4C3C7EF12 -F4258E306B2877ADAEC63441010750DB4E6269A4C78A0AC01BB3603C386651FE814031CB5D8C1F14 -9EEAFF652A53E57BBD4C8C0CE36A84A319A53BC1E5FD3F1ED1EE72F4C1A9BF264B594062FCAFB22C -C1FDE3F2E3D3C17DD3F7FE0E15EBD812D550227C06D01127385374A11438ABD50048E17255FCD2BB -85122A6FB9B7DA9D5E9DE8A747FAE0DA45A1FCEFE92B9E70A5B2CAC668D4D07527A5C1403267D823 -048BE671F725CFC7474B44FC5AAA348420B2D7C23C6CA066666FD6F2208E329878D90CEF1C2E77ED -22D3BEBB9D547810B189F08920A27E7107F208591A84D463CE2576C70C3DFE6643E4EA93F4E1DAEB -41D46F0E2F56FC10C69AD5034FC9859D31CF27A3A1EE256C93111F81C11ACF1FC0CE20B90BAC9AA3 -27A5C85A7985B951519FD4B03C40BE637162AF41B2FDA68F0D1E9B7602FE2659D3D75955C579AC51 -DF6A552EB9581AC3F712F083F19B52A6C4F560F36C59CEEB0C996AAF1728A2AA45DCAD79BD7B23AB -388D5B0B64A2B95154B6259B730B0F4A72C8C7F7CC93C7D64D9D8810D1F63FF8ABD4DB89824E2D26 -4FDEE916C41E299211DB1A53256E1DB5CDD04862F034D9404B73183A99D3D13D642A663F129B6D16 -7095BEB4EAEFD03DF2FF2F0B6B594C1EE90FDB203DA89FACEE23F1BA3901FECC75FE1811BD701259 -343011262B6A0A9707AAA6316BC3C17F787BB80AC8DA5AAC942D90F80C5A3BB59E47EC767244AA95 -C63E50BF809998957936D3BF6ABC24B0A397258F9EB4DC8F65692CB023D9091FB180C69498CD0C08 -BBEBADC84A7E0016E8F8BEA325D924EB0DF82E75D2CC2CCBF039B11934363D4332C5FBC5EC556BE8 -5EE4E707CC2753CCC43D2ED50558E51A104221C9323CDCB0199B7B83454DE3FDC810D0F362C0299F -5DD981B31D8E3DDA284FEF9DC8F9C8DE138D3065437A7FE8C30572AD06D62E8527AD37AE39AAB0B2 -25F76A25F6C6505241ED73BA494CF923E919F688DDEBF193E188F8C4C154F21631080763B4D091E8 -AD1D2FD6649E0CD9360E8D1A67A5B5FAFC67547CA31C95A5EA8D4EB5D68B9F6D6532DB9B54584735 -9558542A2AE58C09F3BD2918EFBE1699E9C8F2C2A11EA4D224C726D2ACD4A8D8ABAEDC6588CF2AE5 -66528B94F55B823A2A1F7BE19000F3E7579D094E047075DF18C8C868760295533B26EB3ED90635B1 -29C17ACA679C3E88B06998CE5A7A2544B700229F5A6A504BD3E45B276471959C8A3F81917A534287 -39B5EF9E3D463B3BA7318448E2A3E79520D2D245A2A72F31FF7070B6E4624E3A5E216BD103640C8D -F387E49D732529C611F8B971073F17EBD2F6EB18F9B74A67E1997926DF178D4C9EDED435B9682F1A -279C81BB9F60DAFE125845A2FF3B02979E5481C78A45C479BEFB9FEF3CE2BA9BC46C77B50B03E48D -A6D17B76F06F3AD118371ADC69E178C52B5FB4B261C9311874ED07DD6D5B3226A005FDD7A6D53848 -09E7063F036CDEA41619122635E835D2D74CBB6AA9B38CAA4D819C26E95115FE0DBAB4198FC5838F -2C91B7A87B07D734C6D4F4F83444C1E90AA9BFC908A2BAC4B3DEF9157AFCA5248F2DA31CA87BD363 -AC25E9E77F741D4B2C6E02F04987A6F49D30E9038CEFC41BA172DD675AED8B392164411144E5B738 -F3210B0E66B17A13CB9631C33D44484E792A7C082DD0A5382F34C5637653261B1EB6D2035B08B4D9 -1FA9AB770CAF40A103629511F7B43F2743D7E583433DECFB19C21FD4FD0AFCC22A4119E77C87BFE6 -FE50068B22479015BE5A9F06BEAB4D37412E062A45E0CBCD7BB39FEE747E96306F79FC4F2E8942DF -5D9DA0E55AACCDA547DA19D30B8404FA121298B44C9CCE198C708C69A8D6BF17591C5C50D3FC5BE6 -961F7ABA8F366DAE957A1C3730DA4A5B4F035A9274675EE3BBF0CA8CE9D8349F50CABB1C3EA4948A -BE6F9F143592F1EA95404E6909A909168E3279A957AE1924245C356331A75E7008BEE92BEAA304BA -40B7C3F48F74D9018B3247DF50EBD7CE541DA48ECCB1B0BE51A455C3C13C279D4D8676078C3EBE43 -08748D52C9B041D3E7244C745B1F2F742D010A9E60695F3EC4FDC1050AC082B905D6A57E8F407A3B -472F731011A5798965B7B1A307E252FE02C8F79CEEDDEB6E165F1A94D7FFF18DDBDF79477F14E9E9 -3981ABD200FE7771B29D1D2D120EE79D28B9543818527039AC74085EAFF241B56D08220C958B5D9C -87C0C04A14D52AFD475B542D391BC54FF33DEF8D9484AFF6873BEED32DDA4B371112B523B6CE22B4 -0D1B416B64C9370F1CDF2C548F4CCBE9E12E21C36CC3EA52DA232DCFB65F66B22B5E2EC04852510D -5E264EE939BB67AEC4764B87062AEB7F680B40BCEE04AD45C7519EB3B6199C9E0E332661463647F2 -FB7EDF303EFEF84891CEBCF0FAC5F723A9D0476C3F8C092604C87FC69C7A90F4D64AE45A478EE8BA -2DF50FB93F55A3546123F0B0E2C1C40C98EAAE9F0F26B8F80FFE6E6B94B7E27D2884D58B8A119662 -2DF6BE608C5569D7864BB756DF2EDD184B90812B44ED4A32D001C31383A40AEEE9743651F7950846 -15C48E402DBC01C818D477EAC0347795CB2792E9C11E8FD4A02E194EED1C919D4598FEC003B6D9A8 -A0BC7D456047A1C0579453FC1D7CB2D158D466939A23D7A7B8ABED7E2777EC7487973E73F2266D9C -250CE30729E3C5223AD93B9AE8443B35711E446A3DC660123ED45CE1942A1A2AD0610467E081CE2C -8B92A6C82F0B17B5D2429E99F1A6268072C6B5AAAA6EB6283A872C54D3694CD825EB2926E57DBBC7 -C1663075E687A144E4D61C225781D80FCAE1497B442342B4A3F1CD6BDB50E31791CC3928C30835FE -F845B6BE5E2D7E3F2F5F085AA3FAEB45CAD0D76BCBB1ED859A9CEBB9F7457036F0BC3F195CB1A98C -9C8648F6583CDBB23894BC719D68C2DBD8003B10D08C8CAA40BCE784D7BFB4EEC9EA5359AC056E57 -B8B0F2EBCB1F4CE40C87FC7861180133E0CB6CE2FC4FE690756D327A2B5AE063E3021C0C0BD420D0 -56F0B941E6B36088A55BA11D0C35FD0132D5F48E5D9673572347171B4328D4807B972831C0D74CFF -A5638C145B89C989E6EC942148207D6DB82257585958034D9F9D4221C7C9F7013790DBD130F277E0 -BC88BB179DD09E27062379ED06F25EEA8B7FB33C35861A0034776E3813D2E9E5C10E227CC569AB36 -CB2D9DF2E7B7B44758F9DC4FFAD7A24AC7E9F47AA850C221048C3CB35A37CE8EA75632AE65FE3212 -175146FECD6334AE3D3C5F492F067F795E1E8FF386BA198CB74F0BB4DC0000DA383BC4CC3F070DE1 -7721431988D69C8B1A5AFDCCC83C22E16A87E01C6D3E79DC7AFA3DB0371B0866EFB8B6F88900472A -FEF1C4A878243C52D4E02E82658979731C841C489A6B97E271C4C93800EC7D91F93EB9B9C659A554 -E1FCE42A5EC65AC39190EF4B66DEAF6FC0569A000A9E1495F42F706FBEA4D32EB7EF11A648910259 -6A65CF899C2F322F5679C6D123469192A9BF1A7F1F2C81C554ADB97BD19ADB746A4F81A4D5559E60 -AB94C483DBABF6CE2F28CDB412D50FF3FCFA3B3DAAACC6A83CFED910CCB3B8D2C19590AFF4D75303 -4A6CE7F4156896A13808E0DFEAC547E69D3C886691728E4A35ACD575B40D721E8FCC5385A2EB28D7 -08101DC50811529528F5CB0C009BA7E3C88468E37768FB0D83895AB54DB2DD5426562AF9D8AF304B -F6EDA54E9C92643DF926F5C3578269750120302A37CB140A18BA56BA01108D4ACACE8FEAE640A6C6 -958EF156B588ADB0EA5F3B0F37BBA12B7BCB221C811415387B024B7076FA4403A3AD6EBB5D9C26EF -EBDB7ADE7C60B444AB9F90EA493B658B7767AE2BE649BDBB3FE85F460F1ED137C61BD95F7CD3D8B0 -15CE45138538930AB62AA0E54B4CE1A5EC5FEC0A2B28B345B67089A4E4AE14D2E1F5A9C8848DA688 -CA298F93860649EC3AAFEF3E820D86988C8E3E5A4D4BB937791827994AA3E81D0BB3EE115EC36D5F -B9A392D09E79AF514D11C7B3A03C9F9C13355CE79E119A19177FFDCA34704D38118A8976D1EE5AA0 -2D14FEB1414419F5E85244ADC5C0A765A522EEF36170064BB19FEE3B5F7B441E4DB967DAE0BAC2C4 -8FC6A836E0EF5A69F073BEE1699F55E9C757EBD6FD8B514E2B49D6333815B7DBD1E0694695FCA3D2 -1320A0C4B852D9706DADD8369A95FDD917328BE93DD33818954DBD2C212D2CA81560ED5BC284EB04 -7A5F389E24E43F4FA8C97FECF46589FA7341076555CF55B1C21B28E0C1CBB00AB8B6F67472F27BC0 -D11148F407824B0159B5188D4BB7386FBDBF1C0FAF34721B7BCB5C0FCB7C4010DCB6A1284E9D7883 -9E3C2111A05D29AB7997073B590A81C6168020F1D48951BC7D8476D5BA593F4F23CAC1F9BB0E091E -84B4E99E5C584D1370DD12DEE8DF16AF8BC6B7B23E2FEABDB7F32779AF8E2B5094A6E9B7A7225F24 -C43A8E5D2B977E1E19E633C26771E23017ED233DBB02C64F8CF03992C6484528D0C8464B46F24F9E -8380F385D5D01B8893C67FC103498983CF939432AA380CA576D09030CD52FD99BDC3BE16C7204CDC -3365BF76294A83A1FC14A236F5FE5321904E779B13232A76F8FE521F425562678436359C2461BEA5 -AB27209541F557AE2AA60009C9CA0A9FC7898C14306CE35A50017BADEFDECBBF94EE2905220706DC -806409EF87DB1D73EAB0698AD2DB72CDCDB293E7FB13C94D9FC87E74502E6927A212F0D7D2F2D194 -64F7A66AC07872E18CB1DDE8F11835DCBC5C4EF039333FFFC0FC1456DAADE7DAE3EC2EE0D3415B0C -ABB69FC5006F4D14A4EE1A5CA99AD4D5E629C0DD1E0F097B5B93DE2DD001A8C418234C9C45E8C13D -1AE04E9466DAB8CF1ECB88A4E059C111A6468D2DABB90DA79C7C79E94DB28F6968B1A632F8C57D9E -565FF91C6916026FFAC0661856B9FB8DE9C81661816221B1FC159CFEF1751E7E403F5F2CE32529DD -540792FC17A12A3DCD7C50D38EEAADBD10ADBF5D8A82442AA900CE6150EB7A4639DD9FB6E385B2FD -093493DCCD9014B23EB172E21AA89643A6CAD1093343D85D81261972DE0ACB16A4C6B5F0BE4C978B -FA12D3CAF0134F9EA49F6E9687C8F99A456745EA252F0BA9968C7F9586E3DD841AA92DC7705BDD68 -2DAE41518A09DF0E209F321D7FA3417202F4BA76A984DA3ADDBC58136885362F02F0A24EBC439B3D -BBDACFFD8498EBD29F88F016B1FEABC10785438EAC860B554525F3266097A675299AA0967BD3B7A0 -EEEE3FC578D1BE99D3533BD91571AED904BFC9DA1A1451FDC5406E1CD614E0C7FBC733563CD6CE6C -C31E9237CA153F1F0411114361D731636BCF98555ABF12848AD109371A42B63675A4130B81E97C2A -2EE2BB5D8FAE2640156001AF0F55D9D5DF8FF23C8AEFE14F120000F14149A36E5C94CD9081DEC277 -C2C34870D05011F99D48B0875A5FF542F067F7E9880109F586BCF2B50522A1F23ECE44349E539E70 -F84E207DC9BEC7CDF856A046F1A03226AA41F541719AD1AF88FF211E57DD0C1275DD0B7B47440DA0 -89B98C6EE92A7D94700B83CEBE19EAEDD8A615F6587587BA8BBA3CE3AA5E8EAFB1FB0F486BE3609B -169EFB178A4292F4C0378AFE5D24EED1CAAB514DDC66C696D8E37F294A6579131DDF5488E9436609 -ACD750C3DB0A940C84FE022B22ADC2676F62E91E8F891225F891FBA537679B24547BBBF35F04915D -20B11739F620D18B5B216921D222F15044368569AA302980B9225BB839F494588481B94B0C724352 -B2DF600A22B062561D86CB8F81514FBDAA4F8A043A0265F992FAB71FC9124A45B8475E1EF3DF6B6D -E35CF329777D45F08325E8505EC0D979F542807AE77E57E453525F23BC59A50740371EFA98678AEE -6C425374AEB745B99DDB5D8D908FDB551FBC0DB15832107BBECC4E11A1A8DEC69358A574A2ED46CC -31D564549EFF23102D92BFDCBB2BB985F78F36033E34F59C0EBAFA3BDD71338736464CEFDBA91398 -33995EDA4207BFD4A9867D32E867FBEB7DE60D132803EF9347CB17BD91315484EF6570892297DD8B -7D966103339535E28A00CB1EECA4A9775F60A9F5FC9BD8B06D78FE8E6318C31DA2E847E3F9CA587C -B01AE2BA0A2EBDE308314413F4F230A758184ED60D4F71F6CEC22A93A01B6C54E0449A3860FCA895 -4A347B7588329A80974ECBECDA1070FBC055666375229F13DD995E99265DF870BC8B8CC6347FADBC -1A6AF64599271A475B9123493D46BEC41289BEEB67EB97A8DED7A9C9730D37C65164CFBDC22E5CA5 -89D2E7954C7136EF4E084C43A6C7F361A3E96989239BDDB9A593CC2A80BA16DE9EE90E95CD39393C -212AB22EECB677FD36D34DEB46C4AD0D21BF7E6D7CBD0C8083842FCD87B18FEA7CECF939987E99BA -34C214E44DD84C176C9CC5A4CEA76D380CB316BB4EF9DE73D73B4AFD4ADB54451591DEF86621D138 -D5A0A29441502BF6C2ADE671CEC3CB5CAB903A657EB2D70C943F976C110E46C5D9D29BC00A875F27 -38E5D22496A43E096E009C5D3CB724B4CABB32838DBE527F83B18CB457E57B092C302EE557FD4F00 -DB9C56E66C9FDF4EC9FFAAB85F60D02BA79694FABA476A199A0331C30A78A92E10417BA236E23364 -8174C826331DC1BAB87C5F95027846130C6A2B4027930EBF9A97BA1B039D386FC51C302648E25980 -212F6A582CDE2778C677A01FBFB3C5D1B8A374ADAF6ADBF7DC94075F25ED66D440B3922C5F255FB2 -3FD8F6E21EA65B1D93BB225684B50F11310E242B087575973345B229BA62C1E2C35BDAEC04D10148 -F5B2F3BCF7399BDFDF1F3F79119714AEA697245BC647316EA157484ECB951BE367234FD02E8B1F09 -1AAC3D29BF282DFF4011BC0CBA8E55234D943DB3017CC7A766720BBC29B2D097A956C0F1067177F0 -12D42ADCB473CDE8D1BA35B4030757FA1D8211989DF3BD22CE5D501C21EF8708FB3449DF47D88650 -9FF7B59B76C0DBAE443F336FEE2D615D7EED1C284F14335BC8A26BF4621E10DE9611FB2F1DBD52E4 -B7565D8C65B54EA36D508BCF0C578A49A2665227CDE1F9768EFE847F9D94F1BBB7DB83701C232198 -5C7283D47B2E40B27A268428AAEFE75F6B2F8764A8494E5827573758CB9CA46FA93208836BCCC8B5 -564A69F5AD882052AF1C1417C3FA7F580569528682C77080F3688B65E7FC24D2A3AEB61574B4A321 -5927281544DDD7A6EE0A3E9388F8F631CE7251724DF70726E5912DDCCC8C652DD6C9608F8462303D -867F589DE0F2F71711B35142EE6EF93B64D6326C4DD7DC83278E057100EE772082E6BA368ED91A55 -53ECFE2293A481E42F83BC8F9148C70EACE91F7B7D9CB8A72415BDB3AF66F68EA733A17ABE9DB005 -3BF148629132969589F38D30EABFA96A01FAC72650B5A6FF3935670198A1EA33810A9B11E330EB8B -451F24F93544263436F669AB5A90A53B16CCEEAC36B1445574EFA7E802DE73522BE725E68704822C -B7D3912717333367895BBFBE06966A5CC653AAB5E9B3596702086BF0010085B900711932A95ACF15 -CA4DC45A754EA334E9EB84D6FC8E3FC4F897456BED64BB93B593549FF0D5352275D8E417172A6664 -C5E0ECED1019494A7ED49AB0B965BEC1A82E5873766BB38D7D856049CCE2FCA65AAF61E961B60634 -E2A69EF059754C9D8163D87F928C222772D070D83FEC6FA5AC734AF65E40BFDE521F7D9CB1650FDF -64754BFF21EA3FF0AF7611A93D525EC9B28C51AFECB04E7FC8323DD6C9B0D8539A34FC3CD8CEB795 -8E8EBBFED4313C77ED469C199552A9FF70BA5423B03B6148D4EAAE17B71C5B39DC436AC53D6BA8A7 -AD81AA8B02335A8B2B11E9F4FA913159A725B8AB60F52F1A2EA50EAF4D56656E615BF382CC68A690 -BF83DFF24FE986570ADC0290ED1A37C1C2AD469CE789E0EA0BB5CE01020100E729721AF3B5BADD33 -A2DAA6C33EB8F9064F5292F715F820B4BBFDD56F76D42E7A1A068C1CBDCE4640082F6E7D582D1939 -990CE6EE8D270015A2C461798B37DCB5798EE9F7512168B76D26C28BE4A49A1BF96C89D235F21A1D -B6A96E5DA474D0B19B808D13D7A11BF39EA8647499C410ED9894A1ADF33D41B6FC2E614D8087F4C8 -4E437B136F3CB32DB8393C49177A0675A0C9E7EECEF448A97AFDBE840FA01FC7E5F2E8FECEDC1884 -84C312E8635CD79195475DDBFDD4D38D5A0246DE2C7F21608F8D2C0DA1371D302E941572E5792A3C -F4E51A33228B93A814D03FD4FC223C314CF3714BB3A34BD4F7ED6348577FEED9DEB082C4049E57B5 -D3CDB7F26629E9F3BA36893E09E3C7463D02A22D7056BE76B87763260E46E48BB832B7EE13F8DC05 -37EC8E81E9BDFEAD8C27EBDF1AD706933EFD11131E12814F236EBB01BE85B7F1B2D627413B324918 -D247604F56EC128909873FEC3857028BEF76A3494364C2A7002D104D486236C30B48E2B75D851C34 -EA50BA7FFEB4E19190898AE21768C157C0CAC628A2181A32796FBC1A7271D2473CD88E5395DDBDB1 -FC3AA8DF0F3D588637F19A8B833AFDEB5F655A8838EECD684E2315B72C75CEEFBCEF94344ACE8D6A -DBE355008EC72FE7CEEAB01363A895F4E73F867639BE0A0BE67333848816B05B419221BE8F9066C3 -62C23FE85B7F392930BFE4C12B9526FF2FDEC38F23A159ED61A0718E7115C24597D849FA76369153 -54A40C965D4D72EC94DA61A03766AB39AAB684E134FD1407A5B1B19BFEBA52AA0DA5D99CBE5C82DB -AA663711E6DEBA180E1D4A39C320516A4350D296BC19BF1BE054859A0889C7E9727A021F3176FE62 -0FB0C837E4141FECE531A950C03D319E3255703220B7185BD20FE5DBA673F8129AB211EFCF36EE39 -4C7E00EB0876624BC840FA86E58B2F584754CB6BFDFD76810E300741EBE4544E5AC17413ADEB21C6 -2F66CA4F075C32381796BA709782DE34A675B717A2C7F6D88104CB924FDE5DF775B4F0B68E0E2E5C -2F788BBDEAF06D8E1FC2105CCBBD5827C0B03FD6CD64F0D073F3192D5F94839644E5EC6C5185BADC -F04112A65F49A8C83174A9AE958E76A2F5AF469E8B76C833782C5FFB8BD7B1BBBB3EA0CB7C9786C3 -BE2ADE5E7AFA8C8F20892659A59BC421E28845A108E34EE17864042EF587A6D67DECDFB3F510EB40 -D2229585347A0035670FCC76C2837A4E4D68304FE113C539B35C1F0234B5079B8E32934546982978 -C5E4DF955A454EA263C3CA5D7101F31A318D82A3F9FCB5A8AFD7A65209663B0FC9DA400B26F285EF -46D0E1EAF8ACB1F1CB805E3986D04BC585073FC64895E4DAE1CCB749BB439CB32EA91176D5C39C36 -50D10AFB9C9884D5FB90183424CEE67EF2175D01D2478D67511EC9F54F88763C152697B06D948BED -49240096EEE3D06AB4575E8E8B2CB8263B5BCF4FA1608720F52B675309833071879DF52C3EC2871D -20F398B5CAC8F8A4D41D0F1D47584DD90DCDAEA4A1CF160C4B3BF1AAB890B5CEB6CB3488672AA68F -BD938281DBC1D8BCFE92FBF514DA5358443CB6E0147254E91B38CE6787B2BB0DEDD2D38F5938737A -977B5EA42892520C58F8FBB53C994B57382379E9490F0D6970B980E1BDF8CF9F4C3C5E0A18F66E86 -EE93FFE7FE546DE50F41364BCB3721B637072571FA1779F1D672FAD260C16D7F13CBDF3E4376E7FF -56D2A710AC5AC35FCBDBCE2C9C17E523BBE6218617B13C1FA6679B308979AE7C61DA6E68369324C6 -CBC7DDEC364E5A86707266C0B459EE7B2C03FE584E529BFFDCE98C90A2F3D9305AA74D3ED8430DBF -3A49FE2ECFD9C4BC9FEFD22618FE9C8A973AD072AB6F713E4DF02DCDA7AC5359B2D652013E131B76 -B3ED6C75FD53BA58D862846264627F6B9E70D8800F6D9B32242B747A67BB2B45675840D34F852AA8 -062FA6B01E31ED24DAE02F6CF788A17F7B9368175195DB0072259CCE0FFB2C1035C1D26E1777CCA3 -D56A827C3242069E76D6DD69B653768614B9ACFF16567FEA61508D51454BC02F6C60F755AEF6AFAE -3536BBFA1823F8E1A53C41124DE983E51CEC92AEF4F99785D554488A51C20885346D1F761DA79017 -940A0C557D93F1DB6B3D00FFD61D08E96FF3AFCE5FEDF545CC9F47A2B1BB26713431D6D1E47FD6BD -6E3C668B0368241F0EBB5FA9C991DF79890E52E83A3675EE699B61BAF869DE91F67278F510061C6F -E41DE2D883F48CD0E068E2A652B244128D82E5CD52F35F210DDAE3054691ED55A7D99088AAE8FB04 -F525C2084AC09F5EDF80A4EFAFE981F74C0DE9D194320709B3464F3FF2C0F6AAEA6D973D9C323F53 -DE3D741F698FBF01036716BBD62957CB32CD81D3A2674560FFBC5BDC5C6E4F547E589AD0B1CFE14F -5E17FED1C4A8ABE4E67CCF8A49F32C4C6044F1431E1CC382E7758722A6D0DF9ED23E51F8AD14D11D -7B6428E27443715EBA4E9C05D6F238378F9498AEF0E7EE4FE6856622CC8E6ED141EE5F109E343CB6 -695C4BE1E0F66601C27975983BF557C04ACFC19227A1AD7E6C44C00529FC7EDD7F886D24B7E029B9 -C395260088BBFB96972199A7B32796D27257DE83A7402291C14FECDF7998C5C96B1EDADE0280F856 -8A8F5007852EED303969180B3329917973C2D32C080C9765B6BAB0673BC7ECFDBBFBEA980C263843 -39B7F1052591D91667D4FEE413AFC23DE2D4B9DA742F4269C6C939F5FC32A38040730A018155AD73 -3F231E4D5B9D01C03A58EAE7B5F590CCFAF25EDC8552CFC8D95C60EBAE1837D7A97CA137E9D4A4BD -2CD34AEFD68D64B3F4F62326AC429921D7FB3C235184FE0899690A0B775F1A566EC29D5830D32372 -6526F7E7F5AFDD71B77E07613DDC4FC63EDF49051AEB59E6337AC0A4B6DD872E776C9CD0CCB86130 -5322D816732124F5978A86C186BF0A0F88E733CE38E4D7C1BA5378C5629B1EFC97806059990ED42C -5CD183BAD7E94070E4058569DA2E51831FFE0D080301AEAB4350BA290318AEC582C78D05DD92E5AF -B4424EA808629BC972E68F4FF2489C245593F07555CA6A2B25964794CF31CBD3AE5C229AB9B8C298 -06C01D116EBD0FF0F159ED2D3D7DFC73EAB4910BFF5B0B0B587CD9EA6E6FC45D63C09766224D8346 -1F0588140B258B1729F70BAE7962189B1554483392988CF230AF4077193E53330519394DD99BA135 -6D4730AB221DC6A66019BFAE564893DDAD7B177DADD16ADD21D396CFA6C3DC818052E2F71149FD59 -4A16DE0C2FFDD366C99B486C55A6E991E4D22CCB15843F0C3363676AF2F5B2D1B7EF66CCF2F12DC5 -0D63776BFFB058D70A9C76DCE96C754872D72C82A0C33F90D49C935402CDD26B6D743B1F43BED5D8 -B539424849C1495DAE73044E885A7D0F307F1816DF6244A6F2D97BFD4E200E93F69B08AF39EA21E6 -E347A47CEEBF803F73B978ADBFCF056789BB8E6E2563DE87DD9A8C877157B934102DCEDAC54D487A -1BB2694F0034093C48F10A17D32E2BDD0C723CAF59ADDD1BE373AF8C9BEB4415AA5AF36310C31F24 -354A53C0B962573148BEF91D994FE3F3D8450DD4D686725799F53C373A0A3E3C060C2E1A3E800504 -9F26D716E1F381B9F83125E4683264A07E2D8938F605978E2513DD2050B3D8A1012797CBA8961632 -BED260916338A812AE751C7B657E086A0C7DDCD3BFDDFF3E48B84751925736D1310C4910FC114387 -F3ED7FE163F91895EBF55FCB425CEF5729D99BD8F2C072E36C310523E75CD8E5DE49C031C4263410 -9D56E91A46C8C8E89FD92012A00C33D0DEC52597B5C6933291A7BDC5CEDA95DCDA5600F9AE1C8250 -54E7EE1067458CCB66610704C58E4A4FC0CB5FC933D0322A716B2CD430A3AD48DAB3D4CBE9D23F2D -092368CFC4E1F5495C133A92942EC62118D45C17723646E69407B4A89DCDFD2AB3FFC099A21D9D29 -741D68270629AA3A414FE58658DC9170C247B6E23F35C4BC5FF83009F462F2EEF4DBAC5FD158A658 -57F9B6DC1F5192DFB169DCB65621CAB2F1B07BD22F4155A8E9E2B6388D430FDE5EC1C834D22EA035 -C52E1E34482EADC36B4CAE902AAE89A7284E62B3C84B608D6BD05F75BC31310B2DD3B2C08A00E073 -7F104F03A41989D5F6B9A2C38B22F1D1803EE5D7A4D8DE44E4ABD496A1DE0C0E12C4BC96D0122846 -3F0EA9CE9509FEE987139F3DD3F9D0DF4313F555BE85433718F6D05F197C41A9D9C7A8B0D2740196 -82D49F58DD5F66B12A6520D9F226D1DF1F1B65CDFA261F980CA25A92645B86B64606293F8BFDE364 -C47D2AF2C709BBE77A70A5712F2CC26F3D66F5BE2C307A48E6F887F681D30121E32BBD87271B5DC4 -615D28C309F15AD263FB37424E56DDA6E17B998B45BE6C7FC6C28E3394A8764C9EB2DF5C06626593 -B5C665D550D4600172791CD208AE9F37BC082B0B242B0A504B751B18F4D7495172B697EE217834A8 -A4FB7CC16D6F9E8BB400BE8AEB0850960283DCE725249FCC4DE97D9886745AB6066C3E2F64DD8AB7 -9AA11667F11188D7965DC11EB760B772E282DBF13249F31986AC6898FEBFE23E3E8B8D2C33E00EA6 -FC493850ECB2E6D831D1EFCA3C2EC8EE2E394599091ED58BEDE97D7A43B6F739EB0F845EAC1DF6B1 -EBFE876009CC5D804B15ED4B56761B3CE1AF59C07B49DC798A44532297AD73D5101ED47F36A3678F -818297CC27F6AAA2AACCC9AA9B6F5459911D8C56CF499E390AE607F3790450B2B9C9BE0F006EDA0C -715B5CA0481734CFB0597478E7602B0D2C1E4F78F03C68C17C70E4B42D7D2D3C95CF40F73488B371 -8E2CB05A549944D86944D78724E266C3319AF89AE430E777E95F0D792B1C654306E421F3D63A26B2 -1E74B6E8B21B2E2B9DC596D013CDA16D08E65E8F24A84B12B2BADC653E6E1110DE2E709C1C1BED13 -707B70A421B384F20CA7A9A9D20324DD383F28B2D3C7A9C53F5D4C6B7C378D26DF11CF55238BE1B2 -4FA70DCC178DAD3D35670FE4919085EB1CD905971D76A368FDFCF9D2F0A23739851A3A6D2E02D65D -54DEE69ED5D81315D3EA5E356F94EF256DD267FD1E1A9EDC9CD63E743F299BCC4A4506233B8DD765 -2CA067F741603F93250C087D368F9E9CC4CC1A6DED567487C05BAA992B0056A77F630A72008E3946 -15A9DB24FE56A956650EC9DE90A6C2259189440247970541CA198748928215C0E132A81AA13208D8 -63C1FE817F70CA573B54577D10B73100AF8EA088208A44FB92ACA314AE5879706180788C17BB1D0B -81B6B95A1C4E0F9EA66F9B39BFE12444A6446691A7BDB03E0F03D9F07A10A7598F2166F108529F34 -CD90E601FFED3479ABCFCBDE8F051C348E48C61D95B00C59EA1287423F05666C3D36288844067E83 -E14F6B5210842C742B89F13ACD126B9FC50ABE2CA7D7ED513D43B6AC7F41EEDA416BFFFCC5C844AB -2D23D4DC09B2D510504CE98D02E72020D9E669DDAA344C63A1B75632F912A1C0DA3885DA4AF7E243 -E4A4C6493D6595BB6D56B0359106957259E59E336BAAF35BD1CEC5CDE735272EBCCAE8D4904AEBD2 -B32610C6FEA2B69941D6542ECB44D71092A3CF067708A3D087AE99FF29671AB7DD8758759B971A08 -AE1BAD78270D2FBEE37AA2DCB119D72F6C7B0C8509018A70D0B0BE2C6830EF8E0B24B1CE1141EF87 -3A4D7DCC501F808BFD94E4DC0F2915AA023076BCC8006490A43685EA25AAFC187302EBDE7FE1965A -04A5A398985D29F08E085127B56B057334D88EB638A4DDE64AFD204974C3939536B1B66A54B4DB81 -151853915718F70813F096CC1B0EA25E363B49264C2AD17158A4489F91453FBEDBDE15D7B74D7F98 -E81DF23251785D58295BA297F295AA6248A912CDD4F1111E6B628EECBB5139709E76EA4AB743CEC8 -26621D08E6BC64691CC90B3C3C1778931A28D3D5B1E20E96C643316613FC487C9B604C43463FA453 -3BCA1236286E6F5A6EEB2F1D9C34BDDE4595495A365F88055D9268541CF1654ACF478D384A5496A8 -772EA1402751A093582A6625A0A44816B5FDBE166835D598644296249B92CC90AA3FD6445C9A19BF -27F59CB0616C7306070F33C7DF4E1DE64AC8C5BB2FFAC1EF2B1B30E5A0275E6004CF64BBE2C6710E -DCFC3AA4ADD60106334708862FFA6652825BC84842736E47AE6917180365C75B27505EED3C6108E9 -898A780E20C3F606A860229AC46D0471ACA0187D6D539A1B8820F620F72B41AD1D3BF3834BF48CA2 -AFEA8BF535AF74C4562DEADCB63D2F5C7585722B77C989342D190FF926C8A5263B4F25286F99CF6F -C62EE6E2AD61C82B29D82468AC10FD27764278E5558CE8B41BA111CB2F040914451A480C93084237 -CAC8F66BB7C6689F340B8ABF0150E06D5B1177278A4C08742FE22F42C28680F190900344ADFA486D -59718C25D37275BCE4DF981AAC35D2C7E85C72A0188B8953CFA516FD545AEE0BF4B8BA301CFDE214 -4241FBDF3D204E3D2823301572E23F204C97305A82401660E12926EE7BA6EA1A81FF5C007933AFC7 -3266FAC4C134ED818A48E7DA01C71A46335C845F9DA5E960B25339D551582B375814148D94CFB781 -FC56093827B78578A73D4FF67B6B87F40CFA5E3F4325D9108CDB64BD06427B88C84105187316FA29 -90B4E3E8EDB6C78ABF164F4A9717D523794B2FE772A04DABBE688CCA977090979B5F47CEB90A1DBC -167D305EAB231C9F4260C4AD10889CB785169902FC0BED78DA15B8417453BB65856EA0BEA5245BA0 -573F623D215F6C0CF801851C305B355D26B52B0B343645FE25C78A3526841EDA480919A1BBE5F56F -C10ABEAA3E1FCCA7C43EE560F067F1AA2AFD642F769D1ACE8E2AAAF38850F0D757CD808C921D716E -96FBC07DA7860DFA70CEAE2888C0ED3CBF9586443532B68DAED9A926655C157A416C383A53D8F283 -2A4E67468112A09ADC837ED8EC95F70852921F50D4417239FC42EE3624CA97F682745CC5E76CC7C6 -7BD99F2180F8C0B7FB49539C8CC474C25C0DDE491671FF329E51BCFA779346D4686835A3AD6633FC -B5E0F67E0CA9CED8F215BEF4D240453EB2EDD6ADB22278AA5B985FA140C9834D38753DF2014F8C0E -E6DAD19E8FC54C03C1F6CB0F858986691D99592562CAD95FA0A5B2ABE4A8B54B457D42E8C33A2D19 -51C0419A72FB94FDA78ECD92BD2A1416459E9DECA9469F35E4C47DB531726DEE8F203D7042EDB32F -025DF3D582547BB1D45F7A5B70D317DF4EBB16E36B0D798E0932FD2A85B04FD67143E4B287A50416 -2C1F5A037CCD780088C5476385AF8168E12D97D44B0630621759173C8F1E3006B5B1C6D7138B7EEF -C3CC5F54E24B2C3CA7B41AACFD25E554880AAF406EA4C3C6E21D3B550B040FB1952598A7E8E6488F -E38288B2AEB6C4718338598A2BFE4D2B9D14C65732DA304C16FF3E1F8F03046EF095B65FD609DA87 -EC24A69278BFE65C905CD0329F6A486B8525B7EEA4F7AE56C2633CD83543269E8ACD6D71F500D82F -DFBDE7F7F7B1AEE67328549232E26CA55085B6E84D9E2E7F74068F93A90C4654F2F396E57C5F76F7 -E61CBBE523DBFBA6E76638BBA3064DA025A79E3A294FE7F1CC28A3B4C57DD6FDC48E541A85534B25 -E1BC11B4F78019457239EAEFD4BE9007D205F1D985F389DB22400B279C10948551A6B4A17FBDA0FF -C9428B18B43DC76EFB15FC2182216F1B60B4E344A03AD6C00F141EF99F89F24C819C3E32877A927D -84C2D006940F39CA8B71E5951673EA9BFD1749923219DE38929ECAA9CE43B06CFA7DA1BBEDFDA56C -61FF6C24F40E59B13870D5FDEB82D981154FAE5D6D5152DE69339359461A41A9713B6BBE47E868C9 -33CD74C75DB71D13BAE4DEC85E02FAA14EAD6C0A253B16C79514657B15E68CCFF9EE6AA385CFF9E2 -C53D9AE40F85C793E4E8FF50B2B7420F4FE69807BC5F37C3E300E6B3C3549D1D3246A2E70F091054 -1135BDF805E0A698E236B6496702D061241687B7B8D1A0E517DF0476DA09D89667A7AB375FD2672D -CBAB8124E511502DDBD08BA04D941DF1CEBDCCF7ED48405CBCC33774A68C5212FC6F132641FF413C -984F8B43BDFD7B1A2A3435F15AF07EF4970D3E4A0BB947C181E9CA27CC14A35BD1BD096875B45873 -8CA244F88C28728B74E25CB8C4FC1095A56CA75E4569AD3082EF194ADD11350DB3B74B96761D4538 -596FF7243B1E1B724716A144106E080D42036444FD472998460CE9ABBD05B42AF9389AC452BDBBA3 -A13A96890025789F16B9D92251FD3B3BEB2C61EDDB370A20456E3BFE5F4039E2557C451C524F8087 -015BAF3FF05F51869FB97512968BDB2B49589C1C7AF1E085250A47657465F480B7023E24C76731AC -0EAB6704123D77977D3A2C4C56B691346EBE589C619C04515D34F81FC6A17527D5D8319013C5D4FF -27CC3925E24C99231AC7FB9EAF0BBA482D3B75807AC85D03CD09DE5D9AE0B07B7A813F0449786500 -0AE8A7E00080300F0AB8C399057EDDBA273DD2E1B2A0DCEFAD3B332E6D4AC1FFAD846167DFD70E03 -46DAF84AF292D4F424256ED5AC4E104F80697050D50844A708EAC9E7F7784FD01646F3BD0C595CA5 -1EE6BD607D254E78ADDC5E15C3B6AC4940EC865A5C23105B6BE09EA09F2C05D6D76960A843B81EE4 -33977FAAC3CBDA85CDD2F4DB7C28293A77825635992AF8F3B38B4480D9A139B1662345A8ABE1634A -77496C3F57597D2985E9E54717AB2E99CA35789441BCDDEDE9A9E2106B401D9684ADBEFE40D607F0 -75C179E9CC03E59E65430DB70B441D43DF03F2AA6FF06F224B6E455B01C64FB89EEC9103E48453A9 -749B4D602808C7E408A8903091D85E06AAF635D0D529C3CDD1B8479AC0F4208C284BB678A547F2BD -77BB17C86D4560434F7AD1937760A6AA55B614CFA9FF8C9C96561AE6C8F2121C4E20237428BC51DF -2099B6C49E3EFA18E6D439E6E6981E746EBB1DC461259D8EA0F8099C47CCA27B2D982B72C9A07CF2 -1B3C05D6E26E6E286E348B8944078E24809F9C5F3D014B4CBA02533F5621BFBA1F0EDB776C634746 -703C9F73BA89B1960A496420C68F54E5B901A6D733D7ACC79F275FFFB253F389AA480084468BB34D -A1E797E43B7F6E8CAF5E8C93069A3A2730E57EC39B677BB73E3F07C2055599F7062E53B37A5F0099 -907D2ED87FF7A82C95FBAEB888033BDFD67BA3A6031A4CDC56CB1E4CF5B06B46E16D988BECCEFACB -9E1C037023D7BF5CCF5D65AA66A17AB361BE7981F132A578F3ABFB97960A6034F052D9D5AFDC0679 -782EC90F240F943A5F9A3D969ED7399254FF67D89DF668F7C56FCEA1FFDCF20481474AC8495D3AF4 -B6D7EE093E369C057F0B70858220693B398ACF8E8143558132E4391405E30A73937C53402E459F4A -A3539CF7A99A3F51C0307D045DF8B77757E92EA2F51BF0BB4F77D3904DD355665870C2B59F1ED7F8 -4FC71FDD7F0B6C5D3182DB77827CA6A2060D2B8C83C4EA4A432EF43A4D0A952CC6CBBE52A9F0CD66 -1A538973DE41FFE9C5CF55F2506B9EFEE51FBAE5E63BDCF5528499A47C031163C88D3022606784DE -2F46A9C9235AEE3D4F71D4959B0CFDC5B7E78C8C0A8F9DC99440C2263DBACB343C5C648577F5610B -50EAB1CF7FD02419EF3941C7CA0B0E64EBAD4B2CB05A0793DBC38F1946D44767BD287F5E9779C611 -CA0DAAA1E7393DBE0683C8D3455CDFEBC0E64B54B737E298DDA605227C0C4BBA87AA3EC7FA6EBAEC -39E6EF2537D5974391D31739D9FC42983D81AEE44711C823F35F8E2321AC74943871739D2DBE9748 -FE68592263E7713F27E0D49B9B5CB7A4E55DE54E6B800D15856450FFD3AE5F287B12AE4F438B20AE -9E27E6CAA00F3EAEADBE08432684FDF9931E925544A680182602A3C1997DE5D0630BD5A010535E66 -E1C123013D23966B3545C7431C39B97295BFA4099D14461004C42C85095EEACB9B47C593BC6DB863 -533A8619BAE09095DE8ECA432D4DDD49AA600D277E75DC3F5C6631E2A05382CB007825FADB77438D -CFA78E252D79B6A196D5164C2FEB85D75ECA25FF80B1D97FE10E87960CA0FC47C41D3A213BF141B4 -8BC3AAA93FA86245064668394665BFD52D12C3BE4CE39EFD8111754398A944C3FD1AFA98EC337BAA -AF899D35E804CF416AD7FE45FFF13FC6354007501043F98FE8428DE8013901BA6A28711A2CA85A27 -0BB135B72F1D5026E8217581860729E94F2F1878A0E96C59E9F62714FB5F8F25003DFC7347E99007 -8A9A331CB3A6A535BC61866F02513DEB982C4A13ADBFBAC3FF70A7335F40D5489E48E5EDEDEF1619 -1973D932479C62183B0E25EE8C4F76D4F1AE45DAEA4A12AEDD9EF81D248E8D19F8C8A5BECDD1EA1E -98783EB7A38149170851B1942C96C53DE06DEF80913BFC04E539EC67C110498D15B78268853E5C72 -F485F8A27B768569E54241F6115875E2973292CF48FF91D45EBED627AE9F0766D22201B20AFDD40E -5B17CF337F2999E0BD15B86E46EB3C18FC12B7DCADCF9DD50C6C7E3F37E615A892DB3F57E250A072 -A49F7277DD6A2C8042698233D35A699B17ECA5DBDA6D250ED4A16FCC893BF0DC2E33FB1EBD7DEDEA -3C1C39603C8B7E1A5A833A8FCDD5570BD088749BB232615366687962C7E56ED089CD7B092505CAFA -5A80F503C4CF337F07ADF0D106937E25670839D491F7BFF7A523DB609D126328C16113ECBCBF9C40 -04904427A108618AE5D4ED809F8CCAF72251104C94EC5BEE21F91B179D31DBA79CEEE5EC7FF698EB -84AB1D2D1A624F58B3622A78844CE51498B2CEF38EAFE259D22C7BA61104651A862008BC1DDDA58C -C45F663EB26428DAA85E7785363A69D2790996EF5D9621D53042F42F794962FEA46E46F37B8AD1FB -76FC8D5CF2146843F8CC625139C75FB42DDA71A752BAC48F294E4C0C8289FC46DA5EFD9C91BDA6D0 -27518B7E81E8B21F755A9615627D5812ACA674D1527A1185EED4E3C628196E7D0759B1CAE6B9B7E9 -01E9599A65230F1EE469CD33B9BD9C104C44E3C1AB966C9678BD0AD78111A4E0F2D07A01A038CEDE -7036D0534D684A1562A17AD64A00F279200C0371B1CBA61747671D2A21D3F9646CA290F6B82418A9 -6FA177C6278277504B7FBA936325F5FA124AB018A15DC18D2C5E8F93CDEEA52BEEDB78A57828D81A -3E6C38B9FAF3DC4EB7273ECE3EA4482A1C6242A335862C2C3717F9C9ED95F77B140C4E1569B2192F -C7DCF702D0BC9A50428EC406F8BD0CAF886B4D979320D3E429816D88F7C7146D960AC12E70F2CB7A -9F4E3E366665AB3F1B4B6440F55EEA26DC9EE0096BB7763731740A537766490C8C174723BF0EB40C -53701AAD12B21D436ADCE22203C1053A9DC4E9F17AE617888C4B4E6F3A720E4E6366BA628221A387 -D8AB15E04AD69387C310D3528BD2FAA5B22BFF3FA494F5FBFAC4F771C9C7402B95580C5AC4BB3AF6 -92A70CB2C851FA5CF1173EEC3EC29B5A05A0B728BBBB51D3B7AD8B0AF17A1563E82FAFD93F8B7118 -1FB7AFE352874F4EC6D334AB6747519AB8E847B7BCED33EB5458A828E074E74BA621BDCD03FEA604 -7F7B6ABDA01FC7514BA1AFF0D4D0C0CB8F4E42D5A87E395D9ACDD02CCC220C157153422018725846 -009A3ACD8C8CDDB66BC6836B4026FD9F526AA275D06C813179E5924F26A25094E7BDA8BD26AFC4CE -B41D8964D4FC4AF1DFB0595BC5D6714C32F15DC7194E9A3A73013C45D8FA55CC0550A12D9AAE8E9F -F199FA28EFC2426D8D1DEFB93A65717AF3EA8E2D5B4AA8EF0EF38E9600F7D4E7D9F1D67A2E63ECE4 -789FA74B159BFE2F91C19B0378BA52E93DF12830D99553B6618645E26126842AB70262D96E35E5E7 -50ECA0CE3458B3E51BEE2F21191136DFDBCA39BDC07939E521E4F492F392DEBD029C1EA237BD89AF -76BC89F618D530160AB16269FA6B693CF14BDC4EC7C630025703C5337F61458FA09104EB15C7CB20 -AA4C9BDB7CEF3A09F25BC7F3149951A7CD75372993B80CD2112F7674CEFD6AFA764AA3486730D2C1 -897A264D82A91709FEC4A21E30D812F558451804EE6F3DEE2C4C437846BCBDA07C5B6CBA1D94AF02 -9163B7383CAC6E088AB1DC14ED3743EE77E26EA7AD3119A76C0B5F925C4DE305CD7BB3A09A453947 -5B9BD79BE28FC462D8718CE05F9D94CAF3387BA55E6E447BF81A9EDDD3A34E17BE66BC52B0C0BB6F -86F6F008829173816D205182ED2ECED319864A796AB65D4E3950288BADA94FA32B6F453AFDFC6C39 -A4FCFE60353A64627E2057D4B379D3240012B3BB0ED0C7876CB83C1BA5EFB6E2A03F340C2B576731 -F848F762A7E1CCAF267EE06D621BC33FC245D0E1547ADC12CC0EB58B26BABDB8EAE9CBFBAB93836F -FF22BDA1831DD01B7346AD377AA298D84628BF1C07433284B0A90FC89F5AEB2651BA2CEA405D4F52 -DDC0E74B871D43F71EB4ACE0D2B401F9348EAC3A2EF0AD295036BF6CF6F870D58E00B619D50EA7DD -77BC28DEF91D805CD527DCBCFDC16C042BF9B874E3B1567EBA4C1E70744B9E7E5BD1FDA6A5FF6E10 -1613FBE58DC46CFAC1A65ADAF65E49757E9304E2AC9A91E0588600C709A61D4231730073A36D473F -518A145E141D0A5A494441B9EA99AC23F60F54F8127B477E1CE698BB4129B4B1DFEEDF10D9E665C2 -47A62F112F5CA30B0AE5DBF3E495FF06EB28EB438CE8AAAD84D5F50FB56A3AF002C23BCF66ABC270 -7AC233FC0F2723DB99D2CFE7D3B3667732A531F5DC315CE74EDB9050BF75D29E6430F57CB6778B2A -CBD57DFCEF896E6766C8FC5C9F9FBD701CD62CACF33EE0FC95E78DADD205B5F42CC63024624BAA0A -B4DD447832B4E1DBA77BDFADD223989F8E958C8D759AAA37930664C6EFEC708116248A2A7AF3D656 -DDEAFD009B7F5333854608E67E5E588A857167ADF9225CF6C641F5E19C3E08678A281199EDDAC831 -B57223B1BEEADFDCBC8F6F25D32FCA2336C808162E8F381656E847FB6CB13969572425AA05AC830C -33DE6E030F86A3A85D2A66A77F103C7042C97205526DC882EA9A00EB8BD5519847EB424C15F808A9 -1652A6CC89B66A5731126DEBADE123C63D88A2E550FACDEB3886FF98646000C64B3A91078012CA30 -904B71737CEF6BECABD43DD702880538F5A70085E6CC6015D2163681067C3D513A8C66032C34A0FE -17A58AD4BC97CA69BF41F11D5E910FDFE9729652D3EA21F8DD8CC19160A8FC77573B1E9CEF4E790A -79D8AD6723B6804E9616466C935303E063DEE29CAA6C3BAEBF278B818C2EC2F13ED645AB452397BF -00DB8B26E115026E256746CD0C78A959364FDE6DEDDCD0F441A61A1EBA32C7BC172BB09512148D1E -BAC9E791B7D51B71CAD2DC9B83B2F99B3726607D9CBE58B499A13753CE87FCDCE21C0AD0528ED0EF -B9B2C927F57C78C626248AA2B835A0791244C5896686A66173EC9F802C4C633A42B086334D2A4878 -0E53D00809247BE64E529F96AD2F8B3922A6097D414DDE1EC76F9552F9B8D58B8E34F359AD792B2B -E50C26DB05035E7497162E7C49C38D3CD9B98D620AA67492BE5AFCA3A81A7080185C7F0B5105223F -1FA77805502A2E8C5FEEA27699858D84A95842C5F2FB68686D59FE24091FCDDE139B6463BC6C7B1E -0E90D20A83651AF00C85797BB9F53ECEC1675C7EE636D0D9E77DBD8F89670F855EE4D4800FF3F695 -0EFF09BBF8A0DAF6B8242840CFA5BA73BEB95115F4A78BCC02D85ECCE0C0F2EF6F328AD1DD6CC049 -5A3315B414A4D61DA50DA46D7ACCEFF6EE56451805D26B0359AF193531F95F6589CEAD6FA041AF15 -3067F88A0A2FECD135C56682DB2B45A71D1FA737C064EE9A4F404BB72A70B3AF0330359393247EC7 -81512482579865240A23CD8479F21C2C44A119EBC4E81B308DD8AA86E60C3DD8ADA50E0DFE8308EB -1A7F201EDE8DCFDA405AEFB47E0E6CA7DDB376DCB21D37F7ACC4D3E9F26B03A8DE0E8940CA3A9E75 -963A389DF8038D2C486072F61C0CEAF500753C7A6352B1CD0338D9212B42A4D3DA23D5BDF44C27C9 -4B88A415A3242FFE2E1B332477A21D2B9CE075EE479C6E657A4D8874A8C53964229310E01ED4F3C6 -86FEF5258EDF3B464DD6FFD7F1CAF473BBE722D60FB14AB4918E93878A8AE4773930B8CEE110F476 -7F42A52D9304C55BE12846C911A10AB9B2E036BF9DFD597F5348D42233315FA80D0F563C388BC253 -2103F05E90DBF1923F229F980A2F4585C7A373511372D07DCBACA583099EA972C03E5AA67E663882 -6DB134564DB993CEEB6E7A6659C7C5C05C310267D5F8A24EEC2D5CC3E3F3C808E6D6068D1A57646B -37FABD98ECB7BAF99E7D9AC4414A491A73CA34C52F394352F6B5A15F0FC4D88622DAC694699C2464 -84ADAC3B1D366AFEDE2A2CD2042C90516A666A19A91C80248B11224BEDDF1A320E230739E755D098 -B6A67315535F4C187CFA67ED817A035056353FC859BF286317996FFFB478A2248B908FF12ABDE705 -402224A3EE5F463DD3D243875C84E02DB968ECA1CC52C75171EA50D6A88CA91327A7AA5795019F36 -C0A19C093A1C9D3723C7568F9D41F2E4FFB712FD47F897703D7A620B586B81936C84AAED61D84332 -B3BEBC4F95B796B93EF7A1F565C494F8A65EDB21E2EE18DC025522EF8E599887CA2836069CDDD889 -88E5862977B7472584303198CCE97EF9F9E1446D1F1F5ED1CFC666A8A0C3A03E1792EFB60A9B4065 -49E0DEDF6ACCDBD98742568B4735A747D8E5DE21E630125AE0C691D054E42199C15B1F80CAFA6E7B -B2005F374A9A5F9900ABB7409CCD50C3AFCCAB1214E6A856F7C7EBA89BC3291801E1343DA9DAD2C6 -ED075C8ECA1423B43E587AEC67E6145272814B3F191B3C285639F9E2D6E148A02DC2CBC0E054D629 -5CD05DBAC1950400A9189316F0265B86A732D302C5BEE8ED233768F237C62600CBAAFF3A110D5EFB -6CC7CA3B92D965CA7C5E8D3E64ECF239FE2507FC797FDBE54C1112B28D4DA44C60AB09D994C5BA78 -D663A2591934CC052BC70CD1DCA3325C66C9CB982E2039F5DB70C848D3DCEF655B1C2CD0CEC8865F -E8E1C0A267BE4F707ECE6F5A3DFCA3CC1EDF92C760439F51AA69A4C1801E96CA4D6EA4AD980258F3 -D15C893913ABCE09101984C61B91D603053E49A97CB82FBA707DAE8AF1D579FD69C8481CB7B712CB -CDDB4D287BE995E32C02B399602A08B9DD849039B5673F1930BEC7BF366EB082D2CA5DB2385C8CC4 -5BE3FC0E31820191A814EBA7C4F23B1938E6C4D800732787CD2CB97F762DFC85D4B798809B5F2254 -D826CA42B32695428D120298B44CF38494E56240B75DF1E41E46E53C44DC505452256DFEC819408D -605FF14D6C1F3F152F2FEA96EA0AB3B472D8704E06BE9F8C3E8395CAADD06D6DA033E81ADE5DC3B8 -3DAFF743C6E9E48716003D358DF63CD7FD3E2F727D1F2D0C29962F76D5C95ED44B6F08D052025A66 -5785F264A3D5F5593677B630E628B5EA81FB37CFFD7A30B7FAD226B6FDC82B0878AF4C0EC4F4243A -807B9839EA62BCBDF7C2E9B30A623876E632E084EBF4A21EDA04FC88A1C07021D0C72EC3E969D449 -FEB08E5826EC20E55B21EA71EA59F6E3B0710B0DDAB3261B4A2029ECAB68C19ADD5174E55D5E984A -4E5F38F592A302FEE6ECE732DDE841A28672C620CC5D687455A5C06FA9FE688394A04F96312ED025 -B7AA6FBCE2925F3AE559CC1886BEECDB70822E2E5CA3F732A87404B1536AAC469989E9610CFA440A -CE43875A70CA51F36CB6F629D9424C1E35A88F92D5DA3CD8CBAE6E8425A36968E21F4F30349749E0 -205BFF8D552837D6FC39532525370BBAC833F75F1854C93FC533A4AA53ADF7008173A70D94A4EBF5 -38EA9E62BCDA7C20E0A073BEE2EFAC34D2EF1D03BABD5147659E50B557045B2EB89DB303749B04D3 -F54B43FED612FCC68206E001A7AFE90230D9C12F74A32C7EDB5D0241DC3A5D51481FD7C8FAE08FEE -263FBCED7C7D911B3A303C835AF5FADFD218F61A9D6DE80485ABCA88200047B094441F7767B97A24 -E8C612590FA2407BAB1E8B56C71914EEF2355DD97CFAFCC192BC06FCE063D3D9D1A629AADC75E3BF -207234C208E7E30663EDD691043065C9CBC473D97C6D4DD3DFF59D6A9ABCDD4412C3128F603160AA -D8F81C6E7A4DCAF35F3A99B4EA10A34375B477C2BF846521A7EABD4D28078E9340452A198F3F5ACC -3DB7E3908939FF6E3709C6A3FD9889439A4AE3E10B618CC92E14B68429A3AD2C80940A1079452EC2 -66F254657BE7D79A2A24084AF73F6DF71FBCD32BF6913A3FAB25F977787F7BB0C3A3E8BAB38D7A2D -B0B4826950643DD1E03BD7DD1FB149A33862A89226B7CB454DAF613128C2075470E42E70A9444A8E -6ECA526345AB48E6F5160BA23B5BDDFDA6049EC44ED1461C7E0DD514B16E2FB285F72039DE3C7982 -EFD40D7F6C8E8F4CF35AC71B467BFC578002E8D2239A2FD2C4BCCDD8AF3D7DB1F4AE7F2D2E0811DF -9D0155BA6EDE50B5F052F14F6AB884FFF244D8806C07EBCB49ED22D85DF696995991A954AA97A1EC -D86ACD76E061B7541E87997FEF0657A826BD88EF3A4A5920462C6595E7A156F453291CA044CED810 -860C3B0149BCE73BECA713040664AD0591304106129600AF71317B0D2907839CEAC99515D357E980 -B1937B6E1200AACADA205421001F1B2F91753E80D2263C56AA164A74701A8D5FD28E46480B0DD963 -A683A1F355D7FB4463C7347C94EA5E2CA40B60B56297CB22D972C5BB10E56715A955605256C1541D -9F3BC5768A6F355CD3B863F0FA1A781EDB49368F51B29481CBB41D4AEB07AF9DBE8F52C5D0FF75F7 -FB6431D37D6AED84D78C778871CB0F715B4F07580F23B586C969C81B471FF6A6C7276F7E141E02A8 -584D4B9AB00E7BD643D2C3FAAA299B1F1E25048461952EA42D4882768A70DE46B213A287F8D31AC4 -6D5436F22A796C05D1FE50A9BC2A928066627A0D87DD57A3AD91DB446404B41557D1457873482005 -EA20916BBE46C613F456C849D46BA79D20627B446B2F49E3FA309AE14F8C420CFD94922CBC0FB9D3 -5A0F7DBEF577F1849A1A80E0011DA8AC082A8C6F61658E65AD177ABDF23EE17C8CF0D26B9FA3A6E9 -4837EB9E930336889767A8D7EA3CE980A8EA95528B004957BE6067CD9BD8E02A0F23CC1762CCA656 -D33412FF45E917FD4A03EB6E8C1F43FDB0A8965A33B4FD26BC24A20B304CA817E88495BA9B361A3E -933717FFB0271F7F70C5D3CBA1E86D0F51BF3ABA194DAF32C35C796627D00C7B2271ACE2463E37E9 -7B3C826CF3DB60028F240F9452CBE08F7EBCC5FDB1BCBB3C327A9F450B9E5671916101D6E3E5E458 -CA31F04D12F592F83BADA2C3683D3886AA3B403963AB5DBE220FEC00037A745839F67A3635DFD3BF -F08F367482962DED88ECF6322852D643A54D5D303EB04BFDDEE9BBA1EBCCBA7C653B3A613A8E719A -DEBE3CE1BD7E754E5F4977E863E3C2D388A65227B451D4F3A4F94E06513CBA4AC1F2F511613FF035 -611684CCC461599000E546E4D972CA6960E095A526E4735A23421A4C9B597ECE08AFA2753592BD16 -DED93255A1E33DEECE3C5EB77B94670E8137F2A4A4B98AC193258E7DEA5DB8408A806188F2D1DDC4 -40CCF0E9A6E2F0C78FDBD7B68DD4939D2458C1965BF8BED4564B32462FFF3EC892C03B11D3EA813F -AB4CFBE8D3016329C5B7E3DFED0F08284D44AA0B7A2F6BC96EA4503E8EF52A64C22BED6B452581AE -8FF8917D53976471941A9116A2D878FB2541B561767ABD4E31CCD8A590CA03494C62AFFD64EA0A1B -C779173DAD84999C7A8D844EB1259DE7BB5B25CD023537A474A524EBE4660B22568949E624D8FEA0 -AD37F4CE1EC75955EEFA49C6BF1803BE87E9C9865FF3F6B8525B8C15FE8835CA153D27E6C0FF0CA5 -1029A7A9185D25F0F14D86FC797DCC1F99EE97E2054B9C2A2E06FDBEB8DEF6CDD368BF23A858D9F8 -C1DEFDCEAF1B4A8DE5EAFC604CECCF0D285BE00AA912EAB66EFF4D37AD2EFE34853BBFD87CE09B18 -749B489943EECAE7887B006FB827D10191DAD18466CD1F86505879310A8B171F902EA0C26A388E13 -B53C700272CEE2BFB47ACB58247C13449C6BB9D01232C32517358F1A3DE064D43C18F8827D53789C -CF3CE2EBE78949A6ABFA1A6B8414CE360A5E22AFB7D1DCE6F5A06182C3B984B4F9BB1A905A9D5A14 -83750A1DE0A857CD5C06945EB7D4A2A6BF1237F32A154FDC06D51A703D44FE052FD3C53E9E8F417B -35D1C851F9203A8997521529F21AD8498F96930AA77EBAF82EE02A57BC77C792D9F220294B45F48E -A8FD94E01CD25645D36D168923562F3FDC93CB79DD4760DA0C103C2675722D7A1B79FCB4245ED12F -A0DB52492C9CCE58B333CFEE822812F7DCA68E802C451B5CFAEBAC608B950386B6C58239D1C62D62 -4DD5D15782FC552222CCA06DDF387B373E32C3C2864C63C768350C37283760F3515A5B0AFD66C48A -B522EB3E808C061F5CD6BD96CD18C9839D30508E7D4EDB88E8F11E31E10919B16B7971F06D7877A0 -58D8A4944C84FC6CAEDF3341B48B6E0D3C7B85D710E0C35F5B5053CF4B4798B3778CC28B2DC7AE0D -F3A49F9F3BCD8E95D746C35C3F47D68B8AA35D97AA08E711B5FBE70D1A623C82541EBDC51A827D0A -69E6C049087AD26F256EB7577F58CCFFBCCBA5A95D093DC29464C9A38DE95BC6B1853963B2DEB0B5 -7AD1248D6F1625E115EEB9510B5772AAE4E3C866657DB0B3BF0E0AC345E116F8D4976B770876FFE3 -748C36165522991F46A36F193DD1A1C94713673C7E4C81582391B636C72DE94CE6254374F99B623E -5686C13D8A8322E83E11BB0B0A896C6A8C2C4F756C5385CD7017F26D23F7C3EE97372C868C8C9155 -81723BB6B76B4C3CE8998E4FA6CA40B633DFDAA59BA902A4952DA90EC4FC3CF0F2676ACFA7F76F78 -236FA2DE10FD3545357215246BB7E527F277C28B353CC6D79DCEF21BCC8F77603CDD58A2CCDDBE3A -9802F941CED8E035313875319548C41992A2BE939A17CC109426E33825AE59BCD17CB19F50D972FF -CBE7D9B4B0BB095303D9DC9D406696C2508D6CE99E11CF00F6461147E97449ED5F486D480A86D3A7 -ACECB7E9A945984724EFC21C5079B1FD03ED803C2DEAFCE3327D2D7827715FD65D9506216C88B0FA -26935E95C64114A51919D419038B1A7E9C1E829FBFB53275093752DF19891A97F3CBF7719C1FD6CB -17019A6D2D25360ECA804C4B35172662CC4769D2B785C6C87E5A4ECCE31704E59F71263B7C3CAEC8 -ACB4C7426EC25F11A0042323EE6C3EEB04284DBAE2C770BC419DCE79BD4560AEA41571C3B595F525 -60191DC7A8FBF63D413A77A0905E517441B16C2B501EA2F9E99CC38D052679F288FDF1894542E3A6 -6989A0090185EB2E75134BFA3D9147C3DB8A621D9D35E37786853779E157B47F71626D6B3E633005 -9159C17596C1B87FE2B4FF47ED9D78FA4C2160077276C8B58CEF5DC030B4A5D83CF257096C047FE6 -4DE307C598B815058E72D5F57DF5C369E664E137DE29349E2F9DCD8C9F4EBA6E765B6327D7A20DFC -B20711273FD8091CBA605C4C494248076F7E03DF65A6A50164980BBBB708741E5BF6056E6F996DC0 -7FFF408C5B8EAB8DCEC315E92873228C805D4440A6470E3EE3983758DD211C9CECDBFAA4C9300CBA -00608A4B2404A3C7AF017A3B7E67F39F0B51ACF950D3E75CC7BC2B8D3480202FA958E8EE0B240501 -5232EE0D264C7CA02C18CA45CB3C2DE322D3EB7F00F9455DB6C5B1F4E59C3E95520EC36D7D903CBB -625D70B54BF6F8255E412604BBB29FEE026CC660577F91DB1DB4A613EEEFB20CF7AE3CD89D565AC8 -38416B01B5DE4FFA5550D17FB51FBBEBE21CF1D56038863EE931B90DEC2E211ED42BA92EC244D4CE -2C4EC5CA87A026992772DC2AF754FC982B94F36EA7B7BF75E0ECE90CBB2A6AA1A012E8898BD679C2 -3CB3827C35D5D02F0569C7AA82615D4AA67518ECF668D3B57D6EF1A8013424AC2268BA0D9A74D588 -79EDCF6382A89D397864940303EAEC45A38304BA8B1CB198967AE23EB81054BE74B16909A405E8A7 -799CEE3C270FE2A6DC50BD7370B6B2C8FDB9A87D88D5D40348D3984E39C693B6F4486D994778607A -80A3122872DD65E40492107C71C3CF708A9717E9EEFAFBDDC239C53AA9645B711038E59C8B861B37 -411AB2039BEDF9CFD00F08D9C5D76154427FF5DD39878CECC5D7BFB3F1F035087185C0981F3C2139 -BE84872FFAD3408531C4EA9387B89F5E3EC779E8850D50992DFDCF9132BC551E985943B07618AC10 -D1150451F0844C0DC41D6E17EB508DC8689EC726400D5A7F6FEB3CC7BCE05F09228B7CB2C5393664 -D8DD9A4B96B1020EF25D70AA2D91CAE93AFB5F2BF0AA18CA5C599FA1A708EF35BF8F7FFEC9AFC1F2 -42870D028B2B1459063B493943EF1283829783E1010242E5CF4DA39D93D506F3892936E7D6CF1124 -70A521D397438733D053944CFF12D6FFAE8246F20618684F263715AA98E15D72A526383E05C23214 -B78338E5B476F0981D90056E6E5D0DB66B1DF2298E597B2ABE1D817E18BEB056E65EDB4234342D96 -00470B1420C9210419D834E431B82F58608C87AC361A02D0F1FE4B470A3D71E0D21BB87E1023D428 -E23D596CB9E1A2184403A16E36E644BCCF9BBDE27290485057E62827283E7380AF786BF395B3961B -A5EA469C315763FA59E0F176EF81985F38B882DE56A74D128E256D1B89939728E55A92ABA21A6B78 -44FAC1BA7BBDD8B34A18194A2984B000380FE9F672E83EFDBF276FE797A325815B0F25CC95C97A9D -ACF56D583486305D7C9E51A7E337D14E3B900333EB38FD93A99587DA2341B10C059C71CE080FE753 -3C0F059FA40E560AF9C4A41A4BE6FB45846FF8F78165E10B4AD40F264BCF5596A1E8EF8CB6EA4B1A -3A5C69059AB1563843679ECB2511A90E8898F54295649CB73D277760D8D04ABACC7BCC6E777A0530 -E2067CCBC08673F9C8C178F9D672AC8A15E5367F0C5651B53E75E0CFA57C931746AE1A679C246D7C -9417F1CD89DDDBD1173C2F880B7B3847CBCCEBF99F7122E832D7C9BAFE2B54CBAA1ED48158DE3F36 -238B76B0E67644A28AEA996DDC006F6AC0242E4B667639E7523CBC90A0561193C1AF34481C2EF402 -EE43A82E1EBF4E3D601BB36B2D95CD93550D61CEE7A94E72F6D30C32C8F91A61E964B1F66ACFC398 -7F95D4028F116E9A9A8474AA29C1C1A984BE0E393BDC41DCEF6A6F1018DB60D52024899D8EB5D55D -324D73F39BFA47377B9E15B3B06A7585589FCF52A54684173E5183367E7B0952DC4BC2767C4C6247 -B1D6103E52BC7B7EA6298F454C5D97AC575F19C10ACDFF4E10C7D3755CFAB4200CAC545269FF1D8D -B0D607C7AD47F40DDF257AB4E7D0750577003C13E4941960C3DD7B0774DDAC18E8ABAF8F53E03CBE -F6D57B44F24CF821014C064278FD51B3427593D17694B4ABCE81F49CBB984C5878CDF0C38D1ED7FD -99B0B9A3BD8D8FF6219588B3B8FA59D0CDD1D9B2F65122AB45E48F1757467B9204926140E3C350C5 -A927A2E700173053EC35D3F1DA2D7258714C97FAA857F0898917BD94625C6D1E2D77138EFCAAAF51 -7B17FE187A2212C24A881A2C6A647DEF6376ED80AE4175C5EE80921F001995B44E49F0D33DD9075A -CF33BB03671C0BCC34AD5784AD1CDFED3A6D9BA103B3DDC1CC2DE74DBB576A0277715275218CD19C -A8899209125266D8BF1286F881DCC2C383749D1E768D670F4099F7DE959EDFE852583183C9111601 -2881A56A24AAF020EA45CD5F39660DEBCE30AC1C7B8CFC60387B1B0C3E361BE612FDFA9F01B7E4B4 -A18839A2C7E0E393EBC5AD9A8A4EBC316A740C1C295D9EF5F4DFFA0667F9582C0BB837B142C4CFC6 -B1798E9476D0631111033B8BA75A10FDC800E2AB1E0E829632F869CFE4737BE9E2800759EE0831DC -7D1195EAF80555771981DD6DC6606812D92CB8EF86447F5F6C6F626D0E265C67E52A6319189EE349 -D48E49DFE6A9E98F76C414A1E3217AE0A215A17E54AA498F4ECDC50242ACC7E2322F63BB2FF2189D -057E7354E32A3ED1803116176B9B9D0129930F919E2FEC280B2C8924E49E7BB75768A2EE1DA8ADBE -D4E3589906DF1B923AEF84C1BD327438B731012E69BB0D43A1842CB88BB54EA4516477F704CFEB28 -6E3EA483445AD4D74586FCF32E96D366901084365F693A53C5FB532FBFE7BC0CADC404C4985042D6 -8DBB90A6DCDA3531EE324D558A214F935CD9FCC9A0CEBE9B5FB0323F4B3820529599EF48EE068B5A -CE85004FEA2984F0A86F5AC9D56163BBFE1142B774148F1EB0A4DC89C3349052533A7DE66729DB24 -41B82F8F7360111DACF69293C9B281A0534F3E9E9224A75C49A832F28B2E497262475507B6DDFA9F -01CA0A6696E3F5AC7EA68595EBA0C2EB8A47813FF936D84AC1B23ECA7AA2862B793CCBB0DF9FDD49 -31BEF354CEC12FBF478559FEC29F81ADF4452E83963E56541D31F3691C93A50F0BBA5E9552C4F2A2 -3A6E53060729854A3DD71CC4308B91957DB19E66AAA18FA67055A950F1C2CFF78A03BC1A588CF624 -696068068719AFB1001C4581EE072113882D9052B21E355D401ED8CD24D067B99E616BDA5A0A5A93 -36FC499632B79FF2FD0DEFB096EF46B75E2D4E0F48DAEA239719FEC4D9A29818F5875FC5041A9EDB -D26CAF0ACE14CC80BA49BBA59E918EB3D8F1E541AA16026585A2F72DF7D83541816DE46981FB3EFD -0C30E458CFAD04C79421AB7C4925E23AEA07F9F018431C790002596D26BD9663B51B699DF53E4882 -CBC34EDE88EB55045B889B6062E35FD1E018BCE785157B85EC3B9CA6C85D4B16238275385B8285DB -012D8FB7C9F5B946A41D7A0FB878FF72C39683144D8A007CFF631B43748F2D5FC690300F9BC0C837 -006B92ECEBE0605E8C3A4A400E18AE8997D1B45FEE10068E247C647CF82C6DFBE5E881D511FFA687 -B7AEB78546BFD07D5F7EC242DCEF4930D8AAAD8C6152B6642AAC325963FD147F236BB850A9966573 -9D06CDBD7CA79A527DCF461E33F22BC9C5DB00DA2BD3DDDD8C99D99793BC98282AA8872FF96C3942 -85D82D9419EB78B6AE37A5F519397700F75D624A09BD255B576E955A323E784E8FC31131F003B0E3 -024A4F58FEF2A6C043796201FC425482E1155E229D1B2D43EF7B0D22322B22EF5C9A1BE026A1C3D3 -75EDAFF99597E1E5477952A4E8D2ACF5D014BC00DC2A272FA62B6983E27D228881E2EF2B8B95A681 -CBE90C5FDE16331C85222FE2A16F0A3C3000A63E2E21666C0C119F8AF89A543D37977069A5ACF155 -6324F05204CE8CAD50FF4FB630D9CBBFC324DEDA584AA56A99D3A76FF55BDC2C2EA3A021361CCD4A -83C7A5E2768D210FA6DE889FD48A39D679C94EC3C99A8D33FF11377DA7F6F1B71A2A05B302ECDE95 -4F26773F39AC881542F0D0969C3995C3519A8EF70B4220D86BF01BEECC6462855E7B686E1AFF1CA9 -1FB8FD8B4A69E10EE0C2AD94ADD44449506F9B6EF43641F2026EFF6E605C670560C2B74706FB949A -A7E8CC6A2D0D6207E457E7FD87EC1B9092DC68B9143947CC8ED14AFDDCBF8FDDA228A76847F96802 -E561F67CEEFDE45AE587673983FC04C96744DBAA83F2DC838D633943C75DCB9E6410474EB27B348F -26E505F0AB90878940E846C5E9F3C5FE8C3558C3236B1B88C405716949B8506841CABE1717474BB7 -C30DB91CDEE33B0F844811762FAEC535BDCF84C1C747CEF9B1FA61D2AFB5A81335BC42C06A94D7D5 -9B7EDE55BCF6F9867AEE107555CDD084B7684C2C87087475A39A9DA6347BE281CE5635A4D07865BA -98CE26C1465B1AB0343F49FF37B4D0CA9F3BB693D78DC3B21925CB996A038DCC172527FE57C07460 -EF39C07D4396E7FA970D9F22ABD21A9C794B64AD96762C7428F59A8757C36D6C4FFB23216195A04C -2A2C2E7B10EF7193931544D782FEE4B91E01119C5553BBC6252270A8D8C56DD62D448F5AD8DC69CC -B45E1F17F0AA1E445129DD00F000005B23D38DE93A3BE55A4C041947F36B4E4536E307D0180553F9 -2E46B743881CB5D5386C48C7D5F84C2BCD06B9C501F78C7EE61FA23516791FCF4DB278AF688A2E60 -10A56692AD92008497487EDFE4BD5FA083FA544138B20D6940020887E35D46E093B71F7A04A67460 -DC8116B4D4839625D7CA6959D6831CD93F81AC4EA2709036DD738364FDE71113BF22EBF13DFE1642 -E564701E6F0FFE7511EDF03FE448C2B28C64FB7D54B94CA576E481FA56B2B18AF10C71F699B6BFD4 -7459CDE1869D0FD306BF489A6F42E5B2F05CCF55BB6B9526973D19CB134CA7F13F1DB3716F8CC217 -73A832568C16250B5CDB16DF24BF81D49F5B37018BD310262EA7078107868AB0216CEC83CEFCAB1E -9F2C665A31585CA04DC01879CAA79AAA5AB201B516F7052B01B16BEE5606098393B0E5D9F9E5E3F4 -EB20F63C958E796DF41CF28839F5C62A0431648745D7837B519F3AA36BC6C08EF040CCF53D9B6D8C -0C7D1A84D707EC57A3C6AC9A62AB37251A01A5ED40FDEC6F5BE6E34C6A91D058319439778A2EE5D0 -363E2E1F33463C33327D05FFC0CBF08D5BC457C7230448972FB9B4D0D782BA7DBF10D3FFEF8BF523 -6EC16D4DD6D0D870D9D5EB5C64C9A46A4F583D4F831FEE74B0E5B33A09ABFD4444929BD8F638CD72 -EAB99CF2E9551DF427683964A592E49D186F285258C5D5F62196A98532421D73E3495F82695FEEC6 -E1952C562D546B28618FFAEEBEFF03A57F4D855021F85B0C7BC37FCC6DA9AECA099B646B99D41896 -09D3FF2D56422F8C37E97640293EC7C90E3380887836F4938FBF495CAC14FBA5648D89282D8D49D9 -1AF73ED36581139D8BD42551E263E830EA3C6EB381D85C42D74C50DB0CCAEC03F535ADE92128A016 -0E811C34748309AF7604919B66CD43EB5CA975302DCB6076FEB6BDD6FF55976FE990FB0CE9ABB11B -195403FB26E3D6C6A0DE1C5BE79E171A61E21F79EE8DBE7A832519813EF6B33EA098C2C32ADEA219 -AB2AAC8B093F40000995539D1276D5F2EF84CCD099B71FE4269BDBDB6A8D59C86F7D2E3FBCCF8773 -D0FAE97640BC1AD43CB4B992BFADFB09DBD0CAAEB8CD9DA264187C4F97300E9A6C9DEED5525479E6 -05C65AE336CBBDF4E5D7F79AD098F977285E065579B748FEAA97F2A753E1F962FCAB68D72BAA8EE4 -FF6691C23E31BC0F3E981A96FB440404856AE1AB32A7205B17D411D8F21C8C93B704D07EC594422A -BC368CDA2B1610CE6A973F4474E12B78B532666797F5755D269772C9F5400B3BFC6C58395D38527E -2CCCF29B56123F7DCEF3BDE5DC1DFC5B0293BB125085B1D2D929BC3EE84F4FAD571A4991C3DEE03F -2DB3A3097E52B1A7D5C73CCB6148EAC62E8E36DE9A71C57638C6E4D5D9DED18174E8C390E50B4A5B -913C074EEAEBE390B214B3A68F02862B9A296DB4B409769649E51D738CBBDFB7702E15C73C2AFC6B -C37CE15171F4E822CF20EFE55D9F061AA43E648989628FF79E65932390CBB15D8E621333B18B11C3 -BDF96F841D7434E01AD501FEA964A75B248A35CD9DF9A37E48A1E5A09C624B93CE44F0042FA00D7F -9EE89B9F7AB785E9C718CF6E7228F743271C2C9BBA17E5208B920E44E765D99D86650EB454B0FAAA -112753AA1BD3A24239E9C5FC47EEB1547AC9D23731B8DC48B9707830DAEC60C8D3790BBA1120F776 -4EFAC542CFFBCD5C05F9510B27B2534B704ECD36C8B041FD49A96881302FFF5B0163A2DD09C751D6 -D6AFEA9170A4F4C4AB8D46E62F763FE1BDA51DD1CE4A27E772F3A2869155F762FF26B7AA6FCFA4F1 -292E56F03AAB6322BF867E7710C34D43B5D85B45AA68014AD7879EED051B1933E491496E3E26D9AA -8B80A07BF2B94F1077E84A9726F08199887D66DE7A307BF33C30DD9CF3DA188088C03B2BAD09A217 -6B110DB2C868B53DA9A66C85737BA66C93C58A259860E294AD0191E3A72C73F40B0BD98699AA08DA -F03587B78F391F3A4313C58D9F29B53C70785637BD0C58310109C54091AB0A34CBB0C478613A7AC0 -FB8F0A8B4645AC966395D8BA775262CD291136AFFDDF01C1D83DD4EB3B59CCAD18057FE7D92A8CD4 -A58F22508D9FD7CF356571F701BBB23E749BDDCBF8A317FDA0AEFD952BB18545610FFAD3AC143D35 -1B8DB3F66293375E0E50235F0D0466932181D377EDD32A5F0FFA4E22B5A0CB4F343D9A7E4A342E9D -09DFF6C697630CD3971802C277A5590B8CA94BDE6B38446C794D072BBCCB724D5BC208EEF1B018D7 -39373BB910D668882CAA779C2D686081DE6A2606417B54D7C20E0E7F722648D893E4EDBAE8F00D6A -6DA3712F91AE860C756D1127D133AB828E9D80023B50B162C5A1C5CDF70CCB3FDD7EA060ED20838B -E1E50C4094C9E79E1A0187CDF780CAF45A725964F004253E034C5BE46BBF89D94631F1A33BAA35B8 -4FA2A9D08481C6674126CD96ED05DCE48BDA069D902D6836D5DFBA701DC0F98A863E64F0E312145D -8DC0B77F25B43AEC729A1243B45B08CA228DD6101CAA2AC5ADCC8EFF84A4CA3F254176C2CC711EE6 -C273835D0FD3528ECA2A976B88E51FE347FDB60F32370B66D338931D6581630ED586F349C638960C -31AE4204E89521A96E1219E696B913DEB2AAB7A3B022D06F34FDFCB810A04E60A4FEBE284C2F063E -0AE9EDF87704921CCFA193BDC912B747E13570066223A49F1F6E2AF0D4D65DA04CA876FF7A462FFC -9C0BA2CC545C3BD36DBE762F32B2D6BE5867C59F479195C92440DC165098B74EA5C3AD93CDF2D410 -B04C16BC7801E7956F4E5107450787AA592493171C3628E6B8F49D4F8429EB98DC52EF025F001387 -BC1A7093F7A99F10B5D2D7DD8BBB393BF6E56F08F4F7FA1A343F220D5A1EAE7168C74D41BE1DC1A8 -3BD65B72B982F4F7B34F24F97F9EC9A91011064031FACFF2A14921A32024385F4E061CD07D152E74 -1BF97156D951A342488FA7F5EF934CCAD13E2753A0AB7A1F565C2F7F6B349DF03BBC25BBD972A9AD -F809BB5C5048A8CCEF9297B2ED3324D18867F293CC66E88B3A39D107B610DFE79A3B4E83A96D3D52 -A17FE8A62C9FDD271130148366942C9CE57558D023DA5F7501319EBFA33DE9E6D1E76D7C20DB8A09 -B657839DA99F3D8143F1EE6253A3295C9651FA4366547893C2DC7ABCBF4BB7609DE5D001E0A36D9F -FBE01F7D0903B3208AE8547E2E5F14EC1AF4C2535CA8F4EA37E3F3CE172C7A1E8308995B1CC23E6E -81190246BCAB6E755BF868D449BB02A2AA87C44C9CC0F571ADC72547CEECBE104BB274B8AC16DCB7 -5D5F458D356466B921ACDEEAE384E2EB1DF6EF393B41B9747F0A4FAEB4AF1928D9AD6FB7E06FDC62 -1E4C6FC98CFB43F88584BD55D9B97CC9549093EDE586912161931162B1B1D52D0443260DABA02AF2 -B4432100D5506546013DA703573FA8013685CC798CE501960093DED713FFCCF89CA2B9106390198C -29A00864108CDCC1984A8BAB53919028C01B26ECC7925E38CBE6CCA8978EE21C2B06E7B3E48FBA97 -8E2A7D186E563C088F84AA23178B60E4729EE87D67B1091F3B6973676C1CBFE6530EB773C62E2C24 -97014AB0E8B71A1F4E86A378AA26591511BEE3CF3D64C94848582E1354E1605B6457823F2C5E640A -D3802946BB2E7E8E594E8C04B430C2385DD40746CE8534F50842E74D7115F3DB0C72D1C9C607C657 -3B094AEB73B7A79876CFFC3E2F8C9FEAAA07D3BFCE05B61F7749A8793BE90CCCECA2D7077F25E899 -D3331FE161A7E86C842495D584C6E4A0880B2951D8A13B88C4672080A0B1BE36BF47C3ACE7288CFE -41A8C1BAA6F0814A947FBD6B3AA72B6C73A8C578CA51CCC96F2352316C467BB960E981F2B6485BFB -44B577E71EFDA16E7405954BC7C9F0759F5A9F1EBCD2FA9CC9648D5831A68887F41B15081A204C24 -B4B992A231DEF9E698D4C3A25B6F5474F5BE6A601F2D337A58A0D21FF37FD91EB86D1D738893A03A -69F0CD743F611CDFFE69DB2C6ED0E4611D56F803BB0DC06E7FE85A303839612707647B1BE9FAF8D6 -84122CA9E5CB8BDE2936D3F4FF254D31529D7538BBD4D35539489F9E7316F24214B996BCDCF1818E -749A71CF0E8845AA1E2A58AA62A48E02BA4564625D20AA220EE719608521D7D7A7FCA0BD8904A401 -9819D371F3F59D46C1354E5FC1A6E5F79B20CF4ACA2BF0F2DE73DA193A6F9ACBFE0B4731C4BCEBE6 -D96FE822965DE965232282A3A130361F188B3AABDA95A8A2790D9240BE008B6A6DE4BBFCADA05B67 -86B9BB8E0DFA0C30043A3B07ED46277E07B9808422C8ED16758B9C396F4EA929D769785B2C9568E5 -70A83B989B25CE200F1727D41E2B702E7F88F1784F4C83FA60A74EB26B2DA95126E508ED519A61CC -151DB6804F61826C5F86D8FA89D06E526FED97A0DB88EDB432FF32C1ACC9B622EEDF601081AF7B96 -3C9CFC1D13E4A9C74FEA0A1C8E3D8653CD92A944D4CA6B0D306619AFD503506D77732D6514F604BE -4610C2560931BDE0B40939BC1D126B0E97F72AE1B4A9252123B54F7A27E0CFA4425B4546526FD741 -CA77952B10D13E0AC2E32006A903808FF0CD013F936238C74CC75FD915244C56A8412F37F0134840 -347699508D6F3D7F3203A25B7C70100719582CD588590EE34B3AB13E255B613A6D00386A0104CC5E -D2C646F09A88888D3751651D5646C5227A3C80E8DA1B0A331121DD2429F1F4775D30564DFF47D01B -BE2C6C72CE4D1FD9A2077C04D2B0274B8916F6A9D1A4A6964A534F47CF241D5A8E34B23F85BE9ACF -FC2FEA961F277539F215F8728D6788F67BEAF45502839BCF23D8763C3949352F00C579A9A4FC408E -C625E310DAE61512DFE6844E82D36A2F81709E1F05B38AE9C222ED62C961EE63593CED7AAF73CE2E -D3667740C77B309B93EEFE1B4BA65D48575A66BE86743DC9E5D3C2FF418D11F7F211B86E827EE1DF -C3613E7498030F07050524536D1F8A94DDB6698BE7B963C55CB3F74B676CD815A7B3DF4B1A0EA2BE -1B0B9A11FFBFD5B1FA49668AEE14629316AF436A0821C20BEEF7B3480847934A99F6D85B68F4DDF8 -859A754E009428AF89A90D1852C220A607FF0806E8080726EDC94D691D214B4521C147C4273AEBDD -BB4A697EF16448CD9B2FC95293305858DECFD406B89B9F3FDAE2AC579E80CF321EBAE5701FB2F7CA -D8ED04B4A63115886D45D6120F69AEF1A21D80AD3C2D35D2899F1902242B96CD349E0AAADA40F7A1 -1282B6B52BDD97708E58DC5E2D22D1153E5FA3F3B300BCDFAF98DEC2F4E3C82A1C85F985735F3987 -4F557579F422664E07CBE19DA680EFB0FC82C323EC5C4644C51709AC8D674608A8043C91E6C7988D -430F10BA6CE1FC7FC0604FCD8F723895250AEC36CC35B3FA14FE2A0D24095DCC30B2093F2298F5F0 -A97676A0BE66C3DC9ADACFE2FC0F721A20E945AFC1096A619075D5E9A264C796EC6C90EF1AEEA8DC -089B44FFC13D27CB2370070A52D4416C53F364393E46EDD7EDE00799960CE6E0D57E4909E88ADD64 -BDD2B0EBE2D73FA6ACF8B40280DAA0637E705C65AABD523B8815F22F23E9FF81E7829C7E4BC980C9 -143AEBE1A04DC0D253396BBB7268BD5AEEA356B610D5DCEE03135E00AE34388251F31714A1C40E18 -2652C48CDA2211A22CB6F02490E69A44CECB169754C53B16028D352E0119F5D5FAE0BD7EA1CDA647 -12A6147374B64244E21E9EC9F0D1381AD22D5B6212B26C3F9AA5F6045F25DD9F5EB4489EA39B1945 -331AC70510C5752557DE21D0A6CFC1EB10A98FA867B76DA6E4249469F591FD154D39E89364A43DB0 -07AA0D7A911CFAE6CE2B557997FBC44F55A27F622BD7B8B10EC9F5D10F2649A646FD964AE1B111B3 -5B46A252C4DEE44E7426EB5739F24E8A390694597DB3A1FE7800C97E59558322F0E49A0CCE2AD94B -1E2D1026AFA771723E3F523916F55ED866C9FB4A2F759651C613A2CFF362028CDF9D38F05D4C7C60 -24C533E930B64B099FB1AF04B01F5FB9CA6867E6EFF55A772C5391831059987E10CBF987E3F378E0 -1329F73D54DC0484177D3C3C06F67397955FF1CA4EF8AD1606B70455255D631A7D6EB92BFDBA14A0 -FF28B2ACE7E81AD666EA9B3A0F5A6BA3B5DFE35044FA4B3D8ED956009C60E98CC132F2E84967F4A9 -8A67B336D5EE7CAF7DD1F74D1FA08619941361FA7312CF225D89CEF97E864C8369EAFAB94D97F056 -5505D825972B754F6729596EEA91210B75DD8F645382ACE36DE60819A02B3B48DD00F5485F9264F9 -FA926D732E2C267B0BE8CA98526F124F97EFDB86132C5EF16B103908172FC51F286FFE45FF253512 -E0033F037FF182BA536A9EB2DF2D1DB257D9C86C46E1B002FB32AC70CA9462E6EB48994752CEBCE3 -9F08ABD4F4B0889283E55500702185A841E328 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/Times-Roman-iso1252 /Times-Roman ISO1252Encoding psp_definefont -/NimbusMonL-ReguObli-iso1252 /NimbusMonL-ReguObli ISO1252Encoding psp_definefont -/NimbusMonL-Regu-iso1252 /NimbusMonL-Regu ISO1252Encoding psp_definefont -/Times-Italic-iso1252 /Times-Italic ISO1252Encoding psp_definefont -295 321 moveto -0 0 0 setrgbcolor -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4C61> -show -362 321 moveto -<6469726563746F7279> -show -556 321 moveto -<53414C4F4D45325F524F4F54> -show -962 321 moveto -<657374> -show -1032 321 moveto -<737570706F73E965> -show -1230 321 moveto - -show -1318 321 moveto -<6C61> -show -1369 321 moveto -<6469726563746F7279> -show -1564 321 moveto -<636F6E74656E616E74> -show -1772 321 moveto -<746F7573> -show -1870 321 moveto -<6C6573> -show -1940 321 moveto -<6D6F64756C6573> -show -295 377 moveto -<6465> -show -358 377 moveto -<6C61> -show -411 377 moveto -<706C617465666F726D65> -show -644 377 moveto -<53414C4F4D45> -show -866 377 moveto -<322E> -show -920 377 moveto -<4C6573> -show -1009 377 moveto -<6669636869657273> -show -1175 377 moveto -<2A4D6178456C656D656E74566F6C756D652A> -show -1661 377 moveto -<736F6E74> -show -1761 377 moveto -<64E96AE0> -show -1861 377 moveto -<64616E73> -show -1969 377 moveto -<6C61> -show -2021 377 moveto -<62617365> -show -295 433 moveto -<6D616973206E6520636F6E7469656E6E656E74207269656E206465207369676E696669616E742E> -show -295 551 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 551 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E> -show -659 551 moveto -<6475> -show -738 551 moveto -<66696368696572> -show -896 551 moveto -1 0 0 setrgbcolor -/NimbusMonL-ReguObli-iso1252 findfont 50 -50 matrix scale makefont setfont -<636F6E6669677572652E696E2E62617365> -show -1434 551 moveto -0 0 0 setrgbcolor -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<706F7572> -show -1553 551 moveto -<72616A6F75746572> -show -1737 551 moveto -<6C61> -show -1801 551 moveto -<76E972696669636174696F6E> -show -2060 551 moveto -<6475> -show -370 611 moveto -<66696368696572> -show -535 611 moveto -<696E636C756465> -show -716 611 moveto -<6E676C69622E68> -show -891 611 moveto -<6574> -show -962 611 moveto -<646573> -show -1063 611 moveto -<64696666E972656E746573> -show -1310 611 moveto -<6C696272616972696573> -show -1522 611 moveto -<4E657467656E2C> -show -1714 611 moveto -<766961> -show -1809 611 moveto -<6C65> -show -1880 611 moveto -<66696368696572> -show -2045 611 moveto -<6D34> -show -370 668 moveto -<636865636B5F4E657467656E2E6D342E> -show -309 769 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<6563686F2074657374696E67206E657467656E> -show -309 813 moveto -<6563686F202D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D -2D2D2D2D2D2D2D2D2D> -show -309 857 moveto -<6563686F> -show -309 901 moveto -<434845434B5F4E455447454E> -show -309 945 moveto -<6563686F> -show -309 989 moveto -<6563686F202D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D -2D2D2D2D2D2D2D2D2D> -show -295 1106 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 1106 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E206475206669636869657220> -show -849 1106 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D616B6566696C652E696E20> -show -1087 1106 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<20> -show -1099 1106 moveto -0 0 0 setrgbcolor -<706F757220706F75766F6972207574696C69736572206C652064657373696E> -show -370 1166 moveto -<6D6573685F747265655F616C676F5F74657472612E706E672064616E73206C2749484D20646520 -534D4553482028766F6972206C61206D6F64696620E020666169726520737572> -show -370 1222 moveto -<20534D45534847554929206574206C61204272657020666C696768745F736F6C69642E62726570 -206461616E73206C65207465737420534D4553485F666C696768745F736B696E2E70792E> -show -294 1323 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<5245534F55524345535F46494C4553203D205C> -show -294 1367 moveto -<20202020202E> -show -294 1411 moveto -<20202020202E> -show -294 1455 moveto -<20202020202E> -show -294 1499 moveto -<6D6573685F747265655F616C676F5F74657472612E706E67205C> -show -294 1543 moveto -<666C696768745F736F6C69642E62726570> -show -295 1660 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 1660 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4C65206669636869657220> -show -578 1660 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<61646D> -show -664 1660 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<2F> -show -677 1660 moveto -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<756E69782F6D616B655F636F6D6D656E63652E696E202020> -show -1207 1660 moveto -0 0 0 setrgbcolor -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<646F697420617573736920EA747265206D6F64696669E920E02063657474652066696E> -show -1862 1660 moveto -<20> -show -1874 1660 moveto -<3A> -show -309 1765 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<69666571202840574954484E455447454E402C79657329> -show -309 1809 moveto -<202041434C4F43414C5F535243202B3D20636865636B5F6E657467656E2E6D34> -show -309 1853 moveto -<656E646966> -show -295 1971 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 1971 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E> -show -662 1971 moveto -<6475> -show -744 1971 moveto -<66696368696572> -show -905 1971 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F535243> -show -1178 1971 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<2F> -show -1190 1971 moveto -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<737263> -show -1251 1971 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<2F> -show -1264 1971 moveto -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D616B6566696C652E696E> -show -1552 1971 moveto -0 0 0 setrgbcolor -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<706F7572> -show -1675 1971 moveto -<72616A6F75746572> -show -1861 1971 moveto -<6C61> -show -1928 1971 moveto -<6469726563746F7279> -show -370 2031 moveto -<4E455447454E> -show -592 2031 moveto -<6FF9> -show -664 2031 moveto -<6C61> -show -723 2031 moveto -<6C6962726169726965> -show -904 2031 moveto -<64796E616D69717565> -show -1149 2031 moveto -<6C69624E455447454E2E736F> -show -1481 2031 moveto -<7661> -show -1550 2031 moveto - -show -1648 2031 moveto -<636F6E73747275697465> -show -1868 2031 moveto - -show -1912 2031 moveto -<706172746972> -show -2043 2031 moveto -<646573> -show -370 2087 moveto -<6C69627261697269657320737461746963206465204E657467656E2E> -show -294 2188 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<69666571202840574954484E455447454E402C79657329> -show -294 2232 moveto -<2020534244495253203D204F424A45435420534D445320534D4553484453204472697665722044 -72697665724D45442044726976657244415420447269766572554E56205C> -show -294 2276 moveto -<20202020202020202020204D45464953544F204E455447454E20534D45534820534D4553485F49 -20534D45534846696C7465727353656C656374696F6E20534D455348475549205C> -show -294 2320 moveto -<2020202020202020202020534D4553485F53574947> -show -294 2364 moveto -<656E646966> -show -295 2481 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 2481 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E> -show -665 2481 moveto -<6475> -show -750 2481 moveto -<66696368696572> -show -915 2481 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F535243> -show -1187 2481 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<2F> -show -1200 2481 moveto -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<737263> -show -1261 2481 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<2F> -show -1274 2481 moveto -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D455348> -show -1432 2481 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<2F> -show -1445 2481 moveto -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D616B6566696C652E696E> -show -1738 2481 moveto -0 0 0 setrgbcolor -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<706F7572> -show -1864 2481 moveto -<72616A6F75746572> -show -2054 2481 moveto -<6C6573> -show -370 2541 moveto -<6669636869657273> -show -541 2541 moveto -<717569> -show -626 2541 moveto -<7772617070656E74> -show -834 2541 moveto -<6C6573> -show -910 2541 moveto -<617070656C73> -show -1059 2541 moveto -<6175> -show -1128 2541 moveto -<6D61696C6C657572> -show -1315 2541 moveto -<74E974726168E9647269717565> -show -1600 2541 moveto -<6465> -show -1669 2541 moveto -<4E657467656E> -show -1835 2541 moveto -<6574> -show -1893 2541 moveto -<6C6573> -show -1969 2541 moveto -<626F6E6E6573> -show -370 2597 moveto -<6F7074696F6E7320646520636F6D70696C6174696F6E2F6C696E6B6167652E> -show -294 2698 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<69666571202840574954484E455447454E402C79657329> -show -294 2742 moveto -<20204558504F52545F48454144455253202B3D20534D4553485F4E455447454E5F33442E687878> -show -294 2786 moveto -<20204C49425F535243202B3D20534D4553485F4E455447454E5F33442E637878> -show -294 2830 moveto -<20204E455447454E5F494E434C554445533D404E455447454E5F494E434C5544455340> -show -294 2874 moveto -<2020435050464C414753202B3D2024284E455447454E5F494E434C5544455329> -show -294 2918 moveto -<2020435858464C414753202B3D2024284E455447454E5F494E434C5544455329> -show -294 2962 moveto -<20204C44464C414753202B3D202D6C4E455447454E> -show -294 3006 moveto -<656E646966> -show -295 735 1 264 rectfill -2125 735 1 264 rectfill -295 735 1831 1 rectfill -295 998 1831 1 rectfill -280 1289 1 265 rectfill -2125 1289 1 265 rectfill -280 1289 1846 1 rectfill -280 1553 1846 1 rectfill -295 1732 1 132 rectfill -2125 1732 1 132 rectfill -295 1732 1831 1 rectfill -295 1863 1831 1 rectfill -280 2154 1 220 rectfill -2125 2154 1 220 rectfill -280 2154 1846 1 rectfill -280 2373 1846 1 rectfill -280 2665 1 352 rectfill -2125 2665 1 352 rectfill -280 2665 1846 1 rectfill -280 3016 1846 1 rectfill -showpage -grestore grestore -%%PageTrailer - -%%Page: 2 2 -%%PageBoundingBox: 18 18 577 824 -%%BeginSetup -% -%%EndSetup -%%BeginPageSetup -% -gsave -[0.24 0 0 -0.24 18 824] concat -gsave -%%EndPageSetup -%%BeginResource: font NimbusMonL-Regu -%!PS-AdobeFont-1.0: NimbusMonL-Regu 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file PUBLIC (Aladdin Free Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file PUBLIC (Aladdin Free Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Mono L Regular) readonly def -/FamilyName (Nimbus Mono L) readonly def -/Weight (Regular) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /NimbusMonL-Regu def -/PaintType 0 def -/WMode 0 def -/FontBBox {-12 -237 650 811} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -/UniqueID 5020945 def -currentdict end -currentfile eexec -E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942BF7D6DD84F1664B89 -699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED2AC419FF2B2BDE605B8EE3264EDD6641 -2D4F21C64AC522BDFC7C5502F9C3F3E5592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A2 -5032519D1868816E44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8A123E6A2261C63C769D2F4B60FA2C438AD7D199D8E4 -5F7E7C9A605C8CA14E21FCD81C9A515FB8DB6F99604534D06EA9D87FE0FAA852899C9D0595C7A97E -6C55F79FAC45CD38E87B10D210CE7501E88C8FCD3444354365FB893A12F596AE2C1E70D5819EE0D0 -87D10BF8DA96F3DABD5405D28C4228C6C31BA4052464859640933FEEFD8071C0C84CDD829A9B1D0B -A01F25A4D50EE2EA2B45160CA6333B2D2800306ED2BEFDFE155E9D9F9342EB8D5B0ADBF2460CCC98 -643FB1287CCD28ABA7B5CAB92EC39EE2E918990372B16F8487EBA30EAE88708B6CF33B6C015D8096 -C7CFE2F139F52052E3925C0D50FD64CE68236D59CB83EF56BFC584150EC38065059F3308AD6F9A99 -F83EF4E6CB13855C8175E31417D190D036B387D3952344A950F4D8C7781B307A094DF1ECAEE4D2C2 -FD747BC6F7F9C6BD0E90C19294F96C8C5CFE88FB34C477574A1B1630B8CC591529E59B20794DA32E -61DECDA8ABBD1AE956CF74012AA01D42EE01E861B0AA6897C864788AE59DEF43C493246FDB1ACA55 -4C12594BC7B33657A9ECC9E3D1472EF826073F632BE540C35FF6FB40566773F3BB2204D3A579A08C -CBC844C14B18C350F003B9DA23A570C362D6003893CA32F86F59B829C78EE3188B6E3F7FA81D7F62 -2825C639638DFB78B7AF1F500F5B450FA54DBFA5CBA277C794ECE93275A3DE0B452FDC8DDC2993BA -A42F28A636008CDCB03EBF71BDCAF35019778993443F88412AD2AD0D7155A3944606463266322DBC -0244B07DA1E9C27A27B59664E8566D7A54CC03E995AAD008B0A17E2C3EF61F720CE7F7788599C4E4 -4C709CD5C31B11107F16AD70B17B9AFE2E8CD922A7428DAC171427FFAF51067307FAB0ADB530E701 -FD22DA22C4CD3064067BD4F6089C4B2C87937DD426E4E9D2F60E608288BAC9056554D04947E69200 -61E379CF5E81BFD32FD37EFAC1F61CEBEE551B0851516471A7472C60DF89DAA9EB1DC5A67E479745 -3E69B9E22BAF4E3CCA4192D603295B018C4AB69D18DE52DFDF15E96B557F290A4B8C5B1E7A6CACA8 -1F2351B97ADFC36995ABA43803A6E5AC04A3C93495F6D38106B8B144449C07D1358210F9176E1565 -72363CFBDE576BFDF99FA329DD1346E83F79E06CF68250CA57A68931BC7F342AD295D0CBA17AA95B -B8EEB53EA6E8E660B814E9F857CECB14F44A43288B69A9E7908D55BF19E844359879D28CAEF1C38A -36420185D20DFB32C2E002202800E8EF3D67C5D50E919657CA958B538D537D503444865331D79BFC -40312068D72364503BD0CC84B5F30A74D8B5B6A26AF2DB764564FB65A6BA8F9051AE2B4EA458D46A -4569F30C6E77DC097356770362E6CF3F1661074778EBB44FF7D1E3B64FF75E77E11FE525BB121C65 -46CFD13300CA1F02D571B82A5825E6226D14FDCF27F06D87452A8B6C5DCA658535CEE2A795E58137 -D48E566B69D53A0C3B766E84C51EAA221C46999CC8065ADB2F129D5B630FAB1814C0C33B5AEA0EFB -B6E994D80941B53079AF96D90A0B924F9B0E319BED9836B8F9053F868363D3CA554CBB181863301F -8CB940872ED5FA7BD18CE39218B5AD8AC57D0F752D941076B1C64D99BE0DB86D7A6D96510D772EB2 -4C587F11779BD21CFE5BDE1F29C1EF9022B2B8BCD7F91153C845906722477829C40111D810480F3C -F62DE8DBA7FD86CD236E656618CAF6FC46827FBC4898EA7672F8C9971AFE43E0E01EC8B77D4AF48C -BF1210E98C1DB15C16D149BFF58AB0270CF015B107A3A50F5DC8F37FFB92EEC8CB6778DDB7CE4AAB -C464C4AFF654223006A550EB52485A23D2B4AA7198D3CD54418102F1E9A4FBDE37B841E56F5C2C53 -966DB9B66B000E4588282E3FB80C2C519339F0002D2F83C979EDC5827A3B3C8EF8810A0F9DACB6B9 -998E9AF6551F56313DC4011904CB979AA2D32B11A811BC248141E4B9734D9FB7982A5671002D8279 -CAB93ABE057474628DEFC95D43890DB1ED34CFA8A20BDC3D874E7679A396158E522ED0AB969A4E3E -C7E4474E192590504D54DEB7B260B7935C4E56548A7D121AC1F741F8CDF259EA1B5813175A77A1D2 -D30BA26F65EB765A04C09ED51F69F41551ADF399E6AA2FC09788137BEA4913F17B8EB838C38FB272 -1FDCB55FD65697FF0B850E7D3D1CE266BF90F7EC06A9A0876BDFE767D3A918B092FC78C775F945CF -1F96E859C03DBF630D9A940939654C3549D8F7921CB94EE23D5A0535DE9DF31EA0F937F860B4F220 -A99ADDFC343D7CF7BFA0B803C12C26403F0DCFFC8EA786D0D8A8D9C367419CA8AE41190CE93A8086 -583A1E6C9D70B612C84D87D2EEAA71EC2DC12F4CDE6A821303D5F6A9BBDB7EEDCD289E80FA3B75F4 -7F481B50719DCF4A142069393593B9AF9CCEEAEC56A35B8787193D7C88113E9E1E221D151E093B01 -9EF89F6118BEC4735103CC8003CC5AD1B6727B3226CD44C497DA7052DD681695DBEC3397F9598C91 -77701C73BF0594CE93F23D50EC5BEE2FB9DA1FC966DF148B27B28EE3C89526DD6625E2887F9FA076 -7C127C609EE315626BC14D274FBEA56528DC06A27B2D476D46E9E7916590B156A5DF04A6CB15E362 -45D77021767B6E5BDFCC679670263FD891446C3371B11BB6E1DF60F960AAB4149D7753E6A5C33810 -C42C8BFF4E935003388506F8278BD7CB672F132E065AE684DCA0B9064D01DD620E7FFDFE04F14277 -EFE8E60159BA0FCA3FE2F28B902D4AC275D19F0AC6971EBE827C4A232D87650D2688345BCA78F879 -077114F0463C5F058107B669566F8171E4E284D278405580F04BFFC9902784216E0C9A17AA9B2935 -E66E18A783F723BE044389B7E9D62AA36818FF2EA406C3C1A9D2F3436F3EE7DB8BE86AFA8DAA6A4B -1B84611350D8D27605509612B515E16AA843164D5D0805E36A2B9EF74C5F6A0B9D59A04B55697123 -27F4B1B30E9587CD103337639967CBDC655AA46E80D2CFD24BEB50815B5338E522B3A7AFE8362AB4 -F05D8BC52BBA9C5089ADA8C89529B0275AF422EB540D31A938B8740860756325B966B36817115213 -FAAF92DE63F6BAE1E0064BFBC5588098B61EB83C71F1C2082436D37DAF1ACBE186FEDC4BE7C1233B -6F18BEC5F99002D21CB7864E4811F7AB3C03003E1E4490AD1AC793BD28FCD5EF0E6CC30EF39A08C5 -2F71939B0CEF620DC69E31E39D6DB969049031B0C92EF2DB653D97F370141456A52985076B268652 -FA2648C792780BAD637C4D7581FB2D62011D57E293719487CF2D1F013CFAA532E1C2D39178D51272 -A6AF041440BCA174B5CC902BD7390C7D3695056CB4BD7791F9FB6D88E7A70DEF2C97869F5DBC5BD8 -23C517C7B7C39D624DF627DC9653EA5347BFDA80B723F05F6DBB4C9EA501D862ACE05B9DBDF21B70 -56FBCD8C6D4B85873DCEE6166C8B5ADC0316CA12D9639F361B15A42F00E1D62EDBCA1111972FA0F4 -5758BECB31DB38316F3CDFE1B41748C93ED58B67E9B57ABBED5924A6D53E99FBC9A994A6489A8BDF -13EB685548B4DC6D62DA7426C22227D4D43B6FFC7B5EA91C896730253E8941AFEE588359C2BECF6F -FC415B9EB6D31CCB0F6C7F85853E6449FA6D627A97A3CE8303F148393ADCCCDFA2FE085C6908BE5C -3C05AF00A6F02840206C3253A559AC5C049BDDFD11AD9B118403B84DA10AE3C470CB9A9A2D1D7B73 -2F59F5FE146DEDA60AE750F551AAC934621B4470E1BC324C436303E25F81D0DC3188BE0D6FEC5414 -C20E4CB18952E12CB6423DF7124627ACDE145500D77A97A8BFD9CB50D1FAA008E2CE2B2505A4749F -1EBBB092C347023714055A9B63353AF9E7FEE05BB54C9843698101F79888A91531773830C2C967B5 -88D3ACD2192883D5CE3962D51084FC653EAE2C5FB2DA41DACEFB5C76812D2EDB5B109677289CD199 -8D457FB1023A19AC67295BBC1A9A20A426B06A368DF3C5DD083CB1180D287F5500F2C635EDE157EE -FCEEC5503447382D15C748C1E35F68753992E5C90F900DE54D18F8E1B355D1076ADFB1F3590135FA -D1A36F028E44F48ABB149B80CA9A54614D467F8D71CB310BBC7AC7100261092DB8C5BFD39E0AC6BC -2C9D6CBC3A8C05FF8A74CB21608EC4A4CFE4CBAA2D056DBA14206106044DECF59F957EF8A9CADE4C -9B19D8D30DD4FDE6A9548E50DB51ACA73330142153FC36B69C1C8D5B26D0C689B7040E81AC2C864F -D7C097C99BE5953843E172C97AB5684F35FB03A725A89DBF371F08DDF40A1531FC1B676DB0E1543A -EC6E97D3D2E4AA3D5831D8B3C952ABBFA112352814FB6FAB61A0D680E6640F6AEC8426200CF61286 -F7422CB2F78C61EBAA36D47EC16D7FAF8B4AF31D090CDFA255D9D7C61D46CFB22A7D6E1758E71ED5 -67E00CBD8E8F468DDFB477F091A2F915627F22FF47B876544BC1F03B6BBB98385F009C20BB1AA2A7 -A78674692B8EAC2E3C8069B79E679338DA57F72976810F845BEB6B9ADD32B95D78E5E60F16DD1668 -9C05FD82D36A3115BE8ED494A74DD211D58A2CDF983FCB9CDC29BF7F0E29988FA23560EDF514BC1D -183F3B2A22C09FB179B47E05ADEF48DF02F31C29875D1915037B19407764A4292FE44E741651A8E3 -BEB5F0D972B6327090F664417C84F84FFBF0AFFF8B1D85C822D90730AB4140C42A51AA8B1DBE4398 -4EA8566040EB8B341CCE23FD3F69DD235A080BA5C69AECB9BC732BC2D7D40617DDA6B79FB6EE40C3 -556C7DF9B23DAD89E94054B1345DB8402AE679FC4655A4A776C0150463F8DB2BFC0608EA1F124E22 -1DDAE6026B5E5D007A7E4A0D6B3B0CF3A2669E67C5E4F01551966A7BC48F2F4B6A87E740D8095E63 -F77C7A027F26B52F2299DE5B8A2F6209BCF3D31CB0235F998F781E5CC81E31DC424E008D46EC0920 -2951E5684804A0592EA47D6C788A20487BEA2EC8F2E6C1D7F378B62DB43CA43C4B366F8B4319631C -FE9854F0E10321CFA3B01C873584863BBEFC23C72C05E695B56E8A52E89AA2DAB543834D34DCAC5F -ED08DC51825C5257AE59850D101D84F4CAA1D29FC932F9E0EFFBF7A9A7F3685F61F0490CD3CC8988 -2DB52A757A6AF4C4E67B407BD2316B1C0FFE7DC54E43C87B874F57E4903334E2140B011484863CDC -ACA331175F2CF3D72E0042855983AAF8853D3015E870FF0807014C31D55060DF3FE1FCE157324481 -2744AB51322444632F9AFDA6706E320FFE82B8CBE242A19DF00CE73EE48E25FF49D5871BD3E60652 -298FE3E8D400609E232E0DDC794C0579ACEF89E841B2EDCA50D51151F65E8C1CC3B01EF1870558F0 -BF5743718C3E068617E81BFE120C6CA16E0924BFC2541177D53671CAA3AB641C41557DCDAE1A3461 -47B5E999C4541B08B4AFCBC187AFD653D5B5F8386DF6AD8FE69E21BD0567DF494F736C6A184FA4DE -48DC9F347787CA96E2E00A296C2DA05C2AD9BC423E9CA428D7F1FA12DC9353A302FB8C529AF8688C -BB543B45B2717EBF8F6C497935F4F3BFFD285E0402AB7544B3CA4643AE5A8B5250ED987A95FC1F27 -5B9707ACD0641BD0EE2AE9758494F8D8A51DCE408A38AC20EAF0852D72D84D0C6BE973326793AEB9 -55EAC6FE0A2813A355DCD22F6F2CE56588D1C055CDDFA98878BCEB6A018DB22922D2B600A20F8184 -2E665DF41013CA0947C4237C2BD60A75E2FD1A3FB8C8FA19485730B87461AD466ACB02DF8CA24091 -4FB090B3D2B41EB6B8FF05E1A59D9FD668AF70BA5BB72778953BA55FC5F9F626043450E1D09BC83D -8605098ABEF884639A37809A32565CBEFB3FF39EE53D6C18C58C272BB928E4410E361E59A50F242D -69747A032617C52DEBBF62364AB5A96EFAF642D9D82BA679B1D70FAC10A4EB62FA5CFC308E86368A -AAD7E75948F43598CD1C544A0D4091374D7E88D4522CBE902391641327E888E7748FA889DCE67ADE -61699E7D77763681CAEE9B1CA8837B2F7EF9C18CBCC538C465C8E2DD34616953CCB6030A222C728B -834911C1A179E2C770289407AB28B303E724D97F747D6134B425216A64C6E0B60F633E2B85300047 -E4C90339CE030A0FAE31E830C8ABA5AB3386A3B69267351A7BFDD66356AE5E57FB2994452993E90D -E7C4E260ABAB93C37831856A650D56E44172FECA01D6C7C380F250B82473960D2A2A5FB6B4DA668F -46E624ACF7FA0FD4490F485D640A3ADFC9F8652E7A38CE5799F770C3606DB4B8B947F93967F779E3 -A3C0572F13A5A187D31D7BD12A5C7BE23CB6ED6192086241B76C5BA6983DB9C93E4B208D707D3760 -F03CD6272EF3A4CE89B8E52E6AC5871A3D03EB975759AB4BE239E5EC7842CBB333E692CC607C722E -185D3C39164DD320C6945629C70FF66A5237C0A9520A1FAD6EB9816069351AB0F135D90CC0982B14 -7D2294AE4A38A527EE40BE9CDE2512AAEBB590E134388BB171D0956A7C4566D65A9A041BE6C4F883 -6B3EC3D2ED1B48B566A783292B15B6127920D247D494F070BB20BEFF60640B11B276DDEEE49706E8 -B2B21BB40B7F00AAFC594C492C25DCA774E0B80D82E927448DE2E74A9D0DC7AC9260096EAF187B6C -D6AEAA6D1DC4205B4411122751A5B22688404EA7C5861730371FFAC10F5AFD4727A0E402AB5EA757 -606B75EB86A05E8F774D6E430A1A3FE2A37EBB06700474239FB1CFA05EE44B91B82244C575B52E7F -AF934B04EEB0D933FEB57EBE326D75821C8B23EAA85B583AED4320B7F04B9F2DC591091216FDE52E -064BAAA9C2C9D9714B95A4558C21F3CEBE624B5403B31508F178581AF6863083ED762F1E2E34A45C -FDD71660D626FF8648F5D6C5E580D4765A67FB6159EC8077A9F0A88038C8D3D7C77FF0926E2123BE -874F7BCAF129D55A5B5960F824BD1728ABCFCC51D23936DE9A25C408D786E44C3A2BAFA4423177AD -060D21D38E15E23EB6FFC0B4120E814695D423EEFC2744A1FC81B4DF89D76F0A6803D8B14E75538C -AAD03A72517B86514F6952F6FD619D9E910D980F00964DB325318C045BDF79647F453D4A5CF4E61D -D5359782827229310405FBCF6107C3AD9DDEF9A9A339D5D5A6EB2E7838A0A43221BD62CBDF732DB0 -A638A52016FB35BA7761AEC846A023D3BF2D1BB183543E81EB7CAC1E5970CDC6F068C5EA118C7AAE -528D1396E6DC939112DA4460C890EAD5C01BDC438F5BB734218BA6270ADD0DC1778FD8AB16831D6A -302B814A1A44B07EDC65956C9E6CF4875DF521F3CE5B422F71081B6D69BD270F739095C9E81C0377 -934A8BC6390C420C4E4CDD9CF7E32544C68D884E15ACA3BCC07FC8C132D8FB9D752C15D75C52C288 -57E2EA461A6FCAD90C56843513F74461F18D7164BC597A28AE4BA7C86EE1703535A9B9ED50122627 -71FC12F102E800E0E1AF7BB46681BD2B14B614CEA91B7B2AAA35235DE76C0E113C92688F8EC81277 -D58C3406778E1EC1CC15F1CD9A137C8FFDAAB99ACE3BFC782916F1A877170589A92DC921E6740A22 -B84DC6BACDABCC76E64C79E3A588D80F8F4D376E1B426F15751CF7391102102F0AFAFD8B22DFDEB5 -48AEB5F30B1673023D22054A13391A0EC08DE6E7B685A0D031AABF20B7C62187C0284892D5EAADF1 -21BA28263EB863D5E36EA9C06A77CCFC0E17F593961591F84D82AF823EFE41044C8D606FEF83CCC7 -B0E961E7994DF8A3CC36B209D953E250ADAB8D22D7F2B4E2C9CA39EFA2D93E56195C1560E30A5190 -CC5B17FAEFCF250DF79F6B624A4B917E11C332222FCCFEC4F6A47BD9E75DA9854FC3F7AE554E91ED -DE144D7AEF38A0E3EDB5E5A5626374DB94F022C8CF549093041DE00D7269B7CE544E748439BA2870 -718C08E58FB4A77D93EBC04B7957D272AE1601D41BF85A2BADAA0DF73B0D3841D4839C85677FB2E1 -5F1D6CE592669FF4BBC9C69DBA334DC37706F2F6BE83D5863E8CD6A30C08640AAC4C233684E66B4F -E6B62D4A8BE9D531E47BEF5640D9B5C27D990092BE1597F6995C8A77BE9C18AAE6C1CF130775DDAC -41D34438FC7AD8E042CB56CBF2944932EBA7D053E9376FF398367450E35A1945FE23E05C921096A1 -5454721FFD0F429A3E06DC3ED36F1C170BE79C66996EF8337AFF85B90C5D3A4A94455AE9FA32E211 -7A63E59001F052D5F6223125BFAFA40901E98960ADF7BB886729DCA82FC3B8CC52B37FF2517299E1 -D769057F8154FB95582F02CB0BECC873A9C71796ADBD3E91324FAA94F2C41CF57C30B5897D031C02 -D256C909E080E70BFD1F32E69EF67031138C2DDCD1A8E4B65E485C23C3E450ABDD9815512D6F34A8 -4B9DB715DB2C7A93BFB424316E1AA44397749CB01088428F149A3B4324737ED9957FD388248462AC -1B2610D72BF5C073ECA567E7385CC959E37CAC7E05470160FFA5A9F63B8E9B082937E911586EA165 -374938F492EDF28CE6020953A5B5CCEC7737F9D9CC8538C4339567AAED3794ABA3B9F4EAE65466E8 -E326F6C399B36355935FBDCB9972F10B13494DC25097FCEC5A6398F275C8C151558E74C5175F7BAF -4155E36B733F75CF9D5C5979B0764F14D8306E06BA24BF791141E404C69F3F8FCCD91B9C58C2C671 -AAE7D4F9E5D6414E46ED633A5F78AA5BF04E652246A066EAD9E582B181CC196EA2D3CFAA383B5D0E -4CAC9336E119C08CC6AC55CBFBAE147C623B400453BBF447E96DE036FC025624384359EED7C7D5F7 -858DC0521377CF647A157FC3F188DE5EEF094DBA125510FDE34C570D7BE76AB5DF0A28BF45DDAADB -EA7EEEDB936332DFE93081E0AFD3FDD46BED08D6914B2EFCFDC41662A33B90B03D76D34F48D30FC6 -BBBB600E90E6AC7243FDF026762A44B4D6E4ECBEF48C9D7B696AF29EEE063E557D8FCF0F09E0136F -45D17E608DA36E59F2AECF8493F8D62536119B5F7E1554DFE3F6E8D7C9A2C6F557D18B4AF92C9F6E -050975C3B5C54F9B5F4E39D600B6FA2CD6DE203A174028CBB2A201AF126D1013C229BB82CFD013ED -199D01E51EE2780FE896E01C63C655087A3E61A7F1029FA5E97EA1872F1B45F22282DDC317E17926 -7368CB52DA9444F6055A3C653659CAD2A1D8712BC2B1B32C1DC6906D957FB88524EE066156ED6BDE -B8D832F9338F9912E29A250A8C4674E667C1C278B677AEC9972BE83CBA3FB779893FCB8F81A323AC -91474BA2A2334A07BB5628E905C518E634F6761A3289056F83D5DD7B3890987EEE1C18FB2D379CC1 -905F1AEB3B3D2AD578F0D6C845D2D40C4BCEE3F71C90E68E5417BB8CDDD878D83BA80AD8485F4067 -E5C3CABF28AB56CBB219C0AAB8FFC6C7E192BEC8CBCA1459AE4450AFCC81B9548F40CE2622E5A7C2 -81F74DCC02DAD57EFD92D072318DDF05BF42F1EA8163071E23949B0179CF7DE64677CA99B23CB926 -B3E294194EC13397EA1DC9A5E1CDCD828156CD71F81B64167D4FB01E6002713BD8AC6F82B20CD369 -9C6CA4704DC5C65A2D66EB155B7AF1C9BB46469416FB49C1C7E17A30A5F045271D7DF3FFF2F42C6B -470701C381E3456A500C6BB3D0E47B4D91C5F34B49BB6272F1F8698B307D89EDA3A1565DAD1C0864 -627560CF922DCF5B34C67860352390B282F95394AA2CDE0E97CE3ED39546A6AF1C52BFCF81A29BE8 -2C47C99E8050E4889E4575B75F39E662F2DB7420673797E2ED3D67CDA7AE2C15D0A0A794D57D168E -BE13214E89E0209AB2C0EB7784E9491AEFA3C02D0DF3AE5365A0FC4AE023CAB528162C7A1B173664 -9DFADDACA8DA5FA18B7D6489E4229E9E24D38A620464A744A5C60F6F9D334B908706B738AED18669 -8A8B278341FA4D65A0A88680BA484694921512F7DE93337FC1C02BBE6E64AF2DAD07603279D87329 -1D1F4D39C1DD6D89C90F65240F4808F6F1115CA55B88E242565E59F3BBF1F10EC7B88872E9AE61D4 -4CAE185463EDFAF7DF63DE4D2207D307AFB61501892965170D2945846FCF5973A1D458607F50C15E -06E5BEC715E0C156259AAA6C735593E5564F65F443B78CC7512EC35A56F126DF9D30974A40872E42 -65E1AE5FD483CFCBBBA26DEE426CDC4721F19C3FDA86ED7AD4FA1120F63669BEFE7002B128CEAFD8 -C63E8AC09943B6CBDFB3D2476A026C00A8FF81B1F651B97F310C82ABA5F388CC1DB5AFCFF5996D52 -52A6A42FA4D972E41EE56088F78CB966F9051171C472C774879AECFFF08BFD9CEA40D7C298922ACE -64F28C14E0B81F4DCADE81D71DE3983D87D905192EF13CEE71B2D3FF1A88AEC671EC318917DF98A3 -C9054E372D22A3CEC82FCC217F47319A40900312F6E32B536B9E7A7FA0837EC65CCDB5FB0D414371 -17596CB39D9382262DE6E65379D3A9709B2CFBABF5FC5D5B352425F06F88CD31012A2A4147B112F0 -C1C0ACCC808CD625E0228EEF66661F70AF96D3DCFECD402700E4F6522AC9A856DA466D55C84F65BE -2810A1565163872D62EB81333A698ED7B68352CACCA2D7AD38AB55C19E4F5582F75818302F5FDADF -1DCED09D94872F2D48FB636C8E38C7563C72C771A08C6B1F041F3532BDB39006C89A33C09BE1E3E6 -03622D891F98010BF1DE5355F557A1E09448D486ADEF565705277B31B8BF2B86761E32631E3435B6 -88B79D566F1747BA456DDB43CD239FB47FF7B425EAA4C657C8EEC26EE01AED07CF916E77D53634C1 -37AEEA009C6B515B6342C54BE2C7B95955B1A9DA277A0ABCDA2346E88018C726F481F71D6011AA42 -F8852F2E5749518FE3B3AB668213FE1A05C10A1C53953D75312631D6BBBA01D418199DFEFF8CF548 -6109B099FE8E2F606165FE30F532C03567785D5362AA873C9D3EECEB20F1945D55F49B0CCAC84967 -59FCC7292E46938943C262D78F3212D3F9D0F7B103157F423D71B1ED54B2A603F4C269029918F238 -EC6828FFCEC66009DB9C9E59534EABB183F31D7AD4C57B1BDF0BD2CE5A421882BC10CC1BCE6A970E -2B586BB221567CCA483989DD0B8DEC424C1D1FF042DCB7834423CF244EDA28D2D969B17440CAEAF0 -24A6119DB010CE366821AFA424D1B8299609C04148275AE6E5257A7ACB3C766C747CE99CBA2D703C -F19B7CF301B634D8B613DDC4AFE4633A4D77BFF8E00CFB5E289EBBCAC90A24307E7941EC1685CBAE -400CADD876FCEF7F6557EEE167D2035A05120293527700DC510B038A496BE1D5CBAEF24ED39F7421 -1A93AADF22214ED606A80582485AFE358E3A46D0671148998A3B3BE209467009B43400870359D418 -9A8CEB4D5866AB52D16D9CEB1EAB71C07E6CAA34B70E3096BF7604C22C40D5FBFEEA616DA3BABD59 -DCDB97D883FC8742B8267A16A99B7953225F7144568D566E64542C92E538AC140C851E5D295528EB -7CBB49909B1CAF6409C9BCCEB325468FA0B5F7CB2987382616B477CCFE4F4AC79E4A6F7165363543 -F04DE5B6F6E1C2E910CDC3CDD6C4C92737198F892337DCB6647BD226C820AC99C65D8E7772BBB74F -E65DCAA8A22C33BC168BF48E40A82700A3A7668C5A9A71E397ACDFEE7D556C5C19467B7AA69C260B -727407AC837BDB7D67DEC055C1F45D8BAC61048C45BC9FB3CEFE7549EAA2992D2EDC126FF7A05EAE -58613332A2BC1465B2BC0429162B907D65F793D236EDDD8D35405866D71B25F62DC4A7E06D4DEE82 -840ACCAABC0774F8A63E9C0F7FC980B3583E7A8B01C46590E3BC04EBA565C2EA94F057D964A78A90 -EA9F52ABFD70F84E44E434BD10A42E98C794065724341F907E35D3CB257161E01C7084E3A0166D15 -CED65DA7BA87DBB2EA33D39BD99AFB93D3548358D08330E807F8552CECF63C84F805205491BA3A1A -622E70C232FADF3BF2DCFD6F0539158D3306506F150B0518371912A25EB96163D73E9EEED42EDC84 -D688BC7F7708D9DCA348FAB4DF62E5809BD094842D0A31DBB7C4B41F94D946810C5EC10B69AABC2C -91A59500B2E5D37F4755DDFB7AE4ABF757F4C5BCF77C7F95E6A616646456FE8F18407080BCABBFA5 -7704287AD26222DF91AB2613951E2D679472F8ADF06EA2A20205EC19972299A78BAC52114334470C -5F5890C2F846B4C6042D73945127F2E3910ECA1C4CD7A16EFE4B4BE38A15AAA710682C3836A8CA83 -FD384970139D8B46FB0AEBB002DD224199672FFA02250FBCFA4E649E335428FC71F50F45E498419E -DB0E970F46894A48F65580881C9C4250FCEF65C9B28699408E18B26FE6DB7F1CBDB767564E73CB59 -54C6D639CE33220C894F36E70F71C9F9AA3FE2AE0AA0E3F2E304EC5ABC661675CDE2E70519E4220A -E26FBACBD01D5169EB844750753E6CED53E3678FDCD08AB93E10067E9C64F38B40B76D99B6CD92BD -F4155A1EA5CC824998B59AAD06E09E5F15EBB2288D66EA71B296616734FEF2796F07FF0D8B047074 -A1111D68B99C2B70FC56E74A51B062F4998ACC85B1943C9477E436E5CD7AB18DBC898D21BB93475A -623BDDA71D7B895BA2D4C10F4B90BF335126F4FD57D73AFA50170F6B3C364922E551D40E35DA75FA -891762FA23401D39260F2E92C7807C746F13BB35CEF9DBF2E76E66A72FEFF095DA482A4DE8A42091 -7065736CF4DE904FB52E649A32255E2030A7B31B686353492F31C064A3C4B0448C4BFD44B8E15384 -FD809B8761EE26A7DFA1758D57CE4F0BC376EB2B3833534B15A83436BA553955ACB5A7A66796AC5B -92DB5388BC53EFA27508B08E82821E5CF669BCE52BB860780F749B4F38ACDF5FF12726BF3EC2743F -01014CDE96FE6B4C40A034E9EAFCA2A35CCC776C2669E6AD138070A40F48ED79136D7FF57E993E09 -B81C543FBADD350FF5B5F7A46F060F88E30FE2D8233832D18B6C323EE017EBC1DF5C838321CDC8A8 -4CABCAB20B60A1A3AA028F36EA6E87C850AF8AF7CD50AA6359038BFA8818821D02CEE8F51DAB8C05 -F7AE9797814D97F3DB8CCDDE45B21DBB15CEE292FAA534A5F317B357F4091F3DA357325B8B9F5EDB -45865415973C143E5E5BAA483FBF2D06CDD4246675EC58B84C6AE65CA743117FF00F229243772561 -31A7F2BA26A9115AFD96C18216CFDF41B7220ED0CB3FCC26C36380007B382A02AEAE428887DC8BE5 -FDD630AC57EE3DC156C7B8B29E687F24442E35CE10BA4087295A641F7139C831F7CCDA6CCEB5DAFE -537CC1A97C5A337D3C48A6AE947F58A30DC08CC7B58DBBB4737AD52783C573FC1E9408F55495A80E -7FDA61F0B9C4F090158F1A416249EBBA936C27BEFDEF19D1BFB839EB70576A010706D8B95657B218 -9C2AE04C11EF9E57FE09880273761FB4302C388BD608FA0C7F00F033C9C00F4E3D5CE2D903E0DA52 -E69C7745EE9FA75E2AD93DC6CB5CCFCD3782A699B807AFC36AD1F62B05856D5DFD6F88831B90EB3D -CD523582A49732E3FD7253126D39E8AFB8458B5F7AD7F94A8DAC13365F433C857AF4A42C0A08C4DB -9887C4957259ED22D13CFDF5995DA957EA5A0F620B0214FBFE08AB6D552DBF048D62CEF6EFF12F15 -3511ECA7833E0E3E95F85E6AC0F95438AC4C126E1F1ECF336ED31CCA7EB216D279877123FD9FCD8F -B5E52B587CFFC4428456DDCA816819A8A4A211D8F1629E5D42BA4C5C356E580C8A22C61D987552FA -A97893816DA73D423686E4EBD44375C257F031318865A20F22115E72BF1EB9F93AAA169C140A33A0 -6C35BD4526A38BE79CF40AD1EFA10411E8F3300A8A8B97AB140EE6734E1BEE6C8EE443D698D34159 -97649C6F10F20ACD80236422E215E146D744A262DA3FC88DC0D86FF66512F49D3F957D3C5CFFEB42 -4823509F33F155057A4C6F37B52F4667767BA94F6B8B62856B553F307E5D230C44CBFDC9A97A45B1 -39FFB2F2565EB0E22026972FAD0FB7B9576FB6F368B61979943A398773600E7EE1DFEFBF26D45D40 -BDA66EBB96A56EE9CAE0B2420C5DD83E24DBA9FF885BB844BF3D2BF93B07325DFF60C0CB5FDCCA0A -C8FB5A2E119D5AF26E53AB8E3B428481C2871DDA26EF0B621CD8572B3C664BC7AAC01A1D05B98F79 -1A7080D294BE81099BDA7982432F3DFF4775C44D23F4F1B2E0162B61A8B2CB5EE8564BF98E2ED403 -2219085FE6194C19DAC98A421826CAED7F1AB1477AB327506010217283894235D7DBFC1153D5ECC4 -8AA7293F19592B4D7E95FE55151889BCD1D7FA7DC2370D2DFE11D7E4EA34B5C7A8E73BD3A348FD38 -9EF45B6167FB90BA44C23E912F9A4F2FC0427ED070592F7110183BFDB2C400393BA7569058227926 -351F07FED4F33633BA03A72AA2DC6B598E49B96021DD868DAD0F352E5722FB714F667C15C68D49C0 -3D822D82677EDFE86FE9668E537DA284068C9B0AED83074C92A5B939296D505B837E6A9DDAB1AEAB -7455A08A114C2222B339284674B74BF4CA9EE0C020BF2A148B439C71C6BE51A94CB64FBE4A7EB295 -5A455047CF5CB348B062ED4F6471CBC3E9ADD9BE9B96879AC7BC71BCE02FD02F17C6063985A5E898 -3D205AA1489DA13C408990ABA1C54F2F501AA172F530480D789C848118C0A74EF98D5F607A067BAF -F6030D887AC6A6497F9A0B38F9705F328AAD4BFBB634F739386177B07F22D5771282444E5EE17335 -B4D0EC86117C697E79A5F4F65FDC08E4904DAEDAB20067EAE2448FD4301849E456D085F392DD1316 -7ADF75CCFDB723E2904A9C0C976D6B84DDEF9D92B0E15FB246C3ECC2D0BF314CFB957757B3A3E8E5 -801F520644E4601D291DA0F7507C06F3B9BB36FC1C70EAA444E14E56C0CFF06C7F853DF36DA9D8B6 -AF2544B853DFFF535A7E5C6FC145250CDDA229956019659D0D253A19A7B51A4E538BDC01F74D7704 -9949C2C97C7EC6392C2E61CCC0992B66DAF1AB08551063E53180D2A67DE496716CCBAA45462D9F91 -B66A22545962DDAB120511FF08627131B95E5DEEB8B4DD9643E7B2AF65C0FDCE11F5F1E8DD468DA1 -8D41C8C4F00EA73836F4F70EC50FC3EC6D358C0658A4261C6D15A582A2C7C994E7882E661855B352 -014576858A265FFBC425160669CE159D07EDAC04D060B44E5800A7AAE8E339C29B929AA81D2F515C -46229D2080D5917AB20AB6B34FDCA8E4AF64ED660A3173786FB1A1D005D575C2A5187D3F7CFDC94C -CC44A38C5CD523E9DA726D8EFA6DA7B6131DFF3435FEE838B2C7D6B97934295F06202D307FF78D90 -6699CB9C5BBB10D1D4DEA5FDA5BFB094E704607083B646D37F5DA1FC7AD21B813F44D8C1AFEAB666 -55AAA19703BEA2E77DF3BF350E17C74B3447A452235919452B5175570A006C7680AC05E8950A62E1 -1D7E3ACA35A397D1E19630D094A86807593C97F4C484E4E06BCFF708B6DCA972E3A0009E1CAC0EA4 -141530F5C1B8AEF5E1B933F37FDDBC4BE22B74FE346D1A3F5FEC0818F8E61765568A2AC04713E828 -F98C449D9A1CCE52D10D61DD8BFD084C8D099A75D89DEA64D5A7CC68BD5B0593D97953DADA976383 -F5015915618AEC56D71D1DCD55B89736395C609B315A3F1E1255432FDBD37F38CC43C354FB4B7C44 -F1A7318B0B7E99C3C08C33B953727B6A6328051783A0A33E3CD9E498346A3CA6A77B517096EDD52A -E443B87643A646C3A7BB97F742888D33F9B3127E61942F4103C1DBDCD8EAC8F9E259773066736CA6 -53CE57E8822651261D847C131321BB9D6626A1AC50D047C0BA47B411DF2A995545BD68EC0287CC9B -31D5DDCA8755EBEB10ACCB3903AB0FD5788E984220443B8459E7C078DA4289F1350905881AD6DFDE -C47302B0ACB0D4AF8CAED02B4B70DF3CF8FEC118F0FC2D3DDE3E494CD160E676E300BC464BD4400D -B50EE43B314E0517037BF971ACD7CD327CB2134893B8A0410E68DDC518F5DEC966C7884CF5FDFE74 -723177F20DEDC039D879056CAAB4BF045062D3904F615C5CFE109AC7A35599C94024B41019B9AFD4 -04A80ACAA4837929F5C9317680A13D157A03B59A5588DF79D2E113F5F51021D6F6F90E8BBBA2C252 -FD10651BE80BAFD59C53A3367BA3C28DB6EB9DABF1EA99F47B503F627E15DCF3FD645FC52C5D5D0F -2F07DB4C25C0D1E1C00146E1C4D973E613CCDBD3F9450CC0F5343D79F05E9492E86A1BB889ADF405 -03BD7F3E7543436859184A5B20BD8A172F350D846B7570803990ADAA48D4B9155A2B4C4BFBEF1E1A -065C08E03928559735BDD442FF1E83E1FA20A5DA57D8BDB2FF5427C034CF0128AF111E6E73099E04 -6E0C240E80A73D7BE72B87834E45898D475521CA3306707631F5C6136199F354632D1A085F12A1C7 -C473868B62E534D15F5484323E63D0574196A19EF175214EB35A90873EFCFB92D6CF68761D45E37E -AA61E1A1979A82009507CA193E44B36A806486665CEDBCF387053ACEAB979BD35D30978FC7659ABB -E844F4ECAB3303318ECE80777A5FA5A9DD91B3D06804C4B4E9B4EFCF07EB89866D0DD8CA390CFD15 -98651417114D78776B1A1D36B4BA17746D6BE7FC123D473EF1EFED1C3BC1D555F914536869FD5B0C -35F9C83F65B0E6BF7A627B9202D787D72C600DDB6BCCE613D88492E13CA0AAAB196E8A49928C62CE -A4FFE2D0208EDA334ACF47F20BD793124D2C5546C03F4A364369A76A0425262F9D9118AF54E37D32 -E33AB25DD533A49DF5FBF1BAF4CEAC2D9D378CDCD13B00FDA432D9042F623DA41AFB80699B5538A2 -5403B0B3EABEC9E8EFCF42FEF3EA9F91766902CD206B0787C187D5370B60AD6DCD002DE2DE8DCDC0 -B4719A797C5E26BAA67665016DA0D967FA1346F9588AEDA174CA001B31213617FE19EA218EC23597 -79D979E2663166489C06993230B0D07973A117C4E3F4A4C93CF8428248DD5389414D679C69644142 -67C7FEA17E35B0CEE456667A9B1875C81B2302BDDEA2818D6019FC1622A82051F60584ABC904CD91 -8676305DC03FFBCC64FDDAC8D8AA9CE2EA00D6C97BC63C8A617DEDFC0E40775649438E9F61AFD179 -5E3B20560B01BE5E0983F136CF48AB206954E41DEE0D9DDD953DFD01CAEB569151D6BC0DFEF29D70 -FAE3E198E7EDD8922C0E0BCB8BCCF1C016142C1A8B337AFA7A05A9D7534B184BF3BF827F371E9BD1 -9A71244ECA1BA73D484CD2FAD54DB2F0EEFBD54B536EBCB5094E6BC2F5B2AAE41F05B4B311115876 -ED42C34F8E643B53372E3F6350DB8A38445822EA9A33E27FB0CC42CEDCD1FE2FDF723FC47C996EE3 -56C402112F24D0AF899B2D00BEA1CFD427998BD22B2A09046D6737814448ACFB10D387547D7009FB -384AF0562C85694C071584236D0F1F3D3FCD0CFB38B77C81889061E668BA7AB37AA60F58A3967DE2 -6F939B79CBF10A9DCC42852561D8D6754F1B660D216AAB1E133FBAA321C56E2584BE5C9BAE20CCF0 -0E8DBE6D9C2FCEBEBAD945C3C04101D2387351F132628786F6D9D4CAB83419288D31F9BC600D9664 -12E6AA457CE6CAD26A4C0671097B98C2384C81DD8B9A3222D4F4BBDA7017895C3EDC26662779AEE7 -40D9D7E24185FB821970B0A3A94041A69E4805EC88EE1EE521981536F2844FB8F5EF645F67D42CE5 -148E2DDE43AD5AEF200EDB3A2C7866C98458A92666E5F9E070178BCC39F65A893102A10564AF4E8C -AAA5075D2F8CD7FAB0401C03AF299EA3515CC93066744EB5AF7CF0ED06675BF049A6E3C211A89E16 -DE5BF0445A7CCA6EE8EB0347454950485D884606651E5887FE8B24323E2AA16DE22FC1FC8C4F06A8 -2A1FDE5758976024068197E1F4506E4D3D8A16D40461A4586338B374A592DC60334402F76388AD6A -457DC3F54E6169CF7AE3959676E966A45609621055EC3AF80E182633300A4418E34A66DDFA6B569E -5A13C9115B5FD3EC1CEBE50FBA247F60803AA83976F00117536342DC3D9890C49B2AC701D370E43A -955118967827760F7091469C5406F08F18D7E3548148CF0E312B1DC71DF67A5E7A1656CF2F47F3AF -F3DD50FFC2FCDAB7177285B29C17CA43019F62AC6FBA52D1493ED7C427526470ACC8389BAE827759 -4958908F517B2863B83292EB5AB3F57FFFB08393CA610FB1FE905D88A0A16AC395E2A2A6DD033D6A -0D68992F830B2E1B95FE357BF672716E88FFB92FFC3D62945D1EAD22BC68C51EE0E10A43011DB94C -44685A5C4576F6EF44CBFB45F2A4BF110A01657DB51FD499767E78058199B31DFD60813F1A344F86 -289F9378231D5B151C92385E3650B4FEB1DC91018EAB8474CBF69FDC1496A4D078D2C351C8196451 -247A9DCF8117E5B637371D8E22E248C64D999015C3FD2311E9950B8EE0922FBDD3D7BFF766BFE9E7 -CE0BE12F318FF2A7B5A9C6D00A54401609304ED2C55F5C1EAC3D4B38355BBD85D66D61636FA6E30C -2E82829376BEC979A6FEEE040E452359768ECF90CC539A546F17AE906C76F14F86FF697797322B05 -1EB311A759FE260C1EEE5DACF383816AAF1294CFFA7BF87A4D9BC595EE8F2C2F86FEEE11AD959D86 -F22FDAF4CEC098942A57E57813A0FA99239E994FFF353C1E781D666B8928CFC648FCF0869FC68468 -BDBDA7D280DFAB8B0B3A4CA35B074B686DE8D372C61FB32305169A1A9912F6541DA16CD6316A6EA4 -51524757BE5CF6E820011BE3859FB8B8578C100FF029680E05F0E0BF11D33FE19460C85EA5E4C0EF -28E29407C8AE6BE01CFA0D5022BF9FB01416FFF722A784DFC8FCE330EC95737A854471D334FDC58F -AB42867A7B62836A8B56466E9A6C1247D46EBAFFB905CD4321970F59FB8D6FF65FDDD34BF913AD32 -2E68455C5FF2D23C1A5EAE687F259BC982B6A384D35440F7C693CF50B9ECAC0B5578CAEE87588B56 -2EB6B7F42034C9F2E545EC866316552354EB3728C7D26527ED75174EAF635E048B08DC5D23E88981 -070AD5641A652F2344956E9CF4C16E652A99F4A644D1787D6D36537489DA4D74E61B2FC4DFDF1D1D -9D58F9C26C5EB63200526AFD168AC57D5611ADE4D4A382FC28BB60F9E7D626A6C67AFBCCD1183C5E -3CF2EF210D0BF5CFA7BB10FA3887BDD4CD96EEEAA8F9219AA2F10ABC0A960C3B57C0EC0313AE10CC -FF1F522124CFC8D2D49BFBB0C193EAFFC5B48FB3FF30B21CB76F0A4C0F1377C9223145BB0468A5D7 -1B9BC25873EA12E1C60334571C67385C00D0B570D3FFC6C7FF0DE62C183C76AEEB12DFFEE1459E0F -C818C621B8D12FA1357E2B55D48935D70BF140B4CFFE8813DEFD479350B20DC2EB1D3CBB1A2D3DC6 -EE975D58C89D61FC50E6A0197DA9A586B72255023DE47DABEFB11E8AA02414C2FF6258A281219B9D -DDFE41BA7D7977D0D6F18224FE22F7D4E9355FDB35BF7ED3418F4F68D093AC48F7D8FE4194FEB6C8 -0B9DC1F74E023C604DEA27089F98C3973FF9F4AD7BF7BAE601DB89B08D5D8139B95EDCF6C885FFA8 -B3E4B0477E7040225733826BACFD1EC4A0DD72DC41734856AB9FB700DF83CA2CE812913BD142D84C -5C83C0B2583768198AF9E885F2BA74877A414233207234AA5F18840557CA11682AABDE8993533887 -7C6D404BDE4153C9827EB16D66C1D73A8143C8A2D3604FF72CE579FAA3C5224BAC48EA83BA848429 -9472007DE96466B5B29ACC7C03B05DCAA38A48BFF9F214DE43146AE4E04FA705421917F99BC54533 -F0EBC01849E396216B9F0794E6F6C6B61B52EF1B1950C0FB609895C3C55FF574163FC8B6B09E66AB -AED1810E698FF37CC1F926B2CDA3B48C7D77790EBD2D514B6F385D397F713EC3AD3954EA9C846158 -6031D369E8B99E53408A79D64C34EB5A56DE8A67DE91837960E98A66FC04DFA0EBDE21DB003234BB -78665B039D0A469A0221BD541AF7149A2A659C300132C14581EF766FFFBECBA8B58A5EB3F95446DE -F49AF863A8113D17B2E7E6ECDEAFC3834D4DF900E3475596E86FBB4E2974C090DB4AD61A737D611D -92B4535AC291C56AD8B1C031D2F9B505BB77517B737D70AB3723DB52AE2ACCD5DD2F617423ED3CC3 -9CA882EF41757BF7151806A9B8B0F312808863E3673FB54DE939B35CDECA7FBC4DC3BDF5A5F47D35 -E345916C39366C8B4F439CE1C6F1835C320BD1E67375B03B5DE18C93256F251761A4C8CEC01019C0 -68E34447BCC503B9571FE8000627A6B3DAD5854CBC0A2D69E5A8F46BC78F6A7B1422334EC7A98ABE -FE9B83E01DCF3C6C9273B346F3240EA225AE4A4083CC7B0EA141A0773FDE940768358EB4B13D82AA -304A1386D450C1C0C6A7D5A8FD2BD313F78F85248B5196241E31E5595F3BC01F37700A2DD3D4A0EE -2DD01A36569CD507130E8F5B1E96CB560BB7DA15560CCADF3B2C9804A11D9E8055C9EC70E48C1D21 -3EB756A1376F2EDCB7189D78CD3D6CA5865537EEC31C17D801605EFD860B0B629472690588D02575 -02C6F7A75B9A1C1B397781329832CF3EC43C09F1559CD562C48FA9500295CD3B0A790DD3FCD4684A -7C7AC49AC9BFFF36B39A9FB148BC28D37907433943CBBF0CBDAB46D3EA86DC8F81C859C52D15302B -94A9B51C199B7104DEEC9D769C2634CECF8B700CE9C04152CC59C9326BDACBEC4312DEED92DD087A -1C4840868D9F97CAC046581F762F75E8D24D6445370A3F1E0AE74A6478D9DAC37E7FA5BEBEC0A1E0 -81AF89C1BBF7F51E3E2E22C8C405E8671BA85F1BF0DF79A465DAC7EC07F731E00632E017D190A99D -83E27E5C2E63D7DABBA23B2E88334C63721AC5A4CBC5D45F4C177259F34C2EADE01FA008AF65EBC6 -01D8DD16436D86AA94C99F3CC0A2F87134E73BF22F108B825A8963B49C6C685474AFE4A542C8641D -C0375D7EFE9AC1168D9700459BE52D0DA399023E141969F25C0DAC4668534B6647EC85454BE945E8 -26B26DE6E3C4584B97A38E2B40A0D23481BCA78084FE80E00A71A790BF31DF468A435ECC88E60A57 -860BBCA3D65930186E9917CBD209C230E8F8255A7ABC7D3F043AE4D7AD63D9980BEDF062B7D5C298 -C40225B6D03F29A0339E0FCA02138E526F06B9EF47F5E7A8068A846CFDE2BFDEBD24F5A73A66C079 -18662AEC80B43246284FA4E2EE0D9AAB172B1E59A6CC46B801149D8C0DF6DEC9A55D8E1B0EFD9D30 -2FF618075944CCCB6831D336B11617107B0530D09885E5CA11A5F1FCC8D69D603DA16BEA51116D42 -CAB1AA1E4D7B9B4D79993F2BFE53EAC904FEB70B2D330A89780EAC10D12CC0C35B8399F218AC2976 -E57A26BAD20CE2FA2AE2363D3FD2A8A971747556F2959DA74A8963C20B504711AE1CB0D0C02457FF -2E9BF696B159AF031DD5155F21C0F5549B0471A3C5DC8918B675CEBCB23E29322B959ABC05283A70 -2E878DE8EF25EA760F3C5C7B7B49D398283DE2ED837FD59F7C22D62C58FE4448B1049FDEBFC8787E -67D7DAFE9774979BB3802254DA59BCC0219F98C219F84D995CA768B8B5D9D4A32525DFECE003675E -E4BD5D8DFFC11025AF2B468F9207B5B2B42349B98232BAC0759758C1F4A283405815BD7145C93FA0 -8F3ED2826655053A3C2559073D8ACD199DEA2C5BA5F616A2E48548B4370EC73493BA07E197165DCA -774438B0766867819C1154D1959FE6E01E6312E0AB91FC2E2BD240FC8652A2D456A1DE7F34EF372A -53794D4C4E050BF3CA5B7BD2F1B8DE93B4C8002485CB219AD2D029739FD3C81CC6E78EDF38723576 -1A57143EEDE5CC887F282FECD261F6A25D0A7E154ECDF5DC38E426811BE86AAA458577E5E0C5F0F7 -5AAFA9C41E5D1DC9D91ECD79B514F8CDF7A5F1A189470D35FDF4F9B8788879CCBD91B427822ED658 -389E981E0EE5F7FB87692A3E3E931DF8A1D1573E3B0166204240B7080089A09EF7487C9AEE2D665F -5A82F94C877FB5B0DC531CEBF1E71C6592CEA2401E4B5122E5091DF03D203DF979B9A6EFBA12E2F6 -B422FDF15D49AC0914D372D21E871DE65CBECD105FD4A3E4714B9CCA5C6803FA39DBB015EA8A88BE -7913502E562E5B170B87BFC8572DC9DF49AD63694311EF1334444BDF0B4CA3245271C1F7A4D7FAF1 -703E3AA0E1EA8D5C6E821B28707EE0C9B4F22F23796FE87356C58AE2CADC191F4C58E1FB58DA03B4 -5A25AC95DBAE13A293474217BDB214742B9D9D6AF35F70FED2891942EACE3E625E55FFB820543FBB -250A062D3D395BC0F219ECFE0D76686AC148BC41476A887BC494DDBD396BE200FD3E03CFA12EC9AF -6B934A283C42AA05589AA6B4A8D16946BB51F50419CABECEAEC5AEF9085C9989289E9B46BAFB6FB2 -782D84DE2B068F91A9744AAB237CEB1BA513E57E4C307108E993C972A3E0A898D5A8D27833155031 -FDB98863C3BE7FEF3004CBAA5CB60A1F2E3EB4D7290FF5FAFA088B1CECCB6CF51A58DAAD998F0839 -6CDFD68F5ABC9C1CCB8F6514107773C69C26873E889D1F79D10E866910E4684186FCD71C965ADF62 -39BA3418B313A27AD632300969B6F284519366ED85E7CD968D64823F8C59B5911A72D0A20EB72B60 -3A61E36F52F256FFCDF706B4560B4DFA5D918FBC530D83A4B3C01BDD3CB4572E24242D141BF9E775 -36693A0407D002E09CDA5B195BF1CCF430AE9824C07928A050D0B460F2704BE8F9E647A4884C4567 -0A81EACF7CC038643EB0FF18A376FF6F32B6FE4F197273327FBBDEC6443A299CAD4B26F7778A99F6 -5A11BDE047153E764039EDB251936AA43DEE50DDFDF8856519056AAFC4C5AE6F2051AF0579A9ACD4 -1D00775D7DBE70022CC263DCA5E0A25B9C7C4F5C418587666B2FE24816B1E0EC92F9074F1403BB83 -AFC3F1D52CA79C387BDEF864366E34C90BE52F7AA09935373A07E4E026224E76F9EC3CB9E7EDE50D -EFDA48248D61F3CEC880A3B8843306375D9711E58645F3625BDB8E87052DA67F9794EF4AF8DB0BCF -E00677C3A26907DC651BC838C40EC39E2B5A5DC0DBD345944A6C32226089D63C52490FA10B215AE7 -03CFB663EB8A47793B84CE7364DA1C4E7FCE32DFEF09490121222774915BA59C78C2275F829D15CF -4D8686B095C38C731B83D48738C25F40B8ADD487C350A2EBE846C3916AE384CB1050F9F5DFE09FCB -D9129C6270FD86D55A459618FDFA4F907E6B4746196BB717865AB378414029017551161A52E9D24B -E4F7EED553A927933D4ABC8F25DF607779A717909CB4D810DE8F5762581900E224E4B91598149BA4 -71CF8068ABE8744356B261600BFCC57FB8BE45036CF6571D9B2A95304933BD4F17215F8EF53F8E08 -1AF61FA7F9583C34EB5655CB0ECB82246959F09091F36989EBDD646BEDCA614B9A61AB7696B3FF18 -1058A150FA6EC1BE2EBC7F64357A3FF2A2B0491D2F4E0B970DE5B7788B467CA678039B5EF55C88A3 -84578D427FD2CB16C87B0BF0A3D37CE8ED43E0F049AF2436344D5F47C948C632C94A287509282561 -6C64C5D262FE5B24916FFEE982A69A6CCF888BD01D62EA591EEC51F4B7DDFAFFBEEA93FE08D736C2 -0129E345D06B10246A5F57151C198D407730713F32299638EFBDC01367E23EB59AAD42A83AB41B43 -2DB462652E29813740F4680A5D4BD47B18328FAE6BDF4200CFA4CE3773809B45E8887C9B2E423698 -9F6C48D64F5986F563D9A7538A8716082F81936AEBD0461E6F4BD470436D8B7656F0FDF89108E6DD -02ABDEF907731D458D690BC608EA9CED09EB1E6E64C0790C7A2378201CE997FFE0317679EE1D4EE9 -F91157449323E53B4ADA8096CD628B5861BF794543A98F2FA2AB54FF0F25A13DAD43DAF9394329B9 -5AA53CA32749FECB0B2BC035DD1EBD53FF9FB5AD8BCE06CD89E5568091C1CC314CFB1D9821D7F9AC -7C55F55E0A16E39A87D43148201B928F3C42B110FC056189DEF183745F3B637441DE8BD4C3C7EF12 -F4258E306B2877ADAEC63441010750DB4E6269A4C78A0AC01BB3603C386651FE814031CB5D8C1F14 -9EEAFF652A53E57BBD4C8C0CE36A84A319A53BC1E5FD3F1ED1EE72F4C1A9BF264B594062FCAFB22C -C1FDE3F2E3D3C17DD3F7FE0E15EBD812D550227C06D01127385374A11438ABD50048E17255FCD2BB -85122A6FB9B7DA9D5E9DE8A747FAE0DA45A1FCEFE92B9E70A5B2CAC668D4D07527A5C1403267D823 -048BE671F725CFC7474B44FC5AAA348420B2D7C23C6CA066666FD6F2208E329878D90CEF1C2E77ED -22D3BEBB9D547810B189F08920A27E7107F208591A84D463CE2576C70C3DFE6643E4EA93F4E1DAEB -41D46F0E2F56FC10C69AD5034FC9859D31CF27A3A1EE256C93111F81C11ACF1FC0CE20B90BAC9AA3 -27A5C85A7985B951519FD4B03C40BE637162AF41B2FDA68F0D1E9B7602FE2659D3D75955C579AC51 -DF6A552EB9581AC3F712F083F19B52A6C4F560F36C59CEEB0C996AAF1728A2AA45DCAD79BD7B23AB -388D5B0B64A2B95154B6259B730B0F4A72C8C7F7CC93C7D64D9D8810D1F63FF8ABD4DB89824E2D26 -4FDEE916C41E299211DB1A53256E1DB5CDD04862F034D9404B73183A99D3D13D642A663F129B6D16 -7095BEB4EAEFD03DF2FF2F0B6B594C1EE90FDB203DA89FACEE23F1BA3901FECC75FE1811BD701259 -343011262B6A0A9707AAA6316BC3C17F787BB80AC8DA5AAC942D90F80C5A3BB59E47EC767244AA95 -C63E50BF809998957936D3BF6ABC24B0A397258F9EB4DC8F65692CB023D9091FB180C69498CD0C08 -BBEBADC84A7E0016E8F8BEA325D924EB0DF82E75D2CC2CCBF039B11934363D4332C5FBC5EC556BE8 -5EE4E707CC2753CCC43D2ED50558E51A104221C9323CDCB0199B7B83454DE3FDC810D0F362C0299F -5DD981B31D8E3DDA284FEF9DC8F9C8DE138D3065437A7FE8C30572AD06D62E8527AD37AE39AAB0B2 -25F76A25F6C6505241ED73BA494CF923E919F688DDEBF193E188F8C4C154F21631080763B4D091E8 -AD1D2FD6649E0CD9360E8D1A67A5B5FAFC67547CA31C95A5EA8D4EB5D68B9F6D6532DB9B54584735 -9558542A2AE58C09F3BD2918EFBE1699E9C8F2C2A11EA4D224C726D2ACD4A8D8ABAEDC6588CF2AE5 -66528B94F55B823A2A1F7BE19000F3E7579D094E047075DF18C8C868760295533B26EB3ED90635B1 -29C17ACA679C3E88B06998CE5A7A2544B700229F5A6A504BD3E45B276471959C8A3F81917A534287 -39B5EF9E3D463B3BA7318448E2A3E79520D2D245A2A72F31FF7070B6E4624E3A5E216BD103640C8D -F387E49D732529C611F8B971073F17EBD2F6EB18F9B74A67E1997926DF178D4C9EDED435B9682F1A -279C81BB9F60DAFE125845A2FF3B02979E5481C78A45C479BEFB9FEF3CE2BA9BC46C77B50B03E48D -A6D17B76F06F3AD118371ADC69E178C52B5FB4B261C9311874ED07DD6D5B3226A005FDD7A6D53848 -09E7063F036CDEA41619122635E835D2D74CBB6AA9B38CAA4D819C26E95115FE0DBAB4198FC5838F -2C91B7A87B07D734C6D4F4F83444C1E90AA9BFC908A2BAC4B3DEF9157AFCA5248F2DA31CA87BD363 -AC25E9E77F741D4B2C6E02F04987A6F49D30E9038CEFC41BA172DD675AED8B392164411144E5B738 -F3210B0E66B17A13CB9631C33D44484E792A7C082DD0A5382F34C5637653261B1EB6D2035B08B4D9 -1FA9AB770CAF40A103629511F7B43F2743D7E583433DECFB19C21FD4FD0AFCC22A4119E77C87BFE6 -FE50068B22479015BE5A9F06BEAB4D37412E062A45E0CBCD7BB39FEE747E96306F79FC4F2E8942DF -5D9DA0E55AACCDA547DA19D30B8404FA121298B44C9CCE198C708C69A8D6BF17591C5C50D3FC5BE6 -961F7ABA8F366DAE957A1C3730DA4A5B4F035A9274675EE3BBF0CA8CE9D8349F50CABB1C3EA4948A -BE6F9F143592F1EA95404E6909A909168E3279A957AE1924245C356331A75E7008BEE92BEAA304BA -40B7C3F48F74D9018B3247DF50EBD7CE541DA48ECCB1B0BE51A455C3C13C279D4D8676078C3EBE43 -08748D52C9B041D3E7244C745B1F2F742D010A9E60695F3EC4FDC1050AC082B905D6A57E8F407A3B -472F731011A5798965B7B1A307E252FE02C8F79CEEDDEB6E165F1A94D7FFF18DDBDF79477F14E9E9 -3981ABD200FE7771B29D1D2D120EE79D28B9543818527039AC74085EAFF241B56D08220C958B5D9C -87C0C04A14D52AFD475B542D391BC54FF33DEF8D9484AFF6873BEED32DDA4B371112B523B6CE22B4 -0D1B416B64C9370F1CDF2C548F4CCBE9E12E21C36CC3EA52DA232DCFB65F66B22B5E2EC04852510D -5E264EE939BB67AEC4764B87062AEB7F680B40BCEE04AD45C7519EB3B6199C9E0E332661463647F2 -FB7EDF303EFEF84891CEBCF0FAC5F723A9D0476C3F8C092604C87FC69C7A90F4D64AE45A478EE8BA -2DF50FB93F55A3546123F0B0E2C1C40C98EAAE9F0F26B8F80FFE6E6B94B7E27D2884D58B8A119662 -2DF6BE608C5569D7864BB756DF2EDD184B90812B44ED4A32D001C31383A40AEEE9743651F7950846 -15C48E402DBC01C818D477EAC0347795CB2792E9C11E8FD4A02E194EED1C919D4598FEC003B6D9A8 -A0BC7D456047A1C0579453FC1D7CB2D158D466939A23D7A7B8ABED7E2777EC7487973E73F2266D9C -250CE30729E3C5223AD93B9AE8443B35711E446A3DC660123ED45CE1942A1A2AD0610467E081CE2C -8B92A6C82F0B17B5D2429E99F1A6268072C6B5AAAA6EB6283A872C54D3694CD825EB2926E57DBBC7 -C1663075E687A144E4D61C225781D80FCAE1497B442342B4A3F1CD6BDB50E31791CC3928C30835FE -F845B6BE5E2D7E3F2F5F085AA3FAEB45CAD0D76BCBB1ED859A9CEBB9F7457036F0BC3F195CB1A98C -9C8648F6583CDBB23894BC719D68C2DBD8003B10D08C8CAA40BCE784D7BFB4EEC9EA5359AC056E57 -B8B0F2EBCB1F4CE40C87FC7861180133E0CB6CE2FC4FE690756D327A2B5AE063E3021C0C0BD420D0 -56F0B941E6B36088A55BA11D0C35FD0132D5F48E5D9673572347171B4328D4807B972831C0D74CFF -A5638C145B89C989E6EC942148207D6DB82257585958034D9F9D4221C7C9F7013790DBD130F277E0 -BC88BB179DD09E27062379ED06F25EEA8B7FB33C35861A0034776E3813D2E9E5C10E227CC569AB36 -CB2D9DF2E7B7B44758F9DC4FFAD7A24AC7E9F47AA850C221048C3CB35A37CE8EA75632AE65FE3212 -175146FECD6334AE3D3C5F492F067F795E1E8FF386BA198CB74F0BB4DC0000DA383BC4CC3F070DE1 -7721431988D69C8B1A5AFDCCC83C22E16A87E01C6D3E79DC7AFA3DB0371B0866EFB8B6F88900472A -FEF1C4A878243C52D4E02E82658979731C841C489A6B97E271C4C93800EC7D91F93EB9B9C659A554 -E1FCE42A5EC65AC39190EF4B66DEAF6FC0569A000A9E1495F42F706FBEA4D32EB7EF11A648910259 -6A65CF899C2F322F5679C6D123469192A9BF1A7F1F2C81C554ADB97BD19ADB746A4F81A4D5559E60 -AB94C483DBABF6CE2F28CDB412D50FF3FCFA3B3DAAACC6A83CFED910CCB3B8D2C19590AFF4D75303 -4A6CE7F4156896A13808E0DFEAC547E69D3C886691728E4A35ACD575B40D721E8FCC5385A2EB28D7 -08101DC50811529528F5CB0C009BA7E3C88468E37768FB0D83895AB54DB2DD5426562AF9D8AF304B -F6EDA54E9C92643DF926F5C3578269750120302A37CB140A18BA56BA01108D4ACACE8FEAE640A6C6 -958EF156B588ADB0EA5F3B0F37BBA12B7BCB221C811415387B024B7076FA4403A3AD6EBB5D9C26EF -EBDB7ADE7C60B444AB9F90EA493B658B7767AE2BE649BDBB3FE85F460F1ED137C61BD95F7CD3D8B0 -15CE45138538930AB62AA0E54B4CE1A5EC5FEC0A2B28B345B67089A4E4AE14D2E1F5A9C8848DA688 -CA298F93860649EC3AAFEF3E820D86988C8E3E5A4D4BB937791827994AA3E81D0BB3EE115EC36D5F -B9A392D09E79AF514D11C7B3A03C9F9C13355CE79E119A19177FFDCA34704D38118A8976D1EE5AA0 -2D14FEB1414419F5E85244ADC5C0A765A522EEF36170064BB19FEE3B5F7B441E4DB967DAE0BAC2C4 -8FC6A836E0EF5A69F073BEE1699F55E9C757EBD6FD8B514E2B49D6333815B7DBD1E0694695FCA3D2 -1320A0C4B852D9706DADD8369A95FDD917328BE93DD33818954DBD2C212D2CA81560ED5BC284EB04 -7A5F389E24E43F4FA8C97FECF46589FA7341076555CF55B1C21B28E0C1CBB00AB8B6F67472F27BC0 -D11148F407824B0159B5188D4BB7386FBDBF1C0FAF34721B7BCB5C0FCB7C4010DCB6A1284E9D7883 -9E3C2111A05D29AB7997073B590A81C6168020F1D48951BC7D8476D5BA593F4F23CAC1F9BB0E091E -84B4E99E5C584D1370DD12DEE8DF16AF8BC6B7B23E2FEABDB7F32779AF8E2B5094A6E9B7A7225F24 -C43A8E5D2B977E1E19E633C26771E23017ED233DBB02C64F8CF03992C6484528D0C8464B46F24F9E -8380F385D5D01B8893C67FC103498983CF939432AA380CA576D09030CD52FD99BDC3BE16C7204CDC -3365BF76294A83A1FC14A236F5FE5321904E779B13232A76F8FE521F425562678436359C2461BEA5 -AB27209541F557AE2AA60009C9CA0A9FC7898C14306CE35A50017BADEFDECBBF94EE2905220706DC -806409EF87DB1D73EAB0698AD2DB72CDCDB293E7FB13C94D9FC87E74502E6927A212F0D7D2F2D194 -64F7A66AC07872E18CB1DDE8F11835DCBC5C4EF039333FFFC0FC1456DAADE7DAE3EC2EE0D3415B0C -ABB69FC5006F4D14A4EE1A5CA99AD4D5E629C0DD1E0F097B5B93DE2DD001A8C418234C9C45E8C13D -1AE04E9466DAB8CF1ECB88A4E059C111A6468D2DABB90DA79C7C79E94DB28F6968B1A632F8C57D9E -565FF91C6916026FFAC0661856B9FB8DE9C81661816221B1FC159CFEF1751E7E403F5F2CE32529DD -540792FC17A12A3DCD7C50D38EEAADBD10ADBF5D8A82442AA900CE6150EB7A4639DD9FB6E385B2FD -093493DCCD9014B23EB172E21AA89643A6CAD1093343D85D81261972DE0ACB16A4C6B5F0BE4C978B -FA12D3CAF0134F9EA49F6E9687C8F99A456745EA252F0BA9968C7F9586E3DD841AA92DC7705BDD68 -2DAE41518A09DF0E209F321D7FA3417202F4BA76A984DA3ADDBC58136885362F02F0A24EBC439B3D -BBDACFFD8498EBD29F88F016B1FEABC10785438EAC860B554525F3266097A675299AA0967BD3B7A0 -EEEE3FC578D1BE99D3533BD91571AED904BFC9DA1A1451FDC5406E1CD614E0C7FBC733563CD6CE6C -C31E9237CA153F1F0411114361D731636BCF98555ABF12848AD109371A42B63675A4130B81E97C2A -2EE2BB5D8FAE2640156001AF0F55D9D5DF8FF23C8AEFE14F120000F14149A36E5C94CD9081DEC277 -C2C34870D05011F99D48B0875A5FF542F067F7E9880109F586BCF2B50522A1F23ECE44349E539E70 -F84E207DC9BEC7CDF856A046F1A03226AA41F541719AD1AF88FF211E57DD0C1275DD0B7B47440DA0 -89B98C6EE92A7D94700B83CEBE19EAEDD8A615F6587587BA8BBA3CE3AA5E8EAFB1FB0F486BE3609B -169EFB178A4292F4C0378AFE5D24EED1CAAB514DDC66C696D8E37F294A6579131DDF5488E9436609 -ACD750C3DB0A940C84FE022B22ADC2676F62E91E8F891225F891FBA537679B24547BBBF35F04915D -20B11739F620D18B5B216921D222F15044368569AA302980B9225BB839F494588481B94B0C724352 -B2DF600A22B062561D86CB8F81514FBDAA4F8A043A0265F992FAB71FC9124A45B8475E1EF3DF6B6D -E35CF329777D45F08325E8505EC0D979F542807AE77E57E453525F23BC59A50740371EFA98678AEE -6C425374AEB745B99DDB5D8D908FDB551FBC0DB15832107BBECC4E11A1A8DEC69358A574A2ED46CC -31D564549EFF23102D92BFDCBB2BB985F78F36033E34F59C0EBAFA3BDD71338736464CEFDBA91398 -33995EDA4207BFD4A9867D32E867FBEB7DE60D132803EF9347CB17BD91315484EF6570892297DD8B -7D966103339535E28A00CB1EECA4A9775F60A9F5FC9BD8B06D78FE8E6318C31DA2E847E3F9CA587C -B01AE2BA0A2EBDE308314413F4F230A758184ED60D4F71F6CEC22A93A01B6C54E0449A3860FCA895 -4A347B7588329A80974ECBECDA1070FBC055666375229F13DD995E99265DF870BC8B8CC6347FADBC -1A6AF64599271A475B9123493D46BEC41289BEEB67EB97A8DED7A9C9730D37C65164CFBDC22E5CA5 -89D2E7954C7136EF4E084C43A6C7F361A3E96989239BDDB9A593CC2A80BA16DE9EE90E95CD39393C -212AB22EECB677FD36D34DEB46C4AD0D21BF7E6D7CBD0C8083842FCD87B18FEA7CECF939987E99BA -34C214E44DD84C176C9CC5A4CEA76D380CB316BB4EF9DE73D73B4AFD4ADB54451591DEF86621D138 -D5A0A29441502BF6C2ADE671CEC3CB5CAB903A657EB2D70C943F976C110E46C5D9D29BC00A875F27 -38E5D22496A43E096E009C5D3CB724B4CABB32838DBE527F83B18CB457E57B092C302EE557FD4F00 -DB9C56E66C9FDF4EC9FFAAB85F60D02BA79694FABA476A199A0331C30A78A92E10417BA236E23364 -8174C826331DC1BAB87C5F95027846130C6A2B4027930EBF9A97BA1B039D386FC51C302648E25980 -212F6A582CDE2778C677A01FBFB3C5D1B8A374ADAF6ADBF7DC94075F25ED66D440B3922C5F255FB2 -3FD8F6E21EA65B1D93BB225684B50F11310E242B087575973345B229BA62C1E2C35BDAEC04D10148 -F5B2F3BCF7399BDFDF1F3F79119714AEA697245BC647316EA157484ECB951BE367234FD02E8B1F09 -1AAC3D29BF282DFF4011BC0CBA8E55234D943DB3017CC7A766720BBC29B2D097A956C0F1067177F0 -12D42ADCB473CDE8D1BA35B4030757FA1D8211989DF3BD22CE5D501C21EF8708FB3449DF47D88650 -9FF7B59B76C0DBAE443F336FEE2D615D7EED1C284F14335BC8A26BF4621E10DE9611FB2F1DBD52E4 -B7565D8C65B54EA36D508BCF0C578A49A2665227CDE1F9768EFE847F9D94F1BBB7DB83701C232198 -5C7283D47B2E40B27A268428AAEFE75F6B2F8764A8494E5827573758CB9CA46FA93208836BCCC8B5 -564A69F5AD882052AF1C1417C3FA7F580569528682C77080F3688B65E7FC24D2A3AEB61574B4A321 -5927281544DDD7A6EE0A3E9388F8F631CE7251724DF70726E5912DDCCC8C652DD6C9608F8462303D -867F589DE0F2F71711B35142EE6EF93B64D6326C4DD7DC83278E057100EE772082E6BA368ED91A55 -53ECFE2293A481E42F83BC8F9148C70EACE91F7B7D9CB8A72415BDB3AF66F68EA733A17ABE9DB005 -3BF148629132969589F38D30EABFA96A01FAC72650B5A6FF3935670198A1EA33810A9B11E330EB8B -451F24F93544263436F669AB5A90A53B16CCEEAC36B1445574EFA7E802DE73522BE725E68704822C -B7D3912717333367895BBFBE06966A5CC653AAB5E9B3596702086BF0010085B900711932A95ACF15 -CA4DC45A754EA334E9EB84D6FC8E3FC4F897456BED64BB93B593549FF0D5352275D8E417172A6664 -C5E0ECED1019494A7ED49AB0B965BEC1A82E5873766BB38D7D856049CCE2FCA65AAF61E961B60634 -E2A69EF059754C9D8163D87F928C222772D070D83FEC6FA5AC734AF65E40BFDE521F7D9CB1650FDF -64754BFF21EA3FF0AF7611A93D525EC9B28C51AFECB04E7FC8323DD6C9B0D8539A34FC3CD8CEB795 -8E8EBBFED4313C77ED469C199552A9FF70BA5423B03B6148D4EAAE17B71C5B39DC436AC53D6BA8A7 -AD81AA8B02335A8B2B11E9F4FA913159A725B8AB60F52F1A2EA50EAF4D56656E615BF382CC68A690 -BF83DFF24FE986570ADC0290ED1A37C1C2AD469CE789E0EA0BB5CE01020100E729721AF3B5BADD33 -A2DAA6C33EB8F9064F5292F715F820B4BBFDD56F76D42E7A1A068C1CBDCE4640082F6E7D582D1939 -990CE6EE8D270015A2C461798B37DCB5798EE9F7512168B76D26C28BE4A49A1BF96C89D235F21A1D -B6A96E5DA474D0B19B808D13D7A11BF39EA8647499C410ED9894A1ADF33D41B6FC2E614D8087F4C8 -4E437B136F3CB32DB8393C49177A0675A0C9E7EECEF448A97AFDBE840FA01FC7E5F2E8FECEDC1884 -84C312E8635CD79195475DDBFDD4D38D5A0246DE2C7F21608F8D2C0DA1371D302E941572E5792A3C -F4E51A33228B93A814D03FD4FC223C314CF3714BB3A34BD4F7ED6348577FEED9DEB082C4049E57B5 -D3CDB7F26629E9F3BA36893E09E3C7463D02A22D7056BE76B87763260E46E48BB832B7EE13F8DC05 -37EC8E81E9BDFEAD8C27EBDF1AD706933EFD11131E12814F236EBB01BE85B7F1B2D627413B324918 -D247604F56EC128909873FEC3857028BEF76A3494364C2A7002D104D486236C30B48E2B75D851C34 -EA50BA7FFEB4E19190898AE21768C157C0CAC628A2181A32796FBC1A7271D2473CD88E5395DDBDB1 -FC3AA8DF0F3D588637F19A8B833AFDEB5F655A8838EECD684E2315B72C75CEEFBCEF94344ACE8D6A -DBE355008EC72FE7CEEAB01363A895F4E73F867639BE0A0BE67333848816B05B419221BE8F9066C3 -62C23FE85B7F392930BFE4C12B9526FF2FDEC38F23A159ED61A0718E7115C24597D849FA76369153 -54A40C965D4D72EC94DA61A03766AB39AAB684E134FD1407A5B1B19BFEBA52AA0DA5D99CBE5C82DB -AA663711E6DEBA180E1D4A39C320516A4350D296BC19BF1BE054859A0889C7E9727A021F3176FE62 -0FB0C837E4141FECE531A950C03D319E3255703220B7185BD20FE5DBA673F8129AB211EFCF36EE39 -4C7E00EB0876624BC840FA86E58B2F584754CB6BFDFD76810E300741EBE4544E5AC17413ADEB21C6 -2F66CA4F075C32381796BA709782DE34A675B717A2C7F6D88104CB924FDE5DF775B4F0B68E0E2E5C -2F788BBDEAF06D8E1FC2105CCBBD5827C0B03FD6CD64F0D073F3192D5F94839644E5EC6C5185BADC -F04112A65F49A8C83174A9AE958E76A2F5AF469E8B76C833782C5FFB8BD7B1BBBB3EA0CB7C9786C3 -BE2ADE5E7AFA8C8F20892659A59BC421E28845A108E34EE17864042EF587A6D67DECDFB3F510EB40 -D2229585347A0035670FCC76C2837A4E4D68304FE113C539B35C1F0234B5079B8E32934546982978 -C5E4DF955A454EA263C3CA5D7101F31A318D82A3F9FCB5A8AFD7A65209663B0FC9DA400B26F285EF -46D0E1EAF8ACB1F1CB805E3986D04BC585073FC64895E4DAE1CCB749BB439CB32EA91176D5C39C36 -50D10AFB9C9884D5FB90183424CEE67EF2175D01D2478D67511EC9F54F88763C152697B06D948BED -49240096EEE3D06AB4575E8E8B2CB8263B5BCF4FA1608720F52B675309833071879DF52C3EC2871D -20F398B5CAC8F8A4D41D0F1D47584DD90DCDAEA4A1CF160C4B3BF1AAB890B5CEB6CB3488672AA68F -BD938281DBC1D8BCFE92FBF514DA5358443CB6E0147254E91B38CE6787B2BB0DEDD2D38F5938737A -977B5EA42892520C58F8FBB53C994B57382379E9490F0D6970B980E1BDF8CF9F4C3C5E0A18F66E86 -EE93FFE7FE546DE50F41364BCB3721B637072571FA1779F1D672FAD260C16D7F13CBDF3E4376E7FF -56D2A710AC5AC35FCBDBCE2C9C17E523BBE6218617B13C1FA6679B308979AE7C61DA6E68369324C6 -CBC7DDEC364E5A86707266C0B459EE7B2C03FE584E529BFFDCE98C90A2F3D9305AA74D3ED8430DBF -3A49FE2ECFD9C4BC9FEFD22618FE9C8A973AD072AB6F713E4DF02DCDA7AC5359B2D652013E131B76 -B3ED6C75FD53BA58D862846264627F6B9E70D8800F6D9B32242B747A67BB2B45675840D34F852AA8 -062FA6B01E31ED24DAE02F6CF788A17F7B9368175195DB0072259CCE0FFB2C1035C1D26E1777CCA3 -D56A827C3242069E76D6DD69B653768614B9ACFF16567FEA61508D51454BC02F6C60F755AEF6AFAE -3536BBFA1823F8E1A53C41124DE983E51CEC92AEF4F99785D554488A51C20885346D1F761DA79017 -940A0C557D93F1DB6B3D00FFD61D08E96FF3AFCE5FEDF545CC9F47A2B1BB26713431D6D1E47FD6BD -6E3C668B0368241F0EBB5FA9C991DF79890E52E83A3675EE699B61BAF869DE91F67278F510061C6F -E41DE2D883F48CD0E068E2A652B244128D82E5CD52F35F210DDAE3054691ED55A7D99088AAE8FB04 -F525C2084AC09F5EDF80A4EFAFE981F74C0DE9D194320709B3464F3FF2C0F6AAEA6D973D9C323F53 -DE3D741F698FBF01036716BBD62957CB32CD81D3A2674560FFBC5BDC5C6E4F547E589AD0B1CFE14F -5E17FED1C4A8ABE4E67CCF8A49F32C4C6044F1431E1CC382E7758722A6D0DF9ED23E51F8AD14D11D -7B6428E27443715EBA4E9C05D6F238378F9498AEF0E7EE4FE6856622CC8E6ED141EE5F109E343CB6 -695C4BE1E0F66601C27975983BF557C04ACFC19227A1AD7E6C44C00529FC7EDD7F886D24B7E029B9 -C395260088BBFB96972199A7B32796D27257DE83A7402291C14FECDF7998C5C96B1EDADE0280F856 -8A8F5007852EED303969180B3329917973C2D32C080C9765B6BAB0673BC7ECFDBBFBEA980C263843 -39B7F1052591D91667D4FEE413AFC23DE2D4B9DA742F4269C6C939F5FC32A38040730A018155AD73 -3F231E4D5B9D01C03A58EAE7B5F590CCFAF25EDC8552CFC8D95C60EBAE1837D7A97CA137E9D4A4BD -2CD34AEFD68D64B3F4F62326AC429921D7FB3C235184FE0899690A0B775F1A566EC29D5830D32372 -6526F7E7F5AFDD71B77E07613DDC4FC63EDF49051AEB59E6337AC0A4B6DD872E776C9CD0CCB86130 -5322D816732124F5978A86C186BF0A0F88E733CE38E4D7C1BA5378C5629B1EFC97806059990ED42C -5CD183BAD7E94070E4058569DA2E51831FFE0D080301AEAB4350BA290318AEC582C78D05DD92E5AF -B4424EA808629BC972E68F4FF2489C245593F07555CA6A2B25964794CF31CBD3AE5C229AB9B8C298 -06C01D116EBD0FF0F159ED2D3D7DFC73EAB4910BFF5B0B0B587CD9EA6E6FC45D63C09766224D8346 -1F0588140B258B1729F70BAE7962189B1554483392988CF230AF4077193E53330519394DD99BA135 -6D4730AB221DC6A66019BFAE564893DDAD7B177DADD16ADD21D396CFA6C3DC818052E2F71149FD59 -4A16DE0C2FFDD366C99B486C55A6E991E4D22CCB15843F0C3363676AF2F5B2D1B7EF66CCF2F12DC5 -0D63776BFFB058D70A9C76DCE96C754872D72C82A0C33F90D49C935402CDD26B6D743B1F43BED5D8 -B539424849C1495DAE73044E885A7D0F307F1816DF6244A6F2D97BFD4E200E93F69B08AF39EA21E6 -E347A47CEEBF803F73B978ADBFCF056789BB8E6E2563DE87DD9A8C877157B934102DCEDAC54D487A -1BB2694F0034093C48F10A17D32E2BDD0C723CAF59ADDD1BE373AF8C9BEB4415AA5AF36310C31F24 -354A53C0B962573148BEF91D994FE3F3D8450DD4D686725799F53C373A0A3E3C060C2E1A3E800504 -9F26D716E1F381B9F83125E4683264A07E2D8938F605978E2513DD2050B3D8A1012797CBA8961632 -BED260916338A812AE751C7B657E086A0C7DDCD3BFDDFF3E48B84751925736D1310C4910FC114387 -F3ED7FE163F91895EBF55FCB425CEF5729D99BD8F2C072E36C310523E75CD8E5DE49C031C4263410 -9D56E91A46C8C8E89FD92012A00C33D0DEC52597B5C6933291A7BDC5CEDA95DCDA5600F9AE1C8250 -54E7EE1067458CCB66610704C58E4A4FC0CB5FC933D0322A716B2CD430A3AD48DAB3D4CBE9D23F2D -092368CFC4E1F5495C133A92942EC62118D45C17723646E69407B4A89DCDFD2AB3FFC099A21D9D29 -741D68270629AA3A414FE58658DC9170C247B6E23F35C4BC5FF83009F462F2EEF4DBAC5FD158A658 -57F9B6DC1F5192DFB169DCB65621CAB2F1B07BD22F4155A8E9E2B6388D430FDE5EC1C834D22EA035 -C52E1E34482EADC36B4CAE902AAE89A7284E62B3C84B608D6BD05F75BC31310B2DD3B2C08A00E073 -7F104F03A41989D5F6B9A2C38B22F1D1803EE5D7A4D8DE44E4ABD496A1DE0C0E12C4BC96D0122846 -3F0EA9CE9509FEE987139F3DD3F9D0DF4313F555BE85433718F6D05F197C41A9D9C7A8B0D2740196 -82D49F58DD5F66B12A6520D9F226D1DF1F1B65CDFA261F980CA25A92645B86B64606293F8BFDE364 -C47D2AF2C709BBE77A70A5712F2CC26F3D66F5BE2C307A48E6F887F681D30121E32BBD87271B5DC4 -615D28C309F15AD263FB37424E56DDA6E17B998B45BE6C7FC6C28E3394A8764C9EB2DF5C06626593 -B5C665D550D4600172791CD208AE9F37BC082B0B242B0A504B751B18F4D7495172B697EE217834A8 -A4FB7CC16D6F9E8BB400BE8AEB0850960283DCE725249FCC4DE97D9886745AB6066C3E2F64DD8AB7 -9AA11667F11188D7965DC11EB760B772E282DBF13249F31986AC6898FEBFE23E3E8B8D2C33E00EA6 -FC493850ECB2E6D831D1EFCA3C2EC8EE2E394599091ED58BEDE97D7A43B6F739EB0F845EAC1DF6B1 -EBFE876009CC5D804B15ED4B56761B3CE1AF59C07B49DC798A44532297AD73D5101ED47F36A3678F -818297CC27F6AAA2AACCC9AA9B6F5459911D8C56CF499E390AE607F3790450B2B9C9BE0F006EDA0C -715B5CA0481734CFB0597478E7602B0D2C1E4F78F03C68C17C70E4B42D7D2D3C95CF40F73488B371 -8E2CB05A549944D86944D78724E266C3319AF89AE430E777E95F0D792B1C654306E421F3D63A26B2 -1E74B6E8B21B2E2B9DC596D013CDA16D08E65E8F24A84B12B2BADC653E6E1110DE2E709C1C1BED13 -707B70A421B384F20CA7A9A9D20324DD383F28B2D3C7A9C53F5D4C6B7C378D26DF11CF55238BE1B2 -4FA70DCC178DAD3D35670FE4919085EB1CD905971D76A368FDFCF9D2F0A23739851A3A6D2E02D65D -54DEE69ED5D81315D3EA5E356F94EF256DD267FD1E1A9EDC9CD63E743F299BCC4A4506233B8DD765 -2CA067F741603F93250C087D368F9E9CC4CC1A6DED567487C05BAA992B0056A77F630A72008E3946 -15A9DB24FE56A956650EC9DE90A6C2259189440247970541CA198748928215C0E132A81AA13208D8 -63C1FE817F70CA573B54577D10B73100AF8EA088208A44FB92ACA314AE5879706180788C17BB1D0B -81B6B95A1C4E0F9EA66F9B39BFE12444A6446691A7BDB03E0F03D9F07A10A7598F2166F108529F34 -CD90E601FFED3479ABCFCBDE8F051C348E48C61D95B00C59EA1287423F05666C3D36288844067E83 -E14F6B5210842C742B89F13ACD126B9FC50ABE2CA7D7ED513D43B6AC7F41EEDA416BFFFCC5C844AB -2D23D4DC09B2D510504CE98D02E72020D9E669DDAA344C63A1B75632F912A1C0DA3885DA4AF7E243 -E4A4C6493D6595BB6D56B0359106957259E59E336BAAF35BD1CEC5CDE735272EBCCAE8D4904AEBD2 -B32610C6FEA2B69941D6542ECB44D71092A3CF067708A3D087AE99FF29671AB7DD8758759B971A08 -AE1BAD78270D2FBEE37AA2DCB119D72F6C7B0C8509018A70D0B0BE2C6830EF8E0B24B1CE1141EF87 -3A4D7DCC501F808BFD94E4DC0F2915AA023076BCC8006490A43685EA25AAFC187302EBDE7FE1965A -04A5A398985D29F08E085127B56B057334D88EB638A4DDE64AFD204974C3939536B1B66A54B4DB81 -151853915718F70813F096CC1B0EA25E363B49264C2AD17158A4489F91453FBEDBDE15D7B74D7F98 -E81DF23251785D58295BA297F295AA6248A912CDD4F1111E6B628EECBB5139709E76EA4AB743CEC8 -26621D08E6BC64691CC90B3C3C1778931A28D3D5B1E20E96C643316613FC487C9B604C43463FA453 -3BCA1236286E6F5A6EEB2F1D9C34BDDE4595495A365F88055D9268541CF1654ACF478D384A5496A8 -772EA1402751A093582A6625A0A44816B5FDBE166835D598644296249B92CC90AA3FD6445C9A19BF -27F59CB0616C7306070F33C7DF4E1DE64AC8C5BB2FFAC1EF2B1B30E5A0275E6004CF64BBE2C6710E -DCFC3AA4ADD60106334708862FFA6652825BC84842736E47AE6917180365C75B27505EED3C6108E9 -898A780E20C3F606A860229AC46D0471ACA0187D6D539A1B8820F620F72B41AD1D3BF3834BF48CA2 -AFEA8BF535AF74C4562DEADCB63D2F5C7585722B77C989342D190FF926C8A5263B4F25286F99CF6F -C62EE6E2AD61C82B29D82468AC10FD27764278E5558CE8B41BA111CB2F040914451A480C93084237 -CAC8F66BB7C6689F340B8ABF0150E06D5B1177278A4C08742FE22F42C28680F190900344ADFA486D -59718C25D37275BCE4DF981AAC35D2C7E85C72A0188B8953CFA516FD545AEE0BF4B8BA301CFDE214 -4241FBDF3D204E3D2823301572E23F204C97305A82401660E12926EE7BA6EA1A81FF5C007933AFC7 -3266FAC4C134ED818A48E7DA01C71A46335C845F9DA5E960B25339D551582B375814148D94CFB781 -FC56093827B78578A73D4FF67B6B87F40CFA5E3F4325D9108CDB64BD06427B88C84105187316FA29 -90B4E3E8EDB6C78ABF164F4A9717D523794B2FE772A04DABBE688CCA977090979B5F47CEB90A1DBC -167D305EAB231C9F4260C4AD10889CB785169902FC0BED78DA15B8417453BB65856EA0BEA5245BA0 -573F623D215F6C0CF801851C305B355D26B52B0B343645FE25C78A3526841EDA480919A1BBE5F56F -C10ABEAA3E1FCCA7C43EE560F067F1AA2AFD642F769D1ACE8E2AAAF38850F0D757CD808C921D716E -96FBC07DA7860DFA70CEAE2888C0ED3CBF9586443532B68DAED9A926655C157A416C383A53D8F283 -2A4E67468112A09ADC837ED8EC95F70852921F50D4417239FC42EE3624CA97F682745CC5E76CC7C6 -7BD99F2180F8C0B7FB49539C8CC474C25C0DDE491671FF329E51BCFA779346D4686835A3AD6633FC -B5E0F67E0CA9CED8F215BEF4D240453EB2EDD6ADB22278AA5B985FA140C9834D38753DF2014F8C0E -E6DAD19E8FC54C03C1F6CB0F858986691D99592562CAD95FA0A5B2ABE4A8B54B457D42E8C33A2D19 -51C0419A72FB94FDA78ECD92BD2A1416459E9DECA9469F35E4C47DB531726DEE8F203D7042EDB32F -025DF3D582547BB1D45F7A5B70D317DF4EBB16E36B0D798E0932FD2A85B04FD67143E4B287A50416 -2C1F5A037CCD780088C5476385AF8168E12D97D44B0630621759173C8F1E3006B5B1C6D7138B7EEF -C3CC5F54E24B2C3CA7B41AACFD25E554880AAF406EA4C3C6E21D3B550B040FB1952598A7E8E6488F -E38288B2AEB6C4718338598A2BFE4D2B9D14C65732DA304C16FF3E1F8F03046EF095B65FD609DA87 -EC24A69278BFE65C905CD0329F6A486B8525B7EEA4F7AE56C2633CD83543269E8ACD6D71F500D82F -DFBDE7F7F7B1AEE67328549232E26CA55085B6E84D9E2E7F74068F93A90C4654F2F396E57C5F76F7 -E61CBBE523DBFBA6E76638BBA3064DA025A79E3A294FE7F1CC28A3B4C57DD6FDC48E541A85534B25 -E1BC11B4F78019457239EAEFD4BE9007D205F1D985F389DB22400B279C10948551A6B4A17FBDA0FF -C9428B18B43DC76EFB15FC2182216F1B60B4E344A03AD6C00F141EF99F89F24C819C3E32877A927D -84C2D006940F39CA8B71E5951673EA9BFD1749923219DE38929ECAA9CE43B06CFA7DA1BBEDFDA56C -61FF6C24F40E59B13870D5FDEB82D981154FAE5D6D5152DE69339359461A41A9713B6BBE47E868C9 -33CD74C75DB71D13BAE4DEC85E02FAA14EAD6C0A253B16C79514657B15E68CCFF9EE6AA385CFF9E2 -C53D9AE40F85C793E4E8FF50B2B7420F4FE69807BC5F37C3E300E6B3C3549D1D3246A2E70F091054 -1135BDF805E0A698E236B6496702D061241687B7B8D1A0E517DF0476DA09D89667A7AB375FD2672D -CBAB8124E511502DDBD08BA04D941DF1CEBDCCF7ED48405CBCC33774A68C5212FC6F132641FF413C -984F8B43BDFD7B1A2A3435F15AF07EF4970D3E4A0BB947C181E9CA27CC14A35BD1BD096875B45873 -8CA244F88C28728B74E25CB8C4FC1095A56CA75E4569AD3082EF194ADD11350DB3B74B96761D4538 -596FF7243B1E1B724716A144106E080D42036444FD472998460CE9ABBD05B42AF9389AC452BDBBA3 -A13A96890025789F16B9D92251FD3B3BEB2C61EDDB370A20456E3BFE5F4039E2557C451C524F8087 -015BAF3FF05F51869FB97512968BDB2B49589C1C7AF1E085250A47657465F480B7023E24C76731AC -0EAB6704123D77977D3A2C4C56B691346EBE589C619C04515D34F81FC6A17527D5D8319013C5D4FF -27CC3925E24C99231AC7FB9EAF0BBA482D3B75807AC85D03CD09DE5D9AE0B07B7A813F0449786500 -0AE8A7E00080300F0AB8C399057EDDBA273DD2E1B2A0DCEFAD3B332E6D4AC1FFAD846167DFD70E03 -46DAF84AF292D4F424256ED5AC4E104F80697050D50844A708EAC9E7F7784FD01646F3BD0C595CA5 -1EE6BD607D254E78ADDC5E15C3B6AC4940EC865A5C23105B6BE09EA09F2C05D6D76960A843B81EE4 -33977FAAC3CBDA85CDD2F4DB7C28293A77825635992AF8F3B38B4480D9A139B1662345A8ABE1634A -77496C3F57597D2985E9E54717AB2E99CA35789441BCDDEDE9A9E2106B401D9684ADBEFE40D607F0 -75C179E9CC03E59E65430DB70B441D43DF03F2AA6FF06F224B6E455B01C64FB89EEC9103E48453A9 -749B4D602808C7E408A8903091D85E06AAF635D0D529C3CDD1B8479AC0F4208C284BB678A547F2BD -77BB17C86D4560434F7AD1937760A6AA55B614CFA9FF8C9C96561AE6C8F2121C4E20237428BC51DF -2099B6C49E3EFA18E6D439E6E6981E746EBB1DC461259D8EA0F8099C47CCA27B2D982B72C9A07CF2 -1B3C05D6E26E6E286E348B8944078E24809F9C5F3D014B4CBA02533F5621BFBA1F0EDB776C634746 -703C9F73BA89B1960A496420C68F54E5B901A6D733D7ACC79F275FFFB253F389AA480084468BB34D -A1E797E43B7F6E8CAF5E8C93069A3A2730E57EC39B677BB73E3F07C2055599F7062E53B37A5F0099 -907D2ED87FF7A82C95FBAEB888033BDFD67BA3A6031A4CDC56CB1E4CF5B06B46E16D988BECCEFACB -9E1C037023D7BF5CCF5D65AA66A17AB361BE7981F132A578F3ABFB97960A6034F052D9D5AFDC0679 -782EC90F240F943A5F9A3D969ED7399254FF67D89DF668F7C56FCEA1FFDCF20481474AC8495D3AF4 -B6D7EE093E369C057F0B70858220693B398ACF8E8143558132E4391405E30A73937C53402E459F4A -A3539CF7A99A3F51C0307D045DF8B77757E92EA2F51BF0BB4F77D3904DD355665870C2B59F1ED7F8 -4FC71FDD7F0B6C5D3182DB77827CA6A2060D2B8C83C4EA4A432EF43A4D0A952CC6CBBE52A9F0CD66 -1A538973DE41FFE9C5CF55F2506B9EFEE51FBAE5E63BDCF5528499A47C031163C88D3022606784DE -2F46A9C9235AEE3D4F71D4959B0CFDC5B7E78C8C0A8F9DC99440C2263DBACB343C5C648577F5610B -50EAB1CF7FD02419EF3941C7CA0B0E64EBAD4B2CB05A0793DBC38F1946D44767BD287F5E9779C611 -CA0DAAA1E7393DBE0683C8D3455CDFEBC0E64B54B737E298DDA605227C0C4BBA87AA3EC7FA6EBAEC -39E6EF2537D5974391D31739D9FC42983D81AEE44711C823F35F8E2321AC74943871739D2DBE9748 -FE68592263E7713F27E0D49B9B5CB7A4E55DE54E6B800D15856450FFD3AE5F287B12AE4F438B20AE -9E27E6CAA00F3EAEADBE08432684FDF9931E925544A680182602A3C1997DE5D0630BD5A010535E66 -E1C123013D23966B3545C7431C39B97295BFA4099D14461004C42C85095EEACB9B47C593BC6DB863 -533A8619BAE09095DE8ECA432D4DDD49AA600D277E75DC3F5C6631E2A05382CB007825FADB77438D -CFA78E252D79B6A196D5164C2FEB85D75ECA25FF80B1D97FE10E87960CA0FC47C41D3A213BF141B4 -8BC3AAA93FA86245064668394665BFD52D12C3BE4CE39EFD8111754398A944C3FD1AFA98EC337BAA -AF899D35E804CF416AD7FE45FFF13FC6354007501043F98FE8428DE8013901BA6A28711A2CA85A27 -0BB135B72F1D5026E8217581860729E94F2F1878A0E96C59E9F62714FB5F8F25003DFC7347E99007 -8A9A331CB3A6A535BC61866F02513DEB982C4A13ADBFBAC3FF70A7335F40D5489E48E5EDEDEF1619 -1973D932479C62183B0E25EE8C4F76D4F1AE45DAEA4A12AEDD9EF81D248E8D19F8C8A5BECDD1EA1E -98783EB7A38149170851B1942C96C53DE06DEF80913BFC04E539EC67C110498D15B78268853E5C72 -F485F8A27B768569E54241F6115875E2973292CF48FF91D45EBED627AE9F0766D22201B20AFDD40E -5B17CF337F2999E0BD15B86E46EB3C18FC12B7DCADCF9DD50C6C7E3F37E615A892DB3F57E250A072 -A49F7277DD6A2C8042698233D35A699B17ECA5DBDA6D250ED4A16FCC893BF0DC2E33FB1EBD7DEDEA -3C1C39603C8B7E1A5A833A8FCDD5570BD088749BB232615366687962C7E56ED089CD7B092505CAFA -5A80F503C4CF337F07ADF0D106937E25670839D491F7BFF7A523DB609D126328C16113ECBCBF9C40 -04904427A108618AE5D4ED809F8CCAF72251104C94EC5BEE21F91B179D31DBA79CEEE5EC7FF698EB -84AB1D2D1A624F58B3622A78844CE51498B2CEF38EAFE259D22C7BA61104651A862008BC1DDDA58C -C45F663EB26428DAA85E7785363A69D2790996EF5D9621D53042F42F794962FEA46E46F37B8AD1FB -76FC8D5CF2146843F8CC625139C75FB42DDA71A752BAC48F294E4C0C8289FC46DA5EFD9C91BDA6D0 -27518B7E81E8B21F755A9615627D5812ACA674D1527A1185EED4E3C628196E7D0759B1CAE6B9B7E9 -01E9599A65230F1EE469CD33B9BD9C104C44E3C1AB966C9678BD0AD78111A4E0F2D07A01A038CEDE -7036D0534D684A1562A17AD64A00F279200C0371B1CBA61747671D2A21D3F9646CA290F6B82418A9 -6FA177C6278277504B7FBA936325F5FA124AB018A15DC18D2C5E8F93CDEEA52BEEDB78A57828D81A -3E6C38B9FAF3DC4EB7273ECE3EA4482A1C6242A335862C2C3717F9C9ED95F77B140C4E1569B2192F -C7DCF702D0BC9A50428EC406F8BD0CAF886B4D979320D3E429816D88F7C7146D960AC12E70F2CB7A -9F4E3E366665AB3F1B4B6440F55EEA26DC9EE0096BB7763731740A537766490C8C174723BF0EB40C -53701AAD12B21D436ADCE22203C1053A9DC4E9F17AE617888C4B4E6F3A720E4E6366BA628221A387 -D8AB15E04AD69387C310D3528BD2FAA5B22BFF3FA494F5FBFAC4F771C9C7402B95580C5AC4BB3AF6 -92A70CB2C851FA5CF1173EEC3EC29B5A05A0B728BBBB51D3B7AD8B0AF17A1563E82FAFD93F8B7118 -1FB7AFE352874F4EC6D334AB6747519AB8E847B7BCED33EB5458A828E074E74BA621BDCD03FEA604 -7F7B6ABDA01FC7514BA1AFF0D4D0C0CB8F4E42D5A87E395D9ACDD02CCC220C157153422018725846 -009A3ACD8C8CDDB66BC6836B4026FD9F526AA275D06C813179E5924F26A25094E7BDA8BD26AFC4CE -B41D8964D4FC4AF1DFB0595BC5D6714C32F15DC7194E9A3A73013C45D8FA55CC0550A12D9AAE8E9F -F199FA28EFC2426D8D1DEFB93A65717AF3EA8E2D5B4AA8EF0EF38E9600F7D4E7D9F1D67A2E63ECE4 -789FA74B159BFE2F91C19B0378BA52E93DF12830D99553B6618645E26126842AB70262D96E35E5E7 -50ECA0CE3458B3E51BEE2F21191136DFDBCA39BDC07939E521E4F492F392DEBD029C1EA237BD89AF -76BC89F618D530160AB16269FA6B693CF14BDC4EC7C630025703C5337F61458FA09104EB15C7CB20 -AA4C9BDB7CEF3A09F25BC7F3149951A7CD75372993B80CD2112F7674CEFD6AFA764AA3486730D2C1 -897A264D82A91709FEC4A21E30D812F558451804EE6F3DEE2C4C437846BCBDA07C5B6CBA1D94AF02 -9163B7383CAC6E088AB1DC14ED3743EE77E26EA7AD3119A76C0B5F925C4DE305CD7BB3A09A453947 -5B9BD79BE28FC462D8718CE05F9D94CAF3387BA55E6E447BF81A9EDDD3A34E17BE66BC52B0C0BB6F -86F6F008829173816D205182ED2ECED319864A796AB65D4E3950288BADA94FA32B6F453AFDFC6C39 -A4FCFE60353A64627E2057D4B379D3240012B3BB0ED0C7876CB83C1BA5EFB6E2A03F340C2B576731 -F848F762A7E1CCAF267EE06D621BC33FC245D0E1547ADC12CC0EB58B26BABDB8EAE9CBFBAB93836F -FF22BDA1831DD01B7346AD377AA298D84628BF1C07433284B0A90FC89F5AEB2651BA2CEA405D4F52 -DDC0E74B871D43F71EB4ACE0D2B401F9348EAC3A2EF0AD295036BF6CF6F870D58E00B619D50EA7DD -77BC28DEF91D805CD527DCBCFDC16C042BF9B874E3B1567EBA4C1E70744B9E7E5BD1FDA6A5FF6E10 -1613FBE58DC46CFAC1A65ADAF65E49757E9304E2AC9A91E0588600C709A61D4231730073A36D473F -518A145E141D0A5A494441B9EA99AC23F60F54F8127B477E1CE698BB4129B4B1DFEEDF10D9E665C2 -47A62F112F5CA30B0AE5DBF3E495FF06EB28EB438CE8AAAD84D5F50FB56A3AF002C23BCF66ABC270 -7AC233FC0F2723DB99D2CFE7D3B3667732A531F5DC315CE74EDB9050BF75D29E6430F57CB6778B2A -CBD57DFCEF896E6766C8FC5C9F9FBD701CD62CACF33EE0FC95E78DADD205B5F42CC63024624BAA0A -B4DD447832B4E1DBA77BDFADD223989F8E958C8D759AAA37930664C6EFEC708116248A2A7AF3D656 -DDEAFD009B7F5333854608E67E5E588A857167ADF9225CF6C641F5E19C3E08678A281199EDDAC831 -B57223B1BEEADFDCBC8F6F25D32FCA2336C808162E8F381656E847FB6CB13969572425AA05AC830C -33DE6E030F86A3A85D2A66A77F103C7042C97205526DC882EA9A00EB8BD5519847EB424C15F808A9 -1652A6CC89B66A5731126DEBADE123C63D88A2E550FACDEB3886FF98646000C64B3A91078012CA30 -904B71737CEF6BECABD43DD702880538F5A70085E6CC6015D2163681067C3D513A8C66032C34A0FE -17A58AD4BC97CA69BF41F11D5E910FDFE9729652D3EA21F8DD8CC19160A8FC77573B1E9CEF4E790A -79D8AD6723B6804E9616466C935303E063DEE29CAA6C3BAEBF278B818C2EC2F13ED645AB452397BF -00DB8B26E115026E256746CD0C78A959364FDE6DEDDCD0F441A61A1EBA32C7BC172BB09512148D1E -BAC9E791B7D51B71CAD2DC9B83B2F99B3726607D9CBE58B499A13753CE87FCDCE21C0AD0528ED0EF -B9B2C927F57C78C626248AA2B835A0791244C5896686A66173EC9F802C4C633A42B086334D2A4878 -0E53D00809247BE64E529F96AD2F8B3922A6097D414DDE1EC76F9552F9B8D58B8E34F359AD792B2B -E50C26DB05035E7497162E7C49C38D3CD9B98D620AA67492BE5AFCA3A81A7080185C7F0B5105223F -1FA77805502A2E8C5FEEA27699858D84A95842C5F2FB68686D59FE24091FCDDE139B6463BC6C7B1E -0E90D20A83651AF00C85797BB9F53ECEC1675C7EE636D0D9E77DBD8F89670F855EE4D4800FF3F695 -0EFF09BBF8A0DAF6B8242840CFA5BA73BEB95115F4A78BCC02D85ECCE0C0F2EF6F328AD1DD6CC049 -5A3315B414A4D61DA50DA46D7ACCEFF6EE56451805D26B0359AF193531F95F6589CEAD6FA041AF15 -3067F88A0A2FECD135C56682DB2B45A71D1FA737C064EE9A4F404BB72A70B3AF0330359393247EC7 -81512482579865240A23CD8479F21C2C44A119EBC4E81B308DD8AA86E60C3DD8ADA50E0DFE8308EB -1A7F201EDE8DCFDA405AEFB47E0E6CA7DDB376DCB21D37F7ACC4D3E9F26B03A8DE0E8940CA3A9E75 -963A389DF8038D2C486072F61C0CEAF500753C7A6352B1CD0338D9212B42A4D3DA23D5BDF44C27C9 -4B88A415A3242FFE2E1B332477A21D2B9CE075EE479C6E657A4D8874A8C53964229310E01ED4F3C6 -86FEF5258EDF3B464DD6FFD7F1CAF473BBE722D60FB14AB4918E93878A8AE4773930B8CEE110F476 -7F42A52D9304C55BE12846C911A10AB9B2E036BF9DFD597F5348D42233315FA80D0F563C388BC253 -2103F05E90DBF1923F229F980A2F4585C7A373511372D07DCBACA583099EA972C03E5AA67E663882 -6DB134564DB993CEEB6E7A6659C7C5C05C310267D5F8A24EEC2D5CC3E3F3C808E6D6068D1A57646B -37FABD98ECB7BAF99E7D9AC4414A491A73CA34C52F394352F6B5A15F0FC4D88622DAC694699C2464 -84ADAC3B1D366AFEDE2A2CD2042C90516A666A19A91C80248B11224BEDDF1A320E230739E755D098 -B6A67315535F4C187CFA67ED817A035056353FC859BF286317996FFFB478A2248B908FF12ABDE705 -402224A3EE5F463DD3D243875C84E02DB968ECA1CC52C75171EA50D6A88CA91327A7AA5795019F36 -C0A19C093A1C9D3723C7568F9D41F2E4FFB712FD47F897703D7A620B586B81936C84AAED61D84332 -B3BEBC4F95B796B93EF7A1F565C494F8A65EDB21E2EE18DC025522EF8E599887CA2836069CDDD889 -88E5862977B7472584303198CCE97EF9F9E1446D1F1F5ED1CFC666A8A0C3A03E1792EFB60A9B4065 -49E0DEDF6ACCDBD98742568B4735A747D8E5DE21E630125AE0C691D054E42199C15B1F80CAFA6E7B -B2005F374A9A5F9900ABB7409CCD50C3AFCCAB1214E6A856F7C7EBA89BC3291801E1343DA9DAD2C6 -ED075C8ECA1423B43E587AEC67E6145272814B3F191B3C285639F9E2D6E148A02DC2CBC0E054D629 -5CD05DBAC1950400A9189316F0265B86A732D302C5BEE8ED233768F237C62600CBAAFF3A110D5EFB -6CC7CA3B92D965CA7C5E8D3E64ECF239FE2507FC797FDBE54C1112B28D4DA44C60AB09D994C5BA78 -D663A2591934CC052BC70CD1DCA3325C66C9CB982E2039F5DB70C848D3DCEF655B1C2CD0CEC8865F -E8E1C0A267BE4F707ECE6F5A3DFCA3CC1EDF92C760439F51AA69A4C1801E96CA4D6EA4AD980258F3 -D15C893913ABCE09101984C61B91D603053E49A97CB82FBA707DAE8AF1D579FD69C8481CB7B712CB -CDDB4D287BE995E32C02B399602A08B9DD849039B5673F1930BEC7BF366EB082D2CA5DB2385C8CC4 -5BE3FC0E31820191A814EBA7C4F23B1938E6C4D800732787CD2CB97F762DFC85D4B798809B5F2254 -D826CA42B32695428D120298B44CF38494E56240B75DF1E41E46E53C44DC505452256DFEC819408D -605FF14D6C1F3F152F2FEA96EA0AB3B472D8704E06BE9F8C3E8395CAADD06D6DA033E81ADE5DC3B8 -3DAFF743C6E9E48716003D358DF63CD7FD3E2F727D1F2D0C29962F76D5C95ED44B6F08D052025A66 -5785F264A3D5F5593677B630E628B5EA81FB37CFFD7A30B7FAD226B6FDC82B0878AF4C0EC4F4243A -807B9839EA62BCBDF7C2E9B30A623876E632E084EBF4A21EDA04FC88A1C07021D0C72EC3E969D449 -FEB08E5826EC20E55B21EA71EA59F6E3B0710B0DDAB3261B4A2029ECAB68C19ADD5174E55D5E984A -4E5F38F592A302FEE6ECE732DDE841A28672C620CC5D687455A5C06FA9FE688394A04F96312ED025 -B7AA6FBCE2925F3AE559CC1886BEECDB70822E2E5CA3F732A87404B1536AAC469989E9610CFA440A -CE43875A70CA51F36CB6F629D9424C1E35A88F92D5DA3CD8CBAE6E8425A36968E21F4F30349749E0 -205BFF8D552837D6FC39532525370BBAC833F75F1854C93FC533A4AA53ADF7008173A70D94A4EBF5 -38EA9E62BCDA7C20E0A073BEE2EFAC34D2EF1D03BABD5147659E50B557045B2EB89DB303749B04D3 -F54B43FED612FCC68206E001A7AFE90230D9C12F74A32C7EDB5D0241DC3A5D51481FD7C8FAE08FEE -263FBCED7C7D911B3A303C835AF5FADFD218F61A9D6DE80485ABCA88200047B094441F7767B97A24 -E8C612590FA2407BAB1E8B56C71914EEF2355DD97CFAFCC192BC06FCE063D3D9D1A629AADC75E3BF -207234C208E7E30663EDD691043065C9CBC473D97C6D4DD3DFF59D6A9ABCDD4412C3128F603160AA -D8F81C6E7A4DCAF35F3A99B4EA10A34375B477C2BF846521A7EABD4D28078E9340452A198F3F5ACC -3DB7E3908939FF6E3709C6A3FD9889439A4AE3E10B618CC92E14B68429A3AD2C80940A1079452EC2 -66F254657BE7D79A2A24084AF73F6DF71FBCD32BF6913A3FAB25F977787F7BB0C3A3E8BAB38D7A2D -B0B4826950643DD1E03BD7DD1FB149A33862A89226B7CB454DAF613128C2075470E42E70A9444A8E -6ECA526345AB48E6F5160BA23B5BDDFDA6049EC44ED1461C7E0DD514B16E2FB285F72039DE3C7982 -EFD40D7F6C8E8F4CF35AC71B467BFC578002E8D2239A2FD2C4BCCDD8AF3D7DB1F4AE7F2D2E0811DF -9D0155BA6EDE50B5F052F14F6AB884FFF244D8806C07EBCB49ED22D85DF696995991A954AA97A1EC -D86ACD76E061B7541E87997FEF0657A826BD88EF3A4A5920462C6595E7A156F453291CA044CED810 -860C3B0149BCE73BECA713040664AD0591304106129600AF71317B0D2907839CEAC99515D357E980 -B1937B6E1200AACADA205421001F1B2F91753E80D2263C56AA164A74701A8D5FD28E46480B0DD963 -A683A1F355D7FB4463C7347C94EA5E2CA40B60B56297CB22D972C5BB10E56715A955605256C1541D -9F3BC5768A6F355CD3B863F0FA1A781EDB49368F51B29481CBB41D4AEB07AF9DBE8F52C5D0FF75F7 -FB6431D37D6AED84D78C778871CB0F715B4F07580F23B586C969C81B471FF6A6C7276F7E141E02A8 -584D4B9AB00E7BD643D2C3FAAA299B1F1E25048461952EA42D4882768A70DE46B213A287F8D31AC4 -6D5436F22A796C05D1FE50A9BC2A928066627A0D87DD57A3AD91DB446404B41557D1457873482005 -EA20916BBE46C613F456C849D46BA79D20627B446B2F49E3FA309AE14F8C420CFD94922CBC0FB9D3 -5A0F7DBEF577F1849A1A80E0011DA8AC082A8C6F61658E65AD177ABDF23EE17C8CF0D26B9FA3A6E9 -4837EB9E930336889767A8D7EA3CE980A8EA95528B004957BE6067CD9BD8E02A0F23CC1762CCA656 -D33412FF45E917FD4A03EB6E8C1F43FDB0A8965A33B4FD26BC24A20B304CA817E88495BA9B361A3E -933717FFB0271F7F70C5D3CBA1E86D0F51BF3ABA194DAF32C35C796627D00C7B2271ACE2463E37E9 -7B3C826CF3DB60028F240F9452CBE08F7EBCC5FDB1BCBB3C327A9F450B9E5671916101D6E3E5E458 -CA31F04D12F592F83BADA2C3683D3886AA3B403963AB5DBE220FEC00037A745839F67A3635DFD3BF -F08F367482962DED88ECF6322852D643A54D5D303EB04BFDDEE9BBA1EBCCBA7C653B3A613A8E719A -DEBE3CE1BD7E754E5F4977E863E3C2D388A65227B451D4F3A4F94E06513CBA4AC1F2F511613FF035 -611684CCC461599000E546E4D972CA6960E095A526E4735A23421A4C9B597ECE08AFA2753592BD16 -DED93255A1E33DEECE3C5EB77B94670E8137F2A4A4B98AC193258E7DEA5DB8408A806188F2D1DDC4 -40CCF0E9A6E2F0C78FDBD7B68DD4939D2458C1965BF8BED4564B32462FFF3EC892C03B11D3EA813F -AB4CFBE8D3016329C5B7E3DFED0F08284D44AA0B7A2F6BC96EA4503E8EF52A64C22BED6B452581AE -8FF8917D53976471941A9116A2D878FB2541B561767ABD4E31CCD8A590CA03494C62AFFD64EA0A1B -C779173DAD84999C7A8D844EB1259DE7BB5B25CD023537A474A524EBE4660B22568949E624D8FEA0 -AD37F4CE1EC75955EEFA49C6BF1803BE87E9C9865FF3F6B8525B8C15FE8835CA153D27E6C0FF0CA5 -1029A7A9185D25F0F14D86FC797DCC1F99EE97E2054B9C2A2E06FDBEB8DEF6CDD368BF23A858D9F8 -C1DEFDCEAF1B4A8DE5EAFC604CECCF0D285BE00AA912EAB66EFF4D37AD2EFE34853BBFD87CE09B18 -749B489943EECAE7887B006FB827D10191DAD18466CD1F86505879310A8B171F902EA0C26A388E13 -B53C700272CEE2BFB47ACB58247C13449C6BB9D01232C32517358F1A3DE064D43C18F8827D53789C -CF3CE2EBE78949A6ABFA1A6B8414CE360A5E22AFB7D1DCE6F5A06182C3B984B4F9BB1A905A9D5A14 -83750A1DE0A857CD5C06945EB7D4A2A6BF1237F32A154FDC06D51A703D44FE052FD3C53E9E8F417B -35D1C851F9203A8997521529F21AD8498F96930AA77EBAF82EE02A57BC77C792D9F220294B45F48E -A8FD94E01CD25645D36D168923562F3FDC93CB79DD4760DA0C103C2675722D7A1B79FCB4245ED12F -A0DB52492C9CCE58B333CFEE822812F7DCA68E802C451B5CFAEBAC608B950386B6C58239D1C62D62 -4DD5D15782FC552222CCA06DDF387B373E32C3C2864C63C768350C37283760F3515A5B0AFD66C48A -B522EB3E808C061F5CD6BD96CD18C9839D30508E7D4EDB88E8F11E31E10919B16B7971F06D7877A0 -58D8A4944C84FC6CAEDF3341B48B6E0D3C7B85D710E0C35F5B5053CF4B4798B3778CC28B2DC7AE0D -F3A49F9F3BCD8E95D746C35C3F47D68B8AA35D97AA08E711B5FBE70D1A623C82541EBDC51A827D0A -69E6C049087AD26F256EB7577F58CCFFBCCBA5A95D093DC29464C9A38DE95BC6B1853963B2DEB0B5 -7AD1248D6F1625E115EEB9510B5772AAE4E3C866657DB0B3BF0E0AC345E116F8D4976B770876FFE3 -748C36165522991F46A36F193DD1A1C94713673C7E4C81582391B636C72DE94CE6254374F99B623E -5686C13D8A8322E83E11BB0B0A896C6A8C2C4F756C5385CD7017F26D23F7C3EE97372C868C8C9155 -81723BB6B76B4C3CE8998E4FA6CA40B633DFDAA59BA902A4952DA90EC4FC3CF0F2676ACFA7F76F78 -236FA2DE10FD3545357215246BB7E527F277C28B353CC6D79DCEF21BCC8F77603CDD58A2CCDDBE3A -9802F941CED8E035313875319548C41992A2BE939A17CC109426E33825AE59BCD17CB19F50D972FF -CBE7D9B4B0BB095303D9DC9D406696C2508D6CE99E11CF00F6461147E97449ED5F486D480A86D3A7 -ACECB7E9A945984724EFC21C5079B1FD03ED803C2DEAFCE3327D2D7827715FD65D9506216C88B0FA -26935E95C64114A51919D419038B1A7E9C1E829FBFB53275093752DF19891A97F3CBF7719C1FD6CB -17019A6D2D25360ECA804C4B35172662CC4769D2B785C6C87E5A4ECCE31704E59F71263B7C3CAEC8 -ACB4C7426EC25F11A0042323EE6C3EEB04284DBAE2C770BC419DCE79BD4560AEA41571C3B595F525 -60191DC7A8FBF63D413A77A0905E517441B16C2B501EA2F9E99CC38D052679F288FDF1894542E3A6 -6989A0090185EB2E75134BFA3D9147C3DB8A621D9D35E37786853779E157B47F71626D6B3E633005 -9159C17596C1B87FE2B4FF47ED9D78FA4C2160077276C8B58CEF5DC030B4A5D83CF257096C047FE6 -4DE307C598B815058E72D5F57DF5C369E664E137DE29349E2F9DCD8C9F4EBA6E765B6327D7A20DFC -B20711273FD8091CBA605C4C494248076F7E03DF65A6A50164980BBBB708741E5BF6056E6F996DC0 -7FFF408C5B8EAB8DCEC315E92873228C805D4440A6470E3EE3983758DD211C9CECDBFAA4C9300CBA -00608A4B2404A3C7AF017A3B7E67F39F0B51ACF950D3E75CC7BC2B8D3480202FA958E8EE0B240501 -5232EE0D264C7CA02C18CA45CB3C2DE322D3EB7F00F9455DB6C5B1F4E59C3E95520EC36D7D903CBB -625D70B54BF6F8255E412604BBB29FEE026CC660577F91DB1DB4A613EEEFB20CF7AE3CD89D565AC8 -38416B01B5DE4FFA5550D17FB51FBBEBE21CF1D56038863EE931B90DEC2E211ED42BA92EC244D4CE -2C4EC5CA87A026992772DC2AF754FC982B94F36EA7B7BF75E0ECE90CBB2A6AA1A012E8898BD679C2 -3CB3827C35D5D02F0569C7AA82615D4AA67518ECF668D3B57D6EF1A8013424AC2268BA0D9A74D588 -79EDCF6382A89D397864940303EAEC45A38304BA8B1CB198967AE23EB81054BE74B16909A405E8A7 -799CEE3C270FE2A6DC50BD7370B6B2C8FDB9A87D88D5D40348D3984E39C693B6F4486D994778607A -80A3122872DD65E40492107C71C3CF708A9717E9EEFAFBDDC239C53AA9645B711038E59C8B861B37 -411AB2039BEDF9CFD00F08D9C5D76154427FF5DD39878CECC5D7BFB3F1F035087185C0981F3C2139 -BE84872FFAD3408531C4EA9387B89F5E3EC779E8850D50992DFDCF9132BC551E985943B07618AC10 -D1150451F0844C0DC41D6E17EB508DC8689EC726400D5A7F6FEB3CC7BCE05F09228B7CB2C5393664 -D8DD9A4B96B1020EF25D70AA2D91CAE93AFB5F2BF0AA18CA5C599FA1A708EF35BF8F7FFEC9AFC1F2 -42870D028B2B1459063B493943EF1283829783E1010242E5CF4DA39D93D506F3892936E7D6CF1124 -70A521D397438733D053944CFF12D6FFAE8246F20618684F263715AA98E15D72A526383E05C23214 -B78338E5B476F0981D90056E6E5D0DB66B1DF2298E597B2ABE1D817E18BEB056E65EDB4234342D96 -00470B1420C9210419D834E431B82F58608C87AC361A02D0F1FE4B470A3D71E0D21BB87E1023D428 -E23D596CB9E1A2184403A16E36E644BCCF9BBDE27290485057E62827283E7380AF786BF395B3961B -A5EA469C315763FA59E0F176EF81985F38B882DE56A74D128E256D1B89939728E55A92ABA21A6B78 -44FAC1BA7BBDD8B34A18194A2984B000380FE9F672E83EFDBF276FE797A325815B0F25CC95C97A9D -ACF56D583486305D7C9E51A7E337D14E3B900333EB38FD93A99587DA2341B10C059C71CE080FE753 -3C0F059FA40E560AF9C4A41A4BE6FB45846FF8F78165E10B4AD40F264BCF5596A1E8EF8CB6EA4B1A -3A5C69059AB1563843679ECB2511A90E8898F54295649CB73D277760D8D04ABACC7BCC6E777A0530 -E2067CCBC08673F9C8C178F9D672AC8A15E5367F0C5651B53E75E0CFA57C931746AE1A679C246D7C -9417F1CD89DDDBD1173C2F880B7B3847CBCCEBF99F7122E832D7C9BAFE2B54CBAA1ED48158DE3F36 -238B76B0E67644A28AEA996DDC006F6AC0242E4B667639E7523CBC90A0561193C1AF34481C2EF402 -EE43A82E1EBF4E3D601BB36B2D95CD93550D61CEE7A94E72F6D30C32C8F91A61E964B1F66ACFC398 -7F95D4028F116E9A9A8474AA29C1C1A984BE0E393BDC41DCEF6A6F1018DB60D52024899D8EB5D55D -324D73F39BFA47377B9E15B3B06A7585589FCF52A54684173E5183367E7B0952DC4BC2767C4C6247 -B1D6103E52BC7B7EA6298F454C5D97AC575F19C10ACDFF4E10C7D3755CFAB4200CAC545269FF1D8D -B0D607C7AD47F40DDF257AB4E7D0750577003C13E4941960C3DD7B0774DDAC18E8ABAF8F53E03CBE -F6D57B44F24CF821014C064278FD51B3427593D17694B4ABCE81F49CBB984C5878CDF0C38D1ED7FD -99B0B9A3BD8D8FF6219588B3B8FA59D0CDD1D9B2F65122AB45E48F1757467B9204926140E3C350C5 -A927A2E700173053EC35D3F1DA2D7258714C97FAA857F0898917BD94625C6D1E2D77138EFCAAAF51 -7B17FE187A2212C24A881A2C6A647DEF6376ED80AE4175C5EE80921F001995B44E49F0D33DD9075A -CF33BB03671C0BCC34AD5784AD1CDFED3A6D9BA103B3DDC1CC2DE74DBB576A0277715275218CD19C -A8899209125266D8BF1286F881DCC2C383749D1E768D670F4099F7DE959EDFE852583183C9111601 -2881A56A24AAF020EA45CD5F39660DEBCE30AC1C7B8CFC60387B1B0C3E361BE612FDFA9F01B7E4B4 -A18839A2C7E0E393EBC5AD9A8A4EBC316A740C1C295D9EF5F4DFFA0667F9582C0BB837B142C4CFC6 -B1798E9476D0631111033B8BA75A10FDC800E2AB1E0E829632F869CFE4737BE9E2800759EE0831DC -7D1195EAF80555771981DD6DC6606812D92CB8EF86447F5F6C6F626D0E265C67E52A6319189EE349 -D48E49DFE6A9E98F76C414A1E3217AE0A215A17E54AA498F4ECDC50242ACC7E2322F63BB2FF2189D -057E7354E32A3ED1803116176B9B9D0129930F919E2FEC280B2C8924E49E7BB75768A2EE1DA8ADBE -D4E3589906DF1B923AEF84C1BD327438B731012E69BB0D43A1842CB88BB54EA4516477F704CFEB28 -6E3EA483445AD4D74586FCF32E96D366901084365F693A53C5FB532FBFE7BC0CADC404C4985042D6 -8DBB90A6DCDA3531EE324D558A214F935CD9FCC9A0CEBE9B5FB0323F4B3820529599EF48EE068B5A -CE85004FEA2984F0A86F5AC9D56163BBFE1142B774148F1EB0A4DC89C3349052533A7DE66729DB24 -41B82F8F7360111DACF69293C9B281A0534F3E9E9224A75C49A832F28B2E497262475507B6DDFA9F -01CA0A6696E3F5AC7EA68595EBA0C2EB8A47813FF936D84AC1B23ECA7AA2862B793CCBB0DF9FDD49 -31BEF354CEC12FBF478559FEC29F81ADF4452E83963E56541D31F3691C93A50F0BBA5E9552C4F2A2 -3A6E53060729854A3DD71CC4308B91957DB19E66AAA18FA67055A950F1C2CFF78A03BC1A588CF624 -696068068719AFB1001C4581EE072113882D9052B21E355D401ED8CD24D067B99E616BDA5A0A5A93 -36FC499632B79FF2FD0DEFB096EF46B75E2D4E0F48DAEA239719FEC4D9A29818F5875FC5041A9EDB -D26CAF0ACE14CC80BA49BBA59E918EB3D8F1E541AA16026585A2F72DF7D83541816DE46981FB3EFD -0C30E458CFAD04C79421AB7C4925E23AEA07F9F018431C790002596D26BD9663B51B699DF53E4882 -CBC34EDE88EB55045B889B6062E35FD1E018BCE785157B85EC3B9CA6C85D4B16238275385B8285DB -012D8FB7C9F5B946A41D7A0FB878FF72C39683144D8A007CFF631B43748F2D5FC690300F9BC0C837 -006B92ECEBE0605E8C3A4A400E18AE8997D1B45FEE10068E247C647CF82C6DFBE5E881D511FFA687 -B7AEB78546BFD07D5F7EC242DCEF4930D8AAAD8C6152B6642AAC325963FD147F236BB850A9966573 -9D06CDBD7CA79A527DCF461E33F22BC9C5DB00DA2BD3DDDD8C99D99793BC98282AA8872FF96C3942 -85D82D9419EB78B6AE37A5F519397700F75D624A09BD255B576E955A323E784E8FC31131F003B0E3 -024A4F58FEF2A6C043796201FC425482E1155E229D1B2D43EF7B0D22322B22EF5C9A1BE026A1C3D3 -75EDAFF99597E1E5477952A4E8D2ACF5D014BC00DC2A272FA62B6983E27D228881E2EF2B8B95A681 -CBE90C5FDE16331C85222FE2A16F0A3C3000A63E2E21666C0C119F8AF89A543D37977069A5ACF155 -6324F05204CE8CAD50FF4FB630D9CBBFC324DEDA584AA56A99D3A76FF55BDC2C2EA3A021361CCD4A -83C7A5E2768D210FA6DE889FD48A39D679C94EC3C99A8D33FF11377DA7F6F1B71A2A05B302ECDE95 -4F26773F39AC881542F0D0969C3995C3519A8EF70B4220D86BF01BEECC6462855E7B686E1AFF1CA9 -1FB8FD8B4A69E10EE0C2AD94ADD44449506F9B6EF43641F2026EFF6E605C670560C2B74706FB949A -A7E8CC6A2D0D6207E457E7FD87EC1B9092DC68B9143947CC8ED14AFDDCBF8FDDA228A76847F96802 -E561F67CEEFDE45AE587673983FC04C96744DBAA83F2DC838D633943C75DCB9E6410474EB27B348F -26E505F0AB90878940E846C5E9F3C5FE8C3558C3236B1B88C405716949B8506841CABE1717474BB7 -C30DB91CDEE33B0F844811762FAEC535BDCF84C1C747CEF9B1FA61D2AFB5A81335BC42C06A94D7D5 -9B7EDE55BCF6F9867AEE107555CDD084B7684C2C87087475A39A9DA6347BE281CE5635A4D07865BA -98CE26C1465B1AB0343F49FF37B4D0CA9F3BB693D78DC3B21925CB996A038DCC172527FE57C07460 -EF39C07D4396E7FA970D9F22ABD21A9C794B64AD96762C7428F59A8757C36D6C4FFB23216195A04C -2A2C2E7B10EF7193931544D782FEE4B91E01119C5553BBC6252270A8D8C56DD62D448F5AD8DC69CC -B45E1F17F0AA1E445129DD00F000005B23D38DE93A3BE55A4C041947F36B4E4536E307D0180553F9 -2E46B743881CB5D5386C48C7D5F84C2BCD06B9C501F78C7EE61FA23516791FCF4DB278AF688A2E60 -10A56692AD92008497487EDFE4BD5FA083FA544138B20D6940020887E35D46E093B71F7A04A67460 -DC8116B4D4839625D7CA6959D6831CD93F81AC4EA2709036DD738364FDE71113BF22EBF13DFE1642 -E564701E6F0FFE7511EDF03FE448C2B28C64FB7D54B94CA576E481FA56B2B18AF10C71F699B6BFD4 -7459CDE1869D0FD306BF489A6F42E5B2F05CCF55BB6B9526973D19CB134CA7F13F1DB3716F8CC217 -73A832568C16250B5CDB16DF24BF81D49F5B37018BD310262EA7078107868AB0216CEC83CEFCAB1E -9F2C665A31585CA04DC01879CAA79AAA5AB201B516F7052B01B16BEE5606098393B0E5D9F9E5E3F4 -EB20F63C958E796DF41CF28839F5C62A0431648745D7837B519F3AA36BC6C08EF040CCF53D9B6D8C -0C7D1A84D707EC57A3C6AC9A62AB37251A01A5ED40FDEC6F5BE6E34C6A91D058319439778A2EE5D0 -363E2E1F33463C33327D05FFC0CBF08D5BC457C7230448972FB9B4D0D782BA7DBF10D3FFEF8BF523 -6EC16D4DD6D0D870D9D5EB5C64C9A46A4F583D4F831FEE74B0E5B33A09ABFD4444929BD8F638CD72 -EAB99CF2E9551DF427683964A592E49D186F285258C5D5F62196A98532421D73E3495F82695FEEC6 -E1952C562D546B28618FFAEEBEFF03A57F4D855021F85B0C7BC37FCC6DA9AECA099B646B99D41896 -09D3FF2D56422F8C37E97640293EC7C90E3380887836F4938FBF495CAC14FBA5648D89282D8D49D9 -1AF73ED36581139D8BD42551E263E830EA3C6EB381D85C42D74C50DB0CCAEC03F535ADE92128A016 -0E811C34748309AF7604919B66CD43EB5CA975302DCB6076FEB6BDD6FF55976FE990FB0CE9ABB11B -195403FB26E3D6C6A0DE1C5BE79E171A61E21F79EE8DBE7A832519813EF6B33EA098C2C32ADEA219 -AB2AAC8B093F40000995539D1276D5F2EF84CCD099B71FE4269BDBDB6A8D59C86F7D2E3FBCCF8773 -D0FAE97640BC1AD43CB4B992BFADFB09DBD0CAAEB8CD9DA264187C4F97300E9A6C9DEED5525479E6 -05C65AE336CBBDF4E5D7F79AD098F977285E065579B748FEAA97F2A753E1F962FCAB68D72BAA8EE4 -FF6691C23E31BC0F3E981A96FB440404856AE1AB32A7205B17D411D8F21C8C93B704D07EC594422A -BC368CDA2B1610CE6A973F4474E12B78B532666797F5755D269772C9F5400B3BFC6C58395D38527E -2CCCF29B56123F7DCEF3BDE5DC1DFC5B0293BB125085B1D2D929BC3EE84F4FAD571A4991C3DEE03F -2DB3A3097E52B1A7D5C73CCB6148EAC62E8E36DE9A71C57638C6E4D5D9DED18174E8C390E50B4A5B -913C074EEAEBE390B214B3A68F02862B9A296DB4B409769649E51D738CBBDFB7702E15C73C2AFC6B -C37CE15171F4E822CF20EFE55D9F061AA43E648989628FF79E65932390CBB15D8E621333B18B11C3 -BDF96F841D7434E01AD501FEA964A75B248A35CD9DF9A37E48A1E5A09C624B93CE44F0042FA00D7F -9EE89B9F7AB785E9C718CF6E7228F743271C2C9BBA17E5208B920E44E765D99D86650EB454B0FAAA -112753AA1BD3A24239E9C5FC47EEB1547AC9D23731B8DC48B9707830DAEC60C8D3790BBA1120F776 -4EFAC542CFFBCD5C05F9510B27B2534B704ECD36C8B041FD49A96881302FFF5B0163A2DD09C751D6 -D6AFEA9170A4F4C4AB8D46E62F763FE1BDA51DD1CE4A27E772F3A2869155F762FF26B7AA6FCFA4F1 -292E56F03AAB6322BF867E7710C34D43B5D85B45AA68014AD7879EED051B1933E491496E3E26D9AA -8B80A07BF2B94F1077E84A9726F08199887D66DE7A307BF33C30DD9CF3DA188088C03B2BAD09A217 -6B110DB2C868B53DA9A66C85737BA66C93C58A259860E294AD0191E3A72C73F40B0BD98699AA08DA -F03587B78F391F3A4313C58D9F29B53C70785637BD0C58310109C54091AB0A34CBB0C478613A7AC0 -FB8F0A8B4645AC966395D8BA775262CD291136AFFDDF01C1D83DD4EB3B59CCAD18057FE7D92A8CD4 -A58F22508D9FD7CF356571F701BBB23E749BDDCBF8A317FDA0AEFD952BB18545610FFAD3AC143D35 -1B8DB3F66293375E0E50235F0D0466932181D377EDD32A5F0FFA4E22B5A0CB4F343D9A7E4A342E9D -09DFF6C697630CD3971802C277A5590B8CA94BDE6B38446C794D072BBCCB724D5BC208EEF1B018D7 -39373BB910D668882CAA779C2D686081DE6A2606417B54D7C20E0E7F722648D893E4EDBAE8F00D6A -6DA3712F91AE860C756D1127D133AB828E9D80023B50B162C5A1C5CDF70CCB3FDD7EA060ED20838B -E1E50C4094C9E79E1A0187CDF780CAF45A725964F004253E034C5BE46BBF89D94631F1A33BAA35B8 -4FA2A9D08481C6674126CD96ED05DCE48BDA069D902D6836D5DFBA701DC0F98A863E64F0E312145D -8DC0B77F25B43AEC729A1243B45B08CA228DD6101CAA2AC5ADCC8EFF84A4CA3F254176C2CC711EE6 -C273835D0FD3528ECA2A976B88E51FE347FDB60F32370B66D338931D6581630ED586F349C638960C -31AE4204E89521A96E1219E696B913DEB2AAB7A3B022D06F34FDFCB810A04E60A4FEBE284C2F063E -0AE9EDF87704921CCFA193BDC912B747E13570066223A49F1F6E2AF0D4D65DA04CA876FF7A462FFC -9C0BA2CC545C3BD36DBE762F32B2D6BE5867C59F479195C92440DC165098B74EA5C3AD93CDF2D410 -B04C16BC7801E7956F4E5107450787AA592493171C3628E6B8F49D4F8429EB98DC52EF025F001387 -BC1A7093F7A99F10B5D2D7DD8BBB393BF6E56F08F4F7FA1A343F220D5A1EAE7168C74D41BE1DC1A8 -3BD65B72B982F4F7B34F24F97F9EC9A91011064031FACFF2A14921A32024385F4E061CD07D152E74 -1BF97156D951A342488FA7F5EF934CCAD13E2753A0AB7A1F565C2F7F6B349DF03BBC25BBD972A9AD -F809BB5C5048A8CCEF9297B2ED3324D18867F293CC66E88B3A39D107B610DFE79A3B4E83A96D3D52 -A17FE8A62C9FDD271130148366942C9CE57558D023DA5F7501319EBFA33DE9E6D1E76D7C20DB8A09 -B657839DA99F3D8143F1EE6253A3295C9651FA4366547893C2DC7ABCBF4BB7609DE5D001E0A36D9F -FBE01F7D0903B3208AE8547E2E5F14EC1AF4C2535CA8F4EA37E3F3CE172C7A1E8308995B1CC23E6E -81190246BCAB6E755BF868D449BB02A2AA87C44C9CC0F571ADC72547CEECBE104BB274B8AC16DCB7 -5D5F458D356466B921ACDEEAE384E2EB1DF6EF393B41B9747F0A4FAEB4AF1928D9AD6FB7E06FDC62 -1E4C6FC98CFB43F88584BD55D9B97CC9549093EDE586912161931162B1B1D52D0443260DABA02AF2 -B4432100D5506546013DA703573FA8013685CC798CE501960093DED713FFCCF89CA2B9106390198C -29A00864108CDCC1984A8BAB53919028C01B26ECC7925E38CBE6CCA8978EE21C2B06E7B3E48FBA97 -8E2A7D186E563C088F84AA23178B60E4729EE87D67B1091F3B6973676C1CBFE6530EB773C62E2C24 -97014AB0E8B71A1F4E86A378AA26591511BEE3CF3D64C94848582E1354E1605B6457823F2C5E640A -D3802946BB2E7E8E594E8C04B430C2385DD40746CE8534F50842E74D7115F3DB0C72D1C9C607C657 -3B094AEB73B7A79876CFFC3E2F8C9FEAAA07D3BFCE05B61F7749A8793BE90CCCECA2D7077F25E899 -D3331FE161A7E86C842495D584C6E4A0880B2951D8A13B88C4672080A0B1BE36BF47C3ACE7288CFE -41A8C1BAA6F0814A947FBD6B3AA72B6C73A8C578CA51CCC96F2352316C467BB960E981F2B6485BFB -44B577E71EFDA16E7405954BC7C9F0759F5A9F1EBCD2FA9CC9648D5831A68887F41B15081A204C24 -B4B992A231DEF9E698D4C3A25B6F5474F5BE6A601F2D337A58A0D21FF37FD91EB86D1D738893A03A -69F0CD743F611CDFFE69DB2C6ED0E4611D56F803BB0DC06E7FE85A303839612707647B1BE9FAF8D6 -84122CA9E5CB8BDE2936D3F4FF254D31529D7538BBD4D35539489F9E7316F24214B996BCDCF1818E -749A71CF0E8845AA1E2A58AA62A48E02BA4564625D20AA220EE719608521D7D7A7FCA0BD8904A401 -9819D371F3F59D46C1354E5FC1A6E5F79B20CF4ACA2BF0F2DE73DA193A6F9ACBFE0B4731C4BCEBE6 -D96FE822965DE965232282A3A130361F188B3AABDA95A8A2790D9240BE008B6A6DE4BBFCADA05B67 -86B9BB8E0DFA0C30043A3B07ED46277E07B9808422C8ED16758B9C396F4EA929D769785B2C9568E5 -70A83B989B25CE200F1727D41E2B702E7F88F1784F4C83FA60A74EB26B2DA95126E508ED519A61CC -151DB6804F61826C5F86D8FA89D06E526FED97A0DB88EDB432FF32C1ACC9B622EEDF601081AF7B96 -3C9CFC1D13E4A9C74FEA0A1C8E3D8653CD92A944D4CA6B0D306619AFD503506D77732D6514F604BE -4610C2560931BDE0B40939BC1D126B0E97F72AE1B4A9252123B54F7A27E0CFA4425B4546526FD741 -CA77952B10D13E0AC2E32006A903808FF0CD013F936238C74CC75FD915244C56A8412F37F0134840 -347699508D6F3D7F3203A25B7C70100719582CD588590EE34B3AB13E255B613A6D00386A0104CC5E -D2C646F09A88888D3751651D5646C5227A3C80E8DA1B0A331121DD2429F1F4775D30564DFF47D01B -BE2C6C72CE4D1FD9A2077C04D2B0274B8916F6A9D1A4A6964A534F47CF241D5A8E34B23F85BE9ACF -FC2FEA961F277539F215F8728D6788F67BEAF45502839BCF23D8763C3949352F00C579A9A4FC408E -C625E310DAE61512DFE6844E82D36A2F81709E1F05B38AE9C222ED62C961EE63593CED7AAF73CE2E -D3667740C77B309B93EEFE1B4BA65D48575A66BE86743DC9E5D3C2FF418D11F7F211B86E827EE1DF -C3613E7498030F07050524536D1F8A94DDB6698BE7B963C55CB3F74B676CD815A7B3DF4B1A0EA2BE -1B0B9A11FFBFD5B1FA49668AEE14629316AF436A0821C20BEEF7B3480847934A99F6D85B68F4DDF8 -859A754E009428AF89A90D1852C220A607FF0806E8080726EDC94D691D214B4521C147C4273AEBDD -BB4A697EF16448CD9B2FC95293305858DECFD406B89B9F3FDAE2AC579E80CF321EBAE5701FB2F7CA -D8ED04B4A63115886D45D6120F69AEF1A21D80AD3C2D35D2899F1902242B96CD349E0AAADA40F7A1 -1282B6B52BDD97708E58DC5E2D22D1153E5FA3F3B300BCDFAF98DEC2F4E3C82A1C85F985735F3987 -4F557579F422664E07CBE19DA680EFB0FC82C323EC5C4644C51709AC8D674608A8043C91E6C7988D -430F10BA6CE1FC7FC0604FCD8F723895250AEC36CC35B3FA14FE2A0D24095DCC30B2093F2298F5F0 -A97676A0BE66C3DC9ADACFE2FC0F721A20E945AFC1096A619075D5E9A264C796EC6C90EF1AEEA8DC -089B44FFC13D27CB2370070A52D4416C53F364393E46EDD7EDE00799960CE6E0D57E4909E88ADD64 -BDD2B0EBE2D73FA6ACF8B40280DAA0637E705C65AABD523B8815F22F23E9FF81E7829C7E4BC980C9 -143AEBE1A04DC0D253396BBB7268BD5AEEA356B610D5DCEE03135E00AE34388251F31714A1C40E18 -2652C48CDA2211A22CB6F02490E69A44CECB169754C53B16028D352E0119F5D5FAE0BD7EA1CDA647 -12A6147374B64244E21E9EC9F0D1381AD22D5B6212B26C3F9AA5F6045F25DD9F5EB4489EA39B1945 -331AC70510C5752557DE21D0A6CFC1EB10A98FA867B76DA6E4249469F591FD154D39E89364A43DB0 -07AA0D7A911CFAE6CE2B557997FBC44F55A27F622BD7B8B10EC9F5D10F2649A646FD964AE1B111B3 -5B46A252C4DEE44E7426EB5739F24E8A390694597DB3A1FE7800C97E59558322F0E49A0CCE2AD94B -1E2D1026AFA771723E3F523916F55ED866C9FB4A2F759651C613A2CFF362028CDF9D38F05D4C7C60 -24C533E930B64B099FB1AF04B01F5FB9CA6867E6EFF55A772C5391831059987E10CBF987E3F378E0 -1329F73D54DC0484177D3C3C06F67397955FF1CA4EF8AD1606B70455255D631A7D6EB92BFDBA14A0 -FF28B2ACE7E81AD666EA9B3A0F5A6BA3B5DFE35044FA4B3D8ED956009C60E98CC132F2E84967F4A9 -8A67B336D5EE7CAF7DD1F74D1FA08619941361FA7312CF225D89CEF97E864C8369EAFAB94D97F056 -5505D825972B754F6729596EEA91210B75DD8F645382ACE36DE60819A02B3B48DD00F5485F9264F9 -FA926D732E2C267B0BE8CA98526F124F97EFDB86132C5EF16B103908172FC51F286FFE45FF253512 -E0033F037FF182BA536A9EB2DF2D1DB257D9C86C46E1B002FB32AC70CA9462E6EB48994752CEBCE3 -9F08ABD4F4B0889283E55500702185A841E328 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/Times-Roman-iso1252 /Times-Roman ISO1252Encoding psp_definefont -/Times-Italic-iso1252 /Times-Italic ISO1252Encoding psp_definefont -/NimbusMonL-Regu-iso1252 /NimbusMonL-Regu ISO1252Encoding psp_definefont -295 271 moveto -0 0 0 setrgbcolor -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 271 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E> -show -653 271 moveto -<6475> -show -725 271 moveto -<66696368696572> -show -877 271 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F535243> -show -1149 271 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<2F> -show -1162 271 moveto -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<737263> -show -1223 271 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<2F> -show -1236 271 moveto -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F49> -show -1435 271 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<2F> -show -1448 271 moveto -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D616B6566696C652E696E2C> -show -1708 271 moveto -0 0 0 setrgbcolor -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont - -show -1938 271 moveto -<434F524241> -show -370 331 moveto -<6465206C61207072E963E964656E7465206D6F64696669636174696F6E2E> -show -294 433 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<69666571202840574954484E455447454E402C79657329> -show -294 476 moveto -<20204C49425F535243202B3D20534D4553485F4E455447454E5F33445F692E637878> -show -294 520 moveto -<2020> -show -344 520 moveto -<4C44464C414753202B3D202D6C4E455447454E> -show -294 564 moveto -<656E646966> -show -295 682 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 682 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E> -show -657 682 moveto -<6475> -show -733 682 moveto -<66696368696572> -show -890 682 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<69646C2F534D4553485F42617369634879706F7468657369732E69646C> -show -1563 682 moveto -0 0 0 setrgbcolor -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<706F7572> -show -1681 682 moveto -<72616A6F75746572> -show -1863 682 moveto -<6C92616C676F726974686D65> -show -370 742 moveto -<4E455447454E5F33442071756920636F72726573706F6E64206175206D61696C6C6575722074E9 -74726168E9647269717565206465204E657467656E2E> -show -294 887 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<2020> -show -344 887 moveto -<696E7465726661636520534D4553485F4E455447454E5F3344> -show -974 887 moveto -<20> -show -999 887 moveto -<3A20534D4553485F33445F416C676F> -show -294 931 moveto -<20207B> -show -294 975 moveto -<20207D3B> -show -295 1092 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 1092 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E> -show -667 1092 moveto -<6475> -show -754 1092 moveto -<66696368696572> -show -921 1092 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F5352432F7372632F534D4553484755492F534D4553484755495F69636F6E732E70 -6F> -show -2019 1092 moveto -0 0 0 setrgbcolor -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<706F7572> -show -370 1152 moveto -<72616A6F75746572> -show -556 1152 moveto -<6C92616C676F726974686D65> -show -832 1152 moveto -<4E455447454E5F3344> -show -1149 1152 moveto -<717569> -show -1242 1152 moveto -<636F72726573706F6E64> -show -1495 1152 moveto -<6175> -show -1572 1152 moveto -<6D61696C6C657572> -show -1769 1152 moveto -<74E974726168E9647269717565> -show -2062 1152 moveto -<6465> -show -370 1208 moveto -<4E657467656E2064616E73206C612047554920646520534D4553482028626F75746F6E20646520 -73E96C656374696F6E292E> -show -294 1309 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<236D6573685F747265655F616C676F5F7465747261> -show -294 1353 moveto -<6D736769642049434F4E5F534D4553485F545245455F414C474F5F54657472615F3344> -show -294 1397 moveto -<6D7367737472206D6573685F747265655F616C676F5F74657472612E706E67> -show -295 1515 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 1515 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E> -show -651 1515 moveto -<646573> -show -739 1515 moveto -<6669636869657273> -show -910 1515 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F5352432F726573736F75726365732F534D4553485F5B656E2C66725D2E786D6C> -show -1843 1515 moveto -0 0 0 setrgbcolor -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<706F7572> -show -1955 1515 moveto -<72616A6F75746572> -show -370 1575 moveto -<6C6573> -show -445 1575 moveto -<636F6D6D656E746169726573> -show -744 1575 moveto -<737572> -show -824 1575 moveto -<6C6573> -show -898 1575 moveto -<626F75746F6E73> -show -1075 1575 moveto -<6465> -show -1142 1575 moveto -<6C61> -show -1196 1575 moveto -<475549> -show -1305 1575 moveto -<6465> -show -1370 1575 moveto -<534D4553482E> -show -1569 1575 moveto -<436573> -show -1663 1575 moveto -<626F75746F6E73> -show -1840 1575 moveto -<7065726D657474656E74> -show -2073 1575 moveto -<6C65> -show -370 1631 moveto -<63686F6978206475206D61696C6C6575722074E974726168E9647269717565206465204E657467 -656E206574206465206C61207461696C6C652064657320E96CE96D656E747320766F6C756D697175 -65732E> -show -294 1732 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<20202020> -show -394 1732 moveto -<3C> -show -419 1732 moveto -<706F7075702D6974656D206974656D2D69643D93353033339420706F732D69643D9494206C6162 -656C2D69643D944D61782E2048657861686564726F6E206F72> -show -294 1776 moveto -<5465747261686564726F6E20566F6C756D65942069636F6E2D69643D946D6573685F6879706F5F -766F6C756D652E706E679420746F6F6C7469702D69643D949420616363656C2D> -show -294 1820 moveto -<69643D949420746F67676C652D69643D949420657865637574652D616374696F6E3D9494202F> -show -1251 1820 moveto -<3E> -show -294 1864 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1908 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1952 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1996 moveto -<202020203C> -show -420 1996 moveto -<706F7075702D6974656D206974656D2D69643D93353032309420706F732D69643D9494206C6162 -656C2D69643D9448657861686564726F6E2028692C6A2C6B2994> -show -294 2040 moveto -<69636F6E2D69643D946D6573685F616C676F5F686578612E706E679420746F6F6C7469702D6964 -3D949420616363656C2D69643D949420746F67676C652D69643D9494> -show -294 2084 moveto -<657865637574652D616374696F6E3D9494202F> -show -772 2084 moveto -<3E> -show -294 2128 moveto -<202020203C> -show -420 2128 moveto -<706F7075702D6974656D206974656D2D69643D93353032319420706F732D69643D9494206C6162 -656C2D69643D945465747261686564726F6E20284E657467656E2994> -show -294 2171 moveto -<69636F6E2D69643D946D6573685F616C676F5F686578612E706E679420746F6F6C7469702D6964 -3D949420616363656C2D69643D949420746F67676C652D69643D9494> -show -294 2215 moveto -<657865637574652D616374696F6E3D9494202F> -show -772 2215 moveto -<3E> -show -294 2259 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 2303 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 2347 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 2391 moveto -<202020203C746F6F6C627574746F6E> -show -672 2391 moveto -<2D6974656D206974656D2D69643D933530333394206C6162656C2D69643D944D61782E20486578 -61686564726F6E206F72> -show -294 2435 moveto -<5465747261686564726F6E20566F6C756D65942069636F6E2D69643D946D6573685F6879706F5F -766F6C756D652E706E679420746F6F6C7469702D69643D94204D61782E> -show -294 2479 moveto -<48657861686564726F6E206F72205465747261686564726F6E20566F6C756D65204879706F7468 -657369739420616363656C2D69643D949420746F67676C652D69643D9494> -show -294 2523 moveto -<657865637574652D616374696F6E3D9494202F> -show -772 2523 moveto -<3E> -show -294 2567 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 2611 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 2655 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 2699 moveto -<202020203C> -show -420 2699 moveto -<746F6F6C627574746F6E2D6974656D206974656D2D69643D93353032309420706F732D69643D94 -94206C6162656C2D69643D9448657861686564726F6E> -show -294 2743 moveto -<28692C6A2C6B29942069636F6E2D69643D946D6573685F616C676F5F686578612E706E67942074 -6F6F6C7469702D69643D942048657861686564726F6E2028692C6A2C6B29> -show -294 2787 moveto -<416C676F726974686D9420616363656C2D69643D949420746F67676C652D69643D949420657865 -637574652D616374696F6E3D9494202F> -show -1680 2787 moveto -<3E> -show -294 2831 moveto -<202020203C746F6F6C627574746F6E> -show -672 2831 moveto -<2D6974656D206974656D2D69643D93353032319420706F732D69643D9494206C6162656C2D6964 -3D945465747261686564726F6E> -show -294 2875 moveto -<284E657467656E29942069636F6E2D69643D946D6573685F616C676F5F686578612E706E679420 -746F6F6C7469702D69643D94205465747261686564726F6E20284E657467656E29> -show -294 2919 moveto -<416C676F726974686D9420616363656C2D69643D949420746F67676C652D69643D949420657865 -637574652D616374696F6E3D9494202F> -show -1680 2919 moveto -<3E> -show -220 3030 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<417474656E74696F6E> -show -220 3035 188 3 rectfill -408 3030 moveto -<3A20756E2066696368696572202E706E6720206D6573685F616C676F5F74657472612E706E6720 -646F697420EA7472652070726F6475697420706F75722064697374696E67756572206C276963F46E -65206475> -show -220 3086 moveto -<6D61696C6C657572206865786168E96472697175652064652063656C7569206475206D61696C6C -6575722074E974726168E9647269717565202861637475656C6C656D656E7420632765737420756E -652073696D706C65> -show -280 399 1 176 rectfill -2125 399 1 176 rectfill -280 399 1846 1 rectfill -280 574 1846 1 rectfill -280 809 1 176 rectfill -2125 809 1 176 rectfill -280 809 1846 1 rectfill -280 984 1846 1 rectfill -280 1276 1 132 rectfill -2125 1276 1 132 rectfill -280 1276 1846 1 rectfill -280 1407 1846 1 rectfill -280 1698 1 1231 rectfill -2125 1698 1 1231 rectfill -280 1698 1846 1 rectfill -280 2928 1846 1 rectfill -showpage -grestore grestore -%%PageTrailer - -%%Page: 3 3 -%%PageBoundingBox: 18 18 577 824 -%%BeginSetup -% -%%EndSetup -%%BeginPageSetup -% -gsave -[0.24 0 0 -0.24 18 824] concat -gsave -%%EndPageSetup -%%BeginResource: font NimbusMonL-Regu -%!PS-AdobeFont-1.0: NimbusMonL-Regu 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file PUBLIC (Aladdin Free Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file PUBLIC (Aladdin Free Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Mono L Regular) readonly def -/FamilyName (Nimbus Mono L) readonly def -/Weight (Regular) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /NimbusMonL-Regu def -/PaintType 0 def -/WMode 0 def -/FontBBox {-12 -237 650 811} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -/UniqueID 5020945 def -currentdict end -currentfile eexec -E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942BF7D6DD84F1664B89 -699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED2AC419FF2B2BDE605B8EE3264EDD6641 -2D4F21C64AC522BDFC7C5502F9C3F3E5592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A2 -5032519D1868816E44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8A123E6A2261C63C769D2F4B60FA2C438AD7D199D8E4 -5F7E7C9A605C8CA14E21FCD81C9A515FB8DB6F99604534D06EA9D87FE0FAA852899C9D0595C7A97E -6C55F79FAC45CD38E87B10D210CE7501E88C8FCD3444354365FB893A12F596AE2C1E70D5819EE0D0 -87D10BF8DA96F3DABD5405D28C4228C6C31BA4052464859640933FEEFD8071C0C84CDD829A9B1D0B -A01F25A4D50EE2EA2B45160CA6333B2D2800306ED2BEFDFE155E9D9F9342EB8D5B0ADBF2460CCC98 -643FB1287CCD28ABA7B5CAB92EC39EE2E918990372B16F8487EBA30EAE88708B6CF33B6C015D8096 -C7CFE2F139F52052E3925C0D50FD64CE68236D59CB83EF56BFC584150EC38065059F3308AD6F9A99 -F83EF4E6CB13855C8175E31417D190D036B387D3952344A950F4D8C7781B307A094DF1ECAEE4D2C2 -FD747BC6F7F9C6BD0E90C19294F96C8C5CFE88FB34C477574A1B1630B8CC591529E59B20794DA32E -61DECDA8ABBD1AE956CF74012AA01D42EE01E861B0AA6897C864788AE59DEF43C493246FDB1ACA55 -4C12594BC7B33657A9ECC9E3D1472EF826073F632BE540C35FF6FB40566773F3BB2204D3A579A08C -CBC844C14B18C350F003B9DA23A570C362D6003893CA32F86F59B829C78EE3188B6E3F7FA81D7F62 -2825C639638DFB78B7AF1F500F5B450FA54DBFA5CBA277C794ECE93275A3DE0B452FDC8DDC2993BA -A42F28A636008CDCB03EBF71BDCAF35019778993443F88412AD2AD0D7155A3944606463266322DBC -0244B07DA1E9C27A27B59664E8566D7A54CC03E995AAD008B0A17E2C3EF61F720CE7F7788599C4E4 -4C709CD5C31B11107F16AD70B17B9AFE2E8CD922A7428DAC171427FFAF51067307FAB0ADB530E701 -FD22DA22C4CD3064067BD4F6089C4B2C87937DD426E4E9D2F60E608288BAC9056554D04947E69200 -61E379CF5E81BFD32FD37EFAC1F61CEBEE551B0851516471A7472C60DF89DAA9EB1DC5A67E479745 -3E69B9E22BAF4E3CCA4192D603295B018C4AB69D18DE52DFDF15E96B557F290A4B8C5B1E7A6CACA8 -1F2351B97ADFC36995ABA43803A6E5AC04A3C93495F6D38106B8B144449C07D1358210F9176E1565 -72363CFBDE576BFDF99FA329DD1346E83F79E06CF68250CA57A68931BC7F342AD295D0CBA17AA95B -B8EEB53EA6E8E660B814E9F857CECB14F44A43288B69A9E7908D55BF19E844359879D28CAEF1C38A -36420185D20DFB32C2E002202800E8EF3D67C5D50E919657CA958B538D537D503444865331D79BFC -40312068D72364503BD0CC84B5F30A74D8B5B6A26AF2DB764564FB65A6BA8F9051AE2B4EA458D46A -4569F30C6E77DC097356770362E6CF3F1661074778EBB44FF7D1E3B64FF75E77E11FE525BB121C65 -46CFD13300CA1F02D571B82A5825E6226D14FDCF27F06D87452A8B6C5DCA658535CEE2A795E58137 -D48E566B69D53A0C3B766E84C51EAA221C46999CC8065ADB2F129D5B630FAB1814C0C33B5AEA0EFB -B6E994D80941B53079AF96D90A0B924F9B0E319BED9836B8F9053F868363D3CA554CBB181863301F -8CB940872ED5FA7BD18CE39218B5AD8AC57D0F752D941076B1C64D99BE0DB86D7A6D96510D772EB2 -4C587F11779BD21CFE5BDE1F29C1EF9022B2B8BCD7F91153C845906722477829C40111D810480F3C -F62DE8DBA7FD86CD236E656618CAF6FC46827FBC4898EA7672F8C9971AFE43E0E01EC8B77D4AF48C -BF1210E98C1DB15C16D149BFF58AB0270CF015B107A3A50F5DC8F37FFB92EEC8CB6778DDB7CE4AAB -C464C4AFF654223006A550EB52485A23D2B4AA7198D3CD54418102F1E9A4FBDE37B841E56F5C2C53 -966DB9B66B000E4588282E3FB80C2C519339F0002D2F83C979EDC5827A3B3C8EF8810A0F9DACB6B9 -998E9AF6551F56313DC4011904CB979AA2D32B11A811BC248141E4B9734D9FB7982A5671002D8279 -CAB93ABE057474628DEFC95D43890DB1ED34CFA8A20BDC3D874E7679A396158E522ED0AB969A4E3E -C7E4474E192590504D54DEB7B260B7935C4E56548A7D121AC1F741F8CDF259EA1B5813175A77A1D2 -D30BA26F65EB765A04C09ED51F69F41551ADF399E6AA2FC09788137BEA4913F17B8EB838C38FB272 -1FDCB55FD65697FF0B850E7D3D1CE266BF90F7EC06A9A0876BDFE767D3A918B092FC78C775F945CF -1F96E859C03DBF630D9A940939654C3549D8F7921CB94EE23D5A0535DE9DF31EA0F937F860B4F220 -A99ADDFC343D7CF7BFA0B803C12C26403F0DCFFC8EA786D0D8A8D9C367419CA8AE41190CE93A8086 -583A1E6C9D70B612C84D87D2EEAA71EC2DC12F4CDE6A821303D5F6A9BBDB7EEDCD289E80FA3B75F4 -7F481B50719DCF4A142069393593B9AF9CCEEAEC56A35B8787193D7C88113E9E1E221D151E093B01 -9EF89F6118BEC4735103CC8003CC5AD1B6727B3226CD44C497DA7052DD681695DBEC3397F9598C91 -77701C73BF0594CE93F23D50EC5BEE2FB9DA1FC966DF148B27B28EE3C89526DD6625E2887F9FA076 -7C127C609EE315626BC14D274FBEA56528DC06A27B2D476D46E9E7916590B156A5DF04A6CB15E362 -45D77021767B6E5BDFCC679670263FD891446C3371B11BB6E1DF60F960AAB4149D7753E6A5C33810 -C42C8BFF4E935003388506F8278BD7CB672F132E065AE684DCA0B9064D01DD620E7FFDFE04F14277 -EFE8E60159BA0FCA3FE2F28B902D4AC275D19F0AC6971EBE827C4A232D87650D2688345BCA78F879 -077114F0463C5F058107B669566F8171E4E284D278405580F04BFFC9902784216E0C9A17AA9B2935 -E66E18A783F723BE044389B7E9D62AA36818FF2EA406C3C1A9D2F3436F3EE7DB8BE86AFA8DAA6A4B -1B84611350D8D27605509612B515E16AA843164D5D0805E36A2B9EF74C5F6A0B9D59A04B55697123 -27F4B1B30E9587CD103337639967CBDC655AA46E80D2CFD24BEB50815B5338E522B3A7AFE8362AB4 -F05D8BC52BBA9C5089ADA8C89529B0275AF422EB540D31A938B8740860756325B966B36817115213 -FAAF92DE63F6BAE1E0064BFBC5588098B61EB83C71F1C2082436D37DAF1ACBE186FEDC4BE7C1233B -6F18BEC5F99002D21CB7864E4811F7AB3C03003E1E4490AD1AC793BD28FCD5EF0E6CC30EF39A08C5 -2F71939B0CEF620DC69E31E39D6DB969049031B0C92EF2DB653D97F370141456A52985076B268652 -FA2648C792780BAD637C4D7581FB2D62011D57E293719487CF2D1F013CFAA532E1C2D39178D51272 -A6AF041440BCA174B5CC902BD7390C7D3695056CB4BD7791F9FB6D88E7A70DEF2C97869F5DBC5BD8 -23C517C7B7C39D624DF627DC9653EA5347BFDA80B723F05F6DBB4C9EA501D862ACE05B9DBDF21B70 -56FBCD8C6D4B85873DCEE6166C8B5ADC0316CA12D9639F361B15A42F00E1D62EDBCA1111972FA0F4 -5758BECB31DB38316F3CDFE1B41748C93ED58B67E9B57ABBED5924A6D53E99FBC9A994A6489A8BDF -13EB685548B4DC6D62DA7426C22227D4D43B6FFC7B5EA91C896730253E8941AFEE588359C2BECF6F -FC415B9EB6D31CCB0F6C7F85853E6449FA6D627A97A3CE8303F148393ADCCCDFA2FE085C6908BE5C -3C05AF00A6F02840206C3253A559AC5C049BDDFD11AD9B118403B84DA10AE3C470CB9A9A2D1D7B73 -2F59F5FE146DEDA60AE750F551AAC934621B4470E1BC324C436303E25F81D0DC3188BE0D6FEC5414 -C20E4CB18952E12CB6423DF7124627ACDE145500D77A97A8BFD9CB50D1FAA008E2CE2B2505A4749F -1EBBB092C347023714055A9B63353AF9E7FEE05BB54C9843698101F79888A91531773830C2C967B5 -88D3ACD2192883D5CE3962D51084FC653EAE2C5FB2DA41DACEFB5C76812D2EDB5B109677289CD199 -8D457FB1023A19AC67295BBC1A9A20A426B06A368DF3C5DD083CB1180D287F5500F2C635EDE157EE -FCEEC5503447382D15C748C1E35F68753992E5C90F900DE54D18F8E1B355D1076ADFB1F3590135FA -D1A36F028E44F48ABB149B80CA9A54614D467F8D71CB310BBC7AC7100261092DB8C5BFD39E0AC6BC -2C9D6CBC3A8C05FF8A74CB21608EC4A4CFE4CBAA2D056DBA14206106044DECF59F957EF8A9CADE4C -9B19D8D30DD4FDE6A9548E50DB51ACA73330142153FC36B69C1C8D5B26D0C689B7040E81AC2C864F -D7C097C99BE5953843E172C97AB5684F35FB03A725A89DBF371F08DDF40A1531FC1B676DB0E1543A -EC6E97D3D2E4AA3D5831D8B3C952ABBFA112352814FB6FAB61A0D680E6640F6AEC8426200CF61286 -F7422CB2F78C61EBAA36D47EC16D7FAF8B4AF31D090CDFA255D9D7C61D46CFB22A7D6E1758E71ED5 -67E00CBD8E8F468DDFB477F091A2F915627F22FF47B876544BC1F03B6BBB98385F009C20BB1AA2A7 -A78674692B8EAC2E3C8069B79E679338DA57F72976810F845BEB6B9ADD32B95D78E5E60F16DD1668 -9C05FD82D36A3115BE8ED494A74DD211D58A2CDF983FCB9CDC29BF7F0E29988FA23560EDF514BC1D -183F3B2A22C09FB179B47E05ADEF48DF02F31C29875D1915037B19407764A4292FE44E741651A8E3 -BEB5F0D972B6327090F664417C84F84FFBF0AFFF8B1D85C822D90730AB4140C42A51AA8B1DBE4398 -4EA8566040EB8B341CCE23FD3F69DD235A080BA5C69AECB9BC732BC2D7D40617DDA6B79FB6EE40C3 -556C7DF9B23DAD89E94054B1345DB8402AE679FC4655A4A776C0150463F8DB2BFC0608EA1F124E22 -1DDAE6026B5E5D007A7E4A0D6B3B0CF3A2669E67C5E4F01551966A7BC48F2F4B6A87E740D8095E63 -F77C7A027F26B52F2299DE5B8A2F6209BCF3D31CB0235F998F781E5CC81E31DC424E008D46EC0920 -2951E5684804A0592EA47D6C788A20487BEA2EC8F2E6C1D7F378B62DB43CA43C4B366F8B4319631C -FE9854F0E10321CFA3B01C873584863BBEFC23C72C05E695B56E8A52E89AA2DAB543834D34DCAC5F -ED08DC51825C5257AE59850D101D84F4CAA1D29FC932F9E0EFFBF7A9A7F3685F61F0490CD3CC8988 -2DB52A757A6AF4C4E67B407BD2316B1C0FFE7DC54E43C87B874F57E4903334E2140B011484863CDC -ACA331175F2CF3D72E0042855983AAF8853D3015E870FF0807014C31D55060DF3FE1FCE157324481 -2744AB51322444632F9AFDA6706E320FFE82B8CBE242A19DF00CE73EE48E25FF49D5871BD3E60652 -298FE3E8D400609E232E0DDC794C0579ACEF89E841B2EDCA50D51151F65E8C1CC3B01EF1870558F0 -BF5743718C3E068617E81BFE120C6CA16E0924BFC2541177D53671CAA3AB641C41557DCDAE1A3461 -47B5E999C4541B08B4AFCBC187AFD653D5B5F8386DF6AD8FE69E21BD0567DF494F736C6A184FA4DE -48DC9F347787CA96E2E00A296C2DA05C2AD9BC423E9CA428D7F1FA12DC9353A302FB8C529AF8688C -BB543B45B2717EBF8F6C497935F4F3BFFD285E0402AB7544B3CA4643AE5A8B5250ED987A95FC1F27 -5B9707ACD0641BD0EE2AE9758494F8D8A51DCE408A38AC20EAF0852D72D84D0C6BE973326793AEB9 -55EAC6FE0A2813A355DCD22F6F2CE56588D1C055CDDFA98878BCEB6A018DB22922D2B600A20F8184 -2E665DF41013CA0947C4237C2BD60A75E2FD1A3FB8C8FA19485730B87461AD466ACB02DF8CA24091 -4FB090B3D2B41EB6B8FF05E1A59D9FD668AF70BA5BB72778953BA55FC5F9F626043450E1D09BC83D -8605098ABEF884639A37809A32565CBEFB3FF39EE53D6C18C58C272BB928E4410E361E59A50F242D -69747A032617C52DEBBF62364AB5A96EFAF642D9D82BA679B1D70FAC10A4EB62FA5CFC308E86368A -AAD7E75948F43598CD1C544A0D4091374D7E88D4522CBE902391641327E888E7748FA889DCE67ADE -61699E7D77763681CAEE9B1CA8837B2F7EF9C18CBCC538C465C8E2DD34616953CCB6030A222C728B -834911C1A179E2C770289407AB28B303E724D97F747D6134B425216A64C6E0B60F633E2B85300047 -E4C90339CE030A0FAE31E830C8ABA5AB3386A3B69267351A7BFDD66356AE5E57FB2994452993E90D -E7C4E260ABAB93C37831856A650D56E44172FECA01D6C7C380F250B82473960D2A2A5FB6B4DA668F -46E624ACF7FA0FD4490F485D640A3ADFC9F8652E7A38CE5799F770C3606DB4B8B947F93967F779E3 -A3C0572F13A5A187D31D7BD12A5C7BE23CB6ED6192086241B76C5BA6983DB9C93E4B208D707D3760 -F03CD6272EF3A4CE89B8E52E6AC5871A3D03EB975759AB4BE239E5EC7842CBB333E692CC607C722E -185D3C39164DD320C6945629C70FF66A5237C0A9520A1FAD6EB9816069351AB0F135D90CC0982B14 -7D2294AE4A38A527EE40BE9CDE2512AAEBB590E134388BB171D0956A7C4566D65A9A041BE6C4F883 -6B3EC3D2ED1B48B566A783292B15B6127920D247D494F070BB20BEFF60640B11B276DDEEE49706E8 -B2B21BB40B7F00AAFC594C492C25DCA774E0B80D82E927448DE2E74A9D0DC7AC9260096EAF187B6C -D6AEAA6D1DC4205B4411122751A5B22688404EA7C5861730371FFAC10F5AFD4727A0E402AB5EA757 -606B75EB86A05E8F774D6E430A1A3FE2A37EBB06700474239FB1CFA05EE44B91B82244C575B52E7F -AF934B04EEB0D933FEB57EBE326D75821C8B23EAA85B583AED4320B7F04B9F2DC591091216FDE52E -064BAAA9C2C9D9714B95A4558C21F3CEBE624B5403B31508F178581AF6863083ED762F1E2E34A45C -FDD71660D626FF8648F5D6C5E580D4765A67FB6159EC8077A9F0A88038C8D3D7C77FF0926E2123BE -874F7BCAF129D55A5B5960F824BD1728ABCFCC51D23936DE9A25C408D786E44C3A2BAFA4423177AD -060D21D38E15E23EB6FFC0B4120E814695D423EEFC2744A1FC81B4DF89D76F0A6803D8B14E75538C -AAD03A72517B86514F6952F6FD619D9E910D980F00964DB325318C045BDF79647F453D4A5CF4E61D -D5359782827229310405FBCF6107C3AD9DDEF9A9A339D5D5A6EB2E7838A0A43221BD62CBDF732DB0 -A638A52016FB35BA7761AEC846A023D3BF2D1BB183543E81EB7CAC1E5970CDC6F068C5EA118C7AAE -528D1396E6DC939112DA4460C890EAD5C01BDC438F5BB734218BA6270ADD0DC1778FD8AB16831D6A -302B814A1A44B07EDC65956C9E6CF4875DF521F3CE5B422F71081B6D69BD270F739095C9E81C0377 -934A8BC6390C420C4E4CDD9CF7E32544C68D884E15ACA3BCC07FC8C132D8FB9D752C15D75C52C288 -57E2EA461A6FCAD90C56843513F74461F18D7164BC597A28AE4BA7C86EE1703535A9B9ED50122627 -71FC12F102E800E0E1AF7BB46681BD2B14B614CEA91B7B2AAA35235DE76C0E113C92688F8EC81277 -D58C3406778E1EC1CC15F1CD9A137C8FFDAAB99ACE3BFC782916F1A877170589A92DC921E6740A22 -B84DC6BACDABCC76E64C79E3A588D80F8F4D376E1B426F15751CF7391102102F0AFAFD8B22DFDEB5 -48AEB5F30B1673023D22054A13391A0EC08DE6E7B685A0D031AABF20B7C62187C0284892D5EAADF1 -21BA28263EB863D5E36EA9C06A77CCFC0E17F593961591F84D82AF823EFE41044C8D606FEF83CCC7 -B0E961E7994DF8A3CC36B209D953E250ADAB8D22D7F2B4E2C9CA39EFA2D93E56195C1560E30A5190 -CC5B17FAEFCF250DF79F6B624A4B917E11C332222FCCFEC4F6A47BD9E75DA9854FC3F7AE554E91ED -DE144D7AEF38A0E3EDB5E5A5626374DB94F022C8CF549093041DE00D7269B7CE544E748439BA2870 -718C08E58FB4A77D93EBC04B7957D272AE1601D41BF85A2BADAA0DF73B0D3841D4839C85677FB2E1 -5F1D6CE592669FF4BBC9C69DBA334DC37706F2F6BE83D5863E8CD6A30C08640AAC4C233684E66B4F -E6B62D4A8BE9D531E47BEF5640D9B5C27D990092BE1597F6995C8A77BE9C18AAE6C1CF130775DDAC -41D34438FC7AD8E042CB56CBF2944932EBA7D053E9376FF398367450E35A1945FE23E05C921096A1 -5454721FFD0F429A3E06DC3ED36F1C170BE79C66996EF8337AFF85B90C5D3A4A94455AE9FA32E211 -7A63E59001F052D5F6223125BFAFA40901E98960ADF7BB886729DCA82FC3B8CC52B37FF2517299E1 -D769057F8154FB95582F02CB0BECC873A9C71796ADBD3E91324FAA94F2C41CF57C30B5897D031C02 -D256C909E080E70BFD1F32E69EF67031138C2DDCD1A8E4B65E485C23C3E450ABDD9815512D6F34A8 -4B9DB715DB2C7A93BFB424316E1AA44397749CB01088428F149A3B4324737ED9957FD388248462AC -1B2610D72BF5C073ECA567E7385CC959E37CAC7E05470160FFA5A9F63B8E9B082937E911586EA165 -374938F492EDF28CE6020953A5B5CCEC7737F9D9CC8538C4339567AAED3794ABA3B9F4EAE65466E8 -E326F6C399B36355935FBDCB9972F10B13494DC25097FCEC5A6398F275C8C151558E74C5175F7BAF -4155E36B733F75CF9D5C5979B0764F14D8306E06BA24BF791141E404C69F3F8FCCD91B9C58C2C671 -AAE7D4F9E5D6414E46ED633A5F78AA5BF04E652246A066EAD9E582B181CC196EA2D3CFAA383B5D0E -4CAC9336E119C08CC6AC55CBFBAE147C623B400453BBF447E96DE036FC025624384359EED7C7D5F7 -858DC0521377CF647A157FC3F188DE5EEF094DBA125510FDE34C570D7BE76AB5DF0A28BF45DDAADB -EA7EEEDB936332DFE93081E0AFD3FDD46BED08D6914B2EFCFDC41662A33B90B03D76D34F48D30FC6 -BBBB600E90E6AC7243FDF026762A44B4D6E4ECBEF48C9D7B696AF29EEE063E557D8FCF0F09E0136F -45D17E608DA36E59F2AECF8493F8D62536119B5F7E1554DFE3F6E8D7C9A2C6F557D18B4AF92C9F6E -050975C3B5C54F9B5F4E39D600B6FA2CD6DE203A174028CBB2A201AF126D1013C229BB82CFD013ED -199D01E51EE2780FE896E01C63C655087A3E61A7F1029FA5E97EA1872F1B45F22282DDC317E17926 -7368CB52DA9444F6055A3C653659CAD2A1D8712BC2B1B32C1DC6906D957FB88524EE066156ED6BDE -B8D832F9338F9912E29A250A8C4674E667C1C278B677AEC9972BE83CBA3FB779893FCB8F81A323AC -91474BA2A2334A07BB5628E905C518E634F6761A3289056F83D5DD7B3890987EEE1C18FB2D379CC1 -905F1AEB3B3D2AD578F0D6C845D2D40C4BCEE3F71C90E68E5417BB8CDDD878D83BA80AD8485F4067 -E5C3CABF28AB56CBB219C0AAB8FFC6C7E192BEC8CBCA1459AE4450AFCC81B9548F40CE2622E5A7C2 -81F74DCC02DAD57EFD92D072318DDF05BF42F1EA8163071E23949B0179CF7DE64677CA99B23CB926 -B3E294194EC13397EA1DC9A5E1CDCD828156CD71F81B64167D4FB01E6002713BD8AC6F82B20CD369 -9C6CA4704DC5C65A2D66EB155B7AF1C9BB46469416FB49C1C7E17A30A5F045271D7DF3FFF2F42C6B -470701C381E3456A500C6BB3D0E47B4D91C5F34B49BB6272F1F8698B307D89EDA3A1565DAD1C0864 -627560CF922DCF5B34C67860352390B282F95394AA2CDE0E97CE3ED39546A6AF1C52BFCF81A29BE8 -2C47C99E8050E4889E4575B75F39E662F2DB7420673797E2ED3D67CDA7AE2C15D0A0A794D57D168E -BE13214E89E0209AB2C0EB7784E9491AEFA3C02D0DF3AE5365A0FC4AE023CAB528162C7A1B173664 -9DFADDACA8DA5FA18B7D6489E4229E9E24D38A620464A744A5C60F6F9D334B908706B738AED18669 -8A8B278341FA4D65A0A88680BA484694921512F7DE93337FC1C02BBE6E64AF2DAD07603279D87329 -1D1F4D39C1DD6D89C90F65240F4808F6F1115CA55B88E242565E59F3BBF1F10EC7B88872E9AE61D4 -4CAE185463EDFAF7DF63DE4D2207D307AFB61501892965170D2945846FCF5973A1D458607F50C15E -06E5BEC715E0C156259AAA6C735593E5564F65F443B78CC7512EC35A56F126DF9D30974A40872E42 -65E1AE5FD483CFCBBBA26DEE426CDC4721F19C3FDA86ED7AD4FA1120F63669BEFE7002B128CEAFD8 -C63E8AC09943B6CBDFB3D2476A026C00A8FF81B1F651B97F310C82ABA5F388CC1DB5AFCFF5996D52 -52A6A42FA4D972E41EE56088F78CB966F9051171C472C774879AECFFF08BFD9CEA40D7C298922ACE -64F28C14E0B81F4DCADE81D71DE3983D87D905192EF13CEE71B2D3FF1A88AEC671EC318917DF98A3 -C9054E372D22A3CEC82FCC217F47319A40900312F6E32B536B9E7A7FA0837EC65CCDB5FB0D414371 -17596CB39D9382262DE6E65379D3A9709B2CFBABF5FC5D5B352425F06F88CD31012A2A4147B112F0 -C1C0ACCC808CD625E0228EEF66661F70AF96D3DCFECD402700E4F6522AC9A856DA466D55C84F65BE -2810A1565163872D62EB81333A698ED7B68352CACCA2D7AD38AB55C19E4F5582F75818302F5FDADF -1DCED09D94872F2D48FB636C8E38C7563C72C771A08C6B1F041F3532BDB39006C89A33C09BE1E3E6 -03622D891F98010BF1DE5355F557A1E09448D486ADEF565705277B31B8BF2B86761E32631E3435B6 -88B79D566F1747BA456DDB43CD239FB47FF7B425EAA4C657C8EEC26EE01AED07CF916E77D53634C1 -37AEEA009C6B515B6342C54BE2C7B95955B1A9DA277A0ABCDA2346E88018C726F481F71D6011AA42 -F8852F2E5749518FE3B3AB668213FE1A05C10A1C53953D75312631D6BBBA01D418199DFEFF8CF548 -6109B099FE8E2F606165FE30F532C03567785D5362AA873C9D3EECEB20F1945D55F49B0CCAC84967 -59FCC7292E46938943C262D78F3212D3F9D0F7B103157F423D71B1ED54B2A603F4C269029918F238 -EC6828FFCEC66009DB9C9E59534EABB183F31D7AD4C57B1BDF0BD2CE5A421882BC10CC1BCE6A970E -2B586BB221567CCA483989DD0B8DEC424C1D1FF042DCB7834423CF244EDA28D2D969B17440CAEAF0 -24A6119DB010CE366821AFA424D1B8299609C04148275AE6E5257A7ACB3C766C747CE99CBA2D703C -F19B7CF301B634D8B613DDC4AFE4633A4D77BFF8E00CFB5E289EBBCAC90A24307E7941EC1685CBAE -400CADD876FCEF7F6557EEE167D2035A05120293527700DC510B038A496BE1D5CBAEF24ED39F7421 -1A93AADF22214ED606A80582485AFE358E3A46D0671148998A3B3BE209467009B43400870359D418 -9A8CEB4D5866AB52D16D9CEB1EAB71C07E6CAA34B70E3096BF7604C22C40D5FBFEEA616DA3BABD59 -DCDB97D883FC8742B8267A16A99B7953225F7144568D566E64542C92E538AC140C851E5D295528EB -7CBB49909B1CAF6409C9BCCEB325468FA0B5F7CB2987382616B477CCFE4F4AC79E4A6F7165363543 -F04DE5B6F6E1C2E910CDC3CDD6C4C92737198F892337DCB6647BD226C820AC99C65D8E7772BBB74F -E65DCAA8A22C33BC168BF48E40A82700A3A7668C5A9A71E397ACDFEE7D556C5C19467B7AA69C260B -727407AC837BDB7D67DEC055C1F45D8BAC61048C45BC9FB3CEFE7549EAA2992D2EDC126FF7A05EAE -58613332A2BC1465B2BC0429162B907D65F793D236EDDD8D35405866D71B25F62DC4A7E06D4DEE82 -840ACCAABC0774F8A63E9C0F7FC980B3583E7A8B01C46590E3BC04EBA565C2EA94F057D964A78A90 -EA9F52ABFD70F84E44E434BD10A42E98C794065724341F907E35D3CB257161E01C7084E3A0166D15 -CED65DA7BA87DBB2EA33D39BD99AFB93D3548358D08330E807F8552CECF63C84F805205491BA3A1A -622E70C232FADF3BF2DCFD6F0539158D3306506F150B0518371912A25EB96163D73E9EEED42EDC84 -D688BC7F7708D9DCA348FAB4DF62E5809BD094842D0A31DBB7C4B41F94D946810C5EC10B69AABC2C -91A59500B2E5D37F4755DDFB7AE4ABF757F4C5BCF77C7F95E6A616646456FE8F18407080BCABBFA5 -7704287AD26222DF91AB2613951E2D679472F8ADF06EA2A20205EC19972299A78BAC52114334470C -5F5890C2F846B4C6042D73945127F2E3910ECA1C4CD7A16EFE4B4BE38A15AAA710682C3836A8CA83 -FD384970139D8B46FB0AEBB002DD224199672FFA02250FBCFA4E649E335428FC71F50F45E498419E -DB0E970F46894A48F65580881C9C4250FCEF65C9B28699408E18B26FE6DB7F1CBDB767564E73CB59 -54C6D639CE33220C894F36E70F71C9F9AA3FE2AE0AA0E3F2E304EC5ABC661675CDE2E70519E4220A -E26FBACBD01D5169EB844750753E6CED53E3678FDCD08AB93E10067E9C64F38B40B76D99B6CD92BD -F4155A1EA5CC824998B59AAD06E09E5F15EBB2288D66EA71B296616734FEF2796F07FF0D8B047074 -A1111D68B99C2B70FC56E74A51B062F4998ACC85B1943C9477E436E5CD7AB18DBC898D21BB93475A -623BDDA71D7B895BA2D4C10F4B90BF335126F4FD57D73AFA50170F6B3C364922E551D40E35DA75FA -891762FA23401D39260F2E92C7807C746F13BB35CEF9DBF2E76E66A72FEFF095DA482A4DE8A42091 -7065736CF4DE904FB52E649A32255E2030A7B31B686353492F31C064A3C4B0448C4BFD44B8E15384 -FD809B8761EE26A7DFA1758D57CE4F0BC376EB2B3833534B15A83436BA553955ACB5A7A66796AC5B -92DB5388BC53EFA27508B08E82821E5CF669BCE52BB860780F749B4F38ACDF5FF12726BF3EC2743F -01014CDE96FE6B4C40A034E9EAFCA2A35CCC776C2669E6AD138070A40F48ED79136D7FF57E993E09 -B81C543FBADD350FF5B5F7A46F060F88E30FE2D8233832D18B6C323EE017EBC1DF5C838321CDC8A8 -4CABCAB20B60A1A3AA028F36EA6E87C850AF8AF7CD50AA6359038BFA8818821D02CEE8F51DAB8C05 -F7AE9797814D97F3DB8CCDDE45B21DBB15CEE292FAA534A5F317B357F4091F3DA357325B8B9F5EDB -45865415973C143E5E5BAA483FBF2D06CDD4246675EC58B84C6AE65CA743117FF00F229243772561 -31A7F2BA26A9115AFD96C18216CFDF41B7220ED0CB3FCC26C36380007B382A02AEAE428887DC8BE5 -FDD630AC57EE3DC156C7B8B29E687F24442E35CE10BA4087295A641F7139C831F7CCDA6CCEB5DAFE -537CC1A97C5A337D3C48A6AE947F58A30DC08CC7B58DBBB4737AD52783C573FC1E9408F55495A80E -7FDA61F0B9C4F090158F1A416249EBBA936C27BEFDEF19D1BFB839EB70576A010706D8B95657B218 -9C2AE04C11EF9E57FE09880273761FB4302C388BD608FA0C7F00F033C9C00F4E3D5CE2D903E0DA52 -E69C7745EE9FA75E2AD93DC6CB5CCFCD3782A699B807AFC36AD1F62B05856D5DFD6F88831B90EB3D -CD523582A49732E3FD7253126D39E8AFB8458B5F7AD7F94A8DAC13365F433C857AF4A42C0A08C4DB -9887C4957259ED22D13CFDF5995DA957EA5A0F620B0214FBFE08AB6D552DBF048D62CEF6EFF12F15 -3511ECA7833E0E3E95F85E6AC0F95438AC4C126E1F1ECF336ED31CCA7EB216D279877123FD9FCD8F -B5E52B587CFFC4428456DDCA816819A8A4A211D8F1629E5D42BA4C5C356E580C8A22C61D987552FA -A97893816DA73D423686E4EBD44375C257F031318865A20F22115E72BF1EB9F93AAA169C140A33A0 -6C35BD4526A38BE79CF40AD1EFA10411E8F3300A8A8B97AB140EE6734E1BEE6C8EE443D698D34159 -97649C6F10F20ACD80236422E215E146D744A262DA3FC88DC0D86FF66512F49D3F957D3C5CFFEB42 -4823509F33F155057A4C6F37B52F4667767BA94F6B8B62856B553F307E5D230C44CBFDC9A97A45B1 -39FFB2F2565EB0E22026972FAD0FB7B9576FB6F368B61979943A398773600E7EE1DFEFBF26D45D40 -BDA66EBB96A56EE9CAE0B2420C5DD83E24DBA9FF885BB844BF3D2BF93B07325DFF60C0CB5FDCCA0A -C8FB5A2E119D5AF26E53AB8E3B428481C2871DDA26EF0B621CD8572B3C664BC7AAC01A1D05B98F79 -1A7080D294BE81099BDA7982432F3DFF4775C44D23F4F1B2E0162B61A8B2CB5EE8564BF98E2ED403 -2219085FE6194C19DAC98A421826CAED7F1AB1477AB327506010217283894235D7DBFC1153D5ECC4 -8AA7293F19592B4D7E95FE55151889BCD1D7FA7DC2370D2DFE11D7E4EA34B5C7A8E73BD3A348FD38 -9EF45B6167FB90BA44C23E912F9A4F2FC0427ED070592F7110183BFDB2C400393BA7569058227926 -351F07FED4F33633BA03A72AA2DC6B598E49B96021DD868DAD0F352E5722FB714F667C15C68D49C0 -3D822D82677EDFE86FE9668E537DA284068C9B0AED83074C92A5B939296D505B837E6A9DDAB1AEAB -7455A08A114C2222B339284674B74BF4CA9EE0C020BF2A148B439C71C6BE51A94CB64FBE4A7EB295 -5A455047CF5CB348B062ED4F6471CBC3E9ADD9BE9B96879AC7BC71BCE02FD02F17C6063985A5E898 -3D205AA1489DA13C408990ABA1C54F2F501AA172F530480D789C848118C0A74EF98D5F607A067BAF -F6030D887AC6A6497F9A0B38F9705F328AAD4BFBB634F739386177B07F22D5771282444E5EE17335 -B4D0EC86117C697E79A5F4F65FDC08E4904DAEDAB20067EAE2448FD4301849E456D085F392DD1316 -7ADF75CCFDB723E2904A9C0C976D6B84DDEF9D92B0E15FB246C3ECC2D0BF314CFB957757B3A3E8E5 -801F520644E4601D291DA0F7507C06F3B9BB36FC1C70EAA444E14E56C0CFF06C7F853DF36DA9D8B6 -AF2544B853DFFF535A7E5C6FC145250CDDA229956019659D0D253A19A7B51A4E538BDC01F74D7704 -9949C2C97C7EC6392C2E61CCC0992B66DAF1AB08551063E53180D2A67DE496716CCBAA45462D9F91 -B66A22545962DDAB120511FF08627131B95E5DEEB8B4DD9643E7B2AF65C0FDCE11F5F1E8DD468DA1 -8D41C8C4F00EA73836F4F70EC50FC3EC6D358C0658A4261C6D15A582A2C7C994E7882E661855B352 -014576858A265FFBC425160669CE159D07EDAC04D060B44E5800A7AAE8E339C29B929AA81D2F515C -46229D2080D5917AB20AB6B34FDCA8E4AF64ED660A3173786FB1A1D005D575C2A5187D3F7CFDC94C -CC44A38C5CD523E9DA726D8EFA6DA7B6131DFF3435FEE838B2C7D6B97934295F06202D307FF78D90 -6699CB9C5BBB10D1D4DEA5FDA5BFB094E704607083B646D37F5DA1FC7AD21B813F44D8C1AFEAB666 -55AAA19703BEA2E77DF3BF350E17C74B3447A452235919452B5175570A006C7680AC05E8950A62E1 -1D7E3ACA35A397D1E19630D094A86807593C97F4C484E4E06BCFF708B6DCA972E3A0009E1CAC0EA4 -141530F5C1B8AEF5E1B933F37FDDBC4BE22B74FE346D1A3F5FEC0818F8E61765568A2AC04713E828 -F98C449D9A1CCE52D10D61DD8BFD084C8D099A75D89DEA64D5A7CC68BD5B0593D97953DADA976383 -F5015915618AEC56D71D1DCD55B89736395C609B315A3F1E1255432FDBD37F38CC43C354FB4B7C44 -F1A7318B0B7E99C3C08C33B953727B6A6328051783A0A33E3CD9E498346A3CA6A77B517096EDD52A -E443B87643A646C3A7BB97F742888D33F9B3127E61942F4103C1DBDCD8EAC8F9E259773066736CA6 -53CE57E8822651261D847C131321BB9D6626A1AC50D047C0BA47B411DF2A995545BD68EC0287CC9B -31D5DDCA8755EBEB10ACCB3903AB0FD5788E984220443B8459E7C078DA4289F1350905881AD6DFDE -C47302B0ACB0D4AF8CAED02B4B70DF3CF8FEC118F0FC2D3DDE3E494CD160E676E300BC464BD4400D -B50EE43B314E0517037BF971ACD7CD327CB2134893B8A0410E68DDC518F5DEC966C7884CF5FDFE74 -723177F20DEDC039D879056CAAB4BF045062D3904F615C5CFE109AC7A35599C94024B41019B9AFD4 -04A80ACAA4837929F5C9317680A13D157A03B59A5588DF79D2E113F5F51021D6F6F90E8BBBA2C252 -FD10651BE80BAFD59C53A3367BA3C28DB6EB9DABF1EA99F47B503F627E15DCF3FD645FC52C5D5D0F -2F07DB4C25C0D1E1C00146E1C4D973E613CCDBD3F9450CC0F5343D79F05E9492E86A1BB889ADF405 -03BD7F3E7543436859184A5B20BD8A172F350D846B7570803990ADAA48D4B9155A2B4C4BFBEF1E1A -065C08E03928559735BDD442FF1E83E1FA20A5DA57D8BDB2FF5427C034CF0128AF111E6E73099E04 -6E0C240E80A73D7BE72B87834E45898D475521CA3306707631F5C6136199F354632D1A085F12A1C7 -C473868B62E534D15F5484323E63D0574196A19EF175214EB35A90873EFCFB92D6CF68761D45E37E -AA61E1A1979A82009507CA193E44B36A806486665CEDBCF387053ACEAB979BD35D30978FC7659ABB -E844F4ECAB3303318ECE80777A5FA5A9DD91B3D06804C4B4E9B4EFCF07EB89866D0DD8CA390CFD15 -98651417114D78776B1A1D36B4BA17746D6BE7FC123D473EF1EFED1C3BC1D555F914536869FD5B0C -35F9C83F65B0E6BF7A627B9202D787D72C600DDB6BCCE613D88492E13CA0AAAB196E8A49928C62CE -A4FFE2D0208EDA334ACF47F20BD793124D2C5546C03F4A364369A76A0425262F9D9118AF54E37D32 -E33AB25DD533A49DF5FBF1BAF4CEAC2D9D378CDCD13B00FDA432D9042F623DA41AFB80699B5538A2 -5403B0B3EABEC9E8EFCF42FEF3EA9F91766902CD206B0787C187D5370B60AD6DCD002DE2DE8DCDC0 -B4719A797C5E26BAA67665016DA0D967FA1346F9588AEDA174CA001B31213617FE19EA218EC23597 -79D979E2663166489C06993230B0D07973A117C4E3F4A4C93CF8428248DD5389414D679C69644142 -67C7FEA17E35B0CEE456667A9B1875C81B2302BDDEA2818D6019FC1622A82051F60584ABC904CD91 -8676305DC03FFBCC64FDDAC8D8AA9CE2EA00D6C97BC63C8A617DEDFC0E40775649438E9F61AFD179 -5E3B20560B01BE5E0983F136CF48AB206954E41DEE0D9DDD953DFD01CAEB569151D6BC0DFEF29D70 -FAE3E198E7EDD8922C0E0BCB8BCCF1C016142C1A8B337AFA7A05A9D7534B184BF3BF827F371E9BD1 -9A71244ECA1BA73D484CD2FAD54DB2F0EEFBD54B536EBCB5094E6BC2F5B2AAE41F05B4B311115876 -ED42C34F8E643B53372E3F6350DB8A38445822EA9A33E27FB0CC42CEDCD1FE2FDF723FC47C996EE3 -56C402112F24D0AF899B2D00BEA1CFD427998BD22B2A09046D6737814448ACFB10D387547D7009FB -384AF0562C85694C071584236D0F1F3D3FCD0CFB38B77C81889061E668BA7AB37AA60F58A3967DE2 -6F939B79CBF10A9DCC42852561D8D6754F1B660D216AAB1E133FBAA321C56E2584BE5C9BAE20CCF0 -0E8DBE6D9C2FCEBEBAD945C3C04101D2387351F132628786F6D9D4CAB83419288D31F9BC600D9664 -12E6AA457CE6CAD26A4C0671097B98C2384C81DD8B9A3222D4F4BBDA7017895C3EDC26662779AEE7 -40D9D7E24185FB821970B0A3A94041A69E4805EC88EE1EE521981536F2844FB8F5EF645F67D42CE5 -148E2DDE43AD5AEF200EDB3A2C7866C98458A92666E5F9E070178BCC39F65A893102A10564AF4E8C -AAA5075D2F8CD7FAB0401C03AF299EA3515CC93066744EB5AF7CF0ED06675BF049A6E3C211A89E16 -DE5BF0445A7CCA6EE8EB0347454950485D884606651E5887FE8B24323E2AA16DE22FC1FC8C4F06A8 -2A1FDE5758976024068197E1F4506E4D3D8A16D40461A4586338B374A592DC60334402F76388AD6A -457DC3F54E6169CF7AE3959676E966A45609621055EC3AF80E182633300A4418E34A66DDFA6B569E -5A13C9115B5FD3EC1CEBE50FBA247F60803AA83976F00117536342DC3D9890C49B2AC701D370E43A -955118967827760F7091469C5406F08F18D7E3548148CF0E312B1DC71DF67A5E7A1656CF2F47F3AF -F3DD50FFC2FCDAB7177285B29C17CA43019F62AC6FBA52D1493ED7C427526470ACC8389BAE827759 -4958908F517B2863B83292EB5AB3F57FFFB08393CA610FB1FE905D88A0A16AC395E2A2A6DD033D6A -0D68992F830B2E1B95FE357BF672716E88FFB92FFC3D62945D1EAD22BC68C51EE0E10A43011DB94C -44685A5C4576F6EF44CBFB45F2A4BF110A01657DB51FD499767E78058199B31DFD60813F1A344F86 -289F9378231D5B151C92385E3650B4FEB1DC91018EAB8474CBF69FDC1496A4D078D2C351C8196451 -247A9DCF8117E5B637371D8E22E248C64D999015C3FD2311E9950B8EE0922FBDD3D7BFF766BFE9E7 -CE0BE12F318FF2A7B5A9C6D00A54401609304ED2C55F5C1EAC3D4B38355BBD85D66D61636FA6E30C -2E82829376BEC979A6FEEE040E452359768ECF90CC539A546F17AE906C76F14F86FF697797322B05 -1EB311A759FE260C1EEE5DACF383816AAF1294CFFA7BF87A4D9BC595EE8F2C2F86FEEE11AD959D86 -F22FDAF4CEC098942A57E57813A0FA99239E994FFF353C1E781D666B8928CFC648FCF0869FC68468 -BDBDA7D280DFAB8B0B3A4CA35B074B686DE8D372C61FB32305169A1A9912F6541DA16CD6316A6EA4 -51524757BE5CF6E820011BE3859FB8B8578C100FF029680E05F0E0BF11D33FE19460C85EA5E4C0EF -28E29407C8AE6BE01CFA0D5022BF9FB01416FFF722A784DFC8FCE330EC95737A854471D334FDC58F -AB42867A7B62836A8B56466E9A6C1247D46EBAFFB905CD4321970F59FB8D6FF65FDDD34BF913AD32 -2E68455C5FF2D23C1A5EAE687F259BC982B6A384D35440F7C693CF50B9ECAC0B5578CAEE87588B56 -2EB6B7F42034C9F2E545EC866316552354EB3728C7D26527ED75174EAF635E048B08DC5D23E88981 -070AD5641A652F2344956E9CF4C16E652A99F4A644D1787D6D36537489DA4D74E61B2FC4DFDF1D1D -9D58F9C26C5EB63200526AFD168AC57D5611ADE4D4A382FC28BB60F9E7D626A6C67AFBCCD1183C5E -3CF2EF210D0BF5CFA7BB10FA3887BDD4CD96EEEAA8F9219AA2F10ABC0A960C3B57C0EC0313AE10CC -FF1F522124CFC8D2D49BFBB0C193EAFFC5B48FB3FF30B21CB76F0A4C0F1377C9223145BB0468A5D7 -1B9BC25873EA12E1C60334571C67385C00D0B570D3FFC6C7FF0DE62C183C76AEEB12DFFEE1459E0F -C818C621B8D12FA1357E2B55D48935D70BF140B4CFFE8813DEFD479350B20DC2EB1D3CBB1A2D3DC6 -EE975D58C89D61FC50E6A0197DA9A586B72255023DE47DABEFB11E8AA02414C2FF6258A281219B9D -DDFE41BA7D7977D0D6F18224FE22F7D4E9355FDB35BF7ED3418F4F68D093AC48F7D8FE4194FEB6C8 -0B9DC1F74E023C604DEA27089F98C3973FF9F4AD7BF7BAE601DB89B08D5D8139B95EDCF6C885FFA8 -B3E4B0477E7040225733826BACFD1EC4A0DD72DC41734856AB9FB700DF83CA2CE812913BD142D84C -5C83C0B2583768198AF9E885F2BA74877A414233207234AA5F18840557CA11682AABDE8993533887 -7C6D404BDE4153C9827EB16D66C1D73A8143C8A2D3604FF72CE579FAA3C5224BAC48EA83BA848429 -9472007DE96466B5B29ACC7C03B05DCAA38A48BFF9F214DE43146AE4E04FA705421917F99BC54533 -F0EBC01849E396216B9F0794E6F6C6B61B52EF1B1950C0FB609895C3C55FF574163FC8B6B09E66AB -AED1810E698FF37CC1F926B2CDA3B48C7D77790EBD2D514B6F385D397F713EC3AD3954EA9C846158 -6031D369E8B99E53408A79D64C34EB5A56DE8A67DE91837960E98A66FC04DFA0EBDE21DB003234BB -78665B039D0A469A0221BD541AF7149A2A659C300132C14581EF766FFFBECBA8B58A5EB3F95446DE -F49AF863A8113D17B2E7E6ECDEAFC3834D4DF900E3475596E86FBB4E2974C090DB4AD61A737D611D -92B4535AC291C56AD8B1C031D2F9B505BB77517B737D70AB3723DB52AE2ACCD5DD2F617423ED3CC3 -9CA882EF41757BF7151806A9B8B0F312808863E3673FB54DE939B35CDECA7FBC4DC3BDF5A5F47D35 -E345916C39366C8B4F439CE1C6F1835C320BD1E67375B03B5DE18C93256F251761A4C8CEC01019C0 -68E34447BCC503B9571FE8000627A6B3DAD5854CBC0A2D69E5A8F46BC78F6A7B1422334EC7A98ABE -FE9B83E01DCF3C6C9273B346F3240EA225AE4A4083CC7B0EA141A0773FDE940768358EB4B13D82AA -304A1386D450C1C0C6A7D5A8FD2BD313F78F85248B5196241E31E5595F3BC01F37700A2DD3D4A0EE -2DD01A36569CD507130E8F5B1E96CB560BB7DA15560CCADF3B2C9804A11D9E8055C9EC70E48C1D21 -3EB756A1376F2EDCB7189D78CD3D6CA5865537EEC31C17D801605EFD860B0B629472690588D02575 -02C6F7A75B9A1C1B397781329832CF3EC43C09F1559CD562C48FA9500295CD3B0A790DD3FCD4684A -7C7AC49AC9BFFF36B39A9FB148BC28D37907433943CBBF0CBDAB46D3EA86DC8F81C859C52D15302B -94A9B51C199B7104DEEC9D769C2634CECF8B700CE9C04152CC59C9326BDACBEC4312DEED92DD087A -1C4840868D9F97CAC046581F762F75E8D24D6445370A3F1E0AE74A6478D9DAC37E7FA5BEBEC0A1E0 -81AF89C1BBF7F51E3E2E22C8C405E8671BA85F1BF0DF79A465DAC7EC07F731E00632E017D190A99D -83E27E5C2E63D7DABBA23B2E88334C63721AC5A4CBC5D45F4C177259F34C2EADE01FA008AF65EBC6 -01D8DD16436D86AA94C99F3CC0A2F87134E73BF22F108B825A8963B49C6C685474AFE4A542C8641D -C0375D7EFE9AC1168D9700459BE52D0DA399023E141969F25C0DAC4668534B6647EC85454BE945E8 -26B26DE6E3C4584B97A38E2B40A0D23481BCA78084FE80E00A71A790BF31DF468A435ECC88E60A57 -860BBCA3D65930186E9917CBD209C230E8F8255A7ABC7D3F043AE4D7AD63D9980BEDF062B7D5C298 -C40225B6D03F29A0339E0FCA02138E526F06B9EF47F5E7A8068A846CFDE2BFDEBD24F5A73A66C079 -18662AEC80B43246284FA4E2EE0D9AAB172B1E59A6CC46B801149D8C0DF6DEC9A55D8E1B0EFD9D30 -2FF618075944CCCB6831D336B11617107B0530D09885E5CA11A5F1FCC8D69D603DA16BEA51116D42 -CAB1AA1E4D7B9B4D79993F2BFE53EAC904FEB70B2D330A89780EAC10D12CC0C35B8399F218AC2976 -E57A26BAD20CE2FA2AE2363D3FD2A8A971747556F2959DA74A8963C20B504711AE1CB0D0C02457FF -2E9BF696B159AF031DD5155F21C0F5549B0471A3C5DC8918B675CEBCB23E29322B959ABC05283A70 -2E878DE8EF25EA760F3C5C7B7B49D398283DE2ED837FD59F7C22D62C58FE4448B1049FDEBFC8787E -67D7DAFE9774979BB3802254DA59BCC0219F98C219F84D995CA768B8B5D9D4A32525DFECE003675E -E4BD5D8DFFC11025AF2B468F9207B5B2B42349B98232BAC0759758C1F4A283405815BD7145C93FA0 -8F3ED2826655053A3C2559073D8ACD199DEA2C5BA5F616A2E48548B4370EC73493BA07E197165DCA -774438B0766867819C1154D1959FE6E01E6312E0AB91FC2E2BD240FC8652A2D456A1DE7F34EF372A -53794D4C4E050BF3CA5B7BD2F1B8DE93B4C8002485CB219AD2D029739FD3C81CC6E78EDF38723576 -1A57143EEDE5CC887F282FECD261F6A25D0A7E154ECDF5DC38E426811BE86AAA458577E5E0C5F0F7 -5AAFA9C41E5D1DC9D91ECD79B514F8CDF7A5F1A189470D35FDF4F9B8788879CCBD91B427822ED658 -389E981E0EE5F7FB87692A3E3E931DF8A1D1573E3B0166204240B7080089A09EF7487C9AEE2D665F -5A82F94C877FB5B0DC531CEBF1E71C6592CEA2401E4B5122E5091DF03D203DF979B9A6EFBA12E2F6 -B422FDF15D49AC0914D372D21E871DE65CBECD105FD4A3E4714B9CCA5C6803FA39DBB015EA8A88BE -7913502E562E5B170B87BFC8572DC9DF49AD63694311EF1334444BDF0B4CA3245271C1F7A4D7FAF1 -703E3AA0E1EA8D5C6E821B28707EE0C9B4F22F23796FE87356C58AE2CADC191F4C58E1FB58DA03B4 -5A25AC95DBAE13A293474217BDB214742B9D9D6AF35F70FED2891942EACE3E625E55FFB820543FBB -250A062D3D395BC0F219ECFE0D76686AC148BC41476A887BC494DDBD396BE200FD3E03CFA12EC9AF -6B934A283C42AA05589AA6B4A8D16946BB51F50419CABECEAEC5AEF9085C9989289E9B46BAFB6FB2 -782D84DE2B068F91A9744AAB237CEB1BA513E57E4C307108E993C972A3E0A898D5A8D27833155031 -FDB98863C3BE7FEF3004CBAA5CB60A1F2E3EB4D7290FF5FAFA088B1CECCB6CF51A58DAAD998F0839 -6CDFD68F5ABC9C1CCB8F6514107773C69C26873E889D1F79D10E866910E4684186FCD71C965ADF62 -39BA3418B313A27AD632300969B6F284519366ED85E7CD968D64823F8C59B5911A72D0A20EB72B60 -3A61E36F52F256FFCDF706B4560B4DFA5D918FBC530D83A4B3C01BDD3CB4572E24242D141BF9E775 -36693A0407D002E09CDA5B195BF1CCF430AE9824C07928A050D0B460F2704BE8F9E647A4884C4567 -0A81EACF7CC038643EB0FF18A376FF6F32B6FE4F197273327FBBDEC6443A299CAD4B26F7778A99F6 -5A11BDE047153E764039EDB251936AA43DEE50DDFDF8856519056AAFC4C5AE6F2051AF0579A9ACD4 -1D00775D7DBE70022CC263DCA5E0A25B9C7C4F5C418587666B2FE24816B1E0EC92F9074F1403BB83 -AFC3F1D52CA79C387BDEF864366E34C90BE52F7AA09935373A07E4E026224E76F9EC3CB9E7EDE50D -EFDA48248D61F3CEC880A3B8843306375D9711E58645F3625BDB8E87052DA67F9794EF4AF8DB0BCF -E00677C3A26907DC651BC838C40EC39E2B5A5DC0DBD345944A6C32226089D63C52490FA10B215AE7 -03CFB663EB8A47793B84CE7364DA1C4E7FCE32DFEF09490121222774915BA59C78C2275F829D15CF -4D8686B095C38C731B83D48738C25F40B8ADD487C350A2EBE846C3916AE384CB1050F9F5DFE09FCB -D9129C6270FD86D55A459618FDFA4F907E6B4746196BB717865AB378414029017551161A52E9D24B -E4F7EED553A927933D4ABC8F25DF607779A717909CB4D810DE8F5762581900E224E4B91598149BA4 -71CF8068ABE8744356B261600BFCC57FB8BE45036CF6571D9B2A95304933BD4F17215F8EF53F8E08 -1AF61FA7F9583C34EB5655CB0ECB82246959F09091F36989EBDD646BEDCA614B9A61AB7696B3FF18 -1058A150FA6EC1BE2EBC7F64357A3FF2A2B0491D2F4E0B970DE5B7788B467CA678039B5EF55C88A3 -84578D427FD2CB16C87B0BF0A3D37CE8ED43E0F049AF2436344D5F47C948C632C94A287509282561 -6C64C5D262FE5B24916FFEE982A69A6CCF888BD01D62EA591EEC51F4B7DDFAFFBEEA93FE08D736C2 -0129E345D06B10246A5F57151C198D407730713F32299638EFBDC01367E23EB59AAD42A83AB41B43 -2DB462652E29813740F4680A5D4BD47B18328FAE6BDF4200CFA4CE3773809B45E8887C9B2E423698 -9F6C48D64F5986F563D9A7538A8716082F81936AEBD0461E6F4BD470436D8B7656F0FDF89108E6DD -02ABDEF907731D458D690BC608EA9CED09EB1E6E64C0790C7A2378201CE997FFE0317679EE1D4EE9 -F91157449323E53B4ADA8096CD628B5861BF794543A98F2FA2AB54FF0F25A13DAD43DAF9394329B9 -5AA53CA32749FECB0B2BC035DD1EBD53FF9FB5AD8BCE06CD89E5568091C1CC314CFB1D9821D7F9AC -7C55F55E0A16E39A87D43148201B928F3C42B110FC056189DEF183745F3B637441DE8BD4C3C7EF12 -F4258E306B2877ADAEC63441010750DB4E6269A4C78A0AC01BB3603C386651FE814031CB5D8C1F14 -9EEAFF652A53E57BBD4C8C0CE36A84A319A53BC1E5FD3F1ED1EE72F4C1A9BF264B594062FCAFB22C -C1FDE3F2E3D3C17DD3F7FE0E15EBD812D550227C06D01127385374A11438ABD50048E17255FCD2BB -85122A6FB9B7DA9D5E9DE8A747FAE0DA45A1FCEFE92B9E70A5B2CAC668D4D07527A5C1403267D823 -048BE671F725CFC7474B44FC5AAA348420B2D7C23C6CA066666FD6F2208E329878D90CEF1C2E77ED -22D3BEBB9D547810B189F08920A27E7107F208591A84D463CE2576C70C3DFE6643E4EA93F4E1DAEB -41D46F0E2F56FC10C69AD5034FC9859D31CF27A3A1EE256C93111F81C11ACF1FC0CE20B90BAC9AA3 -27A5C85A7985B951519FD4B03C40BE637162AF41B2FDA68F0D1E9B7602FE2659D3D75955C579AC51 -DF6A552EB9581AC3F712F083F19B52A6C4F560F36C59CEEB0C996AAF1728A2AA45DCAD79BD7B23AB -388D5B0B64A2B95154B6259B730B0F4A72C8C7F7CC93C7D64D9D8810D1F63FF8ABD4DB89824E2D26 -4FDEE916C41E299211DB1A53256E1DB5CDD04862F034D9404B73183A99D3D13D642A663F129B6D16 -7095BEB4EAEFD03DF2FF2F0B6B594C1EE90FDB203DA89FACEE23F1BA3901FECC75FE1811BD701259 -343011262B6A0A9707AAA6316BC3C17F787BB80AC8DA5AAC942D90F80C5A3BB59E47EC767244AA95 -C63E50BF809998957936D3BF6ABC24B0A397258F9EB4DC8F65692CB023D9091FB180C69498CD0C08 -BBEBADC84A7E0016E8F8BEA325D924EB0DF82E75D2CC2CCBF039B11934363D4332C5FBC5EC556BE8 -5EE4E707CC2753CCC43D2ED50558E51A104221C9323CDCB0199B7B83454DE3FDC810D0F362C0299F -5DD981B31D8E3DDA284FEF9DC8F9C8DE138D3065437A7FE8C30572AD06D62E8527AD37AE39AAB0B2 -25F76A25F6C6505241ED73BA494CF923E919F688DDEBF193E188F8C4C154F21631080763B4D091E8 -AD1D2FD6649E0CD9360E8D1A67A5B5FAFC67547CA31C95A5EA8D4EB5D68B9F6D6532DB9B54584735 -9558542A2AE58C09F3BD2918EFBE1699E9C8F2C2A11EA4D224C726D2ACD4A8D8ABAEDC6588CF2AE5 -66528B94F55B823A2A1F7BE19000F3E7579D094E047075DF18C8C868760295533B26EB3ED90635B1 -29C17ACA679C3E88B06998CE5A7A2544B700229F5A6A504BD3E45B276471959C8A3F81917A534287 -39B5EF9E3D463B3BA7318448E2A3E79520D2D245A2A72F31FF7070B6E4624E3A5E216BD103640C8D -F387E49D732529C611F8B971073F17EBD2F6EB18F9B74A67E1997926DF178D4C9EDED435B9682F1A -279C81BB9F60DAFE125845A2FF3B02979E5481C78A45C479BEFB9FEF3CE2BA9BC46C77B50B03E48D -A6D17B76F06F3AD118371ADC69E178C52B5FB4B261C9311874ED07DD6D5B3226A005FDD7A6D53848 -09E7063F036CDEA41619122635E835D2D74CBB6AA9B38CAA4D819C26E95115FE0DBAB4198FC5838F -2C91B7A87B07D734C6D4F4F83444C1E90AA9BFC908A2BAC4B3DEF9157AFCA5248F2DA31CA87BD363 -AC25E9E77F741D4B2C6E02F04987A6F49D30E9038CEFC41BA172DD675AED8B392164411144E5B738 -F3210B0E66B17A13CB9631C33D44484E792A7C082DD0A5382F34C5637653261B1EB6D2035B08B4D9 -1FA9AB770CAF40A103629511F7B43F2743D7E583433DECFB19C21FD4FD0AFCC22A4119E77C87BFE6 -FE50068B22479015BE5A9F06BEAB4D37412E062A45E0CBCD7BB39FEE747E96306F79FC4F2E8942DF -5D9DA0E55AACCDA547DA19D30B8404FA121298B44C9CCE198C708C69A8D6BF17591C5C50D3FC5BE6 -961F7ABA8F366DAE957A1C3730DA4A5B4F035A9274675EE3BBF0CA8CE9D8349F50CABB1C3EA4948A -BE6F9F143592F1EA95404E6909A909168E3279A957AE1924245C356331A75E7008BEE92BEAA304BA -40B7C3F48F74D9018B3247DF50EBD7CE541DA48ECCB1B0BE51A455C3C13C279D4D8676078C3EBE43 -08748D52C9B041D3E7244C745B1F2F742D010A9E60695F3EC4FDC1050AC082B905D6A57E8F407A3B -472F731011A5798965B7B1A307E252FE02C8F79CEEDDEB6E165F1A94D7FFF18DDBDF79477F14E9E9 -3981ABD200FE7771B29D1D2D120EE79D28B9543818527039AC74085EAFF241B56D08220C958B5D9C -87C0C04A14D52AFD475B542D391BC54FF33DEF8D9484AFF6873BEED32DDA4B371112B523B6CE22B4 -0D1B416B64C9370F1CDF2C548F4CCBE9E12E21C36CC3EA52DA232DCFB65F66B22B5E2EC04852510D -5E264EE939BB67AEC4764B87062AEB7F680B40BCEE04AD45C7519EB3B6199C9E0E332661463647F2 -FB7EDF303EFEF84891CEBCF0FAC5F723A9D0476C3F8C092604C87FC69C7A90F4D64AE45A478EE8BA -2DF50FB93F55A3546123F0B0E2C1C40C98EAAE9F0F26B8F80FFE6E6B94B7E27D2884D58B8A119662 -2DF6BE608C5569D7864BB756DF2EDD184B90812B44ED4A32D001C31383A40AEEE9743651F7950846 -15C48E402DBC01C818D477EAC0347795CB2792E9C11E8FD4A02E194EED1C919D4598FEC003B6D9A8 -A0BC7D456047A1C0579453FC1D7CB2D158D466939A23D7A7B8ABED7E2777EC7487973E73F2266D9C -250CE30729E3C5223AD93B9AE8443B35711E446A3DC660123ED45CE1942A1A2AD0610467E081CE2C -8B92A6C82F0B17B5D2429E99F1A6268072C6B5AAAA6EB6283A872C54D3694CD825EB2926E57DBBC7 -C1663075E687A144E4D61C225781D80FCAE1497B442342B4A3F1CD6BDB50E31791CC3928C30835FE -F845B6BE5E2D7E3F2F5F085AA3FAEB45CAD0D76BCBB1ED859A9CEBB9F7457036F0BC3F195CB1A98C -9C8648F6583CDBB23894BC719D68C2DBD8003B10D08C8CAA40BCE784D7BFB4EEC9EA5359AC056E57 -B8B0F2EBCB1F4CE40C87FC7861180133E0CB6CE2FC4FE690756D327A2B5AE063E3021C0C0BD420D0 -56F0B941E6B36088A55BA11D0C35FD0132D5F48E5D9673572347171B4328D4807B972831C0D74CFF -A5638C145B89C989E6EC942148207D6DB82257585958034D9F9D4221C7C9F7013790DBD130F277E0 -BC88BB179DD09E27062379ED06F25EEA8B7FB33C35861A0034776E3813D2E9E5C10E227CC569AB36 -CB2D9DF2E7B7B44758F9DC4FFAD7A24AC7E9F47AA850C221048C3CB35A37CE8EA75632AE65FE3212 -175146FECD6334AE3D3C5F492F067F795E1E8FF386BA198CB74F0BB4DC0000DA383BC4CC3F070DE1 -7721431988D69C8B1A5AFDCCC83C22E16A87E01C6D3E79DC7AFA3DB0371B0866EFB8B6F88900472A -FEF1C4A878243C52D4E02E82658979731C841C489A6B97E271C4C93800EC7D91F93EB9B9C659A554 -E1FCE42A5EC65AC39190EF4B66DEAF6FC0569A000A9E1495F42F706FBEA4D32EB7EF11A648910259 -6A65CF899C2F322F5679C6D123469192A9BF1A7F1F2C81C554ADB97BD19ADB746A4F81A4D5559E60 -AB94C483DBABF6CE2F28CDB412D50FF3FCFA3B3DAAACC6A83CFED910CCB3B8D2C19590AFF4D75303 -4A6CE7F4156896A13808E0DFEAC547E69D3C886691728E4A35ACD575B40D721E8FCC5385A2EB28D7 -08101DC50811529528F5CB0C009BA7E3C88468E37768FB0D83895AB54DB2DD5426562AF9D8AF304B -F6EDA54E9C92643DF926F5C3578269750120302A37CB140A18BA56BA01108D4ACACE8FEAE640A6C6 -958EF156B588ADB0EA5F3B0F37BBA12B7BCB221C811415387B024B7076FA4403A3AD6EBB5D9C26EF -EBDB7ADE7C60B444AB9F90EA493B658B7767AE2BE649BDBB3FE85F460F1ED137C61BD95F7CD3D8B0 -15CE45138538930AB62AA0E54B4CE1A5EC5FEC0A2B28B345B67089A4E4AE14D2E1F5A9C8848DA688 -CA298F93860649EC3AAFEF3E820D86988C8E3E5A4D4BB937791827994AA3E81D0BB3EE115EC36D5F -B9A392D09E79AF514D11C7B3A03C9F9C13355CE79E119A19177FFDCA34704D38118A8976D1EE5AA0 -2D14FEB1414419F5E85244ADC5C0A765A522EEF36170064BB19FEE3B5F7B441E4DB967DAE0BAC2C4 -8FC6A836E0EF5A69F073BEE1699F55E9C757EBD6FD8B514E2B49D6333815B7DBD1E0694695FCA3D2 -1320A0C4B852D9706DADD8369A95FDD917328BE93DD33818954DBD2C212D2CA81560ED5BC284EB04 -7A5F389E24E43F4FA8C97FECF46589FA7341076555CF55B1C21B28E0C1CBB00AB8B6F67472F27BC0 -D11148F407824B0159B5188D4BB7386FBDBF1C0FAF34721B7BCB5C0FCB7C4010DCB6A1284E9D7883 -9E3C2111A05D29AB7997073B590A81C6168020F1D48951BC7D8476D5BA593F4F23CAC1F9BB0E091E -84B4E99E5C584D1370DD12DEE8DF16AF8BC6B7B23E2FEABDB7F32779AF8E2B5094A6E9B7A7225F24 -C43A8E5D2B977E1E19E633C26771E23017ED233DBB02C64F8CF03992C6484528D0C8464B46F24F9E -8380F385D5D01B8893C67FC103498983CF939432AA380CA576D09030CD52FD99BDC3BE16C7204CDC -3365BF76294A83A1FC14A236F5FE5321904E779B13232A76F8FE521F425562678436359C2461BEA5 -AB27209541F557AE2AA60009C9CA0A9FC7898C14306CE35A50017BADEFDECBBF94EE2905220706DC -806409EF87DB1D73EAB0698AD2DB72CDCDB293E7FB13C94D9FC87E74502E6927A212F0D7D2F2D194 -64F7A66AC07872E18CB1DDE8F11835DCBC5C4EF039333FFFC0FC1456DAADE7DAE3EC2EE0D3415B0C -ABB69FC5006F4D14A4EE1A5CA99AD4D5E629C0DD1E0F097B5B93DE2DD001A8C418234C9C45E8C13D -1AE04E9466DAB8CF1ECB88A4E059C111A6468D2DABB90DA79C7C79E94DB28F6968B1A632F8C57D9E -565FF91C6916026FFAC0661856B9FB8DE9C81661816221B1FC159CFEF1751E7E403F5F2CE32529DD -540792FC17A12A3DCD7C50D38EEAADBD10ADBF5D8A82442AA900CE6150EB7A4639DD9FB6E385B2FD -093493DCCD9014B23EB172E21AA89643A6CAD1093343D85D81261972DE0ACB16A4C6B5F0BE4C978B -FA12D3CAF0134F9EA49F6E9687C8F99A456745EA252F0BA9968C7F9586E3DD841AA92DC7705BDD68 -2DAE41518A09DF0E209F321D7FA3417202F4BA76A984DA3ADDBC58136885362F02F0A24EBC439B3D -BBDACFFD8498EBD29F88F016B1FEABC10785438EAC860B554525F3266097A675299AA0967BD3B7A0 -EEEE3FC578D1BE99D3533BD91571AED904BFC9DA1A1451FDC5406E1CD614E0C7FBC733563CD6CE6C -C31E9237CA153F1F0411114361D731636BCF98555ABF12848AD109371A42B63675A4130B81E97C2A -2EE2BB5D8FAE2640156001AF0F55D9D5DF8FF23C8AEFE14F120000F14149A36E5C94CD9081DEC277 -C2C34870D05011F99D48B0875A5FF542F067F7E9880109F586BCF2B50522A1F23ECE44349E539E70 -F84E207DC9BEC7CDF856A046F1A03226AA41F541719AD1AF88FF211E57DD0C1275DD0B7B47440DA0 -89B98C6EE92A7D94700B83CEBE19EAEDD8A615F6587587BA8BBA3CE3AA5E8EAFB1FB0F486BE3609B -169EFB178A4292F4C0378AFE5D24EED1CAAB514DDC66C696D8E37F294A6579131DDF5488E9436609 -ACD750C3DB0A940C84FE022B22ADC2676F62E91E8F891225F891FBA537679B24547BBBF35F04915D -20B11739F620D18B5B216921D222F15044368569AA302980B9225BB839F494588481B94B0C724352 -B2DF600A22B062561D86CB8F81514FBDAA4F8A043A0265F992FAB71FC9124A45B8475E1EF3DF6B6D -E35CF329777D45F08325E8505EC0D979F542807AE77E57E453525F23BC59A50740371EFA98678AEE -6C425374AEB745B99DDB5D8D908FDB551FBC0DB15832107BBECC4E11A1A8DEC69358A574A2ED46CC -31D564549EFF23102D92BFDCBB2BB985F78F36033E34F59C0EBAFA3BDD71338736464CEFDBA91398 -33995EDA4207BFD4A9867D32E867FBEB7DE60D132803EF9347CB17BD91315484EF6570892297DD8B -7D966103339535E28A00CB1EECA4A9775F60A9F5FC9BD8B06D78FE8E6318C31DA2E847E3F9CA587C -B01AE2BA0A2EBDE308314413F4F230A758184ED60D4F71F6CEC22A93A01B6C54E0449A3860FCA895 -4A347B7588329A80974ECBECDA1070FBC055666375229F13DD995E99265DF870BC8B8CC6347FADBC -1A6AF64599271A475B9123493D46BEC41289BEEB67EB97A8DED7A9C9730D37C65164CFBDC22E5CA5 -89D2E7954C7136EF4E084C43A6C7F361A3E96989239BDDB9A593CC2A80BA16DE9EE90E95CD39393C -212AB22EECB677FD36D34DEB46C4AD0D21BF7E6D7CBD0C8083842FCD87B18FEA7CECF939987E99BA -34C214E44DD84C176C9CC5A4CEA76D380CB316BB4EF9DE73D73B4AFD4ADB54451591DEF86621D138 -D5A0A29441502BF6C2ADE671CEC3CB5CAB903A657EB2D70C943F976C110E46C5D9D29BC00A875F27 -38E5D22496A43E096E009C5D3CB724B4CABB32838DBE527F83B18CB457E57B092C302EE557FD4F00 -DB9C56E66C9FDF4EC9FFAAB85F60D02BA79694FABA476A199A0331C30A78A92E10417BA236E23364 -8174C826331DC1BAB87C5F95027846130C6A2B4027930EBF9A97BA1B039D386FC51C302648E25980 -212F6A582CDE2778C677A01FBFB3C5D1B8A374ADAF6ADBF7DC94075F25ED66D440B3922C5F255FB2 -3FD8F6E21EA65B1D93BB225684B50F11310E242B087575973345B229BA62C1E2C35BDAEC04D10148 -F5B2F3BCF7399BDFDF1F3F79119714AEA697245BC647316EA157484ECB951BE367234FD02E8B1F09 -1AAC3D29BF282DFF4011BC0CBA8E55234D943DB3017CC7A766720BBC29B2D097A956C0F1067177F0 -12D42ADCB473CDE8D1BA35B4030757FA1D8211989DF3BD22CE5D501C21EF8708FB3449DF47D88650 -9FF7B59B76C0DBAE443F336FEE2D615D7EED1C284F14335BC8A26BF4621E10DE9611FB2F1DBD52E4 -B7565D8C65B54EA36D508BCF0C578A49A2665227CDE1F9768EFE847F9D94F1BBB7DB83701C232198 -5C7283D47B2E40B27A268428AAEFE75F6B2F8764A8494E5827573758CB9CA46FA93208836BCCC8B5 -564A69F5AD882052AF1C1417C3FA7F580569528682C77080F3688B65E7FC24D2A3AEB61574B4A321 -5927281544DDD7A6EE0A3E9388F8F631CE7251724DF70726E5912DDCCC8C652DD6C9608F8462303D -867F589DE0F2F71711B35142EE6EF93B64D6326C4DD7DC83278E057100EE772082E6BA368ED91A55 -53ECFE2293A481E42F83BC8F9148C70EACE91F7B7D9CB8A72415BDB3AF66F68EA733A17ABE9DB005 -3BF148629132969589F38D30EABFA96A01FAC72650B5A6FF3935670198A1EA33810A9B11E330EB8B -451F24F93544263436F669AB5A90A53B16CCEEAC36B1445574EFA7E802DE73522BE725E68704822C -B7D3912717333367895BBFBE06966A5CC653AAB5E9B3596702086BF0010085B900711932A95ACF15 -CA4DC45A754EA334E9EB84D6FC8E3FC4F897456BED64BB93B593549FF0D5352275D8E417172A6664 -C5E0ECED1019494A7ED49AB0B965BEC1A82E5873766BB38D7D856049CCE2FCA65AAF61E961B60634 -E2A69EF059754C9D8163D87F928C222772D070D83FEC6FA5AC734AF65E40BFDE521F7D9CB1650FDF -64754BFF21EA3FF0AF7611A93D525EC9B28C51AFECB04E7FC8323DD6C9B0D8539A34FC3CD8CEB795 -8E8EBBFED4313C77ED469C199552A9FF70BA5423B03B6148D4EAAE17B71C5B39DC436AC53D6BA8A7 -AD81AA8B02335A8B2B11E9F4FA913159A725B8AB60F52F1A2EA50EAF4D56656E615BF382CC68A690 -BF83DFF24FE986570ADC0290ED1A37C1C2AD469CE789E0EA0BB5CE01020100E729721AF3B5BADD33 -A2DAA6C33EB8F9064F5292F715F820B4BBFDD56F76D42E7A1A068C1CBDCE4640082F6E7D582D1939 -990CE6EE8D270015A2C461798B37DCB5798EE9F7512168B76D26C28BE4A49A1BF96C89D235F21A1D -B6A96E5DA474D0B19B808D13D7A11BF39EA8647499C410ED9894A1ADF33D41B6FC2E614D8087F4C8 -4E437B136F3CB32DB8393C49177A0675A0C9E7EECEF448A97AFDBE840FA01FC7E5F2E8FECEDC1884 -84C312E8635CD79195475DDBFDD4D38D5A0246DE2C7F21608F8D2C0DA1371D302E941572E5792A3C -F4E51A33228B93A814D03FD4FC223C314CF3714BB3A34BD4F7ED6348577FEED9DEB082C4049E57B5 -D3CDB7F26629E9F3BA36893E09E3C7463D02A22D7056BE76B87763260E46E48BB832B7EE13F8DC05 -37EC8E81E9BDFEAD8C27EBDF1AD706933EFD11131E12814F236EBB01BE85B7F1B2D627413B324918 -D247604F56EC128909873FEC3857028BEF76A3494364C2A7002D104D486236C30B48E2B75D851C34 -EA50BA7FFEB4E19190898AE21768C157C0CAC628A2181A32796FBC1A7271D2473CD88E5395DDBDB1 -FC3AA8DF0F3D588637F19A8B833AFDEB5F655A8838EECD684E2315B72C75CEEFBCEF94344ACE8D6A -DBE355008EC72FE7CEEAB01363A895F4E73F867639BE0A0BE67333848816B05B419221BE8F9066C3 -62C23FE85B7F392930BFE4C12B9526FF2FDEC38F23A159ED61A0718E7115C24597D849FA76369153 -54A40C965D4D72EC94DA61A03766AB39AAB684E134FD1407A5B1B19BFEBA52AA0DA5D99CBE5C82DB -AA663711E6DEBA180E1D4A39C320516A4350D296BC19BF1BE054859A0889C7E9727A021F3176FE62 -0FB0C837E4141FECE531A950C03D319E3255703220B7185BD20FE5DBA673F8129AB211EFCF36EE39 -4C7E00EB0876624BC840FA86E58B2F584754CB6BFDFD76810E300741EBE4544E5AC17413ADEB21C6 -2F66CA4F075C32381796BA709782DE34A675B717A2C7F6D88104CB924FDE5DF775B4F0B68E0E2E5C -2F788BBDEAF06D8E1FC2105CCBBD5827C0B03FD6CD64F0D073F3192D5F94839644E5EC6C5185BADC -F04112A65F49A8C83174A9AE958E76A2F5AF469E8B76C833782C5FFB8BD7B1BBBB3EA0CB7C9786C3 -BE2ADE5E7AFA8C8F20892659A59BC421E28845A108E34EE17864042EF587A6D67DECDFB3F510EB40 -D2229585347A0035670FCC76C2837A4E4D68304FE113C539B35C1F0234B5079B8E32934546982978 -C5E4DF955A454EA263C3CA5D7101F31A318D82A3F9FCB5A8AFD7A65209663B0FC9DA400B26F285EF -46D0E1EAF8ACB1F1CB805E3986D04BC585073FC64895E4DAE1CCB749BB439CB32EA91176D5C39C36 -50D10AFB9C9884D5FB90183424CEE67EF2175D01D2478D67511EC9F54F88763C152697B06D948BED -49240096EEE3D06AB4575E8E8B2CB8263B5BCF4FA1608720F52B675309833071879DF52C3EC2871D -20F398B5CAC8F8A4D41D0F1D47584DD90DCDAEA4A1CF160C4B3BF1AAB890B5CEB6CB3488672AA68F -BD938281DBC1D8BCFE92FBF514DA5358443CB6E0147254E91B38CE6787B2BB0DEDD2D38F5938737A -977B5EA42892520C58F8FBB53C994B57382379E9490F0D6970B980E1BDF8CF9F4C3C5E0A18F66E86 -EE93FFE7FE546DE50F41364BCB3721B637072571FA1779F1D672FAD260C16D7F13CBDF3E4376E7FF -56D2A710AC5AC35FCBDBCE2C9C17E523BBE6218617B13C1FA6679B308979AE7C61DA6E68369324C6 -CBC7DDEC364E5A86707266C0B459EE7B2C03FE584E529BFFDCE98C90A2F3D9305AA74D3ED8430DBF -3A49FE2ECFD9C4BC9FEFD22618FE9C8A973AD072AB6F713E4DF02DCDA7AC5359B2D652013E131B76 -B3ED6C75FD53BA58D862846264627F6B9E70D8800F6D9B32242B747A67BB2B45675840D34F852AA8 -062FA6B01E31ED24DAE02F6CF788A17F7B9368175195DB0072259CCE0FFB2C1035C1D26E1777CCA3 -D56A827C3242069E76D6DD69B653768614B9ACFF16567FEA61508D51454BC02F6C60F755AEF6AFAE -3536BBFA1823F8E1A53C41124DE983E51CEC92AEF4F99785D554488A51C20885346D1F761DA79017 -940A0C557D93F1DB6B3D00FFD61D08E96FF3AFCE5FEDF545CC9F47A2B1BB26713431D6D1E47FD6BD -6E3C668B0368241F0EBB5FA9C991DF79890E52E83A3675EE699B61BAF869DE91F67278F510061C6F -E41DE2D883F48CD0E068E2A652B244128D82E5CD52F35F210DDAE3054691ED55A7D99088AAE8FB04 -F525C2084AC09F5EDF80A4EFAFE981F74C0DE9D194320709B3464F3FF2C0F6AAEA6D973D9C323F53 -DE3D741F698FBF01036716BBD62957CB32CD81D3A2674560FFBC5BDC5C6E4F547E589AD0B1CFE14F -5E17FED1C4A8ABE4E67CCF8A49F32C4C6044F1431E1CC382E7758722A6D0DF9ED23E51F8AD14D11D -7B6428E27443715EBA4E9C05D6F238378F9498AEF0E7EE4FE6856622CC8E6ED141EE5F109E343CB6 -695C4BE1E0F66601C27975983BF557C04ACFC19227A1AD7E6C44C00529FC7EDD7F886D24B7E029B9 -C395260088BBFB96972199A7B32796D27257DE83A7402291C14FECDF7998C5C96B1EDADE0280F856 -8A8F5007852EED303969180B3329917973C2D32C080C9765B6BAB0673BC7ECFDBBFBEA980C263843 -39B7F1052591D91667D4FEE413AFC23DE2D4B9DA742F4269C6C939F5FC32A38040730A018155AD73 -3F231E4D5B9D01C03A58EAE7B5F590CCFAF25EDC8552CFC8D95C60EBAE1837D7A97CA137E9D4A4BD -2CD34AEFD68D64B3F4F62326AC429921D7FB3C235184FE0899690A0B775F1A566EC29D5830D32372 -6526F7E7F5AFDD71B77E07613DDC4FC63EDF49051AEB59E6337AC0A4B6DD872E776C9CD0CCB86130 -5322D816732124F5978A86C186BF0A0F88E733CE38E4D7C1BA5378C5629B1EFC97806059990ED42C -5CD183BAD7E94070E4058569DA2E51831FFE0D080301AEAB4350BA290318AEC582C78D05DD92E5AF -B4424EA808629BC972E68F4FF2489C245593F07555CA6A2B25964794CF31CBD3AE5C229AB9B8C298 -06C01D116EBD0FF0F159ED2D3D7DFC73EAB4910BFF5B0B0B587CD9EA6E6FC45D63C09766224D8346 -1F0588140B258B1729F70BAE7962189B1554483392988CF230AF4077193E53330519394DD99BA135 -6D4730AB221DC6A66019BFAE564893DDAD7B177DADD16ADD21D396CFA6C3DC818052E2F71149FD59 -4A16DE0C2FFDD366C99B486C55A6E991E4D22CCB15843F0C3363676AF2F5B2D1B7EF66CCF2F12DC5 -0D63776BFFB058D70A9C76DCE96C754872D72C82A0C33F90D49C935402CDD26B6D743B1F43BED5D8 -B539424849C1495DAE73044E885A7D0F307F1816DF6244A6F2D97BFD4E200E93F69B08AF39EA21E6 -E347A47CEEBF803F73B978ADBFCF056789BB8E6E2563DE87DD9A8C877157B934102DCEDAC54D487A -1BB2694F0034093C48F10A17D32E2BDD0C723CAF59ADDD1BE373AF8C9BEB4415AA5AF36310C31F24 -354A53C0B962573148BEF91D994FE3F3D8450DD4D686725799F53C373A0A3E3C060C2E1A3E800504 -9F26D716E1F381B9F83125E4683264A07E2D8938F605978E2513DD2050B3D8A1012797CBA8961632 -BED260916338A812AE751C7B657E086A0C7DDCD3BFDDFF3E48B84751925736D1310C4910FC114387 -F3ED7FE163F91895EBF55FCB425CEF5729D99BD8F2C072E36C310523E75CD8E5DE49C031C4263410 -9D56E91A46C8C8E89FD92012A00C33D0DEC52597B5C6933291A7BDC5CEDA95DCDA5600F9AE1C8250 -54E7EE1067458CCB66610704C58E4A4FC0CB5FC933D0322A716B2CD430A3AD48DAB3D4CBE9D23F2D -092368CFC4E1F5495C133A92942EC62118D45C17723646E69407B4A89DCDFD2AB3FFC099A21D9D29 -741D68270629AA3A414FE58658DC9170C247B6E23F35C4BC5FF83009F462F2EEF4DBAC5FD158A658 -57F9B6DC1F5192DFB169DCB65621CAB2F1B07BD22F4155A8E9E2B6388D430FDE5EC1C834D22EA035 -C52E1E34482EADC36B4CAE902AAE89A7284E62B3C84B608D6BD05F75BC31310B2DD3B2C08A00E073 -7F104F03A41989D5F6B9A2C38B22F1D1803EE5D7A4D8DE44E4ABD496A1DE0C0E12C4BC96D0122846 -3F0EA9CE9509FEE987139F3DD3F9D0DF4313F555BE85433718F6D05F197C41A9D9C7A8B0D2740196 -82D49F58DD5F66B12A6520D9F226D1DF1F1B65CDFA261F980CA25A92645B86B64606293F8BFDE364 -C47D2AF2C709BBE77A70A5712F2CC26F3D66F5BE2C307A48E6F887F681D30121E32BBD87271B5DC4 -615D28C309F15AD263FB37424E56DDA6E17B998B45BE6C7FC6C28E3394A8764C9EB2DF5C06626593 -B5C665D550D4600172791CD208AE9F37BC082B0B242B0A504B751B18F4D7495172B697EE217834A8 -A4FB7CC16D6F9E8BB400BE8AEB0850960283DCE725249FCC4DE97D9886745AB6066C3E2F64DD8AB7 -9AA11667F11188D7965DC11EB760B772E282DBF13249F31986AC6898FEBFE23E3E8B8D2C33E00EA6 -FC493850ECB2E6D831D1EFCA3C2EC8EE2E394599091ED58BEDE97D7A43B6F739EB0F845EAC1DF6B1 -EBFE876009CC5D804B15ED4B56761B3CE1AF59C07B49DC798A44532297AD73D5101ED47F36A3678F -818297CC27F6AAA2AACCC9AA9B6F5459911D8C56CF499E390AE607F3790450B2B9C9BE0F006EDA0C -715B5CA0481734CFB0597478E7602B0D2C1E4F78F03C68C17C70E4B42D7D2D3C95CF40F73488B371 -8E2CB05A549944D86944D78724E266C3319AF89AE430E777E95F0D792B1C654306E421F3D63A26B2 -1E74B6E8B21B2E2B9DC596D013CDA16D08E65E8F24A84B12B2BADC653E6E1110DE2E709C1C1BED13 -707B70A421B384F20CA7A9A9D20324DD383F28B2D3C7A9C53F5D4C6B7C378D26DF11CF55238BE1B2 -4FA70DCC178DAD3D35670FE4919085EB1CD905971D76A368FDFCF9D2F0A23739851A3A6D2E02D65D -54DEE69ED5D81315D3EA5E356F94EF256DD267FD1E1A9EDC9CD63E743F299BCC4A4506233B8DD765 -2CA067F741603F93250C087D368F9E9CC4CC1A6DED567487C05BAA992B0056A77F630A72008E3946 -15A9DB24FE56A956650EC9DE90A6C2259189440247970541CA198748928215C0E132A81AA13208D8 -63C1FE817F70CA573B54577D10B73100AF8EA088208A44FB92ACA314AE5879706180788C17BB1D0B -81B6B95A1C4E0F9EA66F9B39BFE12444A6446691A7BDB03E0F03D9F07A10A7598F2166F108529F34 -CD90E601FFED3479ABCFCBDE8F051C348E48C61D95B00C59EA1287423F05666C3D36288844067E83 -E14F6B5210842C742B89F13ACD126B9FC50ABE2CA7D7ED513D43B6AC7F41EEDA416BFFFCC5C844AB -2D23D4DC09B2D510504CE98D02E72020D9E669DDAA344C63A1B75632F912A1C0DA3885DA4AF7E243 -E4A4C6493D6595BB6D56B0359106957259E59E336BAAF35BD1CEC5CDE735272EBCCAE8D4904AEBD2 -B32610C6FEA2B69941D6542ECB44D71092A3CF067708A3D087AE99FF29671AB7DD8758759B971A08 -AE1BAD78270D2FBEE37AA2DCB119D72F6C7B0C8509018A70D0B0BE2C6830EF8E0B24B1CE1141EF87 -3A4D7DCC501F808BFD94E4DC0F2915AA023076BCC8006490A43685EA25AAFC187302EBDE7FE1965A -04A5A398985D29F08E085127B56B057334D88EB638A4DDE64AFD204974C3939536B1B66A54B4DB81 -151853915718F70813F096CC1B0EA25E363B49264C2AD17158A4489F91453FBEDBDE15D7B74D7F98 -E81DF23251785D58295BA297F295AA6248A912CDD4F1111E6B628EECBB5139709E76EA4AB743CEC8 -26621D08E6BC64691CC90B3C3C1778931A28D3D5B1E20E96C643316613FC487C9B604C43463FA453 -3BCA1236286E6F5A6EEB2F1D9C34BDDE4595495A365F88055D9268541CF1654ACF478D384A5496A8 -772EA1402751A093582A6625A0A44816B5FDBE166835D598644296249B92CC90AA3FD6445C9A19BF -27F59CB0616C7306070F33C7DF4E1DE64AC8C5BB2FFAC1EF2B1B30E5A0275E6004CF64BBE2C6710E -DCFC3AA4ADD60106334708862FFA6652825BC84842736E47AE6917180365C75B27505EED3C6108E9 -898A780E20C3F606A860229AC46D0471ACA0187D6D539A1B8820F620F72B41AD1D3BF3834BF48CA2 -AFEA8BF535AF74C4562DEADCB63D2F5C7585722B77C989342D190FF926C8A5263B4F25286F99CF6F -C62EE6E2AD61C82B29D82468AC10FD27764278E5558CE8B41BA111CB2F040914451A480C93084237 -CAC8F66BB7C6689F340B8ABF0150E06D5B1177278A4C08742FE22F42C28680F190900344ADFA486D -59718C25D37275BCE4DF981AAC35D2C7E85C72A0188B8953CFA516FD545AEE0BF4B8BA301CFDE214 -4241FBDF3D204E3D2823301572E23F204C97305A82401660E12926EE7BA6EA1A81FF5C007933AFC7 -3266FAC4C134ED818A48E7DA01C71A46335C845F9DA5E960B25339D551582B375814148D94CFB781 -FC56093827B78578A73D4FF67B6B87F40CFA5E3F4325D9108CDB64BD06427B88C84105187316FA29 -90B4E3E8EDB6C78ABF164F4A9717D523794B2FE772A04DABBE688CCA977090979B5F47CEB90A1DBC -167D305EAB231C9F4260C4AD10889CB785169902FC0BED78DA15B8417453BB65856EA0BEA5245BA0 -573F623D215F6C0CF801851C305B355D26B52B0B343645FE25C78A3526841EDA480919A1BBE5F56F -C10ABEAA3E1FCCA7C43EE560F067F1AA2AFD642F769D1ACE8E2AAAF38850F0D757CD808C921D716E -96FBC07DA7860DFA70CEAE2888C0ED3CBF9586443532B68DAED9A926655C157A416C383A53D8F283 -2A4E67468112A09ADC837ED8EC95F70852921F50D4417239FC42EE3624CA97F682745CC5E76CC7C6 -7BD99F2180F8C0B7FB49539C8CC474C25C0DDE491671FF329E51BCFA779346D4686835A3AD6633FC -B5E0F67E0CA9CED8F215BEF4D240453EB2EDD6ADB22278AA5B985FA140C9834D38753DF2014F8C0E -E6DAD19E8FC54C03C1F6CB0F858986691D99592562CAD95FA0A5B2ABE4A8B54B457D42E8C33A2D19 -51C0419A72FB94FDA78ECD92BD2A1416459E9DECA9469F35E4C47DB531726DEE8F203D7042EDB32F -025DF3D582547BB1D45F7A5B70D317DF4EBB16E36B0D798E0932FD2A85B04FD67143E4B287A50416 -2C1F5A037CCD780088C5476385AF8168E12D97D44B0630621759173C8F1E3006B5B1C6D7138B7EEF -C3CC5F54E24B2C3CA7B41AACFD25E554880AAF406EA4C3C6E21D3B550B040FB1952598A7E8E6488F -E38288B2AEB6C4718338598A2BFE4D2B9D14C65732DA304C16FF3E1F8F03046EF095B65FD609DA87 -EC24A69278BFE65C905CD0329F6A486B8525B7EEA4F7AE56C2633CD83543269E8ACD6D71F500D82F -DFBDE7F7F7B1AEE67328549232E26CA55085B6E84D9E2E7F74068F93A90C4654F2F396E57C5F76F7 -E61CBBE523DBFBA6E76638BBA3064DA025A79E3A294FE7F1CC28A3B4C57DD6FDC48E541A85534B25 -E1BC11B4F78019457239EAEFD4BE9007D205F1D985F389DB22400B279C10948551A6B4A17FBDA0FF -C9428B18B43DC76EFB15FC2182216F1B60B4E344A03AD6C00F141EF99F89F24C819C3E32877A927D -84C2D006940F39CA8B71E5951673EA9BFD1749923219DE38929ECAA9CE43B06CFA7DA1BBEDFDA56C -61FF6C24F40E59B13870D5FDEB82D981154FAE5D6D5152DE69339359461A41A9713B6BBE47E868C9 -33CD74C75DB71D13BAE4DEC85E02FAA14EAD6C0A253B16C79514657B15E68CCFF9EE6AA385CFF9E2 -C53D9AE40F85C793E4E8FF50B2B7420F4FE69807BC5F37C3E300E6B3C3549D1D3246A2E70F091054 -1135BDF805E0A698E236B6496702D061241687B7B8D1A0E517DF0476DA09D89667A7AB375FD2672D -CBAB8124E511502DDBD08BA04D941DF1CEBDCCF7ED48405CBCC33774A68C5212FC6F132641FF413C -984F8B43BDFD7B1A2A3435F15AF07EF4970D3E4A0BB947C181E9CA27CC14A35BD1BD096875B45873 -8CA244F88C28728B74E25CB8C4FC1095A56CA75E4569AD3082EF194ADD11350DB3B74B96761D4538 -596FF7243B1E1B724716A144106E080D42036444FD472998460CE9ABBD05B42AF9389AC452BDBBA3 -A13A96890025789F16B9D92251FD3B3BEB2C61EDDB370A20456E3BFE5F4039E2557C451C524F8087 -015BAF3FF05F51869FB97512968BDB2B49589C1C7AF1E085250A47657465F480B7023E24C76731AC -0EAB6704123D77977D3A2C4C56B691346EBE589C619C04515D34F81FC6A17527D5D8319013C5D4FF -27CC3925E24C99231AC7FB9EAF0BBA482D3B75807AC85D03CD09DE5D9AE0B07B7A813F0449786500 -0AE8A7E00080300F0AB8C399057EDDBA273DD2E1B2A0DCEFAD3B332E6D4AC1FFAD846167DFD70E03 -46DAF84AF292D4F424256ED5AC4E104F80697050D50844A708EAC9E7F7784FD01646F3BD0C595CA5 -1EE6BD607D254E78ADDC5E15C3B6AC4940EC865A5C23105B6BE09EA09F2C05D6D76960A843B81EE4 -33977FAAC3CBDA85CDD2F4DB7C28293A77825635992AF8F3B38B4480D9A139B1662345A8ABE1634A -77496C3F57597D2985E9E54717AB2E99CA35789441BCDDEDE9A9E2106B401D9684ADBEFE40D607F0 -75C179E9CC03E59E65430DB70B441D43DF03F2AA6FF06F224B6E455B01C64FB89EEC9103E48453A9 -749B4D602808C7E408A8903091D85E06AAF635D0D529C3CDD1B8479AC0F4208C284BB678A547F2BD -77BB17C86D4560434F7AD1937760A6AA55B614CFA9FF8C9C96561AE6C8F2121C4E20237428BC51DF -2099B6C49E3EFA18E6D439E6E6981E746EBB1DC461259D8EA0F8099C47CCA27B2D982B72C9A07CF2 -1B3C05D6E26E6E286E348B8944078E24809F9C5F3D014B4CBA02533F5621BFBA1F0EDB776C634746 -703C9F73BA89B1960A496420C68F54E5B901A6D733D7ACC79F275FFFB253F389AA480084468BB34D -A1E797E43B7F6E8CAF5E8C93069A3A2730E57EC39B677BB73E3F07C2055599F7062E53B37A5F0099 -907D2ED87FF7A82C95FBAEB888033BDFD67BA3A6031A4CDC56CB1E4CF5B06B46E16D988BECCEFACB -9E1C037023D7BF5CCF5D65AA66A17AB361BE7981F132A578F3ABFB97960A6034F052D9D5AFDC0679 -782EC90F240F943A5F9A3D969ED7399254FF67D89DF668F7C56FCEA1FFDCF20481474AC8495D3AF4 -B6D7EE093E369C057F0B70858220693B398ACF8E8143558132E4391405E30A73937C53402E459F4A -A3539CF7A99A3F51C0307D045DF8B77757E92EA2F51BF0BB4F77D3904DD355665870C2B59F1ED7F8 -4FC71FDD7F0B6C5D3182DB77827CA6A2060D2B8C83C4EA4A432EF43A4D0A952CC6CBBE52A9F0CD66 -1A538973DE41FFE9C5CF55F2506B9EFEE51FBAE5E63BDCF5528499A47C031163C88D3022606784DE -2F46A9C9235AEE3D4F71D4959B0CFDC5B7E78C8C0A8F9DC99440C2263DBACB343C5C648577F5610B -50EAB1CF7FD02419EF3941C7CA0B0E64EBAD4B2CB05A0793DBC38F1946D44767BD287F5E9779C611 -CA0DAAA1E7393DBE0683C8D3455CDFEBC0E64B54B737E298DDA605227C0C4BBA87AA3EC7FA6EBAEC -39E6EF2537D5974391D31739D9FC42983D81AEE44711C823F35F8E2321AC74943871739D2DBE9748 -FE68592263E7713F27E0D49B9B5CB7A4E55DE54E6B800D15856450FFD3AE5F287B12AE4F438B20AE -9E27E6CAA00F3EAEADBE08432684FDF9931E925544A680182602A3C1997DE5D0630BD5A010535E66 -E1C123013D23966B3545C7431C39B97295BFA4099D14461004C42C85095EEACB9B47C593BC6DB863 -533A8619BAE09095DE8ECA432D4DDD49AA600D277E75DC3F5C6631E2A05382CB007825FADB77438D -CFA78E252D79B6A196D5164C2FEB85D75ECA25FF80B1D97FE10E87960CA0FC47C41D3A213BF141B4 -8BC3AAA93FA86245064668394665BFD52D12C3BE4CE39EFD8111754398A944C3FD1AFA98EC337BAA -AF899D35E804CF416AD7FE45FFF13FC6354007501043F98FE8428DE8013901BA6A28711A2CA85A27 -0BB135B72F1D5026E8217581860729E94F2F1878A0E96C59E9F62714FB5F8F25003DFC7347E99007 -8A9A331CB3A6A535BC61866F02513DEB982C4A13ADBFBAC3FF70A7335F40D5489E48E5EDEDEF1619 -1973D932479C62183B0E25EE8C4F76D4F1AE45DAEA4A12AEDD9EF81D248E8D19F8C8A5BECDD1EA1E -98783EB7A38149170851B1942C96C53DE06DEF80913BFC04E539EC67C110498D15B78268853E5C72 -F485F8A27B768569E54241F6115875E2973292CF48FF91D45EBED627AE9F0766D22201B20AFDD40E -5B17CF337F2999E0BD15B86E46EB3C18FC12B7DCADCF9DD50C6C7E3F37E615A892DB3F57E250A072 -A49F7277DD6A2C8042698233D35A699B17ECA5DBDA6D250ED4A16FCC893BF0DC2E33FB1EBD7DEDEA -3C1C39603C8B7E1A5A833A8FCDD5570BD088749BB232615366687962C7E56ED089CD7B092505CAFA -5A80F503C4CF337F07ADF0D106937E25670839D491F7BFF7A523DB609D126328C16113ECBCBF9C40 -04904427A108618AE5D4ED809F8CCAF72251104C94EC5BEE21F91B179D31DBA79CEEE5EC7FF698EB -84AB1D2D1A624F58B3622A78844CE51498B2CEF38EAFE259D22C7BA61104651A862008BC1DDDA58C -C45F663EB26428DAA85E7785363A69D2790996EF5D9621D53042F42F794962FEA46E46F37B8AD1FB -76FC8D5CF2146843F8CC625139C75FB42DDA71A752BAC48F294E4C0C8289FC46DA5EFD9C91BDA6D0 -27518B7E81E8B21F755A9615627D5812ACA674D1527A1185EED4E3C628196E7D0759B1CAE6B9B7E9 -01E9599A65230F1EE469CD33B9BD9C104C44E3C1AB966C9678BD0AD78111A4E0F2D07A01A038CEDE -7036D0534D684A1562A17AD64A00F279200C0371B1CBA61747671D2A21D3F9646CA290F6B82418A9 -6FA177C6278277504B7FBA936325F5FA124AB018A15DC18D2C5E8F93CDEEA52BEEDB78A57828D81A -3E6C38B9FAF3DC4EB7273ECE3EA4482A1C6242A335862C2C3717F9C9ED95F77B140C4E1569B2192F -C7DCF702D0BC9A50428EC406F8BD0CAF886B4D979320D3E429816D88F7C7146D960AC12E70F2CB7A -9F4E3E366665AB3F1B4B6440F55EEA26DC9EE0096BB7763731740A537766490C8C174723BF0EB40C -53701AAD12B21D436ADCE22203C1053A9DC4E9F17AE617888C4B4E6F3A720E4E6366BA628221A387 -D8AB15E04AD69387C310D3528BD2FAA5B22BFF3FA494F5FBFAC4F771C9C7402B95580C5AC4BB3AF6 -92A70CB2C851FA5CF1173EEC3EC29B5A05A0B728BBBB51D3B7AD8B0AF17A1563E82FAFD93F8B7118 -1FB7AFE352874F4EC6D334AB6747519AB8E847B7BCED33EB5458A828E074E74BA621BDCD03FEA604 -7F7B6ABDA01FC7514BA1AFF0D4D0C0CB8F4E42D5A87E395D9ACDD02CCC220C157153422018725846 -009A3ACD8C8CDDB66BC6836B4026FD9F526AA275D06C813179E5924F26A25094E7BDA8BD26AFC4CE -B41D8964D4FC4AF1DFB0595BC5D6714C32F15DC7194E9A3A73013C45D8FA55CC0550A12D9AAE8E9F -F199FA28EFC2426D8D1DEFB93A65717AF3EA8E2D5B4AA8EF0EF38E9600F7D4E7D9F1D67A2E63ECE4 -789FA74B159BFE2F91C19B0378BA52E93DF12830D99553B6618645E26126842AB70262D96E35E5E7 -50ECA0CE3458B3E51BEE2F21191136DFDBCA39BDC07939E521E4F492F392DEBD029C1EA237BD89AF -76BC89F618D530160AB16269FA6B693CF14BDC4EC7C630025703C5337F61458FA09104EB15C7CB20 -AA4C9BDB7CEF3A09F25BC7F3149951A7CD75372993B80CD2112F7674CEFD6AFA764AA3486730D2C1 -897A264D82A91709FEC4A21E30D812F558451804EE6F3DEE2C4C437846BCBDA07C5B6CBA1D94AF02 -9163B7383CAC6E088AB1DC14ED3743EE77E26EA7AD3119A76C0B5F925C4DE305CD7BB3A09A453947 -5B9BD79BE28FC462D8718CE05F9D94CAF3387BA55E6E447BF81A9EDDD3A34E17BE66BC52B0C0BB6F -86F6F008829173816D205182ED2ECED319864A796AB65D4E3950288BADA94FA32B6F453AFDFC6C39 -A4FCFE60353A64627E2057D4B379D3240012B3BB0ED0C7876CB83C1BA5EFB6E2A03F340C2B576731 -F848F762A7E1CCAF267EE06D621BC33FC245D0E1547ADC12CC0EB58B26BABDB8EAE9CBFBAB93836F -FF22BDA1831DD01B7346AD377AA298D84628BF1C07433284B0A90FC89F5AEB2651BA2CEA405D4F52 -DDC0E74B871D43F71EB4ACE0D2B401F9348EAC3A2EF0AD295036BF6CF6F870D58E00B619D50EA7DD -77BC28DEF91D805CD527DCBCFDC16C042BF9B874E3B1567EBA4C1E70744B9E7E5BD1FDA6A5FF6E10 -1613FBE58DC46CFAC1A65ADAF65E49757E9304E2AC9A91E0588600C709A61D4231730073A36D473F -518A145E141D0A5A494441B9EA99AC23F60F54F8127B477E1CE698BB4129B4B1DFEEDF10D9E665C2 -47A62F112F5CA30B0AE5DBF3E495FF06EB28EB438CE8AAAD84D5F50FB56A3AF002C23BCF66ABC270 -7AC233FC0F2723DB99D2CFE7D3B3667732A531F5DC315CE74EDB9050BF75D29E6430F57CB6778B2A -CBD57DFCEF896E6766C8FC5C9F9FBD701CD62CACF33EE0FC95E78DADD205B5F42CC63024624BAA0A -B4DD447832B4E1DBA77BDFADD223989F8E958C8D759AAA37930664C6EFEC708116248A2A7AF3D656 -DDEAFD009B7F5333854608E67E5E588A857167ADF9225CF6C641F5E19C3E08678A281199EDDAC831 -B57223B1BEEADFDCBC8F6F25D32FCA2336C808162E8F381656E847FB6CB13969572425AA05AC830C -33DE6E030F86A3A85D2A66A77F103C7042C97205526DC882EA9A00EB8BD5519847EB424C15F808A9 -1652A6CC89B66A5731126DEBADE123C63D88A2E550FACDEB3886FF98646000C64B3A91078012CA30 -904B71737CEF6BECABD43DD702880538F5A70085E6CC6015D2163681067C3D513A8C66032C34A0FE -17A58AD4BC97CA69BF41F11D5E910FDFE9729652D3EA21F8DD8CC19160A8FC77573B1E9CEF4E790A -79D8AD6723B6804E9616466C935303E063DEE29CAA6C3BAEBF278B818C2EC2F13ED645AB452397BF -00DB8B26E115026E256746CD0C78A959364FDE6DEDDCD0F441A61A1EBA32C7BC172BB09512148D1E -BAC9E791B7D51B71CAD2DC9B83B2F99B3726607D9CBE58B499A13753CE87FCDCE21C0AD0528ED0EF -B9B2C927F57C78C626248AA2B835A0791244C5896686A66173EC9F802C4C633A42B086334D2A4878 -0E53D00809247BE64E529F96AD2F8B3922A6097D414DDE1EC76F9552F9B8D58B8E34F359AD792B2B -E50C26DB05035E7497162E7C49C38D3CD9B98D620AA67492BE5AFCA3A81A7080185C7F0B5105223F -1FA77805502A2E8C5FEEA27699858D84A95842C5F2FB68686D59FE24091FCDDE139B6463BC6C7B1E -0E90D20A83651AF00C85797BB9F53ECEC1675C7EE636D0D9E77DBD8F89670F855EE4D4800FF3F695 -0EFF09BBF8A0DAF6B8242840CFA5BA73BEB95115F4A78BCC02D85ECCE0C0F2EF6F328AD1DD6CC049 -5A3315B414A4D61DA50DA46D7ACCEFF6EE56451805D26B0359AF193531F95F6589CEAD6FA041AF15 -3067F88A0A2FECD135C56682DB2B45A71D1FA737C064EE9A4F404BB72A70B3AF0330359393247EC7 -81512482579865240A23CD8479F21C2C44A119EBC4E81B308DD8AA86E60C3DD8ADA50E0DFE8308EB -1A7F201EDE8DCFDA405AEFB47E0E6CA7DDB376DCB21D37F7ACC4D3E9F26B03A8DE0E8940CA3A9E75 -963A389DF8038D2C486072F61C0CEAF500753C7A6352B1CD0338D9212B42A4D3DA23D5BDF44C27C9 -4B88A415A3242FFE2E1B332477A21D2B9CE075EE479C6E657A4D8874A8C53964229310E01ED4F3C6 -86FEF5258EDF3B464DD6FFD7F1CAF473BBE722D60FB14AB4918E93878A8AE4773930B8CEE110F476 -7F42A52D9304C55BE12846C911A10AB9B2E036BF9DFD597F5348D42233315FA80D0F563C388BC253 -2103F05E90DBF1923F229F980A2F4585C7A373511372D07DCBACA583099EA972C03E5AA67E663882 -6DB134564DB993CEEB6E7A6659C7C5C05C310267D5F8A24EEC2D5CC3E3F3C808E6D6068D1A57646B -37FABD98ECB7BAF99E7D9AC4414A491A73CA34C52F394352F6B5A15F0FC4D88622DAC694699C2464 -84ADAC3B1D366AFEDE2A2CD2042C90516A666A19A91C80248B11224BEDDF1A320E230739E755D098 -B6A67315535F4C187CFA67ED817A035056353FC859BF286317996FFFB478A2248B908FF12ABDE705 -402224A3EE5F463DD3D243875C84E02DB968ECA1CC52C75171EA50D6A88CA91327A7AA5795019F36 -C0A19C093A1C9D3723C7568F9D41F2E4FFB712FD47F897703D7A620B586B81936C84AAED61D84332 -B3BEBC4F95B796B93EF7A1F565C494F8A65EDB21E2EE18DC025522EF8E599887CA2836069CDDD889 -88E5862977B7472584303198CCE97EF9F9E1446D1F1F5ED1CFC666A8A0C3A03E1792EFB60A9B4065 -49E0DEDF6ACCDBD98742568B4735A747D8E5DE21E630125AE0C691D054E42199C15B1F80CAFA6E7B -B2005F374A9A5F9900ABB7409CCD50C3AFCCAB1214E6A856F7C7EBA89BC3291801E1343DA9DAD2C6 -ED075C8ECA1423B43E587AEC67E6145272814B3F191B3C285639F9E2D6E148A02DC2CBC0E054D629 -5CD05DBAC1950400A9189316F0265B86A732D302C5BEE8ED233768F237C62600CBAAFF3A110D5EFB -6CC7CA3B92D965CA7C5E8D3E64ECF239FE2507FC797FDBE54C1112B28D4DA44C60AB09D994C5BA78 -D663A2591934CC052BC70CD1DCA3325C66C9CB982E2039F5DB70C848D3DCEF655B1C2CD0CEC8865F -E8E1C0A267BE4F707ECE6F5A3DFCA3CC1EDF92C760439F51AA69A4C1801E96CA4D6EA4AD980258F3 -D15C893913ABCE09101984C61B91D603053E49A97CB82FBA707DAE8AF1D579FD69C8481CB7B712CB -CDDB4D287BE995E32C02B399602A08B9DD849039B5673F1930BEC7BF366EB082D2CA5DB2385C8CC4 -5BE3FC0E31820191A814EBA7C4F23B1938E6C4D800732787CD2CB97F762DFC85D4B798809B5F2254 -D826CA42B32695428D120298B44CF38494E56240B75DF1E41E46E53C44DC505452256DFEC819408D -605FF14D6C1F3F152F2FEA96EA0AB3B472D8704E06BE9F8C3E8395CAADD06D6DA033E81ADE5DC3B8 -3DAFF743C6E9E48716003D358DF63CD7FD3E2F727D1F2D0C29962F76D5C95ED44B6F08D052025A66 -5785F264A3D5F5593677B630E628B5EA81FB37CFFD7A30B7FAD226B6FDC82B0878AF4C0EC4F4243A -807B9839EA62BCBDF7C2E9B30A623876E632E084EBF4A21EDA04FC88A1C07021D0C72EC3E969D449 -FEB08E5826EC20E55B21EA71EA59F6E3B0710B0DDAB3261B4A2029ECAB68C19ADD5174E55D5E984A -4E5F38F592A302FEE6ECE732DDE841A28672C620CC5D687455A5C06FA9FE688394A04F96312ED025 -B7AA6FBCE2925F3AE559CC1886BEECDB70822E2E5CA3F732A87404B1536AAC469989E9610CFA440A -CE43875A70CA51F36CB6F629D9424C1E35A88F92D5DA3CD8CBAE6E8425A36968E21F4F30349749E0 -205BFF8D552837D6FC39532525370BBAC833F75F1854C93FC533A4AA53ADF7008173A70D94A4EBF5 -38EA9E62BCDA7C20E0A073BEE2EFAC34D2EF1D03BABD5147659E50B557045B2EB89DB303749B04D3 -F54B43FED612FCC68206E001A7AFE90230D9C12F74A32C7EDB5D0241DC3A5D51481FD7C8FAE08FEE -263FBCED7C7D911B3A303C835AF5FADFD218F61A9D6DE80485ABCA88200047B094441F7767B97A24 -E8C612590FA2407BAB1E8B56C71914EEF2355DD97CFAFCC192BC06FCE063D3D9D1A629AADC75E3BF -207234C208E7E30663EDD691043065C9CBC473D97C6D4DD3DFF59D6A9ABCDD4412C3128F603160AA -D8F81C6E7A4DCAF35F3A99B4EA10A34375B477C2BF846521A7EABD4D28078E9340452A198F3F5ACC -3DB7E3908939FF6E3709C6A3FD9889439A4AE3E10B618CC92E14B68429A3AD2C80940A1079452EC2 -66F254657BE7D79A2A24084AF73F6DF71FBCD32BF6913A3FAB25F977787F7BB0C3A3E8BAB38D7A2D -B0B4826950643DD1E03BD7DD1FB149A33862A89226B7CB454DAF613128C2075470E42E70A9444A8E -6ECA526345AB48E6F5160BA23B5BDDFDA6049EC44ED1461C7E0DD514B16E2FB285F72039DE3C7982 -EFD40D7F6C8E8F4CF35AC71B467BFC578002E8D2239A2FD2C4BCCDD8AF3D7DB1F4AE7F2D2E0811DF -9D0155BA6EDE50B5F052F14F6AB884FFF244D8806C07EBCB49ED22D85DF696995991A954AA97A1EC -D86ACD76E061B7541E87997FEF0657A826BD88EF3A4A5920462C6595E7A156F453291CA044CED810 -860C3B0149BCE73BECA713040664AD0591304106129600AF71317B0D2907839CEAC99515D357E980 -B1937B6E1200AACADA205421001F1B2F91753E80D2263C56AA164A74701A8D5FD28E46480B0DD963 -A683A1F355D7FB4463C7347C94EA5E2CA40B60B56297CB22D972C5BB10E56715A955605256C1541D -9F3BC5768A6F355CD3B863F0FA1A781EDB49368F51B29481CBB41D4AEB07AF9DBE8F52C5D0FF75F7 -FB6431D37D6AED84D78C778871CB0F715B4F07580F23B586C969C81B471FF6A6C7276F7E141E02A8 -584D4B9AB00E7BD643D2C3FAAA299B1F1E25048461952EA42D4882768A70DE46B213A287F8D31AC4 -6D5436F22A796C05D1FE50A9BC2A928066627A0D87DD57A3AD91DB446404B41557D1457873482005 -EA20916BBE46C613F456C849D46BA79D20627B446B2F49E3FA309AE14F8C420CFD94922CBC0FB9D3 -5A0F7DBEF577F1849A1A80E0011DA8AC082A8C6F61658E65AD177ABDF23EE17C8CF0D26B9FA3A6E9 -4837EB9E930336889767A8D7EA3CE980A8EA95528B004957BE6067CD9BD8E02A0F23CC1762CCA656 -D33412FF45E917FD4A03EB6E8C1F43FDB0A8965A33B4FD26BC24A20B304CA817E88495BA9B361A3E -933717FFB0271F7F70C5D3CBA1E86D0F51BF3ABA194DAF32C35C796627D00C7B2271ACE2463E37E9 -7B3C826CF3DB60028F240F9452CBE08F7EBCC5FDB1BCBB3C327A9F450B9E5671916101D6E3E5E458 -CA31F04D12F592F83BADA2C3683D3886AA3B403963AB5DBE220FEC00037A745839F67A3635DFD3BF -F08F367482962DED88ECF6322852D643A54D5D303EB04BFDDEE9BBA1EBCCBA7C653B3A613A8E719A -DEBE3CE1BD7E754E5F4977E863E3C2D388A65227B451D4F3A4F94E06513CBA4AC1F2F511613FF035 -611684CCC461599000E546E4D972CA6960E095A526E4735A23421A4C9B597ECE08AFA2753592BD16 -DED93255A1E33DEECE3C5EB77B94670E8137F2A4A4B98AC193258E7DEA5DB8408A806188F2D1DDC4 -40CCF0E9A6E2F0C78FDBD7B68DD4939D2458C1965BF8BED4564B32462FFF3EC892C03B11D3EA813F -AB4CFBE8D3016329C5B7E3DFED0F08284D44AA0B7A2F6BC96EA4503E8EF52A64C22BED6B452581AE -8FF8917D53976471941A9116A2D878FB2541B561767ABD4E31CCD8A590CA03494C62AFFD64EA0A1B -C779173DAD84999C7A8D844EB1259DE7BB5B25CD023537A474A524EBE4660B22568949E624D8FEA0 -AD37F4CE1EC75955EEFA49C6BF1803BE87E9C9865FF3F6B8525B8C15FE8835CA153D27E6C0FF0CA5 -1029A7A9185D25F0F14D86FC797DCC1F99EE97E2054B9C2A2E06FDBEB8DEF6CDD368BF23A858D9F8 -C1DEFDCEAF1B4A8DE5EAFC604CECCF0D285BE00AA912EAB66EFF4D37AD2EFE34853BBFD87CE09B18 -749B489943EECAE7887B006FB827D10191DAD18466CD1F86505879310A8B171F902EA0C26A388E13 -B53C700272CEE2BFB47ACB58247C13449C6BB9D01232C32517358F1A3DE064D43C18F8827D53789C -CF3CE2EBE78949A6ABFA1A6B8414CE360A5E22AFB7D1DCE6F5A06182C3B984B4F9BB1A905A9D5A14 -83750A1DE0A857CD5C06945EB7D4A2A6BF1237F32A154FDC06D51A703D44FE052FD3C53E9E8F417B -35D1C851F9203A8997521529F21AD8498F96930AA77EBAF82EE02A57BC77C792D9F220294B45F48E -A8FD94E01CD25645D36D168923562F3FDC93CB79DD4760DA0C103C2675722D7A1B79FCB4245ED12F -A0DB52492C9CCE58B333CFEE822812F7DCA68E802C451B5CFAEBAC608B950386B6C58239D1C62D62 -4DD5D15782FC552222CCA06DDF387B373E32C3C2864C63C768350C37283760F3515A5B0AFD66C48A -B522EB3E808C061F5CD6BD96CD18C9839D30508E7D4EDB88E8F11E31E10919B16B7971F06D7877A0 -58D8A4944C84FC6CAEDF3341B48B6E0D3C7B85D710E0C35F5B5053CF4B4798B3778CC28B2DC7AE0D -F3A49F9F3BCD8E95D746C35C3F47D68B8AA35D97AA08E711B5FBE70D1A623C82541EBDC51A827D0A -69E6C049087AD26F256EB7577F58CCFFBCCBA5A95D093DC29464C9A38DE95BC6B1853963B2DEB0B5 -7AD1248D6F1625E115EEB9510B5772AAE4E3C866657DB0B3BF0E0AC345E116F8D4976B770876FFE3 -748C36165522991F46A36F193DD1A1C94713673C7E4C81582391B636C72DE94CE6254374F99B623E -5686C13D8A8322E83E11BB0B0A896C6A8C2C4F756C5385CD7017F26D23F7C3EE97372C868C8C9155 -81723BB6B76B4C3CE8998E4FA6CA40B633DFDAA59BA902A4952DA90EC4FC3CF0F2676ACFA7F76F78 -236FA2DE10FD3545357215246BB7E527F277C28B353CC6D79DCEF21BCC8F77603CDD58A2CCDDBE3A -9802F941CED8E035313875319548C41992A2BE939A17CC109426E33825AE59BCD17CB19F50D972FF -CBE7D9B4B0BB095303D9DC9D406696C2508D6CE99E11CF00F6461147E97449ED5F486D480A86D3A7 -ACECB7E9A945984724EFC21C5079B1FD03ED803C2DEAFCE3327D2D7827715FD65D9506216C88B0FA -26935E95C64114A51919D419038B1A7E9C1E829FBFB53275093752DF19891A97F3CBF7719C1FD6CB -17019A6D2D25360ECA804C4B35172662CC4769D2B785C6C87E5A4ECCE31704E59F71263B7C3CAEC8 -ACB4C7426EC25F11A0042323EE6C3EEB04284DBAE2C770BC419DCE79BD4560AEA41571C3B595F525 -60191DC7A8FBF63D413A77A0905E517441B16C2B501EA2F9E99CC38D052679F288FDF1894542E3A6 -6989A0090185EB2E75134BFA3D9147C3DB8A621D9D35E37786853779E157B47F71626D6B3E633005 -9159C17596C1B87FE2B4FF47ED9D78FA4C2160077276C8B58CEF5DC030B4A5D83CF257096C047FE6 -4DE307C598B815058E72D5F57DF5C369E664E137DE29349E2F9DCD8C9F4EBA6E765B6327D7A20DFC -B20711273FD8091CBA605C4C494248076F7E03DF65A6A50164980BBBB708741E5BF6056E6F996DC0 -7FFF408C5B8EAB8DCEC315E92873228C805D4440A6470E3EE3983758DD211C9CECDBFAA4C9300CBA -00608A4B2404A3C7AF017A3B7E67F39F0B51ACF950D3E75CC7BC2B8D3480202FA958E8EE0B240501 -5232EE0D264C7CA02C18CA45CB3C2DE322D3EB7F00F9455DB6C5B1F4E59C3E95520EC36D7D903CBB -625D70B54BF6F8255E412604BBB29FEE026CC660577F91DB1DB4A613EEEFB20CF7AE3CD89D565AC8 -38416B01B5DE4FFA5550D17FB51FBBEBE21CF1D56038863EE931B90DEC2E211ED42BA92EC244D4CE -2C4EC5CA87A026992772DC2AF754FC982B94F36EA7B7BF75E0ECE90CBB2A6AA1A012E8898BD679C2 -3CB3827C35D5D02F0569C7AA82615D4AA67518ECF668D3B57D6EF1A8013424AC2268BA0D9A74D588 -79EDCF6382A89D397864940303EAEC45A38304BA8B1CB198967AE23EB81054BE74B16909A405E8A7 -799CEE3C270FE2A6DC50BD7370B6B2C8FDB9A87D88D5D40348D3984E39C693B6F4486D994778607A -80A3122872DD65E40492107C71C3CF708A9717E9EEFAFBDDC239C53AA9645B711038E59C8B861B37 -411AB2039BEDF9CFD00F08D9C5D76154427FF5DD39878CECC5D7BFB3F1F035087185C0981F3C2139 -BE84872FFAD3408531C4EA9387B89F5E3EC779E8850D50992DFDCF9132BC551E985943B07618AC10 -D1150451F0844C0DC41D6E17EB508DC8689EC726400D5A7F6FEB3CC7BCE05F09228B7CB2C5393664 -D8DD9A4B96B1020EF25D70AA2D91CAE93AFB5F2BF0AA18CA5C599FA1A708EF35BF8F7FFEC9AFC1F2 -42870D028B2B1459063B493943EF1283829783E1010242E5CF4DA39D93D506F3892936E7D6CF1124 -70A521D397438733D053944CFF12D6FFAE8246F20618684F263715AA98E15D72A526383E05C23214 -B78338E5B476F0981D90056E6E5D0DB66B1DF2298E597B2ABE1D817E18BEB056E65EDB4234342D96 -00470B1420C9210419D834E431B82F58608C87AC361A02D0F1FE4B470A3D71E0D21BB87E1023D428 -E23D596CB9E1A2184403A16E36E644BCCF9BBDE27290485057E62827283E7380AF786BF395B3961B -A5EA469C315763FA59E0F176EF81985F38B882DE56A74D128E256D1B89939728E55A92ABA21A6B78 -44FAC1BA7BBDD8B34A18194A2984B000380FE9F672E83EFDBF276FE797A325815B0F25CC95C97A9D -ACF56D583486305D7C9E51A7E337D14E3B900333EB38FD93A99587DA2341B10C059C71CE080FE753 -3C0F059FA40E560AF9C4A41A4BE6FB45846FF8F78165E10B4AD40F264BCF5596A1E8EF8CB6EA4B1A -3A5C69059AB1563843679ECB2511A90E8898F54295649CB73D277760D8D04ABACC7BCC6E777A0530 -E2067CCBC08673F9C8C178F9D672AC8A15E5367F0C5651B53E75E0CFA57C931746AE1A679C246D7C -9417F1CD89DDDBD1173C2F880B7B3847CBCCEBF99F7122E832D7C9BAFE2B54CBAA1ED48158DE3F36 -238B76B0E67644A28AEA996DDC006F6AC0242E4B667639E7523CBC90A0561193C1AF34481C2EF402 -EE43A82E1EBF4E3D601BB36B2D95CD93550D61CEE7A94E72F6D30C32C8F91A61E964B1F66ACFC398 -7F95D4028F116E9A9A8474AA29C1C1A984BE0E393BDC41DCEF6A6F1018DB60D52024899D8EB5D55D -324D73F39BFA47377B9E15B3B06A7585589FCF52A54684173E5183367E7B0952DC4BC2767C4C6247 -B1D6103E52BC7B7EA6298F454C5D97AC575F19C10ACDFF4E10C7D3755CFAB4200CAC545269FF1D8D -B0D607C7AD47F40DDF257AB4E7D0750577003C13E4941960C3DD7B0774DDAC18E8ABAF8F53E03CBE -F6D57B44F24CF821014C064278FD51B3427593D17694B4ABCE81F49CBB984C5878CDF0C38D1ED7FD -99B0B9A3BD8D8FF6219588B3B8FA59D0CDD1D9B2F65122AB45E48F1757467B9204926140E3C350C5 -A927A2E700173053EC35D3F1DA2D7258714C97FAA857F0898917BD94625C6D1E2D77138EFCAAAF51 -7B17FE187A2212C24A881A2C6A647DEF6376ED80AE4175C5EE80921F001995B44E49F0D33DD9075A -CF33BB03671C0BCC34AD5784AD1CDFED3A6D9BA103B3DDC1CC2DE74DBB576A0277715275218CD19C -A8899209125266D8BF1286F881DCC2C383749D1E768D670F4099F7DE959EDFE852583183C9111601 -2881A56A24AAF020EA45CD5F39660DEBCE30AC1C7B8CFC60387B1B0C3E361BE612FDFA9F01B7E4B4 -A18839A2C7E0E393EBC5AD9A8A4EBC316A740C1C295D9EF5F4DFFA0667F9582C0BB837B142C4CFC6 -B1798E9476D0631111033B8BA75A10FDC800E2AB1E0E829632F869CFE4737BE9E2800759EE0831DC -7D1195EAF80555771981DD6DC6606812D92CB8EF86447F5F6C6F626D0E265C67E52A6319189EE349 -D48E49DFE6A9E98F76C414A1E3217AE0A215A17E54AA498F4ECDC50242ACC7E2322F63BB2FF2189D -057E7354E32A3ED1803116176B9B9D0129930F919E2FEC280B2C8924E49E7BB75768A2EE1DA8ADBE -D4E3589906DF1B923AEF84C1BD327438B731012E69BB0D43A1842CB88BB54EA4516477F704CFEB28 -6E3EA483445AD4D74586FCF32E96D366901084365F693A53C5FB532FBFE7BC0CADC404C4985042D6 -8DBB90A6DCDA3531EE324D558A214F935CD9FCC9A0CEBE9B5FB0323F4B3820529599EF48EE068B5A -CE85004FEA2984F0A86F5AC9D56163BBFE1142B774148F1EB0A4DC89C3349052533A7DE66729DB24 -41B82F8F7360111DACF69293C9B281A0534F3E9E9224A75C49A832F28B2E497262475507B6DDFA9F -01CA0A6696E3F5AC7EA68595EBA0C2EB8A47813FF936D84AC1B23ECA7AA2862B793CCBB0DF9FDD49 -31BEF354CEC12FBF478559FEC29F81ADF4452E83963E56541D31F3691C93A50F0BBA5E9552C4F2A2 -3A6E53060729854A3DD71CC4308B91957DB19E66AAA18FA67055A950F1C2CFF78A03BC1A588CF624 -696068068719AFB1001C4581EE072113882D9052B21E355D401ED8CD24D067B99E616BDA5A0A5A93 -36FC499632B79FF2FD0DEFB096EF46B75E2D4E0F48DAEA239719FEC4D9A29818F5875FC5041A9EDB -D26CAF0ACE14CC80BA49BBA59E918EB3D8F1E541AA16026585A2F72DF7D83541816DE46981FB3EFD -0C30E458CFAD04C79421AB7C4925E23AEA07F9F018431C790002596D26BD9663B51B699DF53E4882 -CBC34EDE88EB55045B889B6062E35FD1E018BCE785157B85EC3B9CA6C85D4B16238275385B8285DB -012D8FB7C9F5B946A41D7A0FB878FF72C39683144D8A007CFF631B43748F2D5FC690300F9BC0C837 -006B92ECEBE0605E8C3A4A400E18AE8997D1B45FEE10068E247C647CF82C6DFBE5E881D511FFA687 -B7AEB78546BFD07D5F7EC242DCEF4930D8AAAD8C6152B6642AAC325963FD147F236BB850A9966573 -9D06CDBD7CA79A527DCF461E33F22BC9C5DB00DA2BD3DDDD8C99D99793BC98282AA8872FF96C3942 -85D82D9419EB78B6AE37A5F519397700F75D624A09BD255B576E955A323E784E8FC31131F003B0E3 -024A4F58FEF2A6C043796201FC425482E1155E229D1B2D43EF7B0D22322B22EF5C9A1BE026A1C3D3 -75EDAFF99597E1E5477952A4E8D2ACF5D014BC00DC2A272FA62B6983E27D228881E2EF2B8B95A681 -CBE90C5FDE16331C85222FE2A16F0A3C3000A63E2E21666C0C119F8AF89A543D37977069A5ACF155 -6324F05204CE8CAD50FF4FB630D9CBBFC324DEDA584AA56A99D3A76FF55BDC2C2EA3A021361CCD4A -83C7A5E2768D210FA6DE889FD48A39D679C94EC3C99A8D33FF11377DA7F6F1B71A2A05B302ECDE95 -4F26773F39AC881542F0D0969C3995C3519A8EF70B4220D86BF01BEECC6462855E7B686E1AFF1CA9 -1FB8FD8B4A69E10EE0C2AD94ADD44449506F9B6EF43641F2026EFF6E605C670560C2B74706FB949A -A7E8CC6A2D0D6207E457E7FD87EC1B9092DC68B9143947CC8ED14AFDDCBF8FDDA228A76847F96802 -E561F67CEEFDE45AE587673983FC04C96744DBAA83F2DC838D633943C75DCB9E6410474EB27B348F -26E505F0AB90878940E846C5E9F3C5FE8C3558C3236B1B88C405716949B8506841CABE1717474BB7 -C30DB91CDEE33B0F844811762FAEC535BDCF84C1C747CEF9B1FA61D2AFB5A81335BC42C06A94D7D5 -9B7EDE55BCF6F9867AEE107555CDD084B7684C2C87087475A39A9DA6347BE281CE5635A4D07865BA -98CE26C1465B1AB0343F49FF37B4D0CA9F3BB693D78DC3B21925CB996A038DCC172527FE57C07460 -EF39C07D4396E7FA970D9F22ABD21A9C794B64AD96762C7428F59A8757C36D6C4FFB23216195A04C -2A2C2E7B10EF7193931544D782FEE4B91E01119C5553BBC6252270A8D8C56DD62D448F5AD8DC69CC -B45E1F17F0AA1E445129DD00F000005B23D38DE93A3BE55A4C041947F36B4E4536E307D0180553F9 -2E46B743881CB5D5386C48C7D5F84C2BCD06B9C501F78C7EE61FA23516791FCF4DB278AF688A2E60 -10A56692AD92008497487EDFE4BD5FA083FA544138B20D6940020887E35D46E093B71F7A04A67460 -DC8116B4D4839625D7CA6959D6831CD93F81AC4EA2709036DD738364FDE71113BF22EBF13DFE1642 -E564701E6F0FFE7511EDF03FE448C2B28C64FB7D54B94CA576E481FA56B2B18AF10C71F699B6BFD4 -7459CDE1869D0FD306BF489A6F42E5B2F05CCF55BB6B9526973D19CB134CA7F13F1DB3716F8CC217 -73A832568C16250B5CDB16DF24BF81D49F5B37018BD310262EA7078107868AB0216CEC83CEFCAB1E -9F2C665A31585CA04DC01879CAA79AAA5AB201B516F7052B01B16BEE5606098393B0E5D9F9E5E3F4 -EB20F63C958E796DF41CF28839F5C62A0431648745D7837B519F3AA36BC6C08EF040CCF53D9B6D8C -0C7D1A84D707EC57A3C6AC9A62AB37251A01A5ED40FDEC6F5BE6E34C6A91D058319439778A2EE5D0 -363E2E1F33463C33327D05FFC0CBF08D5BC457C7230448972FB9B4D0D782BA7DBF10D3FFEF8BF523 -6EC16D4DD6D0D870D9D5EB5C64C9A46A4F583D4F831FEE74B0E5B33A09ABFD4444929BD8F638CD72 -EAB99CF2E9551DF427683964A592E49D186F285258C5D5F62196A98532421D73E3495F82695FEEC6 -E1952C562D546B28618FFAEEBEFF03A57F4D855021F85B0C7BC37FCC6DA9AECA099B646B99D41896 -09D3FF2D56422F8C37E97640293EC7C90E3380887836F4938FBF495CAC14FBA5648D89282D8D49D9 -1AF73ED36581139D8BD42551E263E830EA3C6EB381D85C42D74C50DB0CCAEC03F535ADE92128A016 -0E811C34748309AF7604919B66CD43EB5CA975302DCB6076FEB6BDD6FF55976FE990FB0CE9ABB11B -195403FB26E3D6C6A0DE1C5BE79E171A61E21F79EE8DBE7A832519813EF6B33EA098C2C32ADEA219 -AB2AAC8B093F40000995539D1276D5F2EF84CCD099B71FE4269BDBDB6A8D59C86F7D2E3FBCCF8773 -D0FAE97640BC1AD43CB4B992BFADFB09DBD0CAAEB8CD9DA264187C4F97300E9A6C9DEED5525479E6 -05C65AE336CBBDF4E5D7F79AD098F977285E065579B748FEAA97F2A753E1F962FCAB68D72BAA8EE4 -FF6691C23E31BC0F3E981A96FB440404856AE1AB32A7205B17D411D8F21C8C93B704D07EC594422A -BC368CDA2B1610CE6A973F4474E12B78B532666797F5755D269772C9F5400B3BFC6C58395D38527E -2CCCF29B56123F7DCEF3BDE5DC1DFC5B0293BB125085B1D2D929BC3EE84F4FAD571A4991C3DEE03F -2DB3A3097E52B1A7D5C73CCB6148EAC62E8E36DE9A71C57638C6E4D5D9DED18174E8C390E50B4A5B -913C074EEAEBE390B214B3A68F02862B9A296DB4B409769649E51D738CBBDFB7702E15C73C2AFC6B -C37CE15171F4E822CF20EFE55D9F061AA43E648989628FF79E65932390CBB15D8E621333B18B11C3 -BDF96F841D7434E01AD501FEA964A75B248A35CD9DF9A37E48A1E5A09C624B93CE44F0042FA00D7F -9EE89B9F7AB785E9C718CF6E7228F743271C2C9BBA17E5208B920E44E765D99D86650EB454B0FAAA -112753AA1BD3A24239E9C5FC47EEB1547AC9D23731B8DC48B9707830DAEC60C8D3790BBA1120F776 -4EFAC542CFFBCD5C05F9510B27B2534B704ECD36C8B041FD49A96881302FFF5B0163A2DD09C751D6 -D6AFEA9170A4F4C4AB8D46E62F763FE1BDA51DD1CE4A27E772F3A2869155F762FF26B7AA6FCFA4F1 -292E56F03AAB6322BF867E7710C34D43B5D85B45AA68014AD7879EED051B1933E491496E3E26D9AA -8B80A07BF2B94F1077E84A9726F08199887D66DE7A307BF33C30DD9CF3DA188088C03B2BAD09A217 -6B110DB2C868B53DA9A66C85737BA66C93C58A259860E294AD0191E3A72C73F40B0BD98699AA08DA -F03587B78F391F3A4313C58D9F29B53C70785637BD0C58310109C54091AB0A34CBB0C478613A7AC0 -FB8F0A8B4645AC966395D8BA775262CD291136AFFDDF01C1D83DD4EB3B59CCAD18057FE7D92A8CD4 -A58F22508D9FD7CF356571F701BBB23E749BDDCBF8A317FDA0AEFD952BB18545610FFAD3AC143D35 -1B8DB3F66293375E0E50235F0D0466932181D377EDD32A5F0FFA4E22B5A0CB4F343D9A7E4A342E9D -09DFF6C697630CD3971802C277A5590B8CA94BDE6B38446C794D072BBCCB724D5BC208EEF1B018D7 -39373BB910D668882CAA779C2D686081DE6A2606417B54D7C20E0E7F722648D893E4EDBAE8F00D6A -6DA3712F91AE860C756D1127D133AB828E9D80023B50B162C5A1C5CDF70CCB3FDD7EA060ED20838B -E1E50C4094C9E79E1A0187CDF780CAF45A725964F004253E034C5BE46BBF89D94631F1A33BAA35B8 -4FA2A9D08481C6674126CD96ED05DCE48BDA069D902D6836D5DFBA701DC0F98A863E64F0E312145D -8DC0B77F25B43AEC729A1243B45B08CA228DD6101CAA2AC5ADCC8EFF84A4CA3F254176C2CC711EE6 -C273835D0FD3528ECA2A976B88E51FE347FDB60F32370B66D338931D6581630ED586F349C638960C -31AE4204E89521A96E1219E696B913DEB2AAB7A3B022D06F34FDFCB810A04E60A4FEBE284C2F063E -0AE9EDF87704921CCFA193BDC912B747E13570066223A49F1F6E2AF0D4D65DA04CA876FF7A462FFC -9C0BA2CC545C3BD36DBE762F32B2D6BE5867C59F479195C92440DC165098B74EA5C3AD93CDF2D410 -B04C16BC7801E7956F4E5107450787AA592493171C3628E6B8F49D4F8429EB98DC52EF025F001387 -BC1A7093F7A99F10B5D2D7DD8BBB393BF6E56F08F4F7FA1A343F220D5A1EAE7168C74D41BE1DC1A8 -3BD65B72B982F4F7B34F24F97F9EC9A91011064031FACFF2A14921A32024385F4E061CD07D152E74 -1BF97156D951A342488FA7F5EF934CCAD13E2753A0AB7A1F565C2F7F6B349DF03BBC25BBD972A9AD -F809BB5C5048A8CCEF9297B2ED3324D18867F293CC66E88B3A39D107B610DFE79A3B4E83A96D3D52 -A17FE8A62C9FDD271130148366942C9CE57558D023DA5F7501319EBFA33DE9E6D1E76D7C20DB8A09 -B657839DA99F3D8143F1EE6253A3295C9651FA4366547893C2DC7ABCBF4BB7609DE5D001E0A36D9F -FBE01F7D0903B3208AE8547E2E5F14EC1AF4C2535CA8F4EA37E3F3CE172C7A1E8308995B1CC23E6E -81190246BCAB6E755BF868D449BB02A2AA87C44C9CC0F571ADC72547CEECBE104BB274B8AC16DCB7 -5D5F458D356466B921ACDEEAE384E2EB1DF6EF393B41B9747F0A4FAEB4AF1928D9AD6FB7E06FDC62 -1E4C6FC98CFB43F88584BD55D9B97CC9549093EDE586912161931162B1B1D52D0443260DABA02AF2 -B4432100D5506546013DA703573FA8013685CC798CE501960093DED713FFCCF89CA2B9106390198C -29A00864108CDCC1984A8BAB53919028C01B26ECC7925E38CBE6CCA8978EE21C2B06E7B3E48FBA97 -8E2A7D186E563C088F84AA23178B60E4729EE87D67B1091F3B6973676C1CBFE6530EB773C62E2C24 -97014AB0E8B71A1F4E86A378AA26591511BEE3CF3D64C94848582E1354E1605B6457823F2C5E640A -D3802946BB2E7E8E594E8C04B430C2385DD40746CE8534F50842E74D7115F3DB0C72D1C9C607C657 -3B094AEB73B7A79876CFFC3E2F8C9FEAAA07D3BFCE05B61F7749A8793BE90CCCECA2D7077F25E899 -D3331FE161A7E86C842495D584C6E4A0880B2951D8A13B88C4672080A0B1BE36BF47C3ACE7288CFE -41A8C1BAA6F0814A947FBD6B3AA72B6C73A8C578CA51CCC96F2352316C467BB960E981F2B6485BFB -44B577E71EFDA16E7405954BC7C9F0759F5A9F1EBCD2FA9CC9648D5831A68887F41B15081A204C24 -B4B992A231DEF9E698D4C3A25B6F5474F5BE6A601F2D337A58A0D21FF37FD91EB86D1D738893A03A -69F0CD743F611CDFFE69DB2C6ED0E4611D56F803BB0DC06E7FE85A303839612707647B1BE9FAF8D6 -84122CA9E5CB8BDE2936D3F4FF254D31529D7538BBD4D35539489F9E7316F24214B996BCDCF1818E -749A71CF0E8845AA1E2A58AA62A48E02BA4564625D20AA220EE719608521D7D7A7FCA0BD8904A401 -9819D371F3F59D46C1354E5FC1A6E5F79B20CF4ACA2BF0F2DE73DA193A6F9ACBFE0B4731C4BCEBE6 -D96FE822965DE965232282A3A130361F188B3AABDA95A8A2790D9240BE008B6A6DE4BBFCADA05B67 -86B9BB8E0DFA0C30043A3B07ED46277E07B9808422C8ED16758B9C396F4EA929D769785B2C9568E5 -70A83B989B25CE200F1727D41E2B702E7F88F1784F4C83FA60A74EB26B2DA95126E508ED519A61CC -151DB6804F61826C5F86D8FA89D06E526FED97A0DB88EDB432FF32C1ACC9B622EEDF601081AF7B96 -3C9CFC1D13E4A9C74FEA0A1C8E3D8653CD92A944D4CA6B0D306619AFD503506D77732D6514F604BE -4610C2560931BDE0B40939BC1D126B0E97F72AE1B4A9252123B54F7A27E0CFA4425B4546526FD741 -CA77952B10D13E0AC2E32006A903808FF0CD013F936238C74CC75FD915244C56A8412F37F0134840 -347699508D6F3D7F3203A25B7C70100719582CD588590EE34B3AB13E255B613A6D00386A0104CC5E -D2C646F09A88888D3751651D5646C5227A3C80E8DA1B0A331121DD2429F1F4775D30564DFF47D01B -BE2C6C72CE4D1FD9A2077C04D2B0274B8916F6A9D1A4A6964A534F47CF241D5A8E34B23F85BE9ACF -FC2FEA961F277539F215F8728D6788F67BEAF45502839BCF23D8763C3949352F00C579A9A4FC408E -C625E310DAE61512DFE6844E82D36A2F81709E1F05B38AE9C222ED62C961EE63593CED7AAF73CE2E -D3667740C77B309B93EEFE1B4BA65D48575A66BE86743DC9E5D3C2FF418D11F7F211B86E827EE1DF -C3613E7498030F07050524536D1F8A94DDB6698BE7B963C55CB3F74B676CD815A7B3DF4B1A0EA2BE -1B0B9A11FFBFD5B1FA49668AEE14629316AF436A0821C20BEEF7B3480847934A99F6D85B68F4DDF8 -859A754E009428AF89A90D1852C220A607FF0806E8080726EDC94D691D214B4521C147C4273AEBDD -BB4A697EF16448CD9B2FC95293305858DECFD406B89B9F3FDAE2AC579E80CF321EBAE5701FB2F7CA -D8ED04B4A63115886D45D6120F69AEF1A21D80AD3C2D35D2899F1902242B96CD349E0AAADA40F7A1 -1282B6B52BDD97708E58DC5E2D22D1153E5FA3F3B300BCDFAF98DEC2F4E3C82A1C85F985735F3987 -4F557579F422664E07CBE19DA680EFB0FC82C323EC5C4644C51709AC8D674608A8043C91E6C7988D -430F10BA6CE1FC7FC0604FCD8F723895250AEC36CC35B3FA14FE2A0D24095DCC30B2093F2298F5F0 -A97676A0BE66C3DC9ADACFE2FC0F721A20E945AFC1096A619075D5E9A264C796EC6C90EF1AEEA8DC -089B44FFC13D27CB2370070A52D4416C53F364393E46EDD7EDE00799960CE6E0D57E4909E88ADD64 -BDD2B0EBE2D73FA6ACF8B40280DAA0637E705C65AABD523B8815F22F23E9FF81E7829C7E4BC980C9 -143AEBE1A04DC0D253396BBB7268BD5AEEA356B610D5DCEE03135E00AE34388251F31714A1C40E18 -2652C48CDA2211A22CB6F02490E69A44CECB169754C53B16028D352E0119F5D5FAE0BD7EA1CDA647 -12A6147374B64244E21E9EC9F0D1381AD22D5B6212B26C3F9AA5F6045F25DD9F5EB4489EA39B1945 -331AC70510C5752557DE21D0A6CFC1EB10A98FA867B76DA6E4249469F591FD154D39E89364A43DB0 -07AA0D7A911CFAE6CE2B557997FBC44F55A27F622BD7B8B10EC9F5D10F2649A646FD964AE1B111B3 -5B46A252C4DEE44E7426EB5739F24E8A390694597DB3A1FE7800C97E59558322F0E49A0CCE2AD94B -1E2D1026AFA771723E3F523916F55ED866C9FB4A2F759651C613A2CFF362028CDF9D38F05D4C7C60 -24C533E930B64B099FB1AF04B01F5FB9CA6867E6EFF55A772C5391831059987E10CBF987E3F378E0 -1329F73D54DC0484177D3C3C06F67397955FF1CA4EF8AD1606B70455255D631A7D6EB92BFDBA14A0 -FF28B2ACE7E81AD666EA9B3A0F5A6BA3B5DFE35044FA4B3D8ED956009C60E98CC132F2E84967F4A9 -8A67B336D5EE7CAF7DD1F74D1FA08619941361FA7312CF225D89CEF97E864C8369EAFAB94D97F056 -5505D825972B754F6729596EEA91210B75DD8F645382ACE36DE60819A02B3B48DD00F5485F9264F9 -FA926D732E2C267B0BE8CA98526F124F97EFDB86132C5EF16B103908172FC51F286FFE45FF253512 -E0033F037FF182BA536A9EB2DF2D1DB257D9C86C46E1B002FB32AC70CA9462E6EB48994752CEBCE3 -9F08ABD4F4B0889283E55500702185A841E328 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -%%BeginResource: font NimbusMonL-ReguObli -%!PS-AdobeFont-1.0: NimbusMonL-ReguObli 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file PUBLIC (Aladdin Free Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file PUBLIC (Aladdin Free Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Mono L Regular Oblique) readonly def -/FamilyName (Nimbus Mono L) readonly def -/Weight (Regular) readonly def -/ItalicAngle -12.0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /NimbusMonL-ReguObli def -/PaintType 0 def -/WMode 0 def -/FontBBox {-61 -237 774 811} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -/UniqueID 5020947 def -currentdict end -currentfile eexec -E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942BF7D6DD84F1664B89 -699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED2AC419FF2B2BDE605B8EE3264EDD6641 -2D4F21C64AC522BDFC7C5502F9C3F3E5592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A2 -5032519D1868816E44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8A123E6A208511C6D0C255B9A5BB2FDEDB4D399C6CF1 -94FFAC236883767C0F68F4EF84EE696B677DE704EC3B097384F2E673A1F51692B7B260693738C211 -9F7D90FFDB21EB715FD5B8134FC87DBA320EE54C2CEC6A4D6BB350555EAFF2EC4F84365CCC0802DB -B3BD0E3F0D9F858647DD637725C2CAF9557FDF842A0DA6A0CA0F1B442EF8EE6CBF2B03858468A466 -AC5883CBBD3815B283343B39205803C02C917D06825C09E2BB14609FA32C28D720C0E14A4B12D4F1 -25FF6281FF324DA33A56FC49987AC7D3AA206540F8127273FFE9A3DACFFE2B1C269D3DB9A811578A -C7D532C2EFC18376F473FBB2B32EF642B19CDEC1D6DE83643723E3C6DFC87F97A7007B6081894BBC -45C955B7001EB36211B26AD7A3D07459CFB33F9C54A40A360CB802FD202C8E93D4DB888B325CE246 -D02D1220ABF55CE646DFB45F07CB848406E470362F80CE4C02D98DD845189877732744CC16C7F566 -9F77EF096EA55AFF98AA103EEAEFB971731EBF3782E6AB725D4E9E35B2968689E8007C038CF25B6A -E69451A4731E79AC22BD268F56942A233E52D71873E83E00A1874E04D3B22E72FB2D0671AF81C698 -53C389B51F4A257373AEBF4DE2DA1E4DA5E2CA88941F81EAE0E32D982064C8AFDD7A9A600D56D736 -05B9463C6240606B3361BAF22AF74EF89AC804A5793BD512DA2D13F4BB1B73EFCA1E621ED2A65D66 -5AAD0AD228B3B7E3D90DBDB6061E172B686E92355A7C7459D83199040A368B5697DDC3B81DDAD341 -6FF4405E1096B1240EDC18A0E9985CA55A0D697972BB11E9F1BC30765D6775BB68C69704BE200EEF -4E11B78ADDB6229D8FA49A6B1525ADADF17122C0FFF51A08AA7AED158724AC4352EBB91ED0C157E2 -4281BDC1FD610195F495E87062A8C38E0D046DA4067EE16E81BC5F87E583315B973184E474064482 -9B2A52E0D37E249BAB31988B906F891AC904D1BB8901F0673AECE60ACEDE97B8DB7935C6488ADE8D -FD898027424AA85A11A3DA494498B084133B857017A6D507D70A3421235486EB3CF7613C59139FD4 -DCB92EADC60BB6225D9CD0599779217BDAF4813A453989B2E56903F4DBB83D83DF4837C86BB4C3D3 -CCF98F07A23EBBF7AB5687C3E1E6792E40F92A7A466DE352294064537505EEF3F9C308C9EB94506D -B02CFAE289F10005A6E42D2DCE43731A7AE368564B2983038DAD6987F67062199018395BC0FCAF28 -7A2B040C71F7325FA1E9A9808979B2FEF19096B98B8A0A728EB98F2BA3D33B49E3C20BE992822C7A -1BCCA5B4E4D1099D456D8D7D83C57ECBA0FF21428024F7572A1470317CB8CBC8679A974E13D88C68 -1338C68C9AC9557F97784F4E1C8C2E61F26023ACF46232CBBDF3C0BCC5583B935FE9FA09A562129A -8927AE73988DB0F7E733C6561CA7C9716DCA9B88208A715166F2FAE6D5EFF289A9B2EDCE813403A4 -16F243F1B57EEDE7D81E10C2DA4065A3082BC92A38B2457368EEC9C3C17296CB09819E9E642D7365 -F9A6EF430FC7DD611EA5FDBDEDFA72634AB599EB666A5DC178B0A0BD1FAB042792115EF3B6222C12 -41DCE36CB38B738F68B1B3CB489FED9E53315553F3C5C3BBCE40451E47B7EA53FD3D3ABA6CE0AD22 -5DAEE734BDFA3BF1D81C1B42C6D856A05D0924E03F7627C5EB24D7FBEA3BD85716207F961B56803D -BE046E81ED5FDC378F9CA52C14FD8544CA7C539201BEE06487EBDC30FF3B28E8264EC7FD5DA7E080 -65B0A9147344CE28DA5182335875E9F8B2347A44E33DFAA167232A5C3E69E8C5B58B7C7216537827 -C936F5741B87FC68753EB0D4A466961D0050DB59DF3195BD3379F5647F8CFED35DA952D7CF2DED45 -EB442DBFE992711D22EB228BDDF36B8D7DBA27062D60D2271EA8E8412F4290B58F5BE26FF06F0559 -872F9DE4DEAABA015EAB4904BA1F509F6D517C6E897312DDD571D769BC474FD378AF4360E8B1F103 -AA75F48721B9E0BA589319E15D74AC0B03D730C3EF708C7C504787483F134EA6297097B46D2680FF -8AA50B7A255563C88D594B912F5574564A1371463674793E4834AF11D14C7991E7FDB3A6ABF8529E -1A4F10CAE79C60D37429579093DBD041ECAF03824DF9C007E96F45595A524B27EF8774A83AEEBD3A -7134AB4435C80944DEFF5C1CBA921B0A41B9651968581DA4834B3C0E6D4DE13C1E792FCEED26A72A -DC4D9E3903661D8803DDB58EB2B929CE31FC9F50A694116B00AC9F3EEF53FFDB1ACA3394BF111610 -38F39917B022394C75A0D467D64B89A44E5505DED7D9C6B8BA6BA098F140C9C00E09200EB4828356 -A2D6BE9EC1D5524B09C06D9C6FCB5E2808050A339B5E5FD4DD6C2035A48FE9674520901EDCAD107F -67AC8C8E508E6003011978D77ED225F361BC0F86A98B6120EEAFB73F7377DB1E7213E02D12C330F5 -492511B4DDE08558D75D5B8AA2D56A3111DCCD257EE96E3446EF1C76F000C8916C4CE261425ED9D1 -5B58CED128DAA6C1300466E7B152BCFB5E6FAAB2519B8A98F26B29F98133AF886A0AA7E586A090BD -A1DC6120DBB5640885C609A8BDADEEFE5DE0DA5B75A8A29E92515E86E7E66BB29581E5AFF8CB6551 -D8D1103DF60D558E7987E6F56126A13DB2C9A04886C655064E68A0A20D1B7DE24DAD22BBFEE1B7C3 -C208D4FD6A58DE78D6A0A6126EFDEE3B1A9713DEE94069A9F0A2B392A2F391C4C75327803B53F252 -CC9EF0323F84929BA4716C50385681FF5B4ED54929821594F9026B7C1297941B178C3F8A704CE097 -60533DBC6CF4B18AFBCBAD039ECB2EBDC7838A9410E7B227924BED7123944675A5DBCA388B710F8A -F6048B03DFB713F881EA0F3B191A5CD989EA150B979059C8AADE403855815D8F7980CE6288F47EAA -37C1097D33F13776F08779063C5217D7408D9835AACBE5C071EA40C9AE6DF685F4A9827B828815D8 -F3A672E73A418E5CB15684EB6C6FE0998A386E124D76620446907F993BE16FE5AFCEC681F585601E -18182EDCFD3024062A3082AF97E803C47D32229D0A24596CF7E03F18229FA631175699E2F0D60FC0 -9C4F1954C5D12D03BFB4395F0E5EB6C6877083807D91D93CA4177A6B5A8D2AA500131FCB670E7118 -73F8A3C77575EC93A3ACBA37EA117DB268CF10D04AD0F079484DB124F6DC14A50AD3B0294F7157D0 -837D8F9A6060FBCB385606066401708C041594E0396A0BE4B8B66FEA141CCE4BD29366A986ADB98D -9A6935C49C57F8CD415E93FF8AE0DF75E463E02AAC68DF064C1B789B685F84E15E512404E065A39E -9E8F5568A7D97671AE1602605FC7E4933975189837586FB1A55007FBB0E91382A629277C36A190BC -85AF49EF3F0F38D4ADD2B5DEE09916B79690EC83473C63E92CF617617A66DF472A49641DA10654E3 -AD3880D060B02A4A6C75B51E4E9917A2B6D8EFDA12D59DE5A8E222DC7E82F02F23A9D3DBF637154F -719B14114DBB102BE5EB76B441D7E9990EF6420C2E80942C8AED5A1D0B19BCE115B5929AB9E145F1 -496753DD6B1798324F5EC1D0C7F26FC3045D7BB46A14110C99BA07A45EC16002CB754C0BAE7A1A88 -EB387BB345FA70B0A38AB4D532C2DE49274D4F86F2582728A2CC54B4C09D26C0CDEB8FEE6A42885C -6207D74953CFCC583ED82DD7C0F29D35BDAE5BB251B8A2D4B1DC97E2264DCE035E359DFBADDE84F7 -37EA6A59C23D1A64D963E635769233624F7682EA34636B595CCD064AAFF3887D916867475731BFCB -F7F96D5E5E1FBE6AABF454C2F504EA4E8EB382911560195295C87793D5F7739AD7EC7176E126413C -D4D1058EBD7D6EBEE14BB94A1ECF28B686411D91E07373E891F78C4C0A05D2E8D90A8AE2614F7FC2 -63A762D0F43485473A54C31726F8547701D4A38D20565ED1707847AED9C805780F062B847E668E15 -565CBA07A72B0BA99F03FB57D26FA26FF579C30EED0AAB6FEC1B5DBEA81AA88F16F0C9BE869505BE -18C1CB79657D91D6706E2A3F0BE9920655B93EBBAE2B4D0B5DF6BE622C951F2CFA42AEDBF7AE649E -2150FE87CDBF5C2685EF36051080BF39D864573A45AE2648AD97662B1F69787031B9BC43511FB841 -55ECDC3D91E2475D072BDE6A5207ACEA1E0D2ECB1DA8A1BC4BEEC335A5C7102963E84B97BE741C44 -58ACC3D72A7E53B1F08C955F33EDC3A0DC3E7308270C0F7FF814B111459985733C62E8863625A551 -837952F3CBF32ADCFD9F345E14B585B23ECC440775310654DAF7F41E56FF45F89701292019A94BF3 -0EB2D65E14B1A1D6BF89D4CC43187ADADF3F6E03A90ED01E5D876BD3AA56E5EE84DBAA4DAD9824DE -9984BD45AF96FB8A56C010B3C3A3C6139D58E9D69D9109DB18561B55EAD6452497840B9AE90C749C -155B6329716F0152A7AD52DBD0B8A25B9995E1416681F38FDBDFA443879B5C4C25AA29E0DCC07DE8 -BB161C36D76EF286EC88D57C74BF44DBCB4FEFF771D3BD82C8F4E233357C48E516EFE3DB9E60EF16 -8E2C45B54651DF9A5ACB5F1790F7929BCB16CE5E9F6A43919AD287DBC8E12D9F9E97E5DBAA592879 -1A5A02D39D259F3CE273A870906A643CC18D86E23F115D2A35DE6926053D8C84B940B362E7DB183C -4905060316B269223DAD309EB5AC96DEBA757BEA45FA3100F77F4765334EDF3D659E09BD1A5552DA -492BE9174DD406F8353A059ECFEE3709422940A8C369919EE1F22F7C02412C995FE93DC4559D32A3 -155DD22D3526D89B16D9ADDC30CB7ADA6E52D62C5F2DFD142D4D7B6E066671EBAD08F54917E31704 -1F410CFD8A3243F8B39459C418B7B7C6494551C6F6753A94072D09E0D812351D62916383C6E061F3 -5ED864923002007E626089772D269B298DCA2CC1F25D9BE43FD8AD62D554C16AFEB7EF6E5DDA66D0 -5A810F003CDDCFD2C02FFF02BB61344968091F67D3862C1499409ECCA137B9A2A9BE314995B818AC -CDAE27ED4AD583BE29DDE4E8C2400C5F8152C85709AD2A4737BAC768FEB70CE81A92C9657DDDB2D0 -BCF9169D272A063C75C150ADDFCBC2F5F2503DE3D13231AA8CFB396DB38E80197A605F6BC20EFA1E -DE40CF424CF221218D51BEACE64A3DC88377E4F3EFE43DB4F4FC0803BF61764104CFF0B618C90311 -98B094E20B0FACFB94240B438B67BA298E31D3F4E31FD190E48BFCE27B1BE29D36E765E7D295E96E -DCE09094FAC43B87E294818FDE9363FC7DC5EA36A1497EE25762D02DFA00A9BE53F87ABE62E52ED6 -F59818FDFCA643042EC13D670DED1980413950EE43372D31AE2694B83DDA42E1FBB049F7E7B7E69C -93FFA3195A2462423DD2C022E5141783FFA07E192AEBC5070F08B23AEC9142EED56DA74F93BDB504 -78DA55DDD0A9987FEA131E4CCA0EFC51064E4B37632728261369C3FEDACA100F1AA78FB718ECE7A9 -F56296C5FB43781E63F36B0E1D34BB748EFF35E1953941F94D1A9B0FA474FD68B47183F2AC53A63F -9F1D30B9B89C5FE54C3765B43DB403D57994701C133E42B950D9BB1CA202F15B5E590EE75598FAE4 -3D5CF1546572770BBA9A6373F100CDC61DB4E5EBBE0A93E0E51C86005E333F69110B1C8E492F2BF2 -52CADD5B73E7D3EBB53E759353F1EF3C9B8B39C230D13AB7158A5D92EE4C452F81F6DFC18803280A -A023832FD0DCB482CE5AF615C952BC3F7E58F6417D69775FC7C0D5B405AAC632857736ACF32B2EE0 -F2A2C0F3B3CAD483C614505BE94706322F2A2830FC5AB592907D0291ED1873377E7A6158140C2CDB -1B0E27EEC9CA50176102200992308045CCB5A169B61EA0546778B8D280737319046716604945A21F -2A1CB9E15E3A5DB31E0FB5A3B0AFDFDF6F3424B7536D473F9756CA3694DEE4301FB1AB1AE47128F8 -D2B461C051C1B999DBB010E78DD13AFCBBA6F7D5226D540527F17881A18F551B3EEF76A7E28B4FDD -879381A2217EF2FF9F9982E9EA70AD2003B862D7C36D57C5FF9FBEAAB56040FEE973EFC3B34D8319 -1960010110BA10694C17B7635AE03CC1CD087C0B05522A7A791F0CA34022A3F5860B536D9551BDFD -BF560A07F63AA4E687407E5E48584E689591F1B52671213E430A708C06A34D2E1D51CFA6B328A122 -007C81B5EB263B967746961BCFC8772F8502DD95898724ABF369B0877F3313A167F3F714023C229C -5757D4D46FCD9B4AFECD093DCABE52B78132CE9AB6225C9A344C4BF8D96F2C50C4272CB9AA0D606F -013B2642F8C880E08EA2822C8CF5097D2CDB64932FE195ABD5FDF36D3BE123AEDD8BA2F82A8A628D -BE3ED6129DC0FDC4BE50D5574AE4FECC65062E70F4703BFECB35EADE196294FE173EA57938679DBA -6D15448FF44C0D1A903B202439DA93C0B0E612110068F8079219AA89F435E44D0464F54833BEB338 -670BD820D941DF4B31F51B895BEDF833F9C43CB7616DB80F988CE72FD3C12C7D49F740CF85B4766C -0ED398EB837695D102DEC16E24B7475A0F5DDE88FBF2D6B94F126417C811E8362B9CCC52D8891C13 -C10937AACC228D621D4712CB9DE0BAB60EDE2A97E9292BE04E42E6D3425594DF56931A61E1F96172 -6AF6E6891D63B240E6E79E5BF30C052091D681BA1102409874CFD8EDC3EE2BE331676E31AC00F807 -91D1019BB789CA4F5907F4823B002AF3581448C352BB67D80FDFFCD1C5BEEF60523330AA2C045600 -8F62DEB55E69AC2F86369FAB1ECC90D2487954E61117A90D9269A65DFBDF297EBD29C3DD1F62755F -8F289C42A534F59650685F8576EA2FC5D26B99B8E3DCD3F1FEEC73131000F99AA9868EA9BAC0B56D -AE2CF46DA6CC1D18C0AB8D77BECFF7B89992175CBA2E22779C13DB9DF53FF5B1C8FE95E164997D94 -202C37175E562C8622989B075CDCDE173452C064274354D5DB8F7D5A78D48AD4A103B9E47500D08E -DC7C51C1F3CFA7F43C3686A3C24A7EB5018B0F419961564F87E212CE0A0741AC68D6822C7AB9FD68 -85F5D0B2AC249CB7F50E2353CC4B0A6A24562F564FBBC7090C3FDF1284AB0EC615E0B3FBE132F315 -70C8A65C814F93910AA4BB80D516CB70D2E1D11969238E6F022D628FA2F33A0A15C4EF0CE7F753DF -80A8AD9494885A1B9ADAE6C38AC9DA6FB0A61696AD3A502630252AD7B574C841117D34BD20BD6581 -217D977B35F5D04E02B933E1E84F5C090F6615AF484D63265D28517BA74BEA8876FDA332A84AEA12 -E6CD82B94AE10A778CD3A216ABC08495EF319F06AD6FF8ADD237D911F846A514FDBFAA8A1EC8E0AA -9F80F11F1CE615519A4B044F3D1CF1A17D7F3D2174222A5FFA8B39F20197FF6CAF250B6ADBDBF519 -1C525070C8D38220FB501C223F493D80F498621A02EBCCD6EFE914F16B2A435D60C0A1A453E288A5 -3D818FE1EDCA7D55A26A017F2EE47A816E90D6C3FCDF0035EEA307DFB06D2BCCE43458A67354A4ED -B6E5C57233DE4FBE41ED07EE5EC77A5DFADC4032138DA9E1B74428CAD02A913E40152F8063A774D4 -FDD4070E4B8A6C089F199AF7C529C277E902195DB760D81EC655DFFD1BB283F3C5AA8BB58F2476BC -797B2892E94414ABBE96D4DB93E280CF7DE23EB852E7CA954D6682A6F1A4BE0507884C2A05AC863D -2BA73F3B54668397B6C54DC2F4183130AB414875F3C3D8792BF7E5FC4D228DF87748BF0B14178DB7 -E3FFB7891D700A1E9520D778B095DA80E4801F53442D5C073EDEB706A5DB8466FFE7E701ABA9C364 -A37169F585C883A83713A61C9C3BD9336A667EA4E3DB5F4DF6BC6A552BE8D3EF093639EC67E5FF71 -8959F9902477F5AA894ED2D1CD312ED82EE417D95C49C96671B23FB0E1738E892ADFFE62EC1C3D4C -BEB6CD089C98DE8D247DF7ED17DFA2959D3662F105E8386D75AD308480536959F8E6CF8F2C6937B0 -9F2E8137C811327D6B165ABE46C51834A955FE8306D10033F8C2A34667F13A8BA831CCF52C7A21C1 -3DB92F3E77B55CE291F6190BB1D194A33FD73151C3F61ABD2D8A0C9BDE90E796BD996D2D0094DB2B -E98657E751BDEEFE8A43EE4501B98F0CC6D80805189438872A60047A8CAA9039893530A3E5F6BD75 -BB466B25165737C939AFF3EA59BFF4A7DB09C2A5B36B8A1F0C6C5E5870C7C9412589877EF44F8428 -4B8A53B5B74315CE72D2EAFC631BC4CC2E5B71DC958B5A6350CB5F615C3A4502E973622E3E18193B -69572DEF1D02303A375ED60ABA1BC8A179FAA0F221A49078FE15AE13383585FB45FF4D5F3BB3D0F6 -D8BF62E9BD6BAB3C9A7D38C8A5AB0BE57ACDADCBD02B1DC7952D73AEF702D406F62719922BEA96B8 -FDC9B879708E794891C7A0A42F2CCD6812C3F4DB030B5178E3A627C3E77621D312CE4EBE815CD387 -7208FAD92761A5396B67E835222609F823728B1C987857CFEAAE21F2AD5EA9D841212993508091A4 -A2C268BF1D8DA1C650F6AB93995E7C13A3F84DB55748C626FD09C0DA1E3325CCB0BF091E996245BF -51EB486680162BAE63B6513C74CE83B92359938439921950D713C69324A87BCE67B45A030C9CF10A -DFA0A82781D49FF224AC57A23C6CB321F95915C5E14E41FA852F66E1E2044A9E7B1DC3BE9E818515 -D28B2C4D2F2210098C39557067062BA4239F2AAE28816D999955910298A450741947A9A1AABCBD8A -FF3530626089978C87DFC73618C044731B6DB8007739A9699ABC354A6F985E03C11D750B8B9E9AE0 -5436205FAAD1B895B159E2C90562B82A62EA1A7FFB501767DCE2B11C51D55A17529EF5ADF0A0EE9A -96D0E7E89F68E50EED813836531B4B46E9071E84AA413F4135CC882CE832BF78ECFA7CAB0C9F64EB -92C86DFCD1152BB7D4AB33831AA0C139B555967F6346068D5C3351A7A4368EEBD2933E6B9F789DAF -37EF536FCF965C397AF1B7F98AF864B301F3F440B7ACF704B59540453678FD6C1504519481893812 -3E2F47B265EC4F5CF2172D394543D84CD4281165CBEB11349B315A85DEB2D1699507B0C8C110C726 -62EA2959C4962FF093AA5EE6F21F89B3CCB0149CEFEF1855B9A48D28BB363416C015A1F4EA1975C3 -D8807F616C5817C8162536176F464A198EBEE6C97029F15F414275A39B8219128B8C8542E9483550 -7FC2D3908BB0EC375771280B9EBE87E827811418EF93E52EF70546891BFC0FB34969FD7DEA4CE752 -4D9EEFF2B46BED908C0FB2E02EFC1D1624642EAEA1CAC1EB4841E020532E88E59AC890E6C3F44734 -B99722E9816402D1D0FDF8045C5481EC055100836EBFB48E9FBC392143032C909853C9BA38A19363 -141BED09DAF02FDF4E7CC9808321CD0708A1B45270BFFCC3A0D7C27F7E781713D5DECE82C72ED303 -86B02D14575A1A6447547ECC7FAAC1BDFF332C92984758E242256C054656CDD2C45D46E67AEC6F83 -9F95D74E222A6EAE12EFAAB723A7C816D4E42D4ED2725A794743F67597F3DB8CCDDE45BAABC25726 -B851E02E56341EBE69E4D91F2A233583EC816F18A1DECBDA4AB69320F55E730617360FCFB8AC2D2B -737675B406297F7F8C4BC370CB084C22BFEC5FEF02E9AB290282F7B153F0A4B1AE569F1E52371A43 -46A748DDE09336CAD1F5337FC3D7CF0677091E59480AB15021E023E356B0E1BAC6C6471AD53625C7 -0206C338536F4D0D40733AB217E2297F86B593717C61458B6C93A16027CC886A8CFDC01EF19C34C9 -A608B95A84B6A2E31454BC03C10FA55CDCB7B1EB7DC16AC1E93981A46DECD7E7F00638DCAC568744 -69A2D9B45CBC81398727E4ED3DB5DB31965F358D8179CBF934EE2C4D652C9CC211807F070C80E3A8 -222B4C31FFEC8DFB9EE07A94C973462254BC1B1581903EE6F9AD91524A787129A63FCE048B45BBE6 -855826750C586B6B23B805FEC3E7AAAC079576949A06F422FC2C826BDB78AE96135E9E2C20C2B2EF -F6171D610B2EB8635ACAB7C5C5ED9C9FFC26CD54D2FD4CB9E4294E178CECA1E16CC8E3FC06518BD1 -6F4D63AE2B435753538834CDD9D8AE7DE624006CE688938031336351A6578C304C2E5480A3FCB43A -8BEE4953DABC30558B7790C6E7A6F0F9FFA557C50417407AC6A0DDA1E736F7070BC89455FC293453 -3DB004AA9070734C8C2608A07330E421A0220DAB99F8A77489132F6413ADB9EA637F3B75948050E6 -67276A55BEB09D4153DC126BBDBE0DB9298AC799A943D72AFB769BFA1488D311BEB86A907EC9385A -AE4F77835DFFE4389E3D9ADED1B08BBC2B1ED6084B3D1074A326CCBF38E06BD026919107BD03BD9C -30470DB779508DFE0DC82DFFD2DED749E872EB7EB9DDF509D5319865070DD76846C34E4E43691AF4 -29AA40DB4BF2CDD50B275589987D8081F7C5A0461AA5D1455A660178A94A0BA0DCB69C3CEBF5EE04 -26D6534F6F919D9795AD6A0E1A1F452AF3B4CB2EA54D6011FA809132421D111EFC51174E223AB6A1 -3596411A9723079231B050CEDAE7659CF168C39AEA9C6902C2CD37D25492CEE00096EDD63DC7643B -667FDFDE5B595DC54F0A72C2650E1E46990584C78A5CEF9BFC3C5F88CFB0C49CD6CADD9DBA675177 -D601927D75C6902B55AAED0E9E3CB52A577C887D581B3CE6201A1C77C9546CEE5A13B92963337F17 -070E2BF9F5C5E86B84225863874618AA50F4DE855DE567BF2AB7163944ED43DBD7F4BBC0E1623180 -7C43DCB47B2EB694E6FEDCFBE26194D2D9943A1BFE32AA1E5305F5E341EA021F91532162978DD1B8 -C5295A5E7551E2DEE46DC2347C6B32197AF430AF3BB676A53BCA9BD1EA88678377DC0A9A86E2AB6D -E29E3E261BFD5573C66FB5687BA9C0544D894A759866B066E1DB5C66E60AE071CC3A1C4AE40197CD -E4EC723F7B80137619DEDC99AF57A5497D6E03C1C9E672E74F48F6C213A3CFACF2699CAE72345A51 -C71C1D69348DE5BC5F443EC0EADE1E76A8A33066922CF3869E3C1D26A3B34E540DC08EA4DA2DDE3E -EB17C16790DA4EF1A3A76D71D34B788A87838BF2A5A3DB8176F9C097D2320050A79EA6C4A94926DA -11ABCDCD26DBA09FD33F30AEED977E8B5AD928F3967F607628859429DCB4ECEC7DA3411BE35A0385 -1017B535985632639D378CDCD13B00FE537A49FD9EB6DF1E3AAF5C41EBE35721FA6833C2FE08AA3C -FFC3477E7FCEBF9EF9F4DAE62FF78F319481C3F1E72999C8A493EC6EE295316B58A5CD62FFAB62C8 -96E521B678342F04BCE1613CF7F6778CBF5227BA20504500D743270771953ACBD5C6586432F3FA6C -0987BAD33B88BC6C15D29C4B3CC54A9DD72A2357AA5BAEB2CB057CDCE72DC80CC98C62B16AC50B4C -6A7641379B766CDDF990DBB2FC7F9CDBBA755B6E3DEA438FD6699C30A99A8B3178E6D613AA938120 -835E517431D28114BCA1AB745C11FE6E52ADB82B9D3D53A33BCC49740C93017D9531ECF43831359C -5C93CB0E926DB440B139E3125CC2E069B1CF6D96EF68407F32DB517242C3AE0BC6723E560B0F45FC -7F87A5E44E1751C8B7F9F669C24AD5CF16F84FB03BA121B86B0694234D8F2C9C947269AF96FCA08A -78F736E4E04ACEA44C5BAAFDE360FCD8BA6A59724CA86160A5527FD564468123D302DB45173C1B21 -6B01DC5B6D3415B13FBDBBD3121A5493374B3357EFB131CABFE5087AA1D2C7472B0377066B3632C8 -2073C6A846285CC953A8F28E131CF587B35217EE498D9A1DB57B063CE068DAF55D8CC1771C0C3099 -9CA4FDC5D67BE4E7E69418F6334BC6149000821B89A7437CCDF9A6A0ED702D5968F1E04F7E4FE9FE -C9D1E994885CB624035BBC5426CB8EDF0456828F8EEE75BE491B45FAC192A405EBA25CAA4F4C66C0 -DC234D7B417628DA5276C08260BE512B2432256C401A66E3B583E69D23E9FD278CD5F2178544D054 -16B9B4F61A88A4728AF2CEED07C08E207F31D644E8E3BA1E4E2F9D8E30936BCB9C6AEB54E37DB46B -D64F2ECC1021336D0564DF0F18E5A6B6BA470233D8D41FDD9D1079706EA685B6D8A740570BFB78E3 -984BB155C3155C69BCCCB41CB51975EEA1C1B4294CB546CFB03DC31BF86EC3BCB1977E8F94A771CA -B09DE12A82F1D6C791FA7800E5A21DF81C9C8FCDA78622ABE75B54AEEA747AA4F26D563200992E33 -7231A430137C720A17D44F3AD6CFFE63B2DE12D3184BD3E151F955786B8DDCCCB290C42718F3A219 -1759DF76371C2FC177544A6C425CAB14AAAB31628A9CF9D71B5257AFF0D59843989CF0D747375A26 -DC9ED29B66AC2147DA0168306C48C2484C70CA92F33C0C138F92F276F5EAF5EA3082A8A1CB12DB66 -1633C2F71E3B69918F509060AC949FCD52C36498A2ABB77D139DF1EB33E3B846A7C1BBDCEF5DEECA -4EF0AD250CEA9C2751E13EF7681E8FAE0491CFA6C144DBAC1FC39D39E76EB12D3EE9CA159AA77D27 -94F0C433345B135BA632F544082BBDC9471E9FA3AED3A7D465AB7158E8AC97F68B1FBC8D368E2350 -45C18EFCCADEE98778D894D96301F903283C5AE355A863BB0DC5809158F7E108662D04A5C1234915 -E7BD5B4C30F9EFA55E702E54F87FCA06FB321507BC57A1E55CC117E21AA4E3A4DFB77C1A949EFE36 -6D93F2BD827EF8CC16D387CA82AC039F77FE995BE6D9AEFC87F8D809E90C1017803BCFA1C737DAD5 -F1A631EBE6894AD20C70791665E7BC71F21C2C3F4462F60FDE75C8A377CF49BE99314663C6ECB538 -B1BF021B2F2174D2B22CF6FAD115EB0ECE8A2E64097A5FB0A2AF666E1EE13276AEC59FD0C9D4BFF2 -3F71E835984E5EEEE36490C54E077AD7355DBC98BDD37DF29B3DDF8C55480B7349C4D17322418705 -796A8C521FFF920DD11773FC44FC631C7D6E9B420D7965D7F62EC7385F2BE30A51E2D796483134F8 -40AEC71FA19ED1272C27F98F2CDC9C7E54DAB585AC1703ED08F5F9E825564902EFD08EDF99DFD494 -44C21FA6BE16CB8A1B6D0C8A5ABF80A50BB8D055483176FD0AA07EBAEAD88FD694F96FEBD60751E5 -C4D8F9BC747D4F4030BCDF9B0370B7A5E0A6923FF60DEA16EF47F886F10CCEE6956ECF41A21F7C59 -6F3BC78299A9657266807E01762B2B2878E551914CA312C2A68D34CD91E4F5115EA1FBE801346E14 -AE529049089B6B0273E258785773A9CE8E4B6C4211CB7C2767319576758F811CBAF3A3FFB41B3130 -6C49F3798B698A47BFA2E3CA0251C4D90C0B02ACA28C611744526906791D9E157E54CE4E1BCF5B68 -6990BA8AB7897D624EF00EAB92CBAC255AE9177DA9F0D86447D35B452CD2F337147B5D3EBBF2B952 -35778A72914EB3707EA78294B3A3BC4ACB19FE87C72AA1D982E4B822F07B115CADF4D3E7EE3D1BA7 -08653BEC6F0A352A0C33252ED0630E7274961896D461EE8BF523D5911BAC1C8AC763E5FB11FDD217 -4E1F129675969C195476C7A5E18A81BF9A11ED9F2336D5301E3BD32174ED5C933E8C85D6272EA218 -52A6F7E2AAB174E0965F73E0EF89E906BAFB181DBCF8B1F5AA0C12D12C6272753C016AFEC2EC9F95 -41B8757874D6F2E061ABBE8B29281677246305B3C41E90418426C575BAA216CEE3C5EC29B2FDEE1C -77C14FDF940792F48A56AE80AA33E370B037CB28A7373F882022AF378F26B6006A049FD3B35074A8 -65C97D153352ACC156992C00DE26AD21C982C71F0EDCFEB61593BB40FA5F2CEBF23C4FF34A4F4BDB -73CA273C269242D1C6117262B7C47771F2619FE5710855134A80FA8F92BB2425CF88940CA3450F81 -234ABF2B11775929B12CFF86442B2AA0F4243D324A5983E5D1829775B3C7A111D5622D1C4E2B2A2F -982FC8A95F789881416DCB34950A393F4F1720D2212F3D343A17683060182355DE9E4718506D76C9 -184F8DAC55788D7E603CFAF4907DDE965A49C323DFF425FE88C09AA4A4D16283F9B14AB9EF1BB885 -A954034710B4A9DA4C88A8A0932B18D139A687303EE562EC9F656F12F3E8F27DAA9C75DB0FA946FD -0E1A982BB58E040BFC0A49A4AD8CD668493FCB573C849EC5474049A693CBEBD4D79AC7515047CC34 -7A9A7570C90861F3ECFB57B9F53AB9C0D6B05C8C570A8F3C04D58555A45524C98FF091B8F8A422F2 -E0E9E5A7B7FF69F1CEFC13E42F1CA276BCD584516D266BA6838D5E9CA9E9854F50C7D92CAED61AAC -AF758A7C7BE59C3BAA82BF32B691ACA3E8EB171E08AD22C39FBE586A54E6E4DE2CD86B31138546BB -8DA5834B2C6E4838547A1B67E651964E43988C8036931088904BBB589CA901E7EBBC094C0DA81E09 -1915D9E46828AD8596FD0FCA39FF12A6C27A359337F973809E81B2E9E3D43B3146F2516667E607FF -EB9AC80FC95A7B7D4DED551FEE0F3561C70DB2D69ABA96673E39E3397F1C3F8FE5F48BAB8AD6E0ED -8901F90F6CFF24E80CB5DCAC498506C4D01033E497C1241E413B022227A3264DA68BC3F91B35781F -A2D018475C199F43CBA7D3A0D5697B45321BAD2C394B207136E1E16B41794975E8903EF2B2E1C33F -87CF72C325C11EC0B92FD3890ACDF60B521DA32596763BDFCDCA837ADC6F26F129B23CA32F9CD39B -33E64576970DF3C05B8DCA4BFE2F17E6C5678B84D69494F1DBA9FE0446AE6AFEAA1FF245C07916C7 -B7569E6267C42B459435A1D116CEC665B311E404171774C0ACC8DDE96B0D9167C8CC7D99C4240559 -2D745C4428755500EB4719340D2FC6BC215B67823F69FA949C08B5EC985D7AA87C9AC1F9BCC8994C -6CBCE6027B7D1E0C22A83A5DE61DBA05D4AF6884C95F46BA7F253E0B2337E312916E163CAF9DB2EC -56C5425990FE73EE53E42B3BCCA1CF642F02B0C5ABD529B568E9ADFF865B9DC190240AD78AD226ED -884BED3C285B4CB0E3929E805C67F1318D186504D92085764B70DE6AB5AB6990F181BDA50FC31262 -348D980EC76608CF08176C2502E065AC2D8EA5CF9E2D44E2B70A7DDC7B922047C471DF8A0B2087D1 -106B5BD8A830EC0E53223CE3C96EF56E5541191167860EEA58D696EC357EC55799438C90156BBF2B -13A0D5C9EE93227746654ED73EA5B9CAB61DAC5BC690F89C87FECAF9AD03BD39E438F43B81D39E07 -E0422F94E8B096AB38C88BC2E1A043811D8141C1A35DD3A6DBE41620E83C8ED3A379CD80D4F9BC30 -41BB44B933DACA7C5D4427AE94A176829F24B5968B713431CB8BD9F53080832C6B784CEA9B515687 -F121983EB9D9C9CE8BD4FA3BEC48AFE64E643B7BD86D8383D07521FE5D091392BE124CCC91113604 -3824B686988E7C83AEBF406D2DA88FD952D0FA9327F4AD04C55FEDBFBFA76ECAE8A176C516479AE1 -467125B7EB3C9E7C5B103BC0C470946346DF271F8EE19DF7E3FF7478C35EE059297F4BF21A5C7B95 -993BE6202E897776952A7ED0613A5CACAFA731FFC633CAB62963150E86EDAC796026CE02EB235B9F -7A54E0B0C5281567138A612BAFE409A818C216DA8EAC5EDF9D1E3A1E3514AE50735A111B4D2AA083 -4EC6C11E290D58FF340F82F0E079F1C7B3566F2336EAA45BF72BCF88569988DB5F65D4C1E59B50F3 -41E45A899656A0B522847ED567B49CD5284FE50E5F8652CDAC1C076804F2B2185F6A51ED19DD4941 -2E65A0D2DBC844B75E2DF71B009776D9F97A4C6F786EFFEB87A307FB6B912BB659DC2BCC6D509A9F -BDE87DE8D716040A8551B6CCFB7743978AD992D14D2B85CA052E87326138DB196C24593F8F7ECD6F -486F85D1666B9DE2ACA6C7900044EE369D223524664A2790B773F9EA26E0A4CDFD709942A44298B8 -249506EB9B77BC887DC0EF947DDDC7CB3CFC6B48F060DBF032A11884E6C226D9D447A5A458CBA325 -D57E144C6DC295262763E7BB8FF6A0CA473EB7661C12E0E8E23EA37E8AB3387B9E54686F3E57765D -4067E521BC1AFAE52394227793C737C19208803F2F2DA920B553E2AAF94EB992AB17E31B58C15CC4 -AA8A1B444DF5B3E7CD937CF03E1F7FAC63342731B4589F16939D16E8E497A74CDE5686F529E9495E -1603D74875288CF53271DB9313A4511B104F80B179FCF213558970A002E945281BF3AE51E668DD6D -13D9E85152747F562CA0B75DDEC8FE9FE31F8D05B0F59E802888A7A4F19B29954A31108D2F041367 -DEBD6AA1CAD856BDD1427E9EFE89956FE28D500CDC6A0CB80A76902A08D0BC6705583243F1DD8020 -749B257EDF4803BCAA653F7FD6D8B91690995BA5EA3EE92FCD367C11601C6B8ADCEDCE67B16C596C -5D200693AC5FA15D4CC6CE9DF7A71C8A925E99F5085313D60FAD25C1BBAAD28D4AC2B69062D68F39 -0530A976319A3904CEE44DC9451E441AAB4780425440F8C499B81460B5D3E268974145117ED843B1 -71BB14AA84C3A084A7D8E07B9979260675D5CE6534DC176DDB60DDE90F6A3674F67462EF78195F8D -FF74FB5882B079DEE31FE92816F16CE1A70D07752EA25FAF5000ADF79BBE7D17EB1BD2F9BF6CDBB6 -F078CAF97986442680A8FC4121866F9CE86C385DE34E30D8B9768A0136D9EEF79A4B38EE99CBB9A4 -D32316564C9D56996E2595753EA71BEF684834FD030D38BB100E2332B026B046316A53270A96DAB2 -182E994E91262FB03D1AFFBAD623F1689228409884F91DBA153030870A7BEB2C7EE2DEC51875B137 -33B7929041F8D23A94904BD54DD4BC9B432DD0C78DD81639F46D686FFAD39AAFBD1B6C1A37E248CE -48F23E12464D5379B4AED0D50B5A41577E6ECB75270E9AD3EA7D0FC09DAB271FB18B51DCFC0069F1 -5D72546E6C51049F3425AD005F88FD7F02042DABE9F097F9D6A076B30D8CD777B1EC12BD163FDABA -5972EAA61E3C87E9AC007A052B1A3FFE14D7D43C7A0ADC89B1DD4CB4F9C762A84A6C0701494B2D8C -4E4E1A9245738BE4111805C2F153A20ED9FECF2DCF4C8F7C3BAF84D60454A7403D4F5F81C6404173 -A7BA81BB0CEAECFD493D877465DC5735D43E3102CEC57B8A589182FC65A4704661A9E351FCCBC731 -5A87E62F65D24EEB9CEE979C6E10DBCF5C162ADB926EC8CC9BFFE381F6B8A3AC0A19D1631BEA2938 -731AFC99E8EAA39BC75DDB3A39D01AD8F0BC1838F4D674B9BEE9F6F7BE4D9C8BD97E8D171EFF330C -15B76614A1FFD25B3BE19E4A201BCC850F926ED51616318C965AD2F0E56F9433B1247C6D5B72EDF3 -D408A3E0674A509BF30BE813A5E669D72B978794683CA8B85E3469EACB167C30F7666DB5E081B81E -E99ECFBC1704B9646B1A29E4A4CE5654CA8409ADD60145DFC54225BDB8485E39CC98CBC3F38FD0A7 -97E5DFC2099452A2418C6636BD2D5F6B24345ACFA65F4E7DBD2D0AA0C1776A4920B4466C509BB5BC -7D6627946C4DCB38A27098B7B5BEEDC2B3BA18F927077F71E38644597719652037621BB350BB5369 -DCCC073954026E6438FD8393DDB3630C4473F06D9FB9E422E435566C396B12FDCD5605DFEA232171 -CD8EF298786806E9159B84599C26D4C7D8C3BB064665CDD072E2083190372AA808B2268B3FEC8878 -B6420CA829BCF995DC20E067EE6B8E44D2869D51BA3AEDD1763F7F8D2CFB8EC41E6E9E0129DE5343 -1457960CC51D546B10B8B6CE08A1C2B79FBA448DF9783D815608A16C55E589DCD8EF6B04C66232F4 -7A473973A35618000D79B8173258B7365C9691DDFE47B16EEB08B28F881828B946FB5D6FE10ECC6A -FC4EA1F762E90B3320403382E42AF4885B183AA48DB5E4DFC9A54E0B4FFBF7C26EB17A4F13B4BB93 -12234434FFF05549E7587BA0373ACB3E31418BFAF400D8938FC6466B94273D1735306AB912AAB13E -31DA3541C1733E2A7E4DA5B82767D37F3084AA7A7C488CDCA7ABEF77D19E42B4448ABBD346E9BC28 -8ABC4540C0A1CFD0BF46C5BC7454B25E27E9906A3E6CBF678BFECAD1B19B4E42398A210CD567EC35 -FB115D5C0DF0EEECE593982056B0E1D14C292F70B3E049984F8881C8B477956AD3140B4AA22256DA -AC0D11C4126808B5B9F922BCC5F24A77FF352E2C621A3941AC07A20E550A69C49B1B87D116EE6F2F -970918F0F1A501166AC4423FC212E4EC8039AC7F9C212D864F418CBB92948FBD588228108FAC1AD1 -837070512305C110F0FC3FAFE6E1529C2BD0DDE868A9EBE5137DFDFC5C12A3D08014BF0EE27B1080 -02AAD6B607F5C5C0F1B1EED3C552919C9A2E97204A8127F97B1066607ECFB47BA95EF2B51F007C29 -3B2F6A63041A9C1120D9CFCD5357222E5B02DFC73CF94CF9B5CB00EAF073E9BF253E30E09B50341E -57BF245A746EA31BFFD0B00201C34CF0881BBD1006BC9BA7D420A48E53686B598BEDB3449924EBA5 -8D5DB1B1B01AE2BA281D5758C99EFE38ADCE18F7B182FBD0D0622A6EA497A4E7C00C7D17299A2765 -EFD8DE376C214D01A21819451FC04A0277EC84A151FF93903D61C78AB7886911E36E12526ED855AB -43F6289C1890222602B8EFBF15782B374AC1E580B6E963403D6D15A051DB8558F2E61C0B9476C6DE -5D4861585CF515CE951732F20D32969F39192FBF1690D242AC04D47E0C53D467D0FE4656B9526C0F -7F852348B0437737CB0F29ECF9B54A5E17185236DD0C16349C3496F3ABA569EA20E343F6D771210C -39DC932DC65ECEF94575C6E76902CDF6C8C8361F9C757A2577DA535187FD526699917CFE0AD438C2 -A758727B306BC7979547E68B94E87ED820614BDBC649D469EF6B4E4E3DD2EAEB5F80B22FE576CED2 -56495467C76A75F589460061E03F3A1B065121A5ABE3E2C51148B3DDC9F624C97889AAF7FB84B158 -C015EDA5670746C6359D27B0C2BD65144F2B88A64331816DA904572BE398E015A9924218B3EEF951 -23AABFC3AC8217B7B4F691219A1C9DD0A3EDD5C04E63ACBDE71B423522532561F4B71B7028415C34 -37E346BE728A415596AB749015C1D59BD8328E39A850CB98085B34B57FB52DD1D154F98FEC49B3AE -BFCB1672762E4D2A1ECF02787F59DF1EBF2625C3631BED849B298C6D226BE4E6EA2AB66A287D2BA9 -2A6C9C612A5F849B3CB3C25F17164BE286F6E4F5E7E4C9EB17BC68AA5EF0190B64696A570442E1D9 -BDD1A30E7692524E30E4B4C3DF84481DCEC6E10E7308E65DE9D90099F3FABB3F4F766BB86CC98594 -6D2003E21287761A7386CD8461615B570BDA015F5EFA23D18E83C325EE444EC166A1A32D9818C2A6 -5A092D44156C06D3FD079B92450B8A491CBB3529DDAC7D95AFE8EAF33777FBB265FEB8A4B9AFF2CE -CEFFF49AFBDCF6C4197497D3B448866D70EF28D8E4B17E7CE95F43F64BB48C4A73EB84B26650F62D -3E5199D64DB0B5B87702650ED0B850FD5D16C848D096E4C7E61BC63B2A3ECFC099CD713E12C91A65 -77A88D6F55D348617C7A49890A86EA8FE2045704B5ED529DB128C9B19EE129E5FE6498CC97087F6B -DE96007C9D01CE9CAF75646E5A5B32BFEAD9362A52223D746943A2D09C536CFAF78E601BC2D2F0B7 -63AD722E3A7AE7069D65F9F2BDED7278511D0120F5EA071D41A69F8C2A2D720D3B24B4BE61C83FFB -EFFAE21B0560A6FD1A44E53E42E0D10E0E93F421A8A7E167BB65F0D7F1DDE2809FA3CDFD931CCC69 -B119C83238C1C00EC100D8E7AB1C7FB02EDE97073C8A5860371A8132BE391EB1C397B61F93876FEB -438C288EF2E38DDCD182A5CFBBA994A94A1BF818312CD8234215FCCD7C240A15AC01A885E1179E5D -7D6305DC2F534BAA141F25EA6A5F356486E5FA0AE3C6980A9F5E8E99E7AE5B95AC42977510970245 -4FC951E4319AE4B1DDC9B07D0998372C0A95ABA6985A4DBE6DC633154FAA30ACE689D36A7F17011B -F29CEDC58A6692A8B3B0A5742E6CEC2F69B255BCEDA762DEE72F125EBA98891CFF4D88AAC14188A1 -8D81424979C9079E44890D94EE094D4CADDC1C7AC5F6791FAB8849CC0240A579ABD800EFE3AA4EE2 -F78119A3C2806C05C2B1F17940BE73984982D1C0065433A9BD658EA31AC819DA9A11B87475BB565C -C294B6F302FE3F7752ED9B963C5279B5F1196762D0E12E6DA46FF9A0CADE3876D7DF695D8965CB4B -47B351FA3F759811269376B2C3134403633FDE27C9B024F6BA81F3E1699CF64A426618428BA6C326 -6BF016C5DAA5FA4CC82FB6DC23FF2D742160518CD3A65ADB38E53F1067076CA1625466E0C64670A1 -564A54CE14DC5C57D24A12283FBCBFFD0FD594AC2A56EE58B552F7586825E4FB1EC23F8221711692 -C8C56F42272B87EBFF3865191F1C11943BB76D8C0CFC53ED452AE49404D2C8193ECC2A7BB8CFBF24 -870ABA38D2CCF7869E9363DC0AD94FACAED5922B324DC3B6FE83E7B34FE29ABC1EAD62B49FFBCB81 -1ADBB5148D5AC2743E3A058386036FADAB6FF071BC1C3B8023F908B6FF48DB0AB1C9C67487C35211 -D40995E1892C8B66AD6C9C6203F6F8B513B11117B10DA8725AB45B4437B5A88A96AF3178D856D601 -196E8162868A83DA64E408FDDEBD14D6591881EA652032CF2F88B3FD6C0479C8F89AC68D14D01AF0 -CEAFD95AD146E68FAE01A07F39E7A0C5E4FFA6D6A91D710827CA5ACFE7D1F946A8D7B67621D60F53 -41F32C12A6EFB03AE5AC5373A382C044A276F6B41C173D0AAAAE0C1DE4C3CC71EC2637225CCBFBD4 -5EAB92BF39357C57195B410F74283585B12B926438AC72AFADAAD2D0FA2CCA728C8E86BD3FE75D47 -B8BEB96AB13B5480F7A3D5741EB51E3E40C21FF2ED7D9221D9877C7D1A8CECF394E4023FCF8C4EFD -B38B839499FF5CD96A46AB4FDB46F35D3B48B91757C0159328120E93CF1F2739E936E28908FB1947 -1D3AD7F6F1AD2BD1EC364986A411CC1B547D0CA104FBC10B1CA7B638A60E75485574034561DB345D -DA68415146AAC632DFA34769B6ED7D7D4694E92CBFF4EFB16B55495908102E85E827FC623CF1BBE6 -A13CBF64E878E1A2A159948B5529B75E071744A5F0E50DF18C110B0AF117CE7F33F8C959D4C98CED -5A9D492AE6F56DA57B0F17495DACB130660BCEFB064FD8309D965ABE8D2BE98F6898C1B7A39CBBE3 -E75DA0FFEF6CC3945CE76DA3BE915546FE8A5310130AE0ACAA9AB73C7E041C00533B4BC7724657AA -649B9388B791AAC5EABFCDDDEA2CC67A0FD0AE9BE37DF9AD40636538EE55A83F60E9E026C64FBD8B -220CEB46E67410144A520FCEACA252E8165448F84D8EA083C793AD09B90B3EE83B73FEFC3365C729 -E3C738894B8C01C2F8AEE0CC8B114E1175EFB44CC4C6CEF5C8754B1CC7CEC200AD8BF1189D741CB7 -5BCA4E88BE959E32216AD33F674F49AB20A354CF3969F1611A95D3934E148831AE7C81A7EBE3C524 -4F743E66A82E10D16CC09F8194EA7A596BC5981D833318AB4F7DBF2ABCE543E410B649D18D146F01 -486159683DF61A3F880F9B21EBFAB77E908C6CFC79F89BA5F51114F0BF7C3CCEC7BF0F3B057C3195 -CFBA6908E31E0DF10DF69163C9DA7BABC00E9A580FA7FAC202910615BD479BBF76FB8068630D1EC2 -1CD2926D351E869E16C2CF1E023CF04D4FC61607DAEFEEEDFF5593E6023492F00029E2AE4B4A2C14 -50954EFA2792F32B4934A768F892171245A1E2F034E2B9F39833F1B331A19A386BAACFEC8C929BA6 -B67CD8922BBC9DC005EC3976575D5B0508D0717C6BF11123EA36D8FD37FA77A6F1F5AA84D4AD8D25 -B2C11D1877A6E2F9B74F3B5829FAEFD4F7209CE9785AA6FDE68672554A6F29D8BF03FE108ED90A7F -58690FAC399A8AD3A26899072B832874DDB629581A51B3325CD9EDFD49E890EA8959DB937DAB83C7 -77F2A426B967AF5888C33A3635B78D647AD6BA441E222C958EA58D61945F781D7EF409771B89B202 -42AD7D07C2EF592CBF413C5FC89EC30FC9EBEE4BC63709AE33B65EE3091CECBE610B847E12C556A2 -79C8B114C3E460822D3330ADFD72BD69F54C08A81848C2002A08326CF3B09B1305490D35AEE59179 -08E1604ECE75BBE811A715AE8AF7EA9C371B322D0428EDF4C893FDEA607E70E1B6F6614947326101 -EAEF18E29BE0557D2A92CF1FC1505E8B434BC368CE07CCAABC0774F8A63E1073FBBCEB3F4052462A -A9008A1E53F188C9EAE339FABA74AFD6D60F47282CD9FF721F64BD51787F3C13B5A6C5A5F7861171 -0111F5E0471E206D72520F1DFA465F4A23C71DCF99A04CEEF11B0E3BDFC35B7461A60753D3AC26DC -50A5956C9195A4F5226388E0953DDD03AF128A98F03BDFA0602CBBAA20AB9ECCDF7255962A332E16 -D4380762E498FDA4885C64FF5F9B480DA487C58E78943DF62616E6E2C69EEC8836DFCFA9EBF58938 -A878F3E792E8BD8C5D6DF557A5D82018DBAE1CA9C64BA5AF8E21BE1B6680FC5DB22422220B776E9B -A0BF1ED2B7212F8BF111EC8C8C77B223C05EB5E5F1CFABD2D037F4BA0F9503E2CD83F4519D180476 -63F09E308883F5DA5228F83045FF41214D2273B2FE0A9017D5E0557BC2A198C35D1E7E81F7965444 -5760CBA1D3F05EA4B90658E53FDF0823BDB1501ED51DA75C47395073D8980D1E3504E3F67DB3259E -4EE73A87CFD96F84E221796573958D364A51E635FC55478C9CBF9AEA16B7D8C25F2115CFE4B7F598 -54E24968833BA0D64D1D332A666DFA2A3FD71B05A26BAB7DA382907B13DE0B80871DF184D3622B62 -3D7E09BC32A4F6EA2E6DA450A906EAD36D53FDEC7F83E101FEF32F4FAEC581B000686D86A0D3861C -1E67F18A4C4647F51F978484D9E3100B37BE9D20AE84C085461C1FBF929C669E936659050C2627AC -1B019837BAA75757F5B0A82E8AE9CF2111931A38BFC94744E2FDE3F8710342AC615286E4ACE7F269 -743AA05463AF537D9416230ECCA859D8C99B7C6E70BE7FE11DB698589BE9E11900C8E9582A4EF5EA -94B5F62820C90DBC022A620EC536E06CB8BE7526A789996D0E741AAD980880A33800A6FE92286CCD -02C9CB407EB31FB95D9C9F4AFF38B37087AC582C1F7B64A7C3D2202BDD62E9AEB31BCA85C4CF323F -03DA9D318B91F78FDC0D266630F7444ED068B55C05461C97552366A82C2E743CEC353D51028FDCF5 -403B3B74D379B82EB69C4380ED40239E15A86B2E5C860891E26781CC111FB5705E3B7C7AF1946006 -54B5FA1B5FC54FD0BA43666E7BABD2C91C859F393ED49F7123EDFB648A3D6152F2C17F7E438C0A63 -8968AC06B4FB3F77F64F358AE063820BD33F0213C85C40E4D97ED100EC2DA1C2E1EA258BF107AF67 -5A9D995F60BFA37222B9C2B325C0052BB8537D2B27DD43A129C7E8FF42757B3AC9B447703D382108 -DA520B8B3BB3E8C7295B776B44ED28F863B8E1F81B0BD1DAEE8A171525D09D2620C04DD3219D880C -2ECC79282DD7B1772A9CBBCA706909AE8BC7798E6EC7375189B6CFCE8A875849176E5913B85A18FB -197A33CA4B5B4058603CF1FA79A56856B43D538E9ECE117D99AFA73B57E307364F553644DE01EDB4 -6234EFAC13046B6E047ECC8F63942F20097AD7ACF0A45C0501A95263DE9439A880D6B5C5214D2918 -0A54D7FE9B2E627EF49E189B59FCC78745E878E45B46C0A648955D3EA8C935113D94F92EC963F66C -F3CF3A526BA71CDF3CD4CA69EFAB08B7389E3390716892A4872BD29DC1E0889A42D7FFB4190E9A8D -05D84EB9C5741BE6B02716BC75E0106F5F94BD3778BE985E03860D27E44088C3CB2A059DEBC420DC -E3A8F4087A9548485E616C409AC400DD1C411CE4B6A229D091B253EB68F06E43511EC5AA6ECA4D6E -4818D6AA2068DA1AEFCA377611BFA816B5215182432D5683294D67A7C1FD76C52233087CA44943EC -7280005E93145F5E7AE50100C18364E1B36741E9647C4DC1F68A58EC44095920FDCF05532F603717 -80F78420077EF5C24D63E26040CDDFF8DFD65D871DB943F50CDE84900C1372EF33FD8AB9889C82F9 -4F61A0E6842219A0F39EC7B232CBF802C4A744F33159432E827006C7CA77E480A48A9B0E6A876158 -8A3102E3F98A77BBD62A3A23150FD140D3941773BF7CBBA2338FF37B9EB640558A2313E8824E8E62 -0331568A9B76F4897198A709F9313F4AC40827D8C3A71F2ABFF02BFD57D30D0B14012FB5C39B85AF -540DDA0ADC27A85B31694E8D7B61F9D9B476571022D98F2D768246550A877293F3FF6ED918A498D6 -A600223E1A61890C49ACFB60265867CE9464F9C32C59E94F7641C3873FB4FA6EB237F8ED94579957 -270D6FD640BD9543E683F2372CCD7B60AAD269E03A72C5CDB732B128818D41A6DDD2BC139F7D3911 -F48E1B1D263DD4AE8E4CE1A686F3A00A2CBF48978631CD243566E22E68F8D7397134A3530EA3745E -4F1EACB4D6A5FD84C3011094F37573F7F9902305020C53926716D4780C6B0A257BF711AD94C83F1D -41A02C1C7DD203A3E6E4B14EDA2FDBB36B063A3E074495F626B0EEA146D22AC33457F44F41675967 -6D2A0566EC2B726D2F0540ABF225339F02F406D4E7A62E5233DDF20AE7C86CA0CDD561F33C422654 -BF2DC3685CA91BB9D4B09AC8B15A24A99FF56E2894F11F7BB4728FE8F0F5B799F74F475D2D01F61B -7E9E0E541F7FEB8A557486D7DF2CE50927515D833BCAA1CD9BF7A650BEE9E003A5951C98ED147C4C -52F64F692AB281984EE65A47E44A4A5FA93D6F18D276D3B01C5E5F6135AC6940524CD713DF4077FB -4943E8AC927A68489EA52ACF7A854393CD027EB52EA2DC6234EF034F3DC742D6DB5A67FC21D22B97 -146B9C268BA97C30161CE01EDC69A6A1F05EFB0E06F22644E1A368F0E2C0C6C1C832878E0614B74B -D645F5CB293CFDB7618B837FFF14A1210AA061C8C81867244305B80DAA73CB25A417228E9559E7BD -52C119B0CCDB7C4DCE7E1B9F7E8EBBCB575E5BD213BDD6DB88769DACB05E5870232F0EF82F448559 -187423409EEF756BA6247493BE24CB1879B5DD822E03D0ADEA1EDBDD83D3FC46759C679B921F0616 -F27212903F728AB44C1784E8A7DCED0DF5625A7D3F48A20FCA34008184CECD145CCD98E31B79E174 -CF107E8F35C40C19D86B40BAEE6164353408801EDF75A619FFC5B6FAF3F3A95F64795CC40C1F8963 -4FD8C13852D265FBCEF834C800AB46E3E8167476B23CDD8AFF6E2F997C99A86A9CB30EF8C853154D -0D89EEE9B9CDC1B4F27BDA32432A4173B55CA8D9FB50ACB2D886AD8E5862FFD5DFF224BA13C8B8A5 -4A7F1A9F987FBBDBC5A3C3D762A5BE309D5D926AE5093C40AA47B3B1BD828797CBB9BC9FEC9D19EE -A73D2A39764816113A8EDC6CFA6E605AD578FC8E30ABD600658A49ABCD5AC54655D29C50FDB72070 -169D1B389F114B7C71EF95A80D82AB537AC8C165D47371FC142A51625029A990A577EB1618480D72 -6DA93C98E5C5F24F622A850CDD94BADAEA91D4BC32CD50CE69E9F00E77DEA8EC1D37916398FB7092 -402605359DF08AFE7B99C76C2A7C70383F28A7C000C696F45291BB8F074791798197CAFF1544C76C -EEA8C9E6D76EDCBD92A86DF889481F3BBFF0865442264F0EA40D3CAA69AE467A08003F9C30FF7F2B -77E767580575398462D5B1171DD441D8986F33BC7BDA17D413EBB6B7A32642E33F20B284BF3EDED0 -02352FC66C6F7741A542155F4A159CD778BE56B9492CD95115C1A06189A216CFD2E6725965A13DE9 -73765A05114D9A5A4BE0615AF8BF6A5EAFF84468B849954D15BEAE1CDD57C435788B331905C01421 -B50F20B184506A0BEF746330BC98E9C89AAA8F9D102F158043BEB6A682059A1C8B8CF67B2F3D7AF4 -D8BBE086254CDE53765E3226BA2F95AE8063649F9F94BD9519411DAF8A0287307335668190638806 -E29484A4FFBC1E46B1800E03B162C23B1DC0B4C0DD3C7ABED2F00762972EF06EEB9BCDC7B3F39C70 -BE32789D366F073AC3280C273DFF2979507671B3E1E7685A9A4F0FD3867F96DD675BF05F25ED986A -79249B75F182FD73CDA2A6A66D693E4CC5AFE3402431B2C816DA1486C34BC9DCA4E2D51C868688A7 -787CD10ABB9ACA14B7181369DE89913CD8FAB58FC84519EA2AA14E54B7A8CE474F213E07CF2DE2E8 -88093DEEC937526816B71C96ED75FA9E2EDC0F9E6E84569C12BB8E39AAEDBF546630745553D6084F -F9524FEC6A7264F88CEB7EC3358E923B392474E3A48865564431662988FEA768CE555AB0DA48BD52 -6A84B0CB17B4584066C1640C1023D91F7869EF0C4D701BE121A6E3C832010427490758AED7A2B30D -6028F2215AA44E86D852FDC67DA5CCBA79EEA863BAC9EDC2535B66AB0E54EC4D4411390FDEB8D1FB -C1743F15C3B68DC92A8659E7A892D5E53872EA51EE8CA7EF51103E87C29A2714E907C79DB9CF3744 -1785D2F73A1EE58550111A4D9BCCBEBF2E39CD3B93DCA300FAC3ED1ADD8215301E5766C30C8CF296 -75746C5A77BF1FE3CD75D25CF193DE8D9AF02AF8F7A6E8F84B548058CDD3C6998ED13463FADE7391 -26D83D3CE2C7201F955382832E32C10DCBCCA35835985B9A93F8E3B0208BE6E92428787C47D3808A -0F77B8F1D76E6BF6A17FF81CDB065180E03809D03638307BD7BF5CEDBF64904E918FC805AC905379 -928B816480F6E3BDEE47042CBA98539DA0E113B1A5F23EAF1A3210BD18561985E6436EAB90395DA4 -77C7A6D7888D2377B3FC4169368357D880CE041E1F7C875E956600DB7D9B35D1EE66BE476E9DD806 -4CC02230276829C2C0A098F051502E828A0CC505AFD8C3DF293DA1508AC4D25866BEEE6BBD5A230E -9C2DCDD4F06883936381F476DDCD86CCFE15C2CE3C3243E148CBE603B8513A7CE7A6910A66A90B70 -89E5CCD4368BEFFF2BCF8E918BFE0A1B069AB2A914CA7BB91A0AC3B3C0B060FA1A0316F6135E890E -E549315897C8464496CC6DEA0F7E3AF43FFA4C3281156067582CA255B1D2E80F999A3AC0402BBD17 -01824C3BB524130F5B82A45275807BC2F3A0655EA208F968B297F98C369192C8ACA26BEBA7DC4506 -FBD1305E2EFA4DBE5375281A88EE2D6FC88FC0A755E72934B4B58F6DD3BDAF7171A4A3C776576735 -2492BFA9A7758504750AB7F38754683B70E9E293CB1CD7B23BA62BD7397ABB84D7EDB22EF6C3F58B -3EEAF656E361747ED04020163253D1CF3F905B5E85F83FFF30AB2778CAE43781667C0F65C8FD404D -6B9202A99EA76AF9AE1236631550B66B063847180B6DCA832EA8DC4A6EFDB674B5A26552A7C7D54C -2799C7D4E03C24F661A91103086DE3A90A774A6988347656344CFBA06065AB22476BB09FB68F9928 -C0045F2764AF643CFEF0516D87FDE6DBF93BAE2829B176CB507BB99835E01BAD5E55C2F8798C93FA -35EB3FEF02CFA31D3D21B030547F86D27B9448D68E2B155A65C742BD2999DAA0C3AED64447B9CC67 -F7AF33B63AFAF25F3CF7EF86657FE8F952288CA4B691D369E8F1935CDA44A180A6767560C2ED3F2F -CC38B6BD7991D4170C7C566D690A8A25BE03212A80871108D18CCEFF246623E653107631F29227D6 -4754B2208D19F84E547799E691CA473780DDD56AE620CD953D5133D135E3D51F237078FEEBB73714 -54EE633CFE238AEA63F9999E32850E6C197687A0EC4E5908D2A18C5349627E336AB5E3185B218228 -603A4B1852069F5EE849D571B8387DCE1F8F8E9FE94FADEF128BA83BDD245F8C1C27C11F2ED1A8AB -2D6D601726842CEE744EE7AAC6B6FA16CCAA39DBF5B3B1D47339F31DFA562671A9CF7DDE6915FEF9 -F19B3E068A464DD350A3AD146D1A241673B5112A4A8768F976723E6E184790C0604506C46591BEF2 -106C40789B733331A80740D59ABED39868F80BECC2AA21C400A0BD0CC326D186FFF9EB37680F1EDC -32AC78F9059280D07B5FF2E354FED545129FA5FA8F3D4317FF21E027602FDB2522F049BB545FF4DA -60248130F81F4E348373142F3148DED038AFBA818F26D5B49FC02DE9800D894E9239C88EE0EDE431 -F8083697CB0BE3B497473473E5714717C914A1A926730C249413FEA2615EF72BDB0906933387A892 -370F77EEBF62D26CD583EE643B02E323821379C0DC966407D36AE3CDF646B95DEDC7D7FD0F28E950 -78F12DFC0D6400B327B743C548A0A3517A175A7ED963ED756B1E107AE7087E2446BA702CD4E26E2D -CDC1A8B697108B5B5E81E9F03105F220C72D4AEBC57665887C8C7964089FBE9424120EFDB14D76EE -F8C6F7A30B13E1AE90CB9D93D2E14BDE47F4A1D05ED5B18D32AA39911B92D24C93976ACEB7EF597A -75161923A73B2CC761785493D0EEDC08B5AFE95F3C006B41438A0785C962B070DE2BD096CB63B847 -C87539880AA3D3FC5C345E0992D7BE77C6CFF4948617FDDA784CC55652192B0ED775129C4EA4245A -41BCF3875BE319DA0EE2DAFEFAE920CD2B6C6C2001762F88C0C5C05053025C0349DB17104360FCE1 -5D7F3A8E30ED13155A74FAF91DC77B8AABDD6FBD5A1EAF255DB209D7F2B90822296B5603FB5E2CC9 -5CBC5F7A6044058B8044ADCE73ACFD896177F1F70EAD2F6534DC3AD755AB2BA87126D63CA2E9C441 -DF0965BDDD6BE494E58D6B5057A561D1E31BD38E92CB73C1465AF6B9C001F7229059BCA4104847D1 -639E124E082F7364B56548BF8112D0EB461B316B2449049F6A476D36D6B7C0C1126C08F2E9A1246A -3B5B21E7C8FAC6E23B82E33A7783E4F31F0240E96E69C9444E7D7A928636CFD086475DF1E0A28464 -81387BB2010655B9F81A0744121699B4905AAEDCC84BC5D5AB3674601DBBB651EDE7B5DF05C8A463 -DAB41F79706D285C4F9063997F7AC8CEF35CAD51FBE5F5BB1B3FA6DA2C3ABF2B3E925581349728D6 -DA0D59C1EF6444539742EE9A23A5727F20CF9377F4F84DEA420607015A30FB14632D084A2DD181BB -02FC3A84FC499B318156B675B9CA3CCABD87FDB2497C6705FA70EBA43ADDB6CF961B30E8F6AB9F84 -E1DD8D6DB3314B34B7F7AA3BBE19D5BDC75ECADFD8EAE19E07B387A1FC586F0F30DB695926764B54 -0D89F1D854B0FF86528AD9523CAF56371E29498C11AFB2F4D5202670C834E930103F039D13348824 -16A49BF93B84FD3CF1209EEF7D4994C8302436C0794497461C11F5B8BA152BACBCC08AF8A15F4A4D -F3EFFB7227CA97FC21D2D0356C93390C749CBE9750B821F1A7BCFAE2C8BC6D9A27F844D8AD088320 -79ABF0EAD8ECD4EA72846DFEED021857F33C1ACE4C07BEC90398B629814C498D33BEB375B9A53DA0 -F926FE6E89E70322C72CB2DDBFB16B13EF7A4F50DF783316584C6AC2BD7D9029124933133B2229BF -74A228868AB30EA5C3E87C78C3F0962199480DBCADBEF53BDDE45849DA857A4FD85B96682F1EDEB8 -5384929DEE4AFAF84C51A09F5D572705673D885070303FDB47DC898F874E103A9E7C1E894115DFDD -AD81549C7375D4AEDCCE2E52C13E5130B47F206F7C5AFAF1F9EE83DA8188D70B473269CA280A6A02 -DE85300B93D8A4F6B402FB5DF58F1327470CE11CC63ECEF2EFAA396A6680A6746A20382D9529B58E -7CE684B39AC00F7086BCB47C2230DF0343BED9B9152A61C9826AEF9E00A1452D91305CF05490D4BC -0BADC9C6FCBFA93FAD52C3A80705A1956890497557C0873EBDCF61CCDD2219354A4F5621AB33B119 -32065C1D990A9B68858331EE7875CAC855F98563B14EF9E1060BEA90F195AFFF94728AE935453438 -DAB35123D0E2699475884DDAFC7307A5CC06920F35341728D85965F5BA86F261CFFCB1E29B429F97 -6970D42D10E6AF6C4B792B4384122AEF2448E22A58D3AA007743C71324EA08D06819FED14AC1F22A -4F0BE4787BC8738E1CEF240677571C65804ED3E748D72E89C94B6F310BE748FAEA31EE246859CAF7 -A1EA17CCB5B246C87EAB771E2AC5D378650191081514DDC2C66878E3766CB20DC49F630F2743A7FA -ECBE9DBE9E815A3CB57DADF2BFF5EF2FCE23A56298A30A2E052FEAEFBD698101F9DB992613706693 -CB0EFAF6F60C8BB5E7D0A50B3392B9831EF3A304A846CD4AF431E9F018FCD3A5B16387552D55DAEA -683D36257418AAA0E7BF8A03ED7BAB114D7C15119E6C71C1946BD7903C1C42E115E954619051B853 -BF05AE316E15E619A7DEE498F771E809D9435969C1056402725EF40C0200E083F3EC6E0EC27B8ED3 -8DFE32EA0E5E156AC36C4BB9AC5ED111A11678339703F1B9299345AEB1F251FCEFA11FB3101CC499 -907DC862B4463D5523B9B25C5B69F70AB6B29CFC1DF1ECAB8227EB3ED1F882E90B12080EE003714D -403EC43B7B54491446B6A3DD6EB641EFBFEF060C45E873E7398025B1CB7065441F1753028F6F8C49 -A96801C0D598E098EADC96A21117F817B6FD6E6947642F93E22425A00E8F6B592AD50B317B69C0F9 -4047386A45E5EBC9504FE55451A01EB29DDF9A41D4BAD85FC84CE280971E834F06CEF49C8C20ED2C -EAC889F158CB14A8C070900478804CFF1D1637CC880C81AA287D8382837FFA8F41FF3C9DF2F22CB2 -0044C171E4815D0D0F6C22D19A52114E780CECD71DAF63427782E85E463DCB333789F496340E8CFF -885A9D9A4250118B439C71C6BE51A9338BE29251AA794EDC67DEEC6337FA63CA9B03C1C9F75E733A -4A918646E7BC9792486CB5A4BCC5F84FBABDFE338C3792254A3EEA3D88903C2C47B91E076259DCCC -8BD3DCA90ECCC832C09C45141C6242026BFE309029A562C3EE0FCCDCD40E5CF265ED9C3DE582884E -0E14819DB98B3AF734B1B3276AC41D43384EBE73003D15CE39FFCC04109583390E470F431B4407F9 -8550E138F96C4564B494E5480F47C853BDD237E27301F55E42A3BED18FADA152572B7B465A581DBF -E7DB2619365CF16D71BF8F091862B9FCF04BF8D0859A76F46E7B5712F2757EDCE332D3213B8A30AC -2CE7D7797EEF6F30904906B0805DFA7CA36D32A20D989858497A66CE72491393DD79332003D55C09 -5A5AB5DF761C4BE5C041FA8407263D604E53091F7B6B15496245DBBEE96A63F10FC2978D99E65731 -28689366FE8B0BADA48B50185B861BAD03E3600F22BAD4274F2542B635F6C7944BEFC3BC741BDEF1 -1A8DD659038CB40FEF2E16AD1AE7EBEDB7D9BA15FDCF26355331505A386DD7399FB999535D6061EA -BC61DD76EF3EB457446F29D0BB6EC2FC0AABAC20B27A3C123C27BC27A76336D0A0A6D456DA070367 -4D959A4AFE428E2206A511BFC80039ECD56E75F69786DA0A8084D81A66644DD98B6018681F1D70AD -E09BD9BF3D16D68DD5D0A03AE26DCF1552549E459FE190B310A8776B2C8468C14CA8B1B9A7AF2956 -507A3B705AD75A17A0EEA7FE089273353CECD07BB8563465EC8DECA0EB42F43FE3664EB5F31E1D13 -24185539B28D508BCD065ED576D8814ED3FD637D576F027927162344AFB0255A91FFC616948E4E35 -8867E9FC76A9AFFACAEBFFE110808C1532A2BBB0DBEF3F010E45FFC73F228D28F12E98478B27397D -8F456781ED9E19711DF2E9EECBC3FE61F7493FDF1A59124668A91BE51F122F93DCA4BBD22DEEA339 -E6EDA3D6EBEE03DF958113E1CA49C8398D2C59DA6764882EE3663F62A55AE50A7E91B4FEAD1B11FE -0D50ACCC5D75F1A515F0C53616A500F1491381DFD0E2477E402AB0CF9F67D501A442629C8593ED5D -25A72EDB9746B02F2B0F0759CC9CDCB4C9D8B4519C8C617E569B432F0CF6890372AA879CA7DE46E1 -10D95E230A4F0E52CF65811C54365DF4A3E40D819E2FD379B47DA3233D0DEF0EFBCE04AD8BAA3888 -4F6A69FE5C373E38AE0FD0241480F2BE7CCD18AF85916D2703A049779FE7398FC47D348454CF03F2 -2EB3FECC064606957898B5643464845445C25C0C7D685C8DB042AF5D5882174374ACE90081C68678 -9BCA96AC602EB41D317BD652293EE628951875641661EC86A2C40A42E8F0813A861D41A0F5178E55 -43651CA0E99150462DB5EE0010F00DE6D55B0D7FD7EC5BAEA24ED3E90A7D6A0589761922B91A6A91 -3A7FEDDD3B68254D89ECF767CE8E27F966426A8B4FB1B4085384FD09D63E288405B78A646F44C87E -EE22C8596B13188085479F75F63D3D97A28F9C8306FD207DBFD38DEDF0FFEB7DD80B2A3292DFBF1E -D605ADF1B33E85B010309E3EC058FCD922B1325FEE71EFF2DBBC2E68DB52D513E024C01D47CF657B -B61C9734649A4AB63C0AF4720EC3EFCD82DD3CA6E80BB63BCF1B8DE810A0C6C517C63B76FE68C0B2 -86867BE102424FC31C4937048B6F323D039618586FC21731005D949E7D802A430DF8D2F0CE99F2A2 -376C2953EFC4184355E4D12F422C9E1E25C4DF38DEA334DBC89B540E14C61A7769D77115CE8968FB -76B27D0863CEA2496783114C24D4CC816DA884D953DA3F9B9D3AF8938BC607BF26A071956CA07E6A -5509EA2F5D80E5CBEB98041B197FAC760976EE75B470DC20AA023BA3F63C2876EB281FF5173BB490 -D6815604517AA1B1FA0631401B3C1A04CA103E2CA4ECCD83874D9CFC8ABC134CC0F9141D9AFA5684 -8BF222342016C556C14B3482482DCE5D0B6EF1AB522AA1812BDD8DD3397E05327EC12748FC480842 -9B97202E24E1DE0C7C0D272C046BA73B37D30930C5DE5A47D96955CB0F5DED8F3AD929A8B42D2839 -0458F5910A0F93610F79EDDB27078943DFE17C716D65F96589769349F3B66AB7B8C004CCC59EF688 -1F745EC7129865A76F9C2D029D4660CCFB4D5F9D412BA3372A27CB175E9D65F759575CF14A5899A8 -D31FF039AC02DBD8391C3397428AC0D5717C005200790785354813C8859BE90E0E17914F6CB9C674 -F1E9A9648657B54E5E1F52756C4F982DF74E73F6E4D40718C71D1D0E2420FB7462FEC9E457C0414A -96E475C6BE2C10437096FCA0C942E995A9ADA789AB637B648781D32DFB68E62E91C2CE7E13680F8D -31ECF8C824885FA7618981CD05FB335AA111B409C59EE337DF4E5F9DCC920A5FC0D620DC07F20DAD -63F4FF5E0EE5A2F390AF1C32122BA7780F210229E5A5E3ED97BC1C3CDDDD456E739CA782EDBF4B81 -0552368E9C734B0C78B0B8E3F8B2DD782862B74318871BB1EF087828CC173D7B049811FCF598B8EF -DE4D9BC5447F4848C98029C854F3AE461B9D46DDAD8CE67A521F3C811A81A396CB0F80F3C8D8EC88 -30532FB7F9624F7CAE0F8C6DF875073333DEB28AAA90AAF486AB8C932553CE697B885E71EC8E40C7 -835CD5D59A2C695DB9E51216FF9B77A15B0DA63717FF25B05B939E45CF7FBE490E51E9344213B32E -115C2DE14D76DFD5845088DE645B0E75042A61D82FB1753C445AD0A956A1263E5A096B681D3BC51A -9FF32EBAFFF7ECA8B59D40F0937EEFF38312AE57462C7BF3B1FE24D2BA8DFE84515270E09063CE3C -80DF4935E409F62EB4F54AF16A186D4329972B9BDF15FB08461B688ED49928429226CAD9F67C9D63 -6D1375CBB7B08A5631956B7FE29CC9EFA8D75C9E4919C8C2C54F401D2E0D7BFBA40C50CAE214D210 -C6F3EA5802339F63FC4C1C1995787617F3EC2C806CE44CF8E29F76606CD5836F6E5A2E423CD791BE -CD3F112F25657DFED9366FC4ADF90B685CCE4A5698E5FE16D7542B913FBC01B288DD13F43DB2B1ED -8CCB80159DBDC90A8132125DF8DF547C4851CA609D1F6F4D647741260E845B457937787827A89E37 -CDA06BB191669AC84B8608EAE132D10177F3FC384980F3A6E439B048A38D0D6B9CEF09F3F2D732AA -71BD058169D6D0F8C9D146D9DA046774027559A8B3843F6116B418427E78476AD8F0F81E8A6B1209 -8060FF7DD686503F972D6C42FD6CC29C083AC3D72E3751F21D2E44A572EEC80E81EE44C90FAA7AFA -BCD3ECEB98FD4068F6C3A4DED0E6CEC523C9A0054D1FC2A8D61A4A26F9BC250B8F302416924AB22E -722297888B85B9C12F8DFD2A744CBD143F9B2514C1CBE988D9CB4E77D90B2EFD5C2A528355A35F7C -4AF039C7D1D756305967B847D4ACBB81263D4992C001E2A262B9FEE2D1F5022BE5B15E1D8F1D67BC -52227344EE912C018CB73E5F47CED54FD202627777BB77AACF3EE6B22706FB2FA9062BEE87E22CD2 -802E7706322648DAA0C624EA885430175F746E1F536F9A8E1C610C4A761D07248426DB63C9319A88 -A3FA449C3FB8AC94C6003C745E6BAD717A3B2EA3862D1E08512A98E57772A62F85F1E2FFBA40E2EE -43AEC11203DA9CE5AFBF673436F2DB6AF85BBE89D802F7A9E5FA25A408DB69E51F0577DD26F94CF2 -BA2FC53EDDD6FBEB534AF15F74F66EF8D14E7FF77D8A5D284C8202DD5A6053CEAA606BF925992382 -5EF4EFFAA8D878652A4CAF2EE43ED26BF3590402686C876F86C1AE95046E527617CDD3C429BD4CC3 -F9654D2C76DD4102471FF746FA9FA379B16DF96BFE3836D43FCC0B8E95120C27370049ACA4AC313E -1D50D72D1814F2566B8B29FA9C9C20D0488743722A766436776783B939171FFFA00E04805A8B5821 -4D4F114F7B9C3C17CE7486AEA2BCC895ECDE809502BDE57981318A93F23016F056A421B733C4590E -34AB08BB348DA4A48F19B6BEFAA1DDD2A49A6C440443028333CDD48C85CD698ADAF3FD8676739E44 -400A98B575BE02350576F96CFA54D4184BA47555B8D12374B86D038D085F7FA51FF4BE2FF5981408 -999B48B2FAF305212ED54B2E371F5A0074CF68D1B0E5CD279BBC8BBAEF694A89A6C43F518D01BB4E -8402AADF34E96E9B3FCCAB4CBEA2741D3FD9ADF7AF32388F7771845AF99965A6078F4DA335EFA436 -BE36903E33A743C112C0267309F266DD44FA998C9A139704E400B89DAB952EECFE2AC09C82D9F497 -5371CCC27DA37890EC84123193314D8A7A707C217FFC951A547EE5B6D1B7C8ED85BEBD9D3F4B9B09 -6A78E5F7DF88C931E3F396973974454E59340CA51DBFEA1A00DE084B64630E26C6D6A3593B828814 -E27DB0186BF2A87EEF268AA1B135AC09B52CFE53051CBCC88CEC5657BD47F603C8E1A6249161684F -D9084AC279F57A4F9BBD0A546A87E147B62AC860911969A29B8AA20E3AAAD0079D64E6BF1B0F2CE8 -F0C54C9019207E1B403358253C2FA93A662F63B9380B65C5173C198D86A3D0DC1800D1F5378DA39C -E8523EB62C6AFAD8A0D7AD1629F2CECAD82B8FDE38975303768C7D3A08B91478EDB3C45A8C6B7725 -EA8596A8ED50B8355FB852FB8966479D12E1086223B1E6523A65FBA81DD106FE254F7309718768AB -009FF7714A8C363B09DDA73CD3F81BF9C0CD3B0C806CF3B7BBFAB73E46FACAD2480EEBA97AE68EC9 -4D3D79AA01ECC22067858EFFA9D7B7F997ABD2CE5AAA8781E5499E8580C405681CC63EEA53BB47E5 -5ECC5BA2A7A3C5472DF034B022F455C60FFF971B01583A29E211A87F7163187B190B0C1083D696B5 -86E9438FD8BAA45101A5EDCD1BE5AB9A585511089DDAC8DF1B1FDBE582ABD945E67F99ADC4452988 -A9859E39C90EF794C5C4E62997085B7A16A0D90107D08610BA175AD66377345662DA7DA4D8FEF847 -EE5D57E3AC54B928A0957CC1C944E7FF14658FE4A641CD26C61105C0F136A75950764B69CA17509E -3C19351D456B22C87C55E8DCC4ACD3E150D936333FF36499AD6B02B6403DE0F12901301ECB2EBA10 -324BA72B58206A13B8F37B0AEB12115D0C12879C8EA8A2EB70E85C95434564BA3DFF481C8972587E -FF74EEBBBAB14FB32B8A84B8FC42EBECA65D25E8C32C19CA5962832BF45DFDA4E871508AEC318495 -0D6DBE89019CEA29E40484C36E33D76B756255531ADD1DB24C03B2A64A47BD8FBA3FDCB1F5B96F8E -ECB60D5834AB001A70740498720AFB6EC03445CC35B51F7987109618C6C78CBE3041BEDC69B6FB12 -8142CEC5C8683B558AFE3024EFF7A12D04EF59A72E156DF11D33ABA08A8EEB16259DD9529CD003AD -4EF4137B6FF1654236473DFB93F597331A5E26C7796F528F65C94FE07B3B4F4DD49034FA0CC189DF -CDFF70C2F1C6D3DF30AE103E2AC5CFF20664AB934CE5C19693292071C93BD590383E0A1931E04D1D -DD18071DAFB628F5D7472E457BF81D6064EDFA8DEBFF91701C5038CB30865D6122076A336732DBCD -B0A625548773D0013648A76F07BBDC9C16284D158EC7A105AE37A62279419C3A2F360D0C7A74D6FD -D0E36DCA2A8BD59945A4196598F690878F84C894852C1811AFEA4BE3B9F6A5219E6628C66669DBD8 -FA9A0CFC2DDE7716A356FC4FB271D8A2CDDC8D4684DE447355BC7A287DC56852A638C5777826EB6E -B72FACCC86F80BEDDD0D649A883CFEEF4D74750172A90B5DD8252592FCFE19FFAAD868E99562DAEA -E70514F5DE296EF7B57E6F193737ABB6AA317956584423817E11664A67389197AD9F8F771EA59551 -98C9EE40A0761639E638CE9D890DF468642670235F1373D3AC6B1F43B5777FC0A91A96E095E89BB9 -FD62614DE456CE7AFD6B855112367573FD9FCBBD4A4F9C676E672D62DDD34A9BFE8311B6175A003C -D143C0DF15E4C0B48C735404086E48AEED6B6FA21FD9F40B84215DFF287F0677904E2DDFDA774A40 -19DF45CC877F553E95A1C65DF1D67BC0C60E0BBA4D205C0DA3DA80229FDD71859F65AD04506B308C -2B783839F31CFE4425263224F08C5C7E98A2C9D3DC8EA5AC1920F4E395413262E0836BC019A092A0 -DECA104EB2DF6B63392AE8E2136379140DE5FC98B0B69860FE8E31DAB5C5DF7807D19BEA34AC14E0 -ABC6F6519C51247B104DE7D912C5BF6EF11B48FC6DF84512E9F5FEBB48F72FF1B722BDC3BB2E835B -2E7CC6324BEE84893996B8DC2D4DC2793A4F69C18E63DAF04A7BB5C0A9076E2D5A343E134CC3C89C -4712900656FFC202E1988526D80C7FD9281FE47FBA8AB5D025E63A84051F6B13167BEC15B346212C -BD051AFE7A98BE3A2491F3C469718A58E783ED91F90E274FB4978F8719E92A99A1E8F142EA7E1F2C -46AFF0A2FB50F4D105130CE8EA309B0E480DC8F80D506172B609EA4BB4E2BBAE98D8882814FB273E -690DA990B60A9CDA20A2418246BD10AE67D846A0FA815AC25858145ADDA106A6778A11877FE59A2A -BE300D7DB9BBAB31CB5B960B7E4EF91D4600886D8795DC361CBDDDDE05EBD54B1941F426F7FA8399 -270D2F54C998BE92D146227270A8E89AF90C48BAFC4ECCCA01E6322AFC165743475E752F39BDAEC4 -9297290510FFA264342A0AFE2985F85DEEC66C36EB4A1D46683EE7C591A89B81569A8566AFBCA268 -10DDB0970577A76EC8A066622606B08315DB0F2E6C671F3259C73637D773D1A180AAD66ADADA2A65 -95B5F481E5F59E51CBA876FA06D21E1D674CFAB46A02D267E20234324D0891E7847C13C69BFCEEA3 -AC55F2EAF753726BCEB0DE1EECF42ADA964BF9E475953302C2FCA804B70B779482DC9319B40381E0 -9C0096460AE113C19A2DC9157FA138CF0E7758F71008E71D0F7599744D647B09B16E3C795C56EE5B -D14D8D63E7A512900D67487975EC9CEAEF69572FC3C2342AC5D365E8A4BCF462006B5268ECC15754 -94CAD9A9E7A9E8D9AFFE49AF647C017743EC7CFD5E66F4E4D845A6BBC836849274FBD270CBF263F1 -67DF7E26BA91F21C60F96257C07523AC37A2193010E976965CBD75751E312817C0564E1C5AE0CBA8 -BD12B01122D07020A0852120680985A8AC987BC33BE863EEC52AF13435B6E4048D951F5BCE36526E -07A8661CF2538F69D1F223BC53BF5896437D1BD46F57D9698F642F0E99C7392D8EE47134E34DCE94 -D392949B418D9821E12CAFA8337323E8469DAC24DADC6AAD4A0DADD7FF65694BA3A27964D28D8EB4 -1179458F91CD3F83B8F119BF5E76184DD29CC4C0718CF7945DCECC993A7A78739363136CEC7F2FB4 -95EEA8CEDB3EBF14373A058758C442939D36774435554851E9519B6F09C31EF26B6CD997DAFA11DA -91FA9759F17B7079164C5B47B99CCB7A876FBAB1D0D5D1E1A2683CD6914E6B3B755939CEF1C9168D -30B2738C4349650CF86C90D2542FC9B90F36A494C035A1C86DD716014AA16E6B9EC7AA03B16554BE -C436511DD3097FAB1FD0CD49EDAB96F74E8FD26400FC748CBD9EE1EEAEE24DA30DB6F8734B52818B -3A5E510AA5C14E42060898033E7E36CBA9A64042CF94A74E4B52E37AC027C0DC69BAC4944CCE12E7 -AD81AEDCE642EC34CA23E3FF07B8CD35DFF19F33C8D4DBB56A52534F8A827BE47AD4AEDCAD83B273 -38409FD1101C4DFF3F12D3DF79AD1FCE65B2F419451DD059C88BF066413E23DE27D3621DAC2DCC8F -9F3620DAD0F4B1A6E8C9E6E8ADB552E1EB2C4B2A3B73986AD53ED9ED8911F82F750DF05CD2EBA3E1 -B0DF208A87FB5ED44C3296B803881C1D9776D13350CD29C3F716F0B5A8B8557812024BA70069BE65 -89AA579EADB1F657712DF2570843D7C5FF7F4009D4D232D3547DC8B92ED5C4DB77B76255E661FF8B -163C6F3856DE5651B597EC7C78B84F0C6C1D6EA3A82286F1D3BB45F708D564E139E81F473C705AB2 -56346328DAA64D1EA8645DC10FD449092E0634D9D7344B2AEC3C75F6B6CD8B3F3867FF3CBB0F556B -186EE9A7C26BD2D17C8A773055D9D5013BD2F937D697A770C57BDB36D922CB911CD14E7FA14160BE -19C1A052E297B1A2D682D4BBC9F1D2493BCD7CAD2FA75D904C5F5479179DAF7DC6A4E0D269BACA2C -4F2430B4C8CF1572FBDC750A05DCD5B09FA3A9CD6F2F2A386E2B3D4D8E257BD43A783B38E63BCEE5 -03EA96FF2C373181744A607F0CB8D281D7DB1A6F4076AA3E2C61914BD796EF8A0873F79F964FDE28 -B792BA99A20C3F1F5ED1FD189FB1867C84DCD6AF43D49420C8B1F3DCE7DBAE71DEB17FE45644DB24 -4F44B1011C7C768EBB7254F4DACA64E9BA87AA7CD0F0C4B2228FFB9EBDCF3DDE4DCED39399FFEB34 -8811547D025320A88B480943A339E2CD2FA3605AAAE87939B1D7901465A1879BCB4C5BE1A179E7E3 -71F1BA2E0844F88AFBAE9B78DCCA47AE8AEDF5BD3D458C7D4A7A08ACCBF880D1F1DC69C636628DF1 -EBDC5C42FF88FF8B66351F3F72D703E52F3CE91E4E00759753A599FDD863788E99858498B66B93E5 -083BC3501C39A9BA928B0D763C28826FD237E949EF0BA85CCA9AA20C405DB6D5612DB718F7B4AD31 -D253AE306E4D7CB615C59AE668D347A4E60FFF7B103F8BD0E7CBDB142A763BE88AB40EEF6B8FC200 -458D728930AD0F94FE52ACBF0657C4907CC7942710AB1FD8BD149A9C9DEF6B8DCA7DB9062AA7B1B0 -11ABB5AAE8B77893A023F9EEEED4A20FBC30F922282A7AE2F1ACFF64151013D6B8AC2EAAE58171A1 -0F80BC18C3BBB5DE1E22EBE6033BF83040629023D74CCBAB3F1923CFA4A6735E1DFA8A1B261FBF1C -397E26F3BA9C2629CFDA84DFA3D1087EBB19DDA7E2D76E30DC2E15B8821D5291DA1DFD73940E5560 -A8A6DC91BE0075E3ED8D9E8CAC85AC20768D868CD2DC45DEADCC8B59AABE6EE5B2F891E0D7CBAE82 -0F83479332BF9707486698FE196C72EF72B52F54314329FC498171782BF160E1110A19B8208FC591 -EF0F0DA71AF657B43A7CC649A8488B759F7B69134B4F9DCF79DAEBC1CE52CC8015F324C9D46320F4 -4E1551EDA6D86139DFD1DB814CF38A22A89FABB4F75FB896B00E769820F763486E86668253CC466C -1529A5A924CC337C48448851A381DCEF63A0A302B65203D6571A1DD1FB9DC0C3BD6AEF4891497033 -109CEB5A481BFE442249940EC54096F1D0F2436D9E60495D0ACFF967A741B30467D24AC6B0032213 -18666B951EFD45324987B10BEF4AAA0FF1DF6887377A7F70F555DFB9FF1001C67438A167A00B05D2 -C37065655173A7ED9AE342DFA1497FB1F2FED6098901249A085D31B66DBB6AC25EF16C106B0A6FF3 -47CDF66434DC3F0012DAADE80B942D522CD59AF4C31C1C062157B3D000B9CB86E2AA7B4A5BF31605 -8A0D5A148EAA2C67977FAA0966E4C3454E08DF14C2498AD76E389AF65D2C139A6D8675298C46ACEB -7DBE6904C373C06E5F71399B2EDA0B40AB96E8BE991DDC39F92F1D24797F9EC9F2FAE25669B43754 -E2498E8EA5C44B176C3FB3E8F7A7A1481275A461F2549AFC4CC73E28417BD8C5212C13105EAB967D -AA679AE822B9B75B372A99C7E82D6BD83AA2BA00314DA4AC51B9CAA30D80507505BE24BAD0A87C5D -5D7336EDF60CCA4CEC8201D243C3932F74D171E2409D789AAD0D04A7BB22FB6DC3AB92AE33FFEA89 -7C484D741039F38C317EA396A0FBB9F15A27D87FCBE007558799BAB73212B6E5FAF2080BA074724E -AC87D88166DBC1464CF5D41B99428851FF1D99246944511CF42C3F9248513E9E51593F253D89C604 -388AD7132D6A169E9DD888E020AC1F8BA606F2E1EBB97977E505D8C40853653D8F398F71CC9F8F9C -540C22A1E6195BA578AE7262FC845FCCF77B33F33EEF266489AF8B81A615D6A13464BCA58BEC16C2 -3F31D678F14A938BEC31272DAC3CCB1B2DAE577A26BED852FC59843176A5FCFCFA0AB7FB00D2309D -E55C82CB9049F44FA61F1E313205A76317C4CF529A4456019D970624129681F46A9CD7950B8B5C40 -61853040113C8115319E68B37F88D864C6957DF813B305D09E6A1716B10F26F2EF5C727FC77AABBA -73E12B5AE6416AB19F6563CE14046B715BD4CB2B1E4D315F42D10F74CDEDE82BCDD524A1A5460921 -9084CF1CDABFE72CC8375478B41614BC18A914903596D6FC2F361EE519F875385F4ECB50F7053127 -4EBDEB14A5DBD906A60817246042E3799BB3AC647CDA7244B7998AE4F3BFBE5C767FD2142E48518A -4217599E0EC2CF5E86C8C270FF8B02F949EE001D6A439BCB4BC7D7F7C8167C3AE0A7E59687FB8BF6 -F37BEAA164541B8EAFD92E9D152E3FD0F413C99CCC34FCD8AA455A0B55DEC846A5874B94FC95CFF1 -BB386B2A1E22CD1C3914264B6D5BD1746972857C9235052D77A6C0DD3019F8A307FBEE63A3EF12B0 -39B224108276FFA84021F1AC5B745C54690B3FF587B4B1710AC3533A67BCEFC503ADF1F4B62B2910 -B31965E364EEC9CC437CC40181A7320CD52BE9C546B8F1DC824312216C2FD8232E2BB8D40EE2E314 -54C09772A387F9520E331456C269F51A078E6ABD9FB6A68BFD5F557215B0BBD2227B8959CBD1BD4A -EEAB094DD18E891C61FB00933C0A0D76174D169C0B6445D34C00DC9E06D85EB086C18F3BE27DF734 -EBB9CF078AFF6514438549CBE92A0C0D25EFE4A527D86F158B4E9D8870C7AC5D6C059643A3298079 -CC20398324CA87273B86ED801057D797D91BC3CF2F96C650EE1566CD3CF8656CC577D38B830201BE -718DC9A494268177A5019546EEEDBF101996BE593631654B638C75A6BAA648CD1E7AA9AC1EA60F4C -D604071C89DCCFF8B3E430A57ED6DE11C5837E78956ED991058F3646219BEAE94E4D9381A33D48CA -9B8FF12B54A73FF869D0EEED7E098D80152295E6016CDD809173C57D1F5FCE908A37010AD4C4471A -53451DE9B4363B63437C374C598F548F145D3D288F42531FCF36A9CDF72521F1C0868FCEEEB1857E -A983F6B75CE245D875BEAD1BCB8819E5464518E04717B78BD6E335F0AD77B832AF5682062A1E2AC7 -7CD5EDD5DC372EE456C96D38BF8BF348DAC2B4EBBB2440F2CE97B4B337F2E23247E3E8423BFA9237 -CA6CEB6FB93F960CAD894A96F0371168A33222052DE9B3BE04B022AB95C0C243486E35197721FC55 -311DC55F87BC72D09B6C940CA36E6640AEB66C394A5949A604E7F15DCE3A008BB41B0EEF2840A357 -F348443B4DCE064B4C15E5EC52E448C985FAA1C3D6526270B1CC691009959A7620C9A6202619A19B -E410FF7BD535A8B2640AAA459DFDCB8F2BB35112626497E8A397D4F9E04788322A738DC8907CB643 -15CF63C95809E90D06EF02F72AB04AA61FE02ECCF7E9049FF9F3EF2258A75656178AAAC9F3C2A26C -001341862D526CC14E92A81BD63502F959066E0BCD659CB9B5A45606153DD77039B8C5D5B13565F0 -0D95A41937CF97089F3938E39659A64DC3D6046D0E9EF66544CAF8A206635DF49926A3EEF3FDBC9D -CCEA2886EC855F1821C4B9CE1D02A19A11BBBEF43A7D4D536715548A62802F64AF30BBCBEA8C7E55 -AD56C801D8A569C8183615A78CD393CA42C103F155941E845712C335F4ACFC7807202B92A983111A -ED241BBB8501F15560E8F2157C29752BDCDB274008137277920053D6D7DCDC626A574A82A8A34F1E -77B2FC8CF7C1A7322F22DFCB450259EB450C52B70DF3584A7C54C813DB41E3DD81253A03B02BC252 -346AF0160716355797B6F8210C453DD7E1E756FF08C7E6A5F4F87605E1DFF35A130D79148A57B7AD -12D94A129FE3F055CF974EBA09A2B13DEECA2E02EA818A58B81E8743004646C7746110BC61B86ADF -2D5D8C45A6A5461EB34497FCCD09E711F47BFA742C73F87B257B53F30CB68D151424DC3C210D3E8A -C67C2495A8236EA2D7985A5E1DEAC699D7B700E6D38EEE2E93B191BAA5A8A2C916D206C63FE63427 -AAAFED2B5784276FC21EEFF2D70E47C8540DCCC3E00134642B703795CD3702631AE2A90E063A218B -61E5B89BBCFFF84F567E37A31A9B349717A8CDB9C9377215BA838FF7469BC486B64EF2B6D92519C0 -BF0826E3652903F40E400689F5749DF86FE3DE178E21E20EDF9053081F6510D8F19ACD021CBA481C -484D30EAD3B84ED0190087EE478A17154B243346C3938FDD5340CF6E47B185E64ABDF44F8CBCDB82 -94492B91929BFEB9DA2B033C3ACEE554F0F1A7F8A56DF7C06A3583C1E9C5CA458D40E550FDF3E2F2 -E7BE8312D5FEE98543388EDC8A04CA29F1B82B7AB4ADABBA3F2C331EFF3521B2B92F99C4377AB827 -A989B423750D36ADDD2E286E7F3B694E29B8BC403693C6F7CAB5FE34F1E48C8D41B47831E8C3F5BE -5ED5142E3C44ACF5180CD41FDA149B1F4AED36812E42BC184227F5034220F74F67830255E1CAEC12 -66DEFA358A87D2E3B4B4E7EF30181570D0B2B43072EE0311C2C157D32EE2BEA8EA4251B59F6B61D2 -B4FDEB654DEB67AA3DFF4AD65B727F0D6B7D61523E4B44D99BA5CD33540F340A35DDD466ABEA4E72 -E504FC9BAAE51D231C33A8CE7DC2970DE4C1FB5B096A3D9C641EF77DC9039886831DDD01C4F21E6E -168E38BBDDA5F4308C959C7BBF36A42D042DA6862937EB20D4FA2E5927741A58DA5CBFFD9553BEFF -BD92E6D64871D8B25D9049F4E71970A8FF5557D1DE83DD24286D6C3E4770EE00F9A1A0B0063C9999 -4AEC75E84D6F9C488434D1F3DCFD0A8BEE9ED8257CA97E75E8B1285747184D6D2228EF95D4A0B8DA -252318ABD35C8398FC6568B294D90AB308A7675F9F160140F0A08C88AD0CA1CA2CF85E4D031CFA3B -87635F1398EB7DBC666A259F02DB6741D13E11B230025DD6DD64C438409AF109090058151E4DFB8C -0E9CD65935C4CC063CC6100FDE70896E23E3661C7FC1B8228B26A55903E997F80207EDD8863FA074 -EE4FF23BE585BAF708040C9F8CFDEB42FB8EB71D4CB6D7757E973E4D8C9DDD082712C23F868E1135 -ECD91250BB4335958B07C12FDA75EEB56BE19D1644C1F76A8811C021122619F751CBBFEB1D3DC912 -999017FA163672A1EF754C5CB78962BAAB76EC48461B492FA88F9897170DE857CC8374C8BAE417D4 -C78A56047024731F4A45145F0393A27CAB614A7FF747BBC28E6880D4D01C0A6CF317A1DE5BB5ADFA -4B5FBFE0C57598C79F25AE57BB797A489D51F85A9B9CF8BEA64293F8FCC43B0D5484DF99DBE19152 -692CE756F6FBE8CE5831CF4B8A5AF47524E272C45C62ACBFBDFE7E60B05BB1A1A6AF0E9210012014 -69B3DBB49EC7B23A363FA68417B7118DCEA71D4ACA2E36F88C6DDEFB70205DF3AB7C74CF65CFD01F -F85FAF99F172689737331D4C6CFF7A29029772F487FBF625F17BDAD89B4AC076948277B4ED687840 -301016C2B7AD4C6D02F81E88C75B7A04D724E234E38A38269351582245E361A42C75B8256AFD5624 -B558ADA2190F960A896BBAE7A8C57E76DA10DC29E69BBF3AA86214C001A27B39C1D17C548DA5601E -86A5CF53E7B1896BF003AAE9387ABA9B102EB1E9002DD3754A378F3E49F2C6EECF47EB1BAC2CFCE1 -1AC0C5CB063672D32733563F3E1E891B6073739BC53AAA0043FC45E90E413DFBD4548DD320B681ED -70A7443A233D79E3F038D26975586E5CDD2115AA614727B1F6DD4024B85CCCFC79D10B7B6AFA789D -B37BD0E8C423C1A4A8681B5FF3A9FA1F61A46E46C4B1836D1AA41A89264A7F4B1C259E4B10ECDF37 -5BD26A1F412FE01FBDC03368FCAF48AA0EC28B1BD603A6A0D0DADE66D14C9B7285569230FAB76803 -35BE104305E4B748FA99FA31F23991608DFDD2097DA292551136F255051C9F7EEF3FB7C7FDB4E651 -C3D03A4CA357B587245236F4FF3252563F6BE08EF8A3EC09BE2BF27B9120F7D37801F6999EFB1C8A -D1A08698CC59CEAE2CFCDBF6BD8F94DEC94F7EBF33AF05F52C85760C63950B455510C6AB9398D09A -C288EFA09E8F631A59B03FBBC75BBDAFD675FFACCCF8ADF71E815A4A49F14BF70E42DB0B7347B528 -4E234C24010E2177DBBD57648E398FA6B54571A37BA8C989503594D03C6E60871A7F964599022154 -02BA168B8D1D2685F5CF8645D5E11A1769473027F42564C2966C10C0DEE1EE1B6975852A4870D492 -83A470E623337544A7CDA5C16FE2855BA2A548511FB4D4FF2E3E78D108E4C734F64EE2F12CC9562C -BDF363EFAF5201B673AD00583FF108AFF6B68055A5F299452D176EAAFB92C84F114C8C22A05EAD65 -64A3371420EA9E646308DE97D40705E1638DF08704FC90249CBC0D2D3E884A4562CC27370B1A9738 -9D8EFD237E644A7370B8B38ED1C377F522C75F981D878A5E87101E621DF9D85C7207BBE5A87CCB60 -7F93A2E52F660E05C83A7A6CE6D01AB4B62A1EF8DA47CF97D4BBA0FA8EFFA9C0F61A325A97ADA694 -45F23AB1FE27A66C271639F839203040D44B11ECC6E805FBE88843B34C4FD52D1D3C6C70FFED433F -C04501FC20536ABDFFA429B8DC8192B2D45DD9D646049CBF40719C3D674773F9676F9FCF32817DCB -55402A72C56D74AA4CE4035687C730B6B44A9CC614BCA5A3FD17C170ED949E588EE45E89E18B0766 -2A6327FB9E8475C43E5DA1B0AF07C23774B19C9EF59281F5D884990D6194170D8293A86DB52A0FE1 -7E88DA82209A00A16BD29B8B2F13FD60AA25FCFA9745F57C8216283C1D6EA1C119CB9B8D57C00419 -5210FFBD56395A3EC2D3098ED38F389EFC0324FD0E55EA339B3892568229D8D3E205A821E8219FCB -1A7713FCF3450F8BEF976CA0BECA47376A8CA73DF85B340C67EFE4534D459617996526B5E5D3D19E -17CC5449E5EF2B82B2C4C2131FF8A19FCFE6A186A9840D872D85C40665A7A04E67EE26B8BC9206C3 -5B44C8F8A1AFC3867D96DC6D48BD45063BE25B882E9BC0D0948C18DC870E6925818E1FE17D336217 -F174EB4481F5C0ED37A3BEAFAF4D46F857811B6728BEC461AE6468D87A736572F4FF95B58B04564A -9D3C22754587DF15495A319D822B838461764B73483C1F7CB930EECC6F7424841EE10E4087E95120 -2FE88A391375C96BEC4480328A54740213F741105B12A39F19808F3823507B88115D468C61B212A8 -ABAE7480E39BA52390A1892C7EC50271156B4E8076FC3ADA222695DF372385DA7B117A29E04CD2B8 -0A320F186D61C963FBDAFE9224E537057C49E82E405196AAB621B5FE4011E1782A747EF935ED8BB1 -1BDA39A141CC0BA42D04AE123383BC95A1D03A85A9440010C3B9613064FFECA76197E10919BA5006 -F35837ED9BCD7DE5E6D968AACB6FC91178091FA467EF6FDEB728E17293DC89DDE5A5261FAA95A2B0 -000FC750E7073900D4D88247DA464613ADC2B3903A6132D96AC0E1C564385FFBF6249DEA76BEA2A9 -9160632DD2FC2B99133E9F2F470F72B45D6F18B45020F604B06CD9174BA3805DB60EB9C5E6A9C789 -ACE76AE9C79C1BD34434E95E501BC968633AF93FF4883C6A596776254C0C74993710327086B2886B -02FD3E42A725A03459CB36EE34A094139AF5FCF487D3DFE63FAD20BF0DFB60DEEDA2ACCA3510E963 -189D1256EABD81253F7FF9D11263FDBC1DCFDA3D1EA2E52005CE3C605C993231258A717423F64BFE -EBC34684EFA676358B9B543C2042BEF954829FE3246A879845B30EBACB43D8DD7A20FCFEDF763AD2 -C5D20A798B69E08722DCE6A5762E249ACE3055B650D9E110599EA30DE5C4FE7200D5A8DA9E1FE268 -6350D0DF334877D0B9F6524C552D0B6DFFAE125EC4C18F7547BD51C14288E4ABB7F8A1A00458596C -390AEEE6FA308AC1F788FAE30D7F8928AFC91D4DE6352D20B19D8D8AB122B7378CB379C5BE7E3CE2 -922FE667EA057B5D7B3F0B51C7BF0C85F87AC2F360D82C38964F4DABCC9104B32F0FB8802235E8E8 -D9A5997D392259074C00AF2CE1D2BF7B8E90E2E2AC34185C68A03BAB8B267778292B227245D7FF86 -70786E3F746F86B9D4D17190DB859A0E144B2A61E6AC9254DE5DBAEF20E2E9DB0B2FF654B996E962 -F55E465DD238BD1643CE59DC2B5A58B1E6E4AE2DDC2D74D79AFF3C34E4E593E051FDA236B79CC0DB -268D2A89B1878051223BB8F33FF99BA87A4811C0B3BCC01171D0A731EB732ECD8749D27952C27886 -B252F9C3D190419FD2900987A0A255B9753FB7AA70C37462134C467A2C4B7920BED9F9E86F8F98B9 -6D00AF8B05A4BD5F14C2A0D914A9A84160D554FD0718F50ECB5DF5E76623065852DAA74C9AD6DA07 -A119DF12C3577FE276AE551D48B1C5CD8A50E84DEC9CB0840520D78FA7F9A7C2071E28CD20EC7649 -B991F3818CDE295CDB6085F24FCF93147E9F4DD084FBD32525326D2EA147ECD5B6C9D9F4A7166663 -AD18BF234E9CB92FF72138A8A49E73E527E9A6488A4CA808AECABC94D693CD2C0C357D285F65006F -A2F9197F61FBCA6EF07B013E2B558AB531D2FD270CEE7FA8E467FAB885E90C5884843AA08E2BBFEA -0AA575643727BA18ACC499FF34E3438645BE2AA71EA491E54687CD305E12BBC94FAEC848311AE816 -495B013BC5075A2D2AE54A7AD7C9105B64356CB51F18C2C28E3A83B9D81A4554DBEC9BEA9A660CF7 -E1BA89E6D4DFB3EEC6A3DE3FCDED9B2D614156EDAE8CFDAD5FF0EFEE31DA3E6A54D94CE9453A1CAA -D9756D91BE85315F6514BAFBC821EE810BB5D8E1B8F05F64F3F72C4B35D424F7E4DC3AB581B74ADE -B6D6297CDE7AA8278909F269FED79B7DFD39B1C0338E01D556C4DB9CA3A8578ACE3EC3D743ED4B9C -0145E4525E8C315F7A1B98584B975C70F0D415708C8CCC13F848B1D36AC8249B73638F95DE0CD27C -7EFB52BED4339EBDA4812564D7A77416DDF4CC88CFB52D07A252D89353C6826CA1832A153242979B -6CEE783ABDE65C8B40CF4EA7B42B8DBCC0E02423DD693108006F6A4AEBF053B666C3CB63D1861F86 -EAACD43BB9BB6F2C3A17293C189331D253B447757EE7CBF4518BABB73A1D44874D7F0625E6A013C6 -08E991B4AD17A9ADB36740D25E3E35B459B422F7370B134CDFFF3F3BCC4C32B4E9EBF6A2478013F6 -6933A1FA9403A2F1161EC632F1F04EDF95ED0F33DAD9665D54DD9DB2564E51DA7B65978CAB50D6DC -1568976E83B056EB0E3A6758518B6E17E9EBFE49B72EB148B472BA144BDC2AC95744C9BF1258F0A2 -E47470AB0EFF90E190A41108914AB8C1ED6B11E0681778521870E80C16AF2AFC723CAD8719ADB62D -3939D3BC8CC1D8A4E07E9D734F54ECA33D936D2C39D5C8055739C33E53359BD40E576C11E93B4B4C -122BDBC9B1BBF44243AF4F0BCDBDFADE68C526B5CD74E29CE3F70D62BA83C489034111FE8E4DAEA2 -F01F9D938ABB532DEEAC0E329F42453FF5C15DEC2AEA8C198323C9E8FEA55B3F5DC4751D2E2E16B6 -154E7F2ADD46860E9CA71DC114C99D80E7EA1DAB51E925DE161CEDD678EE6282AFF38E3CD0E65954 -9C970613209955A3F581E1ABE485E56402A3DB0D1E9B8A9DFD05C4B0B7F97FC6D0EED0B69AD6F182 -B1D028ADD2F24463834B13F5C1307F91D363891824E81108E57CFD5211F86400D3E96B107F3B1FE8 -9C4908649D04A46DC3CEE0DE66AF03A7FF9F4DAFECDD6DF4D93784CC899B527784DBE0718050FCE1 -85BDE3F39DEBCDD660B2488D23AB1CFF87B0546D02B48E7B7724C9E87B71BF34B5D6640E0F6ECE47 -B182D41C89461F712849C6CFDB7E3F5EBC1ACDD12D65A422BA362A8FD6CAAC5104CCC5AB5FC04A46 -E4309ACAC83D659DDDA256CCDDD1BFF9AB3622450C4FBC89C82214F00C42FB0311BCB1B722A691ED -839CAF9024FB1671F18E4639C96D84718C663A4341DEC037175C6BBD288BBF5A0478298CA726567A -9B74C32A527339C666A294A17F6821CBF243D13EA4B1603C292953308B566653423E7301A032E5D5 -E2B93F1C1434893633DD19501AD12728B5A1D9D36635B589FA2E151140B543D7C5E469AFAE8E80C4 -FC1D9CB6C3823CC1BB7EE40AECB58CBC1465792226B19E0FE79235115F6A3AFE19F98C5DB63D372D -D7C041CD940F4F79F2474D9CEEA0334FA04A97DC9773064895CF11CF73F11B4684F06E48F4469F6A -1AEB2CBBC52994DFAB3319DCE3A0C8C2EFA9627496F8CC84D3DF3BDC4FFCB61672780F294F453278 -AEB9262E66486856D37B7647141A82E049364ED3D03F925284A3F1FA3DDF4C0B48B3FE22E7DF9ABA -239D33CD300FFA8FD4B96192BD568FB18D325CAA8E1F1FD4B27527417B034841FD49E4A77F217062 -3CC8B22101166D80361EB15FA9020D24F61007B0A8274DF9DFCD8E97C85568E76D34AD5DB1779B02 -F034A69CCF9D4EBAA188EB3017EEF5B22A0A552696A574907F695098BD8A4849D5C8311F129447CD -7A3CF88B8191AEC0AFF30A38A9AB8135608A7829207A7D242F6E1FA7DDA19F5E4C28560D42DB4405 -77CC0C5F5803EEE897103ECA0BD944E320AC26553BEE7852EAA733BD13DF760056B2F5BD1243BEDA -BC3C1EA0531017D74B47E18F801A60074D6DF849FD0532234545E5B5E112D1E7385341D39A89551C -80DC2DEAED5D5DA2A4BE5015D297324E92BE64C68428132E6EC654DD4BDCC6640C68835FF8A05E09 -9604B8CD43D3AF2B2FE10C8AFEDEC5A70AF8509D12F662338CBF166D9452CD36331758AC4F4CBD7E -DD52139AD27DC52569877FE709F297444C4F31899D1945C81B14ABDECBF31DC463A4148F04EC4FB9 -703C158216C0FBE65CCD450043ABFD4E65BF8B28CC148252E9F3E797EA0B57B8721C94CBC2EA602D -F2C57E87938C887A382D2659226463BC7D6A1DA87F4A341A59BEA458177D3F18D1213539DC0E301F -6EFE0111FCF6921368BE17CCBB7428127E0C059C2C5ADB2A3F0197F0CEAB77FF7F3C027A8EC3EE76 -CF5C986EB47CB60561C773B3A2DA47B5A35394E29373DBD5C3FF4C9213A89AED77CC4F3FCFC49EF6 -EC7557C521979A546983C106B3627B5FD2D71CC5F08A32BF49332A89C5DA71AFBFB94C949A91220A -B1F885C981423AF93F73BC1CA4D92D9DBAE3EFE6A76E2DE3D0F74FD3255820636E3F1A6B7C185306 -23C12AF90CDCD2C0A728521E9B639EB6345D1DE8FFFC3B19C72E7A93823DFE3115E9E7BBBEB28CB7 -3DB121AED8920D47D8CC08EA2E472E39A4CAD5881B5C4204F2B732AF9D5189D25ABF413CC78714CB -01B1D8CA5565169A919DC481F6D2E67F1D490AEBC5CC62A8F62C1A323EBB55ED35AA5C8D6F8B970E -93205C2701CF4817BDA994FC16197B469ECC5F5E9DDF0FA05640C2E571849571CBD26402B1EB1E80 -3FCF423345007B9B52B13E3B034E8CB3984B925EBFFE719ED4F39F3D0E3343316A6FDC26BDBEA88C -4366D3B2F851D2B244CC4408251AE2C77348CCE9DD8BB9C89800B572D38C5D1CC34C740BEEBB5DDB -0A8BB251655FB989840D23205D16311A9FCCF7C85F6DFFEA9704492A4E7A8F6C0BDC29745AAC2ABF -AEBA02B0E7AEFEB92BA63AB0DF844EB09D505C3DFC1058CE42CDD8043B76398401E1DB862FF9F76C -05E8BC6260A4443CF494BC1755913D51745BF45ADF2F8C7A9546D7EF4FB11E9D94E4539632C2A396 -06D04480EE459408D7A2A869807A4C01881C1BB21C296A402B5E6E07093D833C3DFF075F4DD426EB -87B1B8DE16C146DE79F52F5943015331EEB852809CBB8E1D6460AC4D176FE96F8D19F6CCB22ABBBA -A27C4497D91312C3CFB5BB913B314E43D2EC6AB6897BA7C34CF2CAA6DB4BD69EB5DFCEE0AA917D69 -50E36A68A4C22A60DCC69379D47544A58D640EB10DFE120FCA843B588CA8B94F7869F97609A6FE03 -AC86EC1F7CEAD2EC8E81977D1B946E459DFCFEFE65A7BFF67E66F5F78A45D8DF65AF0146DF74E024 -FC042328886CC1DD7779F49CDBB750345CF83CD678A6A8897577299DEB38AD665DC4F21CE1892A18 -C256F318107DD3E9245C1AD3BC93CEF7B7BF057E33EC9A3F953251261AA3D1A8347261E70A46F777 -3A84F3D4D1A0DF6DD22A96429349DE0D180310E17955B10FBF53220EF6483D03C650A8D5C16D63DA -F65C21ADCD6C2D0B5D4ADEB2F5526AACF7CF42F9A8BF4832FB2D4F73F3D5FFD984B572232F87BD3E -59133ED3D2FA19F7856AD812515C74F7D851574019C532C25F8E163E595FC9C83E3E820C3CBF690D -A62578A980FC0803EB6DB9B1E90E3256BD4650816ABE5EA86CE65C2EB418D0ADDA5F3EA04E17AA8C -4536CC471AC20236E66ECA3619F161DFEFA485386C30EBB86A7AD930FD0AADF2DA69DCAF26C0F677 -206E2030E3B15B3662C0AD03DBC1636EBFAD1F2F2C37F5FA9856B0198C5B1D80B69C5EFFD94CE071 -5135C649C26B9BA1266B0A5B270CD08A706166C0B320915C87B27DE21DEB5D7E4806F6E700B7A06A -4E29B629CB40761983E9CA8E34E869ABD04DDA190BFE5A6EE8B22D7E511B84EA584A84211F27AF89 -18DC5AF8A1FF2D360B6BE3CA8E66BA4CD2CE6A25E7E89406684DA83FFBCCCCBFD0844FE3BECD7DE6 -7764C59C022DB1168D585FE25073FE00E30218D1DFE115CA1FC606AFCB04F2A082EF91788B6BD096 -84DEA31F20034A91AB9D971366F97B5009FEFBF1EF0AD941654081B1E8F0B2EA495069A1DDF11DC5 -6857D29533DC857958B49D1A0779732819FD22E437084BD9F3C4F2CDA4D12CA14431937AB63A03F9 -C040AF1D801F367ABDCA7302E18A9050D6026FBA5A5A7FAD44E31593173CDF277CD737D1CEF59FE9 -684252BC0DDD00A80E023B88222494C1C8C0884230AB11D1083225AFDCDBC1E24D4AD5FAB396D2E3 -70E44A7571B230660D510A5076D8E35F7DB72C0566DFC119EE1B8AC3C0406950A3C4A4DA36BDE297 -040A27F70753A87E6CD593DC6BE9962261A99AE5949340C5D45C94A9AA3DD636CE8B497BBB812345 -7C824F443A53B3EE595C38983FE3E07DBDC6ACD55CAE8BE1081AFD4857A5F52A3C925143507A3C37 -F1992CF72ED0D4C48D94AE6CADDC3BC87AC3A3EF035E02181F78449E4B063B0835E827644051551C -1603E2EAB5875F28FC77BEBA6923428D5521C698C6B7F133B0F689F105FDBAC30A8ED2F29F0255DD -F8A037B81F04EDF004CBE639C8DB0F94D0C5DB92D34D66C2FED66CF8B895AFC4E659D08388EA44EA -E83CE459E5BE306750A682B627802990037157339BF142BCB9C08FAFDC3C3FB16DC3544F62C6C7E3 -3E20CC4FC7CA21E2C3F6C546CD78DEE348F1A4C8CB548EF20C049678916771D83ACC9B7B22784AD8 -580134471A3C79BC86B5D6D0D305C32E6204274351C94F9DF45D9B2AD5B5087A89F90D6AA033E4B1 -D1BED022F36147C7ABD2B73134DFFD50907258E610C3B20949E141172B1C6A76DB238C375021CBA6 -645CDC26B717428B5A9B4D3F32A4B1E22FEFF3BB93FD889E1DEF8087718D5E3E650FE4A3330DA9C3 -7E9EB499DF5A342D8BA4C0A033C3347CB25A31BE143ECBF91384F2381E323E7FD3A82A3197C18905 -3200AE2C86B9D01AB0B289841EA7E9E9A26966E0DEF54DE0B85D8DF084B8C590081E444BAF1E1F60 -670FA12AB97159318624F2AF1B5EC7DD83C1073A99398D2143A52D10A13C201FB356BC9E90C63BB0 -BC2D4C42AF4A8B9C8C4D58A1B32E0597C63B3F8B3E893BD3BE8C60231838F1BC78E73A6C8CDD5E7F -2907F897FC8EE99BFFDA7338BCEFB5AEF950E5549ADFD207AEB15846B509FC57989883642498A381 -1B8E5CDE69C05924EFAEC232FA4CEF302EE3251366ECAEF57D25CFA3B4A9E6397D996F421C900BEB -CF73B038FE7B16FD0A1172AC2F40D19CE0B02FCEB8BC47DA5344CB933C7FEC950184F78ACB32D3E5 -E290E84BE753B9E7A7BFC4416CCF29D023760C06CDDEF2505806A65E1508990529245059AFD301DB -669D41BD72BF7A80A9DF66B876B3553FDF4DD38D15289AF7A1AFBC53FFFF135A6348DD784AB42A6C -0D6AA330B069607E2DF3CBEFCE79D6F63E274C9E73A33EB85246D5EBB986BFA923DF68B2B8CF82AF -6C33E785F35B25B1D1D614DE85A4F4510ADFE42D75B5FA5408A59ABE53859E28B3D000EB9C6A7D2F -67C91DD14C895BA87B9CB57B851E5193FCC2A443AF85FE28DF6F39537F23A058BCF81DD8C04CB2C2 -5040300F4C55975E856DCB4E21E2B5481BDCC05601942FB25BB8A6B6F93E2C2A33CD478B44655657 -C557EBB080179EE5D98C5CEBE0B25BFDD952FFEB258014D7A5BC4BCA4F1A23BBA73C454B12960451 -CE1752401B0151CB2E01D5C72595095EAE91D8D3BD55A54A2AEA89239FA176FA7CD6F16BB0733EF6 -CE6E77763A23AAC77DA88C8EFA7BBB2991E472FF2075FB25A75ACFA70A04C28764F4AE4C12051B25 -B120CAD2E3044DA35C1F94135DBD69B10DE147321CBBDC814CE99982AC1D76CE3D3330E41AB31F3C -76BF89B95EAB81AF3464C732D5B1411D97DB36C9063537F64756F205B16ED7058E2CB1D6946C00A1 -A0CDA9EBBE924BDA6C7D7B605C514A98133907B793C74CA858E82DA3519188CD974B34DAA74265DB -5BC8550D5F0B1173ACEB87458BCE2AB1F96996C811699A0FE4A9B849D39023725E2B1EE7E426D30A -6C5C75AE6BCEA6DB41E4EB2035F7F924E6B9F0DCD00EB2BB014222E55FE387FBF5B9B7C04F4688D5 -AE3529FDACB38B5EB0AF5C3A874C1AA6B17CDA8D1E22EEE05A3DA88449200D3D0D002DB86F6C51B3 -37C8E19F338E7BFA01E1202612D50E210140947D5F350E84F790286C3F679A5D7E43BCDC337265C2 -631527FD62D598B7CA1F5835C0441881B97F5197901ECDC4F195BC665A846823D2E41417373F8639 -567B228FE7B73D781F07A361AA49C3E9D80FE5B2A32C4C1E575D194E841967B08D10405FA44EEE28 -47DB9372C5CC931E50469532F1BAF577F680BAB4E30B7E1CFFA8574ABB679789F69A8A1BAC07B7C6 -4EF5CE5EB00E97B36FBEACA9BBA4A13B0293D34BDBC77AD1FF88E5744AF009823BC262511C4724DD -585E7E17D90F230F7A5861B0DFC42F0B4E49A04EE0EE4DADB908479DEF8372F334C53D2BA5D855CB -39DC7C9550F9D0F7F77E82D5A59FBBF34BFFE92DC9E6668B68FEEAA4F20053433D6749162BBAC5D0 -D428DCF2D58D49B127FA2E674EDC7D3613B1342F4D0ABD7F4C5B049FBF78E804D5F16505AE7EDCBF -4D6FA08D72890F5D55199034572AB4B0C9A7E7F6F5A403198864ADF113CAFF5BF9D4AB5B16F81D0F -C2188FC80875E10034D12E30C0364F8F72797F1AED525A2712A40D44210B813DF5A29C84E9F6D51B -1D60A5F6F938FAABF878D29E6AB252D95D05FC1ADF5D4CE1C9E585219112112BC6CD5C766411FBD2 -2731794B5DE0A27AC57D3C57926807469C360372BE529098C350EFE2154B87F1205A57A0B04C5206 -CC4FA66B8793BBBE492CC3271FB4F90A28D0066E0D7F63B8DD01549A05AFA5482C29560ABD628568 -75CAC16100087540162473498C14087B29B86B7BFAD693E81765CEC781F3FC80E9C7B410E9B55B88 -114191A1703C638DFBB469ED1DD8254B1407003A319CE74AD419B077F17047A01F0BC0AC8507191B -F72D77D9333C9DA8C9DA733EFB5305F49CB8C7BC451321ADD7D896395D269DCDFDD084EB3AA70338 -6C0697E962929651164135C094D9BB1C9B949D5EEBD3BB17F02C98C813CCBFB23C2C26218A2F4C63 -9A8B9DFF2C29406037F91938A5E1227310728428B56F48108CDEB33BD3191ECA89F947271983DB77 -6B2BC897A30EECF2601EE3B2A6F0E135397622AAC1F2DF523CE6E6BC720E13CB530CEF4AB9C8273B -D3D81563AC8A8E6C44A195112DAF824BC7A72FCDC4E129A480717BEB01085DEE65EE4344D0B41EC0 -BCDF842566B1D9F5353B1F6A063FFA6CDB06EF634C8BD5A7A63F991D178F56EACA653DD67685CE49 -E98C7554745A4AC533217662D23E1D6937135D13BC2208EB8D50560A2BAAC319DFAE478B6BA4CA5E -DA20222F0E9BDB0806320ED1665B54A347DE0C42E9F77842DE4D188E7E824EB2F0D7AD163F05480A -7FA99C5A603BBC5DBC843774CA66E889B945054C0ED0B1A4BB14324EF901B023C208CB95DFCE9284 -89789690CC45BAB97BE449F8E2F5AA9276C0571303E9788C46E7F789555BFCDC3FA9ED8DA8AD9BA4 -8B3AE09404664391E63A989EF1E24BB464043AA099E4F2D796E352EB277106D8D81BAF2F8562EF46 -BCFD1E0047E8018CBD973021DC1C1D821AF03F083F0B088A62EBCF2BF6C5B0FCFA441AAD1625FDB8 -34F943DD47A5A42EB3E9A5B49641F797C288B799A64897F1346070461B6D535E0C4ED099199C387A -3176AEDC7DA7E7D9E118E55565092A36F7C74ABF281720C0147F4E4F37D49436466C61FF12764E30 -43D8A6D027E70537164F0E7942F4ACA42BB2CB136177EF7197E76F49AB403F741C0EF902FEBC471A -D6C627424320A8C3A1F04C310C511B3F91C3937D9ACF459999C18A33F2C852EC38CA806599C728C5 -43714018C65E2C5F430F6270AF52AD71ED38813B60440779455F9529A4A1623CB9F5422B9216F9CD -BA913B9A1CD95DA225E254E8101216085020660509D03A034B5D7E32E3DB5E5962A9A27711D4C3E2 -9CD84057F7D0D7E8000947AFE896F8523253391D2E11FFFE523366B05C532D5629A90741EAB3D4A7 -31D3F6D4F03FF93233DDF88BB1913ABA22EB9AA6311E3144381DAE29BCC8639958EEE59ACCFA06F3 -5DCCC63E0609F542F3EE5DFB1CF718CA3F328455726F8F65E23ACD970E4049225998371B63E35AE9 -8DC54D8329B8DB0901FAA63129EDE21B158776981D4D094013C096E9CD020315D123C03DEBA21E97 -E4B584B4BC0AF25F5DCE53C2DC0F3E61F99BECAB40799478BE7F5AFD7F68E23EF50AD6645C967EE1 -1206B6E791769428ACDC370D64E4F2B3972E0E4F442297199350663D6E772FC6777A9B9DE215273D -082CCE4E8678FE9948DC8D5B0E459CD02F1645AC5620F3571A40B4D5A17DF5CFF48B6C843DDEAB5E -BF58FE13D7DA08E8AA7902119248B3B151DA583101CF80853B0150FE05BDEDBFB50A7FB0F65728C9 -3B9DF48CE8AF1DF1FAC25C1D58E1AD30274A00EB54CF2F16029E1AC0A0919C0655474B9A6936AEE0 -FB74BD185FE7D70BB84786997D34A40326A74356A4AFAEE67B6B26D1C1A7BCFF8697B55C816CCD77 -312C332A55315DC54F9BC0A0F12500E0A76B3936292A3DA2DDF5AA8CBB9B5DC32EDACC4827D684D2 -74E65B8B76FB2C2B19F7D5607523FA953E34BB39032C05B1C1244304606C55660D3CA8607E764EA5 -B03DB7FCAB5CF7788C6E60EC8C449BCAFD90BCABA4132B6CBCCFF16784FB59B36B77CF0A9EA572E4 -CA0A01C725A6CF2E4500CDDF5BACCB9094D48925434F044118CFDC2696AF5FC0CAB3884107ED17B9 -BDE0C0104B1292A1F8C99B06FC4A6360B24480BD59DF0488641899B0F42B1311B582717BA7ECFEE1 -4143654B5371C8B9B2D80685AD38D897AD1E64875C28C7020A84FBB3A3BBEE16617DCB9BC822B7C5 -9C5A18C0CF7E80163ADFB7AA03B7CDE8497C1697D90F2ED90F813095C5B91657FC294EF0E341DB33 -92ED860CB2E0AA09293D0F99AE9EB54C761CA2DB1E51E1CEAEAB276C7BD916C68510D72D9A67468B -09B3C39A7815628FB126CDFD5EFF59CC8184C0D35A5B5960F824BD175495DD3EB12A4E96008CB13B -8C5745303E66CF8608FF27C4709C1D854EB79608E52F068FEC0151A74C125EDEAEA555C198FC0802 -7BBBB802835E1D435077AE4B1CCDBF722354F6C572BEB1376D3E342195FA80AC9722EB2F46E44DE0 -5F5A227B731B8D4A4B6EDEF04AF2C5DEC2EEF8FF48C5B18710ADE3DBFA0C956505B6DA9CCB7CBB83 -4DB6CC754948855D833670FF0AC42A4773FEA8322BECEE04CA74AC2D66855132D11A51524488C547 -71B5B7A512796D7D7AE0F9C1FBC9CBDBA0831074F4D200349D0CA40537B92496692766F020AC43AC -01DB8B2AA2EFA9D21732BE3A315F6CAA402BB2E61D40DDEBDE11276D90C2C601A935C168BE600464 -76ADED15087D54A14C68EECBBBB590927C1E10D291C9285334CB0C80EDBD392BDE4D535EB61F8E76 -41F58AC1DF5B1C5A5D91E3E27E05CAF7EC97ECF0C85B6425197AA856521ED701E5AEB82A7F52A8BD -7DC97D5B3FB5C99A5DF84D1BAFF89072922509D76BC6EDB15CE5F9EB8F4154BEE1E82020240283BD -C83A8E49AA9A2649B7955D5C058F2818A63BD0BFE7EACED4A49063C489A626277AE1246F721C9926 -E2A2B6C31045FBCD235F3CC58BC4DD6C57FE998EBD1E9FA5154652BE3A1685BCD2EFAA079A3293F7 -8142A6473822FAB627927EACCD61B3E99C3077103D2D19382BC7EE15BAD0FDE489602D055A01DBBC -F91A566974559D1B477C209416887053169C3F8F59955BE4DE82B60558CC9AE15602A93F029F6B43 -29E0E62A03982DB32F5229714EFA1491A7B24AEFE18FEBC2C93DFE50B3F641B51BDD33DA38871BF5 -243C17502D00AEA2D9E9734E80A96788D4CF5BC12A42BC386162FC88A7435EE13200C1C2C6CCC5D2 -1A03941007B4C4291BDB711446CEAF27148104BB240357D5EDA0EA5A5CE27D4A83909D75BFC05D75 -F10AA74A6DE37D7DE15C1DDA3AC3045DA6CD48323D904E716B445E5E096FCB379353ED70CF4B6FAC -102C762711079EFAF13FB74C9B47AF75F3F6BDA2A4647D2AB47ECAB64DA6CC01479F618E8D2D0A36 -45445E8744683CBBC560D47C98078B84206E90EB839B02D37C852B8E284463D4E4D890203C3D5B20 -352110034EAD6BD7F41456B807E1DB1631A9D499E52E9D9853D86728B1A2E511F40F8CA1E4724A0D -17ECD640B52FF6C66E28693D89765FC391612E5889E77423EC85CBD0A038B6BA98B607701DC0C4B6 -6B3B28C7790A1F1EB8D051DC98276DD9CFEFAB3F65C1C928E48A060C992B392A43E56EAA6DED896D -EBCE71F8245BE4687F2F1B8FC0F43ECE8DB0BD0AB0811C5CE73CBE336023A0D66168B34A95B4B0A7 -50B3BF1D197E3C042C7914FA731D7831AF798E9429571CBB977E6258244E84701E5FF91D608F98FC -3D68A4EE5B81D5FF38B6C184F6118B875F022B4CE207DC7B37E1452DFDC591A3E506AE82C7E7BFF0 -011B0A3DBD616A993FBF878FB03B6C9F2055A2B095D29361F8253C2623653687FE0AB98078F6AEE5 -FC2C2BDE0405EABEDB3A33EB7F04CB6837176245F190C6BBBCD64522B12FE7F9CDCF201A1AA8A19A -7BBC4AC064B4958F44AA0F8DDA23835AD28A1FD0EA105DE2F395385DCCFBE2261DC5A89A23AF606A -3985E5038706B1FE0910400E16BF008F250F3BDE3AD806C735495D499F16F99275010478FD2127BF -7CEDD6B5BD505FBE9BD0065B4A7090C9D27CD5B36C3AD33E1B31EB6D44E375003B51B909DA50BD18 -218418B3CD22B43278B144BE78406EAF16C7DF6B6C1C6238004AAB73736B38E168441DC16F9A5CF6 -0793A18633BC43D78674D12D38CC979F7CAADA6EFE807CEA499CB9FE616496682A66E04BBDACE1DC -112B2156B9B0B20A58A8CB43FF0EEDB99805234B9A5789762AC7D65F5A319C33F4F7438CD15E06BB -80A7A97E976E8CEC23F4C646A5821880A82B2F1DC27767F090997E91488BFA15064B702F864FCE65 -05D6CEF87D2A0A12B55BA189AF269811E3B8B850C8401F3906C080D32618D9698A766732A40A9FC5 -A94E5BDDA3D028D823D6B603B6D17DD046DE181FD989EA0F80B4CA62F7973E4DF5E032A31FE6BC8F -5CDA678D4A72787EB8253EA5882C337CDF9AA3E1E7D9536DD09B047CD8962E773F72F6418A3AEF5A -289B3406C152A50CE7BD4B493FFFC27F6AA52F79EA67E362FD92559AA4F94A2F787F6C735DFADCF2 -F08AAF98B80C53CA5607A94F25F04AA65A70A75937840E73055B3D65FB054C63E2E48E68488C9315 -A13EE949E03E46723C11CC759D222CBFAD2E1A87CAD779B23D38F7E2F660DE1388EAF1CF4D18994D -75C6CC63F187FDB949940C18B537A0AFB12AC5F67B0283CA5EFE2E764C4369104B9D3B06490D1244 -C41D6085C85F1106082EC9DB84586230511C05C82412D2CDF3DAFBF4759A775628878F997415296B -C416AC8352A6C6988691FCB831CF95C10BAE691ADB3BA2918B35924BD5C3ACAD8B137397B10AF82B -479800FE16D472CD0CDBDAAB4F882A0649CF561004B8CB7CA32EC129D0A415BE6CB91DA2B65F44E8 -0D138808A127E851A7FCF927E99DAA0EA2D626B77A16C72E37F058A3B882FC4955DC8CB6312434BD -3BCED75780B13590BF4FE8D64ACF0371F9FB1D361B05025852AAB9EDA1A0C997CFA58052C454FD45 -1E6C1F194F4D363114E312F6DC35BBAF357A32CD200A3DD9654155134259887D677ACC44F89AA401 -CA27282DF7DC3F2F04A108CBEF2558DCCE28BAC2D87B8D5B7181EA927F61977764F882626D4AB338 -D95C9477C54E9C36012A3CFFBE199EC8120A99D2D70A21F9D9A0354E4EAC7947990E8A6E0601796A -AF6F14E758CABCABDFBD8204A8E748A3E5FEBA570D36E2BF474C0083229A63F96114182321B2EBE1 -BC76DD193724C4588C1D39D184C332FAEAF4C629F2B3B2F49996E46AA6C9F497428BEA52D58876B0 -DC07B460248BC85CC16773A5DAC36CDE8B152D96057F4EFAAF8B1DC10022038577368057699B3A37 -178A9F1F6C6CC60BAE820B7ADD0717911BD23A6DCDADAFA32473491AA80CFE90F2A77E24CE2826FF -77B18B869C33FA292FE01D6477765044C7D14A548B28B1360125C6933F05C58B0889390537CDD16F -8E967E0B38579449DFC1E07389B7069AA8594C5103465D5041CC929268DE863FADB6925B350AA94A -27D421FB7FCC81C6B35F906F12246B7A5140511A97211BA9BD6831A508E963FE8BE961332F557808 -488F06EAD75E86D60DE3FA2425AE8439ECB9112BC3E4D73747C1C8E87A649919827049832DB0BF6D -A8C85C9A2592AC002809070900ECAD52A56F1BFD456AFE066509694EAC075788456B0B0BDD7C192D -321E9FB6AADCAEF00F570F22CD4A5322FBCE8FA98FAEB681940895426270BB4319C11DA67D88552A -7373398AEC5DA7C9CAA9F3B34581C6E968DAAAB2751CC012199DD897B448986CFFBAE4D412BF9ECB -F46742715A9569932516259D3B3A5431CD7028E42FC751C434E2B714C718202BF02CAF9B8A2075DE -922322EA7CFA605C8376FA958B8FBE43031E1026FBE6126A3775F643EA67EBBD97F239FB3C435526 -75CD08B19CA5EBF53B40D728556B4481C7F73EC71CAB0F89E34D60C69B272FADC22E8E7BDC6210DB -09FDD913E209F49FD28E8712B8508904620250746CA3B21B026EDAE60A2822F59E912E626B93E0D2 -BFB3230DFD0E54E91A1DBA25A609B64D41ABD897A5D21764C351E85F9E87BEAB9E645149AD32AEEB -B3B1161032C701647115F98C1C2AAECE871862D91D321AB90F3E923B1FDEE00D927F897AA9812373 -6536E2E0700F10053D7E6C589BF66029D794883EAE4C8228941CE96565B50D48887B5314A2E55379 -59638222A6CA54C77CBABD460DAC11B063519AE4F50D93DE41763BA7CFBF4C7724360E750478EB62 -8921DAA065858341958E4F3EB5966C6DD77C05EEECDF4B5F6CF19AB507589B4219377959BD258EC9 -21C34FE1DB003F7D0FEA3E2FD6F5DDB0A2D62CA5A2CD3C7AB457DFF25094EFE04A9E1B9CE7AE3F30 -026B1CB039228D309A22899F6E9B9BFF922E117123347967D7C62C670E2C74579C35989925603022 -C17B1DCE378031ABC9B4B437C7B6E64620932E93189754C01D4B280B8B08699B2CA953AE4823BB9E -E34133C5C95B3290E1BF010705AD852C72BE87291E1034B09F44A95B6A2F83FEE8841DCF661770AF -44D0AC7F9CDB280939FC5D953D525E0B41B7BE188D5C794687330CD770D24D9CD53B895A253004E1 -8A31BE4E82B384 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/Times-Roman-iso1252 /Times-Roman ISO1252Encoding psp_definefont -/Times-Italic-iso1252 /Times-Italic ISO1252Encoding psp_definefont -/NimbusMonL-Regu-iso1252 /NimbusMonL-Regu ISO1252Encoding psp_definefont -/NimbusMonL-ReguObli-iso1252 /NimbusMonL-ReguObli ISO1252Encoding psp_definefont -220 265 moveto -0 0 0 setrgbcolor -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<636F706965292E> -show -295 383 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 383 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E> -show -671 383 moveto -<6475> -show -763 383 moveto -<66696368696572> -show -934 383 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F5352432F7372632F534D4553482F534D4553485F4879706F746865736973466163 -746F72792E637878> -show -370 443 moveto -0 0 0 setrgbcolor -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<706F7572> -show -479 443 moveto -<72616A6F75746572> -show -653 443 moveto -<6C6573> -show -726 443 moveto -<6E6F7576656C6C6573> -show -935 443 moveto -<6879706F7468E8736573> -show -1175 443 moveto -<636F6E6365726E616E74> -show -1411 443 moveto -<6C65> -show -1466 443 moveto -<63686F6978> -show -1595 443 moveto -<6475> -show -1662 443 moveto -<6D61696C6C657572> -show -1846 443 moveto -<74E974726168E9647269717565> -show -370 499 moveto -<6465204E657467656E206574206465206C61207461696C6C652064657320E96CE96D656E747320 -766F6C756D69717565732E> -show -294 601 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<23696E636C75646520> -show -520 601 moveto -<94534D4553485F4D6178456C656D656E74566F6C756D652E68787894> -show -294 645 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 689 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 733 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 776 moveto -<23696E636C7564652094534D4553485F4E455447454E5F332E68787894> -show -294 820 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 864 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 908 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 952 moveto -/NimbusMonL-ReguObli-iso1252 findfont 42 -42 matrix scale makefont setfont -<63726561746F724D61705B944D6178456C656D656E74566F6C756D65945D203D> -show -294 996 moveto -<20202020202020206E657720534D4553485F> -show -747 996 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<4879706F74686573697343726561746F72> -show -1175 996 moveto -<3C534D4553485F4D6178456C656D656E74566F6C756D653E3B> -show -294 1040 moveto -<2020202020202020202020202020202020> -show -722 1040 moveto -<2E20202020202020202020202020202020202020202020202020202020202020202020202E> -show -294 1084 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1128 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1172 moveto -/NimbusMonL-ReguObli-iso1252 findfont 42 -42 matrix scale makefont setfont -<63726561746F724D61705B944E455447454E5F3344945D203D206E657720534D4553485F> -show -1201 1172 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<4879706F74686573697343726561746F72> -show -1629 1172 moveto -<3C534D4553485F4E455447454E5F33443E3B> -show -295 1289 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 1289 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E2064752066696368696572> -show -370 1349 moveto -<20> -show -382 1349 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F5352432F7372632F534D4553485F492F534D4553485F4879706F74686573697346 -6163746F72795F692E6378782C> -show -1651 1349 moveto -0 0 0 setrgbcolor -<20E971756976616C656E7420434F524241206465> -show -370 1405 moveto -<6C61206D6F64696669636174696F6E207072E963E964656E7465> -show -906 1405 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<2E> -show -294 1507 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<23696E636C7564652094534D4553485F4D6178456C656D656E74566F6C756D655F692E68787894> -show -294 1551 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1595 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1639 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1683 moveto -<23696E636C7564652094534D4553485F4E455447454E5F335F692E68787894> -show -294 1726 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1770 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1814 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1858 moveto -/NimbusMonL-ReguObli-iso1252 findfont 42 -42 matrix scale makefont setfont -<63726561746F724D61705B944D6178456C656D656E74566F6C756D65945D203D> -show -294 1902 moveto -<20202020202020206E657720534D4553485F> -show -747 1902 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<4879706F74686573697343726561746F725F69> -show -1225 1902 moveto -<3C534D4553485F4D6178456C656D656E74566F6C756D655F693E3B> -show -294 1946 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1990 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 2034 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 2078 moveto -/NimbusMonL-ReguObli-iso1252 findfont 42 -42 matrix scale makefont setfont -<63726561746F724D61705B944E455447454E5F3344945D203D> -show -294 2122 moveto -<20202020202020206E657720534D4553485F> -show -747 2122 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<4879706F74686573697343726561746F725F69> -show -1225 2122 moveto -<3C534D4553485F4E455447454E5F33445F693E3B> -show -295 2239 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 2239 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E> -show -651 2239 moveto -<6475> -show -723 2239 moveto -<66696368696572> -show -874 2239 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F5352432F7372632F534D4553484755492F534D4553484755492E637878> -show -1843 2239 moveto -0 0 0 setrgbcolor -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<706F7572> -show -1955 2239 moveto -<72616A6F75746572> -show -370 2299 moveto -<6C6573> -show -443 2299 moveto -<6E6F7576656C6C6573> -show -653 2299 moveto -<6879706F7468E8736573> -show -892 2299 moveto -<636F6E6365726E616E74> -show -1129 2299 moveto -<6C65> -show -1183 2299 moveto -<63686F6978> -show -1311 2299 moveto -<6475> -show -1380 2299 moveto -<6D61696C6C657572> -show -1564 2299 moveto -<74E974726168E9647269717565> -show -1845 2299 moveto -<6465> -show -1910 2299 moveto -<4E657467656E> -show -2073 2299 moveto -<6574> -show -370 2355 moveto -<6465206C61207461696C6C652064657320E96CE96D656E747320766F6C756D6971756573206461 -6E73206C612047554920646520534D4553482E> -show -294 2457 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<656C736520696620282054797065416C676F2E636F6D7061726528944E455447454E5F33449420 -3D3D203029> -show -294 2501 moveto -<2020487970203D206D79436F6D706F6E656E744D6573682D> -show -898 2501 moveto -<3E4372656174654879706F74686573697328> -show -1351 2501 moveto -<54797065416C676F2C206D795374756479496420293B> -show -294 2545 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 2589 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 2633 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 2676 moveto -<20202020202020202020202020202020202020202020202020202020202074722894534D455348 -5F4D41585F454C454D454E545F564F4C554D455F4859504F54484553495394292C> -show -294 2720 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 2764 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 2808 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 2852 moveto -<2020627265616B3B> -show -294 2896 moveto -<20207D> -show -294 2940 moveto -<6361736520353032313A> -show -294 2984 moveto -<20207B> -show -294 3028 moveto -<2020736D6573684755492D> -show -571 3028 moveto -<3E437265617465416C676F726974686D28> -show -999 3028 moveto -<944E455447454E5F3344942C94546574726168656472616C20284E657467656E2994> -show -1855 3028 moveto -<293B> -show -280 567 1 616 rectfill -2125 567 1 616 rectfill -280 567 1846 1 rectfill -280 1182 1846 1 rectfill -280 1473 1 660 rectfill -2125 1473 1 660 rectfill -280 1473 1846 1 rectfill -280 2132 1846 1 rectfill -280 2423 1 616 rectfill -2125 2423 1 616 rectfill -280 2423 1846 1 rectfill -280 3038 1846 1 rectfill -showpage -grestore grestore -%%PageTrailer - -%%Page: 4 4 -%%PageBoundingBox: 18 18 577 824 -%%BeginSetup -% -%%EndSetup -%%BeginPageSetup -% -gsave -[0.24 0 0 -0.24 18 824] concat -gsave -%%EndPageSetup -%%BeginResource: font NimbusMonL-Regu -%!PS-AdobeFont-1.0: NimbusMonL-Regu 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file PUBLIC (Aladdin Free Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file PUBLIC (Aladdin Free Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Mono L Regular) readonly def -/FamilyName (Nimbus Mono L) readonly def -/Weight (Regular) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /NimbusMonL-Regu def -/PaintType 0 def -/WMode 0 def -/FontBBox {-12 -237 650 811} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -/UniqueID 5020945 def -currentdict end -currentfile eexec -E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942BF7D6DD84F1664B89 -699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED2AC419FF2B2BDE605B8EE3264EDD6641 -2D4F21C64AC522BDFC7C5502F9C3F3E5592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A2 -5032519D1868816E44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8A123E6A2261C63C769D2F4B60FA2C438AD7D199D8E4 -5F7E7C9A605C8CA14E21FCD81C9A515FB8DB6F99604534D06EA9D87FE0FAA852899C9D0595C7A97E -6C55F79FAC45CD38E87B10D210CE7501E88C8FCD3444354365FB893A12F596AE2C1E70D5819EE0D0 -87D10BF8DA96F3DABD5405D28C4228C6C31BA4052464859640933FEEFD8071C0C84CDD829A9B1D0B -A01F25A4D50EE2EA2B45160CA6333B2D2800306ED2BEFDFE155E9D9F9342EB8D5B0ADBF2460CCC98 -643FB1287CCD28ABA7B5CAB92EC39EE2E918990372B16F8487EBA30EAE88708B6CF33B6C015D8096 -C7CFE2F139F52052E3925C0D50FD64CE68236D59CB83EF56BFC584150EC38065059F3308AD6F9A99 -F83EF4E6CB13855C8175E31417D190D036B387D3952344A950F4D8C7781B307A094DF1ECAEE4D2C2 -FD747BC6F7F9C6BD0E90C19294F96C8C5CFE88FB34C477574A1B1630B8CC591529E59B20794DA32E -61DECDA8ABBD1AE956CF74012AA01D42EE01E861B0AA6897C864788AE59DEF43C493246FDB1ACA55 -4C12594BC7B33657A9ECC9E3D1472EF826073F632BE540C35FF6FB40566773F3BB2204D3A579A08C -CBC844C14B18C350F003B9DA23A570C362D6003893CA32F86F59B829C78EE3188B6E3F7FA81D7F62 -2825C639638DFB78B7AF1F500F5B450FA54DBFA5CBA277C794ECE93275A3DE0B452FDC8DDC2993BA -A42F28A636008CDCB03EBF71BDCAF35019778993443F88412AD2AD0D7155A3944606463266322DBC -0244B07DA1E9C27A27B59664E8566D7A54CC03E995AAD008B0A17E2C3EF61F720CE7F7788599C4E4 -4C709CD5C31B11107F16AD70B17B9AFE2E8CD922A7428DAC171427FFAF51067307FAB0ADB530E701 -FD22DA22C4CD3064067BD4F6089C4B2C87937DD426E4E9D2F60E608288BAC9056554D04947E69200 -61E379CF5E81BFD32FD37EFAC1F61CEBEE551B0851516471A7472C60DF89DAA9EB1DC5A67E479745 -3E69B9E22BAF4E3CCA4192D603295B018C4AB69D18DE52DFDF15E96B557F290A4B8C5B1E7A6CACA8 -1F2351B97ADFC36995ABA43803A6E5AC04A3C93495F6D38106B8B144449C07D1358210F9176E1565 -72363CFBDE576BFDF99FA329DD1346E83F79E06CF68250CA57A68931BC7F342AD295D0CBA17AA95B -B8EEB53EA6E8E660B814E9F857CECB14F44A43288B69A9E7908D55BF19E844359879D28CAEF1C38A -36420185D20DFB32C2E002202800E8EF3D67C5D50E919657CA958B538D537D503444865331D79BFC -40312068D72364503BD0CC84B5F30A74D8B5B6A26AF2DB764564FB65A6BA8F9051AE2B4EA458D46A -4569F30C6E77DC097356770362E6CF3F1661074778EBB44FF7D1E3B64FF75E77E11FE525BB121C65 -46CFD13300CA1F02D571B82A5825E6226D14FDCF27F06D87452A8B6C5DCA658535CEE2A795E58137 -D48E566B69D53A0C3B766E84C51EAA221C46999CC8065ADB2F129D5B630FAB1814C0C33B5AEA0EFB -B6E994D80941B53079AF96D90A0B924F9B0E319BED9836B8F9053F868363D3CA554CBB181863301F -8CB940872ED5FA7BD18CE39218B5AD8AC57D0F752D941076B1C64D99BE0DB86D7A6D96510D772EB2 -4C587F11779BD21CFE5BDE1F29C1EF9022B2B8BCD7F91153C845906722477829C40111D810480F3C -F62DE8DBA7FD86CD236E656618CAF6FC46827FBC4898EA7672F8C9971AFE43E0E01EC8B77D4AF48C -BF1210E98C1DB15C16D149BFF58AB0270CF015B107A3A50F5DC8F37FFB92EEC8CB6778DDB7CE4AAB -C464C4AFF654223006A550EB52485A23D2B4AA7198D3CD54418102F1E9A4FBDE37B841E56F5C2C53 -966DB9B66B000E4588282E3FB80C2C519339F0002D2F83C979EDC5827A3B3C8EF8810A0F9DACB6B9 -998E9AF6551F56313DC4011904CB979AA2D32B11A811BC248141E4B9734D9FB7982A5671002D8279 -CAB93ABE057474628DEFC95D43890DB1ED34CFA8A20BDC3D874E7679A396158E522ED0AB969A4E3E -C7E4474E192590504D54DEB7B260B7935C4E56548A7D121AC1F741F8CDF259EA1B5813175A77A1D2 -D30BA26F65EB765A04C09ED51F69F41551ADF399E6AA2FC09788137BEA4913F17B8EB838C38FB272 -1FDCB55FD65697FF0B850E7D3D1CE266BF90F7EC06A9A0876BDFE767D3A918B092FC78C775F945CF -1F96E859C03DBF630D9A940939654C3549D8F7921CB94EE23D5A0535DE9DF31EA0F937F860B4F220 -A99ADDFC343D7CF7BFA0B803C12C26403F0DCFFC8EA786D0D8A8D9C367419CA8AE41190CE93A8086 -583A1E6C9D70B612C84D87D2EEAA71EC2DC12F4CDE6A821303D5F6A9BBDB7EEDCD289E80FA3B75F4 -7F481B50719DCF4A142069393593B9AF9CCEEAEC56A35B8787193D7C88113E9E1E221D151E093B01 -9EF89F6118BEC4735103CC8003CC5AD1B6727B3226CD44C497DA7052DD681695DBEC3397F9598C91 -77701C73BF0594CE93F23D50EC5BEE2FB9DA1FC966DF148B27B28EE3C89526DD6625E2887F9FA076 -7C127C609EE315626BC14D274FBEA56528DC06A27B2D476D46E9E7916590B156A5DF04A6CB15E362 -45D77021767B6E5BDFCC679670263FD891446C3371B11BB6E1DF60F960AAB4149D7753E6A5C33810 -C42C8BFF4E935003388506F8278BD7CB672F132E065AE684DCA0B9064D01DD620E7FFDFE04F14277 -EFE8E60159BA0FCA3FE2F28B902D4AC275D19F0AC6971EBE827C4A232D87650D2688345BCA78F879 -077114F0463C5F058107B669566F8171E4E284D278405580F04BFFC9902784216E0C9A17AA9B2935 -E66E18A783F723BE044389B7E9D62AA36818FF2EA406C3C1A9D2F3436F3EE7DB8BE86AFA8DAA6A4B -1B84611350D8D27605509612B515E16AA843164D5D0805E36A2B9EF74C5F6A0B9D59A04B55697123 -27F4B1B30E9587CD103337639967CBDC655AA46E80D2CFD24BEB50815B5338E522B3A7AFE8362AB4 -F05D8BC52BBA9C5089ADA8C89529B0275AF422EB540D31A938B8740860756325B966B36817115213 -FAAF92DE63F6BAE1E0064BFBC5588098B61EB83C71F1C2082436D37DAF1ACBE186FEDC4BE7C1233B -6F18BEC5F99002D21CB7864E4811F7AB3C03003E1E4490AD1AC793BD28FCD5EF0E6CC30EF39A08C5 -2F71939B0CEF620DC69E31E39D6DB969049031B0C92EF2DB653D97F370141456A52985076B268652 -FA2648C792780BAD637C4D7581FB2D62011D57E293719487CF2D1F013CFAA532E1C2D39178D51272 -A6AF041440BCA174B5CC902BD7390C7D3695056CB4BD7791F9FB6D88E7A70DEF2C97869F5DBC5BD8 -23C517C7B7C39D624DF627DC9653EA5347BFDA80B723F05F6DBB4C9EA501D862ACE05B9DBDF21B70 -56FBCD8C6D4B85873DCEE6166C8B5ADC0316CA12D9639F361B15A42F00E1D62EDBCA1111972FA0F4 -5758BECB31DB38316F3CDFE1B41748C93ED58B67E9B57ABBED5924A6D53E99FBC9A994A6489A8BDF -13EB685548B4DC6D62DA7426C22227D4D43B6FFC7B5EA91C896730253E8941AFEE588359C2BECF6F -FC415B9EB6D31CCB0F6C7F85853E6449FA6D627A97A3CE8303F148393ADCCCDFA2FE085C6908BE5C -3C05AF00A6F02840206C3253A559AC5C049BDDFD11AD9B118403B84DA10AE3C470CB9A9A2D1D7B73 -2F59F5FE146DEDA60AE750F551AAC934621B4470E1BC324C436303E25F81D0DC3188BE0D6FEC5414 -C20E4CB18952E12CB6423DF7124627ACDE145500D77A97A8BFD9CB50D1FAA008E2CE2B2505A4749F -1EBBB092C347023714055A9B63353AF9E7FEE05BB54C9843698101F79888A91531773830C2C967B5 -88D3ACD2192883D5CE3962D51084FC653EAE2C5FB2DA41DACEFB5C76812D2EDB5B109677289CD199 -8D457FB1023A19AC67295BBC1A9A20A426B06A368DF3C5DD083CB1180D287F5500F2C635EDE157EE -FCEEC5503447382D15C748C1E35F68753992E5C90F900DE54D18F8E1B355D1076ADFB1F3590135FA -D1A36F028E44F48ABB149B80CA9A54614D467F8D71CB310BBC7AC7100261092DB8C5BFD39E0AC6BC -2C9D6CBC3A8C05FF8A74CB21608EC4A4CFE4CBAA2D056DBA14206106044DECF59F957EF8A9CADE4C -9B19D8D30DD4FDE6A9548E50DB51ACA73330142153FC36B69C1C8D5B26D0C689B7040E81AC2C864F -D7C097C99BE5953843E172C97AB5684F35FB03A725A89DBF371F08DDF40A1531FC1B676DB0E1543A -EC6E97D3D2E4AA3D5831D8B3C952ABBFA112352814FB6FAB61A0D680E6640F6AEC8426200CF61286 -F7422CB2F78C61EBAA36D47EC16D7FAF8B4AF31D090CDFA255D9D7C61D46CFB22A7D6E1758E71ED5 -67E00CBD8E8F468DDFB477F091A2F915627F22FF47B876544BC1F03B6BBB98385F009C20BB1AA2A7 -A78674692B8EAC2E3C8069B79E679338DA57F72976810F845BEB6B9ADD32B95D78E5E60F16DD1668 -9C05FD82D36A3115BE8ED494A74DD211D58A2CDF983FCB9CDC29BF7F0E29988FA23560EDF514BC1D -183F3B2A22C09FB179B47E05ADEF48DF02F31C29875D1915037B19407764A4292FE44E741651A8E3 -BEB5F0D972B6327090F664417C84F84FFBF0AFFF8B1D85C822D90730AB4140C42A51AA8B1DBE4398 -4EA8566040EB8B341CCE23FD3F69DD235A080BA5C69AECB9BC732BC2D7D40617DDA6B79FB6EE40C3 -556C7DF9B23DAD89E94054B1345DB8402AE679FC4655A4A776C0150463F8DB2BFC0608EA1F124E22 -1DDAE6026B5E5D007A7E4A0D6B3B0CF3A2669E67C5E4F01551966A7BC48F2F4B6A87E740D8095E63 -F77C7A027F26B52F2299DE5B8A2F6209BCF3D31CB0235F998F781E5CC81E31DC424E008D46EC0920 -2951E5684804A0592EA47D6C788A20487BEA2EC8F2E6C1D7F378B62DB43CA43C4B366F8B4319631C -FE9854F0E10321CFA3B01C873584863BBEFC23C72C05E695B56E8A52E89AA2DAB543834D34DCAC5F -ED08DC51825C5257AE59850D101D84F4CAA1D29FC932F9E0EFFBF7A9A7F3685F61F0490CD3CC8988 -2DB52A757A6AF4C4E67B407BD2316B1C0FFE7DC54E43C87B874F57E4903334E2140B011484863CDC -ACA331175F2CF3D72E0042855983AAF8853D3015E870FF0807014C31D55060DF3FE1FCE157324481 -2744AB51322444632F9AFDA6706E320FFE82B8CBE242A19DF00CE73EE48E25FF49D5871BD3E60652 -298FE3E8D400609E232E0DDC794C0579ACEF89E841B2EDCA50D51151F65E8C1CC3B01EF1870558F0 -BF5743718C3E068617E81BFE120C6CA16E0924BFC2541177D53671CAA3AB641C41557DCDAE1A3461 -47B5E999C4541B08B4AFCBC187AFD653D5B5F8386DF6AD8FE69E21BD0567DF494F736C6A184FA4DE -48DC9F347787CA96E2E00A296C2DA05C2AD9BC423E9CA428D7F1FA12DC9353A302FB8C529AF8688C -BB543B45B2717EBF8F6C497935F4F3BFFD285E0402AB7544B3CA4643AE5A8B5250ED987A95FC1F27 -5B9707ACD0641BD0EE2AE9758494F8D8A51DCE408A38AC20EAF0852D72D84D0C6BE973326793AEB9 -55EAC6FE0A2813A355DCD22F6F2CE56588D1C055CDDFA98878BCEB6A018DB22922D2B600A20F8184 -2E665DF41013CA0947C4237C2BD60A75E2FD1A3FB8C8FA19485730B87461AD466ACB02DF8CA24091 -4FB090B3D2B41EB6B8FF05E1A59D9FD668AF70BA5BB72778953BA55FC5F9F626043450E1D09BC83D -8605098ABEF884639A37809A32565CBEFB3FF39EE53D6C18C58C272BB928E4410E361E59A50F242D -69747A032617C52DEBBF62364AB5A96EFAF642D9D82BA679B1D70FAC10A4EB62FA5CFC308E86368A -AAD7E75948F43598CD1C544A0D4091374D7E88D4522CBE902391641327E888E7748FA889DCE67ADE -61699E7D77763681CAEE9B1CA8837B2F7EF9C18CBCC538C465C8E2DD34616953CCB6030A222C728B -834911C1A179E2C770289407AB28B303E724D97F747D6134B425216A64C6E0B60F633E2B85300047 -E4C90339CE030A0FAE31E830C8ABA5AB3386A3B69267351A7BFDD66356AE5E57FB2994452993E90D -E7C4E260ABAB93C37831856A650D56E44172FECA01D6C7C380F250B82473960D2A2A5FB6B4DA668F -46E624ACF7FA0FD4490F485D640A3ADFC9F8652E7A38CE5799F770C3606DB4B8B947F93967F779E3 -A3C0572F13A5A187D31D7BD12A5C7BE23CB6ED6192086241B76C5BA6983DB9C93E4B208D707D3760 -F03CD6272EF3A4CE89B8E52E6AC5871A3D03EB975759AB4BE239E5EC7842CBB333E692CC607C722E -185D3C39164DD320C6945629C70FF66A5237C0A9520A1FAD6EB9816069351AB0F135D90CC0982B14 -7D2294AE4A38A527EE40BE9CDE2512AAEBB590E134388BB171D0956A7C4566D65A9A041BE6C4F883 -6B3EC3D2ED1B48B566A783292B15B6127920D247D494F070BB20BEFF60640B11B276DDEEE49706E8 -B2B21BB40B7F00AAFC594C492C25DCA774E0B80D82E927448DE2E74A9D0DC7AC9260096EAF187B6C -D6AEAA6D1DC4205B4411122751A5B22688404EA7C5861730371FFAC10F5AFD4727A0E402AB5EA757 -606B75EB86A05E8F774D6E430A1A3FE2A37EBB06700474239FB1CFA05EE44B91B82244C575B52E7F -AF934B04EEB0D933FEB57EBE326D75821C8B23EAA85B583AED4320B7F04B9F2DC591091216FDE52E -064BAAA9C2C9D9714B95A4558C21F3CEBE624B5403B31508F178581AF6863083ED762F1E2E34A45C -FDD71660D626FF8648F5D6C5E580D4765A67FB6159EC8077A9F0A88038C8D3D7C77FF0926E2123BE -874F7BCAF129D55A5B5960F824BD1728ABCFCC51D23936DE9A25C408D786E44C3A2BAFA4423177AD -060D21D38E15E23EB6FFC0B4120E814695D423EEFC2744A1FC81B4DF89D76F0A6803D8B14E75538C -AAD03A72517B86514F6952F6FD619D9E910D980F00964DB325318C045BDF79647F453D4A5CF4E61D -D5359782827229310405FBCF6107C3AD9DDEF9A9A339D5D5A6EB2E7838A0A43221BD62CBDF732DB0 -A638A52016FB35BA7761AEC846A023D3BF2D1BB183543E81EB7CAC1E5970CDC6F068C5EA118C7AAE -528D1396E6DC939112DA4460C890EAD5C01BDC438F5BB734218BA6270ADD0DC1778FD8AB16831D6A -302B814A1A44B07EDC65956C9E6CF4875DF521F3CE5B422F71081B6D69BD270F739095C9E81C0377 -934A8BC6390C420C4E4CDD9CF7E32544C68D884E15ACA3BCC07FC8C132D8FB9D752C15D75C52C288 -57E2EA461A6FCAD90C56843513F74461F18D7164BC597A28AE4BA7C86EE1703535A9B9ED50122627 -71FC12F102E800E0E1AF7BB46681BD2B14B614CEA91B7B2AAA35235DE76C0E113C92688F8EC81277 -D58C3406778E1EC1CC15F1CD9A137C8FFDAAB99ACE3BFC782916F1A877170589A92DC921E6740A22 -B84DC6BACDABCC76E64C79E3A588D80F8F4D376E1B426F15751CF7391102102F0AFAFD8B22DFDEB5 -48AEB5F30B1673023D22054A13391A0EC08DE6E7B685A0D031AABF20B7C62187C0284892D5EAADF1 -21BA28263EB863D5E36EA9C06A77CCFC0E17F593961591F84D82AF823EFE41044C8D606FEF83CCC7 -B0E961E7994DF8A3CC36B209D953E250ADAB8D22D7F2B4E2C9CA39EFA2D93E56195C1560E30A5190 -CC5B17FAEFCF250DF79F6B624A4B917E11C332222FCCFEC4F6A47BD9E75DA9854FC3F7AE554E91ED -DE144D7AEF38A0E3EDB5E5A5626374DB94F022C8CF549093041DE00D7269B7CE544E748439BA2870 -718C08E58FB4A77D93EBC04B7957D272AE1601D41BF85A2BADAA0DF73B0D3841D4839C85677FB2E1 -5F1D6CE592669FF4BBC9C69DBA334DC37706F2F6BE83D5863E8CD6A30C08640AAC4C233684E66B4F -E6B62D4A8BE9D531E47BEF5640D9B5C27D990092BE1597F6995C8A77BE9C18AAE6C1CF130775DDAC -41D34438FC7AD8E042CB56CBF2944932EBA7D053E9376FF398367450E35A1945FE23E05C921096A1 -5454721FFD0F429A3E06DC3ED36F1C170BE79C66996EF8337AFF85B90C5D3A4A94455AE9FA32E211 -7A63E59001F052D5F6223125BFAFA40901E98960ADF7BB886729DCA82FC3B8CC52B37FF2517299E1 -D769057F8154FB95582F02CB0BECC873A9C71796ADBD3E91324FAA94F2C41CF57C30B5897D031C02 -D256C909E080E70BFD1F32E69EF67031138C2DDCD1A8E4B65E485C23C3E450ABDD9815512D6F34A8 -4B9DB715DB2C7A93BFB424316E1AA44397749CB01088428F149A3B4324737ED9957FD388248462AC -1B2610D72BF5C073ECA567E7385CC959E37CAC7E05470160FFA5A9F63B8E9B082937E911586EA165 -374938F492EDF28CE6020953A5B5CCEC7737F9D9CC8538C4339567AAED3794ABA3B9F4EAE65466E8 -E326F6C399B36355935FBDCB9972F10B13494DC25097FCEC5A6398F275C8C151558E74C5175F7BAF -4155E36B733F75CF9D5C5979B0764F14D8306E06BA24BF791141E404C69F3F8FCCD91B9C58C2C671 -AAE7D4F9E5D6414E46ED633A5F78AA5BF04E652246A066EAD9E582B181CC196EA2D3CFAA383B5D0E -4CAC9336E119C08CC6AC55CBFBAE147C623B400453BBF447E96DE036FC025624384359EED7C7D5F7 -858DC0521377CF647A157FC3F188DE5EEF094DBA125510FDE34C570D7BE76AB5DF0A28BF45DDAADB -EA7EEEDB936332DFE93081E0AFD3FDD46BED08D6914B2EFCFDC41662A33B90B03D76D34F48D30FC6 -BBBB600E90E6AC7243FDF026762A44B4D6E4ECBEF48C9D7B696AF29EEE063E557D8FCF0F09E0136F -45D17E608DA36E59F2AECF8493F8D62536119B5F7E1554DFE3F6E8D7C9A2C6F557D18B4AF92C9F6E -050975C3B5C54F9B5F4E39D600B6FA2CD6DE203A174028CBB2A201AF126D1013C229BB82CFD013ED -199D01E51EE2780FE896E01C63C655087A3E61A7F1029FA5E97EA1872F1B45F22282DDC317E17926 -7368CB52DA9444F6055A3C653659CAD2A1D8712BC2B1B32C1DC6906D957FB88524EE066156ED6BDE -B8D832F9338F9912E29A250A8C4674E667C1C278B677AEC9972BE83CBA3FB779893FCB8F81A323AC -91474BA2A2334A07BB5628E905C518E634F6761A3289056F83D5DD7B3890987EEE1C18FB2D379CC1 -905F1AEB3B3D2AD578F0D6C845D2D40C4BCEE3F71C90E68E5417BB8CDDD878D83BA80AD8485F4067 -E5C3CABF28AB56CBB219C0AAB8FFC6C7E192BEC8CBCA1459AE4450AFCC81B9548F40CE2622E5A7C2 -81F74DCC02DAD57EFD92D072318DDF05BF42F1EA8163071E23949B0179CF7DE64677CA99B23CB926 -B3E294194EC13397EA1DC9A5E1CDCD828156CD71F81B64167D4FB01E6002713BD8AC6F82B20CD369 -9C6CA4704DC5C65A2D66EB155B7AF1C9BB46469416FB49C1C7E17A30A5F045271D7DF3FFF2F42C6B -470701C381E3456A500C6BB3D0E47B4D91C5F34B49BB6272F1F8698B307D89EDA3A1565DAD1C0864 -627560CF922DCF5B34C67860352390B282F95394AA2CDE0E97CE3ED39546A6AF1C52BFCF81A29BE8 -2C47C99E8050E4889E4575B75F39E662F2DB7420673797E2ED3D67CDA7AE2C15D0A0A794D57D168E -BE13214E89E0209AB2C0EB7784E9491AEFA3C02D0DF3AE5365A0FC4AE023CAB528162C7A1B173664 -9DFADDACA8DA5FA18B7D6489E4229E9E24D38A620464A744A5C60F6F9D334B908706B738AED18669 -8A8B278341FA4D65A0A88680BA484694921512F7DE93337FC1C02BBE6E64AF2DAD07603279D87329 -1D1F4D39C1DD6D89C90F65240F4808F6F1115CA55B88E242565E59F3BBF1F10EC7B88872E9AE61D4 -4CAE185463EDFAF7DF63DE4D2207D307AFB61501892965170D2945846FCF5973A1D458607F50C15E -06E5BEC715E0C156259AAA6C735593E5564F65F443B78CC7512EC35A56F126DF9D30974A40872E42 -65E1AE5FD483CFCBBBA26DEE426CDC4721F19C3FDA86ED7AD4FA1120F63669BEFE7002B128CEAFD8 -C63E8AC09943B6CBDFB3D2476A026C00A8FF81B1F651B97F310C82ABA5F388CC1DB5AFCFF5996D52 -52A6A42FA4D972E41EE56088F78CB966F9051171C472C774879AECFFF08BFD9CEA40D7C298922ACE -64F28C14E0B81F4DCADE81D71DE3983D87D905192EF13CEE71B2D3FF1A88AEC671EC318917DF98A3 -C9054E372D22A3CEC82FCC217F47319A40900312F6E32B536B9E7A7FA0837EC65CCDB5FB0D414371 -17596CB39D9382262DE6E65379D3A9709B2CFBABF5FC5D5B352425F06F88CD31012A2A4147B112F0 -C1C0ACCC808CD625E0228EEF66661F70AF96D3DCFECD402700E4F6522AC9A856DA466D55C84F65BE -2810A1565163872D62EB81333A698ED7B68352CACCA2D7AD38AB55C19E4F5582F75818302F5FDADF -1DCED09D94872F2D48FB636C8E38C7563C72C771A08C6B1F041F3532BDB39006C89A33C09BE1E3E6 -03622D891F98010BF1DE5355F557A1E09448D486ADEF565705277B31B8BF2B86761E32631E3435B6 -88B79D566F1747BA456DDB43CD239FB47FF7B425EAA4C657C8EEC26EE01AED07CF916E77D53634C1 -37AEEA009C6B515B6342C54BE2C7B95955B1A9DA277A0ABCDA2346E88018C726F481F71D6011AA42 -F8852F2E5749518FE3B3AB668213FE1A05C10A1C53953D75312631D6BBBA01D418199DFEFF8CF548 -6109B099FE8E2F606165FE30F532C03567785D5362AA873C9D3EECEB20F1945D55F49B0CCAC84967 -59FCC7292E46938943C262D78F3212D3F9D0F7B103157F423D71B1ED54B2A603F4C269029918F238 -EC6828FFCEC66009DB9C9E59534EABB183F31D7AD4C57B1BDF0BD2CE5A421882BC10CC1BCE6A970E -2B586BB221567CCA483989DD0B8DEC424C1D1FF042DCB7834423CF244EDA28D2D969B17440CAEAF0 -24A6119DB010CE366821AFA424D1B8299609C04148275AE6E5257A7ACB3C766C747CE99CBA2D703C -F19B7CF301B634D8B613DDC4AFE4633A4D77BFF8E00CFB5E289EBBCAC90A24307E7941EC1685CBAE -400CADD876FCEF7F6557EEE167D2035A05120293527700DC510B038A496BE1D5CBAEF24ED39F7421 -1A93AADF22214ED606A80582485AFE358E3A46D0671148998A3B3BE209467009B43400870359D418 -9A8CEB4D5866AB52D16D9CEB1EAB71C07E6CAA34B70E3096BF7604C22C40D5FBFEEA616DA3BABD59 -DCDB97D883FC8742B8267A16A99B7953225F7144568D566E64542C92E538AC140C851E5D295528EB -7CBB49909B1CAF6409C9BCCEB325468FA0B5F7CB2987382616B477CCFE4F4AC79E4A6F7165363543 -F04DE5B6F6E1C2E910CDC3CDD6C4C92737198F892337DCB6647BD226C820AC99C65D8E7772BBB74F -E65DCAA8A22C33BC168BF48E40A82700A3A7668C5A9A71E397ACDFEE7D556C5C19467B7AA69C260B -727407AC837BDB7D67DEC055C1F45D8BAC61048C45BC9FB3CEFE7549EAA2992D2EDC126FF7A05EAE -58613332A2BC1465B2BC0429162B907D65F793D236EDDD8D35405866D71B25F62DC4A7E06D4DEE82 -840ACCAABC0774F8A63E9C0F7FC980B3583E7A8B01C46590E3BC04EBA565C2EA94F057D964A78A90 -EA9F52ABFD70F84E44E434BD10A42E98C794065724341F907E35D3CB257161E01C7084E3A0166D15 -CED65DA7BA87DBB2EA33D39BD99AFB93D3548358D08330E807F8552CECF63C84F805205491BA3A1A -622E70C232FADF3BF2DCFD6F0539158D3306506F150B0518371912A25EB96163D73E9EEED42EDC84 -D688BC7F7708D9DCA348FAB4DF62E5809BD094842D0A31DBB7C4B41F94D946810C5EC10B69AABC2C -91A59500B2E5D37F4755DDFB7AE4ABF757F4C5BCF77C7F95E6A616646456FE8F18407080BCABBFA5 -7704287AD26222DF91AB2613951E2D679472F8ADF06EA2A20205EC19972299A78BAC52114334470C -5F5890C2F846B4C6042D73945127F2E3910ECA1C4CD7A16EFE4B4BE38A15AAA710682C3836A8CA83 -FD384970139D8B46FB0AEBB002DD224199672FFA02250FBCFA4E649E335428FC71F50F45E498419E -DB0E970F46894A48F65580881C9C4250FCEF65C9B28699408E18B26FE6DB7F1CBDB767564E73CB59 -54C6D639CE33220C894F36E70F71C9F9AA3FE2AE0AA0E3F2E304EC5ABC661675CDE2E70519E4220A -E26FBACBD01D5169EB844750753E6CED53E3678FDCD08AB93E10067E9C64F38B40B76D99B6CD92BD -F4155A1EA5CC824998B59AAD06E09E5F15EBB2288D66EA71B296616734FEF2796F07FF0D8B047074 -A1111D68B99C2B70FC56E74A51B062F4998ACC85B1943C9477E436E5CD7AB18DBC898D21BB93475A -623BDDA71D7B895BA2D4C10F4B90BF335126F4FD57D73AFA50170F6B3C364922E551D40E35DA75FA -891762FA23401D39260F2E92C7807C746F13BB35CEF9DBF2E76E66A72FEFF095DA482A4DE8A42091 -7065736CF4DE904FB52E649A32255E2030A7B31B686353492F31C064A3C4B0448C4BFD44B8E15384 -FD809B8761EE26A7DFA1758D57CE4F0BC376EB2B3833534B15A83436BA553955ACB5A7A66796AC5B -92DB5388BC53EFA27508B08E82821E5CF669BCE52BB860780F749B4F38ACDF5FF12726BF3EC2743F -01014CDE96FE6B4C40A034E9EAFCA2A35CCC776C2669E6AD138070A40F48ED79136D7FF57E993E09 -B81C543FBADD350FF5B5F7A46F060F88E30FE2D8233832D18B6C323EE017EBC1DF5C838321CDC8A8 -4CABCAB20B60A1A3AA028F36EA6E87C850AF8AF7CD50AA6359038BFA8818821D02CEE8F51DAB8C05 -F7AE9797814D97F3DB8CCDDE45B21DBB15CEE292FAA534A5F317B357F4091F3DA357325B8B9F5EDB -45865415973C143E5E5BAA483FBF2D06CDD4246675EC58B84C6AE65CA743117FF00F229243772561 -31A7F2BA26A9115AFD96C18216CFDF41B7220ED0CB3FCC26C36380007B382A02AEAE428887DC8BE5 -FDD630AC57EE3DC156C7B8B29E687F24442E35CE10BA4087295A641F7139C831F7CCDA6CCEB5DAFE -537CC1A97C5A337D3C48A6AE947F58A30DC08CC7B58DBBB4737AD52783C573FC1E9408F55495A80E -7FDA61F0B9C4F090158F1A416249EBBA936C27BEFDEF19D1BFB839EB70576A010706D8B95657B218 -9C2AE04C11EF9E57FE09880273761FB4302C388BD608FA0C7F00F033C9C00F4E3D5CE2D903E0DA52 -E69C7745EE9FA75E2AD93DC6CB5CCFCD3782A699B807AFC36AD1F62B05856D5DFD6F88831B90EB3D -CD523582A49732E3FD7253126D39E8AFB8458B5F7AD7F94A8DAC13365F433C857AF4A42C0A08C4DB -9887C4957259ED22D13CFDF5995DA957EA5A0F620B0214FBFE08AB6D552DBF048D62CEF6EFF12F15 -3511ECA7833E0E3E95F85E6AC0F95438AC4C126E1F1ECF336ED31CCA7EB216D279877123FD9FCD8F -B5E52B587CFFC4428456DDCA816819A8A4A211D8F1629E5D42BA4C5C356E580C8A22C61D987552FA -A97893816DA73D423686E4EBD44375C257F031318865A20F22115E72BF1EB9F93AAA169C140A33A0 -6C35BD4526A38BE79CF40AD1EFA10411E8F3300A8A8B97AB140EE6734E1BEE6C8EE443D698D34159 -97649C6F10F20ACD80236422E215E146D744A262DA3FC88DC0D86FF66512F49D3F957D3C5CFFEB42 -4823509F33F155057A4C6F37B52F4667767BA94F6B8B62856B553F307E5D230C44CBFDC9A97A45B1 -39FFB2F2565EB0E22026972FAD0FB7B9576FB6F368B61979943A398773600E7EE1DFEFBF26D45D40 -BDA66EBB96A56EE9CAE0B2420C5DD83E24DBA9FF885BB844BF3D2BF93B07325DFF60C0CB5FDCCA0A -C8FB5A2E119D5AF26E53AB8E3B428481C2871DDA26EF0B621CD8572B3C664BC7AAC01A1D05B98F79 -1A7080D294BE81099BDA7982432F3DFF4775C44D23F4F1B2E0162B61A8B2CB5EE8564BF98E2ED403 -2219085FE6194C19DAC98A421826CAED7F1AB1477AB327506010217283894235D7DBFC1153D5ECC4 -8AA7293F19592B4D7E95FE55151889BCD1D7FA7DC2370D2DFE11D7E4EA34B5C7A8E73BD3A348FD38 -9EF45B6167FB90BA44C23E912F9A4F2FC0427ED070592F7110183BFDB2C400393BA7569058227926 -351F07FED4F33633BA03A72AA2DC6B598E49B96021DD868DAD0F352E5722FB714F667C15C68D49C0 -3D822D82677EDFE86FE9668E537DA284068C9B0AED83074C92A5B939296D505B837E6A9DDAB1AEAB -7455A08A114C2222B339284674B74BF4CA9EE0C020BF2A148B439C71C6BE51A94CB64FBE4A7EB295 -5A455047CF5CB348B062ED4F6471CBC3E9ADD9BE9B96879AC7BC71BCE02FD02F17C6063985A5E898 -3D205AA1489DA13C408990ABA1C54F2F501AA172F530480D789C848118C0A74EF98D5F607A067BAF -F6030D887AC6A6497F9A0B38F9705F328AAD4BFBB634F739386177B07F22D5771282444E5EE17335 -B4D0EC86117C697E79A5F4F65FDC08E4904DAEDAB20067EAE2448FD4301849E456D085F392DD1316 -7ADF75CCFDB723E2904A9C0C976D6B84DDEF9D92B0E15FB246C3ECC2D0BF314CFB957757B3A3E8E5 -801F520644E4601D291DA0F7507C06F3B9BB36FC1C70EAA444E14E56C0CFF06C7F853DF36DA9D8B6 -AF2544B853DFFF535A7E5C6FC145250CDDA229956019659D0D253A19A7B51A4E538BDC01F74D7704 -9949C2C97C7EC6392C2E61CCC0992B66DAF1AB08551063E53180D2A67DE496716CCBAA45462D9F91 -B66A22545962DDAB120511FF08627131B95E5DEEB8B4DD9643E7B2AF65C0FDCE11F5F1E8DD468DA1 -8D41C8C4F00EA73836F4F70EC50FC3EC6D358C0658A4261C6D15A582A2C7C994E7882E661855B352 -014576858A265FFBC425160669CE159D07EDAC04D060B44E5800A7AAE8E339C29B929AA81D2F515C -46229D2080D5917AB20AB6B34FDCA8E4AF64ED660A3173786FB1A1D005D575C2A5187D3F7CFDC94C -CC44A38C5CD523E9DA726D8EFA6DA7B6131DFF3435FEE838B2C7D6B97934295F06202D307FF78D90 -6699CB9C5BBB10D1D4DEA5FDA5BFB094E704607083B646D37F5DA1FC7AD21B813F44D8C1AFEAB666 -55AAA19703BEA2E77DF3BF350E17C74B3447A452235919452B5175570A006C7680AC05E8950A62E1 -1D7E3ACA35A397D1E19630D094A86807593C97F4C484E4E06BCFF708B6DCA972E3A0009E1CAC0EA4 -141530F5C1B8AEF5E1B933F37FDDBC4BE22B74FE346D1A3F5FEC0818F8E61765568A2AC04713E828 -F98C449D9A1CCE52D10D61DD8BFD084C8D099A75D89DEA64D5A7CC68BD5B0593D97953DADA976383 -F5015915618AEC56D71D1DCD55B89736395C609B315A3F1E1255432FDBD37F38CC43C354FB4B7C44 -F1A7318B0B7E99C3C08C33B953727B6A6328051783A0A33E3CD9E498346A3CA6A77B517096EDD52A -E443B87643A646C3A7BB97F742888D33F9B3127E61942F4103C1DBDCD8EAC8F9E259773066736CA6 -53CE57E8822651261D847C131321BB9D6626A1AC50D047C0BA47B411DF2A995545BD68EC0287CC9B -31D5DDCA8755EBEB10ACCB3903AB0FD5788E984220443B8459E7C078DA4289F1350905881AD6DFDE -C47302B0ACB0D4AF8CAED02B4B70DF3CF8FEC118F0FC2D3DDE3E494CD160E676E300BC464BD4400D -B50EE43B314E0517037BF971ACD7CD327CB2134893B8A0410E68DDC518F5DEC966C7884CF5FDFE74 -723177F20DEDC039D879056CAAB4BF045062D3904F615C5CFE109AC7A35599C94024B41019B9AFD4 -04A80ACAA4837929F5C9317680A13D157A03B59A5588DF79D2E113F5F51021D6F6F90E8BBBA2C252 -FD10651BE80BAFD59C53A3367BA3C28DB6EB9DABF1EA99F47B503F627E15DCF3FD645FC52C5D5D0F -2F07DB4C25C0D1E1C00146E1C4D973E613CCDBD3F9450CC0F5343D79F05E9492E86A1BB889ADF405 -03BD7F3E7543436859184A5B20BD8A172F350D846B7570803990ADAA48D4B9155A2B4C4BFBEF1E1A -065C08E03928559735BDD442FF1E83E1FA20A5DA57D8BDB2FF5427C034CF0128AF111E6E73099E04 -6E0C240E80A73D7BE72B87834E45898D475521CA3306707631F5C6136199F354632D1A085F12A1C7 -C473868B62E534D15F5484323E63D0574196A19EF175214EB35A90873EFCFB92D6CF68761D45E37E -AA61E1A1979A82009507CA193E44B36A806486665CEDBCF387053ACEAB979BD35D30978FC7659ABB -E844F4ECAB3303318ECE80777A5FA5A9DD91B3D06804C4B4E9B4EFCF07EB89866D0DD8CA390CFD15 -98651417114D78776B1A1D36B4BA17746D6BE7FC123D473EF1EFED1C3BC1D555F914536869FD5B0C -35F9C83F65B0E6BF7A627B9202D787D72C600DDB6BCCE613D88492E13CA0AAAB196E8A49928C62CE -A4FFE2D0208EDA334ACF47F20BD793124D2C5546C03F4A364369A76A0425262F9D9118AF54E37D32 -E33AB25DD533A49DF5FBF1BAF4CEAC2D9D378CDCD13B00FDA432D9042F623DA41AFB80699B5538A2 -5403B0B3EABEC9E8EFCF42FEF3EA9F91766902CD206B0787C187D5370B60AD6DCD002DE2DE8DCDC0 -B4719A797C5E26BAA67665016DA0D967FA1346F9588AEDA174CA001B31213617FE19EA218EC23597 -79D979E2663166489C06993230B0D07973A117C4E3F4A4C93CF8428248DD5389414D679C69644142 -67C7FEA17E35B0CEE456667A9B1875C81B2302BDDEA2818D6019FC1622A82051F60584ABC904CD91 -8676305DC03FFBCC64FDDAC8D8AA9CE2EA00D6C97BC63C8A617DEDFC0E40775649438E9F61AFD179 -5E3B20560B01BE5E0983F136CF48AB206954E41DEE0D9DDD953DFD01CAEB569151D6BC0DFEF29D70 -FAE3E198E7EDD8922C0E0BCB8BCCF1C016142C1A8B337AFA7A05A9D7534B184BF3BF827F371E9BD1 -9A71244ECA1BA73D484CD2FAD54DB2F0EEFBD54B536EBCB5094E6BC2F5B2AAE41F05B4B311115876 -ED42C34F8E643B53372E3F6350DB8A38445822EA9A33E27FB0CC42CEDCD1FE2FDF723FC47C996EE3 -56C402112F24D0AF899B2D00BEA1CFD427998BD22B2A09046D6737814448ACFB10D387547D7009FB -384AF0562C85694C071584236D0F1F3D3FCD0CFB38B77C81889061E668BA7AB37AA60F58A3967DE2 -6F939B79CBF10A9DCC42852561D8D6754F1B660D216AAB1E133FBAA321C56E2584BE5C9BAE20CCF0 -0E8DBE6D9C2FCEBEBAD945C3C04101D2387351F132628786F6D9D4CAB83419288D31F9BC600D9664 -12E6AA457CE6CAD26A4C0671097B98C2384C81DD8B9A3222D4F4BBDA7017895C3EDC26662779AEE7 -40D9D7E24185FB821970B0A3A94041A69E4805EC88EE1EE521981536F2844FB8F5EF645F67D42CE5 -148E2DDE43AD5AEF200EDB3A2C7866C98458A92666E5F9E070178BCC39F65A893102A10564AF4E8C -AAA5075D2F8CD7FAB0401C03AF299EA3515CC93066744EB5AF7CF0ED06675BF049A6E3C211A89E16 -DE5BF0445A7CCA6EE8EB0347454950485D884606651E5887FE8B24323E2AA16DE22FC1FC8C4F06A8 -2A1FDE5758976024068197E1F4506E4D3D8A16D40461A4586338B374A592DC60334402F76388AD6A -457DC3F54E6169CF7AE3959676E966A45609621055EC3AF80E182633300A4418E34A66DDFA6B569E -5A13C9115B5FD3EC1CEBE50FBA247F60803AA83976F00117536342DC3D9890C49B2AC701D370E43A -955118967827760F7091469C5406F08F18D7E3548148CF0E312B1DC71DF67A5E7A1656CF2F47F3AF -F3DD50FFC2FCDAB7177285B29C17CA43019F62AC6FBA52D1493ED7C427526470ACC8389BAE827759 -4958908F517B2863B83292EB5AB3F57FFFB08393CA610FB1FE905D88A0A16AC395E2A2A6DD033D6A -0D68992F830B2E1B95FE357BF672716E88FFB92FFC3D62945D1EAD22BC68C51EE0E10A43011DB94C -44685A5C4576F6EF44CBFB45F2A4BF110A01657DB51FD499767E78058199B31DFD60813F1A344F86 -289F9378231D5B151C92385E3650B4FEB1DC91018EAB8474CBF69FDC1496A4D078D2C351C8196451 -247A9DCF8117E5B637371D8E22E248C64D999015C3FD2311E9950B8EE0922FBDD3D7BFF766BFE9E7 -CE0BE12F318FF2A7B5A9C6D00A54401609304ED2C55F5C1EAC3D4B38355BBD85D66D61636FA6E30C -2E82829376BEC979A6FEEE040E452359768ECF90CC539A546F17AE906C76F14F86FF697797322B05 -1EB311A759FE260C1EEE5DACF383816AAF1294CFFA7BF87A4D9BC595EE8F2C2F86FEEE11AD959D86 -F22FDAF4CEC098942A57E57813A0FA99239E994FFF353C1E781D666B8928CFC648FCF0869FC68468 -BDBDA7D280DFAB8B0B3A4CA35B074B686DE8D372C61FB32305169A1A9912F6541DA16CD6316A6EA4 -51524757BE5CF6E820011BE3859FB8B8578C100FF029680E05F0E0BF11D33FE19460C85EA5E4C0EF -28E29407C8AE6BE01CFA0D5022BF9FB01416FFF722A784DFC8FCE330EC95737A854471D334FDC58F -AB42867A7B62836A8B56466E9A6C1247D46EBAFFB905CD4321970F59FB8D6FF65FDDD34BF913AD32 -2E68455C5FF2D23C1A5EAE687F259BC982B6A384D35440F7C693CF50B9ECAC0B5578CAEE87588B56 -2EB6B7F42034C9F2E545EC866316552354EB3728C7D26527ED75174EAF635E048B08DC5D23E88981 -070AD5641A652F2344956E9CF4C16E652A99F4A644D1787D6D36537489DA4D74E61B2FC4DFDF1D1D -9D58F9C26C5EB63200526AFD168AC57D5611ADE4D4A382FC28BB60F9E7D626A6C67AFBCCD1183C5E -3CF2EF210D0BF5CFA7BB10FA3887BDD4CD96EEEAA8F9219AA2F10ABC0A960C3B57C0EC0313AE10CC -FF1F522124CFC8D2D49BFBB0C193EAFFC5B48FB3FF30B21CB76F0A4C0F1377C9223145BB0468A5D7 -1B9BC25873EA12E1C60334571C67385C00D0B570D3FFC6C7FF0DE62C183C76AEEB12DFFEE1459E0F -C818C621B8D12FA1357E2B55D48935D70BF140B4CFFE8813DEFD479350B20DC2EB1D3CBB1A2D3DC6 -EE975D58C89D61FC50E6A0197DA9A586B72255023DE47DABEFB11E8AA02414C2FF6258A281219B9D -DDFE41BA7D7977D0D6F18224FE22F7D4E9355FDB35BF7ED3418F4F68D093AC48F7D8FE4194FEB6C8 -0B9DC1F74E023C604DEA27089F98C3973FF9F4AD7BF7BAE601DB89B08D5D8139B95EDCF6C885FFA8 -B3E4B0477E7040225733826BACFD1EC4A0DD72DC41734856AB9FB700DF83CA2CE812913BD142D84C -5C83C0B2583768198AF9E885F2BA74877A414233207234AA5F18840557CA11682AABDE8993533887 -7C6D404BDE4153C9827EB16D66C1D73A8143C8A2D3604FF72CE579FAA3C5224BAC48EA83BA848429 -9472007DE96466B5B29ACC7C03B05DCAA38A48BFF9F214DE43146AE4E04FA705421917F99BC54533 -F0EBC01849E396216B9F0794E6F6C6B61B52EF1B1950C0FB609895C3C55FF574163FC8B6B09E66AB -AED1810E698FF37CC1F926B2CDA3B48C7D77790EBD2D514B6F385D397F713EC3AD3954EA9C846158 -6031D369E8B99E53408A79D64C34EB5A56DE8A67DE91837960E98A66FC04DFA0EBDE21DB003234BB -78665B039D0A469A0221BD541AF7149A2A659C300132C14581EF766FFFBECBA8B58A5EB3F95446DE -F49AF863A8113D17B2E7E6ECDEAFC3834D4DF900E3475596E86FBB4E2974C090DB4AD61A737D611D -92B4535AC291C56AD8B1C031D2F9B505BB77517B737D70AB3723DB52AE2ACCD5DD2F617423ED3CC3 -9CA882EF41757BF7151806A9B8B0F312808863E3673FB54DE939B35CDECA7FBC4DC3BDF5A5F47D35 -E345916C39366C8B4F439CE1C6F1835C320BD1E67375B03B5DE18C93256F251761A4C8CEC01019C0 -68E34447BCC503B9571FE8000627A6B3DAD5854CBC0A2D69E5A8F46BC78F6A7B1422334EC7A98ABE -FE9B83E01DCF3C6C9273B346F3240EA225AE4A4083CC7B0EA141A0773FDE940768358EB4B13D82AA -304A1386D450C1C0C6A7D5A8FD2BD313F78F85248B5196241E31E5595F3BC01F37700A2DD3D4A0EE -2DD01A36569CD507130E8F5B1E96CB560BB7DA15560CCADF3B2C9804A11D9E8055C9EC70E48C1D21 -3EB756A1376F2EDCB7189D78CD3D6CA5865537EEC31C17D801605EFD860B0B629472690588D02575 -02C6F7A75B9A1C1B397781329832CF3EC43C09F1559CD562C48FA9500295CD3B0A790DD3FCD4684A -7C7AC49AC9BFFF36B39A9FB148BC28D37907433943CBBF0CBDAB46D3EA86DC8F81C859C52D15302B -94A9B51C199B7104DEEC9D769C2634CECF8B700CE9C04152CC59C9326BDACBEC4312DEED92DD087A -1C4840868D9F97CAC046581F762F75E8D24D6445370A3F1E0AE74A6478D9DAC37E7FA5BEBEC0A1E0 -81AF89C1BBF7F51E3E2E22C8C405E8671BA85F1BF0DF79A465DAC7EC07F731E00632E017D190A99D -83E27E5C2E63D7DABBA23B2E88334C63721AC5A4CBC5D45F4C177259F34C2EADE01FA008AF65EBC6 -01D8DD16436D86AA94C99F3CC0A2F87134E73BF22F108B825A8963B49C6C685474AFE4A542C8641D -C0375D7EFE9AC1168D9700459BE52D0DA399023E141969F25C0DAC4668534B6647EC85454BE945E8 -26B26DE6E3C4584B97A38E2B40A0D23481BCA78084FE80E00A71A790BF31DF468A435ECC88E60A57 -860BBCA3D65930186E9917CBD209C230E8F8255A7ABC7D3F043AE4D7AD63D9980BEDF062B7D5C298 -C40225B6D03F29A0339E0FCA02138E526F06B9EF47F5E7A8068A846CFDE2BFDEBD24F5A73A66C079 -18662AEC80B43246284FA4E2EE0D9AAB172B1E59A6CC46B801149D8C0DF6DEC9A55D8E1B0EFD9D30 -2FF618075944CCCB6831D336B11617107B0530D09885E5CA11A5F1FCC8D69D603DA16BEA51116D42 -CAB1AA1E4D7B9B4D79993F2BFE53EAC904FEB70B2D330A89780EAC10D12CC0C35B8399F218AC2976 -E57A26BAD20CE2FA2AE2363D3FD2A8A971747556F2959DA74A8963C20B504711AE1CB0D0C02457FF -2E9BF696B159AF031DD5155F21C0F5549B0471A3C5DC8918B675CEBCB23E29322B959ABC05283A70 -2E878DE8EF25EA760F3C5C7B7B49D398283DE2ED837FD59F7C22D62C58FE4448B1049FDEBFC8787E -67D7DAFE9774979BB3802254DA59BCC0219F98C219F84D995CA768B8B5D9D4A32525DFECE003675E -E4BD5D8DFFC11025AF2B468F9207B5B2B42349B98232BAC0759758C1F4A283405815BD7145C93FA0 -8F3ED2826655053A3C2559073D8ACD199DEA2C5BA5F616A2E48548B4370EC73493BA07E197165DCA -774438B0766867819C1154D1959FE6E01E6312E0AB91FC2E2BD240FC8652A2D456A1DE7F34EF372A -53794D4C4E050BF3CA5B7BD2F1B8DE93B4C8002485CB219AD2D029739FD3C81CC6E78EDF38723576 -1A57143EEDE5CC887F282FECD261F6A25D0A7E154ECDF5DC38E426811BE86AAA458577E5E0C5F0F7 -5AAFA9C41E5D1DC9D91ECD79B514F8CDF7A5F1A189470D35FDF4F9B8788879CCBD91B427822ED658 -389E981E0EE5F7FB87692A3E3E931DF8A1D1573E3B0166204240B7080089A09EF7487C9AEE2D665F -5A82F94C877FB5B0DC531CEBF1E71C6592CEA2401E4B5122E5091DF03D203DF979B9A6EFBA12E2F6 -B422FDF15D49AC0914D372D21E871DE65CBECD105FD4A3E4714B9CCA5C6803FA39DBB015EA8A88BE -7913502E562E5B170B87BFC8572DC9DF49AD63694311EF1334444BDF0B4CA3245271C1F7A4D7FAF1 -703E3AA0E1EA8D5C6E821B28707EE0C9B4F22F23796FE87356C58AE2CADC191F4C58E1FB58DA03B4 -5A25AC95DBAE13A293474217BDB214742B9D9D6AF35F70FED2891942EACE3E625E55FFB820543FBB -250A062D3D395BC0F219ECFE0D76686AC148BC41476A887BC494DDBD396BE200FD3E03CFA12EC9AF -6B934A283C42AA05589AA6B4A8D16946BB51F50419CABECEAEC5AEF9085C9989289E9B46BAFB6FB2 -782D84DE2B068F91A9744AAB237CEB1BA513E57E4C307108E993C972A3E0A898D5A8D27833155031 -FDB98863C3BE7FEF3004CBAA5CB60A1F2E3EB4D7290FF5FAFA088B1CECCB6CF51A58DAAD998F0839 -6CDFD68F5ABC9C1CCB8F6514107773C69C26873E889D1F79D10E866910E4684186FCD71C965ADF62 -39BA3418B313A27AD632300969B6F284519366ED85E7CD968D64823F8C59B5911A72D0A20EB72B60 -3A61E36F52F256FFCDF706B4560B4DFA5D918FBC530D83A4B3C01BDD3CB4572E24242D141BF9E775 -36693A0407D002E09CDA5B195BF1CCF430AE9824C07928A050D0B460F2704BE8F9E647A4884C4567 -0A81EACF7CC038643EB0FF18A376FF6F32B6FE4F197273327FBBDEC6443A299CAD4B26F7778A99F6 -5A11BDE047153E764039EDB251936AA43DEE50DDFDF8856519056AAFC4C5AE6F2051AF0579A9ACD4 -1D00775D7DBE70022CC263DCA5E0A25B9C7C4F5C418587666B2FE24816B1E0EC92F9074F1403BB83 -AFC3F1D52CA79C387BDEF864366E34C90BE52F7AA09935373A07E4E026224E76F9EC3CB9E7EDE50D -EFDA48248D61F3CEC880A3B8843306375D9711E58645F3625BDB8E87052DA67F9794EF4AF8DB0BCF -E00677C3A26907DC651BC838C40EC39E2B5A5DC0DBD345944A6C32226089D63C52490FA10B215AE7 -03CFB663EB8A47793B84CE7364DA1C4E7FCE32DFEF09490121222774915BA59C78C2275F829D15CF -4D8686B095C38C731B83D48738C25F40B8ADD487C350A2EBE846C3916AE384CB1050F9F5DFE09FCB -D9129C6270FD86D55A459618FDFA4F907E6B4746196BB717865AB378414029017551161A52E9D24B -E4F7EED553A927933D4ABC8F25DF607779A717909CB4D810DE8F5762581900E224E4B91598149BA4 -71CF8068ABE8744356B261600BFCC57FB8BE45036CF6571D9B2A95304933BD4F17215F8EF53F8E08 -1AF61FA7F9583C34EB5655CB0ECB82246959F09091F36989EBDD646BEDCA614B9A61AB7696B3FF18 -1058A150FA6EC1BE2EBC7F64357A3FF2A2B0491D2F4E0B970DE5B7788B467CA678039B5EF55C88A3 -84578D427FD2CB16C87B0BF0A3D37CE8ED43E0F049AF2436344D5F47C948C632C94A287509282561 -6C64C5D262FE5B24916FFEE982A69A6CCF888BD01D62EA591EEC51F4B7DDFAFFBEEA93FE08D736C2 -0129E345D06B10246A5F57151C198D407730713F32299638EFBDC01367E23EB59AAD42A83AB41B43 -2DB462652E29813740F4680A5D4BD47B18328FAE6BDF4200CFA4CE3773809B45E8887C9B2E423698 -9F6C48D64F5986F563D9A7538A8716082F81936AEBD0461E6F4BD470436D8B7656F0FDF89108E6DD -02ABDEF907731D458D690BC608EA9CED09EB1E6E64C0790C7A2378201CE997FFE0317679EE1D4EE9 -F91157449323E53B4ADA8096CD628B5861BF794543A98F2FA2AB54FF0F25A13DAD43DAF9394329B9 -5AA53CA32749FECB0B2BC035DD1EBD53FF9FB5AD8BCE06CD89E5568091C1CC314CFB1D9821D7F9AC -7C55F55E0A16E39A87D43148201B928F3C42B110FC056189DEF183745F3B637441DE8BD4C3C7EF12 -F4258E306B2877ADAEC63441010750DB4E6269A4C78A0AC01BB3603C386651FE814031CB5D8C1F14 -9EEAFF652A53E57BBD4C8C0CE36A84A319A53BC1E5FD3F1ED1EE72F4C1A9BF264B594062FCAFB22C -C1FDE3F2E3D3C17DD3F7FE0E15EBD812D550227C06D01127385374A11438ABD50048E17255FCD2BB -85122A6FB9B7DA9D5E9DE8A747FAE0DA45A1FCEFE92B9E70A5B2CAC668D4D07527A5C1403267D823 -048BE671F725CFC7474B44FC5AAA348420B2D7C23C6CA066666FD6F2208E329878D90CEF1C2E77ED -22D3BEBB9D547810B189F08920A27E7107F208591A84D463CE2576C70C3DFE6643E4EA93F4E1DAEB -41D46F0E2F56FC10C69AD5034FC9859D31CF27A3A1EE256C93111F81C11ACF1FC0CE20B90BAC9AA3 -27A5C85A7985B951519FD4B03C40BE637162AF41B2FDA68F0D1E9B7602FE2659D3D75955C579AC51 -DF6A552EB9581AC3F712F083F19B52A6C4F560F36C59CEEB0C996AAF1728A2AA45DCAD79BD7B23AB -388D5B0B64A2B95154B6259B730B0F4A72C8C7F7CC93C7D64D9D8810D1F63FF8ABD4DB89824E2D26 -4FDEE916C41E299211DB1A53256E1DB5CDD04862F034D9404B73183A99D3D13D642A663F129B6D16 -7095BEB4EAEFD03DF2FF2F0B6B594C1EE90FDB203DA89FACEE23F1BA3901FECC75FE1811BD701259 -343011262B6A0A9707AAA6316BC3C17F787BB80AC8DA5AAC942D90F80C5A3BB59E47EC767244AA95 -C63E50BF809998957936D3BF6ABC24B0A397258F9EB4DC8F65692CB023D9091FB180C69498CD0C08 -BBEBADC84A7E0016E8F8BEA325D924EB0DF82E75D2CC2CCBF039B11934363D4332C5FBC5EC556BE8 -5EE4E707CC2753CCC43D2ED50558E51A104221C9323CDCB0199B7B83454DE3FDC810D0F362C0299F -5DD981B31D8E3DDA284FEF9DC8F9C8DE138D3065437A7FE8C30572AD06D62E8527AD37AE39AAB0B2 -25F76A25F6C6505241ED73BA494CF923E919F688DDEBF193E188F8C4C154F21631080763B4D091E8 -AD1D2FD6649E0CD9360E8D1A67A5B5FAFC67547CA31C95A5EA8D4EB5D68B9F6D6532DB9B54584735 -9558542A2AE58C09F3BD2918EFBE1699E9C8F2C2A11EA4D224C726D2ACD4A8D8ABAEDC6588CF2AE5 -66528B94F55B823A2A1F7BE19000F3E7579D094E047075DF18C8C868760295533B26EB3ED90635B1 -29C17ACA679C3E88B06998CE5A7A2544B700229F5A6A504BD3E45B276471959C8A3F81917A534287 -39B5EF9E3D463B3BA7318448E2A3E79520D2D245A2A72F31FF7070B6E4624E3A5E216BD103640C8D -F387E49D732529C611F8B971073F17EBD2F6EB18F9B74A67E1997926DF178D4C9EDED435B9682F1A -279C81BB9F60DAFE125845A2FF3B02979E5481C78A45C479BEFB9FEF3CE2BA9BC46C77B50B03E48D -A6D17B76F06F3AD118371ADC69E178C52B5FB4B261C9311874ED07DD6D5B3226A005FDD7A6D53848 -09E7063F036CDEA41619122635E835D2D74CBB6AA9B38CAA4D819C26E95115FE0DBAB4198FC5838F -2C91B7A87B07D734C6D4F4F83444C1E90AA9BFC908A2BAC4B3DEF9157AFCA5248F2DA31CA87BD363 -AC25E9E77F741D4B2C6E02F04987A6F49D30E9038CEFC41BA172DD675AED8B392164411144E5B738 -F3210B0E66B17A13CB9631C33D44484E792A7C082DD0A5382F34C5637653261B1EB6D2035B08B4D9 -1FA9AB770CAF40A103629511F7B43F2743D7E583433DECFB19C21FD4FD0AFCC22A4119E77C87BFE6 -FE50068B22479015BE5A9F06BEAB4D37412E062A45E0CBCD7BB39FEE747E96306F79FC4F2E8942DF -5D9DA0E55AACCDA547DA19D30B8404FA121298B44C9CCE198C708C69A8D6BF17591C5C50D3FC5BE6 -961F7ABA8F366DAE957A1C3730DA4A5B4F035A9274675EE3BBF0CA8CE9D8349F50CABB1C3EA4948A -BE6F9F143592F1EA95404E6909A909168E3279A957AE1924245C356331A75E7008BEE92BEAA304BA -40B7C3F48F74D9018B3247DF50EBD7CE541DA48ECCB1B0BE51A455C3C13C279D4D8676078C3EBE43 -08748D52C9B041D3E7244C745B1F2F742D010A9E60695F3EC4FDC1050AC082B905D6A57E8F407A3B -472F731011A5798965B7B1A307E252FE02C8F79CEEDDEB6E165F1A94D7FFF18DDBDF79477F14E9E9 -3981ABD200FE7771B29D1D2D120EE79D28B9543818527039AC74085EAFF241B56D08220C958B5D9C -87C0C04A14D52AFD475B542D391BC54FF33DEF8D9484AFF6873BEED32DDA4B371112B523B6CE22B4 -0D1B416B64C9370F1CDF2C548F4CCBE9E12E21C36CC3EA52DA232DCFB65F66B22B5E2EC04852510D -5E264EE939BB67AEC4764B87062AEB7F680B40BCEE04AD45C7519EB3B6199C9E0E332661463647F2 -FB7EDF303EFEF84891CEBCF0FAC5F723A9D0476C3F8C092604C87FC69C7A90F4D64AE45A478EE8BA -2DF50FB93F55A3546123F0B0E2C1C40C98EAAE9F0F26B8F80FFE6E6B94B7E27D2884D58B8A119662 -2DF6BE608C5569D7864BB756DF2EDD184B90812B44ED4A32D001C31383A40AEEE9743651F7950846 -15C48E402DBC01C818D477EAC0347795CB2792E9C11E8FD4A02E194EED1C919D4598FEC003B6D9A8 -A0BC7D456047A1C0579453FC1D7CB2D158D466939A23D7A7B8ABED7E2777EC7487973E73F2266D9C -250CE30729E3C5223AD93B9AE8443B35711E446A3DC660123ED45CE1942A1A2AD0610467E081CE2C -8B92A6C82F0B17B5D2429E99F1A6268072C6B5AAAA6EB6283A872C54D3694CD825EB2926E57DBBC7 -C1663075E687A144E4D61C225781D80FCAE1497B442342B4A3F1CD6BDB50E31791CC3928C30835FE -F845B6BE5E2D7E3F2F5F085AA3FAEB45CAD0D76BCBB1ED859A9CEBB9F7457036F0BC3F195CB1A98C -9C8648F6583CDBB23894BC719D68C2DBD8003B10D08C8CAA40BCE784D7BFB4EEC9EA5359AC056E57 -B8B0F2EBCB1F4CE40C87FC7861180133E0CB6CE2FC4FE690756D327A2B5AE063E3021C0C0BD420D0 -56F0B941E6B36088A55BA11D0C35FD0132D5F48E5D9673572347171B4328D4807B972831C0D74CFF -A5638C145B89C989E6EC942148207D6DB82257585958034D9F9D4221C7C9F7013790DBD130F277E0 -BC88BB179DD09E27062379ED06F25EEA8B7FB33C35861A0034776E3813D2E9E5C10E227CC569AB36 -CB2D9DF2E7B7B44758F9DC4FFAD7A24AC7E9F47AA850C221048C3CB35A37CE8EA75632AE65FE3212 -175146FECD6334AE3D3C5F492F067F795E1E8FF386BA198CB74F0BB4DC0000DA383BC4CC3F070DE1 -7721431988D69C8B1A5AFDCCC83C22E16A87E01C6D3E79DC7AFA3DB0371B0866EFB8B6F88900472A -FEF1C4A878243C52D4E02E82658979731C841C489A6B97E271C4C93800EC7D91F93EB9B9C659A554 -E1FCE42A5EC65AC39190EF4B66DEAF6FC0569A000A9E1495F42F706FBEA4D32EB7EF11A648910259 -6A65CF899C2F322F5679C6D123469192A9BF1A7F1F2C81C554ADB97BD19ADB746A4F81A4D5559E60 -AB94C483DBABF6CE2F28CDB412D50FF3FCFA3B3DAAACC6A83CFED910CCB3B8D2C19590AFF4D75303 -4A6CE7F4156896A13808E0DFEAC547E69D3C886691728E4A35ACD575B40D721E8FCC5385A2EB28D7 -08101DC50811529528F5CB0C009BA7E3C88468E37768FB0D83895AB54DB2DD5426562AF9D8AF304B -F6EDA54E9C92643DF926F5C3578269750120302A37CB140A18BA56BA01108D4ACACE8FEAE640A6C6 -958EF156B588ADB0EA5F3B0F37BBA12B7BCB221C811415387B024B7076FA4403A3AD6EBB5D9C26EF -EBDB7ADE7C60B444AB9F90EA493B658B7767AE2BE649BDBB3FE85F460F1ED137C61BD95F7CD3D8B0 -15CE45138538930AB62AA0E54B4CE1A5EC5FEC0A2B28B345B67089A4E4AE14D2E1F5A9C8848DA688 -CA298F93860649EC3AAFEF3E820D86988C8E3E5A4D4BB937791827994AA3E81D0BB3EE115EC36D5F -B9A392D09E79AF514D11C7B3A03C9F9C13355CE79E119A19177FFDCA34704D38118A8976D1EE5AA0 -2D14FEB1414419F5E85244ADC5C0A765A522EEF36170064BB19FEE3B5F7B441E4DB967DAE0BAC2C4 -8FC6A836E0EF5A69F073BEE1699F55E9C757EBD6FD8B514E2B49D6333815B7DBD1E0694695FCA3D2 -1320A0C4B852D9706DADD8369A95FDD917328BE93DD33818954DBD2C212D2CA81560ED5BC284EB04 -7A5F389E24E43F4FA8C97FECF46589FA7341076555CF55B1C21B28E0C1CBB00AB8B6F67472F27BC0 -D11148F407824B0159B5188D4BB7386FBDBF1C0FAF34721B7BCB5C0FCB7C4010DCB6A1284E9D7883 -9E3C2111A05D29AB7997073B590A81C6168020F1D48951BC7D8476D5BA593F4F23CAC1F9BB0E091E -84B4E99E5C584D1370DD12DEE8DF16AF8BC6B7B23E2FEABDB7F32779AF8E2B5094A6E9B7A7225F24 -C43A8E5D2B977E1E19E633C26771E23017ED233DBB02C64F8CF03992C6484528D0C8464B46F24F9E -8380F385D5D01B8893C67FC103498983CF939432AA380CA576D09030CD52FD99BDC3BE16C7204CDC -3365BF76294A83A1FC14A236F5FE5321904E779B13232A76F8FE521F425562678436359C2461BEA5 -AB27209541F557AE2AA60009C9CA0A9FC7898C14306CE35A50017BADEFDECBBF94EE2905220706DC -806409EF87DB1D73EAB0698AD2DB72CDCDB293E7FB13C94D9FC87E74502E6927A212F0D7D2F2D194 -64F7A66AC07872E18CB1DDE8F11835DCBC5C4EF039333FFFC0FC1456DAADE7DAE3EC2EE0D3415B0C -ABB69FC5006F4D14A4EE1A5CA99AD4D5E629C0DD1E0F097B5B93DE2DD001A8C418234C9C45E8C13D -1AE04E9466DAB8CF1ECB88A4E059C111A6468D2DABB90DA79C7C79E94DB28F6968B1A632F8C57D9E -565FF91C6916026FFAC0661856B9FB8DE9C81661816221B1FC159CFEF1751E7E403F5F2CE32529DD -540792FC17A12A3DCD7C50D38EEAADBD10ADBF5D8A82442AA900CE6150EB7A4639DD9FB6E385B2FD -093493DCCD9014B23EB172E21AA89643A6CAD1093343D85D81261972DE0ACB16A4C6B5F0BE4C978B -FA12D3CAF0134F9EA49F6E9687C8F99A456745EA252F0BA9968C7F9586E3DD841AA92DC7705BDD68 -2DAE41518A09DF0E209F321D7FA3417202F4BA76A984DA3ADDBC58136885362F02F0A24EBC439B3D -BBDACFFD8498EBD29F88F016B1FEABC10785438EAC860B554525F3266097A675299AA0967BD3B7A0 -EEEE3FC578D1BE99D3533BD91571AED904BFC9DA1A1451FDC5406E1CD614E0C7FBC733563CD6CE6C -C31E9237CA153F1F0411114361D731636BCF98555ABF12848AD109371A42B63675A4130B81E97C2A -2EE2BB5D8FAE2640156001AF0F55D9D5DF8FF23C8AEFE14F120000F14149A36E5C94CD9081DEC277 -C2C34870D05011F99D48B0875A5FF542F067F7E9880109F586BCF2B50522A1F23ECE44349E539E70 -F84E207DC9BEC7CDF856A046F1A03226AA41F541719AD1AF88FF211E57DD0C1275DD0B7B47440DA0 -89B98C6EE92A7D94700B83CEBE19EAEDD8A615F6587587BA8BBA3CE3AA5E8EAFB1FB0F486BE3609B -169EFB178A4292F4C0378AFE5D24EED1CAAB514DDC66C696D8E37F294A6579131DDF5488E9436609 -ACD750C3DB0A940C84FE022B22ADC2676F62E91E8F891225F891FBA537679B24547BBBF35F04915D -20B11739F620D18B5B216921D222F15044368569AA302980B9225BB839F494588481B94B0C724352 -B2DF600A22B062561D86CB8F81514FBDAA4F8A043A0265F992FAB71FC9124A45B8475E1EF3DF6B6D -E35CF329777D45F08325E8505EC0D979F542807AE77E57E453525F23BC59A50740371EFA98678AEE -6C425374AEB745B99DDB5D8D908FDB551FBC0DB15832107BBECC4E11A1A8DEC69358A574A2ED46CC -31D564549EFF23102D92BFDCBB2BB985F78F36033E34F59C0EBAFA3BDD71338736464CEFDBA91398 -33995EDA4207BFD4A9867D32E867FBEB7DE60D132803EF9347CB17BD91315484EF6570892297DD8B -7D966103339535E28A00CB1EECA4A9775F60A9F5FC9BD8B06D78FE8E6318C31DA2E847E3F9CA587C -B01AE2BA0A2EBDE308314413F4F230A758184ED60D4F71F6CEC22A93A01B6C54E0449A3860FCA895 -4A347B7588329A80974ECBECDA1070FBC055666375229F13DD995E99265DF870BC8B8CC6347FADBC -1A6AF64599271A475B9123493D46BEC41289BEEB67EB97A8DED7A9C9730D37C65164CFBDC22E5CA5 -89D2E7954C7136EF4E084C43A6C7F361A3E96989239BDDB9A593CC2A80BA16DE9EE90E95CD39393C -212AB22EECB677FD36D34DEB46C4AD0D21BF7E6D7CBD0C8083842FCD87B18FEA7CECF939987E99BA -34C214E44DD84C176C9CC5A4CEA76D380CB316BB4EF9DE73D73B4AFD4ADB54451591DEF86621D138 -D5A0A29441502BF6C2ADE671CEC3CB5CAB903A657EB2D70C943F976C110E46C5D9D29BC00A875F27 -38E5D22496A43E096E009C5D3CB724B4CABB32838DBE527F83B18CB457E57B092C302EE557FD4F00 -DB9C56E66C9FDF4EC9FFAAB85F60D02BA79694FABA476A199A0331C30A78A92E10417BA236E23364 -8174C826331DC1BAB87C5F95027846130C6A2B4027930EBF9A97BA1B039D386FC51C302648E25980 -212F6A582CDE2778C677A01FBFB3C5D1B8A374ADAF6ADBF7DC94075F25ED66D440B3922C5F255FB2 -3FD8F6E21EA65B1D93BB225684B50F11310E242B087575973345B229BA62C1E2C35BDAEC04D10148 -F5B2F3BCF7399BDFDF1F3F79119714AEA697245BC647316EA157484ECB951BE367234FD02E8B1F09 -1AAC3D29BF282DFF4011BC0CBA8E55234D943DB3017CC7A766720BBC29B2D097A956C0F1067177F0 -12D42ADCB473CDE8D1BA35B4030757FA1D8211989DF3BD22CE5D501C21EF8708FB3449DF47D88650 -9FF7B59B76C0DBAE443F336FEE2D615D7EED1C284F14335BC8A26BF4621E10DE9611FB2F1DBD52E4 -B7565D8C65B54EA36D508BCF0C578A49A2665227CDE1F9768EFE847F9D94F1BBB7DB83701C232198 -5C7283D47B2E40B27A268428AAEFE75F6B2F8764A8494E5827573758CB9CA46FA93208836BCCC8B5 -564A69F5AD882052AF1C1417C3FA7F580569528682C77080F3688B65E7FC24D2A3AEB61574B4A321 -5927281544DDD7A6EE0A3E9388F8F631CE7251724DF70726E5912DDCCC8C652DD6C9608F8462303D -867F589DE0F2F71711B35142EE6EF93B64D6326C4DD7DC83278E057100EE772082E6BA368ED91A55 -53ECFE2293A481E42F83BC8F9148C70EACE91F7B7D9CB8A72415BDB3AF66F68EA733A17ABE9DB005 -3BF148629132969589F38D30EABFA96A01FAC72650B5A6FF3935670198A1EA33810A9B11E330EB8B -451F24F93544263436F669AB5A90A53B16CCEEAC36B1445574EFA7E802DE73522BE725E68704822C -B7D3912717333367895BBFBE06966A5CC653AAB5E9B3596702086BF0010085B900711932A95ACF15 -CA4DC45A754EA334E9EB84D6FC8E3FC4F897456BED64BB93B593549FF0D5352275D8E417172A6664 -C5E0ECED1019494A7ED49AB0B965BEC1A82E5873766BB38D7D856049CCE2FCA65AAF61E961B60634 -E2A69EF059754C9D8163D87F928C222772D070D83FEC6FA5AC734AF65E40BFDE521F7D9CB1650FDF -64754BFF21EA3FF0AF7611A93D525EC9B28C51AFECB04E7FC8323DD6C9B0D8539A34FC3CD8CEB795 -8E8EBBFED4313C77ED469C199552A9FF70BA5423B03B6148D4EAAE17B71C5B39DC436AC53D6BA8A7 -AD81AA8B02335A8B2B11E9F4FA913159A725B8AB60F52F1A2EA50EAF4D56656E615BF382CC68A690 -BF83DFF24FE986570ADC0290ED1A37C1C2AD469CE789E0EA0BB5CE01020100E729721AF3B5BADD33 -A2DAA6C33EB8F9064F5292F715F820B4BBFDD56F76D42E7A1A068C1CBDCE4640082F6E7D582D1939 -990CE6EE8D270015A2C461798B37DCB5798EE9F7512168B76D26C28BE4A49A1BF96C89D235F21A1D -B6A96E5DA474D0B19B808D13D7A11BF39EA8647499C410ED9894A1ADF33D41B6FC2E614D8087F4C8 -4E437B136F3CB32DB8393C49177A0675A0C9E7EECEF448A97AFDBE840FA01FC7E5F2E8FECEDC1884 -84C312E8635CD79195475DDBFDD4D38D5A0246DE2C7F21608F8D2C0DA1371D302E941572E5792A3C -F4E51A33228B93A814D03FD4FC223C314CF3714BB3A34BD4F7ED6348577FEED9DEB082C4049E57B5 -D3CDB7F26629E9F3BA36893E09E3C7463D02A22D7056BE76B87763260E46E48BB832B7EE13F8DC05 -37EC8E81E9BDFEAD8C27EBDF1AD706933EFD11131E12814F236EBB01BE85B7F1B2D627413B324918 -D247604F56EC128909873FEC3857028BEF76A3494364C2A7002D104D486236C30B48E2B75D851C34 -EA50BA7FFEB4E19190898AE21768C157C0CAC628A2181A32796FBC1A7271D2473CD88E5395DDBDB1 -FC3AA8DF0F3D588637F19A8B833AFDEB5F655A8838EECD684E2315B72C75CEEFBCEF94344ACE8D6A -DBE355008EC72FE7CEEAB01363A895F4E73F867639BE0A0BE67333848816B05B419221BE8F9066C3 -62C23FE85B7F392930BFE4C12B9526FF2FDEC38F23A159ED61A0718E7115C24597D849FA76369153 -54A40C965D4D72EC94DA61A03766AB39AAB684E134FD1407A5B1B19BFEBA52AA0DA5D99CBE5C82DB -AA663711E6DEBA180E1D4A39C320516A4350D296BC19BF1BE054859A0889C7E9727A021F3176FE62 -0FB0C837E4141FECE531A950C03D319E3255703220B7185BD20FE5DBA673F8129AB211EFCF36EE39 -4C7E00EB0876624BC840FA86E58B2F584754CB6BFDFD76810E300741EBE4544E5AC17413ADEB21C6 -2F66CA4F075C32381796BA709782DE34A675B717A2C7F6D88104CB924FDE5DF775B4F0B68E0E2E5C -2F788BBDEAF06D8E1FC2105CCBBD5827C0B03FD6CD64F0D073F3192D5F94839644E5EC6C5185BADC -F04112A65F49A8C83174A9AE958E76A2F5AF469E8B76C833782C5FFB8BD7B1BBBB3EA0CB7C9786C3 -BE2ADE5E7AFA8C8F20892659A59BC421E28845A108E34EE17864042EF587A6D67DECDFB3F510EB40 -D2229585347A0035670FCC76C2837A4E4D68304FE113C539B35C1F0234B5079B8E32934546982978 -C5E4DF955A454EA263C3CA5D7101F31A318D82A3F9FCB5A8AFD7A65209663B0FC9DA400B26F285EF -46D0E1EAF8ACB1F1CB805E3986D04BC585073FC64895E4DAE1CCB749BB439CB32EA91176D5C39C36 -50D10AFB9C9884D5FB90183424CEE67EF2175D01D2478D67511EC9F54F88763C152697B06D948BED -49240096EEE3D06AB4575E8E8B2CB8263B5BCF4FA1608720F52B675309833071879DF52C3EC2871D -20F398B5CAC8F8A4D41D0F1D47584DD90DCDAEA4A1CF160C4B3BF1AAB890B5CEB6CB3488672AA68F -BD938281DBC1D8BCFE92FBF514DA5358443CB6E0147254E91B38CE6787B2BB0DEDD2D38F5938737A -977B5EA42892520C58F8FBB53C994B57382379E9490F0D6970B980E1BDF8CF9F4C3C5E0A18F66E86 -EE93FFE7FE546DE50F41364BCB3721B637072571FA1779F1D672FAD260C16D7F13CBDF3E4376E7FF -56D2A710AC5AC35FCBDBCE2C9C17E523BBE6218617B13C1FA6679B308979AE7C61DA6E68369324C6 -CBC7DDEC364E5A86707266C0B459EE7B2C03FE584E529BFFDCE98C90A2F3D9305AA74D3ED8430DBF -3A49FE2ECFD9C4BC9FEFD22618FE9C8A973AD072AB6F713E4DF02DCDA7AC5359B2D652013E131B76 -B3ED6C75FD53BA58D862846264627F6B9E70D8800F6D9B32242B747A67BB2B45675840D34F852AA8 -062FA6B01E31ED24DAE02F6CF788A17F7B9368175195DB0072259CCE0FFB2C1035C1D26E1777CCA3 -D56A827C3242069E76D6DD69B653768614B9ACFF16567FEA61508D51454BC02F6C60F755AEF6AFAE -3536BBFA1823F8E1A53C41124DE983E51CEC92AEF4F99785D554488A51C20885346D1F761DA79017 -940A0C557D93F1DB6B3D00FFD61D08E96FF3AFCE5FEDF545CC9F47A2B1BB26713431D6D1E47FD6BD -6E3C668B0368241F0EBB5FA9C991DF79890E52E83A3675EE699B61BAF869DE91F67278F510061C6F -E41DE2D883F48CD0E068E2A652B244128D82E5CD52F35F210DDAE3054691ED55A7D99088AAE8FB04 -F525C2084AC09F5EDF80A4EFAFE981F74C0DE9D194320709B3464F3FF2C0F6AAEA6D973D9C323F53 -DE3D741F698FBF01036716BBD62957CB32CD81D3A2674560FFBC5BDC5C6E4F547E589AD0B1CFE14F -5E17FED1C4A8ABE4E67CCF8A49F32C4C6044F1431E1CC382E7758722A6D0DF9ED23E51F8AD14D11D -7B6428E27443715EBA4E9C05D6F238378F9498AEF0E7EE4FE6856622CC8E6ED141EE5F109E343CB6 -695C4BE1E0F66601C27975983BF557C04ACFC19227A1AD7E6C44C00529FC7EDD7F886D24B7E029B9 -C395260088BBFB96972199A7B32796D27257DE83A7402291C14FECDF7998C5C96B1EDADE0280F856 -8A8F5007852EED303969180B3329917973C2D32C080C9765B6BAB0673BC7ECFDBBFBEA980C263843 -39B7F1052591D91667D4FEE413AFC23DE2D4B9DA742F4269C6C939F5FC32A38040730A018155AD73 -3F231E4D5B9D01C03A58EAE7B5F590CCFAF25EDC8552CFC8D95C60EBAE1837D7A97CA137E9D4A4BD -2CD34AEFD68D64B3F4F62326AC429921D7FB3C235184FE0899690A0B775F1A566EC29D5830D32372 -6526F7E7F5AFDD71B77E07613DDC4FC63EDF49051AEB59E6337AC0A4B6DD872E776C9CD0CCB86130 -5322D816732124F5978A86C186BF0A0F88E733CE38E4D7C1BA5378C5629B1EFC97806059990ED42C -5CD183BAD7E94070E4058569DA2E51831FFE0D080301AEAB4350BA290318AEC582C78D05DD92E5AF -B4424EA808629BC972E68F4FF2489C245593F07555CA6A2B25964794CF31CBD3AE5C229AB9B8C298 -06C01D116EBD0FF0F159ED2D3D7DFC73EAB4910BFF5B0B0B587CD9EA6E6FC45D63C09766224D8346 -1F0588140B258B1729F70BAE7962189B1554483392988CF230AF4077193E53330519394DD99BA135 -6D4730AB221DC6A66019BFAE564893DDAD7B177DADD16ADD21D396CFA6C3DC818052E2F71149FD59 -4A16DE0C2FFDD366C99B486C55A6E991E4D22CCB15843F0C3363676AF2F5B2D1B7EF66CCF2F12DC5 -0D63776BFFB058D70A9C76DCE96C754872D72C82A0C33F90D49C935402CDD26B6D743B1F43BED5D8 -B539424849C1495DAE73044E885A7D0F307F1816DF6244A6F2D97BFD4E200E93F69B08AF39EA21E6 -E347A47CEEBF803F73B978ADBFCF056789BB8E6E2563DE87DD9A8C877157B934102DCEDAC54D487A -1BB2694F0034093C48F10A17D32E2BDD0C723CAF59ADDD1BE373AF8C9BEB4415AA5AF36310C31F24 -354A53C0B962573148BEF91D994FE3F3D8450DD4D686725799F53C373A0A3E3C060C2E1A3E800504 -9F26D716E1F381B9F83125E4683264A07E2D8938F605978E2513DD2050B3D8A1012797CBA8961632 -BED260916338A812AE751C7B657E086A0C7DDCD3BFDDFF3E48B84751925736D1310C4910FC114387 -F3ED7FE163F91895EBF55FCB425CEF5729D99BD8F2C072E36C310523E75CD8E5DE49C031C4263410 -9D56E91A46C8C8E89FD92012A00C33D0DEC52597B5C6933291A7BDC5CEDA95DCDA5600F9AE1C8250 -54E7EE1067458CCB66610704C58E4A4FC0CB5FC933D0322A716B2CD430A3AD48DAB3D4CBE9D23F2D -092368CFC4E1F5495C133A92942EC62118D45C17723646E69407B4A89DCDFD2AB3FFC099A21D9D29 -741D68270629AA3A414FE58658DC9170C247B6E23F35C4BC5FF83009F462F2EEF4DBAC5FD158A658 -57F9B6DC1F5192DFB169DCB65621CAB2F1B07BD22F4155A8E9E2B6388D430FDE5EC1C834D22EA035 -C52E1E34482EADC36B4CAE902AAE89A7284E62B3C84B608D6BD05F75BC31310B2DD3B2C08A00E073 -7F104F03A41989D5F6B9A2C38B22F1D1803EE5D7A4D8DE44E4ABD496A1DE0C0E12C4BC96D0122846 -3F0EA9CE9509FEE987139F3DD3F9D0DF4313F555BE85433718F6D05F197C41A9D9C7A8B0D2740196 -82D49F58DD5F66B12A6520D9F226D1DF1F1B65CDFA261F980CA25A92645B86B64606293F8BFDE364 -C47D2AF2C709BBE77A70A5712F2CC26F3D66F5BE2C307A48E6F887F681D30121E32BBD87271B5DC4 -615D28C309F15AD263FB37424E56DDA6E17B998B45BE6C7FC6C28E3394A8764C9EB2DF5C06626593 -B5C665D550D4600172791CD208AE9F37BC082B0B242B0A504B751B18F4D7495172B697EE217834A8 -A4FB7CC16D6F9E8BB400BE8AEB0850960283DCE725249FCC4DE97D9886745AB6066C3E2F64DD8AB7 -9AA11667F11188D7965DC11EB760B772E282DBF13249F31986AC6898FEBFE23E3E8B8D2C33E00EA6 -FC493850ECB2E6D831D1EFCA3C2EC8EE2E394599091ED58BEDE97D7A43B6F739EB0F845EAC1DF6B1 -EBFE876009CC5D804B15ED4B56761B3CE1AF59C07B49DC798A44532297AD73D5101ED47F36A3678F -818297CC27F6AAA2AACCC9AA9B6F5459911D8C56CF499E390AE607F3790450B2B9C9BE0F006EDA0C -715B5CA0481734CFB0597478E7602B0D2C1E4F78F03C68C17C70E4B42D7D2D3C95CF40F73488B371 -8E2CB05A549944D86944D78724E266C3319AF89AE430E777E95F0D792B1C654306E421F3D63A26B2 -1E74B6E8B21B2E2B9DC596D013CDA16D08E65E8F24A84B12B2BADC653E6E1110DE2E709C1C1BED13 -707B70A421B384F20CA7A9A9D20324DD383F28B2D3C7A9C53F5D4C6B7C378D26DF11CF55238BE1B2 -4FA70DCC178DAD3D35670FE4919085EB1CD905971D76A368FDFCF9D2F0A23739851A3A6D2E02D65D -54DEE69ED5D81315D3EA5E356F94EF256DD267FD1E1A9EDC9CD63E743F299BCC4A4506233B8DD765 -2CA067F741603F93250C087D368F9E9CC4CC1A6DED567487C05BAA992B0056A77F630A72008E3946 -15A9DB24FE56A956650EC9DE90A6C2259189440247970541CA198748928215C0E132A81AA13208D8 -63C1FE817F70CA573B54577D10B73100AF8EA088208A44FB92ACA314AE5879706180788C17BB1D0B -81B6B95A1C4E0F9EA66F9B39BFE12444A6446691A7BDB03E0F03D9F07A10A7598F2166F108529F34 -CD90E601FFED3479ABCFCBDE8F051C348E48C61D95B00C59EA1287423F05666C3D36288844067E83 -E14F6B5210842C742B89F13ACD126B9FC50ABE2CA7D7ED513D43B6AC7F41EEDA416BFFFCC5C844AB -2D23D4DC09B2D510504CE98D02E72020D9E669DDAA344C63A1B75632F912A1C0DA3885DA4AF7E243 -E4A4C6493D6595BB6D56B0359106957259E59E336BAAF35BD1CEC5CDE735272EBCCAE8D4904AEBD2 -B32610C6FEA2B69941D6542ECB44D71092A3CF067708A3D087AE99FF29671AB7DD8758759B971A08 -AE1BAD78270D2FBEE37AA2DCB119D72F6C7B0C8509018A70D0B0BE2C6830EF8E0B24B1CE1141EF87 -3A4D7DCC501F808BFD94E4DC0F2915AA023076BCC8006490A43685EA25AAFC187302EBDE7FE1965A -04A5A398985D29F08E085127B56B057334D88EB638A4DDE64AFD204974C3939536B1B66A54B4DB81 -151853915718F70813F096CC1B0EA25E363B49264C2AD17158A4489F91453FBEDBDE15D7B74D7F98 -E81DF23251785D58295BA297F295AA6248A912CDD4F1111E6B628EECBB5139709E76EA4AB743CEC8 -26621D08E6BC64691CC90B3C3C1778931A28D3D5B1E20E96C643316613FC487C9B604C43463FA453 -3BCA1236286E6F5A6EEB2F1D9C34BDDE4595495A365F88055D9268541CF1654ACF478D384A5496A8 -772EA1402751A093582A6625A0A44816B5FDBE166835D598644296249B92CC90AA3FD6445C9A19BF -27F59CB0616C7306070F33C7DF4E1DE64AC8C5BB2FFAC1EF2B1B30E5A0275E6004CF64BBE2C6710E -DCFC3AA4ADD60106334708862FFA6652825BC84842736E47AE6917180365C75B27505EED3C6108E9 -898A780E20C3F606A860229AC46D0471ACA0187D6D539A1B8820F620F72B41AD1D3BF3834BF48CA2 -AFEA8BF535AF74C4562DEADCB63D2F5C7585722B77C989342D190FF926C8A5263B4F25286F99CF6F -C62EE6E2AD61C82B29D82468AC10FD27764278E5558CE8B41BA111CB2F040914451A480C93084237 -CAC8F66BB7C6689F340B8ABF0150E06D5B1177278A4C08742FE22F42C28680F190900344ADFA486D -59718C25D37275BCE4DF981AAC35D2C7E85C72A0188B8953CFA516FD545AEE0BF4B8BA301CFDE214 -4241FBDF3D204E3D2823301572E23F204C97305A82401660E12926EE7BA6EA1A81FF5C007933AFC7 -3266FAC4C134ED818A48E7DA01C71A46335C845F9DA5E960B25339D551582B375814148D94CFB781 -FC56093827B78578A73D4FF67B6B87F40CFA5E3F4325D9108CDB64BD06427B88C84105187316FA29 -90B4E3E8EDB6C78ABF164F4A9717D523794B2FE772A04DABBE688CCA977090979B5F47CEB90A1DBC -167D305EAB231C9F4260C4AD10889CB785169902FC0BED78DA15B8417453BB65856EA0BEA5245BA0 -573F623D215F6C0CF801851C305B355D26B52B0B343645FE25C78A3526841EDA480919A1BBE5F56F -C10ABEAA3E1FCCA7C43EE560F067F1AA2AFD642F769D1ACE8E2AAAF38850F0D757CD808C921D716E -96FBC07DA7860DFA70CEAE2888C0ED3CBF9586443532B68DAED9A926655C157A416C383A53D8F283 -2A4E67468112A09ADC837ED8EC95F70852921F50D4417239FC42EE3624CA97F682745CC5E76CC7C6 -7BD99F2180F8C0B7FB49539C8CC474C25C0DDE491671FF329E51BCFA779346D4686835A3AD6633FC -B5E0F67E0CA9CED8F215BEF4D240453EB2EDD6ADB22278AA5B985FA140C9834D38753DF2014F8C0E -E6DAD19E8FC54C03C1F6CB0F858986691D99592562CAD95FA0A5B2ABE4A8B54B457D42E8C33A2D19 -51C0419A72FB94FDA78ECD92BD2A1416459E9DECA9469F35E4C47DB531726DEE8F203D7042EDB32F -025DF3D582547BB1D45F7A5B70D317DF4EBB16E36B0D798E0932FD2A85B04FD67143E4B287A50416 -2C1F5A037CCD780088C5476385AF8168E12D97D44B0630621759173C8F1E3006B5B1C6D7138B7EEF -C3CC5F54E24B2C3CA7B41AACFD25E554880AAF406EA4C3C6E21D3B550B040FB1952598A7E8E6488F -E38288B2AEB6C4718338598A2BFE4D2B9D14C65732DA304C16FF3E1F8F03046EF095B65FD609DA87 -EC24A69278BFE65C905CD0329F6A486B8525B7EEA4F7AE56C2633CD83543269E8ACD6D71F500D82F -DFBDE7F7F7B1AEE67328549232E26CA55085B6E84D9E2E7F74068F93A90C4654F2F396E57C5F76F7 -E61CBBE523DBFBA6E76638BBA3064DA025A79E3A294FE7F1CC28A3B4C57DD6FDC48E541A85534B25 -E1BC11B4F78019457239EAEFD4BE9007D205F1D985F389DB22400B279C10948551A6B4A17FBDA0FF -C9428B18B43DC76EFB15FC2182216F1B60B4E344A03AD6C00F141EF99F89F24C819C3E32877A927D -84C2D006940F39CA8B71E5951673EA9BFD1749923219DE38929ECAA9CE43B06CFA7DA1BBEDFDA56C -61FF6C24F40E59B13870D5FDEB82D981154FAE5D6D5152DE69339359461A41A9713B6BBE47E868C9 -33CD74C75DB71D13BAE4DEC85E02FAA14EAD6C0A253B16C79514657B15E68CCFF9EE6AA385CFF9E2 -C53D9AE40F85C793E4E8FF50B2B7420F4FE69807BC5F37C3E300E6B3C3549D1D3246A2E70F091054 -1135BDF805E0A698E236B6496702D061241687B7B8D1A0E517DF0476DA09D89667A7AB375FD2672D -CBAB8124E511502DDBD08BA04D941DF1CEBDCCF7ED48405CBCC33774A68C5212FC6F132641FF413C -984F8B43BDFD7B1A2A3435F15AF07EF4970D3E4A0BB947C181E9CA27CC14A35BD1BD096875B45873 -8CA244F88C28728B74E25CB8C4FC1095A56CA75E4569AD3082EF194ADD11350DB3B74B96761D4538 -596FF7243B1E1B724716A144106E080D42036444FD472998460CE9ABBD05B42AF9389AC452BDBBA3 -A13A96890025789F16B9D92251FD3B3BEB2C61EDDB370A20456E3BFE5F4039E2557C451C524F8087 -015BAF3FF05F51869FB97512968BDB2B49589C1C7AF1E085250A47657465F480B7023E24C76731AC -0EAB6704123D77977D3A2C4C56B691346EBE589C619C04515D34F81FC6A17527D5D8319013C5D4FF -27CC3925E24C99231AC7FB9EAF0BBA482D3B75807AC85D03CD09DE5D9AE0B07B7A813F0449786500 -0AE8A7E00080300F0AB8C399057EDDBA273DD2E1B2A0DCEFAD3B332E6D4AC1FFAD846167DFD70E03 -46DAF84AF292D4F424256ED5AC4E104F80697050D50844A708EAC9E7F7784FD01646F3BD0C595CA5 -1EE6BD607D254E78ADDC5E15C3B6AC4940EC865A5C23105B6BE09EA09F2C05D6D76960A843B81EE4 -33977FAAC3CBDA85CDD2F4DB7C28293A77825635992AF8F3B38B4480D9A139B1662345A8ABE1634A -77496C3F57597D2985E9E54717AB2E99CA35789441BCDDEDE9A9E2106B401D9684ADBEFE40D607F0 -75C179E9CC03E59E65430DB70B441D43DF03F2AA6FF06F224B6E455B01C64FB89EEC9103E48453A9 -749B4D602808C7E408A8903091D85E06AAF635D0D529C3CDD1B8479AC0F4208C284BB678A547F2BD -77BB17C86D4560434F7AD1937760A6AA55B614CFA9FF8C9C96561AE6C8F2121C4E20237428BC51DF -2099B6C49E3EFA18E6D439E6E6981E746EBB1DC461259D8EA0F8099C47CCA27B2D982B72C9A07CF2 -1B3C05D6E26E6E286E348B8944078E24809F9C5F3D014B4CBA02533F5621BFBA1F0EDB776C634746 -703C9F73BA89B1960A496420C68F54E5B901A6D733D7ACC79F275FFFB253F389AA480084468BB34D -A1E797E43B7F6E8CAF5E8C93069A3A2730E57EC39B677BB73E3F07C2055599F7062E53B37A5F0099 -907D2ED87FF7A82C95FBAEB888033BDFD67BA3A6031A4CDC56CB1E4CF5B06B46E16D988BECCEFACB -9E1C037023D7BF5CCF5D65AA66A17AB361BE7981F132A578F3ABFB97960A6034F052D9D5AFDC0679 -782EC90F240F943A5F9A3D969ED7399254FF67D89DF668F7C56FCEA1FFDCF20481474AC8495D3AF4 -B6D7EE093E369C057F0B70858220693B398ACF8E8143558132E4391405E30A73937C53402E459F4A -A3539CF7A99A3F51C0307D045DF8B77757E92EA2F51BF0BB4F77D3904DD355665870C2B59F1ED7F8 -4FC71FDD7F0B6C5D3182DB77827CA6A2060D2B8C83C4EA4A432EF43A4D0A952CC6CBBE52A9F0CD66 -1A538973DE41FFE9C5CF55F2506B9EFEE51FBAE5E63BDCF5528499A47C031163C88D3022606784DE -2F46A9C9235AEE3D4F71D4959B0CFDC5B7E78C8C0A8F9DC99440C2263DBACB343C5C648577F5610B -50EAB1CF7FD02419EF3941C7CA0B0E64EBAD4B2CB05A0793DBC38F1946D44767BD287F5E9779C611 -CA0DAAA1E7393DBE0683C8D3455CDFEBC0E64B54B737E298DDA605227C0C4BBA87AA3EC7FA6EBAEC -39E6EF2537D5974391D31739D9FC42983D81AEE44711C823F35F8E2321AC74943871739D2DBE9748 -FE68592263E7713F27E0D49B9B5CB7A4E55DE54E6B800D15856450FFD3AE5F287B12AE4F438B20AE -9E27E6CAA00F3EAEADBE08432684FDF9931E925544A680182602A3C1997DE5D0630BD5A010535E66 -E1C123013D23966B3545C7431C39B97295BFA4099D14461004C42C85095EEACB9B47C593BC6DB863 -533A8619BAE09095DE8ECA432D4DDD49AA600D277E75DC3F5C6631E2A05382CB007825FADB77438D -CFA78E252D79B6A196D5164C2FEB85D75ECA25FF80B1D97FE10E87960CA0FC47C41D3A213BF141B4 -8BC3AAA93FA86245064668394665BFD52D12C3BE4CE39EFD8111754398A944C3FD1AFA98EC337BAA -AF899D35E804CF416AD7FE45FFF13FC6354007501043F98FE8428DE8013901BA6A28711A2CA85A27 -0BB135B72F1D5026E8217581860729E94F2F1878A0E96C59E9F62714FB5F8F25003DFC7347E99007 -8A9A331CB3A6A535BC61866F02513DEB982C4A13ADBFBAC3FF70A7335F40D5489E48E5EDEDEF1619 -1973D932479C62183B0E25EE8C4F76D4F1AE45DAEA4A12AEDD9EF81D248E8D19F8C8A5BECDD1EA1E -98783EB7A38149170851B1942C96C53DE06DEF80913BFC04E539EC67C110498D15B78268853E5C72 -F485F8A27B768569E54241F6115875E2973292CF48FF91D45EBED627AE9F0766D22201B20AFDD40E -5B17CF337F2999E0BD15B86E46EB3C18FC12B7DCADCF9DD50C6C7E3F37E615A892DB3F57E250A072 -A49F7277DD6A2C8042698233D35A699B17ECA5DBDA6D250ED4A16FCC893BF0DC2E33FB1EBD7DEDEA -3C1C39603C8B7E1A5A833A8FCDD5570BD088749BB232615366687962C7E56ED089CD7B092505CAFA -5A80F503C4CF337F07ADF0D106937E25670839D491F7BFF7A523DB609D126328C16113ECBCBF9C40 -04904427A108618AE5D4ED809F8CCAF72251104C94EC5BEE21F91B179D31DBA79CEEE5EC7FF698EB -84AB1D2D1A624F58B3622A78844CE51498B2CEF38EAFE259D22C7BA61104651A862008BC1DDDA58C -C45F663EB26428DAA85E7785363A69D2790996EF5D9621D53042F42F794962FEA46E46F37B8AD1FB -76FC8D5CF2146843F8CC625139C75FB42DDA71A752BAC48F294E4C0C8289FC46DA5EFD9C91BDA6D0 -27518B7E81E8B21F755A9615627D5812ACA674D1527A1185EED4E3C628196E7D0759B1CAE6B9B7E9 -01E9599A65230F1EE469CD33B9BD9C104C44E3C1AB966C9678BD0AD78111A4E0F2D07A01A038CEDE -7036D0534D684A1562A17AD64A00F279200C0371B1CBA61747671D2A21D3F9646CA290F6B82418A9 -6FA177C6278277504B7FBA936325F5FA124AB018A15DC18D2C5E8F93CDEEA52BEEDB78A57828D81A -3E6C38B9FAF3DC4EB7273ECE3EA4482A1C6242A335862C2C3717F9C9ED95F77B140C4E1569B2192F -C7DCF702D0BC9A50428EC406F8BD0CAF886B4D979320D3E429816D88F7C7146D960AC12E70F2CB7A -9F4E3E366665AB3F1B4B6440F55EEA26DC9EE0096BB7763731740A537766490C8C174723BF0EB40C -53701AAD12B21D436ADCE22203C1053A9DC4E9F17AE617888C4B4E6F3A720E4E6366BA628221A387 -D8AB15E04AD69387C310D3528BD2FAA5B22BFF3FA494F5FBFAC4F771C9C7402B95580C5AC4BB3AF6 -92A70CB2C851FA5CF1173EEC3EC29B5A05A0B728BBBB51D3B7AD8B0AF17A1563E82FAFD93F8B7118 -1FB7AFE352874F4EC6D334AB6747519AB8E847B7BCED33EB5458A828E074E74BA621BDCD03FEA604 -7F7B6ABDA01FC7514BA1AFF0D4D0C0CB8F4E42D5A87E395D9ACDD02CCC220C157153422018725846 -009A3ACD8C8CDDB66BC6836B4026FD9F526AA275D06C813179E5924F26A25094E7BDA8BD26AFC4CE -B41D8964D4FC4AF1DFB0595BC5D6714C32F15DC7194E9A3A73013C45D8FA55CC0550A12D9AAE8E9F -F199FA28EFC2426D8D1DEFB93A65717AF3EA8E2D5B4AA8EF0EF38E9600F7D4E7D9F1D67A2E63ECE4 -789FA74B159BFE2F91C19B0378BA52E93DF12830D99553B6618645E26126842AB70262D96E35E5E7 -50ECA0CE3458B3E51BEE2F21191136DFDBCA39BDC07939E521E4F492F392DEBD029C1EA237BD89AF -76BC89F618D530160AB16269FA6B693CF14BDC4EC7C630025703C5337F61458FA09104EB15C7CB20 -AA4C9BDB7CEF3A09F25BC7F3149951A7CD75372993B80CD2112F7674CEFD6AFA764AA3486730D2C1 -897A264D82A91709FEC4A21E30D812F558451804EE6F3DEE2C4C437846BCBDA07C5B6CBA1D94AF02 -9163B7383CAC6E088AB1DC14ED3743EE77E26EA7AD3119A76C0B5F925C4DE305CD7BB3A09A453947 -5B9BD79BE28FC462D8718CE05F9D94CAF3387BA55E6E447BF81A9EDDD3A34E17BE66BC52B0C0BB6F -86F6F008829173816D205182ED2ECED319864A796AB65D4E3950288BADA94FA32B6F453AFDFC6C39 -A4FCFE60353A64627E2057D4B379D3240012B3BB0ED0C7876CB83C1BA5EFB6E2A03F340C2B576731 -F848F762A7E1CCAF267EE06D621BC33FC245D0E1547ADC12CC0EB58B26BABDB8EAE9CBFBAB93836F -FF22BDA1831DD01B7346AD377AA298D84628BF1C07433284B0A90FC89F5AEB2651BA2CEA405D4F52 -DDC0E74B871D43F71EB4ACE0D2B401F9348EAC3A2EF0AD295036BF6CF6F870D58E00B619D50EA7DD -77BC28DEF91D805CD527DCBCFDC16C042BF9B874E3B1567EBA4C1E70744B9E7E5BD1FDA6A5FF6E10 -1613FBE58DC46CFAC1A65ADAF65E49757E9304E2AC9A91E0588600C709A61D4231730073A36D473F -518A145E141D0A5A494441B9EA99AC23F60F54F8127B477E1CE698BB4129B4B1DFEEDF10D9E665C2 -47A62F112F5CA30B0AE5DBF3E495FF06EB28EB438CE8AAAD84D5F50FB56A3AF002C23BCF66ABC270 -7AC233FC0F2723DB99D2CFE7D3B3667732A531F5DC315CE74EDB9050BF75D29E6430F57CB6778B2A -CBD57DFCEF896E6766C8FC5C9F9FBD701CD62CACF33EE0FC95E78DADD205B5F42CC63024624BAA0A -B4DD447832B4E1DBA77BDFADD223989F8E958C8D759AAA37930664C6EFEC708116248A2A7AF3D656 -DDEAFD009B7F5333854608E67E5E588A857167ADF9225CF6C641F5E19C3E08678A281199EDDAC831 -B57223B1BEEADFDCBC8F6F25D32FCA2336C808162E8F381656E847FB6CB13969572425AA05AC830C -33DE6E030F86A3A85D2A66A77F103C7042C97205526DC882EA9A00EB8BD5519847EB424C15F808A9 -1652A6CC89B66A5731126DEBADE123C63D88A2E550FACDEB3886FF98646000C64B3A91078012CA30 -904B71737CEF6BECABD43DD702880538F5A70085E6CC6015D2163681067C3D513A8C66032C34A0FE -17A58AD4BC97CA69BF41F11D5E910FDFE9729652D3EA21F8DD8CC19160A8FC77573B1E9CEF4E790A -79D8AD6723B6804E9616466C935303E063DEE29CAA6C3BAEBF278B818C2EC2F13ED645AB452397BF -00DB8B26E115026E256746CD0C78A959364FDE6DEDDCD0F441A61A1EBA32C7BC172BB09512148D1E -BAC9E791B7D51B71CAD2DC9B83B2F99B3726607D9CBE58B499A13753CE87FCDCE21C0AD0528ED0EF -B9B2C927F57C78C626248AA2B835A0791244C5896686A66173EC9F802C4C633A42B086334D2A4878 -0E53D00809247BE64E529F96AD2F8B3922A6097D414DDE1EC76F9552F9B8D58B8E34F359AD792B2B -E50C26DB05035E7497162E7C49C38D3CD9B98D620AA67492BE5AFCA3A81A7080185C7F0B5105223F -1FA77805502A2E8C5FEEA27699858D84A95842C5F2FB68686D59FE24091FCDDE139B6463BC6C7B1E -0E90D20A83651AF00C85797BB9F53ECEC1675C7EE636D0D9E77DBD8F89670F855EE4D4800FF3F695 -0EFF09BBF8A0DAF6B8242840CFA5BA73BEB95115F4A78BCC02D85ECCE0C0F2EF6F328AD1DD6CC049 -5A3315B414A4D61DA50DA46D7ACCEFF6EE56451805D26B0359AF193531F95F6589CEAD6FA041AF15 -3067F88A0A2FECD135C56682DB2B45A71D1FA737C064EE9A4F404BB72A70B3AF0330359393247EC7 -81512482579865240A23CD8479F21C2C44A119EBC4E81B308DD8AA86E60C3DD8ADA50E0DFE8308EB -1A7F201EDE8DCFDA405AEFB47E0E6CA7DDB376DCB21D37F7ACC4D3E9F26B03A8DE0E8940CA3A9E75 -963A389DF8038D2C486072F61C0CEAF500753C7A6352B1CD0338D9212B42A4D3DA23D5BDF44C27C9 -4B88A415A3242FFE2E1B332477A21D2B9CE075EE479C6E657A4D8874A8C53964229310E01ED4F3C6 -86FEF5258EDF3B464DD6FFD7F1CAF473BBE722D60FB14AB4918E93878A8AE4773930B8CEE110F476 -7F42A52D9304C55BE12846C911A10AB9B2E036BF9DFD597F5348D42233315FA80D0F563C388BC253 -2103F05E90DBF1923F229F980A2F4585C7A373511372D07DCBACA583099EA972C03E5AA67E663882 -6DB134564DB993CEEB6E7A6659C7C5C05C310267D5F8A24EEC2D5CC3E3F3C808E6D6068D1A57646B -37FABD98ECB7BAF99E7D9AC4414A491A73CA34C52F394352F6B5A15F0FC4D88622DAC694699C2464 -84ADAC3B1D366AFEDE2A2CD2042C90516A666A19A91C80248B11224BEDDF1A320E230739E755D098 -B6A67315535F4C187CFA67ED817A035056353FC859BF286317996FFFB478A2248B908FF12ABDE705 -402224A3EE5F463DD3D243875C84E02DB968ECA1CC52C75171EA50D6A88CA91327A7AA5795019F36 -C0A19C093A1C9D3723C7568F9D41F2E4FFB712FD47F897703D7A620B586B81936C84AAED61D84332 -B3BEBC4F95B796B93EF7A1F565C494F8A65EDB21E2EE18DC025522EF8E599887CA2836069CDDD889 -88E5862977B7472584303198CCE97EF9F9E1446D1F1F5ED1CFC666A8A0C3A03E1792EFB60A9B4065 -49E0DEDF6ACCDBD98742568B4735A747D8E5DE21E630125AE0C691D054E42199C15B1F80CAFA6E7B -B2005F374A9A5F9900ABB7409CCD50C3AFCCAB1214E6A856F7C7EBA89BC3291801E1343DA9DAD2C6 -ED075C8ECA1423B43E587AEC67E6145272814B3F191B3C285639F9E2D6E148A02DC2CBC0E054D629 -5CD05DBAC1950400A9189316F0265B86A732D302C5BEE8ED233768F237C62600CBAAFF3A110D5EFB -6CC7CA3B92D965CA7C5E8D3E64ECF239FE2507FC797FDBE54C1112B28D4DA44C60AB09D994C5BA78 -D663A2591934CC052BC70CD1DCA3325C66C9CB982E2039F5DB70C848D3DCEF655B1C2CD0CEC8865F -E8E1C0A267BE4F707ECE6F5A3DFCA3CC1EDF92C760439F51AA69A4C1801E96CA4D6EA4AD980258F3 -D15C893913ABCE09101984C61B91D603053E49A97CB82FBA707DAE8AF1D579FD69C8481CB7B712CB -CDDB4D287BE995E32C02B399602A08B9DD849039B5673F1930BEC7BF366EB082D2CA5DB2385C8CC4 -5BE3FC0E31820191A814EBA7C4F23B1938E6C4D800732787CD2CB97F762DFC85D4B798809B5F2254 -D826CA42B32695428D120298B44CF38494E56240B75DF1E41E46E53C44DC505452256DFEC819408D -605FF14D6C1F3F152F2FEA96EA0AB3B472D8704E06BE9F8C3E8395CAADD06D6DA033E81ADE5DC3B8 -3DAFF743C6E9E48716003D358DF63CD7FD3E2F727D1F2D0C29962F76D5C95ED44B6F08D052025A66 -5785F264A3D5F5593677B630E628B5EA81FB37CFFD7A30B7FAD226B6FDC82B0878AF4C0EC4F4243A -807B9839EA62BCBDF7C2E9B30A623876E632E084EBF4A21EDA04FC88A1C07021D0C72EC3E969D449 -FEB08E5826EC20E55B21EA71EA59F6E3B0710B0DDAB3261B4A2029ECAB68C19ADD5174E55D5E984A -4E5F38F592A302FEE6ECE732DDE841A28672C620CC5D687455A5C06FA9FE688394A04F96312ED025 -B7AA6FBCE2925F3AE559CC1886BEECDB70822E2E5CA3F732A87404B1536AAC469989E9610CFA440A -CE43875A70CA51F36CB6F629D9424C1E35A88F92D5DA3CD8CBAE6E8425A36968E21F4F30349749E0 -205BFF8D552837D6FC39532525370BBAC833F75F1854C93FC533A4AA53ADF7008173A70D94A4EBF5 -38EA9E62BCDA7C20E0A073BEE2EFAC34D2EF1D03BABD5147659E50B557045B2EB89DB303749B04D3 -F54B43FED612FCC68206E001A7AFE90230D9C12F74A32C7EDB5D0241DC3A5D51481FD7C8FAE08FEE -263FBCED7C7D911B3A303C835AF5FADFD218F61A9D6DE80485ABCA88200047B094441F7767B97A24 -E8C612590FA2407BAB1E8B56C71914EEF2355DD97CFAFCC192BC06FCE063D3D9D1A629AADC75E3BF -207234C208E7E30663EDD691043065C9CBC473D97C6D4DD3DFF59D6A9ABCDD4412C3128F603160AA -D8F81C6E7A4DCAF35F3A99B4EA10A34375B477C2BF846521A7EABD4D28078E9340452A198F3F5ACC -3DB7E3908939FF6E3709C6A3FD9889439A4AE3E10B618CC92E14B68429A3AD2C80940A1079452EC2 -66F254657BE7D79A2A24084AF73F6DF71FBCD32BF6913A3FAB25F977787F7BB0C3A3E8BAB38D7A2D -B0B4826950643DD1E03BD7DD1FB149A33862A89226B7CB454DAF613128C2075470E42E70A9444A8E -6ECA526345AB48E6F5160BA23B5BDDFDA6049EC44ED1461C7E0DD514B16E2FB285F72039DE3C7982 -EFD40D7F6C8E8F4CF35AC71B467BFC578002E8D2239A2FD2C4BCCDD8AF3D7DB1F4AE7F2D2E0811DF -9D0155BA6EDE50B5F052F14F6AB884FFF244D8806C07EBCB49ED22D85DF696995991A954AA97A1EC -D86ACD76E061B7541E87997FEF0657A826BD88EF3A4A5920462C6595E7A156F453291CA044CED810 -860C3B0149BCE73BECA713040664AD0591304106129600AF71317B0D2907839CEAC99515D357E980 -B1937B6E1200AACADA205421001F1B2F91753E80D2263C56AA164A74701A8D5FD28E46480B0DD963 -A683A1F355D7FB4463C7347C94EA5E2CA40B60B56297CB22D972C5BB10E56715A955605256C1541D -9F3BC5768A6F355CD3B863F0FA1A781EDB49368F51B29481CBB41D4AEB07AF9DBE8F52C5D0FF75F7 -FB6431D37D6AED84D78C778871CB0F715B4F07580F23B586C969C81B471FF6A6C7276F7E141E02A8 -584D4B9AB00E7BD643D2C3FAAA299B1F1E25048461952EA42D4882768A70DE46B213A287F8D31AC4 -6D5436F22A796C05D1FE50A9BC2A928066627A0D87DD57A3AD91DB446404B41557D1457873482005 -EA20916BBE46C613F456C849D46BA79D20627B446B2F49E3FA309AE14F8C420CFD94922CBC0FB9D3 -5A0F7DBEF577F1849A1A80E0011DA8AC082A8C6F61658E65AD177ABDF23EE17C8CF0D26B9FA3A6E9 -4837EB9E930336889767A8D7EA3CE980A8EA95528B004957BE6067CD9BD8E02A0F23CC1762CCA656 -D33412FF45E917FD4A03EB6E8C1F43FDB0A8965A33B4FD26BC24A20B304CA817E88495BA9B361A3E -933717FFB0271F7F70C5D3CBA1E86D0F51BF3ABA194DAF32C35C796627D00C7B2271ACE2463E37E9 -7B3C826CF3DB60028F240F9452CBE08F7EBCC5FDB1BCBB3C327A9F450B9E5671916101D6E3E5E458 -CA31F04D12F592F83BADA2C3683D3886AA3B403963AB5DBE220FEC00037A745839F67A3635DFD3BF -F08F367482962DED88ECF6322852D643A54D5D303EB04BFDDEE9BBA1EBCCBA7C653B3A613A8E719A -DEBE3CE1BD7E754E5F4977E863E3C2D388A65227B451D4F3A4F94E06513CBA4AC1F2F511613FF035 -611684CCC461599000E546E4D972CA6960E095A526E4735A23421A4C9B597ECE08AFA2753592BD16 -DED93255A1E33DEECE3C5EB77B94670E8137F2A4A4B98AC193258E7DEA5DB8408A806188F2D1DDC4 -40CCF0E9A6E2F0C78FDBD7B68DD4939D2458C1965BF8BED4564B32462FFF3EC892C03B11D3EA813F -AB4CFBE8D3016329C5B7E3DFED0F08284D44AA0B7A2F6BC96EA4503E8EF52A64C22BED6B452581AE -8FF8917D53976471941A9116A2D878FB2541B561767ABD4E31CCD8A590CA03494C62AFFD64EA0A1B -C779173DAD84999C7A8D844EB1259DE7BB5B25CD023537A474A524EBE4660B22568949E624D8FEA0 -AD37F4CE1EC75955EEFA49C6BF1803BE87E9C9865FF3F6B8525B8C15FE8835CA153D27E6C0FF0CA5 -1029A7A9185D25F0F14D86FC797DCC1F99EE97E2054B9C2A2E06FDBEB8DEF6CDD368BF23A858D9F8 -C1DEFDCEAF1B4A8DE5EAFC604CECCF0D285BE00AA912EAB66EFF4D37AD2EFE34853BBFD87CE09B18 -749B489943EECAE7887B006FB827D10191DAD18466CD1F86505879310A8B171F902EA0C26A388E13 -B53C700272CEE2BFB47ACB58247C13449C6BB9D01232C32517358F1A3DE064D43C18F8827D53789C -CF3CE2EBE78949A6ABFA1A6B8414CE360A5E22AFB7D1DCE6F5A06182C3B984B4F9BB1A905A9D5A14 -83750A1DE0A857CD5C06945EB7D4A2A6BF1237F32A154FDC06D51A703D44FE052FD3C53E9E8F417B -35D1C851F9203A8997521529F21AD8498F96930AA77EBAF82EE02A57BC77C792D9F220294B45F48E -A8FD94E01CD25645D36D168923562F3FDC93CB79DD4760DA0C103C2675722D7A1B79FCB4245ED12F -A0DB52492C9CCE58B333CFEE822812F7DCA68E802C451B5CFAEBAC608B950386B6C58239D1C62D62 -4DD5D15782FC552222CCA06DDF387B373E32C3C2864C63C768350C37283760F3515A5B0AFD66C48A -B522EB3E808C061F5CD6BD96CD18C9839D30508E7D4EDB88E8F11E31E10919B16B7971F06D7877A0 -58D8A4944C84FC6CAEDF3341B48B6E0D3C7B85D710E0C35F5B5053CF4B4798B3778CC28B2DC7AE0D -F3A49F9F3BCD8E95D746C35C3F47D68B8AA35D97AA08E711B5FBE70D1A623C82541EBDC51A827D0A -69E6C049087AD26F256EB7577F58CCFFBCCBA5A95D093DC29464C9A38DE95BC6B1853963B2DEB0B5 -7AD1248D6F1625E115EEB9510B5772AAE4E3C866657DB0B3BF0E0AC345E116F8D4976B770876FFE3 -748C36165522991F46A36F193DD1A1C94713673C7E4C81582391B636C72DE94CE6254374F99B623E -5686C13D8A8322E83E11BB0B0A896C6A8C2C4F756C5385CD7017F26D23F7C3EE97372C868C8C9155 -81723BB6B76B4C3CE8998E4FA6CA40B633DFDAA59BA902A4952DA90EC4FC3CF0F2676ACFA7F76F78 -236FA2DE10FD3545357215246BB7E527F277C28B353CC6D79DCEF21BCC8F77603CDD58A2CCDDBE3A -9802F941CED8E035313875319548C41992A2BE939A17CC109426E33825AE59BCD17CB19F50D972FF -CBE7D9B4B0BB095303D9DC9D406696C2508D6CE99E11CF00F6461147E97449ED5F486D480A86D3A7 -ACECB7E9A945984724EFC21C5079B1FD03ED803C2DEAFCE3327D2D7827715FD65D9506216C88B0FA -26935E95C64114A51919D419038B1A7E9C1E829FBFB53275093752DF19891A97F3CBF7719C1FD6CB -17019A6D2D25360ECA804C4B35172662CC4769D2B785C6C87E5A4ECCE31704E59F71263B7C3CAEC8 -ACB4C7426EC25F11A0042323EE6C3EEB04284DBAE2C770BC419DCE79BD4560AEA41571C3B595F525 -60191DC7A8FBF63D413A77A0905E517441B16C2B501EA2F9E99CC38D052679F288FDF1894542E3A6 -6989A0090185EB2E75134BFA3D9147C3DB8A621D9D35E37786853779E157B47F71626D6B3E633005 -9159C17596C1B87FE2B4FF47ED9D78FA4C2160077276C8B58CEF5DC030B4A5D83CF257096C047FE6 -4DE307C598B815058E72D5F57DF5C369E664E137DE29349E2F9DCD8C9F4EBA6E765B6327D7A20DFC -B20711273FD8091CBA605C4C494248076F7E03DF65A6A50164980BBBB708741E5BF6056E6F996DC0 -7FFF408C5B8EAB8DCEC315E92873228C805D4440A6470E3EE3983758DD211C9CECDBFAA4C9300CBA -00608A4B2404A3C7AF017A3B7E67F39F0B51ACF950D3E75CC7BC2B8D3480202FA958E8EE0B240501 -5232EE0D264C7CA02C18CA45CB3C2DE322D3EB7F00F9455DB6C5B1F4E59C3E95520EC36D7D903CBB -625D70B54BF6F8255E412604BBB29FEE026CC660577F91DB1DB4A613EEEFB20CF7AE3CD89D565AC8 -38416B01B5DE4FFA5550D17FB51FBBEBE21CF1D56038863EE931B90DEC2E211ED42BA92EC244D4CE -2C4EC5CA87A026992772DC2AF754FC982B94F36EA7B7BF75E0ECE90CBB2A6AA1A012E8898BD679C2 -3CB3827C35D5D02F0569C7AA82615D4AA67518ECF668D3B57D6EF1A8013424AC2268BA0D9A74D588 -79EDCF6382A89D397864940303EAEC45A38304BA8B1CB198967AE23EB81054BE74B16909A405E8A7 -799CEE3C270FE2A6DC50BD7370B6B2C8FDB9A87D88D5D40348D3984E39C693B6F4486D994778607A -80A3122872DD65E40492107C71C3CF708A9717E9EEFAFBDDC239C53AA9645B711038E59C8B861B37 -411AB2039BEDF9CFD00F08D9C5D76154427FF5DD39878CECC5D7BFB3F1F035087185C0981F3C2139 -BE84872FFAD3408531C4EA9387B89F5E3EC779E8850D50992DFDCF9132BC551E985943B07618AC10 -D1150451F0844C0DC41D6E17EB508DC8689EC726400D5A7F6FEB3CC7BCE05F09228B7CB2C5393664 -D8DD9A4B96B1020EF25D70AA2D91CAE93AFB5F2BF0AA18CA5C599FA1A708EF35BF8F7FFEC9AFC1F2 -42870D028B2B1459063B493943EF1283829783E1010242E5CF4DA39D93D506F3892936E7D6CF1124 -70A521D397438733D053944CFF12D6FFAE8246F20618684F263715AA98E15D72A526383E05C23214 -B78338E5B476F0981D90056E6E5D0DB66B1DF2298E597B2ABE1D817E18BEB056E65EDB4234342D96 -00470B1420C9210419D834E431B82F58608C87AC361A02D0F1FE4B470A3D71E0D21BB87E1023D428 -E23D596CB9E1A2184403A16E36E644BCCF9BBDE27290485057E62827283E7380AF786BF395B3961B -A5EA469C315763FA59E0F176EF81985F38B882DE56A74D128E256D1B89939728E55A92ABA21A6B78 -44FAC1BA7BBDD8B34A18194A2984B000380FE9F672E83EFDBF276FE797A325815B0F25CC95C97A9D -ACF56D583486305D7C9E51A7E337D14E3B900333EB38FD93A99587DA2341B10C059C71CE080FE753 -3C0F059FA40E560AF9C4A41A4BE6FB45846FF8F78165E10B4AD40F264BCF5596A1E8EF8CB6EA4B1A -3A5C69059AB1563843679ECB2511A90E8898F54295649CB73D277760D8D04ABACC7BCC6E777A0530 -E2067CCBC08673F9C8C178F9D672AC8A15E5367F0C5651B53E75E0CFA57C931746AE1A679C246D7C -9417F1CD89DDDBD1173C2F880B7B3847CBCCEBF99F7122E832D7C9BAFE2B54CBAA1ED48158DE3F36 -238B76B0E67644A28AEA996DDC006F6AC0242E4B667639E7523CBC90A0561193C1AF34481C2EF402 -EE43A82E1EBF4E3D601BB36B2D95CD93550D61CEE7A94E72F6D30C32C8F91A61E964B1F66ACFC398 -7F95D4028F116E9A9A8474AA29C1C1A984BE0E393BDC41DCEF6A6F1018DB60D52024899D8EB5D55D -324D73F39BFA47377B9E15B3B06A7585589FCF52A54684173E5183367E7B0952DC4BC2767C4C6247 -B1D6103E52BC7B7EA6298F454C5D97AC575F19C10ACDFF4E10C7D3755CFAB4200CAC545269FF1D8D -B0D607C7AD47F40DDF257AB4E7D0750577003C13E4941960C3DD7B0774DDAC18E8ABAF8F53E03CBE -F6D57B44F24CF821014C064278FD51B3427593D17694B4ABCE81F49CBB984C5878CDF0C38D1ED7FD -99B0B9A3BD8D8FF6219588B3B8FA59D0CDD1D9B2F65122AB45E48F1757467B9204926140E3C350C5 -A927A2E700173053EC35D3F1DA2D7258714C97FAA857F0898917BD94625C6D1E2D77138EFCAAAF51 -7B17FE187A2212C24A881A2C6A647DEF6376ED80AE4175C5EE80921F001995B44E49F0D33DD9075A -CF33BB03671C0BCC34AD5784AD1CDFED3A6D9BA103B3DDC1CC2DE74DBB576A0277715275218CD19C -A8899209125266D8BF1286F881DCC2C383749D1E768D670F4099F7DE959EDFE852583183C9111601 -2881A56A24AAF020EA45CD5F39660DEBCE30AC1C7B8CFC60387B1B0C3E361BE612FDFA9F01B7E4B4 -A18839A2C7E0E393EBC5AD9A8A4EBC316A740C1C295D9EF5F4DFFA0667F9582C0BB837B142C4CFC6 -B1798E9476D0631111033B8BA75A10FDC800E2AB1E0E829632F869CFE4737BE9E2800759EE0831DC -7D1195EAF80555771981DD6DC6606812D92CB8EF86447F5F6C6F626D0E265C67E52A6319189EE349 -D48E49DFE6A9E98F76C414A1E3217AE0A215A17E54AA498F4ECDC50242ACC7E2322F63BB2FF2189D -057E7354E32A3ED1803116176B9B9D0129930F919E2FEC280B2C8924E49E7BB75768A2EE1DA8ADBE -D4E3589906DF1B923AEF84C1BD327438B731012E69BB0D43A1842CB88BB54EA4516477F704CFEB28 -6E3EA483445AD4D74586FCF32E96D366901084365F693A53C5FB532FBFE7BC0CADC404C4985042D6 -8DBB90A6DCDA3531EE324D558A214F935CD9FCC9A0CEBE9B5FB0323F4B3820529599EF48EE068B5A -CE85004FEA2984F0A86F5AC9D56163BBFE1142B774148F1EB0A4DC89C3349052533A7DE66729DB24 -41B82F8F7360111DACF69293C9B281A0534F3E9E9224A75C49A832F28B2E497262475507B6DDFA9F -01CA0A6696E3F5AC7EA68595EBA0C2EB8A47813FF936D84AC1B23ECA7AA2862B793CCBB0DF9FDD49 -31BEF354CEC12FBF478559FEC29F81ADF4452E83963E56541D31F3691C93A50F0BBA5E9552C4F2A2 -3A6E53060729854A3DD71CC4308B91957DB19E66AAA18FA67055A950F1C2CFF78A03BC1A588CF624 -696068068719AFB1001C4581EE072113882D9052B21E355D401ED8CD24D067B99E616BDA5A0A5A93 -36FC499632B79FF2FD0DEFB096EF46B75E2D4E0F48DAEA239719FEC4D9A29818F5875FC5041A9EDB -D26CAF0ACE14CC80BA49BBA59E918EB3D8F1E541AA16026585A2F72DF7D83541816DE46981FB3EFD -0C30E458CFAD04C79421AB7C4925E23AEA07F9F018431C790002596D26BD9663B51B699DF53E4882 -CBC34EDE88EB55045B889B6062E35FD1E018BCE785157B85EC3B9CA6C85D4B16238275385B8285DB -012D8FB7C9F5B946A41D7A0FB878FF72C39683144D8A007CFF631B43748F2D5FC690300F9BC0C837 -006B92ECEBE0605E8C3A4A400E18AE8997D1B45FEE10068E247C647CF82C6DFBE5E881D511FFA687 -B7AEB78546BFD07D5F7EC242DCEF4930D8AAAD8C6152B6642AAC325963FD147F236BB850A9966573 -9D06CDBD7CA79A527DCF461E33F22BC9C5DB00DA2BD3DDDD8C99D99793BC98282AA8872FF96C3942 -85D82D9419EB78B6AE37A5F519397700F75D624A09BD255B576E955A323E784E8FC31131F003B0E3 -024A4F58FEF2A6C043796201FC425482E1155E229D1B2D43EF7B0D22322B22EF5C9A1BE026A1C3D3 -75EDAFF99597E1E5477952A4E8D2ACF5D014BC00DC2A272FA62B6983E27D228881E2EF2B8B95A681 -CBE90C5FDE16331C85222FE2A16F0A3C3000A63E2E21666C0C119F8AF89A543D37977069A5ACF155 -6324F05204CE8CAD50FF4FB630D9CBBFC324DEDA584AA56A99D3A76FF55BDC2C2EA3A021361CCD4A -83C7A5E2768D210FA6DE889FD48A39D679C94EC3C99A8D33FF11377DA7F6F1B71A2A05B302ECDE95 -4F26773F39AC881542F0D0969C3995C3519A8EF70B4220D86BF01BEECC6462855E7B686E1AFF1CA9 -1FB8FD8B4A69E10EE0C2AD94ADD44449506F9B6EF43641F2026EFF6E605C670560C2B74706FB949A -A7E8CC6A2D0D6207E457E7FD87EC1B9092DC68B9143947CC8ED14AFDDCBF8FDDA228A76847F96802 -E561F67CEEFDE45AE587673983FC04C96744DBAA83F2DC838D633943C75DCB9E6410474EB27B348F -26E505F0AB90878940E846C5E9F3C5FE8C3558C3236B1B88C405716949B8506841CABE1717474BB7 -C30DB91CDEE33B0F844811762FAEC535BDCF84C1C747CEF9B1FA61D2AFB5A81335BC42C06A94D7D5 -9B7EDE55BCF6F9867AEE107555CDD084B7684C2C87087475A39A9DA6347BE281CE5635A4D07865BA -98CE26C1465B1AB0343F49FF37B4D0CA9F3BB693D78DC3B21925CB996A038DCC172527FE57C07460 -EF39C07D4396E7FA970D9F22ABD21A9C794B64AD96762C7428F59A8757C36D6C4FFB23216195A04C -2A2C2E7B10EF7193931544D782FEE4B91E01119C5553BBC6252270A8D8C56DD62D448F5AD8DC69CC -B45E1F17F0AA1E445129DD00F000005B23D38DE93A3BE55A4C041947F36B4E4536E307D0180553F9 -2E46B743881CB5D5386C48C7D5F84C2BCD06B9C501F78C7EE61FA23516791FCF4DB278AF688A2E60 -10A56692AD92008497487EDFE4BD5FA083FA544138B20D6940020887E35D46E093B71F7A04A67460 -DC8116B4D4839625D7CA6959D6831CD93F81AC4EA2709036DD738364FDE71113BF22EBF13DFE1642 -E564701E6F0FFE7511EDF03FE448C2B28C64FB7D54B94CA576E481FA56B2B18AF10C71F699B6BFD4 -7459CDE1869D0FD306BF489A6F42E5B2F05CCF55BB6B9526973D19CB134CA7F13F1DB3716F8CC217 -73A832568C16250B5CDB16DF24BF81D49F5B37018BD310262EA7078107868AB0216CEC83CEFCAB1E -9F2C665A31585CA04DC01879CAA79AAA5AB201B516F7052B01B16BEE5606098393B0E5D9F9E5E3F4 -EB20F63C958E796DF41CF28839F5C62A0431648745D7837B519F3AA36BC6C08EF040CCF53D9B6D8C -0C7D1A84D707EC57A3C6AC9A62AB37251A01A5ED40FDEC6F5BE6E34C6A91D058319439778A2EE5D0 -363E2E1F33463C33327D05FFC0CBF08D5BC457C7230448972FB9B4D0D782BA7DBF10D3FFEF8BF523 -6EC16D4DD6D0D870D9D5EB5C64C9A46A4F583D4F831FEE74B0E5B33A09ABFD4444929BD8F638CD72 -EAB99CF2E9551DF427683964A592E49D186F285258C5D5F62196A98532421D73E3495F82695FEEC6 -E1952C562D546B28618FFAEEBEFF03A57F4D855021F85B0C7BC37FCC6DA9AECA099B646B99D41896 -09D3FF2D56422F8C37E97640293EC7C90E3380887836F4938FBF495CAC14FBA5648D89282D8D49D9 -1AF73ED36581139D8BD42551E263E830EA3C6EB381D85C42D74C50DB0CCAEC03F535ADE92128A016 -0E811C34748309AF7604919B66CD43EB5CA975302DCB6076FEB6BDD6FF55976FE990FB0CE9ABB11B -195403FB26E3D6C6A0DE1C5BE79E171A61E21F79EE8DBE7A832519813EF6B33EA098C2C32ADEA219 -AB2AAC8B093F40000995539D1276D5F2EF84CCD099B71FE4269BDBDB6A8D59C86F7D2E3FBCCF8773 -D0FAE97640BC1AD43CB4B992BFADFB09DBD0CAAEB8CD9DA264187C4F97300E9A6C9DEED5525479E6 -05C65AE336CBBDF4E5D7F79AD098F977285E065579B748FEAA97F2A753E1F962FCAB68D72BAA8EE4 -FF6691C23E31BC0F3E981A96FB440404856AE1AB32A7205B17D411D8F21C8C93B704D07EC594422A -BC368CDA2B1610CE6A973F4474E12B78B532666797F5755D269772C9F5400B3BFC6C58395D38527E -2CCCF29B56123F7DCEF3BDE5DC1DFC5B0293BB125085B1D2D929BC3EE84F4FAD571A4991C3DEE03F -2DB3A3097E52B1A7D5C73CCB6148EAC62E8E36DE9A71C57638C6E4D5D9DED18174E8C390E50B4A5B -913C074EEAEBE390B214B3A68F02862B9A296DB4B409769649E51D738CBBDFB7702E15C73C2AFC6B -C37CE15171F4E822CF20EFE55D9F061AA43E648989628FF79E65932390CBB15D8E621333B18B11C3 -BDF96F841D7434E01AD501FEA964A75B248A35CD9DF9A37E48A1E5A09C624B93CE44F0042FA00D7F -9EE89B9F7AB785E9C718CF6E7228F743271C2C9BBA17E5208B920E44E765D99D86650EB454B0FAAA -112753AA1BD3A24239E9C5FC47EEB1547AC9D23731B8DC48B9707830DAEC60C8D3790BBA1120F776 -4EFAC542CFFBCD5C05F9510B27B2534B704ECD36C8B041FD49A96881302FFF5B0163A2DD09C751D6 -D6AFEA9170A4F4C4AB8D46E62F763FE1BDA51DD1CE4A27E772F3A2869155F762FF26B7AA6FCFA4F1 -292E56F03AAB6322BF867E7710C34D43B5D85B45AA68014AD7879EED051B1933E491496E3E26D9AA -8B80A07BF2B94F1077E84A9726F08199887D66DE7A307BF33C30DD9CF3DA188088C03B2BAD09A217 -6B110DB2C868B53DA9A66C85737BA66C93C58A259860E294AD0191E3A72C73F40B0BD98699AA08DA -F03587B78F391F3A4313C58D9F29B53C70785637BD0C58310109C54091AB0A34CBB0C478613A7AC0 -FB8F0A8B4645AC966395D8BA775262CD291136AFFDDF01C1D83DD4EB3B59CCAD18057FE7D92A8CD4 -A58F22508D9FD7CF356571F701BBB23E749BDDCBF8A317FDA0AEFD952BB18545610FFAD3AC143D35 -1B8DB3F66293375E0E50235F0D0466932181D377EDD32A5F0FFA4E22B5A0CB4F343D9A7E4A342E9D -09DFF6C697630CD3971802C277A5590B8CA94BDE6B38446C794D072BBCCB724D5BC208EEF1B018D7 -39373BB910D668882CAA779C2D686081DE6A2606417B54D7C20E0E7F722648D893E4EDBAE8F00D6A -6DA3712F91AE860C756D1127D133AB828E9D80023B50B162C5A1C5CDF70CCB3FDD7EA060ED20838B -E1E50C4094C9E79E1A0187CDF780CAF45A725964F004253E034C5BE46BBF89D94631F1A33BAA35B8 -4FA2A9D08481C6674126CD96ED05DCE48BDA069D902D6836D5DFBA701DC0F98A863E64F0E312145D -8DC0B77F25B43AEC729A1243B45B08CA228DD6101CAA2AC5ADCC8EFF84A4CA3F254176C2CC711EE6 -C273835D0FD3528ECA2A976B88E51FE347FDB60F32370B66D338931D6581630ED586F349C638960C -31AE4204E89521A96E1219E696B913DEB2AAB7A3B022D06F34FDFCB810A04E60A4FEBE284C2F063E -0AE9EDF87704921CCFA193BDC912B747E13570066223A49F1F6E2AF0D4D65DA04CA876FF7A462FFC -9C0BA2CC545C3BD36DBE762F32B2D6BE5867C59F479195C92440DC165098B74EA5C3AD93CDF2D410 -B04C16BC7801E7956F4E5107450787AA592493171C3628E6B8F49D4F8429EB98DC52EF025F001387 -BC1A7093F7A99F10B5D2D7DD8BBB393BF6E56F08F4F7FA1A343F220D5A1EAE7168C74D41BE1DC1A8 -3BD65B72B982F4F7B34F24F97F9EC9A91011064031FACFF2A14921A32024385F4E061CD07D152E74 -1BF97156D951A342488FA7F5EF934CCAD13E2753A0AB7A1F565C2F7F6B349DF03BBC25BBD972A9AD -F809BB5C5048A8CCEF9297B2ED3324D18867F293CC66E88B3A39D107B610DFE79A3B4E83A96D3D52 -A17FE8A62C9FDD271130148366942C9CE57558D023DA5F7501319EBFA33DE9E6D1E76D7C20DB8A09 -B657839DA99F3D8143F1EE6253A3295C9651FA4366547893C2DC7ABCBF4BB7609DE5D001E0A36D9F -FBE01F7D0903B3208AE8547E2E5F14EC1AF4C2535CA8F4EA37E3F3CE172C7A1E8308995B1CC23E6E -81190246BCAB6E755BF868D449BB02A2AA87C44C9CC0F571ADC72547CEECBE104BB274B8AC16DCB7 -5D5F458D356466B921ACDEEAE384E2EB1DF6EF393B41B9747F0A4FAEB4AF1928D9AD6FB7E06FDC62 -1E4C6FC98CFB43F88584BD55D9B97CC9549093EDE586912161931162B1B1D52D0443260DABA02AF2 -B4432100D5506546013DA703573FA8013685CC798CE501960093DED713FFCCF89CA2B9106390198C -29A00864108CDCC1984A8BAB53919028C01B26ECC7925E38CBE6CCA8978EE21C2B06E7B3E48FBA97 -8E2A7D186E563C088F84AA23178B60E4729EE87D67B1091F3B6973676C1CBFE6530EB773C62E2C24 -97014AB0E8B71A1F4E86A378AA26591511BEE3CF3D64C94848582E1354E1605B6457823F2C5E640A -D3802946BB2E7E8E594E8C04B430C2385DD40746CE8534F50842E74D7115F3DB0C72D1C9C607C657 -3B094AEB73B7A79876CFFC3E2F8C9FEAAA07D3BFCE05B61F7749A8793BE90CCCECA2D7077F25E899 -D3331FE161A7E86C842495D584C6E4A0880B2951D8A13B88C4672080A0B1BE36BF47C3ACE7288CFE -41A8C1BAA6F0814A947FBD6B3AA72B6C73A8C578CA51CCC96F2352316C467BB960E981F2B6485BFB -44B577E71EFDA16E7405954BC7C9F0759F5A9F1EBCD2FA9CC9648D5831A68887F41B15081A204C24 -B4B992A231DEF9E698D4C3A25B6F5474F5BE6A601F2D337A58A0D21FF37FD91EB86D1D738893A03A -69F0CD743F611CDFFE69DB2C6ED0E4611D56F803BB0DC06E7FE85A303839612707647B1BE9FAF8D6 -84122CA9E5CB8BDE2936D3F4FF254D31529D7538BBD4D35539489F9E7316F24214B996BCDCF1818E -749A71CF0E8845AA1E2A58AA62A48E02BA4564625D20AA220EE719608521D7D7A7FCA0BD8904A401 -9819D371F3F59D46C1354E5FC1A6E5F79B20CF4ACA2BF0F2DE73DA193A6F9ACBFE0B4731C4BCEBE6 -D96FE822965DE965232282A3A130361F188B3AABDA95A8A2790D9240BE008B6A6DE4BBFCADA05B67 -86B9BB8E0DFA0C30043A3B07ED46277E07B9808422C8ED16758B9C396F4EA929D769785B2C9568E5 -70A83B989B25CE200F1727D41E2B702E7F88F1784F4C83FA60A74EB26B2DA95126E508ED519A61CC -151DB6804F61826C5F86D8FA89D06E526FED97A0DB88EDB432FF32C1ACC9B622EEDF601081AF7B96 -3C9CFC1D13E4A9C74FEA0A1C8E3D8653CD92A944D4CA6B0D306619AFD503506D77732D6514F604BE -4610C2560931BDE0B40939BC1D126B0E97F72AE1B4A9252123B54F7A27E0CFA4425B4546526FD741 -CA77952B10D13E0AC2E32006A903808FF0CD013F936238C74CC75FD915244C56A8412F37F0134840 -347699508D6F3D7F3203A25B7C70100719582CD588590EE34B3AB13E255B613A6D00386A0104CC5E -D2C646F09A88888D3751651D5646C5227A3C80E8DA1B0A331121DD2429F1F4775D30564DFF47D01B -BE2C6C72CE4D1FD9A2077C04D2B0274B8916F6A9D1A4A6964A534F47CF241D5A8E34B23F85BE9ACF -FC2FEA961F277539F215F8728D6788F67BEAF45502839BCF23D8763C3949352F00C579A9A4FC408E -C625E310DAE61512DFE6844E82D36A2F81709E1F05B38AE9C222ED62C961EE63593CED7AAF73CE2E -D3667740C77B309B93EEFE1B4BA65D48575A66BE86743DC9E5D3C2FF418D11F7F211B86E827EE1DF -C3613E7498030F07050524536D1F8A94DDB6698BE7B963C55CB3F74B676CD815A7B3DF4B1A0EA2BE -1B0B9A11FFBFD5B1FA49668AEE14629316AF436A0821C20BEEF7B3480847934A99F6D85B68F4DDF8 -859A754E009428AF89A90D1852C220A607FF0806E8080726EDC94D691D214B4521C147C4273AEBDD -BB4A697EF16448CD9B2FC95293305858DECFD406B89B9F3FDAE2AC579E80CF321EBAE5701FB2F7CA -D8ED04B4A63115886D45D6120F69AEF1A21D80AD3C2D35D2899F1902242B96CD349E0AAADA40F7A1 -1282B6B52BDD97708E58DC5E2D22D1153E5FA3F3B300BCDFAF98DEC2F4E3C82A1C85F985735F3987 -4F557579F422664E07CBE19DA680EFB0FC82C323EC5C4644C51709AC8D674608A8043C91E6C7988D -430F10BA6CE1FC7FC0604FCD8F723895250AEC36CC35B3FA14FE2A0D24095DCC30B2093F2298F5F0 -A97676A0BE66C3DC9ADACFE2FC0F721A20E945AFC1096A619075D5E9A264C796EC6C90EF1AEEA8DC -089B44FFC13D27CB2370070A52D4416C53F364393E46EDD7EDE00799960CE6E0D57E4909E88ADD64 -BDD2B0EBE2D73FA6ACF8B40280DAA0637E705C65AABD523B8815F22F23E9FF81E7829C7E4BC980C9 -143AEBE1A04DC0D253396BBB7268BD5AEEA356B610D5DCEE03135E00AE34388251F31714A1C40E18 -2652C48CDA2211A22CB6F02490E69A44CECB169754C53B16028D352E0119F5D5FAE0BD7EA1CDA647 -12A6147374B64244E21E9EC9F0D1381AD22D5B6212B26C3F9AA5F6045F25DD9F5EB4489EA39B1945 -331AC70510C5752557DE21D0A6CFC1EB10A98FA867B76DA6E4249469F591FD154D39E89364A43DB0 -07AA0D7A911CFAE6CE2B557997FBC44F55A27F622BD7B8B10EC9F5D10F2649A646FD964AE1B111B3 -5B46A252C4DEE44E7426EB5739F24E8A390694597DB3A1FE7800C97E59558322F0E49A0CCE2AD94B -1E2D1026AFA771723E3F523916F55ED866C9FB4A2F759651C613A2CFF362028CDF9D38F05D4C7C60 -24C533E930B64B099FB1AF04B01F5FB9CA6867E6EFF55A772C5391831059987E10CBF987E3F378E0 -1329F73D54DC0484177D3C3C06F67397955FF1CA4EF8AD1606B70455255D631A7D6EB92BFDBA14A0 -FF28B2ACE7E81AD666EA9B3A0F5A6BA3B5DFE35044FA4B3D8ED956009C60E98CC132F2E84967F4A9 -8A67B336D5EE7CAF7DD1F74D1FA08619941361FA7312CF225D89CEF97E864C8369EAFAB94D97F056 -5505D825972B754F6729596EEA91210B75DD8F645382ACE36DE60819A02B3B48DD00F5485F9264F9 -FA926D732E2C267B0BE8CA98526F124F97EFDB86132C5EF16B103908172FC51F286FFE45FF253512 -E0033F037FF182BA536A9EB2DF2D1DB257D9C86C46E1B002FB32AC70CA9462E6EB48994752CEBCE3 -9F08ABD4F4B0889283E55500702185A841E328 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -%%BeginResource: font NimbusMonL-ReguObli -%!PS-AdobeFont-1.0: NimbusMonL-ReguObli 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file PUBLIC (Aladdin Free Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file PUBLIC (Aladdin Free Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Mono L Regular Oblique) readonly def -/FamilyName (Nimbus Mono L) readonly def -/Weight (Regular) readonly def -/ItalicAngle -12.0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /NimbusMonL-ReguObli def -/PaintType 0 def -/WMode 0 def -/FontBBox {-61 -237 774 811} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -/UniqueID 5020947 def -currentdict end -currentfile eexec -E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942BF7D6DD84F1664B89 -699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED2AC419FF2B2BDE605B8EE3264EDD6641 -2D4F21C64AC522BDFC7C5502F9C3F3E5592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A2 -5032519D1868816E44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8A123E6A208511C6D0C255B9A5BB2FDEDB4D399C6CF1 -94FFAC236883767C0F68F4EF84EE696B677DE704EC3B097384F2E673A1F51692B7B260693738C211 -9F7D90FFDB21EB715FD5B8134FC87DBA320EE54C2CEC6A4D6BB350555EAFF2EC4F84365CCC0802DB -B3BD0E3F0D9F858647DD637725C2CAF9557FDF842A0DA6A0CA0F1B442EF8EE6CBF2B03858468A466 -AC5883CBBD3815B283343B39205803C02C917D06825C09E2BB14609FA32C28D720C0E14A4B12D4F1 -25FF6281FF324DA33A56FC49987AC7D3AA206540F8127273FFE9A3DACFFE2B1C269D3DB9A811578A -C7D532C2EFC18376F473FBB2B32EF642B19CDEC1D6DE83643723E3C6DFC87F97A7007B6081894BBC -45C955B7001EB36211B26AD7A3D07459CFB33F9C54A40A360CB802FD202C8E93D4DB888B325CE246 -D02D1220ABF55CE646DFB45F07CB848406E470362F80CE4C02D98DD845189877732744CC16C7F566 -9F77EF096EA55AFF98AA103EEAEFB971731EBF3782E6AB725D4E9E35B2968689E8007C038CF25B6A -E69451A4731E79AC22BD268F56942A233E52D71873E83E00A1874E04D3B22E72FB2D0671AF81C698 -53C389B51F4A257373AEBF4DE2DA1E4DA5E2CA88941F81EAE0E32D982064C8AFDD7A9A600D56D736 -05B9463C6240606B3361BAF22AF74EF89AC804A5793BD512DA2D13F4BB1B73EFCA1E621ED2A65D66 -5AAD0AD228B3B7E3D90DBDB6061E172B686E92355A7C7459D83199040A368B5697DDC3B81DDAD341 -6FF4405E1096B1240EDC18A0E9985CA55A0D697972BB11E9F1BC30765D6775BB68C69704BE200EEF -4E11B78ADDB6229D8FA49A6B1525ADADF17122C0FFF51A08AA7AED158724AC4352EBB91ED0C157E2 -4281BDC1FD610195F495E87062A8C38E0D046DA4067EE16E81BC5F87E583315B973184E474064482 -9B2A52E0D37E249BAB31988B906F891AC904D1BB8901F0673AECE60ACEDE97B8DB7935C6488ADE8D -FD898027424AA85A11A3DA494498B084133B857017A6D507D70A3421235486EB3CF7613C59139FD4 -DCB92EADC60BB6225D9CD0599779217BDAF4813A453989B2E56903F4DBB83D83DF4837C86BB4C3D3 -CCF98F07A23EBBF7AB5687C3E1E6792E40F92A7A466DE352294064537505EEF3F9C308C9EB94506D -B02CFAE289F10005A6E42D2DCE43731A7AE368564B2983038DAD6987F67062199018395BC0FCAF28 -7A2B040C71F7325FA1E9A9808979B2FEF19096B98B8A0A728EB98F2BA3D33B49E3C20BE992822C7A -1BCCA5B4E4D1099D456D8D7D83C57ECBA0FF21428024F7572A1470317CB8CBC8679A974E13D88C68 -1338C68C9AC9557F97784F4E1C8C2E61F26023ACF46232CBBDF3C0BCC5583B935FE9FA09A562129A -8927AE73988DB0F7E733C6561CA7C9716DCA9B88208A715166F2FAE6D5EFF289A9B2EDCE813403A4 -16F243F1B57EEDE7D81E10C2DA4065A3082BC92A38B2457368EEC9C3C17296CB09819E9E642D7365 -F9A6EF430FC7DD611EA5FDBDEDFA72634AB599EB666A5DC178B0A0BD1FAB042792115EF3B6222C12 -41DCE36CB38B738F68B1B3CB489FED9E53315553F3C5C3BBCE40451E47B7EA53FD3D3ABA6CE0AD22 -5DAEE734BDFA3BF1D81C1B42C6D856A05D0924E03F7627C5EB24D7FBEA3BD85716207F961B56803D -BE046E81ED5FDC378F9CA52C14FD8544CA7C539201BEE06487EBDC30FF3B28E8264EC7FD5DA7E080 -65B0A9147344CE28DA5182335875E9F8B2347A44E33DFAA167232A5C3E69E8C5B58B7C7216537827 -C936F5741B87FC68753EB0D4A466961D0050DB59DF3195BD3379F5647F8CFED35DA952D7CF2DED45 -EB442DBFE992711D22EB228BDDF36B8D7DBA27062D60D2271EA8E8412F4290B58F5BE26FF06F0559 -872F9DE4DEAABA015EAB4904BA1F509F6D517C6E897312DDD571D769BC474FD378AF4360E8B1F103 -AA75F48721B9E0BA589319E15D74AC0B03D730C3EF708C7C504787483F134EA6297097B46D2680FF -8AA50B7A255563C88D594B912F5574564A1371463674793E4834AF11D14C7991E7FDB3A6ABF8529E -1A4F10CAE79C60D37429579093DBD041ECAF03824DF9C007E96F45595A524B27EF8774A83AEEBD3A -7134AB4435C80944DEFF5C1CBA921B0A41B9651968581DA4834B3C0E6D4DE13C1E792FCEED26A72A -DC4D9E3903661D8803DDB58EB2B929CE31FC9F50A694116B00AC9F3EEF53FFDB1ACA3394BF111610 -38F39917B022394C75A0D467D64B89A44E5505DED7D9C6B8BA6BA098F140C9C00E09200EB4828356 -A2D6BE9EC1D5524B09C06D9C6FCB5E2808050A339B5E5FD4DD6C2035A48FE9674520901EDCAD107F -67AC8C8E508E6003011978D77ED225F361BC0F86A98B6120EEAFB73F7377DB1E7213E02D12C330F5 -492511B4DDE08558D75D5B8AA2D56A3111DCCD257EE96E3446EF1C76F000C8916C4CE261425ED9D1 -5B58CED128DAA6C1300466E7B152BCFB5E6FAAB2519B8A98F26B29F98133AF886A0AA7E586A090BD -A1DC6120DBB5640885C609A8BDADEEFE5DE0DA5B75A8A29E92515E86E7E66BB29581E5AFF8CB6551 -D8D1103DF60D558E7987E6F56126A13DB2C9A04886C655064E68A0A20D1B7DE24DAD22BBFEE1B7C3 -C208D4FD6A58DE78D6A0A6126EFDEE3B1A9713DEE94069A9F0A2B392A2F391C4C75327803B53F252 -CC9EF0323F84929BA4716C50385681FF5B4ED54929821594F9026B7C1297941B178C3F8A704CE097 -60533DBC6CF4B18AFBCBAD039ECB2EBDC7838A9410E7B227924BED7123944675A5DBCA388B710F8A -F6048B03DFB713F881EA0F3B191A5CD989EA150B979059C8AADE403855815D8F7980CE6288F47EAA -37C1097D33F13776F08779063C5217D7408D9835AACBE5C071EA40C9AE6DF685F4A9827B828815D8 -F3A672E73A418E5CB15684EB6C6FE0998A386E124D76620446907F993BE16FE5AFCEC681F585601E -18182EDCFD3024062A3082AF97E803C47D32229D0A24596CF7E03F18229FA631175699E2F0D60FC0 -9C4F1954C5D12D03BFB4395F0E5EB6C6877083807D91D93CA4177A6B5A8D2AA500131FCB670E7118 -73F8A3C77575EC93A3ACBA37EA117DB268CF10D04AD0F079484DB124F6DC14A50AD3B0294F7157D0 -837D8F9A6060FBCB385606066401708C041594E0396A0BE4B8B66FEA141CCE4BD29366A986ADB98D -9A6935C49C57F8CD415E93FF8AE0DF75E463E02AAC68DF064C1B789B685F84E15E512404E065A39E -9E8F5568A7D97671AE1602605FC7E4933975189837586FB1A55007FBB0E91382A629277C36A190BC -85AF49EF3F0F38D4ADD2B5DEE09916B79690EC83473C63E92CF617617A66DF472A49641DA10654E3 -AD3880D060B02A4A6C75B51E4E9917A2B6D8EFDA12D59DE5A8E222DC7E82F02F23A9D3DBF637154F -719B14114DBB102BE5EB76B441D7E9990EF6420C2E80942C8AED5A1D0B19BCE115B5929AB9E145F1 -496753DD6B1798324F5EC1D0C7F26FC3045D7BB46A14110C99BA07A45EC16002CB754C0BAE7A1A88 -EB387BB345FA70B0A38AB4D532C2DE49274D4F86F2582728A2CC54B4C09D26C0CDEB8FEE6A42885C -6207D74953CFCC583ED82DD7C0F29D35BDAE5BB251B8A2D4B1DC97E2264DCE035E359DFBADDE84F7 -37EA6A59C23D1A64D963E635769233624F7682EA34636B595CCD064AAFF3887D916867475731BFCB -F7F96D5E5E1FBE6AABF454C2F504EA4E8EB382911560195295C87793D5F7739AD7EC7176E126413C -D4D1058EBD7D6EBEE14BB94A1ECF28B686411D91E07373E891F78C4C0A05D2E8D90A8AE2614F7FC2 -63A762D0F43485473A54C31726F8547701D4A38D20565ED1707847AED9C805780F062B847E668E15 -565CBA07A72B0BA99F03FB57D26FA26FF579C30EED0AAB6FEC1B5DBEA81AA88F16F0C9BE869505BE -18C1CB79657D91D6706E2A3F0BE9920655B93EBBAE2B4D0B5DF6BE622C951F2CFA42AEDBF7AE649E -2150FE87CDBF5C2685EF36051080BF39D864573A45AE2648AD97662B1F69787031B9BC43511FB841 -55ECDC3D91E2475D072BDE6A5207ACEA1E0D2ECB1DA8A1BC4BEEC335A5C7102963E84B97BE741C44 -58ACC3D72A7E53B1F08C955F33EDC3A0DC3E7308270C0F7FF814B111459985733C62E8863625A551 -837952F3CBF32ADCFD9F345E14B585B23ECC440775310654DAF7F41E56FF45F89701292019A94BF3 -0EB2D65E14B1A1D6BF89D4CC43187ADADF3F6E03A90ED01E5D876BD3AA56E5EE84DBAA4DAD9824DE -9984BD45AF96FB8A56C010B3C3A3C6139D58E9D69D9109DB18561B55EAD6452497840B9AE90C749C -155B6329716F0152A7AD52DBD0B8A25B9995E1416681F38FDBDFA443879B5C4C25AA29E0DCC07DE8 -BB161C36D76EF286EC88D57C74BF44DBCB4FEFF771D3BD82C8F4E233357C48E516EFE3DB9E60EF16 -8E2C45B54651DF9A5ACB5F1790F7929BCB16CE5E9F6A43919AD287DBC8E12D9F9E97E5DBAA592879 -1A5A02D39D259F3CE273A870906A643CC18D86E23F115D2A35DE6926053D8C84B940B362E7DB183C -4905060316B269223DAD309EB5AC96DEBA757BEA45FA3100F77F4765334EDF3D659E09BD1A5552DA -492BE9174DD406F8353A059ECFEE3709422940A8C369919EE1F22F7C02412C995FE93DC4559D32A3 -155DD22D3526D89B16D9ADDC30CB7ADA6E52D62C5F2DFD142D4D7B6E066671EBAD08F54917E31704 -1F410CFD8A3243F8B39459C418B7B7C6494551C6F6753A94072D09E0D812351D62916383C6E061F3 -5ED864923002007E626089772D269B298DCA2CC1F25D9BE43FD8AD62D554C16AFEB7EF6E5DDA66D0 -5A810F003CDDCFD2C02FFF02BB61344968091F67D3862C1499409ECCA137B9A2A9BE314995B818AC -CDAE27ED4AD583BE29DDE4E8C2400C5F8152C85709AD2A4737BAC768FEB70CE81A92C9657DDDB2D0 -BCF9169D272A063C75C150ADDFCBC2F5F2503DE3D13231AA8CFB396DB38E80197A605F6BC20EFA1E -DE40CF424CF221218D51BEACE64A3DC88377E4F3EFE43DB4F4FC0803BF61764104CFF0B618C90311 -98B094E20B0FACFB94240B438B67BA298E31D3F4E31FD190E48BFCE27B1BE29D36E765E7D295E96E -DCE09094FAC43B87E294818FDE9363FC7DC5EA36A1497EE25762D02DFA00A9BE53F87ABE62E52ED6 -F59818FDFCA643042EC13D670DED1980413950EE43372D31AE2694B83DDA42E1FBB049F7E7B7E69C -93FFA3195A2462423DD2C022E5141783FFA07E192AEBC5070F08B23AEC9142EED56DA74F93BDB504 -78DA55DDD0A9987FEA131E4CCA0EFC51064E4B37632728261369C3FEDACA100F1AA78FB718ECE7A9 -F56296C5FB43781E63F36B0E1D34BB748EFF35E1953941F94D1A9B0FA474FD68B47183F2AC53A63F -9F1D30B9B89C5FE54C3765B43DB403D57994701C133E42B950D9BB1CA202F15B5E590EE75598FAE4 -3D5CF1546572770BBA9A6373F100CDC61DB4E5EBBE0A93E0E51C86005E333F69110B1C8E492F2BF2 -52CADD5B73E7D3EBB53E759353F1EF3C9B8B39C230D13AB7158A5D92EE4C452F81F6DFC18803280A -A023832FD0DCB482CE5AF615C952BC3F7E58F6417D69775FC7C0D5B405AAC632857736ACF32B2EE0 -F2A2C0F3B3CAD483C614505BE94706322F2A2830FC5AB592907D0291ED1873377E7A6158140C2CDB -1B0E27EEC9CA50176102200992308045CCB5A169B61EA0546778B8D280737319046716604945A21F -2A1CB9E15E3A5DB31E0FB5A3B0AFDFDF6F3424B7536D473F9756CA3694DEE4301FB1AB1AE47128F8 -D2B461C051C1B999DBB010E78DD13AFCBBA6F7D5226D540527F17881A18F551B3EEF76A7E28B4FDD -879381A2217EF2FF9F9982E9EA70AD2003B862D7C36D57C5FF9FBEAAB56040FEE973EFC3B34D8319 -1960010110BA10694C17B7635AE03CC1CD087C0B05522A7A791F0CA34022A3F5860B536D9551BDFD -BF560A07F63AA4E687407E5E48584E689591F1B52671213E430A708C06A34D2E1D51CFA6B328A122 -007C81B5EB263B967746961BCFC8772F8502DD95898724ABF369B0877F3313A167F3F714023C229C -5757D4D46FCD9B4AFECD093DCABE52B78132CE9AB6225C9A344C4BF8D96F2C50C4272CB9AA0D606F -013B2642F8C880E08EA2822C8CF5097D2CDB64932FE195ABD5FDF36D3BE123AEDD8BA2F82A8A628D -BE3ED6129DC0FDC4BE50D5574AE4FECC65062E70F4703BFECB35EADE196294FE173EA57938679DBA -6D15448FF44C0D1A903B202439DA93C0B0E612110068F8079219AA89F435E44D0464F54833BEB338 -670BD820D941DF4B31F51B895BEDF833F9C43CB7616DB80F988CE72FD3C12C7D49F740CF85B4766C -0ED398EB837695D102DEC16E24B7475A0F5DDE88FBF2D6B94F126417C811E8362B9CCC52D8891C13 -C10937AACC228D621D4712CB9DE0BAB60EDE2A97E9292BE04E42E6D3425594DF56931A61E1F96172 -6AF6E6891D63B240E6E79E5BF30C052091D681BA1102409874CFD8EDC3EE2BE331676E31AC00F807 -91D1019BB789CA4F5907F4823B002AF3581448C352BB67D80FDFFCD1C5BEEF60523330AA2C045600 -8F62DEB55E69AC2F86369FAB1ECC90D2487954E61117A90D9269A65DFBDF297EBD29C3DD1F62755F -8F289C42A534F59650685F8576EA2FC5D26B99B8E3DCD3F1FEEC73131000F99AA9868EA9BAC0B56D -AE2CF46DA6CC1D18C0AB8D77BECFF7B89992175CBA2E22779C13DB9DF53FF5B1C8FE95E164997D94 -202C37175E562C8622989B075CDCDE173452C064274354D5DB8F7D5A78D48AD4A103B9E47500D08E -DC7C51C1F3CFA7F43C3686A3C24A7EB5018B0F419961564F87E212CE0A0741AC68D6822C7AB9FD68 -85F5D0B2AC249CB7F50E2353CC4B0A6A24562F564FBBC7090C3FDF1284AB0EC615E0B3FBE132F315 -70C8A65C814F93910AA4BB80D516CB70D2E1D11969238E6F022D628FA2F33A0A15C4EF0CE7F753DF -80A8AD9494885A1B9ADAE6C38AC9DA6FB0A61696AD3A502630252AD7B574C841117D34BD20BD6581 -217D977B35F5D04E02B933E1E84F5C090F6615AF484D63265D28517BA74BEA8876FDA332A84AEA12 -E6CD82B94AE10A778CD3A216ABC08495EF319F06AD6FF8ADD237D911F846A514FDBFAA8A1EC8E0AA -9F80F11F1CE615519A4B044F3D1CF1A17D7F3D2174222A5FFA8B39F20197FF6CAF250B6ADBDBF519 -1C525070C8D38220FB501C223F493D80F498621A02EBCCD6EFE914F16B2A435D60C0A1A453E288A5 -3D818FE1EDCA7D55A26A017F2EE47A816E90D6C3FCDF0035EEA307DFB06D2BCCE43458A67354A4ED -B6E5C57233DE4FBE41ED07EE5EC77A5DFADC4032138DA9E1B74428CAD02A913E40152F8063A774D4 -FDD4070E4B8A6C089F199AF7C529C277E902195DB760D81EC655DFFD1BB283F3C5AA8BB58F2476BC -797B2892E94414ABBE96D4DB93E280CF7DE23EB852E7CA954D6682A6F1A4BE0507884C2A05AC863D -2BA73F3B54668397B6C54DC2F4183130AB414875F3C3D8792BF7E5FC4D228DF87748BF0B14178DB7 -E3FFB7891D700A1E9520D778B095DA80E4801F53442D5C073EDEB706A5DB8466FFE7E701ABA9C364 -A37169F585C883A83713A61C9C3BD9336A667EA4E3DB5F4DF6BC6A552BE8D3EF093639EC67E5FF71 -8959F9902477F5AA894ED2D1CD312ED82EE417D95C49C96671B23FB0E1738E892ADFFE62EC1C3D4C -BEB6CD089C98DE8D247DF7ED17DFA2959D3662F105E8386D75AD308480536959F8E6CF8F2C6937B0 -9F2E8137C811327D6B165ABE46C51834A955FE8306D10033F8C2A34667F13A8BA831CCF52C7A21C1 -3DB92F3E77B55CE291F6190BB1D194A33FD73151C3F61ABD2D8A0C9BDE90E796BD996D2D0094DB2B -E98657E751BDEEFE8A43EE4501B98F0CC6D80805189438872A60047A8CAA9039893530A3E5F6BD75 -BB466B25165737C939AFF3EA59BFF4A7DB09C2A5B36B8A1F0C6C5E5870C7C9412589877EF44F8428 -4B8A53B5B74315CE72D2EAFC631BC4CC2E5B71DC958B5A6350CB5F615C3A4502E973622E3E18193B -69572DEF1D02303A375ED60ABA1BC8A179FAA0F221A49078FE15AE13383585FB45FF4D5F3BB3D0F6 -D8BF62E9BD6BAB3C9A7D38C8A5AB0BE57ACDADCBD02B1DC7952D73AEF702D406F62719922BEA96B8 -FDC9B879708E794891C7A0A42F2CCD6812C3F4DB030B5178E3A627C3E77621D312CE4EBE815CD387 -7208FAD92761A5396B67E835222609F823728B1C987857CFEAAE21F2AD5EA9D841212993508091A4 -A2C268BF1D8DA1C650F6AB93995E7C13A3F84DB55748C626FD09C0DA1E3325CCB0BF091E996245BF -51EB486680162BAE63B6513C74CE83B92359938439921950D713C69324A87BCE67B45A030C9CF10A -DFA0A82781D49FF224AC57A23C6CB321F95915C5E14E41FA852F66E1E2044A9E7B1DC3BE9E818515 -D28B2C4D2F2210098C39557067062BA4239F2AAE28816D999955910298A450741947A9A1AABCBD8A -FF3530626089978C87DFC73618C044731B6DB8007739A9699ABC354A6F985E03C11D750B8B9E9AE0 -5436205FAAD1B895B159E2C90562B82A62EA1A7FFB501767DCE2B11C51D55A17529EF5ADF0A0EE9A -96D0E7E89F68E50EED813836531B4B46E9071E84AA413F4135CC882CE832BF78ECFA7CAB0C9F64EB -92C86DFCD1152BB7D4AB33831AA0C139B555967F6346068D5C3351A7A4368EEBD2933E6B9F789DAF -37EF536FCF965C397AF1B7F98AF864B301F3F440B7ACF704B59540453678FD6C1504519481893812 -3E2F47B265EC4F5CF2172D394543D84CD4281165CBEB11349B315A85DEB2D1699507B0C8C110C726 -62EA2959C4962FF093AA5EE6F21F89B3CCB0149CEFEF1855B9A48D28BB363416C015A1F4EA1975C3 -D8807F616C5817C8162536176F464A198EBEE6C97029F15F414275A39B8219128B8C8542E9483550 -7FC2D3908BB0EC375771280B9EBE87E827811418EF93E52EF70546891BFC0FB34969FD7DEA4CE752 -4D9EEFF2B46BED908C0FB2E02EFC1D1624642EAEA1CAC1EB4841E020532E88E59AC890E6C3F44734 -B99722E9816402D1D0FDF8045C5481EC055100836EBFB48E9FBC392143032C909853C9BA38A19363 -141BED09DAF02FDF4E7CC9808321CD0708A1B45270BFFCC3A0D7C27F7E781713D5DECE82C72ED303 -86B02D14575A1A6447547ECC7FAAC1BDFF332C92984758E242256C054656CDD2C45D46E67AEC6F83 -9F95D74E222A6EAE12EFAAB723A7C816D4E42D4ED2725A794743F67597F3DB8CCDDE45BAABC25726 -B851E02E56341EBE69E4D91F2A233583EC816F18A1DECBDA4AB69320F55E730617360FCFB8AC2D2B -737675B406297F7F8C4BC370CB084C22BFEC5FEF02E9AB290282F7B153F0A4B1AE569F1E52371A43 -46A748DDE09336CAD1F5337FC3D7CF0677091E59480AB15021E023E356B0E1BAC6C6471AD53625C7 -0206C338536F4D0D40733AB217E2297F86B593717C61458B6C93A16027CC886A8CFDC01EF19C34C9 -A608B95A84B6A2E31454BC03C10FA55CDCB7B1EB7DC16AC1E93981A46DECD7E7F00638DCAC568744 -69A2D9B45CBC81398727E4ED3DB5DB31965F358D8179CBF934EE2C4D652C9CC211807F070C80E3A8 -222B4C31FFEC8DFB9EE07A94C973462254BC1B1581903EE6F9AD91524A787129A63FCE048B45BBE6 -855826750C586B6B23B805FEC3E7AAAC079576949A06F422FC2C826BDB78AE96135E9E2C20C2B2EF -F6171D610B2EB8635ACAB7C5C5ED9C9FFC26CD54D2FD4CB9E4294E178CECA1E16CC8E3FC06518BD1 -6F4D63AE2B435753538834CDD9D8AE7DE624006CE688938031336351A6578C304C2E5480A3FCB43A -8BEE4953DABC30558B7790C6E7A6F0F9FFA557C50417407AC6A0DDA1E736F7070BC89455FC293453 -3DB004AA9070734C8C2608A07330E421A0220DAB99F8A77489132F6413ADB9EA637F3B75948050E6 -67276A55BEB09D4153DC126BBDBE0DB9298AC799A943D72AFB769BFA1488D311BEB86A907EC9385A -AE4F77835DFFE4389E3D9ADED1B08BBC2B1ED6084B3D1074A326CCBF38E06BD026919107BD03BD9C -30470DB779508DFE0DC82DFFD2DED749E872EB7EB9DDF509D5319865070DD76846C34E4E43691AF4 -29AA40DB4BF2CDD50B275589987D8081F7C5A0461AA5D1455A660178A94A0BA0DCB69C3CEBF5EE04 -26D6534F6F919D9795AD6A0E1A1F452AF3B4CB2EA54D6011FA809132421D111EFC51174E223AB6A1 -3596411A9723079231B050CEDAE7659CF168C39AEA9C6902C2CD37D25492CEE00096EDD63DC7643B -667FDFDE5B595DC54F0A72C2650E1E46990584C78A5CEF9BFC3C5F88CFB0C49CD6CADD9DBA675177 -D601927D75C6902B55AAED0E9E3CB52A577C887D581B3CE6201A1C77C9546CEE5A13B92963337F17 -070E2BF9F5C5E86B84225863874618AA50F4DE855DE567BF2AB7163944ED43DBD7F4BBC0E1623180 -7C43DCB47B2EB694E6FEDCFBE26194D2D9943A1BFE32AA1E5305F5E341EA021F91532162978DD1B8 -C5295A5E7551E2DEE46DC2347C6B32197AF430AF3BB676A53BCA9BD1EA88678377DC0A9A86E2AB6D -E29E3E261BFD5573C66FB5687BA9C0544D894A759866B066E1DB5C66E60AE071CC3A1C4AE40197CD -E4EC723F7B80137619DEDC99AF57A5497D6E03C1C9E672E74F48F6C213A3CFACF2699CAE72345A51 -C71C1D69348DE5BC5F443EC0EADE1E76A8A33066922CF3869E3C1D26A3B34E540DC08EA4DA2DDE3E -EB17C16790DA4EF1A3A76D71D34B788A87838BF2A5A3DB8176F9C097D2320050A79EA6C4A94926DA -11ABCDCD26DBA09FD33F30AEED977E8B5AD928F3967F607628859429DCB4ECEC7DA3411BE35A0385 -1017B535985632639D378CDCD13B00FE537A49FD9EB6DF1E3AAF5C41EBE35721FA6833C2FE08AA3C -FFC3477E7FCEBF9EF9F4DAE62FF78F319481C3F1E72999C8A493EC6EE295316B58A5CD62FFAB62C8 -96E521B678342F04BCE1613CF7F6778CBF5227BA20504500D743270771953ACBD5C6586432F3FA6C -0987BAD33B88BC6C15D29C4B3CC54A9DD72A2357AA5BAEB2CB057CDCE72DC80CC98C62B16AC50B4C -6A7641379B766CDDF990DBB2FC7F9CDBBA755B6E3DEA438FD6699C30A99A8B3178E6D613AA938120 -835E517431D28114BCA1AB745C11FE6E52ADB82B9D3D53A33BCC49740C93017D9531ECF43831359C -5C93CB0E926DB440B139E3125CC2E069B1CF6D96EF68407F32DB517242C3AE0BC6723E560B0F45FC -7F87A5E44E1751C8B7F9F669C24AD5CF16F84FB03BA121B86B0694234D8F2C9C947269AF96FCA08A -78F736E4E04ACEA44C5BAAFDE360FCD8BA6A59724CA86160A5527FD564468123D302DB45173C1B21 -6B01DC5B6D3415B13FBDBBD3121A5493374B3357EFB131CABFE5087AA1D2C7472B0377066B3632C8 -2073C6A846285CC953A8F28E131CF587B35217EE498D9A1DB57B063CE068DAF55D8CC1771C0C3099 -9CA4FDC5D67BE4E7E69418F6334BC6149000821B89A7437CCDF9A6A0ED702D5968F1E04F7E4FE9FE -C9D1E994885CB624035BBC5426CB8EDF0456828F8EEE75BE491B45FAC192A405EBA25CAA4F4C66C0 -DC234D7B417628DA5276C08260BE512B2432256C401A66E3B583E69D23E9FD278CD5F2178544D054 -16B9B4F61A88A4728AF2CEED07C08E207F31D644E8E3BA1E4E2F9D8E30936BCB9C6AEB54E37DB46B -D64F2ECC1021336D0564DF0F18E5A6B6BA470233D8D41FDD9D1079706EA685B6D8A740570BFB78E3 -984BB155C3155C69BCCCB41CB51975EEA1C1B4294CB546CFB03DC31BF86EC3BCB1977E8F94A771CA -B09DE12A82F1D6C791FA7800E5A21DF81C9C8FCDA78622ABE75B54AEEA747AA4F26D563200992E33 -7231A430137C720A17D44F3AD6CFFE63B2DE12D3184BD3E151F955786B8DDCCCB290C42718F3A219 -1759DF76371C2FC177544A6C425CAB14AAAB31628A9CF9D71B5257AFF0D59843989CF0D747375A26 -DC9ED29B66AC2147DA0168306C48C2484C70CA92F33C0C138F92F276F5EAF5EA3082A8A1CB12DB66 -1633C2F71E3B69918F509060AC949FCD52C36498A2ABB77D139DF1EB33E3B846A7C1BBDCEF5DEECA -4EF0AD250CEA9C2751E13EF7681E8FAE0491CFA6C144DBAC1FC39D39E76EB12D3EE9CA159AA77D27 -94F0C433345B135BA632F544082BBDC9471E9FA3AED3A7D465AB7158E8AC97F68B1FBC8D368E2350 -45C18EFCCADEE98778D894D96301F903283C5AE355A863BB0DC5809158F7E108662D04A5C1234915 -E7BD5B4C30F9EFA55E702E54F87FCA06FB321507BC57A1E55CC117E21AA4E3A4DFB77C1A949EFE36 -6D93F2BD827EF8CC16D387CA82AC039F77FE995BE6D9AEFC87F8D809E90C1017803BCFA1C737DAD5 -F1A631EBE6894AD20C70791665E7BC71F21C2C3F4462F60FDE75C8A377CF49BE99314663C6ECB538 -B1BF021B2F2174D2B22CF6FAD115EB0ECE8A2E64097A5FB0A2AF666E1EE13276AEC59FD0C9D4BFF2 -3F71E835984E5EEEE36490C54E077AD7355DBC98BDD37DF29B3DDF8C55480B7349C4D17322418705 -796A8C521FFF920DD11773FC44FC631C7D6E9B420D7965D7F62EC7385F2BE30A51E2D796483134F8 -40AEC71FA19ED1272C27F98F2CDC9C7E54DAB585AC1703ED08F5F9E825564902EFD08EDF99DFD494 -44C21FA6BE16CB8A1B6D0C8A5ABF80A50BB8D055483176FD0AA07EBAEAD88FD694F96FEBD60751E5 -C4D8F9BC747D4F4030BCDF9B0370B7A5E0A6923FF60DEA16EF47F886F10CCEE6956ECF41A21F7C59 -6F3BC78299A9657266807E01762B2B2878E551914CA312C2A68D34CD91E4F5115EA1FBE801346E14 -AE529049089B6B0273E258785773A9CE8E4B6C4211CB7C2767319576758F811CBAF3A3FFB41B3130 -6C49F3798B698A47BFA2E3CA0251C4D90C0B02ACA28C611744526906791D9E157E54CE4E1BCF5B68 -6990BA8AB7897D624EF00EAB92CBAC255AE9177DA9F0D86447D35B452CD2F337147B5D3EBBF2B952 -35778A72914EB3707EA78294B3A3BC4ACB19FE87C72AA1D982E4B822F07B115CADF4D3E7EE3D1BA7 -08653BEC6F0A352A0C33252ED0630E7274961896D461EE8BF523D5911BAC1C8AC763E5FB11FDD217 -4E1F129675969C195476C7A5E18A81BF9A11ED9F2336D5301E3BD32174ED5C933E8C85D6272EA218 -52A6F7E2AAB174E0965F73E0EF89E906BAFB181DBCF8B1F5AA0C12D12C6272753C016AFEC2EC9F95 -41B8757874D6F2E061ABBE8B29281677246305B3C41E90418426C575BAA216CEE3C5EC29B2FDEE1C -77C14FDF940792F48A56AE80AA33E370B037CB28A7373F882022AF378F26B6006A049FD3B35074A8 -65C97D153352ACC156992C00DE26AD21C982C71F0EDCFEB61593BB40FA5F2CEBF23C4FF34A4F4BDB -73CA273C269242D1C6117262B7C47771F2619FE5710855134A80FA8F92BB2425CF88940CA3450F81 -234ABF2B11775929B12CFF86442B2AA0F4243D324A5983E5D1829775B3C7A111D5622D1C4E2B2A2F -982FC8A95F789881416DCB34950A393F4F1720D2212F3D343A17683060182355DE9E4718506D76C9 -184F8DAC55788D7E603CFAF4907DDE965A49C323DFF425FE88C09AA4A4D16283F9B14AB9EF1BB885 -A954034710B4A9DA4C88A8A0932B18D139A687303EE562EC9F656F12F3E8F27DAA9C75DB0FA946FD -0E1A982BB58E040BFC0A49A4AD8CD668493FCB573C849EC5474049A693CBEBD4D79AC7515047CC34 -7A9A7570C90861F3ECFB57B9F53AB9C0D6B05C8C570A8F3C04D58555A45524C98FF091B8F8A422F2 -E0E9E5A7B7FF69F1CEFC13E42F1CA276BCD584516D266BA6838D5E9CA9E9854F50C7D92CAED61AAC -AF758A7C7BE59C3BAA82BF32B691ACA3E8EB171E08AD22C39FBE586A54E6E4DE2CD86B31138546BB -8DA5834B2C6E4838547A1B67E651964E43988C8036931088904BBB589CA901E7EBBC094C0DA81E09 -1915D9E46828AD8596FD0FCA39FF12A6C27A359337F973809E81B2E9E3D43B3146F2516667E607FF -EB9AC80FC95A7B7D4DED551FEE0F3561C70DB2D69ABA96673E39E3397F1C3F8FE5F48BAB8AD6E0ED -8901F90F6CFF24E80CB5DCAC498506C4D01033E497C1241E413B022227A3264DA68BC3F91B35781F -A2D018475C199F43CBA7D3A0D5697B45321BAD2C394B207136E1E16B41794975E8903EF2B2E1C33F -87CF72C325C11EC0B92FD3890ACDF60B521DA32596763BDFCDCA837ADC6F26F129B23CA32F9CD39B -33E64576970DF3C05B8DCA4BFE2F17E6C5678B84D69494F1DBA9FE0446AE6AFEAA1FF245C07916C7 -B7569E6267C42B459435A1D116CEC665B311E404171774C0ACC8DDE96B0D9167C8CC7D99C4240559 -2D745C4428755500EB4719340D2FC6BC215B67823F69FA949C08B5EC985D7AA87C9AC1F9BCC8994C -6CBCE6027B7D1E0C22A83A5DE61DBA05D4AF6884C95F46BA7F253E0B2337E312916E163CAF9DB2EC -56C5425990FE73EE53E42B3BCCA1CF642F02B0C5ABD529B568E9ADFF865B9DC190240AD78AD226ED -884BED3C285B4CB0E3929E805C67F1318D186504D92085764B70DE6AB5AB6990F181BDA50FC31262 -348D980EC76608CF08176C2502E065AC2D8EA5CF9E2D44E2B70A7DDC7B922047C471DF8A0B2087D1 -106B5BD8A830EC0E53223CE3C96EF56E5541191167860EEA58D696EC357EC55799438C90156BBF2B -13A0D5C9EE93227746654ED73EA5B9CAB61DAC5BC690F89C87FECAF9AD03BD39E438F43B81D39E07 -E0422F94E8B096AB38C88BC2E1A043811D8141C1A35DD3A6DBE41620E83C8ED3A379CD80D4F9BC30 -41BB44B933DACA7C5D4427AE94A176829F24B5968B713431CB8BD9F53080832C6B784CEA9B515687 -F121983EB9D9C9CE8BD4FA3BEC48AFE64E643B7BD86D8383D07521FE5D091392BE124CCC91113604 -3824B686988E7C83AEBF406D2DA88FD952D0FA9327F4AD04C55FEDBFBFA76ECAE8A176C516479AE1 -467125B7EB3C9E7C5B103BC0C470946346DF271F8EE19DF7E3FF7478C35EE059297F4BF21A5C7B95 -993BE6202E897776952A7ED0613A5CACAFA731FFC633CAB62963150E86EDAC796026CE02EB235B9F -7A54E0B0C5281567138A612BAFE409A818C216DA8EAC5EDF9D1E3A1E3514AE50735A111B4D2AA083 -4EC6C11E290D58FF340F82F0E079F1C7B3566F2336EAA45BF72BCF88569988DB5F65D4C1E59B50F3 -41E45A899656A0B522847ED567B49CD5284FE50E5F8652CDAC1C076804F2B2185F6A51ED19DD4941 -2E65A0D2DBC844B75E2DF71B009776D9F97A4C6F786EFFEB87A307FB6B912BB659DC2BCC6D509A9F -BDE87DE8D716040A8551B6CCFB7743978AD992D14D2B85CA052E87326138DB196C24593F8F7ECD6F -486F85D1666B9DE2ACA6C7900044EE369D223524664A2790B773F9EA26E0A4CDFD709942A44298B8 -249506EB9B77BC887DC0EF947DDDC7CB3CFC6B48F060DBF032A11884E6C226D9D447A5A458CBA325 -D57E144C6DC295262763E7BB8FF6A0CA473EB7661C12E0E8E23EA37E8AB3387B9E54686F3E57765D -4067E521BC1AFAE52394227793C737C19208803F2F2DA920B553E2AAF94EB992AB17E31B58C15CC4 -AA8A1B444DF5B3E7CD937CF03E1F7FAC63342731B4589F16939D16E8E497A74CDE5686F529E9495E -1603D74875288CF53271DB9313A4511B104F80B179FCF213558970A002E945281BF3AE51E668DD6D -13D9E85152747F562CA0B75DDEC8FE9FE31F8D05B0F59E802888A7A4F19B29954A31108D2F041367 -DEBD6AA1CAD856BDD1427E9EFE89956FE28D500CDC6A0CB80A76902A08D0BC6705583243F1DD8020 -749B257EDF4803BCAA653F7FD6D8B91690995BA5EA3EE92FCD367C11601C6B8ADCEDCE67B16C596C -5D200693AC5FA15D4CC6CE9DF7A71C8A925E99F5085313D60FAD25C1BBAAD28D4AC2B69062D68F39 -0530A976319A3904CEE44DC9451E441AAB4780425440F8C499B81460B5D3E268974145117ED843B1 -71BB14AA84C3A084A7D8E07B9979260675D5CE6534DC176DDB60DDE90F6A3674F67462EF78195F8D -FF74FB5882B079DEE31FE92816F16CE1A70D07752EA25FAF5000ADF79BBE7D17EB1BD2F9BF6CDBB6 -F078CAF97986442680A8FC4121866F9CE86C385DE34E30D8B9768A0136D9EEF79A4B38EE99CBB9A4 -D32316564C9D56996E2595753EA71BEF684834FD030D38BB100E2332B026B046316A53270A96DAB2 -182E994E91262FB03D1AFFBAD623F1689228409884F91DBA153030870A7BEB2C7EE2DEC51875B137 -33B7929041F8D23A94904BD54DD4BC9B432DD0C78DD81639F46D686FFAD39AAFBD1B6C1A37E248CE -48F23E12464D5379B4AED0D50B5A41577E6ECB75270E9AD3EA7D0FC09DAB271FB18B51DCFC0069F1 -5D72546E6C51049F3425AD005F88FD7F02042DABE9F097F9D6A076B30D8CD777B1EC12BD163FDABA -5972EAA61E3C87E9AC007A052B1A3FFE14D7D43C7A0ADC89B1DD4CB4F9C762A84A6C0701494B2D8C -4E4E1A9245738BE4111805C2F153A20ED9FECF2DCF4C8F7C3BAF84D60454A7403D4F5F81C6404173 -A7BA81BB0CEAECFD493D877465DC5735D43E3102CEC57B8A589182FC65A4704661A9E351FCCBC731 -5A87E62F65D24EEB9CEE979C6E10DBCF5C162ADB926EC8CC9BFFE381F6B8A3AC0A19D1631BEA2938 -731AFC99E8EAA39BC75DDB3A39D01AD8F0BC1838F4D674B9BEE9F6F7BE4D9C8BD97E8D171EFF330C -15B76614A1FFD25B3BE19E4A201BCC850F926ED51616318C965AD2F0E56F9433B1247C6D5B72EDF3 -D408A3E0674A509BF30BE813A5E669D72B978794683CA8B85E3469EACB167C30F7666DB5E081B81E -E99ECFBC1704B9646B1A29E4A4CE5654CA8409ADD60145DFC54225BDB8485E39CC98CBC3F38FD0A7 -97E5DFC2099452A2418C6636BD2D5F6B24345ACFA65F4E7DBD2D0AA0C1776A4920B4466C509BB5BC -7D6627946C4DCB38A27098B7B5BEEDC2B3BA18F927077F71E38644597719652037621BB350BB5369 -DCCC073954026E6438FD8393DDB3630C4473F06D9FB9E422E435566C396B12FDCD5605DFEA232171 -CD8EF298786806E9159B84599C26D4C7D8C3BB064665CDD072E2083190372AA808B2268B3FEC8878 -B6420CA829BCF995DC20E067EE6B8E44D2869D51BA3AEDD1763F7F8D2CFB8EC41E6E9E0129DE5343 -1457960CC51D546B10B8B6CE08A1C2B79FBA448DF9783D815608A16C55E589DCD8EF6B04C66232F4 -7A473973A35618000D79B8173258B7365C9691DDFE47B16EEB08B28F881828B946FB5D6FE10ECC6A -FC4EA1F762E90B3320403382E42AF4885B183AA48DB5E4DFC9A54E0B4FFBF7C26EB17A4F13B4BB93 -12234434FFF05549E7587BA0373ACB3E31418BFAF400D8938FC6466B94273D1735306AB912AAB13E -31DA3541C1733E2A7E4DA5B82767D37F3084AA7A7C488CDCA7ABEF77D19E42B4448ABBD346E9BC28 -8ABC4540C0A1CFD0BF46C5BC7454B25E27E9906A3E6CBF678BFECAD1B19B4E42398A210CD567EC35 -FB115D5C0DF0EEECE593982056B0E1D14C292F70B3E049984F8881C8B477956AD3140B4AA22256DA -AC0D11C4126808B5B9F922BCC5F24A77FF352E2C621A3941AC07A20E550A69C49B1B87D116EE6F2F -970918F0F1A501166AC4423FC212E4EC8039AC7F9C212D864F418CBB92948FBD588228108FAC1AD1 -837070512305C110F0FC3FAFE6E1529C2BD0DDE868A9EBE5137DFDFC5C12A3D08014BF0EE27B1080 -02AAD6B607F5C5C0F1B1EED3C552919C9A2E97204A8127F97B1066607ECFB47BA95EF2B51F007C29 -3B2F6A63041A9C1120D9CFCD5357222E5B02DFC73CF94CF9B5CB00EAF073E9BF253E30E09B50341E -57BF245A746EA31BFFD0B00201C34CF0881BBD1006BC9BA7D420A48E53686B598BEDB3449924EBA5 -8D5DB1B1B01AE2BA281D5758C99EFE38ADCE18F7B182FBD0D0622A6EA497A4E7C00C7D17299A2765 -EFD8DE376C214D01A21819451FC04A0277EC84A151FF93903D61C78AB7886911E36E12526ED855AB -43F6289C1890222602B8EFBF15782B374AC1E580B6E963403D6D15A051DB8558F2E61C0B9476C6DE -5D4861585CF515CE951732F20D32969F39192FBF1690D242AC04D47E0C53D467D0FE4656B9526C0F -7F852348B0437737CB0F29ECF9B54A5E17185236DD0C16349C3496F3ABA569EA20E343F6D771210C -39DC932DC65ECEF94575C6E76902CDF6C8C8361F9C757A2577DA535187FD526699917CFE0AD438C2 -A758727B306BC7979547E68B94E87ED820614BDBC649D469EF6B4E4E3DD2EAEB5F80B22FE576CED2 -56495467C76A75F589460061E03F3A1B065121A5ABE3E2C51148B3DDC9F624C97889AAF7FB84B158 -C015EDA5670746C6359D27B0C2BD65144F2B88A64331816DA904572BE398E015A9924218B3EEF951 -23AABFC3AC8217B7B4F691219A1C9DD0A3EDD5C04E63ACBDE71B423522532561F4B71B7028415C34 -37E346BE728A415596AB749015C1D59BD8328E39A850CB98085B34B57FB52DD1D154F98FEC49B3AE -BFCB1672762E4D2A1ECF02787F59DF1EBF2625C3631BED849B298C6D226BE4E6EA2AB66A287D2BA9 -2A6C9C612A5F849B3CB3C25F17164BE286F6E4F5E7E4C9EB17BC68AA5EF0190B64696A570442E1D9 -BDD1A30E7692524E30E4B4C3DF84481DCEC6E10E7308E65DE9D90099F3FABB3F4F766BB86CC98594 -6D2003E21287761A7386CD8461615B570BDA015F5EFA23D18E83C325EE444EC166A1A32D9818C2A6 -5A092D44156C06D3FD079B92450B8A491CBB3529DDAC7D95AFE8EAF33777FBB265FEB8A4B9AFF2CE -CEFFF49AFBDCF6C4197497D3B448866D70EF28D8E4B17E7CE95F43F64BB48C4A73EB84B26650F62D -3E5199D64DB0B5B87702650ED0B850FD5D16C848D096E4C7E61BC63B2A3ECFC099CD713E12C91A65 -77A88D6F55D348617C7A49890A86EA8FE2045704B5ED529DB128C9B19EE129E5FE6498CC97087F6B -DE96007C9D01CE9CAF75646E5A5B32BFEAD9362A52223D746943A2D09C536CFAF78E601BC2D2F0B7 -63AD722E3A7AE7069D65F9F2BDED7278511D0120F5EA071D41A69F8C2A2D720D3B24B4BE61C83FFB -EFFAE21B0560A6FD1A44E53E42E0D10E0E93F421A8A7E167BB65F0D7F1DDE2809FA3CDFD931CCC69 -B119C83238C1C00EC100D8E7AB1C7FB02EDE97073C8A5860371A8132BE391EB1C397B61F93876FEB -438C288EF2E38DDCD182A5CFBBA994A94A1BF818312CD8234215FCCD7C240A15AC01A885E1179E5D -7D6305DC2F534BAA141F25EA6A5F356486E5FA0AE3C6980A9F5E8E99E7AE5B95AC42977510970245 -4FC951E4319AE4B1DDC9B07D0998372C0A95ABA6985A4DBE6DC633154FAA30ACE689D36A7F17011B -F29CEDC58A6692A8B3B0A5742E6CEC2F69B255BCEDA762DEE72F125EBA98891CFF4D88AAC14188A1 -8D81424979C9079E44890D94EE094D4CADDC1C7AC5F6791FAB8849CC0240A579ABD800EFE3AA4EE2 -F78119A3C2806C05C2B1F17940BE73984982D1C0065433A9BD658EA31AC819DA9A11B87475BB565C -C294B6F302FE3F7752ED9B963C5279B5F1196762D0E12E6DA46FF9A0CADE3876D7DF695D8965CB4B -47B351FA3F759811269376B2C3134403633FDE27C9B024F6BA81F3E1699CF64A426618428BA6C326 -6BF016C5DAA5FA4CC82FB6DC23FF2D742160518CD3A65ADB38E53F1067076CA1625466E0C64670A1 -564A54CE14DC5C57D24A12283FBCBFFD0FD594AC2A56EE58B552F7586825E4FB1EC23F8221711692 -C8C56F42272B87EBFF3865191F1C11943BB76D8C0CFC53ED452AE49404D2C8193ECC2A7BB8CFBF24 -870ABA38D2CCF7869E9363DC0AD94FACAED5922B324DC3B6FE83E7B34FE29ABC1EAD62B49FFBCB81 -1ADBB5148D5AC2743E3A058386036FADAB6FF071BC1C3B8023F908B6FF48DB0AB1C9C67487C35211 -D40995E1892C8B66AD6C9C6203F6F8B513B11117B10DA8725AB45B4437B5A88A96AF3178D856D601 -196E8162868A83DA64E408FDDEBD14D6591881EA652032CF2F88B3FD6C0479C8F89AC68D14D01AF0 -CEAFD95AD146E68FAE01A07F39E7A0C5E4FFA6D6A91D710827CA5ACFE7D1F946A8D7B67621D60F53 -41F32C12A6EFB03AE5AC5373A382C044A276F6B41C173D0AAAAE0C1DE4C3CC71EC2637225CCBFBD4 -5EAB92BF39357C57195B410F74283585B12B926438AC72AFADAAD2D0FA2CCA728C8E86BD3FE75D47 -B8BEB96AB13B5480F7A3D5741EB51E3E40C21FF2ED7D9221D9877C7D1A8CECF394E4023FCF8C4EFD -B38B839499FF5CD96A46AB4FDB46F35D3B48B91757C0159328120E93CF1F2739E936E28908FB1947 -1D3AD7F6F1AD2BD1EC364986A411CC1B547D0CA104FBC10B1CA7B638A60E75485574034561DB345D -DA68415146AAC632DFA34769B6ED7D7D4694E92CBFF4EFB16B55495908102E85E827FC623CF1BBE6 -A13CBF64E878E1A2A159948B5529B75E071744A5F0E50DF18C110B0AF117CE7F33F8C959D4C98CED -5A9D492AE6F56DA57B0F17495DACB130660BCEFB064FD8309D965ABE8D2BE98F6898C1B7A39CBBE3 -E75DA0FFEF6CC3945CE76DA3BE915546FE8A5310130AE0ACAA9AB73C7E041C00533B4BC7724657AA -649B9388B791AAC5EABFCDDDEA2CC67A0FD0AE9BE37DF9AD40636538EE55A83F60E9E026C64FBD8B -220CEB46E67410144A520FCEACA252E8165448F84D8EA083C793AD09B90B3EE83B73FEFC3365C729 -E3C738894B8C01C2F8AEE0CC8B114E1175EFB44CC4C6CEF5C8754B1CC7CEC200AD8BF1189D741CB7 -5BCA4E88BE959E32216AD33F674F49AB20A354CF3969F1611A95D3934E148831AE7C81A7EBE3C524 -4F743E66A82E10D16CC09F8194EA7A596BC5981D833318AB4F7DBF2ABCE543E410B649D18D146F01 -486159683DF61A3F880F9B21EBFAB77E908C6CFC79F89BA5F51114F0BF7C3CCEC7BF0F3B057C3195 -CFBA6908E31E0DF10DF69163C9DA7BABC00E9A580FA7FAC202910615BD479BBF76FB8068630D1EC2 -1CD2926D351E869E16C2CF1E023CF04D4FC61607DAEFEEEDFF5593E6023492F00029E2AE4B4A2C14 -50954EFA2792F32B4934A768F892171245A1E2F034E2B9F39833F1B331A19A386BAACFEC8C929BA6 -B67CD8922BBC9DC005EC3976575D5B0508D0717C6BF11123EA36D8FD37FA77A6F1F5AA84D4AD8D25 -B2C11D1877A6E2F9B74F3B5829FAEFD4F7209CE9785AA6FDE68672554A6F29D8BF03FE108ED90A7F -58690FAC399A8AD3A26899072B832874DDB629581A51B3325CD9EDFD49E890EA8959DB937DAB83C7 -77F2A426B967AF5888C33A3635B78D647AD6BA441E222C958EA58D61945F781D7EF409771B89B202 -42AD7D07C2EF592CBF413C5FC89EC30FC9EBEE4BC63709AE33B65EE3091CECBE610B847E12C556A2 -79C8B114C3E460822D3330ADFD72BD69F54C08A81848C2002A08326CF3B09B1305490D35AEE59179 -08E1604ECE75BBE811A715AE8AF7EA9C371B322D0428EDF4C893FDEA607E70E1B6F6614947326101 -EAEF18E29BE0557D2A92CF1FC1505E8B434BC368CE07CCAABC0774F8A63E1073FBBCEB3F4052462A -A9008A1E53F188C9EAE339FABA74AFD6D60F47282CD9FF721F64BD51787F3C13B5A6C5A5F7861171 -0111F5E0471E206D72520F1DFA465F4A23C71DCF99A04CEEF11B0E3BDFC35B7461A60753D3AC26DC -50A5956C9195A4F5226388E0953DDD03AF128A98F03BDFA0602CBBAA20AB9ECCDF7255962A332E16 -D4380762E498FDA4885C64FF5F9B480DA487C58E78943DF62616E6E2C69EEC8836DFCFA9EBF58938 -A878F3E792E8BD8C5D6DF557A5D82018DBAE1CA9C64BA5AF8E21BE1B6680FC5DB22422220B776E9B -A0BF1ED2B7212F8BF111EC8C8C77B223C05EB5E5F1CFABD2D037F4BA0F9503E2CD83F4519D180476 -63F09E308883F5DA5228F83045FF41214D2273B2FE0A9017D5E0557BC2A198C35D1E7E81F7965444 -5760CBA1D3F05EA4B90658E53FDF0823BDB1501ED51DA75C47395073D8980D1E3504E3F67DB3259E -4EE73A87CFD96F84E221796573958D364A51E635FC55478C9CBF9AEA16B7D8C25F2115CFE4B7F598 -54E24968833BA0D64D1D332A666DFA2A3FD71B05A26BAB7DA382907B13DE0B80871DF184D3622B62 -3D7E09BC32A4F6EA2E6DA450A906EAD36D53FDEC7F83E101FEF32F4FAEC581B000686D86A0D3861C -1E67F18A4C4647F51F978484D9E3100B37BE9D20AE84C085461C1FBF929C669E936659050C2627AC -1B019837BAA75757F5B0A82E8AE9CF2111931A38BFC94744E2FDE3F8710342AC615286E4ACE7F269 -743AA05463AF537D9416230ECCA859D8C99B7C6E70BE7FE11DB698589BE9E11900C8E9582A4EF5EA -94B5F62820C90DBC022A620EC536E06CB8BE7526A789996D0E741AAD980880A33800A6FE92286CCD -02C9CB407EB31FB95D9C9F4AFF38B37087AC582C1F7B64A7C3D2202BDD62E9AEB31BCA85C4CF323F -03DA9D318B91F78FDC0D266630F7444ED068B55C05461C97552366A82C2E743CEC353D51028FDCF5 -403B3B74D379B82EB69C4380ED40239E15A86B2E5C860891E26781CC111FB5705E3B7C7AF1946006 -54B5FA1B5FC54FD0BA43666E7BABD2C91C859F393ED49F7123EDFB648A3D6152F2C17F7E438C0A63 -8968AC06B4FB3F77F64F358AE063820BD33F0213C85C40E4D97ED100EC2DA1C2E1EA258BF107AF67 -5A9D995F60BFA37222B9C2B325C0052BB8537D2B27DD43A129C7E8FF42757B3AC9B447703D382108 -DA520B8B3BB3E8C7295B776B44ED28F863B8E1F81B0BD1DAEE8A171525D09D2620C04DD3219D880C -2ECC79282DD7B1772A9CBBCA706909AE8BC7798E6EC7375189B6CFCE8A875849176E5913B85A18FB -197A33CA4B5B4058603CF1FA79A56856B43D538E9ECE117D99AFA73B57E307364F553644DE01EDB4 -6234EFAC13046B6E047ECC8F63942F20097AD7ACF0A45C0501A95263DE9439A880D6B5C5214D2918 -0A54D7FE9B2E627EF49E189B59FCC78745E878E45B46C0A648955D3EA8C935113D94F92EC963F66C -F3CF3A526BA71CDF3CD4CA69EFAB08B7389E3390716892A4872BD29DC1E0889A42D7FFB4190E9A8D -05D84EB9C5741BE6B02716BC75E0106F5F94BD3778BE985E03860D27E44088C3CB2A059DEBC420DC -E3A8F4087A9548485E616C409AC400DD1C411CE4B6A229D091B253EB68F06E43511EC5AA6ECA4D6E -4818D6AA2068DA1AEFCA377611BFA816B5215182432D5683294D67A7C1FD76C52233087CA44943EC -7280005E93145F5E7AE50100C18364E1B36741E9647C4DC1F68A58EC44095920FDCF05532F603717 -80F78420077EF5C24D63E26040CDDFF8DFD65D871DB943F50CDE84900C1372EF33FD8AB9889C82F9 -4F61A0E6842219A0F39EC7B232CBF802C4A744F33159432E827006C7CA77E480A48A9B0E6A876158 -8A3102E3F98A77BBD62A3A23150FD140D3941773BF7CBBA2338FF37B9EB640558A2313E8824E8E62 -0331568A9B76F4897198A709F9313F4AC40827D8C3A71F2ABFF02BFD57D30D0B14012FB5C39B85AF -540DDA0ADC27A85B31694E8D7B61F9D9B476571022D98F2D768246550A877293F3FF6ED918A498D6 -A600223E1A61890C49ACFB60265867CE9464F9C32C59E94F7641C3873FB4FA6EB237F8ED94579957 -270D6FD640BD9543E683F2372CCD7B60AAD269E03A72C5CDB732B128818D41A6DDD2BC139F7D3911 -F48E1B1D263DD4AE8E4CE1A686F3A00A2CBF48978631CD243566E22E68F8D7397134A3530EA3745E -4F1EACB4D6A5FD84C3011094F37573F7F9902305020C53926716D4780C6B0A257BF711AD94C83F1D -41A02C1C7DD203A3E6E4B14EDA2FDBB36B063A3E074495F626B0EEA146D22AC33457F44F41675967 -6D2A0566EC2B726D2F0540ABF225339F02F406D4E7A62E5233DDF20AE7C86CA0CDD561F33C422654 -BF2DC3685CA91BB9D4B09AC8B15A24A99FF56E2894F11F7BB4728FE8F0F5B799F74F475D2D01F61B -7E9E0E541F7FEB8A557486D7DF2CE50927515D833BCAA1CD9BF7A650BEE9E003A5951C98ED147C4C -52F64F692AB281984EE65A47E44A4A5FA93D6F18D276D3B01C5E5F6135AC6940524CD713DF4077FB -4943E8AC927A68489EA52ACF7A854393CD027EB52EA2DC6234EF034F3DC742D6DB5A67FC21D22B97 -146B9C268BA97C30161CE01EDC69A6A1F05EFB0E06F22644E1A368F0E2C0C6C1C832878E0614B74B -D645F5CB293CFDB7618B837FFF14A1210AA061C8C81867244305B80DAA73CB25A417228E9559E7BD -52C119B0CCDB7C4DCE7E1B9F7E8EBBCB575E5BD213BDD6DB88769DACB05E5870232F0EF82F448559 -187423409EEF756BA6247493BE24CB1879B5DD822E03D0ADEA1EDBDD83D3FC46759C679B921F0616 -F27212903F728AB44C1784E8A7DCED0DF5625A7D3F48A20FCA34008184CECD145CCD98E31B79E174 -CF107E8F35C40C19D86B40BAEE6164353408801EDF75A619FFC5B6FAF3F3A95F64795CC40C1F8963 -4FD8C13852D265FBCEF834C800AB46E3E8167476B23CDD8AFF6E2F997C99A86A9CB30EF8C853154D -0D89EEE9B9CDC1B4F27BDA32432A4173B55CA8D9FB50ACB2D886AD8E5862FFD5DFF224BA13C8B8A5 -4A7F1A9F987FBBDBC5A3C3D762A5BE309D5D926AE5093C40AA47B3B1BD828797CBB9BC9FEC9D19EE -A73D2A39764816113A8EDC6CFA6E605AD578FC8E30ABD600658A49ABCD5AC54655D29C50FDB72070 -169D1B389F114B7C71EF95A80D82AB537AC8C165D47371FC142A51625029A990A577EB1618480D72 -6DA93C98E5C5F24F622A850CDD94BADAEA91D4BC32CD50CE69E9F00E77DEA8EC1D37916398FB7092 -402605359DF08AFE7B99C76C2A7C70383F28A7C000C696F45291BB8F074791798197CAFF1544C76C -EEA8C9E6D76EDCBD92A86DF889481F3BBFF0865442264F0EA40D3CAA69AE467A08003F9C30FF7F2B -77E767580575398462D5B1171DD441D8986F33BC7BDA17D413EBB6B7A32642E33F20B284BF3EDED0 -02352FC66C6F7741A542155F4A159CD778BE56B9492CD95115C1A06189A216CFD2E6725965A13DE9 -73765A05114D9A5A4BE0615AF8BF6A5EAFF84468B849954D15BEAE1CDD57C435788B331905C01421 -B50F20B184506A0BEF746330BC98E9C89AAA8F9D102F158043BEB6A682059A1C8B8CF67B2F3D7AF4 -D8BBE086254CDE53765E3226BA2F95AE8063649F9F94BD9519411DAF8A0287307335668190638806 -E29484A4FFBC1E46B1800E03B162C23B1DC0B4C0DD3C7ABED2F00762972EF06EEB9BCDC7B3F39C70 -BE32789D366F073AC3280C273DFF2979507671B3E1E7685A9A4F0FD3867F96DD675BF05F25ED986A -79249B75F182FD73CDA2A6A66D693E4CC5AFE3402431B2C816DA1486C34BC9DCA4E2D51C868688A7 -787CD10ABB9ACA14B7181369DE89913CD8FAB58FC84519EA2AA14E54B7A8CE474F213E07CF2DE2E8 -88093DEEC937526816B71C96ED75FA9E2EDC0F9E6E84569C12BB8E39AAEDBF546630745553D6084F -F9524FEC6A7264F88CEB7EC3358E923B392474E3A48865564431662988FEA768CE555AB0DA48BD52 -6A84B0CB17B4584066C1640C1023D91F7869EF0C4D701BE121A6E3C832010427490758AED7A2B30D -6028F2215AA44E86D852FDC67DA5CCBA79EEA863BAC9EDC2535B66AB0E54EC4D4411390FDEB8D1FB -C1743F15C3B68DC92A8659E7A892D5E53872EA51EE8CA7EF51103E87C29A2714E907C79DB9CF3744 -1785D2F73A1EE58550111A4D9BCCBEBF2E39CD3B93DCA300FAC3ED1ADD8215301E5766C30C8CF296 -75746C5A77BF1FE3CD75D25CF193DE8D9AF02AF8F7A6E8F84B548058CDD3C6998ED13463FADE7391 -26D83D3CE2C7201F955382832E32C10DCBCCA35835985B9A93F8E3B0208BE6E92428787C47D3808A -0F77B8F1D76E6BF6A17FF81CDB065180E03809D03638307BD7BF5CEDBF64904E918FC805AC905379 -928B816480F6E3BDEE47042CBA98539DA0E113B1A5F23EAF1A3210BD18561985E6436EAB90395DA4 -77C7A6D7888D2377B3FC4169368357D880CE041E1F7C875E956600DB7D9B35D1EE66BE476E9DD806 -4CC02230276829C2C0A098F051502E828A0CC505AFD8C3DF293DA1508AC4D25866BEEE6BBD5A230E -9C2DCDD4F06883936381F476DDCD86CCFE15C2CE3C3243E148CBE603B8513A7CE7A6910A66A90B70 -89E5CCD4368BEFFF2BCF8E918BFE0A1B069AB2A914CA7BB91A0AC3B3C0B060FA1A0316F6135E890E -E549315897C8464496CC6DEA0F7E3AF43FFA4C3281156067582CA255B1D2E80F999A3AC0402BBD17 -01824C3BB524130F5B82A45275807BC2F3A0655EA208F968B297F98C369192C8ACA26BEBA7DC4506 -FBD1305E2EFA4DBE5375281A88EE2D6FC88FC0A755E72934B4B58F6DD3BDAF7171A4A3C776576735 -2492BFA9A7758504750AB7F38754683B70E9E293CB1CD7B23BA62BD7397ABB84D7EDB22EF6C3F58B -3EEAF656E361747ED04020163253D1CF3F905B5E85F83FFF30AB2778CAE43781667C0F65C8FD404D -6B9202A99EA76AF9AE1236631550B66B063847180B6DCA832EA8DC4A6EFDB674B5A26552A7C7D54C -2799C7D4E03C24F661A91103086DE3A90A774A6988347656344CFBA06065AB22476BB09FB68F9928 -C0045F2764AF643CFEF0516D87FDE6DBF93BAE2829B176CB507BB99835E01BAD5E55C2F8798C93FA -35EB3FEF02CFA31D3D21B030547F86D27B9448D68E2B155A65C742BD2999DAA0C3AED64447B9CC67 -F7AF33B63AFAF25F3CF7EF86657FE8F952288CA4B691D369E8F1935CDA44A180A6767560C2ED3F2F -CC38B6BD7991D4170C7C566D690A8A25BE03212A80871108D18CCEFF246623E653107631F29227D6 -4754B2208D19F84E547799E691CA473780DDD56AE620CD953D5133D135E3D51F237078FEEBB73714 -54EE633CFE238AEA63F9999E32850E6C197687A0EC4E5908D2A18C5349627E336AB5E3185B218228 -603A4B1852069F5EE849D571B8387DCE1F8F8E9FE94FADEF128BA83BDD245F8C1C27C11F2ED1A8AB -2D6D601726842CEE744EE7AAC6B6FA16CCAA39DBF5B3B1D47339F31DFA562671A9CF7DDE6915FEF9 -F19B3E068A464DD350A3AD146D1A241673B5112A4A8768F976723E6E184790C0604506C46591BEF2 -106C40789B733331A80740D59ABED39868F80BECC2AA21C400A0BD0CC326D186FFF9EB37680F1EDC -32AC78F9059280D07B5FF2E354FED545129FA5FA8F3D4317FF21E027602FDB2522F049BB545FF4DA -60248130F81F4E348373142F3148DED038AFBA818F26D5B49FC02DE9800D894E9239C88EE0EDE431 -F8083697CB0BE3B497473473E5714717C914A1A926730C249413FEA2615EF72BDB0906933387A892 -370F77EEBF62D26CD583EE643B02E323821379C0DC966407D36AE3CDF646B95DEDC7D7FD0F28E950 -78F12DFC0D6400B327B743C548A0A3517A175A7ED963ED756B1E107AE7087E2446BA702CD4E26E2D -CDC1A8B697108B5B5E81E9F03105F220C72D4AEBC57665887C8C7964089FBE9424120EFDB14D76EE -F8C6F7A30B13E1AE90CB9D93D2E14BDE47F4A1D05ED5B18D32AA39911B92D24C93976ACEB7EF597A -75161923A73B2CC761785493D0EEDC08B5AFE95F3C006B41438A0785C962B070DE2BD096CB63B847 -C87539880AA3D3FC5C345E0992D7BE77C6CFF4948617FDDA784CC55652192B0ED775129C4EA4245A -41BCF3875BE319DA0EE2DAFEFAE920CD2B6C6C2001762F88C0C5C05053025C0349DB17104360FCE1 -5D7F3A8E30ED13155A74FAF91DC77B8AABDD6FBD5A1EAF255DB209D7F2B90822296B5603FB5E2CC9 -5CBC5F7A6044058B8044ADCE73ACFD896177F1F70EAD2F6534DC3AD755AB2BA87126D63CA2E9C441 -DF0965BDDD6BE494E58D6B5057A561D1E31BD38E92CB73C1465AF6B9C001F7229059BCA4104847D1 -639E124E082F7364B56548BF8112D0EB461B316B2449049F6A476D36D6B7C0C1126C08F2E9A1246A -3B5B21E7C8FAC6E23B82E33A7783E4F31F0240E96E69C9444E7D7A928636CFD086475DF1E0A28464 -81387BB2010655B9F81A0744121699B4905AAEDCC84BC5D5AB3674601DBBB651EDE7B5DF05C8A463 -DAB41F79706D285C4F9063997F7AC8CEF35CAD51FBE5F5BB1B3FA6DA2C3ABF2B3E925581349728D6 -DA0D59C1EF6444539742EE9A23A5727F20CF9377F4F84DEA420607015A30FB14632D084A2DD181BB -02FC3A84FC499B318156B675B9CA3CCABD87FDB2497C6705FA70EBA43ADDB6CF961B30E8F6AB9F84 -E1DD8D6DB3314B34B7F7AA3BBE19D5BDC75ECADFD8EAE19E07B387A1FC586F0F30DB695926764B54 -0D89F1D854B0FF86528AD9523CAF56371E29498C11AFB2F4D5202670C834E930103F039D13348824 -16A49BF93B84FD3CF1209EEF7D4994C8302436C0794497461C11F5B8BA152BACBCC08AF8A15F4A4D -F3EFFB7227CA97FC21D2D0356C93390C749CBE9750B821F1A7BCFAE2C8BC6D9A27F844D8AD088320 -79ABF0EAD8ECD4EA72846DFEED021857F33C1ACE4C07BEC90398B629814C498D33BEB375B9A53DA0 -F926FE6E89E70322C72CB2DDBFB16B13EF7A4F50DF783316584C6AC2BD7D9029124933133B2229BF -74A228868AB30EA5C3E87C78C3F0962199480DBCADBEF53BDDE45849DA857A4FD85B96682F1EDEB8 -5384929DEE4AFAF84C51A09F5D572705673D885070303FDB47DC898F874E103A9E7C1E894115DFDD -AD81549C7375D4AEDCCE2E52C13E5130B47F206F7C5AFAF1F9EE83DA8188D70B473269CA280A6A02 -DE85300B93D8A4F6B402FB5DF58F1327470CE11CC63ECEF2EFAA396A6680A6746A20382D9529B58E -7CE684B39AC00F7086BCB47C2230DF0343BED9B9152A61C9826AEF9E00A1452D91305CF05490D4BC -0BADC9C6FCBFA93FAD52C3A80705A1956890497557C0873EBDCF61CCDD2219354A4F5621AB33B119 -32065C1D990A9B68858331EE7875CAC855F98563B14EF9E1060BEA90F195AFFF94728AE935453438 -DAB35123D0E2699475884DDAFC7307A5CC06920F35341728D85965F5BA86F261CFFCB1E29B429F97 -6970D42D10E6AF6C4B792B4384122AEF2448E22A58D3AA007743C71324EA08D06819FED14AC1F22A -4F0BE4787BC8738E1CEF240677571C65804ED3E748D72E89C94B6F310BE748FAEA31EE246859CAF7 -A1EA17CCB5B246C87EAB771E2AC5D378650191081514DDC2C66878E3766CB20DC49F630F2743A7FA -ECBE9DBE9E815A3CB57DADF2BFF5EF2FCE23A56298A30A2E052FEAEFBD698101F9DB992613706693 -CB0EFAF6F60C8BB5E7D0A50B3392B9831EF3A304A846CD4AF431E9F018FCD3A5B16387552D55DAEA -683D36257418AAA0E7BF8A03ED7BAB114D7C15119E6C71C1946BD7903C1C42E115E954619051B853 -BF05AE316E15E619A7DEE498F771E809D9435969C1056402725EF40C0200E083F3EC6E0EC27B8ED3 -8DFE32EA0E5E156AC36C4BB9AC5ED111A11678339703F1B9299345AEB1F251FCEFA11FB3101CC499 -907DC862B4463D5523B9B25C5B69F70AB6B29CFC1DF1ECAB8227EB3ED1F882E90B12080EE003714D -403EC43B7B54491446B6A3DD6EB641EFBFEF060C45E873E7398025B1CB7065441F1753028F6F8C49 -A96801C0D598E098EADC96A21117F817B6FD6E6947642F93E22425A00E8F6B592AD50B317B69C0F9 -4047386A45E5EBC9504FE55451A01EB29DDF9A41D4BAD85FC84CE280971E834F06CEF49C8C20ED2C -EAC889F158CB14A8C070900478804CFF1D1637CC880C81AA287D8382837FFA8F41FF3C9DF2F22CB2 -0044C171E4815D0D0F6C22D19A52114E780CECD71DAF63427782E85E463DCB333789F496340E8CFF -885A9D9A4250118B439C71C6BE51A9338BE29251AA794EDC67DEEC6337FA63CA9B03C1C9F75E733A -4A918646E7BC9792486CB5A4BCC5F84FBABDFE338C3792254A3EEA3D88903C2C47B91E076259DCCC -8BD3DCA90ECCC832C09C45141C6242026BFE309029A562C3EE0FCCDCD40E5CF265ED9C3DE582884E -0E14819DB98B3AF734B1B3276AC41D43384EBE73003D15CE39FFCC04109583390E470F431B4407F9 -8550E138F96C4564B494E5480F47C853BDD237E27301F55E42A3BED18FADA152572B7B465A581DBF -E7DB2619365CF16D71BF8F091862B9FCF04BF8D0859A76F46E7B5712F2757EDCE332D3213B8A30AC -2CE7D7797EEF6F30904906B0805DFA7CA36D32A20D989858497A66CE72491393DD79332003D55C09 -5A5AB5DF761C4BE5C041FA8407263D604E53091F7B6B15496245DBBEE96A63F10FC2978D99E65731 -28689366FE8B0BADA48B50185B861BAD03E3600F22BAD4274F2542B635F6C7944BEFC3BC741BDEF1 -1A8DD659038CB40FEF2E16AD1AE7EBEDB7D9BA15FDCF26355331505A386DD7399FB999535D6061EA -BC61DD76EF3EB457446F29D0BB6EC2FC0AABAC20B27A3C123C27BC27A76336D0A0A6D456DA070367 -4D959A4AFE428E2206A511BFC80039ECD56E75F69786DA0A8084D81A66644DD98B6018681F1D70AD -E09BD9BF3D16D68DD5D0A03AE26DCF1552549E459FE190B310A8776B2C8468C14CA8B1B9A7AF2956 -507A3B705AD75A17A0EEA7FE089273353CECD07BB8563465EC8DECA0EB42F43FE3664EB5F31E1D13 -24185539B28D508BCD065ED576D8814ED3FD637D576F027927162344AFB0255A91FFC616948E4E35 -8867E9FC76A9AFFACAEBFFE110808C1532A2BBB0DBEF3F010E45FFC73F228D28F12E98478B27397D -8F456781ED9E19711DF2E9EECBC3FE61F7493FDF1A59124668A91BE51F122F93DCA4BBD22DEEA339 -E6EDA3D6EBEE03DF958113E1CA49C8398D2C59DA6764882EE3663F62A55AE50A7E91B4FEAD1B11FE -0D50ACCC5D75F1A515F0C53616A500F1491381DFD0E2477E402AB0CF9F67D501A442629C8593ED5D -25A72EDB9746B02F2B0F0759CC9CDCB4C9D8B4519C8C617E569B432F0CF6890372AA879CA7DE46E1 -10D95E230A4F0E52CF65811C54365DF4A3E40D819E2FD379B47DA3233D0DEF0EFBCE04AD8BAA3888 -4F6A69FE5C373E38AE0FD0241480F2BE7CCD18AF85916D2703A049779FE7398FC47D348454CF03F2 -2EB3FECC064606957898B5643464845445C25C0C7D685C8DB042AF5D5882174374ACE90081C68678 -9BCA96AC602EB41D317BD652293EE628951875641661EC86A2C40A42E8F0813A861D41A0F5178E55 -43651CA0E99150462DB5EE0010F00DE6D55B0D7FD7EC5BAEA24ED3E90A7D6A0589761922B91A6A91 -3A7FEDDD3B68254D89ECF767CE8E27F966426A8B4FB1B4085384FD09D63E288405B78A646F44C87E -EE22C8596B13188085479F75F63D3D97A28F9C8306FD207DBFD38DEDF0FFEB7DD80B2A3292DFBF1E -D605ADF1B33E85B010309E3EC058FCD922B1325FEE71EFF2DBBC2E68DB52D513E024C01D47CF657B -B61C9734649A4AB63C0AF4720EC3EFCD82DD3CA6E80BB63BCF1B8DE810A0C6C517C63B76FE68C0B2 -86867BE102424FC31C4937048B6F323D039618586FC21731005D949E7D802A430DF8D2F0CE99F2A2 -376C2953EFC4184355E4D12F422C9E1E25C4DF38DEA334DBC89B540E14C61A7769D77115CE8968FB -76B27D0863CEA2496783114C24D4CC816DA884D953DA3F9B9D3AF8938BC607BF26A071956CA07E6A -5509EA2F5D80E5CBEB98041B197FAC760976EE75B470DC20AA023BA3F63C2876EB281FF5173BB490 -D6815604517AA1B1FA0631401B3C1A04CA103E2CA4ECCD83874D9CFC8ABC134CC0F9141D9AFA5684 -8BF222342016C556C14B3482482DCE5D0B6EF1AB522AA1812BDD8DD3397E05327EC12748FC480842 -9B97202E24E1DE0C7C0D272C046BA73B37D30930C5DE5A47D96955CB0F5DED8F3AD929A8B42D2839 -0458F5910A0F93610F79EDDB27078943DFE17C716D65F96589769349F3B66AB7B8C004CCC59EF688 -1F745EC7129865A76F9C2D029D4660CCFB4D5F9D412BA3372A27CB175E9D65F759575CF14A5899A8 -D31FF039AC02DBD8391C3397428AC0D5717C005200790785354813C8859BE90E0E17914F6CB9C674 -F1E9A9648657B54E5E1F52756C4F982DF74E73F6E4D40718C71D1D0E2420FB7462FEC9E457C0414A -96E475C6BE2C10437096FCA0C942E995A9ADA789AB637B648781D32DFB68E62E91C2CE7E13680F8D -31ECF8C824885FA7618981CD05FB335AA111B409C59EE337DF4E5F9DCC920A5FC0D620DC07F20DAD -63F4FF5E0EE5A2F390AF1C32122BA7780F210229E5A5E3ED97BC1C3CDDDD456E739CA782EDBF4B81 -0552368E9C734B0C78B0B8E3F8B2DD782862B74318871BB1EF087828CC173D7B049811FCF598B8EF -DE4D9BC5447F4848C98029C854F3AE461B9D46DDAD8CE67A521F3C811A81A396CB0F80F3C8D8EC88 -30532FB7F9624F7CAE0F8C6DF875073333DEB28AAA90AAF486AB8C932553CE697B885E71EC8E40C7 -835CD5D59A2C695DB9E51216FF9B77A15B0DA63717FF25B05B939E45CF7FBE490E51E9344213B32E -115C2DE14D76DFD5845088DE645B0E75042A61D82FB1753C445AD0A956A1263E5A096B681D3BC51A -9FF32EBAFFF7ECA8B59D40F0937EEFF38312AE57462C7BF3B1FE24D2BA8DFE84515270E09063CE3C -80DF4935E409F62EB4F54AF16A186D4329972B9BDF15FB08461B688ED49928429226CAD9F67C9D63 -6D1375CBB7B08A5631956B7FE29CC9EFA8D75C9E4919C8C2C54F401D2E0D7BFBA40C50CAE214D210 -C6F3EA5802339F63FC4C1C1995787617F3EC2C806CE44CF8E29F76606CD5836F6E5A2E423CD791BE -CD3F112F25657DFED9366FC4ADF90B685CCE4A5698E5FE16D7542B913FBC01B288DD13F43DB2B1ED -8CCB80159DBDC90A8132125DF8DF547C4851CA609D1F6F4D647741260E845B457937787827A89E37 -CDA06BB191669AC84B8608EAE132D10177F3FC384980F3A6E439B048A38D0D6B9CEF09F3F2D732AA -71BD058169D6D0F8C9D146D9DA046774027559A8B3843F6116B418427E78476AD8F0F81E8A6B1209 -8060FF7DD686503F972D6C42FD6CC29C083AC3D72E3751F21D2E44A572EEC80E81EE44C90FAA7AFA -BCD3ECEB98FD4068F6C3A4DED0E6CEC523C9A0054D1FC2A8D61A4A26F9BC250B8F302416924AB22E -722297888B85B9C12F8DFD2A744CBD143F9B2514C1CBE988D9CB4E77D90B2EFD5C2A528355A35F7C -4AF039C7D1D756305967B847D4ACBB81263D4992C001E2A262B9FEE2D1F5022BE5B15E1D8F1D67BC -52227344EE912C018CB73E5F47CED54FD202627777BB77AACF3EE6B22706FB2FA9062BEE87E22CD2 -802E7706322648DAA0C624EA885430175F746E1F536F9A8E1C610C4A761D07248426DB63C9319A88 -A3FA449C3FB8AC94C6003C745E6BAD717A3B2EA3862D1E08512A98E57772A62F85F1E2FFBA40E2EE -43AEC11203DA9CE5AFBF673436F2DB6AF85BBE89D802F7A9E5FA25A408DB69E51F0577DD26F94CF2 -BA2FC53EDDD6FBEB534AF15F74F66EF8D14E7FF77D8A5D284C8202DD5A6053CEAA606BF925992382 -5EF4EFFAA8D878652A4CAF2EE43ED26BF3590402686C876F86C1AE95046E527617CDD3C429BD4CC3 -F9654D2C76DD4102471FF746FA9FA379B16DF96BFE3836D43FCC0B8E95120C27370049ACA4AC313E -1D50D72D1814F2566B8B29FA9C9C20D0488743722A766436776783B939171FFFA00E04805A8B5821 -4D4F114F7B9C3C17CE7486AEA2BCC895ECDE809502BDE57981318A93F23016F056A421B733C4590E -34AB08BB348DA4A48F19B6BEFAA1DDD2A49A6C440443028333CDD48C85CD698ADAF3FD8676739E44 -400A98B575BE02350576F96CFA54D4184BA47555B8D12374B86D038D085F7FA51FF4BE2FF5981408 -999B48B2FAF305212ED54B2E371F5A0074CF68D1B0E5CD279BBC8BBAEF694A89A6C43F518D01BB4E -8402AADF34E96E9B3FCCAB4CBEA2741D3FD9ADF7AF32388F7771845AF99965A6078F4DA335EFA436 -BE36903E33A743C112C0267309F266DD44FA998C9A139704E400B89DAB952EECFE2AC09C82D9F497 -5371CCC27DA37890EC84123193314D8A7A707C217FFC951A547EE5B6D1B7C8ED85BEBD9D3F4B9B09 -6A78E5F7DF88C931E3F396973974454E59340CA51DBFEA1A00DE084B64630E26C6D6A3593B828814 -E27DB0186BF2A87EEF268AA1B135AC09B52CFE53051CBCC88CEC5657BD47F603C8E1A6249161684F -D9084AC279F57A4F9BBD0A546A87E147B62AC860911969A29B8AA20E3AAAD0079D64E6BF1B0F2CE8 -F0C54C9019207E1B403358253C2FA93A662F63B9380B65C5173C198D86A3D0DC1800D1F5378DA39C -E8523EB62C6AFAD8A0D7AD1629F2CECAD82B8FDE38975303768C7D3A08B91478EDB3C45A8C6B7725 -EA8596A8ED50B8355FB852FB8966479D12E1086223B1E6523A65FBA81DD106FE254F7309718768AB -009FF7714A8C363B09DDA73CD3F81BF9C0CD3B0C806CF3B7BBFAB73E46FACAD2480EEBA97AE68EC9 -4D3D79AA01ECC22067858EFFA9D7B7F997ABD2CE5AAA8781E5499E8580C405681CC63EEA53BB47E5 -5ECC5BA2A7A3C5472DF034B022F455C60FFF971B01583A29E211A87F7163187B190B0C1083D696B5 -86E9438FD8BAA45101A5EDCD1BE5AB9A585511089DDAC8DF1B1FDBE582ABD945E67F99ADC4452988 -A9859E39C90EF794C5C4E62997085B7A16A0D90107D08610BA175AD66377345662DA7DA4D8FEF847 -EE5D57E3AC54B928A0957CC1C944E7FF14658FE4A641CD26C61105C0F136A75950764B69CA17509E -3C19351D456B22C87C55E8DCC4ACD3E150D936333FF36499AD6B02B6403DE0F12901301ECB2EBA10 -324BA72B58206A13B8F37B0AEB12115D0C12879C8EA8A2EB70E85C95434564BA3DFF481C8972587E -FF74EEBBBAB14FB32B8A84B8FC42EBECA65D25E8C32C19CA5962832BF45DFDA4E871508AEC318495 -0D6DBE89019CEA29E40484C36E33D76B756255531ADD1DB24C03B2A64A47BD8FBA3FDCB1F5B96F8E -ECB60D5834AB001A70740498720AFB6EC03445CC35B51F7987109618C6C78CBE3041BEDC69B6FB12 -8142CEC5C8683B558AFE3024EFF7A12D04EF59A72E156DF11D33ABA08A8EEB16259DD9529CD003AD -4EF4137B6FF1654236473DFB93F597331A5E26C7796F528F65C94FE07B3B4F4DD49034FA0CC189DF -CDFF70C2F1C6D3DF30AE103E2AC5CFF20664AB934CE5C19693292071C93BD590383E0A1931E04D1D -DD18071DAFB628F5D7472E457BF81D6064EDFA8DEBFF91701C5038CB30865D6122076A336732DBCD -B0A625548773D0013648A76F07BBDC9C16284D158EC7A105AE37A62279419C3A2F360D0C7A74D6FD -D0E36DCA2A8BD59945A4196598F690878F84C894852C1811AFEA4BE3B9F6A5219E6628C66669DBD8 -FA9A0CFC2DDE7716A356FC4FB271D8A2CDDC8D4684DE447355BC7A287DC56852A638C5777826EB6E -B72FACCC86F80BEDDD0D649A883CFEEF4D74750172A90B5DD8252592FCFE19FFAAD868E99562DAEA -E70514F5DE296EF7B57E6F193737ABB6AA317956584423817E11664A67389197AD9F8F771EA59551 -98C9EE40A0761639E638CE9D890DF468642670235F1373D3AC6B1F43B5777FC0A91A96E095E89BB9 -FD62614DE456CE7AFD6B855112367573FD9FCBBD4A4F9C676E672D62DDD34A9BFE8311B6175A003C -D143C0DF15E4C0B48C735404086E48AEED6B6FA21FD9F40B84215DFF287F0677904E2DDFDA774A40 -19DF45CC877F553E95A1C65DF1D67BC0C60E0BBA4D205C0DA3DA80229FDD71859F65AD04506B308C -2B783839F31CFE4425263224F08C5C7E98A2C9D3DC8EA5AC1920F4E395413262E0836BC019A092A0 -DECA104EB2DF6B63392AE8E2136379140DE5FC98B0B69860FE8E31DAB5C5DF7807D19BEA34AC14E0 -ABC6F6519C51247B104DE7D912C5BF6EF11B48FC6DF84512E9F5FEBB48F72FF1B722BDC3BB2E835B -2E7CC6324BEE84893996B8DC2D4DC2793A4F69C18E63DAF04A7BB5C0A9076E2D5A343E134CC3C89C -4712900656FFC202E1988526D80C7FD9281FE47FBA8AB5D025E63A84051F6B13167BEC15B346212C -BD051AFE7A98BE3A2491F3C469718A58E783ED91F90E274FB4978F8719E92A99A1E8F142EA7E1F2C -46AFF0A2FB50F4D105130CE8EA309B0E480DC8F80D506172B609EA4BB4E2BBAE98D8882814FB273E -690DA990B60A9CDA20A2418246BD10AE67D846A0FA815AC25858145ADDA106A6778A11877FE59A2A -BE300D7DB9BBAB31CB5B960B7E4EF91D4600886D8795DC361CBDDDDE05EBD54B1941F426F7FA8399 -270D2F54C998BE92D146227270A8E89AF90C48BAFC4ECCCA01E6322AFC165743475E752F39BDAEC4 -9297290510FFA264342A0AFE2985F85DEEC66C36EB4A1D46683EE7C591A89B81569A8566AFBCA268 -10DDB0970577A76EC8A066622606B08315DB0F2E6C671F3259C73637D773D1A180AAD66ADADA2A65 -95B5F481E5F59E51CBA876FA06D21E1D674CFAB46A02D267E20234324D0891E7847C13C69BFCEEA3 -AC55F2EAF753726BCEB0DE1EECF42ADA964BF9E475953302C2FCA804B70B779482DC9319B40381E0 -9C0096460AE113C19A2DC9157FA138CF0E7758F71008E71D0F7599744D647B09B16E3C795C56EE5B -D14D8D63E7A512900D67487975EC9CEAEF69572FC3C2342AC5D365E8A4BCF462006B5268ECC15754 -94CAD9A9E7A9E8D9AFFE49AF647C017743EC7CFD5E66F4E4D845A6BBC836849274FBD270CBF263F1 -67DF7E26BA91F21C60F96257C07523AC37A2193010E976965CBD75751E312817C0564E1C5AE0CBA8 -BD12B01122D07020A0852120680985A8AC987BC33BE863EEC52AF13435B6E4048D951F5BCE36526E -07A8661CF2538F69D1F223BC53BF5896437D1BD46F57D9698F642F0E99C7392D8EE47134E34DCE94 -D392949B418D9821E12CAFA8337323E8469DAC24DADC6AAD4A0DADD7FF65694BA3A27964D28D8EB4 -1179458F91CD3F83B8F119BF5E76184DD29CC4C0718CF7945DCECC993A7A78739363136CEC7F2FB4 -95EEA8CEDB3EBF14373A058758C442939D36774435554851E9519B6F09C31EF26B6CD997DAFA11DA -91FA9759F17B7079164C5B47B99CCB7A876FBAB1D0D5D1E1A2683CD6914E6B3B755939CEF1C9168D -30B2738C4349650CF86C90D2542FC9B90F36A494C035A1C86DD716014AA16E6B9EC7AA03B16554BE -C436511DD3097FAB1FD0CD49EDAB96F74E8FD26400FC748CBD9EE1EEAEE24DA30DB6F8734B52818B -3A5E510AA5C14E42060898033E7E36CBA9A64042CF94A74E4B52E37AC027C0DC69BAC4944CCE12E7 -AD81AEDCE642EC34CA23E3FF07B8CD35DFF19F33C8D4DBB56A52534F8A827BE47AD4AEDCAD83B273 -38409FD1101C4DFF3F12D3DF79AD1FCE65B2F419451DD059C88BF066413E23DE27D3621DAC2DCC8F -9F3620DAD0F4B1A6E8C9E6E8ADB552E1EB2C4B2A3B73986AD53ED9ED8911F82F750DF05CD2EBA3E1 -B0DF208A87FB5ED44C3296B803881C1D9776D13350CD29C3F716F0B5A8B8557812024BA70069BE65 -89AA579EADB1F657712DF2570843D7C5FF7F4009D4D232D3547DC8B92ED5C4DB77B76255E661FF8B -163C6F3856DE5651B597EC7C78B84F0C6C1D6EA3A82286F1D3BB45F708D564E139E81F473C705AB2 -56346328DAA64D1EA8645DC10FD449092E0634D9D7344B2AEC3C75F6B6CD8B3F3867FF3CBB0F556B -186EE9A7C26BD2D17C8A773055D9D5013BD2F937D697A770C57BDB36D922CB911CD14E7FA14160BE -19C1A052E297B1A2D682D4BBC9F1D2493BCD7CAD2FA75D904C5F5479179DAF7DC6A4E0D269BACA2C -4F2430B4C8CF1572FBDC750A05DCD5B09FA3A9CD6F2F2A386E2B3D4D8E257BD43A783B38E63BCEE5 -03EA96FF2C373181744A607F0CB8D281D7DB1A6F4076AA3E2C61914BD796EF8A0873F79F964FDE28 -B792BA99A20C3F1F5ED1FD189FB1867C84DCD6AF43D49420C8B1F3DCE7DBAE71DEB17FE45644DB24 -4F44B1011C7C768EBB7254F4DACA64E9BA87AA7CD0F0C4B2228FFB9EBDCF3DDE4DCED39399FFEB34 -8811547D025320A88B480943A339E2CD2FA3605AAAE87939B1D7901465A1879BCB4C5BE1A179E7E3 -71F1BA2E0844F88AFBAE9B78DCCA47AE8AEDF5BD3D458C7D4A7A08ACCBF880D1F1DC69C636628DF1 -EBDC5C42FF88FF8B66351F3F72D703E52F3CE91E4E00759753A599FDD863788E99858498B66B93E5 -083BC3501C39A9BA928B0D763C28826FD237E949EF0BA85CCA9AA20C405DB6D5612DB718F7B4AD31 -D253AE306E4D7CB615C59AE668D347A4E60FFF7B103F8BD0E7CBDB142A763BE88AB40EEF6B8FC200 -458D728930AD0F94FE52ACBF0657C4907CC7942710AB1FD8BD149A9C9DEF6B8DCA7DB9062AA7B1B0 -11ABB5AAE8B77893A023F9EEEED4A20FBC30F922282A7AE2F1ACFF64151013D6B8AC2EAAE58171A1 -0F80BC18C3BBB5DE1E22EBE6033BF83040629023D74CCBAB3F1923CFA4A6735E1DFA8A1B261FBF1C -397E26F3BA9C2629CFDA84DFA3D1087EBB19DDA7E2D76E30DC2E15B8821D5291DA1DFD73940E5560 -A8A6DC91BE0075E3ED8D9E8CAC85AC20768D868CD2DC45DEADCC8B59AABE6EE5B2F891E0D7CBAE82 -0F83479332BF9707486698FE196C72EF72B52F54314329FC498171782BF160E1110A19B8208FC591 -EF0F0DA71AF657B43A7CC649A8488B759F7B69134B4F9DCF79DAEBC1CE52CC8015F324C9D46320F4 -4E1551EDA6D86139DFD1DB814CF38A22A89FABB4F75FB896B00E769820F763486E86668253CC466C -1529A5A924CC337C48448851A381DCEF63A0A302B65203D6571A1DD1FB9DC0C3BD6AEF4891497033 -109CEB5A481BFE442249940EC54096F1D0F2436D9E60495D0ACFF967A741B30467D24AC6B0032213 -18666B951EFD45324987B10BEF4AAA0FF1DF6887377A7F70F555DFB9FF1001C67438A167A00B05D2 -C37065655173A7ED9AE342DFA1497FB1F2FED6098901249A085D31B66DBB6AC25EF16C106B0A6FF3 -47CDF66434DC3F0012DAADE80B942D522CD59AF4C31C1C062157B3D000B9CB86E2AA7B4A5BF31605 -8A0D5A148EAA2C67977FAA0966E4C3454E08DF14C2498AD76E389AF65D2C139A6D8675298C46ACEB -7DBE6904C373C06E5F71399B2EDA0B40AB96E8BE991DDC39F92F1D24797F9EC9F2FAE25669B43754 -E2498E8EA5C44B176C3FB3E8F7A7A1481275A461F2549AFC4CC73E28417BD8C5212C13105EAB967D -AA679AE822B9B75B372A99C7E82D6BD83AA2BA00314DA4AC51B9CAA30D80507505BE24BAD0A87C5D -5D7336EDF60CCA4CEC8201D243C3932F74D171E2409D789AAD0D04A7BB22FB6DC3AB92AE33FFEA89 -7C484D741039F38C317EA396A0FBB9F15A27D87FCBE007558799BAB73212B6E5FAF2080BA074724E -AC87D88166DBC1464CF5D41B99428851FF1D99246944511CF42C3F9248513E9E51593F253D89C604 -388AD7132D6A169E9DD888E020AC1F8BA606F2E1EBB97977E505D8C40853653D8F398F71CC9F8F9C -540C22A1E6195BA578AE7262FC845FCCF77B33F33EEF266489AF8B81A615D6A13464BCA58BEC16C2 -3F31D678F14A938BEC31272DAC3CCB1B2DAE577A26BED852FC59843176A5FCFCFA0AB7FB00D2309D -E55C82CB9049F44FA61F1E313205A76317C4CF529A4456019D970624129681F46A9CD7950B8B5C40 -61853040113C8115319E68B37F88D864C6957DF813B305D09E6A1716B10F26F2EF5C727FC77AABBA -73E12B5AE6416AB19F6563CE14046B715BD4CB2B1E4D315F42D10F74CDEDE82BCDD524A1A5460921 -9084CF1CDABFE72CC8375478B41614BC18A914903596D6FC2F361EE519F875385F4ECB50F7053127 -4EBDEB14A5DBD906A60817246042E3799BB3AC647CDA7244B7998AE4F3BFBE5C767FD2142E48518A -4217599E0EC2CF5E86C8C270FF8B02F949EE001D6A439BCB4BC7D7F7C8167C3AE0A7E59687FB8BF6 -F37BEAA164541B8EAFD92E9D152E3FD0F413C99CCC34FCD8AA455A0B55DEC846A5874B94FC95CFF1 -BB386B2A1E22CD1C3914264B6D5BD1746972857C9235052D77A6C0DD3019F8A307FBEE63A3EF12B0 -39B224108276FFA84021F1AC5B745C54690B3FF587B4B1710AC3533A67BCEFC503ADF1F4B62B2910 -B31965E364EEC9CC437CC40181A7320CD52BE9C546B8F1DC824312216C2FD8232E2BB8D40EE2E314 -54C09772A387F9520E331456C269F51A078E6ABD9FB6A68BFD5F557215B0BBD2227B8959CBD1BD4A -EEAB094DD18E891C61FB00933C0A0D76174D169C0B6445D34C00DC9E06D85EB086C18F3BE27DF734 -EBB9CF078AFF6514438549CBE92A0C0D25EFE4A527D86F158B4E9D8870C7AC5D6C059643A3298079 -CC20398324CA87273B86ED801057D797D91BC3CF2F96C650EE1566CD3CF8656CC577D38B830201BE -718DC9A494268177A5019546EEEDBF101996BE593631654B638C75A6BAA648CD1E7AA9AC1EA60F4C -D604071C89DCCFF8B3E430A57ED6DE11C5837E78956ED991058F3646219BEAE94E4D9381A33D48CA -9B8FF12B54A73FF869D0EEED7E098D80152295E6016CDD809173C57D1F5FCE908A37010AD4C4471A -53451DE9B4363B63437C374C598F548F145D3D288F42531FCF36A9CDF72521F1C0868FCEEEB1857E -A983F6B75CE245D875BEAD1BCB8819E5464518E04717B78BD6E335F0AD77B832AF5682062A1E2AC7 -7CD5EDD5DC372EE456C96D38BF8BF348DAC2B4EBBB2440F2CE97B4B337F2E23247E3E8423BFA9237 -CA6CEB6FB93F960CAD894A96F0371168A33222052DE9B3BE04B022AB95C0C243486E35197721FC55 -311DC55F87BC72D09B6C940CA36E6640AEB66C394A5949A604E7F15DCE3A008BB41B0EEF2840A357 -F348443B4DCE064B4C15E5EC52E448C985FAA1C3D6526270B1CC691009959A7620C9A6202619A19B -E410FF7BD535A8B2640AAA459DFDCB8F2BB35112626497E8A397D4F9E04788322A738DC8907CB643 -15CF63C95809E90D06EF02F72AB04AA61FE02ECCF7E9049FF9F3EF2258A75656178AAAC9F3C2A26C -001341862D526CC14E92A81BD63502F959066E0BCD659CB9B5A45606153DD77039B8C5D5B13565F0 -0D95A41937CF97089F3938E39659A64DC3D6046D0E9EF66544CAF8A206635DF49926A3EEF3FDBC9D -CCEA2886EC855F1821C4B9CE1D02A19A11BBBEF43A7D4D536715548A62802F64AF30BBCBEA8C7E55 -AD56C801D8A569C8183615A78CD393CA42C103F155941E845712C335F4ACFC7807202B92A983111A -ED241BBB8501F15560E8F2157C29752BDCDB274008137277920053D6D7DCDC626A574A82A8A34F1E -77B2FC8CF7C1A7322F22DFCB450259EB450C52B70DF3584A7C54C813DB41E3DD81253A03B02BC252 -346AF0160716355797B6F8210C453DD7E1E756FF08C7E6A5F4F87605E1DFF35A130D79148A57B7AD -12D94A129FE3F055CF974EBA09A2B13DEECA2E02EA818A58B81E8743004646C7746110BC61B86ADF -2D5D8C45A6A5461EB34497FCCD09E711F47BFA742C73F87B257B53F30CB68D151424DC3C210D3E8A -C67C2495A8236EA2D7985A5E1DEAC699D7B700E6D38EEE2E93B191BAA5A8A2C916D206C63FE63427 -AAAFED2B5784276FC21EEFF2D70E47C8540DCCC3E00134642B703795CD3702631AE2A90E063A218B -61E5B89BBCFFF84F567E37A31A9B349717A8CDB9C9377215BA838FF7469BC486B64EF2B6D92519C0 -BF0826E3652903F40E400689F5749DF86FE3DE178E21E20EDF9053081F6510D8F19ACD021CBA481C -484D30EAD3B84ED0190087EE478A17154B243346C3938FDD5340CF6E47B185E64ABDF44F8CBCDB82 -94492B91929BFEB9DA2B033C3ACEE554F0F1A7F8A56DF7C06A3583C1E9C5CA458D40E550FDF3E2F2 -E7BE8312D5FEE98543388EDC8A04CA29F1B82B7AB4ADABBA3F2C331EFF3521B2B92F99C4377AB827 -A989B423750D36ADDD2E286E7F3B694E29B8BC403693C6F7CAB5FE34F1E48C8D41B47831E8C3F5BE -5ED5142E3C44ACF5180CD41FDA149B1F4AED36812E42BC184227F5034220F74F67830255E1CAEC12 -66DEFA358A87D2E3B4B4E7EF30181570D0B2B43072EE0311C2C157D32EE2BEA8EA4251B59F6B61D2 -B4FDEB654DEB67AA3DFF4AD65B727F0D6B7D61523E4B44D99BA5CD33540F340A35DDD466ABEA4E72 -E504FC9BAAE51D231C33A8CE7DC2970DE4C1FB5B096A3D9C641EF77DC9039886831DDD01C4F21E6E -168E38BBDDA5F4308C959C7BBF36A42D042DA6862937EB20D4FA2E5927741A58DA5CBFFD9553BEFF -BD92E6D64871D8B25D9049F4E71970A8FF5557D1DE83DD24286D6C3E4770EE00F9A1A0B0063C9999 -4AEC75E84D6F9C488434D1F3DCFD0A8BEE9ED8257CA97E75E8B1285747184D6D2228EF95D4A0B8DA -252318ABD35C8398FC6568B294D90AB308A7675F9F160140F0A08C88AD0CA1CA2CF85E4D031CFA3B -87635F1398EB7DBC666A259F02DB6741D13E11B230025DD6DD64C438409AF109090058151E4DFB8C -0E9CD65935C4CC063CC6100FDE70896E23E3661C7FC1B8228B26A55903E997F80207EDD8863FA074 -EE4FF23BE585BAF708040C9F8CFDEB42FB8EB71D4CB6D7757E973E4D8C9DDD082712C23F868E1135 -ECD91250BB4335958B07C12FDA75EEB56BE19D1644C1F76A8811C021122619F751CBBFEB1D3DC912 -999017FA163672A1EF754C5CB78962BAAB76EC48461B492FA88F9897170DE857CC8374C8BAE417D4 -C78A56047024731F4A45145F0393A27CAB614A7FF747BBC28E6880D4D01C0A6CF317A1DE5BB5ADFA -4B5FBFE0C57598C79F25AE57BB797A489D51F85A9B9CF8BEA64293F8FCC43B0D5484DF99DBE19152 -692CE756F6FBE8CE5831CF4B8A5AF47524E272C45C62ACBFBDFE7E60B05BB1A1A6AF0E9210012014 -69B3DBB49EC7B23A363FA68417B7118DCEA71D4ACA2E36F88C6DDEFB70205DF3AB7C74CF65CFD01F -F85FAF99F172689737331D4C6CFF7A29029772F487FBF625F17BDAD89B4AC076948277B4ED687840 -301016C2B7AD4C6D02F81E88C75B7A04D724E234E38A38269351582245E361A42C75B8256AFD5624 -B558ADA2190F960A896BBAE7A8C57E76DA10DC29E69BBF3AA86214C001A27B39C1D17C548DA5601E -86A5CF53E7B1896BF003AAE9387ABA9B102EB1E9002DD3754A378F3E49F2C6EECF47EB1BAC2CFCE1 -1AC0C5CB063672D32733563F3E1E891B6073739BC53AAA0043FC45E90E413DFBD4548DD320B681ED -70A7443A233D79E3F038D26975586E5CDD2115AA614727B1F6DD4024B85CCCFC79D10B7B6AFA789D -B37BD0E8C423C1A4A8681B5FF3A9FA1F61A46E46C4B1836D1AA41A89264A7F4B1C259E4B10ECDF37 -5BD26A1F412FE01FBDC03368FCAF48AA0EC28B1BD603A6A0D0DADE66D14C9B7285569230FAB76803 -35BE104305E4B748FA99FA31F23991608DFDD2097DA292551136F255051C9F7EEF3FB7C7FDB4E651 -C3D03A4CA357B587245236F4FF3252563F6BE08EF8A3EC09BE2BF27B9120F7D37801F6999EFB1C8A -D1A08698CC59CEAE2CFCDBF6BD8F94DEC94F7EBF33AF05F52C85760C63950B455510C6AB9398D09A -C288EFA09E8F631A59B03FBBC75BBDAFD675FFACCCF8ADF71E815A4A49F14BF70E42DB0B7347B528 -4E234C24010E2177DBBD57648E398FA6B54571A37BA8C989503594D03C6E60871A7F964599022154 -02BA168B8D1D2685F5CF8645D5E11A1769473027F42564C2966C10C0DEE1EE1B6975852A4870D492 -83A470E623337544A7CDA5C16FE2855BA2A548511FB4D4FF2E3E78D108E4C734F64EE2F12CC9562C -BDF363EFAF5201B673AD00583FF108AFF6B68055A5F299452D176EAAFB92C84F114C8C22A05EAD65 -64A3371420EA9E646308DE97D40705E1638DF08704FC90249CBC0D2D3E884A4562CC27370B1A9738 -9D8EFD237E644A7370B8B38ED1C377F522C75F981D878A5E87101E621DF9D85C7207BBE5A87CCB60 -7F93A2E52F660E05C83A7A6CE6D01AB4B62A1EF8DA47CF97D4BBA0FA8EFFA9C0F61A325A97ADA694 -45F23AB1FE27A66C271639F839203040D44B11ECC6E805FBE88843B34C4FD52D1D3C6C70FFED433F -C04501FC20536ABDFFA429B8DC8192B2D45DD9D646049CBF40719C3D674773F9676F9FCF32817DCB -55402A72C56D74AA4CE4035687C730B6B44A9CC614BCA5A3FD17C170ED949E588EE45E89E18B0766 -2A6327FB9E8475C43E5DA1B0AF07C23774B19C9EF59281F5D884990D6194170D8293A86DB52A0FE1 -7E88DA82209A00A16BD29B8B2F13FD60AA25FCFA9745F57C8216283C1D6EA1C119CB9B8D57C00419 -5210FFBD56395A3EC2D3098ED38F389EFC0324FD0E55EA339B3892568229D8D3E205A821E8219FCB -1A7713FCF3450F8BEF976CA0BECA47376A8CA73DF85B340C67EFE4534D459617996526B5E5D3D19E -17CC5449E5EF2B82B2C4C2131FF8A19FCFE6A186A9840D872D85C40665A7A04E67EE26B8BC9206C3 -5B44C8F8A1AFC3867D96DC6D48BD45063BE25B882E9BC0D0948C18DC870E6925818E1FE17D336217 -F174EB4481F5C0ED37A3BEAFAF4D46F857811B6728BEC461AE6468D87A736572F4FF95B58B04564A -9D3C22754587DF15495A319D822B838461764B73483C1F7CB930EECC6F7424841EE10E4087E95120 -2FE88A391375C96BEC4480328A54740213F741105B12A39F19808F3823507B88115D468C61B212A8 -ABAE7480E39BA52390A1892C7EC50271156B4E8076FC3ADA222695DF372385DA7B117A29E04CD2B8 -0A320F186D61C963FBDAFE9224E537057C49E82E405196AAB621B5FE4011E1782A747EF935ED8BB1 -1BDA39A141CC0BA42D04AE123383BC95A1D03A85A9440010C3B9613064FFECA76197E10919BA5006 -F35837ED9BCD7DE5E6D968AACB6FC91178091FA467EF6FDEB728E17293DC89DDE5A5261FAA95A2B0 -000FC750E7073900D4D88247DA464613ADC2B3903A6132D96AC0E1C564385FFBF6249DEA76BEA2A9 -9160632DD2FC2B99133E9F2F470F72B45D6F18B45020F604B06CD9174BA3805DB60EB9C5E6A9C789 -ACE76AE9C79C1BD34434E95E501BC968633AF93FF4883C6A596776254C0C74993710327086B2886B -02FD3E42A725A03459CB36EE34A094139AF5FCF487D3DFE63FAD20BF0DFB60DEEDA2ACCA3510E963 -189D1256EABD81253F7FF9D11263FDBC1DCFDA3D1EA2E52005CE3C605C993231258A717423F64BFE -EBC34684EFA676358B9B543C2042BEF954829FE3246A879845B30EBACB43D8DD7A20FCFEDF763AD2 -C5D20A798B69E08722DCE6A5762E249ACE3055B650D9E110599EA30DE5C4FE7200D5A8DA9E1FE268 -6350D0DF334877D0B9F6524C552D0B6DFFAE125EC4C18F7547BD51C14288E4ABB7F8A1A00458596C -390AEEE6FA308AC1F788FAE30D7F8928AFC91D4DE6352D20B19D8D8AB122B7378CB379C5BE7E3CE2 -922FE667EA057B5D7B3F0B51C7BF0C85F87AC2F360D82C38964F4DABCC9104B32F0FB8802235E8E8 -D9A5997D392259074C00AF2CE1D2BF7B8E90E2E2AC34185C68A03BAB8B267778292B227245D7FF86 -70786E3F746F86B9D4D17190DB859A0E144B2A61E6AC9254DE5DBAEF20E2E9DB0B2FF654B996E962 -F55E465DD238BD1643CE59DC2B5A58B1E6E4AE2DDC2D74D79AFF3C34E4E593E051FDA236B79CC0DB -268D2A89B1878051223BB8F33FF99BA87A4811C0B3BCC01171D0A731EB732ECD8749D27952C27886 -B252F9C3D190419FD2900987A0A255B9753FB7AA70C37462134C467A2C4B7920BED9F9E86F8F98B9 -6D00AF8B05A4BD5F14C2A0D914A9A84160D554FD0718F50ECB5DF5E76623065852DAA74C9AD6DA07 -A119DF12C3577FE276AE551D48B1C5CD8A50E84DEC9CB0840520D78FA7F9A7C2071E28CD20EC7649 -B991F3818CDE295CDB6085F24FCF93147E9F4DD084FBD32525326D2EA147ECD5B6C9D9F4A7166663 -AD18BF234E9CB92FF72138A8A49E73E527E9A6488A4CA808AECABC94D693CD2C0C357D285F65006F -A2F9197F61FBCA6EF07B013E2B558AB531D2FD270CEE7FA8E467FAB885E90C5884843AA08E2BBFEA -0AA575643727BA18ACC499FF34E3438645BE2AA71EA491E54687CD305E12BBC94FAEC848311AE816 -495B013BC5075A2D2AE54A7AD7C9105B64356CB51F18C2C28E3A83B9D81A4554DBEC9BEA9A660CF7 -E1BA89E6D4DFB3EEC6A3DE3FCDED9B2D614156EDAE8CFDAD5FF0EFEE31DA3E6A54D94CE9453A1CAA -D9756D91BE85315F6514BAFBC821EE810BB5D8E1B8F05F64F3F72C4B35D424F7E4DC3AB581B74ADE -B6D6297CDE7AA8278909F269FED79B7DFD39B1C0338E01D556C4DB9CA3A8578ACE3EC3D743ED4B9C -0145E4525E8C315F7A1B98584B975C70F0D415708C8CCC13F848B1D36AC8249B73638F95DE0CD27C -7EFB52BED4339EBDA4812564D7A77416DDF4CC88CFB52D07A252D89353C6826CA1832A153242979B -6CEE783ABDE65C8B40CF4EA7B42B8DBCC0E02423DD693108006F6A4AEBF053B666C3CB63D1861F86 -EAACD43BB9BB6F2C3A17293C189331D253B447757EE7CBF4518BABB73A1D44874D7F0625E6A013C6 -08E991B4AD17A9ADB36740D25E3E35B459B422F7370B134CDFFF3F3BCC4C32B4E9EBF6A2478013F6 -6933A1FA9403A2F1161EC632F1F04EDF95ED0F33DAD9665D54DD9DB2564E51DA7B65978CAB50D6DC -1568976E83B056EB0E3A6758518B6E17E9EBFE49B72EB148B472BA144BDC2AC95744C9BF1258F0A2 -E47470AB0EFF90E190A41108914AB8C1ED6B11E0681778521870E80C16AF2AFC723CAD8719ADB62D -3939D3BC8CC1D8A4E07E9D734F54ECA33D936D2C39D5C8055739C33E53359BD40E576C11E93B4B4C -122BDBC9B1BBF44243AF4F0BCDBDFADE68C526B5CD74E29CE3F70D62BA83C489034111FE8E4DAEA2 -F01F9D938ABB532DEEAC0E329F42453FF5C15DEC2AEA8C198323C9E8FEA55B3F5DC4751D2E2E16B6 -154E7F2ADD46860E9CA71DC114C99D80E7EA1DAB51E925DE161CEDD678EE6282AFF38E3CD0E65954 -9C970613209955A3F581E1ABE485E56402A3DB0D1E9B8A9DFD05C4B0B7F97FC6D0EED0B69AD6F182 -B1D028ADD2F24463834B13F5C1307F91D363891824E81108E57CFD5211F86400D3E96B107F3B1FE8 -9C4908649D04A46DC3CEE0DE66AF03A7FF9F4DAFECDD6DF4D93784CC899B527784DBE0718050FCE1 -85BDE3F39DEBCDD660B2488D23AB1CFF87B0546D02B48E7B7724C9E87B71BF34B5D6640E0F6ECE47 -B182D41C89461F712849C6CFDB7E3F5EBC1ACDD12D65A422BA362A8FD6CAAC5104CCC5AB5FC04A46 -E4309ACAC83D659DDDA256CCDDD1BFF9AB3622450C4FBC89C82214F00C42FB0311BCB1B722A691ED -839CAF9024FB1671F18E4639C96D84718C663A4341DEC037175C6BBD288BBF5A0478298CA726567A -9B74C32A527339C666A294A17F6821CBF243D13EA4B1603C292953308B566653423E7301A032E5D5 -E2B93F1C1434893633DD19501AD12728B5A1D9D36635B589FA2E151140B543D7C5E469AFAE8E80C4 -FC1D9CB6C3823CC1BB7EE40AECB58CBC1465792226B19E0FE79235115F6A3AFE19F98C5DB63D372D -D7C041CD940F4F79F2474D9CEEA0334FA04A97DC9773064895CF11CF73F11B4684F06E48F4469F6A -1AEB2CBBC52994DFAB3319DCE3A0C8C2EFA9627496F8CC84D3DF3BDC4FFCB61672780F294F453278 -AEB9262E66486856D37B7647141A82E049364ED3D03F925284A3F1FA3DDF4C0B48B3FE22E7DF9ABA -239D33CD300FFA8FD4B96192BD568FB18D325CAA8E1F1FD4B27527417B034841FD49E4A77F217062 -3CC8B22101166D80361EB15FA9020D24F61007B0A8274DF9DFCD8E97C85568E76D34AD5DB1779B02 -F034A69CCF9D4EBAA188EB3017EEF5B22A0A552696A574907F695098BD8A4849D5C8311F129447CD -7A3CF88B8191AEC0AFF30A38A9AB8135608A7829207A7D242F6E1FA7DDA19F5E4C28560D42DB4405 -77CC0C5F5803EEE897103ECA0BD944E320AC26553BEE7852EAA733BD13DF760056B2F5BD1243BEDA -BC3C1EA0531017D74B47E18F801A60074D6DF849FD0532234545E5B5E112D1E7385341D39A89551C -80DC2DEAED5D5DA2A4BE5015D297324E92BE64C68428132E6EC654DD4BDCC6640C68835FF8A05E09 -9604B8CD43D3AF2B2FE10C8AFEDEC5A70AF8509D12F662338CBF166D9452CD36331758AC4F4CBD7E -DD52139AD27DC52569877FE709F297444C4F31899D1945C81B14ABDECBF31DC463A4148F04EC4FB9 -703C158216C0FBE65CCD450043ABFD4E65BF8B28CC148252E9F3E797EA0B57B8721C94CBC2EA602D -F2C57E87938C887A382D2659226463BC7D6A1DA87F4A341A59BEA458177D3F18D1213539DC0E301F -6EFE0111FCF6921368BE17CCBB7428127E0C059C2C5ADB2A3F0197F0CEAB77FF7F3C027A8EC3EE76 -CF5C986EB47CB60561C773B3A2DA47B5A35394E29373DBD5C3FF4C9213A89AED77CC4F3FCFC49EF6 -EC7557C521979A546983C106B3627B5FD2D71CC5F08A32BF49332A89C5DA71AFBFB94C949A91220A -B1F885C981423AF93F73BC1CA4D92D9DBAE3EFE6A76E2DE3D0F74FD3255820636E3F1A6B7C185306 -23C12AF90CDCD2C0A728521E9B639EB6345D1DE8FFFC3B19C72E7A93823DFE3115E9E7BBBEB28CB7 -3DB121AED8920D47D8CC08EA2E472E39A4CAD5881B5C4204F2B732AF9D5189D25ABF413CC78714CB -01B1D8CA5565169A919DC481F6D2E67F1D490AEBC5CC62A8F62C1A323EBB55ED35AA5C8D6F8B970E -93205C2701CF4817BDA994FC16197B469ECC5F5E9DDF0FA05640C2E571849571CBD26402B1EB1E80 -3FCF423345007B9B52B13E3B034E8CB3984B925EBFFE719ED4F39F3D0E3343316A6FDC26BDBEA88C -4366D3B2F851D2B244CC4408251AE2C77348CCE9DD8BB9C89800B572D38C5D1CC34C740BEEBB5DDB -0A8BB251655FB989840D23205D16311A9FCCF7C85F6DFFEA9704492A4E7A8F6C0BDC29745AAC2ABF -AEBA02B0E7AEFEB92BA63AB0DF844EB09D505C3DFC1058CE42CDD8043B76398401E1DB862FF9F76C -05E8BC6260A4443CF494BC1755913D51745BF45ADF2F8C7A9546D7EF4FB11E9D94E4539632C2A396 -06D04480EE459408D7A2A869807A4C01881C1BB21C296A402B5E6E07093D833C3DFF075F4DD426EB -87B1B8DE16C146DE79F52F5943015331EEB852809CBB8E1D6460AC4D176FE96F8D19F6CCB22ABBBA -A27C4497D91312C3CFB5BB913B314E43D2EC6AB6897BA7C34CF2CAA6DB4BD69EB5DFCEE0AA917D69 -50E36A68A4C22A60DCC69379D47544A58D640EB10DFE120FCA843B588CA8B94F7869F97609A6FE03 -AC86EC1F7CEAD2EC8E81977D1B946E459DFCFEFE65A7BFF67E66F5F78A45D8DF65AF0146DF74E024 -FC042328886CC1DD7779F49CDBB750345CF83CD678A6A8897577299DEB38AD665DC4F21CE1892A18 -C256F318107DD3E9245C1AD3BC93CEF7B7BF057E33EC9A3F953251261AA3D1A8347261E70A46F777 -3A84F3D4D1A0DF6DD22A96429349DE0D180310E17955B10FBF53220EF6483D03C650A8D5C16D63DA -F65C21ADCD6C2D0B5D4ADEB2F5526AACF7CF42F9A8BF4832FB2D4F73F3D5FFD984B572232F87BD3E -59133ED3D2FA19F7856AD812515C74F7D851574019C532C25F8E163E595FC9C83E3E820C3CBF690D -A62578A980FC0803EB6DB9B1E90E3256BD4650816ABE5EA86CE65C2EB418D0ADDA5F3EA04E17AA8C -4536CC471AC20236E66ECA3619F161DFEFA485386C30EBB86A7AD930FD0AADF2DA69DCAF26C0F677 -206E2030E3B15B3662C0AD03DBC1636EBFAD1F2F2C37F5FA9856B0198C5B1D80B69C5EFFD94CE071 -5135C649C26B9BA1266B0A5B270CD08A706166C0B320915C87B27DE21DEB5D7E4806F6E700B7A06A -4E29B629CB40761983E9CA8E34E869ABD04DDA190BFE5A6EE8B22D7E511B84EA584A84211F27AF89 -18DC5AF8A1FF2D360B6BE3CA8E66BA4CD2CE6A25E7E89406684DA83FFBCCCCBFD0844FE3BECD7DE6 -7764C59C022DB1168D585FE25073FE00E30218D1DFE115CA1FC606AFCB04F2A082EF91788B6BD096 -84DEA31F20034A91AB9D971366F97B5009FEFBF1EF0AD941654081B1E8F0B2EA495069A1DDF11DC5 -6857D29533DC857958B49D1A0779732819FD22E437084BD9F3C4F2CDA4D12CA14431937AB63A03F9 -C040AF1D801F367ABDCA7302E18A9050D6026FBA5A5A7FAD44E31593173CDF277CD737D1CEF59FE9 -684252BC0DDD00A80E023B88222494C1C8C0884230AB11D1083225AFDCDBC1E24D4AD5FAB396D2E3 -70E44A7571B230660D510A5076D8E35F7DB72C0566DFC119EE1B8AC3C0406950A3C4A4DA36BDE297 -040A27F70753A87E6CD593DC6BE9962261A99AE5949340C5D45C94A9AA3DD636CE8B497BBB812345 -7C824F443A53B3EE595C38983FE3E07DBDC6ACD55CAE8BE1081AFD4857A5F52A3C925143507A3C37 -F1992CF72ED0D4C48D94AE6CADDC3BC87AC3A3EF035E02181F78449E4B063B0835E827644051551C -1603E2EAB5875F28FC77BEBA6923428D5521C698C6B7F133B0F689F105FDBAC30A8ED2F29F0255DD -F8A037B81F04EDF004CBE639C8DB0F94D0C5DB92D34D66C2FED66CF8B895AFC4E659D08388EA44EA -E83CE459E5BE306750A682B627802990037157339BF142BCB9C08FAFDC3C3FB16DC3544F62C6C7E3 -3E20CC4FC7CA21E2C3F6C546CD78DEE348F1A4C8CB548EF20C049678916771D83ACC9B7B22784AD8 -580134471A3C79BC86B5D6D0D305C32E6204274351C94F9DF45D9B2AD5B5087A89F90D6AA033E4B1 -D1BED022F36147C7ABD2B73134DFFD50907258E610C3B20949E141172B1C6A76DB238C375021CBA6 -645CDC26B717428B5A9B4D3F32A4B1E22FEFF3BB93FD889E1DEF8087718D5E3E650FE4A3330DA9C3 -7E9EB499DF5A342D8BA4C0A033C3347CB25A31BE143ECBF91384F2381E323E7FD3A82A3197C18905 -3200AE2C86B9D01AB0B289841EA7E9E9A26966E0DEF54DE0B85D8DF084B8C590081E444BAF1E1F60 -670FA12AB97159318624F2AF1B5EC7DD83C1073A99398D2143A52D10A13C201FB356BC9E90C63BB0 -BC2D4C42AF4A8B9C8C4D58A1B32E0597C63B3F8B3E893BD3BE8C60231838F1BC78E73A6C8CDD5E7F -2907F897FC8EE99BFFDA7338BCEFB5AEF950E5549ADFD207AEB15846B509FC57989883642498A381 -1B8E5CDE69C05924EFAEC232FA4CEF302EE3251366ECAEF57D25CFA3B4A9E6397D996F421C900BEB -CF73B038FE7B16FD0A1172AC2F40D19CE0B02FCEB8BC47DA5344CB933C7FEC950184F78ACB32D3E5 -E290E84BE753B9E7A7BFC4416CCF29D023760C06CDDEF2505806A65E1508990529245059AFD301DB -669D41BD72BF7A80A9DF66B876B3553FDF4DD38D15289AF7A1AFBC53FFFF135A6348DD784AB42A6C -0D6AA330B069607E2DF3CBEFCE79D6F63E274C9E73A33EB85246D5EBB986BFA923DF68B2B8CF82AF -6C33E785F35B25B1D1D614DE85A4F4510ADFE42D75B5FA5408A59ABE53859E28B3D000EB9C6A7D2F -67C91DD14C895BA87B9CB57B851E5193FCC2A443AF85FE28DF6F39537F23A058BCF81DD8C04CB2C2 -5040300F4C55975E856DCB4E21E2B5481BDCC05601942FB25BB8A6B6F93E2C2A33CD478B44655657 -C557EBB080179EE5D98C5CEBE0B25BFDD952FFEB258014D7A5BC4BCA4F1A23BBA73C454B12960451 -CE1752401B0151CB2E01D5C72595095EAE91D8D3BD55A54A2AEA89239FA176FA7CD6F16BB0733EF6 -CE6E77763A23AAC77DA88C8EFA7BBB2991E472FF2075FB25A75ACFA70A04C28764F4AE4C12051B25 -B120CAD2E3044DA35C1F94135DBD69B10DE147321CBBDC814CE99982AC1D76CE3D3330E41AB31F3C -76BF89B95EAB81AF3464C732D5B1411D97DB36C9063537F64756F205B16ED7058E2CB1D6946C00A1 -A0CDA9EBBE924BDA6C7D7B605C514A98133907B793C74CA858E82DA3519188CD974B34DAA74265DB -5BC8550D5F0B1173ACEB87458BCE2AB1F96996C811699A0FE4A9B849D39023725E2B1EE7E426D30A -6C5C75AE6BCEA6DB41E4EB2035F7F924E6B9F0DCD00EB2BB014222E55FE387FBF5B9B7C04F4688D5 -AE3529FDACB38B5EB0AF5C3A874C1AA6B17CDA8D1E22EEE05A3DA88449200D3D0D002DB86F6C51B3 -37C8E19F338E7BFA01E1202612D50E210140947D5F350E84F790286C3F679A5D7E43BCDC337265C2 -631527FD62D598B7CA1F5835C0441881B97F5197901ECDC4F195BC665A846823D2E41417373F8639 -567B228FE7B73D781F07A361AA49C3E9D80FE5B2A32C4C1E575D194E841967B08D10405FA44EEE28 -47DB9372C5CC931E50469532F1BAF577F680BAB4E30B7E1CFFA8574ABB679789F69A8A1BAC07B7C6 -4EF5CE5EB00E97B36FBEACA9BBA4A13B0293D34BDBC77AD1FF88E5744AF009823BC262511C4724DD -585E7E17D90F230F7A5861B0DFC42F0B4E49A04EE0EE4DADB908479DEF8372F334C53D2BA5D855CB -39DC7C9550F9D0F7F77E82D5A59FBBF34BFFE92DC9E6668B68FEEAA4F20053433D6749162BBAC5D0 -D428DCF2D58D49B127FA2E674EDC7D3613B1342F4D0ABD7F4C5B049FBF78E804D5F16505AE7EDCBF -4D6FA08D72890F5D55199034572AB4B0C9A7E7F6F5A403198864ADF113CAFF5BF9D4AB5B16F81D0F -C2188FC80875E10034D12E30C0364F8F72797F1AED525A2712A40D44210B813DF5A29C84E9F6D51B -1D60A5F6F938FAABF878D29E6AB252D95D05FC1ADF5D4CE1C9E585219112112BC6CD5C766411FBD2 -2731794B5DE0A27AC57D3C57926807469C360372BE529098C350EFE2154B87F1205A57A0B04C5206 -CC4FA66B8793BBBE492CC3271FB4F90A28D0066E0D7F63B8DD01549A05AFA5482C29560ABD628568 -75CAC16100087540162473498C14087B29B86B7BFAD693E81765CEC781F3FC80E9C7B410E9B55B88 -114191A1703C638DFBB469ED1DD8254B1407003A319CE74AD419B077F17047A01F0BC0AC8507191B -F72D77D9333C9DA8C9DA733EFB5305F49CB8C7BC451321ADD7D896395D269DCDFDD084EB3AA70338 -6C0697E962929651164135C094D9BB1C9B949D5EEBD3BB17F02C98C813CCBFB23C2C26218A2F4C63 -9A8B9DFF2C29406037F91938A5E1227310728428B56F48108CDEB33BD3191ECA89F947271983DB77 -6B2BC897A30EECF2601EE3B2A6F0E135397622AAC1F2DF523CE6E6BC720E13CB530CEF4AB9C8273B -D3D81563AC8A8E6C44A195112DAF824BC7A72FCDC4E129A480717BEB01085DEE65EE4344D0B41EC0 -BCDF842566B1D9F5353B1F6A063FFA6CDB06EF634C8BD5A7A63F991D178F56EACA653DD67685CE49 -E98C7554745A4AC533217662D23E1D6937135D13BC2208EB8D50560A2BAAC319DFAE478B6BA4CA5E -DA20222F0E9BDB0806320ED1665B54A347DE0C42E9F77842DE4D188E7E824EB2F0D7AD163F05480A -7FA99C5A603BBC5DBC843774CA66E889B945054C0ED0B1A4BB14324EF901B023C208CB95DFCE9284 -89789690CC45BAB97BE449F8E2F5AA9276C0571303E9788C46E7F789555BFCDC3FA9ED8DA8AD9BA4 -8B3AE09404664391E63A989EF1E24BB464043AA099E4F2D796E352EB277106D8D81BAF2F8562EF46 -BCFD1E0047E8018CBD973021DC1C1D821AF03F083F0B088A62EBCF2BF6C5B0FCFA441AAD1625FDB8 -34F943DD47A5A42EB3E9A5B49641F797C288B799A64897F1346070461B6D535E0C4ED099199C387A -3176AEDC7DA7E7D9E118E55565092A36F7C74ABF281720C0147F4E4F37D49436466C61FF12764E30 -43D8A6D027E70537164F0E7942F4ACA42BB2CB136177EF7197E76F49AB403F741C0EF902FEBC471A -D6C627424320A8C3A1F04C310C511B3F91C3937D9ACF459999C18A33F2C852EC38CA806599C728C5 -43714018C65E2C5F430F6270AF52AD71ED38813B60440779455F9529A4A1623CB9F5422B9216F9CD -BA913B9A1CD95DA225E254E8101216085020660509D03A034B5D7E32E3DB5E5962A9A27711D4C3E2 -9CD84057F7D0D7E8000947AFE896F8523253391D2E11FFFE523366B05C532D5629A90741EAB3D4A7 -31D3F6D4F03FF93233DDF88BB1913ABA22EB9AA6311E3144381DAE29BCC8639958EEE59ACCFA06F3 -5DCCC63E0609F542F3EE5DFB1CF718CA3F328455726F8F65E23ACD970E4049225998371B63E35AE9 -8DC54D8329B8DB0901FAA63129EDE21B158776981D4D094013C096E9CD020315D123C03DEBA21E97 -E4B584B4BC0AF25F5DCE53C2DC0F3E61F99BECAB40799478BE7F5AFD7F68E23EF50AD6645C967EE1 -1206B6E791769428ACDC370D64E4F2B3972E0E4F442297199350663D6E772FC6777A9B9DE215273D -082CCE4E8678FE9948DC8D5B0E459CD02F1645AC5620F3571A40B4D5A17DF5CFF48B6C843DDEAB5E -BF58FE13D7DA08E8AA7902119248B3B151DA583101CF80853B0150FE05BDEDBFB50A7FB0F65728C9 -3B9DF48CE8AF1DF1FAC25C1D58E1AD30274A00EB54CF2F16029E1AC0A0919C0655474B9A6936AEE0 -FB74BD185FE7D70BB84786997D34A40326A74356A4AFAEE67B6B26D1C1A7BCFF8697B55C816CCD77 -312C332A55315DC54F9BC0A0F12500E0A76B3936292A3DA2DDF5AA8CBB9B5DC32EDACC4827D684D2 -74E65B8B76FB2C2B19F7D5607523FA953E34BB39032C05B1C1244304606C55660D3CA8607E764EA5 -B03DB7FCAB5CF7788C6E60EC8C449BCAFD90BCABA4132B6CBCCFF16784FB59B36B77CF0A9EA572E4 -CA0A01C725A6CF2E4500CDDF5BACCB9094D48925434F044118CFDC2696AF5FC0CAB3884107ED17B9 -BDE0C0104B1292A1F8C99B06FC4A6360B24480BD59DF0488641899B0F42B1311B582717BA7ECFEE1 -4143654B5371C8B9B2D80685AD38D897AD1E64875C28C7020A84FBB3A3BBEE16617DCB9BC822B7C5 -9C5A18C0CF7E80163ADFB7AA03B7CDE8497C1697D90F2ED90F813095C5B91657FC294EF0E341DB33 -92ED860CB2E0AA09293D0F99AE9EB54C761CA2DB1E51E1CEAEAB276C7BD916C68510D72D9A67468B -09B3C39A7815628FB126CDFD5EFF59CC8184C0D35A5B5960F824BD175495DD3EB12A4E96008CB13B -8C5745303E66CF8608FF27C4709C1D854EB79608E52F068FEC0151A74C125EDEAEA555C198FC0802 -7BBBB802835E1D435077AE4B1CCDBF722354F6C572BEB1376D3E342195FA80AC9722EB2F46E44DE0 -5F5A227B731B8D4A4B6EDEF04AF2C5DEC2EEF8FF48C5B18710ADE3DBFA0C956505B6DA9CCB7CBB83 -4DB6CC754948855D833670FF0AC42A4773FEA8322BECEE04CA74AC2D66855132D11A51524488C547 -71B5B7A512796D7D7AE0F9C1FBC9CBDBA0831074F4D200349D0CA40537B92496692766F020AC43AC -01DB8B2AA2EFA9D21732BE3A315F6CAA402BB2E61D40DDEBDE11276D90C2C601A935C168BE600464 -76ADED15087D54A14C68EECBBBB590927C1E10D291C9285334CB0C80EDBD392BDE4D535EB61F8E76 -41F58AC1DF5B1C5A5D91E3E27E05CAF7EC97ECF0C85B6425197AA856521ED701E5AEB82A7F52A8BD -7DC97D5B3FB5C99A5DF84D1BAFF89072922509D76BC6EDB15CE5F9EB8F4154BEE1E82020240283BD -C83A8E49AA9A2649B7955D5C058F2818A63BD0BFE7EACED4A49063C489A626277AE1246F721C9926 -E2A2B6C31045FBCD235F3CC58BC4DD6C57FE998EBD1E9FA5154652BE3A1685BCD2EFAA079A3293F7 -8142A6473822FAB627927EACCD61B3E99C3077103D2D19382BC7EE15BAD0FDE489602D055A01DBBC -F91A566974559D1B477C209416887053169C3F8F59955BE4DE82B60558CC9AE15602A93F029F6B43 -29E0E62A03982DB32F5229714EFA1491A7B24AEFE18FEBC2C93DFE50B3F641B51BDD33DA38871BF5 -243C17502D00AEA2D9E9734E80A96788D4CF5BC12A42BC386162FC88A7435EE13200C1C2C6CCC5D2 -1A03941007B4C4291BDB711446CEAF27148104BB240357D5EDA0EA5A5CE27D4A83909D75BFC05D75 -F10AA74A6DE37D7DE15C1DDA3AC3045DA6CD48323D904E716B445E5E096FCB379353ED70CF4B6FAC -102C762711079EFAF13FB74C9B47AF75F3F6BDA2A4647D2AB47ECAB64DA6CC01479F618E8D2D0A36 -45445E8744683CBBC560D47C98078B84206E90EB839B02D37C852B8E284463D4E4D890203C3D5B20 -352110034EAD6BD7F41456B807E1DB1631A9D499E52E9D9853D86728B1A2E511F40F8CA1E4724A0D -17ECD640B52FF6C66E28693D89765FC391612E5889E77423EC85CBD0A038B6BA98B607701DC0C4B6 -6B3B28C7790A1F1EB8D051DC98276DD9CFEFAB3F65C1C928E48A060C992B392A43E56EAA6DED896D -EBCE71F8245BE4687F2F1B8FC0F43ECE8DB0BD0AB0811C5CE73CBE336023A0D66168B34A95B4B0A7 -50B3BF1D197E3C042C7914FA731D7831AF798E9429571CBB977E6258244E84701E5FF91D608F98FC -3D68A4EE5B81D5FF38B6C184F6118B875F022B4CE207DC7B37E1452DFDC591A3E506AE82C7E7BFF0 -011B0A3DBD616A993FBF878FB03B6C9F2055A2B095D29361F8253C2623653687FE0AB98078F6AEE5 -FC2C2BDE0405EABEDB3A33EB7F04CB6837176245F190C6BBBCD64522B12FE7F9CDCF201A1AA8A19A -7BBC4AC064B4958F44AA0F8DDA23835AD28A1FD0EA105DE2F395385DCCFBE2261DC5A89A23AF606A -3985E5038706B1FE0910400E16BF008F250F3BDE3AD806C735495D499F16F99275010478FD2127BF -7CEDD6B5BD505FBE9BD0065B4A7090C9D27CD5B36C3AD33E1B31EB6D44E375003B51B909DA50BD18 -218418B3CD22B43278B144BE78406EAF16C7DF6B6C1C6238004AAB73736B38E168441DC16F9A5CF6 -0793A18633BC43D78674D12D38CC979F7CAADA6EFE807CEA499CB9FE616496682A66E04BBDACE1DC -112B2156B9B0B20A58A8CB43FF0EEDB99805234B9A5789762AC7D65F5A319C33F4F7438CD15E06BB -80A7A97E976E8CEC23F4C646A5821880A82B2F1DC27767F090997E91488BFA15064B702F864FCE65 -05D6CEF87D2A0A12B55BA189AF269811E3B8B850C8401F3906C080D32618D9698A766732A40A9FC5 -A94E5BDDA3D028D823D6B603B6D17DD046DE181FD989EA0F80B4CA62F7973E4DF5E032A31FE6BC8F -5CDA678D4A72787EB8253EA5882C337CDF9AA3E1E7D9536DD09B047CD8962E773F72F6418A3AEF5A -289B3406C152A50CE7BD4B493FFFC27F6AA52F79EA67E362FD92559AA4F94A2F787F6C735DFADCF2 -F08AAF98B80C53CA5607A94F25F04AA65A70A75937840E73055B3D65FB054C63E2E48E68488C9315 -A13EE949E03E46723C11CC759D222CBFAD2E1A87CAD779B23D38F7E2F660DE1388EAF1CF4D18994D -75C6CC63F187FDB949940C18B537A0AFB12AC5F67B0283CA5EFE2E764C4369104B9D3B06490D1244 -C41D6085C85F1106082EC9DB84586230511C05C82412D2CDF3DAFBF4759A775628878F997415296B -C416AC8352A6C6988691FCB831CF95C10BAE691ADB3BA2918B35924BD5C3ACAD8B137397B10AF82B -479800FE16D472CD0CDBDAAB4F882A0649CF561004B8CB7CA32EC129D0A415BE6CB91DA2B65F44E8 -0D138808A127E851A7FCF927E99DAA0EA2D626B77A16C72E37F058A3B882FC4955DC8CB6312434BD -3BCED75780B13590BF4FE8D64ACF0371F9FB1D361B05025852AAB9EDA1A0C997CFA58052C454FD45 -1E6C1F194F4D363114E312F6DC35BBAF357A32CD200A3DD9654155134259887D677ACC44F89AA401 -CA27282DF7DC3F2F04A108CBEF2558DCCE28BAC2D87B8D5B7181EA927F61977764F882626D4AB338 -D95C9477C54E9C36012A3CFFBE199EC8120A99D2D70A21F9D9A0354E4EAC7947990E8A6E0601796A -AF6F14E758CABCABDFBD8204A8E748A3E5FEBA570D36E2BF474C0083229A63F96114182321B2EBE1 -BC76DD193724C4588C1D39D184C332FAEAF4C629F2B3B2F49996E46AA6C9F497428BEA52D58876B0 -DC07B460248BC85CC16773A5DAC36CDE8B152D96057F4EFAAF8B1DC10022038577368057699B3A37 -178A9F1F6C6CC60BAE820B7ADD0717911BD23A6DCDADAFA32473491AA80CFE90F2A77E24CE2826FF -77B18B869C33FA292FE01D6477765044C7D14A548B28B1360125C6933F05C58B0889390537CDD16F -8E967E0B38579449DFC1E07389B7069AA8594C5103465D5041CC929268DE863FADB6925B350AA94A -27D421FB7FCC81C6B35F906F12246B7A5140511A97211BA9BD6831A508E963FE8BE961332F557808 -488F06EAD75E86D60DE3FA2425AE8439ECB9112BC3E4D73747C1C8E87A649919827049832DB0BF6D -A8C85C9A2592AC002809070900ECAD52A56F1BFD456AFE066509694EAC075788456B0B0BDD7C192D -321E9FB6AADCAEF00F570F22CD4A5322FBCE8FA98FAEB681940895426270BB4319C11DA67D88552A -7373398AEC5DA7C9CAA9F3B34581C6E968DAAAB2751CC012199DD897B448986CFFBAE4D412BF9ECB -F46742715A9569932516259D3B3A5431CD7028E42FC751C434E2B714C718202BF02CAF9B8A2075DE -922322EA7CFA605C8376FA958B8FBE43031E1026FBE6126A3775F643EA67EBBD97F239FB3C435526 -75CD08B19CA5EBF53B40D728556B4481C7F73EC71CAB0F89E34D60C69B272FADC22E8E7BDC6210DB -09FDD913E209F49FD28E8712B8508904620250746CA3B21B026EDAE60A2822F59E912E626B93E0D2 -BFB3230DFD0E54E91A1DBA25A609B64D41ABD897A5D21764C351E85F9E87BEAB9E645149AD32AEEB -B3B1161032C701647115F98C1C2AAECE871862D91D321AB90F3E923B1FDEE00D927F897AA9812373 -6536E2E0700F10053D7E6C589BF66029D794883EAE4C8228941CE96565B50D48887B5314A2E55379 -59638222A6CA54C77CBABD460DAC11B063519AE4F50D93DE41763BA7CFBF4C7724360E750478EB62 -8921DAA065858341958E4F3EB5966C6DD77C05EEECDF4B5F6CF19AB507589B4219377959BD258EC9 -21C34FE1DB003F7D0FEA3E2FD6F5DDB0A2D62CA5A2CD3C7AB457DFF25094EFE04A9E1B9CE7AE3F30 -026B1CB039228D309A22899F6E9B9BFF922E117123347967D7C62C670E2C74579C35989925603022 -C17B1DCE378031ABC9B4B437C7B6E64620932E93189754C01D4B280B8B08699B2CA953AE4823BB9E -E34133C5C95B3290E1BF010705AD852C72BE87291E1034B09F44A95B6A2F83FEE8841DCF661770AF -44D0AC7F9CDB280939FC5D953D525E0B41B7BE188D5C794687330CD770D24D9CD53B895A253004E1 -8A31BE4E82B384 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/Times-Roman-iso1252 /Times-Roman ISO1252Encoding psp_definefont -/Times-Italic-iso1252 /Times-Italic ISO1252Encoding psp_definefont -/NimbusMonL-Regu-iso1252 /NimbusMonL-Regu ISO1252Encoding psp_definefont -/NimbusMonL-ReguObli-iso1252 /NimbusMonL-ReguObli ISO1252Encoding psp_definefont -295 271 moveto -0 0 0 setrgbcolor -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 271 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E> -show -659 271 moveto -<6475> -show -738 271 moveto -<66696368696572> -show -897 271 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F5352432F7372632F534D4553485F492F534D4553485F47656E5F692E6378782C> -show -1898 271 moveto -0 0 0 setrgbcolor - -show -370 331 moveto -<434F52424120> -show -543 331 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<706F7572206C652067E96EE97261746575722E> -show -294 433 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<23696E636C7564652094534D4553485F4D6178456C656D656E74566F6C756D655F692E68787894> -show -294 476 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 520 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 564 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 608 moveto -<202020202020646F75626C65206C656E6774682C6D6178456C656D656E7473417265612C6D6178 -456C656D656E7473566F6C756D653B> -show -294 652 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 696 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 740 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 784 moveto -<2020202020202020656C73652069662028737472636D70286D794879702D> -show -1050 784 moveto -<3E4765744E616D652C> -show -1276 784 moveto -<944D6178456C656D656E74566F6C756D659429203D3D203029207B> -show -294 828 moveto -<20202020202020202020534D4553483A3A534D4553485F4D6178456C656D656E74566F6C756D65 -5F766172204D4556203D> -show -294 872 moveto -<202020202020202020202020202020202020534D4553483A3A534D4553485F4D6178456C656D65 -6E74566F6C756D653A3A5F6E6172726F7728206D7948797020293B> -show -294 916 moveto -<202020202020202020206D6178456C656D656E74566F6C756D65203D204D45562D> -show -1125 916 moveto -<3E4765744D6178456C656D656E74566F6C756D6528293B> -show -294 960 moveto -<20202020202020202020667072696E7466286465737446696C652C> -show -974 960 moveto -<9425665C6E942C6D6178456C656D656E74566F6C756D65> -show -1553 960 moveto -<293B> -show -294 1004 moveto -<20202020202020207D> -show -294 1048 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1092 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1136 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1180 moveto -<202020202020646F75626C65206C656E6774682C6D6178456C656D656E7473417265612C6D6178 -456C656D656E7473566F6C756D653B> -show -294 1224 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1268 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1312 moveto -<20202020202020202020202020202020202E202020202020202020202020202020202020202020 -20202020202020202020202020202E> -show -294 1356 moveto -<2020202020202020202020656C73652069662028737472636D7028614C696E65> -show -1100 1356 moveto -<2C> -show -1125 1356 moveto -<944D6178456C656D656E74566F6C756D659429203D3D203029207B> -show -294 1400 moveto -<2020202020202020534D4553483A3A534D4553485F4879706F7468657369735F766172206D7948 -7970203D> -show -294 1444 moveto -<2020202020202020202020202020202020746869732D> -show -848 1444 moveto -<3E4372656174654879706F74686573697328614C696E652C73747564794964293B> -show -294 1488 moveto -<2020202020202020534D4553483A3A534D4553485F4D6178456C656D656E74566F6C756D655F76 -6172204D4556203D> -show -294 1531 moveto -<202020202020202020202020202020202020534D4553483A3A534D4553485F4D6178456C656D65 -6E74566F6C756D653A3A5F6E6172726F7728206D7948797020293B> -show -294 1575 moveto -<2020202020202020667363616E66286C6F616446696C652C942573942C614C696E65293B> -show -294 1619 moveto -<20202020202020206D6178456C656D656E74566F6C756D65203D2061746F6628614C696E65293B> -show -294 1663 moveto -<20202020202020204D45562D> -show -596 1663 moveto -<3E5365744D6178456C656D656E74566F6C756D6528> -show -1125 1663 moveto -<6D6178456C656D656E74566F6C756D65> -show -1528 1663 moveto -<293B> -show -294 1707 moveto -<2020202020202020737472696E6720696F72537472696E67203D20> -show -974 1707 moveto -/NimbusMonL-ReguObli-iso1252 findfont 42 -42 matrix scale makefont setfont -<6F7262> -show -1049 1707 moveto -<2D> -show -1074 1707 moveto -<3E6F626A656374> -show -1250 1707 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<746F5F737472696E67284D4556293B> -show -294 1751 moveto -<2020202020202020737072696E7466286F626A65637449642C> -show -924 1751 moveto -<942564942C4D45562D> -show -1150 1751 moveto -<3E47657449642829293B> -show -294 1795 moveto -<2020202020202020534D455348436F7262614F626A5B737472696E6728> -show -1024 1795 moveto -<944879706F5F94> -show -1200 1795 moveto -<292B737472696E67286F626A6563744964295D203D20696F72537472696E673B> -show -294 1839 moveto -<2020202020202020> -show -495 1839 moveto -<7D> -show -295 1956 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 1956 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E20646573206669636869657273> -show -370 2015 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F5352432F7372632F4472697665724D45442F4472697665724D45445F575F534D44 -535F4D6573682E63787820> -show -1672 2015 moveto -0 0 0 setrgbcolor -<6574> -show -370 2070 moveto -1 0 0 setrgbcolor -<534D4553485F5352432F7372632F4472697665724D45442F4472697665724D45445F575F534D45 -534844535F4D6573682E63787820> -show -1764 2070 moveto -0 0 0 setrgbcolor -<706F7572206C27E96372697475726520E0> -show -370 2125 moveto -<74726176657273> -show -551 2125 moveto -<6C65> -show -627 2125 moveto -<647269766572> -show -789 2125 moveto -<4D4544> -show -937 2125 moveto -<64616E73> -show -1072 2125 moveto -<6C61> -show -1150 2125 moveto -<737472756374757265> -show -1370 2125 moveto -<6465> -show -1458 2125 moveto -<646F6E6EE965> -show -1642 2125 moveto -<534D4453> -show -1809 2125 moveto -<6574> -show -1885 2125 moveto -<534D4553484453> -show -370 2180 moveto -<726573706563746976656D656E742028636573207374727563747572657320736F6E7420696E74 -65726E6573206175206D6F64756C6520534D455348292E> -show -294 2282 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<202020202020636173652034> -show -596 2282 moveto -<20> -show -621 2282 moveto -<3A> -show -294 2326 moveto -<2020202020202020656C656D5F49645B375D2E707573685F6261636B28656C656D2D> -show -1150 2326 moveto -<3E47657449442829293B> -show -294 2370 moveto -<20202020202020206E6D61696C6C65735B375D2B2B3B> -show -294 2414 moveto -<2020202020202020627265616B3B> -show -294 2458 moveto -<2020202020207D> -show -295 2575 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 2575 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E2064752066696368696572> -show -370 2634 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F5352432F7372632F4472697665724D45442F4472697665724D45445F525F534D44 -535F4D6573682E637878> -show -1712 2634 moveto -0 0 0 setrgbcolor -<706F7572> -show -1838 2634 moveto -<6C61> -show -1909 2634 moveto -<6C656374757265> -show -2080 2634 moveto - -show -370 2689 moveto -<74726176657273206C6520647269766572204D454420737572206C612073747275637475726520 -646520646F6E6EE965206475206D61696C6C61676520534D44532E> -show -280 399 1 1451 rectfill -2125 399 1 1451 rectfill -280 399 1846 1 rectfill -280 1849 1846 1 rectfill -280 2248 1 220 rectfill -2125 2248 1 220 rectfill -280 2248 1846 1 rectfill -280 2467 1846 1 rectfill -showpage -grestore grestore -%%PageTrailer - -%%Page: 5 5 -%%PageBoundingBox: 18 18 577 824 -%%BeginSetup -% -%%EndSetup -%%BeginPageSetup -% -gsave -[0.24 0 0 -0.24 18 824] concat -gsave -%%EndPageSetup -%%BeginResource: font NimbusMonL-Regu -%!PS-AdobeFont-1.0: NimbusMonL-Regu 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file PUBLIC (Aladdin Free Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file PUBLIC (Aladdin Free Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Mono L Regular) readonly def -/FamilyName (Nimbus Mono L) readonly def -/Weight (Regular) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /NimbusMonL-Regu def -/PaintType 0 def -/WMode 0 def -/FontBBox {-12 -237 650 811} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -/UniqueID 5020945 def -currentdict end -currentfile eexec -E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942BF7D6DD84F1664B89 -699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED2AC419FF2B2BDE605B8EE3264EDD6641 -2D4F21C64AC522BDFC7C5502F9C3F3E5592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A2 -5032519D1868816E44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8A123E6A2261C63C769D2F4B60FA2C438AD7D199D8E4 -5F7E7C9A605C8CA14E21FCD81C9A515FB8DB6F99604534D06EA9D87FE0FAA852899C9D0595C7A97E -6C55F79FAC45CD38E87B10D210CE7501E88C8FCD3444354365FB893A12F596AE2C1E70D5819EE0D0 -87D10BF8DA96F3DABD5405D28C4228C6C31BA4052464859640933FEEFD8071C0C84CDD829A9B1D0B -A01F25A4D50EE2EA2B45160CA6333B2D2800306ED2BEFDFE155E9D9F9342EB8D5B0ADBF2460CCC98 -643FB1287CCD28ABA7B5CAB92EC39EE2E918990372B16F8487EBA30EAE88708B6CF33B6C015D8096 -C7CFE2F139F52052E3925C0D50FD64CE68236D59CB83EF56BFC584150EC38065059F3308AD6F9A99 -F83EF4E6CB13855C8175E31417D190D036B387D3952344A950F4D8C7781B307A094DF1ECAEE4D2C2 -FD747BC6F7F9C6BD0E90C19294F96C8C5CFE88FB34C477574A1B1630B8CC591529E59B20794DA32E -61DECDA8ABBD1AE956CF74012AA01D42EE01E861B0AA6897C864788AE59DEF43C493246FDB1ACA55 -4C12594BC7B33657A9ECC9E3D1472EF826073F632BE540C35FF6FB40566773F3BB2204D3A579A08C -CBC844C14B18C350F003B9DA23A570C362D6003893CA32F86F59B829C78EE3188B6E3F7FA81D7F62 -2825C639638DFB78B7AF1F500F5B450FA54DBFA5CBA277C794ECE93275A3DE0B452FDC8DDC2993BA -A42F28A636008CDCB03EBF71BDCAF35019778993443F88412AD2AD0D7155A3944606463266322DBC -0244B07DA1E9C27A27B59664E8566D7A54CC03E995AAD008B0A17E2C3EF61F720CE7F7788599C4E4 -4C709CD5C31B11107F16AD70B17B9AFE2E8CD922A7428DAC171427FFAF51067307FAB0ADB530E701 -FD22DA22C4CD3064067BD4F6089C4B2C87937DD426E4E9D2F60E608288BAC9056554D04947E69200 -61E379CF5E81BFD32FD37EFAC1F61CEBEE551B0851516471A7472C60DF89DAA9EB1DC5A67E479745 -3E69B9E22BAF4E3CCA4192D603295B018C4AB69D18DE52DFDF15E96B557F290A4B8C5B1E7A6CACA8 -1F2351B97ADFC36995ABA43803A6E5AC04A3C93495F6D38106B8B144449C07D1358210F9176E1565 -72363CFBDE576BFDF99FA329DD1346E83F79E06CF68250CA57A68931BC7F342AD295D0CBA17AA95B -B8EEB53EA6E8E660B814E9F857CECB14F44A43288B69A9E7908D55BF19E844359879D28CAEF1C38A -36420185D20DFB32C2E002202800E8EF3D67C5D50E919657CA958B538D537D503444865331D79BFC -40312068D72364503BD0CC84B5F30A74D8B5B6A26AF2DB764564FB65A6BA8F9051AE2B4EA458D46A -4569F30C6E77DC097356770362E6CF3F1661074778EBB44FF7D1E3B64FF75E77E11FE525BB121C65 -46CFD13300CA1F02D571B82A5825E6226D14FDCF27F06D87452A8B6C5DCA658535CEE2A795E58137 -D48E566B69D53A0C3B766E84C51EAA221C46999CC8065ADB2F129D5B630FAB1814C0C33B5AEA0EFB -B6E994D80941B53079AF96D90A0B924F9B0E319BED9836B8F9053F868363D3CA554CBB181863301F -8CB940872ED5FA7BD18CE39218B5AD8AC57D0F752D941076B1C64D99BE0DB86D7A6D96510D772EB2 -4C587F11779BD21CFE5BDE1F29C1EF9022B2B8BCD7F91153C845906722477829C40111D810480F3C -F62DE8DBA7FD86CD236E656618CAF6FC46827FBC4898EA7672F8C9971AFE43E0E01EC8B77D4AF48C -BF1210E98C1DB15C16D149BFF58AB0270CF015B107A3A50F5DC8F37FFB92EEC8CB6778DDB7CE4AAB -C464C4AFF654223006A550EB52485A23D2B4AA7198D3CD54418102F1E9A4FBDE37B841E56F5C2C53 -966DB9B66B000E4588282E3FB80C2C519339F0002D2F83C979EDC5827A3B3C8EF8810A0F9DACB6B9 -998E9AF6551F56313DC4011904CB979AA2D32B11A811BC248141E4B9734D9FB7982A5671002D8279 -CAB93ABE057474628DEFC95D43890DB1ED34CFA8A20BDC3D874E7679A396158E522ED0AB969A4E3E -C7E4474E192590504D54DEB7B260B7935C4E56548A7D121AC1F741F8CDF259EA1B5813175A77A1D2 -D30BA26F65EB765A04C09ED51F69F41551ADF399E6AA2FC09788137BEA4913F17B8EB838C38FB272 -1FDCB55FD65697FF0B850E7D3D1CE266BF90F7EC06A9A0876BDFE767D3A918B092FC78C775F945CF -1F96E859C03DBF630D9A940939654C3549D8F7921CB94EE23D5A0535DE9DF31EA0F937F860B4F220 -A99ADDFC343D7CF7BFA0B803C12C26403F0DCFFC8EA786D0D8A8D9C367419CA8AE41190CE93A8086 -583A1E6C9D70B612C84D87D2EEAA71EC2DC12F4CDE6A821303D5F6A9BBDB7EEDCD289E80FA3B75F4 -7F481B50719DCF4A142069393593B9AF9CCEEAEC56A35B8787193D7C88113E9E1E221D151E093B01 -9EF89F6118BEC4735103CC8003CC5AD1B6727B3226CD44C497DA7052DD681695DBEC3397F9598C91 -77701C73BF0594CE93F23D50EC5BEE2FB9DA1FC966DF148B27B28EE3C89526DD6625E2887F9FA076 -7C127C609EE315626BC14D274FBEA56528DC06A27B2D476D46E9E7916590B156A5DF04A6CB15E362 -45D77021767B6E5BDFCC679670263FD891446C3371B11BB6E1DF60F960AAB4149D7753E6A5C33810 -C42C8BFF4E935003388506F8278BD7CB672F132E065AE684DCA0B9064D01DD620E7FFDFE04F14277 -EFE8E60159BA0FCA3FE2F28B902D4AC275D19F0AC6971EBE827C4A232D87650D2688345BCA78F879 -077114F0463C5F058107B669566F8171E4E284D278405580F04BFFC9902784216E0C9A17AA9B2935 -E66E18A783F723BE044389B7E9D62AA36818FF2EA406C3C1A9D2F3436F3EE7DB8BE86AFA8DAA6A4B -1B84611350D8D27605509612B515E16AA843164D5D0805E36A2B9EF74C5F6A0B9D59A04B55697123 -27F4B1B30E9587CD103337639967CBDC655AA46E80D2CFD24BEB50815B5338E522B3A7AFE8362AB4 -F05D8BC52BBA9C5089ADA8C89529B0275AF422EB540D31A938B8740860756325B966B36817115213 -FAAF92DE63F6BAE1E0064BFBC5588098B61EB83C71F1C2082436D37DAF1ACBE186FEDC4BE7C1233B -6F18BEC5F99002D21CB7864E4811F7AB3C03003E1E4490AD1AC793BD28FCD5EF0E6CC30EF39A08C5 -2F71939B0CEF620DC69E31E39D6DB969049031B0C92EF2DB653D97F370141456A52985076B268652 -FA2648C792780BAD637C4D7581FB2D62011D57E293719487CF2D1F013CFAA532E1C2D39178D51272 -A6AF041440BCA174B5CC902BD7390C7D3695056CB4BD7791F9FB6D88E7A70DEF2C97869F5DBC5BD8 -23C517C7B7C39D624DF627DC9653EA5347BFDA80B723F05F6DBB4C9EA501D862ACE05B9DBDF21B70 -56FBCD8C6D4B85873DCEE6166C8B5ADC0316CA12D9639F361B15A42F00E1D62EDBCA1111972FA0F4 -5758BECB31DB38316F3CDFE1B41748C93ED58B67E9B57ABBED5924A6D53E99FBC9A994A6489A8BDF -13EB685548B4DC6D62DA7426C22227D4D43B6FFC7B5EA91C896730253E8941AFEE588359C2BECF6F -FC415B9EB6D31CCB0F6C7F85853E6449FA6D627A97A3CE8303F148393ADCCCDFA2FE085C6908BE5C -3C05AF00A6F02840206C3253A559AC5C049BDDFD11AD9B118403B84DA10AE3C470CB9A9A2D1D7B73 -2F59F5FE146DEDA60AE750F551AAC934621B4470E1BC324C436303E25F81D0DC3188BE0D6FEC5414 -C20E4CB18952E12CB6423DF7124627ACDE145500D77A97A8BFD9CB50D1FAA008E2CE2B2505A4749F -1EBBB092C347023714055A9B63353AF9E7FEE05BB54C9843698101F79888A91531773830C2C967B5 -88D3ACD2192883D5CE3962D51084FC653EAE2C5FB2DA41DACEFB5C76812D2EDB5B109677289CD199 -8D457FB1023A19AC67295BBC1A9A20A426B06A368DF3C5DD083CB1180D287F5500F2C635EDE157EE -FCEEC5503447382D15C748C1E35F68753992E5C90F900DE54D18F8E1B355D1076ADFB1F3590135FA -D1A36F028E44F48ABB149B80CA9A54614D467F8D71CB310BBC7AC7100261092DB8C5BFD39E0AC6BC -2C9D6CBC3A8C05FF8A74CB21608EC4A4CFE4CBAA2D056DBA14206106044DECF59F957EF8A9CADE4C -9B19D8D30DD4FDE6A9548E50DB51ACA73330142153FC36B69C1C8D5B26D0C689B7040E81AC2C864F -D7C097C99BE5953843E172C97AB5684F35FB03A725A89DBF371F08DDF40A1531FC1B676DB0E1543A -EC6E97D3D2E4AA3D5831D8B3C952ABBFA112352814FB6FAB61A0D680E6640F6AEC8426200CF61286 -F7422CB2F78C61EBAA36D47EC16D7FAF8B4AF31D090CDFA255D9D7C61D46CFB22A7D6E1758E71ED5 -67E00CBD8E8F468DDFB477F091A2F915627F22FF47B876544BC1F03B6BBB98385F009C20BB1AA2A7 -A78674692B8EAC2E3C8069B79E679338DA57F72976810F845BEB6B9ADD32B95D78E5E60F16DD1668 -9C05FD82D36A3115BE8ED494A74DD211D58A2CDF983FCB9CDC29BF7F0E29988FA23560EDF514BC1D -183F3B2A22C09FB179B47E05ADEF48DF02F31C29875D1915037B19407764A4292FE44E741651A8E3 -BEB5F0D972B6327090F664417C84F84FFBF0AFFF8B1D85C822D90730AB4140C42A51AA8B1DBE4398 -4EA8566040EB8B341CCE23FD3F69DD235A080BA5C69AECB9BC732BC2D7D40617DDA6B79FB6EE40C3 -556C7DF9B23DAD89E94054B1345DB8402AE679FC4655A4A776C0150463F8DB2BFC0608EA1F124E22 -1DDAE6026B5E5D007A7E4A0D6B3B0CF3A2669E67C5E4F01551966A7BC48F2F4B6A87E740D8095E63 -F77C7A027F26B52F2299DE5B8A2F6209BCF3D31CB0235F998F781E5CC81E31DC424E008D46EC0920 -2951E5684804A0592EA47D6C788A20487BEA2EC8F2E6C1D7F378B62DB43CA43C4B366F8B4319631C -FE9854F0E10321CFA3B01C873584863BBEFC23C72C05E695B56E8A52E89AA2DAB543834D34DCAC5F -ED08DC51825C5257AE59850D101D84F4CAA1D29FC932F9E0EFFBF7A9A7F3685F61F0490CD3CC8988 -2DB52A757A6AF4C4E67B407BD2316B1C0FFE7DC54E43C87B874F57E4903334E2140B011484863CDC -ACA331175F2CF3D72E0042855983AAF8853D3015E870FF0807014C31D55060DF3FE1FCE157324481 -2744AB51322444632F9AFDA6706E320FFE82B8CBE242A19DF00CE73EE48E25FF49D5871BD3E60652 -298FE3E8D400609E232E0DDC794C0579ACEF89E841B2EDCA50D51151F65E8C1CC3B01EF1870558F0 -BF5743718C3E068617E81BFE120C6CA16E0924BFC2541177D53671CAA3AB641C41557DCDAE1A3461 -47B5E999C4541B08B4AFCBC187AFD653D5B5F8386DF6AD8FE69E21BD0567DF494F736C6A184FA4DE -48DC9F347787CA96E2E00A296C2DA05C2AD9BC423E9CA428D7F1FA12DC9353A302FB8C529AF8688C -BB543B45B2717EBF8F6C497935F4F3BFFD285E0402AB7544B3CA4643AE5A8B5250ED987A95FC1F27 -5B9707ACD0641BD0EE2AE9758494F8D8A51DCE408A38AC20EAF0852D72D84D0C6BE973326793AEB9 -55EAC6FE0A2813A355DCD22F6F2CE56588D1C055CDDFA98878BCEB6A018DB22922D2B600A20F8184 -2E665DF41013CA0947C4237C2BD60A75E2FD1A3FB8C8FA19485730B87461AD466ACB02DF8CA24091 -4FB090B3D2B41EB6B8FF05E1A59D9FD668AF70BA5BB72778953BA55FC5F9F626043450E1D09BC83D -8605098ABEF884639A37809A32565CBEFB3FF39EE53D6C18C58C272BB928E4410E361E59A50F242D -69747A032617C52DEBBF62364AB5A96EFAF642D9D82BA679B1D70FAC10A4EB62FA5CFC308E86368A -AAD7E75948F43598CD1C544A0D4091374D7E88D4522CBE902391641327E888E7748FA889DCE67ADE -61699E7D77763681CAEE9B1CA8837B2F7EF9C18CBCC538C465C8E2DD34616953CCB6030A222C728B -834911C1A179E2C770289407AB28B303E724D97F747D6134B425216A64C6E0B60F633E2B85300047 -E4C90339CE030A0FAE31E830C8ABA5AB3386A3B69267351A7BFDD66356AE5E57FB2994452993E90D -E7C4E260ABAB93C37831856A650D56E44172FECA01D6C7C380F250B82473960D2A2A5FB6B4DA668F -46E624ACF7FA0FD4490F485D640A3ADFC9F8652E7A38CE5799F770C3606DB4B8B947F93967F779E3 -A3C0572F13A5A187D31D7BD12A5C7BE23CB6ED6192086241B76C5BA6983DB9C93E4B208D707D3760 -F03CD6272EF3A4CE89B8E52E6AC5871A3D03EB975759AB4BE239E5EC7842CBB333E692CC607C722E -185D3C39164DD320C6945629C70FF66A5237C0A9520A1FAD6EB9816069351AB0F135D90CC0982B14 -7D2294AE4A38A527EE40BE9CDE2512AAEBB590E134388BB171D0956A7C4566D65A9A041BE6C4F883 -6B3EC3D2ED1B48B566A783292B15B6127920D247D494F070BB20BEFF60640B11B276DDEEE49706E8 -B2B21BB40B7F00AAFC594C492C25DCA774E0B80D82E927448DE2E74A9D0DC7AC9260096EAF187B6C -D6AEAA6D1DC4205B4411122751A5B22688404EA7C5861730371FFAC10F5AFD4727A0E402AB5EA757 -606B75EB86A05E8F774D6E430A1A3FE2A37EBB06700474239FB1CFA05EE44B91B82244C575B52E7F -AF934B04EEB0D933FEB57EBE326D75821C8B23EAA85B583AED4320B7F04B9F2DC591091216FDE52E -064BAAA9C2C9D9714B95A4558C21F3CEBE624B5403B31508F178581AF6863083ED762F1E2E34A45C -FDD71660D626FF8648F5D6C5E580D4765A67FB6159EC8077A9F0A88038C8D3D7C77FF0926E2123BE -874F7BCAF129D55A5B5960F824BD1728ABCFCC51D23936DE9A25C408D786E44C3A2BAFA4423177AD -060D21D38E15E23EB6FFC0B4120E814695D423EEFC2744A1FC81B4DF89D76F0A6803D8B14E75538C -AAD03A72517B86514F6952F6FD619D9E910D980F00964DB325318C045BDF79647F453D4A5CF4E61D -D5359782827229310405FBCF6107C3AD9DDEF9A9A339D5D5A6EB2E7838A0A43221BD62CBDF732DB0 -A638A52016FB35BA7761AEC846A023D3BF2D1BB183543E81EB7CAC1E5970CDC6F068C5EA118C7AAE -528D1396E6DC939112DA4460C890EAD5C01BDC438F5BB734218BA6270ADD0DC1778FD8AB16831D6A -302B814A1A44B07EDC65956C9E6CF4875DF521F3CE5B422F71081B6D69BD270F739095C9E81C0377 -934A8BC6390C420C4E4CDD9CF7E32544C68D884E15ACA3BCC07FC8C132D8FB9D752C15D75C52C288 -57E2EA461A6FCAD90C56843513F74461F18D7164BC597A28AE4BA7C86EE1703535A9B9ED50122627 -71FC12F102E800E0E1AF7BB46681BD2B14B614CEA91B7B2AAA35235DE76C0E113C92688F8EC81277 -D58C3406778E1EC1CC15F1CD9A137C8FFDAAB99ACE3BFC782916F1A877170589A92DC921E6740A22 -B84DC6BACDABCC76E64C79E3A588D80F8F4D376E1B426F15751CF7391102102F0AFAFD8B22DFDEB5 -48AEB5F30B1673023D22054A13391A0EC08DE6E7B685A0D031AABF20B7C62187C0284892D5EAADF1 -21BA28263EB863D5E36EA9C06A77CCFC0E17F593961591F84D82AF823EFE41044C8D606FEF83CCC7 -B0E961E7994DF8A3CC36B209D953E250ADAB8D22D7F2B4E2C9CA39EFA2D93E56195C1560E30A5190 -CC5B17FAEFCF250DF79F6B624A4B917E11C332222FCCFEC4F6A47BD9E75DA9854FC3F7AE554E91ED -DE144D7AEF38A0E3EDB5E5A5626374DB94F022C8CF549093041DE00D7269B7CE544E748439BA2870 -718C08E58FB4A77D93EBC04B7957D272AE1601D41BF85A2BADAA0DF73B0D3841D4839C85677FB2E1 -5F1D6CE592669FF4BBC9C69DBA334DC37706F2F6BE83D5863E8CD6A30C08640AAC4C233684E66B4F -E6B62D4A8BE9D531E47BEF5640D9B5C27D990092BE1597F6995C8A77BE9C18AAE6C1CF130775DDAC -41D34438FC7AD8E042CB56CBF2944932EBA7D053E9376FF398367450E35A1945FE23E05C921096A1 -5454721FFD0F429A3E06DC3ED36F1C170BE79C66996EF8337AFF85B90C5D3A4A94455AE9FA32E211 -7A63E59001F052D5F6223125BFAFA40901E98960ADF7BB886729DCA82FC3B8CC52B37FF2517299E1 -D769057F8154FB95582F02CB0BECC873A9C71796ADBD3E91324FAA94F2C41CF57C30B5897D031C02 -D256C909E080E70BFD1F32E69EF67031138C2DDCD1A8E4B65E485C23C3E450ABDD9815512D6F34A8 -4B9DB715DB2C7A93BFB424316E1AA44397749CB01088428F149A3B4324737ED9957FD388248462AC -1B2610D72BF5C073ECA567E7385CC959E37CAC7E05470160FFA5A9F63B8E9B082937E911586EA165 -374938F492EDF28CE6020953A5B5CCEC7737F9D9CC8538C4339567AAED3794ABA3B9F4EAE65466E8 -E326F6C399B36355935FBDCB9972F10B13494DC25097FCEC5A6398F275C8C151558E74C5175F7BAF -4155E36B733F75CF9D5C5979B0764F14D8306E06BA24BF791141E404C69F3F8FCCD91B9C58C2C671 -AAE7D4F9E5D6414E46ED633A5F78AA5BF04E652246A066EAD9E582B181CC196EA2D3CFAA383B5D0E -4CAC9336E119C08CC6AC55CBFBAE147C623B400453BBF447E96DE036FC025624384359EED7C7D5F7 -858DC0521377CF647A157FC3F188DE5EEF094DBA125510FDE34C570D7BE76AB5DF0A28BF45DDAADB -EA7EEEDB936332DFE93081E0AFD3FDD46BED08D6914B2EFCFDC41662A33B90B03D76D34F48D30FC6 -BBBB600E90E6AC7243FDF026762A44B4D6E4ECBEF48C9D7B696AF29EEE063E557D8FCF0F09E0136F -45D17E608DA36E59F2AECF8493F8D62536119B5F7E1554DFE3F6E8D7C9A2C6F557D18B4AF92C9F6E -050975C3B5C54F9B5F4E39D600B6FA2CD6DE203A174028CBB2A201AF126D1013C229BB82CFD013ED -199D01E51EE2780FE896E01C63C655087A3E61A7F1029FA5E97EA1872F1B45F22282DDC317E17926 -7368CB52DA9444F6055A3C653659CAD2A1D8712BC2B1B32C1DC6906D957FB88524EE066156ED6BDE -B8D832F9338F9912E29A250A8C4674E667C1C278B677AEC9972BE83CBA3FB779893FCB8F81A323AC -91474BA2A2334A07BB5628E905C518E634F6761A3289056F83D5DD7B3890987EEE1C18FB2D379CC1 -905F1AEB3B3D2AD578F0D6C845D2D40C4BCEE3F71C90E68E5417BB8CDDD878D83BA80AD8485F4067 -E5C3CABF28AB56CBB219C0AAB8FFC6C7E192BEC8CBCA1459AE4450AFCC81B9548F40CE2622E5A7C2 -81F74DCC02DAD57EFD92D072318DDF05BF42F1EA8163071E23949B0179CF7DE64677CA99B23CB926 -B3E294194EC13397EA1DC9A5E1CDCD828156CD71F81B64167D4FB01E6002713BD8AC6F82B20CD369 -9C6CA4704DC5C65A2D66EB155B7AF1C9BB46469416FB49C1C7E17A30A5F045271D7DF3FFF2F42C6B -470701C381E3456A500C6BB3D0E47B4D91C5F34B49BB6272F1F8698B307D89EDA3A1565DAD1C0864 -627560CF922DCF5B34C67860352390B282F95394AA2CDE0E97CE3ED39546A6AF1C52BFCF81A29BE8 -2C47C99E8050E4889E4575B75F39E662F2DB7420673797E2ED3D67CDA7AE2C15D0A0A794D57D168E -BE13214E89E0209AB2C0EB7784E9491AEFA3C02D0DF3AE5365A0FC4AE023CAB528162C7A1B173664 -9DFADDACA8DA5FA18B7D6489E4229E9E24D38A620464A744A5C60F6F9D334B908706B738AED18669 -8A8B278341FA4D65A0A88680BA484694921512F7DE93337FC1C02BBE6E64AF2DAD07603279D87329 -1D1F4D39C1DD6D89C90F65240F4808F6F1115CA55B88E242565E59F3BBF1F10EC7B88872E9AE61D4 -4CAE185463EDFAF7DF63DE4D2207D307AFB61501892965170D2945846FCF5973A1D458607F50C15E -06E5BEC715E0C156259AAA6C735593E5564F65F443B78CC7512EC35A56F126DF9D30974A40872E42 -65E1AE5FD483CFCBBBA26DEE426CDC4721F19C3FDA86ED7AD4FA1120F63669BEFE7002B128CEAFD8 -C63E8AC09943B6CBDFB3D2476A026C00A8FF81B1F651B97F310C82ABA5F388CC1DB5AFCFF5996D52 -52A6A42FA4D972E41EE56088F78CB966F9051171C472C774879AECFFF08BFD9CEA40D7C298922ACE -64F28C14E0B81F4DCADE81D71DE3983D87D905192EF13CEE71B2D3FF1A88AEC671EC318917DF98A3 -C9054E372D22A3CEC82FCC217F47319A40900312F6E32B536B9E7A7FA0837EC65CCDB5FB0D414371 -17596CB39D9382262DE6E65379D3A9709B2CFBABF5FC5D5B352425F06F88CD31012A2A4147B112F0 -C1C0ACCC808CD625E0228EEF66661F70AF96D3DCFECD402700E4F6522AC9A856DA466D55C84F65BE -2810A1565163872D62EB81333A698ED7B68352CACCA2D7AD38AB55C19E4F5582F75818302F5FDADF -1DCED09D94872F2D48FB636C8E38C7563C72C771A08C6B1F041F3532BDB39006C89A33C09BE1E3E6 -03622D891F98010BF1DE5355F557A1E09448D486ADEF565705277B31B8BF2B86761E32631E3435B6 -88B79D566F1747BA456DDB43CD239FB47FF7B425EAA4C657C8EEC26EE01AED07CF916E77D53634C1 -37AEEA009C6B515B6342C54BE2C7B95955B1A9DA277A0ABCDA2346E88018C726F481F71D6011AA42 -F8852F2E5749518FE3B3AB668213FE1A05C10A1C53953D75312631D6BBBA01D418199DFEFF8CF548 -6109B099FE8E2F606165FE30F532C03567785D5362AA873C9D3EECEB20F1945D55F49B0CCAC84967 -59FCC7292E46938943C262D78F3212D3F9D0F7B103157F423D71B1ED54B2A603F4C269029918F238 -EC6828FFCEC66009DB9C9E59534EABB183F31D7AD4C57B1BDF0BD2CE5A421882BC10CC1BCE6A970E -2B586BB221567CCA483989DD0B8DEC424C1D1FF042DCB7834423CF244EDA28D2D969B17440CAEAF0 -24A6119DB010CE366821AFA424D1B8299609C04148275AE6E5257A7ACB3C766C747CE99CBA2D703C -F19B7CF301B634D8B613DDC4AFE4633A4D77BFF8E00CFB5E289EBBCAC90A24307E7941EC1685CBAE -400CADD876FCEF7F6557EEE167D2035A05120293527700DC510B038A496BE1D5CBAEF24ED39F7421 -1A93AADF22214ED606A80582485AFE358E3A46D0671148998A3B3BE209467009B43400870359D418 -9A8CEB4D5866AB52D16D9CEB1EAB71C07E6CAA34B70E3096BF7604C22C40D5FBFEEA616DA3BABD59 -DCDB97D883FC8742B8267A16A99B7953225F7144568D566E64542C92E538AC140C851E5D295528EB -7CBB49909B1CAF6409C9BCCEB325468FA0B5F7CB2987382616B477CCFE4F4AC79E4A6F7165363543 -F04DE5B6F6E1C2E910CDC3CDD6C4C92737198F892337DCB6647BD226C820AC99C65D8E7772BBB74F -E65DCAA8A22C33BC168BF48E40A82700A3A7668C5A9A71E397ACDFEE7D556C5C19467B7AA69C260B -727407AC837BDB7D67DEC055C1F45D8BAC61048C45BC9FB3CEFE7549EAA2992D2EDC126FF7A05EAE -58613332A2BC1465B2BC0429162B907D65F793D236EDDD8D35405866D71B25F62DC4A7E06D4DEE82 -840ACCAABC0774F8A63E9C0F7FC980B3583E7A8B01C46590E3BC04EBA565C2EA94F057D964A78A90 -EA9F52ABFD70F84E44E434BD10A42E98C794065724341F907E35D3CB257161E01C7084E3A0166D15 -CED65DA7BA87DBB2EA33D39BD99AFB93D3548358D08330E807F8552CECF63C84F805205491BA3A1A -622E70C232FADF3BF2DCFD6F0539158D3306506F150B0518371912A25EB96163D73E9EEED42EDC84 -D688BC7F7708D9DCA348FAB4DF62E5809BD094842D0A31DBB7C4B41F94D946810C5EC10B69AABC2C -91A59500B2E5D37F4755DDFB7AE4ABF757F4C5BCF77C7F95E6A616646456FE8F18407080BCABBFA5 -7704287AD26222DF91AB2613951E2D679472F8ADF06EA2A20205EC19972299A78BAC52114334470C -5F5890C2F846B4C6042D73945127F2E3910ECA1C4CD7A16EFE4B4BE38A15AAA710682C3836A8CA83 -FD384970139D8B46FB0AEBB002DD224199672FFA02250FBCFA4E649E335428FC71F50F45E498419E -DB0E970F46894A48F65580881C9C4250FCEF65C9B28699408E18B26FE6DB7F1CBDB767564E73CB59 -54C6D639CE33220C894F36E70F71C9F9AA3FE2AE0AA0E3F2E304EC5ABC661675CDE2E70519E4220A -E26FBACBD01D5169EB844750753E6CED53E3678FDCD08AB93E10067E9C64F38B40B76D99B6CD92BD -F4155A1EA5CC824998B59AAD06E09E5F15EBB2288D66EA71B296616734FEF2796F07FF0D8B047074 -A1111D68B99C2B70FC56E74A51B062F4998ACC85B1943C9477E436E5CD7AB18DBC898D21BB93475A -623BDDA71D7B895BA2D4C10F4B90BF335126F4FD57D73AFA50170F6B3C364922E551D40E35DA75FA -891762FA23401D39260F2E92C7807C746F13BB35CEF9DBF2E76E66A72FEFF095DA482A4DE8A42091 -7065736CF4DE904FB52E649A32255E2030A7B31B686353492F31C064A3C4B0448C4BFD44B8E15384 -FD809B8761EE26A7DFA1758D57CE4F0BC376EB2B3833534B15A83436BA553955ACB5A7A66796AC5B -92DB5388BC53EFA27508B08E82821E5CF669BCE52BB860780F749B4F38ACDF5FF12726BF3EC2743F -01014CDE96FE6B4C40A034E9EAFCA2A35CCC776C2669E6AD138070A40F48ED79136D7FF57E993E09 -B81C543FBADD350FF5B5F7A46F060F88E30FE2D8233832D18B6C323EE017EBC1DF5C838321CDC8A8 -4CABCAB20B60A1A3AA028F36EA6E87C850AF8AF7CD50AA6359038BFA8818821D02CEE8F51DAB8C05 -F7AE9797814D97F3DB8CCDDE45B21DBB15CEE292FAA534A5F317B357F4091F3DA357325B8B9F5EDB -45865415973C143E5E5BAA483FBF2D06CDD4246675EC58B84C6AE65CA743117FF00F229243772561 -31A7F2BA26A9115AFD96C18216CFDF41B7220ED0CB3FCC26C36380007B382A02AEAE428887DC8BE5 -FDD630AC57EE3DC156C7B8B29E687F24442E35CE10BA4087295A641F7139C831F7CCDA6CCEB5DAFE -537CC1A97C5A337D3C48A6AE947F58A30DC08CC7B58DBBB4737AD52783C573FC1E9408F55495A80E -7FDA61F0B9C4F090158F1A416249EBBA936C27BEFDEF19D1BFB839EB70576A010706D8B95657B218 -9C2AE04C11EF9E57FE09880273761FB4302C388BD608FA0C7F00F033C9C00F4E3D5CE2D903E0DA52 -E69C7745EE9FA75E2AD93DC6CB5CCFCD3782A699B807AFC36AD1F62B05856D5DFD6F88831B90EB3D -CD523582A49732E3FD7253126D39E8AFB8458B5F7AD7F94A8DAC13365F433C857AF4A42C0A08C4DB -9887C4957259ED22D13CFDF5995DA957EA5A0F620B0214FBFE08AB6D552DBF048D62CEF6EFF12F15 -3511ECA7833E0E3E95F85E6AC0F95438AC4C126E1F1ECF336ED31CCA7EB216D279877123FD9FCD8F -B5E52B587CFFC4428456DDCA816819A8A4A211D8F1629E5D42BA4C5C356E580C8A22C61D987552FA -A97893816DA73D423686E4EBD44375C257F031318865A20F22115E72BF1EB9F93AAA169C140A33A0 -6C35BD4526A38BE79CF40AD1EFA10411E8F3300A8A8B97AB140EE6734E1BEE6C8EE443D698D34159 -97649C6F10F20ACD80236422E215E146D744A262DA3FC88DC0D86FF66512F49D3F957D3C5CFFEB42 -4823509F33F155057A4C6F37B52F4667767BA94F6B8B62856B553F307E5D230C44CBFDC9A97A45B1 -39FFB2F2565EB0E22026972FAD0FB7B9576FB6F368B61979943A398773600E7EE1DFEFBF26D45D40 -BDA66EBB96A56EE9CAE0B2420C5DD83E24DBA9FF885BB844BF3D2BF93B07325DFF60C0CB5FDCCA0A -C8FB5A2E119D5AF26E53AB8E3B428481C2871DDA26EF0B621CD8572B3C664BC7AAC01A1D05B98F79 -1A7080D294BE81099BDA7982432F3DFF4775C44D23F4F1B2E0162B61A8B2CB5EE8564BF98E2ED403 -2219085FE6194C19DAC98A421826CAED7F1AB1477AB327506010217283894235D7DBFC1153D5ECC4 -8AA7293F19592B4D7E95FE55151889BCD1D7FA7DC2370D2DFE11D7E4EA34B5C7A8E73BD3A348FD38 -9EF45B6167FB90BA44C23E912F9A4F2FC0427ED070592F7110183BFDB2C400393BA7569058227926 -351F07FED4F33633BA03A72AA2DC6B598E49B96021DD868DAD0F352E5722FB714F667C15C68D49C0 -3D822D82677EDFE86FE9668E537DA284068C9B0AED83074C92A5B939296D505B837E6A9DDAB1AEAB -7455A08A114C2222B339284674B74BF4CA9EE0C020BF2A148B439C71C6BE51A94CB64FBE4A7EB295 -5A455047CF5CB348B062ED4F6471CBC3E9ADD9BE9B96879AC7BC71BCE02FD02F17C6063985A5E898 -3D205AA1489DA13C408990ABA1C54F2F501AA172F530480D789C848118C0A74EF98D5F607A067BAF -F6030D887AC6A6497F9A0B38F9705F328AAD4BFBB634F739386177B07F22D5771282444E5EE17335 -B4D0EC86117C697E79A5F4F65FDC08E4904DAEDAB20067EAE2448FD4301849E456D085F392DD1316 -7ADF75CCFDB723E2904A9C0C976D6B84DDEF9D92B0E15FB246C3ECC2D0BF314CFB957757B3A3E8E5 -801F520644E4601D291DA0F7507C06F3B9BB36FC1C70EAA444E14E56C0CFF06C7F853DF36DA9D8B6 -AF2544B853DFFF535A7E5C6FC145250CDDA229956019659D0D253A19A7B51A4E538BDC01F74D7704 -9949C2C97C7EC6392C2E61CCC0992B66DAF1AB08551063E53180D2A67DE496716CCBAA45462D9F91 -B66A22545962DDAB120511FF08627131B95E5DEEB8B4DD9643E7B2AF65C0FDCE11F5F1E8DD468DA1 -8D41C8C4F00EA73836F4F70EC50FC3EC6D358C0658A4261C6D15A582A2C7C994E7882E661855B352 -014576858A265FFBC425160669CE159D07EDAC04D060B44E5800A7AAE8E339C29B929AA81D2F515C -46229D2080D5917AB20AB6B34FDCA8E4AF64ED660A3173786FB1A1D005D575C2A5187D3F7CFDC94C -CC44A38C5CD523E9DA726D8EFA6DA7B6131DFF3435FEE838B2C7D6B97934295F06202D307FF78D90 -6699CB9C5BBB10D1D4DEA5FDA5BFB094E704607083B646D37F5DA1FC7AD21B813F44D8C1AFEAB666 -55AAA19703BEA2E77DF3BF350E17C74B3447A452235919452B5175570A006C7680AC05E8950A62E1 -1D7E3ACA35A397D1E19630D094A86807593C97F4C484E4E06BCFF708B6DCA972E3A0009E1CAC0EA4 -141530F5C1B8AEF5E1B933F37FDDBC4BE22B74FE346D1A3F5FEC0818F8E61765568A2AC04713E828 -F98C449D9A1CCE52D10D61DD8BFD084C8D099A75D89DEA64D5A7CC68BD5B0593D97953DADA976383 -F5015915618AEC56D71D1DCD55B89736395C609B315A3F1E1255432FDBD37F38CC43C354FB4B7C44 -F1A7318B0B7E99C3C08C33B953727B6A6328051783A0A33E3CD9E498346A3CA6A77B517096EDD52A -E443B87643A646C3A7BB97F742888D33F9B3127E61942F4103C1DBDCD8EAC8F9E259773066736CA6 -53CE57E8822651261D847C131321BB9D6626A1AC50D047C0BA47B411DF2A995545BD68EC0287CC9B -31D5DDCA8755EBEB10ACCB3903AB0FD5788E984220443B8459E7C078DA4289F1350905881AD6DFDE -C47302B0ACB0D4AF8CAED02B4B70DF3CF8FEC118F0FC2D3DDE3E494CD160E676E300BC464BD4400D -B50EE43B314E0517037BF971ACD7CD327CB2134893B8A0410E68DDC518F5DEC966C7884CF5FDFE74 -723177F20DEDC039D879056CAAB4BF045062D3904F615C5CFE109AC7A35599C94024B41019B9AFD4 -04A80ACAA4837929F5C9317680A13D157A03B59A5588DF79D2E113F5F51021D6F6F90E8BBBA2C252 -FD10651BE80BAFD59C53A3367BA3C28DB6EB9DABF1EA99F47B503F627E15DCF3FD645FC52C5D5D0F -2F07DB4C25C0D1E1C00146E1C4D973E613CCDBD3F9450CC0F5343D79F05E9492E86A1BB889ADF405 -03BD7F3E7543436859184A5B20BD8A172F350D846B7570803990ADAA48D4B9155A2B4C4BFBEF1E1A -065C08E03928559735BDD442FF1E83E1FA20A5DA57D8BDB2FF5427C034CF0128AF111E6E73099E04 -6E0C240E80A73D7BE72B87834E45898D475521CA3306707631F5C6136199F354632D1A085F12A1C7 -C473868B62E534D15F5484323E63D0574196A19EF175214EB35A90873EFCFB92D6CF68761D45E37E -AA61E1A1979A82009507CA193E44B36A806486665CEDBCF387053ACEAB979BD35D30978FC7659ABB -E844F4ECAB3303318ECE80777A5FA5A9DD91B3D06804C4B4E9B4EFCF07EB89866D0DD8CA390CFD15 -98651417114D78776B1A1D36B4BA17746D6BE7FC123D473EF1EFED1C3BC1D555F914536869FD5B0C -35F9C83F65B0E6BF7A627B9202D787D72C600DDB6BCCE613D88492E13CA0AAAB196E8A49928C62CE -A4FFE2D0208EDA334ACF47F20BD793124D2C5546C03F4A364369A76A0425262F9D9118AF54E37D32 -E33AB25DD533A49DF5FBF1BAF4CEAC2D9D378CDCD13B00FDA432D9042F623DA41AFB80699B5538A2 -5403B0B3EABEC9E8EFCF42FEF3EA9F91766902CD206B0787C187D5370B60AD6DCD002DE2DE8DCDC0 -B4719A797C5E26BAA67665016DA0D967FA1346F9588AEDA174CA001B31213617FE19EA218EC23597 -79D979E2663166489C06993230B0D07973A117C4E3F4A4C93CF8428248DD5389414D679C69644142 -67C7FEA17E35B0CEE456667A9B1875C81B2302BDDEA2818D6019FC1622A82051F60584ABC904CD91 -8676305DC03FFBCC64FDDAC8D8AA9CE2EA00D6C97BC63C8A617DEDFC0E40775649438E9F61AFD179 -5E3B20560B01BE5E0983F136CF48AB206954E41DEE0D9DDD953DFD01CAEB569151D6BC0DFEF29D70 -FAE3E198E7EDD8922C0E0BCB8BCCF1C016142C1A8B337AFA7A05A9D7534B184BF3BF827F371E9BD1 -9A71244ECA1BA73D484CD2FAD54DB2F0EEFBD54B536EBCB5094E6BC2F5B2AAE41F05B4B311115876 -ED42C34F8E643B53372E3F6350DB8A38445822EA9A33E27FB0CC42CEDCD1FE2FDF723FC47C996EE3 -56C402112F24D0AF899B2D00BEA1CFD427998BD22B2A09046D6737814448ACFB10D387547D7009FB -384AF0562C85694C071584236D0F1F3D3FCD0CFB38B77C81889061E668BA7AB37AA60F58A3967DE2 -6F939B79CBF10A9DCC42852561D8D6754F1B660D216AAB1E133FBAA321C56E2584BE5C9BAE20CCF0 -0E8DBE6D9C2FCEBEBAD945C3C04101D2387351F132628786F6D9D4CAB83419288D31F9BC600D9664 -12E6AA457CE6CAD26A4C0671097B98C2384C81DD8B9A3222D4F4BBDA7017895C3EDC26662779AEE7 -40D9D7E24185FB821970B0A3A94041A69E4805EC88EE1EE521981536F2844FB8F5EF645F67D42CE5 -148E2DDE43AD5AEF200EDB3A2C7866C98458A92666E5F9E070178BCC39F65A893102A10564AF4E8C -AAA5075D2F8CD7FAB0401C03AF299EA3515CC93066744EB5AF7CF0ED06675BF049A6E3C211A89E16 -DE5BF0445A7CCA6EE8EB0347454950485D884606651E5887FE8B24323E2AA16DE22FC1FC8C4F06A8 -2A1FDE5758976024068197E1F4506E4D3D8A16D40461A4586338B374A592DC60334402F76388AD6A -457DC3F54E6169CF7AE3959676E966A45609621055EC3AF80E182633300A4418E34A66DDFA6B569E -5A13C9115B5FD3EC1CEBE50FBA247F60803AA83976F00117536342DC3D9890C49B2AC701D370E43A -955118967827760F7091469C5406F08F18D7E3548148CF0E312B1DC71DF67A5E7A1656CF2F47F3AF -F3DD50FFC2FCDAB7177285B29C17CA43019F62AC6FBA52D1493ED7C427526470ACC8389BAE827759 -4958908F517B2863B83292EB5AB3F57FFFB08393CA610FB1FE905D88A0A16AC395E2A2A6DD033D6A -0D68992F830B2E1B95FE357BF672716E88FFB92FFC3D62945D1EAD22BC68C51EE0E10A43011DB94C -44685A5C4576F6EF44CBFB45F2A4BF110A01657DB51FD499767E78058199B31DFD60813F1A344F86 -289F9378231D5B151C92385E3650B4FEB1DC91018EAB8474CBF69FDC1496A4D078D2C351C8196451 -247A9DCF8117E5B637371D8E22E248C64D999015C3FD2311E9950B8EE0922FBDD3D7BFF766BFE9E7 -CE0BE12F318FF2A7B5A9C6D00A54401609304ED2C55F5C1EAC3D4B38355BBD85D66D61636FA6E30C -2E82829376BEC979A6FEEE040E452359768ECF90CC539A546F17AE906C76F14F86FF697797322B05 -1EB311A759FE260C1EEE5DACF383816AAF1294CFFA7BF87A4D9BC595EE8F2C2F86FEEE11AD959D86 -F22FDAF4CEC098942A57E57813A0FA99239E994FFF353C1E781D666B8928CFC648FCF0869FC68468 -BDBDA7D280DFAB8B0B3A4CA35B074B686DE8D372C61FB32305169A1A9912F6541DA16CD6316A6EA4 -51524757BE5CF6E820011BE3859FB8B8578C100FF029680E05F0E0BF11D33FE19460C85EA5E4C0EF -28E29407C8AE6BE01CFA0D5022BF9FB01416FFF722A784DFC8FCE330EC95737A854471D334FDC58F -AB42867A7B62836A8B56466E9A6C1247D46EBAFFB905CD4321970F59FB8D6FF65FDDD34BF913AD32 -2E68455C5FF2D23C1A5EAE687F259BC982B6A384D35440F7C693CF50B9ECAC0B5578CAEE87588B56 -2EB6B7F42034C9F2E545EC866316552354EB3728C7D26527ED75174EAF635E048B08DC5D23E88981 -070AD5641A652F2344956E9CF4C16E652A99F4A644D1787D6D36537489DA4D74E61B2FC4DFDF1D1D -9D58F9C26C5EB63200526AFD168AC57D5611ADE4D4A382FC28BB60F9E7D626A6C67AFBCCD1183C5E -3CF2EF210D0BF5CFA7BB10FA3887BDD4CD96EEEAA8F9219AA2F10ABC0A960C3B57C0EC0313AE10CC -FF1F522124CFC8D2D49BFBB0C193EAFFC5B48FB3FF30B21CB76F0A4C0F1377C9223145BB0468A5D7 -1B9BC25873EA12E1C60334571C67385C00D0B570D3FFC6C7FF0DE62C183C76AEEB12DFFEE1459E0F -C818C621B8D12FA1357E2B55D48935D70BF140B4CFFE8813DEFD479350B20DC2EB1D3CBB1A2D3DC6 -EE975D58C89D61FC50E6A0197DA9A586B72255023DE47DABEFB11E8AA02414C2FF6258A281219B9D -DDFE41BA7D7977D0D6F18224FE22F7D4E9355FDB35BF7ED3418F4F68D093AC48F7D8FE4194FEB6C8 -0B9DC1F74E023C604DEA27089F98C3973FF9F4AD7BF7BAE601DB89B08D5D8139B95EDCF6C885FFA8 -B3E4B0477E7040225733826BACFD1EC4A0DD72DC41734856AB9FB700DF83CA2CE812913BD142D84C -5C83C0B2583768198AF9E885F2BA74877A414233207234AA5F18840557CA11682AABDE8993533887 -7C6D404BDE4153C9827EB16D66C1D73A8143C8A2D3604FF72CE579FAA3C5224BAC48EA83BA848429 -9472007DE96466B5B29ACC7C03B05DCAA38A48BFF9F214DE43146AE4E04FA705421917F99BC54533 -F0EBC01849E396216B9F0794E6F6C6B61B52EF1B1950C0FB609895C3C55FF574163FC8B6B09E66AB -AED1810E698FF37CC1F926B2CDA3B48C7D77790EBD2D514B6F385D397F713EC3AD3954EA9C846158 -6031D369E8B99E53408A79D64C34EB5A56DE8A67DE91837960E98A66FC04DFA0EBDE21DB003234BB -78665B039D0A469A0221BD541AF7149A2A659C300132C14581EF766FFFBECBA8B58A5EB3F95446DE -F49AF863A8113D17B2E7E6ECDEAFC3834D4DF900E3475596E86FBB4E2974C090DB4AD61A737D611D -92B4535AC291C56AD8B1C031D2F9B505BB77517B737D70AB3723DB52AE2ACCD5DD2F617423ED3CC3 -9CA882EF41757BF7151806A9B8B0F312808863E3673FB54DE939B35CDECA7FBC4DC3BDF5A5F47D35 -E345916C39366C8B4F439CE1C6F1835C320BD1E67375B03B5DE18C93256F251761A4C8CEC01019C0 -68E34447BCC503B9571FE8000627A6B3DAD5854CBC0A2D69E5A8F46BC78F6A7B1422334EC7A98ABE -FE9B83E01DCF3C6C9273B346F3240EA225AE4A4083CC7B0EA141A0773FDE940768358EB4B13D82AA -304A1386D450C1C0C6A7D5A8FD2BD313F78F85248B5196241E31E5595F3BC01F37700A2DD3D4A0EE -2DD01A36569CD507130E8F5B1E96CB560BB7DA15560CCADF3B2C9804A11D9E8055C9EC70E48C1D21 -3EB756A1376F2EDCB7189D78CD3D6CA5865537EEC31C17D801605EFD860B0B629472690588D02575 -02C6F7A75B9A1C1B397781329832CF3EC43C09F1559CD562C48FA9500295CD3B0A790DD3FCD4684A -7C7AC49AC9BFFF36B39A9FB148BC28D37907433943CBBF0CBDAB46D3EA86DC8F81C859C52D15302B -94A9B51C199B7104DEEC9D769C2634CECF8B700CE9C04152CC59C9326BDACBEC4312DEED92DD087A -1C4840868D9F97CAC046581F762F75E8D24D6445370A3F1E0AE74A6478D9DAC37E7FA5BEBEC0A1E0 -81AF89C1BBF7F51E3E2E22C8C405E8671BA85F1BF0DF79A465DAC7EC07F731E00632E017D190A99D -83E27E5C2E63D7DABBA23B2E88334C63721AC5A4CBC5D45F4C177259F34C2EADE01FA008AF65EBC6 -01D8DD16436D86AA94C99F3CC0A2F87134E73BF22F108B825A8963B49C6C685474AFE4A542C8641D -C0375D7EFE9AC1168D9700459BE52D0DA399023E141969F25C0DAC4668534B6647EC85454BE945E8 -26B26DE6E3C4584B97A38E2B40A0D23481BCA78084FE80E00A71A790BF31DF468A435ECC88E60A57 -860BBCA3D65930186E9917CBD209C230E8F8255A7ABC7D3F043AE4D7AD63D9980BEDF062B7D5C298 -C40225B6D03F29A0339E0FCA02138E526F06B9EF47F5E7A8068A846CFDE2BFDEBD24F5A73A66C079 -18662AEC80B43246284FA4E2EE0D9AAB172B1E59A6CC46B801149D8C0DF6DEC9A55D8E1B0EFD9D30 -2FF618075944CCCB6831D336B11617107B0530D09885E5CA11A5F1FCC8D69D603DA16BEA51116D42 -CAB1AA1E4D7B9B4D79993F2BFE53EAC904FEB70B2D330A89780EAC10D12CC0C35B8399F218AC2976 -E57A26BAD20CE2FA2AE2363D3FD2A8A971747556F2959DA74A8963C20B504711AE1CB0D0C02457FF -2E9BF696B159AF031DD5155F21C0F5549B0471A3C5DC8918B675CEBCB23E29322B959ABC05283A70 -2E878DE8EF25EA760F3C5C7B7B49D398283DE2ED837FD59F7C22D62C58FE4448B1049FDEBFC8787E -67D7DAFE9774979BB3802254DA59BCC0219F98C219F84D995CA768B8B5D9D4A32525DFECE003675E -E4BD5D8DFFC11025AF2B468F9207B5B2B42349B98232BAC0759758C1F4A283405815BD7145C93FA0 -8F3ED2826655053A3C2559073D8ACD199DEA2C5BA5F616A2E48548B4370EC73493BA07E197165DCA -774438B0766867819C1154D1959FE6E01E6312E0AB91FC2E2BD240FC8652A2D456A1DE7F34EF372A -53794D4C4E050BF3CA5B7BD2F1B8DE93B4C8002485CB219AD2D029739FD3C81CC6E78EDF38723576 -1A57143EEDE5CC887F282FECD261F6A25D0A7E154ECDF5DC38E426811BE86AAA458577E5E0C5F0F7 -5AAFA9C41E5D1DC9D91ECD79B514F8CDF7A5F1A189470D35FDF4F9B8788879CCBD91B427822ED658 -389E981E0EE5F7FB87692A3E3E931DF8A1D1573E3B0166204240B7080089A09EF7487C9AEE2D665F -5A82F94C877FB5B0DC531CEBF1E71C6592CEA2401E4B5122E5091DF03D203DF979B9A6EFBA12E2F6 -B422FDF15D49AC0914D372D21E871DE65CBECD105FD4A3E4714B9CCA5C6803FA39DBB015EA8A88BE -7913502E562E5B170B87BFC8572DC9DF49AD63694311EF1334444BDF0B4CA3245271C1F7A4D7FAF1 -703E3AA0E1EA8D5C6E821B28707EE0C9B4F22F23796FE87356C58AE2CADC191F4C58E1FB58DA03B4 -5A25AC95DBAE13A293474217BDB214742B9D9D6AF35F70FED2891942EACE3E625E55FFB820543FBB -250A062D3D395BC0F219ECFE0D76686AC148BC41476A887BC494DDBD396BE200FD3E03CFA12EC9AF -6B934A283C42AA05589AA6B4A8D16946BB51F50419CABECEAEC5AEF9085C9989289E9B46BAFB6FB2 -782D84DE2B068F91A9744AAB237CEB1BA513E57E4C307108E993C972A3E0A898D5A8D27833155031 -FDB98863C3BE7FEF3004CBAA5CB60A1F2E3EB4D7290FF5FAFA088B1CECCB6CF51A58DAAD998F0839 -6CDFD68F5ABC9C1CCB8F6514107773C69C26873E889D1F79D10E866910E4684186FCD71C965ADF62 -39BA3418B313A27AD632300969B6F284519366ED85E7CD968D64823F8C59B5911A72D0A20EB72B60 -3A61E36F52F256FFCDF706B4560B4DFA5D918FBC530D83A4B3C01BDD3CB4572E24242D141BF9E775 -36693A0407D002E09CDA5B195BF1CCF430AE9824C07928A050D0B460F2704BE8F9E647A4884C4567 -0A81EACF7CC038643EB0FF18A376FF6F32B6FE4F197273327FBBDEC6443A299CAD4B26F7778A99F6 -5A11BDE047153E764039EDB251936AA43DEE50DDFDF8856519056AAFC4C5AE6F2051AF0579A9ACD4 -1D00775D7DBE70022CC263DCA5E0A25B9C7C4F5C418587666B2FE24816B1E0EC92F9074F1403BB83 -AFC3F1D52CA79C387BDEF864366E34C90BE52F7AA09935373A07E4E026224E76F9EC3CB9E7EDE50D -EFDA48248D61F3CEC880A3B8843306375D9711E58645F3625BDB8E87052DA67F9794EF4AF8DB0BCF -E00677C3A26907DC651BC838C40EC39E2B5A5DC0DBD345944A6C32226089D63C52490FA10B215AE7 -03CFB663EB8A47793B84CE7364DA1C4E7FCE32DFEF09490121222774915BA59C78C2275F829D15CF -4D8686B095C38C731B83D48738C25F40B8ADD487C350A2EBE846C3916AE384CB1050F9F5DFE09FCB -D9129C6270FD86D55A459618FDFA4F907E6B4746196BB717865AB378414029017551161A52E9D24B -E4F7EED553A927933D4ABC8F25DF607779A717909CB4D810DE8F5762581900E224E4B91598149BA4 -71CF8068ABE8744356B261600BFCC57FB8BE45036CF6571D9B2A95304933BD4F17215F8EF53F8E08 -1AF61FA7F9583C34EB5655CB0ECB82246959F09091F36989EBDD646BEDCA614B9A61AB7696B3FF18 -1058A150FA6EC1BE2EBC7F64357A3FF2A2B0491D2F4E0B970DE5B7788B467CA678039B5EF55C88A3 -84578D427FD2CB16C87B0BF0A3D37CE8ED43E0F049AF2436344D5F47C948C632C94A287509282561 -6C64C5D262FE5B24916FFEE982A69A6CCF888BD01D62EA591EEC51F4B7DDFAFFBEEA93FE08D736C2 -0129E345D06B10246A5F57151C198D407730713F32299638EFBDC01367E23EB59AAD42A83AB41B43 -2DB462652E29813740F4680A5D4BD47B18328FAE6BDF4200CFA4CE3773809B45E8887C9B2E423698 -9F6C48D64F5986F563D9A7538A8716082F81936AEBD0461E6F4BD470436D8B7656F0FDF89108E6DD -02ABDEF907731D458D690BC608EA9CED09EB1E6E64C0790C7A2378201CE997FFE0317679EE1D4EE9 -F91157449323E53B4ADA8096CD628B5861BF794543A98F2FA2AB54FF0F25A13DAD43DAF9394329B9 -5AA53CA32749FECB0B2BC035DD1EBD53FF9FB5AD8BCE06CD89E5568091C1CC314CFB1D9821D7F9AC -7C55F55E0A16E39A87D43148201B928F3C42B110FC056189DEF183745F3B637441DE8BD4C3C7EF12 -F4258E306B2877ADAEC63441010750DB4E6269A4C78A0AC01BB3603C386651FE814031CB5D8C1F14 -9EEAFF652A53E57BBD4C8C0CE36A84A319A53BC1E5FD3F1ED1EE72F4C1A9BF264B594062FCAFB22C -C1FDE3F2E3D3C17DD3F7FE0E15EBD812D550227C06D01127385374A11438ABD50048E17255FCD2BB -85122A6FB9B7DA9D5E9DE8A747FAE0DA45A1FCEFE92B9E70A5B2CAC668D4D07527A5C1403267D823 -048BE671F725CFC7474B44FC5AAA348420B2D7C23C6CA066666FD6F2208E329878D90CEF1C2E77ED -22D3BEBB9D547810B189F08920A27E7107F208591A84D463CE2576C70C3DFE6643E4EA93F4E1DAEB -41D46F0E2F56FC10C69AD5034FC9859D31CF27A3A1EE256C93111F81C11ACF1FC0CE20B90BAC9AA3 -27A5C85A7985B951519FD4B03C40BE637162AF41B2FDA68F0D1E9B7602FE2659D3D75955C579AC51 -DF6A552EB9581AC3F712F083F19B52A6C4F560F36C59CEEB0C996AAF1728A2AA45DCAD79BD7B23AB -388D5B0B64A2B95154B6259B730B0F4A72C8C7F7CC93C7D64D9D8810D1F63FF8ABD4DB89824E2D26 -4FDEE916C41E299211DB1A53256E1DB5CDD04862F034D9404B73183A99D3D13D642A663F129B6D16 -7095BEB4EAEFD03DF2FF2F0B6B594C1EE90FDB203DA89FACEE23F1BA3901FECC75FE1811BD701259 -343011262B6A0A9707AAA6316BC3C17F787BB80AC8DA5AAC942D90F80C5A3BB59E47EC767244AA95 -C63E50BF809998957936D3BF6ABC24B0A397258F9EB4DC8F65692CB023D9091FB180C69498CD0C08 -BBEBADC84A7E0016E8F8BEA325D924EB0DF82E75D2CC2CCBF039B11934363D4332C5FBC5EC556BE8 -5EE4E707CC2753CCC43D2ED50558E51A104221C9323CDCB0199B7B83454DE3FDC810D0F362C0299F -5DD981B31D8E3DDA284FEF9DC8F9C8DE138D3065437A7FE8C30572AD06D62E8527AD37AE39AAB0B2 -25F76A25F6C6505241ED73BA494CF923E919F688DDEBF193E188F8C4C154F21631080763B4D091E8 -AD1D2FD6649E0CD9360E8D1A67A5B5FAFC67547CA31C95A5EA8D4EB5D68B9F6D6532DB9B54584735 -9558542A2AE58C09F3BD2918EFBE1699E9C8F2C2A11EA4D224C726D2ACD4A8D8ABAEDC6588CF2AE5 -66528B94F55B823A2A1F7BE19000F3E7579D094E047075DF18C8C868760295533B26EB3ED90635B1 -29C17ACA679C3E88B06998CE5A7A2544B700229F5A6A504BD3E45B276471959C8A3F81917A534287 -39B5EF9E3D463B3BA7318448E2A3E79520D2D245A2A72F31FF7070B6E4624E3A5E216BD103640C8D -F387E49D732529C611F8B971073F17EBD2F6EB18F9B74A67E1997926DF178D4C9EDED435B9682F1A -279C81BB9F60DAFE125845A2FF3B02979E5481C78A45C479BEFB9FEF3CE2BA9BC46C77B50B03E48D -A6D17B76F06F3AD118371ADC69E178C52B5FB4B261C9311874ED07DD6D5B3226A005FDD7A6D53848 -09E7063F036CDEA41619122635E835D2D74CBB6AA9B38CAA4D819C26E95115FE0DBAB4198FC5838F -2C91B7A87B07D734C6D4F4F83444C1E90AA9BFC908A2BAC4B3DEF9157AFCA5248F2DA31CA87BD363 -AC25E9E77F741D4B2C6E02F04987A6F49D30E9038CEFC41BA172DD675AED8B392164411144E5B738 -F3210B0E66B17A13CB9631C33D44484E792A7C082DD0A5382F34C5637653261B1EB6D2035B08B4D9 -1FA9AB770CAF40A103629511F7B43F2743D7E583433DECFB19C21FD4FD0AFCC22A4119E77C87BFE6 -FE50068B22479015BE5A9F06BEAB4D37412E062A45E0CBCD7BB39FEE747E96306F79FC4F2E8942DF -5D9DA0E55AACCDA547DA19D30B8404FA121298B44C9CCE198C708C69A8D6BF17591C5C50D3FC5BE6 -961F7ABA8F366DAE957A1C3730DA4A5B4F035A9274675EE3BBF0CA8CE9D8349F50CABB1C3EA4948A -BE6F9F143592F1EA95404E6909A909168E3279A957AE1924245C356331A75E7008BEE92BEAA304BA -40B7C3F48F74D9018B3247DF50EBD7CE541DA48ECCB1B0BE51A455C3C13C279D4D8676078C3EBE43 -08748D52C9B041D3E7244C745B1F2F742D010A9E60695F3EC4FDC1050AC082B905D6A57E8F407A3B -472F731011A5798965B7B1A307E252FE02C8F79CEEDDEB6E165F1A94D7FFF18DDBDF79477F14E9E9 -3981ABD200FE7771B29D1D2D120EE79D28B9543818527039AC74085EAFF241B56D08220C958B5D9C -87C0C04A14D52AFD475B542D391BC54FF33DEF8D9484AFF6873BEED32DDA4B371112B523B6CE22B4 -0D1B416B64C9370F1CDF2C548F4CCBE9E12E21C36CC3EA52DA232DCFB65F66B22B5E2EC04852510D -5E264EE939BB67AEC4764B87062AEB7F680B40BCEE04AD45C7519EB3B6199C9E0E332661463647F2 -FB7EDF303EFEF84891CEBCF0FAC5F723A9D0476C3F8C092604C87FC69C7A90F4D64AE45A478EE8BA -2DF50FB93F55A3546123F0B0E2C1C40C98EAAE9F0F26B8F80FFE6E6B94B7E27D2884D58B8A119662 -2DF6BE608C5569D7864BB756DF2EDD184B90812B44ED4A32D001C31383A40AEEE9743651F7950846 -15C48E402DBC01C818D477EAC0347795CB2792E9C11E8FD4A02E194EED1C919D4598FEC003B6D9A8 -A0BC7D456047A1C0579453FC1D7CB2D158D466939A23D7A7B8ABED7E2777EC7487973E73F2266D9C -250CE30729E3C5223AD93B9AE8443B35711E446A3DC660123ED45CE1942A1A2AD0610467E081CE2C -8B92A6C82F0B17B5D2429E99F1A6268072C6B5AAAA6EB6283A872C54D3694CD825EB2926E57DBBC7 -C1663075E687A144E4D61C225781D80FCAE1497B442342B4A3F1CD6BDB50E31791CC3928C30835FE -F845B6BE5E2D7E3F2F5F085AA3FAEB45CAD0D76BCBB1ED859A9CEBB9F7457036F0BC3F195CB1A98C -9C8648F6583CDBB23894BC719D68C2DBD8003B10D08C8CAA40BCE784D7BFB4EEC9EA5359AC056E57 -B8B0F2EBCB1F4CE40C87FC7861180133E0CB6CE2FC4FE690756D327A2B5AE063E3021C0C0BD420D0 -56F0B941E6B36088A55BA11D0C35FD0132D5F48E5D9673572347171B4328D4807B972831C0D74CFF -A5638C145B89C989E6EC942148207D6DB82257585958034D9F9D4221C7C9F7013790DBD130F277E0 -BC88BB179DD09E27062379ED06F25EEA8B7FB33C35861A0034776E3813D2E9E5C10E227CC569AB36 -CB2D9DF2E7B7B44758F9DC4FFAD7A24AC7E9F47AA850C221048C3CB35A37CE8EA75632AE65FE3212 -175146FECD6334AE3D3C5F492F067F795E1E8FF386BA198CB74F0BB4DC0000DA383BC4CC3F070DE1 -7721431988D69C8B1A5AFDCCC83C22E16A87E01C6D3E79DC7AFA3DB0371B0866EFB8B6F88900472A -FEF1C4A878243C52D4E02E82658979731C841C489A6B97E271C4C93800EC7D91F93EB9B9C659A554 -E1FCE42A5EC65AC39190EF4B66DEAF6FC0569A000A9E1495F42F706FBEA4D32EB7EF11A648910259 -6A65CF899C2F322F5679C6D123469192A9BF1A7F1F2C81C554ADB97BD19ADB746A4F81A4D5559E60 -AB94C483DBABF6CE2F28CDB412D50FF3FCFA3B3DAAACC6A83CFED910CCB3B8D2C19590AFF4D75303 -4A6CE7F4156896A13808E0DFEAC547E69D3C886691728E4A35ACD575B40D721E8FCC5385A2EB28D7 -08101DC50811529528F5CB0C009BA7E3C88468E37768FB0D83895AB54DB2DD5426562AF9D8AF304B -F6EDA54E9C92643DF926F5C3578269750120302A37CB140A18BA56BA01108D4ACACE8FEAE640A6C6 -958EF156B588ADB0EA5F3B0F37BBA12B7BCB221C811415387B024B7076FA4403A3AD6EBB5D9C26EF -EBDB7ADE7C60B444AB9F90EA493B658B7767AE2BE649BDBB3FE85F460F1ED137C61BD95F7CD3D8B0 -15CE45138538930AB62AA0E54B4CE1A5EC5FEC0A2B28B345B67089A4E4AE14D2E1F5A9C8848DA688 -CA298F93860649EC3AAFEF3E820D86988C8E3E5A4D4BB937791827994AA3E81D0BB3EE115EC36D5F -B9A392D09E79AF514D11C7B3A03C9F9C13355CE79E119A19177FFDCA34704D38118A8976D1EE5AA0 -2D14FEB1414419F5E85244ADC5C0A765A522EEF36170064BB19FEE3B5F7B441E4DB967DAE0BAC2C4 -8FC6A836E0EF5A69F073BEE1699F55E9C757EBD6FD8B514E2B49D6333815B7DBD1E0694695FCA3D2 -1320A0C4B852D9706DADD8369A95FDD917328BE93DD33818954DBD2C212D2CA81560ED5BC284EB04 -7A5F389E24E43F4FA8C97FECF46589FA7341076555CF55B1C21B28E0C1CBB00AB8B6F67472F27BC0 -D11148F407824B0159B5188D4BB7386FBDBF1C0FAF34721B7BCB5C0FCB7C4010DCB6A1284E9D7883 -9E3C2111A05D29AB7997073B590A81C6168020F1D48951BC7D8476D5BA593F4F23CAC1F9BB0E091E -84B4E99E5C584D1370DD12DEE8DF16AF8BC6B7B23E2FEABDB7F32779AF8E2B5094A6E9B7A7225F24 -C43A8E5D2B977E1E19E633C26771E23017ED233DBB02C64F8CF03992C6484528D0C8464B46F24F9E -8380F385D5D01B8893C67FC103498983CF939432AA380CA576D09030CD52FD99BDC3BE16C7204CDC -3365BF76294A83A1FC14A236F5FE5321904E779B13232A76F8FE521F425562678436359C2461BEA5 -AB27209541F557AE2AA60009C9CA0A9FC7898C14306CE35A50017BADEFDECBBF94EE2905220706DC -806409EF87DB1D73EAB0698AD2DB72CDCDB293E7FB13C94D9FC87E74502E6927A212F0D7D2F2D194 -64F7A66AC07872E18CB1DDE8F11835DCBC5C4EF039333FFFC0FC1456DAADE7DAE3EC2EE0D3415B0C -ABB69FC5006F4D14A4EE1A5CA99AD4D5E629C0DD1E0F097B5B93DE2DD001A8C418234C9C45E8C13D -1AE04E9466DAB8CF1ECB88A4E059C111A6468D2DABB90DA79C7C79E94DB28F6968B1A632F8C57D9E -565FF91C6916026FFAC0661856B9FB8DE9C81661816221B1FC159CFEF1751E7E403F5F2CE32529DD -540792FC17A12A3DCD7C50D38EEAADBD10ADBF5D8A82442AA900CE6150EB7A4639DD9FB6E385B2FD -093493DCCD9014B23EB172E21AA89643A6CAD1093343D85D81261972DE0ACB16A4C6B5F0BE4C978B -FA12D3CAF0134F9EA49F6E9687C8F99A456745EA252F0BA9968C7F9586E3DD841AA92DC7705BDD68 -2DAE41518A09DF0E209F321D7FA3417202F4BA76A984DA3ADDBC58136885362F02F0A24EBC439B3D -BBDACFFD8498EBD29F88F016B1FEABC10785438EAC860B554525F3266097A675299AA0967BD3B7A0 -EEEE3FC578D1BE99D3533BD91571AED904BFC9DA1A1451FDC5406E1CD614E0C7FBC733563CD6CE6C -C31E9237CA153F1F0411114361D731636BCF98555ABF12848AD109371A42B63675A4130B81E97C2A -2EE2BB5D8FAE2640156001AF0F55D9D5DF8FF23C8AEFE14F120000F14149A36E5C94CD9081DEC277 -C2C34870D05011F99D48B0875A5FF542F067F7E9880109F586BCF2B50522A1F23ECE44349E539E70 -F84E207DC9BEC7CDF856A046F1A03226AA41F541719AD1AF88FF211E57DD0C1275DD0B7B47440DA0 -89B98C6EE92A7D94700B83CEBE19EAEDD8A615F6587587BA8BBA3CE3AA5E8EAFB1FB0F486BE3609B -169EFB178A4292F4C0378AFE5D24EED1CAAB514DDC66C696D8E37F294A6579131DDF5488E9436609 -ACD750C3DB0A940C84FE022B22ADC2676F62E91E8F891225F891FBA537679B24547BBBF35F04915D -20B11739F620D18B5B216921D222F15044368569AA302980B9225BB839F494588481B94B0C724352 -B2DF600A22B062561D86CB8F81514FBDAA4F8A043A0265F992FAB71FC9124A45B8475E1EF3DF6B6D -E35CF329777D45F08325E8505EC0D979F542807AE77E57E453525F23BC59A50740371EFA98678AEE -6C425374AEB745B99DDB5D8D908FDB551FBC0DB15832107BBECC4E11A1A8DEC69358A574A2ED46CC -31D564549EFF23102D92BFDCBB2BB985F78F36033E34F59C0EBAFA3BDD71338736464CEFDBA91398 -33995EDA4207BFD4A9867D32E867FBEB7DE60D132803EF9347CB17BD91315484EF6570892297DD8B -7D966103339535E28A00CB1EECA4A9775F60A9F5FC9BD8B06D78FE8E6318C31DA2E847E3F9CA587C -B01AE2BA0A2EBDE308314413F4F230A758184ED60D4F71F6CEC22A93A01B6C54E0449A3860FCA895 -4A347B7588329A80974ECBECDA1070FBC055666375229F13DD995E99265DF870BC8B8CC6347FADBC -1A6AF64599271A475B9123493D46BEC41289BEEB67EB97A8DED7A9C9730D37C65164CFBDC22E5CA5 -89D2E7954C7136EF4E084C43A6C7F361A3E96989239BDDB9A593CC2A80BA16DE9EE90E95CD39393C -212AB22EECB677FD36D34DEB46C4AD0D21BF7E6D7CBD0C8083842FCD87B18FEA7CECF939987E99BA -34C214E44DD84C176C9CC5A4CEA76D380CB316BB4EF9DE73D73B4AFD4ADB54451591DEF86621D138 -D5A0A29441502BF6C2ADE671CEC3CB5CAB903A657EB2D70C943F976C110E46C5D9D29BC00A875F27 -38E5D22496A43E096E009C5D3CB724B4CABB32838DBE527F83B18CB457E57B092C302EE557FD4F00 -DB9C56E66C9FDF4EC9FFAAB85F60D02BA79694FABA476A199A0331C30A78A92E10417BA236E23364 -8174C826331DC1BAB87C5F95027846130C6A2B4027930EBF9A97BA1B039D386FC51C302648E25980 -212F6A582CDE2778C677A01FBFB3C5D1B8A374ADAF6ADBF7DC94075F25ED66D440B3922C5F255FB2 -3FD8F6E21EA65B1D93BB225684B50F11310E242B087575973345B229BA62C1E2C35BDAEC04D10148 -F5B2F3BCF7399BDFDF1F3F79119714AEA697245BC647316EA157484ECB951BE367234FD02E8B1F09 -1AAC3D29BF282DFF4011BC0CBA8E55234D943DB3017CC7A766720BBC29B2D097A956C0F1067177F0 -12D42ADCB473CDE8D1BA35B4030757FA1D8211989DF3BD22CE5D501C21EF8708FB3449DF47D88650 -9FF7B59B76C0DBAE443F336FEE2D615D7EED1C284F14335BC8A26BF4621E10DE9611FB2F1DBD52E4 -B7565D8C65B54EA36D508BCF0C578A49A2665227CDE1F9768EFE847F9D94F1BBB7DB83701C232198 -5C7283D47B2E40B27A268428AAEFE75F6B2F8764A8494E5827573758CB9CA46FA93208836BCCC8B5 -564A69F5AD882052AF1C1417C3FA7F580569528682C77080F3688B65E7FC24D2A3AEB61574B4A321 -5927281544DDD7A6EE0A3E9388F8F631CE7251724DF70726E5912DDCCC8C652DD6C9608F8462303D -867F589DE0F2F71711B35142EE6EF93B64D6326C4DD7DC83278E057100EE772082E6BA368ED91A55 -53ECFE2293A481E42F83BC8F9148C70EACE91F7B7D9CB8A72415BDB3AF66F68EA733A17ABE9DB005 -3BF148629132969589F38D30EABFA96A01FAC72650B5A6FF3935670198A1EA33810A9B11E330EB8B -451F24F93544263436F669AB5A90A53B16CCEEAC36B1445574EFA7E802DE73522BE725E68704822C -B7D3912717333367895BBFBE06966A5CC653AAB5E9B3596702086BF0010085B900711932A95ACF15 -CA4DC45A754EA334E9EB84D6FC8E3FC4F897456BED64BB93B593549FF0D5352275D8E417172A6664 -C5E0ECED1019494A7ED49AB0B965BEC1A82E5873766BB38D7D856049CCE2FCA65AAF61E961B60634 -E2A69EF059754C9D8163D87F928C222772D070D83FEC6FA5AC734AF65E40BFDE521F7D9CB1650FDF -64754BFF21EA3FF0AF7611A93D525EC9B28C51AFECB04E7FC8323DD6C9B0D8539A34FC3CD8CEB795 -8E8EBBFED4313C77ED469C199552A9FF70BA5423B03B6148D4EAAE17B71C5B39DC436AC53D6BA8A7 -AD81AA8B02335A8B2B11E9F4FA913159A725B8AB60F52F1A2EA50EAF4D56656E615BF382CC68A690 -BF83DFF24FE986570ADC0290ED1A37C1C2AD469CE789E0EA0BB5CE01020100E729721AF3B5BADD33 -A2DAA6C33EB8F9064F5292F715F820B4BBFDD56F76D42E7A1A068C1CBDCE4640082F6E7D582D1939 -990CE6EE8D270015A2C461798B37DCB5798EE9F7512168B76D26C28BE4A49A1BF96C89D235F21A1D -B6A96E5DA474D0B19B808D13D7A11BF39EA8647499C410ED9894A1ADF33D41B6FC2E614D8087F4C8 -4E437B136F3CB32DB8393C49177A0675A0C9E7EECEF448A97AFDBE840FA01FC7E5F2E8FECEDC1884 -84C312E8635CD79195475DDBFDD4D38D5A0246DE2C7F21608F8D2C0DA1371D302E941572E5792A3C -F4E51A33228B93A814D03FD4FC223C314CF3714BB3A34BD4F7ED6348577FEED9DEB082C4049E57B5 -D3CDB7F26629E9F3BA36893E09E3C7463D02A22D7056BE76B87763260E46E48BB832B7EE13F8DC05 -37EC8E81E9BDFEAD8C27EBDF1AD706933EFD11131E12814F236EBB01BE85B7F1B2D627413B324918 -D247604F56EC128909873FEC3857028BEF76A3494364C2A7002D104D486236C30B48E2B75D851C34 -EA50BA7FFEB4E19190898AE21768C157C0CAC628A2181A32796FBC1A7271D2473CD88E5395DDBDB1 -FC3AA8DF0F3D588637F19A8B833AFDEB5F655A8838EECD684E2315B72C75CEEFBCEF94344ACE8D6A -DBE355008EC72FE7CEEAB01363A895F4E73F867639BE0A0BE67333848816B05B419221BE8F9066C3 -62C23FE85B7F392930BFE4C12B9526FF2FDEC38F23A159ED61A0718E7115C24597D849FA76369153 -54A40C965D4D72EC94DA61A03766AB39AAB684E134FD1407A5B1B19BFEBA52AA0DA5D99CBE5C82DB -AA663711E6DEBA180E1D4A39C320516A4350D296BC19BF1BE054859A0889C7E9727A021F3176FE62 -0FB0C837E4141FECE531A950C03D319E3255703220B7185BD20FE5DBA673F8129AB211EFCF36EE39 -4C7E00EB0876624BC840FA86E58B2F584754CB6BFDFD76810E300741EBE4544E5AC17413ADEB21C6 -2F66CA4F075C32381796BA709782DE34A675B717A2C7F6D88104CB924FDE5DF775B4F0B68E0E2E5C -2F788BBDEAF06D8E1FC2105CCBBD5827C0B03FD6CD64F0D073F3192D5F94839644E5EC6C5185BADC -F04112A65F49A8C83174A9AE958E76A2F5AF469E8B76C833782C5FFB8BD7B1BBBB3EA0CB7C9786C3 -BE2ADE5E7AFA8C8F20892659A59BC421E28845A108E34EE17864042EF587A6D67DECDFB3F510EB40 -D2229585347A0035670FCC76C2837A4E4D68304FE113C539B35C1F0234B5079B8E32934546982978 -C5E4DF955A454EA263C3CA5D7101F31A318D82A3F9FCB5A8AFD7A65209663B0FC9DA400B26F285EF -46D0E1EAF8ACB1F1CB805E3986D04BC585073FC64895E4DAE1CCB749BB439CB32EA91176D5C39C36 -50D10AFB9C9884D5FB90183424CEE67EF2175D01D2478D67511EC9F54F88763C152697B06D948BED -49240096EEE3D06AB4575E8E8B2CB8263B5BCF4FA1608720F52B675309833071879DF52C3EC2871D -20F398B5CAC8F8A4D41D0F1D47584DD90DCDAEA4A1CF160C4B3BF1AAB890B5CEB6CB3488672AA68F -BD938281DBC1D8BCFE92FBF514DA5358443CB6E0147254E91B38CE6787B2BB0DEDD2D38F5938737A -977B5EA42892520C58F8FBB53C994B57382379E9490F0D6970B980E1BDF8CF9F4C3C5E0A18F66E86 -EE93FFE7FE546DE50F41364BCB3721B637072571FA1779F1D672FAD260C16D7F13CBDF3E4376E7FF -56D2A710AC5AC35FCBDBCE2C9C17E523BBE6218617B13C1FA6679B308979AE7C61DA6E68369324C6 -CBC7DDEC364E5A86707266C0B459EE7B2C03FE584E529BFFDCE98C90A2F3D9305AA74D3ED8430DBF -3A49FE2ECFD9C4BC9FEFD22618FE9C8A973AD072AB6F713E4DF02DCDA7AC5359B2D652013E131B76 -B3ED6C75FD53BA58D862846264627F6B9E70D8800F6D9B32242B747A67BB2B45675840D34F852AA8 -062FA6B01E31ED24DAE02F6CF788A17F7B9368175195DB0072259CCE0FFB2C1035C1D26E1777CCA3 -D56A827C3242069E76D6DD69B653768614B9ACFF16567FEA61508D51454BC02F6C60F755AEF6AFAE -3536BBFA1823F8E1A53C41124DE983E51CEC92AEF4F99785D554488A51C20885346D1F761DA79017 -940A0C557D93F1DB6B3D00FFD61D08E96FF3AFCE5FEDF545CC9F47A2B1BB26713431D6D1E47FD6BD -6E3C668B0368241F0EBB5FA9C991DF79890E52E83A3675EE699B61BAF869DE91F67278F510061C6F -E41DE2D883F48CD0E068E2A652B244128D82E5CD52F35F210DDAE3054691ED55A7D99088AAE8FB04 -F525C2084AC09F5EDF80A4EFAFE981F74C0DE9D194320709B3464F3FF2C0F6AAEA6D973D9C323F53 -DE3D741F698FBF01036716BBD62957CB32CD81D3A2674560FFBC5BDC5C6E4F547E589AD0B1CFE14F -5E17FED1C4A8ABE4E67CCF8A49F32C4C6044F1431E1CC382E7758722A6D0DF9ED23E51F8AD14D11D -7B6428E27443715EBA4E9C05D6F238378F9498AEF0E7EE4FE6856622CC8E6ED141EE5F109E343CB6 -695C4BE1E0F66601C27975983BF557C04ACFC19227A1AD7E6C44C00529FC7EDD7F886D24B7E029B9 -C395260088BBFB96972199A7B32796D27257DE83A7402291C14FECDF7998C5C96B1EDADE0280F856 -8A8F5007852EED303969180B3329917973C2D32C080C9765B6BAB0673BC7ECFDBBFBEA980C263843 -39B7F1052591D91667D4FEE413AFC23DE2D4B9DA742F4269C6C939F5FC32A38040730A018155AD73 -3F231E4D5B9D01C03A58EAE7B5F590CCFAF25EDC8552CFC8D95C60EBAE1837D7A97CA137E9D4A4BD -2CD34AEFD68D64B3F4F62326AC429921D7FB3C235184FE0899690A0B775F1A566EC29D5830D32372 -6526F7E7F5AFDD71B77E07613DDC4FC63EDF49051AEB59E6337AC0A4B6DD872E776C9CD0CCB86130 -5322D816732124F5978A86C186BF0A0F88E733CE38E4D7C1BA5378C5629B1EFC97806059990ED42C -5CD183BAD7E94070E4058569DA2E51831FFE0D080301AEAB4350BA290318AEC582C78D05DD92E5AF -B4424EA808629BC972E68F4FF2489C245593F07555CA6A2B25964794CF31CBD3AE5C229AB9B8C298 -06C01D116EBD0FF0F159ED2D3D7DFC73EAB4910BFF5B0B0B587CD9EA6E6FC45D63C09766224D8346 -1F0588140B258B1729F70BAE7962189B1554483392988CF230AF4077193E53330519394DD99BA135 -6D4730AB221DC6A66019BFAE564893DDAD7B177DADD16ADD21D396CFA6C3DC818052E2F71149FD59 -4A16DE0C2FFDD366C99B486C55A6E991E4D22CCB15843F0C3363676AF2F5B2D1B7EF66CCF2F12DC5 -0D63776BFFB058D70A9C76DCE96C754872D72C82A0C33F90D49C935402CDD26B6D743B1F43BED5D8 -B539424849C1495DAE73044E885A7D0F307F1816DF6244A6F2D97BFD4E200E93F69B08AF39EA21E6 -E347A47CEEBF803F73B978ADBFCF056789BB8E6E2563DE87DD9A8C877157B934102DCEDAC54D487A -1BB2694F0034093C48F10A17D32E2BDD0C723CAF59ADDD1BE373AF8C9BEB4415AA5AF36310C31F24 -354A53C0B962573148BEF91D994FE3F3D8450DD4D686725799F53C373A0A3E3C060C2E1A3E800504 -9F26D716E1F381B9F83125E4683264A07E2D8938F605978E2513DD2050B3D8A1012797CBA8961632 -BED260916338A812AE751C7B657E086A0C7DDCD3BFDDFF3E48B84751925736D1310C4910FC114387 -F3ED7FE163F91895EBF55FCB425CEF5729D99BD8F2C072E36C310523E75CD8E5DE49C031C4263410 -9D56E91A46C8C8E89FD92012A00C33D0DEC52597B5C6933291A7BDC5CEDA95DCDA5600F9AE1C8250 -54E7EE1067458CCB66610704C58E4A4FC0CB5FC933D0322A716B2CD430A3AD48DAB3D4CBE9D23F2D -092368CFC4E1F5495C133A92942EC62118D45C17723646E69407B4A89DCDFD2AB3FFC099A21D9D29 -741D68270629AA3A414FE58658DC9170C247B6E23F35C4BC5FF83009F462F2EEF4DBAC5FD158A658 -57F9B6DC1F5192DFB169DCB65621CAB2F1B07BD22F4155A8E9E2B6388D430FDE5EC1C834D22EA035 -C52E1E34482EADC36B4CAE902AAE89A7284E62B3C84B608D6BD05F75BC31310B2DD3B2C08A00E073 -7F104F03A41989D5F6B9A2C38B22F1D1803EE5D7A4D8DE44E4ABD496A1DE0C0E12C4BC96D0122846 -3F0EA9CE9509FEE987139F3DD3F9D0DF4313F555BE85433718F6D05F197C41A9D9C7A8B0D2740196 -82D49F58DD5F66B12A6520D9F226D1DF1F1B65CDFA261F980CA25A92645B86B64606293F8BFDE364 -C47D2AF2C709BBE77A70A5712F2CC26F3D66F5BE2C307A48E6F887F681D30121E32BBD87271B5DC4 -615D28C309F15AD263FB37424E56DDA6E17B998B45BE6C7FC6C28E3394A8764C9EB2DF5C06626593 -B5C665D550D4600172791CD208AE9F37BC082B0B242B0A504B751B18F4D7495172B697EE217834A8 -A4FB7CC16D6F9E8BB400BE8AEB0850960283DCE725249FCC4DE97D9886745AB6066C3E2F64DD8AB7 -9AA11667F11188D7965DC11EB760B772E282DBF13249F31986AC6898FEBFE23E3E8B8D2C33E00EA6 -FC493850ECB2E6D831D1EFCA3C2EC8EE2E394599091ED58BEDE97D7A43B6F739EB0F845EAC1DF6B1 -EBFE876009CC5D804B15ED4B56761B3CE1AF59C07B49DC798A44532297AD73D5101ED47F36A3678F -818297CC27F6AAA2AACCC9AA9B6F5459911D8C56CF499E390AE607F3790450B2B9C9BE0F006EDA0C -715B5CA0481734CFB0597478E7602B0D2C1E4F78F03C68C17C70E4B42D7D2D3C95CF40F73488B371 -8E2CB05A549944D86944D78724E266C3319AF89AE430E777E95F0D792B1C654306E421F3D63A26B2 -1E74B6E8B21B2E2B9DC596D013CDA16D08E65E8F24A84B12B2BADC653E6E1110DE2E709C1C1BED13 -707B70A421B384F20CA7A9A9D20324DD383F28B2D3C7A9C53F5D4C6B7C378D26DF11CF55238BE1B2 -4FA70DCC178DAD3D35670FE4919085EB1CD905971D76A368FDFCF9D2F0A23739851A3A6D2E02D65D -54DEE69ED5D81315D3EA5E356F94EF256DD267FD1E1A9EDC9CD63E743F299BCC4A4506233B8DD765 -2CA067F741603F93250C087D368F9E9CC4CC1A6DED567487C05BAA992B0056A77F630A72008E3946 -15A9DB24FE56A956650EC9DE90A6C2259189440247970541CA198748928215C0E132A81AA13208D8 -63C1FE817F70CA573B54577D10B73100AF8EA088208A44FB92ACA314AE5879706180788C17BB1D0B -81B6B95A1C4E0F9EA66F9B39BFE12444A6446691A7BDB03E0F03D9F07A10A7598F2166F108529F34 -CD90E601FFED3479ABCFCBDE8F051C348E48C61D95B00C59EA1287423F05666C3D36288844067E83 -E14F6B5210842C742B89F13ACD126B9FC50ABE2CA7D7ED513D43B6AC7F41EEDA416BFFFCC5C844AB -2D23D4DC09B2D510504CE98D02E72020D9E669DDAA344C63A1B75632F912A1C0DA3885DA4AF7E243 -E4A4C6493D6595BB6D56B0359106957259E59E336BAAF35BD1CEC5CDE735272EBCCAE8D4904AEBD2 -B32610C6FEA2B69941D6542ECB44D71092A3CF067708A3D087AE99FF29671AB7DD8758759B971A08 -AE1BAD78270D2FBEE37AA2DCB119D72F6C7B0C8509018A70D0B0BE2C6830EF8E0B24B1CE1141EF87 -3A4D7DCC501F808BFD94E4DC0F2915AA023076BCC8006490A43685EA25AAFC187302EBDE7FE1965A -04A5A398985D29F08E085127B56B057334D88EB638A4DDE64AFD204974C3939536B1B66A54B4DB81 -151853915718F70813F096CC1B0EA25E363B49264C2AD17158A4489F91453FBEDBDE15D7B74D7F98 -E81DF23251785D58295BA297F295AA6248A912CDD4F1111E6B628EECBB5139709E76EA4AB743CEC8 -26621D08E6BC64691CC90B3C3C1778931A28D3D5B1E20E96C643316613FC487C9B604C43463FA453 -3BCA1236286E6F5A6EEB2F1D9C34BDDE4595495A365F88055D9268541CF1654ACF478D384A5496A8 -772EA1402751A093582A6625A0A44816B5FDBE166835D598644296249B92CC90AA3FD6445C9A19BF -27F59CB0616C7306070F33C7DF4E1DE64AC8C5BB2FFAC1EF2B1B30E5A0275E6004CF64BBE2C6710E -DCFC3AA4ADD60106334708862FFA6652825BC84842736E47AE6917180365C75B27505EED3C6108E9 -898A780E20C3F606A860229AC46D0471ACA0187D6D539A1B8820F620F72B41AD1D3BF3834BF48CA2 -AFEA8BF535AF74C4562DEADCB63D2F5C7585722B77C989342D190FF926C8A5263B4F25286F99CF6F -C62EE6E2AD61C82B29D82468AC10FD27764278E5558CE8B41BA111CB2F040914451A480C93084237 -CAC8F66BB7C6689F340B8ABF0150E06D5B1177278A4C08742FE22F42C28680F190900344ADFA486D -59718C25D37275BCE4DF981AAC35D2C7E85C72A0188B8953CFA516FD545AEE0BF4B8BA301CFDE214 -4241FBDF3D204E3D2823301572E23F204C97305A82401660E12926EE7BA6EA1A81FF5C007933AFC7 -3266FAC4C134ED818A48E7DA01C71A46335C845F9DA5E960B25339D551582B375814148D94CFB781 -FC56093827B78578A73D4FF67B6B87F40CFA5E3F4325D9108CDB64BD06427B88C84105187316FA29 -90B4E3E8EDB6C78ABF164F4A9717D523794B2FE772A04DABBE688CCA977090979B5F47CEB90A1DBC -167D305EAB231C9F4260C4AD10889CB785169902FC0BED78DA15B8417453BB65856EA0BEA5245BA0 -573F623D215F6C0CF801851C305B355D26B52B0B343645FE25C78A3526841EDA480919A1BBE5F56F -C10ABEAA3E1FCCA7C43EE560F067F1AA2AFD642F769D1ACE8E2AAAF38850F0D757CD808C921D716E -96FBC07DA7860DFA70CEAE2888C0ED3CBF9586443532B68DAED9A926655C157A416C383A53D8F283 -2A4E67468112A09ADC837ED8EC95F70852921F50D4417239FC42EE3624CA97F682745CC5E76CC7C6 -7BD99F2180F8C0B7FB49539C8CC474C25C0DDE491671FF329E51BCFA779346D4686835A3AD6633FC -B5E0F67E0CA9CED8F215BEF4D240453EB2EDD6ADB22278AA5B985FA140C9834D38753DF2014F8C0E -E6DAD19E8FC54C03C1F6CB0F858986691D99592562CAD95FA0A5B2ABE4A8B54B457D42E8C33A2D19 -51C0419A72FB94FDA78ECD92BD2A1416459E9DECA9469F35E4C47DB531726DEE8F203D7042EDB32F -025DF3D582547BB1D45F7A5B70D317DF4EBB16E36B0D798E0932FD2A85B04FD67143E4B287A50416 -2C1F5A037CCD780088C5476385AF8168E12D97D44B0630621759173C8F1E3006B5B1C6D7138B7EEF -C3CC5F54E24B2C3CA7B41AACFD25E554880AAF406EA4C3C6E21D3B550B040FB1952598A7E8E6488F -E38288B2AEB6C4718338598A2BFE4D2B9D14C65732DA304C16FF3E1F8F03046EF095B65FD609DA87 -EC24A69278BFE65C905CD0329F6A486B8525B7EEA4F7AE56C2633CD83543269E8ACD6D71F500D82F -DFBDE7F7F7B1AEE67328549232E26CA55085B6E84D9E2E7F74068F93A90C4654F2F396E57C5F76F7 -E61CBBE523DBFBA6E76638BBA3064DA025A79E3A294FE7F1CC28A3B4C57DD6FDC48E541A85534B25 -E1BC11B4F78019457239EAEFD4BE9007D205F1D985F389DB22400B279C10948551A6B4A17FBDA0FF -C9428B18B43DC76EFB15FC2182216F1B60B4E344A03AD6C00F141EF99F89F24C819C3E32877A927D -84C2D006940F39CA8B71E5951673EA9BFD1749923219DE38929ECAA9CE43B06CFA7DA1BBEDFDA56C -61FF6C24F40E59B13870D5FDEB82D981154FAE5D6D5152DE69339359461A41A9713B6BBE47E868C9 -33CD74C75DB71D13BAE4DEC85E02FAA14EAD6C0A253B16C79514657B15E68CCFF9EE6AA385CFF9E2 -C53D9AE40F85C793E4E8FF50B2B7420F4FE69807BC5F37C3E300E6B3C3549D1D3246A2E70F091054 -1135BDF805E0A698E236B6496702D061241687B7B8D1A0E517DF0476DA09D89667A7AB375FD2672D -CBAB8124E511502DDBD08BA04D941DF1CEBDCCF7ED48405CBCC33774A68C5212FC6F132641FF413C -984F8B43BDFD7B1A2A3435F15AF07EF4970D3E4A0BB947C181E9CA27CC14A35BD1BD096875B45873 -8CA244F88C28728B74E25CB8C4FC1095A56CA75E4569AD3082EF194ADD11350DB3B74B96761D4538 -596FF7243B1E1B724716A144106E080D42036444FD472998460CE9ABBD05B42AF9389AC452BDBBA3 -A13A96890025789F16B9D92251FD3B3BEB2C61EDDB370A20456E3BFE5F4039E2557C451C524F8087 -015BAF3FF05F51869FB97512968BDB2B49589C1C7AF1E085250A47657465F480B7023E24C76731AC -0EAB6704123D77977D3A2C4C56B691346EBE589C619C04515D34F81FC6A17527D5D8319013C5D4FF -27CC3925E24C99231AC7FB9EAF0BBA482D3B75807AC85D03CD09DE5D9AE0B07B7A813F0449786500 -0AE8A7E00080300F0AB8C399057EDDBA273DD2E1B2A0DCEFAD3B332E6D4AC1FFAD846167DFD70E03 -46DAF84AF292D4F424256ED5AC4E104F80697050D50844A708EAC9E7F7784FD01646F3BD0C595CA5 -1EE6BD607D254E78ADDC5E15C3B6AC4940EC865A5C23105B6BE09EA09F2C05D6D76960A843B81EE4 -33977FAAC3CBDA85CDD2F4DB7C28293A77825635992AF8F3B38B4480D9A139B1662345A8ABE1634A -77496C3F57597D2985E9E54717AB2E99CA35789441BCDDEDE9A9E2106B401D9684ADBEFE40D607F0 -75C179E9CC03E59E65430DB70B441D43DF03F2AA6FF06F224B6E455B01C64FB89EEC9103E48453A9 -749B4D602808C7E408A8903091D85E06AAF635D0D529C3CDD1B8479AC0F4208C284BB678A547F2BD -77BB17C86D4560434F7AD1937760A6AA55B614CFA9FF8C9C96561AE6C8F2121C4E20237428BC51DF -2099B6C49E3EFA18E6D439E6E6981E746EBB1DC461259D8EA0F8099C47CCA27B2D982B72C9A07CF2 -1B3C05D6E26E6E286E348B8944078E24809F9C5F3D014B4CBA02533F5621BFBA1F0EDB776C634746 -703C9F73BA89B1960A496420C68F54E5B901A6D733D7ACC79F275FFFB253F389AA480084468BB34D -A1E797E43B7F6E8CAF5E8C93069A3A2730E57EC39B677BB73E3F07C2055599F7062E53B37A5F0099 -907D2ED87FF7A82C95FBAEB888033BDFD67BA3A6031A4CDC56CB1E4CF5B06B46E16D988BECCEFACB -9E1C037023D7BF5CCF5D65AA66A17AB361BE7981F132A578F3ABFB97960A6034F052D9D5AFDC0679 -782EC90F240F943A5F9A3D969ED7399254FF67D89DF668F7C56FCEA1FFDCF20481474AC8495D3AF4 -B6D7EE093E369C057F0B70858220693B398ACF8E8143558132E4391405E30A73937C53402E459F4A -A3539CF7A99A3F51C0307D045DF8B77757E92EA2F51BF0BB4F77D3904DD355665870C2B59F1ED7F8 -4FC71FDD7F0B6C5D3182DB77827CA6A2060D2B8C83C4EA4A432EF43A4D0A952CC6CBBE52A9F0CD66 -1A538973DE41FFE9C5CF55F2506B9EFEE51FBAE5E63BDCF5528499A47C031163C88D3022606784DE -2F46A9C9235AEE3D4F71D4959B0CFDC5B7E78C8C0A8F9DC99440C2263DBACB343C5C648577F5610B -50EAB1CF7FD02419EF3941C7CA0B0E64EBAD4B2CB05A0793DBC38F1946D44767BD287F5E9779C611 -CA0DAAA1E7393DBE0683C8D3455CDFEBC0E64B54B737E298DDA605227C0C4BBA87AA3EC7FA6EBAEC -39E6EF2537D5974391D31739D9FC42983D81AEE44711C823F35F8E2321AC74943871739D2DBE9748 -FE68592263E7713F27E0D49B9B5CB7A4E55DE54E6B800D15856450FFD3AE5F287B12AE4F438B20AE -9E27E6CAA00F3EAEADBE08432684FDF9931E925544A680182602A3C1997DE5D0630BD5A010535E66 -E1C123013D23966B3545C7431C39B97295BFA4099D14461004C42C85095EEACB9B47C593BC6DB863 -533A8619BAE09095DE8ECA432D4DDD49AA600D277E75DC3F5C6631E2A05382CB007825FADB77438D -CFA78E252D79B6A196D5164C2FEB85D75ECA25FF80B1D97FE10E87960CA0FC47C41D3A213BF141B4 -8BC3AAA93FA86245064668394665BFD52D12C3BE4CE39EFD8111754398A944C3FD1AFA98EC337BAA -AF899D35E804CF416AD7FE45FFF13FC6354007501043F98FE8428DE8013901BA6A28711A2CA85A27 -0BB135B72F1D5026E8217581860729E94F2F1878A0E96C59E9F62714FB5F8F25003DFC7347E99007 -8A9A331CB3A6A535BC61866F02513DEB982C4A13ADBFBAC3FF70A7335F40D5489E48E5EDEDEF1619 -1973D932479C62183B0E25EE8C4F76D4F1AE45DAEA4A12AEDD9EF81D248E8D19F8C8A5BECDD1EA1E -98783EB7A38149170851B1942C96C53DE06DEF80913BFC04E539EC67C110498D15B78268853E5C72 -F485F8A27B768569E54241F6115875E2973292CF48FF91D45EBED627AE9F0766D22201B20AFDD40E -5B17CF337F2999E0BD15B86E46EB3C18FC12B7DCADCF9DD50C6C7E3F37E615A892DB3F57E250A072 -A49F7277DD6A2C8042698233D35A699B17ECA5DBDA6D250ED4A16FCC893BF0DC2E33FB1EBD7DEDEA -3C1C39603C8B7E1A5A833A8FCDD5570BD088749BB232615366687962C7E56ED089CD7B092505CAFA -5A80F503C4CF337F07ADF0D106937E25670839D491F7BFF7A523DB609D126328C16113ECBCBF9C40 -04904427A108618AE5D4ED809F8CCAF72251104C94EC5BEE21F91B179D31DBA79CEEE5EC7FF698EB -84AB1D2D1A624F58B3622A78844CE51498B2CEF38EAFE259D22C7BA61104651A862008BC1DDDA58C -C45F663EB26428DAA85E7785363A69D2790996EF5D9621D53042F42F794962FEA46E46F37B8AD1FB -76FC8D5CF2146843F8CC625139C75FB42DDA71A752BAC48F294E4C0C8289FC46DA5EFD9C91BDA6D0 -27518B7E81E8B21F755A9615627D5812ACA674D1527A1185EED4E3C628196E7D0759B1CAE6B9B7E9 -01E9599A65230F1EE469CD33B9BD9C104C44E3C1AB966C9678BD0AD78111A4E0F2D07A01A038CEDE -7036D0534D684A1562A17AD64A00F279200C0371B1CBA61747671D2A21D3F9646CA290F6B82418A9 -6FA177C6278277504B7FBA936325F5FA124AB018A15DC18D2C5E8F93CDEEA52BEEDB78A57828D81A -3E6C38B9FAF3DC4EB7273ECE3EA4482A1C6242A335862C2C3717F9C9ED95F77B140C4E1569B2192F -C7DCF702D0BC9A50428EC406F8BD0CAF886B4D979320D3E429816D88F7C7146D960AC12E70F2CB7A -9F4E3E366665AB3F1B4B6440F55EEA26DC9EE0096BB7763731740A537766490C8C174723BF0EB40C -53701AAD12B21D436ADCE22203C1053A9DC4E9F17AE617888C4B4E6F3A720E4E6366BA628221A387 -D8AB15E04AD69387C310D3528BD2FAA5B22BFF3FA494F5FBFAC4F771C9C7402B95580C5AC4BB3AF6 -92A70CB2C851FA5CF1173EEC3EC29B5A05A0B728BBBB51D3B7AD8B0AF17A1563E82FAFD93F8B7118 -1FB7AFE352874F4EC6D334AB6747519AB8E847B7BCED33EB5458A828E074E74BA621BDCD03FEA604 -7F7B6ABDA01FC7514BA1AFF0D4D0C0CB8F4E42D5A87E395D9ACDD02CCC220C157153422018725846 -009A3ACD8C8CDDB66BC6836B4026FD9F526AA275D06C813179E5924F26A25094E7BDA8BD26AFC4CE -B41D8964D4FC4AF1DFB0595BC5D6714C32F15DC7194E9A3A73013C45D8FA55CC0550A12D9AAE8E9F -F199FA28EFC2426D8D1DEFB93A65717AF3EA8E2D5B4AA8EF0EF38E9600F7D4E7D9F1D67A2E63ECE4 -789FA74B159BFE2F91C19B0378BA52E93DF12830D99553B6618645E26126842AB70262D96E35E5E7 -50ECA0CE3458B3E51BEE2F21191136DFDBCA39BDC07939E521E4F492F392DEBD029C1EA237BD89AF -76BC89F618D530160AB16269FA6B693CF14BDC4EC7C630025703C5337F61458FA09104EB15C7CB20 -AA4C9BDB7CEF3A09F25BC7F3149951A7CD75372993B80CD2112F7674CEFD6AFA764AA3486730D2C1 -897A264D82A91709FEC4A21E30D812F558451804EE6F3DEE2C4C437846BCBDA07C5B6CBA1D94AF02 -9163B7383CAC6E088AB1DC14ED3743EE77E26EA7AD3119A76C0B5F925C4DE305CD7BB3A09A453947 -5B9BD79BE28FC462D8718CE05F9D94CAF3387BA55E6E447BF81A9EDDD3A34E17BE66BC52B0C0BB6F -86F6F008829173816D205182ED2ECED319864A796AB65D4E3950288BADA94FA32B6F453AFDFC6C39 -A4FCFE60353A64627E2057D4B379D3240012B3BB0ED0C7876CB83C1BA5EFB6E2A03F340C2B576731 -F848F762A7E1CCAF267EE06D621BC33FC245D0E1547ADC12CC0EB58B26BABDB8EAE9CBFBAB93836F -FF22BDA1831DD01B7346AD377AA298D84628BF1C07433284B0A90FC89F5AEB2651BA2CEA405D4F52 -DDC0E74B871D43F71EB4ACE0D2B401F9348EAC3A2EF0AD295036BF6CF6F870D58E00B619D50EA7DD -77BC28DEF91D805CD527DCBCFDC16C042BF9B874E3B1567EBA4C1E70744B9E7E5BD1FDA6A5FF6E10 -1613FBE58DC46CFAC1A65ADAF65E49757E9304E2AC9A91E0588600C709A61D4231730073A36D473F -518A145E141D0A5A494441B9EA99AC23F60F54F8127B477E1CE698BB4129B4B1DFEEDF10D9E665C2 -47A62F112F5CA30B0AE5DBF3E495FF06EB28EB438CE8AAAD84D5F50FB56A3AF002C23BCF66ABC270 -7AC233FC0F2723DB99D2CFE7D3B3667732A531F5DC315CE74EDB9050BF75D29E6430F57CB6778B2A -CBD57DFCEF896E6766C8FC5C9F9FBD701CD62CACF33EE0FC95E78DADD205B5F42CC63024624BAA0A -B4DD447832B4E1DBA77BDFADD223989F8E958C8D759AAA37930664C6EFEC708116248A2A7AF3D656 -DDEAFD009B7F5333854608E67E5E588A857167ADF9225CF6C641F5E19C3E08678A281199EDDAC831 -B57223B1BEEADFDCBC8F6F25D32FCA2336C808162E8F381656E847FB6CB13969572425AA05AC830C -33DE6E030F86A3A85D2A66A77F103C7042C97205526DC882EA9A00EB8BD5519847EB424C15F808A9 -1652A6CC89B66A5731126DEBADE123C63D88A2E550FACDEB3886FF98646000C64B3A91078012CA30 -904B71737CEF6BECABD43DD702880538F5A70085E6CC6015D2163681067C3D513A8C66032C34A0FE -17A58AD4BC97CA69BF41F11D5E910FDFE9729652D3EA21F8DD8CC19160A8FC77573B1E9CEF4E790A -79D8AD6723B6804E9616466C935303E063DEE29CAA6C3BAEBF278B818C2EC2F13ED645AB452397BF -00DB8B26E115026E256746CD0C78A959364FDE6DEDDCD0F441A61A1EBA32C7BC172BB09512148D1E -BAC9E791B7D51B71CAD2DC9B83B2F99B3726607D9CBE58B499A13753CE87FCDCE21C0AD0528ED0EF -B9B2C927F57C78C626248AA2B835A0791244C5896686A66173EC9F802C4C633A42B086334D2A4878 -0E53D00809247BE64E529F96AD2F8B3922A6097D414DDE1EC76F9552F9B8D58B8E34F359AD792B2B -E50C26DB05035E7497162E7C49C38D3CD9B98D620AA67492BE5AFCA3A81A7080185C7F0B5105223F -1FA77805502A2E8C5FEEA27699858D84A95842C5F2FB68686D59FE24091FCDDE139B6463BC6C7B1E -0E90D20A83651AF00C85797BB9F53ECEC1675C7EE636D0D9E77DBD8F89670F855EE4D4800FF3F695 -0EFF09BBF8A0DAF6B8242840CFA5BA73BEB95115F4A78BCC02D85ECCE0C0F2EF6F328AD1DD6CC049 -5A3315B414A4D61DA50DA46D7ACCEFF6EE56451805D26B0359AF193531F95F6589CEAD6FA041AF15 -3067F88A0A2FECD135C56682DB2B45A71D1FA737C064EE9A4F404BB72A70B3AF0330359393247EC7 -81512482579865240A23CD8479F21C2C44A119EBC4E81B308DD8AA86E60C3DD8ADA50E0DFE8308EB -1A7F201EDE8DCFDA405AEFB47E0E6CA7DDB376DCB21D37F7ACC4D3E9F26B03A8DE0E8940CA3A9E75 -963A389DF8038D2C486072F61C0CEAF500753C7A6352B1CD0338D9212B42A4D3DA23D5BDF44C27C9 -4B88A415A3242FFE2E1B332477A21D2B9CE075EE479C6E657A4D8874A8C53964229310E01ED4F3C6 -86FEF5258EDF3B464DD6FFD7F1CAF473BBE722D60FB14AB4918E93878A8AE4773930B8CEE110F476 -7F42A52D9304C55BE12846C911A10AB9B2E036BF9DFD597F5348D42233315FA80D0F563C388BC253 -2103F05E90DBF1923F229F980A2F4585C7A373511372D07DCBACA583099EA972C03E5AA67E663882 -6DB134564DB993CEEB6E7A6659C7C5C05C310267D5F8A24EEC2D5CC3E3F3C808E6D6068D1A57646B -37FABD98ECB7BAF99E7D9AC4414A491A73CA34C52F394352F6B5A15F0FC4D88622DAC694699C2464 -84ADAC3B1D366AFEDE2A2CD2042C90516A666A19A91C80248B11224BEDDF1A320E230739E755D098 -B6A67315535F4C187CFA67ED817A035056353FC859BF286317996FFFB478A2248B908FF12ABDE705 -402224A3EE5F463DD3D243875C84E02DB968ECA1CC52C75171EA50D6A88CA91327A7AA5795019F36 -C0A19C093A1C9D3723C7568F9D41F2E4FFB712FD47F897703D7A620B586B81936C84AAED61D84332 -B3BEBC4F95B796B93EF7A1F565C494F8A65EDB21E2EE18DC025522EF8E599887CA2836069CDDD889 -88E5862977B7472584303198CCE97EF9F9E1446D1F1F5ED1CFC666A8A0C3A03E1792EFB60A9B4065 -49E0DEDF6ACCDBD98742568B4735A747D8E5DE21E630125AE0C691D054E42199C15B1F80CAFA6E7B -B2005F374A9A5F9900ABB7409CCD50C3AFCCAB1214E6A856F7C7EBA89BC3291801E1343DA9DAD2C6 -ED075C8ECA1423B43E587AEC67E6145272814B3F191B3C285639F9E2D6E148A02DC2CBC0E054D629 -5CD05DBAC1950400A9189316F0265B86A732D302C5BEE8ED233768F237C62600CBAAFF3A110D5EFB -6CC7CA3B92D965CA7C5E8D3E64ECF239FE2507FC797FDBE54C1112B28D4DA44C60AB09D994C5BA78 -D663A2591934CC052BC70CD1DCA3325C66C9CB982E2039F5DB70C848D3DCEF655B1C2CD0CEC8865F -E8E1C0A267BE4F707ECE6F5A3DFCA3CC1EDF92C760439F51AA69A4C1801E96CA4D6EA4AD980258F3 -D15C893913ABCE09101984C61B91D603053E49A97CB82FBA707DAE8AF1D579FD69C8481CB7B712CB -CDDB4D287BE995E32C02B399602A08B9DD849039B5673F1930BEC7BF366EB082D2CA5DB2385C8CC4 -5BE3FC0E31820191A814EBA7C4F23B1938E6C4D800732787CD2CB97F762DFC85D4B798809B5F2254 -D826CA42B32695428D120298B44CF38494E56240B75DF1E41E46E53C44DC505452256DFEC819408D -605FF14D6C1F3F152F2FEA96EA0AB3B472D8704E06BE9F8C3E8395CAADD06D6DA033E81ADE5DC3B8 -3DAFF743C6E9E48716003D358DF63CD7FD3E2F727D1F2D0C29962F76D5C95ED44B6F08D052025A66 -5785F264A3D5F5593677B630E628B5EA81FB37CFFD7A30B7FAD226B6FDC82B0878AF4C0EC4F4243A -807B9839EA62BCBDF7C2E9B30A623876E632E084EBF4A21EDA04FC88A1C07021D0C72EC3E969D449 -FEB08E5826EC20E55B21EA71EA59F6E3B0710B0DDAB3261B4A2029ECAB68C19ADD5174E55D5E984A -4E5F38F592A302FEE6ECE732DDE841A28672C620CC5D687455A5C06FA9FE688394A04F96312ED025 -B7AA6FBCE2925F3AE559CC1886BEECDB70822E2E5CA3F732A87404B1536AAC469989E9610CFA440A -CE43875A70CA51F36CB6F629D9424C1E35A88F92D5DA3CD8CBAE6E8425A36968E21F4F30349749E0 -205BFF8D552837D6FC39532525370BBAC833F75F1854C93FC533A4AA53ADF7008173A70D94A4EBF5 -38EA9E62BCDA7C20E0A073BEE2EFAC34D2EF1D03BABD5147659E50B557045B2EB89DB303749B04D3 -F54B43FED612FCC68206E001A7AFE90230D9C12F74A32C7EDB5D0241DC3A5D51481FD7C8FAE08FEE -263FBCED7C7D911B3A303C835AF5FADFD218F61A9D6DE80485ABCA88200047B094441F7767B97A24 -E8C612590FA2407BAB1E8B56C71914EEF2355DD97CFAFCC192BC06FCE063D3D9D1A629AADC75E3BF -207234C208E7E30663EDD691043065C9CBC473D97C6D4DD3DFF59D6A9ABCDD4412C3128F603160AA -D8F81C6E7A4DCAF35F3A99B4EA10A34375B477C2BF846521A7EABD4D28078E9340452A198F3F5ACC -3DB7E3908939FF6E3709C6A3FD9889439A4AE3E10B618CC92E14B68429A3AD2C80940A1079452EC2 -66F254657BE7D79A2A24084AF73F6DF71FBCD32BF6913A3FAB25F977787F7BB0C3A3E8BAB38D7A2D -B0B4826950643DD1E03BD7DD1FB149A33862A89226B7CB454DAF613128C2075470E42E70A9444A8E -6ECA526345AB48E6F5160BA23B5BDDFDA6049EC44ED1461C7E0DD514B16E2FB285F72039DE3C7982 -EFD40D7F6C8E8F4CF35AC71B467BFC578002E8D2239A2FD2C4BCCDD8AF3D7DB1F4AE7F2D2E0811DF -9D0155BA6EDE50B5F052F14F6AB884FFF244D8806C07EBCB49ED22D85DF696995991A954AA97A1EC -D86ACD76E061B7541E87997FEF0657A826BD88EF3A4A5920462C6595E7A156F453291CA044CED810 -860C3B0149BCE73BECA713040664AD0591304106129600AF71317B0D2907839CEAC99515D357E980 -B1937B6E1200AACADA205421001F1B2F91753E80D2263C56AA164A74701A8D5FD28E46480B0DD963 -A683A1F355D7FB4463C7347C94EA5E2CA40B60B56297CB22D972C5BB10E56715A955605256C1541D -9F3BC5768A6F355CD3B863F0FA1A781EDB49368F51B29481CBB41D4AEB07AF9DBE8F52C5D0FF75F7 -FB6431D37D6AED84D78C778871CB0F715B4F07580F23B586C969C81B471FF6A6C7276F7E141E02A8 -584D4B9AB00E7BD643D2C3FAAA299B1F1E25048461952EA42D4882768A70DE46B213A287F8D31AC4 -6D5436F22A796C05D1FE50A9BC2A928066627A0D87DD57A3AD91DB446404B41557D1457873482005 -EA20916BBE46C613F456C849D46BA79D20627B446B2F49E3FA309AE14F8C420CFD94922CBC0FB9D3 -5A0F7DBEF577F1849A1A80E0011DA8AC082A8C6F61658E65AD177ABDF23EE17C8CF0D26B9FA3A6E9 -4837EB9E930336889767A8D7EA3CE980A8EA95528B004957BE6067CD9BD8E02A0F23CC1762CCA656 -D33412FF45E917FD4A03EB6E8C1F43FDB0A8965A33B4FD26BC24A20B304CA817E88495BA9B361A3E -933717FFB0271F7F70C5D3CBA1E86D0F51BF3ABA194DAF32C35C796627D00C7B2271ACE2463E37E9 -7B3C826CF3DB60028F240F9452CBE08F7EBCC5FDB1BCBB3C327A9F450B9E5671916101D6E3E5E458 -CA31F04D12F592F83BADA2C3683D3886AA3B403963AB5DBE220FEC00037A745839F67A3635DFD3BF -F08F367482962DED88ECF6322852D643A54D5D303EB04BFDDEE9BBA1EBCCBA7C653B3A613A8E719A -DEBE3CE1BD7E754E5F4977E863E3C2D388A65227B451D4F3A4F94E06513CBA4AC1F2F511613FF035 -611684CCC461599000E546E4D972CA6960E095A526E4735A23421A4C9B597ECE08AFA2753592BD16 -DED93255A1E33DEECE3C5EB77B94670E8137F2A4A4B98AC193258E7DEA5DB8408A806188F2D1DDC4 -40CCF0E9A6E2F0C78FDBD7B68DD4939D2458C1965BF8BED4564B32462FFF3EC892C03B11D3EA813F -AB4CFBE8D3016329C5B7E3DFED0F08284D44AA0B7A2F6BC96EA4503E8EF52A64C22BED6B452581AE -8FF8917D53976471941A9116A2D878FB2541B561767ABD4E31CCD8A590CA03494C62AFFD64EA0A1B -C779173DAD84999C7A8D844EB1259DE7BB5B25CD023537A474A524EBE4660B22568949E624D8FEA0 -AD37F4CE1EC75955EEFA49C6BF1803BE87E9C9865FF3F6B8525B8C15FE8835CA153D27E6C0FF0CA5 -1029A7A9185D25F0F14D86FC797DCC1F99EE97E2054B9C2A2E06FDBEB8DEF6CDD368BF23A858D9F8 -C1DEFDCEAF1B4A8DE5EAFC604CECCF0D285BE00AA912EAB66EFF4D37AD2EFE34853BBFD87CE09B18 -749B489943EECAE7887B006FB827D10191DAD18466CD1F86505879310A8B171F902EA0C26A388E13 -B53C700272CEE2BFB47ACB58247C13449C6BB9D01232C32517358F1A3DE064D43C18F8827D53789C -CF3CE2EBE78949A6ABFA1A6B8414CE360A5E22AFB7D1DCE6F5A06182C3B984B4F9BB1A905A9D5A14 -83750A1DE0A857CD5C06945EB7D4A2A6BF1237F32A154FDC06D51A703D44FE052FD3C53E9E8F417B -35D1C851F9203A8997521529F21AD8498F96930AA77EBAF82EE02A57BC77C792D9F220294B45F48E -A8FD94E01CD25645D36D168923562F3FDC93CB79DD4760DA0C103C2675722D7A1B79FCB4245ED12F -A0DB52492C9CCE58B333CFEE822812F7DCA68E802C451B5CFAEBAC608B950386B6C58239D1C62D62 -4DD5D15782FC552222CCA06DDF387B373E32C3C2864C63C768350C37283760F3515A5B0AFD66C48A -B522EB3E808C061F5CD6BD96CD18C9839D30508E7D4EDB88E8F11E31E10919B16B7971F06D7877A0 -58D8A4944C84FC6CAEDF3341B48B6E0D3C7B85D710E0C35F5B5053CF4B4798B3778CC28B2DC7AE0D -F3A49F9F3BCD8E95D746C35C3F47D68B8AA35D97AA08E711B5FBE70D1A623C82541EBDC51A827D0A -69E6C049087AD26F256EB7577F58CCFFBCCBA5A95D093DC29464C9A38DE95BC6B1853963B2DEB0B5 -7AD1248D6F1625E115EEB9510B5772AAE4E3C866657DB0B3BF0E0AC345E116F8D4976B770876FFE3 -748C36165522991F46A36F193DD1A1C94713673C7E4C81582391B636C72DE94CE6254374F99B623E -5686C13D8A8322E83E11BB0B0A896C6A8C2C4F756C5385CD7017F26D23F7C3EE97372C868C8C9155 -81723BB6B76B4C3CE8998E4FA6CA40B633DFDAA59BA902A4952DA90EC4FC3CF0F2676ACFA7F76F78 -236FA2DE10FD3545357215246BB7E527F277C28B353CC6D79DCEF21BCC8F77603CDD58A2CCDDBE3A -9802F941CED8E035313875319548C41992A2BE939A17CC109426E33825AE59BCD17CB19F50D972FF -CBE7D9B4B0BB095303D9DC9D406696C2508D6CE99E11CF00F6461147E97449ED5F486D480A86D3A7 -ACECB7E9A945984724EFC21C5079B1FD03ED803C2DEAFCE3327D2D7827715FD65D9506216C88B0FA -26935E95C64114A51919D419038B1A7E9C1E829FBFB53275093752DF19891A97F3CBF7719C1FD6CB -17019A6D2D25360ECA804C4B35172662CC4769D2B785C6C87E5A4ECCE31704E59F71263B7C3CAEC8 -ACB4C7426EC25F11A0042323EE6C3EEB04284DBAE2C770BC419DCE79BD4560AEA41571C3B595F525 -60191DC7A8FBF63D413A77A0905E517441B16C2B501EA2F9E99CC38D052679F288FDF1894542E3A6 -6989A0090185EB2E75134BFA3D9147C3DB8A621D9D35E37786853779E157B47F71626D6B3E633005 -9159C17596C1B87FE2B4FF47ED9D78FA4C2160077276C8B58CEF5DC030B4A5D83CF257096C047FE6 -4DE307C598B815058E72D5F57DF5C369E664E137DE29349E2F9DCD8C9F4EBA6E765B6327D7A20DFC -B20711273FD8091CBA605C4C494248076F7E03DF65A6A50164980BBBB708741E5BF6056E6F996DC0 -7FFF408C5B8EAB8DCEC315E92873228C805D4440A6470E3EE3983758DD211C9CECDBFAA4C9300CBA -00608A4B2404A3C7AF017A3B7E67F39F0B51ACF950D3E75CC7BC2B8D3480202FA958E8EE0B240501 -5232EE0D264C7CA02C18CA45CB3C2DE322D3EB7F00F9455DB6C5B1F4E59C3E95520EC36D7D903CBB -625D70B54BF6F8255E412604BBB29FEE026CC660577F91DB1DB4A613EEEFB20CF7AE3CD89D565AC8 -38416B01B5DE4FFA5550D17FB51FBBEBE21CF1D56038863EE931B90DEC2E211ED42BA92EC244D4CE -2C4EC5CA87A026992772DC2AF754FC982B94F36EA7B7BF75E0ECE90CBB2A6AA1A012E8898BD679C2 -3CB3827C35D5D02F0569C7AA82615D4AA67518ECF668D3B57D6EF1A8013424AC2268BA0D9A74D588 -79EDCF6382A89D397864940303EAEC45A38304BA8B1CB198967AE23EB81054BE74B16909A405E8A7 -799CEE3C270FE2A6DC50BD7370B6B2C8FDB9A87D88D5D40348D3984E39C693B6F4486D994778607A -80A3122872DD65E40492107C71C3CF708A9717E9EEFAFBDDC239C53AA9645B711038E59C8B861B37 -411AB2039BEDF9CFD00F08D9C5D76154427FF5DD39878CECC5D7BFB3F1F035087185C0981F3C2139 -BE84872FFAD3408531C4EA9387B89F5E3EC779E8850D50992DFDCF9132BC551E985943B07618AC10 -D1150451F0844C0DC41D6E17EB508DC8689EC726400D5A7F6FEB3CC7BCE05F09228B7CB2C5393664 -D8DD9A4B96B1020EF25D70AA2D91CAE93AFB5F2BF0AA18CA5C599FA1A708EF35BF8F7FFEC9AFC1F2 -42870D028B2B1459063B493943EF1283829783E1010242E5CF4DA39D93D506F3892936E7D6CF1124 -70A521D397438733D053944CFF12D6FFAE8246F20618684F263715AA98E15D72A526383E05C23214 -B78338E5B476F0981D90056E6E5D0DB66B1DF2298E597B2ABE1D817E18BEB056E65EDB4234342D96 -00470B1420C9210419D834E431B82F58608C87AC361A02D0F1FE4B470A3D71E0D21BB87E1023D428 -E23D596CB9E1A2184403A16E36E644BCCF9BBDE27290485057E62827283E7380AF786BF395B3961B -A5EA469C315763FA59E0F176EF81985F38B882DE56A74D128E256D1B89939728E55A92ABA21A6B78 -44FAC1BA7BBDD8B34A18194A2984B000380FE9F672E83EFDBF276FE797A325815B0F25CC95C97A9D -ACF56D583486305D7C9E51A7E337D14E3B900333EB38FD93A99587DA2341B10C059C71CE080FE753 -3C0F059FA40E560AF9C4A41A4BE6FB45846FF8F78165E10B4AD40F264BCF5596A1E8EF8CB6EA4B1A -3A5C69059AB1563843679ECB2511A90E8898F54295649CB73D277760D8D04ABACC7BCC6E777A0530 -E2067CCBC08673F9C8C178F9D672AC8A15E5367F0C5651B53E75E0CFA57C931746AE1A679C246D7C -9417F1CD89DDDBD1173C2F880B7B3847CBCCEBF99F7122E832D7C9BAFE2B54CBAA1ED48158DE3F36 -238B76B0E67644A28AEA996DDC006F6AC0242E4B667639E7523CBC90A0561193C1AF34481C2EF402 -EE43A82E1EBF4E3D601BB36B2D95CD93550D61CEE7A94E72F6D30C32C8F91A61E964B1F66ACFC398 -7F95D4028F116E9A9A8474AA29C1C1A984BE0E393BDC41DCEF6A6F1018DB60D52024899D8EB5D55D -324D73F39BFA47377B9E15B3B06A7585589FCF52A54684173E5183367E7B0952DC4BC2767C4C6247 -B1D6103E52BC7B7EA6298F454C5D97AC575F19C10ACDFF4E10C7D3755CFAB4200CAC545269FF1D8D -B0D607C7AD47F40DDF257AB4E7D0750577003C13E4941960C3DD7B0774DDAC18E8ABAF8F53E03CBE -F6D57B44F24CF821014C064278FD51B3427593D17694B4ABCE81F49CBB984C5878CDF0C38D1ED7FD -99B0B9A3BD8D8FF6219588B3B8FA59D0CDD1D9B2F65122AB45E48F1757467B9204926140E3C350C5 -A927A2E700173053EC35D3F1DA2D7258714C97FAA857F0898917BD94625C6D1E2D77138EFCAAAF51 -7B17FE187A2212C24A881A2C6A647DEF6376ED80AE4175C5EE80921F001995B44E49F0D33DD9075A -CF33BB03671C0BCC34AD5784AD1CDFED3A6D9BA103B3DDC1CC2DE74DBB576A0277715275218CD19C -A8899209125266D8BF1286F881DCC2C383749D1E768D670F4099F7DE959EDFE852583183C9111601 -2881A56A24AAF020EA45CD5F39660DEBCE30AC1C7B8CFC60387B1B0C3E361BE612FDFA9F01B7E4B4 -A18839A2C7E0E393EBC5AD9A8A4EBC316A740C1C295D9EF5F4DFFA0667F9582C0BB837B142C4CFC6 -B1798E9476D0631111033B8BA75A10FDC800E2AB1E0E829632F869CFE4737BE9E2800759EE0831DC -7D1195EAF80555771981DD6DC6606812D92CB8EF86447F5F6C6F626D0E265C67E52A6319189EE349 -D48E49DFE6A9E98F76C414A1E3217AE0A215A17E54AA498F4ECDC50242ACC7E2322F63BB2FF2189D -057E7354E32A3ED1803116176B9B9D0129930F919E2FEC280B2C8924E49E7BB75768A2EE1DA8ADBE -D4E3589906DF1B923AEF84C1BD327438B731012E69BB0D43A1842CB88BB54EA4516477F704CFEB28 -6E3EA483445AD4D74586FCF32E96D366901084365F693A53C5FB532FBFE7BC0CADC404C4985042D6 -8DBB90A6DCDA3531EE324D558A214F935CD9FCC9A0CEBE9B5FB0323F4B3820529599EF48EE068B5A -CE85004FEA2984F0A86F5AC9D56163BBFE1142B774148F1EB0A4DC89C3349052533A7DE66729DB24 -41B82F8F7360111DACF69293C9B281A0534F3E9E9224A75C49A832F28B2E497262475507B6DDFA9F -01CA0A6696E3F5AC7EA68595EBA0C2EB8A47813FF936D84AC1B23ECA7AA2862B793CCBB0DF9FDD49 -31BEF354CEC12FBF478559FEC29F81ADF4452E83963E56541D31F3691C93A50F0BBA5E9552C4F2A2 -3A6E53060729854A3DD71CC4308B91957DB19E66AAA18FA67055A950F1C2CFF78A03BC1A588CF624 -696068068719AFB1001C4581EE072113882D9052B21E355D401ED8CD24D067B99E616BDA5A0A5A93 -36FC499632B79FF2FD0DEFB096EF46B75E2D4E0F48DAEA239719FEC4D9A29818F5875FC5041A9EDB -D26CAF0ACE14CC80BA49BBA59E918EB3D8F1E541AA16026585A2F72DF7D83541816DE46981FB3EFD -0C30E458CFAD04C79421AB7C4925E23AEA07F9F018431C790002596D26BD9663B51B699DF53E4882 -CBC34EDE88EB55045B889B6062E35FD1E018BCE785157B85EC3B9CA6C85D4B16238275385B8285DB -012D8FB7C9F5B946A41D7A0FB878FF72C39683144D8A007CFF631B43748F2D5FC690300F9BC0C837 -006B92ECEBE0605E8C3A4A400E18AE8997D1B45FEE10068E247C647CF82C6DFBE5E881D511FFA687 -B7AEB78546BFD07D5F7EC242DCEF4930D8AAAD8C6152B6642AAC325963FD147F236BB850A9966573 -9D06CDBD7CA79A527DCF461E33F22BC9C5DB00DA2BD3DDDD8C99D99793BC98282AA8872FF96C3942 -85D82D9419EB78B6AE37A5F519397700F75D624A09BD255B576E955A323E784E8FC31131F003B0E3 -024A4F58FEF2A6C043796201FC425482E1155E229D1B2D43EF7B0D22322B22EF5C9A1BE026A1C3D3 -75EDAFF99597E1E5477952A4E8D2ACF5D014BC00DC2A272FA62B6983E27D228881E2EF2B8B95A681 -CBE90C5FDE16331C85222FE2A16F0A3C3000A63E2E21666C0C119F8AF89A543D37977069A5ACF155 -6324F05204CE8CAD50FF4FB630D9CBBFC324DEDA584AA56A99D3A76FF55BDC2C2EA3A021361CCD4A -83C7A5E2768D210FA6DE889FD48A39D679C94EC3C99A8D33FF11377DA7F6F1B71A2A05B302ECDE95 -4F26773F39AC881542F0D0969C3995C3519A8EF70B4220D86BF01BEECC6462855E7B686E1AFF1CA9 -1FB8FD8B4A69E10EE0C2AD94ADD44449506F9B6EF43641F2026EFF6E605C670560C2B74706FB949A -A7E8CC6A2D0D6207E457E7FD87EC1B9092DC68B9143947CC8ED14AFDDCBF8FDDA228A76847F96802 -E561F67CEEFDE45AE587673983FC04C96744DBAA83F2DC838D633943C75DCB9E6410474EB27B348F -26E505F0AB90878940E846C5E9F3C5FE8C3558C3236B1B88C405716949B8506841CABE1717474BB7 -C30DB91CDEE33B0F844811762FAEC535BDCF84C1C747CEF9B1FA61D2AFB5A81335BC42C06A94D7D5 -9B7EDE55BCF6F9867AEE107555CDD084B7684C2C87087475A39A9DA6347BE281CE5635A4D07865BA -98CE26C1465B1AB0343F49FF37B4D0CA9F3BB693D78DC3B21925CB996A038DCC172527FE57C07460 -EF39C07D4396E7FA970D9F22ABD21A9C794B64AD96762C7428F59A8757C36D6C4FFB23216195A04C -2A2C2E7B10EF7193931544D782FEE4B91E01119C5553BBC6252270A8D8C56DD62D448F5AD8DC69CC -B45E1F17F0AA1E445129DD00F000005B23D38DE93A3BE55A4C041947F36B4E4536E307D0180553F9 -2E46B743881CB5D5386C48C7D5F84C2BCD06B9C501F78C7EE61FA23516791FCF4DB278AF688A2E60 -10A56692AD92008497487EDFE4BD5FA083FA544138B20D6940020887E35D46E093B71F7A04A67460 -DC8116B4D4839625D7CA6959D6831CD93F81AC4EA2709036DD738364FDE71113BF22EBF13DFE1642 -E564701E6F0FFE7511EDF03FE448C2B28C64FB7D54B94CA576E481FA56B2B18AF10C71F699B6BFD4 -7459CDE1869D0FD306BF489A6F42E5B2F05CCF55BB6B9526973D19CB134CA7F13F1DB3716F8CC217 -73A832568C16250B5CDB16DF24BF81D49F5B37018BD310262EA7078107868AB0216CEC83CEFCAB1E -9F2C665A31585CA04DC01879CAA79AAA5AB201B516F7052B01B16BEE5606098393B0E5D9F9E5E3F4 -EB20F63C958E796DF41CF28839F5C62A0431648745D7837B519F3AA36BC6C08EF040CCF53D9B6D8C -0C7D1A84D707EC57A3C6AC9A62AB37251A01A5ED40FDEC6F5BE6E34C6A91D058319439778A2EE5D0 -363E2E1F33463C33327D05FFC0CBF08D5BC457C7230448972FB9B4D0D782BA7DBF10D3FFEF8BF523 -6EC16D4DD6D0D870D9D5EB5C64C9A46A4F583D4F831FEE74B0E5B33A09ABFD4444929BD8F638CD72 -EAB99CF2E9551DF427683964A592E49D186F285258C5D5F62196A98532421D73E3495F82695FEEC6 -E1952C562D546B28618FFAEEBEFF03A57F4D855021F85B0C7BC37FCC6DA9AECA099B646B99D41896 -09D3FF2D56422F8C37E97640293EC7C90E3380887836F4938FBF495CAC14FBA5648D89282D8D49D9 -1AF73ED36581139D8BD42551E263E830EA3C6EB381D85C42D74C50DB0CCAEC03F535ADE92128A016 -0E811C34748309AF7604919B66CD43EB5CA975302DCB6076FEB6BDD6FF55976FE990FB0CE9ABB11B -195403FB26E3D6C6A0DE1C5BE79E171A61E21F79EE8DBE7A832519813EF6B33EA098C2C32ADEA219 -AB2AAC8B093F40000995539D1276D5F2EF84CCD099B71FE4269BDBDB6A8D59C86F7D2E3FBCCF8773 -D0FAE97640BC1AD43CB4B992BFADFB09DBD0CAAEB8CD9DA264187C4F97300E9A6C9DEED5525479E6 -05C65AE336CBBDF4E5D7F79AD098F977285E065579B748FEAA97F2A753E1F962FCAB68D72BAA8EE4 -FF6691C23E31BC0F3E981A96FB440404856AE1AB32A7205B17D411D8F21C8C93B704D07EC594422A -BC368CDA2B1610CE6A973F4474E12B78B532666797F5755D269772C9F5400B3BFC6C58395D38527E -2CCCF29B56123F7DCEF3BDE5DC1DFC5B0293BB125085B1D2D929BC3EE84F4FAD571A4991C3DEE03F -2DB3A3097E52B1A7D5C73CCB6148EAC62E8E36DE9A71C57638C6E4D5D9DED18174E8C390E50B4A5B -913C074EEAEBE390B214B3A68F02862B9A296DB4B409769649E51D738CBBDFB7702E15C73C2AFC6B -C37CE15171F4E822CF20EFE55D9F061AA43E648989628FF79E65932390CBB15D8E621333B18B11C3 -BDF96F841D7434E01AD501FEA964A75B248A35CD9DF9A37E48A1E5A09C624B93CE44F0042FA00D7F -9EE89B9F7AB785E9C718CF6E7228F743271C2C9BBA17E5208B920E44E765D99D86650EB454B0FAAA -112753AA1BD3A24239E9C5FC47EEB1547AC9D23731B8DC48B9707830DAEC60C8D3790BBA1120F776 -4EFAC542CFFBCD5C05F9510B27B2534B704ECD36C8B041FD49A96881302FFF5B0163A2DD09C751D6 -D6AFEA9170A4F4C4AB8D46E62F763FE1BDA51DD1CE4A27E772F3A2869155F762FF26B7AA6FCFA4F1 -292E56F03AAB6322BF867E7710C34D43B5D85B45AA68014AD7879EED051B1933E491496E3E26D9AA -8B80A07BF2B94F1077E84A9726F08199887D66DE7A307BF33C30DD9CF3DA188088C03B2BAD09A217 -6B110DB2C868B53DA9A66C85737BA66C93C58A259860E294AD0191E3A72C73F40B0BD98699AA08DA -F03587B78F391F3A4313C58D9F29B53C70785637BD0C58310109C54091AB0A34CBB0C478613A7AC0 -FB8F0A8B4645AC966395D8BA775262CD291136AFFDDF01C1D83DD4EB3B59CCAD18057FE7D92A8CD4 -A58F22508D9FD7CF356571F701BBB23E749BDDCBF8A317FDA0AEFD952BB18545610FFAD3AC143D35 -1B8DB3F66293375E0E50235F0D0466932181D377EDD32A5F0FFA4E22B5A0CB4F343D9A7E4A342E9D -09DFF6C697630CD3971802C277A5590B8CA94BDE6B38446C794D072BBCCB724D5BC208EEF1B018D7 -39373BB910D668882CAA779C2D686081DE6A2606417B54D7C20E0E7F722648D893E4EDBAE8F00D6A -6DA3712F91AE860C756D1127D133AB828E9D80023B50B162C5A1C5CDF70CCB3FDD7EA060ED20838B -E1E50C4094C9E79E1A0187CDF780CAF45A725964F004253E034C5BE46BBF89D94631F1A33BAA35B8 -4FA2A9D08481C6674126CD96ED05DCE48BDA069D902D6836D5DFBA701DC0F98A863E64F0E312145D -8DC0B77F25B43AEC729A1243B45B08CA228DD6101CAA2AC5ADCC8EFF84A4CA3F254176C2CC711EE6 -C273835D0FD3528ECA2A976B88E51FE347FDB60F32370B66D338931D6581630ED586F349C638960C -31AE4204E89521A96E1219E696B913DEB2AAB7A3B022D06F34FDFCB810A04E60A4FEBE284C2F063E -0AE9EDF87704921CCFA193BDC912B747E13570066223A49F1F6E2AF0D4D65DA04CA876FF7A462FFC -9C0BA2CC545C3BD36DBE762F32B2D6BE5867C59F479195C92440DC165098B74EA5C3AD93CDF2D410 -B04C16BC7801E7956F4E5107450787AA592493171C3628E6B8F49D4F8429EB98DC52EF025F001387 -BC1A7093F7A99F10B5D2D7DD8BBB393BF6E56F08F4F7FA1A343F220D5A1EAE7168C74D41BE1DC1A8 -3BD65B72B982F4F7B34F24F97F9EC9A91011064031FACFF2A14921A32024385F4E061CD07D152E74 -1BF97156D951A342488FA7F5EF934CCAD13E2753A0AB7A1F565C2F7F6B349DF03BBC25BBD972A9AD -F809BB5C5048A8CCEF9297B2ED3324D18867F293CC66E88B3A39D107B610DFE79A3B4E83A96D3D52 -A17FE8A62C9FDD271130148366942C9CE57558D023DA5F7501319EBFA33DE9E6D1E76D7C20DB8A09 -B657839DA99F3D8143F1EE6253A3295C9651FA4366547893C2DC7ABCBF4BB7609DE5D001E0A36D9F -FBE01F7D0903B3208AE8547E2E5F14EC1AF4C2535CA8F4EA37E3F3CE172C7A1E8308995B1CC23E6E -81190246BCAB6E755BF868D449BB02A2AA87C44C9CC0F571ADC72547CEECBE104BB274B8AC16DCB7 -5D5F458D356466B921ACDEEAE384E2EB1DF6EF393B41B9747F0A4FAEB4AF1928D9AD6FB7E06FDC62 -1E4C6FC98CFB43F88584BD55D9B97CC9549093EDE586912161931162B1B1D52D0443260DABA02AF2 -B4432100D5506546013DA703573FA8013685CC798CE501960093DED713FFCCF89CA2B9106390198C -29A00864108CDCC1984A8BAB53919028C01B26ECC7925E38CBE6CCA8978EE21C2B06E7B3E48FBA97 -8E2A7D186E563C088F84AA23178B60E4729EE87D67B1091F3B6973676C1CBFE6530EB773C62E2C24 -97014AB0E8B71A1F4E86A378AA26591511BEE3CF3D64C94848582E1354E1605B6457823F2C5E640A -D3802946BB2E7E8E594E8C04B430C2385DD40746CE8534F50842E74D7115F3DB0C72D1C9C607C657 -3B094AEB73B7A79876CFFC3E2F8C9FEAAA07D3BFCE05B61F7749A8793BE90CCCECA2D7077F25E899 -D3331FE161A7E86C842495D584C6E4A0880B2951D8A13B88C4672080A0B1BE36BF47C3ACE7288CFE -41A8C1BAA6F0814A947FBD6B3AA72B6C73A8C578CA51CCC96F2352316C467BB960E981F2B6485BFB -44B577E71EFDA16E7405954BC7C9F0759F5A9F1EBCD2FA9CC9648D5831A68887F41B15081A204C24 -B4B992A231DEF9E698D4C3A25B6F5474F5BE6A601F2D337A58A0D21FF37FD91EB86D1D738893A03A -69F0CD743F611CDFFE69DB2C6ED0E4611D56F803BB0DC06E7FE85A303839612707647B1BE9FAF8D6 -84122CA9E5CB8BDE2936D3F4FF254D31529D7538BBD4D35539489F9E7316F24214B996BCDCF1818E -749A71CF0E8845AA1E2A58AA62A48E02BA4564625D20AA220EE719608521D7D7A7FCA0BD8904A401 -9819D371F3F59D46C1354E5FC1A6E5F79B20CF4ACA2BF0F2DE73DA193A6F9ACBFE0B4731C4BCEBE6 -D96FE822965DE965232282A3A130361F188B3AABDA95A8A2790D9240BE008B6A6DE4BBFCADA05B67 -86B9BB8E0DFA0C30043A3B07ED46277E07B9808422C8ED16758B9C396F4EA929D769785B2C9568E5 -70A83B989B25CE200F1727D41E2B702E7F88F1784F4C83FA60A74EB26B2DA95126E508ED519A61CC -151DB6804F61826C5F86D8FA89D06E526FED97A0DB88EDB432FF32C1ACC9B622EEDF601081AF7B96 -3C9CFC1D13E4A9C74FEA0A1C8E3D8653CD92A944D4CA6B0D306619AFD503506D77732D6514F604BE -4610C2560931BDE0B40939BC1D126B0E97F72AE1B4A9252123B54F7A27E0CFA4425B4546526FD741 -CA77952B10D13E0AC2E32006A903808FF0CD013F936238C74CC75FD915244C56A8412F37F0134840 -347699508D6F3D7F3203A25B7C70100719582CD588590EE34B3AB13E255B613A6D00386A0104CC5E -D2C646F09A88888D3751651D5646C5227A3C80E8DA1B0A331121DD2429F1F4775D30564DFF47D01B -BE2C6C72CE4D1FD9A2077C04D2B0274B8916F6A9D1A4A6964A534F47CF241D5A8E34B23F85BE9ACF -FC2FEA961F277539F215F8728D6788F67BEAF45502839BCF23D8763C3949352F00C579A9A4FC408E -C625E310DAE61512DFE6844E82D36A2F81709E1F05B38AE9C222ED62C961EE63593CED7AAF73CE2E -D3667740C77B309B93EEFE1B4BA65D48575A66BE86743DC9E5D3C2FF418D11F7F211B86E827EE1DF -C3613E7498030F07050524536D1F8A94DDB6698BE7B963C55CB3F74B676CD815A7B3DF4B1A0EA2BE -1B0B9A11FFBFD5B1FA49668AEE14629316AF436A0821C20BEEF7B3480847934A99F6D85B68F4DDF8 -859A754E009428AF89A90D1852C220A607FF0806E8080726EDC94D691D214B4521C147C4273AEBDD -BB4A697EF16448CD9B2FC95293305858DECFD406B89B9F3FDAE2AC579E80CF321EBAE5701FB2F7CA -D8ED04B4A63115886D45D6120F69AEF1A21D80AD3C2D35D2899F1902242B96CD349E0AAADA40F7A1 -1282B6B52BDD97708E58DC5E2D22D1153E5FA3F3B300BCDFAF98DEC2F4E3C82A1C85F985735F3987 -4F557579F422664E07CBE19DA680EFB0FC82C323EC5C4644C51709AC8D674608A8043C91E6C7988D -430F10BA6CE1FC7FC0604FCD8F723895250AEC36CC35B3FA14FE2A0D24095DCC30B2093F2298F5F0 -A97676A0BE66C3DC9ADACFE2FC0F721A20E945AFC1096A619075D5E9A264C796EC6C90EF1AEEA8DC -089B44FFC13D27CB2370070A52D4416C53F364393E46EDD7EDE00799960CE6E0D57E4909E88ADD64 -BDD2B0EBE2D73FA6ACF8B40280DAA0637E705C65AABD523B8815F22F23E9FF81E7829C7E4BC980C9 -143AEBE1A04DC0D253396BBB7268BD5AEEA356B610D5DCEE03135E00AE34388251F31714A1C40E18 -2652C48CDA2211A22CB6F02490E69A44CECB169754C53B16028D352E0119F5D5FAE0BD7EA1CDA647 -12A6147374B64244E21E9EC9F0D1381AD22D5B6212B26C3F9AA5F6045F25DD9F5EB4489EA39B1945 -331AC70510C5752557DE21D0A6CFC1EB10A98FA867B76DA6E4249469F591FD154D39E89364A43DB0 -07AA0D7A911CFAE6CE2B557997FBC44F55A27F622BD7B8B10EC9F5D10F2649A646FD964AE1B111B3 -5B46A252C4DEE44E7426EB5739F24E8A390694597DB3A1FE7800C97E59558322F0E49A0CCE2AD94B -1E2D1026AFA771723E3F523916F55ED866C9FB4A2F759651C613A2CFF362028CDF9D38F05D4C7C60 -24C533E930B64B099FB1AF04B01F5FB9CA6867E6EFF55A772C5391831059987E10CBF987E3F378E0 -1329F73D54DC0484177D3C3C06F67397955FF1CA4EF8AD1606B70455255D631A7D6EB92BFDBA14A0 -FF28B2ACE7E81AD666EA9B3A0F5A6BA3B5DFE35044FA4B3D8ED956009C60E98CC132F2E84967F4A9 -8A67B336D5EE7CAF7DD1F74D1FA08619941361FA7312CF225D89CEF97E864C8369EAFAB94D97F056 -5505D825972B754F6729596EEA91210B75DD8F645382ACE36DE60819A02B3B48DD00F5485F9264F9 -FA926D732E2C267B0BE8CA98526F124F97EFDB86132C5EF16B103908172FC51F286FFE45FF253512 -E0033F037FF182BA536A9EB2DF2D1DB257D9C86C46E1B002FB32AC70CA9462E6EB48994752CEBCE3 -9F08ABD4F4B0889283E55500702185A841E328 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/NimbusMonL-Regu-iso1252 /NimbusMonL-Regu ISO1252Encoding psp_definefont -/Times-Roman-iso1252 /Times-Roman ISO1252Encoding psp_definefont -/Times-Italic-iso1252 /Times-Italic ISO1252Encoding psp_definefont -294 254 moveto -0 0 0 setrgbcolor -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<202020202020> -show -445 254 moveto -<63617365204D45445F544554524134> -show -823 254 moveto -<20> -show -848 254 moveto -<3A207B> -show -294 298 moveto -<202020202020202069662028696E75656C6529207B> -show -294 342 moveto -<20202020202020202020666F7220286A3D303B6A> -show -798 342 moveto -<3C6E6D61696C6C65735B695D3B6A2B2B29207B> -show -294 386 moveto -<202020202020202020202020656C656D5F69643D2A286E756D656C652B6A293B> -show -294 430 moveto -<2020202020202020202020206F6B203D206D794D657368> -show -873 430 moveto -<2D> -show -898 430 moveto -<3E416464566F6C756D65576974684944282A28636F6E6E65637469766974652B6A2A287461696C -6C6529292C> -show -294 474 moveto -<202020202020202020202020202020202020202020202020202020202020202020202020202020 -20202A28636F6E6E65637469766974652B6A2A287461696C6C65292B31292C> -show -294 518 moveto -<202020202020202020202020202020202020202020202020202020202020202020202020202020 -20202A28636F6E6E65637469766974652B6A2A287461696C6C65292B32292C> -show -294 562 moveto -<202020202020202020202020202020202020202020202020202020202020202020202020202020 -20202A28636F6E6E65637469766974652B6A2A287461696C6C65292B33292C> -show -294 606 moveto -<202020202020202020202020202020202020202020202020202020202020202020202020202020 -2020656C656D5F6964293B> -show -294 650 moveto -<202020202020202020207D> -show -294 694 moveto -<2020202020202020> -show -495 694 moveto -<7D> -show -294 738 moveto -<2020202020202020656C7365207B> -show -294 782 moveto -<20202020202020202020666F7220286A3D303B6A> -show -798 782 moveto -<3C6E6D61696C6C65735B695D3B6A2B2B29207B> -show -294 826 moveto -<202020202020202020202020> -show -596 826 moveto -<636D70743B> -show -294 870 moveto -<202020202020202020202020> -show -596 870 moveto -<6F6B203D206D794D657368> -show -874 870 moveto -<2D> -show -899 870 moveto -<3E416464566F6C756D65576974684944282A28636F6E6E65637469766974652B6A2A287461696C -6C6529292C> -show -294 914 moveto -<202020202020202020202020202020202020202020202020202020202020202020202020202020 -2020> -show -1327 914 moveto -<2A28636F6E6E65637469766974652B6A2A287461696C6C65292B31292C> -show -294 958 moveto -<202020202020202020202020202020202020202020202020202020202020202020202020202020 -20202A28636F6E6E65637469766974652B6A2A287461696C6C65292B32292C> -show -294 1002 moveto -<202020202020202020202020202020202020202020202020202020202020202020202020202020 -20202A28636F6E6E65637469766974652B6A2A287461696C6C65292B33292C> -show -294 1046 moveto -<202020202020202020202020202020202020202020202020202020202020202020202020202020 -2020636D7074293B> -show -294 1090 moveto -<20202020202020207D> -show -294 1134 moveto -<2020202020202020627265616B3B> -show -294 1178 moveto -<2020202020207D> -show -220 1289 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E> -show -507 1289 moveto -<6475> -show -583 1289 moveto -<66696368696572> -show -740 1289 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F5352432F7372632F4472697665724D45442F4472697665724D45445F525F534D45 -534844535F4D6573682E637878> -show -220 1344 moveto -0 0 0 setrgbcolor -<706F7572206C61206C65637475726520E02074726176657273206C6520647269766572204D4544 -20737572206C612073747275637475726520646520646F6E6EE965206475206D61696C6C61676520 -534D45534844532E> -show -294 1445 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<202020202020> -show -445 1445 moveto -<63617365204D45445F544554524134> -show -823 1445 moveto -<20> -show -848 1445 moveto -<3A207B> -show -294 1489 moveto -<202020202020202069662028696E75656C6529207B> -show -294 1533 moveto -<20202020202020202020666F7220286A3D303B6A> -show -798 1533 moveto -<3C6E6D61696C6C65735B695D3B6A2B2B29207B> -show -294 1577 moveto -<202020202020202020202020> -show -596 1577 moveto -<656C656D5F69643D2A286E756D656C652B6A293B> -show -294 1621 moveto -<2020202020202020202020206F6B203D206D79534D45534844534D657368> -show -1050 1621 moveto -<2D> -show -1075 1621 moveto -<3E416464566F6C756D6557697468494428> -show -294 1665 moveto -<20202020202020202020202020202020202020202020202020202020202020202A28636F6E6E65 -637469766974652B6A2A287461696C6C652D6E73757029292C> -show -294 1709 moveto -<20202020202020202020202020202020202020202020202020202020202020202A28636F6E6E65 -637469766974652B6A2A287461696C6C652D6E737570292B31292C> -show -294 1753 moveto -<20202020202020202020202020202020202020202020202020202020202020202A28636F6E6E65 -637469766974652B6A2A287461696C6C652D6E737570292B32292C> -show -294 1797 moveto -<20202020202020202020202020202020202020202020202020202020202020202A28636F6E6E65 -637469766974652B6A2A287461696C6C652D6E737570292B33292C> -show -294 1841 moveto -<2020202020202020202020202020202020202020202020202020202020202020> -show -1100 1841 moveto -<656C656D5F6964293B> -show -294 1885 moveto -<202020202020202020207D> -show -294 1929 moveto -<20202020202020207D> -show -294 1973 moveto -<2020202020202020656C7365207B> -show -294 2016 moveto -<20202020202020202020666F7220286A3D303B6A> -show -798 2016 moveto -<3C6E6D61696C6C65735B695D3B6A2B2B29207B> -show -294 2060 moveto -<202020202020202020202020636D70743B> -show -294 2104 moveto -<2020202020202020202020206F6B203D206D79534D45534844534D657368> -show -1050 2104 moveto -<2D> -show -1075 2104 moveto -<3E416464566F6C756D6557697468494428> -show -294 2148 moveto -<20202020202020202020202020202020202020202020202020202020202020202A28636F6E6E65 -637469766974652B6A2A287461696C6C6529292C> -show -294 2192 moveto -<20202020202020202020202020202020202020202020202020202020202020202A28636F6E6E65 -637469766974652B6A2A287461696C6C65292B31292C> -show -294 2236 moveto -<20202020202020202020202020202020202020202020202020202020202020202A28636F6E6E65 -637469766974652B6A2A287461696C6C65292B32292C> -show -294 2280 moveto -<20202020202020202020202020202020202020202020202020202020202020202A28636F6E6E65 -637469766974652B6A2A287461696C6C65292B33292C> -show -294 2324 moveto -<2020202020202020202020202020202020202020202020202020202020202020636D7074293B> -show -294 2368 moveto -<20202020202020207D> -show -294 2412 moveto -<2020202020202020627265616B3B> -show -294 2456 moveto -<2020202020207D> -show -295 2573 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 2573 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D6F64696669636174696F6E> -show -656 2573 moveto -<6475> -show -733 2573 moveto -<66696368696572> -show -889 2573 moveto -1 0 0 setrgbcolor -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F535243> -show -1161 2573 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<2F> -show -1174 2573 moveto -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<737263> -show -1235 2573 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<2F> -show -1248 2573 moveto -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<534D4553485F53574947> -show -1550 2573 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<2F> -show -1563 2573 moveto -/Times-Italic-iso1252 findfont 50 -50 matrix scale makefont setfont -<4D616B6566696C652E696E2C> -show -1826 2573 moveto -0 0 0 setrgbcolor -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<706F7572> -show -1943 2573 moveto -<6578706F72746572> -show -370 2633 moveto -<6C6573> -show -465 2633 moveto -<73637269707473> -show -635 2633 moveto -<707974686F6E> -show -813 2633 moveto -<6465> -show -900 2633 moveto -<7465737465> -show -1031 2633 moveto -<6475> -show -1119 2633 moveto -<6D61696C6C657572> -show -1326 2633 moveto -<74E974726168E9647269717565> -show -1589 2633 moveto -<20> -show -1601 2633 moveto -<3A> -show -1654 2633 moveto -<534D4553485F626F785F74657472612E70792C> -show -370 2689 moveto -<534D4553485F626F78325F74657472612E70792C20534D4553485F626F78335F74657472612E70 -792C20534D4553485F6D656368616E69635F74657472612E70792C> -show -370 2745 moveto -<534D4553485F6669786174696F6E5F74657472612E7079> -show -912 2745 moveto -<6574> -show -966 2745 moveto -<534D4553485F506172746974696F6E315F74657472612E70792E> -show -1581 2745 moveto -<534D4553485F6669786174696F6E5F686578612E7079> -show -370 2801 moveto -<657374> -show -468 2801 moveto -<756E> -show -560 2801 moveto -<6175747265> -show -703 2801 moveto -<736372697074> -show -856 2801 moveto -<707974686F6E> -show -1038 2801 moveto -<6465> -show -1127 2801 moveto -<7465737465> -show -1261 2801 moveto -<6475> -show -1354 2801 moveto -<6D61696C6C657572> -show -1563 2801 moveto -<6865786168E9647269717565> -show -1875 2801 moveto -<74616E646973> -show -2037 2801 moveto -<717565> -show -370 2858 moveto -<534D4553485F666C696768745F736B696E2E7079> -show -859 2858 moveto -<657374> -show -933 2858 moveto -<756E> -show -1001 2858 moveto -<6175747265> -show -1120 2858 moveto -<736372697074> -show -1249 2858 moveto -<707974686F6E> -show -1406 2858 moveto -<6465> -show -1472 2858 moveto -<7465737465> -show -1582 2858 moveto -<6475> -show -1650 2858 moveto -<6D61696C6C657572> -show -1835 2858 moveto -<73757266616369717565> -show -2061 2858 moveto -<656E> -show -370 2914 moveto -<747269616E676C65> -show -621 2914 moveto -<7574696C6973616E74> -show -880 2914 moveto -<4D45464953544F5F3244> -show -1279 2914 moveto -<61766563> -show -1469 2914 moveto -<6C276879706F7468E87365> -show -1792 2914 moveto -<6465> -show -1938 2914 moveto -<6D61696C6C616765> -show -370 2970 moveto -<534D4553485F4C656E67746846726F6D45646765732E> -show -1028 2970 moveto -<4427617574726573> -show -1275 2970 moveto -<6669636869657273> -show -1508 2970 moveto -<6465> -show -1637 2970 moveto -<7465737465> -show -1811 2970 moveto -<736F6E74> -show -1977 2970 moveto -<7072E9767573> -show -370 3026 moveto -<534D4553485F506172746974696F6E5B322C332C342C355D2E7079> -show -1000 3026 moveto -<6D616973> -show -1110 3026 moveto -<636575782D6369> -show -1273 3026 moveto -<6EE9636573736974656E74> -show -1509 3026 moveto -<756E> -show -1576 3026 moveto -<616A757374656D656E74> -show -1809 3026 moveto -<646573> -show -1891 3026 moveto -<706172616DE874726573> -show -370 3082 moveto -<6465206D61696C6C6167652E> -show -280 221 1 967 rectfill -2125 221 1 967 rectfill -280 221 1846 1 rectfill -280 1187 1846 1 rectfill -280 1411 1 1056 rectfill -2125 1411 1 1056 rectfill -280 1411 1846 1 rectfill -280 2466 1846 1 rectfill -showpage -grestore grestore -%%PageTrailer - -%%Page: 6 6 -%%PageBoundingBox: 18 18 577 824 -%%BeginSetup -% -%%EndSetup -%%BeginPageSetup -% -gsave -[0.24 0 0 -0.24 18 824] concat -gsave -%%EndPageSetup -%%BeginResource: font NimbusMonL-Regu -%!PS-AdobeFont-1.0: NimbusMonL-Regu 1.05 -%%CreationDate: Wed Dec 22 1999 -% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development -% (URW)++,Copyright 1999 by (URW)++ Design & Development -% See the file PUBLIC (Aladdin Free Public License) for license conditions. -% As a special exception, permission is granted to include this font -% program in a Postscript or PDF file that consists of a document that -% contains text to be displayed or printed using this font, regardless -% of the conditions or license applying to the document itself. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.05) readonly def -/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the file PUBLIC (Aladdin Free Public License) for license conditions. As a special exception, permission is granted to include this font program in a Postscript or PDF file that consists of a document that contains text to be displayed or printed using this font, regardless of the conditions or license applying to the document itself.) readonly def -/Copyright (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development) readonly def -/FullName (Nimbus Mono L Regular) readonly def -/FamilyName (Nimbus Mono L) readonly def -/Weight (Regular) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /NimbusMonL-Regu def -/PaintType 0 def -/WMode 0 def -/FontBBox {-12 -237 650 811} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding StandardEncoding def -/UniqueID 5020945 def -currentdict end -currentfile eexec -E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942BF7D6DD84F1664B89 -699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED2AC419FF2B2BDE605B8EE3264EDD6641 -2D4F21C64AC522BDFC7C5502F9C3F3E5592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A2 -5032519D1868816E44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8A123E6A2261C63C769D2F4B60FA2C438AD7D199D8E4 -5F7E7C9A605C8CA14E21FCD81C9A515FB8DB6F99604534D06EA9D87FE0FAA852899C9D0595C7A97E -6C55F79FAC45CD38E87B10D210CE7501E88C8FCD3444354365FB893A12F596AE2C1E70D5819EE0D0 -87D10BF8DA96F3DABD5405D28C4228C6C31BA4052464859640933FEEFD8071C0C84CDD829A9B1D0B -A01F25A4D50EE2EA2B45160CA6333B2D2800306ED2BEFDFE155E9D9F9342EB8D5B0ADBF2460CCC98 -643FB1287CCD28ABA7B5CAB92EC39EE2E918990372B16F8487EBA30EAE88708B6CF33B6C015D8096 -C7CFE2F139F52052E3925C0D50FD64CE68236D59CB83EF56BFC584150EC38065059F3308AD6F9A99 -F83EF4E6CB13855C8175E31417D190D036B387D3952344A950F4D8C7781B307A094DF1ECAEE4D2C2 -FD747BC6F7F9C6BD0E90C19294F96C8C5CFE88FB34C477574A1B1630B8CC591529E59B20794DA32E -61DECDA8ABBD1AE956CF74012AA01D42EE01E861B0AA6897C864788AE59DEF43C493246FDB1ACA55 -4C12594BC7B33657A9ECC9E3D1472EF826073F632BE540C35FF6FB40566773F3BB2204D3A579A08C -CBC844C14B18C350F003B9DA23A570C362D6003893CA32F86F59B829C78EE3188B6E3F7FA81D7F62 -2825C639638DFB78B7AF1F500F5B450FA54DBFA5CBA277C794ECE93275A3DE0B452FDC8DDC2993BA -A42F28A636008CDCB03EBF71BDCAF35019778993443F88412AD2AD0D7155A3944606463266322DBC -0244B07DA1E9C27A27B59664E8566D7A54CC03E995AAD008B0A17E2C3EF61F720CE7F7788599C4E4 -4C709CD5C31B11107F16AD70B17B9AFE2E8CD922A7428DAC171427FFAF51067307FAB0ADB530E701 -FD22DA22C4CD3064067BD4F6089C4B2C87937DD426E4E9D2F60E608288BAC9056554D04947E69200 -61E379CF5E81BFD32FD37EFAC1F61CEBEE551B0851516471A7472C60DF89DAA9EB1DC5A67E479745 -3E69B9E22BAF4E3CCA4192D603295B018C4AB69D18DE52DFDF15E96B557F290A4B8C5B1E7A6CACA8 -1F2351B97ADFC36995ABA43803A6E5AC04A3C93495F6D38106B8B144449C07D1358210F9176E1565 -72363CFBDE576BFDF99FA329DD1346E83F79E06CF68250CA57A68931BC7F342AD295D0CBA17AA95B -B8EEB53EA6E8E660B814E9F857CECB14F44A43288B69A9E7908D55BF19E844359879D28CAEF1C38A -36420185D20DFB32C2E002202800E8EF3D67C5D50E919657CA958B538D537D503444865331D79BFC -40312068D72364503BD0CC84B5F30A74D8B5B6A26AF2DB764564FB65A6BA8F9051AE2B4EA458D46A -4569F30C6E77DC097356770362E6CF3F1661074778EBB44FF7D1E3B64FF75E77E11FE525BB121C65 -46CFD13300CA1F02D571B82A5825E6226D14FDCF27F06D87452A8B6C5DCA658535CEE2A795E58137 -D48E566B69D53A0C3B766E84C51EAA221C46999CC8065ADB2F129D5B630FAB1814C0C33B5AEA0EFB -B6E994D80941B53079AF96D90A0B924F9B0E319BED9836B8F9053F868363D3CA554CBB181863301F -8CB940872ED5FA7BD18CE39218B5AD8AC57D0F752D941076B1C64D99BE0DB86D7A6D96510D772EB2 -4C587F11779BD21CFE5BDE1F29C1EF9022B2B8BCD7F91153C845906722477829C40111D810480F3C -F62DE8DBA7FD86CD236E656618CAF6FC46827FBC4898EA7672F8C9971AFE43E0E01EC8B77D4AF48C -BF1210E98C1DB15C16D149BFF58AB0270CF015B107A3A50F5DC8F37FFB92EEC8CB6778DDB7CE4AAB -C464C4AFF654223006A550EB52485A23D2B4AA7198D3CD54418102F1E9A4FBDE37B841E56F5C2C53 -966DB9B66B000E4588282E3FB80C2C519339F0002D2F83C979EDC5827A3B3C8EF8810A0F9DACB6B9 -998E9AF6551F56313DC4011904CB979AA2D32B11A811BC248141E4B9734D9FB7982A5671002D8279 -CAB93ABE057474628DEFC95D43890DB1ED34CFA8A20BDC3D874E7679A396158E522ED0AB969A4E3E -C7E4474E192590504D54DEB7B260B7935C4E56548A7D121AC1F741F8CDF259EA1B5813175A77A1D2 -D30BA26F65EB765A04C09ED51F69F41551ADF399E6AA2FC09788137BEA4913F17B8EB838C38FB272 -1FDCB55FD65697FF0B850E7D3D1CE266BF90F7EC06A9A0876BDFE767D3A918B092FC78C775F945CF -1F96E859C03DBF630D9A940939654C3549D8F7921CB94EE23D5A0535DE9DF31EA0F937F860B4F220 -A99ADDFC343D7CF7BFA0B803C12C26403F0DCFFC8EA786D0D8A8D9C367419CA8AE41190CE93A8086 -583A1E6C9D70B612C84D87D2EEAA71EC2DC12F4CDE6A821303D5F6A9BBDB7EEDCD289E80FA3B75F4 -7F481B50719DCF4A142069393593B9AF9CCEEAEC56A35B8787193D7C88113E9E1E221D151E093B01 -9EF89F6118BEC4735103CC8003CC5AD1B6727B3226CD44C497DA7052DD681695DBEC3397F9598C91 -77701C73BF0594CE93F23D50EC5BEE2FB9DA1FC966DF148B27B28EE3C89526DD6625E2887F9FA076 -7C127C609EE315626BC14D274FBEA56528DC06A27B2D476D46E9E7916590B156A5DF04A6CB15E362 -45D77021767B6E5BDFCC679670263FD891446C3371B11BB6E1DF60F960AAB4149D7753E6A5C33810 -C42C8BFF4E935003388506F8278BD7CB672F132E065AE684DCA0B9064D01DD620E7FFDFE04F14277 -EFE8E60159BA0FCA3FE2F28B902D4AC275D19F0AC6971EBE827C4A232D87650D2688345BCA78F879 -077114F0463C5F058107B669566F8171E4E284D278405580F04BFFC9902784216E0C9A17AA9B2935 -E66E18A783F723BE044389B7E9D62AA36818FF2EA406C3C1A9D2F3436F3EE7DB8BE86AFA8DAA6A4B -1B84611350D8D27605509612B515E16AA843164D5D0805E36A2B9EF74C5F6A0B9D59A04B55697123 -27F4B1B30E9587CD103337639967CBDC655AA46E80D2CFD24BEB50815B5338E522B3A7AFE8362AB4 -F05D8BC52BBA9C5089ADA8C89529B0275AF422EB540D31A938B8740860756325B966B36817115213 -FAAF92DE63F6BAE1E0064BFBC5588098B61EB83C71F1C2082436D37DAF1ACBE186FEDC4BE7C1233B -6F18BEC5F99002D21CB7864E4811F7AB3C03003E1E4490AD1AC793BD28FCD5EF0E6CC30EF39A08C5 -2F71939B0CEF620DC69E31E39D6DB969049031B0C92EF2DB653D97F370141456A52985076B268652 -FA2648C792780BAD637C4D7581FB2D62011D57E293719487CF2D1F013CFAA532E1C2D39178D51272 -A6AF041440BCA174B5CC902BD7390C7D3695056CB4BD7791F9FB6D88E7A70DEF2C97869F5DBC5BD8 -23C517C7B7C39D624DF627DC9653EA5347BFDA80B723F05F6DBB4C9EA501D862ACE05B9DBDF21B70 -56FBCD8C6D4B85873DCEE6166C8B5ADC0316CA12D9639F361B15A42F00E1D62EDBCA1111972FA0F4 -5758BECB31DB38316F3CDFE1B41748C93ED58B67E9B57ABBED5924A6D53E99FBC9A994A6489A8BDF -13EB685548B4DC6D62DA7426C22227D4D43B6FFC7B5EA91C896730253E8941AFEE588359C2BECF6F -FC415B9EB6D31CCB0F6C7F85853E6449FA6D627A97A3CE8303F148393ADCCCDFA2FE085C6908BE5C -3C05AF00A6F02840206C3253A559AC5C049BDDFD11AD9B118403B84DA10AE3C470CB9A9A2D1D7B73 -2F59F5FE146DEDA60AE750F551AAC934621B4470E1BC324C436303E25F81D0DC3188BE0D6FEC5414 -C20E4CB18952E12CB6423DF7124627ACDE145500D77A97A8BFD9CB50D1FAA008E2CE2B2505A4749F -1EBBB092C347023714055A9B63353AF9E7FEE05BB54C9843698101F79888A91531773830C2C967B5 -88D3ACD2192883D5CE3962D51084FC653EAE2C5FB2DA41DACEFB5C76812D2EDB5B109677289CD199 -8D457FB1023A19AC67295BBC1A9A20A426B06A368DF3C5DD083CB1180D287F5500F2C635EDE157EE -FCEEC5503447382D15C748C1E35F68753992E5C90F900DE54D18F8E1B355D1076ADFB1F3590135FA -D1A36F028E44F48ABB149B80CA9A54614D467F8D71CB310BBC7AC7100261092DB8C5BFD39E0AC6BC -2C9D6CBC3A8C05FF8A74CB21608EC4A4CFE4CBAA2D056DBA14206106044DECF59F957EF8A9CADE4C -9B19D8D30DD4FDE6A9548E50DB51ACA73330142153FC36B69C1C8D5B26D0C689B7040E81AC2C864F -D7C097C99BE5953843E172C97AB5684F35FB03A725A89DBF371F08DDF40A1531FC1B676DB0E1543A -EC6E97D3D2E4AA3D5831D8B3C952ABBFA112352814FB6FAB61A0D680E6640F6AEC8426200CF61286 -F7422CB2F78C61EBAA36D47EC16D7FAF8B4AF31D090CDFA255D9D7C61D46CFB22A7D6E1758E71ED5 -67E00CBD8E8F468DDFB477F091A2F915627F22FF47B876544BC1F03B6BBB98385F009C20BB1AA2A7 -A78674692B8EAC2E3C8069B79E679338DA57F72976810F845BEB6B9ADD32B95D78E5E60F16DD1668 -9C05FD82D36A3115BE8ED494A74DD211D58A2CDF983FCB9CDC29BF7F0E29988FA23560EDF514BC1D -183F3B2A22C09FB179B47E05ADEF48DF02F31C29875D1915037B19407764A4292FE44E741651A8E3 -BEB5F0D972B6327090F664417C84F84FFBF0AFFF8B1D85C822D90730AB4140C42A51AA8B1DBE4398 -4EA8566040EB8B341CCE23FD3F69DD235A080BA5C69AECB9BC732BC2D7D40617DDA6B79FB6EE40C3 -556C7DF9B23DAD89E94054B1345DB8402AE679FC4655A4A776C0150463F8DB2BFC0608EA1F124E22 -1DDAE6026B5E5D007A7E4A0D6B3B0CF3A2669E67C5E4F01551966A7BC48F2F4B6A87E740D8095E63 -F77C7A027F26B52F2299DE5B8A2F6209BCF3D31CB0235F998F781E5CC81E31DC424E008D46EC0920 -2951E5684804A0592EA47D6C788A20487BEA2EC8F2E6C1D7F378B62DB43CA43C4B366F8B4319631C -FE9854F0E10321CFA3B01C873584863BBEFC23C72C05E695B56E8A52E89AA2DAB543834D34DCAC5F -ED08DC51825C5257AE59850D101D84F4CAA1D29FC932F9E0EFFBF7A9A7F3685F61F0490CD3CC8988 -2DB52A757A6AF4C4E67B407BD2316B1C0FFE7DC54E43C87B874F57E4903334E2140B011484863CDC -ACA331175F2CF3D72E0042855983AAF8853D3015E870FF0807014C31D55060DF3FE1FCE157324481 -2744AB51322444632F9AFDA6706E320FFE82B8CBE242A19DF00CE73EE48E25FF49D5871BD3E60652 -298FE3E8D400609E232E0DDC794C0579ACEF89E841B2EDCA50D51151F65E8C1CC3B01EF1870558F0 -BF5743718C3E068617E81BFE120C6CA16E0924BFC2541177D53671CAA3AB641C41557DCDAE1A3461 -47B5E999C4541B08B4AFCBC187AFD653D5B5F8386DF6AD8FE69E21BD0567DF494F736C6A184FA4DE -48DC9F347787CA96E2E00A296C2DA05C2AD9BC423E9CA428D7F1FA12DC9353A302FB8C529AF8688C -BB543B45B2717EBF8F6C497935F4F3BFFD285E0402AB7544B3CA4643AE5A8B5250ED987A95FC1F27 -5B9707ACD0641BD0EE2AE9758494F8D8A51DCE408A38AC20EAF0852D72D84D0C6BE973326793AEB9 -55EAC6FE0A2813A355DCD22F6F2CE56588D1C055CDDFA98878BCEB6A018DB22922D2B600A20F8184 -2E665DF41013CA0947C4237C2BD60A75E2FD1A3FB8C8FA19485730B87461AD466ACB02DF8CA24091 -4FB090B3D2B41EB6B8FF05E1A59D9FD668AF70BA5BB72778953BA55FC5F9F626043450E1D09BC83D -8605098ABEF884639A37809A32565CBEFB3FF39EE53D6C18C58C272BB928E4410E361E59A50F242D -69747A032617C52DEBBF62364AB5A96EFAF642D9D82BA679B1D70FAC10A4EB62FA5CFC308E86368A -AAD7E75948F43598CD1C544A0D4091374D7E88D4522CBE902391641327E888E7748FA889DCE67ADE -61699E7D77763681CAEE9B1CA8837B2F7EF9C18CBCC538C465C8E2DD34616953CCB6030A222C728B -834911C1A179E2C770289407AB28B303E724D97F747D6134B425216A64C6E0B60F633E2B85300047 -E4C90339CE030A0FAE31E830C8ABA5AB3386A3B69267351A7BFDD66356AE5E57FB2994452993E90D -E7C4E260ABAB93C37831856A650D56E44172FECA01D6C7C380F250B82473960D2A2A5FB6B4DA668F -46E624ACF7FA0FD4490F485D640A3ADFC9F8652E7A38CE5799F770C3606DB4B8B947F93967F779E3 -A3C0572F13A5A187D31D7BD12A5C7BE23CB6ED6192086241B76C5BA6983DB9C93E4B208D707D3760 -F03CD6272EF3A4CE89B8E52E6AC5871A3D03EB975759AB4BE239E5EC7842CBB333E692CC607C722E -185D3C39164DD320C6945629C70FF66A5237C0A9520A1FAD6EB9816069351AB0F135D90CC0982B14 -7D2294AE4A38A527EE40BE9CDE2512AAEBB590E134388BB171D0956A7C4566D65A9A041BE6C4F883 -6B3EC3D2ED1B48B566A783292B15B6127920D247D494F070BB20BEFF60640B11B276DDEEE49706E8 -B2B21BB40B7F00AAFC594C492C25DCA774E0B80D82E927448DE2E74A9D0DC7AC9260096EAF187B6C -D6AEAA6D1DC4205B4411122751A5B22688404EA7C5861730371FFAC10F5AFD4727A0E402AB5EA757 -606B75EB86A05E8F774D6E430A1A3FE2A37EBB06700474239FB1CFA05EE44B91B82244C575B52E7F -AF934B04EEB0D933FEB57EBE326D75821C8B23EAA85B583AED4320B7F04B9F2DC591091216FDE52E -064BAAA9C2C9D9714B95A4558C21F3CEBE624B5403B31508F178581AF6863083ED762F1E2E34A45C -FDD71660D626FF8648F5D6C5E580D4765A67FB6159EC8077A9F0A88038C8D3D7C77FF0926E2123BE -874F7BCAF129D55A5B5960F824BD1728ABCFCC51D23936DE9A25C408D786E44C3A2BAFA4423177AD -060D21D38E15E23EB6FFC0B4120E814695D423EEFC2744A1FC81B4DF89D76F0A6803D8B14E75538C -AAD03A72517B86514F6952F6FD619D9E910D980F00964DB325318C045BDF79647F453D4A5CF4E61D -D5359782827229310405FBCF6107C3AD9DDEF9A9A339D5D5A6EB2E7838A0A43221BD62CBDF732DB0 -A638A52016FB35BA7761AEC846A023D3BF2D1BB183543E81EB7CAC1E5970CDC6F068C5EA118C7AAE -528D1396E6DC939112DA4460C890EAD5C01BDC438F5BB734218BA6270ADD0DC1778FD8AB16831D6A -302B814A1A44B07EDC65956C9E6CF4875DF521F3CE5B422F71081B6D69BD270F739095C9E81C0377 -934A8BC6390C420C4E4CDD9CF7E32544C68D884E15ACA3BCC07FC8C132D8FB9D752C15D75C52C288 -57E2EA461A6FCAD90C56843513F74461F18D7164BC597A28AE4BA7C86EE1703535A9B9ED50122627 -71FC12F102E800E0E1AF7BB46681BD2B14B614CEA91B7B2AAA35235DE76C0E113C92688F8EC81277 -D58C3406778E1EC1CC15F1CD9A137C8FFDAAB99ACE3BFC782916F1A877170589A92DC921E6740A22 -B84DC6BACDABCC76E64C79E3A588D80F8F4D376E1B426F15751CF7391102102F0AFAFD8B22DFDEB5 -48AEB5F30B1673023D22054A13391A0EC08DE6E7B685A0D031AABF20B7C62187C0284892D5EAADF1 -21BA28263EB863D5E36EA9C06A77CCFC0E17F593961591F84D82AF823EFE41044C8D606FEF83CCC7 -B0E961E7994DF8A3CC36B209D953E250ADAB8D22D7F2B4E2C9CA39EFA2D93E56195C1560E30A5190 -CC5B17FAEFCF250DF79F6B624A4B917E11C332222FCCFEC4F6A47BD9E75DA9854FC3F7AE554E91ED -DE144D7AEF38A0E3EDB5E5A5626374DB94F022C8CF549093041DE00D7269B7CE544E748439BA2870 -718C08E58FB4A77D93EBC04B7957D272AE1601D41BF85A2BADAA0DF73B0D3841D4839C85677FB2E1 -5F1D6CE592669FF4BBC9C69DBA334DC37706F2F6BE83D5863E8CD6A30C08640AAC4C233684E66B4F -E6B62D4A8BE9D531E47BEF5640D9B5C27D990092BE1597F6995C8A77BE9C18AAE6C1CF130775DDAC -41D34438FC7AD8E042CB56CBF2944932EBA7D053E9376FF398367450E35A1945FE23E05C921096A1 -5454721FFD0F429A3E06DC3ED36F1C170BE79C66996EF8337AFF85B90C5D3A4A94455AE9FA32E211 -7A63E59001F052D5F6223125BFAFA40901E98960ADF7BB886729DCA82FC3B8CC52B37FF2517299E1 -D769057F8154FB95582F02CB0BECC873A9C71796ADBD3E91324FAA94F2C41CF57C30B5897D031C02 -D256C909E080E70BFD1F32E69EF67031138C2DDCD1A8E4B65E485C23C3E450ABDD9815512D6F34A8 -4B9DB715DB2C7A93BFB424316E1AA44397749CB01088428F149A3B4324737ED9957FD388248462AC -1B2610D72BF5C073ECA567E7385CC959E37CAC7E05470160FFA5A9F63B8E9B082937E911586EA165 -374938F492EDF28CE6020953A5B5CCEC7737F9D9CC8538C4339567AAED3794ABA3B9F4EAE65466E8 -E326F6C399B36355935FBDCB9972F10B13494DC25097FCEC5A6398F275C8C151558E74C5175F7BAF -4155E36B733F75CF9D5C5979B0764F14D8306E06BA24BF791141E404C69F3F8FCCD91B9C58C2C671 -AAE7D4F9E5D6414E46ED633A5F78AA5BF04E652246A066EAD9E582B181CC196EA2D3CFAA383B5D0E -4CAC9336E119C08CC6AC55CBFBAE147C623B400453BBF447E96DE036FC025624384359EED7C7D5F7 -858DC0521377CF647A157FC3F188DE5EEF094DBA125510FDE34C570D7BE76AB5DF0A28BF45DDAADB -EA7EEEDB936332DFE93081E0AFD3FDD46BED08D6914B2EFCFDC41662A33B90B03D76D34F48D30FC6 -BBBB600E90E6AC7243FDF026762A44B4D6E4ECBEF48C9D7B696AF29EEE063E557D8FCF0F09E0136F -45D17E608DA36E59F2AECF8493F8D62536119B5F7E1554DFE3F6E8D7C9A2C6F557D18B4AF92C9F6E -050975C3B5C54F9B5F4E39D600B6FA2CD6DE203A174028CBB2A201AF126D1013C229BB82CFD013ED -199D01E51EE2780FE896E01C63C655087A3E61A7F1029FA5E97EA1872F1B45F22282DDC317E17926 -7368CB52DA9444F6055A3C653659CAD2A1D8712BC2B1B32C1DC6906D957FB88524EE066156ED6BDE -B8D832F9338F9912E29A250A8C4674E667C1C278B677AEC9972BE83CBA3FB779893FCB8F81A323AC -91474BA2A2334A07BB5628E905C518E634F6761A3289056F83D5DD7B3890987EEE1C18FB2D379CC1 -905F1AEB3B3D2AD578F0D6C845D2D40C4BCEE3F71C90E68E5417BB8CDDD878D83BA80AD8485F4067 -E5C3CABF28AB56CBB219C0AAB8FFC6C7E192BEC8CBCA1459AE4450AFCC81B9548F40CE2622E5A7C2 -81F74DCC02DAD57EFD92D072318DDF05BF42F1EA8163071E23949B0179CF7DE64677CA99B23CB926 -B3E294194EC13397EA1DC9A5E1CDCD828156CD71F81B64167D4FB01E6002713BD8AC6F82B20CD369 -9C6CA4704DC5C65A2D66EB155B7AF1C9BB46469416FB49C1C7E17A30A5F045271D7DF3FFF2F42C6B -470701C381E3456A500C6BB3D0E47B4D91C5F34B49BB6272F1F8698B307D89EDA3A1565DAD1C0864 -627560CF922DCF5B34C67860352390B282F95394AA2CDE0E97CE3ED39546A6AF1C52BFCF81A29BE8 -2C47C99E8050E4889E4575B75F39E662F2DB7420673797E2ED3D67CDA7AE2C15D0A0A794D57D168E -BE13214E89E0209AB2C0EB7784E9491AEFA3C02D0DF3AE5365A0FC4AE023CAB528162C7A1B173664 -9DFADDACA8DA5FA18B7D6489E4229E9E24D38A620464A744A5C60F6F9D334B908706B738AED18669 -8A8B278341FA4D65A0A88680BA484694921512F7DE93337FC1C02BBE6E64AF2DAD07603279D87329 -1D1F4D39C1DD6D89C90F65240F4808F6F1115CA55B88E242565E59F3BBF1F10EC7B88872E9AE61D4 -4CAE185463EDFAF7DF63DE4D2207D307AFB61501892965170D2945846FCF5973A1D458607F50C15E -06E5BEC715E0C156259AAA6C735593E5564F65F443B78CC7512EC35A56F126DF9D30974A40872E42 -65E1AE5FD483CFCBBBA26DEE426CDC4721F19C3FDA86ED7AD4FA1120F63669BEFE7002B128CEAFD8 -C63E8AC09943B6CBDFB3D2476A026C00A8FF81B1F651B97F310C82ABA5F388CC1DB5AFCFF5996D52 -52A6A42FA4D972E41EE56088F78CB966F9051171C472C774879AECFFF08BFD9CEA40D7C298922ACE -64F28C14E0B81F4DCADE81D71DE3983D87D905192EF13CEE71B2D3FF1A88AEC671EC318917DF98A3 -C9054E372D22A3CEC82FCC217F47319A40900312F6E32B536B9E7A7FA0837EC65CCDB5FB0D414371 -17596CB39D9382262DE6E65379D3A9709B2CFBABF5FC5D5B352425F06F88CD31012A2A4147B112F0 -C1C0ACCC808CD625E0228EEF66661F70AF96D3DCFECD402700E4F6522AC9A856DA466D55C84F65BE -2810A1565163872D62EB81333A698ED7B68352CACCA2D7AD38AB55C19E4F5582F75818302F5FDADF -1DCED09D94872F2D48FB636C8E38C7563C72C771A08C6B1F041F3532BDB39006C89A33C09BE1E3E6 -03622D891F98010BF1DE5355F557A1E09448D486ADEF565705277B31B8BF2B86761E32631E3435B6 -88B79D566F1747BA456DDB43CD239FB47FF7B425EAA4C657C8EEC26EE01AED07CF916E77D53634C1 -37AEEA009C6B515B6342C54BE2C7B95955B1A9DA277A0ABCDA2346E88018C726F481F71D6011AA42 -F8852F2E5749518FE3B3AB668213FE1A05C10A1C53953D75312631D6BBBA01D418199DFEFF8CF548 -6109B099FE8E2F606165FE30F532C03567785D5362AA873C9D3EECEB20F1945D55F49B0CCAC84967 -59FCC7292E46938943C262D78F3212D3F9D0F7B103157F423D71B1ED54B2A603F4C269029918F238 -EC6828FFCEC66009DB9C9E59534EABB183F31D7AD4C57B1BDF0BD2CE5A421882BC10CC1BCE6A970E -2B586BB221567CCA483989DD0B8DEC424C1D1FF042DCB7834423CF244EDA28D2D969B17440CAEAF0 -24A6119DB010CE366821AFA424D1B8299609C04148275AE6E5257A7ACB3C766C747CE99CBA2D703C -F19B7CF301B634D8B613DDC4AFE4633A4D77BFF8E00CFB5E289EBBCAC90A24307E7941EC1685CBAE -400CADD876FCEF7F6557EEE167D2035A05120293527700DC510B038A496BE1D5CBAEF24ED39F7421 -1A93AADF22214ED606A80582485AFE358E3A46D0671148998A3B3BE209467009B43400870359D418 -9A8CEB4D5866AB52D16D9CEB1EAB71C07E6CAA34B70E3096BF7604C22C40D5FBFEEA616DA3BABD59 -DCDB97D883FC8742B8267A16A99B7953225F7144568D566E64542C92E538AC140C851E5D295528EB -7CBB49909B1CAF6409C9BCCEB325468FA0B5F7CB2987382616B477CCFE4F4AC79E4A6F7165363543 -F04DE5B6F6E1C2E910CDC3CDD6C4C92737198F892337DCB6647BD226C820AC99C65D8E7772BBB74F -E65DCAA8A22C33BC168BF48E40A82700A3A7668C5A9A71E397ACDFEE7D556C5C19467B7AA69C260B -727407AC837BDB7D67DEC055C1F45D8BAC61048C45BC9FB3CEFE7549EAA2992D2EDC126FF7A05EAE -58613332A2BC1465B2BC0429162B907D65F793D236EDDD8D35405866D71B25F62DC4A7E06D4DEE82 -840ACCAABC0774F8A63E9C0F7FC980B3583E7A8B01C46590E3BC04EBA565C2EA94F057D964A78A90 -EA9F52ABFD70F84E44E434BD10A42E98C794065724341F907E35D3CB257161E01C7084E3A0166D15 -CED65DA7BA87DBB2EA33D39BD99AFB93D3548358D08330E807F8552CECF63C84F805205491BA3A1A -622E70C232FADF3BF2DCFD6F0539158D3306506F150B0518371912A25EB96163D73E9EEED42EDC84 -D688BC7F7708D9DCA348FAB4DF62E5809BD094842D0A31DBB7C4B41F94D946810C5EC10B69AABC2C -91A59500B2E5D37F4755DDFB7AE4ABF757F4C5BCF77C7F95E6A616646456FE8F18407080BCABBFA5 -7704287AD26222DF91AB2613951E2D679472F8ADF06EA2A20205EC19972299A78BAC52114334470C -5F5890C2F846B4C6042D73945127F2E3910ECA1C4CD7A16EFE4B4BE38A15AAA710682C3836A8CA83 -FD384970139D8B46FB0AEBB002DD224199672FFA02250FBCFA4E649E335428FC71F50F45E498419E -DB0E970F46894A48F65580881C9C4250FCEF65C9B28699408E18B26FE6DB7F1CBDB767564E73CB59 -54C6D639CE33220C894F36E70F71C9F9AA3FE2AE0AA0E3F2E304EC5ABC661675CDE2E70519E4220A -E26FBACBD01D5169EB844750753E6CED53E3678FDCD08AB93E10067E9C64F38B40B76D99B6CD92BD -F4155A1EA5CC824998B59AAD06E09E5F15EBB2288D66EA71B296616734FEF2796F07FF0D8B047074 -A1111D68B99C2B70FC56E74A51B062F4998ACC85B1943C9477E436E5CD7AB18DBC898D21BB93475A -623BDDA71D7B895BA2D4C10F4B90BF335126F4FD57D73AFA50170F6B3C364922E551D40E35DA75FA -891762FA23401D39260F2E92C7807C746F13BB35CEF9DBF2E76E66A72FEFF095DA482A4DE8A42091 -7065736CF4DE904FB52E649A32255E2030A7B31B686353492F31C064A3C4B0448C4BFD44B8E15384 -FD809B8761EE26A7DFA1758D57CE4F0BC376EB2B3833534B15A83436BA553955ACB5A7A66796AC5B -92DB5388BC53EFA27508B08E82821E5CF669BCE52BB860780F749B4F38ACDF5FF12726BF3EC2743F -01014CDE96FE6B4C40A034E9EAFCA2A35CCC776C2669E6AD138070A40F48ED79136D7FF57E993E09 -B81C543FBADD350FF5B5F7A46F060F88E30FE2D8233832D18B6C323EE017EBC1DF5C838321CDC8A8 -4CABCAB20B60A1A3AA028F36EA6E87C850AF8AF7CD50AA6359038BFA8818821D02CEE8F51DAB8C05 -F7AE9797814D97F3DB8CCDDE45B21DBB15CEE292FAA534A5F317B357F4091F3DA357325B8B9F5EDB -45865415973C143E5E5BAA483FBF2D06CDD4246675EC58B84C6AE65CA743117FF00F229243772561 -31A7F2BA26A9115AFD96C18216CFDF41B7220ED0CB3FCC26C36380007B382A02AEAE428887DC8BE5 -FDD630AC57EE3DC156C7B8B29E687F24442E35CE10BA4087295A641F7139C831F7CCDA6CCEB5DAFE -537CC1A97C5A337D3C48A6AE947F58A30DC08CC7B58DBBB4737AD52783C573FC1E9408F55495A80E -7FDA61F0B9C4F090158F1A416249EBBA936C27BEFDEF19D1BFB839EB70576A010706D8B95657B218 -9C2AE04C11EF9E57FE09880273761FB4302C388BD608FA0C7F00F033C9C00F4E3D5CE2D903E0DA52 -E69C7745EE9FA75E2AD93DC6CB5CCFCD3782A699B807AFC36AD1F62B05856D5DFD6F88831B90EB3D -CD523582A49732E3FD7253126D39E8AFB8458B5F7AD7F94A8DAC13365F433C857AF4A42C0A08C4DB -9887C4957259ED22D13CFDF5995DA957EA5A0F620B0214FBFE08AB6D552DBF048D62CEF6EFF12F15 -3511ECA7833E0E3E95F85E6AC0F95438AC4C126E1F1ECF336ED31CCA7EB216D279877123FD9FCD8F -B5E52B587CFFC4428456DDCA816819A8A4A211D8F1629E5D42BA4C5C356E580C8A22C61D987552FA -A97893816DA73D423686E4EBD44375C257F031318865A20F22115E72BF1EB9F93AAA169C140A33A0 -6C35BD4526A38BE79CF40AD1EFA10411E8F3300A8A8B97AB140EE6734E1BEE6C8EE443D698D34159 -97649C6F10F20ACD80236422E215E146D744A262DA3FC88DC0D86FF66512F49D3F957D3C5CFFEB42 -4823509F33F155057A4C6F37B52F4667767BA94F6B8B62856B553F307E5D230C44CBFDC9A97A45B1 -39FFB2F2565EB0E22026972FAD0FB7B9576FB6F368B61979943A398773600E7EE1DFEFBF26D45D40 -BDA66EBB96A56EE9CAE0B2420C5DD83E24DBA9FF885BB844BF3D2BF93B07325DFF60C0CB5FDCCA0A -C8FB5A2E119D5AF26E53AB8E3B428481C2871DDA26EF0B621CD8572B3C664BC7AAC01A1D05B98F79 -1A7080D294BE81099BDA7982432F3DFF4775C44D23F4F1B2E0162B61A8B2CB5EE8564BF98E2ED403 -2219085FE6194C19DAC98A421826CAED7F1AB1477AB327506010217283894235D7DBFC1153D5ECC4 -8AA7293F19592B4D7E95FE55151889BCD1D7FA7DC2370D2DFE11D7E4EA34B5C7A8E73BD3A348FD38 -9EF45B6167FB90BA44C23E912F9A4F2FC0427ED070592F7110183BFDB2C400393BA7569058227926 -351F07FED4F33633BA03A72AA2DC6B598E49B96021DD868DAD0F352E5722FB714F667C15C68D49C0 -3D822D82677EDFE86FE9668E537DA284068C9B0AED83074C92A5B939296D505B837E6A9DDAB1AEAB -7455A08A114C2222B339284674B74BF4CA9EE0C020BF2A148B439C71C6BE51A94CB64FBE4A7EB295 -5A455047CF5CB348B062ED4F6471CBC3E9ADD9BE9B96879AC7BC71BCE02FD02F17C6063985A5E898 -3D205AA1489DA13C408990ABA1C54F2F501AA172F530480D789C848118C0A74EF98D5F607A067BAF -F6030D887AC6A6497F9A0B38F9705F328AAD4BFBB634F739386177B07F22D5771282444E5EE17335 -B4D0EC86117C697E79A5F4F65FDC08E4904DAEDAB20067EAE2448FD4301849E456D085F392DD1316 -7ADF75CCFDB723E2904A9C0C976D6B84DDEF9D92B0E15FB246C3ECC2D0BF314CFB957757B3A3E8E5 -801F520644E4601D291DA0F7507C06F3B9BB36FC1C70EAA444E14E56C0CFF06C7F853DF36DA9D8B6 -AF2544B853DFFF535A7E5C6FC145250CDDA229956019659D0D253A19A7B51A4E538BDC01F74D7704 -9949C2C97C7EC6392C2E61CCC0992B66DAF1AB08551063E53180D2A67DE496716CCBAA45462D9F91 -B66A22545962DDAB120511FF08627131B95E5DEEB8B4DD9643E7B2AF65C0FDCE11F5F1E8DD468DA1 -8D41C8C4F00EA73836F4F70EC50FC3EC6D358C0658A4261C6D15A582A2C7C994E7882E661855B352 -014576858A265FFBC425160669CE159D07EDAC04D060B44E5800A7AAE8E339C29B929AA81D2F515C -46229D2080D5917AB20AB6B34FDCA8E4AF64ED660A3173786FB1A1D005D575C2A5187D3F7CFDC94C -CC44A38C5CD523E9DA726D8EFA6DA7B6131DFF3435FEE838B2C7D6B97934295F06202D307FF78D90 -6699CB9C5BBB10D1D4DEA5FDA5BFB094E704607083B646D37F5DA1FC7AD21B813F44D8C1AFEAB666 -55AAA19703BEA2E77DF3BF350E17C74B3447A452235919452B5175570A006C7680AC05E8950A62E1 -1D7E3ACA35A397D1E19630D094A86807593C97F4C484E4E06BCFF708B6DCA972E3A0009E1CAC0EA4 -141530F5C1B8AEF5E1B933F37FDDBC4BE22B74FE346D1A3F5FEC0818F8E61765568A2AC04713E828 -F98C449D9A1CCE52D10D61DD8BFD084C8D099A75D89DEA64D5A7CC68BD5B0593D97953DADA976383 -F5015915618AEC56D71D1DCD55B89736395C609B315A3F1E1255432FDBD37F38CC43C354FB4B7C44 -F1A7318B0B7E99C3C08C33B953727B6A6328051783A0A33E3CD9E498346A3CA6A77B517096EDD52A -E443B87643A646C3A7BB97F742888D33F9B3127E61942F4103C1DBDCD8EAC8F9E259773066736CA6 -53CE57E8822651261D847C131321BB9D6626A1AC50D047C0BA47B411DF2A995545BD68EC0287CC9B -31D5DDCA8755EBEB10ACCB3903AB0FD5788E984220443B8459E7C078DA4289F1350905881AD6DFDE -C47302B0ACB0D4AF8CAED02B4B70DF3CF8FEC118F0FC2D3DDE3E494CD160E676E300BC464BD4400D -B50EE43B314E0517037BF971ACD7CD327CB2134893B8A0410E68DDC518F5DEC966C7884CF5FDFE74 -723177F20DEDC039D879056CAAB4BF045062D3904F615C5CFE109AC7A35599C94024B41019B9AFD4 -04A80ACAA4837929F5C9317680A13D157A03B59A5588DF79D2E113F5F51021D6F6F90E8BBBA2C252 -FD10651BE80BAFD59C53A3367BA3C28DB6EB9DABF1EA99F47B503F627E15DCF3FD645FC52C5D5D0F -2F07DB4C25C0D1E1C00146E1C4D973E613CCDBD3F9450CC0F5343D79F05E9492E86A1BB889ADF405 -03BD7F3E7543436859184A5B20BD8A172F350D846B7570803990ADAA48D4B9155A2B4C4BFBEF1E1A -065C08E03928559735BDD442FF1E83E1FA20A5DA57D8BDB2FF5427C034CF0128AF111E6E73099E04 -6E0C240E80A73D7BE72B87834E45898D475521CA3306707631F5C6136199F354632D1A085F12A1C7 -C473868B62E534D15F5484323E63D0574196A19EF175214EB35A90873EFCFB92D6CF68761D45E37E -AA61E1A1979A82009507CA193E44B36A806486665CEDBCF387053ACEAB979BD35D30978FC7659ABB -E844F4ECAB3303318ECE80777A5FA5A9DD91B3D06804C4B4E9B4EFCF07EB89866D0DD8CA390CFD15 -98651417114D78776B1A1D36B4BA17746D6BE7FC123D473EF1EFED1C3BC1D555F914536869FD5B0C -35F9C83F65B0E6BF7A627B9202D787D72C600DDB6BCCE613D88492E13CA0AAAB196E8A49928C62CE -A4FFE2D0208EDA334ACF47F20BD793124D2C5546C03F4A364369A76A0425262F9D9118AF54E37D32 -E33AB25DD533A49DF5FBF1BAF4CEAC2D9D378CDCD13B00FDA432D9042F623DA41AFB80699B5538A2 -5403B0B3EABEC9E8EFCF42FEF3EA9F91766902CD206B0787C187D5370B60AD6DCD002DE2DE8DCDC0 -B4719A797C5E26BAA67665016DA0D967FA1346F9588AEDA174CA001B31213617FE19EA218EC23597 -79D979E2663166489C06993230B0D07973A117C4E3F4A4C93CF8428248DD5389414D679C69644142 -67C7FEA17E35B0CEE456667A9B1875C81B2302BDDEA2818D6019FC1622A82051F60584ABC904CD91 -8676305DC03FFBCC64FDDAC8D8AA9CE2EA00D6C97BC63C8A617DEDFC0E40775649438E9F61AFD179 -5E3B20560B01BE5E0983F136CF48AB206954E41DEE0D9DDD953DFD01CAEB569151D6BC0DFEF29D70 -FAE3E198E7EDD8922C0E0BCB8BCCF1C016142C1A8B337AFA7A05A9D7534B184BF3BF827F371E9BD1 -9A71244ECA1BA73D484CD2FAD54DB2F0EEFBD54B536EBCB5094E6BC2F5B2AAE41F05B4B311115876 -ED42C34F8E643B53372E3F6350DB8A38445822EA9A33E27FB0CC42CEDCD1FE2FDF723FC47C996EE3 -56C402112F24D0AF899B2D00BEA1CFD427998BD22B2A09046D6737814448ACFB10D387547D7009FB -384AF0562C85694C071584236D0F1F3D3FCD0CFB38B77C81889061E668BA7AB37AA60F58A3967DE2 -6F939B79CBF10A9DCC42852561D8D6754F1B660D216AAB1E133FBAA321C56E2584BE5C9BAE20CCF0 -0E8DBE6D9C2FCEBEBAD945C3C04101D2387351F132628786F6D9D4CAB83419288D31F9BC600D9664 -12E6AA457CE6CAD26A4C0671097B98C2384C81DD8B9A3222D4F4BBDA7017895C3EDC26662779AEE7 -40D9D7E24185FB821970B0A3A94041A69E4805EC88EE1EE521981536F2844FB8F5EF645F67D42CE5 -148E2DDE43AD5AEF200EDB3A2C7866C98458A92666E5F9E070178BCC39F65A893102A10564AF4E8C -AAA5075D2F8CD7FAB0401C03AF299EA3515CC93066744EB5AF7CF0ED06675BF049A6E3C211A89E16 -DE5BF0445A7CCA6EE8EB0347454950485D884606651E5887FE8B24323E2AA16DE22FC1FC8C4F06A8 -2A1FDE5758976024068197E1F4506E4D3D8A16D40461A4586338B374A592DC60334402F76388AD6A -457DC3F54E6169CF7AE3959676E966A45609621055EC3AF80E182633300A4418E34A66DDFA6B569E -5A13C9115B5FD3EC1CEBE50FBA247F60803AA83976F00117536342DC3D9890C49B2AC701D370E43A -955118967827760F7091469C5406F08F18D7E3548148CF0E312B1DC71DF67A5E7A1656CF2F47F3AF -F3DD50FFC2FCDAB7177285B29C17CA43019F62AC6FBA52D1493ED7C427526470ACC8389BAE827759 -4958908F517B2863B83292EB5AB3F57FFFB08393CA610FB1FE905D88A0A16AC395E2A2A6DD033D6A -0D68992F830B2E1B95FE357BF672716E88FFB92FFC3D62945D1EAD22BC68C51EE0E10A43011DB94C -44685A5C4576F6EF44CBFB45F2A4BF110A01657DB51FD499767E78058199B31DFD60813F1A344F86 -289F9378231D5B151C92385E3650B4FEB1DC91018EAB8474CBF69FDC1496A4D078D2C351C8196451 -247A9DCF8117E5B637371D8E22E248C64D999015C3FD2311E9950B8EE0922FBDD3D7BFF766BFE9E7 -CE0BE12F318FF2A7B5A9C6D00A54401609304ED2C55F5C1EAC3D4B38355BBD85D66D61636FA6E30C -2E82829376BEC979A6FEEE040E452359768ECF90CC539A546F17AE906C76F14F86FF697797322B05 -1EB311A759FE260C1EEE5DACF383816AAF1294CFFA7BF87A4D9BC595EE8F2C2F86FEEE11AD959D86 -F22FDAF4CEC098942A57E57813A0FA99239E994FFF353C1E781D666B8928CFC648FCF0869FC68468 -BDBDA7D280DFAB8B0B3A4CA35B074B686DE8D372C61FB32305169A1A9912F6541DA16CD6316A6EA4 -51524757BE5CF6E820011BE3859FB8B8578C100FF029680E05F0E0BF11D33FE19460C85EA5E4C0EF -28E29407C8AE6BE01CFA0D5022BF9FB01416FFF722A784DFC8FCE330EC95737A854471D334FDC58F -AB42867A7B62836A8B56466E9A6C1247D46EBAFFB905CD4321970F59FB8D6FF65FDDD34BF913AD32 -2E68455C5FF2D23C1A5EAE687F259BC982B6A384D35440F7C693CF50B9ECAC0B5578CAEE87588B56 -2EB6B7F42034C9F2E545EC866316552354EB3728C7D26527ED75174EAF635E048B08DC5D23E88981 -070AD5641A652F2344956E9CF4C16E652A99F4A644D1787D6D36537489DA4D74E61B2FC4DFDF1D1D -9D58F9C26C5EB63200526AFD168AC57D5611ADE4D4A382FC28BB60F9E7D626A6C67AFBCCD1183C5E -3CF2EF210D0BF5CFA7BB10FA3887BDD4CD96EEEAA8F9219AA2F10ABC0A960C3B57C0EC0313AE10CC -FF1F522124CFC8D2D49BFBB0C193EAFFC5B48FB3FF30B21CB76F0A4C0F1377C9223145BB0468A5D7 -1B9BC25873EA12E1C60334571C67385C00D0B570D3FFC6C7FF0DE62C183C76AEEB12DFFEE1459E0F -C818C621B8D12FA1357E2B55D48935D70BF140B4CFFE8813DEFD479350B20DC2EB1D3CBB1A2D3DC6 -EE975D58C89D61FC50E6A0197DA9A586B72255023DE47DABEFB11E8AA02414C2FF6258A281219B9D -DDFE41BA7D7977D0D6F18224FE22F7D4E9355FDB35BF7ED3418F4F68D093AC48F7D8FE4194FEB6C8 -0B9DC1F74E023C604DEA27089F98C3973FF9F4AD7BF7BAE601DB89B08D5D8139B95EDCF6C885FFA8 -B3E4B0477E7040225733826BACFD1EC4A0DD72DC41734856AB9FB700DF83CA2CE812913BD142D84C -5C83C0B2583768198AF9E885F2BA74877A414233207234AA5F18840557CA11682AABDE8993533887 -7C6D404BDE4153C9827EB16D66C1D73A8143C8A2D3604FF72CE579FAA3C5224BAC48EA83BA848429 -9472007DE96466B5B29ACC7C03B05DCAA38A48BFF9F214DE43146AE4E04FA705421917F99BC54533 -F0EBC01849E396216B9F0794E6F6C6B61B52EF1B1950C0FB609895C3C55FF574163FC8B6B09E66AB -AED1810E698FF37CC1F926B2CDA3B48C7D77790EBD2D514B6F385D397F713EC3AD3954EA9C846158 -6031D369E8B99E53408A79D64C34EB5A56DE8A67DE91837960E98A66FC04DFA0EBDE21DB003234BB -78665B039D0A469A0221BD541AF7149A2A659C300132C14581EF766FFFBECBA8B58A5EB3F95446DE -F49AF863A8113D17B2E7E6ECDEAFC3834D4DF900E3475596E86FBB4E2974C090DB4AD61A737D611D -92B4535AC291C56AD8B1C031D2F9B505BB77517B737D70AB3723DB52AE2ACCD5DD2F617423ED3CC3 -9CA882EF41757BF7151806A9B8B0F312808863E3673FB54DE939B35CDECA7FBC4DC3BDF5A5F47D35 -E345916C39366C8B4F439CE1C6F1835C320BD1E67375B03B5DE18C93256F251761A4C8CEC01019C0 -68E34447BCC503B9571FE8000627A6B3DAD5854CBC0A2D69E5A8F46BC78F6A7B1422334EC7A98ABE -FE9B83E01DCF3C6C9273B346F3240EA225AE4A4083CC7B0EA141A0773FDE940768358EB4B13D82AA -304A1386D450C1C0C6A7D5A8FD2BD313F78F85248B5196241E31E5595F3BC01F37700A2DD3D4A0EE -2DD01A36569CD507130E8F5B1E96CB560BB7DA15560CCADF3B2C9804A11D9E8055C9EC70E48C1D21 -3EB756A1376F2EDCB7189D78CD3D6CA5865537EEC31C17D801605EFD860B0B629472690588D02575 -02C6F7A75B9A1C1B397781329832CF3EC43C09F1559CD562C48FA9500295CD3B0A790DD3FCD4684A -7C7AC49AC9BFFF36B39A9FB148BC28D37907433943CBBF0CBDAB46D3EA86DC8F81C859C52D15302B -94A9B51C199B7104DEEC9D769C2634CECF8B700CE9C04152CC59C9326BDACBEC4312DEED92DD087A -1C4840868D9F97CAC046581F762F75E8D24D6445370A3F1E0AE74A6478D9DAC37E7FA5BEBEC0A1E0 -81AF89C1BBF7F51E3E2E22C8C405E8671BA85F1BF0DF79A465DAC7EC07F731E00632E017D190A99D -83E27E5C2E63D7DABBA23B2E88334C63721AC5A4CBC5D45F4C177259F34C2EADE01FA008AF65EBC6 -01D8DD16436D86AA94C99F3CC0A2F87134E73BF22F108B825A8963B49C6C685474AFE4A542C8641D -C0375D7EFE9AC1168D9700459BE52D0DA399023E141969F25C0DAC4668534B6647EC85454BE945E8 -26B26DE6E3C4584B97A38E2B40A0D23481BCA78084FE80E00A71A790BF31DF468A435ECC88E60A57 -860BBCA3D65930186E9917CBD209C230E8F8255A7ABC7D3F043AE4D7AD63D9980BEDF062B7D5C298 -C40225B6D03F29A0339E0FCA02138E526F06B9EF47F5E7A8068A846CFDE2BFDEBD24F5A73A66C079 -18662AEC80B43246284FA4E2EE0D9AAB172B1E59A6CC46B801149D8C0DF6DEC9A55D8E1B0EFD9D30 -2FF618075944CCCB6831D336B11617107B0530D09885E5CA11A5F1FCC8D69D603DA16BEA51116D42 -CAB1AA1E4D7B9B4D79993F2BFE53EAC904FEB70B2D330A89780EAC10D12CC0C35B8399F218AC2976 -E57A26BAD20CE2FA2AE2363D3FD2A8A971747556F2959DA74A8963C20B504711AE1CB0D0C02457FF -2E9BF696B159AF031DD5155F21C0F5549B0471A3C5DC8918B675CEBCB23E29322B959ABC05283A70 -2E878DE8EF25EA760F3C5C7B7B49D398283DE2ED837FD59F7C22D62C58FE4448B1049FDEBFC8787E -67D7DAFE9774979BB3802254DA59BCC0219F98C219F84D995CA768B8B5D9D4A32525DFECE003675E -E4BD5D8DFFC11025AF2B468F9207B5B2B42349B98232BAC0759758C1F4A283405815BD7145C93FA0 -8F3ED2826655053A3C2559073D8ACD199DEA2C5BA5F616A2E48548B4370EC73493BA07E197165DCA -774438B0766867819C1154D1959FE6E01E6312E0AB91FC2E2BD240FC8652A2D456A1DE7F34EF372A -53794D4C4E050BF3CA5B7BD2F1B8DE93B4C8002485CB219AD2D029739FD3C81CC6E78EDF38723576 -1A57143EEDE5CC887F282FECD261F6A25D0A7E154ECDF5DC38E426811BE86AAA458577E5E0C5F0F7 -5AAFA9C41E5D1DC9D91ECD79B514F8CDF7A5F1A189470D35FDF4F9B8788879CCBD91B427822ED658 -389E981E0EE5F7FB87692A3E3E931DF8A1D1573E3B0166204240B7080089A09EF7487C9AEE2D665F -5A82F94C877FB5B0DC531CEBF1E71C6592CEA2401E4B5122E5091DF03D203DF979B9A6EFBA12E2F6 -B422FDF15D49AC0914D372D21E871DE65CBECD105FD4A3E4714B9CCA5C6803FA39DBB015EA8A88BE -7913502E562E5B170B87BFC8572DC9DF49AD63694311EF1334444BDF0B4CA3245271C1F7A4D7FAF1 -703E3AA0E1EA8D5C6E821B28707EE0C9B4F22F23796FE87356C58AE2CADC191F4C58E1FB58DA03B4 -5A25AC95DBAE13A293474217BDB214742B9D9D6AF35F70FED2891942EACE3E625E55FFB820543FBB -250A062D3D395BC0F219ECFE0D76686AC148BC41476A887BC494DDBD396BE200FD3E03CFA12EC9AF -6B934A283C42AA05589AA6B4A8D16946BB51F50419CABECEAEC5AEF9085C9989289E9B46BAFB6FB2 -782D84DE2B068F91A9744AAB237CEB1BA513E57E4C307108E993C972A3E0A898D5A8D27833155031 -FDB98863C3BE7FEF3004CBAA5CB60A1F2E3EB4D7290FF5FAFA088B1CECCB6CF51A58DAAD998F0839 -6CDFD68F5ABC9C1CCB8F6514107773C69C26873E889D1F79D10E866910E4684186FCD71C965ADF62 -39BA3418B313A27AD632300969B6F284519366ED85E7CD968D64823F8C59B5911A72D0A20EB72B60 -3A61E36F52F256FFCDF706B4560B4DFA5D918FBC530D83A4B3C01BDD3CB4572E24242D141BF9E775 -36693A0407D002E09CDA5B195BF1CCF430AE9824C07928A050D0B460F2704BE8F9E647A4884C4567 -0A81EACF7CC038643EB0FF18A376FF6F32B6FE4F197273327FBBDEC6443A299CAD4B26F7778A99F6 -5A11BDE047153E764039EDB251936AA43DEE50DDFDF8856519056AAFC4C5AE6F2051AF0579A9ACD4 -1D00775D7DBE70022CC263DCA5E0A25B9C7C4F5C418587666B2FE24816B1E0EC92F9074F1403BB83 -AFC3F1D52CA79C387BDEF864366E34C90BE52F7AA09935373A07E4E026224E76F9EC3CB9E7EDE50D -EFDA48248D61F3CEC880A3B8843306375D9711E58645F3625BDB8E87052DA67F9794EF4AF8DB0BCF -E00677C3A26907DC651BC838C40EC39E2B5A5DC0DBD345944A6C32226089D63C52490FA10B215AE7 -03CFB663EB8A47793B84CE7364DA1C4E7FCE32DFEF09490121222774915BA59C78C2275F829D15CF -4D8686B095C38C731B83D48738C25F40B8ADD487C350A2EBE846C3916AE384CB1050F9F5DFE09FCB -D9129C6270FD86D55A459618FDFA4F907E6B4746196BB717865AB378414029017551161A52E9D24B -E4F7EED553A927933D4ABC8F25DF607779A717909CB4D810DE8F5762581900E224E4B91598149BA4 -71CF8068ABE8744356B261600BFCC57FB8BE45036CF6571D9B2A95304933BD4F17215F8EF53F8E08 -1AF61FA7F9583C34EB5655CB0ECB82246959F09091F36989EBDD646BEDCA614B9A61AB7696B3FF18 -1058A150FA6EC1BE2EBC7F64357A3FF2A2B0491D2F4E0B970DE5B7788B467CA678039B5EF55C88A3 -84578D427FD2CB16C87B0BF0A3D37CE8ED43E0F049AF2436344D5F47C948C632C94A287509282561 -6C64C5D262FE5B24916FFEE982A69A6CCF888BD01D62EA591EEC51F4B7DDFAFFBEEA93FE08D736C2 -0129E345D06B10246A5F57151C198D407730713F32299638EFBDC01367E23EB59AAD42A83AB41B43 -2DB462652E29813740F4680A5D4BD47B18328FAE6BDF4200CFA4CE3773809B45E8887C9B2E423698 -9F6C48D64F5986F563D9A7538A8716082F81936AEBD0461E6F4BD470436D8B7656F0FDF89108E6DD -02ABDEF907731D458D690BC608EA9CED09EB1E6E64C0790C7A2378201CE997FFE0317679EE1D4EE9 -F91157449323E53B4ADA8096CD628B5861BF794543A98F2FA2AB54FF0F25A13DAD43DAF9394329B9 -5AA53CA32749FECB0B2BC035DD1EBD53FF9FB5AD8BCE06CD89E5568091C1CC314CFB1D9821D7F9AC -7C55F55E0A16E39A87D43148201B928F3C42B110FC056189DEF183745F3B637441DE8BD4C3C7EF12 -F4258E306B2877ADAEC63441010750DB4E6269A4C78A0AC01BB3603C386651FE814031CB5D8C1F14 -9EEAFF652A53E57BBD4C8C0CE36A84A319A53BC1E5FD3F1ED1EE72F4C1A9BF264B594062FCAFB22C -C1FDE3F2E3D3C17DD3F7FE0E15EBD812D550227C06D01127385374A11438ABD50048E17255FCD2BB -85122A6FB9B7DA9D5E9DE8A747FAE0DA45A1FCEFE92B9E70A5B2CAC668D4D07527A5C1403267D823 -048BE671F725CFC7474B44FC5AAA348420B2D7C23C6CA066666FD6F2208E329878D90CEF1C2E77ED -22D3BEBB9D547810B189F08920A27E7107F208591A84D463CE2576C70C3DFE6643E4EA93F4E1DAEB -41D46F0E2F56FC10C69AD5034FC9859D31CF27A3A1EE256C93111F81C11ACF1FC0CE20B90BAC9AA3 -27A5C85A7985B951519FD4B03C40BE637162AF41B2FDA68F0D1E9B7602FE2659D3D75955C579AC51 -DF6A552EB9581AC3F712F083F19B52A6C4F560F36C59CEEB0C996AAF1728A2AA45DCAD79BD7B23AB -388D5B0B64A2B95154B6259B730B0F4A72C8C7F7CC93C7D64D9D8810D1F63FF8ABD4DB89824E2D26 -4FDEE916C41E299211DB1A53256E1DB5CDD04862F034D9404B73183A99D3D13D642A663F129B6D16 -7095BEB4EAEFD03DF2FF2F0B6B594C1EE90FDB203DA89FACEE23F1BA3901FECC75FE1811BD701259 -343011262B6A0A9707AAA6316BC3C17F787BB80AC8DA5AAC942D90F80C5A3BB59E47EC767244AA95 -C63E50BF809998957936D3BF6ABC24B0A397258F9EB4DC8F65692CB023D9091FB180C69498CD0C08 -BBEBADC84A7E0016E8F8BEA325D924EB0DF82E75D2CC2CCBF039B11934363D4332C5FBC5EC556BE8 -5EE4E707CC2753CCC43D2ED50558E51A104221C9323CDCB0199B7B83454DE3FDC810D0F362C0299F -5DD981B31D8E3DDA284FEF9DC8F9C8DE138D3065437A7FE8C30572AD06D62E8527AD37AE39AAB0B2 -25F76A25F6C6505241ED73BA494CF923E919F688DDEBF193E188F8C4C154F21631080763B4D091E8 -AD1D2FD6649E0CD9360E8D1A67A5B5FAFC67547CA31C95A5EA8D4EB5D68B9F6D6532DB9B54584735 -9558542A2AE58C09F3BD2918EFBE1699E9C8F2C2A11EA4D224C726D2ACD4A8D8ABAEDC6588CF2AE5 -66528B94F55B823A2A1F7BE19000F3E7579D094E047075DF18C8C868760295533B26EB3ED90635B1 -29C17ACA679C3E88B06998CE5A7A2544B700229F5A6A504BD3E45B276471959C8A3F81917A534287 -39B5EF9E3D463B3BA7318448E2A3E79520D2D245A2A72F31FF7070B6E4624E3A5E216BD103640C8D -F387E49D732529C611F8B971073F17EBD2F6EB18F9B74A67E1997926DF178D4C9EDED435B9682F1A -279C81BB9F60DAFE125845A2FF3B02979E5481C78A45C479BEFB9FEF3CE2BA9BC46C77B50B03E48D -A6D17B76F06F3AD118371ADC69E178C52B5FB4B261C9311874ED07DD6D5B3226A005FDD7A6D53848 -09E7063F036CDEA41619122635E835D2D74CBB6AA9B38CAA4D819C26E95115FE0DBAB4198FC5838F -2C91B7A87B07D734C6D4F4F83444C1E90AA9BFC908A2BAC4B3DEF9157AFCA5248F2DA31CA87BD363 -AC25E9E77F741D4B2C6E02F04987A6F49D30E9038CEFC41BA172DD675AED8B392164411144E5B738 -F3210B0E66B17A13CB9631C33D44484E792A7C082DD0A5382F34C5637653261B1EB6D2035B08B4D9 -1FA9AB770CAF40A103629511F7B43F2743D7E583433DECFB19C21FD4FD0AFCC22A4119E77C87BFE6 -FE50068B22479015BE5A9F06BEAB4D37412E062A45E0CBCD7BB39FEE747E96306F79FC4F2E8942DF -5D9DA0E55AACCDA547DA19D30B8404FA121298B44C9CCE198C708C69A8D6BF17591C5C50D3FC5BE6 -961F7ABA8F366DAE957A1C3730DA4A5B4F035A9274675EE3BBF0CA8CE9D8349F50CABB1C3EA4948A -BE6F9F143592F1EA95404E6909A909168E3279A957AE1924245C356331A75E7008BEE92BEAA304BA -40B7C3F48F74D9018B3247DF50EBD7CE541DA48ECCB1B0BE51A455C3C13C279D4D8676078C3EBE43 -08748D52C9B041D3E7244C745B1F2F742D010A9E60695F3EC4FDC1050AC082B905D6A57E8F407A3B -472F731011A5798965B7B1A307E252FE02C8F79CEEDDEB6E165F1A94D7FFF18DDBDF79477F14E9E9 -3981ABD200FE7771B29D1D2D120EE79D28B9543818527039AC74085EAFF241B56D08220C958B5D9C -87C0C04A14D52AFD475B542D391BC54FF33DEF8D9484AFF6873BEED32DDA4B371112B523B6CE22B4 -0D1B416B64C9370F1CDF2C548F4CCBE9E12E21C36CC3EA52DA232DCFB65F66B22B5E2EC04852510D -5E264EE939BB67AEC4764B87062AEB7F680B40BCEE04AD45C7519EB3B6199C9E0E332661463647F2 -FB7EDF303EFEF84891CEBCF0FAC5F723A9D0476C3F8C092604C87FC69C7A90F4D64AE45A478EE8BA -2DF50FB93F55A3546123F0B0E2C1C40C98EAAE9F0F26B8F80FFE6E6B94B7E27D2884D58B8A119662 -2DF6BE608C5569D7864BB756DF2EDD184B90812B44ED4A32D001C31383A40AEEE9743651F7950846 -15C48E402DBC01C818D477EAC0347795CB2792E9C11E8FD4A02E194EED1C919D4598FEC003B6D9A8 -A0BC7D456047A1C0579453FC1D7CB2D158D466939A23D7A7B8ABED7E2777EC7487973E73F2266D9C -250CE30729E3C5223AD93B9AE8443B35711E446A3DC660123ED45CE1942A1A2AD0610467E081CE2C -8B92A6C82F0B17B5D2429E99F1A6268072C6B5AAAA6EB6283A872C54D3694CD825EB2926E57DBBC7 -C1663075E687A144E4D61C225781D80FCAE1497B442342B4A3F1CD6BDB50E31791CC3928C30835FE -F845B6BE5E2D7E3F2F5F085AA3FAEB45CAD0D76BCBB1ED859A9CEBB9F7457036F0BC3F195CB1A98C -9C8648F6583CDBB23894BC719D68C2DBD8003B10D08C8CAA40BCE784D7BFB4EEC9EA5359AC056E57 -B8B0F2EBCB1F4CE40C87FC7861180133E0CB6CE2FC4FE690756D327A2B5AE063E3021C0C0BD420D0 -56F0B941E6B36088A55BA11D0C35FD0132D5F48E5D9673572347171B4328D4807B972831C0D74CFF -A5638C145B89C989E6EC942148207D6DB82257585958034D9F9D4221C7C9F7013790DBD130F277E0 -BC88BB179DD09E27062379ED06F25EEA8B7FB33C35861A0034776E3813D2E9E5C10E227CC569AB36 -CB2D9DF2E7B7B44758F9DC4FFAD7A24AC7E9F47AA850C221048C3CB35A37CE8EA75632AE65FE3212 -175146FECD6334AE3D3C5F492F067F795E1E8FF386BA198CB74F0BB4DC0000DA383BC4CC3F070DE1 -7721431988D69C8B1A5AFDCCC83C22E16A87E01C6D3E79DC7AFA3DB0371B0866EFB8B6F88900472A -FEF1C4A878243C52D4E02E82658979731C841C489A6B97E271C4C93800EC7D91F93EB9B9C659A554 -E1FCE42A5EC65AC39190EF4B66DEAF6FC0569A000A9E1495F42F706FBEA4D32EB7EF11A648910259 -6A65CF899C2F322F5679C6D123469192A9BF1A7F1F2C81C554ADB97BD19ADB746A4F81A4D5559E60 -AB94C483DBABF6CE2F28CDB412D50FF3FCFA3B3DAAACC6A83CFED910CCB3B8D2C19590AFF4D75303 -4A6CE7F4156896A13808E0DFEAC547E69D3C886691728E4A35ACD575B40D721E8FCC5385A2EB28D7 -08101DC50811529528F5CB0C009BA7E3C88468E37768FB0D83895AB54DB2DD5426562AF9D8AF304B -F6EDA54E9C92643DF926F5C3578269750120302A37CB140A18BA56BA01108D4ACACE8FEAE640A6C6 -958EF156B588ADB0EA5F3B0F37BBA12B7BCB221C811415387B024B7076FA4403A3AD6EBB5D9C26EF -EBDB7ADE7C60B444AB9F90EA493B658B7767AE2BE649BDBB3FE85F460F1ED137C61BD95F7CD3D8B0 -15CE45138538930AB62AA0E54B4CE1A5EC5FEC0A2B28B345B67089A4E4AE14D2E1F5A9C8848DA688 -CA298F93860649EC3AAFEF3E820D86988C8E3E5A4D4BB937791827994AA3E81D0BB3EE115EC36D5F -B9A392D09E79AF514D11C7B3A03C9F9C13355CE79E119A19177FFDCA34704D38118A8976D1EE5AA0 -2D14FEB1414419F5E85244ADC5C0A765A522EEF36170064BB19FEE3B5F7B441E4DB967DAE0BAC2C4 -8FC6A836E0EF5A69F073BEE1699F55E9C757EBD6FD8B514E2B49D6333815B7DBD1E0694695FCA3D2 -1320A0C4B852D9706DADD8369A95FDD917328BE93DD33818954DBD2C212D2CA81560ED5BC284EB04 -7A5F389E24E43F4FA8C97FECF46589FA7341076555CF55B1C21B28E0C1CBB00AB8B6F67472F27BC0 -D11148F407824B0159B5188D4BB7386FBDBF1C0FAF34721B7BCB5C0FCB7C4010DCB6A1284E9D7883 -9E3C2111A05D29AB7997073B590A81C6168020F1D48951BC7D8476D5BA593F4F23CAC1F9BB0E091E -84B4E99E5C584D1370DD12DEE8DF16AF8BC6B7B23E2FEABDB7F32779AF8E2B5094A6E9B7A7225F24 -C43A8E5D2B977E1E19E633C26771E23017ED233DBB02C64F8CF03992C6484528D0C8464B46F24F9E -8380F385D5D01B8893C67FC103498983CF939432AA380CA576D09030CD52FD99BDC3BE16C7204CDC -3365BF76294A83A1FC14A236F5FE5321904E779B13232A76F8FE521F425562678436359C2461BEA5 -AB27209541F557AE2AA60009C9CA0A9FC7898C14306CE35A50017BADEFDECBBF94EE2905220706DC -806409EF87DB1D73EAB0698AD2DB72CDCDB293E7FB13C94D9FC87E74502E6927A212F0D7D2F2D194 -64F7A66AC07872E18CB1DDE8F11835DCBC5C4EF039333FFFC0FC1456DAADE7DAE3EC2EE0D3415B0C -ABB69FC5006F4D14A4EE1A5CA99AD4D5E629C0DD1E0F097B5B93DE2DD001A8C418234C9C45E8C13D -1AE04E9466DAB8CF1ECB88A4E059C111A6468D2DABB90DA79C7C79E94DB28F6968B1A632F8C57D9E -565FF91C6916026FFAC0661856B9FB8DE9C81661816221B1FC159CFEF1751E7E403F5F2CE32529DD -540792FC17A12A3DCD7C50D38EEAADBD10ADBF5D8A82442AA900CE6150EB7A4639DD9FB6E385B2FD -093493DCCD9014B23EB172E21AA89643A6CAD1093343D85D81261972DE0ACB16A4C6B5F0BE4C978B -FA12D3CAF0134F9EA49F6E9687C8F99A456745EA252F0BA9968C7F9586E3DD841AA92DC7705BDD68 -2DAE41518A09DF0E209F321D7FA3417202F4BA76A984DA3ADDBC58136885362F02F0A24EBC439B3D -BBDACFFD8498EBD29F88F016B1FEABC10785438EAC860B554525F3266097A675299AA0967BD3B7A0 -EEEE3FC578D1BE99D3533BD91571AED904BFC9DA1A1451FDC5406E1CD614E0C7FBC733563CD6CE6C -C31E9237CA153F1F0411114361D731636BCF98555ABF12848AD109371A42B63675A4130B81E97C2A -2EE2BB5D8FAE2640156001AF0F55D9D5DF8FF23C8AEFE14F120000F14149A36E5C94CD9081DEC277 -C2C34870D05011F99D48B0875A5FF542F067F7E9880109F586BCF2B50522A1F23ECE44349E539E70 -F84E207DC9BEC7CDF856A046F1A03226AA41F541719AD1AF88FF211E57DD0C1275DD0B7B47440DA0 -89B98C6EE92A7D94700B83CEBE19EAEDD8A615F6587587BA8BBA3CE3AA5E8EAFB1FB0F486BE3609B -169EFB178A4292F4C0378AFE5D24EED1CAAB514DDC66C696D8E37F294A6579131DDF5488E9436609 -ACD750C3DB0A940C84FE022B22ADC2676F62E91E8F891225F891FBA537679B24547BBBF35F04915D -20B11739F620D18B5B216921D222F15044368569AA302980B9225BB839F494588481B94B0C724352 -B2DF600A22B062561D86CB8F81514FBDAA4F8A043A0265F992FAB71FC9124A45B8475E1EF3DF6B6D -E35CF329777D45F08325E8505EC0D979F542807AE77E57E453525F23BC59A50740371EFA98678AEE -6C425374AEB745B99DDB5D8D908FDB551FBC0DB15832107BBECC4E11A1A8DEC69358A574A2ED46CC -31D564549EFF23102D92BFDCBB2BB985F78F36033E34F59C0EBAFA3BDD71338736464CEFDBA91398 -33995EDA4207BFD4A9867D32E867FBEB7DE60D132803EF9347CB17BD91315484EF6570892297DD8B -7D966103339535E28A00CB1EECA4A9775F60A9F5FC9BD8B06D78FE8E6318C31DA2E847E3F9CA587C -B01AE2BA0A2EBDE308314413F4F230A758184ED60D4F71F6CEC22A93A01B6C54E0449A3860FCA895 -4A347B7588329A80974ECBECDA1070FBC055666375229F13DD995E99265DF870BC8B8CC6347FADBC -1A6AF64599271A475B9123493D46BEC41289BEEB67EB97A8DED7A9C9730D37C65164CFBDC22E5CA5 -89D2E7954C7136EF4E084C43A6C7F361A3E96989239BDDB9A593CC2A80BA16DE9EE90E95CD39393C -212AB22EECB677FD36D34DEB46C4AD0D21BF7E6D7CBD0C8083842FCD87B18FEA7CECF939987E99BA -34C214E44DD84C176C9CC5A4CEA76D380CB316BB4EF9DE73D73B4AFD4ADB54451591DEF86621D138 -D5A0A29441502BF6C2ADE671CEC3CB5CAB903A657EB2D70C943F976C110E46C5D9D29BC00A875F27 -38E5D22496A43E096E009C5D3CB724B4CABB32838DBE527F83B18CB457E57B092C302EE557FD4F00 -DB9C56E66C9FDF4EC9FFAAB85F60D02BA79694FABA476A199A0331C30A78A92E10417BA236E23364 -8174C826331DC1BAB87C5F95027846130C6A2B4027930EBF9A97BA1B039D386FC51C302648E25980 -212F6A582CDE2778C677A01FBFB3C5D1B8A374ADAF6ADBF7DC94075F25ED66D440B3922C5F255FB2 -3FD8F6E21EA65B1D93BB225684B50F11310E242B087575973345B229BA62C1E2C35BDAEC04D10148 -F5B2F3BCF7399BDFDF1F3F79119714AEA697245BC647316EA157484ECB951BE367234FD02E8B1F09 -1AAC3D29BF282DFF4011BC0CBA8E55234D943DB3017CC7A766720BBC29B2D097A956C0F1067177F0 -12D42ADCB473CDE8D1BA35B4030757FA1D8211989DF3BD22CE5D501C21EF8708FB3449DF47D88650 -9FF7B59B76C0DBAE443F336FEE2D615D7EED1C284F14335BC8A26BF4621E10DE9611FB2F1DBD52E4 -B7565D8C65B54EA36D508BCF0C578A49A2665227CDE1F9768EFE847F9D94F1BBB7DB83701C232198 -5C7283D47B2E40B27A268428AAEFE75F6B2F8764A8494E5827573758CB9CA46FA93208836BCCC8B5 -564A69F5AD882052AF1C1417C3FA7F580569528682C77080F3688B65E7FC24D2A3AEB61574B4A321 -5927281544DDD7A6EE0A3E9388F8F631CE7251724DF70726E5912DDCCC8C652DD6C9608F8462303D -867F589DE0F2F71711B35142EE6EF93B64D6326C4DD7DC83278E057100EE772082E6BA368ED91A55 -53ECFE2293A481E42F83BC8F9148C70EACE91F7B7D9CB8A72415BDB3AF66F68EA733A17ABE9DB005 -3BF148629132969589F38D30EABFA96A01FAC72650B5A6FF3935670198A1EA33810A9B11E330EB8B -451F24F93544263436F669AB5A90A53B16CCEEAC36B1445574EFA7E802DE73522BE725E68704822C -B7D3912717333367895BBFBE06966A5CC653AAB5E9B3596702086BF0010085B900711932A95ACF15 -CA4DC45A754EA334E9EB84D6FC8E3FC4F897456BED64BB93B593549FF0D5352275D8E417172A6664 -C5E0ECED1019494A7ED49AB0B965BEC1A82E5873766BB38D7D856049CCE2FCA65AAF61E961B60634 -E2A69EF059754C9D8163D87F928C222772D070D83FEC6FA5AC734AF65E40BFDE521F7D9CB1650FDF -64754BFF21EA3FF0AF7611A93D525EC9B28C51AFECB04E7FC8323DD6C9B0D8539A34FC3CD8CEB795 -8E8EBBFED4313C77ED469C199552A9FF70BA5423B03B6148D4EAAE17B71C5B39DC436AC53D6BA8A7 -AD81AA8B02335A8B2B11E9F4FA913159A725B8AB60F52F1A2EA50EAF4D56656E615BF382CC68A690 -BF83DFF24FE986570ADC0290ED1A37C1C2AD469CE789E0EA0BB5CE01020100E729721AF3B5BADD33 -A2DAA6C33EB8F9064F5292F715F820B4BBFDD56F76D42E7A1A068C1CBDCE4640082F6E7D582D1939 -990CE6EE8D270015A2C461798B37DCB5798EE9F7512168B76D26C28BE4A49A1BF96C89D235F21A1D -B6A96E5DA474D0B19B808D13D7A11BF39EA8647499C410ED9894A1ADF33D41B6FC2E614D8087F4C8 -4E437B136F3CB32DB8393C49177A0675A0C9E7EECEF448A97AFDBE840FA01FC7E5F2E8FECEDC1884 -84C312E8635CD79195475DDBFDD4D38D5A0246DE2C7F21608F8D2C0DA1371D302E941572E5792A3C -F4E51A33228B93A814D03FD4FC223C314CF3714BB3A34BD4F7ED6348577FEED9DEB082C4049E57B5 -D3CDB7F26629E9F3BA36893E09E3C7463D02A22D7056BE76B87763260E46E48BB832B7EE13F8DC05 -37EC8E81E9BDFEAD8C27EBDF1AD706933EFD11131E12814F236EBB01BE85B7F1B2D627413B324918 -D247604F56EC128909873FEC3857028BEF76A3494364C2A7002D104D486236C30B48E2B75D851C34 -EA50BA7FFEB4E19190898AE21768C157C0CAC628A2181A32796FBC1A7271D2473CD88E5395DDBDB1 -FC3AA8DF0F3D588637F19A8B833AFDEB5F655A8838EECD684E2315B72C75CEEFBCEF94344ACE8D6A -DBE355008EC72FE7CEEAB01363A895F4E73F867639BE0A0BE67333848816B05B419221BE8F9066C3 -62C23FE85B7F392930BFE4C12B9526FF2FDEC38F23A159ED61A0718E7115C24597D849FA76369153 -54A40C965D4D72EC94DA61A03766AB39AAB684E134FD1407A5B1B19BFEBA52AA0DA5D99CBE5C82DB -AA663711E6DEBA180E1D4A39C320516A4350D296BC19BF1BE054859A0889C7E9727A021F3176FE62 -0FB0C837E4141FECE531A950C03D319E3255703220B7185BD20FE5DBA673F8129AB211EFCF36EE39 -4C7E00EB0876624BC840FA86E58B2F584754CB6BFDFD76810E300741EBE4544E5AC17413ADEB21C6 -2F66CA4F075C32381796BA709782DE34A675B717A2C7F6D88104CB924FDE5DF775B4F0B68E0E2E5C -2F788BBDEAF06D8E1FC2105CCBBD5827C0B03FD6CD64F0D073F3192D5F94839644E5EC6C5185BADC -F04112A65F49A8C83174A9AE958E76A2F5AF469E8B76C833782C5FFB8BD7B1BBBB3EA0CB7C9786C3 -BE2ADE5E7AFA8C8F20892659A59BC421E28845A108E34EE17864042EF587A6D67DECDFB3F510EB40 -D2229585347A0035670FCC76C2837A4E4D68304FE113C539B35C1F0234B5079B8E32934546982978 -C5E4DF955A454EA263C3CA5D7101F31A318D82A3F9FCB5A8AFD7A65209663B0FC9DA400B26F285EF -46D0E1EAF8ACB1F1CB805E3986D04BC585073FC64895E4DAE1CCB749BB439CB32EA91176D5C39C36 -50D10AFB9C9884D5FB90183424CEE67EF2175D01D2478D67511EC9F54F88763C152697B06D948BED -49240096EEE3D06AB4575E8E8B2CB8263B5BCF4FA1608720F52B675309833071879DF52C3EC2871D -20F398B5CAC8F8A4D41D0F1D47584DD90DCDAEA4A1CF160C4B3BF1AAB890B5CEB6CB3488672AA68F -BD938281DBC1D8BCFE92FBF514DA5358443CB6E0147254E91B38CE6787B2BB0DEDD2D38F5938737A -977B5EA42892520C58F8FBB53C994B57382379E9490F0D6970B980E1BDF8CF9F4C3C5E0A18F66E86 -EE93FFE7FE546DE50F41364BCB3721B637072571FA1779F1D672FAD260C16D7F13CBDF3E4376E7FF -56D2A710AC5AC35FCBDBCE2C9C17E523BBE6218617B13C1FA6679B308979AE7C61DA6E68369324C6 -CBC7DDEC364E5A86707266C0B459EE7B2C03FE584E529BFFDCE98C90A2F3D9305AA74D3ED8430DBF -3A49FE2ECFD9C4BC9FEFD22618FE9C8A973AD072AB6F713E4DF02DCDA7AC5359B2D652013E131B76 -B3ED6C75FD53BA58D862846264627F6B9E70D8800F6D9B32242B747A67BB2B45675840D34F852AA8 -062FA6B01E31ED24DAE02F6CF788A17F7B9368175195DB0072259CCE0FFB2C1035C1D26E1777CCA3 -D56A827C3242069E76D6DD69B653768614B9ACFF16567FEA61508D51454BC02F6C60F755AEF6AFAE -3536BBFA1823F8E1A53C41124DE983E51CEC92AEF4F99785D554488A51C20885346D1F761DA79017 -940A0C557D93F1DB6B3D00FFD61D08E96FF3AFCE5FEDF545CC9F47A2B1BB26713431D6D1E47FD6BD -6E3C668B0368241F0EBB5FA9C991DF79890E52E83A3675EE699B61BAF869DE91F67278F510061C6F -E41DE2D883F48CD0E068E2A652B244128D82E5CD52F35F210DDAE3054691ED55A7D99088AAE8FB04 -F525C2084AC09F5EDF80A4EFAFE981F74C0DE9D194320709B3464F3FF2C0F6AAEA6D973D9C323F53 -DE3D741F698FBF01036716BBD62957CB32CD81D3A2674560FFBC5BDC5C6E4F547E589AD0B1CFE14F -5E17FED1C4A8ABE4E67CCF8A49F32C4C6044F1431E1CC382E7758722A6D0DF9ED23E51F8AD14D11D -7B6428E27443715EBA4E9C05D6F238378F9498AEF0E7EE4FE6856622CC8E6ED141EE5F109E343CB6 -695C4BE1E0F66601C27975983BF557C04ACFC19227A1AD7E6C44C00529FC7EDD7F886D24B7E029B9 -C395260088BBFB96972199A7B32796D27257DE83A7402291C14FECDF7998C5C96B1EDADE0280F856 -8A8F5007852EED303969180B3329917973C2D32C080C9765B6BAB0673BC7ECFDBBFBEA980C263843 -39B7F1052591D91667D4FEE413AFC23DE2D4B9DA742F4269C6C939F5FC32A38040730A018155AD73 -3F231E4D5B9D01C03A58EAE7B5F590CCFAF25EDC8552CFC8D95C60EBAE1837D7A97CA137E9D4A4BD -2CD34AEFD68D64B3F4F62326AC429921D7FB3C235184FE0899690A0B775F1A566EC29D5830D32372 -6526F7E7F5AFDD71B77E07613DDC4FC63EDF49051AEB59E6337AC0A4B6DD872E776C9CD0CCB86130 -5322D816732124F5978A86C186BF0A0F88E733CE38E4D7C1BA5378C5629B1EFC97806059990ED42C -5CD183BAD7E94070E4058569DA2E51831FFE0D080301AEAB4350BA290318AEC582C78D05DD92E5AF -B4424EA808629BC972E68F4FF2489C245593F07555CA6A2B25964794CF31CBD3AE5C229AB9B8C298 -06C01D116EBD0FF0F159ED2D3D7DFC73EAB4910BFF5B0B0B587CD9EA6E6FC45D63C09766224D8346 -1F0588140B258B1729F70BAE7962189B1554483392988CF230AF4077193E53330519394DD99BA135 -6D4730AB221DC6A66019BFAE564893DDAD7B177DADD16ADD21D396CFA6C3DC818052E2F71149FD59 -4A16DE0C2FFDD366C99B486C55A6E991E4D22CCB15843F0C3363676AF2F5B2D1B7EF66CCF2F12DC5 -0D63776BFFB058D70A9C76DCE96C754872D72C82A0C33F90D49C935402CDD26B6D743B1F43BED5D8 -B539424849C1495DAE73044E885A7D0F307F1816DF6244A6F2D97BFD4E200E93F69B08AF39EA21E6 -E347A47CEEBF803F73B978ADBFCF056789BB8E6E2563DE87DD9A8C877157B934102DCEDAC54D487A -1BB2694F0034093C48F10A17D32E2BDD0C723CAF59ADDD1BE373AF8C9BEB4415AA5AF36310C31F24 -354A53C0B962573148BEF91D994FE3F3D8450DD4D686725799F53C373A0A3E3C060C2E1A3E800504 -9F26D716E1F381B9F83125E4683264A07E2D8938F605978E2513DD2050B3D8A1012797CBA8961632 -BED260916338A812AE751C7B657E086A0C7DDCD3BFDDFF3E48B84751925736D1310C4910FC114387 -F3ED7FE163F91895EBF55FCB425CEF5729D99BD8F2C072E36C310523E75CD8E5DE49C031C4263410 -9D56E91A46C8C8E89FD92012A00C33D0DEC52597B5C6933291A7BDC5CEDA95DCDA5600F9AE1C8250 -54E7EE1067458CCB66610704C58E4A4FC0CB5FC933D0322A716B2CD430A3AD48DAB3D4CBE9D23F2D -092368CFC4E1F5495C133A92942EC62118D45C17723646E69407B4A89DCDFD2AB3FFC099A21D9D29 -741D68270629AA3A414FE58658DC9170C247B6E23F35C4BC5FF83009F462F2EEF4DBAC5FD158A658 -57F9B6DC1F5192DFB169DCB65621CAB2F1B07BD22F4155A8E9E2B6388D430FDE5EC1C834D22EA035 -C52E1E34482EADC36B4CAE902AAE89A7284E62B3C84B608D6BD05F75BC31310B2DD3B2C08A00E073 -7F104F03A41989D5F6B9A2C38B22F1D1803EE5D7A4D8DE44E4ABD496A1DE0C0E12C4BC96D0122846 -3F0EA9CE9509FEE987139F3DD3F9D0DF4313F555BE85433718F6D05F197C41A9D9C7A8B0D2740196 -82D49F58DD5F66B12A6520D9F226D1DF1F1B65CDFA261F980CA25A92645B86B64606293F8BFDE364 -C47D2AF2C709BBE77A70A5712F2CC26F3D66F5BE2C307A48E6F887F681D30121E32BBD87271B5DC4 -615D28C309F15AD263FB37424E56DDA6E17B998B45BE6C7FC6C28E3394A8764C9EB2DF5C06626593 -B5C665D550D4600172791CD208AE9F37BC082B0B242B0A504B751B18F4D7495172B697EE217834A8 -A4FB7CC16D6F9E8BB400BE8AEB0850960283DCE725249FCC4DE97D9886745AB6066C3E2F64DD8AB7 -9AA11667F11188D7965DC11EB760B772E282DBF13249F31986AC6898FEBFE23E3E8B8D2C33E00EA6 -FC493850ECB2E6D831D1EFCA3C2EC8EE2E394599091ED58BEDE97D7A43B6F739EB0F845EAC1DF6B1 -EBFE876009CC5D804B15ED4B56761B3CE1AF59C07B49DC798A44532297AD73D5101ED47F36A3678F -818297CC27F6AAA2AACCC9AA9B6F5459911D8C56CF499E390AE607F3790450B2B9C9BE0F006EDA0C -715B5CA0481734CFB0597478E7602B0D2C1E4F78F03C68C17C70E4B42D7D2D3C95CF40F73488B371 -8E2CB05A549944D86944D78724E266C3319AF89AE430E777E95F0D792B1C654306E421F3D63A26B2 -1E74B6E8B21B2E2B9DC596D013CDA16D08E65E8F24A84B12B2BADC653E6E1110DE2E709C1C1BED13 -707B70A421B384F20CA7A9A9D20324DD383F28B2D3C7A9C53F5D4C6B7C378D26DF11CF55238BE1B2 -4FA70DCC178DAD3D35670FE4919085EB1CD905971D76A368FDFCF9D2F0A23739851A3A6D2E02D65D -54DEE69ED5D81315D3EA5E356F94EF256DD267FD1E1A9EDC9CD63E743F299BCC4A4506233B8DD765 -2CA067F741603F93250C087D368F9E9CC4CC1A6DED567487C05BAA992B0056A77F630A72008E3946 -15A9DB24FE56A956650EC9DE90A6C2259189440247970541CA198748928215C0E132A81AA13208D8 -63C1FE817F70CA573B54577D10B73100AF8EA088208A44FB92ACA314AE5879706180788C17BB1D0B -81B6B95A1C4E0F9EA66F9B39BFE12444A6446691A7BDB03E0F03D9F07A10A7598F2166F108529F34 -CD90E601FFED3479ABCFCBDE8F051C348E48C61D95B00C59EA1287423F05666C3D36288844067E83 -E14F6B5210842C742B89F13ACD126B9FC50ABE2CA7D7ED513D43B6AC7F41EEDA416BFFFCC5C844AB -2D23D4DC09B2D510504CE98D02E72020D9E669DDAA344C63A1B75632F912A1C0DA3885DA4AF7E243 -E4A4C6493D6595BB6D56B0359106957259E59E336BAAF35BD1CEC5CDE735272EBCCAE8D4904AEBD2 -B32610C6FEA2B69941D6542ECB44D71092A3CF067708A3D087AE99FF29671AB7DD8758759B971A08 -AE1BAD78270D2FBEE37AA2DCB119D72F6C7B0C8509018A70D0B0BE2C6830EF8E0B24B1CE1141EF87 -3A4D7DCC501F808BFD94E4DC0F2915AA023076BCC8006490A43685EA25AAFC187302EBDE7FE1965A -04A5A398985D29F08E085127B56B057334D88EB638A4DDE64AFD204974C3939536B1B66A54B4DB81 -151853915718F70813F096CC1B0EA25E363B49264C2AD17158A4489F91453FBEDBDE15D7B74D7F98 -E81DF23251785D58295BA297F295AA6248A912CDD4F1111E6B628EECBB5139709E76EA4AB743CEC8 -26621D08E6BC64691CC90B3C3C1778931A28D3D5B1E20E96C643316613FC487C9B604C43463FA453 -3BCA1236286E6F5A6EEB2F1D9C34BDDE4595495A365F88055D9268541CF1654ACF478D384A5496A8 -772EA1402751A093582A6625A0A44816B5FDBE166835D598644296249B92CC90AA3FD6445C9A19BF -27F59CB0616C7306070F33C7DF4E1DE64AC8C5BB2FFAC1EF2B1B30E5A0275E6004CF64BBE2C6710E -DCFC3AA4ADD60106334708862FFA6652825BC84842736E47AE6917180365C75B27505EED3C6108E9 -898A780E20C3F606A860229AC46D0471ACA0187D6D539A1B8820F620F72B41AD1D3BF3834BF48CA2 -AFEA8BF535AF74C4562DEADCB63D2F5C7585722B77C989342D190FF926C8A5263B4F25286F99CF6F -C62EE6E2AD61C82B29D82468AC10FD27764278E5558CE8B41BA111CB2F040914451A480C93084237 -CAC8F66BB7C6689F340B8ABF0150E06D5B1177278A4C08742FE22F42C28680F190900344ADFA486D -59718C25D37275BCE4DF981AAC35D2C7E85C72A0188B8953CFA516FD545AEE0BF4B8BA301CFDE214 -4241FBDF3D204E3D2823301572E23F204C97305A82401660E12926EE7BA6EA1A81FF5C007933AFC7 -3266FAC4C134ED818A48E7DA01C71A46335C845F9DA5E960B25339D551582B375814148D94CFB781 -FC56093827B78578A73D4FF67B6B87F40CFA5E3F4325D9108CDB64BD06427B88C84105187316FA29 -90B4E3E8EDB6C78ABF164F4A9717D523794B2FE772A04DABBE688CCA977090979B5F47CEB90A1DBC -167D305EAB231C9F4260C4AD10889CB785169902FC0BED78DA15B8417453BB65856EA0BEA5245BA0 -573F623D215F6C0CF801851C305B355D26B52B0B343645FE25C78A3526841EDA480919A1BBE5F56F -C10ABEAA3E1FCCA7C43EE560F067F1AA2AFD642F769D1ACE8E2AAAF38850F0D757CD808C921D716E -96FBC07DA7860DFA70CEAE2888C0ED3CBF9586443532B68DAED9A926655C157A416C383A53D8F283 -2A4E67468112A09ADC837ED8EC95F70852921F50D4417239FC42EE3624CA97F682745CC5E76CC7C6 -7BD99F2180F8C0B7FB49539C8CC474C25C0DDE491671FF329E51BCFA779346D4686835A3AD6633FC -B5E0F67E0CA9CED8F215BEF4D240453EB2EDD6ADB22278AA5B985FA140C9834D38753DF2014F8C0E -E6DAD19E8FC54C03C1F6CB0F858986691D99592562CAD95FA0A5B2ABE4A8B54B457D42E8C33A2D19 -51C0419A72FB94FDA78ECD92BD2A1416459E9DECA9469F35E4C47DB531726DEE8F203D7042EDB32F -025DF3D582547BB1D45F7A5B70D317DF4EBB16E36B0D798E0932FD2A85B04FD67143E4B287A50416 -2C1F5A037CCD780088C5476385AF8168E12D97D44B0630621759173C8F1E3006B5B1C6D7138B7EEF -C3CC5F54E24B2C3CA7B41AACFD25E554880AAF406EA4C3C6E21D3B550B040FB1952598A7E8E6488F -E38288B2AEB6C4718338598A2BFE4D2B9D14C65732DA304C16FF3E1F8F03046EF095B65FD609DA87 -EC24A69278BFE65C905CD0329F6A486B8525B7EEA4F7AE56C2633CD83543269E8ACD6D71F500D82F -DFBDE7F7F7B1AEE67328549232E26CA55085B6E84D9E2E7F74068F93A90C4654F2F396E57C5F76F7 -E61CBBE523DBFBA6E76638BBA3064DA025A79E3A294FE7F1CC28A3B4C57DD6FDC48E541A85534B25 -E1BC11B4F78019457239EAEFD4BE9007D205F1D985F389DB22400B279C10948551A6B4A17FBDA0FF -C9428B18B43DC76EFB15FC2182216F1B60B4E344A03AD6C00F141EF99F89F24C819C3E32877A927D -84C2D006940F39CA8B71E5951673EA9BFD1749923219DE38929ECAA9CE43B06CFA7DA1BBEDFDA56C -61FF6C24F40E59B13870D5FDEB82D981154FAE5D6D5152DE69339359461A41A9713B6BBE47E868C9 -33CD74C75DB71D13BAE4DEC85E02FAA14EAD6C0A253B16C79514657B15E68CCFF9EE6AA385CFF9E2 -C53D9AE40F85C793E4E8FF50B2B7420F4FE69807BC5F37C3E300E6B3C3549D1D3246A2E70F091054 -1135BDF805E0A698E236B6496702D061241687B7B8D1A0E517DF0476DA09D89667A7AB375FD2672D -CBAB8124E511502DDBD08BA04D941DF1CEBDCCF7ED48405CBCC33774A68C5212FC6F132641FF413C -984F8B43BDFD7B1A2A3435F15AF07EF4970D3E4A0BB947C181E9CA27CC14A35BD1BD096875B45873 -8CA244F88C28728B74E25CB8C4FC1095A56CA75E4569AD3082EF194ADD11350DB3B74B96761D4538 -596FF7243B1E1B724716A144106E080D42036444FD472998460CE9ABBD05B42AF9389AC452BDBBA3 -A13A96890025789F16B9D92251FD3B3BEB2C61EDDB370A20456E3BFE5F4039E2557C451C524F8087 -015BAF3FF05F51869FB97512968BDB2B49589C1C7AF1E085250A47657465F480B7023E24C76731AC -0EAB6704123D77977D3A2C4C56B691346EBE589C619C04515D34F81FC6A17527D5D8319013C5D4FF -27CC3925E24C99231AC7FB9EAF0BBA482D3B75807AC85D03CD09DE5D9AE0B07B7A813F0449786500 -0AE8A7E00080300F0AB8C399057EDDBA273DD2E1B2A0DCEFAD3B332E6D4AC1FFAD846167DFD70E03 -46DAF84AF292D4F424256ED5AC4E104F80697050D50844A708EAC9E7F7784FD01646F3BD0C595CA5 -1EE6BD607D254E78ADDC5E15C3B6AC4940EC865A5C23105B6BE09EA09F2C05D6D76960A843B81EE4 -33977FAAC3CBDA85CDD2F4DB7C28293A77825635992AF8F3B38B4480D9A139B1662345A8ABE1634A -77496C3F57597D2985E9E54717AB2E99CA35789441BCDDEDE9A9E2106B401D9684ADBEFE40D607F0 -75C179E9CC03E59E65430DB70B441D43DF03F2AA6FF06F224B6E455B01C64FB89EEC9103E48453A9 -749B4D602808C7E408A8903091D85E06AAF635D0D529C3CDD1B8479AC0F4208C284BB678A547F2BD -77BB17C86D4560434F7AD1937760A6AA55B614CFA9FF8C9C96561AE6C8F2121C4E20237428BC51DF -2099B6C49E3EFA18E6D439E6E6981E746EBB1DC461259D8EA0F8099C47CCA27B2D982B72C9A07CF2 -1B3C05D6E26E6E286E348B8944078E24809F9C5F3D014B4CBA02533F5621BFBA1F0EDB776C634746 -703C9F73BA89B1960A496420C68F54E5B901A6D733D7ACC79F275FFFB253F389AA480084468BB34D -A1E797E43B7F6E8CAF5E8C93069A3A2730E57EC39B677BB73E3F07C2055599F7062E53B37A5F0099 -907D2ED87FF7A82C95FBAEB888033BDFD67BA3A6031A4CDC56CB1E4CF5B06B46E16D988BECCEFACB -9E1C037023D7BF5CCF5D65AA66A17AB361BE7981F132A578F3ABFB97960A6034F052D9D5AFDC0679 -782EC90F240F943A5F9A3D969ED7399254FF67D89DF668F7C56FCEA1FFDCF20481474AC8495D3AF4 -B6D7EE093E369C057F0B70858220693B398ACF8E8143558132E4391405E30A73937C53402E459F4A -A3539CF7A99A3F51C0307D045DF8B77757E92EA2F51BF0BB4F77D3904DD355665870C2B59F1ED7F8 -4FC71FDD7F0B6C5D3182DB77827CA6A2060D2B8C83C4EA4A432EF43A4D0A952CC6CBBE52A9F0CD66 -1A538973DE41FFE9C5CF55F2506B9EFEE51FBAE5E63BDCF5528499A47C031163C88D3022606784DE -2F46A9C9235AEE3D4F71D4959B0CFDC5B7E78C8C0A8F9DC99440C2263DBACB343C5C648577F5610B -50EAB1CF7FD02419EF3941C7CA0B0E64EBAD4B2CB05A0793DBC38F1946D44767BD287F5E9779C611 -CA0DAAA1E7393DBE0683C8D3455CDFEBC0E64B54B737E298DDA605227C0C4BBA87AA3EC7FA6EBAEC -39E6EF2537D5974391D31739D9FC42983D81AEE44711C823F35F8E2321AC74943871739D2DBE9748 -FE68592263E7713F27E0D49B9B5CB7A4E55DE54E6B800D15856450FFD3AE5F287B12AE4F438B20AE -9E27E6CAA00F3EAEADBE08432684FDF9931E925544A680182602A3C1997DE5D0630BD5A010535E66 -E1C123013D23966B3545C7431C39B97295BFA4099D14461004C42C85095EEACB9B47C593BC6DB863 -533A8619BAE09095DE8ECA432D4DDD49AA600D277E75DC3F5C6631E2A05382CB007825FADB77438D -CFA78E252D79B6A196D5164C2FEB85D75ECA25FF80B1D97FE10E87960CA0FC47C41D3A213BF141B4 -8BC3AAA93FA86245064668394665BFD52D12C3BE4CE39EFD8111754398A944C3FD1AFA98EC337BAA -AF899D35E804CF416AD7FE45FFF13FC6354007501043F98FE8428DE8013901BA6A28711A2CA85A27 -0BB135B72F1D5026E8217581860729E94F2F1878A0E96C59E9F62714FB5F8F25003DFC7347E99007 -8A9A331CB3A6A535BC61866F02513DEB982C4A13ADBFBAC3FF70A7335F40D5489E48E5EDEDEF1619 -1973D932479C62183B0E25EE8C4F76D4F1AE45DAEA4A12AEDD9EF81D248E8D19F8C8A5BECDD1EA1E -98783EB7A38149170851B1942C96C53DE06DEF80913BFC04E539EC67C110498D15B78268853E5C72 -F485F8A27B768569E54241F6115875E2973292CF48FF91D45EBED627AE9F0766D22201B20AFDD40E -5B17CF337F2999E0BD15B86E46EB3C18FC12B7DCADCF9DD50C6C7E3F37E615A892DB3F57E250A072 -A49F7277DD6A2C8042698233D35A699B17ECA5DBDA6D250ED4A16FCC893BF0DC2E33FB1EBD7DEDEA -3C1C39603C8B7E1A5A833A8FCDD5570BD088749BB232615366687962C7E56ED089CD7B092505CAFA -5A80F503C4CF337F07ADF0D106937E25670839D491F7BFF7A523DB609D126328C16113ECBCBF9C40 -04904427A108618AE5D4ED809F8CCAF72251104C94EC5BEE21F91B179D31DBA79CEEE5EC7FF698EB -84AB1D2D1A624F58B3622A78844CE51498B2CEF38EAFE259D22C7BA61104651A862008BC1DDDA58C -C45F663EB26428DAA85E7785363A69D2790996EF5D9621D53042F42F794962FEA46E46F37B8AD1FB -76FC8D5CF2146843F8CC625139C75FB42DDA71A752BAC48F294E4C0C8289FC46DA5EFD9C91BDA6D0 -27518B7E81E8B21F755A9615627D5812ACA674D1527A1185EED4E3C628196E7D0759B1CAE6B9B7E9 -01E9599A65230F1EE469CD33B9BD9C104C44E3C1AB966C9678BD0AD78111A4E0F2D07A01A038CEDE -7036D0534D684A1562A17AD64A00F279200C0371B1CBA61747671D2A21D3F9646CA290F6B82418A9 -6FA177C6278277504B7FBA936325F5FA124AB018A15DC18D2C5E8F93CDEEA52BEEDB78A57828D81A -3E6C38B9FAF3DC4EB7273ECE3EA4482A1C6242A335862C2C3717F9C9ED95F77B140C4E1569B2192F -C7DCF702D0BC9A50428EC406F8BD0CAF886B4D979320D3E429816D88F7C7146D960AC12E70F2CB7A -9F4E3E366665AB3F1B4B6440F55EEA26DC9EE0096BB7763731740A537766490C8C174723BF0EB40C -53701AAD12B21D436ADCE22203C1053A9DC4E9F17AE617888C4B4E6F3A720E4E6366BA628221A387 -D8AB15E04AD69387C310D3528BD2FAA5B22BFF3FA494F5FBFAC4F771C9C7402B95580C5AC4BB3AF6 -92A70CB2C851FA5CF1173EEC3EC29B5A05A0B728BBBB51D3B7AD8B0AF17A1563E82FAFD93F8B7118 -1FB7AFE352874F4EC6D334AB6747519AB8E847B7BCED33EB5458A828E074E74BA621BDCD03FEA604 -7F7B6ABDA01FC7514BA1AFF0D4D0C0CB8F4E42D5A87E395D9ACDD02CCC220C157153422018725846 -009A3ACD8C8CDDB66BC6836B4026FD9F526AA275D06C813179E5924F26A25094E7BDA8BD26AFC4CE -B41D8964D4FC4AF1DFB0595BC5D6714C32F15DC7194E9A3A73013C45D8FA55CC0550A12D9AAE8E9F -F199FA28EFC2426D8D1DEFB93A65717AF3EA8E2D5B4AA8EF0EF38E9600F7D4E7D9F1D67A2E63ECE4 -789FA74B159BFE2F91C19B0378BA52E93DF12830D99553B6618645E26126842AB70262D96E35E5E7 -50ECA0CE3458B3E51BEE2F21191136DFDBCA39BDC07939E521E4F492F392DEBD029C1EA237BD89AF -76BC89F618D530160AB16269FA6B693CF14BDC4EC7C630025703C5337F61458FA09104EB15C7CB20 -AA4C9BDB7CEF3A09F25BC7F3149951A7CD75372993B80CD2112F7674CEFD6AFA764AA3486730D2C1 -897A264D82A91709FEC4A21E30D812F558451804EE6F3DEE2C4C437846BCBDA07C5B6CBA1D94AF02 -9163B7383CAC6E088AB1DC14ED3743EE77E26EA7AD3119A76C0B5F925C4DE305CD7BB3A09A453947 -5B9BD79BE28FC462D8718CE05F9D94CAF3387BA55E6E447BF81A9EDDD3A34E17BE66BC52B0C0BB6F -86F6F008829173816D205182ED2ECED319864A796AB65D4E3950288BADA94FA32B6F453AFDFC6C39 -A4FCFE60353A64627E2057D4B379D3240012B3BB0ED0C7876CB83C1BA5EFB6E2A03F340C2B576731 -F848F762A7E1CCAF267EE06D621BC33FC245D0E1547ADC12CC0EB58B26BABDB8EAE9CBFBAB93836F -FF22BDA1831DD01B7346AD377AA298D84628BF1C07433284B0A90FC89F5AEB2651BA2CEA405D4F52 -DDC0E74B871D43F71EB4ACE0D2B401F9348EAC3A2EF0AD295036BF6CF6F870D58E00B619D50EA7DD -77BC28DEF91D805CD527DCBCFDC16C042BF9B874E3B1567EBA4C1E70744B9E7E5BD1FDA6A5FF6E10 -1613FBE58DC46CFAC1A65ADAF65E49757E9304E2AC9A91E0588600C709A61D4231730073A36D473F -518A145E141D0A5A494441B9EA99AC23F60F54F8127B477E1CE698BB4129B4B1DFEEDF10D9E665C2 -47A62F112F5CA30B0AE5DBF3E495FF06EB28EB438CE8AAAD84D5F50FB56A3AF002C23BCF66ABC270 -7AC233FC0F2723DB99D2CFE7D3B3667732A531F5DC315CE74EDB9050BF75D29E6430F57CB6778B2A -CBD57DFCEF896E6766C8FC5C9F9FBD701CD62CACF33EE0FC95E78DADD205B5F42CC63024624BAA0A -B4DD447832B4E1DBA77BDFADD223989F8E958C8D759AAA37930664C6EFEC708116248A2A7AF3D656 -DDEAFD009B7F5333854608E67E5E588A857167ADF9225CF6C641F5E19C3E08678A281199EDDAC831 -B57223B1BEEADFDCBC8F6F25D32FCA2336C808162E8F381656E847FB6CB13969572425AA05AC830C -33DE6E030F86A3A85D2A66A77F103C7042C97205526DC882EA9A00EB8BD5519847EB424C15F808A9 -1652A6CC89B66A5731126DEBADE123C63D88A2E550FACDEB3886FF98646000C64B3A91078012CA30 -904B71737CEF6BECABD43DD702880538F5A70085E6CC6015D2163681067C3D513A8C66032C34A0FE -17A58AD4BC97CA69BF41F11D5E910FDFE9729652D3EA21F8DD8CC19160A8FC77573B1E9CEF4E790A -79D8AD6723B6804E9616466C935303E063DEE29CAA6C3BAEBF278B818C2EC2F13ED645AB452397BF -00DB8B26E115026E256746CD0C78A959364FDE6DEDDCD0F441A61A1EBA32C7BC172BB09512148D1E -BAC9E791B7D51B71CAD2DC9B83B2F99B3726607D9CBE58B499A13753CE87FCDCE21C0AD0528ED0EF -B9B2C927F57C78C626248AA2B835A0791244C5896686A66173EC9F802C4C633A42B086334D2A4878 -0E53D00809247BE64E529F96AD2F8B3922A6097D414DDE1EC76F9552F9B8D58B8E34F359AD792B2B -E50C26DB05035E7497162E7C49C38D3CD9B98D620AA67492BE5AFCA3A81A7080185C7F0B5105223F -1FA77805502A2E8C5FEEA27699858D84A95842C5F2FB68686D59FE24091FCDDE139B6463BC6C7B1E -0E90D20A83651AF00C85797BB9F53ECEC1675C7EE636D0D9E77DBD8F89670F855EE4D4800FF3F695 -0EFF09BBF8A0DAF6B8242840CFA5BA73BEB95115F4A78BCC02D85ECCE0C0F2EF6F328AD1DD6CC049 -5A3315B414A4D61DA50DA46D7ACCEFF6EE56451805D26B0359AF193531F95F6589CEAD6FA041AF15 -3067F88A0A2FECD135C56682DB2B45A71D1FA737C064EE9A4F404BB72A70B3AF0330359393247EC7 -81512482579865240A23CD8479F21C2C44A119EBC4E81B308DD8AA86E60C3DD8ADA50E0DFE8308EB -1A7F201EDE8DCFDA405AEFB47E0E6CA7DDB376DCB21D37F7ACC4D3E9F26B03A8DE0E8940CA3A9E75 -963A389DF8038D2C486072F61C0CEAF500753C7A6352B1CD0338D9212B42A4D3DA23D5BDF44C27C9 -4B88A415A3242FFE2E1B332477A21D2B9CE075EE479C6E657A4D8874A8C53964229310E01ED4F3C6 -86FEF5258EDF3B464DD6FFD7F1CAF473BBE722D60FB14AB4918E93878A8AE4773930B8CEE110F476 -7F42A52D9304C55BE12846C911A10AB9B2E036BF9DFD597F5348D42233315FA80D0F563C388BC253 -2103F05E90DBF1923F229F980A2F4585C7A373511372D07DCBACA583099EA972C03E5AA67E663882 -6DB134564DB993CEEB6E7A6659C7C5C05C310267D5F8A24EEC2D5CC3E3F3C808E6D6068D1A57646B -37FABD98ECB7BAF99E7D9AC4414A491A73CA34C52F394352F6B5A15F0FC4D88622DAC694699C2464 -84ADAC3B1D366AFEDE2A2CD2042C90516A666A19A91C80248B11224BEDDF1A320E230739E755D098 -B6A67315535F4C187CFA67ED817A035056353FC859BF286317996FFFB478A2248B908FF12ABDE705 -402224A3EE5F463DD3D243875C84E02DB968ECA1CC52C75171EA50D6A88CA91327A7AA5795019F36 -C0A19C093A1C9D3723C7568F9D41F2E4FFB712FD47F897703D7A620B586B81936C84AAED61D84332 -B3BEBC4F95B796B93EF7A1F565C494F8A65EDB21E2EE18DC025522EF8E599887CA2836069CDDD889 -88E5862977B7472584303198CCE97EF9F9E1446D1F1F5ED1CFC666A8A0C3A03E1792EFB60A9B4065 -49E0DEDF6ACCDBD98742568B4735A747D8E5DE21E630125AE0C691D054E42199C15B1F80CAFA6E7B -B2005F374A9A5F9900ABB7409CCD50C3AFCCAB1214E6A856F7C7EBA89BC3291801E1343DA9DAD2C6 -ED075C8ECA1423B43E587AEC67E6145272814B3F191B3C285639F9E2D6E148A02DC2CBC0E054D629 -5CD05DBAC1950400A9189316F0265B86A732D302C5BEE8ED233768F237C62600CBAAFF3A110D5EFB -6CC7CA3B92D965CA7C5E8D3E64ECF239FE2507FC797FDBE54C1112B28D4DA44C60AB09D994C5BA78 -D663A2591934CC052BC70CD1DCA3325C66C9CB982E2039F5DB70C848D3DCEF655B1C2CD0CEC8865F -E8E1C0A267BE4F707ECE6F5A3DFCA3CC1EDF92C760439F51AA69A4C1801E96CA4D6EA4AD980258F3 -D15C893913ABCE09101984C61B91D603053E49A97CB82FBA707DAE8AF1D579FD69C8481CB7B712CB -CDDB4D287BE995E32C02B399602A08B9DD849039B5673F1930BEC7BF366EB082D2CA5DB2385C8CC4 -5BE3FC0E31820191A814EBA7C4F23B1938E6C4D800732787CD2CB97F762DFC85D4B798809B5F2254 -D826CA42B32695428D120298B44CF38494E56240B75DF1E41E46E53C44DC505452256DFEC819408D -605FF14D6C1F3F152F2FEA96EA0AB3B472D8704E06BE9F8C3E8395CAADD06D6DA033E81ADE5DC3B8 -3DAFF743C6E9E48716003D358DF63CD7FD3E2F727D1F2D0C29962F76D5C95ED44B6F08D052025A66 -5785F264A3D5F5593677B630E628B5EA81FB37CFFD7A30B7FAD226B6FDC82B0878AF4C0EC4F4243A -807B9839EA62BCBDF7C2E9B30A623876E632E084EBF4A21EDA04FC88A1C07021D0C72EC3E969D449 -FEB08E5826EC20E55B21EA71EA59F6E3B0710B0DDAB3261B4A2029ECAB68C19ADD5174E55D5E984A -4E5F38F592A302FEE6ECE732DDE841A28672C620CC5D687455A5C06FA9FE688394A04F96312ED025 -B7AA6FBCE2925F3AE559CC1886BEECDB70822E2E5CA3F732A87404B1536AAC469989E9610CFA440A -CE43875A70CA51F36CB6F629D9424C1E35A88F92D5DA3CD8CBAE6E8425A36968E21F4F30349749E0 -205BFF8D552837D6FC39532525370BBAC833F75F1854C93FC533A4AA53ADF7008173A70D94A4EBF5 -38EA9E62BCDA7C20E0A073BEE2EFAC34D2EF1D03BABD5147659E50B557045B2EB89DB303749B04D3 -F54B43FED612FCC68206E001A7AFE90230D9C12F74A32C7EDB5D0241DC3A5D51481FD7C8FAE08FEE -263FBCED7C7D911B3A303C835AF5FADFD218F61A9D6DE80485ABCA88200047B094441F7767B97A24 -E8C612590FA2407BAB1E8B56C71914EEF2355DD97CFAFCC192BC06FCE063D3D9D1A629AADC75E3BF -207234C208E7E30663EDD691043065C9CBC473D97C6D4DD3DFF59D6A9ABCDD4412C3128F603160AA -D8F81C6E7A4DCAF35F3A99B4EA10A34375B477C2BF846521A7EABD4D28078E9340452A198F3F5ACC -3DB7E3908939FF6E3709C6A3FD9889439A4AE3E10B618CC92E14B68429A3AD2C80940A1079452EC2 -66F254657BE7D79A2A24084AF73F6DF71FBCD32BF6913A3FAB25F977787F7BB0C3A3E8BAB38D7A2D -B0B4826950643DD1E03BD7DD1FB149A33862A89226B7CB454DAF613128C2075470E42E70A9444A8E -6ECA526345AB48E6F5160BA23B5BDDFDA6049EC44ED1461C7E0DD514B16E2FB285F72039DE3C7982 -EFD40D7F6C8E8F4CF35AC71B467BFC578002E8D2239A2FD2C4BCCDD8AF3D7DB1F4AE7F2D2E0811DF -9D0155BA6EDE50B5F052F14F6AB884FFF244D8806C07EBCB49ED22D85DF696995991A954AA97A1EC -D86ACD76E061B7541E87997FEF0657A826BD88EF3A4A5920462C6595E7A156F453291CA044CED810 -860C3B0149BCE73BECA713040664AD0591304106129600AF71317B0D2907839CEAC99515D357E980 -B1937B6E1200AACADA205421001F1B2F91753E80D2263C56AA164A74701A8D5FD28E46480B0DD963 -A683A1F355D7FB4463C7347C94EA5E2CA40B60B56297CB22D972C5BB10E56715A955605256C1541D -9F3BC5768A6F355CD3B863F0FA1A781EDB49368F51B29481CBB41D4AEB07AF9DBE8F52C5D0FF75F7 -FB6431D37D6AED84D78C778871CB0F715B4F07580F23B586C969C81B471FF6A6C7276F7E141E02A8 -584D4B9AB00E7BD643D2C3FAAA299B1F1E25048461952EA42D4882768A70DE46B213A287F8D31AC4 -6D5436F22A796C05D1FE50A9BC2A928066627A0D87DD57A3AD91DB446404B41557D1457873482005 -EA20916BBE46C613F456C849D46BA79D20627B446B2F49E3FA309AE14F8C420CFD94922CBC0FB9D3 -5A0F7DBEF577F1849A1A80E0011DA8AC082A8C6F61658E65AD177ABDF23EE17C8CF0D26B9FA3A6E9 -4837EB9E930336889767A8D7EA3CE980A8EA95528B004957BE6067CD9BD8E02A0F23CC1762CCA656 -D33412FF45E917FD4A03EB6E8C1F43FDB0A8965A33B4FD26BC24A20B304CA817E88495BA9B361A3E -933717FFB0271F7F70C5D3CBA1E86D0F51BF3ABA194DAF32C35C796627D00C7B2271ACE2463E37E9 -7B3C826CF3DB60028F240F9452CBE08F7EBCC5FDB1BCBB3C327A9F450B9E5671916101D6E3E5E458 -CA31F04D12F592F83BADA2C3683D3886AA3B403963AB5DBE220FEC00037A745839F67A3635DFD3BF -F08F367482962DED88ECF6322852D643A54D5D303EB04BFDDEE9BBA1EBCCBA7C653B3A613A8E719A -DEBE3CE1BD7E754E5F4977E863E3C2D388A65227B451D4F3A4F94E06513CBA4AC1F2F511613FF035 -611684CCC461599000E546E4D972CA6960E095A526E4735A23421A4C9B597ECE08AFA2753592BD16 -DED93255A1E33DEECE3C5EB77B94670E8137F2A4A4B98AC193258E7DEA5DB8408A806188F2D1DDC4 -40CCF0E9A6E2F0C78FDBD7B68DD4939D2458C1965BF8BED4564B32462FFF3EC892C03B11D3EA813F -AB4CFBE8D3016329C5B7E3DFED0F08284D44AA0B7A2F6BC96EA4503E8EF52A64C22BED6B452581AE -8FF8917D53976471941A9116A2D878FB2541B561767ABD4E31CCD8A590CA03494C62AFFD64EA0A1B -C779173DAD84999C7A8D844EB1259DE7BB5B25CD023537A474A524EBE4660B22568949E624D8FEA0 -AD37F4CE1EC75955EEFA49C6BF1803BE87E9C9865FF3F6B8525B8C15FE8835CA153D27E6C0FF0CA5 -1029A7A9185D25F0F14D86FC797DCC1F99EE97E2054B9C2A2E06FDBEB8DEF6CDD368BF23A858D9F8 -C1DEFDCEAF1B4A8DE5EAFC604CECCF0D285BE00AA912EAB66EFF4D37AD2EFE34853BBFD87CE09B18 -749B489943EECAE7887B006FB827D10191DAD18466CD1F86505879310A8B171F902EA0C26A388E13 -B53C700272CEE2BFB47ACB58247C13449C6BB9D01232C32517358F1A3DE064D43C18F8827D53789C -CF3CE2EBE78949A6ABFA1A6B8414CE360A5E22AFB7D1DCE6F5A06182C3B984B4F9BB1A905A9D5A14 -83750A1DE0A857CD5C06945EB7D4A2A6BF1237F32A154FDC06D51A703D44FE052FD3C53E9E8F417B -35D1C851F9203A8997521529F21AD8498F96930AA77EBAF82EE02A57BC77C792D9F220294B45F48E -A8FD94E01CD25645D36D168923562F3FDC93CB79DD4760DA0C103C2675722D7A1B79FCB4245ED12F -A0DB52492C9CCE58B333CFEE822812F7DCA68E802C451B5CFAEBAC608B950386B6C58239D1C62D62 -4DD5D15782FC552222CCA06DDF387B373E32C3C2864C63C768350C37283760F3515A5B0AFD66C48A -B522EB3E808C061F5CD6BD96CD18C9839D30508E7D4EDB88E8F11E31E10919B16B7971F06D7877A0 -58D8A4944C84FC6CAEDF3341B48B6E0D3C7B85D710E0C35F5B5053CF4B4798B3778CC28B2DC7AE0D -F3A49F9F3BCD8E95D746C35C3F47D68B8AA35D97AA08E711B5FBE70D1A623C82541EBDC51A827D0A -69E6C049087AD26F256EB7577F58CCFFBCCBA5A95D093DC29464C9A38DE95BC6B1853963B2DEB0B5 -7AD1248D6F1625E115EEB9510B5772AAE4E3C866657DB0B3BF0E0AC345E116F8D4976B770876FFE3 -748C36165522991F46A36F193DD1A1C94713673C7E4C81582391B636C72DE94CE6254374F99B623E -5686C13D8A8322E83E11BB0B0A896C6A8C2C4F756C5385CD7017F26D23F7C3EE97372C868C8C9155 -81723BB6B76B4C3CE8998E4FA6CA40B633DFDAA59BA902A4952DA90EC4FC3CF0F2676ACFA7F76F78 -236FA2DE10FD3545357215246BB7E527F277C28B353CC6D79DCEF21BCC8F77603CDD58A2CCDDBE3A -9802F941CED8E035313875319548C41992A2BE939A17CC109426E33825AE59BCD17CB19F50D972FF -CBE7D9B4B0BB095303D9DC9D406696C2508D6CE99E11CF00F6461147E97449ED5F486D480A86D3A7 -ACECB7E9A945984724EFC21C5079B1FD03ED803C2DEAFCE3327D2D7827715FD65D9506216C88B0FA -26935E95C64114A51919D419038B1A7E9C1E829FBFB53275093752DF19891A97F3CBF7719C1FD6CB -17019A6D2D25360ECA804C4B35172662CC4769D2B785C6C87E5A4ECCE31704E59F71263B7C3CAEC8 -ACB4C7426EC25F11A0042323EE6C3EEB04284DBAE2C770BC419DCE79BD4560AEA41571C3B595F525 -60191DC7A8FBF63D413A77A0905E517441B16C2B501EA2F9E99CC38D052679F288FDF1894542E3A6 -6989A0090185EB2E75134BFA3D9147C3DB8A621D9D35E37786853779E157B47F71626D6B3E633005 -9159C17596C1B87FE2B4FF47ED9D78FA4C2160077276C8B58CEF5DC030B4A5D83CF257096C047FE6 -4DE307C598B815058E72D5F57DF5C369E664E137DE29349E2F9DCD8C9F4EBA6E765B6327D7A20DFC -B20711273FD8091CBA605C4C494248076F7E03DF65A6A50164980BBBB708741E5BF6056E6F996DC0 -7FFF408C5B8EAB8DCEC315E92873228C805D4440A6470E3EE3983758DD211C9CECDBFAA4C9300CBA -00608A4B2404A3C7AF017A3B7E67F39F0B51ACF950D3E75CC7BC2B8D3480202FA958E8EE0B240501 -5232EE0D264C7CA02C18CA45CB3C2DE322D3EB7F00F9455DB6C5B1F4E59C3E95520EC36D7D903CBB -625D70B54BF6F8255E412604BBB29FEE026CC660577F91DB1DB4A613EEEFB20CF7AE3CD89D565AC8 -38416B01B5DE4FFA5550D17FB51FBBEBE21CF1D56038863EE931B90DEC2E211ED42BA92EC244D4CE -2C4EC5CA87A026992772DC2AF754FC982B94F36EA7B7BF75E0ECE90CBB2A6AA1A012E8898BD679C2 -3CB3827C35D5D02F0569C7AA82615D4AA67518ECF668D3B57D6EF1A8013424AC2268BA0D9A74D588 -79EDCF6382A89D397864940303EAEC45A38304BA8B1CB198967AE23EB81054BE74B16909A405E8A7 -799CEE3C270FE2A6DC50BD7370B6B2C8FDB9A87D88D5D40348D3984E39C693B6F4486D994778607A -80A3122872DD65E40492107C71C3CF708A9717E9EEFAFBDDC239C53AA9645B711038E59C8B861B37 -411AB2039BEDF9CFD00F08D9C5D76154427FF5DD39878CECC5D7BFB3F1F035087185C0981F3C2139 -BE84872FFAD3408531C4EA9387B89F5E3EC779E8850D50992DFDCF9132BC551E985943B07618AC10 -D1150451F0844C0DC41D6E17EB508DC8689EC726400D5A7F6FEB3CC7BCE05F09228B7CB2C5393664 -D8DD9A4B96B1020EF25D70AA2D91CAE93AFB5F2BF0AA18CA5C599FA1A708EF35BF8F7FFEC9AFC1F2 -42870D028B2B1459063B493943EF1283829783E1010242E5CF4DA39D93D506F3892936E7D6CF1124 -70A521D397438733D053944CFF12D6FFAE8246F20618684F263715AA98E15D72A526383E05C23214 -B78338E5B476F0981D90056E6E5D0DB66B1DF2298E597B2ABE1D817E18BEB056E65EDB4234342D96 -00470B1420C9210419D834E431B82F58608C87AC361A02D0F1FE4B470A3D71E0D21BB87E1023D428 -E23D596CB9E1A2184403A16E36E644BCCF9BBDE27290485057E62827283E7380AF786BF395B3961B -A5EA469C315763FA59E0F176EF81985F38B882DE56A74D128E256D1B89939728E55A92ABA21A6B78 -44FAC1BA7BBDD8B34A18194A2984B000380FE9F672E83EFDBF276FE797A325815B0F25CC95C97A9D -ACF56D583486305D7C9E51A7E337D14E3B900333EB38FD93A99587DA2341B10C059C71CE080FE753 -3C0F059FA40E560AF9C4A41A4BE6FB45846FF8F78165E10B4AD40F264BCF5596A1E8EF8CB6EA4B1A -3A5C69059AB1563843679ECB2511A90E8898F54295649CB73D277760D8D04ABACC7BCC6E777A0530 -E2067CCBC08673F9C8C178F9D672AC8A15E5367F0C5651B53E75E0CFA57C931746AE1A679C246D7C -9417F1CD89DDDBD1173C2F880B7B3847CBCCEBF99F7122E832D7C9BAFE2B54CBAA1ED48158DE3F36 -238B76B0E67644A28AEA996DDC006F6AC0242E4B667639E7523CBC90A0561193C1AF34481C2EF402 -EE43A82E1EBF4E3D601BB36B2D95CD93550D61CEE7A94E72F6D30C32C8F91A61E964B1F66ACFC398 -7F95D4028F116E9A9A8474AA29C1C1A984BE0E393BDC41DCEF6A6F1018DB60D52024899D8EB5D55D -324D73F39BFA47377B9E15B3B06A7585589FCF52A54684173E5183367E7B0952DC4BC2767C4C6247 -B1D6103E52BC7B7EA6298F454C5D97AC575F19C10ACDFF4E10C7D3755CFAB4200CAC545269FF1D8D -B0D607C7AD47F40DDF257AB4E7D0750577003C13E4941960C3DD7B0774DDAC18E8ABAF8F53E03CBE -F6D57B44F24CF821014C064278FD51B3427593D17694B4ABCE81F49CBB984C5878CDF0C38D1ED7FD -99B0B9A3BD8D8FF6219588B3B8FA59D0CDD1D9B2F65122AB45E48F1757467B9204926140E3C350C5 -A927A2E700173053EC35D3F1DA2D7258714C97FAA857F0898917BD94625C6D1E2D77138EFCAAAF51 -7B17FE187A2212C24A881A2C6A647DEF6376ED80AE4175C5EE80921F001995B44E49F0D33DD9075A -CF33BB03671C0BCC34AD5784AD1CDFED3A6D9BA103B3DDC1CC2DE74DBB576A0277715275218CD19C -A8899209125266D8BF1286F881DCC2C383749D1E768D670F4099F7DE959EDFE852583183C9111601 -2881A56A24AAF020EA45CD5F39660DEBCE30AC1C7B8CFC60387B1B0C3E361BE612FDFA9F01B7E4B4 -A18839A2C7E0E393EBC5AD9A8A4EBC316A740C1C295D9EF5F4DFFA0667F9582C0BB837B142C4CFC6 -B1798E9476D0631111033B8BA75A10FDC800E2AB1E0E829632F869CFE4737BE9E2800759EE0831DC -7D1195EAF80555771981DD6DC6606812D92CB8EF86447F5F6C6F626D0E265C67E52A6319189EE349 -D48E49DFE6A9E98F76C414A1E3217AE0A215A17E54AA498F4ECDC50242ACC7E2322F63BB2FF2189D -057E7354E32A3ED1803116176B9B9D0129930F919E2FEC280B2C8924E49E7BB75768A2EE1DA8ADBE -D4E3589906DF1B923AEF84C1BD327438B731012E69BB0D43A1842CB88BB54EA4516477F704CFEB28 -6E3EA483445AD4D74586FCF32E96D366901084365F693A53C5FB532FBFE7BC0CADC404C4985042D6 -8DBB90A6DCDA3531EE324D558A214F935CD9FCC9A0CEBE9B5FB0323F4B3820529599EF48EE068B5A -CE85004FEA2984F0A86F5AC9D56163BBFE1142B774148F1EB0A4DC89C3349052533A7DE66729DB24 -41B82F8F7360111DACF69293C9B281A0534F3E9E9224A75C49A832F28B2E497262475507B6DDFA9F -01CA0A6696E3F5AC7EA68595EBA0C2EB8A47813FF936D84AC1B23ECA7AA2862B793CCBB0DF9FDD49 -31BEF354CEC12FBF478559FEC29F81ADF4452E83963E56541D31F3691C93A50F0BBA5E9552C4F2A2 -3A6E53060729854A3DD71CC4308B91957DB19E66AAA18FA67055A950F1C2CFF78A03BC1A588CF624 -696068068719AFB1001C4581EE072113882D9052B21E355D401ED8CD24D067B99E616BDA5A0A5A93 -36FC499632B79FF2FD0DEFB096EF46B75E2D4E0F48DAEA239719FEC4D9A29818F5875FC5041A9EDB -D26CAF0ACE14CC80BA49BBA59E918EB3D8F1E541AA16026585A2F72DF7D83541816DE46981FB3EFD -0C30E458CFAD04C79421AB7C4925E23AEA07F9F018431C790002596D26BD9663B51B699DF53E4882 -CBC34EDE88EB55045B889B6062E35FD1E018BCE785157B85EC3B9CA6C85D4B16238275385B8285DB -012D8FB7C9F5B946A41D7A0FB878FF72C39683144D8A007CFF631B43748F2D5FC690300F9BC0C837 -006B92ECEBE0605E8C3A4A400E18AE8997D1B45FEE10068E247C647CF82C6DFBE5E881D511FFA687 -B7AEB78546BFD07D5F7EC242DCEF4930D8AAAD8C6152B6642AAC325963FD147F236BB850A9966573 -9D06CDBD7CA79A527DCF461E33F22BC9C5DB00DA2BD3DDDD8C99D99793BC98282AA8872FF96C3942 -85D82D9419EB78B6AE37A5F519397700F75D624A09BD255B576E955A323E784E8FC31131F003B0E3 -024A4F58FEF2A6C043796201FC425482E1155E229D1B2D43EF7B0D22322B22EF5C9A1BE026A1C3D3 -75EDAFF99597E1E5477952A4E8D2ACF5D014BC00DC2A272FA62B6983E27D228881E2EF2B8B95A681 -CBE90C5FDE16331C85222FE2A16F0A3C3000A63E2E21666C0C119F8AF89A543D37977069A5ACF155 -6324F05204CE8CAD50FF4FB630D9CBBFC324DEDA584AA56A99D3A76FF55BDC2C2EA3A021361CCD4A -83C7A5E2768D210FA6DE889FD48A39D679C94EC3C99A8D33FF11377DA7F6F1B71A2A05B302ECDE95 -4F26773F39AC881542F0D0969C3995C3519A8EF70B4220D86BF01BEECC6462855E7B686E1AFF1CA9 -1FB8FD8B4A69E10EE0C2AD94ADD44449506F9B6EF43641F2026EFF6E605C670560C2B74706FB949A -A7E8CC6A2D0D6207E457E7FD87EC1B9092DC68B9143947CC8ED14AFDDCBF8FDDA228A76847F96802 -E561F67CEEFDE45AE587673983FC04C96744DBAA83F2DC838D633943C75DCB9E6410474EB27B348F -26E505F0AB90878940E846C5E9F3C5FE8C3558C3236B1B88C405716949B8506841CABE1717474BB7 -C30DB91CDEE33B0F844811762FAEC535BDCF84C1C747CEF9B1FA61D2AFB5A81335BC42C06A94D7D5 -9B7EDE55BCF6F9867AEE107555CDD084B7684C2C87087475A39A9DA6347BE281CE5635A4D07865BA -98CE26C1465B1AB0343F49FF37B4D0CA9F3BB693D78DC3B21925CB996A038DCC172527FE57C07460 -EF39C07D4396E7FA970D9F22ABD21A9C794B64AD96762C7428F59A8757C36D6C4FFB23216195A04C -2A2C2E7B10EF7193931544D782FEE4B91E01119C5553BBC6252270A8D8C56DD62D448F5AD8DC69CC -B45E1F17F0AA1E445129DD00F000005B23D38DE93A3BE55A4C041947F36B4E4536E307D0180553F9 -2E46B743881CB5D5386C48C7D5F84C2BCD06B9C501F78C7EE61FA23516791FCF4DB278AF688A2E60 -10A56692AD92008497487EDFE4BD5FA083FA544138B20D6940020887E35D46E093B71F7A04A67460 -DC8116B4D4839625D7CA6959D6831CD93F81AC4EA2709036DD738364FDE71113BF22EBF13DFE1642 -E564701E6F0FFE7511EDF03FE448C2B28C64FB7D54B94CA576E481FA56B2B18AF10C71F699B6BFD4 -7459CDE1869D0FD306BF489A6F42E5B2F05CCF55BB6B9526973D19CB134CA7F13F1DB3716F8CC217 -73A832568C16250B5CDB16DF24BF81D49F5B37018BD310262EA7078107868AB0216CEC83CEFCAB1E -9F2C665A31585CA04DC01879CAA79AAA5AB201B516F7052B01B16BEE5606098393B0E5D9F9E5E3F4 -EB20F63C958E796DF41CF28839F5C62A0431648745D7837B519F3AA36BC6C08EF040CCF53D9B6D8C -0C7D1A84D707EC57A3C6AC9A62AB37251A01A5ED40FDEC6F5BE6E34C6A91D058319439778A2EE5D0 -363E2E1F33463C33327D05FFC0CBF08D5BC457C7230448972FB9B4D0D782BA7DBF10D3FFEF8BF523 -6EC16D4DD6D0D870D9D5EB5C64C9A46A4F583D4F831FEE74B0E5B33A09ABFD4444929BD8F638CD72 -EAB99CF2E9551DF427683964A592E49D186F285258C5D5F62196A98532421D73E3495F82695FEEC6 -E1952C562D546B28618FFAEEBEFF03A57F4D855021F85B0C7BC37FCC6DA9AECA099B646B99D41896 -09D3FF2D56422F8C37E97640293EC7C90E3380887836F4938FBF495CAC14FBA5648D89282D8D49D9 -1AF73ED36581139D8BD42551E263E830EA3C6EB381D85C42D74C50DB0CCAEC03F535ADE92128A016 -0E811C34748309AF7604919B66CD43EB5CA975302DCB6076FEB6BDD6FF55976FE990FB0CE9ABB11B -195403FB26E3D6C6A0DE1C5BE79E171A61E21F79EE8DBE7A832519813EF6B33EA098C2C32ADEA219 -AB2AAC8B093F40000995539D1276D5F2EF84CCD099B71FE4269BDBDB6A8D59C86F7D2E3FBCCF8773 -D0FAE97640BC1AD43CB4B992BFADFB09DBD0CAAEB8CD9DA264187C4F97300E9A6C9DEED5525479E6 -05C65AE336CBBDF4E5D7F79AD098F977285E065579B748FEAA97F2A753E1F962FCAB68D72BAA8EE4 -FF6691C23E31BC0F3E981A96FB440404856AE1AB32A7205B17D411D8F21C8C93B704D07EC594422A -BC368CDA2B1610CE6A973F4474E12B78B532666797F5755D269772C9F5400B3BFC6C58395D38527E -2CCCF29B56123F7DCEF3BDE5DC1DFC5B0293BB125085B1D2D929BC3EE84F4FAD571A4991C3DEE03F -2DB3A3097E52B1A7D5C73CCB6148EAC62E8E36DE9A71C57638C6E4D5D9DED18174E8C390E50B4A5B -913C074EEAEBE390B214B3A68F02862B9A296DB4B409769649E51D738CBBDFB7702E15C73C2AFC6B -C37CE15171F4E822CF20EFE55D9F061AA43E648989628FF79E65932390CBB15D8E621333B18B11C3 -BDF96F841D7434E01AD501FEA964A75B248A35CD9DF9A37E48A1E5A09C624B93CE44F0042FA00D7F -9EE89B9F7AB785E9C718CF6E7228F743271C2C9BBA17E5208B920E44E765D99D86650EB454B0FAAA -112753AA1BD3A24239E9C5FC47EEB1547AC9D23731B8DC48B9707830DAEC60C8D3790BBA1120F776 -4EFAC542CFFBCD5C05F9510B27B2534B704ECD36C8B041FD49A96881302FFF5B0163A2DD09C751D6 -D6AFEA9170A4F4C4AB8D46E62F763FE1BDA51DD1CE4A27E772F3A2869155F762FF26B7AA6FCFA4F1 -292E56F03AAB6322BF867E7710C34D43B5D85B45AA68014AD7879EED051B1933E491496E3E26D9AA -8B80A07BF2B94F1077E84A9726F08199887D66DE7A307BF33C30DD9CF3DA188088C03B2BAD09A217 -6B110DB2C868B53DA9A66C85737BA66C93C58A259860E294AD0191E3A72C73F40B0BD98699AA08DA -F03587B78F391F3A4313C58D9F29B53C70785637BD0C58310109C54091AB0A34CBB0C478613A7AC0 -FB8F0A8B4645AC966395D8BA775262CD291136AFFDDF01C1D83DD4EB3B59CCAD18057FE7D92A8CD4 -A58F22508D9FD7CF356571F701BBB23E749BDDCBF8A317FDA0AEFD952BB18545610FFAD3AC143D35 -1B8DB3F66293375E0E50235F0D0466932181D377EDD32A5F0FFA4E22B5A0CB4F343D9A7E4A342E9D -09DFF6C697630CD3971802C277A5590B8CA94BDE6B38446C794D072BBCCB724D5BC208EEF1B018D7 -39373BB910D668882CAA779C2D686081DE6A2606417B54D7C20E0E7F722648D893E4EDBAE8F00D6A -6DA3712F91AE860C756D1127D133AB828E9D80023B50B162C5A1C5CDF70CCB3FDD7EA060ED20838B -E1E50C4094C9E79E1A0187CDF780CAF45A725964F004253E034C5BE46BBF89D94631F1A33BAA35B8 -4FA2A9D08481C6674126CD96ED05DCE48BDA069D902D6836D5DFBA701DC0F98A863E64F0E312145D -8DC0B77F25B43AEC729A1243B45B08CA228DD6101CAA2AC5ADCC8EFF84A4CA3F254176C2CC711EE6 -C273835D0FD3528ECA2A976B88E51FE347FDB60F32370B66D338931D6581630ED586F349C638960C -31AE4204E89521A96E1219E696B913DEB2AAB7A3B022D06F34FDFCB810A04E60A4FEBE284C2F063E -0AE9EDF87704921CCFA193BDC912B747E13570066223A49F1F6E2AF0D4D65DA04CA876FF7A462FFC -9C0BA2CC545C3BD36DBE762F32B2D6BE5867C59F479195C92440DC165098B74EA5C3AD93CDF2D410 -B04C16BC7801E7956F4E5107450787AA592493171C3628E6B8F49D4F8429EB98DC52EF025F001387 -BC1A7093F7A99F10B5D2D7DD8BBB393BF6E56F08F4F7FA1A343F220D5A1EAE7168C74D41BE1DC1A8 -3BD65B72B982F4F7B34F24F97F9EC9A91011064031FACFF2A14921A32024385F4E061CD07D152E74 -1BF97156D951A342488FA7F5EF934CCAD13E2753A0AB7A1F565C2F7F6B349DF03BBC25BBD972A9AD -F809BB5C5048A8CCEF9297B2ED3324D18867F293CC66E88B3A39D107B610DFE79A3B4E83A96D3D52 -A17FE8A62C9FDD271130148366942C9CE57558D023DA5F7501319EBFA33DE9E6D1E76D7C20DB8A09 -B657839DA99F3D8143F1EE6253A3295C9651FA4366547893C2DC7ABCBF4BB7609DE5D001E0A36D9F -FBE01F7D0903B3208AE8547E2E5F14EC1AF4C2535CA8F4EA37E3F3CE172C7A1E8308995B1CC23E6E -81190246BCAB6E755BF868D449BB02A2AA87C44C9CC0F571ADC72547CEECBE104BB274B8AC16DCB7 -5D5F458D356466B921ACDEEAE384E2EB1DF6EF393B41B9747F0A4FAEB4AF1928D9AD6FB7E06FDC62 -1E4C6FC98CFB43F88584BD55D9B97CC9549093EDE586912161931162B1B1D52D0443260DABA02AF2 -B4432100D5506546013DA703573FA8013685CC798CE501960093DED713FFCCF89CA2B9106390198C -29A00864108CDCC1984A8BAB53919028C01B26ECC7925E38CBE6CCA8978EE21C2B06E7B3E48FBA97 -8E2A7D186E563C088F84AA23178B60E4729EE87D67B1091F3B6973676C1CBFE6530EB773C62E2C24 -97014AB0E8B71A1F4E86A378AA26591511BEE3CF3D64C94848582E1354E1605B6457823F2C5E640A -D3802946BB2E7E8E594E8C04B430C2385DD40746CE8534F50842E74D7115F3DB0C72D1C9C607C657 -3B094AEB73B7A79876CFFC3E2F8C9FEAAA07D3BFCE05B61F7749A8793BE90CCCECA2D7077F25E899 -D3331FE161A7E86C842495D584C6E4A0880B2951D8A13B88C4672080A0B1BE36BF47C3ACE7288CFE -41A8C1BAA6F0814A947FBD6B3AA72B6C73A8C578CA51CCC96F2352316C467BB960E981F2B6485BFB -44B577E71EFDA16E7405954BC7C9F0759F5A9F1EBCD2FA9CC9648D5831A68887F41B15081A204C24 -B4B992A231DEF9E698D4C3A25B6F5474F5BE6A601F2D337A58A0D21FF37FD91EB86D1D738893A03A -69F0CD743F611CDFFE69DB2C6ED0E4611D56F803BB0DC06E7FE85A303839612707647B1BE9FAF8D6 -84122CA9E5CB8BDE2936D3F4FF254D31529D7538BBD4D35539489F9E7316F24214B996BCDCF1818E -749A71CF0E8845AA1E2A58AA62A48E02BA4564625D20AA220EE719608521D7D7A7FCA0BD8904A401 -9819D371F3F59D46C1354E5FC1A6E5F79B20CF4ACA2BF0F2DE73DA193A6F9ACBFE0B4731C4BCEBE6 -D96FE822965DE965232282A3A130361F188B3AABDA95A8A2790D9240BE008B6A6DE4BBFCADA05B67 -86B9BB8E0DFA0C30043A3B07ED46277E07B9808422C8ED16758B9C396F4EA929D769785B2C9568E5 -70A83B989B25CE200F1727D41E2B702E7F88F1784F4C83FA60A74EB26B2DA95126E508ED519A61CC -151DB6804F61826C5F86D8FA89D06E526FED97A0DB88EDB432FF32C1ACC9B622EEDF601081AF7B96 -3C9CFC1D13E4A9C74FEA0A1C8E3D8653CD92A944D4CA6B0D306619AFD503506D77732D6514F604BE -4610C2560931BDE0B40939BC1D126B0E97F72AE1B4A9252123B54F7A27E0CFA4425B4546526FD741 -CA77952B10D13E0AC2E32006A903808FF0CD013F936238C74CC75FD915244C56A8412F37F0134840 -347699508D6F3D7F3203A25B7C70100719582CD588590EE34B3AB13E255B613A6D00386A0104CC5E -D2C646F09A88888D3751651D5646C5227A3C80E8DA1B0A331121DD2429F1F4775D30564DFF47D01B -BE2C6C72CE4D1FD9A2077C04D2B0274B8916F6A9D1A4A6964A534F47CF241D5A8E34B23F85BE9ACF -FC2FEA961F277539F215F8728D6788F67BEAF45502839BCF23D8763C3949352F00C579A9A4FC408E -C625E310DAE61512DFE6844E82D36A2F81709E1F05B38AE9C222ED62C961EE63593CED7AAF73CE2E -D3667740C77B309B93EEFE1B4BA65D48575A66BE86743DC9E5D3C2FF418D11F7F211B86E827EE1DF -C3613E7498030F07050524536D1F8A94DDB6698BE7B963C55CB3F74B676CD815A7B3DF4B1A0EA2BE -1B0B9A11FFBFD5B1FA49668AEE14629316AF436A0821C20BEEF7B3480847934A99F6D85B68F4DDF8 -859A754E009428AF89A90D1852C220A607FF0806E8080726EDC94D691D214B4521C147C4273AEBDD -BB4A697EF16448CD9B2FC95293305858DECFD406B89B9F3FDAE2AC579E80CF321EBAE5701FB2F7CA -D8ED04B4A63115886D45D6120F69AEF1A21D80AD3C2D35D2899F1902242B96CD349E0AAADA40F7A1 -1282B6B52BDD97708E58DC5E2D22D1153E5FA3F3B300BCDFAF98DEC2F4E3C82A1C85F985735F3987 -4F557579F422664E07CBE19DA680EFB0FC82C323EC5C4644C51709AC8D674608A8043C91E6C7988D -430F10BA6CE1FC7FC0604FCD8F723895250AEC36CC35B3FA14FE2A0D24095DCC30B2093F2298F5F0 -A97676A0BE66C3DC9ADACFE2FC0F721A20E945AFC1096A619075D5E9A264C796EC6C90EF1AEEA8DC -089B44FFC13D27CB2370070A52D4416C53F364393E46EDD7EDE00799960CE6E0D57E4909E88ADD64 -BDD2B0EBE2D73FA6ACF8B40280DAA0637E705C65AABD523B8815F22F23E9FF81E7829C7E4BC980C9 -143AEBE1A04DC0D253396BBB7268BD5AEEA356B610D5DCEE03135E00AE34388251F31714A1C40E18 -2652C48CDA2211A22CB6F02490E69A44CECB169754C53B16028D352E0119F5D5FAE0BD7EA1CDA647 -12A6147374B64244E21E9EC9F0D1381AD22D5B6212B26C3F9AA5F6045F25DD9F5EB4489EA39B1945 -331AC70510C5752557DE21D0A6CFC1EB10A98FA867B76DA6E4249469F591FD154D39E89364A43DB0 -07AA0D7A911CFAE6CE2B557997FBC44F55A27F622BD7B8B10EC9F5D10F2649A646FD964AE1B111B3 -5B46A252C4DEE44E7426EB5739F24E8A390694597DB3A1FE7800C97E59558322F0E49A0CCE2AD94B -1E2D1026AFA771723E3F523916F55ED866C9FB4A2F759651C613A2CFF362028CDF9D38F05D4C7C60 -24C533E930B64B099FB1AF04B01F5FB9CA6867E6EFF55A772C5391831059987E10CBF987E3F378E0 -1329F73D54DC0484177D3C3C06F67397955FF1CA4EF8AD1606B70455255D631A7D6EB92BFDBA14A0 -FF28B2ACE7E81AD666EA9B3A0F5A6BA3B5DFE35044FA4B3D8ED956009C60E98CC132F2E84967F4A9 -8A67B336D5EE7CAF7DD1F74D1FA08619941361FA7312CF225D89CEF97E864C8369EAFAB94D97F056 -5505D825972B754F6729596EEA91210B75DD8F645382ACE36DE60819A02B3B48DD00F5485F9264F9 -FA926D732E2C267B0BE8CA98526F124F97EFDB86132C5EF16B103908172FC51F286FFE45FF253512 -E0033F037FF182BA536A9EB2DF2D1DB257D9C86C46E1B002FB32AC70CA9462E6EB48994752CEBCE3 -9F08ABD4F4B0889283E55500702185A841E328 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/NimbusMonL-Regu-iso1252 /NimbusMonL-Regu ISO1252Encoding psp_definefont -/Times-Roman-iso1252 /Times-Roman ISO1252Encoding psp_definefont -294 310 moveto -0 0 0 setrgbcolor -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<4558504F52545F505953435249505453202B3D20534D4553485F6669786174696F6E5F68657861 -2E70792C20534D4553485F666C696768745F736B696E2E7079> -show -294 398 moveto -<69666571202840574954484E455447454E402C79657329> -show -294 442 moveto -<20204558504F52545F505953435249505453202B3D20534D4553485F626F785F74657472612E70 -792C20534D4553485F626F78325F74657472612E70792C205C202020> -show -294 486 moveto -<20202020202020202020202020202020202020202020534D4553485F626F78335F74657472612E -70792C20534D4553485F6669786174696F6E5F74657472612E70792C205C> -show -294 530 moveto -<20202020202020202020202020202020202020202020534D4553485F506172746974696F6E315F -74657472612E7079> -show -294 574 moveto -<656E646966> -show -295 691 moveto -/Symbol findfont 50 -50 matrix scale makefont setfont - -show -370 691 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<46696E616C656D656E74> -show -595 691 moveto -<20> -show -607 691 moveto -<3A> -show -294 797 moveto -/NimbusMonL-Regu-iso1252 findfont 42 -42 matrix scale makefont setfont -<2E2F6275696C645F636F6E666967757265> -show -294 841 moveto -<636420534D4553485F4255494C44> -show -294 885 moveto -<726D20636F6E6669672E2A> -show -294 929 moveto -<53414C4F4D45325F524F4F542F534D4553485F5352432F636F6E6669677572652096776974682D -6E657467656E3D6E657467656E5F696E7374616C6C6174696F6E5F70617468205C> -show -294 973 moveto -<967072656669783D736D6573685F696E7374616C6C5F70617468> -show -294 1016 moveto -<6D616B65> -show -220 1128 moveto -/Times-Roman-iso1252 findfont 50 -50 matrix scale makefont setfont -<6FF920736D6573685F696E7374616C6C5F7061746820657374206C61206469726563746F727920 -6427696E7374616C6C6174696F6E206475206D6F64756C6520534D4553482E> -show -280 277 1 308 rectfill -2125 277 1 308 rectfill -280 277 1846 1 rectfill -280 584 1846 1 rectfill -280 763 1 264 rectfill -2125 763 1 264 rectfill -280 763 1846 1 rectfill -280 1026 1846 1 rectfill -showpage -grestore grestore -%%PageTrailer - -%%Trailer -%%Pages: 7 -%%EOF diff --git a/doc/salome/AddNetgenInSalome2.sxw b/doc/salome/AddNetgenInSalome2.sxw deleted file mode 100644 index 15381905dbdc2d5bd91fb9f039013a733fea0b1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13363 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 diff --git a/doc/salome/Makefile.in b/doc/salome/Makefile.in deleted file mode 100644 index 15dbc9285..000000000 --- a/doc/salome/Makefile.in +++ /dev/null @@ -1,44 +0,0 @@ - -# -* Makefile *- -# -# Author : Patrick GOLDBRONN (CEA) -# Date : 30/11/2001 -# $Header$ -# -# source path -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - -SUBDIRS= tui gui - -@COMMENCE@ - -docs: - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done; \ - cp -f $(srcdir)/SMESH_index.html SMESH_index.html - -clean: - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done - -distclean: clean - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done - -install: - $(MAKE) docs - (cd tui && $(MAKE) install); - (cd gui && $(MAKE) install); - cp -f SMESH_index.html $(docdir) - -uninstall: - @@SETX@; for d in $(SUBDIRS); do \ - (cd $$d && $(MAKE) $@) || exit 1; \ - done; \ - rm -fr $(docdir)/SMESH_index.html diff --git a/doc/salome/PluginMeshers.txt b/doc/salome/PluginMeshers.txt deleted file mode 100644 index 61bb0842b..000000000 --- a/doc/salome/PluginMeshers.txt +++ /dev/null @@ -1,188 +0,0 @@ -####################################################################################### -# File : PluginMeshers.txt -# Author : Julia DOROVSKIKH -# Module : SMESH -# $Header$ -####################################################################################### -# -# How to add your own mesher (as a set of hypotheses and algorithms) to the application -# -####################################################################################### - -1. Create mesher plugin package, e.g. MyMesher. - -2. Create XML file to describe all algorithms and hypotheses, provided by plugin package - (see SMESH_SRC/resources/SMESH_Meshers.xml for example). - - - - - - - - - - - Attributes of tag: - - - value of attribute is used to collect hypotheses/algoritms in groups; - you can also use this attribute for short description of your mesher plugin - - - value of attribute (MyResourceKey) is used to access resources - (messages and icons) from GUI (see paragraphs 4.2 and 5); - currently it should coincide with the name of plugin package; this limitation - will be eliminated in the further development. - - - value of attribute describes the name of your mesher's - server plugin library (See paragraph 3) - - - value of attribute describes the name of your mesher's - client plugin library (See paragraph 4) - - Attributes of tag: - - - value of attribute is an unique name of the hypothesis/algorithm - - * It is a value of _name field of your hypothesis class - (see paragraph 3, implementation of constructor of - StdMeshers_LocalLength class: _name = "LocalLength") - - * It is a key to each certain hypothesis class - (see paragraph 3, implementation of "GetHypothesisCreator()" method in StdMeshers_i.cxx) - - * It is a key to each certain hypothesis GUI - (see paragraph 4, implementation of "StdMeshersGUI_HypothesisCreator::CreateHypothesis()" - and "StdMeshersGUI_HypothesisCreator::EditHypothesis()" methods in StdMeshersGUI.cxx) - - * It is a key to each certain hypothesis icon in Object Browser - (see paragraph 4.2.1) - - - value of attribute is displayed in the GUI in the list - of available hypotheses/algorithms ("Create Hypothesis/Algorithm" dialog) - - - value of attribute is a name of icon file, which is displayed in GUI - in the list of available hypotheses/algorithms ("Create Hypothesis/Algorithm" dialog) - - Note: All attributes values are accessible in your GUI via HypothesisData class - (see paragraph 4.1) - - Note: The environment variable SMESH_MeshersList contains the list of plugins names, - separated by colon (":") symbol, e.g.: - - setenv SMESH_MeshersList StdMeshers:NETGENPlugin - - Please, pay attention that StdMeshers should also be included into this environment variable, - if you want to use standard hypotheses/algorithms, provided with SMESH module. - - The SALOME automatically locates XML files, searching them in the following directories: - - ${_ROOT_DIR}/share/salome/resources - ${SALOME_Resources} - ${HOME}/.salome/resources - ${KERNEL_ROOT_DIR}/share/salome/resources - - where is a name of each mesher plugin package - -3. Build server plugin library . - - 3.1. Define interface to your hypotheses and algorithms. - - Example: SMESH_SRC/idl/SMESH_BasicHypothesis.idl - NETGENPLUGIN_SRC/src/NETGENPlugin_Algorithm.idl - - 3.2. Implement functionality of your hypotheses and algorithms. - Inherit corresponding classes from SMESH. - - Example: SMESH_SRC/src/StdMeshers/StdMeshers_* - NETGENPLUGIN_SRC/src/NETGENPlugin_NETGEN_3D - - 3.3. Implement interface to your hypotheses and algorithms. - Inherit corresponding classes from SMESH_I. - - Example: SMESH_SRC/src/StdMeshers_I/SMESH_*_i - NETGENPLUGIN_SRC/src/NETGENPlugin_NETGEN_3D_i - - 3.4. Implement being exported method. - - GenericHypothesisCreator_i* GetHypothesisCreator (const char* aHypType) - - is a value of attribute in the XML-description file - - Example: SMESH_SRC/src/StdMeshers_I/StdMeshers_i.cxx - NETGENPLUGIN_SRC/src/NETGENPlugin_i.cxx - -4. Build client (GUI) plugin library . - This step is required only if your hypotheses/algorithms need specific GUI for their construction. - - 4.1. Implement the required GUI (e.g. construction dialog boxes). - - Example: SMESH_SRC/src/StdMeshersGUI/StdMeshersGUI_*Dlg - - Note: all data from XML-description files is accessible in your GUI via HypothesisData class - (mySMESHGUI->GetHypothesisData (aHypType), - see SMESHGUI_Hypotheses.h for HypothesisData definition) - - 4.2. Provide icons and messages for your GUI. - - 4.2.1. Implement resource files - MyResourceKey_icons.po and MyResourceKey_msg_en.po - - Example: SMESH_SRC/src/StdMeshersGUI/StdMeshers_*.po - NETGENPLUGIN_SRC/src/NETGENPlugin_icons.po - - Note: ICON_SMESH_TREE_HYPO_MyHypType1 is ID of icon for Object Browser - for hypothesis with type="MyHypType1". - - ICON_SMESH_TREE_ALGO_MyAlgType1 is ID of icon for Object Browser - for algorithm with type="MyAlgType1". - - See paragraph 2 for definition of MyResourceKey, MyHypType1, MyAlgType1. - - 4.2.2. Define environment variable SALOME_Resources to point to the - directory where resources are situated. - - Example: setenv SALOME_StdMeshersResources ${SMESH_ROOT_DIR}/share/salome/resources - - 4.3. Implement your Hypothesis Creator and being exported method - - SMESHGUI_GenericHypothesisCreator* GetHypothesisCreator - (QString aHypType, QString aServerLibName, SMESHGUI* aSMESHGUI) - - is to pass a value of attribute in XML-description file; - is to pass a value of attribute in XML-description file. - - Example: SMESH_SRC/src/StdMeshersGUI/StdMeshersGUI.cxx - -5. If your hypotheses/algorithms do not need specific GUI, - but you want to provide icons for object browser, see 4.2 paragrath - -6. Setup your SALOME environment. - - 6.1. Add your plugin to the LD_LIBRARY_PATH, PYTHONPATH (and maybe PATH) environment variables, e.g.: - - setenv PATH /bin/salome:${PATH} - setenv LD_LIBRARY_PATH /lib/salome:${LD_LIBRARY_PATH} - setenv PYTHONPATH /lib/python2.2/site-packages/salome:${PYTHONPATH} - - 6.2. Set mesher plugin resources environment variable (see 4.2.2 paragraph) - -Note: If you use runSalome.py script from KERNEL package to launch SALOME, you may not to set - environment variables, because this script sets them itself. All what you should do is - to add section to your ${HOME}/.salome/salome.launch file for SMESH module section: - - ... - - ... - - - - ... - - ... \ No newline at end of file diff --git a/doc/salome/SMESH_index.html b/doc/salome/SMESH_index.html deleted file mode 100644 index 585ce9e7e..000000000 --- a/doc/salome/SMESH_index.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - Mesh Module Documentation - - - -
  -
-
                   -   
- - - - - - - - - -
- - - -
- -
-
-
-

Mesh MODULE Documentation

-
-
- - - - - -
-
- -
-

Application-About.png -     

-
- -
- - - - -
-
-
-
-
- -
- -
GUI Documentation
- -
- -
- -

-
- -
- -
TUI Documentation
- -
- -
- -

-
-
-
-
-
-
- - diff --git a/doc/salome/gui/Makefile.in b/doc/salome/gui/Makefile.in deleted file mode 100644 index 883a053da..000000000 --- a/doc/salome/gui/Makefile.in +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (C) 2003 CEA/DEN, EDF R&D -# -# -# -# File : Makefile.in -# Author : Vasily Rusyaev (Open Cascade NN) -# Module : doc -# $Header: - -top_srcdir=@top_srcdir@ -top_builddir=../../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - -@COMMENCE@ - -docs: - cp -fr $(srcdir)/SMESH ./ - -find $(PWD) -name CVS -exec rm -rf {} \; - -clean: - rm -fr `ls | grep -v "Makefile"` - -distclean: clean - rm -fr SMESH - -install: - mkdir -p $(docdir)/gui - cp -rf SMESH $(docdir)/gui - -find $(PWD) -name CVS -exec rm -rf {} \; - -uninstall: - rm -rf $(docdir)/gui/SMESH diff --git a/doc/salome/gui/SMESH/SMESH.log b/doc/salome/gui/SMESH/SMESH.log deleted file mode 100755 index fb02a90f8..000000000 --- a/doc/salome/gui/SMESH/SMESH.log +++ /dev/null @@ -1,401 +0,0 @@ -|SourceProjectName:SMESH.hpr -|DestinationProjectName:smesh.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 -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 -whdata\whtoc.js -whdata\whtoc.xml -whdata\whtoc.htm -whdata\whtdata.js -whdata\whidx.js -whdata\whidx.xml -whdata\whidx.htm -whdata\whidata.js -whdata\whfts.js -whdata\whfts.xml -whdata\whfts.htm -whdata\whglo.js -whdata\whglo.xml -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 -cshdat_robohelp.htm -wht_tab0.gif -wht_tab1.gif -wht_tab2.gif -wht_tab3.gif -wht_tab4.gif -wht_tab5.gif -wht_tab6.gif -wht_tab7.gif -wht_tab8.gif -wht_glo_h.gif -wht_glo_n.gif -wht_fts_h.gif -wht_fts_n.gif -wht_idx_h.gif -wht_idx_n.gif -wht_toc_h.gif -wht_toc_n.gif -wht_ws.gif -wht_ws_g.gif -wht_logo1.gif -wht_logo2.gif -wht_abgw.jpg -wht_abgi.jpg -wht_abge.jpg -wht_abtw.jpg -wht_abte.jpg -wht_abti.jpg -wht_spac.gif -wht_next.gif -wht_next_g.gif -wht_prev.gif -wht_prev_g.gif -wht_sync.gif -wht_hide.gif -wht_go.gif -whstart.ico -whestart.ico -whrstart.ico -whidhtml.htm -whfdhtml.htm -whskin_banner.htm -whtbar.js -default.skn -whskin_pdhtml.htm -whskin_papplet.htm -whskin_plist.htm -whskin_tbars.htm -whskin_mbars.htm -wht_toc4.gif -wht_toc1.gif -wht_toc2.gif -wht_toc3.gif -whskin_frmset010.htm -whst_topics.xml -whskin_frmset01.htm -smesh_hha.hhk -smesh.hhc -smesh.hhk -extrusion.htm -files\1d_meshing_algorithm.htm -files\2d_(quadrangle)_meshing_algorithm.htm -files\2d_meshing_algorithm.htm -files\3d_meshing_algorithm.htm -files\about_hypotheses.htm -files\about_meshes.htm -files\about_meshing_algorithms.htm -files\about_modification_of_meshes.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\computing_meshes.htm -files\connectivity.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\deflection_1d.htm -files\diagonal_iversion_of_elements.htm -files\displacing_nodes.htm -files\displaying_elements_numbers.htm -files\displaying_nodes_numbers.htm -files\editing_groups.htm -files\editing_hypotheses.htm -files\importing_and_exporting_meshes.htm -files\introduction_to_smesh.htm -files\length_from_edges.htm -files\length_of_edges.htm -files\local_length_hypothesis.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\number_of_segments_hypothesis.htm -files\propagation_of_1d_hypothesis_on_opposite_edges.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\scalar_bar_properties.htm -files\sewing_meshes.htm -files\shading.htm -files\shrink.htm -files\skew.htm -files\smoothing.htm -files\start_and_end_length_hypothesis.htm -files\symmetry.htm -files\taper.htm -files\tetrahedron_(ghs3d)_meshing_algorithm.htm -files\tetrahedron_(netgen)_meshing_algorithm.htm -files\translation.htm -files\uniting_a_set_of_triangles.htm -files\uniting_two_triangles.htm -files\using_operations_on_groups.htm -files\using_smesh_module.htm -files\view_update.htm -files\viewing_mesh_info.htm -files\visualization_modes.htm -files\visualization_properties.htm -files\warp.htm -files\wireframe.htm -pattern_mapping.htm -revolution.htm -ehlpdhtm.js -texture_horiz_ltbluebubbles.jpg -smesh.glo -default.css -image96.gif -image77.jpg -image66.jpg -image55.jpg -image85.gif -image74.gif -image44.jpg -image63.gif -image22.jpg -image11.jpg -image41.gif -image97.gif -image78.jpg -image67.jpg -image75.gif -image45.jpg -image34.jpg -image64.gif -image23.jpg -image12.jpg -image31.gif -image98.gif -image87.gif -image68.jpg -image57.jpg -image76.gif -image46.jpg -image35.jpg -image65.gif -image43.gif -image32.gif -image24.jpg -image88.gif -image69.jpg -image58.jpg -image77.gif -image47.jpg -image36.jpg -image66.gif -image44.gif -image33.gif -image22.gif -image25.jpg -image89.gif -image59.jpg -image78.gif -image48.jpg -image67.gif -image34.gif -image26.jpg -image79.gif -image49.jpg -image38.jpg -image68.gif -image57.gif -image16.jpg -image46.gif -image35.gif -image27.jpg -image24.gif -image39.jpg -image69.gif -image3.jpg -pics\exemple.gif -image36.gif -image28.jpg -image25.gif -image18.jpg -image4.jpg -image37.gif -image29.jpg -image26.gif -note1.gif -image2.gif -image38.gif -image27.gif -image80.jpg -image6.jpg -image39.gif -image28.gif -image81.jpg -image70.jpg -image4.gif -image7.jpg -image29.gif -pics\new.jpg -image90.gif -image71.jpg -image60.jpg -image8.jpg -image91.gif -image72.jpg -image61.jpg -image50.jpg -image80.gif -image6.gif -image9.jpg -image92.gif -image73.jpg -image62.jpg -image51.jpg -image81.gif -image40.jpg -image70.gif -image7.gif -i_blue.jpg -image93.gif -image74.jpg -image63.jpg -image52.jpg -image82.gif -image41.jpg -image71.gif -image30.jpg -image8.gif -image94.gif -image75.jpg -image64.jpg -image53.jpg -image83.gif -image42.jpg -image72.gif -image61.gif -image31.jpg -image9.gif -image20.jpg -image95.gif -image76.jpg -image65.jpg -image54.jpg -image84.gif -image43.jpg -image73.gif -image32.jpg -image21.jpg -image10.jpg -image40.gif -smesh.ppf -default_ns.css -whdata\whtdata0.xml -whdata\whtdata0.htm -whdata\whftdata0.xml -whdata\whftdata0.htm -whdata\whfwdata0.xml -whdata\whfwdata0.htm -whdata\whgdata0.xml -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\whlstt11.htm -whgdata\whlstt12.htm -whgdata\whlstt13.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\whlstf0.htm -whgdata\whlstf1.htm -whgdata\whlstf2.htm -whgdata\whlstf3.htm -whgdata\whlstf4.htm -whgdata\whlstf5.htm -whgdata\whlstf6.htm -whgdata\whlstf7.htm -whgdata\whlstg0.htm -smesh.htm -smesh_csh.htm -smesh_rhc.htm diff --git a/doc/salome/gui/SMESH/cshdat_robohelp.htm b/doc/salome/gui/SMESH/cshdat_robohelp.htm deleted file mode 100755 index 3baed1880..000000000 --- a/doc/salome/gui/SMESH/cshdat_robohelp.htm +++ /dev/null @@ -1,252 +0,0 @@ - - -SMESH 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 571288606..000000000 --- a/doc/salome/gui/SMESH/cshdat_webhelp.htm +++ /dev/null @@ -1,251 +0,0 @@ - - -SMESH reference manual - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/default.css b/doc/salome/gui/SMESH/default.css deleted file mode 100755 index d2d425ac0..000000000 --- a/doc/salome/gui/SMESH/default.css +++ /dev/null @@ -1,209 +0,0 @@ -/*=(===============================================================)*/ - -/*=(===============================================================)*/ -/*=(Created with RoboEditor.)=======================================*/ -/*=(===============================================================)*/ - -BODY { - background-color: #ffffff; - font-family: "Times New Roman", serif; -} - -H1 { - font-weight: bold; - font-size: 24.0pt; -} - -/*=(Generated Code)=================================================*/ -/*=(WARNING: DO NOT EDIT OR DELETE THIS SECTION!)===================*/ -/*begin!kadov{{=====================================================*/ -LI.kadov-H1 { - font-weight: bold; - font-size: 24.0pt; -} -/*}}end!kadov=======================================================*/ - - - -H2 { - font-weight: bold; - font-size: 18.0pt; -} - -/*=(Generated Code)=================================================*/ -/*=(WARNING: DO NOT EDIT OR DELETE THIS SECTION!)===================*/ -/*begin!kadov{{=====================================================*/ -LI.kadov-H2 { - font-weight: bold; - font-size: 18.0pt; -} -/*}}end!kadov=======================================================*/ - - - -H3 { - font-weight: bold; - font-size: 14.0pt; -} - -/*=(Generated Code)=================================================*/ -/*=(WARNING: DO NOT EDIT OR DELETE THIS SECTION!)===================*/ -/*begin!kadov{{=====================================================*/ -LI.kadov-H3 { - font-weight: bold; - font-size: 14.0pt; -} -/*}}end!kadov=======================================================*/ - - - -H4 { - font-weight: bold; - font-size: 12.0pt; -} - -/*=(Generated Code)=================================================*/ -/*=(WARNING: DO NOT EDIT OR DELETE THIS SECTION!)===================*/ -/*begin!kadov{{=====================================================*/ -LI.kadov-H4 { - font-weight: bold; - font-size: 12.0pt; -} -/*}}end!kadov=======================================================*/ - - - -H5 { - font-weight: bold; - font-size: 10.0pt; -} - -/*=(Generated Code)=================================================*/ -/*=(WARNING: DO NOT EDIT OR DELETE THIS SECTION!)===================*/ -/*begin!kadov{{=====================================================*/ -LI.kadov-H5 { - font-weight: bold; - font-size: 10.0pt; -} -/*}}end!kadov=======================================================*/ - - - -H6 { - font-weight: bold; - font-size: 8.0pt; -} - -/*=(Generated Code)=================================================*/ -/*=(WARNING: DO NOT EDIT OR DELETE THIS SECTION!)===================*/ -/*begin!kadov{{=====================================================*/ -LI.kadov-H6 { - font-weight: bold; - font-size: 8.0pt; -} -/*}}end!kadov=======================================================*/ - - - -P { - font-size: 12.0pt; - margin-top: 0pt; - margin-bottom: 0pt; -} - -/*=(Generated Code)=================================================*/ -/*=(WARNING: DO NOT EDIT OR DELETE THIS SECTION!)===================*/ -/*begin!kadov{{=====================================================*/ -LI.kadov-P { - font-size: 12.0pt; -} -/*}}end!kadov=======================================================*/ - - - -A.expandspot { - color: #008000; - cursor: hand; - font-style: italic; - x-text-underline: off; - x-text-overline: off; - x-text-line-through: off; - /*begin!kadov{{*/ text-decoration: none none none; /*}}end!kadov*/ -} - -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; - /*begin!kadov{{*/ text-decoration: none none none; /*}}end!kadov*/ -} - -A.glossterm { - color: #800000; - cursor: hand; - font-style: italic; - x-text-underline: off; - x-text-overline: off; - x-text-line-through: off; - /*begin!kadov{{*/ text-decoration: none none none; /*}}end!kadov*/ -} - -SPAN.glosstext { - font-style: italic; - font-weight: normal; - color: #0000ff; -} - -OL, -UL { - margin-top: 0px; - margin-bottom: 0px; -} - -A:active { -} - -A:hover { - x-text-underline: Off; - /*begin!kadov{{*/ text-decoration: none; /*}}end!kadov*/ -} - -A:link { - x-text-underline: Off; - /*begin!kadov{{*/ text-decoration: none; /*}}end!kadov*/ -} - -A:visited { - x-text-underline: Off; - /*begin!kadov{{*/ text-decoration: none; /*}}end!kadov*/ -} - -P.TODO { - font-weight: normal; - font-style: italic; - font-family: "Arial Black", sans-serif; -} - -/*=(Generated Code)=================================================*/ -/*=(WARNING: DO NOT EDIT OR DELETE THIS SECTION!)===================*/ -/*begin!kadov{{=====================================================*/ -LI.kadov-P-CTODO { - font-weight: normal; - font-style: italic; - font-family: "Arial Black", sans-serif; -} -/*}}end!kadov=======================================================*/ - - - - -/*=(===============================================================)*/ diff --git a/doc/salome/gui/SMESH/default.skn b/doc/salome/gui/SMESH/default.skn deleted file mode 100755 index f162a6624..000000000 --- a/doc/salome/gui/SMESH/default.skn +++ /dev/null @@ -1,262 +0,0 @@ - - - - Default - Contents - font-family:Arial font-size:8pt font-weight:normal font-style:normal text-decoration:none font-sizeadjust:none font-stretch:normal font-variant:normal - - - - - - - - - - - - - -]]> - - - - - - - - - - - - - - background:#99ccff - font-family:Tahoma font-size:8pt font-weight:Normal font-style:Normal text-decoration:none font-sizeadjust:none font-stretch:normal font-variant:normal font-color:Black - - background:#639ace - font-family:Tahoma font-size:8pt font-weight:Normal font-style:Normal text-decoration:none font-sizeadjust:none font-stretch:normal font-variant:normal font-color:White - - left - - Contents - ::??DefaultWebSkinText??:: - - - default - - - - default - - - - - Index - ::??DefaultWebSkinText??:: - - - default - - - - default - - - - - Search - ::??DefaultWebSkinText??:: - - - default - - - - default - - - - - Glossary - ::??DefaultWebSkinText??:: - - - default - - - - default - - - - - WebSearch - ::??DefaultWebSkinText??:: - - - default - - - - default - - - - - Search Input - - - - - <text></text> - - - - - Logo - - eHelp Corporation - - - - - background:#99ccff - font-family:Tahoma font-size:8pt font-weight:Normal font-style:Normal text-decoration:none font-sizeadjust:none font-stretch:normal font-variant:normal font-color:Black - - background:#639ace - font-family:Tahoma font-size:8pt font-weight:Normal font-style:Normal text-decoration:none font-sizeadjust:none font-stretch:normal font-variant:normal font-color:White - - - Previous - ::??DefaultWebSkinText??:: - - - default - - - - default - - - - - Next - ::??DefaultWebSkinText??:: - - - default - - - - default - - - - - Sync TOC - ::??DefaultWebSkinText??:: - - - default - - - - default - - - - - Hide - ::??DefaultWebSkinText??:: - - - default - - - - default - - - - - - - - - - - background:White alink:Silver hover-color:Navy - font-family:Tahoma font-size:8pt font-weight:Normal font-style:Normal text-decoration:none font-sizeadjust:none font-stretch:normal font-variant:normal font-color:Black - - - - background:White alink:Silver hover-color:Navy - font-family:Tahoma font-size:8pt font-weight:Normal font-style:Normal text-decoration:none font-sizeadjust:none font-stretch:normal font-variant:normal font-color:Black - - - background:White - - - <text>::??DefaultWebSkinText??::</text> - <font>font-family:Tahoma font-size:8pt font-weight:Normal font-style:Normal text-decoration:none font-sizeadjust:none font-stretch:normal font-variant:normal font-color:Navy</font> - - - - - - - background:White alink:Silver hover-color:Navy - font-family:Tahoma font-size:8pt font-weight:Normal font-style:Normal text-decoration:none font-sizeadjust:none font-stretch:normal font-variant:normal font-color:Black - - - background:White - - - <text>::??DefaultWebSkinText??::</text> - <font>font-family:Tahoma font-size:8pt font-weight:Normal font-style:Normal text-decoration:none font-sizeadjust:none font-stretch:normal font-variant:normal font-color:Navy</font> - - - - - - - background:White alink:Silver hover-color:Navy - font-family:Tahoma font-size:8pt font-weight:Normal font-style:Normal text-decoration:none font-sizeadjust:none font-stretch:normal font-variant:normal font-color:Black - - ::??DefaultWebSkinText??:: - font-family:Tahoma font-size:8pt font-weight:Normal font-style:Normal text-decoration:none font-sizeadjust:none font-stretch:normal font-variant:normal font-color:Navy - background:White - - - - ::??DefaultWebSkinText??:: - - - - - ::??DefaultWebSkinText??:: - font-family:Tahoma font-size:8pt font-weight:Normal font-style:Normal text-decoration:none font-sizeadjust:none font-stretch:normal font-variant:normal font-color:Navy - background:White - - - - ::??DefaultWebSkinText??:: - - - - - - - - none - - - diff --git a/doc/salome/gui/SMESH/default_ns.css b/doc/salome/gui/SMESH/default_ns.css deleted file mode 100755 index 020a67111..000000000 --- a/doc/salome/gui/SMESH/default_ns.css +++ /dev/null @@ -1,122 +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:1; - margin-bottom:1; - 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:1; - margin-bottom:1; } -ol ul { - margin-top:1; - margin-bottom:1; } -ul ul { - margin-top:1; - margin-bottom:1; } -ul ol { - margin-top:1; - margin-bottom:1; } diff --git a/doc/salome/gui/SMESH/ehlpdhtm.js b/doc/salome/gui/SMESH/ehlpdhtm.js deleted file mode 100755 index 86d26ea96..000000000 --- a/doc/salome/gui/SMESH/ehlpdhtm.js +++ /dev/null @@ -1,4033 +0,0 @@ -// eHelp® Corporation Dynamic HTML JavaScript -// Copyright© 1998-2001 eHelp® Corporation.All rights reserved. -// Version=4.57 - -// 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 gbBsIE = (gstrBsAgent.indexOf('msie') != -1); -var gbBsNS = (gstrBsAgent.indexOf('mozilla') != -1) && ((gstrBsAgent.indexOf('spoofer') == -1) && (gstrBsAgent.indexOf('compatible') == -1)); -var gbBsOpera = (gstrBsAgent.indexOf('opera') != -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 gbBsIE4 = ((gbBsIE) && (gnBsVer >= 4)); -var gbBsIE5 = false; -var gbBsIE55 = false; - -gbBsIE = (navigator.appName.indexOf("Microsoft") != -1); - -if (parseInt(navigator.appVersion) >= 4) { - gbBsIE4 = (navigator.appName.indexOf("Microsoft") != -1); - - 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; - } -} - -var gbBsMac = (gstrBsAgent.indexOf('mac') != -1); -var gbBsWindows = ((gstrBsAgent.indexOf('win') != -1) || (gstrBsAgent.indexOf('16bit') != -1)); -var gbBsOp3 = (gstrBsAgent.indexOf('opera') != -1); - -// 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 = document.all.tags("BODY")[0]; - if( typeof(objBody) == "object" ) - { - objBody.insertAdjacentHTML("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) { -//Do not try to write ininle styles for NS! NS can not handle it and will not stop downloading the html page... - if (gbBsNS6) - document.write(""); - else - document.write("
"); - } else{ - document.write(""); - if (gbBsIE4) { - document.write(""); - } - } - g_bIsPopupMenuInit = true; - } -} - -//Define variable arguments as: strTitle, strUrl -function MTE() -{ - this.strTitle = MTE.arguments[0]; - if (MTE.arguments.length > 1) - this.strURL = MTE.arguments[1]; - else - this.strURL = this.strTitle; -} - -// If the topic list is set, it is an array of TopicEntry objects (defined in WebHelp3.js) -function PopupMenu_SetTopicList(aPopupTopicArray) -{ - gbPopupMenuTopicList = aPopupTopicArray; -} - - -//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"); - wndPopupLinks.document.write(""); - var strParaLine = ""; - for (var i = 0; i < (argLen - 2) / 2; i++) { - strParaLine = ""; - strParaLine += ""); - wndPopupLinks.document.close(); - window.gbInPopupMenu = true; - if (!gbBsIE) { - wndPopupLinks.focus(); - } - - return false; - } - - - if (((argLen < 5) && ((isNaN(fn_arguments[2])) || (gbPopupMenuTopicList == null))) || - ((argLen < 4) && ((!isNaN(fn_arguments[2])) && (gbPopupMenuTopicList != null)))) { - // Get the place that we will be putting the topic into - var strURL = ""; - if (isNaN(fn_arguments[2]) || (gbPopupMenuTopicList == null)) { - strURL = fn_arguments[3]; - } - else { - strURL = gbPopupMenuTopicList[fn_arguments[2]].strURL; - } - - if (targetDoc != null) { - targetDoc.location.href = strURL; - } - else { - if (fn_arguments[1] != null && typeof(fn_arguments[1]) != "undefined") - window.open(strURL, fn_arguments[1]); - else - window.open(strURL); - } - window.gbInPopupMenu = true; - return false; - } - - var strMenu = ""; - if (gbBsNS4) { - strMenu = ''; - } else { - strMenu = '
'; - } 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) { - - layerPopup = document.all["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) { - layerPopup = document.getElementById("PopupMenu"); - layerPopup.style.visibility = "hidden"; - - var e = fn_arguments[0]; - nEventX = e.pageX; - nEventY = e.pageY; - _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) { - e.srcElement.className = "PopupOver"; - } else if (gbBsNS4) { -// this.bgColor = "red"; -// e.target.document.className = "PopupOver"; - } - return; -} - -function PopupMenu_Out(e) -{ - if (gbBsIE4) { - e.srcElement.className = "PopupNotOver"; - } else if (gbBsNS4) { - this.bgColor = "#f0f0f0"; - } - return; -} - - -function PopupMenu_HandleClick(e) -{ - if (window.gbPopupMenuTimeoutExpired) { - - window.gbInPopupMenu = false; - - if (gbBsNS4 && !gbBsNS6) { - window.releaseEvents(Event.MOUSEDOWN); - } - - var layerPopup = null; - var stylePopup = null; - if (gbBsIE4) { - layerPopup = document.all["PopupMenu"]; - stylePopup = layerPopup.style; - stylePopup.visibility = "hidden"; - } else if (gbBsNS6) { - layerPopup = document.getElementById("PopupMenu"); - layerPopup.style.visibility = "hidden"; - } else if (gbBsNS4) { - layerPopup = document.layers.PopupMenu; - layerPopup.visibility = "hide"; - } - - if (gOlddocumentClick) - { - if (gbBsNS4 && !gbBsNS6) - document.onmousedown = gOlddocumentClick; - else - document.onclick = gOlddocumentClick; - } - } - return; -} - -// This function should be deleted when all old projects are cleaned up -function BSPSWritePopupFrameForIE4() -{ - return false; -} - -///////////////////////////////////////////////////////////////////// -function BSSCPopup_ClickMac() -{ - if ((!DHTMLPopupSupport()) && (gbBsIE4)) - { - 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 = el.parentElement; - } - } - 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) - 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 -////////////////////////////////////////////////////////////////////////////////////////////// -// -// Begin DHTML Popup Functions -// -////////////////////////////////////////////////////////////////////////////////////////////// -//variables used to isolate the browser type -var gBsDoc = null; -var gBsSty = null; -var gBsHtm = null; -var gBsStyVisShow = null; -var gBsStyVisHide = null; -var gBsClientWidth = 640; -var gBsClientHeight = 480; -var gBsBrowser = null; - -// 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 eval("document.all['" + getPopupTopicID(nIndex) + "']").style; -} - -function getPopupShadowStyle(nIndex) -{ - return eval("document.all['" + getPopupShadowID(nIndex) + "']").style; -} - -function getPopupIFrame(nIndex) -{ - - return eval("document.frames['" + getPopupIFrameName(nIndex) + "']"); -} - -function getPopupDivStyle(nIndex) -{ - return eval("document.all['" + getPopupID(nIndex) + "']").style; -} - -function getPopupIFrameStyle(nIndex) -{ - return eval("document.all['" + getPopupIFrameName(nIndex) + "'].style"); -} - - -function findDiv(strURL) -{ - var i = 0; - for (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) -{ - var i = 0; - for (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() -{ - var i = 0; - for (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() -{ - var i = 0; - for (i = 0; i < arrayPopupURL.length; i ++ ) - getPopupDivStyle(i).visibility = gBsStyVisHide; -} - -function getCurrentPopupIFrame() -{ - var i = 0; - for (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; - -} - -//the browser information itself -function _BSPSBrowserItself() -{ - var agent = navigator.userAgent.toLowerCase(); - this.major = parseInt(navigator.appVersion); - this.minor = parseFloat(navigator.appVersion); - this.ns = ((agent.indexOf('mozilla') != -1) && ((agent.indexOf('spoofer') == -1) && (agent.indexOf('compatible') == -1))); - this.ns2 = ((this.ns) && (this.major == 2)); - this.ns3 = ((this.ns) && (this.major == 3)); - this.ns4 = ((this.ns) && (this.major >= 4)); - this.ns6 = ((this.ns) && (this.major >= 5)); - this.ie = (agent.indexOf("msie") != -1); - this.ie3 = ((this.ie) && (this.major == 2)); - this.ie4 = ((this.ie) && (this.major >= 4)); - this.op3 = (agent.indexOf("opera") != -1); - - if (this.ns4) - { - gBsDoc = "document"; - gBsSty = ""; - gBsHtm = ".document"; - gBsStyVisShow = "show"; - gBsStyVisHide = "hide"; - - } - else if (this.ie4) - { - gBsDoc = "document.all"; - gBsSty = ".style"; - gBsHtm = ""; - gBsStyVisShow = "visible"; - gBsStyVisHide = "hidden"; - } -} - -//Here is the browser type -function _BSPSGetBrowserInfo() -{ - gBsBrowser = new _BSPSBrowserItself(); -} - -_BSPSGetBrowserInfo(); - -//Get client size info -function _BSPSGetClientSize() -{ - if (gBsBrowser.ns4) - { - gBsClientWidth = innerWidth; - gBsClientHeight = innerHeight; - - } - else if (gBsBrowser.ie4) - { - 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)) { - return true; - } - return false; -} - - - -function BSSCPopup_IsPopup() -{ - if (DHTMLPopupSupport() && (this.name.indexOf(gstrPopupIFrameName) != -1)) { - return true; - } else if ((gbBsNS4 || gbBsIE4) && (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. -if (BSSCPopup_IsPopup() && !gbBsIE4) { - 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 = document.all.tags("BODY")[0]; - if( typeof(objBody) != "object" ) - return; - - objBody.insertAdjacentHTML("beforeEnd", strPopupDiv); -} - -function BSSCPopup_Timeout(nIndex, nToken) -{ - if (!IsValidToken(nToken)) return; - - if ((getPopupIFrame(nIndex).document.readyState == "complete") && - (getPopupIFrame(nIndex).document.body != null)) { - window.getPopupDivStyle(nIndex).visibility = gBsStyVisShow; - setClear(nIndex); - window.gbPopupTimeoutExpired = true; - - BSSCPopup_ChangeTargettoParent(getPopupIFrame(nIndex).document); - getPopupIFrame(nIndex).document.body.onclick = BSSCPopupClicked; - - if (!gbOrignalOnMouseDown && document.onmousedown) - gbOrignalOnMouseDown = document.onmousedown; - - document.onmousedown = BSSCPopupParentClicked; - - } 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 = tagsObject.all.tags("A"); - BSSCPopup_ChangeTargettoParent2(collA); - - var collIMG = tagsObject.all.tags("IMG"); - BSSCPopup_ChangeTargettoParent2(collIMG); -} - -function BSSCPopup_ChangeTargettoParent2(colls) -{ - var j = 0; - if (colls != null) { - for (j = 0; j < colls.length; j ++ ) - { - var strtemp = colls[j].href; - 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()) { - // If we are already in a popup, replace the contents - // if (BSSCPopup_IsPopup()) { - // parent._BSSCPopup(strURL, cuswidth, cusheight); - // } else { - 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; - window.onbeforeunload = window_BUnload; -} - -function window_BUnload() -{ - for (var i = 0; i < arrayPopupURL.length; i ++) - document.all(getPopupID(i)).outerHTML = ""; - arrayPopupURL.length = 0; - if (ehlpdhtm_fOldBefureUnload) - ehlpdhtm_fOldBefureUnload(); -} - -function _BSSCPopup2(strURL, width, height) -{ - if (window.name == gstrPopupSecondWindowName) { - window.location = strURL; - } else { - if (!gbBsMac || !gBsBrowser.ns4) { - 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 (gBsBrowser.ns) { - if (gBsBrowser.ns6) { - strParam += ",Height=" + nHeight + ",Width=" + nWidth; - strParam += ",screenX=" + nX + ",screenY=" + nY; - } - 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; - } - window.gPopupWindow = window.open(strURL, gstrPopupSecondWindowName, strParam); - - if (gBsBrowser.ns4) { - window.gPopupWindow.captureEvents(Event.CLICK | Event.BLUE); - window.gPopupWindow.onclick = NonIEPopup_HandleClick; - window.gPopupWindow.onblur = NonIEPopup_HandleBlur; - } - else if (gBsBrowser.ie4) - { - setTimeout("setPopupFocus();", 100); - } - } - return; -} - -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.target == "") - window.location.href = e.target.href; - else - window.open(e.target.href, e.target.target); - - if (e.target.href.indexOf("javascript:void(0)") == -1 && e.target.href.indexOf("javascript:null") == -1 && e.target.href.indexOf("BsscPopup") == -1) { - this.close(); - } - } else { - this.close(); - } - return false; - -} - -function BSSCPopup_AfterLoad(nIndex, nToken, cuswidth, cusheight) -{ - if (typeof(window.getPopupIFrame(nIndex).document) == "unknown") { - _BSSCPopup2(getPopupURL(nIndex), cuswidth, cusheight); - return; - } - if (!IsValidToken(nToken)) 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; - - // Determine the width and height for the window - //var size = new BSSCSize(0, 0); - //BSSCGetContentSize(window.getPopupIFrame(nIndex), size); - //var nWidth = size.x; - //var nHeight = size.y; - - _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. - // if (nWidth < 40 || nHeight < 40) return; // there must be something terribly wrong. - - window.getPopupDivStyle(nIndex).pixelWidth = nWidth; - window.getPopupDivStyle(nIndex).pixelHeight = nHeight; - - window.getPopupShadowStyle(nIndex).pixelWidth = nWidth; - window.getPopupShadowStyle(nIndex).pixelHeight = nHeight; - window.getPopupTopicStyle(nIndex).pixelWidth = nWidth; - window.getPopupTopicStyle(nIndex).pixelHeight = nHeight; - if (gbBsIE55) - { - window.getPopupShadowStyle(nIndex).pixelWidth = nWidth + 2; - window.getPopupShadowStyle(nIndex).pixelHeight = nHeight + 2; - window.getPopupTopicStyle(nIndex).pixelWidth = nWidth + 2; - window.getPopupTopicStyle(nIndex).pixelHeight = nHeight + 2; - } - - window.getPopupIFrameStyle(nIndex).pixelWidth = nWidth; - window.getPopupIFrameStyle(nIndex).pixelHeight = nHeight; - if (gbBsIE55) - { - window.getPopupIFrameStyle(nIndex).top = 0; - window.getPopupIFrameStyle(nIndex).left = 0; - } - - var strURL = getPopupURL(nIndex); - if (strURL.indexOf("#") != -1) - getPopupIFrame(nIndex).location.href = strURL; // reload again, this will fix the bookmark misunderstand in IE5. - - MoveDivAndShow(nIndex, nToken, cuswidth, cusheight); -} - -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 = window.getPopupDivStyle(nIndex).pixelWidth; - var nHeight = window.getPopupDivStyle(nIndex).pixelHeight; - - if (nClickY + nHeight + 20 < gBsClientHeight + document.body.scrollTop) { - nTop = nClickY + 10; - } else { - nTop = (document.body.scrollTop + gBsClientHeight) - nHeight - 20; - } - if (nClickX + nWidth < gBsClientWidth + document.body.scrollLeft) { - nLeft = nClickX; - } else { - nLeft = (document.body.scrollLeft + gBsClientWidth) - nWidth - 8; - } - - if (nTop < document.body.scrollTop ) nTop = document.body.scrollTop + 1; - if (nLeft< document.body.scrollLeft) nLeft = document.body.scrollLeft + 1; - - - window.getPopupDivStyle(nIndex).left = nLeft; - window.getPopupDivStyle(nIndex).top = nTop; - - // Set the location of the background blocks - window.getPopupShadowStyle(nIndex).left = 6; - window.getPopupShadowStyle(nIndex).top = 6; - if (gbBsIE55) - { - window.getPopupShadowStyle(nIndex).left = 4; - window.getPopupShadowStyle(nIndex).top = 4; - } - - if (gbBsMac) { - // Total hack on the iMac to get the IFrame to position properly - window.getPopupIFrameStyle(nIndex).pixelLeft = 100; - window.getPopupIFrameStyle(nIndex).pixelLeft = 0; - // Explicitly call BSSCOnLoad because the Mac doesn't seem to do it - window.getPopupIFrame(nIndex).window.BSSCOnLoad(); - } - - BSSCPopup_Timeout(nIndex , nToken ); - - return; -} - -function BSSCSize(x, y) -{ - this.x = x; - this.y = y; -} - -function BSSCGetContentSize(thisWindow, size) -{ - if (!((gBsBrowser.ie4) || (gBsBrowser.ns4))) - return; - - if (gbBsMac) { - size.x = 300; - size.y = 300; - 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'; - - // Handle absurd cases just in case IE flakes - // if (size.y < 100) { - // size.y = 100; - // } - } - } - 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; - //i = 0; - 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; - //i ++; - - } - //size.x = x - gBscrollWidth; - 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; - } - } - } - - // no reload no scrollbar. - //size.x = size.x + 16; //reserve a width for scrollbar (IE 4.0 only) - - 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 BSSCPopupClicked() -{ - if (!window.gbPopupTimeoutExpired) { - return false; - } - - - var popupIFrame = getCurrentPopupIFrame(); - if (popupIFrame == null) { - return true; - } - -/* - if ("undefined" != typeof(popupIFrame.gbInPopupMenu) && - popupIFrame.gbInPopupMenu) { - return true; - }*/ - - if (!((popupIFrame.window.event != null) && - (popupIFrame.window.event.srcElement != null) && - ((popupIFrame.window.event.srcElement.tagName == "A") || - (popupIFrame.window.event.srcElement.tagName == "IMG")))) { - document.onmousedown = gbOrignalOnMouseDown; - - // Simply hide the popup - hideAll(); - - window.gbPopupTimeoutExpired = false; - - return true; - } -} - - -//trace the mouse over's position for hotspot -function BSPSPopupOnMouseOver(event) -{ - if (gBsBrowser.ie4) { - window.gnPopupClickX = event.clientX + document.body.scrollLeft; - window.gnPopupClickY = event.clientY + document.body.scrollTop; - window.gnPopupScreenClickX = event.screenX; - window.gnPopupScreenClickY = event.screenY; - } else if (gBsBrowser.ns4) { - 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 (gBsBrowser.ns4) { - 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) - -var s_strAgent = navigator.userAgent.toLowerCase(); -var s_nVer = parseInt(navigator.appVersion); - -var s_bIE = (s_strAgent.indexOf('msie') != -1); -var s_bNS = (s_strAgent.indexOf('mozilla') != -1) && ((s_strAgent.indexOf('spoofer') == -1) && (s_strAgent.indexOf('compatible') == -1)); -var s_bOpera = (s_strAgent.indexOf('opera') != -1); - -var s_bIE3Before = ((s_bIE) && (s_nVer <= 2)); -var s_bNS3Before = ((s_bNS) && (s_nVer <= 3)); - -var s_bNS2 = ((s_bNS) && (s_nVer <= 2)); -var s_bNS3 = ((s_bNS) && (s_nVer == 3)); -var s_bIE300301 = ((s_bIE) && (s_nVer == 2) && ((s_strAgent.indexOf("3.00") != -1)||(s_strAgent.indexOf("3.0a") != -1)||(s_strAgent.indexOf("3.0b")!=-1)||(s_strAgent.indexOf("3.01")!=-1))); -var s_bIE302 = ((s_bIE) && (s_nVer == 2) && (s_strAgent.indexOf("3.02") != -1)); - - -function HasExtJs() -{ - if (s_bIE3Before) { return false;} - if (s_bNS3Before) { return false;} - if (typeof (BsGeneralOnLoad) == "undefined"){ return false; } - return true; -} - - -function BSSCCreatePopupDiv() -{ - return; -} - - -function WritePopupMenuLayer() -{ - if (HasExtJs()) {_WritePopupMenuLayer();} -} - -function BSSCPopup(strURL, width, height) -{ - if (HasExtJs()) { - _BSSCPopup(strURL, width, height); - }else{ - //Create a temporary window first to ensure the real popup comes up on top - var wndTemp = null; - if (!s_bNS3) { - 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 (!s_bNS3) { - wndTemp.close(); - } else { - wndPopup.focus(); - } - } -} - -var gbWndTemp = null, gbWndPopupLinks = null; -var gbstrParaTotal = ""; - -function PopupMenu_Invoke() -{ - if (HasExtJs()) { - return _PopupMenu_Invoke(PopupMenu_Invoke.arguments); - } - if (s_bNS3Before || s_bIE3Before ) { - 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 (s_bNS2 || s_bOpera){ - strParaLine += "
" - strParaLine += PopupMenu_Invoke.arguments[2 * i + 2]; - strParaLine += ""; - } else { - strParaLine += ""); - if (s_bNS2 || s_bOpera) { - 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 (!s_bNS3 && 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( !CCSSP.bIsWinOS && !CCSSP.bIsSunOS) - return 0; - - if( typeof(el) == "string" ) - el = document.all.item(el); - - var src = el.getAttribute( "x-use-popup" ); - if(!src) - return 0; - - var name = src; - if( src.substr(0,1) == "#" ) - name = src.substr(1, src.length-1); - var srcDiv = document.all.item(name); - if( !srcDiv ) - return 1; - - var type = el.getAttribute( "x-popup-type" ); - var setup = el.getAttribute( "x-tmp-setup" ); - var newId = name; - if( newId.indexOf( "_tmp") <= 0 ) - newId += "_tmp"; - - if( !setup ) - { - el.setAttribute( "x-tmp-setup", 1 ); - - if( type == "pulldown" ) - { - var strAdjust = kadovAdjustObjectTag(srcDiv.innerHTML,0); - var strCleanHTML = kadovRetrieveCleanHTML(strAdjust, ""); - 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 + "
"; - - srcDiv.outerHTML = ""; // empty the original DIV tag - var elParentPra = kadovFindParentParagraph(el); - if( elParentPra ) - elParentPra.insertAdjacentHTML( "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 = ""; - srcDiv.outerHTML = ""; // empty the original DIV tag - el.insertAdjacentHTML( "AfterEnd", newSpan ); - } - } - return 0; -} - -function kadovTextPopup( el ) -{ - if( (!CCSSP.bIsWinOS && !CCSSP.bIsSunOS) || (window.event == null) ) - return; - window.event.cancelBubble = true; - - if( typeof(el) == "string" ) - el = document.all.item(el); - - var src = el.getAttribute( "x-use-popup" ); - if(!src) - return; - - var name = src; - if( src.substr(0,1) == "#" ) - name = src.substr(1, src.length-1) + "_tmp"; - var srcDiv = document.all.item(name); - if( !srcDiv ) - return; - - var type = el.getAttribute( "x-popup-type" ); - var setup = el.getAttribute( "x-tmp-setup" ); - if( srcDiv ) - { - if( srcDiv.style.display == "" ) - srcDiv.style.display = "none"; - else - { - srcDiv.style.display = ""; - if( typeof(srcDiv.bInitialized) == "undefined" ) - { - srcDiv.bInitialized = true; - kadovInitEffects(name); - kadovInitEachChild(srcDiv); - } - } - } - return; -} - -function kadovFindParentParagraph( el ) -{ - if( typeof(el) == "string" ) - el = document.all.item(el); - if( (!el) || el.tagName == "BODY" ) - return null; - if( kadovIsParagraph(el.parentElement) ) - return el.parentElement; - else - return kadovFindParentParagraph( el.parentElement ); -} - -//Begin HTML code invoked function -function kadovRegisterEventHandler( obj, strEvent, strEventHandler ) -{ - if( !gbBsIE4 ) - return; - CCSSP.RegisterEventHandler( obj, strEvent, strEventHandler ); -} - -function kadovTextPopupInit( el ) -{ - if( (!gbBsIE4) || (!CCSSP.bIsWinOS && !CCSSP.bIsSunOS)) - return; - - if( typeof(el) == "string" ) - el = document.all.item(el); - if( el != null ) - { - CCSSP.RegisterEventHandler( el, "onclick", "kadovTextPopup(" + el.id +");" ); - CCSSP.RegisterEventHandler( window, "onload", "kadovTextPopupOnLoad(" + el.id +");" ); - } -} -//End HTML code invoked function - -//End to support extended and dropdown text effects. - -//Begin to convert iWrite format to RoboEditor Format for DHTML effects -function kadovInitTriggersInHead( ) -{ - if( Object.xDelayedInitElements ) - { - var x = Object.xDelayedInitElements; - for(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( (!CCSSP.bIsWinOS && !CCSSP.bIsSunOS ) || 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.strAgent = navigator.userAgent.toLowerCase(); -CCSSP.nAppVersion = parseInt(navigator.appVersion); - -CCSSP.bIsWinOS = ((CCSSP.strAgent.indexOf("win") >= 0) || (CCSSP.strAgent.indexOf("16bit") >= 0)); -CCSSP.bIsMacOS = (CCSSP.strAgent.indexOf("mac") >= 0); -CCSSP.bIsSunOS = (CCSSP.strAgent.indexOf("sunos") != -1); - -CCSSP.bIsIE = (navigator.appName.indexOf("Microsoft") >= 0); -CCSSP.bIsIE4 = (CCSSP.bIsIE && (CCSSP.nAppVersion >= 4)); -CCSSP.bIsIE5 = (CCSSP.bIsIE4 && (CCSSP.strAgent.indexOf("msie 5") != -1) ) - -CCSSP.bIsNav = (navigator.appName.indexOf("Netscape") >= 0); -CCSSP.bIsNav4 = (CCSSP.bIsNav && (CCSSP.nAppVersion >= 4)); -CCSSP.bIsNav6 = (CCSSP.bIsNav && (CCSSP.nAppVersion >= 5)); - -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( CCSSP.bIsNav4 ) - 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( CCSSP.bIsNav4 ) - 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( CCSSP.bIsNav4 ) - 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( CCSSP.bIsNav4 ) - obj.bgColor = color; - else - obj.style.backgroundColor = color; -} - -CCSSP.ShowObject = function(obj, bShow) -{// set the object to be visible or invisible - if( CCSSP.bIsNav4 ) - 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( CCSSP.bIsNav4 ) - return obj.left; - else - return obj.style.pixelLeft; -} - -CCSSP.GetObjectTop = function(obj) -{// retrieve the y coordinate of a posionable object - if( CCSSP.bIsNav4 ) - 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( CCSSP.bIsNav4 ) - 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( CCSSP.bIsNav4 ) - 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( CCSSP.bIsNav4 ) - 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( CCSSP.bIsNav4 ) - 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( CCSSP.bIsNav4 ) - return obj.clip.height; - else - return obj.offsetHeight; -} - -CCSSP.GetObjectWidth = function(obj) -{// retrieve the width of a posionable object - if( CCSSP.bIsNav4 ) - 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 (CCSSP.bIsNav4 && !CCSSP.bIsNav6) - return ; - var oldHandler = ""; - if (CCSSP.bIsMacOS && CCSSP.bIsIE4) - { - 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 - shall 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/files/1d_meshing_algorithm.htm b/doc/salome/gui/SMESH/files/1d_meshing_algorithm.htm deleted file mode 100755 index 51d954a9f..000000000 --- a/doc/salome/gui/SMESH/files/1d_meshing_algorithm.htm +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - -1D meshing algorithm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Wire discretization

- -

This algorithm is used for meshing of 1D entities of - geometrical objects - edges. -

- -

 

- -

To apply the Wire discretization meshing algorithm:

- -

 

- -
- - - - - diff --git a/doc/salome/gui/SMESH/files/2d_(quadrangle)_meshing_algorithm.htm b/doc/salome/gui/SMESH/files/2d_(quadrangle)_meshing_algorithm.htm deleted file mode 100755 index 4c605aadc..000000000 --- a/doc/salome/gui/SMESH/files/2d_(quadrangle)_meshing_algorithm.htm +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - -2D (Quadrangle) meshing algorithm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Quadrangle meshing algorithm

- -

This algorithm is used for meshing of 2D entities of - geometrical objects - faces. -

- -

 

- -

To apply the Quadrangle meshing algorithm:

- -

 

- -

In - the Create Algorithms dialog box - select this algorithm and click Create.

- - - - - diff --git a/doc/salome/gui/SMESH/files/2d_meshing_algorithm.htm b/doc/salome/gui/SMESH/files/2d_meshing_algorithm.htm deleted file mode 100755 index d7fe96efe..000000000 --- a/doc/salome/gui/SMESH/files/2d_meshing_algorithm.htm +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - -2D meshing algorithm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Triangle (Mefisto) meshing algorithm

- -

This algorithm is used for meshing of 2D entities of - geometrical objects - faces. -

- -

 

- -

To apply the Triangle meshing algorithm:

- -

 

- -

In - the Create Algorithms dialog box - select this algorithm and click Create.

- - - - - diff --git a/doc/salome/gui/SMESH/files/3d_meshing_algorithm.htm b/doc/salome/gui/SMESH/files/3d_meshing_algorithm.htm deleted file mode 100755 index dc0851a19..000000000 --- a/doc/salome/gui/SMESH/files/3d_meshing_algorithm.htm +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - -3D meshing algorithm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Hexahedron meshing algorithm

- -

This algorithm is used for meshing of 3D entities of - geometrical objects - volume objects. -

- -

 

- -

To apply the Hexahedron meshing algorithm:

- -

 

- -

In - the Create Algorithms dialog box - select this algorithm and click Create.

- - - - - diff --git a/doc/salome/gui/SMESH/files/about_hypotheses.htm b/doc/salome/gui/SMESH/files/about_hypotheses.htm deleted file mode 100755 index 4777bbd4c..000000000 --- a/doc/salome/gui/SMESH/files/about_hypotheses.htm +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - - - - - -About hypotheses - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

About hypotheses

- -

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 SMESH there are the following - basic hypotheses:

- -

 

- - - -
    - - -
- - - -

 

- -

 

- -

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)

  • -
- -

 

- -

To - create a hypothesis

- -

In the main menu select Hypotheses - > Create hypotheses

- -

The following menu will appear:

- -

 

- -

- -

 

- -

Select one of the menu items and click Create. - A data input dialog box corresponding to the chosen type of the hypotheses - will appear. The created hypotheses shall appear in the Object Browser - under the Hypotheses folder:

- -

 

- -

 

- -

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/about_meshes.htm b/doc/salome/gui/SMESH/files/about_meshes.htm deleted file mode 100755 index d846be3a7..000000000 --- a/doc/salome/gui/SMESH/files/about_meshes.htm +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - - - - -About meshes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

About meshes

- -

MESH represents - a discretization of a geometrical CAD model into a set of entities with - a simple topology. In SMESH 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 SMESH functions - destined for modification of generated meshes. More about this functionality - of SMESH see in the chapter "Modifying meshes".

  • -
- -

 

- -

The topology of a mesh is described by the relationships between its - entities including:

- -

 

- -
    - -
  • Node - – 0D element of a mesh presented by a point with coordinates (x, y, z).

  • - -
  • Edge - – 1D element of a mesh defined by two nodes.

  • - -
  • Face - – 2D element of a mesh defined by three or four edges (closed contour).

  • - -
  • 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 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: inverse and 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.

- -

 

- -

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,Â…).

- -

 

- -

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/files/about_meshing_algorithms.htm b/doc/salome/gui/SMESH/files/about_meshing_algorithms.htm deleted file mode 100755 index 6024897f7..000000000 --- a/doc/salome/gui/SMESH/files/about_meshing_algorithms.htm +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - - - - -About meshing algorithms - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

About meshing algorithms

- -

The SMESH module contains a set of meshing algorithms, - which are used for meshing of all kinds of entities (1D, 2D, 3D) composing - geometrical objects. They are as follows:

- -

 

- -
    - -
  • For meshing of 1D entities (edges):

  • -
- -

 

- - - -

 

- -
    - -
  • For meshing of 2D entities (faces):

  • -
- -

 

- - - -

 

- -
    - -
  • For meshing of 3D entities (volume - objects):

  • -
- -

 

- - - -

 

- -

To - apply a meshing algorithm

- -

In the main menu select Hypotheses - > Create Algorithms

- -

The following menu will appear:

- -

 

- -

- -

 

- -

Select one of the menu items and click Create. - The created algorithms shall appear in the Object Browser under the Algorithms folder:

- -

 

- -

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/about_modification_of_meshes.htm b/doc/salome/gui/SMESH/files/about_modification_of_meshes.htm deleted file mode 100755 index a942834fa..000000000 --- a/doc/salome/gui/SMESH/files/about_modification_of_meshes.htm +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - -About modification of meshes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

About modification of meshes

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/about_quality_controls.htm b/doc/salome/gui/SMESH/files/about_quality_controls.htm deleted file mode 100755 index 839e3de7e..000000000 --- a/doc/salome/gui/SMESH/files/about_quality_controls.htm +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - - - - -About quality controls - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

About quality controls

- -

Mesh - quality control in SMESH 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.      

- -

 

- -

In SMESH you have at your disposal the - following mesh quality controls:

- -

 

- - - - - - - diff --git a/doc/salome/gui/SMESH/files/adding_nodes_and_elements.htm b/doc/salome/gui/SMESH/files/adding_nodes_and_elements.htm deleted file mode 100755 index faf7a9867..000000000 --- a/doc/salome/gui/SMESH/files/adding_nodes_and_elements.htm +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - - - - -Adding nodes and elements - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Adding nodes and elements

- -

In SMESH you can add to your mesh different elements such as:

- -

 

- -
    - -
  • Nodes

  • - -
  • Edges

  • - -
  • Triangles

  • - -
  • Quadrangles

  • - -
  • Tetrahedrons

  • - -
  • Hexahedrons

  • -
- -

 

- -

To add a node or an 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, - the following associated submenu will appear:

- -

 

- -

- -

 

- -

 

- -

From this submenu select the type of element - which you would like to add to your mesh. The corresponding dialog box - shall appear.

- -

Adding nodes

- -

- -

 

- -

In this dialog box set coordinates for your - node in the Coordinates set of - fields and click the Apply or - OK button. Your node will be created:

- -

 

- -

- -

 

- -

Adding edges

- -

 

- -

- -

 

- -

In this dialog box specify the nodes which - will form your edge by selecting them in the 3D viewer with pressed Shift - button and click the Apply or - OK button. Your edge will be created:

- -

 

- -

- -

 

- -

Adding triangles

- -

 

- -

- -

 

- -

In this dialog box specify the nodes which - will form your triangle by selecting them in the 3D viewer with pressed - Shift button and click the Apply or - OK button. Your triangle will - be created:

- -

 

- -

- -

 

- -

Adding quadrangles

- -

- -

In this dialog box specify the nodes which - will form your quadrangle by selecting them in the 3D viewer with pressed - Shift button and click the Apply or - OK button. Your quadrangle will - be created:

- -

 

- -

- -

 

- -

Adding tetrahedrons

- -

- -

 

- -

In this dialog box specify the nodes which - will form your tetrahedron by selecting them in the 3D viewer with pressed - Shift button and click the Apply or - OK button. Your tetrahedron will - be created:

- -

 

- -

- -

Adding hexahedrons

- -

- -

 

- -

In this dialog box specify the nodes which - will form your hexahedron by selecting them in the 3D viewer with pressed - Shift button and click the Apply or - OK button. Your hexahedron will - be created:

- -

 

- -

 

- -

- - - - - diff --git a/doc/salome/gui/SMESH/files/area_of_elements.htm b/doc/salome/gui/SMESH/files/area_of_elements.htm deleted file mode 100755 index d832bffb0..000000000 --- a/doc/salome/gui/SMESH/files/area_of_elements.htm +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - - - - -Area of elements - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Area of elements

- -

Area of elements 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. Choose Quality - Controls > Area or click button. Your mesh will - be displayed in the viewer with its elements colored according to the - applied mesh quality control criterion:

- -

 

- -

 

- -

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/arithmetic_1d.htm b/doc/salome/gui/SMESH/files/arithmetic_1d.htm deleted file mode 100755 index 36ad79aa6..000000000 --- a/doc/salome/gui/SMESH/files/arithmetic_1d.htm +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - -Arithmetic 1D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Arithmetic 1D hypothesis

- -

Arithmetic 1D - - hypothesis for the Regular 1D algorithm. It 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.

- -

 

- -

Similar to Start and End Length.

- -

 

- -

To define the Arithmetic 1D hypothesis:

- -

 

- -

Select this hypothesis in the - Create Hypotheses dialog box - click Create. The following dialog - box will appear:

- -

 

- -

- -

 

- -

In this dialog box you can set:

- -

 

- -
    - -
  • Name - of your Arithmetic 1D hypothesis;

  • - -
  • Start - and End length values

  • -
- - - - - diff --git a/doc/salome/gui/SMESH/files/aspect_ratio.htm b/doc/salome/gui/SMESH/files/aspect_ratio.htm deleted file mode 100755 index 1e1117fd0..000000000 --- a/doc/salome/gui/SMESH/files/aspect_ratio.htm +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - - - - -Aspect Ratio - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Aspect Ratio

- -

The Aspect Ratio - quality criterion for mesh elements is defined as follows:

- -

 

- -
    - -
  • For a triangle - 2D element consisting of 3 nodes a the Aspect - Ratio is calculated as the ratio of the length, h2, of the edge - of this triangle, to the height, h1. The ratio of h2 to h1 is then multiplied - by  3(1/2) /2, so that - a “perfect” element in the shape of an equilateral triangle will be equal - to 1. This procedure is repeated for the remaining two edges of the triangle, - and the largest value is retained as the Aspect - Ratio for the element.

  • -
- -

 

- -

- -

 

- -

 

- -
    - -
  • For a quadrangle - 2D element consisting of 4 nodes  the - Aspect Ratio is the ratio of the - element's longest side to its shortest side.

  • -
- -

- -

 

- -

To apply the Aspect Ratio quality criterion to your mesh:

- -

 

- -

1. Display your mesh in the viewer.

- -

 

- -

2. Choose Quality - Controls > Aspect Ratio 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:

- -

 

- -

- - - - - diff --git a/doc/salome/gui/SMESH/files/changing_orientation_of_elements.htm b/doc/salome/gui/SMESH/files/changing_orientation_of_elements.htm deleted file mode 100755 index f51e87294..000000000 --- a/doc/salome/gui/SMESH/files/changing_orientation_of_elements.htm +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - - - -Changing orientation of elements - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Changing orientation of elements

- -

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. In the Modification - menu select the Orientation item - or click button in the toolbar. The following dialog box - will appear:

- -

 

- -

- -

 

- -
    - -
  • The main list shall contain the - elements which will be reoriented. You can click on an element - in the 3D viewer and it will be highlighted. After that click the Add button and the ID of this element - will be added to the list. To remove a selected element or elements from - the list click the Remove button. - The Sort button allows to sort - the list of elements IDs. The Set filter - button allows to apply a definite 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.

  • -
- -

 

- -

3. Click the Apply - or OK button to confirm - the operation.

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/computing_meshes.htm b/doc/salome/gui/SMESH/files/computing_meshes.htm deleted file mode 100755 index a700eb285..000000000 --- a/doc/salome/gui/SMESH/files/computing_meshes.htm +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - -Computing meshes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Computing meshes

- -

The final step in generation of your mesh is its computation.

- -

 

- -

To compute a mesh:

- -

 

- -

1. Select your mesh in the Object - Browser.

- -

 

- -

2. From the Mesh - menu select Compute or - click button of the toolbar.

- - - - - diff --git a/doc/salome/gui/SMESH/files/connectivity.htm b/doc/salome/gui/SMESH/files/connectivity.htm deleted file mode 100755 index fcc85986a..000000000 --- a/doc/salome/gui/SMESH/files/connectivity.htm +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - -Connectivity - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Connectivity

- -

Type topic text here.

- - - - - diff --git a/doc/salome/gui/SMESH/files/constructing_groups_of_specific_elements.htm b/doc/salome/gui/SMESH/files/constructing_groups_of_specific_elements.htm deleted file mode 100755 index 6ee21947a..000000000 --- a/doc/salome/gui/SMESH/files/constructing_groups_of_specific_elements.htm +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - -Constructing groups of specific elements - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Constructing groups of specific elements

- -

In SMESH you can easily construct groups of specific elements (nodes, - edges or faces) which will be taken from a definite submesh.

- -

 

- -

To construct a group of specific elements:

- -

 

- -

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 Mesh - menu chose the Construct Group - item. SMESH will construct several groups consisting of elements - of the definite type: nodes, edges or faces

- - - - - diff --git a/doc/salome/gui/SMESH/files/constructing_meshes.htm b/doc/salome/gui/SMESH/files/constructing_meshes.htm deleted file mode 100755 index e4a680d66..000000000 --- a/doc/salome/gui/SMESH/files/constructing_meshes.htm +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - - - - -Constructing meshes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Constructing meshes

- -

Construction of a mesh consists of:

- -

 

- -
    - -
  • Selecting a geometrical - object for meshing

  • - -
  • Applying one or several - previously hypotheses and meshing - algorithms which will be used at computation of this mesh.

  • -
- -

 

- -

To construct a mesh:

- -

 

- -

In the Mesh - menu select Global Hyp. or - click button in the toolbar. The following dialog box will - appear:

- -

 

- -

- -

 

- -

In the Object Browser the structure of the - new mesh will be displayed as follows:

- -

 

- -

- -

 

- -

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.

  • -
- - - - - diff --git a/doc/salome/gui/SMESH/files/constructing_submeshes.htm b/doc/salome/gui/SMESH/files/constructing_submeshes.htm deleted file mode 100755 index 820365840..000000000 --- a/doc/salome/gui/SMESH/files/constructing_submeshes.htm +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - - - - -Constructing submeshes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Constructing submeshes

- -

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 hypotheses and meshing - algorithms which will be used at computation of this submesh.

  • -
- -

 

- -

To construct a submesh:

- -

 

- -

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

- -

 

- -

- -

 

- -

 

- -

In the Object Browser the structure of the - new submesh will be displayed as follows:

- -

 

- -

- -

 

- -

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.

  • -
- -

 

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/creating_groups.htm b/doc/salome/gui/SMESH/files/creating_groups.htm deleted file mode 100755 index b5ea84892..000000000 --- a/doc/salome/gui/SMESH/files/creating_groups.htm +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - - - - -Creating groups - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Creating groups

- -

In - SMESH you can create groups of elements of different types and having - definite properties.

- -

 

- -

To create a group of elements:

- -

 

- -

1. In the Mesh - menu select Create - Group. The following dialog box will appear:

- -

 

- -

 

- -

 

- -

This dialog box contains - the following fields which should be filled:

- -

 

- -
    - -
  • Mesh: the name of the mesh whose elements - will form your group. You can enter the name manually or 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.

  • - -
  • Group type set of radio buttons allows - to select the type of your group:

  • - -
      - -
    • Standalone group  consisting - of mesh elements.

    • - -
    • Group on geometry consisting of - geometrical elements. If you choose this type of group your dialog - box will change and it will look like as follows:

    • -
    -
- -

 

- -

- -

 

- -

In this dialog box you should enter the name - of the geometrical object (you can enter the name manually or select your - geometrical object in the Objet Browser or in the 3D viewer) from which - the elements will be taken. And after confirmation of the operation SMESH - will create a new group consisting of geometrical elements of the previously - defined type.

- -

 

- -
    - -
  • Content field - allows to manually define the mesh elements which will form your - group. You can click on an element in the 3D viewer and it will be highlighted. - After that click the Add button - and the ID of this element will be added to the list. To remove a selected - element or elements from the list click the Remove - button. The Sort button - allows to sort the list of elements IDs. The Set - filter button allows to apply a definite filter to selection - of the elements of your group.

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

  • -
- -

 

- -

2. Click the OK - button to confirm creation of your group or Cancel to quit this dialog box.

- - - - - diff --git a/doc/salome/gui/SMESH/files/cutting_quadrangles.htm b/doc/salome/gui/SMESH/files/cutting_quadrangles.htm deleted file mode 100755 index 8e2220693..000000000 --- a/doc/salome/gui/SMESH/files/cutting_quadrangles.htm +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - - - - -Cutting quadrangles - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Cutting quadrangles

- -

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. In the Modification - menu select the Cutting of quadrangles - item or click button in the toolbar. The following - dialog box will appear:

- -

 

- -

- -

 

- -
    - -
  • The main list shall contain the quadrangles - which will be cutted. You can click on an quadrangle in the 3D viewer - and it will be highlighted. After that click the 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 the Remove button. The Sort - button allows to sort the list of IDs. The Set - filter button allows to apply a definite filter to selection of - quadrangles.

  • - -
  • Apply to all radio button allows to - modify the orientation of all quadrangles of the currently displayed mesh - or submesh.

  • - -
  • Use diagonal 2-4 radio button allows - to specify the opposite corners which will be connected by the cutting - edge.

  • - -
  • Preview

  • - -
  • Select from set of fields allows to - choose a submesh or an existing group whose quadrangle elements will be - automatically added to the list.

  • -
- -

 

- -

3. Click the Apply - or OK button to confirm - the operation.

- -

 

- -

 

- - - --- - - - -
-

-

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/deflection_1d.htm b/doc/salome/gui/SMESH/files/deflection_1d.htm deleted file mode 100755 index 50612ac08..000000000 --- a/doc/salome/gui/SMESH/files/deflection_1d.htm +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - -Local Length hypothesis - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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 length - of segments, which will split these edges. 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.

- -

 

- -

- -

 

- -

To define the Average Length hypothesis:

- -

 

- -

Select this hypothesis in the - Create Hypotheses dialog box - click Create. The following dialog - box will appear:

- -

 

- -

- -

 

- -

In this dialog box you can set:

- -

 

- -
    - -
  • Name - of your Average Length hypothesis

  • - -
  • Length - of segments which will split the edges of your geometrical object

  • -
- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/diagonal_iversion_of_elements.htm b/doc/salome/gui/SMESH/files/diagonal_iversion_of_elements.htm deleted file mode 100755 index e736e199e..000000000 --- a/doc/salome/gui/SMESH/files/diagonal_iversion_of_elements.htm +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - -Diagonal iversion of elements - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Diagonal inversion of elements

- -

 In SMESH - 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 Modification - menu choose the Diagonal inversion - item or click button in the toolbar. The following - dialog box shall appear:

- -

 

- -

- -

 

- -

2. Enter the ID of the required edge in the - Edge  field - or select this edge in the 3D viewer.

- -

 

- -

3. Click the Apply - or OK button.

- -

 

- -

 

- - - --- - - - -
-

-

- - - - - diff --git a/doc/salome/gui/SMESH/files/displacing_nodes.htm b/doc/salome/gui/SMESH/files/displacing_nodes.htm deleted file mode 100755 index 79e32e4b5..000000000 --- a/doc/salome/gui/SMESH/files/displacing_nodes.htm +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - - - -Displacing nodes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Moving nodes

- -

In SMESH 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 Modification - menu choose the Move node item - or click button in the toolbar. The following dialog box - shall appear:

- -

 

- -

- -

 

- -

2. 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 Coordinates - set of fields.

- -

 

- -

3. Set new coordinates for your node in the - Coordinates set of fields.

- -

 

- -

4. Click the Apply - or OK button.

- -

 

- - - --- - - - -
-

-

- -

 

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/displaying_elements_numbers.htm b/doc/salome/gui/SMESH/files/displaying_elements_numbers.htm deleted file mode 100755 index 8cc308b5b..000000000 --- a/doc/salome/gui/SMESH/files/displaying_elements_numbers.htm +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - -Displaying elements numbers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Displaying elements numbers

- -

In SMESH 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. Right-click on the mesh in the 3D viewer - and from the associated pop-up menu choose Numbering - > Display Elements #.

- -

 

- -

It will look like as follows:

- -

 

- -

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/displaying_nodes_numbers.htm b/doc/salome/gui/SMESH/files/displaying_nodes_numbers.htm deleted file mode 100755 index 292f99a30..000000000 --- a/doc/salome/gui/SMESH/files/displaying_nodes_numbers.htm +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - -Displaying nodes numbers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Displaying nodes numbers

- -

In SMESH 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. Right-click on the mesh in the 3D viewer - and from the associated pop-up menu choose Numbering - > Display Nodes #.

- -

 

- -

It will look like as follows:

- -

 

- -

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/editing_groups.htm b/doc/salome/gui/SMESH/files/editing_groups.htm deleted file mode 100755 index eee766b72..000000000 --- a/doc/salome/gui/SMESH/files/editing_groups.htm +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - -Editing groups - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Editing groups

- -

To edit an existing group of elements:

- -

 

- -

1. Select your group in the Object Browser - and in the Mesh menu click the - Edit Group item or icon in the toolbar. The following dialog box will appear:

- -

 

- -

- -

 

- -

In this dialog box you can modify the name of your group and add or remove the - elements forming it. For more information see - here.

- -

 

- -

2. Click the OK - or  Apply - button to confirm modification of the group.

- - - - - diff --git a/doc/salome/gui/SMESH/files/editing_hypotheses.htm b/doc/salome/gui/SMESH/files/editing_hypotheses.htm deleted file mode 100755 index a0d30a3f6..000000000 --- a/doc/salome/gui/SMESH/files/editing_hypotheses.htm +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - - - -Editing hypotheses - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Editing hypotheses and algorithms

- -

In SMESH you can rename created - and already applied hypotheses and algorithms and edit - the input data of the created and already applied hypotheses.

- -

 

- -

To rename a hypothesis or algorithm:

- -

 

- -

1. Select the required hypothesis or algorithm - in the Object Browser and right-click on it. From the associated popup - menu select the Rename item, the - following dialog box will appear:

- -

 

- -

- -

 

- -

2. In this dialog box enter a new name for - your hypothesis or algorithm and click the OK - button.

- -

 

- -

To edit the input data of a hypothesis:

- -

 

- -

1. Select the required hypothesis  in - the Object Browser and right-click on it. From the associated popup menu - select the Edit item and in the - appeared dialog box (it will differ depending on the type of the edited - hypothesis) enter a new input value for your hypothesis.

- -

 

- -

2. Click the OK - button to confirm your changes.

- - - - - diff --git a/doc/salome/gui/SMESH/files/importing_and_exporting_meshes.htm b/doc/salome/gui/SMESH/files/importing_and_exporting_meshes.htm deleted file mode 100755 index 618bc80be..000000000 --- a/doc/salome/gui/SMESH/files/importing_and_exporting_meshes.htm +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - -Importing and exporting meshes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Importing and exporting meshes

- -

In SMESH there is a functionality allowing importation/exportation - of meshes from MED, UNV - format files.

- -

 

- -

To import a mesh:

- -

 

- -

1. From the File - menu choose the Import item, from - its sub-menu select the corresponding format (MED,  UNV) - of the file containing your mesh.

- -

2. In the standard Search - File dialog box find the file for importation.

- -

3. Click the OK - button.

- -

 

- -

To export a mesh:

- -

 

- -

1. From the File - menu choose the Export item, from - its sub-menu select the format (MED, UNV) of the file which will contain - your exported mesh..

- -

2. In the standard Search - File select a location for the exported file and enter its - name.

- -

3. Click the OK - button.

- - - - - diff --git a/doc/salome/gui/SMESH/files/introduction_to_smesh.htm b/doc/salome/gui/SMESH/files/introduction_to_smesh.htm deleted file mode 100755 index eb44da016..000000000 --- a/doc/salome/gui/SMESH/files/introduction_to_smesh.htm +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - -Introduction to SMESH - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Introduction to SMESH

- -

SMESH module of - SALOME is destined for:

- -

 

- -
    - -
  • import and export of meshes in MED format,

  • - -
  • meshing geometrical models previously created - or imported by the GEOM component. SMESH module allows to apply 1D, 2D, - 3D meshing algorithms and a set of hypotheses:

  • - -
      - -
    • Local length

    • - -
    • Number of segments

    • - -
    • Max Element Area

    • - -
    • Max Element Volume

    • -
    - -
  • modification of locally generated meshes by

  • - -
      - -
    • Addition/deletion of nodes and elements

    • - -
    • Moving nodes and elements

    • -
    - -
  • grouping mesh elements and performing operations - on these groups

  • - -
  • quality control of meshes basing on a set of definite - criteria -

  • -
- -

 

- -

for edges:

- -

 

- -
    - -
      - -
    • Length of edges

    • - -
    • Borders at multi-connections

    • - -
    • Free borders

    • -
    -
- -

 

- -

for faces:

- -

 

- -
    - -
      - -
    • Area of elements

    • - -
    • Minimum angle

    • - -
    • Taper

    • - -
    • Aspect Ratio

    • - -
    • Warping

    • - -
    • Skew angle

    • -
    -
- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/length_from_edges.htm b/doc/salome/gui/SMESH/files/length_from_edges.htm deleted file mode 100755 index 148ecd023..000000000 --- a/doc/salome/gui/SMESH/files/length_from_edges.htm +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - - - - -Length from edges - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Length from edges (2D hypothesis for Triangulator) hypothesis

- -

Length from edges - hypothesis builds 1D mesh segments having a length calculated as an average - edge length for a given wire.

- -

 

- -

This hypothesis has no parameters.

- -

 

- -

 

- -

To apply the Length from edges hypothesis:

- -

 

- -

Select this hypotheses in the - Create Hypotheses dialog box - click Create.

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/length_of_edges.htm b/doc/salome/gui/SMESH/files/length_of_edges.htm deleted file mode 100755 index 70acb620a..000000000 --- a/doc/salome/gui/SMESH/files/length_of_edges.htm +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - - - - -Length of edges - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Length of edges

- -

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 of edges quality criterion to your mesh:

- -

 

- -

1. Display your mesh in the viewer.

- -

 

- -

2. Choose Quality - Controls > Length 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:

- -

 

- -

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/local_length_hypothesis.htm b/doc/salome/gui/SMESH/files/local_length_hypothesis.htm deleted file mode 100755 index a53261d03..000000000 --- a/doc/salome/gui/SMESH/files/local_length_hypothesis.htm +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - -Local Length hypothesis - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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 length - of segments, which will split these edges. 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.

- -

 

- -

- -

 

- -

To define the Average Length hypothesis:

- -

 

- -

Select this hypotheses in the - Create Hypotheses dialog box - click Create. The following dialog - box will appear:

- -

 

- -

- -

 

- -

In this dialog box you can set:

- -

 

- -
    - -
  • Name - of your Average Length hypothesis

  • - -
  • Length - of segments which will split the edges of your geometrical object

  • -
- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/max._element_area_hypothesis.htm b/doc/salome/gui/SMESH/files/max._element_area_hypothesis.htm deleted file mode 100755 index ef7a55ebf..000000000 --- a/doc/salome/gui/SMESH/files/max._element_area_hypothesis.htm +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - - - - -Length from edges - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Length from edges (2D hypothesis for Triangulator) hypothesis

- -

Length from edges - hypothesis builds 1D mesh segments having a length calculated as an average - edge length for a given wire.

- -

 

- -

This hypothesis has no parameters.

- -

 

- -

 

- -

To apply the Length from edges hypothesis:

- -

 

- -

Select this hypothesis in the - Create Hypotheses dialog box - click Create.

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/max._element_volume_hypothsis.htm b/doc/salome/gui/SMESH/files/max._element_volume_hypothsis.htm deleted file mode 100755 index 7eb80ee6a..000000000 --- a/doc/salome/gui/SMESH/files/max._element_volume_hypothsis.htm +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - -Non conform mesh allowed hypothesis - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

- -

 

- -

This hypothesis has no parameters.

- -

 

- -

To apply this hypothesis:

- -

 

- -

Select this hypothesis s in the - Create Hypotheses dialog box - click Create.

- - - - - diff --git a/doc/salome/gui/SMESH/files/merging_nodes.htm b/doc/salome/gui/SMESH/files/merging_nodes.htm deleted file mode 100755 index e324b053f..000000000 --- a/doc/salome/gui/SMESH/files/merging_nodes.htm +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - - - - -Merging nodes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Merging nodes

- -

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 Modification - choose Transformation and -  from its - sub-menu select the Merge nodes item. - The following dialog box shall appear:

- -

 

- -

- -

 

- -

This dialog box allows to create groups of - coincident nodes and to merge them.

- - - - - diff --git a/doc/salome/gui/SMESH/files/minimum_angle.htm b/doc/salome/gui/SMESH/files/minimum_angle.htm deleted file mode 100755 index 7a88843cf..000000000 --- a/doc/salome/gui/SMESH/files/minimum_angle.htm +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - -Minimum angle - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Minimum angle

- -

Minimum angle - mesh quality criterion consists of calculation of the minimum value of - angle between two adjacent sides of a 2D meshing element (triangle or - quadrangle).

- -

 

- -

To apply the Minimum angle quality criterion to your mesh:

- -

 

- -

1. Display your mesh in the viewer.

- -

 

- -

2. Choose Quality - Controls > Minimum angle or click button. Your - mesh will be displayed in the viewer with its elements colored according - to the applied mesh quality control criterion:

- -

 

- -

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/non_conform_mesh_allowed_hypothesis.htm b/doc/salome/gui/SMESH/files/non_conform_mesh_allowed_hypothesis.htm deleted file mode 100755 index baecc1235..000000000 --- a/doc/salome/gui/SMESH/files/non_conform_mesh_allowed_hypothesis.htm +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - -Non conform mesh allowed hypothesis - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

- -

 

- -

This hypothesis has no parameters.

- -

 

- -

To apply this hypothesis:

- -

 

- -

Select this hypothesis s in the - Create Hypotheses dialog box - click Create.

- - - - - diff --git a/doc/salome/gui/SMESH/files/number_of_segments_hypothesis.htm b/doc/salome/gui/SMESH/files/number_of_segments_hypothesis.htm deleted file mode 100755 index aeceb759d..000000000 --- a/doc/salome/gui/SMESH/files/number_of_segments_hypothesis.htm +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - -Number of segments hypothesis - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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.

- -

 

- -

- -

To define the Number of segments hypothesis:

- -

 

- -

From the Hypotheses - menu select Nb. Segments and - click Create. The following dialog - box will appear:

- -

 

- -

- -

 

- -

In this dialog box you can set:

- -

 

- -
    - -
  • Name - of your Local Length hypothesis

  • - -
  • Segments: the number - of segments which will split the edges of your geometrical object

  • -
- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/propagation_of_1d_hypothesis_on_opposite_edges.htm b/doc/salome/gui/SMESH/files/propagation_of_1d_hypothesis_on_opposite_edges.htm deleted file mode 100755 index ae5c97782..000000000 --- a/doc/salome/gui/SMESH/files/propagation_of_1d_hypothesis_on_opposite_edges.htm +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - -Propagation of 1D Hypothesis on opposite edges - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Propagation of 1D Hypothesis on opposite edges

- -

Propagation of 1D Hypothesis - on opposite edges allows to propagate a set hypothesis onto an - opposite edge. If a local hypothesis and propagation are set on one of - edges of a quadrangular face, the opposite edge will have the same hypothesis, - unless another hypothesis has been locally set on such opposite edge.

- -

 

- -

To apply this hypothesis:

- -

 

- -

Select this hypothesis s in the - Create Hypotheses dialog box - click Create.

- - - - - diff --git a/doc/salome/gui/SMESH/files/reassigning_hypotheses_and_algorithms.htm b/doc/salome/gui/SMESH/files/reassigning_hypotheses_and_algorithms.htm deleted file mode 100755 index 51938ab6a..000000000 --- a/doc/salome/gui/SMESH/files/reassigning_hypotheses_and_algorithms.htm +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - - - - - -Reassigning hypotheses and algorithms - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Reassigning hypotheses and algorithms

- -

After you have created a mesh or submesh with definite applied hypotheses - and algorithms you can edit your mesh by assigning - new hypotheses and algorithms or unassigning - the applied hypotheses and algorithms.

- -

 

- -

To assign or unassign algorithms and hypotheses:

- -

 

- -

1. In the Mesh - menu select the Edit - Hypothesis, the following dialog box will appear:

- -

 

- -

- -

 

- -

This dialog box contains the following fields: -

- -
    - -
  • Mesh - or SubMesh field: here you should enter the name of the mesh or - submesh for which you would like to assign or unassign hypotheses and - algorithms. It can be also done by choosing the required mesh or submesh - in the Object Browser or in the 3D viewer;

  • - -
  • Hypotheses - set of fields containing two columns: -

  • - -
      - -
    • Available: - the hypotheses which have been created - in the current study;

    • - -
    • Used: the - hypotheses which have been applied to previously selected mesh or submesh.

    • -
    - -
  • Algorithms - set of fields containing two columns:

  • - -
      - -
    • Available: - the algorithms which have been created - in the current study.

    • - -
    • Used: - the algorithms which have been applied - to previously selected mesh or submesh.

    • -
    -
- -

 

- -

2. Double-click on the definite algorithm - or hypothesis to move it from the Available - column into the Used column - and vice versa.  Thus - you will be able to apply new hypotheses and algorithms to your mesh or - unassign the applied hypotheses - and algorithms.

- -

 

- -

3. Confirm your changes by clicking the OK button.

- -

 

- -

After modification of applied algorithms you - should recompute your mesh once again.

- -

 

- -

You can also unassign an - applied algorithm or hypothesis by right-clicking on it in the Object - Browser and choosing from the associated popup menu the Unassign - Algorithm or Unassign Hypothesis - item.

- - - - - diff --git a/doc/salome/gui/SMESH/files/removing_nodes_and_elements.htm b/doc/salome/gui/SMESH/files/removing_nodes_and_elements.htm deleted file mode 100755 index c8b506969..000000000 --- a/doc/salome/gui/SMESH/files/removing_nodes_and_elements.htm +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - - - - -Removing nodes and elements - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Removing nodes and elements

- -

In SMESH you can remove nodes and all types of cells of your mesh.

- -

 

- -

To remove a node:

- -

 

- -

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

- -

 

- -

2. From the Modification - menu choose Remove and - from the associated submenu select the Remove - nodes, or just click icon in the toolbar. The - following dialog box will appear:

- -

 

- -

- -

 

- -

In this dialog box you can specify one or - several nodes (with pressed Shift button) by choosing them in the 3D viewer.

- -

 

- -

3. Click OK - or Apply  to - confirm deletion of the specified nodes.

- -

 

- -

Be careful while removing - nodes because if you remove a definite node of your mesh all adjacent - elements will be also deleted.

- -

 

- - - --- - - - -
-

-

- -

 

- -

 

- -

To remove an element:

- -

 

- -

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

- -

 

- -

2. From the Modification - menu choose Remove and - from the associated submenu select the Remove - elements, or just click icon in the toolbar. The - following dialog box will appear:

- -

 

- -

- -

 

- -

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.

- -

 

- -

3. Click OK - or Apply  to - confirm deletion of the specified elements.

- -

 

- - - --- - - - -
-

-

- -

 

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/renumbering_nodes_and_elements.htm b/doc/salome/gui/SMESH/files/renumbering_nodes_and_elements.htm deleted file mode 100755 index 6bf37d0fb..000000000 --- a/doc/salome/gui/SMESH/files/renumbering_nodes_and_elements.htm +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - - - - -Renumbering nodes and elements - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Renumbering nodes and elements

- -

In SMESH you can renumber the nodes and elements of your mesh.

- -

 

- -

To renumber the nodes of your mesh:

- -

 

- -

1. In the Modification - menu select Renumbering submenu - and choose the Nodes item or click - button in the toolbar. The following dialog box will - appear:

- -

 

- -

 

- -

- -

 

- -

2. Fill the Mesh - field by selecting your mesh in the Object Browser or in the 3D - viewer.

- -

 

- -

3. Click the Apply - or OK button - to perform the operation.

- -

 

- -

 

- -

To renumber the elements of your mesh:

- -

 

- -

1. In the Modification - menu select Renumbering submenu - and choose the Elements item or - click button in the toolbar. The following dialog box will - appear:

- -

 

- -

 

- -

- -

 

- -

2. Fill the Mesh - field by selecting your mesh in the Object Browser or in the 3D - viewer.

- -

 

- -

3. Click the Apply - or OK button - to perform the operation.

- -

 

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/rotation.htm b/doc/salome/gui/SMESH/files/rotation.htm deleted file mode 100755 index 7ec631e22..000000000 --- a/doc/salome/gui/SMESH/files/rotation.htm +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - - - - -Rotation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Rotation

- -

This geometrical operation allows to rotate in space your mesh or some - of its elements.

- -

 

- -

 To - rotate your mesh:

- -

 

- -

From the Modification - choose Transformation and -  from its - sub-menu select the Rotation item. - The following dialog box shall appear:

- -

 

- -

- -

 

- -

In this dialog box you can specify the elements - which should be rotated and the rotation parameters:

- -
    - -
  • Axis: - point and vector

  • - -
  • Angle - of rotation

  • -
- -

 

- -

Create a - copy radio button allows to copy the rotated object.

- - - - - diff --git a/doc/salome/gui/SMESH/files/running_smesh_module.htm b/doc/salome/gui/SMESH/files/running_smesh_module.htm deleted file mode 100755 index 430218edd..000000000 --- a/doc/salome/gui/SMESH/files/running_smesh_module.htm +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - - - -Running SMESH module - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Running SMESH module

- -

To start SMESH module in SALOME:

- -

 

- -
    - -
  1. Run - SALOME

  2. - -
  3. Create - a new study by clicking icon in the main toolbar. The - following SALOME standard window will appear:  

  4. -
- -

 

- -

                        

- -

 

- -

Before launching the SMESH module, you should set the VTK - viewer as default viewer for creation of a new study window. In SMESH - you can generate and work with meshes only in VTK viewer.

- -

      

- -

    3. - In the bottom toolbar click icon or  from - the bottom Choose box

- -

                       

- -

            select - SMESH.

- -

 

- -

 

- -

The initial desktop of - the SALOME platform will be updated with some additional toolbars and - menus related to the SMESH component - . It will look like as follows:

- -

 

- -

 

- -

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/scalar_bar_properties.htm b/doc/salome/gui/SMESH/files/scalar_bar_properties.htm deleted file mode 100755 index 2e301a78f..000000000 --- a/doc/salome/gui/SMESH/files/scalar_bar_properties.htm +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - -Scalar Bar properties - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Scalar Bar properties

- -

Type topic text here.

- - - - - diff --git a/doc/salome/gui/SMESH/files/sewing_meshes.htm b/doc/salome/gui/SMESH/files/sewing_meshes.htm deleted file mode 100755 index e27d967c7..000000000 --- a/doc/salome/gui/SMESH/files/sewing_meshes.htm +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - - - - - -Sewing meshes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Sewing meshes

- -

In SMESH you can sew elements of  different - meshes. The current functionality allows you to sew:

- -

 

- - - -

 

- -

To sew elements of different meshes:

- -

 

- -

1. From the Modification - menu choose the Transformation - item and  from - its sub-menu select the Sewing item. - The following dialog box shall appear:

- -

 

- -

- -

 

- -

2. In the upper part of this dialog box check - one of the radio buttons corresponding to the type of sewing operation - you would like to perform:

- -

 

- -

- -

 

- -

3. Fill the other fields available in the - dialog box

- -

4. Click the OK - or Apply button - to perform the operation of sewing.

- -

 

- -

Sew free borders

- -

This functionality allows you to unite two free borders of a 2D mesh.

- -

 

- -

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

- -

 

- -

- -

 

- -

Sew conform free borders

- -

This functionality can be used to unite two free borders of a 2D mesh.

- -

 

- -

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.

- -

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.

- -

 

- -

 

- -

Sew border to side

- -

"Sew border to side" is intended to sew a free border to a - mesh surface.

- -

The free border is defined as for "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.

- -

 

- -

- -

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. Sew two sequences of nodes using algorithm of "Sewing of free - berders".

- -

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.

- -

 

- -

Sew side elements

- -

 

- -

 

- -

- -

This operation is intended to unite two mesh surfaces.

- -

Surfaces may be defined by either 2d or 3d elements. The number of given - elements of the sides must be the same. The sets of given elements must - be topologically equal, i.e. each node of one element set must have a - corresponding node in the other element set and corresponding nodes must - be equally linked. If there are 3d elements in a set, only their free - faces must obey to that rule.

- -

Two corresponding nodes on each side must be specified. They must belong - to one element and must be located on an element set boundary.

- -

Sewing algorithm finds and merges the corresponding nodes starting from - the specified ones.

- -

 

- -

- -

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.

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/shading.htm b/doc/salome/gui/SMESH/files/shading.htm deleted file mode 100755 index 2d937e4de..000000000 --- a/doc/salome/gui/SMESH/files/shading.htm +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - -Shading - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - diff --git a/doc/salome/gui/SMESH/files/shrink.htm b/doc/salome/gui/SMESH/files/shrink.htm deleted file mode 100755 index 53386bb7e..000000000 --- a/doc/salome/gui/SMESH/files/shrink.htm +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - -Shrink - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - diff --git a/doc/salome/gui/SMESH/files/skew.htm b/doc/salome/gui/SMESH/files/skew.htm deleted file mode 100755 index 24198ba15..000000000 --- a/doc/salome/gui/SMESH/files/skew.htm +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - -Skew - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Skew angle

- -

Skew angle mesh - quality criterion reflects the angle between the lines that join opposite - sides of the element. SKEW  is - a maximum value of all skew angles.

- -

This mesh quality criterion - can be applied to elements composed of 4 and 3 nodes (quadrangles and - triangles)

- -

 

- -

- -

 

- -

To apply the Skew angle quality criterion to your mesh:

- -

 

- -

1. Display your mesh in the viewer.

- -

 

- -

2. Choose Quality - Controls > Skew 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:

- -

 

- -

- - - - - diff --git a/doc/salome/gui/SMESH/files/smoothing.htm b/doc/salome/gui/SMESH/files/smoothing.htm deleted file mode 100755 index 8d87e630d..000000000 --- a/doc/salome/gui/SMESH/files/smoothing.htm +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - - - - -Smoothing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Smoothing

- -

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. In the Modification - menu select the Smoothing item - or click button in the toolbar. The following dialog box - will appear:

- -

 

- -

- -

 

- -

This dialog box contains the following fields - which should be specified:

- -

 

- -
    - -
  • Id Elements field allows to specify - the elements which should be smoothed by selecting them in the 3D viewer. - Note: to select several elements press Shift - button.

  • - -
      - -
    • 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:

    • - -
        - -
      • Laplacian - smoothing pulls a node toward the center of surrounding nodes directly - connected to that node along an element edge. Centroidal smoothing pulls - a node toward the element-area-weighted centroid of the surrounding elements. - 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.

      • -
      -
    -
- -

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

  • -
- -

 

- -

3. Click the Apply - or OK button to confirm - the operation.

- -

 

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/start_and_end_length_hypothesis.htm b/doc/salome/gui/SMESH/files/start_and_end_length_hypothesis.htm deleted file mode 100755 index 3a8059d29..000000000 --- a/doc/salome/gui/SMESH/files/start_and_end_length_hypothesis.htm +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - -Start and End Length hypothesis - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Start and End Length hypothesis

- -

Start and End Length - hypothesis is used to build 1D mesh on geometrical edges.

- -

A geometrical edge is divided into segments so that the first and the - last segments have a specified length. 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.

- -

 

- -

To define the Average Length hypothesis:

- -

 

- -

Select this hypothesis s in the - Create Hypotheses dialog box - click Create. The following dialog - box will appear:

- -

 

- -

- -

 

- -

In this dialog box you can set:

- -

 

- -
    - -
  • Name - of your Start and End Length hypothesis

  • - -
  • Start - and End Length of segments

  • -
- - - - - diff --git a/doc/salome/gui/SMESH/files/symmetry.htm b/doc/salome/gui/SMESH/files/symmetry.htm deleted file mode 100755 index 446029ce2..000000000 --- a/doc/salome/gui/SMESH/files/symmetry.htm +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - -Symmetry - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Symmetry

- -

This geometrical operation allows to perform a symmetrical copy of your - mesh or some of its elements.

- -

 

- -

 To - apply symmetry to your mesh:

- -

 

- -

From the Modification - choose Transformation and -  from its - sub-menu select the Symmetry item. - The following dialog box shall appear:

- -

 

- -

- -

 

- -

- -

 

- -

- -

 

- -

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)

  • -
- -

 

- -

Create a - copy radio button allows to keep the initial elements or - mesh.

- - - - - diff --git a/doc/salome/gui/SMESH/files/taper.htm b/doc/salome/gui/SMESH/files/taper.htm deleted file mode 100755 index 38e4f8951..000000000 --- a/doc/salome/gui/SMESH/files/taper.htm +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - -Taper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Taper

- -

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.

- -

- -

 

- -

 

- -

To apply the Taper quality criterion to your mesh:

- -

 

- -

1. Display your mesh in the viewer.

- -

 

- -

2. Choose Quality - Controls > Taper 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:

- -

 

- -

- - - - - diff --git a/doc/salome/gui/SMESH/files/tetrahedron_(ghs3d)_meshing_algorithm.htm b/doc/salome/gui/SMESH/files/tetrahedron_(ghs3d)_meshing_algorithm.htm deleted file mode 100755 index f2364d118..000000000 --- a/doc/salome/gui/SMESH/files/tetrahedron_(ghs3d)_meshing_algorithm.htm +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - -Tetrahedron (GHS3D) meshing algorithm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Tetrahedron (GHS3D) meshing algorithm

- -

This algorithm is used for meshing of 3D entities of - geometrical objects - volume objects. - While NETGEN - generates 3D elements having a volume less than the one specified by hypothesis, - GHS3D does not need any hypotheses, all it needs is a surface mesh built - in advance

- -

 

- -

 

- -

To apply the Tetrahedron GHS3D meshing algorithm:

- -

 

- -

In - the Create Algorithms dialog box - select this algorithm and click Create.

- - - - - diff --git a/doc/salome/gui/SMESH/files/tetrahedron_(netgen)_meshing_algorithm.htm b/doc/salome/gui/SMESH/files/tetrahedron_(netgen)_meshing_algorithm.htm deleted file mode 100755 index c788450f2..000000000 --- a/doc/salome/gui/SMESH/files/tetrahedron_(netgen)_meshing_algorithm.htm +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - -Tetrahedron (Netgen) meshing algorithm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Tetrahedron (Netgen) meshing algorithm

- -

This algorithm is used for meshing of 3D entities of - geometrical objects - volume objects. -

- -

 

- -

To apply the Tetrahedron meshing algorithm:

- -

 

- -

In - the Create Algorithms dialog box - select this algorithm and click Create.

- -

 

- -

 

- -

Example:

- -

- - - - - diff --git a/doc/salome/gui/SMESH/files/translation.htm b/doc/salome/gui/SMESH/files/translation.htm deleted file mode 100755 index 3202565ac..000000000 --- a/doc/salome/gui/SMESH/files/translation.htm +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - -Translation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Translation

- -

This geometrical operation allows to translate in space your mesh or - some of its elements.

- -

 

- -

 To - translate your mesh:

- -

 

- -

From the Modification - choose Transformation and -  from its - sub-menu select the Translation item. - The following dialog box shall appear:

- -

 

- -

- -

 

- -

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

  • -
- -

Create a - copy radio button allows to copy the translated object.

- - - - - diff --git a/doc/salome/gui/SMESH/files/uniting_a_set_of_triangles.htm b/doc/salome/gui/SMESH/files/uniting_a_set_of_triangles.htm deleted file mode 100755 index 460599634..000000000 --- a/doc/salome/gui/SMESH/files/uniting_a_set_of_triangles.htm +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - - -Uniting a set of triangles - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Uniting a set of triangles

- -

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. In the Modification - menu select the Union of triangles - item or click button in the toolbar. The following - dialog box will appear:

- -

 

- -

- -

 

- -
    - -
  • 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 Add - button and the ID of this triangle will be added to the list. To - remove a selected element or elements from the list click the Remove - button. The Sort button - allows to sort the list of IDs. The Set - filter button allows to apply a definite filter to selection of - triangles.

  • - -
  • Apply to all radio button allows - to modify the orientation of all triangles of the currently displayed - mesh or submesh.

  • - -
  • Select from set of fields allows to - choose a submesh or an existing group whose triangle elements will be - automatically added to the list.

  • -
- -

 

- -

3. Click the Apply - or OK button to confirm - the operation.

- -

 

- -

If some selected triangle - elements have no adjacent edges with one of the others, the operation - on these elements shall take no effect.

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/uniting_two_triangles.htm b/doc/salome/gui/SMESH/files/uniting_two_triangles.htm deleted file mode 100755 index 7d1d9999a..000000000 --- a/doc/salome/gui/SMESH/files/uniting_two_triangles.htm +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - - - - -Uniting two triangles - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Uniting two triangles

- -

 In SMESH - you can union two neighboring triangles (cells) by deletion of the common - edge.

- -

 

- -

To unite two triangles:

- -

 

- -

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

- -

 

- -

- -

 

- -

2. Enter the ID of the required edge in the - Edge  field - or select this edge in the 3D viewer.

- -

 

- -

3. Click the Apply - or OK button.

- -

 

- -

 

- - - --- - - - -
-

-

- - - - - diff --git a/doc/salome/gui/SMESH/files/using_operations_on_groups.htm b/doc/salome/gui/SMESH/files/using_operations_on_groups.htm deleted file mode 100755 index 3320787f2..000000000 --- a/doc/salome/gui/SMESH/files/using_operations_on_groups.htm +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - - - - - -Using operations on groups - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Using operations on groups

- -

In SMESH you can - perform  Boolean - operations on groups such as:

- -

 

- - - -

 

- -

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 Mesh - menu select the Union Groups item. - The following dialog box will appear:

- -

 

- -

- -

 

- -

In this dialog box you should specify the - name of the resulting group and - two groups which will be united.

- -

 

- -

2. Click the OK - or  Apply - button to confirm creation of the group.

- -

 

- -

 

- -

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 Mesh - menu select the Intersect Groups - item. The following dialog box will appear:

- -

 

- -

- -

 

- -

In this dialog box you should specify the - name of the resulting group and - two groups which will be intersected.

- -

 

- -

2. Click the OK - or  Apply - button to confirm creation of the group.

- -

 

- -

 

- -

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 Mesh - menu select the Cut Groups item. - The following dialog box will appear:

- -

 

- -

- -

 

- -

In this dialog box you should specify the - name of the resulting group and - two groups which will be cut.

- -

 

- -

2. Click the OK - or  Apply - button to confirm creation of the group.  

- -

 

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/using_smesh_module.htm b/doc/salome/gui/SMESH/files/using_smesh_module.htm deleted file mode 100755 index 92fc07c05..000000000 --- a/doc/salome/gui/SMESH/files/using_smesh_module.htm +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - -Using SMESH module - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Using SMESH

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/view_update.htm b/doc/salome/gui/SMESH/files/view_update.htm deleted file mode 100755 index add17849a..000000000 --- a/doc/salome/gui/SMESH/files/view_update.htm +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - -View update - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View update

- -

- - - - - diff --git a/doc/salome/gui/SMESH/files/viewing_mesh_info.htm b/doc/salome/gui/SMESH/files/viewing_mesh_info.htm deleted file mode 100755 index 012d1bca3..000000000 --- a/doc/salome/gui/SMESH/files/viewing_mesh_info.htm +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - -Viewing mesh info - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Viewing mesh info

- -

To view the information on meshes:

- -

 

- -

1. Select your mesh in the Object - Browser.

- -

 

- -

2. From the Mesh - menu select Mesh - infos or click button of the toolbar.

- -

 

- -

The following information will be displayed:

- -

 

- -

 

- -

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/visualization_modes.htm b/doc/salome/gui/SMESH/files/visualization_modes.htm deleted file mode 100755 index 731b8b0ee..000000000 --- a/doc/salome/gui/SMESH/files/visualization_modes.htm +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - -Visualization modes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Visualization modes

- -

In SMESH there are three visualization modes for displaying - meshes in the viewer:

- -

 

- -
    - -
  • Wireframe -

  • - -
  • Shading -

  • - -
  • Shrink

  • -
- -

 

- -

To set the visualization mode for displaying of your mesh:

- -

 

- -

1. Select your mesh in the Object - Browser.

- -

 

- -

2. Right-click on the mesh in the viewer - and from the pop-up menu select Properties - > Display mode

- - - - - diff --git a/doc/salome/gui/SMESH/files/visualization_properties.htm b/doc/salome/gui/SMESH/files/visualization_properties.htm deleted file mode 100755 index eb7d83c49..000000000 --- a/doc/salome/gui/SMESH/files/visualization_properties.htm +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - -Visualization properties - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Visualization properties

- -

Type topic text here.

- - - - - diff --git a/doc/salome/gui/SMESH/files/warp.htm b/doc/salome/gui/SMESH/files/warp.htm deleted file mode 100755 index 794a5a24d..000000000 --- a/doc/salome/gui/SMESH/files/warp.htm +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - -Warp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Warping

- -

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. creating a point on the plane at the vector - average of the corners, where the x-axis extends from the point to the - bisector on edge 2.

- -

The plane normal is in the direction of the - cross product of the x-axis and the vector from the origin to the bisector - of edge 3. Every corner of the quad will then be a distance “h” from the - plane. The length of each half edge is measured and the shortest length - is assigned “l”. The warp angle is the arcsine of the ratio of the projection - height “h” to the half edge length “l”.

- -

 

- -

- -

 

- -

 

- -

To apply the Warping quality criterion to your mesh:

- -

 

- -

1. Display your mesh in the viewer.

- -

 

- -

2. Choose Quality - Controls > Warp 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:

- -

 

- -

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/files/wireframe.htm b/doc/salome/gui/SMESH/files/wireframe.htm deleted file mode 100755 index e38b48d28..000000000 --- a/doc/salome/gui/SMESH/files/wireframe.htm +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - -Wireframe - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - 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/image10.jpg b/doc/salome/gui/SMESH/image10.jpg deleted file mode 100755 index 8c20c4ced6acf72837ac8464fd438f2e878f2ef3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72076 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%0D*-6kzP>DPs$Moi5D!&x!~ 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 diff --git a/doc/salome/gui/SMESH/image12.gif b/doc/salome/gui/SMESH/image12.gif deleted file mode 100755 index 62dcffaafdbdc1ad38900c10219e96d80b0c3657..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 983 zcmZ?wbh9u|6lV};_|5n4&;S4b4>od?7!84; z5du0OXM*wq1IHc)Qw|xA4GRu7a|ml)5l}dAsD+Wiqef%H!vh_{+Ez9a3eIfpysCaY z1&N1_HOcBmyx?GP^kz^|H?ZiO>{{*~sAA%&76?%FCcb{!=8|-ksr0I2hQb zSnj3D^}x}27Ndd6T&+?K1`a``IY(BMXkBJw=eZzqa%*;YH_Od!s;`U|J9ZY&yrn83 zy#D5{YVB!Xb{<&o!N5L`ZN>zKlm@1DMhlM~fpu(*f@xh__7ogoVfEK6TINxe;J{!F E0F1DL!~g&Q diff --git a/doc/salome/gui/SMESH/image12.jpg b/doc/salome/gui/SMESH/image12.jpg deleted file mode 100755 index aa3ee34e8f1eea4156b00ee24c23452149879a3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55339 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 diff --git a/doc/salome/gui/SMESH/image13.gif b/doc/salome/gui/SMESH/image13.gif deleted file mode 100755 index 5548661812d91e82a713c5a853cdbe34a5d1944b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 950 zcmZ?wbh9u|6lV}+_|5oy<=W{-hm6OD1qYkim{}Z7 z6eKWk@QRt0NH8=UWe^ncn35oP;2;CPQi+V`rQ|~#d{$BsCoef1Z`O)l7m|4?;pA*R z!DCZAKPS7+)MY#q;_+dj#{!+!T_FoDDl)TrP1IryXgJ`;$+ehiuGbZ{OEdL!U;TMy xlykNzs&ZCqX5gx$EMYhA$y6$=^WDhAs^Jju@zK>bW-*x`)*Cevn;01xtN~weX*-O!NF!0W)_DN0SOHJ5@Kd08iFnj z{6bnxH!=(u+WEOft1=c`c;v<)YoGC=;3IPzuZ-V38;J$ZY`li4YBxGBEjTmTy7`k0 zN63o6K2~NCQz?;#LtXs#3<*^tO)Wiq`W`ntrapILVPBv%=hoMhlS@+iPo>N-YxLpb z(<=MJxuB_qlTYQy(wh&TG;xGWi*S5UaJtbac81Mh!-6FYtnJoeG7622H#(U(BLWn} NKOfl4!OX;94FIW1j)(vN diff --git a/doc/salome/gui/SMESH/image15.gif b/doc/salome/gui/SMESH/image15.gif deleted file mode 100755 index 2cac70af0bdeaeba039d1e8e349adf1570c2c5f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 998 zcmZ?wbh9u|6k`x$_|51FEDVNW^m<@@z}87U^5Fdi^GY41O@?VF|!hl zK$ivqAuTN%35EvuZhqMuo)3)9M;m2r<9IeMY-XRVDm_Q$#YQy-Ug?4?pe8j(2F|8i zdnPnC`A>0Z*4p}W@tfpwbxaux%JCZ8$I+(HL7D3m(y5>A%p;b5=^00XO;*8l(j diff --git a/doc/salome/gui/SMESH/image16.gif b/doc/salome/gui/SMESH/image16.gif deleted file mode 100755 index d840de82fd746ee00ed44a2c7a296093208e939e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1026 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 KlSe>sWB(7olu?8L diff --git a/doc/salome/gui/SMESH/image17.jpg b/doc/salome/gui/SMESH/image17.jpg deleted file mode 100755 index 97c2c1cf904bb654646efbc0f188b486c442c7e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18256 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 NH-tkmJb{1!06S^SL2Cd2 diff --git a/doc/salome/gui/SMESH/image20.jpg b/doc/salome/gui/SMESH/image20.jpg deleted file mode 100755 index 3554c17436d1b0f0ac61bfff2393f80b4db94e94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32034 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 diff --git a/doc/salome/gui/SMESH/image22.gif b/doc/salome/gui/SMESH/image22.gif deleted file mode 100755 index 18b53bf4df7bf7efa602abe4871046d88dbdb334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1287 zcmX9-3rw3u96w`O*d#j8R8X2gryIpbG-srs!37hbECi;a3`W>6JvSm|6BHT4HO?@> zEU*+AH(uran6Obc_KFG;*`NpNR6wLb!O*qh7#bDA=K1^1OPYKBf3N@71WUX*YVSOW zC;t#_*woLaCL4A(+aSj5VEfoDolfWP?;j8l5EvM!*Xu(=LybnG$z)1POG{2pj*E+n zj*gaxZ89}=lGw$PT%H{9cqV(gDk&k15Kf2yI3<)4MhT}xP$JbGWrQ)p84-*~^^|hL zIN_WKPNb@&f-ph2AVLs{wIo~;AvHumGJ*;`p;8f0N*Se`QbDOyeAqKaIirG6spxUd zIOUuQPNhqfEp-*S1l1x!36Mt0cmQ90xme0DlC`* zG4?`msj`DNaN}A?E>)Ds9!VowWQo`i5>i17@C~mp2R9InGRTBF#jij$RKRFGz;oQ= z07I&lATl@vEA|rcsb->kXbYNv)DbgsMV4qD(n3Or1T}DvUcw?gY4w^+t+kK?eh>l? zkSN7-Tw;e}0Q^5;#;T2kXJ=;@78aJ4mR46+yId}((>XOY<#xLl78ZOy-^$9$>guXo zzvXbW+H5xM!;wU)2{Tq0kK>SN{{`ZYlZ~N?XB|UF{qK+5eeG=1@UhKXlIjxsn!oxu znC8x2>ub4M5%ywvsKwbjYL9rid-tfb&2{pr*T?EC{q5tm=6v7mXn)7ojoXiIG9;br z{I(_09+@?EuIsyw)Rv_Br1RZBoKEl0bsySnn>w>+xZJQ~;L{)b*(IOOQPq=C_tuG# zlFav*jrbJm&iTkNKXANgtSLdo*Y zyhCdTX2w2QINlReSa7NJi>(t+#9V%3@aHofOB-Tii~hcTU)Qj;_x*$U-p-C~x{6cl z>+U~Z7`U)&HhRSM4d2#Ka&s*zAS)XXlFVSj}Mx_g??L z@g045r{SYUgSq+0Qn)9p{PfO(^kdXAonsC8tS02Rv8iw_%e;6oyzKB_!9hh4dcT%R zKmEpEQxlA)u*&2wA8508k0*v#ywd(m+m1{&ntJlXqOzcx$4;0Q52QC(f->G5@GjQg z({1w96-@5;)W5gb@Y9j!{sSySgmeG^ diff --git a/doc/salome/gui/SMESH/image22.jpg b/doc/salome/gui/SMESH/image22.jpg deleted file mode 100755 index b6a5e8db654848954022923ee9f8e0c08e4a6626..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34642 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 diff --git a/doc/salome/gui/SMESH/image23.jpg b/doc/salome/gui/SMESH/image23.jpg deleted file mode 100755 index 74f899b00c055072e7941983f7a2e1a2864ab0b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36428 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

5J|A_V9Msi>X@? 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 H383;HSIKcb diff --git a/doc/salome/gui/SMESH/image31.jpg b/doc/salome/gui/SMESH/image31.jpg deleted file mode 100755 index aa004031b98c078ddac29778ca420226534c8878..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29277 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≺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 E1Ng%vrj0>Dskxx3*l{x^?T`y?c)xJ9h5exog+1 z{Rb->B}PMF_=SKD$V;HSz`(JSL7YRzW5a@jtXx7`F()=GJlrmz$iyHJxQLN~oljxK z4uOWoZWa!i2Qw}_c4uH>6H$0sxX63DsPC*l6`LB|S~-i`*EYhY9=ef8$&CzS>U zt=4x-Dko;1?(}T8O3nJB)WGBv@3&>u)W*=I>>L~%7cMni-<-Dp6_0g-gZGw#{Yo>c z7c|^mTe#P6>#%8P^JbWqRRVk=MwW%*;^{wWE-cDVK9cj?d0@XZKDq&c3(Da`E%? L3!Kw=I2fz}z(;Bf diff --git a/doc/salome/gui/SMESH/image32.jpg b/doc/salome/gui/SMESH/image32.jpg deleted file mode 100755 index 77d595dce9e3c117004d9e9adf3f84a3933acc30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14908 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 XE#4W#oBfZX{(le_|1M2{&{O{nD8c#0 diff --git a/doc/salome/gui/SMESH/image33.gif b/doc/salome/gui/SMESH/image33.gif deleted file mode 100755 index ecdd47b0b21fe3da820144e77bd64cd5ec3f1499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 987 zcmZ?wbh9u|lxC1*_|5g%vrj0>Dskxx3*l{x^?T`y?c)xJ9h5exog+1 z{Rb->B}PMF_=SKD$V;HSz`${UL7YRzW5a@j%^bpNAqO@rJlrmz>@~+@qY?vysIeA9 z0>gnuW)2g#CpRWCG%_p6PkN(~;LtdQ*D`L7rLfw`scc0|8Vo{7P4gYXxt3N6tq5Ff zky(^-;o{Sai#>~9rJQ1DxV+qcaoL>A22I~JoKx<-@tT(9zJZfZKtSNZvYXo(F07I@ zNO%*ysjye+#_sP9jr)yuR?R)ReZ#|jUMs6?&g>{?WXzdfmg7^I&&X7o8Mf}t^ykmc TFL3Vu=do+c%gZa6nHa1AkP>g| diff --git a/doc/salome/gui/SMESH/image34.gif b/doc/salome/gui/SMESH/image34.gif deleted file mode 100755 index 963095fe8fef78d4e2a430a54382d9c042004cc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 974 zcmZ?wbh9u|lxC1%_|50B3k)2a86-JmJT@#i*vuiU7IR?3!o%$X%2qiFg-J)- zcs1f;CVWgf*012)^kv1wCvJV}-c>$31shIJ)?;)CaWGzXcD4oYg*!WqpEb^RX#UsZ z*|0p2S+7-#)xg1lVX=*%h{q}sjRpoLHix@29ki}44QCg*amtwS()uuF7KH_qb;6lh zF39cBTEM`xnDf)CtJw)!4675l-^lvxSbcwC)=javGuPF^cK0aH=at!6bY?4?R`$I! JJBu6`tO3k#Xbu1X diff --git a/doc/salome/gui/SMESH/image34.jpg b/doc/salome/gui/SMESH/image34.jpg deleted file mode 100755 index 3f4b042393ee7098a007e961b53c59577fb07e84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22197 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 P#yX$F_TgUkZ=` zmZO$ao-;DDuyOp@X`+6SnUy2sZ{-3lrWrbn33pFj)V{nSnN#FNmRb5mrpT+CVyhP9 s-R-g4x^C;~?e80Vm}-i?c<;z-Wc2thrp6Qc;n7jH47+(gmI@5k0K17_rvLx| diff --git a/doc/salome/gui/SMESH/image35.jpg b/doc/salome/gui/SMESH/image35.jpg deleted file mode 100755 index bc9c85e764bcdf01d4dd9ea4d002e5509a97e225..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21749 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 diff --git a/doc/salome/gui/SMESH/image36.gif b/doc/salome/gui/SMESH/image36.gif deleted file mode 100755 index 7236ef8b94e2871b893c0ef743b10f85da672e25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 987 zcmZ?wbh9u|lwc5N_|50B3k)0w7$iAlJT@#i*vKuU6?0<4!o%$X%3gDJFf_Qf zi!pkfIk8chfmzVlETdpS%E=xUr&%hQpBNe#nV1~5?3lFFn}LyqCt$^b<^Bx1{5>k2 z#s?ah>?Uh1kPKOIbPlV4#^0M)QZ6p$T&Bkw^>t;#im2&fwvq=j8rMYaENj&&%{sQu zf1{S~gaeE3GO+MmxVzh2`OKyU<40FdPhZc-WXUcNvFAtry+bvEA_@Tu8X8Ye*A8}L Yu-wFWZh~OVJD*)!US3|t%*0>~07}SiSpWb4 diff --git a/doc/salome/gui/SMESH/image36.jpg b/doc/salome/gui/SMESH/image36.jpg deleted file mode 100755 index 9b44dc7276ae5f68a06cd5cf07640c5ebb18976b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13508 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 lr%Ga;54@@Dtgg3T*uJwTYr{{x9B<=FrL diff --git a/doc/salome/gui/SMESH/image37.gif b/doc/salome/gui/SMESH/image37.gif deleted file mode 100755 index edd5263d85a207447082330eed7c63e2e33d233d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1001 zcmZ?wbh9u|lw^=#_|5ILrGiT1yrAybYUAwjA+SaXG_wL<$?AWn$=gwWbcJ2Rv zu%c07Gz5lY2+ZY=NsJfsRFwv1Ha3n32hlYVGc3-^DHtR$ zL@&*od+4vl_H}oe6V_T?t(^9bfr3(mn58gjFJwKMl g$Z{j*lws3WIQ%3IM~b~%olQC!@|Su0?J-S!oGR)CJr_>4(=U1+*`MBNpIiA zze7nzMMXhIK|xK&%1BLnmzIKpiHGSfI|mmR7Zn5FJzmaxtejjN7}z*CxVLag@bE}D zXeekn{;yxCR*WjnJz!nlEnbrT!s7A_t>27vkd9QytD*?*n91KhyC#Jqup zc@sSf^lkjm=Kw6?n@beFH-y3rj0&n-{irF0O9w9-dy_f$xHX-+%ZR z5*-s87oYIyb7ES0MrKy_x18M4vhs?`s_L5B=9bpB_Kwc3?%|QqvGIw?sp+L3%PXsE z>l>R}heyXJr)TFEmsiASlW$;QVPfI@G#TTD2l^kA80#jpAU27tCXTri>0P0>x5yqv zrIs||vfS4?Ab;*Wgh#t{~0U2P`{v`0|-q#y%@BmKW*CD0*YFWLSbVgJk2&|Fg!5k%L3XuBH z_GB?Dzb8mp+jmH~K9tb$%hSpS9Z1tj4(R+sSI}hImmw>MBE%N zK5fP)R>3PwjAngGi#j3uQ4unA`z9xdu38A_3dvy#p4SdHtCNXec)wzyFWX55JjHl; z6EGavu^e?+t_%yB^|x`X4V{ZD{+2Y#;%=*cJ0n(8y26isuDj(W-jq>J@RY{WFCV+4 zx_FhZ4&Sz^af;?O%&(4r%j8kCN;|o~t^IrMjs9AMzwE=*TF?vmfmJpZue`fV^>LX= znP@Po^GqhwocoouowrQyX1Fd}m%dKr9;~oKHp^3e*sEQ!s?vuhtgzr{xd>++09z1RXkw$uIacc11!-YcPiC;ytW)8eflq~cWo<@n z2%61kyms)&6^#WVRHA1T!Le_M3YSa;bF`Re7IJ#&BLbY3a?Ez@NnOh%Dg-g%1{VV2ydsx z#quUL#ho*yD-hmk{q4q>=CB`X>A8^?SEK1&C?M-~U{70Dspxe?FXxS43;O4}l3}=aD2#%bYlnxGNkxwZ-{FinErXJ_ni)w&vK2Bl zf+%H*cXp*;$>~=<6+7B3<4JO(drdSEGBDi@#sUw>fz5BhUBG;DyVLXuaBtgEu#8Qk zU*5^&`_s7#%`QDKS-~dK5gwTGPMT_A0-kW0DDL>N!dR8-^iyVtaK&f7m9l_&(d85| zt*3Ikj3PIZ>jIx8A$;j3Zn7`y-~N*1aPFNk4h^69d{!@zIHZz=&oG>-H`EZfIPD%i zQmbM*zW->qBfPNuvXG^^qHL7Uu`5}CVp=pS8JF2uLJ3D~peJcPg{KUkMzs50fr1+U zgu7z+=N8J?W$wkp*Ct)tX>~jM))foSEeCF+7^UPw#-$$G36r7aKf2B zPQ*KMD^aG1cUra}YvE}Rg`y7@%83&?AIV9O0)kNrHqAzNVxBoww(qFklbMrOl3SBet3&zq=#i;$VD%qh1PrfLg1Ju z`kgeFi}#Dhb0qj4az3CZoJX~)f+geF{|amozhvP3%}6RV;gAi|1Tm{3a-@Rbae3{b zfTG7C`qS;HIdt=8sxpB2m&oq&AWpd@J;7wVIOzw@$uBI)FiK^H;7lsVXFYIf$ouYx z`ix+)vJ>)w28jG6>;ebe5?i(BwP!2(Zv`%% zbg;wT>mr7aPERhOK8zP#LWW|HdUHL5jYeN%$&`JS8o_*$Yf-k$1A4kh()Zz0)ZRi# z#L5{b7HZk9w#F9;S^>-i(V4R>QRK7Fb#W#Lh@_FHp{dw=anShpkDWjyWgceUNK4o> z4cq#I#3%7b9zN8SIUIRp&sq+&(ku8?N-nG*x>tGr4|t}ZCUoF?%M2|X6hq7>(cshh zz@#GT%bu)f*0kJqw9B16uNY`f8^gHM#Uj$E=opSU`3T⪼YRCR73&na919%Cq#Ed z)3SDCJ%mG4S%oBWFJIJrfoXB9xk7A{ntFgpFR?yt7%qJ*U2*U4Jo?kwk{OZgMs90= zpa3u8BEC;305dImc~XdLb1Ygq5Hz4aoA|APalo+#Nto;k@xs;e&l}_OKfTEKontoA zqP?^@qcWldOKxL=<(g#VFE zjTCSWB1tkol%RQ(v}JqKMGi?kP#ZVL zqv7C12KPX7WG?P0m*Sy{Z*{3S-EAf5_hd%pRqk*Dvv(ru8hei(ggE}7bv=Er3chky z3x}TfoA}+2w39BvIlP{Strj;{fDU{bq3f_8RvJ#A(E-V$`qG*n$uPrDSJB?%o1A%k z!~|iYAkuY`n9E7k>NvW{DHuR@NsMj{`;yIZ* zpa5F`V6K6i2I-h_R-)XBkGP#Y4W4gwhn+#*e;$clb1Tia6pZx?8LmW1&?Y;3!Cexev)dhLCU}i4ITzv%9DF@m`-tw%9reXFTYv zvxTucbUgAg3IHk@Oidu<$mb7&`IA)*2JHRGEDOrN7N1>)pvNy<|8p7V@ zc;6S=>R)RIb8pQXdkH2-r)o!<&`b-3#r@bb=Tx~ptatZM7-KK3Ptd3j*qf_V#r#Oz za7&E*en^suS#P!4NOY`+e4l?mkNsHUl)KSfJ3q6=9*@l`{1(dwM*c=u^|WyTq0=4B zWY&7m$ux(Jz}5)pgVlkD9@E&kq-r6&`TYfoJw8#fR4q#A@}(67Ob|>X=D;!*xHm(tPevP z*iLKAROgoo`&>;ez-w>)pu{CRGtpjg#ELjXXbZa5xNYaxL0~QF)t;sCNoADh6$c97 zU#pDX%qxwbws(!8&oKzaPmAhVpMecHic*m(##DUYO>*6FCSsb%e%GemrWtPMun86X zY&98HMlQ+DE?F9ig!bl{Dkl9Mzq!3()XI7|Oo0KMG$R%&6Rous8D=W;l7EoK2ftJb zKh^65g?-bGX{dM*!Je-hGg3B23bD6+;0u27BFxM7CHuX)2SZg%4BhFKxAvv`GyJI$ zS12F`u6kCUdDyb&jsigEtc+7My6ZF!m5nyC6sbg0J6V3#sA z_s)bf;bMrbg*>p2ywAYxEq6iOl?ox_vR8(S=Dbh*Fmt#ya8h@5X+~FeQW`2DE_Xe> zi}mf*w{_182!7y2-)f?l-8H6LdPpm>a40;ORVg`;z2+I2Z-ddX_!<)D(sS-cRx2g# zce@&S6dGx;eY9mgIi>o|l&zeFcZxL{(8c6!O#uKB<&B&6Vw?&)>)AMB&S~RSKICnk zRb?_8A~g}S&)&4uEgr|SNFE8{*o8c`H8XBN0X-|WW_DVu@0%-8fK1Ao+skKvPwjuG z;BTf+hEcYBTTR@jyMJ+{0CJ^!`;dl0D0B78X4UQ7!$7wD zLZ>RsPh}h4k&pu4ZVjGxLkM2_r2_asV`vN1TBA|EK>pt7G)~FmG-ANRLb~x2eDNQ@ z|K*=Id?cN8SVZO+)NYnmAxVqi~vhMj6-3z_jP zdG%TX-V+9Oi7~jwYQ!EII*msPL)S0x>srq1srFo}Hf}kJNoS`HI7od%ocO375S@9Q zNB#&+RERyBIGo*_h_8Le=x$IyL|SeWeADFZ$;xq{q0YA?FY82zKa9mlILSIwEk~eE zN_W8`Q z6!#~wrBt$z0M2*uD?+(@&sp8D*70Pb3QTQ%gh%VP zFIlLTmUfL|`O-$#^DgP=n|VD*(&*A^@chcm^4;|%4Ozb^MSN!dP2MpcVsip*0M%Da zGT`|ef~OcEfZ*@1Uc4Zt2KC(3!Fu#M5%2UF9^evK;cBKNY)_p_`F;WA z#aft$Wfb+)`Y20{9K9GG)dk(cF1W$%_$uM)*UM+I>zEtg9T-1!H5C%%QHr%K9JY{~gK=V`EzZ{^ylJ9;)}> z$@dE>f6wIN%;p&U*4D4WUg*WgiTrhevej_;99VQ+|8Y|A$o#<^c3ZPV4oZ4fOI zc3J+SJyu_6*!X9Z&y3Fv7&YE?%eZ9SCv2eHsyb<`rF!2X&B<4N5va)*W;rY3bUC3v zb`Q;!8kZxtCyOpGkcaGt{^?FUs**G>(YaY-vzWqSOIckFpYT>5JMtX)>@bdXZ`cto zh|XBhgFlRWj!idcOnYGqxU7=iuRabz=&Ye7_Df&DF7Odc#B+fk*%V0oBU^tAL|(ea z(d>o0=u>B!<~^lZ=p#!Z0?2pS&4H&HHoCs|uZIzQm+vdnPU0lIMPSm7oxa)^nzO9a z?j<+w$i@kz#TL=gH)`#zS1z4qEPqf{<~XuHg+!?s=P(U=%jwxS_2B|@A%EM^%mc zpz%8>P7W*iTwpCn-^zqol*M>|t)jkk((%atd*8iNu5QsC@$;oxu$@$+G1RL?bc-ri zyG!s$B@P^*Vdt_j5nJge;@39%QXT4g@DZ!TZzD_ds5?2yhjAoZ)2xw}Sc6mrWLuZz z8zF-U7HAzH{16(Jwll(`FWdY-Rs&D5VL?L*IcHVW5#1csj!$)bGkk)%?V)!N{kju! zMR+i;USzl9)#c~2iIM4fzFCLIsiCCXDPOM{oTavHWkrt~!dS!Yi!9}3U(8N zO6z)BaSj+BaKN#W`~(e$Vybwnz+-*(O&kM6LAzH)QD2Pdn*NIJn}Drd{A(fp)a)$Y z6+DJ}%J-BbKdXDqB<->$g;_=uTBxh}#4H?x$Jf;i6y}Fh7GidhW@aAu?JYk27gi?^ z&i9^;6@ouRcP(=aLGfS(F5_eE(vYZ$_e1I$_WssrLE!E0Uj=2ghsW@zT28;r$2#DO z9#)WP7BUiOO>Qaj{|q`7hAjzD?!Z>Z)avBVE>GZ*Lx*}lUgm9wn&{rNMFaaue6mH^ zE3eAltt*S;*Z-E+eiEc1_RZwP{v!#x@`?QM%umYStcb?^+jZ% z6@zile29(N6Kln$o!l*KqyJh-jKRqlSHYjZnYA0uEA29q%yz61s1ai{KJ}8kh;`Yf)g2puPD~D%5t=n-6zX<*k?DisLc)Bfx#l^CHJj)vo5kPv`e0{!V(_YK@(yznR(LI*= z_!^bBt2 zT~Bi7`NPsLcel5GU;1ZZ_+X-SP&)4$c+Q}UtG?>qP2=!P=Tr|tZV$nB{%ak)JFU!6m;{1 z{wY;4pF5s7;?8i)Uz;w&t{aWsM*3btGhGVoVQiN_%Sgw$7PdJg_+agy_`rBb;kvz2 z5-(q^7u~+(Zt}RXnwgbxmsyNnNT{ZT4t{2<;OUj`cQfCgwQ&@(=(sr{w|`+zsVJDr z`<|Xh!FxDnI_cD3ePk+c`pn(qrP`ymlkFP5x%h|KD^b!rp;NKvSk62%sYc|Rxv_I2 z(gKw43Id9Fr97uK-EHHxE&d}NGGZxsrGJ!Vo81_10)Y3d}!Sfor}zdNX@2d&5d^o%89{MSqm#+;+>_)sTUH9#V>>g2pEiM;Nx>(bQZ+^hH-oGFX)4~|h zAD3pFOV_zdqa9ZaCgIO`pk8~WolQQC0z{?}#F3^rO#e9kNLj6LKJ16B z1tMj3&M4JK3lbt2Jrt=OZQu_&7KL1>wjm5r03L)WW((GdU=&pSCPiWD#kLMn0Lkr@i1ZoIfWX|qmvnf4HS!F~ zVX)O8@%JTv;Y?;ht9W>Z(W}`|{FW$tiPw2C(UCjKG7p}6EoYI0zDrs@R(!&mE3cgr zKZT5hUwOZRIyr)p_OTAjol{$Q+{nuIo3gvVXSUH$`eDT*e){A^V<6h5&jOMN4Ir@A21WtyBrn#n$lSB>J-G(Oft0A>RpC1$||A4z+HGdZr>r z#BvH$&ZNegU-#>#9+Fi!;qvPK&<~TW6zqB@Dz(?A3Brt)NHnohsn~{c{xkL1?O%|g zOMTBbjvNR?RI(%Ry)xeyO2$#40LSC?lnQf(2}t(#1-)y-G&$RR&mjysbMZ5|{8|94 z$|`L`6SlVcV6msG29OlRDsQcj=rVqi*SiFhij(K__vqf^(dfsTTNd@;D@o-B_v_ivR2rkb4xdNF^7ujO8=2xgkGZi^QTPc zdy-?DDmD<Q4<%@yh9@yv`#)eLdUu%%!(WiFj>DUsVthAC=l>Y|iBt^qv<)x?jC4OQYlmekzV?XcFKQ)!xq+P=nD;>urH=JP)Rj8Tx&J35ug~N^J3+ZZd5Q{)F|d^RuxSjc6LfY|Hn;Z8hC`Z1c zncNM-O<?5w8vD}^|BPz%fnwvQwjWmnS99GjVQ|>7 z;B$a9-0HGCXNp!Vk+NTV4L$fAa+QvxJAI$vy0GFO{w1^3%kivLCQ^N#nnI^tKc z5jKtHU2lH-BF2FnTkB909%ZxwUWj6PQb+fEW!N~;pEFSml(QVv()5yIo}GS( zjC+0IMoCLnPS&|MVqJkNTQ{?G$hTa`-sNv1iD`X}2pM@InD-}>|8wba`3l*~k~sntA`JR55!y!E zgK5(YV?&G40egDsZ`>abl*##n%j<&*;IK(2mU(=X!^BTPj7u`_E7f14e50JW5Q&;ig zyz>wZt0J^mkJS^e5U&{3Z#Y?Ul{m-4!}7VVuB5#6FZ9E3Q5lsfbEqGW?E5&_!TWgG zo46C1K8x3%A+~H`q$`zFRJ+ArlpW5GSX7pr{9wqOKy}RW46jnclDLg5dw>=N=+oQz z_xt8Kq$K0%rhfSM>}Xi|fP%iKp!*bV8dw=He2rKf?Z#60mbWUu zFfaG}zDI6KBNVF!$6Z(UmiQ)q*lXd(=>!iP_`y2+3L;!=6cFv9g|jkORaFsVPKdKO z6Mx$0kdg74t!*t_561)hQ$&@ai4a73&wK7K$AnTfG^G1D&b=03bp&_E3Fyb z2<@9IZYWF8s7oAvjTI%RUB1Hj+9z<7=6rKBT#2j0+Lzu=J6%gBmq&P~)2=rF9mC@z zme&lSIT|H#>-dgzU!A&o1b*B!2lZ+3RA%cw=u&as&%XQ&s`=Np0-6Vi$Q+6eN5p&8 zRq%mwWLm!{N6QQfMVca}Yu2x8j?w!nLnr{+Q!=4(UXFn3<|6dB8vT0he$wl|lPQ|x z;2Zg;vO`(!U3&I%>-cUrLW1xv z9871%v)CjCY)?@jB+CYUFfbwy=7H0s==Xh^}PbIjEv{w>HKl-H)O| zZIH-9>G#>5-V|XpWzil)a3 zQpQ>bYDkGpyT84u(f@O*M;fswl!`04cpXKy-}l^zzTuvZk#ei$c0fsRS`uO$z$gUK9DH^-T$;&VgzErf@g6ez<*WKzR^#jU{v82iXuaa1$N~R*JSAl% z$vsMZf+yEfRL@?wB>C$O7`EBFLgn&qXA8K=SD%(5DI)97nWBOh5d|V=Ky4#~6f>lzwnB9cwD*Wfnqz*>WnJj>hFhEq#9m z-)@>hl3mM^8x|h=z{j_HQ+8RNB|HU+`=C)SA3nJ~Ny)JE z$MPOst?mfP+}{-4WLpdU!JBI3S)Lh0?4xOwq&i1CrVg+sJ%k@R1)#|GCU zto_(m17_y$VW4{&bU6;HiU)9JHVt&u{EsAxIyX~UQGgpCbnyz(bl)aG)i5JKmy7kK zZfw}IkSXD@p?7INru_&%3oj7Pyf!I3HoxB-TLI30ycydn*S z5UEP$E6`lQYrn0F66f1+L?}y%Yn{1$8FxPcuT3Hf8F=QhJ=XRwIm3`MBajXK5!n9e z01BYb-pNL5_KZu&M`tG}V14*{6$Nw=CA4W->CGq)^QFn-u~2YvsIO)av?A2l-kVx3 z^c8h?I+7uK?!>gejgmD_X@EOZ?fQ)pXcI0 zk|X70mV^!|5!jA0`{U^_e{^_SiN2|$Fo}WF8p?Ul%2Lk+FP`0TPS&N} zuJZA3fGuur`dO!ian=~i7o0UN@E9Qz#>ah6kZj}3pMQ+9R8?1p?OOQR(3SE_SdAw6 z=o_V~<+aGKOoQLH@TytvN<3JLfrL;^H%7TaMuf4{*Hn43BOdvk@0 zG7bK=0<}Yh9a*T zRsk(Jo4Qaw72|6~ET53`RMF9pB-0UTiVB)oZk0HBTlw+{>nZ_HZ#F+OY6hz8h*?li z3y-;_!Dt=-YwsYIY;8@$X+jSB&GQX2db6}wX45kb6;+Ei(FW1VtVhcG#&kda1EIf4 zV##JWH|J$hg4a6yfQ3+WPK8>7mj zuRvKL=aqB%YSQ{!<`bI#qa?q)$X;ozd~?W3@wyG&!QvJN+^s=x7UTQP!29dI+*!~fg^LVjGY!0jLiu#a7OqYq_9i_V;kfW0*y8Uz! z@}iIX?VAL`wQpBEE13HRl2ROJuQsz+Tsz1O{qnB1FQZXFvl?&G+~%~~EcAHT*q6@R zH-l(6p;&b(1}t;Tv&{$B)L2F85mjzbGV)HFwiWrE9q+MTnFj;u@#XGuh^H=t@rU+k z8t}<4vgH_lxRoH1o}B=yJiA&|B6HC*63sro{X}9+xk&dlI+CoFt4l{+udB9KGp?zK zv|*SdFmI_^FqzRMVbNj=UMzeNV_n_9{6rbJb zLF8QzDpl@0BVBtW5wn%CoHBV*l-!e4Ec*Tpw56UgLH9@+1$urK&vr*@y1osdY5%fcjYY<;OFt+bAx}1-Ut%mGcul`pNHVPSXl98li=3&4?V5D zE;zoQ_rHMuZ}=D95w?O27x53TpP#ken7P%(PaUu>g~MKwY^MCJB7MtMJ1tvXOGEdS zlq;W|KNYgW59F}dYVRJD=|cLPger&5Z@I(Ks6T~e+Qqp5MygT`wp{Apg|ui(7>=NT zQjpKCMDMYG*Xx7*_6M(?-;bE%vC}?_U6$TjBhR_!j?VV`0(Md_7XomZFrvMG$~*#0 z7xD1Gs5SSiUv>AdO;DlTJ=XFRv87j~kDFqbQ|WoU*x0OH6x8{Y9m46==OudF#tJC$ znNfhsNA<@fBoO+7QGXT=@^FzKh@?id7xVc#2^En8=+xGPPK9Vm?msj{iX&05g3XN~ zq*cq7EMvTP3`}Wn{7A#w(E{^Bk*1COIo{$MzpEoZd!jt8je?(^>gP~795<1Yx935L zB%!jpEIc9P-U9DmI?HurO(s(ww)<_I5&GV@--9H+gcyWgETzb!8C7N z$kx2U3Pcw%zZ5vKPt;sL+d-&Ls?sfzJ2p!agm^oo2meEyQOa<> zQM8_|>2@}pdzTJga{ZLtD7i_7QJdphWtlxUSX!Kp<7FzfQGF~&6ouy!kih3G=A zUJeC3^eMVNd-3yY*;7fyBcX!%w|NGo1^vlR#O8kx*d$huXA1-?^`jdBF4Bf@&fM1F zR~jh5zfWJ%=kvALnK>fa3k68Wpn!!kMM109 zgDkjsyijdQBP2zCx8D zn_)e%_O;I9*GdI9JMl7?_?YRYnfOTtYQaC*#$e8`Rr8?ZaaGB z*tLPcv77duoOP&j;fu|vDDSwKkU~&7MNM8m8_t%tDhziJFCS&B%QqXi+Mdlc`t(n- z{3~aAs8j~n2eK`>l?QpK=rH(EN|k!%Zz*TK*z3zt;G6ehQSV0*Dzu+$8MEFi{)4Nz zv7I}-q^>lIfimmCI7#5U1P<_ssh?ZjzC{{2i>T_fD?B+q#a@+vLU6y}X3{l@Wr_$! z^kW$>jVBQulM|2GdMitMM4cr#T=nzrql>s3eOcL%XZe*LRTSMFyv%X2jD>`cbDF^< zH5uIfj97`hkY>dK$l!DI#tNDc+DQcotb&~&h6V8beRC9m%TR#=WJCAixRAs2NiC%A zInKB}MB;jqhuI0bnZhW* zeGTZdqL z`!z7^u*fj7Gw0--s763I_;x!_oKuR$=oL%8W4Z267w1qkTsU4PlVv2H zxy&3v##d?c4D+)+IUYqbH(^(V#l{VVr7d1s%Io~u5clWG1AsE%_LWdg_lw3`SJyat z3v=F8%KUeJvnz-}rl+qoIUZj4VC_piWel!#fAeenOmA^Z<*yJpWT17xXct; z-jigd>cx9@a_D?cJn3&e^=Sx3o!K_$ua(D5T(_;q zR)Sbf>M5Ec;T6+DlN}P6n5R6W*2OvdFl*=+biEOXv{4h7>zJ-sX@D&HyC44+pj>eeT2LvA2`(XE>^aB=h2?OG&4Mm)T z0`1zGKt1%{?uUPq1U#Vbn{D$b>)DalnKQb-K7mSRuXv}W8eS@vza+77@?ttu8tg5e zjqqFL9&G*RO2TBEa|)Wab#3~hxT=ZXXEku~38`0Bw=R*2rbOE z?9#*{&-;X){x-GJ${imXHTL{7ZXqW-O?Pw;3{wbl&@SF7-|8V{6w@?um#CFlx98&P z+n$&=N&;Ueur?~3-pyvTy}7-O)HoK(`$ttp%RMxHv57&m?nBQgB}+B}>ln?)(_Eg0 zPi2aVb;(n>)lKd>=*>^u?H;5m7(JbdR_3T-jk!QSN+FMal%mI@#w{z8-vG|@*ha4% z;~|X*?}WJNYRVd7o?p{BRhCXrY~{f7MhUbIBoH-3Z76@WtLHZs>RjAyR4XkEwTu!wR!i>~hN+*~<1;P=H2tH@eyGp1gz0e-$B0VZ_5J z%819LMm?>?F)c)z8;TZ&{dCg>G@xwl7{y$lG(QdH;Ayh@kv-&$^(4UzUOB&lyXfh5 zfT*bG#=}H6THi7~2sG8rR)HtwOD((}dYbe3XGh$hKSL|-xaTXDuY>})Rh|bCTV2fl>uHLrEN~^%nXc$FzHixMZ>8jp%T2@4_u^IBM!I5b z{>h44mH0NS&doEs{5o9@bGRl^0aCJ9jG5dnYkEEf9ePj}wU=j{<5|pq8z6IpJ@l6G z@HD3#vYW(Qf&wD%D8jL8(7oT<-7-)(X3>Rk{puy8=}*1;##)pIeMI&vC!xI{I$X*Z zVsb6d7%te$aws{4t3c@>ybz7&QVMf?0((pmN~=mM+(onwTKC(DykEz}YCq2*r>@R= znBUnH8)qekMR&)pQ+Gwv1+<|bSbSjJXw-RT$39IR$N8$ Zco3NvX!>aC3!}@OUHi9^NQ9dD{{U)n)eisw diff --git a/doc/salome/gui/SMESH/image39.gif b/doc/salome/gui/SMESH/image39.gif deleted file mode 100755 index b206af116287fe081c5dd6ae8c13e302db6a655a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 997 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

=~bFMH$lt#(LK%Z(1AcctlF+Zv+OgMm24q+ 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 diff --git a/doc/salome/gui/SMESH/image4.jpg b/doc/salome/gui/SMESH/image4.jpg deleted file mode 100755 index c90ba78d9cfb353465f872a083cdedc877903637..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60769 zcmcG#2UJtvwl5t1pa>!eh=72obP%NXVgn=yNK2%P)FdWI7eY}GkuEJLRp}6tNC~}& zNDEE65JK;e(0hBF`|i2-zVXiazVm(K-kp)`z30qWnJasZIe&A`-#YtqHVL>2)Y8!c zP@TVS0ImT5XQu$(rTDq(BbeAsCu`)7VzRG@$gX8+O>(@EC`FT0H?r>edeoO4u9YG-x5fP4? z;*xiTCHaL#gs3jk($Za`W1**K5xQ~xhS2}#ow_j zvEMH7JuGfyGwNOEmwD+HL`Q#}orCj+fS{1Dh^VZbyn>>V@}tL^TG~%^fW{`KAnZK?za(d7W#{DPVMUZfR|6C-n6X3=R$d85y0Lo|&DSUszmP-q_sQ-r3#TKR9GQH~B9b8fqHaznM(+ zm-qRbnwjRpZK;ba4-9E-U0Lr)zq@qpVeGf!Mmjzjqjk2IZoTx^`DLdBHvVSyzZw0n z*&Ou$%jo~G`9DlP`vG9SM5RSFNKJKaJu?+GGu7EBfPtFo{DzttpaIyOpfL#aob39` z-$Z$tWvP74gFnWO?kUtp>|Gh9hl2yB#Y?ZQzQ@mpG5-}_;}x%8ZmAE zQ=2;~7N2qAw$<+{G^J^cTOa+Isa*8GB!^{XHDG%vS3njxxo0}?lQrszRyI#R*k;(X zbhZC6zEARBHSO<{pyvA(xQq!L4?ICtt{iLkIRrKaG-S%&ZJ6n1I-GAHRDWB~`uQvH zMgVS0=wF>Ym8n_uppn7XYx1Z$E$R3&(~*k>`H({f;N*hj*T3|Y)D2Ty5`^qa0X z`>QjTgJRYMa0uMoCTYYcG0a0!EQMW;mx8fBwe}({`FB5hzCqq;MxO!fT6e|Z^9o59 za%Z_6it*lzZ{6r`!X~#E`I}$9I0>!cBKBbLBUW%YB0aBjMlq-~`!wg~lku*#dtx~RMzxO#JIs|=k2A>ka%`LtLS=w8Bujr&)j-}z) zj}q&BGcMAnP#QUBPo+isc|7sZh0*b5?~zhNG&wNL54PZ`BH-Xv&5L~7f_x(+v|)7y zAdb3YY%B`06O&YHWWM3b)&85FiO~9yS$S}7dFn@$)({_}IJf!vZq!$aix;I@6tVe! z!t2GnEg9(JF8Zv0VSQ5dwrrLU7`2YZL&Qpf9t%d6-@%U7dDC!S&3Hmh6(pDT%7uK! z_5tqH$rsUIdep=gT#q$_8av{S`&RK4*p4~m0r%%fuge!C%(rS*I7aaGYYvX(H38Z( z(=j)e1EDBFV@OmULloT|oo8oXr8Ix@(%#Mt3z2F+?!K#_yB@xbMC zDQw*T&K&HTHGg^9b�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 diff --git a/doc/salome/gui/SMESH/image40.gif b/doc/salome/gui/SMESH/image40.gif deleted file mode 100755 index becc12a47ada2fd7d463f6f9374bda6eee2ed3f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1000 zcmZ?wbh9u|lwc5N_|50B3k)1*86-JmJT@#i*vKuU6?0<4!o%$X%3eJ;6cSw- zBxI9VE^KIY@0WJ&Vo7L7JjyC=C>L?^(*ZXoHF2g4PvHX$jEqTYA)dvm#~7H{bOIbg z9Ge#zSO4M>NN{Led51Mp}V$ZGH#68 zxv7*>B>T?F)X2ON?r_JZ{hV%Gd=3W~9vp5oyq9vSB0up+JFftPRYODS>27)Ff87fh i8ktymI>dN?88@A65R|asjWo@^vLX5OytxVr4Aua(&umKo diff --git a/doc/salome/gui/SMESH/image40.jpg b/doc/salome/gui/SMESH/image40.jpg deleted file mode 100755 index 93369a5f78fab4d9eed8bbd9ddda1bf6ae4386ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13980 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 diff --git a/doc/salome/gui/SMESH/image41.jpg b/doc/salome/gui/SMESH/image41.jpg deleted file mode 100755 index 53a9de2b7b02a79b1b27dde1e1ffbad7717c93a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34209 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 AjsO4v diff --git a/doc/salome/gui/SMESH/image42.gif b/doc/salome/gui/SMESH/image42.gif deleted file mode 100755 index fdfb1b164538eab03a827d678aa18b0dc13d186c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1087 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 diff --git a/doc/salome/gui/SMESH/image43.jpg b/doc/salome/gui/SMESH/image43.jpg deleted file mode 100755 index b216f6c23e58deea6f09bf85806464a3e8e29e07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9197 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 diff --git a/doc/salome/gui/SMESH/image44.gif b/doc/salome/gui/SMESH/image44.gif deleted file mode 100755 index 4c9cc1a0e669ed30b97b16f0ae6d100d25154891..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4554 zcmeH|`8O1d_s0iWL$)VlsYp+jWPN1KTGo`vGGyOLL|JAmV>gU_nGJ)gxLX`u6trAt50N2?=ocIeBn+VII7^9Ntw9Czh9&*TRXl@UdDrsTNLdJtvRc1t)i% z*TQo)y2{C2U0uXNGO?UYtUYIg*h(f6iDR|ovDR}o#=17f#>Plp8zdr`MBE^akx644 zBoc`{MkbGKkVzY4^2P>v{78*B}^``+@8QC7=a08iQ2C1SZO|OS?rL3x+4mFhzBNW^}7J`_1 ziNZo5TMI+YZ^p5@@t0eM9#?$A8RyD43g=0U@i3H`7MZqIeW|u<_FMeeT0LFw@;>#7 zSzFC)BV!SV)^J&``Pt(b>-4|Y)+%b8hsh40uipTPSf!ocpr1Yy zZ~QOFr)h*bd?9w-+~|mGJ0Rrq^XC;uDC}${Ri^Ho&C`Nr`i3skFI~c`+Z}*D={RG- zG$PMbwL9tQD~S8MPAaK zS1-#?J&u9eIfCx#8U<9BjKBEoR$?_D`mV-5u%BH^k(G;Z%XG=Gvv3#XfE7Kr5}I{L zp_-$<gIx;wsY{aQRpO+eby?4BvNO(^gY9b&n2!#WF5;09`c~602d>To7}BIm zbgn*;aY|lH#x{=3(zcsMv;}MQ-g_O}Bo^QC|Ir%tC84KnA#}JF^{?Blo%R)B|2lVr zoa&v9?>70*JNJl?A6XB+`0sX6*SB-MXh++-?*QAwfjt)lpY8Qt=7R6_ajL=_`nZi` ze||92d+@U#=nc>A7Y_UWbD)p!;{M=`n2{GlQg41Y49eiYEA>jglRX$Q>3?uAs&?QJ zGNyH`^=V9-_4Z4BU1b4m#YJ()$B{Ut(cDRc@ux2*%kuN)n zqp(qGs}V7y!TQWko=1H9EUisljkzdSL`n*ao|wgoaI2#n!gdb7)!=t%+YJM9r{7zq zpP&9{pC|K7Fb^)D?kah3QIQ+nad=)oTC4r zj6)h>fD;9wV#P&4l152+FPP<}+&L{L7zOi|0rH!;YX>ZY*P61$E>(ycb0~Br z=~^=13hL#s$YQiC0|2;mS8qtz4)Hn#i=hNeB<~X9F2jTKln4K2dqOZZ?N&;3zQM-f zKFix5?oq%Yjl2CA%D|>3hENvMV-BAkE^XyYW*1+N(uf<0SNoYY;sNC^HDTn6Y(_hE z-u$Z>1a-TUgn9SYjnhrxqk!%*3;?~sZn#Wm;0|AgZ?>$<5C7A@e`bl<{a~W?XgQXn zMT}WG2yo57!jNb0fRR57pu&`@{7N{l=&IsPtz62zr|XljLxEVnMtKVEe-)i(TD!Xbv6(p0Z8;P?C%4Y$s$}a~w_f`me zOe&~{kNSDh!E;U-Hr2IUKm2V)=0DQMY{byDw*>-4;uf|@DQ|!M2#g0lC2=38^xv(s z$gO^wp@b)FM#{Z(#LSh^RKjLP>q7Cvi#y=s&SkE^ovJj@LelQrP4jy2^f39TA4*~yg&Ng_ zX%i_ATgn7SHw`supRzJqUQ3!&?jKy3U>Sa$sX9t|m^|Ii-TSiF%QV*#Lz}92sA6mf z*pfFxO>j%JR(YFm+t1S^YPt_g=7qOI$+YPn?$8IpUHp&vACUSUwlyIZdEK_}O&NU_ zY(km;@Ef0-Rgb;Hu&WZ_4>_HG|6B!gu(3ks{wFGIdoMj~G9ak)bWyT5)Uc#$g;QjF zl*d=~?eXZYS6b)zr4~8g${JVMT$m(n2jACwI}knr3E##zKjQ1&OSS6!Dj1=bbv=3) zb~?8r=1qO)8h{CIR)D6_4VDX)^?zn{{w4wODUD2|eZ>6JFN*bpBMdeNnA5jY>Td?e z=wA-7B3EweVFxG9tPgRTQGc5t1}9JRO)lG=ZP|@?knm%_>L6#^E|)rI1|A+YVa~QB zHeL-ebISFtTU&)&eAgwvQZ-{4v>0ZM7;sFxEnB8a<*-V*VUfJnGuA9j8qi-Mt=<*8&tj zJk4*vdKhi}`|A}O=Z#I#6o+HR_sUl+Kbooz}nL z%!+mXoeXry(d-SQ2S&+TexL3>Ip$?M#w{IDGEe>Zx!?Wt4vgByEKx>v25FQX>NvI@ zdS;-ZTA)Tr^5XS~QGr5_k3;(KJ`)2mJFG#rxoSdQL9cM0J2<^xZ=e@9L-4Gz#YRzv z?suZx1B~dCN^iQ#AVF&gp!sIPoZz*`)MrXkQJ2M| zm8RpIeL_woHQbQ_o-@(>4AHvTk^U($^@m9Zmy@#wAb#P=;?vMnmIM!}1g}AbP_`6K zWALJ&UnJefiO&k)tqRMtgB66skjAj@)5+r0XfBDc5@2eXl(r=>_J&|Yg=b1|N~%^! zWX+~x9W_;$KdmW6vBfS;ASA6F2+Q<&-suCf+JwE63h%Ouc#ll$Z-)(}DD;;{j8Wke z!1M_u9A}qK3QwO&Nv~>$|DE8v5Uxz7rdwJ)UqPyVwabtT$=Iw=dMlB>L(SL&W-hd* zuji*9g=bQcnOpZWyW2DV#-;tC$^(S59Eq7k|*09JDZdDuZo;dt`Y?rq?~&vBG-`~ z?+e%i(Au5GZFBEdI_aq2)Dp_uRLSd{hVdEa8Adn-UC1>T(tgCA_xR+l)ocXtFgz<< z@{RhMxG75JUJ@+PE8SLUCoY25c^WYR^1f)L>m2rvo}NkBx; zBA_RTIA6v9LT{1C8|sv zjWa=&nxHFC=uBU;&s5Q{+ z>J$ECPzV=@(+zD-=qEmdX0b>N4O2v!fkyU#o=k8iJFCn*;tv@@osj%|KR~ro65NZhuwqJ9GStijM=?;Mf$)TVVM%Tl~ii*x)UGPnq)u-Eg$W z128UtbVqYehsB5YnQ&37dXcThi=?A6V{2n|`q%PEnHa9iF%Z*yG3AP4lSGaV26RVd z;ap`gtx`k`T%u9+TBE84R8;|%E8+lPKUP)HsxaWH29ByKjp{c0ssdU8RvOXW%)q={ z-9xMH6R!E7QA4BwSfDi@(KST-nz6Z>362^Ov1+`1Ey=!i3S2waQCotpK1!^#`B=N6 zQHMs?u7T_Des!B2broB+6Jg%iO4#D+}sfE;z`l7A6o(pwu5xI=pIST3x zET=gt5e*y{eI;l(SN9yAdGIx%Mge~?ze6JsA~$(b7Zi~th?3_zX*A|-y6!JF{9Z`PV`-dD3Y#pzh9x7>4R2}$Nr>M_wy zXqL}yF|E#cAfoUv%{oY^6{y^*XO>~3sc3iFV&B=y{khf2q1ELShE#5SX5D5BY4gUk z`3<)|8#Xc7ZVMD?d!cz3+1&E#mZDo4-n1GI@ox);;6Y|>v9}a0Anhmm0_4f|jMMfk t5kih8A#~(06~ho1rH9z9g0gY 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 E0>A%!B>(^b diff --git a/doc/salome/gui/SMESH/image45.gif b/doc/salome/gui/SMESH/image45.gif deleted file mode 100755 index aaf1d20651c1112dde841c1496cd9314327f422f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1077 zcmZ?wbh9u|lw^=#_|5JF`SW|v|AQScN{oiUK!tz~$YM}l zVBq-A;K?E5v0=f%W)5MoF9$X(bmnJdvYF#?F_A$;QN@lWKyZ;;ho(*qi^Ha524PJV zH)Sb)pr%PGgE$V~;tF+Pr;HJX5~`SN7LK_*sirN^iK zCM~#+oZD1v9fYTrgVnUx rVyg;g9A%G?DhQZc;qw0eUf~x97TEmye(C(-`TqO&)xKwBWUvMR`K!@O diff --git a/doc/salome/gui/SMESH/image45.jpg b/doc/salome/gui/SMESH/image45.jpg deleted file mode 100755 index 22b7036cccefd902bae92ccd2b6b96fe1a807b9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19039 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 diff --git a/doc/salome/gui/SMESH/image46.gif b/doc/salome/gui/SMESH/image46.gif deleted file mode 100755 index 0f00ea7cfb6cc0db49698e5ca9568e0438a9c72f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2274 zcmeH``8yK~0LP^WQA{~=HODA&y;`YEhq2kvfgD-o7?ra(Qp{0|h&CEImN{k{Hbm#7euV+h&%^!^)f-ygou_t($odA?952k?&klw=GVA|PW2VM0&vu~kKOfT0TGfcrv+=M>@9V~oA`1YD1Btt zQdkk}Idy>MSsyaOeNGe7QSIqkaAws|J-UzT+rz9LW`$31i{Px9k(QXHZzDY{`sk~K z?Yp#{8yTP4vC0Q8ziq6Y;A8`>q;>NRCAhgIm-&a3t%AtKb}jOzUdGe!D(6CxFBh$^ zlWP33d`w$Fa~}+@O{`GvvchUvnB-a0{YDGpYFR+mi+hcWU(J(G6GKHu|4tpGv-mZ> zdaK`!UL}j|K=GS5mZk_Wm#m_=pjCjd9cqj@$zELfYg{0(yN5~H_yu)~lay0LB`Rsj zXeY`)7Q!l=4~pQUU^bd}g^$Ab>ot3N_tJ*{`nV?1qFHP|m5$nGMg zSlW01Q_a}Xz)YR5U?A3Z%M+D-O3v|f*hv**SKPFgYze;A{%BbatQi_`)8lHM!F6Yq zCIiC7P_?glkQK+kq!aPMeuR7}^RZavW_98%f-z{akUWszTck1=txHs;OshUq!Ksq- z^lxL8O7?uAOr6ajow65v+OrtE=@jIT=1G>>GSXE1Qwo5_ifyZru0VXu_~OXe8LSb!|)qz6qYte2rLoBV`FYIx2l9eyxL4a3*?MzbF)) zJoaui6fSDrYdcFnpD{LJHAKUGZ<)w3fAE65chjj|dH!xkRh0Mn1p|xG%>^`6t!=Wy zjEG+XB3y0NDKdR)eU>%9wef=!V<-sZj}~KxO9_~OjVvL? zUp#}9(6MTp*~_rlS%{QWt%qoK3*vEXogF~WSF(n?p(;LVS(Y)T@{!?Q`!-Px$3bkR zP{w_xt)5)2Dtn(zI2e6LFVcTXS7SZsK^Kkhbpxwk?MgR3o^j4yoRkMR08=>VP_}1x z)LM>CNMPEb92nrDWry%Wtw&VT)sTjm!%g9})_(f#zU;MpbDUe6>*lz6Z{r!$V-Z-_ zjAFMz#||)ZA=A60)E`&L8GIk{C~oY*BU%jpZ;vfJFN{`m=U)0(I5)m;ptg?nz1e@fYV)&fy>EjNHgk-gtafzb9;>goZXvFUm^h#nEtY+!;*0J zAsXSWQ@L59`dgb&Kt_}Ghzfq%+FbU0zPo?mXNEqaZ7wA*QN2i!m~Zn5rEG4$ZWu-l ze(bw)wlJQebPQ96Y;Ef*!~{=XKBw<;8)xM!{lZA*e-&Fw2*UnWBosIIB7ev*c$(h)&DN8t8X91~GoGpQHIumP%< zi0a9sy0f?gHL)TZN`dCdfeqF@6;+`TG%q1{kl8G%4$q|dOu~fCA4D}VJlf?|uCR4o aL{CttLhXdVXKSo5u!yRwaR5aL+kXM*SpQrA diff --git a/doc/salome/gui/SMESH/image46.jpg b/doc/salome/gui/SMESH/image46.jpg deleted file mode 100755 index d9faec33013c5f66bee285205d0b05ba1181e576..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16104 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 BUq}D| diff --git a/doc/salome/gui/SMESH/image47.gif b/doc/salome/gui/SMESH/image47.gif deleted file mode 100755 index 8d63f4dcf9d9097245c01387061b7faf91f81942..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1040 zcmZ?wbh9u|lw^=#_|5ljwY|@;9lLk! z*z;@Wo?p9m?cTY2_s%`PckTJTd(WTWd;TA6=_oN80)rt0bU=;(KE`Sr;2HYRuhrMZKX@Y?E7$rs>M? zrAEqWve^%lI)&sX1kKedcJkPiYUz_8ut@vrHa-Cv4uuW|v25SI-w7P%* diff --git a/doc/salome/gui/SMESH/image47.jpg b/doc/salome/gui/SMESH/image47.jpg deleted file mode 100755 index d66f5e84ea7158045731f8ba0a78098b11fbd4d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18787 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 diff --git a/doc/salome/gui/SMESH/image48.gif b/doc/salome/gui/SMESH/image48.gif deleted file mode 100755 index 1d5704bf2821997c3760d66e2fe8de1e177d8eb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4473 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 E1D?8^(*OVf diff --git a/doc/salome/gui/SMESH/image48.jpg b/doc/salome/gui/SMESH/image48.jpg deleted file mode 100755 index a3a2a0a8efb023916b00b1ced6ec49845ffd8418..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14192 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 diff --git a/doc/salome/gui/SMESH/image49.gif b/doc/salome/gui/SMESH/image49.gif deleted file mode 100755 index 92f715cd01eeda7e4a9896c16ad494187cca937a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4423 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 WV%$_~GFxkURQo`(ZctnRp!FZ!n}Trw diff --git a/doc/salome/gui/SMESH/image49.jpg b/doc/salome/gui/SMESH/image49.jpg deleted file mode 100755 index 00506cb1a3ecff50a43fb66628bebe77a28b6727..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25380 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 diff --git a/doc/salome/gui/SMESH/image50.gif b/doc/salome/gui/SMESH/image50.gif deleted file mode 100755 index f2d52bed58122a3784e4e42d10dd3130d6399a87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 995 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 LcbU9wV6X-NXGCLC diff --git a/doc/salome/gui/SMESH/image82.jpg b/doc/salome/gui/SMESH/image82.jpg deleted file mode 100755 index b9f28a5f80deb9da9410ec1c23032d1fc317e9ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13186 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 P080!oKo<{TL{9w&Fd}1t diff --git a/doc/salome/gui/SMESH/image83.gif b/doc/salome/gui/SMESH/image83.gif deleted file mode 100755 index 331b64a10537807dcf77897706890dc33cd87c13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4552 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 CHmX+u diff --git a/doc/salome/gui/SMESH/image84.gif b/doc/salome/gui/SMESH/image84.gif deleted file mode 100755 index ea8ec56bcf814d203b7aa9180cee6d2874eb510c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 956 zcmZ?wbh9u|lwgo#_|5YAAMl=Ol6`AWr?DEtY|G|%HJL$A{pT4M z@|~R-k{&qOJJrlqD&(c#GLx0xzDSm?4x1mwFJTaM<-m=pI%ikKp5B(r$jo%>)LifF l>+bHZ`26bb>TM18_ct(e|C3&@;o;#9VePmxHwqjWtO43SUbX-L diff --git a/doc/salome/gui/SMESH/image85.gif b/doc/salome/gui/SMESH/image85.gif deleted file mode 100755 index 9f55d315951731fee696a8579ee9ecd102eabc6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10574 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 L9}_{LfaL!JR3B5p diff --git a/doc/salome/gui/SMESH/image87.gif b/doc/salome/gui/SMESH/image87.gif deleted file mode 100755 index 916dbf014d13fa38aa3deaab150a7ecd45918ca4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4901 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 diff --git a/doc/salome/gui/SMESH/image9.gif b/doc/salome/gui/SMESH/image9.gif deleted file mode 100755 index 8525324145af69f29fe1d7718c3dbdb2c17afcfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30034 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 L(Uq>dfB*nHwo4#* diff --git a/doc/salome/gui/SMESH/image9.jpg b/doc/salome/gui/SMESH/image9.jpg deleted file mode 100755 index 9bca05ad8fae772372de7ee0519b8f9ddc812675..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69575 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 pH!?R8$izq5`mB1xtN_gn|tJh=gW_I4`OB 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�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 Q3jZPVNgUp@|1vFsC^4H>%NO;}5xoV}2+H}wL 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 diff --git a/doc/salome/gui/SMESH/image91.gif b/doc/salome/gui/SMESH/image91.gif deleted file mode 100755 index a09ab9e7686ce7ff4d3d00fc63a21608e5e29e35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 975 zcmZ?wbh9u|lxC1%_|5vfPcGm!J90uxV!VT`9Eu6suG7FOyY9 zn*I!CGxJwu&?E5ob8z%8y_EUXZM)rvvX7GX-1>$duMhQKW|{L1^~zy BXOaK_ diff --git a/doc/salome/gui/SMESH/image92.gif b/doc/salome/gui/SMESH/image92.gif deleted file mode 100755 index 9e0517f5d8f910a85d5db18ad02d038f6e576b72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 984 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 diff --git a/doc/salome/gui/SMESH/image94.gif b/doc/salome/gui/SMESH/image94.gif deleted file mode 100755 index 7313f5deb3336d5476d340d3b3c36047754adfbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5678 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 diff --git a/doc/salome/gui/SMESH/image97.gif b/doc/salome/gui/SMESH/image97.gif deleted file mode 100755 index 480b584edf24fbfa9b4dd0bf52502c71ab3d362b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6203 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 - - - - - - - - - -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:

- -

 

- -

- -

 

- -

Creating patterns

- -

The pattern description can be created manually or automatically. Manual - pattern creation implies creation of pattern file by hands. For an automatic - generation the user just specifies a geometrical face having a mesh built - on it. Mesh nodes lying on face vertices become key-points. Additionally, - the user 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 are 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.

- -

 

- -

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

- -

 

- -

 

- -

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.

- -

 

- -

- - - - - diff --git a/doc/salome/gui/SMESH/pics/exemple.gif b/doc/salome/gui/SMESH/pics/exemple.gif deleted file mode 100755 index 6350d1737bcb792d83d8db55e36d9e44185c77a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1340 zcmV-C1;hGBNk%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 z%|cUYmH~*JW;|Gg=JBJM5G7NZEeS1K_LAA5zX%~O?>uj-@lJYfg=zP z>Jz?E_ntnyx^(2tcKq-n@Xc!M;HyXf|4kfwvmb8+dU-y6I&Io_rCQ!3rql_{}86#<#OKHQ4Gv@39 yPAU#zDeSNT0RTJoi#Lw| diff --git a/doc/salome/gui/SMESH/pics/new.jpg b/doc/salome/gui/SMESH/pics/new.jpg deleted file mode 100755 index 4fec7adc5847bfa19034c97c9b32121495b61082..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 957 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!&mR$H@3XBdiAUJp6?cali6;5S6SxpFIX2P z-!ZLR;JAquduK|QD_`HNnAS*-6AFC`uAT3$f8uk!{*8R$e}+Z3w*L|T&!D8Nd}jEpJyt2-Zne!Wwwl(FWp?b2=Lw0}4~69O6~QS6!U - - - - - - - - - -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.

- -

 

- -

- -

 

- -

 

- - - - - diff --git a/doc/salome/gui/SMESH/smesh.htm b/doc/salome/gui/SMESH/smesh.htm deleted file mode 100755 index c5c12b4e7..000000000 --- a/doc/salome/gui/SMESH/smesh.htm +++ /dev/null @@ -1,150 +0,0 @@ - - - - SMESH reference manual - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/smesh.html b/doc/salome/gui/SMESH/smesh.html deleted file mode 100755 index c5c12b4e7..000000000 --- a/doc/salome/gui/SMESH/smesh.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - SMESH reference manual - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/smesh_csh.htm b/doc/salome/gui/SMESH/smesh_csh.htm deleted file mode 100755 index 187fb111f..000000000 --- a/doc/salome/gui/SMESH/smesh_csh.htm +++ /dev/null @@ -1,100 +0,0 @@ - - -SMESH reference manual - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/smesh_csh.html b/doc/salome/gui/SMESH/smesh_csh.html deleted file mode 100755 index 187fb111f..000000000 --- a/doc/salome/gui/SMESH/smesh_csh.html +++ /dev/null @@ -1,100 +0,0 @@ - - -SMESH reference manual - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/smesh_rhc.htm b/doc/salome/gui/SMESH/smesh_rhc.htm deleted file mode 100755 index 9acb37e4c..000000000 --- a/doc/salome/gui/SMESH/smesh_rhc.htm +++ /dev/null @@ -1,100 +0,0 @@ - - -SMESH reference manual - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/smesh_rhc.html b/doc/salome/gui/SMESH/smesh_rhc.html deleted file mode 100755 index 9acb37e4c..000000000 --- a/doc/salome/gui/SMESH/smesh_rhc.html +++ /dev/null @@ -1,100 +0,0 @@ - - -SMESH reference manual - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/tetrahedron_(ghs3d)_meshing_algorithm.htm b/doc/salome/gui/SMESH/tetrahedron_(ghs3d)_meshing_algorithm.htm deleted file mode 100755 index e6c912b52..000000000 --- a/doc/salome/gui/SMESH/tetrahedron_(ghs3d)_meshing_algorithm.htm +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - -Tetrahedron (GHS3D) meshing algorithm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Tetrahedron (GHS3D) meshing algorithm

- -
- -

 

- -

 

- -

To apply the Tetrahedron GHS3D meshing algorithm:

- -

 

- -

From the Hypotheses - menu select Create Algorithms - >  Tetrahedron (GHS3D) and - click Create.

- - - - - 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-Rm8~rnbf|E+7;TAV0Z(GnxPsDS)jbnT)Z!v8t)Fm7}Y$sVTt4 zG<^YJI; z2@V3HF7jJS)WP1x%?{u!YH4g`|I;K2n8l>{Z%xD;Oo0~mu78FB0|KHc^IKZn7VtM% z9heim>hEDsQ-GtZmBXKrB*BA#7^(jjS2A{X`K$Igupl5;M!#j%9BcsgR^ET%3qTUi z`v1qJf0pmh!u-sV94L^j|APNn6cINoTeH8MFaWK|QCO;iq1NSSZ`Zu&1z|&RO8DRXAWd{Zm z-|#Ee&DGVxUdheHQr!LjPW&m59BBIAxSW-XE8zb$0S%15uK5>cqQ>^_#x5fN^7S*K zb|BW;`wLdg%GlPyLd?M)pl0lB0r*o#-Si+Jj(xx4z3l%8L&FN-@pEZ9V83Fx`~@oR z>@05Y>g@HCqXc$Ao%>&K62>+FX;*;Vzl8r2KEwg`@aJE_t}g%Z{|eNJ6(&&kz^4Bn z2T8)!3@Mr+B*Ehc_eVBahQLNy0{oSd;Jjs8S~Gq z;*fzi4D0`(f3lOngcwDC&Hl0I-{S28qR+oVrG-uZX#T2J_BKCP-2iWh-wj`;sz|Dj1nAnqjbUu>l9&Hp^$RB#|51(LsF|L6yz#-^5lpHUA3 zuc8s|)4Eh!K^N{_$BTf>7fEWb-8~$Tr`s>R0M+L5d2yN*vxIbE; zD!|p%%HHCq{~y3kPFVhL^gj*{@M5$5=b>Z)%9r57FVGs&Di8W8q*3;WFs@b2IY$E>R|&Otr_X|{A zMNY!X79a(jhi(5#Js1eS{&BVZ)4#e4!0eB``k8tquzdw_{TJ@faoGkaQX0NrfdA+( zk&qxDsWSiO{zD`hR?e<&#wg$i^>ALr2iW4 z%z$-B`TSc}?Qh-N9@t&)4}Obk{tfj9reyx@*C_DH``118Gp|J;y8rm!(Z8+ShzPuH zAb@)Oxo>~3>z^zCy%wRsT>f}1LV;wRvf%w$_P8M^%w{+a|k{V z^i`Dg?FJ@QV+k#)o#;mHjuF78rkpxgl#f>~t- z2T9y?OUbsClS?df658+4h%T^_#Kouw?}`)QY`t94Hle@ZQsbh|Lwg4AShuD4yT&GV zV^FNH#_ilDg7Y%8NYIJ|B7VYG5Z-;fZP9um$5nd>B+?`>Xu0AV5=HARo*MrG3oZ4k zUIeO%U_B}mC6zPjS`UK7!^_8)Nnt-BjU376mH=;j2(1Dvs0%JdiB;Lc2=eP*RksXpvl| zd->ww7@hM?%Eh!P3b^Swq;1AA6VjH@;Eoc93OI2WnRTkd?04MpJCF>?m~hrlua9Oc z5S`zwsJ%x#l~SoBvWjF0KvPyA9h*1enW~Z8>2IHoy@f75l)KqJl0zD}tv{FUT*6ewE(%L^HU2|H)Ax&{6N0R%+Zqd|vq_n2M z-J$eBG$mu*i3;On*%b6GODp0qJOnmzBnlq-H)2C}_*W8*e5hc>Qz! zVkXwOjoqp@p=0w=Z}AG0g+GYYtPXr0X-?f^`qW%zX^daBr^JdxyKcQ#_h@D#kI$i& zgR%YP-Xm6M)|DD#SpgJMQ^gp4A4WN}F=lrRR6$hcGQc1xMT$wFDz9jilrcpyGABvM zb5()+8g-LbNDqfF3RXWw%!DAkh}jRMoCq0CN@gO1(;-jn;4~r>n%SK4jdD_4hEtZ^ zyN-9n#7qcPGVj+UyemS;qy@e#A)bu%q4JJKkJm?x8a<3W@{;Zd^P};Skwt>*Mkfty zm5~MJ?hCI;knF4~Ssp@1_U4cw!>I<@mNa1X@bwz`;G}SRi!LJ{C5pZa_IS2#M7r?2Fh@GUCl&Cam3B?S)!=JA!8%>j<-H18 zvMKKTvuUYJ>)|5xJs_|S4Z3P_!3u{$NLdi(!J9~j@APkiE3QNydsoux9AMnO5?Y7u z?t|9@xIlt;P;^u{+D1V+`(qKzy&j)1L(gu)Zjkt~lKGUmX3*iE=&W#0LkV%^9IA?B ziukGR*e-*S5fRb7`jzOgkk0Uc@ z#B5t_uOr)WY{7QBUSgtF+fJnBV| zyGk_fNAN9$hYPW9Wh{J;0&)TAasiwwACw1uDtCQ${6efd6FO1-X7Gquf8gMg%XkS^ z(PHRhg7bG#b(N4?jwB5EZ?+mrn)|>Ime>;vQ%gga_x7W0quScU$ID2AAQC34Tm-Ku zSHHWIFcA@rk#mm|kmC!leTDJGc-Tr#p(PKR&MN60-Z54CPAO*KaH7Q4GRa%x0aN~^ z$#xl?>#|6j`hb1v2uu%DfTWxiZA-5pD;@Vf@(n_9rT7)d!|Ufu zM(f!h%#NChVRt3f>h+uA(9evSGw#JYyn9>&hu}>o%CP{^%;v=miiIS~85`4fBy&@4 zGWL?L|e} z+}hMcsTUoM9u$ZnOP+{qfo@Lam>t4{Gh16+C#LCi3GnLP(_q1_BsHCYrMs;=Ze@)3 zR%NccuA%wo3>|CH0~i|HoN;xD(KX?g&dz!g2kYlo7DY^0*%&O;8Ra?I=Wte!VrNV+ zb^G5Jf{KeF0OdD#5r>s4Ia`$KX2hs7|6O@%C?Ns;N$l9It~osCd^bp zVjU|d2eUVr>x^8Ify0?l38Bsgrr8;i@r8(F*qQ29GMsux!fv9(-QPx_8K3e%Und-n zYTAm#W#=~UJdYslkQHIft|&OGo}NCM>8_-FvUC?SMTJL-b!$MvZPH(PE+9NE-Z^^* zN|JzA*FoeQ47R*NXxz=jhH|zJ=AX16MaN01M)whZQMv>*7d-Yh!N{=ZZr9bl<-)q9 z(O|BCs@!pfw;%VqUvEs3mhm%FFG_OmEwK)1?-Upg`cm46C@Z7nz^QE@pO>*>B!1Hu zXTZXgy=V&5=P0?7PrGEIb4r9>B3@Eqc;=#PAeP&c84%W{;rOTSxc6U<%o;HbDg!6| zOY$O$PL_*62WL?9)XqlDuD!ty;loposU%_Zhz(6W>UnFEFzKmXH&Pad&)w@d>y}v^ z)fKgk3#yD92Da)+x!UY@q!1)8<*94t z7T>iObF{~Xwlas$EiR;b*Fs*UBjj)fbeM2vXUQTD{f!Olzt?%p7j$8-y9%*9fsc+% z_Hnq=#dqZs$S(~?zP_QW74Lhsj2~S_u7{3{h*#~eqvNfpmt66~@WC*K_7>3vOSFtJ zH#B`afDq!xH@KquKDPJdtw?#OUxu*yfi_m7E*ji0*b`Eznbj%T6IJt}DV1N0o5vlj zGl9!$rEB$4B)eTK|7f0&OL}f^S#>CqG2WUszIrC$sMwwgt%RQYsAS2|J5)tQZ zAfT1*2*)^c__deJKUr@JSe57Qx_%@R?WDwS8?;niKB$k90+^LIYC*`DWAb zlavd~*pV`5=6 zy11ga5)b=aE}hXjPy{>iWF}@RXdy^CV;Hee0UcQlNqI|7ofKfjuAw#_5;-`dK_@p^ zU;kNe%BW#m3GCPd=}!0VDP%D@;ZuOvY^Is{_DCeE|C{wS+)MGk*~{*X+!si@P)s-4 z(^H2Mj~R&RGtI20{G{p`B3iZ#!I0RM#dBg!ghdVXHTI_9d7_1(AN2v~VVW4^cy$~| zNKHF4@aelbdsAC~t(axHhN^ZHYibT7Vk6bVL>?s|gP1Y^G;;zQ9 zqVVTSY;>~429ZGR6KOApuI!eu#ZGUBu9(G9=qV_wA(IScB4DXeerNCEu1MszLna-#%GBgT*HSdc`a8`y@-*Gz6-kqXJs!#4|38HRZjJ;`t=fUfV z=uwEK@J4V4S3Zv*|4*3j|NK68M`p;4@vpN%~yS-Dh zQWGKvt=AMf^(=Y_-H@r^SXf!%HQIe7=~?$2O@k=VG;2BZW?xnx+@$8Zlyw?PyU4e! zzlkPM5b^KG!$%|vOVdRN@9{n$Efl~GhGvZFCWJCG6@Q{vBmGRifzgep zkGqq8iAQ&mDt)EPlOUnC$9csM5r7^Sm~fmOEFAk;_jl=LHOri3O%eV>#~LNiUoX*d=dBV z5VYcqXv;`J3gASu7lp`GxPyPigrg`T}E7593e$EP^qSizy$wj4V&(lTY6 z)}1$&zY{@BBQi%jxf><0kog1vyGhF`qGhKnUk!;aM8j4~*rP0QNJN z5?R1F1dg|z{3R6X8|3b}6qq?KZNs3>dtp->YriRegU#AgBpr9XJ5gWZt%C-9&hrm?DcxB0ngjXH@)l@THwYQjAEX!@L@1uY9y8jvN* zhG){Aip9U^yL<1S8W38Bj#%uww$2>6i`O)$l7tl$8$g>MkR6arN0^g-^s;41du7%b zdEHqT0n(j*5QF#w)HnF}snDq+Trj>55#2vVY_)VR@Im>CxVmWde1~#Rf?A2W#n00m70=p_%Ktr3wX4m`DakZ5d*ICudyE(AAShENxA;qh-9=Y1{Q9? z{0c4mJlbc`F$6W?j+H9N*tLkQYA zOb{OXo^{5N&|E=Cbrx%A$cUGGz<8LeDZU@k=}>^aM}hQ}#!;BQCMb0VH1~=N>IdzQ zY-`a(Ykh_#ciB5>uifB}?x{bpCQ3QBf-rCL!r=zi;(Lk2_fWJSxK{K{nOt%AppzSs zDH;q#S3PpVX=LvRSk`xFI&2WOgg_*xMB5>^BOvOGA2`R8sd6~v)jH2rzG|3gfF;us^s1 z9?o6e#P9pfe@}11M5{!H_3gUEXKfhYU8=hW1U~P%RDL+hy4(0_<}=XgHM5<@=I?yX`YU;Sc95hORi8`A{J%KZ@gv zC;GV)WW3HvP{>vgKQ!Oy5)$Fn7Nc7-^ZtU;={~jka2X@I|Dw~9E^lCD9J|1P=}wYWQKn(*GI3Z_kqeu{t;VG@6lX?IO?IfAg9N)0Hva=uK)9jK0q8(D0@BCWnIF8kU`Fe1*+Y}~& zeN5_f8=+yb26N{T^?maJ7+2J4Ef;!i4I+AQ#)<|lnrOz#&~YQP8;a^l<9Gw3kUw*@ zk+&a5^>l9x4!}rI9BPuXtU=iwMc0qF<&hnOuOErUy6bG-@uDJy>uaGq*!kJ}-psb( zA&lXZI{C<=VWTi{rqnO)Qi)`63uRbb8EV@F+Q7Gf2r#L}73iHLRU&yO&?IBfxGTxy z$WpmTWX)=)N<)(LFto%M#4)2AeL9f7HUPh6VnmT92tDFbaG*fxg?4gx@Uy?O)?Kph zq%x6&sMe>^GNB#k@82plak}efJp~U1IJp-Mn3rw(gzH31XiT1ls@}k2BMu3L<=I2^L*?=LX~K8af#cn(f`&tWV7EOhHLXpIU&+=vji|tD zTW@{-HtJwKt1@4bV{7LIJKdB*wdi1zV+~OniDELV7CELdHBFzrhde!vNJ%HFV-><1 zhXpY@1wq`1cCiVxh&MmNsqX}e6mYvWVWOG$tx~YbN@XXFn0akr6}9^ETS9=JU$y(D zfzO*m1TA0<>q0&e^@jFE;v}z(d+yS|P`8S}A;eg2!IzaVVJXn;$V( zM7ziQ^!3d(*vrR5G_?H0DU_ONsYHxT_A&oZ7U*WkS3Vg*N~-c+CeR{t`aK!Z+>|8a zfl{p>g0o5@xpiMl(~imM2mNDpqF$C}R00YZVCY?|XH-tTN=si;s!HwEb>M_U+(kx0 z+`Z%cRBufXq?4xlyJaVa^Hpnm9#lY^6ERmbY;=O~j!NjP(-y(nGG5e07!%2KCtewv zG_7Q)JE_Q-(=uslYq8q>AHvq)7R*nSF=OikaLBn6@SyxoBHKwQv=xeIGcz zUTjuK&`9!AO|~wzIvg3Ib-4k_iHoT+}?AQQ#Y=S ze(^&4CjZp3GAl>S^@ z;cu#i2(DCvkB~FlrfJK5lq{SVGn97!Xw>!-o;nt0t`;!!d`}zp^@Z&H07mG3O?QF$ z?UGs;@*4z)v$CuS?0vKDgbcY?Jb}W;eaT80l5MEDkJv<%CuU1ws4HU3`|$}+PFl*; zDJ-Ap*A+>ESQ@^YU^P(Fx+GfHV$xtXTiuP;B=1*LfFT>^j3m86mjk5KO;fM(Qe5W_ z_ufZd6Bj#uYNQeyUAq7fx)uyQ6u!@VzH?G|-LB;N)Vc2Rx_gn3@_8jn(80PtzjeuC z8ROb#@0mbymZ5@voN(^~xBcE0QARBBfGEIee>XV;g$3P!)%hE$Ttq~OFE-5;XN;aN zbeUNukpp47r-l41R+J%r8X1?flTgz)foEF3Ji+X<_ZmDEN&7SbidA~*gvqC84wIE_ z%JPG8C6#SMESQU_lCf_t6`i2+)LEJ0e{5nrxyA?4R7qPevR&adG|(s!Ik?U)U&5yF zl_f>bY8%u8+0h$S5x)jnf=lk%2^1UAa7K$PumDjm^@<7)UFMV45{y_4!$Z$ zqKsJVJ^M2M__%<>HA#Z#2mkD=eXsv~a@&I1RzBgL77#An)iv>oK*t5w58#H=%zVM8 z>$$Rz3|`aCPjAlR8`G?CeT8Woy8>9%%K3x|MjSWF^{1K21H7DGHDFyc*UQpc46AxuRo*P;V6w`r|{!HOXzBNBciKizuDJo88aa;p`y1 zH@BCl!dbbk+4QCk`;kSTmTscOzTZ$9Da-5{xucpez@1=8?R~ zUM4pL$Gob(jfvXm$XW~GSZ zw2r$~r-Y`J$SMkbRKy0DuRnF=LN*?SISifA@x0SQDn&TRfYIsd_1hTwwAeC4)HNHWJW>>3*iZ7OzV%!rmKL+9bqj5_LNeZE)w`PnR@Pe%Cp-wOZv? zP--ap)Gs@U=RjZBTR0HQDe0+%JemPTdx-VLS1ZyrYbBxAoNgT*rwOC6cM(CRdfp^O zwQCKu`p{lY8#lpy^Q2ta@FdXtT_&JsWRhjm0i;F|Uvf|{v+B~J1YT`ZU#6jlHn^-jO{!OjgA!+r-jo2$_EE|Dp&WU?f z2gSTfU1_DCvbKwpHfcRE}$@l{I=w5^RpQHs;lI<+phRYk9^nP7s`X+rpxY z&l4iv`L*dPz;y*MtIe6kbCN|nqn%1^YcJ<#`YGMs@#7;W#oX3070%(CB|j*8ijs9 zZ5&Q;@O50bt2A?E94Z=T;=>dfgIs;g;}T`Gg2 zB=;M3Eu`^^d0NMmIprWUKiBd@mWF_ME^XPiRL25+!J>Jq{d1UP#&5O~&1lG}yQ>Hs zQDK`97=_`=d^GO3R?*9KXYVC)DP<>B%=y~!LPvDJ3^CBf#=O(6t{K#c1Sp)qs4e7_ zatg0m=LZcQS}x}W51uz}?*<;Z?VCJLR9H7_r`|RrRat)-CDZ*zlYFsc2>N+aVTV_A z#t?Qq)q74i*%dgXP@*9X*WhywyHKZb+Dq#uE!g0p(uT@Tr*U6p+OSM_Hx<|s5ixNG-xUDdq zot0d+z8tX@5|`BJ^qvJOVrCB_UJE(%d+_LTGR}cIW7mXd5z)Zw8*nG?WE2a-xTM6g z0q}5uC63Ft0f`_Z25)b0rfC`~nuWE6n~;K@{7k5RgU~tQE8fv`6;SV39aT5<6N5mS z@2pHGR9No$!P;7cw>DND$`3ed{PZF&)Fm_e;5Kvjk)dH{4RDYla(UGQ;Pko^e8}^M zq>xi2#a1UX2%Kpsg{#%qX<-k*c5?$msWA16!T3|F*kz@q zo90r)c4!mC-e^BMSHDSSwCA`Z^%K8IaN{SfMU(NyG{yC5usRJCfmZ0fspQ9CM~{NV zEmc}1ht-TII)-SNOpN%R@KJ;bW4-=^@PYe1NDmogqs_OxIvOW z%Yvz***Xe&3r4?;*;DzY?F3^bjPgpRZ&Ffg&16qPifa60jW}3eMzKY(G!>ie_kC~O zXTZEqNOL=Vq}h`>XV5h~s7JF39yR5}Y3329{iI;tIW8myyll7f_vNgo(S+(zVNIU-L!s?Hm_ ziU%vabBFMr%|BE1;2?Rd%M{u##Z54Fi?j#PdgS=>JtRh5T@`UF#5>ykIKd++O-8w4 zWO>sl@!lT&vsE8Sx6DzrmrQd?LDG1s3zLPAD1W%W*{rmEM$O3Ev|Pe(A(+MbP_am! zxxp%IiH)7s3e={4P$|(W1~=(|%2jK4y0_yKPRj$vg_Xg+j;2)z; z@6FE6hj`Tqtnwv@O5nlLGD=+&d0=Q1dDV4yTJGVn@zIOOW2hY7Wg^z!nU^ZBQ@Aj_ zS9Q~i))?1d(bAZUuQNQDQDlFyEl*sF!}W)x120pcos}7Wbf2@?j(OLJwa_YFJ3EPW-7S}%3DQe zJ#H$Gz;2TNjMv>&VRAMzG(%^NCwqOJ!^b;oechv}T-DODVZwTCwynDPjqrMwx6T^y z&8wBwjdNiFreaz&q+9O#w^Q^xFfC9!v_~S72W5nEr>hOc1W&@eZwvxh7W7=&8KK{} zg?XW6wYbR4sw)gwn0{P9V;t5BB{vBD#+}xt`gmQ|?x2sppioUKcZ0A*M$8H|pNzO8 zl3YR9305@Lw43XNPC4(w@0Bb?Z#6zt^#G3^Z6tlCkq91jbdJ^)9K<2<{=;WHVo}YH z?%Hx1w&HGkY6iEc9~QX}n>)rG5+{Oa-sReKHzcp%7sxK~g949eKVO3tR>@~!DY|n? z!YWz7($u9tKSo%*8JMPCGqAu08*gKuF@`Czacj)7?v>5oD)!>e9!(a~Y z$a9`GRd<0$JxPR3`lC z+V2uC1Rr9nS1g}Bt&IF42Qd-dtcKN=oFA`d%~sPD_&z_GHqS?ykiT5#;VsA@x&xeeg zez%hE_?1_>>dU-V_jrTtTv8FkR`M$YZdaaW3PcrM!~h{RT%!%LcYIIrZgf&! zjg#7hl<@KXoI<N9UvCSTgOJ~)tl1|$_M7DNnXX_Pe+nTy~nWvTU zB?NA#IyVVEFK8;mMEPY0y3!$o-rMl8_x;-1q?al(?cK6z>y~Lxo~gNGUNO$CxqBN;6q?1ga#T1R`nVsepng9eH2;$d*vV&O-V$DN{5rS}Ve zL#2`uL$au^8Vfh{LaKH6N_}mj*8PygrO6nX9~Am^&<(u+JDAe2uuA<^YZao+61~2q z8A_R9IG}m}wc@rswO%b|3JKE>@Yn)R*+?|)N;>9m8*aaJ4iJgXD?0d07<-@;; zWtG*a$ZJ;}+t;GHVVjN@*&V{PEa!z9BbB44(wJRvLVpk%_?E9cEoyaarLot-(VhpX z7WzcDF||{1Dad@`rr*%QTiGIgJ4c$^ur)cxsS`Tyh|TS$dpN8p2tS+KiMP6sh%r3N z4ehaquo+yrYZY>RsQ z46#Wt$_dsW42MDMw!$?Xr(q zYl)Oi&Q*FsvYQ3-T0-8d(`~&uma2g^6w!S@5ngRsyTUcv5>*qvn7M40>`KH>@hJ>t zK~+#^Zc;VKEfOjA3*wE4D+51G{H?8wN)axblx-|Etq*P#qOvtSe}2SuxBNCGysn(D zY}Ibr*IZ3h3gozZFmHh#Bs+~kIoj@`s*^?1LTe;mGGX_zFB1m|pXS#khf~DZ^{<*C z5*O(4nkZMrX0|D`FD5gwguUmu`L|Le+vpYIr$PM>iaZ`z#+hsv+-MnQ?rlN}%t;r`}!ocR4prdJzl1AQkgD*~07kw2jevpDlNDx|%r@Ic;d#+T*fk}^mOg`a?R&NkT zPxRde0Osnvq#N1f0`?WORC~+(=t=EKc1K@geyWe>^~WTEysE0^4H}r27c7NW5)qji zh7LQdkzKY1#%1t3hoqi9yf~U1}BLM_m0CVw@t$t zagW@iB3Au%m#MCcFQFfynR#*NCaR+4uwp&#D%; z`r>{uLjx%cLpz+`h>C~)@)>nNkW8)?a@lpcBR4EHVb4cw|7IP^>4II$#7AUnN1bK$ z825NULvJ@8%R9`rnlS*`N**Z-t_QY0J0ew!^A1s;3*~{ir)Jc>DJgx%3i&27gRANB zij!b-oTp=`Mb$*owODSuv89k{8w&?)O@cSF1>dK{j)gy0iu zvH;23mk*WDJdWI`&P+5CgMpm0-w0gXJud{!U$*w}yYDjGe2|^*FHP}T{n*UCttKXL zh7n9<>FC#diOs%L3TvPQ%?A?;6AwTUI0&E)$n)YVd`J;VP&YN2Y}z<%INUp$ovQJ0gKVDk)R zk#Cqm=UuaGL-2Dx_Pbh|EkB!9qwBVbgtPC387^ZNe45$rFXwExy(Qt zRfSG$X+~}+QJ(o2CQSkEzgM@rYgbe+SYxG6i^vk~B-l^@#HNvUl$%ZcU15pk7TZ(6!>fnI&%qy*i5B*K=+_&zc z!oUFFskrnyu8k?UlUlFHX)sVzvTIZe2MnIO+-L&2nfZAJ%+}4bC+O24X{vCr+Kl}Ds=Oq~MFCvWtXFtn z&&%wQsJxcOBD`W==Qh6FM9(ztt*2h5DZ8oSvMHv1Hw;7V6yuwBW*@Vdi%3~n!x0zu zwIVgsd0AOkBh9X`!YZkCd9!iI9|1&x!y?lcV-x#F2TQD@m~d{9XRcaEIxqI}F)pz3 zxQvD|0Xg*h8u+%Y(QbvIjdJNC(P`hW(mHLLKuOhYLDcI(8#~93bT-wnB;^hu z!7ULZG(W?B4CLv`;qePmxg-1Jg`w!>+jl&@TO^v(ui%)MGWl$MGe&gM4Wh549j!T} z+;r1;HHPC{Z>-j()2^6fG+aL*{a$ZsZf6?R_vx_AW|I~o>-mkjKsl0nNF53_HsMU(_&=F+2Z|P}8t^iP@6>S@~;R z52p#nRo54l(kPDi0)UsoRkx-18R93ptYFxhz)CRMmrHP+IC-_=r6>6DaKZ+^%TyjF zBgVwVRy^djcy^{9$U; z{fbR2xP7W+FwnGC3(JmY96@igCPqNOK@o;ImeFA6Rm#cd&jo7 zcg!kPD1F%|OM-oHW?O0eUNXs~O|nK}hp^qk7JoUB`PrIzKvhgPPJAO~0N|dLYi-my z{zD#vxr)41jOi41c*m|%gd{hM5;4&3&7pI53k)Qe8fvHPWd9E_+w=Q)PNz*AZjih{Vzlk3GR7i}DGIn&g42!(0pYj#fhSMHfX2Spj0yT2`N`; zPo6|wh&u))r^L2NU9?I?9_qxQ7Kq z&vyX0;t6;7Ft{J9MnvH{jA=Pbza){vrG-M)isOx&$WJbKO%5&vEh){_d>HCkF4nyZ zs+ww7@glIXYZQJPwnB1xOH-_}qw5L@Rh3+r&2|xFG>cZ<4}w8riB`}G69v8?KEovB1N#V4K=_UXq)T*$Fz^n20ZJ*O z04uNvgx{oLj*}>L#dw6PLX)pV)7S6=&OEKZ7$(6O$d>6!(^MF)>6Ck?vu$uJ-#ajO z00xm3#k0Z_HnT-!=-S!zN@m7sx?f9vH-KKJ+pj~DTT(pN-vZrCJQaS%Rqk$#Io12P`beri|(Tr&)84lv@-%sfBc8g zslJb|+G6exd6rBwdkRICq>xKB2sFYdKnPKNNH|2&WeSS$br$g(DV7Xr5@Fv!owv93 z)_#F-^)#sBp+*#zdZhw&EzJ&{XDyxYH|;vzoLbkH-=DYK`38L5;Ps&Jpb)Lgj}N#h zmNTE?2TmH({PCYJeEdIMOy>$n@j_KJ_9U*;lvzW<`jF~FrY+t4znqaqK zx{-aRqlL3tt8Ec_6+aS12>q$4TU63V-Fi1r^j%wkBZlG|&Mm1^%8AA(m%cQ6meHDr z0I0+U?HW8{l@^BGScvY>NnXEA#9H&u;wP+6_4VM!*dq8%0_}`*mV6~5reX5?o`ILX zEdvaCJq#!s5+rC}=P+)zykNzd-+hURGAVg3ATU~vL})YMI}SW)H2PtO%H|(O(X_CN zYP|B5f<$^6d^9dJ#=l77_FgIYqjFYS09cX_pXWu-^9UTvk`qXy5`oXxWip~ZTr6D3(hsdYhnqq<) z+Di6Zo!A-!&>A7wzCIuc+uan_leRI$2)5L5Ebe(|a!ay5v}SKx^EKAQG!|}I7o&dK zxvhCDOv3QQ3lB^dymCJR zvU>I!Q|R*q`KbL@Qr47`PZUF2_)G%?s@!s&snd~t>Ch$XYZ56RrSo{lnrIUaK+4|@ z67Qzs>I07Zj4jePol$KHyi;azAhC}~$y-;S536@*L0D=px5cH*cQFe#& z+UjWQ6W1-tp5_;YdJ)D~>2`Ag@+9UY*PTw}7mR{()1yz*T2|eXAa}Yp-P1NVVEoW~ zd8lEop{ERf-!95cwJ77qoywLTKr?aB;+J>!h)S(o`@|{h5Dw?$lVj)0g*Rto7RN1m@&MKeihhH^7T?Y^U6N&w4|OQF@k@X zdwYbO#@70ydUp6m(0umxN1aVx*^l@=@V#4T52M&5PT&6rH$ce0N`FRxc+y#xjkBtb zj;tc8yNkQWCQ^v8CBkMYq_T@%VeoZ0X{;Z7zeq*OrM1^|39> z+IiNN6H8#14z5^wHgH(Sbe?Zg5(_gaM@~+5^>TEnJlWFPZmZ}npH~9P5pt+82Nn(| zzqQ$Ng`5kD^Xv%To(%POrb?fxeos_?g@DL^Th#Riwk}VC)WCm*j3j&j(J;1??;8!Sx{N>B25q}lY6NU=kMa{v|grfDcR3) z_huhe=kn9=cftToF6IRM2+`aDnvF~$nqLLqflK%frNflbpH)j%C|&;&p}~9+z9UQf zX(d8<^n+NYx}Vm{A8SK&c|X<4AGHItrFe+05?XTI05$2>0N*e|QhXp39l*@*;z309 zqE$0xt3ZZ3ztmnVs%svgZK6@zPQeofUy_qW_8m30(iB@MVux)xMfvy>qHYc!AinG> zb@U+y*6!L9v^V(#eQA(xFHPyEyGtD<;NiVblI}j_NyDH0IHwBHBQ^MZv{WmwgQEAK z_#?7D!IdsecBi?W_5F0HK17F&D+QX!S29brh!y>#$5dFBx9Qm^bBtoui4!EfJzk@@ z@5KS}w$%5*0sU;khB`s9- ziQ9ql?E?f3l#n;@Ivb`aC{n*WRo7;{TYKLoVR_l|Wo`Q2UUNfh-M9T9RsQc(5 z9FLV8D-r!)B`SQYxEn`LyV1gz)f{f?|^*cDNH`9A^Mggi?)rU zMJAw!!JpLQbV&TuLxI@}Y+mCq>j$i?CsX^b0lXY8dT`D0Wqco4TSf+PHgmqwr+wlVafLOV{2&i^QkcKnqf zF(`HMAu-PJ8AD=R=I03#;|9fp#AJ&nNVQHA(#gmm)keD9 zDV@`G^|BV`dgkG181d_-X^F#GbzpCDz-DbYoYg1?PSa-rXKlrao)w(cqJerb7BsQl z3Yut(4NU|zI8dKCG!di@4A{;HXrfytUSozPdR){ap^0lp4^3>P>+saqCkjpM0aWIo zy(6P`%;DsxFAWDVZo`#)FgTe2r!Qle`{~XY$i_W%H!lC3VnRp+4)_Y)k7515naTnW zj|>MqN{^uE$IN@{L9B`UsCO6~@C3jy3pn5@jShjlaD=`5Fg=ZOpGg=ac#e*sm!2OP zBcP*azU5;P?AJttjwk4m5~2b0)nHtVfL=mpyc~}4^9n}xAwXu91Y57gl3*l8aHhzB z5yIl65GqEm;y0@68#!o;CccR^?Q^5T>&k>jaScJI{$f8Zmpc0L5UuQ|D*2--L~Dh@ zzFsKo8wO}om>yz*p^(TZ(-mOmyfU8F-k|u9bgkXXI`Xy}r7Ulg%JS966v@I8YE^C_ z)p3>OE|apn)1)km!9QGC-X)dg-Fl`s=*=@xmUsWPmE{{)S>6R@`KHk+%eO*VzJrzJ zyDXLEd!a1frFXzv*2?mI`t{c>HP1~_^V}q~%?D4?zDo7|z;Mm;aiMwkVPrlVq8IcR z9Hn_OnNPo}c=pm&v>=W~R zze#DhW;EQf5$h$O$i-qoXO$r=RfLmM^;4x3u?147 zHrd$wTs~f?`N4wVt2#G^)^ff^)8K`Ykn+QRiqqhP0zFJuQf5P+u+(!daMFcvO-WdL zKvFdU3= z+9$-Q6|fKFGn5Eh$W`EjErY(0kWUJ03}w(5qNFXA8#&e?$9lAJ#^xpLABAHdj&X8(h`dtPIF2-rlm9z!zziRZhfDKfSj%$q1(1v_oeT=#11iN%*%%oUtEgxmnTl7%BrsuVs@Lt@qtr& zBD;&&sY|E{VM94AedENUo|)}C$UY;P*;{+TGdW1PgOsl?^@WBVV3CpwvPF)f;#?tJ zOexk3M#`ixotABns4Q3f?GjtfOb9J=v-7-*#1D@UI;w}L3?ag&An=_Xf$s)siHv}U zFAn`n>a6TZA*%4CC3~Dn9<9Kht+|~cs`6;I(sZ|$bdbgt*xgPzc&tT&y&gUxSx5`f zhSKyTkJIjPC3`ZGJekR!tb+9HN$xD%pJ^-2c4zYa>Fz9dChivr;{Gh$pN?D`O0$zZ zS+feVLt+cV=jIUAd2-yYedKoMcrpr7k=Rs|>~ZzcdUwV?%5rD8bL!npKROBD#n*ad z#8Ygo(QoLZsRa(4CHQL!9B>b55|_j#88DaX&PwY2bS-l2*he`=e$H2rf-?u)Eq}=} z+|H!lKfjN|hM+FcIy(dHYr29hYSW5o zwT~s*wlg8G{9G$l&Jk3>M8iJ%wjKarT--TP>V)p#&KgQ4L!U+TX zwFf%=TYI81MLF$9UQFDx<>*<-gwlLcRvz23(#j)>=ZFPboa}FF4hQv9o>RbGa~ipp zIxvUViKc!@gF zuMrHg72>6uuB-;Cw^CkO6$|^Uvcf)BLyxh>KG$lr4uWG^V+VQ${HYu8(k8%P#Nln| z*p8$cnIsn6G(1@)JN;fEJ85$mW4=;0?yAItoU#ZwmW?T`%$vN4fwCs}wHZd1!wwew z8f}9ZXhv^a;Y+d&Mv=M=lLjQ%M>`UP%NYJ03-~w5?*;HX&s?+Gbay(b#|#F8rQeCM zyIbzL*UN!;gWNLr$X|PL(+&98t6B#D%r82{EBgIbuq{qIQDAWsMgySQ zJMcp8j4K!19dCoy0OZ~S8^#zUFFGF!W4L31;UfG_r8Soo<~O7E@EvnE;>Mu zrPHHy(2x{@Y$*CwdK}e1A=V-DE}-_TJnPlR`sl{6SSl1_BgP}xXlm^C>zTN;@p68| zEGNCCq1~&rb<6jUIkqDqyD38$f>HvO+cFYuwuzQ69utog9uSE#-wWS2PFDS7C z9xP4q+L2`EUyD-YbqB7itMX6yqRJPYjH=~5c6pE88?I2*9hIzi=F`R_M!<-5`t{33 z(*^Pw;`Bkv2z_8b^FEk0>MnSep0S8lT~q?4P0#Z@y`b_eWKDo*jvQALhsXz2Ia_qd z_SAaytv$7Vkgh(8YuS0(dHAjhI&4&Cj#rJ!y7an^&~qxw3(8sT38A0w%CY^SSLla! z%#ILUXFnnn|JY0O<#@hO&Kz-#-_T6)>qdOsG*jffS^T>tM7QsQmJy=6^xHq_rR8z5 z?`I-nQTRlo@IDTq>jvH(Zi{l-vtwgXjSq;9!YZKn@7y%qy#31z8 zDuoC;-gvDvReT;!WxO2$b&K3$B_iC(gK*M z#GxQvg2D~~6u6wVHY%R3 zD@yTcEFxonu&??8=pJW4ipbG)=W;aN=@s$00M*Uwd=0IN_HYaAUmS30hl;9RM4jx` zdK~2hf=h(Z1x>C|rZ$Prlbx}6D=SPs*%w=_>op}P{MgS?J*<4LbikPdPWLQ=${gS;u7Ziem?o;PTpY2GMX6)YXPK6jh! z&f61&ChmlDmnFh+Hx!<`Y_!0t>my8c%tTa?T0trdJz8=*xZ&6(gS$h zhvYI{8Bl&%`{XjcKMrn?qiRw2R0W&i4)!SC+X1u6*^A}-9(vq#yz@kOeTz8oifihk zF_UV$m!~>gyEtI&0wYOioZajJ#;tx%RK*OB)}gxL@(nZUV%Rt*Zitp$l_+vA8B+Fep`Iy^@L4z-l8`# zx=u-&VB;lyU6%8XC`WPCZV0HS zOB*^HQtA7#PWq(d4A$wMHG!aCq5$vF57X%f^dm`y8(z15EPMYaoZg7WFKK9Pa?wv^ z-~UW{&aQ9jXoc?=r@b$!1h+546#76u{LfK%nbb3lCSM-(c`;vuY7a7gyXcqn3*7N5 z@!-=pSKvRx6RpzU<`;eNA^lp6z~N=3(rJx8f)^O}Z)3>{!t0Co@885Gn#p0~>_E^L z>}2lN3h@BHqu*j~{vID?_*j|Xf$PWc5IaPlB+S)R!9& z@4j=-a_>3k$}&}7h$ZTe0mv1&48_6>15+mOtR61;9VQ=K!FG~g%LNd?C@54P?p`tQ z;W8~q;M#3WzSlU-gyH@bq=*E&E#RJBOIqHsX@g$xXwz#;R4Z;_WuhZfw3_PR8zx10 zGLtRhBb}%1j5Q)J*mTq8ZDBfJJ{-k#sH1{_L2*G&giip{&c*Zv$)I66eYn`3ZZZ>5 zCP$b?%3PyS5^-vi)CtoVop=GM_%(|vO({*>+VFEOUapaF5*J-qykD?jZUOQDHDNb; zb-9i2eicjyHR5XNri7`P($$or@eFRqHoOT7yEIXj(8{(Epvl!Vg(f)>%^fO48JUQ5 zk%Yo8TeW17$-9v&hN*?7qd7y@!S!W;XXpW*sp4tWnTg;?hd+%2>b9d05urtz%R z#qhta{pQ=YZ7<-~t%T!qX=`zC?J#W@t&eWQH|HraiS9T@_t?AXE)>59E6tTv2q4=E zx(~$mevB25XZ@lgw}GwOSpsngG?Tj9i&Db$d-Mu zbZv*y3r}~BE)LTlg6#Y0k7W720);nwS}6Wy`Vt!a<6_fq`V&aOW%lCet08)nzH*j; z5%dlEI?8>sU%Us}6{6k18}zjt!H~oB7=Ij2+^ZXqhz+z)r*#b!v0()rK$(MQ3vfW) z^aP-J@)Mbb(bM#&sC7t$ifu)rG(Dp!;j>_r0+80X=&<^2C7Uif8lq!#q^#G8i8n!c z%Jtu^rJgE!o=#NSpDk>k(hKx$!24p!ZWg_afjma9lx%2XuTC~J>AUnDRQhwqy;buT zEn2!VOs`T7Z}+|8jZgZ4F89OI5ES&9Zv96kku2yhb?T2xBS+91_+F3FU-PhG4QcMi zjx`%FIsaBm0YAaz4p=MFn_R>UIHr4${^1iuBlKSet(8CE&*<&qWid{ZwX{VYHwNh4 z5dECq(fiv)$|C)vmXH34nITpl!t_hcLjMICKLfp(wRi^k*Ba!1)jVp&W>%`P>_YE> zN2Ta}OsEwar{;95TgS4c90W?I)jSsE=(m+^2I)UT^Z|z9QyS0Ff6+&1;lGPb*64TW z_XGN0eHxS_H;3tCtgO99eTCh`s*Y`Q`5m|NTUwSyoNIa9bGk95u$URP{FaZIv=t~a zC0Joqh3I)Jq{qb7Cakb5Em?>Ui!g&i=@)F8cYE8$+eE7mTZ1s@eyi3jF0x{=dE>^g z6_r7@>dx4yDv;gc(}BX)d6vz}tW{reV~eSZ6+@As_@eJ?VNf$3DCABO3`XWn2!NNrdr96)nr|$*G{io zdsEm-Ye>!Oe~&B~A(3iY9q zJQ{K2(K&Zv`PI7EYGI_dTA2q9C_@G;mJMr*R-c^!wp(u7j&kU>LZ`A-+t_~%N{k>% z*j(8N5MubU3~L$%I#IGHQf?_GA}9Iqmlj>8C|ZQqxRO}2RD%kE+QUK*bWxm~Su>G) zT+%IQ%f_`t(xGxn{xF>m>#Deug$J&$C^7GoAjnNx#C>n_=2_?9w{*9Vjbz zMgh5}P5mF5`%|Xg5pzFo>K`)gv)Cbare3V#n@yVu#()%lE8$&gxY)1dWyh!9f*(sV zr{erSEU!ixqf&^a#;EiOZn=){yHYtdPQ2rj86Q02+cSPoCZHW#CVSg6K`T?`$%O2H z9n5;~&R`3y88)F8y{x9URL81wsx^L4qKk9cZZ%R;aG8~jACUBHCeW>_yqQq93fVzB zu)puP9qOb}C^S10w!^w~CgRD|#HD&W3`{vq9rZWZHw;Gd0@2 z^im{T-V%*f^Ls4JsiiCJ+P$*v*L+eR=bSP&2|+- z>))$d?7^96x5Ub5wxfFBZ2xwywd?%A$2{ztQ=UnJ>yMc-|dcMLVxLd^v>=B2*fcu=I=oqt(VnK#NB9;B5+*c|3?_& zN0I+coPhFE24c5tH|9-<2QNXs7aaVai*X4P+jFok9>zZ7Zf>qxEC1^Rjvai9PBkm~C%jfAlR}-bq@= z)oYyfW^YmPy!u5l`bzC2JQ(|IR#;6>Gfnu4Nom{HWcw!dAcE4;7|$hZseWdOq*vMQ z?^GI@IrY9XEm?On)ACuK;ymT)07LL}FFnS$)4jAAH%5}ZwARyVetX+zcryNYL)N!( zCXy0@Sv#@8pA=7^4|qQN_NY*TOLnWFwhvqNA9f)j+bR>1aU>XTIN0}s?cb$-l!$xV z_bETTpG+6~)va84x7twLzC>{Os3jN+@>kV8bstp8SkPl0a_V>Zb%JP@s*42x5Xv$* z-Ks-c!j`@RDFJahDuOT)E&V&ep5hk&s{9PI!DMhG+VOsA@j1(Q8A#8U8cI|dZxdmdQIkG)J*$-z^gZNWzk3u6Wm zn#}wduB*ri1o^}ACH2EIj7j8L6`yb_dPc%9o9}k=7!Bq3Z}srE<{#S+K7f_SaM=+={KYl!c;xu}fnCZ~iWXyk@Mwkv>P;V^hMt~I> zE&U{y@MSFM^wlWA!^ERXDaILp4^8ke33&rwyjNvn!5*5*G((N{&S27WoJRAYqWSc3 zO7h!HlVNPN)Zw)4-QlHJaQTh^*@1Xh-;)iytf{t_nTrS2l1W;9oM!QVf+wII_;#oz zDAy{vhU8k!Z~WFSd6PMq@I3zY;w5k>ZHFhdL}Ec^9}x}bd=Jk$es1QO9>j3PUukTj3mNY#FM?Td{g;=BqJLFluqgs2Gi`zbMSQJ5XQmltQXQ>`q%q6)% ztcn3a^3r5F7L0|MHH7oDY)6=w;{>|;mK(OLyQA1iHFg#MT%M=Tw}g|iFe+8YLbi{w zc2y=43o~2pRO`60DsI-7r|SU15VRtB?aT~oy2T=;K2wvlYhrM3d?!y?L2nNznY`E% zjP@K&-%xWQkGG5f;srTa!{x>nmBTCKsl9*6JgwWMyoZy39E~NpjQDHR>w-nd*saE6 zw1*^Jkh3!Eg9{1mMQsD(w+bEfC%9NDG4pJSIV7x+7ANCgW_nA~y{aJ%qPR~DLGT}k zB*b~zFHSvY3|_XnQMTvsOa;l#@I;%biOvH!A1r}G!3@h}M%t94^)nL<2bC`|13AJh zf94!Gjip0Fwx8q)T+8=8=@&CWI|wB9K;9X|Xc0==q2{GKLS(b_)7AGI_}idFm`ivv zk#4F=*%6JQd-*NwNVE008e;o9)gU~?e0=Fb!Y*~2BzXC9P<5ado&^tEYGO4#w1HF$ zOHRFNB&tUkp$0J-eoRGCd8B#V!=pc_rJ8$>h3ydFiY)C`51HIu>W<>%o9zIPX}bU+ z9Y3yCqU}Z(w0%rp01Cfp#F-NtaN^sWozB%bUdMUrSpJThN;|6i?CL#zucL8Po^rOzfNeihN~b#6)eaNx>*aSe z($2N6;!w{MDZ=;alWOOxcq&gkaXfkq^uS@rJWvHT*go5j0SX8Z0Rse+cNWL}2gF?M zG#*R_4}+gtLa{1_QB;ZmT7w)LV(BRsLh^n|&O!(XGhgwdpOEdhef#?!MRUUH)oLg; zP-)t6P*JCvD0RZxQ0=rGb|7I)tlplZ2Zc(zul;rcoF)!Q;TY}cWx*Bq9Q{F_zSt6u zg?k|Y(+(zK^ax7@w8IezA5(h_ec59SFdtz&{Mur^bS^nbyH_!O?&1H(y$|wrzc-tw zZ?$+~LP<|?nLh)`IYQ6n=y=B8bc9ak=%pqfkD))yGCiI0XLHoc>EB1XpFg5cr~5el zFP!pR-|t8A>yr6bocA|PDdcdMPZ^y8%XkJ-#|rx=r=xFnKw^!E_13851Ba$0kKh$9T=t14VaZ=IlD9Hr-23*b7Q zLxWyH!u_HPaf)RZ5xurs9ZxwU5+zq3h@=pmFnu$cKzO4!em^edEN`X5iT5Y|Kg z<!@%CMhz;>Lc{y3}Qe7n*1niDaB{baCocX1gcp;Z^+f8^%vytHT8?>?4_K+qn|- z$@QrhXP%({ka^s#R=7IMUNw(Jz~ekH$=rg@Ja(ieD70D^afCGh}rlD#Sb z>3@fhY+s_Q?@-KZAiz4EfnWv?0sx=L-7h*xAMoe>kY~dG4D_F)|0}%AHMH6^mFF?Q z%RDVFu}_n3+shIN0L}PWIcsKm!XoZG{A3j|3Ai>*X1uZ25l6tYL&lqk8tpzU9j1jqpQH*#_oTTSh z4OV^f_io;*K1$zr&@a zW`16%^|LXc3s38n01<;}xjVhZPW&ZjiD8}rEXHJM?>uQ@Gb1`@Imnqe`oLujCAg853yV%yi6HgxCp zWc;`_KAAdhO?LVjq%JZ2e2XU^`soDpo$BHEPW;%pc|jxJ$M4*5!kYeND4Nz}nx*|{~_H9LRk zGo5)mZ|hcbn0Q5V^Zti(25z~*oNiDs;x=*p))pPd>3E>_^Inar!7whXs~ja{n-~$E zr))G(-#?Cj>>T6xH^3!zpg8`+LQIDe<>UB|QX`Q&dZ1n5DD1w6BCuiQtycJ-mT`=2 zs!}QON##*9KB>(*65{yJ6z_i$;vbfCY@HHfk}-LJ03ve6SzYnj^DQcF0vmqX=o%6M zaT?;5(1;)c92SMPn2Xk@!6&tnxm?MPw?4+KLKG9{AhY5#4i@19eh$v4*hao|tw~<0 zlb4-wz`>O|dHLCnr;sQmQxT=)Y!U5Nt5qm@%~{VxxE`l|OjS3WecxT(sM=6;%^Bw; ztOXuUmD71kH{P|AYzJZ$PDSjIa;9=H{*E}5z&S-z?|a=2YbZIfc5z$BCMn>U5c{{8 ztt_)$TeZGp-TFn?*mlkH2DafVHn=L-DwCR4-s1UO44z$c^Z`uP;X=SKyLqcVpf}|c4qd_qXqBBsCuA`hvX1!Qn(>Lwz$hkZtrfuvaN3O5n1YD`{@VXL#&Tx>b>_=7X zI&_A6R%Owu$k4_RJVdHN_{*vin*qnR;CyqBOFG=Qo7A{|4#4rEXpCu=l?IG?bAd@t z8MR=9=r(Z#dX$(qX{c#27Oiz)#)Q*wW7&oiPQznexa!S1P&Kwn60H9f+Gtkeiz4n= z5^?7kPv{eBGy-!nfgS4lrjnY-f>{3^hdOj^LfOXZ(byi{Sbb4rlgl<%?=+SyKdf~Q zzKSomQ$jrdbv5# zkoZLGgOltO9dL-%;fUmFb0_3nq;sYrFd=e)3{Wrz83hAe1M%gJ@9feoqB{VPSz5dF z!#im6_Tr-h%QA^Ua3kOj)~x4e@$Z_i=Apu65}OhM1YwJ{bkkbNT&N*fL~43fBsA*U z5zVQQvqz7);QF!2#tZKsmu^(`_uO~Qb@w)ZwOheeKlOPkrN5 z=c%VoJ##7_ga;}HpJDPNIw8>RibCx465qDvIEVL2UA{Qn;{OA`M_bn6EC7H*ORQZ9 zd{oudKR21o@-l>Ek_n7SAnZ7kuqmivlPv-!AQC}@RstCy8WKwaNZplBtG3pyArb*hiK`P#2XVx~>NrQ%&jZH0*LTVBF8ev|h2Gr4%j}T(rRT@)5hq!8MVz(*ewsCsh8?;Ravu;%kaW5PI^>3X&uK4>p1zE zn3yjL9HN9`p2lQSVEZ`66PnaD33}U#PK0fxs=2n_?-_Ph%4BY>9me~Fk z8zGMH1$}9!S^o_M-9>*tB;y5N(?77P|1)i#{lDm2B=~olJo|3?PfDJ>5ZQ1(h|l+0 z2WGm+qTe8bo4-``iSaI=5|fKpcx?m>gVv`cVE7Huhf5)225(>0^y&q1)UW3cDe&=& zJang91f<-`X|Je8ihQ}e6pElIFsMHmr77btvUqi}?tT#xur(@Zd< zraE#9c;NJt@i*4Dtbt^;zG;0k57PAwEs~>(w6hLMdJw#c&9$Ad4vqAX3(E=iePwDM zgu8YnCf@JKc5pY#Z!DQk(F>D2$$jQ*KCK=hswC8&DUYc0`54B#V0q7rw7l}>US6-# z*C{$&xyj7HIh=;r^&nK158tmq?k^x|*_O#+5{JpRn&bh86< z@0O5rwVCQf%MSQZ?k^8t`|EfD%Ad2V0&}Y~(18l%Z=*;gFhA&y(J3)nGQkyeW!z4| z68bH52~@i zf1njbyTW?>x6>F57js-(Y#U9c{sY(LYBW!9o6uyqm(fktsd(nrskW0#DvsP_eqJvA z{H}y;zC8+=zd(*AP!Dz$%jR`K_dk?{vBkgk#%N!Ro>Xe#l~C4rW~)@9kI@U_5&V7` z3U>P`9CC$x3CR%nYMuGX85IVk_ixD&3Gzx#YxmEfEF@?dolh6hYx1qmvpQ>tRvPMu zxx#e^YSi)8OKkl=zE(udjjJ`5;%Xn|36FhKnvu}1J zrpVPHm`lFdVT&ejEoTQVoV#_^XKK;(v05{mEB_rdvj>J;dqgJm{G@@w$R6S1)he!= zEj&L>q$9mbXPz_NcU&H@O6qD-Kn;o z1ClGDE6P(dbpCxj-*t#0X-u)WwfliKdI^Q|z<)}W{zF}2b-cK&61<{vS)5xx<4-r_ zk;Mh{b1@+3mWATWvkHCQENNF8tg_^@-gcQU{9J3DT*xon;42hB&w<;dU3g(= zi92!tY=FrBRUu9n}%|6NVydIn+}JwGsF^LnnY; zGqwV>nelLZEk>X#et>dxZ**Z&jKsuoY66@JjpmB2G~6`>p031D$(R`dphb)ghqBtm z_>eCg6BEHd$bu>%$YXAPDG_>nxX3vSD*?wA3sjtfRh&g zZnk^92qd^}s;rMT)Op|txKR3vs!9%3rM9e^RR^5K zi5{|<1m0(sraGn55QB!oD!;RI1U)w#V9N+ThgS8dnnE#Fv^35%1%hEZ63x)QpZMg{ zXkroCBw8HiaCm!FwJY%U#`1BL-}9VCK3{QHuRW{93#U)xB-jFRvKMwWeX?ZygnK7h z>~W^FLsn55&abN7)U>|E1FR!%>V2|7lVG*X0sA`M;FC+X#631t;tkJGZ+IrZd5GC$ zy@1zLDrXQUqy*vSq&nuI1}8%42`-+hoDwT_yatKY%%^!i!fzKaZP=T@(=5vc31186)>sk=x0{7LAy+d!r{{* z=v1ZQF1H?lh!fO#ra=wBNP>2|bfzMrmY2_KTDP{gLFs}u!3oqNnE&rx4Xs(agi6ZM z12AL*+yNYh3Zb;RxeTz0LTT*|3(kZ5GKCV}1qNLR)0-NH>|ySNE}@Ij8Jkn+!y&r8 zCoTh~k^-{5+@LD}vDmcjehTMe8(=as$I3_t{hUrk{HsmTcXoZVO;7b&x&{favozTP zR(e~k8|en*ag*vUWgt>#zZE4f0#<^O6M}A4CEuoWEM~*jiE7*(>NU42jSXACo$#x0 z1&m+zF#~j7_o%$ul#ZGVvDNQBRlobSO%YSU4Yn{Fd&~^+ukj&+9)^|71f4hlAeTCe zoOc~SqR@XN2_oKdk=@3mm_0wJ;AC8Wq ze`W9%`Z4~@`4zRS@xprMq?Fiu!mKgzNT-LuG3)BIZOwhKt?8Z-g?TG4JtbieD@_#6 z4Mr<1#st_Sk26So42zr3V99;1r&jR`_v?wg0PD>%`lH=vWBMj;B9i`vrZoW7ND~I>hM~-9*tI9%9U`M=RqS|&D_dmYB$#iX+w@M( zgJYmi8Y*mDJ*Unud|XT66~@8ACecUuVP7c+3s#bNU7Pd9PD12~T;v&m;8@#Z7X?tk zNtkWT8;>Y7L_ZNs(}>*>B7`m}a)NS7=o++rKnjQt2uBjcCkChV8zhDrVi@3$bWAqE zBo2>Tz#l10HrY+Wm5B%nBGsMyAc$%?+bLOWRXGqs8(xZy>I@d*oOFF1uI~DP5$&$dpP8!xhBipGAM948+ zJ367u~{TFE~+!fFWo_Di0lbf35uo`sdbZyscL8!LQaKHJhc zN`iOMVi^&4G5Q}BAscLTZz#KyuEc|@6o1wm@^{iN@ZkDR+QPZs(n+`TWt%!Mmm|}S z$P`hHPP!WpuCirzFCK8(2RP9qDq=Ybwinor2lfIx@qiO`l|xGPczNInSPVI^xIFMQ zSG)+fxN>K~{!5YShA?_GD~o%SlXTK=Cx9Nkpo?Bz(n)V*2D3Zptr-0Q@g1I(IXtWA z`Aol9RMcKp$RBv39ChNG_mEE3kL&DLH>mRhb&KFKU43}dc^|*^m7Db^Q@S{ThFd&C zC9?#S0I#Kg;s2k*GzRC%w_lnm#)+eJifS!%oyNgmBh}rMqi-wj;ZBn!eGAt-oDaOJ zV}yOVLq{o-#z;`#?@Vz*rR8Vn0`2q~W@ZZZ^N9g6n}V1S)onDlY!9Go5MsSsXj0?= z<&^Ie-k8X)YNNb}zK@B%TWFyAkq=hee#!%@8qJ%9n_|vpAOwWFc2q@TVz}}iR7X)U zNVaplh$M6R1pgbA;G$8CJuFw&DYlVW&SyQ3+&*E4!^_I(Ir>Jg22jJ%+b4CL<>U3t zrnPqY$Y6kly(iZvfHn0Eby8l!({-;2Jd~TwGhE*^G(HO`A5nSPb730yLQV9b`W{kE z)L~;|YKa;vtkbO*%AcHdV~ZE6o^Iuw(F?wrFIrdMBHamk;p;jJk(#{_I%Gw$xAwxL z$k7MwTF3Kd`~+D>5p*;!arurhbJm`Yf^q1Q>JiXch5%q}l1NK>!j@W}4(=%XtUXX@+6vw$dltz9E3nnrS;v8r>TfAP3nEh>T-BZeM^J% zc{o}NO#0gE(9$>$LX%^(PH2y?*>FQ5!{$1lud8})xaUFW*4vK$B!d>v{9cH6QYCb} zGYe5_g)V>`q{vB)GnsL>luko-%lM0jxav?nV{CrT*osY-%1j?H27#OoyqYVVYw1&p=;ApmrnmlPd&k&vcsdHVOkBDNv>_` zGQDW8PN0N2i)t)SbsnBdc@WF(5sy!KAjr z`7S#WpHks4)^2+^BQs(?ZHiY1Xk$;X_)3xN;F74EPttox;D`uUBLDkc|1LwN=+ zbY_CeS-rN0@MHj$UVVr)Y75?@9LC)3*EG$CB@$ zyxv%?)+B*Z$gKbsCxL!6TLasZig>>#^%L?!S>-|ZsAZ#E%jZiRGw5pV{(MJbSVlsa z9_Mh6Y1-|RMi+Sp3A>D=#)aJSI%*H)@TcsJguJfe7!{Za3nhNv!w;j)1^fsr<1%gx zGA@<&kb>bzF-q`;U@e4-73h}L+Wm={a*&nt0G%_S+S2{Kf!LY zJx{F2Eoa3paW<96sSp&LB&A! z4lV!z=Mj-hHJ{UTS>3}Wx6MoPFrRXOmuK$={S`XME9{Dj2^}XT!3#GvwycS^)UTvc z?m3@QHbO^A5+P~6Z#Iu1HG+z?l1pD+Qu>4=r?pdFjQUxcG)G#_?MrpU0$$NdVl=2K z64^~7+zstCB4TRAsez|B&IYIQ$mgXNZruN{9KPEdd-&jSZ;)^tKTeHs^6KEKiQ;&Z z|9#-x!o*oQ0nY7j@JQ^}8=T9-F#t^20sWMQIkHuY%pSucAX|i~9%n`~K;fW66%INq z<>Eb}HyrdxgWq^KVVSZew&S2Y6QL5LdIcZH!aZZsKKLjfZ-d6Ai+&yhaM|%YKF**D zQ0aOzuaLNC!H44{G;xZ3EMhc37(Q)Xv^I`7_p5S@ptyC>x|W&IRTz%atJh4LfzFs^ zfoEVA<9t>t`8Tt1!b*t?%r)plpwkD(ljp&Thm(xKJX;+c&XrCb7r?1w8gTBZuJn3SdPxocDaHMweXRfb(8N z6Ab09zK_gfUDW)PHY210CZn7X;GfWC$nx?O(C?LW0!N7pgMX zBtgH|sUdNF67+i`n!5=Qb5H1ZtIF$UXXy7zv$S*E!i{P%E6yrw_*7LwBbD zWA8QSJ|NO282iBg6BzptJ&2qiwt=xb4q-R9yVv~%Iw59IJMik1GMPOFJ&MWDh|hLj zVA9{$5Yn&cG32;U8AAGXN&%!z<{}a4M}bH?5}o_6J-wMLSG&H!HX|!&^J#htv+^_i z!BwSL`qgaSu%f{}n?Fy_A>9iYA=z;t_+^Wz{|fY32GXnPG4Efe*AV*+N0I28cKrBl zwHJ5?E6_V>qp$DNd&vKTG)ZV5!kl3$XRjY+D~#F^l%-D+Kw0_>Z{|}F^A0Kz{(}B$ z&|9GB_3r`7nxj&i)`;(N{!V{G?qAv9S^7FPJWJmg^ew1+X;};Sj{c24`;QYmOLQ6c zf)J_T*-R&RHY+te>jBE_P7|KZ7JQ_t5dO5_*}ftNk#kdt1b}Tj9YiczQ}1{yr|cbX zwb0dkzM3d$2KJ}&%DWY#{9Q`)6=-UqR`>&l#}Y{JBI^`2d^%LO{L0 z8wW}QO9BO*bVLW0NT75eKQ3*jA$)cj&Ob*24IR=!oCcmkM(?EYF`9@wjxaTjo>uas z%FGy5!O4fBMgTG$4G?jnf=qQi$$b|~q%mcQ0i44h((WMBvqLY5c2eXeFZkx4mnPj_SJ3`=XIX8c8sW7{MR}0%I)nGQl>sg%BVCf>?+kjAe?AC6EAN zJ%|7sgH4SM7>tc${J;=`F`>aps0%n631hpsZJ_U@&T_M|oK;(?^-dX$cO7{Ah7GH|Ix96(7*YhpDDgE_YO1q>rlumG}!a>-TiC zP<_~51FBWZVk`Ch#M}%|_Ox4uO}k|{PJgZJmhgYu#IO6zvRl$;ary^sx0L%h{Zj0f zc=(lVw-g5&H{oWe;ye!bns&<^+in?<_K!A(d)O`W0rl4ZmLP zZaQ{M-)(rk#K8JOa|@DQZMS>R~eFtcfV&6A1T-Nb7dpDP^c z^>1p-EB)1+_)T-%!Z&2x#36ASx>2xy*D=K|-t-ZS*Ky9f;_(o|EZ#QGl@U zMo@tLn_t+rX}#!flr~WcWI1uYlWuR6SLNgki3)O_At~@ETEihCvf0@vbrdi}p83?v zTP6WTkia4QV6O=@JX4_f^VnvThIoa=agA-A8>@u_%a@UeN3U=5rj}0N3aY3Q8E-W| zOAER>oxXsG+tOrVnn8CU`JGA1RZ}|m+O%Y>>kwwFyU|Gr)^r(-AkYwnrSaUhkSM z*ih8TxZDFAMa2EV1fe-;0-EBcBsLbms(lGnTWU~AGJA_#@dtI0Q|;FzYClg_nHHM@ z!Z{4-j@3r!M}+9NSeUu|)CmuUXcfNrYgHe#0hF-{TwQ^xb)9R4t;?Y*SPKrgRkRK! zP2U$J^iYGdWS>n?h zepow}a8X+jHkBShq4N5z<^Xl}-YVyB`z$IF9Vn+z%!$I0I7qugv`)nWW zMe=98D2bkfQN^2*=s<{GzzLNR_C&3h!r{7jSwhxysI}348tqg!C(QB%rCvjp%^fKB z29NLp&2`g#zsocL?)eyOjetQiTI{< z)*teA8(+}d#^OLN?_x5IGjOXE;eF<`!*Y;%ba{|NZjaMlajLmUwP(u1kB6({RM&Wc z=HbM818;}2S~6;jj|eWb=n{=aj6#eq;RMZ`Akb1Fg`+?&yT;lKeL%H`DJK>{$tpJ- zHWbNLJAi_XGe|jHGGfd0K#NLjoZ;@m`M}w)XLZW^a{O3_X{8MYu27(q&|+H zX*l}5$LfR0y5GleC$Hj8eu&$<29y|U;+v=eme1ZCP` z%XqWMvT?ls=Msws=~1)b$IN`M(jlGiJm&-F@^7JIwjZX~(bny2(%;CTs1cu;p>aGmt=*?hX>A4I00ZwFIsZqf$L&hmQ$*~4&adnAv(y}HO|PBATW}vAVyBUc*u$)5MG$1 zvSfi=XB(5GXyq7Hi?JapQt&5#4X~4JZ#)&l%se4Y74RfsRrOH;PtK*AA#Zxoyx!s| z?u4Y(y&L#Rv#b_D!t@bXasEb9if~y9;j-?EvXAd-Zr38%-S%*Y6fC|UY_kZ5;hS67 z*3;evA;k0m;Se0|1pYTkKs2q(HWs=@Rd`m~G`G&3iU^{m5JU?TF>TVdYT;>XS5$>! zP{x4HPeTN4F!eI-HTa7#D|@fOjlhB4V`>UqN^trTEx~uNG))NJz3>>}55c=HL@f|L z{eTB^AUbB_B(qpq5%2)AJb2@wc&+ph1T7XeX8V_%vS9rCjYYColA@J6dupdOXamn> z#VM++SjF1gmu*?CP0}qeN#`gDS3)0Fp|N8=l}Fp?G5n~u`|qjd&=dGQ?MQ2*lR!kd6OwIeBFd*jv4_aOEeu6e>@awCzET5;%5dg7?qewKmNI{73&BYbnwVVWtB#>xsH8mB8@qXH$_pQ&bjiH}Qg83*TPeV-e5=M}FLBa&e8qGh( zh2=_s4zG&lx2p2c%y+D+Deu7{BbFOb&NSDyaA)PQD7=BYf;*zyY~b@&2i&JU=+?2& z*q3>nYG5gOQJ~ia~mO0G@FxFA>+Ja*%enoQ(wrX)gmF0Uh29n5hrw@D_*~Q&MTT%0fI_m8ZoalO{z>SO(cm5>xKE zcFhQ}(4~1@SnSQ?PfvQiS|5btFokEVQ5xP^DRu?3Qz07XhIqoLW0}9vJG&FpIG^UB z4hz!3;w^&i&&y7BPly_!?Mn~cxCEs6p6JGoyivO^9WbCA zl4`^usWiZVLL}n_25bu{E}3+}fWj!#h=Wt9!GK9*GBy~{B$K%gFre_uG}A^eFraYC z_<#XTS{WZOpisuF24zfIU_iwpL=5IGOA^je2WS{8ix}c{^ z#qIJuJ%=(5xS)DpQ3Lj(3##`LJ&qhNyPpch_mU50{w{tjsg8Yq5Tf4$-Y=QR zGP{JRkCUW`X5Pg^a#EF{yGklxP^yfBy@B3Kt-g6PT`~V9~Gr)XlkgNQV z{?eaZ#iZJ|h*W+oa5Zm*)nA3^6M+2EI?M7?aP2pPY$lB}E1%NOkoa$%EH8hDUOW!~ zUq0M(%;l}7@W27YSB9GW!rE>ABlTfz{-?C@hyOyqM23G&)-wGnxv!jBrvJ#L|D=ES z0~-E!BGB-EQ2Wn?JpW4UF9rl-_ZHX42pIuDaFRJ;c*4~>DM%qk(8%I9fl=S)gbAhK zgfS`g)8d2)8zZ=*jFDcT!vfmNJz|XV105E6fey#`gAT`rj3OguPG=I^yrri{MHcg{ zm|}(rf@9%IgfA0$hPK3dy_wGF+rpdX@MbPc_5;e9Tf1mPJl<#XzFZ4e3=7&_GI2w; z^O@lds!WM+v>I?ljAMo|-Y79935yKN^$Dyo%F*R8h_G^HF;aGFCLU6=${16PGJO&< zWb#xPf3LhR8b1--V*o5NM!$AcSq8t7160&c6Zm%GipWiaG(Z@;~pD;hFhjkdkyDspm-T4c+kc@HbD8m#-@*H66zR@ zd;GG(JwDnZ32_&v?J9u{Ox%fpT@ET2Wm_1e7r4}e4tQg?1K#)w0(Ln{c?|)a>8qUS z*dV=8d4awz+&JHe)9K2{TiCvyYpINUhpRFHx45bX;f_1v9esVj3|RqXMAkw2{TX0h zZ@56;T`@?1lo8Dtpg)b%_mJ8nY?>=9@>Zq1PhQ=iZvR5D;7To~@jE|Mwfe|JI^JTG zTDBvlya3Je$4I4^Sa3T{(X4QhKQZ%F(9hfmLHe6G{ahPf3>(mxuWf>+BT(aJV~T^Z z9tNv%=1adp1*(RhEyf$c`(mmYYODhHX@uk!_$0kV8*z!#KOfUrNxuI#jg|Z_g_Zo= z#!7x3ry&z7iTk*bsj!lt$Bi5Z#|tcfGjS8CI1iRB6Dv7RVI_O0*BI?!aJk7cFfF=% z1JnO=xcpi+8bIMv=}vp39STqFmlY+@pbw-Uxz#K2=8dB z_P0D4IF9^ZWZ*b8^oi}&(>yI)=qaF74t?_X_zWLT%w!+ z&(kbd0iZgTiV^^;V<;xqum-Z4fYwov&iGoO(-o3qJ)vA{^iN;I=zDoD^&NK4V{CBR zSl7939q&uwlgQ~ZS{zE{!aZMGpQt;Wn(t_-4+7G{m_-0g@R-O)g}6fsxIb2U<%c&^ z(=+8JIFlZ&ok@H8vQuA)BmFom5kAUkIn-X9|2+mSoUqjswt)Abr zuB&rX0@;^0thgQs(OLe0=3w_j>zCi#Tc1Y_v;ZY7gnuipqI_K0&|P1>HDWOk1rwmm z4(f_#LwTJRXn7f!qodGe2R8R@>BxriIvpRZE5NrL1!};;B|iXXp(%~<)N}OL>r*5*7$`Q>Ow&G4S>~dq+Sf@mlI?X zbDDuM0Q=w`vG8Lsw`glgzV-}jLR_|DfU@W@KZmRu?S#n(vmac;Zr841y&=QD>4iAi z38=O=;>0x4XUohYkcmBNR(VFP6*_Pq4#7@Si?Z5Ii-j56kSY!|IoLGuW zX9r=I8HQfcGS>b4gd=O%_T^osdYqKIOyRPTG&D$s{gii#Zq2CCK7Yc+RYfO7m%w*5 z#j|#07{#3M6G^<+D~IM zYWcnl&{24k84KTUvA}uIja;PYGTh#dJ>;i|yhJ;3d7o=FF3>J6>M~|zMP|Tx%KgRB zKr1|f1-6N6oUzf&>D9sVSa6W4k5OT9H1jxxIJWf^aiZE&bc>2RDlX=9WV=Md!H)8& zl*5Id9C{N@l``SKKErfw1F>A1m~n_V)Iq-PXJNG#dLN;D%PRw5y_ z7CUaN757wfoN>^Kd)k$6ycM_06*t9-+wF=gvEuf);wD;g&m_kUyJW@fb>*98#qD#o zq1B3e)|KyWD{j9lU$YhWoGb1LEAD`+%rREni>|ns6?f1TH_nQC$rV>@#l7r`n`Fhk z;)*M<;$C&djk4knx%&FYR@`gJaTD$L9d`9gn-zD&^}cE=?yIhR%dEJguDBgm+%Z?& zRx9px9jCT~IrJtqI_Q-J*ME*4xlH*$^$*aaZ_^|E%)i@h=FG)wh0bw|f7Z~HJ*&eS&g}`S-u-jiGn&SRp~2)qFUq z<`{ll-h_FgI#3Cf=*rVgm2uk5QxEF(H2-^2>blix-7ho=ALym`$}GD-X_noaILq!$ zHOq1dndN}?@5MaJlWTzgXQEb(f?VrER5WWk*BCVqw4b1kax3gWZSgT`EH94#FRQEa zbQ3ZFfI~~HT?=?r$8|oVy?U(#tdJKXv}-R<*I07xOMh_w_VA-+JV;3YW zB&-z>KXBp%$B7dsaU4?f2rq;2gE)p*iz#^!J0VTmqm8IRWu!YAV zY#aLI_eK=35|sR|v0f7RTj=mxpNI)*I`(;I8k;SvKBDO!9ebLdGB^Fv3%0n@q>GhNR6%K16Vf%BcbyiE?bK}HULG#12HmKw656*)Uy zv@0)X2YWV|J=fe`Mui01SehywKGky@7?+LNz@(f>Zr>9JUWsk^spE4jrARq9?p3l)GT1hdTIKkKlrql&L`&Ch9ztef!@EK!HMO3vQ%3dr z9*DbTo7Qekb&sS|Zr^&7w`}NziJMc|g}SoW6*N=Kx6l)x69_f zSw@X!Q`~GJmiO6d;Hx}d!1`uY1tp9b1T$AL&hncod74{oFV#`r#`Q@#J1zx^s11(v z{5aunPwV}s_h<%fS5!0R+_`0FTPAH@#TEr;e|sgZ1I}+P>}Ja$B#`EI>_|wj-l3Cq zVn0HX-Q`Nw2`HT;>*Cf&8I}+9_uhkk@6mNU*R+ta0M)HA+?Yib)NN(V8C4j@#FjslKW1Je|+22&D)Q=r(y!FK5@KhgnK?543c@55DfCM(@{|t?SS9%PGmj zI{1SQ8m}Z{n&1)Ig_sXt+%;s01|0}I4jl9tMhbIz`N(khU}m6uL@;r}$DfeQHDKmb z6i4bOv>01!5B(=~`9D(tJBk)}<38mgwGh1A$=T4R9#`C6J;wLtHjnZK9CwhXv-f=L zW@*aC?;fDfp}+?(g||F{?TM;!-zx=@?igI z=kuV}9lgUt0|PzX!)DLCXVuVf|NVeX4G5eL4R=z{{buXsi;x3T$7fJVqkhW5N#0CX zz2ulqH)C5*COy0zC%a<+qGtf7TY{V1@EIe}zoY}dtep>Z_v0}1tH8&VqvBs#= z^qOX=uPeH79OyQYaCfd}Sy;A|L)sbvFYvfyfX8`n>lqYpvVTijCStjetpxX(xqzkL z0W%)Mb!*e$bvks+|=#BjY1MM<6Em!$ zcMK@FiK@%LarEN1qeD7+@^9&X{q!boY4fycVBK}Q)@k3O-<3l*pCC%j2bkRWlNeR( zS0(VD6Uf`$O?RhC0hh}IXWB?Jf#CmE`TeRKAh}|3EmEl_@tEL{$(k9AUZw(Ih7izk zkgIkdscPXI0OR1sK+NfKousCrAF^t?#u<-|t&uKNGjtc4EE~7*2RSmNUk&Td9}{_% zelwz{9G->xw`|*jOW5R{*+zNLY*wk}$_%aMnXB{4R2_av4$<)deYJplu`Z$6=C|q^ zzpBUeX=5w{)O8qXA$7f?Xx-Zd7ONZ8JH4UI>Rowhe%xdk27kJ zA)=NV_Y*i-u)*WgYcUPZ_FJbP`p_6Y|u&Nmxrz)vn%ycRCc^;31DMC5>4EtF=7v z)w=wOJF~Ud+*}TGlQl9Os7`e|KF>mKlB0K^jFsxWGEu0z@)^J*FwNa0_P0XdK?%{ioOFvH#%%z*LrsKJ%87O`= zAhKRp%eb$=exwr?ot{nHEYc;PP zLJi+k?}tblNT;_}s)w0-StNb%QX2&75w#1iez=fr6^{!jUckQV7e1;!f)04hw&Zq> z4Tp!fZH2Ov!}xyO3*-BV!WiFA`PCEZlLauoPqJQf$zfQkb{F&=`bXpUIyAm_TDOx= zKFW9YMFxHjw|faMdt9DX@x;ni$qlR8+7oxQwI&;zH*_omXfeS2x<1jAT(x0cygiv% zE)jWFN`(xWJZ@g7>K#aT4}^m)nGY*748SA?*ovFO|tvO;Lo8QVh>oqck@v0U)xp z2(U6vl%-o*uu=YQ=W-{@f-IL39dimi+icUq!%maF|E0-yhHfh&fuZRtSn65zoViu> z09T=epP!CpX-yz~kSgWJ#zTVl?Z8EhYpT?L9-=Fwv2(OGOSg~Go#yA=qtwlbQYO)F zE|zGMPUQR5A)3jB+WgI;Ssc2h0S;{LZLL3FR2>b4>a(=XWcI|NA|>g_I>{OB$kP2U zpsv4`!)0tTlKQzg9U|4j&sqHcb!h-%&cl8+smJ&^kN-a*{Ytb07tXo zpmjt&wacfXVSvm5{!<*9@Qx@m4pNf4AcBH(mQ$&3ngtMEw@$1p3&$qzj$;EfNl-?aO z<-sZM0h$`cq41;pHobFXS(TmhD-d91EzF`-0 zsT2PS4;W?S7Y%z_`_oG$1&!x*X>$nqH?O{ph+&)GihI-T_){g+*AIpGfBJ~Jb0^GoC5D27vfq*7vF_BeMrB!nwxrBj$j(sB+luH%} z=x7sywip;yL1}c{`^(ImI*4;o{5T*ienAsiRjX57X{TE2j-06@=YT#Ua_7`IF1Uc_ zaSG>0nl8Q|PgCYmv6eZduOj}LDH49@BAwENF48F}l1|m(j-06@=YT#UPV@>e=E+O( zoQ2I%m$grk+uG;z^h*4){%GHgc7vszIxRB| zwn#VFb(e0iCa1yF8v6wI@q%Jtq_nHp5d#YQ$&UJ~!6#c~wlF-jhbAxR)T3^cwOz>l z1zM8@KI9gjwzK|>lGXb4W=hv#S#>99bvOTAkX1dgdXvg7$-`c9 zPz7x$!abf-@&$WJ=8#7mNm*mK6SKgD+N?@DylGiDt&%Cc)zL(D8cpQhF`5Xg+}Gw* zZtx-mK@;ku`n(m8c~C%1;u(e1j(V7ogho}LJ?5TwO5ViZcP#ymmCAk4 ze0ywgy`y8anFNQI+wyS7A7-w%b;ddz}pKGDeP#GIO@d#L10t|2cZI+5F!5 zER`Rp%6gtdt@_uVvtlo+4?OaU`Vg-V)uUPUv6C%4E%Y>%MdAJbXoiEhduP)2F&p$cj^D+z#OopxQy!(fZFItkBo>>NI|2Oi@Ieh z*|K3!ocQFh94_pRV_z+YLe4!AZm&!MS0T(^lR48BAJ*Cs$++Z{&3c`MY{88Gj_iVN zawp4kP2;3<(9uP%?FntHEtk{KH0Qd^B6D3PjI@1@k#=ovIlvNYhSxo=&TX@`6!K6K zudv;wPN#QxL5Ye-u?_ zAKVyYq{4n8ZJVS*Ct5u^7Y}QsG4>_4VchEUePWD+e8UAccbO?Oxx^8=3VF}eCqJ-* zli=Apk2!KWm2raS>C{*2b`tQxeBDmbF$PX@bFYVi)3ttD2&4~A0H$yaThr;(^6mk1 zs(b@okIddVF(;4jf?KVHa9Zk#lUZB{!IQ{4$!?%qDrgC=$ozdQni^s6>SYfnW=YH3 zcF8NK79U#aa$3~Fj9`xcZ=(caSC93=+d>Nv-s-aYS(9tqJQKHeKXt%`>4fZk*3nud zU;hU}UED#PDCV8qw7pJu-i6yoOW;VWjM>Emc4>ye1;H*4F-8oA>kiOMLnEkX_c z2hgFRjNX!Wgy_xQ6`D|uCS=7~B~Z(uOgf{}CQ^kgxOjZ!te0(zlljI1#kNG@F{p37 zHqR~-&Z9vrQWR_33p~VSr7bQeQ_2J{H4YE17sTX(EUZpu;CbaJuQvHP7g}*Gc6(v{ zk)`WKwI7ZfZNa^n71!M6hEM#jW79a*5ZXr-*h8p1Y+Rnt2xaN!bF{=3>Ki>v8M8~d ziTa!!B)#)g5oJ|9R@=qJvDX#MGA2>n*lFJk^BUO(nj;1)mi{R8x!4)HwTPC6Lr1AN z+#p*&rdEgF`ccUK?ttUJ{1tQC7B-z`#a^NK0Ru{}1F>J!%E}Ywdt*O#28M%3w~r=) zYF4zDB0+0u&;r@U?AIk*jZP8Hxn5$$D`+(wr|V5vmXfTYCXdopCcp%F)D@C$TT~h>JwRo_(&J?L7L|pArCq4y5%S~bab5;9wWvH; zw#a{+u9iysO{FVpDq=x@ur!4l)|8x~_m<#vk%P()zx89AVM3k-n`IZQ!RgR>rq^e1 z^o@I{DvGVa4WrZp72`$@?8%@0d!6b3uP;mE%d^HUY@J@fe3a+E;dCacJr(4Xg3GpZ z6rUH~7Oerl_H;2u@wkGjp?Cz}wuv6g9pvck;G!1(gxpeYeV^T6+AeyBLmOOpNuJ~N zi`qqtne#O7+-+lLzxLIkwTFPM$#nD$?SPgH1)~n>qHr3Adoc#eF#Sz%u7fr)-*!N`?jVd{exVYbmX4&eLJ`}BO^l*_)=RehR(tEG>{wOz8zDz z{c^jaS%UA4bVqQpQ||)gF&OEUFjGvfW0Gru+uOME@b@4#(9=!8f(SPYH(z8&cmIgA z$nD$)CUQlxLma11Gjv3ENkqIxAnkiuuQYMFO5Y78H!s+sxmUWFZ%wRenI53ArtJj2%@0W+TxH_}ep%Iha2e|24ha&E8aLNz54dr(^mhT_VH^u*m_!f9< zf|pD^j?1~H*j|IovlK?rp8|sU4}8nQlepBo@GT3w{q$L&p~v}TUkAbc6eQRl_tn1p zu+zEum!;-T(Oot#pk4(@3#4$Qr*a5`x3VN2Fc^lpkT&Uw0;4^eC zoQV{2AMpix5&6F~fh!(P1C8An`dbM3T)En(i!G1mquXw z#cz*yY*^mdx;)-oVA(vyq)4`{iMMij`LlLNN4&9pIZN4T642JNra7KWw60v<)|!lS zERQ%HVUzM=Q+!3DHIYoTvAnI2fJDcd=EhDgvruiVar2YYHJLnCHn(+jG`4f1a*!Mm zXW4j#^E=VHW^Hm!I~O4d8Epr5#GB*Go$zXeH@7u5<&|-YE3~OG*=UMsLRKJ&`^8*I z0du+SZ~qs+@qw^^XDhl1c(RmAMe86O~CZU@3tLtmmV+qfgv zTx;knF8T(hzv`mj#q>EBy@ctnx#(M&e$_=cGX0v1jx+sr7rm0{Z@B0L)8}3EYNo&G zqFb2$6Bpga^tW7e2h)G*qIWX=XD)g@(|_)w?_~PhE_wsg-*M5sO#g+8-o*5GUGzOn zf6qm4Vfydw;C^_K180B)A5J+AtlX4}mE6+Q3dr8mJ{d1YzFISS#*FP)gR zW#AR(EANEXO~#09Ih?t0y@27ClT8S4#-UKl{M zqE)C`TdnoFwJyEdKJBCRUfbUG*51qg-gD0X&p(rYhCzhq$(jHB=RfOrwr_bq!!9zN zKA_P_ats>HNT+wr96!@JzUMFXmma3^HU0_yi88#vKS_pD{8ME(-9KH1GySt=IM+W{ zhV%UMWLWMmm*E0HJ8)R(uasdGKpr@(_AirRjen&KSNT`VaIL>ihV}lC44eGTGTh+b zAj4LFy9_t^J7w7Ize0vR{;OnojsIF1Ug!V541eIiNrt!hZ$oJG&3p8|d1F>)rYpEt zPEf&Ny1Q5$rXN-urBUz%x1Bpw_Sa4xvm5g7OI=vDHYk_hdC!jX^Pmz07) z`1Mn;6#oD&;vC8*eF-g-?yS?XJ?WD3HBn^CQOV%HOcaNr6md8yMLc69G;YjCO@r5* zGxA@-2U){$gVT!J##f-tb)Cj5cM=O!*E(%}D$#^(%};$^<$CN4%&f9$ATk-0V9R#4 zz*~d7IOEnDNDQ--p}3-&LwOD?rxPIJOIKyN#&y-FtR-f4*309S^h=h9>#-Ci7gQ^2o3d^ju>6hSt=I$Jz|aK&sEVEpUNPw99a07(sQhxHvw%r%OXz7(Hk!abMbuNd}gK3YLFc(YR3ThG*atWrIBnS~Rx1_?d1 zR(WWd0~3KzV;B6j%B1U*g)`!ps4i$wFG331OzJ;lAevM(-x2dFtdmdUInQk10qIcY z->oVN_O6$wD|^>iWcoG;e3Bv48}75>k?A{AM5f;itgTIOo|PDxehnOBb>T{Bg2G>| zhTs}2Wc#(4CtbKIW+0<6n?r3407t$4G%g>?_h37BP*;yMfsN&E^>p&7-%U4p>1NzA zJqtr!o%P(E@_Lz)GiZ6ev|*ST_e*zs=a@F`84oUo-kN4^!WEsvCr$K7+%4U%j!wz6 zxu2Kg@ngoF?|}uZ9iH0u6s0y2ZR;+eZ6)$`vj#W99k6Y+;BoCihws4U&mP=tuN}DA zV-OD6gPR!+B2u#beS-F3T0NP9x#iQ?HtlS3`960Lz9KBPmxr)U9i+pyfC*{Mt=wBj z>6vt%r_X*fTc=pd)92~ODDIeQ-^F~lHQM*0YTr-rnpYJsJ~Cj{j$=X`q!ZebNY(rm zRr6PqAq-fonyR{`e}|u8!TWhq2RU!j8#WGd-b&{~@-MBnOnfMoHFyV+bsZbH=pGoY zzJZkQbAIbuV3NhBR~hpg>+WS5FuCcY)NF|@vew_yCpLHspL+S!`5&=H$G?XQh|gfc zYFM1Ep+9=*V_2_xrGsa^=YFB~+&?Aoisj-NEt%l|1s4y|qP4~TpVR3t^cA0#rgYVIbzH<=Im>mT#>Jdh9JxK2R~SSr99$Myo<_kynN2&UzH|MRGXF(uH&X^-ldgmjTE_;I3X*{nuFTWt*I7Cw*tepnM|CvC%nNu8a9He>B(_IjuDns#W zFki)01~a8EMxu!*t(V537S$12ju5)6GocU&=zCZDbdq@7k!DU0~dK z*NAMbD_yLHPUP^Nw-!pGWAUd50_A%AX_VRGPcu}ATJdWF;CosRQwJP2bn(@1i=*HW zU3HMQhA9W8FmbV5$*mE(u3#r+^3|*(+gtna$q$S~X(~~*+05WU%E7&lFMAQXyO*~5 z@5RG5`LN0VLwg+M`_2(Tt}KC0&KM1lb!0>>C(?G_3ZZOXE!we9(C-Y zkx(JTk6h>qKI+^<*)l)vWUvo9=3$X3vM4OObrAhbcjs>IH?Sb?406Bjk5D8C-BQY8 z;!#0igpP2No;yx{m=-+ebczVQP!pCK);Y(i!k_?T@Degm&o3i2z{@~%MG^Wb2hF`y z5Ole8{@LyZT?GG%&}*RYUqF*j)tBfdJ~7Gq;+|k5*unC5d)^}RIKeCtwgT{0WD!!5J%M6(Ig z*+$wlOIlT%rTppxyuu4-gHr|8Dts7y>(GI;`{17rmEO@{DXX2U*Vr##PtttdI*8`$ z>6h=>vF&x3ZP-qW%;u@|ao<`)3Y^}V*tfeOlX`SbnwnLRjrFn(9?7k$O!vxz!2|Ty z;=Qzu!@my_f5pBKp|63Scd}2$rF{WAO}TV(--T&|iv1k14l{OH@PHUFDD6+XXqd|B z-dzN9lGfui8A0(8;Tb@ED%F=ZsRrv*8JtR$Zdy-d+K*+uWh}L_uFq7}$ovM3rz8iS zB>EchX$_wN>ST1v!;03&P>sFsO{!UuDPGU46%)|HlG$E~Oi;gq<4(*g4O-4ryKA z0qxWYHkYwUa0`B66l;P{vJ((BHC4#E89iXAbn423~gi8Dgiv`e|B?QcavQ8J60^Cp&WymPKfOt|QlZfGY845&jh759hly7x$g{3f*@c z0(|F6D|6?%kd*%v)s}g39RYX1<7kkd;zxvPu*VKj6|7XjA`Vv7$fM@@FdD(EA0-|2 zyh5+iYT0rgm3S*-9O<*s{JN-~X-Fr!NZX2yQ@H1&bid^7qAcAv`8y@p0k^tAbxdCV zAu{ZkFors(8T#V&U6qsW+QNce(hdzd1swgel1G6Jv5s|G%su0`XSQdw*PqH@A?g-K z%BHonB}S`+bJ6PXhP)*=7Lm?KU?O=a02{59E+s53Y#NF5BePo9uII<X@v@g%4ktp&zhIqu)+zEX^>@J1qr_o9J ziIZnFcghD7T21aUF6=Uz&k_T?7S%jNOSJ0=!vm1CdhjZ%2NTk<3{7(MhpUTNL*+zN^#K-fcH~mKj#b`FU!hw zGh{n1x&___*Ox`%&*qxM0ai)K;E9+{@Y*@^S`R_J&;@wZRE(o`)5ECk9?MkIJ{uoZ?bw^72jvvaHNMj;f-;y< z)AdL680zx4^0aQDt3E|n`_#BuUOcIYYk%VFou^)nawnirp9Y~Hh!KTFki$?o2RBZ6 zenr-?%jGk41XVj4XH01!;wVLGI{q;|hfkhY0tyVel-#_aI_kx5$ZvF2uPst*38prOgf-4cs z*}zT|6J6w)K)E*2$u+A-n_XEfuyW%quq>0rg6Uk|u*JZ4?S^E+Uyo2qII88c-PVLH zyN&M`UB&>)>13O=&0wFIQJJ;@6ZE!pr)&U-@t!Hemc&lS0B zTET#w(qZo$IO{n^nbN(5sq_?8)GO4cYD3b1hf|felbnvJ;8j)S_ezAKkWu`v&Eku6 z)eG`=&=6E%PK4I)mPhqemx3l!^ehGI3g zEDTdg=@IDbAETj@VJ?;falz(e7th9 zO$*b!xL(SS(6z|*de=_)3gI8_UEHml;zs2Z`>gnq0F$J9;o*}9jQ&#Ut3p$rREFg4 zytRS}E`w?4POfycmv|>Pos%kPx+2x|a}D~-WBTK!0=#Qr$qVG_B~M9A7JMo+Nz188 zi-~E4gtbu3t0*oG4!|%+=pIKczccFkuKBHBU#(ph(sN+b*6&AZZzMTkTrKmtSGG;% z);v%VJaO_X)8vki7&e3cpixzL+_W))f6yq7mspD)X`1Z1Xe%m_iM^dm4VEKsOyC35QeIS5a77E2t8U9qnps4O{g^0fk^9lQb9w4|L>U^rWW;-rk>z82h)ik6Wjs-Mt_bNKh+=t`lwt5i*>@j+dSm!h(1yOnQ+ z(Sg4)Ut6(RKsrW>_snV1!&L_}tCjodCzU#xqhT5^241dH7XK{RL5txADr+Z|$E|2Q z4BTNse)*IXXKgEU1zZ7VLz$buAB6AAJjDS|z|Gw$yD;FkE)Fl#C%PKDc-*o$yf0ra z(QyW{oCOzpSy_4@oj0G3KsxMV*P<@4iW31LeKbNWC^ zpayDj#pvo*7Z7;e=YD<^N~9o5udwoU?VvE--}`Z}X{=C-4JChJA)*~VP_Up?#&Vry znR^cra|wAbGt1VUe{bn6{bjp|q>7|2(HpC3aKt`T>4eYq=tU^v?G3E~F(JRY(yoOLeJ0AzXi)cFf>h1eEkhIIl9Z)|LDeNf;*++%}6R-x5#y>wGqBM z-o=FL(r453uiPTgR zd3RnXVUfBa)~w>`p3!-!w0`2O_fhrl+NIOqNl?M{L4v(K45JIlpQNS!w?vU#H+m29 z-wLX-w~eyBby!m=b>yA2+&YXtX3J7&%z2}$A}U3Xdflu7bIxfV_3QaK@G)W<-*;W) zFtZc0N>o)@y1W(`$PKUwQn0HLr?EDyy(kV)laT?4$EJ#9 z7p;t$0|nx#n!+thny`eVPGT!>oawn*l=E2N1{jGJ#kJZgobYVuz?@E)KG9l|3I758 zg%_Mh<$jJ?ED$EWiMwHJHc@~%Bz*$~gu0^SAH z)&6e+GYf)dJ^#K?d|9_?Nb5DVmF3=@w^Q549kh@h(!{av0Rs0=QtJEpmB*ekcl(1p zj6(TPFyM4ZhZN=5s#&O3Pz)XiMLt76I`c&`x#adQAxLkZpRS~ z-PT^9afE>4x9EfHI&n}v;w6B%a9+STXsl{BZqgi-Gzbm7)WK^8%6{#3@h3+0HiSdq zHE0xHWaJe^6UL8Z$l7FPsn)t`^h7LSb2{`|Ncs-T&Q__&78WK1;Ny~jTvSnw^OIK0 zvT{RcutG3e^j-#3nRI_q52zG4?YlAVA!<|2Y%TmL%fm)LEzh{fqg`(hQTMg;Qi0#w zINN0YQD^Ls7KcZ~4m2);P#F}b{*yKF2D)oWr99r!Ba#P+O)Tk+I1J7 z_X^5-L1NSG7a%O3O$w5~aVZg=wu^RhcfA-cx{AjuA3|6(E>kWMq*5hROep6{vQ49$ zTU0);CT7&379kSAgtzR*L(Ub+ ziE_JR7FnlG*s6JH2TnDNa;`x2TW;(L0=|JkIm8~8$@LZmB1W?G zJ1UIGTn*Aj#M&kf+aWwice#|&E-q)Z(N>}j1EBaTM&1`#AQ>^tn61J;072f06^=}gWx;gywki{jOd zx)TRp-c-&Tu5x>Iei9ugSyaLvxCE*@H(I<=Wka-J(R9vv=1wXaH(OnS{`F^Mx-}=_ z?oa7ksi0B>Tt1YN+MfbCWF*cIbXWjsJz$nLc8U8uY@%VqULIz-TQ))-&*VF*>959K9Ebz=*mx+j77QK##FLbNCUi`GNLoWKJ?qYL zS$H#UK!*Il2h?JnTf< zl0)UQqDV=`%P%a>@sPc#DT=hh_hc<9!5f%GFF$Y(wsau9{EU^ zrM0}aM?0J_8V&5aPTI|O+-Ujn||NaH!?V@j!cx%QYsWrf( zY}#A!JDbur8fMnt?@r^D(s}7Rai7thwgwpVpG!PtL5`^3$3mINh0*}hV2f7^;0Fq^ z*<)PfHFn38^+Vy(aO>fUa8<%W({lenVRAw4ky$W z@LK>^!6^%5-t&BIr5=jRT`gnq*XL%A6WZ`jA-F0c>)+84MTp#59G5C+ME7xi0)q*pFFQ!dt9kJii zg;Uh4OkE}`0LbR`NGfQ)I41OzLf!Q470xpvU?0(2w8#*p3E%KDFaL0F+oIF05;L$~ zu$u#iE3je`P13(D95W%N=UlkzO};$X7f2=iSGs#@BkgA(aMw!9ex=a&6C=v+g7Szj zr_n(Pj}Woo&7!9~JzL!&%^^o(=}Jm{j~uL#@_k{v%7pumG7eywCIYKA&fq;j@>dtn z&z}^P+fGX6%>!Wo2Tc0yKrOaGV1_h}(VSUmeiLwrg`_wEY(4m9fjPNhAT5*5<(zD8#gNsbcP9+sA)nVt5cbR@{fPI?j4#8mLW5E3Y%h9+q(auc z(Z``~d>ejNd&E-fp`0?z^ZG%K_b>D`5eH0+a#SP4MAxFi+MGdv#G*pj3?EK2G zG1DtxNRa&QcARbH4-bV8x>(U4Za?&*FqS~eHZb{hc1dpci#RMP*vZKv3eI8)8Dr|F zPSFMXVR~-9xOzQ_OIuP_gEd${u;Z2w_cF=w5$5d?6)VcQFq;*l&OWMvd>B7|#%ja| zDpsaK(jl`}Dts8R*nH@9*$4*yQ=(_N9Am4>dNHOg+ntfG8T6!RNKX@VMRx{cYMjAf z>@=DsA|Hc&3~a8vWRg3=#7X%63Pqom4CwFYyvAp~3|eWbgv6`|dH<9cns&n_yz{u9 zo;0K^S@{pWI4=n^Alb)GocSidLy40X8N;&b#R-Viq!gEY6k%i+%^*THwa(p>=-d3@sMi3q z(m*%%bJyNZ(wI%W*orLq45isVs5$^)uMl_g^@WGd?|f{{PXCBpw;>JSA2HuqkH65> z#7bvB=!C|`V#}vXkR73HLWATfZG5HRAfD{|;CKG2Kq7w*(^`-@ok+ed|?jL@`K0BB_mYcRpcmIuS>6OP!jfii8&C?65- z>$NCScN&>A52(0_?2bK|g$Z>Js_+Aco5~c~$DT#^?^|FIkE)jpUo~lY4q2yZ1^mCH zh|(76K}Ym)?*sF<+HAx=E%k(YvSB+lji>7TicaGyQzzDqtDq2eT1M&` zXjLU}I){B+d&VBpL0Y#zRawKYS;ik_sX2re&vWcPDWA>{w2bQdv#)l^AffkN++h97 zZfjXKFLfRsXw_&|JqD$2pRg#n45Kl=1iy2W-HwEhf2^dQ0bjmY6~?TuQlI6yyP zKJ0+Ek|R=o3zUUl-7y58AitzcUs$DpVSjj#E=g2Rfp5hT&c?nvOZ&|$?7~9(D)eGK zHC=LWEuP*&0cP>QRm(ZN2X}R1rq5gn+9z%V9%FaTT=6*+Lkk>hsElcaTsJ5(H&Hk1 z72jJs>q!}N#tn}&Q8E{foBp0#lO~`1UKYv|u=@%g%{gsj^^D#Y3SS97orHabd@B~b zC1+Bn;=N_UcrV`mLAY=cdn^v(soHY3QjZbJfbkZs3eihUMIO`w-&7V*EC>9{d(vha}aJMEQO8}JsyhA zy3ltSqOI_XN({>`G02%|9B~;hB8xdz2N))y&d(Q_V z{VDrQXKn7luSAwTAq7x9bD|kF>uF){|KU8*rF8Ssj`zjW0O9J)CJzC?Vh0+XN|9;c zjw|e-SyqkY=i6H&7(b)QnSAvx@PJgn2i-Pi4JG~oq=u!Tc|v7HnirPM8Iv1j#PL9B zZN#brxdD1Xj_qC8@jOMtz6x23JYaV_M9kG?moqmV^7|rGiaVBgJ1fEQfL9fnp*ji~ zmPfidH2o8hWC1SKe)7fG<)7@+RO=P@JtSD8Kj|&=Mqu-WAF|SL6!B=e4mP70Wc-$j z?EpGvdrFP;)bd6*eKTv~)UfjeOZwyK0Xy};(=d+sS8tV}Sf2-&)Cmr}8KTVrb&L3Y z^G)T|+&LmGi>!{KTBwQrpT!00vqJyUIDqOzjoFFpn-cLCxyR2HoatoxrS>@ z)(bS9RS5Q!`};~fyRp-o(R6_5InW1xEW7iBVGx2Cm)CMoHoiba)Sz=_W2$ckUWh`t zk$)D`_+`GsHllA?0&6M+hG~B;&?4YIwtMB5?Ulpa{f zbTiD)(fq3Kd z@3wu%8BRfHWc5bt6BJ-w6StuwGxb10B`@d$mRYl3fgN%Du=`9NyxZIhRTNu`S1deb zSE3i5sZh1jkUwByQuO!1qTg>M(K`(sImD+o9Zv+Z*0m^MzkN+>=Rx7+XB5O6pII8J z72m8KXg_79d82K$-s$D8V?}s00S3GM{AQ6UVZU*;CwZj{C*4tT6l-Uy;7J0}8m%Vxkc?o*n5pYH^;cu$xjs;lkjN7+E(LP!m?gPmCYF^Trt=iHH^t@c@T--f{c@Ia6Lfn3Q5{y!hUP< zqzOxEoCSV(ipT~^Szf7bNR_>mp|y-=*1@oxR2g-}A$egWUCH=UL@Ic_Aev1NV7nTz z6#P~BBIO39TX{*$!9riLVZfI)ua5e<2V%t=eS15oJWQmE8DY($*U}Gj5CWQb_vFb9 z_TVc{*|FTLAH$hGEebILj-kyKaybrA(w%Y8#5L z((J2Q3cf~8-u>cY0%A#6v(%qbS*F}c-aSZkM7c<#GM`#}C0ekupGr}G;sXn_su0;M ziSps*d-gX$Fke*ho+0jKJDfNIeqAC8d#ZaZ$4;&u!1%qvtjO zdmk--pwIYKfFkh?2y)O-Iz8aHtWoUAAwy!-6~dBhv0d3F{D3i>DI9^)kAcNxgggcj zvw54L*=DxJWv(CYIsSR{P<}fd8RdA^SuQ+b9GV4%p4Box4xq!On`Bnw1S(@A``mE9 z+cq&ZEyWU?tNWcZ*J;=N!)w!4GQ*=T=4h&;!|FC^foXC6V(`VO`lFNQi+a8@^zNGW z`PYndWgJEgr~|WMQ~EO6xUHqu(=xduZHrp{TE(TsxUEM2rJ3rb>2f>!sGCL=u~4jb zW1vU&&yAu26C>NcN(P%04<_x%)_&iuKF0WgkD9+o)5|YUpFZrzRm-|E@YwcKCv@;1 z`*Cu?g)-@raTH2KWBFQ6mGF@d09Kq!ToYq z5b|>I%a1KeyXzsT0E87agJr7}lrErx9?l3bOU%72{{*?!z450x5h`^267B5lU1<4g ztEt)aVQ9uItPiWq{}e%Bao}~Nu`4N($WaJNHfSiCRGlHCtxEGS($Q65b9&6p_9`SB zr~REQV-mdy!ar3nAvyj525x=iCGzW~AtZ?d^@zo-3!VnW`LNnys zO?1`$L!lGumcYD_X(@G)KVvOL323f_W2nK%#e@h6Qy*zQHQv9yKpejA$aYuXTzp?H z?L1Y7lGZFtL2YMkWxa)v#wO3u_Eq1PL=VCG>L3YNf7br)oTS%I>o;nSp*BNNrG_l5 z76=@%pllJfG=zc2+g>{Zf8qeEESP^7KaUt{sOq1+wCkk(?u0@iT(qM+ZfjqecHoWN zRfmyjCT_WbTov_q!f>2QJBmVh ztu(TpU#?IWVejp&$}cJ;ea?cc*QC2P}e=o4r=4ghQYipMljKestpc$c=0);Fj}pO%#J zP*t4;j>ME>QI?%KCQXHvqdQJTmE{m!^W*^X5{r#|@W}5=pzq*fHODTAZ|xnI0ko@)nOK;z62=@+bMk7N#7A?(i!wY4#*!}6SCSClcsW7wcBgpgwT@soP+ zBO`T1H-J8N;o^Pp&*^w2O4|_W3J_0vw`&^@U%5@QcUtKqr8YsvZA~=V^PxILJyt63 z#l@!vJD0#yO;>q)Su=0%ug_Qw^N-UKv+-$!Rxz<7 ziAOU;ZvHT4hZ$K3)^Xyv#`}9{cQ}mvl=+`(#7z~t*#E`~nP+QK@|(^#Yjx<8FbS_| z%5{b^({|A9NX;Dw5rs1M`RMl(@#uCT5{b&r#ADm4BAWYPuACu_eH1yP1dyZ+cc$(qaC{xH*1<3A9gjZ9c@o#?N{ zt}T*d(i+Sn7v2G7Ny8a=R`IX;L#vcIkMP}rg-Z1b+fHYQfG+El0P~UEST5N}32i9r z+N>CLV{;u)G0^Q<xJ`te-rsI=N5 z%kkCyb%}-c%uSLdvvV-#g*-KTor#rxw#%^LgCS>PP+Ga+`L0KnlJLQwo`Crk#5APZ zvRIQrt9t6smDwn|(OL}QivMAjE%88CB;nf6S9Ja1yV3FdS{}~H3$e%JfOtLj7k`il z4Lruq76FgXtp@>)00K{lZWsg6;UAwE9R!}rM!SaYS7kGWb=7h>tNv7v@7b$G-)itgU-p0B8WGYb1ts%4~e*9MYSa*eiai&fNtPPdWGWc}7Sf@$tP89ZZf zWo8wLgRD};t1o>`DhjThUM_7Kj~cS{8Uic)nMcD@(WzESJ6p#@ZRc;YVvA<(!0_8X zN&j!(@T$*SxRj}pVbdls?~VW-98E7wb>l^An)*sY04o#b0T=D$8c&m9T5) zsc7Cxz0NIQN}BUQvky<$Inb?)7@H){{3-h?huRyPCTK^6tt+tITCWOwCZvVuD8v&J z!!fzGcqX1R)7TirZ0~YBmuDj$uUun$f35VSt=Y*r0TfZF0G2bGihac;B%^E-)=6k) z?Q7VMPYb}Qsw$QAHqvfu*NkuD!W5?EUEGU(+l%VpKAFa)%G)KEnQQ|bb6V_WDdvgo z?syAZ-LX@}JjTcPky|#L>^?o6z5=n9>41Ju`?F-IDir1FkdFAynN9a*M&ms*bvSKM zf(;+NQH}3F$mHWf`u6YI@#%mQO>7AKiM4+@hGPr`&^AcU)XNuq>^2_IB$WtWTId|5 zw0QHa+Z^EXEe8-L*xO7oC&8iBY}2>MAH!C*cD%Kt2u4&{-_1Yt`$ zAdE!Izb7tE^vPHAkj@o}C*_No1Hh}IC1<5$6~Ujcx{OWtwjUzL$0Zvg7TaQ(fWBOD z_#V(xmfuS$CM6jQ+|zTg`RVU?7ZpB2-oJ&PknJxFuX`3AwDIR@go}wMj^ZODx+mBZjaitsY(@ptQHrb0OtBBtx{f>ZN$G zkNuF48oiw9;hzrpXt68TW$*#S*`%ZCk7vI>SLP-35024|K%`Pc3OEy46sP#i8|>f| zOhsi`xrseE*j$bTRx|ZeB(!UMv0NRGt zgZ&Qkj0u9@CKZCN3)&UOSfaOudpo3O`*6DqpqUCUkG%bQs1lBNSxbZ)cG9;MD!DF>{?=1<6!LN z)j}jd*@!f2BFGe2xT>>wnl{^t=k0Mj%?WkrVTR3zE%H28rUJql*DkK zC^V89hKLqL=V-0ma;{Oe-Dv z<3hV`k^TM-J`>ubyA^T?3%y4>&{EP?!KtyJk6zL~HK@^CmNHyjwb9W5(meR?x_*!f z?}2us(ZY_)g*%^837cF}(6I-)05%~q(o}9*mg&W`20ij7!PJQ;$ z*ja9RNy(gC$UzW)&Q8;G5FVO>Dunh4V8xO?Rp58Ku9LXpf;7_#3j2WY%O4tujIPRR zy9F<;!Fa9et)bC&__(hXo1)Khu4z57u8L==t5S1LL0Sp_V_O|MVr_@!00k_GV-&#O z+4Qs90l059nP62ulq@S$8YrwbyfGI!`$#fZ7N`JF1u%7JAwl6Gs<0&;TTOR{Qe1LS zGWd5qIrdlXEIuc_tAULvzyTdWsDt|KKzI<`Tyh>jW+R=GQB+{E#=Y1XzwlrV= zD_5tSSWZXiC?Ji3$;rzNk(e0N?+`T+d8B26zc;wG;xDO&_5l%ra!0w`7u4 zSEf=m)LkC}dOyJ4K7RoV8#uYC3LW>cIWnp3`?^UxwVCnT0jt}rd$E`Kq+-J2S+Omv zk9y8u!>{(Hbe4m~>-Lkk4_cndxcn*s`YIRhk;qzJw-ac}Qs}^VSN?!#Dv^B(e10ke z@;)z?GcLU^eRnub_Ho9H7Q^Ma!OrVQZCR(f(0-e#$LJ5v%Yps?SQ#n*Xjk8Qo2OAC zufXJYmXz;dK*~%3P4-&0iw2W&=!Bs$T|!T>_h@1+DQyy9bZ^0_(_37G<0)VX`OrIl zE!Dt;*;**+zQa~VmRSHQ3~17ikxgi?g{?>hTM?$i{E#!&D4U%#7T|UhaAa+;INOS! zkMM0zRru;yE$yC2|B~z4Q)md+*)Z(Z97@qZUeU-(`waDAb>n)2XG0|{O*4z+ zPylRLFn~sPCc@=y9E0jI1E}A>n!>E=ak4skq<#WQ5jCfC6{>i-bYY*`gwKk3VI6>7r3%j#$4NLdmWjcwjLMW7 zNkQRhAx74@az-rzLq~iK`jp$hLbpg89Q$jSlo6BVE|66|RJK!M2>ae_BP@vZbQgVb z^zK&kTC*lN<%~+VIB5^f+~M)qJGqI=d}`-d+3`Y9b?YiT)qz+{RRx69k^gZxOCbXm z6u&kIO$oLIVJ;nMb1L;1LEBM(p1#2`$$?brWk=cQYV1BJtpHm5*WNh4^)=*WQ~Ee* ztQ-xiBvNlzGrt(bh_Rrx=jCRWLb2*nkum{roL$929kGK>@pT3xZ9xr737W^TO!IDX z2>Ce4z2D4dvs#%HmqL4A9+I$Dc(wWT-O(Nn4w$Ja^tnwX2B_iLyw~1)jSCtpM6% z0#~-JTcyDk?D2HWuGV22E**)FR2fF_bzcpW26-X`8?f;+HlAD#u>L_kMLyXdk8*Lh^*Otnx=kIQhm375odQFwGuigDDOuzsga$@ zxP&=x%gVL$R2SDm-@@XUSxwQlOQCI4x~w)Uy?dN?n~~2*hf)^n(B;Z=0q@G>0q{>ilhi0vhNiJSv5oQJ47}~{hf>>_5xn$>N3=0rx8Zx z6fH(uy}DBGsR}opI)om2x)oY+B@9GNGOwaeg zyBKf~q`?{TKBzYAw&Qr7_q>IgY1B;sm+46o@BF*W_FHJkveHHzRjrC;32*-T{7iqE zCT`kP^f;0{Z!l6g!>Vn~{{ka2O(83B6|pyZrmDPbp9J&)Y^6I+9*U%7l~3JwCJ2>Pavd=d6@m%#eAJF`g4&6}ZuJkb6ZLxv=F1)T{l?Hr=!V;H21xK?m06O3wnE$Rf<;~T zVVowhM6C(E>yloIs%=S2SjVi2){#;kgnFLtupt$Bfcn|r|BZ+c{Vi0*`M&I}xl#|7 zSh*KiK1zB%Vm7%#omlZ}G&rtFlg?SGZEOru||E^u0jQzJ6_I?%3dxSC*?jI=-S*k_*)`bAeX zonHi{tLM7MNm~vjyS>M{?#*`SEH%MLU43(DwX?Krc+IGdzO~%h(lsI#x$&|)inZ|~ zm$*AyOw-=caN(C|QZB?_dB}OfM?`8WaQ^tvOlwgo!3IQASU=wcJ{kQMEo+z7kXO;* ze6wtplEKZVM;U@&9DcJZ)W@$ScEs=8I%o{1N;ioo^Mm&FzMMZO4VFOTw$O+4_(PKc zQ(R<;?Nff8Z^X%e!oqC@8DsashtA=M8W4+qW_}e^*daM?T1Wcq;*v6v zZc=2@UL?)C{e7M9{KO*_SHz-{_h7x}df_4yEG_mafYva~Q=>|~B%814_dTgPL8_Kr z&Dnz7ekels@v~ z31=G?F`&Js{3uJ25PC2NDP}qK>XBeW^mNMk_|k+5@mVisClJM66bX9i91$prF4BXs zQ8KI<&t;TR=5i)a8@^qP9RFFX-&qbBQxTT8k7&Vx6sb-ZksURvCE_6X0H@w7_AcKv zn3|&DD?x2}ixC_hC2^su+*FWkX3tx;pm5FJZ&Qdj^d zAO-FrPEN10x-OROpBs66M5-ZyJwhGYSOUPpp9KJTKJr{>Iv_cK)W4}fsZgcBRDY;| zsQ{@!sQ{=zs3fa+i*?Js!7VXG&gyb}4&_Bmyah4zn0kS30loeN*nbiDoeln>4@ecq z5`;$hYk)#8G)WRoeEiN7`EqxJmn}<$hk`%~M@x(XPl`YaU$VPg=4bAQ(Cfq(m?9Zw zJm|0wy)U(IWt92f(33!uVE+woa!ou~G-y1C9IR@HT(1PA0;mE&15^oG39$Hw2CNcf z@$TAr@M(}TwlnUM1z!!e6`>Zr7Q_xY7r>4=7vApgu138X0SjRsNNv)l27Dx7Ge9$t z%b)c>oB$nvuKc$AWbWH=`e^uAb3-Pd30h%maqWP1|LltNq5`l2*eu5u+2DWU+^Ota z57zjrCbwtBafZ4g+z@O_e`4I>1RUxpkxP1Ok9tdW6V>xAVy&7&B}ob_x}(8>R1JbONbB z%$isvY-7w4Y`}UjYf$@eLq?|~ZT{ab&OL(s_#)1}&c4rm`@cP)&L5HB93i{ntz*cO3-XTjGfgL!OY< zB&#on1&FXLBpF($IuM$%3IUl9P~;BV+xd+6n@at0?VQoAT*2#avC)oXBog->*38GR zI$9DhUjl;ESH=AqAq+%c{?FLgINLyiS63Q4-2G0j8$kai zfz>ACfwQ0FrVm*zIE+BeoFtIU=D@5BT(zU3_(Ja$H(t)GuHL1Mz`LUUYdOAhw=~pe$Obmhwx@4lf`6N_TH=JR#4&JJH2OTR zE_?~Q*!nfeHLP5#X9X58ta^67waX$a7&#VC@(iHFDRAF0JIE7FXhmk2@K~78*ysO^ z!w}{*;Aeh<`Yc6{tVAw3NWT@*M$B* z9G1bnbJ!wv;3l(Rb?nAx-$`6W56eng)kN^rG`JDF6h-hB7xkA}5MD?t z-XlK|E-zEpT;_p%xx%A zraIkkK74L|z8ikd=(m|(IR@QA&~7Hv?_lV+Nrs^eI;A5~2i-PiR~z&@@rE}B-S{J0 z9-#YIlJAoH+?IE^j!fVW%%`JxV&+a79^Er}WM@wtAJ5KhH;lM6dC{^$SMtZ!Y?R3z) zNVsB-?zmV=xJ)-3-LumI-DQqV->ITb=m#LRb$ZndEL`}xTEb3L#(w?Q3Ju#>%&i&2 z;AcSYHfhpMj@+LSNoRZ*w5Mhv_5nhOR^3fIOm1#)~mB_?Mt>G$2O*3-K- znM_a6R16%;*4BFa&3zJI+)m-5O+$CqB@3urlpzR$JwHf z#-NYp1P9V$ziIT3puN@MLEO;YXW>EMhI);V?wN*rU7X|nj5l<%9j;yLm}6|4{&^#( zzEO?3UKvKxMb|5->pYW%!ncJ#r1tL=j%@+IN8#Tl7}Z?J{B{DrhvDDGAKd_U55c>E zJH+U!{3Pda`_q~;Wr(mq>e_cpMIf30xMO4tm#Zm&D{tFwa_edamGK$$r#ke>d zo5X!u2$R?Y$21Vf@p{*Alfv1CVPSV(C0ycYDemLi2*XAH?Bfo!_caX602}8s0h+i` zyMWf^XYeC80_}f&0_{fzUg3%cx=DN@!8kA5#<%bzCHq^M5;rF{Ea;G(HcJR{`zWO3rBK zE^*?@^i4Mr&GXDAinWL@IRDF69JWv{tx=A$K)BhVjQZkI$unIA=L?3Yn$3&(&F!k5yQe z$*CrU!Zar0*Nzu(1-~*N+4fKL-@zh;IG>+ACV)LZ0%>f^y5KDB`qletCn}w&)PyR! z4DqP+V{wHpeLyM~luH42HcvGi?Fz!w1hCebmV0?aWgu{vx`@xC320>hXtNV(`xS*K zO<`Q5#$Ck5U9`qs{PLk~o`IJ~nmay%cAfxp&d9rd#nLAd)PB#sPK~A$=0X~2DljNI z3TS_hwD&^LW>_qOJ#RikA3&EDE!*HJ<>V>d2;w$oD~JdFn9ThaPPy9mO=l;TT%&Y0=i5>`f2K-o z&nj7zE}fAoll<=zxr(OcT1;yezvNoHCAP8=i)hf#e;4yVFrUhp)uiwuxb;l#>?xDj zZd5vfS9BfH&P^(@MU%gHbs@q1=e!xp87%J_Z!v3){K>176WBQ<_j*#G3`(#J)uU)6 zEl2?s*qLQi4RkR}-O}}U3~n(CA<=_p(HiJ{8jIW+@w`}}#WZgbihnCRNP!mES>=4b zHh)H;3^kzrm!8|^BhiDtR5G~TsK{m}Oo0~E*)v$;cRo)Baw*WxWB;AA4)po6bCHZ( z$`7U0`F{BNVnQNMhAswq(3$4i6(C~CGgA`B2b&1QxxBweVlEAI=?1W~e7%C{%`h2% zmJeOvGAH5SBN@Fm8e>7eQ63I+CT78)lepB#(*V3cyD^@2V&y^s==_*3HXWJHi%Z>?u6rapHc-V_>P_Yp;}O&H{ujm#;VO3|$GQGv$0s@`gXmCX;YczuOoHn&BKG zUwgzp4Lb!+>%JnO4O>@)var0y)0UFcwH8y=dT0p+=3gfeTae9~HO-%Au-aa5=0|e3 zg@^EOB>K<1<^R)40?iLuZ~Nm}qf2NQX~Pk!C$LsmM;M(jgGgH@U)S~9!U;e4u#Z#R zgUZKZYoVQM7%e#mwpt_GF}M76o~k+5#A*G)$k4?@2p&F04JF#!pwNRpL45(a+ranH z%znw!wRo@;l0Q(EH}9mdKu2=DuO#J%)a=2bK--SrqxOc}xNl466s97PfsdN12@y%% zjz6RJRr}1X7n_#Uw zL!wVf#OpKP>G0p9LBEdQvyraqwZ`2XTI5~qhs<1~@v;eZ%K0 z`5*Yh8; zDN!QUhNuX1EXqU0xBea(83`5{AC~6{Xd*_!rB9JCBO6fOB5p{ZnrHNJ>K_<6Su0>+4m5|?apLt5h%_FYO27#4*)pc_Ki~=fxK5llb zdr#jDQuqb;A*2i>vbSYBOO0gvFns0BVk^O=gqMJSi<4;9QVzadJUk%m1Ey%Q>vC&}q{?msP%+GmLgHPMM%OO-P0negIzC}*dN6PU0@di* zRZW!zdkV#vxHYZw( zEUPfi?=Exa+!qtVLe{M22~=xc%%J82Zk+- zN?fLhV`03NlEc(UmFlL9`nG>8!%lLDunQi`uaT31IEY)>3^!xIIb_ihfGr=OaHeHaI3K0N70&B5&2dIk;*j}E5#RK7+$zo!)u zMpQnTU74QVBORkXz3NGH!>SN0$mY{=Xmt2k&;EgwfcoH>$j&Sp8 zRW(S$C^TXbDgv%rT~e{PP|q`nVIn0Qg)w#QUOi}42aZuVr)T4E9FB1dX~tSB;W^If zeQKks3c3?pR`lMe2c2FwS3ymZNQ0Fv1oeT2%C*HTV_P% zuGi7J<2tBd2tEkkp!=<~+K$H`47FhoHUU)|>t2PuWliC_a9>lTtSMR@u8wqvPc#YK zUoBL(`3}@z471wWH*f^`>PU6?waaf;M^8bd;VmzI z-f}ppFQ8HD!W9_&?#B9tbFi}h63kbE?bdV9kX`lS;=Ty)=Tk#>fl&7Zp~~b%j9gW9 z*95FP6$+PaNG??x@gi)T2kniM@YP1%{UGj!p2n)p7om9`tP3|*ZRfQ}W7WgF7EOdF zFTb0JOkRFF5uLnzv3>&D6XDPW=vasM-*5?bcP4OcWg?P@o`=o}c<fR~N zw}tX($}ZcGOujDLl}rIWA%-_?9vc{-PAjXxrFob@{au3zgj8;ogI$M)kETW+A5uga z=pRZ^q*%RAz%k+gN{>2@n~7@35tArf`iVg!@UHWhlkWC<(4?C z#5icpo8CiY zr>Xw-^k({xrgZ)7=K9-XhG?W+0(w=suWn(zu@+KsHU2-KMCrDjTer5OjG+_zF?^o7 zlEJQil^xck0XTv?1{H1&j`pZZJB&y6p$xINsj9518>3(p!(Ar4BF8QscQ*Gwy8~lA z3&_M_43&y|8n>%sSl!3qS#>G<2UO`wIKde_M~#T;w7$9L`5IrK9s9TUA3W5`@vmRx z@_2vXkn96^yF238i`k`(1JP7<@F_ggw06>i^!B zQthEPy`JThu|>is;NzIcDOKxoo6qL40|&4zd@2sFV9_*`G{E7raFn8MIfaAJPs6L2 z!uP70v)qE$)U9QP`B({WVEcXrzQ3@Nw$rq}r@s#aaQ*c`~a{_)S4xfP^WPol; z_tKO45v)9)fgfcCwJIG+*}lb_&tQPY+@hz3mi7w&b1;qtbWUx=#?eA%pZJ0Pfq}JK zc2dK=0O#?Diy^pgb#55P7X23(X!X(k>D1^^6t=2kiuH~59Mb_de;h7hil0}&qCDx6 zFiXzx9ry{{{gXJVzcsI85&98J_-S|-kNX1Fu-poQ$~)~I_%rYx9{98B#_%fKhx7B; zcYF+fL1m7cTL~?{#F_tcZr|@&Fe1GJ!+7AY!LJ4y?tUWO!)hcmmz zMn;B5GpRlUu)nRY-lSoR)+E2{V=JY=Z2f%&Jy*K8;XhH1q@K;}8tEBw!^EbJ>Tmt& zwx0eWI-FRpo`vY^Pmc`r9H&_JdF^h!`8c`G1V!(R9dh~OSqr0SVm;vj?+%9^twC(y zN~o@rsy+1x`ImvMBi`JxtE;7b%hvV|iukFrO=HB;K8m~^UQJb}LT%cV?F3Z$s14ga zZmMeJe)qZ%KBnChD4a-pRtc%6;%zX_l5R?T(uR_>MX;E_D^IL$4N{~`WU6QSxz((` zHTX#NFiBr_3>QglZ+@)RdGLGi2T-o`tLpev$u5DvR-<({uIk^Ye|ve36!M z>2fuE!O+?`pgaW&)X;8G zz51Vk#3_v4?FH@rBhQdpp_lXYz8L%?{AsR{b;)=(uRRA(xYw{3{!Q;+szaw&Cfn-OMLb#Gpz`ppBL@HE-LhFCNq6@@ z2bOi0yZi40%X9x39k2GkV29qkPn9SBJ$ecHI?F0gmYs)#<8U}K4nt?*8FdO4?FBem zb^(r4nI>~L+8&xTPb5f1bzhfS_=lo&8Dj0$#;ar1@i)M#j-7@`bzB{+M%kZjvT<>? zNhU1(R*s9aO%Ry49kt zo4=}0cSC3b-rjQ>79|s5UosQ$Q^`aWH%-9gI!ER9(kWFf&%#MQOx^0wVN;R%jPma4 zitY*c#j{X%3YJqk;qJOa;XckQ+^4@zz^~|Z6OKyaj5=}!rhX~Ktp5`J%4_)CW|R6!wlx%dLK{`qb=~1^w^Do!{#_@sTJv?GYSI(%Tkk+L zw<%+^`QM={`-i|Lbn=YP81hBW7_xc>#*pfq&f<~O@fIA@7o3mGnfS|^KB@w3B!gXP z9vD?XIgU=80@F@vka(2FfN2cxJ|7QV5IB&jj;rp&4mLK|Xf=SBwImJ+oN+8^taAg@ zVY16uRgoc8tExc7j=DviPS=~Y0~ItBp;qU6GY&CtAC_wiEb>Ve6s@UJ(3aP@N1H{O zU~xq#nq{nX>%vM{6)?NF(6yW0r21XnyhbI7N!*CL--C+!ORz}Q;l<}*A#S+@iO$;d zuyg{JyGh>+w*(|z={L!(@M_^Rb6}FwmXe~gmpDR?4t5RE9AI{WvgjOO1x^)OSP6^H z0cIlWI#4T_$rnfQ#%M3AXOcJ#Ar!%P`8kEKdy9V?()8;m%8M6@@rk*h1s=ly=X%(K;7k_q-<#_d?V3rz+ROI=qnk)le*hMP#7~EHj+gv!K|6BmY)1rGE!yMIhSQTJ(Q79>hP7x{ z2$rl4t{glR9vRE9(Q-G=Ue*<@MgpF&p%V>tc}^ft!ai(7PpPX5OhP~xbF{_Des6caBCUV}dfO&NXcXIb9fuR8~e>#M`)w$gy#%g#Y9e%zpXhUKbfxal0M!XuMze=rC`0avo>tvvUwPpG`` z_Fhh2ggX@C)=t2Er{Kl14P_h4n!?rLje5>)15R~)j%WfSmpy(+U>H@#sPDc1iU4t#ox-RuU` zAShsra)V##^>}^kt8>uD?kS;R&P6HKjR5-2u1b(RUWs=y#RSr{4ojanSf z*Lyd&-zcg$j{lbKWx6|yP#Dv(T~Ug*!d3{#AVt7(wNiS)A`}GLrX>`%RM@s@xv5AL z@Q#YEV2NU~i6M#!SxfN2r^dt=5)L7@ zZs-H**Uj(Ad3GhML? zzQ~mc@#h(ii-|)GK9y2StH@$B1Z=lzCE% zh?2iCZ=}tm`51W~80n+G=pOw;XT@Dhk>SR7_D%iL^>CIBKc-KL!RRIW)C)%6&x6sc z^mVa}%~y1x1ls&4OPgmOls2~}hLg!&OR_58N4JalpM3Ocw@b)6>8drbVHtAV>7^HC z<`~uDN$|K#Uj>E^9334}c_4cNm$T4=q;otfIW|TOsOmE%U|<}Yx)*;v8=<9A!?G?` z!DP&nzn+7u?!sRTo~t0J-!FeP(P~s=O}>S`)=tT+FCW4-P%}#2n6uC~XDxIl%?fS| zp`({TCaoY#H!^7pQ#)jJZ~EwT^Qm4z7T?{c+6nWxtGF!RO}o**_B?czY#%svW|iy! zmV)>DXjK_!l`>Wg`gt|rwItR(2zP5PtaDF$ZP2NTAE6~UO`^Q{&@e#QZ9a4?OvfRE zIaKixd8Sb}=xgCF9Rk}%?Qz8+adZuj^d?Z5Q(K_43YS{c^9ZNPecbS8$C^R^5=fX&*wPzY>(Sd%ve@EueVm@Ye0buKzMZk zzIsbKU+gBGGbt#L&gmCssAc>}Tb`lkQ*<*coxdQZ^J|Ur@H!ke?=@Dvc$+p!5qyi> z3J4_}TS1|OZxZ=1|Fn4xP~PT8c;+^*yy3YTVCFVFKL+zi zw`tL7%89jKoN|GX#}hfCds1FMLzzC~)rV+Nn1{A`9@N)>cL)`LnpX;xISnUmbf!R; z%6-ekzCl^J<+5@s3e%znt+br?Tv~Ls+}Cv9iOihcUX^?FC;9m`GBA`3VWCZuXal77 zW`NcF*22Iw;?|DZUsc*dn^EjmZzOGr(95{Js*R*FE!bKDmbOD%cfr!mFpppz_m8DJ zsSB0ib`1=m?G?PTXC(&rl+UCLRw$O)DKLhAvO+zM9AO{CgdL!w(%)cc02)07t-ZwL z)*w=XUdgQ^5gz^zyCk=miO{(jeyVdtFuvsFx8Pqo#~}-Mif4>~KidW-I);;jQY3xU z!k>Qu=LzYyR3`v{Lrd&kdwf*Iz5gAO>~2m%34wqM0izHCyLmv62tfgPM+nHP5K$l` zONb^}Og21xASyoag>OZXmk)g4gG4qU^;KJH>-FA#yuIyhtG3r(t+utj_1^ZroBqBt zbIzW#d(LJF+MrXI2Kl&R2=)XGhXO@@Y@jVBrr z8W2(bs6{wQ#P=1F-xjsNZBr($2(PYLSQV%6+T3Rfj1nhk4T4wq&;W)Jko0oxDPMV0H$sGF%6)I!nR2DNYU@>#%5t?g= znOjZSbbzwvz@C;fwA`riCbOp28jmxQZ)S1MFhqK!A(F*Z)^2mFqqJlfwZhb=1l8q` zMp@pZ`Tlg7rv`btf8kHhU3rXF3mag1ZmqoZKq!3+_Qm>L-LIok!?ves$EmPJ5+NIw z9PEA?xK?Ren;JMq&9NQYjgHkWHL4vWBwCXv8vPJst6FVl6P3+uDr{y~z-DGbb4@wc zR^Hs0&^9cY&~}ZvCvG#TO}3lVBBoIH-ChWF$;1#>xSk6gFecokKnIM;b@6mSA;!hi z0SD?*g6okE$l@Bx^(O_+87#qk8j5m<*;s;SQh!7iq{I>&0X|F~h>CWW;3!#*B14!N zL1VC>1ze;xV9pG<6z(fcAYzS`jXTaxeH$-h&k=&zM!6$bA&WTIncy}_-cgxIa63=- z$oUQgx2YC_+X%Wqr)k)FH3)7q<&CpU9@`v5Oao6aj`22+E=11x@dUR8097U4%)U|lF|*XulWUuUPV-H73F1DxL2C~UXL=p89g*lwrW&_H*%Q`qjJ zoyc+b>7%gSNB5${`&}q(f_B&p+F^1E+itKAo9WRWDQx>_FEZ|rqp&@OiLIF)w^7)h zln+1XqGmtM@wPR@aL8nWnZLYzGM<&I>NiV^YMx!xm(fsz=geRD1?HTkstqP`zBGD< z`mrp+tCtevWjJ1m_hVJ~G94G&<1>Z0KZL%)N~*yOdxhiA6Y)CM2@&#QF2YeN{F+Ly zQQ;&}uCCMy5S*SjMX5v{*Ei`U2Tq1*T77|DbmehrJy>)@lzilE3ZPAd`*c*BxJaib1w|i^e39t)?lm)r?M>-9c5HJ)@JV@%~3? zaoSN@CSH6s-a3Y7n;$yTvrY$_@I+!%h)1ge%Pbfy#uAu1J7D37yjSFuuO0AVX zzvnnb_<8N}X-2TV?urJyK190UaRPJXLBf|FG)Ia&O! z2RK-XB)o;XLvga6=%8%LpsF?*RMmC{)l-5ybwHMWST-X{%!w;eak99?$tP8!8qcrN zYYxM`+UV`0bj*R1g&qYb%cYN|@S|g#tW0{t@tav`SJ|FDB@{%zxW%P60Em7u0EDtk z|3%Ob102@H(*k@*3UP=bA*@>we<|QYhOn-Gg?ji3^>A{ihgqkLw)|_xK=^oe`Le?w zB-|mM@ALl;{xD9#9||S>L4&DUQ}*m4$h#ww0wLbx*9Q>dbsG@krFbC3WB*q`h#~=m zDC!9a0n4rlhA1+?5UWfu#8NvLqJxF|ufPze6AV%028MX97ebh`B-0BV#Nd_j#)7{Z z2n4FVbjyYi{38#GYdNDGyfjLuB6tHV>JbqUqySdz;vU4oGAdQjhn|2Fq^C*~NEY>=vSnk(4EsQ@RcX+DZw z(6dN;Q5G#iFJy}MmZ*s(DTuX#8tfp}uFxeL_+-V}OK2r(a;ZV4T5Vz`YI`ry)>9n{ z4OxH^4FF2i0LW0{xD!<6Xy=n%a2ZDI=`AIzq z1kMwOFe2&-Nii?91p-qW+xa6THsOg|#EVBFp;jLp1f~e{*b4J~PcV;d zS-hxS>j3lEPB-9-y)j0(zuC}Db~t-Zz3pT`D?z$Lr`zeyWR4+YB(J;aF0{ivNiiq) z@wibP{T19K3EbrLXfHjnwR$T*-%nWrlv1j!)aA-*U2c=7C%J%B3~&n1$0FnjRD{z+ zd_O^kdE^TOQaM16soLD63|m*mfmALxKq_k$NQDLG@&zSP8tvIf*)nl|_a`D^uK=%% zdC^itx+ui2?(8=2^ycsG{>*lhiFkQ1IpQTqPpRlIR~Zdh2j!qdf?YJ&!8HYD$(D!~ z0edMy0tj;x1>!|G9~c+N^Ctm+%ha8)5g3*MJ(-RKKQ;p&ABpq}B;!IUQoY?^4+yo%bRO4}v(jJHM7QSe5+mZrt zo~CD#ft~i6s3F@1#B{^;9I)HV~+*{?PpfG+1iW&FCYv}SUba>;#K;HYhXlJEf49elX2fH6K z3Km1FdqxBMH zC}cd8itI-32Mm2nn|!L&znF613Q-znTmF`Wc$ugNOti7KDXgUYdT||R`G#~<*A#9G z%~Ywv06sKHVKH0yJeMux)YiTP6p5kM#LVZ=AX$%S!JfGl>Ex!zM3hXKPeYXl3m4>8 z0iB5qXUXEFPBuaoKQbjWR}qau=Fy30t{~7O@o26RotNI?6wqAbXe`PtPYKO6fzCm> z6*e^2L@0%&G|3&!g%+NSJm?@*NW-O<#Bj*Z09jwIo zSuH5O7NZq6sC}C@aVU)A*3YFntpa3f6`CV;9}=rzf_6frh2#sbOGKotm!qoD0g-mO z1(7xoN4zw_f@~ntHpm;VFcE2Oh-jin0xoQ$%(=-1Q`;hY?8<2R@i539zc;X2QA` z&I#_Z?1MajuWBbfc-r?t9tMcXeII1E&a3t#Ho(|kw13M;A*gus75qC(Z=P>fU@_}VOdZG95xDGmu;yT^6Fsmb!C>=rV zx^T-rcMmTE>18y^@e~k>ufkQj3qtYrEP8`pOJN`AO{d+rZ)4qb-hKOyPH)i(jT%nh zdfCHjk5$50(BG!-!5Z>6XxjDRO-lLyTTJl%;hfzDtAkFf46L{mzS)uQ?|B@yhOTH2 zwefde*Uq!$Kj3|HEz?x<2G+{4*!@VSf21Ft64LXh^b=>K=leQ+K<`O#<hrr4kd>d)?~(Oi-I0}lq(30X zzn?y2<$uwCqQw7pL00~W{ujyJJs>N!KAOh)v^0y|UCR)nhvw-CZK-8yKHRL^(Uw{^ zB#;lZzE-rQ)=yMO%W<~oYq`8&8j|pr-d(@1YUYa73l`3tg^fauYmWct&8ks2N*(_$ zSvFn8q^Xz~)>8k1VJ%P2plme}+s(H&r@^jPPGhIV?t3x;#i59D7FvJ9)7Ck?frIdw>J zK#6LjEzcVx&J`FX(l@Gbi$aI8vLM1KDlAgzA@Lk|F+=F*(s>OqJr{d~MeOVjY>xNs z5ZkF*CpK;S*93yaC0#VA6HdX6GgY-g6mT#G3{kcM?HqbJ!59!U{orJ3rCPoN2<>d8 zD{F(bGfZdx@`TuIF1;{gFJ+`1GT^A%So*yK%504BjB?HA07otBpz-`G;Hag5qn^uu zl`^u6&hMmYfTK<`&#KkNt3sx6O+Y$3C(uRH@iMal`A297jA?V>>9bIf%;w?$1^8JM z@Mj#MWiYQ9?tipNbg?SUw6ySh)tnGU(V8f&Hcf-tFtdeh=9EQ7Q5D*`7QYF7gx>@% zL%N+_RntXlj!+F^f>EkBnxxEZ5^IZ%Hb-008ez8IyK{OLKqC>`aiC>^UzKTZc~{OMivjRmS_VCBU9 z+%taEdN^MMVRHOtA3BVZzk4{So`+Oa<0!oYNA}<6zaK>D$8eH0oNi)`>09D;COUqO zg~sQY=a@X#NcL;Wg?XQSlm*{zeeMg2FXCqc#XAibUf_4dE25eC)pGwyzF(9+t`Ns9 zxFu%h`SLP>-}M2%o5`6yQTnt(NAMeYu)?Pj#`~KJ*hmYXkru#((Y z1xEEc=qiqxx87RITGVo;Kq8xo#$}$*z$CjSska!a-opNbxR>FS1-p2FbbMdbx=buAE2h8fEIL^ zrLHo*>VN8<;x*0vpg(Me&DW3*W|V(hyB1(;4qH{icrT^1cw9E z|AQb#ahR?0_vc}RkVQg^89&qPRlOIzI^5Q)OT%@dfjK6^jScIHYYz`j%q@D`^0H2q zeEd|gU9g#nI-~-!j~ivptJ`q9d7i6rnnawGUN>0)!y@52E7mJhK#p1(s_L`3E5yCI zJpiEcK$G@iZ2G}W&%3!-6n*um) zJoXWK!Z=OHq6&fd+92D&2j|f}BAkRzYX@th;nF&dJNMMjkf^|JgTW`jDH7`OP?*oj5pRZqdDpjPI?9)c?m*TnC^bjo@iZd;MW zNP4kOE72#twTrI8F2hOyyDaA4TAZr5lGY~2?T4ryAHg~~qsNB-dfY8G6Hc=oy9t{S z?sn`Jox%Wr^^5!Hz1W`U2_TN~-3ADJBn3O{MkhP$W-4>D!y5js6A4Av=(H7&>=*Yn zduf|a*CEBl73&Q+-8FLZh`yWQ=eh#>AD&h*1NrDy0||C}in~lZ=}yc9ck#EQ<}X7W zI605gfJoV#}!4Zg0ma`|4xlI$3<+O>>Ycy=)F^!f<6Xqa{ zI4SYCVGOexthq7;*bIwHq8W(9A&x^7=&8R7c_pxcpm@#~AAebMdyfLmNjBl7J85#O6G0&fO)eud4Q1&5l2Q(S0;iAz=sA0a{WgrU;GY$ zd7{AdxIGd-qw!N5fDY6}A~E2@+u<`%&iues6;S#p}GcQKK}&4BX_>=jx!!txvT`&sHpV%y{rt^ zyadzDO0L@_tE03A8P-IpjteVhjjCAOdVU~E4Js2~vKF?cSY~70eM6;(U#_*r??J9E zYUh^+ZNUSD^y(5Wq{OX|lDI;)nuT1;jTb8fetc#_HREEYBo>1dTRGR6)lMz?WcC(xtxeH_E2#AemyGJ`lI}C_TDUdMeyxY)u-5>hBxp&AO5-6B=xzP)N zgt_}*_ld)-Cp|=O(c83%-q-qSIkZU|sV&o1aM+|hs_o-=d@zqunW=lp(d^0fTR6fQ*na#bz5?Q{j9ZnOnA=1UWm-e0WulZ4gA@y zJOd>N&E`J0#{jM9IP^Sr+pLXZGc7xl=btPaazyRXc_dUmo2Qe0kQ@6Oc%Hb8x`9Bj zJ8sks(pdw_)2Ps*R*A<>c9#Bp4Pm3uA>_x+LmiL`!%U=tMN%)IGj*O)&vM%-!ydzQ zUc?((!|jlVM$!nBU&xDDxUE!T-HT2_nv}|IctfZ)A|-3Pw7R7&5^DD1=#Ub~+ur3Y zV}>`eY+2^Apzz!4JQ!LdZOa=WT$O{~>LCA~gJUzs^NUy4))g#V;=^Z`j%`|O@&LMDH0}arp|2SmAy^kT0q-d zQr8*^wMb0H3^dZufW!j4RFz2=LeloE4;kQ{*@&vPZYFwLLv1Vu zhQx6%=&waw^k~)foF<;Ul$IcAnRTdK6mG--T#kXksVi`#iv@Khk|pYDLrcU!ZVMg+ zM*5}PzsOt4W3@iqD)#+nsSaw^()2Tk)Pd#OWmrZOsJvn2HZvOZ)RZ?!F)uqqe0Eu(_w?!=C0Aid8J!%2N9L+AZOBZh~iZI)pD}sHHM8t-7|Q zwn2&W*g2K4+4KTEk7vE;h-u8&w7wClb|-aY^4$Cq$1Di9LW_=C+irgCTD0BKB--!G zIvq!orWF(v_<*qKts49~y@sOR;5JwsYO0Nd#8AQj;K{ss1Ap6Za_%|MSK0u%8DjT=40g& z<)xqL^mF=v2anvAAOE5aCgr@-9OSF@Pt3tb}hhBRcHABH@n%* z%_f9RB3Y6^c!%8tgqR57O?ViAfFOh@@=hQz5}O1;J9Ub+K8o#(6suqr5HS?N4o-46 zG_9q!wPmz+9BXYI+xqCkcC4dQTOSqD|3Ck|cOSX?fY6y_?|I#G&OP^@bN=UdJ`pBV zEJ7`Wj?Z|CKM0>k$U44|Rpk8TmT3@;*q=bAfesDR5Myoe(4}EIyclVVhn^H{@h}rL zq7%>?VN{3NDVfCKP|V?5ecbY|cm@1!YSIE6hD7e&g9XWrmKw?k%JE`=(>xgDO@N4+VOUO^`fe{yW(s93 zUP-ary*O236+B(|{5_&w+oC@(tdh!!L~~7u1Q+2Vfb#kmrnXDKkeSi|&iIxdK&Z-tm<;xTi(`jk|H7Z>9q?l+NFc`>|$A;G!4 zmi1w~zp!PWo!y@$56K|@i1t3kCmlDgIed&2U1{x5SE3)(l@Zv25m0_;6M)%+q0EU3oVwakUn@TDMj?DO~4j zE#j~%vXbJ+N^$}W5m8vA!^$qm2ykEx^C_Qbts;eH(+&|%-*Zp>%*qCGl1 zbfo`}TqsS41AXvlLkJ#YhMtm+=+ITKLMJ#x-8$Le@r2-%4yXB!XQ7A2C*TY9!I_3W z=%ZVI=zC6w=Y2oxg>!V(;iV9~tivny0pF|g7C87C>*imnj~tVn@R%Hck>N2>Asv3l zzDIBJc%P=9w@voH1eX}^yak-fMr3`!_b#;^fJj;t(25Wd(w{GOpFm zK1^pT5X`IVgL@i6m@if!=+@D%tUx}c0A1emyUyT92XujFS(%RG13FHm|1viD$WlO_ zqtswdw|c#ShLXh>?2goO0BWf8q@@9htnbDta=D7;))M-!<98Io%J{imG*7sI%t3Pm zYpmHi!$6OltY#~HbjKju2>PC)8KL7e=Sd^sgd|LKo-_gDcx)_ zKCNa@E>^2gZIPN>xj0kBrUkok&QN^tFifJ*{2c8tj2qZ3>cx;ikRv)Stmn?rO>pio zWg0`<1@ps?P-Iq>Yt?Q&6=f72hJ4A`cNj9w8Un!()x04@@6dL;`SBoEuu*ZA1NFOE0HgiToH%L%f4kp$4Y9Do=9p5 zA2pn7)217W!Y2!l(4d%gut_zXqgkSqOv5=g6UMQwR&Spt~Q9x31U!v$Syllw;By zjnHJ&v5#6c&tMqOQZpSU9f0?Rqh*X(YhP^ObDTF+1h`BIrc92h2I0Loj z`3&>;dHZD{~E!YI4rP0j30u-VQG+d9p3D@=*7vvwGE)_Fl4>d%4&B((+B8l_Bq zB72PDT@?@R0yRi`{BwKs68a zObcRZ_NDLg^I$I5HQ(H+7EqwQu}Rr7SvX0oWKrH+9coVl+0ZuAn5qpe&u;kL>@FRJ zTe}KY^4E4f!gVRZ1ts^!F(&2=`Igu4!4vfBEhE=UOV&-Cyfrnnscq2253*gfCbe5w ztJETCH`7=)cQ)RlkgGJY%8__mB-!z$D4B8x&)gUf-JR^I(Q>vQ)t8Of7 zwLAHh1{g;w6<^uAU=Nr6S^_b>Qq~k*x^(`2xQ}c22LE(kcA8Xaed5!krv4`>P5Ny+ zn)D%7Rol~~4{PuUdmT@Sp2MUO698P3oaRk}e1A3xk<-=(E zRf?7+%9N-|Vkdp$bO;`RtN{Bz6krG@)3rjte<}iJV7dwZBgaIDIn@QoV5@Y;J84x; ztaf3w1&A}tu-0*$^Sga>&OnWUfU{7785CSBL5+g763nFF5(#?!8NUFxZyA@A{w-Ji z+tvryHTXUL3=~RkwX-M?g0{U3x*IO3z|Qjqm6!7b$Y<>E^==4 zyXf)!nVjYFXX?=G_rB174TZfrw08B+Hk;g`np_v#r0b%ZjA`e>TV^{KervXKt9?73 zLAA5nYG;SpPP=NShv{$~c2#HjvwSSSt;){Nb{v9&{A_=g4qtr&=$fDH+^ECd)%^N% zl-v*QWhA1#Tx72f4-mVtkNu6L%j{>g%jmXyFx@`?6SLdrL)AmL+5=tZPni$!C_ljY z$BExL`_B(bse&cu@_Q#w$5;@(D zni92RaN5EmOEa*@f@wN*owf=*X%r|mz&fSIE}h zEGL?)dB!pcJ33gzrZA!AN=(xbZ&R`~v6F~+R#?$E=gx`8jXLR|nU-p%$!l1X7RmQy zhx3-xmd<__S%#m5CRt*DktfOdiu2)Q5e|5XomCkH%6oz{>Kb=Nv@~3@3l;87M7A_m zEV(0;U5}9~?UhK*D699BV>UTP@`%?drY$5sF)22_D>k(&3UmU)=z5sJG5NO@Z5_*- znmU*W3_^gbEE5@rQPa}KCd!&5_e~D(?j}spRG4BM7Ho&@@7)YSlN(RL}xGzrY{2yc-s2u$b|7b1i~1 z^3!52$$*x)md`pEYSk33VW|eo_fNwN{7}`snoV1_H_qTeSVs?Nljnx@8f;)DC|8+ zbR^&}c9|BamSpA*xLt$Y46l2sJjb2vo3WdjAclO|6IYlL!ILSF-Q5f}mD(|T_b~`> z9M~A*b@nneFQZw@D)vp8d*6ydhq0Dl8cuV`lW$VN?4~osRF08X6P^V7CG#O;rqXIC z=?_c#BVrZ0av`sU;oO6g`zUcki4kGcy545Qyzn?Y#(h78Fsd{OluT`e&Ymbu(#k(wgSU^X63I5c(BM47G{p##`ZXd{zn+4vmBY@~%E_*7_O@2(8oJRn z&~_g)B2WhJz)TG_Hc~TC1~FTGp*X}u8N{KKKt+5pM$MSVVyFaG(|Co3!!SR_*c$yb zuPA-Eg&T-P(m-)6j3JJcu9Vn`;BmBuV|WUsWEVFc$5C;dkb+%Y04K(^iz~~-atub{ zi{WHmC-$;IS|q+0PLI|ME zLrdLVX>b(B6@IN1Vzm-tC4pdd7z1`0cC;J{!dMt=5CQ}`k?@*ehf6}@5Gy2c8ao(c z;y7Re<`Tvr9NQaQN-TEKN(4wCu_3mL6iNAqQ&i9Rrrw0vVbJ-k{_1xf?W^6v2N35j@G0oUQRz@6)z7M7uWvQH` zEYahbu}W4!(N%+Dk=3#qVq6x7MOII$dK+6FgGJ^SLSIaPMTUhoLMf{M6Q{39Vw3u;l;LdS)OFEiN7r~f5Xwnx8KB$6;E zEBIXaAk!QCp{AIJCd6+b)=i4gGv;5tNY@q|xvjNfO-G~cj!SmS>TMm$x&eEo7+Q!4 zYwpd050UH;aw#2wrY4&HN!id&!+N2j`QKSAPF=#CEwW+g5a?FIH1M#E9JNXGr%f2% zYzwzwc#AC@z;LTAycNT3ws1S-vJP8#o6Up6UnKpjr1)>n=|)M5V7m0|ASezeIXxu9 zhUB{_sq!3gNy=L;=_hjXei^48wmt6scEr8k&bas6759F-W8TlhUa^JuVE9#A_%#gw z*cRSv^P`+8=_pCZNSZ5YfuxU1I#Ey>`AGlEf(H5fyXc3T)2}4`lZdC`2@e^0Q>S@teFrt=rkBLRtCXZz&s#S%8}*$}wBAHmEJWFwgxf*d51 zLf}C%J_PwlaziiJw`+50p=eOn0y^l6xiBH_LhtpBd2H6Xq&b# zZ*?#DRNhy!H3=L`GuEk1Vwx?9^{i2c>NG=vLcL?g+d-k8R?$CY^EA8gXRExuZ2B&U zakQWkZ_p<`UrB$H9gy*ja@u%Bt^hIfOAIrzd74V#fp|QF$6P#0c|8GC;<3yKL-s|3 zoN41JhfW?kjiXaOohH!f$%`UM7frRvB=cpK-2Je)!ng^kMs5VEEFi)6;8&V=tL>Jn zP^aPN^7cy-4yy*E>utQ56qyS99euEpgctS0>PlKiYpC)T`XbQW3-v+B#|A}9 zTu690-RsWihYfg5qEtqXYct|gZQz92h++!aY(HnUk8d{JyRZ%N_J`7l`;-xa)(C6? z4+-%0Cs?nYEBas$RcQqFX6?gM1P(;t;9ORcOohQKYl*BYvP+-9Eu96WgWS;^?!*`C zgLg}kgOG<8C+H#zFFNTW6)(<|kUtAD5*z7B4nbE0J|_2pA-F&}<=A1Phpkp6f5a^L zm9pfkk*)g{EVP$=vMl-O+LF)1jx9<)yBE5H*zb~g!FQ9S9+}X|M^nW)BB2~r#m<3M zyvnR2YZ*rLW0IU{M4*T89m4qy$qn5}s^-tJE}hnksAZaeYPG{f>x2aQ86LO9%|7@t47Ujh^tKXmNUK8bs7&r=s*r2(6{x?LVT<@P zy~uO4()=}t2Mu$NJhj{z&t~C=2TwD+p5eW;X`&Yn)5#|sfBJgiu4?`7o7&Uf`VXrj zJgqIFzuAiD4YpsC{VpZ{yuJ?nYO#8SX#-d$+t4$Hdv*l=J{S9dQ9!Gl_bTKa@_uv{ zoCQf;(R=x4AhRIp9JmZeK?MHMV<^Rx$_|>fV$V^l%F!wFm7bDc?L2Qq5VElmeOp<0 z6NVM`;N`z6j9bxfnQH25K^0Sx%;sa<aN*;Q{U0V3oqUlQ|1}xV|0*W0?2@ z_yBgrW0+oHE`eXlMueF=#Io_b;dY1N0=1fcHrCP4@_2J;jlXd_#2&*I5@PN!8}Goc zQ8KnkW)(Wka%w6ytSa@4nVAClInVS8JtW+jVrx-_)x?@5>pa=ZYRMC?b}etbEmAJYPBIHn)3W$UCt!+uC3*u12jQU!Au z(c5&vVMG&XV*w+YC{hO_%BFJ|Q8t6ah+>FfL@_ji2@p=w>*Y4JPCI8xB&DO&uGTY@ zTF+2wJwvJW3?ss3m5jvmvn6iF%uG)PsrU?2#b+865L%w2b#_JA^L`A@=!D7m>a!zk zfuR^iXRcOAplmS*xLgo~?F98w!|_1vT(*#f3OWb_i?F5sAVHueYm<$zYLP15p5F;A zylPmT5n|(spNc;28Ho-0LI|#QajR)kD;Kj=d!O%?j>d5X<=-Yr>C~cxb)9ZqtS> z!wGFDu5qM88sV9Z7@~<^8rd&WH7y9Va1 zIdHoImF{HfdS0=)4wDfN6^fku66{LAB(~Re1X}%pwubg}mVEVZXui1Woh=nWlVK!}|qLN=cTPX4s2N z6a4arH^Hxfr6jcyb=!98Q%zcV)eE=39p3%Ksm`A zK9NC!vvo~ddt*5*V{$9_Op6O|Ha1a(DC_reR$SG#mbEmM+t#wC!)5`!PVIGUlvB*q z_?oCoH8U`D3R~9;O;8@uPB)Q<=M>m%0kUpUfUK=CfUIpaDT*z22enuy8H#Im$!vGQ z4r;4T#p$Hg${}qo*aNT7!>?jS2*nGNAWzHfyve-IixSHnHH?!MAzf=tP%+_lc^yrT zbGOTb*yw27{k+YcG!M{i!{ML{4iU7G-u8>ij|b;BrQn^xKJco#9q%|TK00S#*SGZs81a|o8oI`$Q!~=2&;#TV-b*RLs ztj)34Fpiq);Uk+uNvH9-PjWFm)rOXuj#pTga$qzLLo~$Bz5*`%1I(!M6-FS-@L3=P z@C7W@>{iUjztIWTEfC2sp;iYXspbjsgKPdNi@EAz8nhcU<&saQDRe3l-jyAMhI$3Y zV}@o@w0Sv2<>_G!zfQmKdhZO+&g+W2NX^A`{a&-g>pwhbQ4*FlbH2fO#T%Zvtl$k&hCQ^B~EYF zdh(px5{!PK_yT&qfaE)`__pf#wo1NTim#pcq8sD++9hADe9LWI+;V(NEQKQB-)0Ba z!cMFu`%97M=m#griwZrpn+w0=8K%mYJ8q_eETXNruLYx*r2M^h`Nc8viwDS`spRiV zD8D#P{(j=Te;?(?OS^whNjt#vFc+o0WlHOZcLY$Y(=$8_M=|c0h;w?J{cuWnKmOE{ z8iq5$Xi!Ny%O#ER4C{vvM4k?MQo`_YFuGr{i2Ba+(#0o&r`bz}{C)82VDx3h7Eo*f zlWm@4yBLg`1+i7JZ8h0)CEKN7bfjVvl?`6H5Nr?rE!p~l5AKn9|C?|Wjza_QR)2(B znoeA#run*cYU46i+HbhpxMEWqNu-nqGG9aH-*V>P#W45km~SBS?>X}yVwiFCV_Wxf m@O7_CFvTdOeyTLYFHJAqcC9rV>WUtHfPb~da+eZV{K(u1O*ZwLUa9DsnwkkOO&xs)fYiY% z3X~vk1@NbIt43t@13p1UtYL8bOhPjt$b;KFN~c-QRYN~u9Iv^LvmLLwKDyfi1H2b7 zl79$>GMVuXm~HHDYsJQ2=%Y&o;e^Fp3L{!&J-&#wDn;{ew*VhoE?nQ&MX16A=W#b> zWaGf3^R^3aAyF!U4bgMLjOT3hqU1Q6{WcTZe?;O&tX{r=XD9wu8IlET1GP%N;BHbdW0<%DeSJX;Sr*qUcUFd@v`Su_# z<%>SCRAU9P*^Ihsx$^1Tqi}$2E(e3Y! z{;Q2vw3J2q<7mNO*5d#uH=xRqgf^0Sr904G3wM-&uW~@)x)Zfgmpknpr$2JP!|6yB z!tp);zsUEqtbrHco!A=gTaU9jpSK!%e7;}8(MfB6$I5)0PvT`%Iam1?a$Bzn;; z^v`GXZ!!%BPshMC<|~5fJaMVhwGqOQSl8H&UK*c*6;K)IDrL4qInCM|p=+EN)M}_e z+lMS{!*i?^6$DUqTIhRws&cFeunA5~*)TdyQpldBV0WE}2Nc8-)UEAhkTg`6**QfN z;H4nd()ZHqnX1Y{7EmG5>m+e#IBE@{3^+yW*Fqxm??`Bqiy-M6=4?U75Nyy#4ZzGl zxwl@FlR2M+@u5bsL@7{KDy37vO9u$pP}q*}?z9GHz??>6Qyayj_gRP77+Z8uD>oJI zw~o`BBVU)io>S@wwR4c(;vMpn?8%Z+^f8!W$ZLhnK zxNE+Pz@Ov&BxRUg>LMNNS3-o73)4_5HY+b8h%x74EXFvSD_ah)rsmQ=fhMo7Hrw^u zD1{Eq%+4!;?UAo|2PcGL&KShbPGBvFw=Tocj@&01Z77Np-ye#rlO=YvArm(ZCn?Jy zDPdeYJlT>g_7xIe8bgy^E>!u!SP1zeHxNubsGEX_hn~8ZivhEXd@g&IQqa?pG4(x0 z$>w7d0SxP*<={?K%s2W5##YWE&orzl;po=}TVbrdDa|(Tn%^eh7dqUw4D-#49nE%c z;jwLrxeqm5I19leJD-RD@~n(_A`!HpNp_N<|S1aq;nCADH=?tSqCXIvV_nyc+x@g zmGd%Len8lAI8SldEs%IR4bo5+QAimZT3r^E`B0WH79(O*o!9Np3eAa%GG)=DE)sRr zIwV|H%8<5S6waH@IzhekUBZy+CR`R0?$WM{GL7gvkfcTp6}ViNN24mwResE$i|cR< z%Z|)hZOAWX!b;6!_1`*nTpDddaW{E}hPk!7XuN%t8pVTjR>jBj%zg47B9&c}!Bg6*n z;YlA?YHa7utUrD?1ddg(QrcaRul6jCSv7gtFX~|EA57( zPG2xC#E8-AWW|VCL0z1uaIaWuCPUKfx5jBsk-48g4Khp)xeK|pL(WRz(8NN_%Gz~X za8h?d%~Fp#*8*8uYUwc4vGB9cT*qGHLr7$5T3kM9sI%C44m!{o?6xut<+<7m)6Y!W%anr`VW0P9IVCCR`6b*Kz!BFY(v&iVBe zQDO%wg&4r&2P{s@lR7!W!Xk!cc7x%M zJA^fhj9hmyoe%1~+M+rBW6IX>#*KWw;*6cfuyUYsUPPPt`#Hd!ZNLPcL~pjNpE;pV zCe5wFtlcp-C<>;Q8`5jq`shW%oaUisV`ypUGb{xSO|U0T&P`yz4*bb;<{V{Mw+6?3U3@=)#*Zw2t1SFcoecv5C=+xW8uc;tq;jwo2Rb4k-gH zE~vPRW};OC0f5H^8_Eq$g;MOV7LJ8dm2Sl2&hj3$X{{cKR?G3Liw65OVgBRgl!E;? z^)j$(yK3!}Off)m5?)yb8{GHg{p`FH%XgCIxQ;LaGC0p{zW!UWl_UHPQ{Q!gEmPKN z+{u|_M7xrT@R8CK?_pwsCE7#=ThH8*6f<$WcDRw+PJ6Y3yr^hVc6zzg8U^R7q3F5S z!-g64?>D8K1o~@K?@*n%=pL%GCIzBy`OZp8%?Cnn-K!ID`V=|T>Om8ZASF{v)y@Kn z4a3>kQ&GaQ9HWguktRDvOsHpqubVm9&xd*~BX_eX{XWGL;ZSq+2dGc2u+IQj zSu(gXrU&WUkoYj71T!rs&jN4O4_H3&tj4NLD z)K_2vX~n|6MLiH9Uo>b2DOd)KeUiT5MGS0DbG!|-?d##r6WZYKvSF;rPR&pF3y55P zo8O^dG}xbbiq4C_8t#829nPh0>hpd=rwVmXH1nvm?j72txQrRVfjYE_9EjQvgk6$Au8 zbD)sv8Q!5}#ycpn(A#n7)t~DwT$gFH$%tizF5ZP8vI}F{`PmFWD2qpixrq-Bk1bIZ z%YKPEeE=1d{Xu~5L8y!d=eovIoyeyP9!7zO2dr%YBkJXaovMa0l84FBUzQkcrI#Kl zJdzb{o$kD1wzD=KCPNl`Wn5kf)g~!}!{mU{W!wWNqvY^CpKif`}8q;OQz4-SIEDseLHYOrYcwq{f;A}ZF3i~V~FB|>d?|Lqj zKA|cYBmjg+gjE{}(ssc9&VZD0ou3}=E>C+xj22|t5c`fF*oY?-_LD-0Yi}A%TFB>0fKO=h}I2B|VLqmov+tg_LU!7KZ+Y;M7D zy6J(0wj+o0(2CesD{T&`xfEsI?r3uo{Sd4CQyLErQVb1&sYBWB43L}I*@O;1klf-4|Q9Tvwqf?%# zcml2C@4fAsCo^?2-}o3Rr+4DFREL*Q zodZBI)F|nA@e=_9@)!1e?ThJ0eQDox-T7}NSkWt^LApAr`90NFG{(;q_rw(TGK4WK z>481n`x>J&TPIsekV6f~ylxx(*XRwsp+l)qwJ0_FyAuSu@2^0hVr)!WzOKvTmKQi8 z`Duu+FUXlRG?Sg92iP899W29NMubT#CoeBGVJJt-lh3yud#>;SXiXj2?>WQe@Nv>p z=)4g!j?&OFNav=o_)X*>~@ z<#L=z%Eax!b+L!{5sI7E6bVkH28Ri!K62|PiphgfihMfK$mdy1B7XUFg{t}IqdPxq zrWF(yjA|?4`%#*UFMh~njyYK=f2oiB0H=WjXF}5}D_E45^0#k!F6RqRuP#2M462aR zAW#yn7HB2XdCY@T2*bt{Ay6vPom3!~c+(D6Yi?dGi3#q6uR~`$Ke9b@YimUt`-=qZ=y|G6vwT%tIzKyEGXsEpH& zR-*9h9!t=1vqW|BxdPMzH_n2D(hl*yA_2axPL+VPk@2=WCJUJ|IvJaB-m**)9?j5# zn;EnCTCpU$b^fE$BXe&>2qz+1$!Q_&42B@gtWItqP?kW9+VA##0kKTYSOKO9W(qK} z>G+qKN@=P>f`-2u4D*f|bc%T5vEngb(Yl>pmg~Ecp$u+3nO_}>t%1}wOq?23V3A6N z@=Y#L40Ixi2432pvgJp)x;TQpIM8deOY|96R&lAbn7NZq{?v4t>d|hCI6jlKq;@Xr z?~mABFy``t5WTWk=vv)UjiG1Y%~%dZlj!`GLzS+2Lmd?3a&KMb>4JUAcafg@MN(Bb zJATrBB?kG^q zj3lP^#CRG@*)S&}3xOrGh&7AIGyZV#N7VS&P%H{5=M|TfBH9!O?F0dQ4!}l{d`Ly{ zsX@du31?6P$YAoh$SYFvjH2pzJ)iKkuOr4-Tt=2boWG2tWMoCIHOQHXEpYW!<}q^+hx$;TLS>+j7oN z3$#r*00g|o7hrj>4TtrxgnO3|y5?JpGEd}y@q&i2FrHl((CRMWA$;c=-Ny>LNQos# zUtOG}-^X5(w?u+!Yx-C8+Gm!G+|$p|3tQGqt_UW)rMPjco{!*-L9}({p+!+# zEYHP^bUG|Ms^(48VJp#63-CfPV0ajz{7RS+QH?Z@scUqMKG>uU&70LuBy!h^vIdA^ zXP)j*GI$+chDx7|g0`J+BxA{E7)o%9Y-u*pMU)+i=oK)kB8H4n_bOxQHa}A&$mCD; z-evHmjZ=2>iXEWiO1m5+VHU^5(0`R>=M%Ie5|(YOL<8P-BvD-6%^<{z^&vR}l*o!T zudYy$fa*@j5ZB>q5noOP8JfD>mIbmmXXswXs~JRRXN^`ZHk_?HG>~V3-7Qf^M>0FL zDMw^ibJ_Q7%hQGZL_kma-I7(Q;HAq`ml!MFTj3*@?^CLi7zXZ;78L6qT{~K&p3a-M zZ`?15o-puW6e8rUBf^0C{wW17k#F`0)eDP5p7^%B-dal@2Ui?X+j18euU+$oGPWlA zf{hkV9PDC**uU4?O3|#^l`Rf^PkE#BNUAhd#lAS&ssw-}-AeRX&td)yz%CaAj?G%5 zJ>PEjcs4WFR7I82dKsczp}AD4)ooA}bG{#~|H)0R3?TKWC&3D%g|QvB7byBcAw_8s z4{v`CsaQ8}?zEq^j^g)HEGAm5`>Q^vMnOTjn4h}Vk2 zBC{(x%VhS=Q1Zz|K@m9Gq2%&_bQjN?H|+4B~D*LEdJAk-ocxGd{sFfZ#x zJiA|m<#DGkVmo>RJgM%E2;W*Yn6x#4ZYBs*Gtn_2x8R5IT4#w0Uw zmxbK(;uq3{TZzAR120XTm04UMQ35M3d>T6El-ZtO0y?kM6j%%zT1u;=%~9jTpN{&J zK&O;d%oOl$c1th4DJvk7I`^wsS+LP0Y)V#fT!-75?qqsU^j3o-4ONb*yCgg6 zQ|(i_>-w5sWR%z?a@>QlL|k)C!N(yd$X<8&ap5@1)LTN_;FSt*&YS-R?TY zPwgXBYV=~Up(xH%?0Jd#M-(QmS#9RkM(8;wMP6xoSU61dE^^lg=uhO|G5Pw&CmSX@ z5%Uj4))7>l9dO%5t@^LypeY%Ky%}7w{Ri5dc1PY$&)K=AelGs+o|~FUaK=|3wN$Sn zzdls)Uw3@kYmDQbU}gf<-fQE;6g{}xGc@@2egSG&5r3$O06RDtqtQ}G%U&hL0>j^n zY7z7Z(zUK*BedkB4WK!Yo|o#HQN3)LV)INqy-Tdah1YAGavO!sxv$P?=7}*aQV|s^>`0bml0I@i>tYym{_LnM37@gJ zfCdIN&TXFEGJ`~(nRWy>fb702!@)4^0=!e@BQhkF<}SkfdL9WRY|zwh88_W~li#(v zwDsY$+TXMZZ4RvsWsf@FwNNuuPRz~#t~d?I8+q%+*qVc-Q9J{9zl~2PdB1uB-2~%M z@Eb6tm2%P&%nc`1n@#HQPRwx}M+uR+25%rS)=;9W)t(2ON5_ojHKf}Q1#t|rS>5a1HvyQR zjDC)1fWOE*-2FWJ9*cI~7~MBVx~Mli@k-9YVD?}XFMZmpi@@SnC|x7o*N&X?PH@xX zfu;QOO@PHc_%BaDyWF8Y8lV9boa^y-FuDvZw<4-mQP!ELphRm{vRe!~)a7ey#W=qcs(V=^2ac|)k$wpwynn~XZ3puk?cJ#^^-IKMoG4e;c|mkmmQa6vb` z`_3?tJ)hGt8j9>Lrc!}3l8x+&?StlbAT-M@Ep{RDT;EUn0AOtKB~yzJ;8jBCW8qC6 zW2rATL+#V-Bf%p1SD0@Eppx0$rM$xel*!zBTWeb^j(draWe&ShXu!na2Ti44FBg~Oo7 z9&mAAi{my60Kx*f%c=alc*|*@6VZxai=sHSer@i1EpG?uA@VNv5)60A_~`t~5xl$C zkR#&p(P1o(ZBa#lg}KS-#dd@K*r4IpLPU%O!%%XQ3fPX%h zZlV8pFH@5RXzPNhHH-gkSd-m~cJ~FZtcb&`Ph*fwp3U$^{beJ;Y}owK7UvmunM!e# z3WJ%sD$a2Kbe**j(K29OB(P{amY}jVUqQ8_r!iMvSk|5k6f4(+mE1^(N}-5!qiLBR zKjSk*vlwWB7{yUF29(XH{1uk&|Jyd!4W%|LEXf?DH3H+B+&B2>?m^p*82_%(|B)xrjn`ZTPbKt}(@J4J*-1$+Lad{bo8dKpC7&yvDoWjX<1`+&jz2r-|pxf-W{cbmDhzJ|7vUAkK!2DB41A>ENGTu2MUv>)87@$kue zePgJ0f$xIbvw!Y+_cvP^E~CQbqC#}FH1;x*D0h^)EXsI89;uv$A_Qe_8Z6`*f1?{9&?MxG0S^MzO z=G*-Q#Bze=wx3GQr*ZLKH+_w7Mv`VPH|uhTvMhVY^U^P`Qe7p*QramhY*&0*a#%Mo z|m5r8UAm zqoZ8#Zj`xq;(jx+PwUouskZTy3fL)o>oZrkV@e?Mvu2zj>lQP4^d#iLkh9NhfyZ^Qh$*5pa=U-?i%0_tx>3~T~5FZ!*s*u2yc05@Ok z&?DV&;psVoPnfEX=dN+{UBi}jl)H<07s*$e_q2C`{&d&X@b2O}>0)E5!sW=dSyrnC zGrbb}O=TNP2y#;5@fp#nhu0GxB*yJe3|;T!Eu6*yfJdO1EmN_}_(-$QfN!!Hx&ah> z?7UUft$KY~QUSarx)7Us<_);5=ydVp3=+A$5vUv3iF!#D3$x$W+rCd=lzcm3k>nE@ zCNXtUrPo7Z^T#trZ7;hE6mrR8tgBp|X&&Aa!Mx8{Kxc^f~`m3b<&waGqs0ynN@(?&YEAjp zdChgKtdM*kAb|>8dqkWK$iBX)HajgZ<6|$L`RRGF(}@1fdxu7$Z*FI z*N5O<4n}k0I)3_8A1ZE=xQt)-l0+6jM=+bjVaXP{RIYZ|v?Q4tzAfM2kk07bMFT}3 z^OQBreL-pAMV%ptRN_D%6~E+YO@GboGpEm^1M9#T+@rT_6FvJe;uG{Ur0&OtB zB(qC+%M<^wk3U}j1oArxP09ubdFeSDVpBDjKFXOtMOq#W^^_5&pzRJTLwcK~GVt|- zRnVfZ7UsJd4EDNI&OTWmKV>`lm>@OIF)?T?W zX9Ewz$MCI7m9l#x{``#0~_bxEsas$l89JmYu6sgJ#p%~>|C@Zzl70F01An=_sb;|1qDo%4Z z6gpNi>Xsu*u4-$;Y^Xof0@OY^HMc%C`40*&u^7Kag4mX+#ddCfAn zcZXaT)L|G-XwcAiiJ3E3$mU#2ZnT*sM-Wa?ONZp zV~d1Xde^&428PP=l`%|wOk28ytS8;hLAPUE5lGDmhy&+hANUZ2FQNJL#ySn0FiS)# z`7lYBE|wu>dj1HqTT^8)`uRmF&h3R=&h!EqyMLZ{gD2M6dvdS#&g2$*D;Xs+Y<}VT zlH5aVS;4dth+9#k=mPmB6L(GV1a++}mYUqZrYm*{!_jR{|T>df6h1If1YhYTN_7bYhwpNGktTL|M!FLtgvZ=$dAsACybgrq(I%&q-3qE zm5clxUB)0E5DsaU4=Hau(JFPpI$pi1Ev751+lyr@)hNxv;BjvFf`7(V8wql*bHT=Y z%y~SK_Ii7MuR4(zlM!U}N3{<48pL`@?zH9P8fD>Tg9yfQ31*VZsN$CF{$Z^{l6VE` z|JXQhBc!Yk?tRMU8gyy#Q{?w`M4s8te(y!M2M1M+Jg{hbQdBgFVzj#$Kq){x*%-zFvw86f@=*_ildse4h2hLRq>A+&CXAW@av&X#jNeyGt!n001UHAxnt3_l#h=$Hp+D8H+p*4^f zFt+<22fgATIC1HIMVle9kZ66&3T-4{fpfACkuWdh(K$+pb_LJ~_j_Pd>tE`2Ft`n7 zVLBRS)v&=DR0IXJ+X9H=-V5&X-cB5_RalgH02D~%#MSul@2&#Mlbp(92R zBfh;AM)XazFWwxI6Mh=l@I20DXL7u{nAXkd$wgvHMLW@OvQ)tDK4Rrk?5?%qc%W;K z!9$m+wON7f*7C3&>*^(}={*U!&ah3cIJEP=N{?=L0s`FxD$_RHCSMO}(AIJ9ppw3$ z1j_Qz*T!eHWmmb862|Vbf5?@^SF|S5tS50)hS1)=(_)kR#pg?BAOAq?k1;qu$_hsqlj_oD&GMm0*YAkeZQu-t~^Vm6X0x_1mc( z)h)R}o1)Uu($L0so!NIj9nuRa{?oY15mqD>wr?zadZbl-Ys>r6~En znXfvF#N#$N#8@#L%H-6V7Px6m&Q4UX^wJ`kr0~iMqgDh+F(m?_*rI%Pz|DX=cXyF3 z+Cg%ZIvzewSr04;3x!X-DV!>Df`^2==Q_b|R&=O`3MG(y0# z(JhFDJT}3Q$w@5+z8xMM#EkGeEr)UX4Eq~hTC>te&;mw%(KY%jUtf_edfv-`q7f@t zbq@Y}Q``70ZDGd1KD{l6R!7=_q1z{Xtbl6_qg@PtJMNo52wfD{aCB)SRCdUY6@*Mn zFC|@(A+nC>4B4?9ccphGgXy4W#A!4Va%}noHj5+fQ0tG4ci4aDuTrol`Hw%`ZG->- z!2VDE3R@Zfclt^#KK}g{^jDjtw61_93eQax6qL+@4wIVd*GAk-i;n0}heS2ZhYt}c z83jDtwj+#LI8=e6UPb;vF$#AO46cO|SuU3phgL#~mn89QK@3kVBTOk>WAc`H#k1Mq z`+dKDZPt&23>v^RREa#J5@}3EbSxG5rIkjpMzUPH$udBBzkA^$a@9_H3H2bAB9T@S zd1`NLN~0dvj3v_0yNF{rjot#o$=2Q3M8wpHg?b|8xo*7NIJ|7uaI%4BMq_m~c_2-7 zE~Xh8A_hXx2<0R?e=L4Aq5z~nKQ;DwXpLjtsu1ZE!WdP7$uTnpQ??@f!#}LjgyZn+ zq@U&K3iYHWDZ!%hxQ@9#UabaNNOrUsd&Dj6j*+5ce0_eXK8t2?5po{~%C~sUy&%yw znnqIL#ZI4z_pm)C#&vdN=m~n`o?@xQtH&bUWn5_l-v&zS9uj@HHUt4?aq)SkqS|nc zU7!V-RZ_>%d87Y5bJE&h(`W8|cuG71M>I;17;{Z08h#kZf2;Ak(2fc!V+bXXLzWp& zFLU3QoE}@crwL;VTd3I_zO!%kmVsvu;tf);?AR7uaW=78U~52I#79IuTlTIo4a8h_ zwc5#Q05j7$GoNW8fNm%;gRZr3gs5XoQ<37G`UAa^=kIuzsmXJ-zWNXbFYi%jcaiG5 zk$U|kC$2uq4j;#Gs-h~4)yjB@5yeW!2Uvf9$%9PVga9w5?xImkE=)t8xikpwEKm_z z>$3b?#<0XfO&oB*tnAnHR88X)9qtzI#wXRDV81hOl+gp@BT!2Z@dmM6u`A{yxrd(6 zlIV|=gYFIs8}&i?O*Q)i9q+&qNs<|q=+{jS?qxa60q=^Uqflr^t8y?wW*i!b9nOdR zH0n(pKk6A9?@i%!#Z{Fm|>iG3k#z&D`Ha9)Hr$je*ZJTe*h^4xoTJAf~U zZoDyWi79ELjzL1tC*>K(fUO~2cr83`;#h!L*PW11#@ZseWypb2m3|mv5h^#^&!qe* zJq32>aw&n^K}#XaV@|icDb7S|()g1+j%GQz^)9GtPXpUMow0K_7m~& z3`1}iua-HUMnxQb!{e{x^PwsbgeLWJhqKLy?Tqjiu)D?K&j^58Hp##CiPok@torH? zXLq&Z|GHei3D)45K0K9?^HUh6legcNzqq70xb8!sj z)lzM=Ck*(=K5tstIAVi`Gb0r?XRu)k_V?GRF+#4f$bC2-c!Bv$^qVb)#y6b7N^~_H z3taq%K-*ATOSE^02YJ3)kPmfm7&@2!oTW|l(VWJJb2(k3J=bWPgyOq69fh-4f{6aX zcr9m)H$||KSya?~nmomG!-UC!$8Woz@Sm>!vP*XGvHju5NV+k{Fq6+|EL1Y@JAxUr z7QerPil5p8QwQD1i7x|-pBCPRaeC*39xjIb`x-H^_L%Z-Mt*!toHeX>S$x zOi7L&@>`)5(7jofn;bj>-_SOAoDeMAgr5lIxV?P>hplry6|9-Dp6!F>UKL4ILyPhHpmwKY0S z9c?~mrJ0&!r@1EcUVpw}ahVM~18vz5l|#OSMn{!dblrkjmv_K&TT`?OPG5o4Xaq`Pp^Yu1`NFwo;JW7YYz)T)Lywn z{GN@%x)e-DY(nT74R_NR{=ux855x(278op%>EIq=o-iA*=`*)ZRNLmaj9@4-zfZ>~ zUzI81tFo0M%9Y1ptIsPCwxZ8r!uZ7K1aWyFC5?V@fuICgIUXz0&%^t)FAv2`b;6le z(GoNQvQ$EDYq_GZkcOZr4|#$QyjWAu%xI07k~A7bx?77UYA2@WTbnwxl#lI!sG%@l zRV~G}JEK~ao^D`%)fV-GiyshKj%YU(FUw6Kcga4!ZZF)0lP|zbOr}suaBR^Nu5wwvbd6pF?(3?AP+#KpUEeaPgkGwr}d<eiLV2p1@1%!$l!2gP+};D-}EO^1GT+R zzJT%Y75&V`VP8C(b5h#k%#W$X`U<6JAQ}NfgWDyjY0Q&h#E4qZUA>IUo+Px+hgOUX z22o}W$alhpFQn;801^Y)UX0XHOp9sn@S?=3<@4zrOr^x)o~SA6?@&!@V`8H(vGX|J zhd)&Er3d*GYxEUZ$oszEclY^Q%5sC$V~9KVMwFKzkX>P?P3IimiXz^JxZ`dyk5;an zU8IJa3X1ba?zDS`?(Zr$Ewtz{ft_HthB&pNoW=4L;N<{GN1KfG?ahC+rcdP zCXj8SJi0T){3a_oj&D~b*8gqN9%nRnT<MY6-JK*ly-X*FYc*8aItJ{{!sy+dA}bhkSdqxUUF}|# z&>vfLxgO3;#|Zwz8P8u(ba|(uH#s}m4lBY$byJqoCuA4xk>&6;k`S~<%&r~j)=J=T zRhlaBn9!Rd>wH1@c*V!PdwfQaqG;Al9B-<-_UjLpQAj_NVsQEI={qxRO)?B~^e;H@e3I^$>FsOup2C3TFR9*$I|NQ1W6}?{L7ZsjWk>wrbb$AwMs|1Qipp5LyX+~js^dpr-0sRs^;C(x{Dn{sHOGBn-$}Nxmo`6@R zr7%1=WPaw7n2$J{NZ8VVPPK^}be`7%Mc>6Fc0<#ZhD^$5LS+Y5n@%NBixi(QxfF%z zp_hQw7x2I53+3=$(3L;M2s-3{y&x#rS{mD!d;D)wMzr#@DwZh%$UGjZgs)kZAbNiyefVfDx3=?Xe-f2_LMG91Z5(X2gz&WerTwYy zPB-T_!0pyEDKGggw)%wUb@%(#=ap*@*4N8%%JxhMf>(7fo3>g#a?lafc~K>cT!p+iafBE5xY^4H#59k}wJv7rVwk)l^ z;XNX%b1-P7=|Jw7=~)bdBP5$@AVQvO%4C( zz-^`xFGY7XTMQd1w?H@^2ERGUa4)x14k+ zjgfRq0gkfAIaTpKn^33SuSHwduBapkha{yf^1JI4tyB;^n=LkKG?$qFkQ#{cVv+pX zc&;Gq4ymZW%@pZvSNL5$E{3;9C^`ne4_y7Ya@p%V2a`bPRJ~g)^@u<<>cFG}cU*{n zJSqWTl3C=QfLV(_zmaE>pqzRo&PTjTk23T7J$&Nb&uBfjhDQOAOKC=#m~oSRd7^qM zCCEowi))9sM}gAIoc5>+pq_wQ|JT~>9Z0sJYrdg;SceoTs6;z#uOe>Xw?ghr$T_Gv zyCyUXxsl|ySwOeT%X98&Gau2c3=OD~P}~5NnBtz%e9D2$HvHy{)_gRfRk>OL!lx1_ z8KFmQz*QJ-IX?C*C)G`h^?P%lFVu5Rr+1@m$s)ge=K)@`i-zw9N}lJY+Z(oMHCwYG z&%P=4CZDdC8(J5V<_RW4_p0#04;)!(bPG@d2lN-4@1ftcTPwYo87c=Exn71Rqm(ww zPo`85m~Uy6#nJLT5cQy+h1W&7`~@Sro4$Rz4}&=bGPBcJ53{Clwk`Z`qwRe6PrnTd zQqC083SJyLk?`IiZ*gj#Ji#sK6do_WX%??a9?y%{zHPfYd$a?aL+w$(%VV$_wTc6f zlwof6<#l6aWtHvIx3RM}22fCRK1E@=Pj=>;<^RDG ztMgN2%Y0%GpJ+LTFqJFbeT6Lv5@y)K3ab`|D#l#aC&+Pn)-*_?_R|B6|(cKP$t zDFk#^D5rH>g(L{#oAcI*{#<$})kdUSls=z#RY)Kw@%=pmeP(+6vq(BS&C$R_WN?DZ zDjP!&#hvcxI$I^1#XK0$D=x|dh9R98cw>MCRNgy3A~Q1r+5rQxs)t~3PHu|E{f3xf zt~qjDkfkfmjXB0Mg#$C@`NizLE~Q5H$S_#soH`=JmxRHqT+ei3M9}b34pjfc&)SPL z-MKTk8Emwl@ubGGLXy;i{Pem#Ug@@=@q_N)Ji5g9~}|z=N>;3 z>J<_sS1?vEFob3o&-@b^7;DJ{U!q_nFnLan+K&p4ijR^&ib#tKQPnL&82)_AU`Ou< zKm{fd5M%T>l3Mt-FLjNZdIb^ zy5VmbVj)8j4{b6*Ckh0Sf|Y`tNVfc8`LQ!bgG0{0nR-ialt5gN^nNY{dT;*c6QQ|5vD4%SuZQ z@WFd02(@TvdZs{a#RndNKbTa>nNbwNcUET*6c(zBv-WKt_2KQr#$P3)=DGa1H`$uV zh|Srqv3+qHq#;N>i-KIX++2##jhrJ5EUU&OqDmO6cOF_T*@IJ5OSb#oU_P^M3p)jA zoo0L`!C68YHQ*ayXpdMFq(7;-dHd@gBITqn4R7Un2Aui_!^(cNAUxMOx7OufP#ZG^ z?g9COSnvM@e@FBogbYk zmO&CH-D_#P0sbJrl`)5}_(VhZT!xtqw)Gty_MTRYDD9oN%87Lh3e~$i_=f)wX$dj$$0{x-vb*FSBVSaAC$lTETaFy&wn8OzolnzT%SxoAF}W@{#rml zX=!*kv^KgLIo^&0mQ;E!Vg`E4{FA!ma9^Wh|Njs4e#Y940AWKa=k-&ktLfY8w_ht;3k25-@2Z=SV z*l;4d8rq4}fz*%0h0z_JOgSU$pFpCLShUnsGh)A^jE9?h#cO!q*bd@fkCjHYB+Cu_ z=eM9buc2G9Yj-{u0j-a&&1?dgmC9s%qU=Q)g7wK%cuU9GzPugv7{T0zQIS+bDr)Ja zvL3$#B;TwoZu=LQ~9pp78>jTZ*D26rQlfP@q! zg1C1+7b7jc8Si5G!HV|*z&qC3p#;;-ObA*Kg13OVwxBtWhOOG2>rq; z<1~v~#HcDzo+bu0kKF^_sZ=Kd`FYL-mwiq4rJcqVL47g{k2nUEVXu*r`BClzFvtt#UIF*QF6$8_F?p zk4+Ozs%N-9OyraoThkE}6N<^cD)2O(wqG^ne`Q6;{qRjd(;$9~@~OJ>`7dGR_D>Fr zTP3d4`lD2<{+UGio0Mo~rf+9wW$Z*JU}bA)`6q`v{gJ8vTkeWL#rpdj^S@eWrA-?w zW%w_di^00CSL;2*iy1^9=cU&5knh$;X)P=%95j0LwT#-j*m#;J4viXls#}0R?a@TE z->_&(7KlwrSNF!JI*M1VsP3RsHntg@oYtq9mX|j7q5HKxOc5!M8}sn+Y-Jp_K}8F(g06 z%Brn$(8>~?7urh6SBJXyOEFWpo)3v8aq&jUSvrm;54<~5@GroD97k$NGBnxT(SGuI z7HxNx2;L9dv4mT`C{+#MoO!NaRJr1)V=ib6P!dG| z4NST$7w;y@?VK6=zgj)|qBh!z(x8>;T-#cd?l@lEK>IU|*rTPPbfK#kd1N|>X9$uv z=acrPE6LIc^vxo9+S3Km)+`EnTebzD-;i*ZUuK~PdpWn?0v#`nV;DR2gY$fA1FOe+PrhRVo6rAT6*yYABsdaxVl$3P4-1`^(3Y^2h#xEMdI{t ziuG+j0f1#RtZ-K}k+To*-&~U32Ml{X93Pxh0SEKO6l1}L!;xE4{y_bYfce+eb?f4Dk^e4SXoLRvf%(gYiyFmQ>?N2_2`Ngxc^Eh`CBtCulD z3JU{PuW*Ue=rR&vCTOGyC}g~!g=}xt>hRgP>ixN_&tL)3rv!(+NoB=qk*Uihd@Z}<*MbD5X{z0gSkn#xJ2O=GnvYJ`Sp zD(Z+0sg!*;ki0UP59>1gsQh28%Sd~THf4K|1&*r3C44+El?dBnpw>&~8&iJZCrsTP`W*8kR#|kA-d%F|E(28$NB< zQE$n}z*@WCwRlS>_8LChq{KQH@4O>lz#nCM>W7%$;btP=jx{AW*b^mxYY}xc(w9h~ zI1I{ZpNiKhSS>n5gSI4K=@>+k5JG57IxXbcuf)Q2v69JMlBq^YZnBL*z;tQ2sBj>m1U0JIZa1V z52YOe#b~eRcO<9z#-Lfk@i{NaWdGv75h;$bYu-HmLRAwt}V)jvC^sqt0%XSwh4 z7KiEXP^?c&KG$p$34Y#*bqDr@IX zXz0Xvnx)N-d;8s)$KivP%hVnlN6R}b&9c(D%Tmi(VDDk)UldD!#VXDiRHc{ioKN|i z+~NLLu}a9)MMl>_-{k*4W{Jc*{Uc^+M)v%bxCmaETg(-fL^e=4991HJCoa3aW&&`? zfE&?!e z=<39+3l(*f>Fg6LM)wv{!`DT`!GldlZ#fW&+esjBObzi{ymW$!s8R!TdbCuMX%hmT zq9J=CA(OTv2JQLG$r2cjxHud*>Sr2`Ug!x^yvL6=5nCv_KJKfi#woEpS@ zj>~I0l`v7U%>Gw3_g_0J^)anc`n|JodImQ>8Y;-uga>sufS3@p7CCMt1G#7oaf4FM@f3E)o%t%Fb zWkhA9PZ;oV13MltRN#8#@?`ZmEsDk5dOtbIpR#`WV(M%XQo}lQag!21zQnR#55uWX z)nXdWA7+9-iz_eb(Fu~KQ_Iusji#EOxZc*1-an>rz3~E~cjy98FKTtB!<^=5`(st} zf^L`W7a!E*JKO85LxPNB<8^D*7BC}IuWKPI&DW6|21`lOqG&kQWT(eyn)9ws zS5mDkjUm<93ICE^?|a&2yNzufqRqb=srTpLA@JhnLMiWUbcePRaV$+^;*)Q+2I(`k zTU0JP@ipSF^^&J3t!(b0@o@LOe96hs6zhT+qZt7@eZ`5opSvLK|Dteuz!(Ax zDmWzRyJnXO#s@Y=|CW%j^`(HU+=gXZaj4om@Y_h}yoW5REz~^SSES0=X!QY0(A{s) zP|l?tJ;Uu`C}zukJ3UVzu#*PFdf+xhD!3YA$dOUTX@$<+Qy+Lv0B({ zv&6(wrpb#jO2;FMNzvp*Vk3+Fnvyu8lg<6?)MpOZ<2+DMIUz8V@i=wMt^8HCgJ?i< zLe8tD;4w(EIx)i8idP_aj!K55y?rX{&Lz^r2(7J`_@^~u$|#!0)ArHw@ISI$}d($MIqg<>89~2MFl38MXHv7vS`g!lD*kR0wD>pS(!v;U6hFj z;E0d^LtUy+bz&Ev&k}rvJ{V-nkD7eq1f$=S6-7w<;SRk14^bnlKVxdtaY zC)^`5VEY~+X{u193V)?$P-@&Xg=L7=Keb~)T5PfmB3X9r@QT0DpHG!8HD2O^UlIF$ zKH{1XgMtQPFw_x8N7xFJeW?J0U525mlYUI3I+Mkcj31`>gOg#`WOzn2?n10h?Dr@D znx`)mo|{RQ3-~99em#!NSy3!yM1t17Jf+9ApN%J4A-F@7jYL!kk2A@#dt4Rm1K=%U z&g3T%T=XB^ma>tgW)GkKI~YA;9*b#QKL@Srj3YT~8ccEQ?YZS6N{y=*=p#M*+Y=+m zCNDt-(W*<1J|tiDXR4G}>?eMgpqy>i##6}NDSm5g)?`>LP4G&(m8jclRU%iP2Y#^v z7)C_jS)Z!>8L@H>H_W0)As@^FMIm_6PC)67-UB9qxC#s&9GPsqRqNNn$|hAUsjtvT z;i?<{^CFbSVW)(~Wf)3Q*W#I3z76SqyVkf6RSiglnZ2T=*S}Heki~-^2H(&`^eqzl zOSAnSS@1WN7PZthHk8oSGqfO7uokfX&j|I;VDb0WQC3oVjRz@xNhUpC92{KRG$#Nq zzuzO7y%=;>DJ;G;SV3XekIBf8-EL8~o%gzq1&9#l{f8IQZUr?`&hYG{`_!G0(M8cw zu<*W(4~TAMh6Wj5O_Ic5=PUBSIz>HV21dz5O2qHSgDG?ENQr)Vzhje%!3&kbl3gbP zr~?xu^1Y10k}dR69!Ep%fyl0r=>8rKT}zNY-pmWiNEwV_@{<8M(9Nt*o|nO%-+YxT zYy{(30&H|!z+Cz{V7`KU4eb1P$tT1Svx6}_=;FXE#c*U3N>2;F!YBJZvL%!t%k>7x zs^CYz;N6X|PJB`(ukjmLfjhI!7`qUP<0c-iGH-!9zom>#%V(C^{N%#dsq~0l%;(GM zsBX-w0iyz3X5|z=KJ^WL+6XTGsWG4)*?{>Y8QLYw$*+_2VjrRSghS+fwkUjAkO zRJ3fvTvWVaB#!%BbHv0&hvK@x>s#~rFJiC1z|dDMHkskOk9!IC_iDz!o#X%g5e6!Q zyI=|{J=fUM7 zODSV1c{ME;nqQJVm|2BfY)y?>%TbPcZTR|%xESpBQfxc`;w#v*AYaCldJ zXXrFO1%C~-vZ6UjKX#+R&i*~e+&R1GfdgRYZ&=vHXzNK;nX0DIV+Q0(ODL0e5?)f1 zuO#IZnPCyv-K)dU>c&L3K+8`+9`&kda+se`;lw{dBwxdEhR9GL4NTq7W~XMV zz!x5Yx??uz41-waZX&!c6Rftd?0W%{SN_W{X&8xk#Ti(&rwy;5Xj~G4NjEQoOoP99 zwQ)AU#6HP1|GwWX9Nl%UI=L_#IgNFx5dx&%a8A{q!JN*sO+mAcOC1rSQMau7oetYw zZdGQ&If08p>5u1ZpKs%#Lndg#5315qJ1v0kSMUE|&l83%2Mu+T z7iKwutAZCs0PGtZXzWTLUo;Iu!03fAYKtCe>kO@}sw7G(iFx z1y)l!+9a6`#v*8u?>V|eDgw-uOlX#HDbpKlv(y9q4%XJv&^AEY*r-^6N3PSM z6?c$U={>|#{+uMGYw9uuH_y~47CO;ScaSt3QNdhZB$1jF9QQZXk;uY19r%D1f8-26 zdhZ~_$7OyDw%l7w(-!rf{BwTy=ysh9n^~Wt*=HWw4%ds%1bxvI>iGzMfw2i|LT+(y zv!AV%f251Z_9?5_$x3)Azur1iyv=6)O^OM$qGQ&B`wEj;0HRshu{V|%UHp5 z$dp_N@8g7e*<-=1Y3CIZhp(v9y=!g`a+lxli^EUBGmOQi)5nwaI_aaaIqPxCea$KL zqHAPy={*c50n||DiWBglqce$`*OVRc=fVi<9ZV!pK?nUbYy?zmImVF6tpR734|gou z3ZWOmeY7gp;x9OE9sJJ_*n!-AdL++k1tsnS8LvTQJqNdptMe^s@H=x}adV`mmK3`W zBCno_M`Z_LVMk5+)mbyHDp`NkM{g}IWt*#nYjrn?n-GC%h_16Et<<9% z+(~OD+T}t7=>z-qymROzo0zCL9DEhp0-OcO2^tW)dz=(9B3kKeRu$JANyAPrDGY?| zUdp}p>v6DQ-!=SFjA-_5l3Xznpz!MnlgKtuhm14(4$IoqTNH>r{Zf#N(gVNNU#DW{ zWy=JiFAC=gGnIynW|MW9ghF#53y%-E-ftJ?6911|+Avexb7cJODe4D`p2w>G%76{NTl=Adt=J z0YYwKbU;gyvxCf_;RxkO*c&V>sCRJ!H-%aqb`S=r6jToWNwNzJTy9u^ueA=ZCf^TY z4*D!DgRSL&zrt%fPSAqK5R??u3v7Wt&=7|N5sJ?yY@6|6s|mjpoxAjTOu1b+4PaESnXUX=YPoy)a-=sPBO+QNyy z3lC2%xy}$Ogdzwf#PPVj7~+f;iP&7>jOE-sc=JlzPP&Ueutu0Z;l1`KB|G z3?*3I1Hc&`ce$?%H)0sTxm&$o79sytcI*TtscZCVjXiA7J)A{V3w$^q)yfVZ1dS_Njdq?fCQ=z`V0qtm=JQbZeTnvp;hNXo}z<@AqW{U8cj0)u4Jd1&QqH{{~^4X z&44^Yl+b}FIm8kXLgk>9MOzB+7fu7p{ij+_X8_&JBenysgXQS>Xx(%sH<8R*Q>Qk` zI^IV5&~itnO3A*ER<-rM=F!@&bj3KYphBtY~92QYp;;&wKG($PC* zxf@2x6@8VDx(o_-r5X6|7%gpW{;YESO}LK^Y8JL!X&Qna-jebsbs@M-&7`kcG|@sg z^P4EJuBQ)eADOi8@AZgNy>`RQ@_ZgNX{O%gO?S2^1~*I5J05NHpL5{PK{*T=o(#KI zZ0@s?iXTgDgE!PvH(w}$B(||5HSuZ~bu@fmCwq-_S=v}pWt#gTCw01jNACPPhWfp0 zrmm4L6it$Xcv(Ii5vxAI9sOmx<9R_ z#t|W}G0OlTTH!mMv8ldr|Gi4hq27(F_kX0;GP+j(18S`)efmwUJFrV?C!$ITD`F+v}eM+2cVs4|5LKY_w9d-yXlYrYl;fW|nVW6AcFJso=o&_T6fN#W+6T8|^msoF? zlJgvRTrB&GQxC)cOy!87CM;}GLtn>e$ac`hgb*i-bB$=6`?7?TkJs4*mqxLjq5L}g7Gk%CM2V0JYn z+iZcjn44I<>v-k}#0bp3-t3q7^7G${DqM|ZU}fJeLPn_nFJk?VQ~YlbYb8i$#3lGo zDmC#%w@6EPPzjfQpfDBP^u!=0I=r4ipAcLmc48~>jfDCb6eV)UhT1p=Q>{PDu3f(< z3n&|M3P=k@3T-iGr(2Kig&Q(fG)L&1q_(l9Hr$UUJ?*fqhP2@#)>m^?lzL)OF0 zpEtv}0rj?o8Vr8OOb00`MS!hiZ`2gKNl3#VN1T)zI}|Z%*Ukz8Uo?yVl9N9hJA!Z( zZ%T(-990Q!1NKwJ?R5({Q#426UxphLS|`Yc+t;Pn9B5zZ^QhwKi$~o+*<1;EYd;oQ zh;~aWdZEPM53Woxus*EeQ?tLX_rngk%@Kn-B$iVnD_ip0I00TGvQcJ;S*}S>DU7d( zL)QNAa}V{EUO6moy(Y`_g?7`Uy~N0;si@wkJB9_ivDs`Peiv`M^ixDJFG_O_BHJ01Q3 zXxRXPNq=7wBOip^>r3-G^SheZtq9&}Q6t|1F*ySEkOqbpJT&zuGlkPNN!?1cZ$Tml z*-GqqV(C1reuzGs*tF(CtbX!_z5=2vdw@Qj5KHNBcZM;NG6^#+Yby62WtyNN7SEv) z9*9(3*^!97o`M4tR)_4k5!{hy+F};`8RS{4k@=xxg7j`_v>j<+H9JHhs5Y=7tWj~xTqrr(bE2{Hk!1D#pFdGxa_RY?Q>B`$!ko+S7+s@7w~2yWhnQt$6&w@3aIlxy_*Nm2&DN+KAjf`upq}qXgCb)Y>Km(YY2#Wl9xMd7qCGtag;tJ1^gsimAdA0VN+nD|YiLS^3c z)cQHKq${C}BS88XZwEQF7&32Q(f&oW!+YkQ`i3;^Ghq#DaXTba?%F&v^vEWr3VX*K zT2Ouo62dEZODU~Vji5CVX6K2n(6(gJ;i0|FDO_t#v&XRU4HU+$g_vD#R;VVMwWQp6 zN4j~G!jrh#RF+ehwbe2Sf+6S3>@}6g*)0;kjM`L??IgWw}n3`_Fgj>$wAh6@C_# z(o-y)mMDM706zg>;Y$7KH?;C?&{Gbf!6O>A!M(ap=+wu~NJNwDFCMd33rCRSLvf?+^H%gUgEy zi)9zk29lPrwVovrXj_mP36-zPdyEiPvx0@&rAgDq9RX6c8NmCRVt{W(f56UTjBL8h zy$Q;U)>48JDXLuY$XqTtC<&yS3dvneAL|KMi4JA;Hr2+(ztq3`)tD)o&cZnvQ_X~v zx=k3r0_tiYw9pBIt6&F0p6bros0ILiVL~sjam7a3X!Tw!5`4TDazmaefE8%DcA-G-{9ncurb9$*CMSI`L&`KM%(x$88KhYy7yC z5yvIA_%jAcBlAGd%Oi1-wiaaV`dgOSqwV+1Ec&plpjx!{pexnGE)ETc=~Xsncsl*= zpTul%=Jpf}?`%u>OSd7Z@)$c&pK~gDxvy*1qWuPy;ErkzzW$xh(C?($ynVM9?!M9R zuko^fD-|jjx;XIK8S4IL9OPQV{YPWr@2jJNru~`%9A_-{SgfJCR9>SQV1A(A9s_h1 z;5xM)GbxoRe;OPjAVXNiGE9^KAuD+Fdjv;ApSYH8Aql-h5N>zYb{3M8A$u|*_SEpx zC8zP#<;up}(ir!r02KW)A{=#_qq1K$F$iTv8EF?cXhhXf|>J+jaQeEvmc5o z@bN_9!b$ywPUHSt1F}1J@|}fvZ-~!&V}tpGntRW=w~;6h1-BwR&1|**s3tPRzV5z; zqoLQ56Cil0AA=m=;H`Z4jP05oM%|e2k{t#!&@lGcouyMbAHNbWAZr-0HwJqH8PDxS zb})7yE5Okgs_M$dNwbv0i7PN_wlFOMxozD+z26!cRgcV{{^lRAoy0o#mh@1Bo&t5FRrjd}eZ$kscOcD7i((+}3H8+5M-Vm>Zg7lL^YD(IILhWM7Cde<@VERc!eDOz z+`mM+2Xx>4&VXPo#8`6;Lg)-+Z@{^5Di6Ce0&@K@pA~$ZG+Qd zE*BFoM3d!Zb^-hE46Sfm7VF#1s1ID%3z%5R1;C$>JfeVOe`}Y}NSm=bx_g_751=+r zIaAfHIyf0czidcyuNJHH@&|d3yk-O%_3H~!*hk2p86q&)j3FJQAE|Pes0=83XcP#U zu1Wd-)b<}Qv?eKkcWXh-?hSqU81L+B!uomwtjt(gE|TD^X+||Awk)db?FE5sBGpL` za7XsFbsSvzZKbxlUI^m$ASq!%QzNQbOjt89qTGCBnA$wxmC0^GKez)+lm@ka&{@iT zyPvo%I|s#$yY#}Anih4mXt5Oy5`0$ga+;BSGH8g=NcaN)e+s8!_x?;TiGrbKegOZ& z=jH?seZmWZQO$yrzf^{$_ZXh)6GQ;UWcn>1+ztLko1kAn_x@qawjeuT_~{RR7b|D} zHN7U2*w+SMhxd^mx>pkDPKqxumz zWO{UZ!x@E$=E7sU5YR$=B>7f+t^r_z$}zUU>k#N0Xn8JyL`yuSFw&X$y+RE7x!jb{ z6jg!($y3!sc>xp@J4c6}4P&Zrw_&VEGtqB79whx8OC zLZ-!1T6xa?+DtAUCF!#kXwDYe8%SbT$uVdUI~4T=fE_sH$N;=R6UE5>V^|Bid=)U~ z<+4oVtdF}8*^Hn2Q8)0DXtW5NPS#6zIb*wZN#2+Qc<Eav(M%J9x0#*=XK?D6`EA|gskgy4`f$<5XaXn}wJhD{X_;duV}E<5O1;PNB2 z{?5tS$m!L~tE)3-8)zuNWzD-5{4@i%{r;SM=m3B1u_LCMW2Rx92ZlW^lM@NX8T`O& z3j;<|y`JhPp2rmv+5@}(8X_qnSc@-Xqgv$wXOk5Us8e(sDPYRG6hrZ_!JmE*-V)~4 zfc=&|)?L0n;##uVWqhQ{B<#s#W{5dcl3&!&jVqUm{I*t2{3Hv?hJ`D~Vn?;3>6(6> z@lOh5U;~VDDU_cU;cqm>tkgJQ=s_=nHJTkYWc~10Vn03FXkVH|6$cz!b5r zlbT0`lWDkeI(WGV>4h&a#&#oGX}=$zl6sLz;iE5=kLUVaNeHQ+XC6#uN)4my+w`+- zcG5JhsT?d(9(r|Whzi_!`d62qzm6*cBHZM!w)^?_kNDqU;NOo+!qncu@V^vL{_~jr zzW$H;y9ntk5G3IV z{L6!2sl+Q7`;yVnm(f_zczj}jk5xdd;KF^uMd)a40RNUEinGjtKYh<#gMO!o{|1cw zx>ioQ_I&@?m;ZZU%uqbDM?66FO01ArO zM48=aUa8-{^1}~vZYK{>6QCr4$RIs2F^-=>H@{pUs020YCS`;%;e?YQ4Y)lmzRDx;~7d2E}aU#qqu*}E@ zER7W<%8)X3(l674B1=guw@ed)^8&boCG{7}ql;GthDX|lTyg{lybZ3TNaZzyr=|BSUw(;^ew>&Ll4S`vIt?LyV6A14sciZBtT}T*y1@1^T{Lb@Uad zT(`|UbR+r4*PqH&QS|QtbC%=YkzY&!Hr$s4KSd?4q*v)utD^*A!NBMQX%DmWrKJm= z|3pl<{Lyz6>0Z6QryJ6XL&zYiY|mrPQ}xG~5q*FuNu=8kF|5xGw6xr5-(51isLfJx z=(D1wRIJkrim+TBm2AuiQ_DXYmNQ`2Sm;v_8Bz+Pv!J+lhP#*_G!370SXBt-OpMKj zV}nce+ls3n$16xmaTVybI?vsAr!*4Edp+ODr5wx?NGeqcR-L~H!y&*jMp=TcZCxTV z#YOH8l^fi%vXP#qypwZWcf7~JSHjjiR9p37Ep8~N2Z)p=VHwWYRM%*tWILggVk-49 z+)103gqGp6T)KGV;eHLP^7Du0OR@nIErkSVa;N;mhbs6T)zo;e5PaxwB?PMvk97Q=|BWbm{!2j$P`EPYX`g*@T*{x6Myf^iU22XLl%9i zxoywm7>zs1eFokUAVWkp^eN6o3x66?{;GCw3cOZ;F%5AYnoes_T;q>25Cug9r}Oqj zuIPT?bE;1&`t5}MZEJwM3qOzHrxJ=kNxQ)4zLg86H7({9jcW~h4BmucWr~Ok?iKB8 zy-z_MFv?Sq1{^M!3R2WmkiA_corL-oJDViY9)X8SSl#n-%HBMw-uK_Y?*r&)`NK7p ze?Z$;5sT4~?e4y$*$Rn8JIF$PR4zAkc@%ir8&?^3u*SJ{`LkXIhn0-F| zV%C+)>g+4S*zCNNnA0i?rA8$&McyO{z^~aWQIE^^nWiz-le*pV`oumS7fF5fB*!D#V6=P-@U3nWGNk6Y1YaX z?>&{ozR`AC4C2h1kL$T3oMoKIeYgo-$N8hYCikK08BL~xX)JX973pN$gM}+pJCn1* zrP4Vt!DA7N_^g|m$5$*iVeGOAlOCy|xhTIPZPN2!72I_jPD|=blR;Q+OkoZ9)SqhH z)V?PEn8KXEc%_|Kk8?rJX#xq%5n9;Df{Sm8F@m{uYx~X*0E_Nw&M69R%_n+J7n$%I z^to&&(|4Sb>A&yz@CJaj9snhVecQd(DrB|~ZGOVMGw<-cKVdPf(*bMmhM!@$Ksn2} zgib-4#op`5hkoc(B_&XSs|Zf6_)kTX9#}TEm>ALoCc)ntE}l zOAjO7e`&x_X9|HYJuST7a0k~sfLzlTJ4I5HqT%uahfhu;XGIJ+kAQ3K!-k`_iwfKz ztuXt_bH=n!*tWOO^Kst(G|uR2Tauac0+bR?xC=-z8WULL~P?aWl>NiuL==zf0B6qe5-Zieey4F^FPR>vjrflgk9=@jscIF~^>>7zdLfnM-KWXn0QK>|0$zrVpCmZH^88`W& zh6<;B8muaAJY7VIp<7t=ra@5dB?z;<5|@`}aXW;Bstn?U899U_0>%_=j0^g5K8Ii* zDRBNdmNya}#(;W9V7X5rkNC6StHT9w0zdi6lSx0seKG> z)oqNS3PV=oMg%to6c;()kKiSvn5s&4oH$UVFqQ}1?jox;tb10NX9*f1?tpgc|wNN5#Xs(10mcLpe#h+CasFqtOc zn8kyRpOniQ*&CmqFxIOXrEa4#4!nM=8Ey=I1Es*#<271KS}2o6T2|y4<#cJJxoC1^ z#Hhyg(sd?R{)v=CsRN=iFd_ysD?ov-mrd&+(i>YTKhPLK>IaujWN;O@GB(7Lnl_nL zGDECU?lEADn?0WZ7LJ|zVeBo;!ZVqjicLEf;G@97W+){#OgBR{^7 zE+A7#5F6Qj+OUC*ckkquc7Bgt)TW2W@IJCE`JzvMqIoaHvKDX0d5^<=QRIv|6nU(S z#QYTq*C;>qs?uHu3241==z;qfr>z~a7%z4ll0*~kaDFLKkD}3X*)m53di4fx@c#Pu!@v&Zpp~$5 zSTXk>@EAPVM0z7qH!1piFBK#hocE@<8cyCcOA5AG*8GgtI-Je6B5 ztpu1`{%EX~4WAT=tH7g$(8QeC=A-`C_Sa+RNCq7Fh8*Pxw^AviW9YMXb}IFGTN`{7wtL$SxLe$^=pn7<2%~EU)JM)_mo^3uF6WB z39HM3m2G3(#1?Kj<8GD;XmYEXqC8_=WrJ2(iXC3m%ubq|co| z+Z|{Go`d>u=uO;S4_Qm7RCeDiRXNr$*V(lPcysGJ-J> zh?aF!1#m|{oOXqpqu|@O=#OsbutF_m=6Z$8I{bsB9q>;gC8@;o9Wm~yeRL*LzZ6Pf z+!v?>0JeI9;J7w9^thv9|GgjW0&j)TG|ghHzo!&Kan)J<}`2yAAbf}`b_171O#x_}qc$f4P@hAyB-{h(^CU-K_gLNV%^x@XVoTL?gIlJOFU?p^Nz*jv@hWs5HsM0W&2x_}* zW0$CDd2BV>t(fPfI*lOx(vF_Ppoh=^x6U%m(D+)EX;<0yloYQWi2f&4}q(WsN1 zfB;~N(rGD{6pEpA)XW84hj=WEOuq0W!EEHO2>H770ceTHId!X{GqM!vD=veO$@ZOA zRy;`J6qJQ_yf&L8!CdBhquRYrM}nu20ES5o*J!T0^3&I5r1#V#pGyvfFdEvk`6Y(4U2`$v|WMi(|npjhc?5l8nhAqg+$E^(||&ek^h zqgyRr-NkqW4v+4kCOV(WgsJ<|!r-{#jS-RF{U`BN=R44RF^Qy|j<(&<0IY@)+(X#V z?&#y$ob0j@Ttp-eeT3Hg>)#$8nBG|S11fIV6g7Nr!S4(&^6#QKZ`Mfr-~u?8PdB_b zn5t!zZLk~MTfTig+q#t5lB*V6xkDiHIK+8*)s4@zIq))S_Ni15X2!RxP`4Yo6P!L$ zMdlkA{{2xA8G+$K5}nc91R6ug#luLvrk&cxy`cFrWPuJ{1HX@_Oza9{uXchx-@&+n z(3o0&+FnQq5btW%tG|UUCOj}=6(-AyM^~c zc;xA6f>&g~UTFjVw7Qjl7u0=4@UV8b7auDulk`fpuWh47O&2)sEIsKoYI>k;>-OLm z|0?`;$t>gto@ly1ZsMgNKjEi;QDv=Kdv2piTgPK0+Qn`oV(F@q?S|d=ZSKDt`c(r> zwR366GdUo?(^P_x@n(0TX6wU!a1>rOKvQ@*tG3I|`JNl?JxIN6LXVg#_!&4T+$BI8 zp9UJ|T_Jw_B{l?GpguFef3Rhi;9X=szlfA-*5b62lrOY!gG-p*XqKghcy$ic*slpN zd2FcRzg-DsWjA<|T6MC~0NJGUu8iA-Z&dsi{aDswu(V8s0T=f*>5T~f)qP_q?>hG- zzUUbUK>aan<+^ThYi?Kfh!DMkYF(^PbR&WIm^?@Y-KR5-0n?(j8UtI>a2zDrXW1;1 z53NDaYToO_fT*3 zQw$j`TfyUNn;1lRtY{eOD0N@;0?gZBT!D; zX~<3rKF2$R2saLAxVoP+FEO$IDS>J6pQs%UpggQoJT~JtA*qdFz%I#id6{lo)$W_G6+uw3u3Pj=xq!==Z7dD2BTAQc-V&LO1$~u$jZjN z-%pQbrz$mu4Bdi_2OB^!F#|klGHf0ohJ}}PP}6=fnZ{2b^kBxQTNMB^OG+k4czy(7+))6hxtoOAVJh##d-)b}CasprBN+ zoR?$ASje?nMq%vEppZj2Q9TMPuOO**Fe9VdZJlsrQUO(NT@3YH6AjI}>d>HQo17S0 zT67$Hf!|%)J)g)^V5oL*kyz%L+!)%8bx|#*@dvYBtfJOL^MR(r@DCFZrThmH?GflZ z{x4zp4vRpoMm|dO7Q5W2;Yrz}1%DR6H7;fqqUlA?WQ=n3oKfD?JYuqj9SUa@k2ms_ z(t1ixnn(I{MdxBV6GgR4lPI_Q6xK+`!Gp)pEgqa_wi)$(15E!0*3qDJ-m#Rtjvh15 zS!+uh;OtpS=u2KTG@IyYcl0L%Pz(+L=?eUwuBW{%;hY;wI@skU?neR=+v@1{o>kpe z`HC}xo~KdJE{*GEGmjDXAYx|!C_FYWUEzjOi}Io(i`j5qvu#afcCp-J9bC$JFE#XX z?A*722QQbiP{iAp5D%C&x&741#M=49+U!OejVYS9Bt}nDCo=)Vi4PKgKnu``DeX9Gc1Ro^ z!@g7tTp0x)`~88zRmybC z?m@SKu#VE=jbWCLIXGqXO|Ncrv7lncfpY#KG4<|Cw;WV3I#;2BF$?Vvp?Y>h37J=#1eE}V7^-t6Kz zxky#4KPyPOIBp*IsV~mOX>&^Y5FPste(}IXy+`<2;@rF7r*XLc{;BLO3&_YxeBC)g z*7LzHSA)VHY#Z(hy3b~Fy?2XZ44bj&w!n1M$3CejJS{A!=HO=wci*Aol}LXD;ybg9 zZ6OX6@yt#k5*=cdgtKk>OL(p+U!>de^kZww zDP~8q=hcUKo8Ocs*!9j!BRw_ISf_k~YRrulCOvmx?WWE$xyp>jA3#3&9U$w#Z^;Ta z0YoDHfa^4%8X?3H`Yuf{@Z0cnLQocJ3~qo9jto-G5CD-|8|~2PV6%D-(oG+8VAb5g z3vm*IQNp9I5IhR&-Y-f-^C<`v z1uJEvELtu&%2-MaZsyMJ{Qz=hBBylCkon8rwjgzXMJc3?$cH?JCau_A_*BI!G-+@} zu(!olP)DMKu9{VZ#b0tnhQV+qk!&aHv)fqtr#^Kubh0Am_Uj8OoKIACidC`biWJ^# z%(ySjZ1r=GoM77!?XU~nIJatAwtB(a8FtNqRhzez8}(a5DAQBj%UR7mRU{HJEPMt2 z8gj-7X0V(Qnkoh2k?f|42bXzvFJR5rXn%aYP8EMjaa`s$+l(~b_661Qtbkn^nfW(&WnQJmb@am$rSA{$7BjDU zRc3V#{w;LG2a}3<%bCEG+sJW=&L{a0dVvkFlohOw@HJXX`Vi$7c9o~hk@+^pI$J4V z6nE5G5i{(k!7eBL6{MeghS2bVjLI_-w-C_)c&m{XY$$j*l&@$A9i2jH!A$oCDd=dWzt44Oz?YfAXqT z_P-UOUIBbo)~7ta4N-jM)EEmi(`Y{njpwe(8jNzVtABdH<6sWpSk~KX=GZ1j@{kRz zd56JRRFz^H0Y&kz@nA|x9R5+#X*#G~*ZUPM*Q-zNdk@2M$t7fbtn0gI254ks?@uiQ zh^;8T18?f5@5v(#kOhUS*mnU4C^3&*RK8cYo_Kb=Y>6+G;I@h<8ClOjlYMZNcZUpH z8srC+n6dhF6J>#nXuDH%KnR{cq968&L+JuXo z^a#(3W{4lp`GVhrY$&VBu_x%#NyqKeuZ?pk5A7=~qRlphiu1DfdFk$c+quo~8J+P3 zd)%|CQOc-#zr#ryZ^@;x(EhxsWTpia{Wb{-q`E{Vw>0*8yOg7rHtP0=QREv?foQ z5Xq|(tGsylrmA|``nHurcDiBWGMsve-E3ONqK8n08DL6upd@*kR+@raszoS$)1Ygr zjb~+^nEsB~v!r_?#I?u)+V2=Req%Q5RlaC+YVh@U3(QMbDb6p8fG@C+n%YS!Zfb>- z+dYOw6o_2}5jzoolybl5#zoG^TK6#Pji@T_9_|74JH_cgT?8u@sx+e9D~eApd!nD= zVSBu*YR9@T^7Oy9XZ`0%s(PjeT?074Ke$7b*Hhp*l)YnkrrWaj z+eyc^lTOFBZQJ$}+w9o3ZQFLzv2EK62Jom?{yRLf1sH*Y% zuZ(+{Ba1qoHf8YP=b4T~9$J#$LgHK3zY9fX>e^hD@pL0c9>!3_IQ3jk+O%5}_!dZy zIYiLVI6B^DGL~FlkYPYmM*tB^0D9OBTwxW!NgL4$hJAU4uN9s*Q; zmK>N6n1J~j1u3+zo-XgX48I5$uyhNH&4@xZt{bj|7NKGY{;q`^T`voNuw6q>Y10A@ zrG>t7(<=025>7%|Sxej8JAMY|SWdUvqQGdjKLKw=(kWX~^sf&)LPUsTv z$LNo09xn&DjG?FXrVmV7NeRXY-2sJL7s~|(2S7CQVsMaF--m;`L0c9UI;MG*2*%Ny zU>y;JW-*;wy0@M+owzKsx#SxX*VM@{n!YD3mNOATs1v8v15bM9#fm6~Rb!boYEhnD zblgeRn2)HTRbVsFj8yw~gD#(WV)c@q-G@GUIa(|Lz1ZQSR`q(U_->F!O7c)e7TNg* z;;R8lf{+%h6Ij5toCV#28sbM@X9e5N@faXNPN>#rN+eT%=9Oa|&>&-NoAI7A=#vf7 zzIp$1ZjC}(Nsr@`7DEN`2Q5a}-d@<+(cbOF@fP4EGd-?7`fJVv&*TwF0)jo* z%f;j{)9o-7`uDG=C*F{4tRHA0lPb_bJ{i@Qt8Mf)Nhf>jmJ9Y;6ZXlCw=|STk52iA zX+)^UG>Huwm6k0h>}y%|T5q8N&c0PvR_l?D_G@ zKC&5YHcFR^T^c4jkshI--sdLcYUNqV@WsTSw3I|Ow5`|bwOH1dC`0spse&NFUYTTz zn*8bJ;4SX(5Ermy)DguGuYdS#zv(HFyw#(;*hOwD&W%eEkEwpBw3##$?Gn;qm}Xpl zP$sRm$~u_3_>r|3qtD&c6W#F~H?=p#x(k95y5zceS zm$%K`A&F|OM!T$0DFg+1HP#Y}4eT}1I(}|#g&A=C6*FE7HB{^MU3w=>%7<)R4H`-Y zz2|9wnP>>MJZBq@$DsO~Vld1gz4S?&@|H?3l}Gk~w(q9OW-ETwQbSis^!Wm~1X8=OMq!u0?2+Dyi=N$o|DihndO4youf`)l4>p zwGx+>60X+ty!{76sUAmToyaAr?hgLB4py_VK~y&*YNhG3P^@INddZlk+fJ53h?GQ= zIpb4;>+^|Q;coC&q_ne$hkeVM`^uUbMjm;nV2&Tzs;eDP1CANDJLyED%dAL2ef)V@ zi-atq=gkV58{9AAYi>Nyy31|LZ`=X5qB*}1W$N30BWQP}K}DGOwnWD?*saeHYT-zK z1dioO!)~#NM)SZsI`?xM9=!E+qYcYOhES|>uk=XXS9kTu-Ggp&^wH&V^)w1bh+_F5 zJp*ZkI}Qm_H5kZz0_6_2zBYQG;rMEwXBN79l5_&Uxgw4H$j>8p{1wOHqcA+6M1|=Q zI=VpU$)+)U!NGHqnk$Oy;N;2jo!HQcN@n2Y*)uR(SB6Nzi7O-S|uLG>`i>W+-4Z|>w7$;N3L<4m>0O+7?r7{aM(Ty*M?<$gR%uGW;5OW zN|xCVG`qf>%60`K!rG^_#-&s7``=U$|LX3JCnb)Me~!D6ex{|rh=2cQ)SksPc@aO!9t@GS@N7{Wqn*3E?x)ggqP`m)ot6ukk;fDp8ZNmAr(m&nhDeLvWB)lWqq$l2@uony(XvLjKpc7srC{!Iq!Y2+UpgdeI@lv8H`O*l@Lx@BWf7 zn5P?vMF0!3=MCW?1DDCoWWzC*Z*=>j;PEEA`!~5LhOnp!%6AO@hi9C-)0oh(lwGx_ z(KoYp%=2E?Sp7jiVm;-}W-({IO!l#$TtSmDp-lK4OYO{42qMebwFLeBTm?FpP z$uKAoi>s`PHD5Ko*i^`A}(=~o$}8O zgnc!>S0UmSVIDkVG}X=JiTIH>(L)QuJlf6A341QQ4zn+9 zSWRMFawB0M^ng$y>bE3#U0L5+b}uULaPUHTduB69-!uc4hShrwFqqfiwf$hU?+{KW zk=grx3wJ4UuJ(qs+)Svi4Ena;Uv{MTM4-QbFqCgd9T;yTlGTMWYq&|h@%(SR&%eUZ z?ZkT{5%$ZMV~juA?IMm2|8u+jHk;^Q?e;&{NHq^n991VCRnGSMb}Y@?RYMO0D}xvE ztDh=JAz~~|?=b+)CL>JArqQ*%1+`VzMnY$k4>2hnGNSK9(s#h*==5K~J*muO&p zLql24_*syF7HM7@1dawdi@nO~IO1l;IJY$KbpB(!LtAb{Li4N2(8{H0LjYQRV-)_@ z(n_!RK6nMy@Jfp*KBlFq7!m596tq!um#)s1j(#yx`#O5N}A-XKZ7Wo}MdmW=eh3 zjAsfA8$mO!KB-T6RuE_0Hpf*dAHfnpE@sCc8?}N@C~39Lqi8&r#cplU5Xurn#wQIy zZ2`MXT6uBOa70x+BTe(jYRHt@G=83?q}x5$3tz69?{a4vV-2LaZ_0WalR$W7Cu%Kh zwGR=`pAYf`2EiZVj44*coITN}xRfJ8-4OV7C9IcI{=@ez>Y|z61l;QAa?zfJ(L#mM zR<{ZpF7D%b(%s;lEAyg_W~cE* z=a~U4HlBtzlik~4Ql&KfkL@at$stzjR9Da4mr!&PoeWpA-Gk6*85mhl=iP_U8~h8G zUQsDuqwZ9|YG*QB0-H8sj>LxkX|8`2cRf(8T5)@ng<}BR-Sis>H5gpZQB(yW%XHAb z_2UI7^3rjqMRIyJ=n=Dl_6YCiLG;0Xu*lOacgMPy152pM1R9AZ4zd!!#DAVM+y*rP z)-B-zi2L=JZR&Kmiixq4zwH|><{G2|)@X61RQ6o8e2{>pk*=Y50%OKcC(g%hL{4aX zqmz$u*W;14m+|UG=5}1@mW%=}Ssu{c{Chm_b*HJ8MDH(x!>)ZJ~5&fV*8Vtk7QOkL2$lN#4Osj~*_rszy@9WY%? zrulzBs3ws@P(>BEV?H09ptJu(=i_EuF*H$xU&b7s^G(*mb;S(qgV`^i8E%o|#~Ly& zLuq!F#nJ`hqT>eH*f6{ySvpQ$$NV-N5oc=8SLv(~2AS@Fb_sv#I$Wv4U>g1zul z1|fgVmVy6O%lwA^!wuLQuFPfny*3dYtk6qT z?(7v%6Mw>&HN5xJ(KK=VTW}@D{;pzPi);pYkHlYOQr=SDA&SCL#t2Wj{oJDDp*9{B7;Wauxubt7pgwuTxf4neHn(&lYJRMCi zwOq5_FHymHm(RpkdA@taOzH@t_+}4zvSb>0M|UDCyb->BM}GQ7NegMUQqj!%JC#;| z?wS7MlS-uFA47gV$?IC!paN-<0?b;~Uf~}3+E;}&hpHe2sZ72t zeOG*PX4VFkAAarN6QU26W#I9AhCpB)A>^w__(*l`qPvddtB7L-uGN6j6j`+}s9bA> zQ;3i`S->{46=m^}Da6jkiCyABOfDnE0;O)ZaApwY0_?aw55)90@|TB_)P^2yglGX-RIptgM z!UWZ=*l@ef!aw7JqOQD+q^WrWZGp@QeC+QQd;y~E0-Ks7RRLOVyiQq-Ncnq_A)cy( zZDrQh$)^zT%9dfL@Ocpj+}=LAwHc@t**SwF z6j7U$qa@PS2vHu@X~zV^y7v}0xWUq{HTj}mXKgofPu0&-_i2^!lI@CkrON&yrK=89 z6VSex-aV?F-5h9%ZS)(dBX>Fkf|tY==?#H=rlfjssp2{9<3=26Fub8=<;nt%X*WNX z7g*J_7k3Xuyabd3dEo=yG`i~87rKEPk9u~tdiIt;d#i-<;AyPkP+7yWpiF@Ecr$S+Prng{V0eH{Y zOCH{b4buhovM3jkM`si=q$i;H{LGsY`v$SmC^gTBM<$U9g2EuP&`a;Y)0(z#fQAtBFQrqbRzJ;`N1N@a;{uq-QUsazi&$N-rHJ(7$}>nGRUc#*}eEZxn2FgW4|7tV9^(%TN zQYsmV7Oz|{e##Kpz%6PHc_dUZtH73A*#<3PE&TzDyoCwDtD>P3#j?A24?Fx`rO)P> z^hAG@1pBN*o^-A~P7ZeAnz8x%!8x`|qoA7DPsBFP8MBwb%OapG5)Mzf{f^O_0e4qE=8P|RA16nz99+}@t zdDA+zQ|avkG<6)Ra4|Y5_Fifp{gT zV!Hx6W|zgaN)Q)fo(lK$TS0^J))-4xgpNbX6=}-`^5KbL2DMkrZfU5;2;WQr0bgf~ zadgj!Ps^6jnShre4OZyPD#$4iqG3t}R6F^;PqcXl2u!!z)dB~{R?TN-ziRn*^-uD@ z+q7(6J#ab8wBL!g3Sk$v`z!@lT9nLc51gSdodKOBxah2$G)rb}l1 z{b=%(an9e?Z)n&5r3Ze7jvm1XIZz!3d>i^IKD)Or@MU={-CzQuveF}+hBTp#HW>NG zNVVEjG{%6EWdK6>D{zzx2Fq6pJ4Im35KX=3BDE>G_5L4ROjR{xL*ctDs$ZJ1a`VI@ zra20Ui@=8l(o(8!PlFgptiv#W(c6V1hM^8#h$T2FsJ6psG0UM6&TISK#Lpmdz?xtq z=LCl^gF`!hp*-$QrzdV9=b_P9UQ;fMcEhZP<{rVspeV-Qh&<)rw+MJdM(gp9oDSrKR;M*)J+u!{xgZ}!Y#G(D8?%?R~ zpJ%J3fJy&#*!y$!QiasR0igc+h4XpZi)Rw2O;Vr$T{Vig%F$}8G)*TVc0!&llE$uB z9KB>pb#@^cA19&4bKQ*$Gr3VQ>nxnM1eOPx$#JFJe2RSXqI}+buTNjGsxiC${rhd} z_vTa7?++V1&;3gex#)xziJaWwNlf6=8g0iqk?hoBVZ~^x)+}o`Lietb^v>bBp#l>m zH(cML-d8oY_m(#$glNxxYFE=Z1Z#62&m}wB9w+_l=hVgELaKMCf0FxFc z4a?q==g8btkdl#>)Hqu;`?2i_Yq*1FZsZ81La8>)scIynld{o0*u$Zy_`9!z+H@=M z7)8Zec$SGK)FiT;bIPTW4lmx|3o!PoAPI~|lv$+B30u0*;uTW|H&}1SmuNx+R2RgF zC(j`qMcdr4@ERSx0|f=qWe04fia`B({$)Y=GBG3heo^V4IbIYZHL7}U9+e8(*cO1XxQ{1xkAs&w?9jIqp-FVp$B>FcgPTxsQ z>-8H{#uHIT&~2-PXx_Hk_Cbvyp`s{D^&&4X>o~NDtorb?Ql7<4AM%;<&Di1$FL$y& zH-^`dioh&k96p1bc(G&&hc+b;fwGpl(qsv$=681EOn52X{}k2rIjU#W8JVmeM5_tr zzA;!AN`r$jYQaN?4(bnGv2dHT1Ep2IVdw}rMf(n|aEZFypVS?9UJ3!#q!ajc{I~fQ zohRD)H`n73(f6)t>aM_F7#QI{;+Y1~5VBT0gJV z_@GkyVx^R|9Q>HDBeu8sz5iWi)wY~vGcx^oz@vcoJ(6!xocs(Wu(JcX?};b$>O(=X zdT-gc2fnYY6ehg+rk{ex4_+K5m#}!{F1%Hk(|7Gk$qvj#%#_FbOXa}yq@Ievor}Qq zrGcr5ZF5hW+&X|8XPUZ=_x5r4xT3)P8G}c|>yBEMRNv8;w`x~sU2rKwU|(A32GX}u zk_#iXzI-UDtW23iLE)Iaj5)iHRQ(oMxdSf`TLvW?P3@b2r4(Xk`ksZRXD=+}mrV)a zvQaFaaPXJW4;;Xnj9X{W1ojA~?)FTr-FEobhwBt=&QZCrG@b%ynrPAZ8di!r?&%y$jQGCQS5XcjZA zUY{1yrcMwB3NsA}7m=5pl4xlH&CDP`F;fZ}Kc6xq5Fry*Dq*&g-~Li%j2IS`<-$Be z#B`f&dI(-lsHn*HLVUy_TOwR;s-J4LA1OXOiA6J`g0G@zHHIu)p)hD(drOaSEh+Y* zOaGx2tCw7n`^!$i1>AD@n7UoEVvyRB(X^4|UgCJrgBSr~v z_Toqjq0ys5q}J!al_W7B=3=ZQnMcZM-ZI%&hop^zxe@XNni2AZqc!Q9Fr&_;=TGmq zNV$Gx&%iIWN$p?z)EnSP3Zcdy6ew0Ft1okCiG*Yg4(LpVbbS2kc zkwt$0cEf=&T9KUv_8WOu!t!(4>06l7{nw0soJ`{PxF6mwz+F~MABHaj#&+tq20qVc zX6qtr-baefx$G%LvT<{s(!a5eZx1r2?Az32dS;!F$_C!H_?Wz1K=W*fW+IvJh@()U z?+0Uc#Kl8=6_*#Bl0zV1iY}37ke63qzN9HWg_(*EFcwd*Vvb81tUy-8haa2-3H1YO zkT>~FoE?n15gBLpR7P*Qam=YBVavRQInWJ&c4exDOnw;;(~BUH^!sJg#_cn}HjI**`X9TecQudyPjy7w1z8y52Z>qT znj^H8#Eh7HZ#7dP2%@|upOqMXT9Sl?1Y%{nQMzUOHvnTUPW2noZFB+yqX)oN6(rLOZ;ETm&;KH+b&G*LW;Z9W>T zMpgP6%&@`Jw6^cOq+}S!{rGTm^0WDcs2@>TjgG}xnekaC^Pw`|+b}m+m~eVO+tT7i zfTen6E>gOTP1Yj~z+lPG(V28$yFF*g<}@rFJ_)^TGaXPuNStAMh59^I)w8TMdvgk% z+fv-pT@ZOC4TZL-FjWxu$Tae$i8RX+S84pAoT4yRGA6F62c-z843DCQ!eN)b2jJKM z@O`;{@`&2$JzzoY*x++wofK=1sc>^Pe@oh3S4I4^LyvG>I$TAaSz9<8`nfg7d%ka8 z+Q#8cI;KQM|# zy&ogjR%noVu4zZjVDBHHUOTdarP4F$cB_M`)>%_4;X3RDgIeXY0g(MoT5pm^V?tdo zY(q*18!gpvwd9mm3yjqXxwS{d*?ns*3r;$MOz{O2k%e9u@v(R-9`+-P>gXx3MhE7N z@dpo7Z#SzsXylK=4uKEZ)LJXknQ%iwY{VOcQ3&H9mz#@cK^#;up6)>O?jeDDnI zDG}K(DItXh?H5~$wO{TS^t;S{FJNZf2YWjPRloLUbM`N#)^xg6f8c9Tx@lH^#-P1hm>W(c&r_NV)Njonv*4v+PWqFV$8V4 zmW`O6vVEvvtY?I*h;!K5`g3A9RWwCsz4t*hMR$Fum{V=N?`X7;TB%8o=uG?$C}V$> zC9NTOQiPyu|MuHI^8zrp;SKL+CwKTWH~b?nh+5kG&n>h+Pg8%t2gb_EBFm!;PElTr z%N0S4d?7>)%X@@x2!%#ViXqF9VF-g1H|!D8T}8(*H5s{&9Lb{Hi9@wO9^CFLgys!{ z=Jj*k3P?iwP7>dGHIe$(e)OsKG1Yu^+|PB05jVy!NLR4rPgW6LtP@X@deCDdc{zq< zBO;;oA&2fUn_mr+zqaOSQ%!Dkpw4L9*;L_XpetIYs?L5*i;}6&b%nCNM5{FzsXVRYM(@FYQbjxr>^3 zTMKlc$_(^@Yaa>B(r9kl)Pn;s6`Lzh_>SwiJye$nr6#I?1$yelpk`E$+(Nk9A({E4 zYQLu9I85Wa-&PV22|JNP!kw!=#I0;8KSlJ$&CZVupyMwmQ$s~d5?-2Sc_26_3s$9_j8n4psn)EL7xVTBcCddq2r+4vr& zbYnFNq9)xOsf^mU^XzT~&zP;>MoQ#320KAGexr>(^3rtSFU>3@gIxXw{by*Z9SN3} zesXm}Kg07M0(YOG>ENJm@AlXK77_h_pECG68vk6KVm7Sj_z(i8SYj%*lZmX%asycc z`QkAkwESD}-^mn+D1;>nH>oEPYz`_2uaXq9pop-DXk5SGLD4q>3qep-nwT7p7iZpm z3@_P`?eJVeYMmAlB3*-@n4!%`X4=-RN=G{VY{`|7xjPJhLX^%tEaRJI463uvt00zX z-c^$>hHRZICu&py90^LBM2aFE3?4FCt8tgluZ{5Yy!?gfj;Eh|dks-53 zQuVSl5Y)Rv=gVw`qrFTx{7BiM-;)CvY5APBkkmBcr%NgJKWxp4sXa$G zBr*hh{R+C=Z%tDL9fEg-6puGN-W91Ce!f+Y+3-mRKxgr)qbKu7yQxN z{bpAx>)jOZ-C^hY-Sz0F;0j!=bWYdOxCQWSjC!5DhBtq4bdkdR<7+AILqVNii zUK$oTs{S@KEIM|8QOtK`oOa}Fv%9i*;F4PC2lzG#t#)mK z%-8hS2}8PJV%Y1eTiJmKz35 zj%g$jVK7Lcu-B*ByItmYBsXicB#qXjzH3tinW@HRmv67{YO`fUKb3_EtGWIq*a zHQ2}#Lv(~A_E1XnM&38mqT%g4Rl1`5bR-#_oOiwn#S`b7;aGM~)0*U28tNeZE~R12 zl8$zx)dbv@`3~npM>x?sjjc*uS*+>+f4d8SO0RZ3T|mu4B0e5x1rn3A74v8L22GeO zRKsswmjatW8(6;_JJ26kE;WOkpaW54Jc7YAt%nO(PEy`g+jq}6HtMBXj|*vQVS6mT zijwXngbu;V*TSB@?YG>H+hy(Zrwdmu4qgKAE_bwhk{wr+THjGT05U4_q{Zf9BQI<(Iu@azLnHq1s1_eM9-~ zM-yxt47I6%^kdIuf=Yc#j=_8E^QPO@0+%&#_qrZdgN0<7490JttueMhUWG1*J&lWK zySR%5)k)oJlcry)1g47&4r$WHzoIaNF*kLx#GZ>Ig0G{0`v%&ua44W6{qpx_G=W!q zEmrpMaW~RUl?7TCqk`b4s=zAiFd&u}O*ba@n2ZseO3;^_FbfNztBd({-2j-pxuAs< zN0Xo73$A$m0pBK?JawY8V4#;LKQf;esF2@P&bMvJ`{1b!XNMd1ke8aM*=N%^{Z$Of z&OC9)(EB^~{$9$SDah)gD})Mj#4U2aVNIZ&1{SWFul?-2uCv0qQ5;s(=;tT4W0l9R3v;6T5iEA+H_sSF~$UVGUB&z8;w5o za977Rp2moah7LoZqav*g+3eBU`3p7|#D?N{=6jm1(yVL*eQ1yWr2s3TKiNE_Ry zLaYIeu_(82R;#TiDEs$nJwXATKBsf`@9nNUlGb9ZBv|UREdl5raU$rnhNG0p*I2iA zuf!dpLCr<^p~p}h%M(QH>ikTIntl2@ExoMY0C!jWpsR0LQGj&@v{0(u4;r3X#BOH! ztKDN$(RVigy%Pqsp^&XY#|Tq)@dm14Ug3eZ7Rq1huXc7%z?ahWI}Lj}yB!(;p4F(VB z0En#;%@4Vum;N5&-@N3uZrq7R0YjLxX6n5KBew&CvfxqMVUNhqjXn6SoYFdLmm-Yp zoEN*j=ZKc3(1$d?95L2DqPq*vkRLL1Za-+Nq_VhXe+X0{x17YTMFG~d5IGOoCk2ro zblx?E9ljVV(upWmnc5Eq<>P%4#iD-&@}BjHHk$Z+{yaAQ z@5?FwMK>8CUSj91ZXu$tCZeJ*Mj<-Uh|SQDi-Sb@ zL>Gk{xZ%H`Mge2^0V|l8Da=g$pACWJ~r$T3C++n|3Sj-;WUGqOLe z?)=koaehNbGaG9~Gi!_g|IOInQjq^;`TtU?@V_j7a+CrK1vNPY)HBvFFhCd)ClQ|> z5gituy^#V6Ns?=ws`0SLpw9lUvxtO4i zB5*NdBRK^-{tK?zApZ>cXZdl!Wft-e7i6i ze>i1@<7;02r$ZJ#AHsic$^N@j{;DMWXO?D>5&6IRvwyGu-8uiuz=-*e&bj};0BH^s z>A)8x#QJvTG=LC|kKh-6x&`>(-C+dO7UqjRV4w#aC-vX_Ak7I?z5M9|+Rqc~e+&+B zYvcc*K=-%Zf3JVr?-a!^)6WMZ+#N5FQz(aK$;M9s#Lnje5+hQkCqLk~5d$OslMWdb zo3qE6D9lX%6|D1_OUom z3$G)a;CxYdqI<9Kf-w>ZArf8wQ^TIAi6+?mlRQcW_2moZKZ55khJY$mqjXDIUp;e{Gbu9PoDs`k|4`P(QueOlnZa@K-J_Us|3y6C`vc_Zc~IE zw*3qhM$qN=DP(0gq(3Cf&m?Sz^8w8G3#j`|u;OUlQb4jl;=<_avUSRBl6{KZ&~tp(v9L=4r{VJS5wwVt{Tiisp%geIBc zBC4w)md+zmZB|K+RL*;r&C0PLLMm^s=UJT5m{JZTP2gkp^7%Ywtm!(&r+DnAnsYN8 ztPU*RGYIep^GGw~@riu-YlR^sn#ZVqsShOzo`D}2EXBJNzCWrZG ziM)6UQF_#uq}t#1zJSI!WVyL~KztOw3Y{}Cs*b-#F9j?$j(TG~duo0dbAs&wc{(E_ z#VQC{cOwcd%4Ik0oIa-w04XCY^I}RS^+m@p?&q4%!`(bpKS}^ozztdBc|~G)S%_R~ zZlL8({yg2O&Sn-)lVzDRBTKDeuu^%nqikv_hz*zTu$y6c&#j!U?!-VxeBh1vOHMwr zEd9HgFRVjPbUW?F4xN2(+yJ<>kA<a6k5WvrJQ-W$j}G`L8wPteCPx*B%c)NRc?oV__ML<5hHOI!)mK)#sShzG7e+qhkn zl8F56WT~N=o<-#3`q#um(ah=Z8%q{ouZ0kHGHa>bcwkr!Ku zk{@1kEw`5&2cm4r*}=^)p$My$1JR8zSS`w5@n{*jelpv2P~srA7?6QIJP3aR!a9Uq z(__faq{#O8X8sJ3JbLnrzcbbMK92ML78xmjDmYrS<#k@@VS(oWTd+~1D9-0r2Vcn$ z|8W7s=C!3nyEfsyBPWt0FYcIzYS%ye6742erhModQmgw7`3J~{zq6M8!c`CBEYH^u zv{Rd(O^~5f`2=zBYJwp{&Nqx{&$H`zJ7c&F5#xHyn3PdWtWkR;ZFPp4ckuSrgafK?uX6F(KP7Uz-<-XS~n;NaQ;1ngqL0f@m`yvv+78Z5s{-WhIKo9T&hz!e>B0A^TQsu~Jrs}Kj+25|?I7FamJXkjk&+DtGI z&M-!0vMs9at}umIVPh|O9ls9$&CzjIsd>%hj2CFAr=JjBp}XOacp73NNio!NJXPFi zkzqkI8|TEBc6c#PALqCQ;j>dHz*`xTrGaHvWGU1QC2IH7P2k=W^vg-ZkEy6xdn=diB8ry!V}M)!5{(57?C zr>FNDe1>w6B|uwh)7aNmm|R!LK)QTyaN%b9)o1m;r<+(7OJ{dmc{uwQZE7Wkx*}cJ zM~D}H8_y%(CtTl1OSlnN?O2evpl9!dDT;Iww!DeXtA=S2ZNAfpunGAXhKA4=`!f{T~!sG`?}Mpc6rS~#iJnCJ)cFQ_vfMys^Vo+3(8 zlkCo?m&fLA?$PYuJgzX`44z|qw*UY(e=fbmb0%KHeN)9XK&r4PYvy-uRit2UMl&5- zm^y~@apMPp@57m&SE+Uw$@7n4Fg-N{eDp;RD&B%x-3jQ=!${H|s^$!Swz^dK2C6+=foALhZt(#c6zA+T>_pIPMP8J&Y;7nLf@BOSh5cSPw3 z_zH7c6iSQ}whh2BTGoji?-c7p46>p`PZ8QG3@4YMX;;>aZ%~}}GY0B%;!Xe>W*LXP zg^O!G!xWVgL9v3#oM|Ly4YF#mQW6Qn8*n}`=LZF-quZEU}ubln!g`l)r( zSKFZlwJ8+AUn)bk(-Hx)nb#rk)jf-nZ3pN_`i|JWH$P6ExhzJ}PKMGooJ{EUT*2ir zR$|+HTi18)csm!Uwi#lq)&81pzcSS+?fP@BDTI!n4PtC(VTpZb(2nJd+s7xR{F<`J z+b;ZA)>?ziDUFq8UR=Y(1xEL~+^miX0`=~-OLZ@G0%GzigG+eh8W3W4l@+&@UcwP=@jVu5hD=3G0$cp+WpFiw>JCC8GcDp)OoI+4Ywo*5C`O(j zk~L}Tj>rA$7Ds00G5&eiG?heUv!wxMLH+4u?sGR*Y?6C?4D${F)bVw*?lQg7>j;8Q z7LENDM|@28O)15)7;ro;%b<-4^cK=CnoLmHJ8*(?6uE;2uQ*evG`A7@w8%HD5$fxO zqKj?w6Zr)1l6J4C-*xW*Na$Jf0<-r4O9DY0+>GiJ97mOT-;Kj}>7(hyv*eLuBo=%b8@ zWsw)#=(Aq8rTJ>{#2Vjs}m!u{+`r@%>&I>>X|Ho#!ViN_g@aWP{Mi7G74r z6^By)jiKyxLJYGy+YF1&kj@VB3<01cMecCAko?ImMc#->zI+sbvtT~v8c3bTE&qft zgIHM=0jJN|>hlTHLYqAuV`BtomnV&SWjY`?7mf>u;idiH!8SHmgI(8bTPq8k@7ZLa znL<8=ZV8mNovaMNLmNwE$_dipt0{B>QdOb&Xi_-Yg2<0raXLjT8wgg5lV%pm`*^G4mD$#BbXQXt%kW26iPLyJ47VU zFSM@;^`0xxgYYo`HNCo`5rq4UN~+-n(DL?6-Bjs*%DwuIL@0`Wa|6sH{cI@9uVxVb zY~ZSMN4tBr^Aey-xWvPMi-%K;_#lSXu(+N6r~E;9GtgSWXE!D7bA%S-A6xFfvh{x+ zqWv>N|NZWz>h{+V?QbvXx_Zvk0&#b1_*pbl)^w`U68!YA2D3OCYXQsEg!z0KXVMij z7n8nm%Q%9~l5H;w`5QhB*#bTma(R%%9M`SpZC}#OW|iyC)Rl=#5@PTDw?nV1*Ug)^ zO`hlFji($idPL-s3zoSwA1vcIPzC`8zY=r= zNZ;4>*qM*C%2E}I{2WBs?;tgCRK(F`@#ZEf%tM^jSlnfW88p6nmtroPb<&dj&}pd- z%At%`$19WiyNs1Isu%k?fVzxIJ?cfeI}QV9w*~UzJ0F&d`%?`T>hDyBU*GCETJPuU zPa_@*oJ4z#Ee(W^AS}h$1j{rv#_W~-I142am8R&XGAgYiBq(8ZhR>ViEfDlw zB1d(hl4bcBEu@f4t>Q8m$Zo*~sp+XqJMhyvUDx zbslq*8NQim!bmlzI*ke8EoE@;T_*d1Jj&loaHua#(`PcgNnwg>k=IZtRQf`<_mbe6 zpDwom4nKFb<#cj7CL1VhbJL&7+Vw`~!}y>!rG!q3m>V-FI0HbwLq826g9Tc!`juU5 zTIq4BoMWTaAVRpD@E-_Jc97>uInv zkAZ+<&00D|G$eW)J4g;(+?Ujz^pXt%NtS`iwo!s5#jXpiRGnC_=6}3&+Mff>S>MjRzFUd&_)kH z+u^FWwegOUrA?WskS2OX@2CwEcc=|XUK8{o-;UF^ChLFOdOvW?jwASejEbT6OSSEZ zU5dM44ZQScWrelesr3LX)wB8I8y)AYLLBX$`zQXCLr3;Y&kP+Y^O(b3q)y+a5V-ST zucj@oWXD2#s>k-*o%2+-iyUw`DIiJ4HOcxGsh;!TI6jT`*}BUR>FVbH;p`oQBkSIN z;YlXu#7-u*ZF6FK(!s>GZQHhO+qTnjCbp9||EKD%bDsO0^XkK{>r;1C@7{Z@YyEUx zsN3G@${oFy%%L-mH%OQ(@>(61GVlphB1w{T41MNAXxWta4An`yM7);?qMhFxgjBdF zgA??Xj_I=CCcYIWy@W(W@AemD`W+hjJ+<^y8Rf9HHbl2m*%U|=u#}qq{aC+-Uh+s| zC`ms~LmS8h)f(ejA`89XW7x1s1Gaa@4UC7vz@!j$H;tXsq%+Y?AyWE2}_StFpQMtok3PC0>pGyTgm1YaH zH>lhja<@xc10+^&qCLX56h+nNxhK-2bUbC+Ncvmmw*=2OSF~4M-eRn#3%<38bX_U0 zQ1O&!HT+0e!Cq^QFykw&vHldR0%x2PLfT)l)Gi6)zQI@SeGuztpTsm?>7OE|v}-q2 zW(-25QO0x_F z;%;Jc*q#a8z0spp;90zaFfTz96j{xwg=TV&r*VuNi9)e87Q)cpW*SM$za^7@V;WKl zi4pOk3H>=})yJfiCPQV!9)2J+7)gSv!4mRf|1?NX@zpK-%#*Ar5D5KawjE*iMffc# z!R4t3;!qIjv%0pFl(0zu(x-)%nNi6g3@!@(o+PzMu~ctt^ajb4#90{ihgH%dW>5@? zt}oTSjo%t`3;0K9kX!&$vH`}zODH2|Kvn2?PTd=c8Kp$S)j#hthVJoEz&Ys5%v7<7 zCa-mJuRpciQ@(!aSVcc{$^P479vu9d21bi(6E|cZ>_8G0Tsc|q?(w0SXCdTv0KGQSiQ1(K(xk9=Mdt+4zg_pRnnld-^Y}6JRi>NI1Y09l9b-RCa-Wy;zzXrLv$SD8L9P3V%nqWTuXF3<`vH9 zpP3ZjZ(Cdn4k+oKORqI|+Y(0P(goETe8x|1!(xwhj?+XR;a<34j-!_YPtj}QLOg+O zph2>^zK_m&0em6A)@uQd8i6bZ;T#{-*`Yl}b+B#muxz93OIa@Uum0iJ6)Gv90ro9@MmgT}HPV&Q%}R*_WcWcD<(?;D#C4{BV;? z_&Q|rd`V&-;(oOAN56_6UInJH=4yD9`cyMLGBsrWGNElA)ON2r;j?~qJiO~%k!0%z zy5679TZux|3X6115KAT2`YqkA!9Ee%Z-$9^x8IT&${qBJwj%KCj#oY`|1|v+1?leE zJZkwy_!&?hrKW(|C2#Q%PhLBAd*%FY5v%_O`8&+p^;wZUP8qM#RbQjq z2U-{A>2{K(pS<&Z`&AA&7RCG&-6L?um%;0+bB>t9=tMt-e&uq5nzsJ#DY%d+Q2t6N zbiHPC4w^<8m=_D1$WDuAJb>++j^BOjP}ljBEz?PdLGR1PqJ>+Jw)^(^ud}MU@1AnO zm!3%R-@zsSbyod9GdJIcss9V6{-^#Ugbh?&m;DmF=@esdB?ykGD9HC}Y0=z6P+`m_ zsirAQ5BOXMN^=i8>CtiUqVf4;#}MpHilC5O?Zg9n+4mq*t_YXvi)ll!GlM-J_}tGO zm$vG=-&Q`s_>o5#!RDf-u=-$S7in)Q0Ao44=PPKrtNIGet(6QE} z#pmm*3?{jf!WcCBALPHNZC6#=8!cke6C(?xsH}dj zhM{lpfXH$e?Jf0++NJMsx5(@;LXb6+>C>(!j7o(5B2gIR-5~Ap47zxm#h$sVS8OIZ zt4S*TUgl;6r8MOP6R*s8eh`%i?XEj0t+U?GZ)Z=Xc(1({FPOpUX|Pmc0!}o!AXyKm zL;hf&z%>vfP5DjeO5t_xR>63S66Z>ma-7>3`&oH!g5?5>wzxrB?3KwX_Ne`7giiVM zZltFu`aE|$_;~=N3EBNPUTDf=;JI1-CK?jC(|1w;j{)fn5r3iU0rE5@9JyYF+ajo6 z_o)&~_n~ik@`?&+$*IYl0GnQtAZBAf7V-_ZLU;@pa+93TN_O}!~lYmx3`zO(Fc_5F=v z&x$bTrf%MTY9iz0`Q_tD1YfO%1eGgy7#h-_A#%9m60)qsK`2&&Y(ECP6#oI;0AKRA zBlP)6f~Z1I;Wtui z9}nc(Wgvvsnh3ciV_gK~iqO*In{-$sD;V)Oez}-*^8sZqZF}Rz4A+i^Li4!iR1M~? zm9_!H809ydz%1fto>`{x&Hb&r`?7#>D~bgG%;5-j)!cnRL~=mViTcHOXE}Y!l&b~z zsz9k(xq5TAA1jM1xrXdJZq&(G+C|ghpo?+1-BV{IwJ(_;(D5i?4+94`6*zt=H`Cqw^fBuVq>II|2e+l#h)y}n) zj<7!QrZ^=fqG)q!#W*up%2IwdSdCi@I9N()HRYuLG~0v;wt>ra1&oF=H9KjRHmv z^S#3{J?QKD#Zg40A-}x`+A$h^O<b2p-nKgTY}fe}rTOJBl%R<$5j zh)pE^Gb(Gu#JoG0@8tpA2G;6{2ws%HWGn;EJ)?SSH`%Mpb1^K-Lq>S#vzq0>X^aj( z#kcy9s=;i0NL#lawOLVP9GPuCCs*g&!D)K0e8B4PQ;4#{y$T}}!~sx!e)J0&AD>yu zGca$J*y6lDp61#J`U+T%?9|+jaZ4FxdA(-k|AN}q$8x~roXN6lcd^@S zd*p`k6Mn|pdRv(kkY`W*kut#UiYjhJpO!yS<@KJWh}0O8NW!KE4%=5?N-z1gvf2q7 zh(p3a!_)7$@|}o6N1o+vYV&yr_f>J_E?6>8!xo7SF3tp#B;WtQyX5%W-@K$ISOQ)l zRA)0pLl%KdnoA(wf&p2ARiVFn2Z(uX^ZJXOxd4yKlF?(kl>g>Z_lM6?!K%xjZR@29 ztg*9sdCHND-%R#K6m#f@K~TVC#Nusvtuj94DlB}yL@kGoBLNmoYUc)nDQ@w4SD9q` zpS1$M$tT7r#;}}D=jorx^y4_3(68&8md9JA>*Y5hsnW7JJ>c*7iQFf7SaFK>!UaXW zLZRUrhhBMqt!wBDQcs=xQuje!uRNo+@Y*uVzLhdOGrXEU5qkB&R4=Vfpkovq4Mrc! zO2;s1Fe+BVp+=%oW)Ay8?n4fR1u`!-b?kh>sKpj*6Z(fGrgW+r2Qq689fgz4HIdvW zOwaMGQmWRK9@c8*?*Uc@S; zu8g6wgHy5lKU><)SY0)`4oyMXK=ftvG`}&9>cF7&jpV(QXM)Ig`Kbw~YVT+|)XJ{?RiF_z@i+%|>CS;EF3h~}C;2C6+P+Ic zsc^O4K$IgwCX!u=pAw_oNPPr4orFBRYtq#ikWvMPYV4{^NZz!i^M)Pyq%-&$Wpe!p zBevO?L%bd)Y*@9n64c$3mrMs`1w45xA2i(#&<^$x1iMaG6HZqlqi0<;jGYATG+Ou= z(6ePX$UsvwPS;rs<}_I7ETU)KUZV!?wCH$ z>otyT7li~5-z}qxCR)oYc>b{#h|lA|KK+JYY%25kU=i7RTxr8nbfQ_#qI<~Q6pHnAN1CzUOQ_E~>hP@wqr^JZeKxZ|v*S)#G2CeTP1pLc)< zN$DZzxGp<`zoFTWJ;ZIL8upIU_?3$?@0FdAQ{l&lWD@->pVohizOWxC8??XLCdjV? z#D62Y{^7Vtl&wYnHyV$BHs^m=ONDh=Dn?WtG>32FvEg|oxJZn?*M67SzvWSoBM=QZ zMqL^ARv1VPf*A(Kjh}tU_?|$#5^SB3^P!6*m$%Bzt2@`bygRxGeR&tK;?A$c7z{IP zcy0z#;V4F%gwagZPO@+!CV?mZvuBJGc#@>|jKc(m%sc9O6i&q( z2$Ch9Sc`}pFeAl)T!}uh`d3RlM5#XI-^Uz>6o63|I%ZTaC_LV{GC8T!2P!5MyNWyu zo@GpR^25beVxFk(5=<|D-M{7uo(2Om7H>=k4)IZ~25YX$YZ#htC2=^A$8ssAQb^1) zQ1*xV36>y?z;N82e|LpC~kZ1_#-l+`Vl&sW~sG7?U$huVjCqnU&25 zWz=86{)d(1<|{YC6s8in@eA;tB>Z=0^?w}7r%6foUnjnQ*FX)}uc3UYpIsA~SWFuM zl0pM1(AWafR>=OEr7}=b_%X30^2mOMUN{kKR<>W5bzf%KUrLin-Wwlo*iSik-SU2H@9B2E zZkcaGU^MKo_$?)dq(F7`im;)vv5Oh7P@YN+%%{rpFyn?9xz-k}nN z4^2p$|7OX=ib{L!+!3SLMp?r!gFl~cu!0|)Ou^`YstOtc1c=6p{5}>SN}uh8EabcD z(FcP=ULT!(T6u~xAz{uH=1fSOTS5*P)Nfsmh?1L$g=y6d-MO@{f|3mynsf@78=bAS zWt`2$PGSP8K&i2^97;B)0_F^P$VP@IrHzSjq6-{Le9Muj@an1t44IJF_ps;}UVeUC z{^>%N05zUl5wie14m_30#jg^bk=&=P4WYf2qP(R7d-N*ZG}A2&#wqv$Y8$K)5+JY) zi}je7IJ7U@hw@(WGQW`b~?-=U0^Qto#u%+>~vuh0+n%fW#KtuIe?#SZRL2DM>mCA&pTe*Ps^KwD!xg zL5C|v;!O{+XPXN}Pn(rUAy7~*vxMBCf7xO^E z(phqndY}mx7dr7D#PI_;MomAOZ1PHJ8%%`jDP#3aK5}z#_5jX!c(FbAK(4Hql+!B; zk0hi!OmUdp4wiVB!Ffg)B0N5N+c)sujKW3WubKV@aYO8NtKg61!nfaq5$Ix?YD7sA zl;QS15#`^Wu{{#2-K98Kxj6Y$Yn-Krp5~#NCoydHbBG=WHGCRx#qv%JX+)yZ{Hp7F z$SJU4zGhE`7)vnFLk~rBW%wDxd>`tXhAsBI!sQ9K5f+|3A+mb^Lq-}e)v8~n>fi!0 zRntb#M1kR_rs2lcG~M^h;?>#?!S(_Rt{Ay?MLon)3R5cjo=kD}^`uN*I@tb-mJJuJ zSriVn3c&RSbL2bL3fB>H>kE$Y<1g%8SRF_qR&zw*@pb;$W&H6WU7NcE_> zve2hW>yx?RY(grW=w7PmRU1OJ{T0N{G9`VeDBe~~%nN*g7ETx*1{^wd;{3J~FZlGB2TZp#ao?pAdhJ@=4;fS4*!-y`_de+*in(WDout&F0HIUIyq1nKdG!n zgvKuU*W0Jt*z1!b5?J#>ehg6kl%|ECwT>2N?&V0FmW+SDqt6hbc~V<5+~#ILS^c|h zc=7CPN1Y4=Ord^`rhP^@Ko6bFRjE^CvXxr4naQp}yx|w_kn1y^tT#J+zYbsU{VUDH}hLqnzy=2<(@Eo-WY|#bW+$KA=TfLk~YH zud3-$L+=I(wvPLd6J29}R~Wgid$979(iVE0^#NL<6IQ9d_&tspX> zSL}(QckDppXK5cL-4}yS)P1W#wC-2+i;_dSuC=m{Ts&e*!tM)HH z&xFI?L}kgFi+^paiHB}SQpE_N#_@xXl@u)kLFx<@6p)GBGzVwcJNL7imodwPCIqpxh8_kOB)rY!=3HhAt1wh9!V#yggG-* zIl!_NRya};$)Z44HC&l+!?57%9|Z5x3QQ^qM073JFh*ZoUr+v%hEtCL)cEawugj2hVV$Iv z(;2%3J)i6id8phU2H|g*Qh|Mjq4WZjDvcVP?6uk7r^A2W0FmDE@Q&)4sxi8yJtrZ9 zaxtOZ2i>wVEiyexzk|svRzX~A`_!d_|x2=*eRKAh=($58KI@J%ken(%T zB~xEpN7-25W?5@D(y}>9^38?!%=gcv8{_rrJB`wNl)pT-nQqF}OJ0e2E>r3vn6}cp z0U18=HXqxN5o0HgVAw^CO8p9{=FjhudkJHGZ4_ZUf1VJoIw-I%nioo4t?qv~E%d;X zop$q&MI+l53?aRKsEr0IjVNL#>sw`cPFIvl>lAO-xTf{V(o0z%!_^EmoD= z93ip+s$G>oq0;0}W0L1YNb#*#g2~OjrE1(FTfsi1rvG95kceEM4vp1h6VxIV_v%I3 z3&9p&l%PM?&xj!|Mr8CBh`e(Zi#RaT%^hMj>r|LjD~sjx3b{^MvHljhJt=8dpb?0@ z83g{)Kp`;#txd}>F;Jm5*YfRyvLq+h490_n#yy@-B{N^i(NhLP54=)ajxBc>!p(vU z`j?3bFGRRW%X3EWDW}PK8=66MiEwidwppdmTy!+w?Mtk`o@hNiN9-3sLN< z>dVg!Jsw#!UbE@fZg<6a?;?jFB!a3S!vAR`vKKdUA0IC-Cv@&wZwOu~>x2mcdx2+? zN?FPT>WdCr7q%K3PfBqtkWMD{O55^Dx^!QBw^ztd!2209krH4t-DW{oS1;ZJla)`I0P9DOlTNAr{y20{an;PZPrhB546UQ8rTHHBH0_QZIFQp6d^dcWm^_ee9fEEyJ9b{KegqUu)_xx`S`=F^L zpv9!L+ZEyhSS${gT&{6Va*dbVhX+DBty!s=?kAP6Y4F#Kb~yOSgJNrX2|hbJLDdBI*;kjAW~F zB<}hVZHtR)5Uv+qu}Do;pD|jX;Ann;SXdgaC`~bZ+qq)YTV+;v=J)PQr;?g-`|)Gc zY^@Dt*Jsx&4%y%`4h?Nv$qYEwy`(?f^7YO8x))$@A zX@Qs=PlzR!Yd5@jS><}xa050%>a%V~L+ z#aStT_3Qbu@r?JVKH4B^$V%KR@0sa8_$EXY9fNAkrZRMDkz&SA!E-y=>_~lEb&YT6 zSxTA>F;N)^e*=A{`&q>r(=GleyRU>{*BYO;Oqm%k&eqG8X;.^h7ffZU;;|FV&o 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 C!RYDR;MGJ_)-GU;!!{7g4L@n4Xsn`6lp>C1? zb0GfncK#nwz<)oM|BO|tKl-3W_^%vd_ru3E`^?bX0T_HZ14(fxBB0uNrjRV5sLH?< zaJHfWOLIf=IAX%lFlg$Th^-<}ZUI;Y2}}t=%yl)GmZBNL#)mFjkGTY#2Oe|Nt@Whk zCV}_IiZ0prr^$&7&!b76r-uO8-hjn?>7I7xj9Q?F>I*p<8*9lTbHxVcj8W7HDgB%@ z90Q|ayA2GgLNJQjoAfEN{Sc5!ElDE!jX3fH5vCWQGnh2diR8w#Q`^-=*O72kCNqF2 z`DZ^G%Iry^i48H&F)7n`@!#J)et}-Bxdr7ANu?+^Ow8AarO_n~?iHIuOZg&tql|R( zawUd5N8lG$;Uo!1J9=vrjY2HL>i5-3M|PS@7OD6rTio)Vq>q;r2MTFEm<&o{MVe1> zU#nV}74oh4N#e*X7;2%wRCsuJ1ORJ2eiK)j&I3KIY6Bjiz-PyIi6|%&THVTYGk=Js zR>iQM68b@4h#EvIH@2ku#)=ft$9otuhk=eMpEd~tfZF-$x?^F;o{nY(#+R(p7Yfwi z)md2eiivxAB(w$wq~}5^iAOIbHuog1IjE?_?8q1q#rSa3Z*~Sg{-HV z01j?FMa6f?i~F)DE}YyLG6n@9F@c8OsvIu395$pfOMy0#=UAs~O$${Ks;uz|{mvnb zI$w`FlNC9YU64O~l&SZJ(^g6Mx7ADWzd`|<7}1w_b7|0P61VU)%!Tw!ZEH^ix?)lg zkHwZ6ya%Zs;wkPB!8>VDm~$~o?HpYl0~L$-O{tg*I6df7(xxTF%q2VQ+>(rY5dCMp zto+O9>CA*+Hct)xBw+Nw-tSe$O?%XoJOFmAlA+8hTFpg;SXreA$innT<=l@HRve1h z^&8vV2*_*w*~w`D3aUI{S+U@BIxP{y9i&h`mOd7~Nf=8$QM9N+p%CeuGoQc(@UY)S zf_5w@73%fAF1kat{FeIFD>H6gp}&1nfU9hm1e;ezl#=7-MgZC;s zDLI;ABZY0Cza0jH&F^`tg%c?*`1!O2^%*Ra5%aI{$qxV0d13TB+dVUJ?O+TnL?s2O zEsR(l9;s6NqzZ|?9@LN4#7kzQ1XIhWl-71#cL2zebyPGuXHZNX7PeloxS0HCgW4ps zMgNR(G>q2hSa#nn`r{n&}@ zO=qi~M)#EwjpxFJq$UQ=;;ncl{K@zCX3F<&)3Ih>>kMzyuoK1AbggB=YC*jjlvgz7 zhnH8j#8?^j70awrc0^1KqYv{9u~*z_my~;ILp5&wozn3w{#mlFvFEwAwS^vCMxMvw zjWhO-MiEGbWwPxu-Smo+nt?W()c)^hx%Ubj;Pz0nSRKOSQzm;VQDE@(nH$!2o~L&j z?siF60mI>$QhqGcjiAhJ(4mppOI}-R%ZN%7hH>2(jrqaSW%k}3G&l}kn zLd6gD9f=!#}X;( z#E5UqKN4oY(~|(6^zv8f>4k#egh;s{NNhoN6AD5~jc_NU8N_GrrgkZIkNY{$$J1A{ zq|vzixM;|NKA@uS2FZ@ZgM_f@vu4W|FDTDW`QVcQNMI{UG0?ZShR9hBY<|-yH^^gZw{q*+B%XjEr?)80%;4)bA(c zyOxZh#AMUz7o5k-dZX5H&AX5ItW-TiK>y%Px_37egft@`NNu@XZW;)3u@E6xUWYm} z24d+5^M{ULWttr_dMb!=1qX}*v+BlTe`)1B`SH*3F4XR$qSo;Ar=kc+yT-j0V^ zh_}`Gx3?0|paT_vap=PZaAWt(UtRw92(9;|(w(xD?biUIY9{pYBodic9ld_SCke!A zt%4^B#!4;B1NJQ5kpl@utf~m%1W6sn-UNi|`wNm~_)*p47~oc$#^ofIt#}8gudzI4 zv5iw0yl8(H%Ml0Ks_|jHOnzwYh*H#jx?;L+QY4+f9tg)X(K{tQy!cc6BRrhjI^KEj zbuWccIw7FecHC)7{FcUKTz*9b2)e{ep~0)es4<4GrQTj~Y|9`yk|FNQq3;meSvT%7 z9A+&Alo8q|0`tp~>`>MaNlYseS1<09rEND!`co4MTP2Oarh* z;3(mLSrViR#fhuV1rk>JhMWR1NNU**(t4uh_JLFa0k*&|4!k3ARfGJyz%QV~;#UQ< z!aiA=MMNFzD~_Sc-O2ZQ$nD2Stf}11)&e9$EBY-uTQ-Jj3Jdi<5RPuiECdx>s!b6( z5l{5RT0#T&8N)8v z91PL&2@OZ03|nMyhoi89=353GF=&&obU86=&7qnVl(-8+my-ybmJ`K$V1~UV$J%L+ zuyiS=8g66cjvTeF72{e&h4+xR_FKYqxrIB9^f#8ouRSB&=F17TC}j4t>K27N+7~e& zmbyzqpSS&r$u~r0zWF}O2(Dl~&Od}Ri<=2>%pPTStFv=m5pcs-lW9g%W;#G6 z3SZmJ@YkvNQAQV}i^oKH!UG7 zDi6aEZNebmhSZki(WBq6dPKa8gExYBo7&;GD)OJsuAF-y3xDjNA*!Llcxa180PN~f z1BUmlbHq5(vDJ_Yn=D>w&j-|oj8pYc-ZE)HIrHNOX+Z*so16!Y@yi@ zjZ774N+$fZBBjkp39 zf29vBX7}*KOxOyP>|)jL4>#zl*8s;XVw{xdS#toul8wsy_C?Zb&Wi<0IaOfgNb*(( z=PtN&WqUE+^TO=*Q;4wbjJPzq)^c7V+B!K|UOB&XzRFoNe&4O777MS2gZzg6pD+^t z#efg*kDP4j=lkC)`2PP>aq<7hLfBevQf8kH4XfFB9=9z~0b-L>45q!6;4rYyy*7h94?Z#;MQ>k+2+)A8~t=ITwV#P|QuMd1& zlOFwp#c+4|h~A*U_ARq;v=u2EQ(#*x#nXrm`hZLbyDF6Q`mN<<9^AUd`KZHG5kuKf zUExX+)qNsjcm282SNZ0;|8ZEP#Pl=l9+PB4AE%w~q~R_*WUvguK2dJfsp5q(@h63_ z1Z*B;O!+dS)CHcnTXu=RMoko&#N#$lqxqC*>l}FhO9?$zH@~=9fkqZezwN{CK13*} zY(t~ki0s}5ZruI8o!c$n@Vs70DYCFUepA4#e;B+>d72@H{wx_N`uT|dc`-`1hX1;o zANL+7eRG@twgCB`UCO`D|KGj=n*Xw8EWb6==gpS0wTs58SDW4 z!=fmlaU$FMXTrn?`JZT}oP(`}vEhHwG;&zm{%gwg&lsh$>iWY_{@#o?DxT*bOQas7 zF-UKW^3VU_Ckx=G12h#W$c;0lvG|P&F!=5H=eJz9mx9q8-%wESA7J5na=jfjbiEwt z;`?k6bl>SQB$t=_7x{N1I92rWUgQx%;rX3q+Rt?43PE_psvBg2*k7~mj%}bWh8p5Ix zC=@JvEK6vZ%A-xN1N6w{_P`F*DriSodA-8%p>n4 z?%g%_aPC`dI&;!(nz$a^>C7dPE5&-8O$e$G)sdh;EWsG;EJalam)I!Y(#ceNJb!#h zni4kBrbwdD(E|cGjFF8m;A2a)YewB-yW)}VxdydFGT9hxILHlaF6+^*(N@i;LPP3u zUZEjFOCx97JUuQ(@+TJ}R3fK0S&R1IBkNZAA&fd*e9bMwJKe;3^`pg?zuT$}g;QWo zUOVE70)4S!==*@QhsM|?D4eYJCdKa>Q7vkqMiM`SDUm_qwSW`{(woXpa}3UZ%>jHm zGcSnQ>&z|Q7e@L_)WR~^OX;~&2yaM>PH>yVWJ{-Cgjf1wF#trIh3oX$`!P$GDMe)5 zx0mMrlGJk+W+}{2Y!w(1i&rSJ7iZ%SIS8v_HaHD4ECA-_4`U178{d1(Q#1Y0rL2l+SgHk4 zFi+U~M9?{S@JZWKtL2Q1R3+Dz1Xdh6zhA(0<`I@9(N;pX-IcxqvQ@ln`K$}$k@t1Nhn?TrzI>_%y{*ew~(J|(U-^~k+Q z^XTGMRBbjrTVkU8n3%1cbNh|TpB2=F(%!)PfxR%kqf6PNZ@y$K(pl+OHOUREO>{!cp<_mZJWlOL&HCnh?`{m$PC`tor zXIJP`Y{Oj$;aY5`5dyq*PWu(!8Kr4mR0)H~ls;okBcO3)yJpt`a3xI4{ID|?iA{`5 zqJ1E8bYdJ{ZMFKvMZI)$(0Hm#l9_v=QX3ZYE#O_}?=~%cE;PNW3bNTlTK-dLAV6cT zMQOavdq1aTzs%}CT!K>-{y^RhXi#rfsh3f7RA~W@#s2qLuiYTS(`;Yv_8-n{rj%^7 za$pr~kWD}Yl7Oawdl))-aAN%CDBS#`;9Hhh9hkl##Fx;d0uFN7owu0m-qvz7`&p8# zCbU1+5-*HCgW@0fDB&)dNSFh^?PE<8Gf`2^b0Ci>g*GGSH>_ZOO0Oo!%zjd71ebu6 z+MK-xlD$|`8D{C{r0f?i9$SK|y8+ytev-Yv*)4s#5H{wIqdaoYZ0`Td_UN)_A-%NhAgr#@pe^ z5d5$-HnBh)5p1*YFS&JqSk{G1yt#{M-$Ws3HkpdNe1sd4TsXv_LXrUkW+=fHz@B%7 z8zlw7mYd)8q!mjB%jc(A+k5x+<9FAy@B7L6&AX zDl8<&6_;#VGsP9)b?}}lC*-9G{f~nvuB+(l@^%y%ODpT^l*Nfv%+&MkLV|!QrE1ah zV9df}{)pK1b#u%eGTh88dn<@48vSW(f(JE3WKHW9_CSVg8Fng$amIkzh8l#}(!;Xw z6l{eVSe_ep9i12mW&}#e*6ZgUA}ah5;mT$v*y~c1*4HkEW`qkgg#n$a=upweHjJI} z(8mUkUSYjFz{eFWzmDtny*qN;Dee3q18C-=W|twakF-|r5A))dF=gGq}FWW-Zk94_${)7@cI(oarCJN=rFsL z!7=-W`R8Bm7Z45AM1Jz~`*J=2u!)W~*#~Jp>$f6?HxY&@3n4@<^O;uBoy}8WyZZJg z_{fY1b92GL!Du|fX72Lt99%TA=<^X}mAmj>8baQ|hPA6BC)x0P;=g)Exj3gbzOb%M z0IX5KeEH|z;sMy*Y23OJj$-|3%U&3|Mx>rEIr0LAc$*&c1;MaqCz5bniYUEq>6 zcu5F174lRMJw*E=fa);x8B`Selj&t@neDrCoxhtCDeGPX0D^g{Luq|6dqbP|;`5Pl zcxRwD>)Zdcja0yN-)mgfDGCzLZc3fFA_lk`;Re8TN8rLuCcKBzi84$7k7Afak>ERuYjqL?SjHbtJ`)HMUB5;4&>zxC-UI1Z#Q?CoKXRpvsLb zGzURAMP}vE*%mV&0frsyVY1AsWi%s-}5500W# zRbf7blLZJ3nQ^dj$hebv#{Q-R<~gi*fv`$Bzygy@>n9Md>hmTxkFl8(r(UPY%sNdG zY|mynzC1={4RKStYDM&Q<~|9Hf`)+nFbsADa}mrMv&7g|H0E)_9^pv^jlq~VoT#-z zfmNB~8?zdbE&0F}hesF`X+8A}6-XmoU)dU| zPq345GMtU*P{wx)c%sL`K=V%>;jBT?+xp+tf%8 z_>Q(Yz9{<_+ogD6C)c>;CkiH+W%ntDaYU~{hb5D9P2zAfqWQA0-I%W8M1FH{@=WZ1 zUMy@Me3X-Or7TN&FXSw1X4w|(ZGQGT2%+WVbfx&I4P92{-G8fV>N=3x#J4PmG|vuy zmS}o$$<8C4>K-P{;gm%z$hFEQHRqAzE?{W-}S~BzoSdyAMuVhYdto7vhv=(4#+wCn1P9UzrIoPrIYXdjA)KchM zYWAprY;LM0UJqUCi@Z4LABg$v*|E(cu`6&$?lnNFOlu48XthkR)A42*QtvHz{|>My z<^H1~%U6w|ff-3-m0c)VVgAkE=up!j!5x}3oH3|ECBrn{Q*vc(fQ8#v0P0SUyC!&& z>8QV2S(@(u;IG;t=L`3Dw~rcBo}LnaHnU)>BgSu)*y-?}1!)HLOK|m%ozC44b?TqK zxj(4N|9uhqpx+PB<`-dNC!iR2mj1gcJ+b1_vY%%4%i8dC{k} zw5mf(%kv89b&q;~QFX3;?vm20Qauy$dHbI=oVNG%-)YcdgiEJ_rN{T(%@ycjYACsKXL3qN zQSg#KnUxFm5f5WzAgjT-n-f${pu~^!$QNdnr@I%r8 zc0gMNO+B6hZ;h%SNdh#(J! z9Bfs1Oly>P${M57wq;{Ryxwi1Sf<+Kf5e3^-uE_W#Af3t7ZOX*kQxT)kD}Rd(SLt| z&tqPn8wgQT+H7_TTsP%V$S1in5N4laLqU+}N6EQexNuOWtDm%rur2MsGL%MFoIhp4 zQ%z*=W6#c>KCpcVlXtAPN&4GeO)_Nyd`hS3m($+q|?lmug`;R-sJ%uNR;y^hVl_8pK4Zolgk6*2TDKmjHF!fxPAviGy52ht@ZkwpZ$9b zMn_hEtDd8Ue#~bGD33R=i*Bh`$|IlaLp%Lak0$6=3cn#@RDk5}oA34dQ+wp#Sn$s+ zmG!mIx)y$W`?D#2bNh41BN||k75;MXU1x}A46ZzlU`yz@8|lO~qgKTIdCW4EJJcsy zN%xlWW=bhEH437+z0=|9D2ju?*z2%u!JXL-Yz!KDdqK!XE;Jl=)Bj;=p04=hPI}HL3ix_t6NIaRw-v& z;IICUG)!ZD{{cGE__dmt6Z-_t+bry|zto#hy&?4`OX?*8{9=BQ8o_Pfiw0na9wGNj zKIx^Uf^30!XXqH*fBh4f_cpmM)!Y@79XbgwixZ|DG=&L|z&2ZO)IUq?O+!*UrvY16qtWn%k^bB{LT)P*p08P*k9! zlz@Of?&=40#9Coer3!KpYGsbC!LYiIE{T{I@1?v1(H+;Ip$M1fIL#LB`V*2+;Plvz zXf+SS-mGhUz*wRsi^Nm&-V1@GY0a{vGBZ#t5#U38!VUfvpNgxC))zi7`Bru=lX$kW zGh0%%8>zv(scor963CBbHL@bYpME#CB7kN0$Zj;YB4N*%2W_F=mj{73K+=DXlQy=h z8VRd^CAMxXZ1l`M8Q5BDFla~!Kqzcrwo;=%ViYX7p9V6KCV=^t%*sXX@Z@d5JwowHLVWwe3T5v zQ%>-pf-VbhI(%2Hsvj|-Y>I*n4h&3aSL!fejFlOL!d|^JV@+yq^3rSlN%8f^R7m72 z&cAo(=nrG*-gIA)JQroPmSUGUw9-Rl-`GTpx zUj1yv30Nw;JxiZW2B|3L){%QQ0OAWsvxH>;b zKQPb^;wDCJ97i2zyz^#UdJU(-a<2Rd`E>4+3OA1FhzicK(aa%T*%<)n*$THAP}n|FjRMynb0d7FnU|b&W}jrRS|Pfn1KtBu)mu+ogm@C^ zm#=d1sPmfqs3V53%WO1)TXaZC1{PLhLfHM1tnTHo^$5&{r{^-s0%Aiy? zWq8id$yxggiI$iJ0O1RD=HJdqv2P;sHNd2~X8iPr8hG%L777i%IVicu=6?++a~DzK z78kt|jm$naf6#o(=vT79pig#J#C=>p2)TgD+tkG=|GIf$QqU za}$MHl4W$`OC2$WYX`!8PpRo|MilifzP|4A-7C$I-QF`ua^iICO0+p9Gw(QTO&lZG zEHtYu4xN>phcK0dfL}vd-J+Vp9rib~ibSYUH)6+r;W)$XPrEC#&n)#{laq1q+wW)n z2L7K9*0YOu^#shXU*>rKNm%^%Ebu=|*DHFbf8nS9j8$ylPD;zp&lV!-X*Dsizx+Un zB70c+BaPg9>*MHHLVpk8P>TUbT>yDcdYOZm$eV}=IH1t7RqV@=%2*)`yI_@+D{l0S zVAzQ%&H*=zXBAtoaY#QiYtMVzW_oUWeoyz2zGOO0y*hq-K6kxeeOXU&gD94duUg84~YUVfKusQ`dv~CsOs}?kawF=XjjW2Aq9ixK6WM@>I(P!Mq^+N>!Lxa~a z3T}AK8y)QsAAti(GbTk3OeT|&cZ`=~9dq7nyuu!!_ck(EkV>QP+W=s_&({pHNwcD{ zE`%}KGl^b`Piz*ql1-9)Ybc}gj9Fkd2s)@FCvjQ;tT{pe2-TQBjY9--*jlsVrJ3j#41FEhbS=d0}Mfm3{8!K@86u!MUVRX zfU{E2s{=+@2_@8|g`=TkGIY(c0cf;@lA)L;s1)$K1+`aDB63m|@ieyasWx;E4OAkK ztFk}T>7ta*u`4#A0km)m6rKf?hBca4`EM^5Rf?K7+SR-nbE^$BI!PQ|afxEFLhg1b z@dOV`A7EiF;1uBX+zwa=;x0%?6}GF%{Z*QHQE-%iKnOUU+cR39v#N=l@l0nEKWXp5 zWJ&7pv}wtsi1Y>%iI9RhpJ6igF{~#!=92_JYJs?64kNtD!qxg)t2OGy{oe_J;fL== z5K0p#u>r0LmeyyT?1mitV6aF`slO?lDlC=PnHky5kGSlxdXZNIsx4QtCx{?9o!sD# zm{S9u@tnG-6C`9Z0S~Yl5tnyAZ+MPw;D`@EXt@N8S$0mqZSg6$o!y{hZsK9_8ab>b z{MJ)ZuS4SPUDiW(1qYT!xo}=eL1Owvh1g_AD4qf*I%5>?K(MshGAGQFxX=@1`($es zdHIX@ci+avZxV%kB#bGP1=+tFGkt@(`0okztAmU$Oo^Tvz|O}Jh|~edhi8PgCMF>S z6||?z<6x$HkJX-z;W+?!J@7Td=C#vKgkQLXCH~gqxQPeQ_Mr;Zl9VAi0MU%-eUi7< zSqIRLYJHo-P*0SYJ<>Lepzb25qK9B0uR6pMeygS)sRn@v5T)gB$CAHU?kUB#R>%a|jw$Xg zt0PLJzCFaHVHJJbN+kJ4`+)jnl=-SwPNyYsc!^ejbC>zC z(K^3)o7eK@vV>4@vk&ycWMUG$@don}FfLgf`tdIAOz+6Dm1IWL((*FKsiME6+@MN* zswz_+VyjqgHVg_20MP+J`DrbO9w$>MX<9tO29O4>fU&@sAI;}pfgd_#N-kp2mv=f1hd_yGOD?5pNu4jET&F<_^(Jrl0kky-(;8Y@p9d7Nh&LFDMBKXK=2jDZ zN+m%jWL}Uf zkz3YqZ( z@MTJ4KkA(lx#)|f!r{E9?`_LCAJ}(Gfa)$aA7Br?MPc{0oCG&;jv$aOO6GRM%xZPx z%mVOB2h{q@onNX)Yh%cf-p(xNNhD05TK2GUJmeUB0pPsh=gLsi-U42U99^|LxxRPV zmn9{^UG(D*dk3SxF=|BNe0~LQlWq?ioMu4V#{$}WaBZ8udzWv=m!s}@w|2`)LQY}Ue1*`<` zLVEn-199d1Z&c^q@ZgS?_E4}Rv7$^Up{zbtIB5u}sGbKj2_eo+BM|RNZ zIA>CN#w%i+au^EluAiig{PEDy5ky*7_6se@xvPI11>+4ZI)o$$LXo~`sK7Sv zW^P)?5N9-d{)!*fYt6}R`AbTna*9IQYSu0Iedl7rW}TG|KMwUY3=t^pSK++{7g1b} zVqJL(j>Q{(gYm9H`&@-alam&W3EW^HqG-;}q!?QjG$OI85zF10PU7gkN-*m5vt3(Q z8=sSTFvk}o-reThI1Htk@l<9tOJ}z&j{*)9gn9!kA$f^z327q@C8@3c9 z)Qdx8Uulp{dS7agO>+M<{I=aZvjXi{pBjZ?h*54>7vUu40&4v#9Rv5Z(ZdN7&5WXu0MnTZ}v?h-TTaMlZz*;x&_+-%5Sf?+{pXS zb1&XM|M{1^@Y{YOupB(_vhDz6qY@4pjoulA6H`Cm(3~HoX_s*C+fGGp z4!jvIkAF=0sdr=Q?h^qMXg3(Qu$p*oJ6HucQ1}k%jC>#qfMtXowO^9(iWnbl-y_hO zcFAVRVey6lWpxG81BhhpApujSya9IG`iJYhBWZnW)oy$D`bpigb9XnpF>WV(y<4RP5#z^|*)N~E%J2FE)IomaqW zqO>_jDaa2F;ksTAcUCp)i;CB-y8eeguJAf!y|Qh?o@Ws^43g<)xUMnHOEH?szH?0< zpJR7|LN0I4D~jgs&GjFX(aE}^Vbs*!4&XAha$BuIyRwWWj1~nY-@aNM8a9n<4t38C zsJM0BNV(pvb4_JjCR5aT2$`)3C#dUtS1+d=Dt&{FD-^o zzJvd(u`>aOs{0=}iJ~G@BC=$OiZ_v+5ZRM8A;uWZFlH<>jHO5j71BazLGfCOkR=&P zX|Yw3U5m10Cm9s~Gez&*S^WOD=XT5U+)v;AoO?RUtENlJd6`(LG5Ph}XY!-RNgY$K z{g`F9XGS}v_v2LpIEloy*whV^H(e&f;q0?lCBB?N@&{;TSI=(Gj3RBY`Et*>pC?$Y z?c4FNXU-nKc!s%3_V3n~8Aum+5@LVmR1?pmm-$k&`MaX5zMpY49(UX|r**=%>D7Q1 z>e~3eSjo8>4&Lk4&jp``JpQ~Ga6(uxfuy<+d2bxHS+`TC;iLpQM@t&Bu+iFjbG4XQ}>K`U#< zx`KqTfq9neiMNPT>nj(06~52ef3Q^_BEc(;;m+~+YH-G<_3VBe5;?B^)43owT)BYh z_^AoM8{E@@oAa~-SP0yGEpy&S)-ct|-tuc}`58YXC~N<;Pwd`p-;DAA?&E#`s>HRH zHTJ4<%QipY#cuM}&@mvu44g{MxxKR=bz%&|CiE^m)Xg=(XHSRrSC!@7@| zUaBa54-VcKT$a(JPT7x{HT~lcPd7TVvs^D8?c_LR`&eo7ZtnGXVx*GK8macmy1j8u zxvzTnZ+RdSC-sk{ZHormg-wUdm9mVyuq>62z!}LQHJfw2<66hc<=?h`^PH|+-D5Mh z>RstvR9RZM(hPEa$q$7&4fVJD=n=cfN>dxhxC7;R{;!*JMYMihK~%n!88Wr8!xp{@ zwEQ>R|GR9~;z(t~y&GFXcoRvI6;DgU2_m_{_CaC&6QjBcU4a}W@!w8LbO{x%J!W4U zo!QbkD*K5TAENSUi}QP@5cWvjg*o?}m?OD~QXS9pjY1_J&AeXaz&BYTRJ!L=eAkss z|LbAJUK?T~W7-~nN6#fI&Jl(RCwR8+eqw9(*wk9EyLW`$zw5?CY(?+aL7wfLvnkg~ z+s5*u*m~HB_=xMp6YurQn@6$WelaR7(-e^iD$sQ!RllQ(W75xA0`vMp{TxR^ zF<1NDinc1TIVK9Fq<6jl#Gd5+I7w&*_pny$L`XAo-E2VL&1b3?O3>@uf6 zdq=~yYvcE&(if~Zs+NSUO4BUbo=5bUZC-dbV$x=DTIa=J_ue$ZFez63$Pw-GFdiHB z4O54;5-#>0j$6x$wm3K?hbIVygIOr!YdyOiNP8+^i5Zuf^2YlL22G9ka+yWpHKTJmXME2q z_HM{|lahfMZh8}}UAWf1tub6Jd-E;+O51n5Lhz}ZINoj7tm+D!3no=EI*kYW zo)=mc=H{n^7MZJN_O%mFG}ezw+QrPnnyv-hoO;wcMVxvwsWv8de)WR1h&=KRo_R9K zy4Z5gyz$oA=`&Xc%aR9UJ@hZK&s;YdWK}wZW$nTZq`@TR`tTJVVrn^RJ%-#zm{U9u zkM+Y1vI_0)n*W0<-G$1WzSOI7GH{sCxap0ENY{H!SrNa(jrHXfn|B_S(ya|-R_lnI zQ8tS)s7P3FyP4LHZx(8KP>h)=@*P@lY|Pbeb1MIeZ2|X%VJ}`3dfUB$_3tKFVn^BJ zHlb@J3oF8c5AK`Z+l}{i(|>9zf9#FeEd(jaPiIKxp-RRObHmGr9k;E4L%tf8B`Th2OJIDi|)#_*gXHGSI{xuYUSQR-*qzqW``i>420@_g`Nn zc`q3(#3BPM%GcfG^BP(-Er=rG2cGj8#Eq=6ds2BhKJd-S^X>*WW!%}?eZXOX_jy_J zA`?cG{uOhP%3v!}*>Trdj_um3lem38UlPNA74LiL%>L3EHGMK?C{yP=i>!v}7RO2a zRxbJXXICFQT%acL36?(^E$=qqR@)%6^%=9CDi?Z1>Yl95-en#r z#D4bWIw=oRW76B4an|GU(iYl9LK-NZ8ryN@mcyI%@lh-I&t#-#Zp^!8lu!v_jJca@Ppqh5Dk zU+l5C;vq+$`_+@kqp=z7S>kQ01O#*1P&W5@x<0OIdG{cSS3cA3t`W1vlk6cYK0DD% zn@@e+Nn#^5a)w-5?|t-_F(E9XZP&G|N9Gn?*);})NHa6{>|Xv(ndIA_6od@zA`!*} zv+Bkn+spe$EO-_3j3Npv!}umv-ElL;@_Osn+C4fLdryO?84~`iDX8nxk#U*hD3S3} zX}|Jd{U`nyq=9@s0{3Af792|Qs8Qh*HlmiP-{brCYqi231)E8_9B+@*;Us<@t?pJD z9&1T(o)lFbDBW0MJ-+YfWxH|7>Bff!*S0-=T=i5giM5JnWB!nP_qPnm!yWEDJ4qXi z@>YiobvHjetNHj{hk3!>%cIJ1$D}pS_B<u6z$Xsc3!k(O+T% zu6r}lcS!zBaza>}ck9nu!)tX(@JQitE$#h}+;qF0oe9hIz(P;x;^5HaOy1|4uooV!Q6Y+*58_x#PH1fNfUM>nNU+}XQlaqb9a2; zOuaAlQ$3Z@vsIdCV)4%j)`vP-69UH%byV0aR_ps6*{|XPHCu zew{q&d{!sX@rvyvxn0$X-%fwnG47->{=p`6aOnA((zjo^njgmI4G)WaOpCsy`#LzM z`GIOctGmWn#?^1CUA$4cH;7e>T;|5itN58Vfz>~2nI^$z(d+zUS8@TVHj5(yqnwdVjyaOtYQ7uW8h^;aBB4SrPr94$bcSzwMDoXAkbdoMle5^ zCEN$)h0}(^5xz?YNmH|u$I1?o_`wXCec+H)2rCKDmso#Vb?R4dWGX+E2mjzYAPN`c z)ek@_TjY`^v@eeXBNWbR&P9OPJH@|e?<~J90{-9ve$(;wg@g5La!XJ8h^vR%1s1`- zPXHLPWx{VWXo}MymQP35MS@jU^m$Tk-$P+Qml&Y95QLW|Ny9scg@aSqm(ORTG!0oh ztB9bToB&h2mfTrdzC^$uVA3=wJv4$bsZA*=_aacz8VCmUb;BN75&@3z!lAGX6jac? z^|2W&%}M}Ev$ib@_1j=XIU1HZ%*U5r0Fu?Sj;>~H1L|%4z1{gTiLBnJA`Qq2>w&-2N{2om(MAXv zqH&SWW){3`3p5jkKrD^vK=e@ra~KYeqz^Ou_1Yl^K>EN94Y#`{R4{TyUaE)Mt}rhg zy>KJTCnk|{>J6}$9Z*sfA|KI|4$=bQit+&~DzQHFC5(FimB|&TDgmm87z8(YgbHWq z2|Ix>fw>^i;#Sy$So*xv#}bkhK+=zHq;}^+ONKo9D0Ta4VHdihnL5%#nZqzEil$j2 zvo;q*nIf1828}dcCx$%wqV4;X>@^RZFa>bXIw|Bvg|b2raN0hIrE?ppL$;TQF+L1* zR0QUS);7F5B?ynhVKL@-U!c{LXH`%zc7sM3S}A_YVr=7BK8Av}K~|woudK+JpvI<9?*fBSRj{{Vd+7y%R~;!RT}UK zEnuDJfCc5q=TmUNru-}GbhKYLI~ycQG+;rKx8XjN^ZSS^vSQ+U>6=;l8gG^oFi$M# zl0sv;rHBEFK8Pi9_0Jo?z761p>V|p*1(C&JY$H<+QtC~>sHEY*!H@nnfri>}a?i~Y zh4G*-kM2N7aT#Frf*Y#XaUvy07m3GsAYA{O`bwSk?W!#48357(?j7L%bBTb5ZxsX3 z%4NhkjJCPO#1te3L9)BH&r@m=Z*8s&rv+ zwSouIvi>m#nCGCSg61s#IVA?;iXf~Um*+~EJ8y$vN(Q+G(st<*0nZ&EEdKKy znZ!8Tj-Kwdx(y=Rf~JOuzNbfF97~bv!!R{qWpYms+Mw)crzDx-J^yDI#8!9~9Rl5q z9x$K_Esw+w3YG~Ba{>?SO+P3Fen=NP0Abbu^`NFc{+SZ8RHzwrEy!QRD2}^44}h5) zM5)Eu`h^aORva=!^S(rc3J_-s+|ZnroTh+~`x2H291ew9TB}SQK~LB|AB6*NEdu*M z)vEYG!2x|}^a@pj! z3Spe?WX{pd*e#sobO+9YHmz0vKsof2oy@2YLAk8~#b*!r$cD-y0V0!9A;!%Hne$BI zQq4oac?FyfZ4#q2DLB>^Ci*Be!T<~zp&2@gRk3$2{O`i^g!En=&B*!)cNCyv^qO;zRg2LD|9uu5G5Lz2io4e zGKWBXaCjJch0YzH8^)Mim`{LIhZ;uEikS)LgFyI!rd{s$rxB51 z;)^&)3U4?y%m7sEzjBcQWOJ{q0N$C};VwEcyWiJ=Bnrg8(Cvl-r9fa~SIeJ+h0E)qIscYX#3i4>6&Hao&K!{vK&U zZ6oNO`;>_E3>pMuwV>M%Q(}5@XfP{i1l_xhk~8>#in9U*y3rUVC9IT+vb@ybe~h_7 zH}j$-dX+(mkgdI_tqt8fh7w~ygktFKBtwmZuKcCMwZDMkfSUAU8@g_g646sngJA4` z=xPp1Ok6V!W(ChdXS+~xNj{cbWp - - - - - - - - diff --git a/doc/salome/gui/SMESH/whdata/whftdata0.xml b/doc/salome/gui/SMESH/whdata/whftdata0.xml deleted file mode 100755 index e76c52606..000000000 --- a/doc/salome/gui/SMESH/whdata/whftdata0.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whdata/whfts.htm b/doc/salome/gui/SMESH/whdata/whfts.htm deleted file mode 100755 index c66f6baf4..000000000 --- a/doc/salome/gui/SMESH/whdata/whfts.htm +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whdata/whfts.js b/doc/salome/gui/SMESH/whdata/whfts.js deleted file mode 100755 index 2041512fe..000000000 --- a/doc/salome/gui/SMESH/whdata/whfts.js +++ /dev/null @@ -1,39 +0,0 @@ -var gaFileMapping = new Array(); -var gaFileTopicMapping = new Array(); - -function fileMapping(sStartKey, sEndKey, sFileName) -{ - this.sStartKey = sStartKey; - this.sEndKey = sEndKey; - this.sFileName = sFileName; - this.aFtsKeys = null; -} - -function fileTopicMapping(nIdBegin, nIdEnd, sFileName) -{ - this.nBegin = nIdBegin; - this.nEnd = nIdEnd; - this.sFileName = sFileName; - this.aTopics = null; -} - - -function iWM(sStartKey, sEndKey, sFileName) -{ - gaFileMapping[gaFileMapping.length] = new fileMapping(sStartKey, sEndKey, sFileName); -} - -function window_OnLoad() -{ - if (parent && parent != this && parent.ftsReady) - { - parent.ftsReady(gaFileMapping, gaFileTopicMapping); - } -} - -function iTM(nIdBegin, nIdEnd, sFileName) -{ - gaFileTopicMapping[gaFileTopicMapping.length] = new fileTopicMapping(nIdBegin, nIdEnd, sFileName); -} - -window.onload = window_OnLoad; diff --git a/doc/salome/gui/SMESH/whdata/whfts.xml b/doc/salome/gui/SMESH/whdata/whfts.xml deleted file mode 100755 index f8bc49348..000000000 --- a/doc/salome/gui/SMESH/whdata/whfts.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/doc/salome/gui/SMESH/whdata/whfwdata.js b/doc/salome/gui/SMESH/whdata/whfwdata.js deleted file mode 100755 index 463bfb00d..000000000 --- a/doc/salome/gui/SMESH/whdata/whfwdata.js +++ /dev/null @@ -1,36 +0,0 @@ -var gWEA = new Array(); -function aWE() -{ - var len = gWEA.length; - gWEA[len] = new ftsEntry(aWE.arguments); -} - -function ftsEntry(fn_arguments) -{ - if (fn_arguments.length && fn_arguments.length >= 1) - { - this.sItemName = fn_arguments[0]; - this.aTopics = null; - var nLen = fn_arguments.length; - if (nLen > 1) - { - this.aTopics = new Array(); - for (var i = 0; i < nLen - 1; i ++ ) - { - this.aTopics[i] = fn_arguments[i + 1]; - } - } - } -} - -function window_OnLoad() -{ - if (parent && parent != this) { - if (parent.putFtsWData) - { - parent.putFtsWData(gWEA); - } - } -} - -window.onload = window_OnLoad; \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whdata/whfwdata0.htm b/doc/salome/gui/SMESH/whdata/whfwdata0.htm deleted file mode 100755 index 36480d595..000000000 --- a/doc/salome/gui/SMESH/whdata/whfwdata0.htm +++ /dev/null @@ -1,610 +0,0 @@ - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whdata/whfwdata0.xml b/doc/salome/gui/SMESH/whdata/whfwdata0.xml deleted file mode 100755 index 608b52b45..000000000 --- a/doc/salome/gui/SMESH/whdata/whfwdata0.xml +++ /dev/null @@ -1,598 +0,0 @@ - - - 6,47, - 6, - 10,11,12,13,14,15,20,21,23,24,25,26,27,28,0,29,32,36,37,65,41,42,43,66,47,48,49,52,56,57,58,61,62,64, - 1,5,6,7,12,0,30,34,31,40,66,50, - 10,11,13,14,15,20,21,23,24,25,26,27,28,0,29,32,37,65,41,42,43,66,47,48,49,52,56,57,58,61,62,64, - 2,3,6,7,11,13,0,30,34,31,37,65,66,47,64, - 6,11,13,14,21,23,24,0,29,65,41,42,43,66,45,47,48,49,56,57,64, - 4,6,7,10,14,20,21,23,24,25,26,0,30,41,42,43,66,47,49,53,54,56,57, - 6, - 6,11,13,21,24,65,47,48,52,64, - 6, - 41, - 49, - 58, - 33,22,39, - 9,11,13,32,37,65,48,49,52,64, - 5,65, - 10,14,20,21,56,58, - 10,14,20,21,27,56, - 21,30, - 6,65,45,49, - 24,37,35,38,42,47,56, - 49, - 53, - 41, - 1,2,3,4,5,6,7,9,11,12,18,19,28,30,65,41,47,53,54, - 5,12,14,20,21,29,30,36,35,38,65,40,44,47,49,51,55,56,58, - 0,65,49, - 28, - 49, - 9,30,37,66,44,48,64, - 40, - 6,24,65,49,53, - 1,2,3,4,7,10,11,13,14,20,21,23,24,27,0,30,34,31,32,37,35,38,65,40,41,42,43,66,47,48,49,51,52,53,54,56,57,58,64, - 5,7,10,12,14,18,19,20,21,23,24,27,28,0,33,22,36,39,65,41,42,43,66,44,45,47,49,50,51,55,56,57,58, - 11,13,18,19,28,32,33,22,37,39,41,48,49,52,64, - 9,65, - 5,18,19, - 39, - 64, - 5,9,11,30,49,52, - 5,12, - 66, - 9,13,30,49, - 41,64, - 10,25,26,28,41,42, - 65, - 14,21,24,65,56, - 41,47, - 5,34,31,33,22,65,50,64, - 0,66,44,51,64, - 9,46, - 5,11,30,64, - 6,18,19, - 5, - 65, - 45, - 12,47, - 47, - 47, - 64, - 64, - 58, - 47, - 30,47, - 49,58, - 45, - 6,65, - 65, - 5,65,47,49, - 1,2,3,4,5,10,12,14,18,19,20,21,23,24,27,28,0,29,34,31,33,22,36,35,38,39,65,40,41,42,43,66,44,45,47,49,50,51,53,54,55,56,57,58, - 5,7,10,15,17,18,19,20,27,28,41,42,43,61,62, - 0,34,31,65,66,50, - 65,49,53, - 10,11,13,14,15,18,19,20,21,23,24,27,28,0,29,32,37,65,41,42,43,66,44,47,48,49,51,52,55,56,57,58,61,64, - 6, - 65, - 9,13,34,31,52, - 5,11,32,37, - 20, - 42, - 24,65, - 42,57, - 49, - 49, - 49, - 65, - 12,14,20,24,28,41, - 9, - 6, - 47, - 5,65, - 10,11,13,14,17,20,21,23,24,25,26,0,29,32,36,37,65,41,42,43,66,44,45,47,48,51,52,55,56,57,64, - 17, - 5, - 1,2,3,4,5,7,10,11,12,13,14,15,17,18,19,20,21,23,24,25,26,27,28,0,29,34,31,32,33,22,37,35,38,39,65,40,41,42,43,66,45,47,48,49,50,52,53,54,56,57,58,61,62,64, - 6,47, - 47, - 36, - 9,11,13,32,37,48,52,64, - 41, - 32, - 23,57, - 47, - 30,45, - 5,6,7,9,25,33,22,39,48, - 15,65,47, - 15,18,19, - 5, - 14,20,21,27,28,41,42,49,56,58, - 20, - 5,35,38,47, - 21,49, - 6,30, - 16,65, - 6,47, - 9,11,13,17,18,19,20,32,33,22,37,39,52, - 50, - 17,18,19,50, - 18,19, - 6,7,14,18,19,20,21,29,65,41,49,56, - 20, - 49, - 6,47, - 56, - 9,11,13,30,32,37,48,52,64, - 49, - 6,10,24,65, - 44,51,55, - 64, - 21,49,64, - 5,6,9,10,29,65,47, - 6, - 47, - 65, - 1,2,3,4,5,6,7,10,12,20,28,30,34,31,33,22,36,35,38,39,65,40,41,44,45,50,51,53,54,55,58,64, - 6,20,65,45,58, - 30, - 11,13,32,37,48,52,64, - 64, - 14,21,41,47,56, - 6, - 21,58, - 12, - 5,28, - 6, - 45, - 6,12,13,20,33,22,39,65,47,50, - 6,9,14,17,20,21,30,39,41,42,56, - 33,22,39, - 5, - 42, - 30,42,57, - 5,6,28, - 6,65, - 65, - 36, - 45, - 6,9,30, - 5, - 36, - 21,23,52, - 1,2,3,4,5,10,12,14,18,19,20,21,23,24,27,28,0,29,34,31,33,22,36,35,38,39,65,40,41,42,43,66,44,47,49,50,51,53,54,55,56,57,58, - 28, - 50, - 47, - 5,10,20,47, - 6,0,66, - 6,47,49, - 65,64, - 0,66, - 1,6,7, - 24, - 9,11,13,14,18,19,21,24,25,26,32,37,48,49,52,56,61,62,64, - 9, - 65,64, - 49, - 50, - 53, - 65, - 6,41, - 41, - 65,47, - 17, - 1,5,6,7,9,10,12,13,17,20,21,23,24,30,34,31,32,33,22,35,38,39,65,40,47,49,50,56,57,64, - 27,28,36,41, - 56, - 65,47, - 5,6,9,10,11,13,14,17,20,21,23,24,25,27,0,30,32,37,35,38,65,42,43,66,44,47,48,49,50,51,52,53,55,56,58,64, - 65, - 19, - 65, - 5,12,35,38,47,50,55, - 47, - 20,23,24,28,29,41,57, - 1,2,3,4,6,7,53,54, - 6, - 13,65,47,49, - 13, - 9, - 65, - 64, - 6,65,54, - 49, - 47, - 14,20,21,27,65,56, - 29,30, - 29, - 64, - 0,66, - 0, - 2,3,5,6,7,17,20,30,33,22,35,38,39,65,40,47,64, - 50, - 47, - 49, - 10,14,20,21,23,24,41,43,47,49,56,57, - 47, - 20,29,65, - 43,47, - 14,20,21,56, - 15, - 29,65,47, - 65,47,50, - 6,49, - 65, - 5,7,18,19, - 5,6,7,9,10,12,13,14,18,19,20,21,23,24,25,26,27,28,0,33,22,36,39,65,41,42,43,66,44,45,47,49,50,51,55,56,57,58,61, - 23,27,65,47, - 29,30, - 6,64, - 6,30,47,49, - 6, - 6,29,36,47, - 5,6,9,30,33,22,35,38,39,65,45,53, - 15,0,65,66, - 6,30, - 6,9, - 1,2,3,4,5,6,7,18,19,20,30,33,22,39,65,44,49,50,51,53,54,55, - 20,49, - 65, - 53, - 12,34,31,47, - 18, - 49, - 65, - 14,17,20,21,27,30,36,56,58, - 64, - 13, - 13, - 64, - 65, - 20,34,31,35,38,65,53, - 13,64, - 9, - 65, - 6,16,27,65,41,46,63, - 4,6,7,10, - 6, - 14,20,21,56, - 65, - 18,19, - 5,7,12,18,19,28,30,34,31,33,22,35,38,39,40,41,50,53, - 5,12,28,34,31,33,22,35,38,39,40,41,50,53, - 65,47, - 27,42,45, - 14,20,21,23,24,25,26,0,66,47,49,56,57, - 6,20,0,65,40,42,66,47,49,56, - 6, - 65, - 29,30, - 29, - 6, - 65, - 65, - 64, - 61, - 6,27,61, - 45,51,58, - 5,28, - 47, - 65, - 47, - 6, - 47, - 65, - 65,58, - 65,58, - 30, - 6,23, - 23, - 65, - 65, - 5,7,10,14,17,21,23,24,27,28,0,29,36,65,41,43,66,44,47,49,51,55,56,57,58, - 49, - 49, - 48, - 65,42, - 49,51, - 65, - 7, - 65, - 64, - 49, - 13, - 47,50, - 45, - 0,65,66, - 65,49, - 65, - 5,9,12,13,30,34,31,32,33,22,39,47,50,64, - 47,49,53, - 5, - 10,20,25,26,41,45,47, - 65,47,49, - 6,0,65,66,48, - 47, - 14,20,21,56, - 12, - 19,30,39,40, - 65,47, - 24,29,49,50, - 13, - 20,25,26,65,45, - 6, - 65, - 5,7,14,21,65,45,56,58, - 5, - 20,65, - 65, - 5,30,49, - 48,49, - 6, - 6, - 64, - 3, - 5,7,10,14,15,17,18,19,20,21,23,24,25,26,27,28,0,29,36,39,65,41,42,43,66,44,45,47,49,51,55,56,57,58,61,62, - 36,47, - 1,2,3,4,5,6,7,8,9,10,11,13,14,15,17,18,19,20,21,24,25,26,27,0,29,30,34,31,32,33,22,36,37,35,38,39,65,41,42,43,66,44,45,47,48,49,50,51,52,53,54,55,56,58,61,62,64, - 49, - 9,30,37,47, - 62, - 6,30, - 6,8,10,14,21,23,24,27,0,30,36,65,41,42,43,66,44,47,49,51,55,56,57, - 14,21,27,56, - 6,7,30,45, - 24,30,41, - 30, - 13, - 65,47, - 65,47, - 12,20,27,28,29,33,22,39,41,50,58, - 39, - 53, - 53, - 23,57, - 53,54, - 18,19,20,24,28,41,45,58, - 65, - 6,10,11,13,14,17,20,24,26,0,30,33,22,36,39,65,42,43,66,47,48,49,50,52,64, - 65,49, - 51,64, - 49, - 6, - 5,6,0,30,39,65,66,47,49, - 25,26, - 47, - 1,2,3,4,5,7,10,15,17,18,19,20,27,28,33,22,39,65,41,42,43,44,53,54,55,61,62, - 20, - 10,14,20,21,23,24,27,28,0,29,41,42,43,66,47,49,56,57,58, - 5,6,7,18,19,21,23,0,65,40,42,66,47,49,50,51,53,55,56,58, - 41,56, - 65,40, - 14,20,21,30,43,44,47,49,51,55,56,58, - 5,21,40,47,48, - 6,51,55, - 6,14,65, - 14,21,56, - 64, - 56, - 65, - 6, - 6,47, - 5,34,31,35,38,44,47, - 6,65, - 47,49, - 6, - 65, - 65, - 13, - 30,43,47,51,58, - 47, - 51,64, - 64, - 45, - 0,66, - 6,33,22,39,65,66,44,47,51,55,64, - 25,26,62, - 28,41, - 6,65, - 5,65, - 10,42,49, - 6,58, - 9, - 65, - 5, - 21,65, - 50,56, - 18,19,20,30,41, - 13,49, - 49, - 6,0,66,49, - 64, - 12, - 65, - 65,64, - 40, - 5,40, - 20,46,62,63, - 23, - 49, - 64, - 2,6,7,10,11,13,21,23,0,32,37,66,48, - 40, - 9,11,13,30,32,37,48,52,64, - 5, - 20, - 14,20,21,44,47,51,55,56, - 9,13,30,49,52,64, - 41, - 41, - 49, - 49, - 65, - 6,9,18,19, - 5, - 65,48, - 12, - 45, - 6, - 6, - 13, - 14,20,21,27,42,56, - 28, - 43, - 43, - 14, - 13, - 47, - 5,6,33,22,39,52, - 6, - 23,24,28,41,57, - 65,47, - 6, - 5,49,58, - 13, - 6, - 65, - 14, - 0,66, - 66, - 17,24,25,26,28,41,62, - 0,66,44, - 66,44, - 5, - 47, - 45, - 13,35,38,40,50, - 30,45, - 6,39,40,47, - 9,46, - 6,27, - 65, - 29, - 47, - 65, - 5,12,30,34,31,33,22,39,50, - 1,2,3,4,5,7,10,12,14,15,17,18,19,20,21,23,24,27,28,0,29,34,31,33,22,36,35,38,39,65,40,41,42,43,66,44,45,47,49,50,51,53,54,55,56,57,58,61,62, - 14,20,21,56, - 6, - 52, - 47, - 6,7,10,12,14,20,21,24,30,33,22,39,65,40,41,45,47,49,50,56,62, - 47, - 62, - 5,7,10,14,21,23,24,0,36,65,66,44,47,51,55,56,57, - 5,6,13,65,49, - 10,42,49, - 13,64, - 20,0,65,41,66,44,45,47,49,58, - 9,49, - 62, - 13,37,47,48, - 12, - 6,65, - 49, - 9,30,48, - 5,6,7,9,10,17,20,23,24,25,26,28,29,30,42,43,45,47,57,58,59,62, - 49, - 65, - 5,13,65,47,50,52, - 14,20,21,56, - 6,65,44,55, - 65,42,47,49,50,53, - 17, - 10,21,0,65,42,66,44,49,51,55,58, - 12,33,22,39,47, - 20, - 29,45, - 5,12,45,47,50,55, - 15,0,66, - 65, - 18,19, - 41,45, - 29,36,65,44,47,51,55, - 10,42,43, - 5,14,17,19,20,21,0,41,66,49,56, - 21, - 6,0,65,66,47,53, - 6,49, - 0,66, - 51, - 51, - 6,65, - 56, - 5,17,20,65, - 9,30,52, - 49, - 6,7,10,53,54, - 16,46,63, - 65,47, - 10,0,36,42,66,47,49,50, - 6,47,51,62, - 41, - 36,66, - 58, - 13,14,15,18,19,21,23,24,27,0,32,65,42,43,66,45,48,49,52,56,57,61,64, - 16,46,63, - 6,47, - 6, - 49, - 24, - 36,44,47,51,55, - 55, - 55, - 3,6,7,10,11,13,23,0,32,37,66,48,52,56,57, - 34,31, - 6,13,21,23,37,65,41,47,52,55,57,58, - 5,6,10,16,17,20,28,0,42,66,46,47,63, - 49, - 6,47, - 41, - 49, - 56,57,58, - 47,56,57,58, - 40, - 29, - 12,25,26,47,62, - 45,49,60, - 1,2,3,4,6,7,18,19,0,33,22,36,39,65,41,66,47,49,50,53,54,58,59, - 9, - 47,49, - 6, - 9,12,13,28,37,48, - 0,66,44,51,55,64, - 41, - 6,65, - 65, - 41, - 10,11,13,14,20,21,23,24,25,26,0,32,37,41,42,43,66,45,47,48,49,52,56,57,60,61,62,64, - 9, - 62,63, - 4,5,6,7,20,30,53,54, - 45, - 65, - 9,30,64, - 6,65,58, - 49, - 65, - 42,53, - 0,66,49, - 14,20,21,56, - 5,6,7,10,11,12,13,14,17,18,19,20,21,24,25,26,27,28,0,29,32,33,22,37,39,65,40,41,42,43,66,45,47,48,49,50,52,56,58,61,64, - 45, - 1,7,34,31, - 62, - 65,47, - 39, - 45, - 10,41,47, - 6,64, - 6, - 5,6,9,10,11,12,13,14,15,17,19,20,24,25,26,27,28,29,32,33,22,36,37,39,65,41,42,43,44,48,49,50,51,52,55,61,62,64, - 6, - 65, - - diff --git a/doc/salome/gui/SMESH/whdata/whgdata.js b/doc/salome/gui/SMESH/whdata/whgdata.js deleted file mode 100755 index 729327323..000000000 --- a/doc/salome/gui/SMESH/whdata/whgdata.js +++ /dev/null @@ -1,25 +0,0 @@ -var gIEA = new Array(); -function aGE(sName, sDef) -{ - var len = gIEA.length; - gIEA[len] = new gloEntry(sName, sDef); -} - -function gloEntry(sName, sDef) -{ - this.sName = sName; - this.sDef = sDef; - this.nNKOff = 0; -} - -function window_OnLoad() -{ - if (parent && parent != this) { - if (parent.putData) - { - parent.putData(gIEA); - } - } -} - -window.onload = window_OnLoad; \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whdata/whgdata0.htm b/doc/salome/gui/SMESH/whdata/whgdata0.htm deleted file mode 100755 index 9fbefcb8f..000000000 --- a/doc/salome/gui/SMESH/whdata/whgdata0.htm +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whdata/whgdata0.xml b/doc/salome/gui/SMESH/whdata/whgdata0.xml deleted file mode 100755 index de6359242..000000000 --- a/doc/salome/gui/SMESH/whdata/whgdata0.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whdata/whglo.htm b/doc/salome/gui/SMESH/whdata/whglo.htm deleted file mode 100755 index d00c26063..000000000 --- a/doc/salome/gui/SMESH/whdata/whglo.htm +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whdata/whglo.js b/doc/salome/gui/SMESH/whdata/whglo.js deleted file mode 100755 index ded3d5791..000000000 --- a/doc/salome/gui/SMESH/whdata/whglo.js +++ /dev/null @@ -1,33 +0,0 @@ -var gaFileMapping = new Array(); -function fileMapping(sBK, sEK, sFileName, nNum) -{ - this.sBK = sBK; - this.sEK = sEK; - this.sFileName = sFileName; - this.aKs = null; - this.nNum = nNum; - this.oUsedItems = null; -} - - -function iFM(sBK, sEK, sFileName, nNum) -{ - var i = gaFileMapping.length; - gaFileMapping[i] = new fileMapping(sBK, sEK, sFileName, nNum); - if (i == 0) { - gaFileMapping[i].nTotal = nNum; - } - else { - gaFileMapping[i].nTotal = nNum + gaFileMapping[i - 1].nTotal; - } -} - -function window_OnLoad() -{ - if (parent && parent != this && parent.projReady) - { - parent.projReady(gaFileMapping); - } -} - -window.onload = window_OnLoad; diff --git a/doc/salome/gui/SMESH/whdata/whglo.xml b/doc/salome/gui/SMESH/whdata/whglo.xml deleted file mode 100755 index dcdf6cf11..000000000 --- a/doc/salome/gui/SMESH/whdata/whglo.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whdata/whidata.js b/doc/salome/gui/SMESH/whdata/whidata.js deleted file mode 100755 index c8c2a05fd..000000000 --- a/doc/salome/gui/SMESH/whdata/whidata.js +++ /dev/null @@ -1,88 +0,0 @@ -// const strings -var gIEA = new Array(); -function aIE() -{ - var len = gIEA.length; - gIEA[len] = new indexEntry(aIE.arguments); -} - -function topic(sName, sURL) -{ - this.sName = sName; - this.sURL = sURL; -} - -function indexEntry(fn_arguments) -{ - if (fn_arguments.length && fn_arguments.length >= 3) - { - this.nType = fn_arguments[0]; - this.nPKOff = 0; - this.nNKOff = fn_arguments[1]; - this.sName = fn_arguments[2]; - this.aTopics = null; - var nLen = fn_arguments.length; - if (Math.floor(nLen / 2) * 2 == nLen) - { - this.sTarget = fn_arguments[3]; - if (nLen > 5) - { - this.aTopics = new Array(); - for (var i = 0; i < (nLen - 5)/2; i++) - { - this.aTopics[i] = new topic(fn_arguments[i * 2 + 4], fn_arguments[i * 2 + 5]); - } - } - - } - else - { - if (nLen > 4) - { - this.aTopics = new Array(); - for (var i = 0; i < (nLen - 4)/2; i++) - { - this.aTopics[i] = new topic(fn_arguments[i * 2 + 3], fn_arguments[i * 2 + 4]); - } - } - } - } -} - -function getIndexTopicMappingList(nItemIndex) -{ - var sTopics = ""; - if (gIEA.length > nItemIndex) - { - if (gIEA[nItemIndex].aTopics) - { - var i = 0; - var nLen = gIEA[nItemIndex].aTopics.length; - for (i = 0; i < nLen; i ++) - { - sTopics += "," + gIEA[nItemIndex].aTopics[i]; - } - } - } - return sTopics; -} - -function window_OnLoad() -{ - if (parent && parent != this) { - if (parent.putData) - { - for (var i = 0; i < gIEA.length; i ++ ) - { - if (gIEA[i].nNKOff != 0 && i + gIEA[i].nNKOff + 1 < gIEA.length) - { - - gIEA[i + gIEA[i].nNKOff + 1].nPKOff = gIEA[i].nNKOff; - } - } - parent.putData(gIEA); - } - } -} - -window.onload = window_OnLoad; \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whdata/whidx.htm b/doc/salome/gui/SMESH/whdata/whidx.htm deleted file mode 100755 index c0aa1758e..000000000 --- a/doc/salome/gui/SMESH/whdata/whidx.htm +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whdata/whtdata.js b/doc/salome/gui/SMESH/whdata/whtdata.js deleted file mode 100755 index 64bcff920..000000000 --- a/doc/salome/gui/SMESH/whdata/whtdata.js +++ /dev/null @@ -1,58 +0,0 @@ -var gTEA = new Array(); -function aTE() -{ - gTEA[gTEA.length] = new tocEntry(aTE.arguments); -} - -function tocEntry(fn_arguments) -{ - if (fn_arguments.length < 3) - { - alert ("data format wrong!!!"); - return; - } - - this.nType = fn_arguments[0]; - this.nContents = fn_arguments[1]; - this.sItemName = fn_arguments[2]; - - if (this.nType == 1 || this.nType == 2 || this.nType == 16) - { - if (fn_arguments.length > 3) - { - this.sItemURL = fn_arguments[3]; - if (fn_arguments.length > 4) - { - this.sTarget = fn_arguments[4]; - if (fn_arguments.length > 5) - this.sIconRef = fn_arguments[5]; - } - } - } - if (this.nType == 4 || this.nType == 8) - { - if (fn_arguments.length > 3) - { - this.sRefURL = fn_arguments[3]; - if (fn_arguments.length > 4) - { - this.sItemURL = fn_arguments[4]; - if (fn_arguments.length > 5) - { - this.sTarget = fn_arguments[5]; - if (fn_arguments.length > 6) - this.sIconRef = fn_arguments[6]; - } - } - } - } -} - - -function window_OnLoad() -{ - if (parent && parent != this && parent.putData) { - parent.putData(gTEA); - } -} -window.onload = window_OnLoad; \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whdata/whtdata0.htm b/doc/salome/gui/SMESH/whdata/whtdata0.htm deleted file mode 100755 index 827bf7b7c..000000000 --- a/doc/salome/gui/SMESH/whdata/whtdata0.htm +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whdata/whtdata0.xml b/doc/salome/gui/SMESH/whdata/whtdata0.xml deleted file mode 100755 index 27bb8721b..000000000 --- a/doc/salome/gui/SMESH/whdata/whtdata0.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whdata/whtoc.htm b/doc/salome/gui/SMESH/whdata/whtoc.htm deleted file mode 100755 index 5f8c14e00..000000000 --- a/doc/salome/gui/SMESH/whdata/whtoc.htm +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whdata/whtoc.js b/doc/salome/gui/SMESH/whdata/whtoc.js deleted file mode 100755 index 145605087..000000000 --- a/doc/salome/gui/SMESH/whdata/whtoc.js +++ /dev/null @@ -1,28 +0,0 @@ -// const strings -var gaProj = new Array(); -var gsRoot = ""; - -function setRoot(sRoot) -{ - gsRoot = sRoot -} - -function aPE(sProjPath, sRootPath) -{ - gaProj[gaProj.length] = new tocProjEntry(sProjPath, sRootPath); -} - -function tocProjEntry(sProjPath, sRootPath) -{ - this.sPPath = sProjPath; - this.sRPath = sRootPath; -} - - -function window_OnLoad() -{ - if (parent && parent != this && parent.projReady) { - parent.projReady(gsRoot, gaProj); - } -} -window.onload = window_OnLoad; \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whdata/whtoc.xml b/doc/salome/gui/SMESH/whdata/whtoc.xml deleted file mode 100755 index bffb89aa7..000000000 --- a/doc/salome/gui/SMESH/whdata/whtoc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/doc/salome/gui/SMESH/whestart.ico b/doc/salome/gui/SMESH/whestart.ico deleted file mode 100755 index 110f18356d05f6e8631200b7482a694591a61c61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10134 zcmeI1O=whC6o8M>=GoR}L{jL=q(h)VrHVU25*I32i&yL*iPW^=HB$@F=OVu@La8-&mNKsB4kcZ!Dn4 zkkKn<^jag}<5&ZQpP0z%6}NgSr1xuZtEa-&dgI3N^?)zZYpbqZB1-*R{r4u&Q2&QX z&+nTQ@J?SY((hM84sR+1`j^&!xvUlP^i+5d=wr)Y&ePJpZkLHDW374dY4dN3Gh&V(Z{Z_hCdrVc6p^& zgOZdRPHvaBUvm4QB4YIXd~3PQmD^nzxw7QS9#;;!vf@hp`OnTXOirZgN2ahJ%ui{m zVnkwIF$JGowlvRlc6Q31J$t05r$-JPI3P!k9FY?zPROZKr{wI}vobO=B4cA?QmfVE z`t|Eluh-?yojY>(?p=BK@S!|@{8(02R^-{UXTq04*8Yy=$6L2#_V-y?`|T%!8X%t` zUn1Wm-y=UEuSs8DEJH&vZNxG@9?R4eH{K1u7rr0%@QjrF(Zf2a4}J)qF&dA%kZo41Mp|yFTvl0zX$&W zehr@W8{;`_`3!|#Rfhd&H|6#gXq zF#ITd4So`S8h%l~FYhHqTc&InQE7`5y?=g3VItO?cna|y`TVZJl+SP4LpkxhE>Adl zRjfM4f5LO|p(a~UwMbyc!Hqvo>zbeyt|8>`%S$E@%Y<* z8@vym(uD3m^v3f1za}5xS^s*=IsQXF^0AmQpZ_FCU0ojssTIDXBdyRHpH^s*Pb%c| zrA+)Cnp{XN^R@zbUVoN?2D-W;(}1ba65nNcDkz@sKW(6^%kv!uFW{33DR1#2-d9L? zhZpkhrXBC;qWGt@3w2ze=c4ee?DHs7kIbvH#{u8-vaOO1u6Sf zReGf#EYE$p;pBE{`z5y@DsOk6+DlW%$o@RE%Gs(<@9sP_IJPjS8NqQ&zWkRzri`uK zp1yIm;^g$W#@QcPjkj++iZ|vt@AI;rCeE7^L*L$l%Jta$qXA@UI6FSJCGl{&hRmUukN>60+_abD zmn%=T53J1nleF7InIo(#=3!UV%2C(VtHvx9)8BE$pQ}|&e`B|1e;ie@wUcA3F=tMW zrR+$0AyQg<_qm5Q2FVq2yv7O6nrtUWv7X2Dl8=$~eS)Uy4pZ2V_IXVEJSKZw)jp4D zpT`705b5Psi<^SgXX2m*dv>vi6fU``pIsc9rE$6jZoz-UT3y9VeQP%xUtRY#*{#xT zj8$l;k8DD;`_w$Uy#u$8ZLaTb(C>4b{BL1*=3U7~xgkEkw@miMMfQ%!ZaNF?Zdcl1 zPc~+5+u9Vr3&8F>%_cI_|9*4o_KnT`lWgR)0X1izpDMHoQ(uJ~yAs%~wZR^Yk7Trm z<2SV1T~!)>!|oz7yTHJ#_GEn1uI>{KZ- zDZ7cIm+aT$vt0Y6wlq~)#31pq$P|2X+0uI>-{Fy2^sz!Rt2UE7v$y)P=`;_afS$|PGoG}Z6=Rh|i6*NH9C^{0ls{S7if zS4-p``+hC$C%c|I7OvsKYwaEW-=v?~@7LPz*V^yb{>Sgv{0|*pf0M$+kt(8KuCcP8 z5KH{j7(3IEzUkQI - -Search Result - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whfdhtml.htm b/doc/salome/gui/SMESH/whfdhtml.htm deleted file mode 100755 index ec6c521f9..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 e40b10b1f..000000000 --- a/doc/salome/gui/SMESH/whfform.htm +++ /dev/null @@ -1,136 +0,0 @@ - - -Search Form - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whfhost.js b/doc/salome/gui/SMESH/whfhost.js deleted file mode 100755 index a30564d41..000000000 --- a/doc/salome/gui/SMESH/whfhost.js +++ /dev/null @@ -1,916 +0,0 @@ -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; - -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(); - return; - } - else{ - displayTopics(); - checkAgain(); - } -} - -function checkAgain() -{ - 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

This algorithm is used for meshing of 3D entities of - geometrical objects - volume objects. - While NETGEN - generates 3D elements having a volume less than the one specified by hypothesis, - GHS3D does not need any hypotheses, all it needs is a surface mesh built - in advance

5EXk7k9T%K|Zw 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 diff --git a/doc/salome/gui/SMESH/image51.jpg b/doc/salome/gui/SMESH/image51.jpg deleted file mode 100755 index dfe3bc606fa8991b0dc34448a9121f7365572a8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22124 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 WgaTd!Kh&S^f8NLcusv)L5B?K=CI+Se diff --git a/doc/salome/gui/SMESH/image52.gif b/doc/salome/gui/SMESH/image52.gif deleted file mode 100755 index 2049e090c7c53337bd1b981ad8649606ddbf6fdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 990 zcmZ?wbh9u|lwy!z_|58P9 z95Nmo794Em5SA-BuwkKd8zYm=9FLEQ3|s;#VQVA=8;&!Gie;2M5Io?<&ZrimadOkr zlf4ScQ%oE-FKe8no_=eI<>#kv(;f2Xsk|&yKflOM+9=}Gg2fkSF;uvvczu0zYPn6N zo`7d*W&=C-q9jr71q_W0v3uDBeouLGWsA>Esop3dz0jT3FRQjli@!cQyLzRXgiS+1M2ryU!0Pz@s AhyVZp diff --git a/doc/salome/gui/SMESH/image52.jpg b/doc/salome/gui/SMESH/image52.jpg deleted file mode 100755 index 1c83b35f8b193d82e1da7a65b505b6e22287c113..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22197 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 diff --git a/doc/salome/gui/SMESH/image53.gif b/doc/salome/gui/SMESH/image53.gif deleted file mode 100755 index 2049e090c7c53337bd1b981ad8649606ddbf6fdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 990 zcmZ?wbh9u|lwy!z_|58P9 z95Nmo794Em5SA-BuwkKd8zYm=9FLEQ3|s;#VQVA=8;&!Gie;2M5Io?<&ZrimadOkr zlf4ScQ%oE-FKe8no_=eI<>#kv(;f2Xsk|&yKflOM+9=}Gg2fkSF;uvvczu0zYPn6N zo`7d*W&=C-q9jr71q_W0v3uDBeouLGWsA>Esop3dz0jT3FRQjli@!cQyLzRXgiS+1M2ryU!0Pz@s AhyVZp diff --git a/doc/salome/gui/SMESH/image53.jpg b/doc/salome/gui/SMESH/image53.jpg deleted file mode 100755 index 4fd2baa799b3363abc9d6140efe93c331efbe3f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21043 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 UzHu?j;(Ahq21kSyoY43G037?@sQ>@~ diff --git a/doc/salome/gui/SMESH/image54.jpg b/doc/salome/gui/SMESH/image54.jpg deleted file mode 100755 index 066a572f6abb2bdc582ecaea82d106a76d7bccb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32186 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 G-SR*7QAxr8 diff --git a/doc/salome/gui/SMESH/image55.gif b/doc/salome/gui/SMESH/image55.gif deleted file mode 100755 index 7858e6ee6e769e36064516d03988b671b9126abf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1040 zcmZ?wbh9u|lxC1%_|5ljwY|@;9lLk! z*z;@Wo?p9m?cTY2_s%`PckTJTd(WTWdk(g9lo$rD}lg%8D!XySEIhC+G5*rg6goI7o!RKzy4Y~C*4$shPhGepbX}%smTFy{ zEV#Mrs@EcyPX5@vYBMYqpG2%-wD3s~PHeh+iR>2^B&0Dg v^C-CqY+20hMh0sD=6k}o diff --git a/doc/salome/gui/SMESH/image55.jpg b/doc/salome/gui/SMESH/image55.jpg deleted file mode 100755 index c707a8af28122a1bc1b563a9d3ca0758c97dd3eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18872 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 diff --git a/doc/salome/gui/SMESH/image56.gif b/doc/salome/gui/SMESH/image56.gif deleted file mode 100755 index e19be5b24d9fac476398147d010da8429df79d21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1044 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�T5r!=1VcmGG+F;u_n5%`AU= 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 DMEa3c diff --git a/doc/salome/gui/SMESH/image58.jpg b/doc/salome/gui/SMESH/image58.jpg deleted file mode 100755 index 28ec009c8b018305ba7fd0d06042080c16a82de6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20235 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 U8qSi~&a)cMK`vVG@Brce1#oT-egFUf diff --git a/doc/salome/gui/SMESH/image6.jpg b/doc/salome/gui/SMESH/image6.jpg deleted file mode 100755 index 7dda1f9bfb229bd2d4d8c2079d8a1bfbd52b9bc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71431 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ፇkFdT{DD#z$?ZVqWu8Gp?(_8QVumE{`n26or&*cbWk^<8-j&8Y z2uMFK$QHb|D|3=})A6Cc;bKOS?BdpN(fdQ^1LMU|tv9vpjrb)x*ovA$>=Es#+5cxE-|9-*{_^+un>N)XTOs_5^Fl=lDt zT04ztc%fsLkNC*bO;#KbC~}yHn>frPb(zzK0lyVArwDU@Aq0cu~Jyw29 zxH`K&_1Jay`dT#i7Hi7p;L1E^10WZvlR86Kp)pN3rWg#WZ*sNYhcmRvk!t|JdhInl%IVUo~-hB ztwW@1$?)B6o_o4=F|T_aZe0z!nh&Y_F2EQ;eE^f(RpC<4waOv+-qBMp=uO4*v zL>WdPXI$96?mj?&v$K4oVCSEb@poS(&!Ydp+}$4>Po{vW2)ihq`iP`&He05EUxSfw9%RHl5pc|yFqd=?q+q24LRBD*3XaC~PI0xrQt?Vsr z3li_E_a?b9F2cSaKBTta2tXg~ZybYNk#|fLt5^Sg-sv~DsTu@W+u1K#Pf8bO)+V4^ zwu1xf12TeRSESQ~*Fk0|%W9pU%FlHkv&Sfalb{0L(>l`Seo^;H13`xY$0T5tqo`k( z%)b1oULYn(wy~CwQ-WtsU)fsiCG3~=hL-K7IT?E!FvpRW1h zg7@tgw%0dzt+&OitAID;eCst1>w`~ri2g8Z z{`{FN1l1q?`XX8hva~oIPN`jd&BB>Dvm(#*hljmF!w=64Qs?fpS;kN|F?aCkQWtYn z7G_ELdXJI^pnM$kn8Uz>QEJG|4vuFV_D)f<_1HS`p3B*?Nqrxz) z>Z>e#O)1ySE#@q;+jfOFT||0<7h4;zY7eEDi2|7Jkifl zroo$S-=g*ovAv%YkfMKU;VlalECm2BH7;6{w;a>8)^yXDo|IYNC$05`DkL!^R9;uEe8|O(CZ;Se_2Ns-hUnYVN{g)QfpfHUAoEPA@ot6p zL%&`u5AsSPI4JET*-Ih3-0bX*+yND(Ol%XwY<3JG4`g+gLB>P>XU0wSg_i%QdPYpw z;GX506<_rFAsgLlges*M(%|g;Nb}<6L4_6*h=;z(>AmmHaS5wOZ8^|qTz2ma4ORnB zi*C^>HwKHE5H`1*6|^MXr?hdC&9*YU5dFS!HF?~bjL*zJD*Ay^E00~hrT!7ClKj{Z zA`6SUQ}Rc$lN946mby>H;&Z8t0Z_%<3cF0)`1yb->G!$Z?bLjUs|b@~D8z5^&~fkq zso@wl535_$oucz5&WEUZQ#RUarS;sLPG7V;yrX$;{p`HPSO>o!alrDhegX;A zM4evvcrI{961@3}B zO}My|%7i;?bERso>g3%lU(9#}!B!tf6%4XgnAFHP8v&%#->-#{3J^eB!TM46?mg#r z7I)Cq11nsmTO;e(?deR8L}r`i4B#ehdP=#G(c%1AfN>kuC+T zV2{+P;$vH)7ji}baa80&YFHR7tckM5Y+1vD+5$b8=_Y2B!Ixhs*D{6_DO~76*0>jYdQ9Lik zXv#y_eS>@4QNRbrmaB4p$B-UKxs!?>;8MqA(y`ai<3!#Bn=M_kna?nV=`g(-hg(63 zHi)rjd}VN&uq|+Asmekrj;y#p#aD*Q&4eAwjto|7%evIM_a*%K0U!cwl#wZHoMwIZ z-%Y+3EN3-=m$s4`+U1Tc5AX1Kf)yc46cwBX-C?@EN=x4TUz}32nyN|hADrPuDC$kK)ayF*$z2d-& z-gmK&P_4tvD3yhZ_O?Uc#1TDf%~eQZ`eHzsn7;``sQ%!ycn-=LJM<`FSoBvj^rOWN z>0=*@V=sU6S5^pKMUA#VgV=5Qe=nYWwoW3W@C<3O)E($kQp3`MJ$T`yO}7y}OfgCDYR|Ok|=<{Vx7wJUo>_gN^!c zmp+}z93un`)eO-@iD8qA1~!|=K(&O3(A&u7(x-|Ik#@Y~cN<)ZhQoP536}Z4(MC-)sov{935~~el zM|`nA%cX;c$&I;k!APIgQeY&q)gC(K-xy1m@%Zkbu783-zSUNs8*wDD_ORIq?d!e% zYZSRJg2ACi9ni2H(*TPNQ<%0~?$F zupaXo#;8;z2;ysvKmh#hh}A*RjbC{i4*#g00xqz!=?{MA0Dr6jTcAK(v(2Xbk8CC? zi0LyRvWe=7jBeiM3^w4<9(u8%co<^X)8yBC54(sGoh{(4Mp^o`LRyd_Rc0jLq=OT} zflu__&zWEs$EaX&&v^w)2e*wk9M5jJ3%&{FE-{IHsbQ+%t|`7{Aa^{x2I$fb0LZ!94b6WXRV<1wrn0Y3*=pIS*egn2WOi6md>Mi0bbN%3SN9mF0npJ%MUIF2fzQtOBeGTa<`o2Mz&ly z;=`n3HAE7kKTz#jfj=Bw(_D(6&FY+fv~BA9z(ZHKIIr2dHp3{X`UcbW`8lP2b1UsE za*&jm+6)`MWll9ate9e~cWJK881|uJ7k~K5e$lHu^E1^D&C_EL^Qq7#Y!4SfI`(N^ zHaR(9oPhEeZT12D`lg~nRBag+;7U6P%T^tkn?A}42O*vtEg#{X)*c`Aju*mft%Po} zfzk6`)GIATx$lJlx_L0W)J;mk3g|iLrknW$Cc_6t#p2tg>WhNHO1-S3E8z?vsfaN9 zslbq8ptI!YhW|Av{QJ&AofDhJ+^4E87t<>=-6>bDIR^@ROyd)sNf)${|EL0MJEoC0 z9e89m_$rGVjM|U^Ev6g5tp}M%eYcY4qok)F^W!4Y%OwileVWH z{5sVe0`mT(ED2=Sn)p0vr*p^7<-(eKW;^#v9>(8T9}!)Z71eEhLA&7SX=l%FDxhCn zm6I5RvwE`FP;WokT7_$Fu6&8Ax87xE{5ZSjW_W*+$L6Q~B}Y>`8s;|!O4hlb8eld= zF$$MKqau)lt-t6nY&pZo+#A@ovWh{9<|x`TOmWRxc>TsJYMfSAw5{3wC>^2ZNQ{1zHvVI^wq>kIAI8GZl!zTbzzP@ zS^2%u@# z_swa1P5W13NPE~N;20s`U4T&dM@5O>>rMz=yPU4yc4+_e#mFzt&Y!Bo7sG4Xl3}zw zzr%$w0c?gzjzJgEpo2E%pnmr#($tBuYQYsw8)ftA#X*k~jr#v71OH$A2gBQU-+REW zm%ipJAZd0}mY@$Sm^{OqT&{|EQ^oSUzqDcVr$QIWqDA<9D0L^`8%rMRYIr=rcCD}t zr8|i5PB*s-RDFf_+I-mX91kBOAKc6&UwM4@0UwRkRHi&JB|3##_GPJ3T*shv>*-{a z*+nCb}z9V$KWIw&Z&k%9I<#+C|8Y?P4h1x)n! zJ^bExzeax}<$7@0LWa|^-DK4CS-ql4E9;m;h4!5NZL9Hd>A9+jKE1*=Gz&DF20QzexNZ07<^K73L+59 z!Z$6=T3MwRl9S;wTw&IeYXiI&98P1V6FvbMY)KqxNGNVRWr^{R83SXgzIilisU4dKvmYU`qU%!z*FmpCxgwqk=P=V z2e?l@spsRNcwNlPU-uajB(G3^pl$kq)qQy&1puMjFh13#2Eff=ixcL84ORvLqY;#t z_Vu|)7o7AAc+}5Jh~mD=o9l-y)DQA6ZjubKkH!ou50EQi!JJOM?6DG$56Xj~MgaT8 zm%gc4q78#LWpjx>8TR?pVRT?8yVzc-FE3rGD>&4W)9tUcox)b$yAI(gfDtA3yxFtX-%il0t zZsuWtlnQWy+|Qr<&XkG?4`2PYFk6P3}#ObBIG{Yv8?7!xT;8Ee%Uz-(_3< z(F!Z|{=W=HHy!U!G0JU_GEGfgCT%5=1L(!t-4Tzr4O9c#>QMQGzSUa&jM{68?YY@H zBRy#oi#9TY9{Yp|2=H+l=Z~FfM3jGTbcPT+*uufG0}DTjFJJNE3VAC}CgmnMC;Jao z79(pnuqV3|8#vcBt?1Um!;-^vyj|9Eb+xG1g99D>Si?=Pa91SJ{kQvJs42PVQ7=d& zx*?EGE~5jQ!TmDW+4(!KD@anYA7BbehWU8stei*26~uiNTG;b2^Gnw0u!V<|_BTUe zL9GoyC5)0kFYflKJq?Kh$VA8BChICNRv!;^lXMxAerk!n2VSDRG&<<(P}@14>CUPW4NDzrqvtt5HXF zh6L$D7-_g2vN>7TsI&XfS>Z-33kR(g9kGy?r{f+eB1_(GIaWxN`e_Fbj z7%6-zjc2{KLoAjf;C*DUKg!wlpYQZw95tzsv5mH~t8mstmRmO%{Lc&)9Kv z2VC`IyXm`?lIM<1%59xwC2Wr6+UlCDMDE*3dB{%9dMK7+ZNn4(p4T4!#7^&)P73XK zrHf^Axha`M-6s~M=->EKZZkBZReNC4jL;nb+7U%s?VZ7ARf9@-`W$Lq1mizsTRRIL z0O�w4T^k<9jx>dBt7e)U1U$Dn|wcELm%Iv+>yLnBC;>4)Q~iN4J*uD5x-Rtl9~; zp<;(V94oJIj~cf#@dHx)V7A~YhC=zB38z@L=2t8x8-FHZX9Z{s)=CXlN!HCHab00y z^_7|V;ge>tFf{)dtQDWakLnx*opN=Fh}jKPGaua-5jc71%7LbUah!u0UOG z*vRPX*0d4qDgW*gYZ}8te+w+W&VDUoX)*gTtlJg$m)l6F9=M2%seKaFhVYV z>gf%-nAVrnb*jenr z`j|^AHec)U@Mnjdp-koXUwo+PYlt?kqPeo^(e7~k+BU|XP!Qnv+SjzEw%o^8-QAL~RA{e5>?KnD9>0sQ2$z`XZD!riE%= zUqGG7w5>%D-GDZAS#;Y0tVRG!tG+ckULtmL^qfXC z5^$6n;SDl(mAcAwSEEP}Lf`a%i=*G~o-a9Jr#a zDemL0kM+%xnJvJ$QR0+fl!!o7yj~{ZK=)+sc;dfLcMIXBjOXf4-dz+2p1{tck{3LC zxTft-Oi~p0niu@p*2x3*w})QuM?F22s~s8QGT)=E3ln3X*^knw{d=-LDn>|=qnwk1 z37fgXTj>-eCaQg}oMWtL;A%4KiQ~)v)RIu1^nVkC)6yMv&m0@=D7m$f?`S7zA!LOMv@@dQI}P{Er-t4CoB1f~!_Z#%KUsKreZ2*ZXrst~)2IWuVcu5l~thlx;q>p>nAlF>R}U=Y(Iw7!>s|Jl)wIgL0U zoJzZkDi8t8lS=-~^$B>S^gns4B63UBT@J*FWVP$baG%8RR_%LFQegc?i*Q%DI2ona zKHypB_ry(wqJC*FUVvc74es)ASCX>nka#Y%!1WN3dlXvJW0<8J&@zj~$*{;@$dZP7 z^=5D5w{0^Mi16;JyfCrPvU)zOy&y?5H-8CkjfXq3n^a#pU#ePtmBAX>;k2{IN&1rw z>w9}75GOx1WMI|IN0YjEl7ULpnDMozhQJ3j?Xg;4Br6@E;ww*bBe#e9-rshs~d=grAshJ;b_?XXe9`r1w)#guKSty}{Z&kK-E3nMMulDFsd|pVjqY^(vuh$w2q&lnl1y zQ9v0|G`$ffWQ7mi>DJ|^`Tq^??)_(Y*Ytl0?@H&KGgW*a!6bxrDn;kGDU6&(Jl_Nh zOGbImvm0MI6wMm8hF!-ab!Pi*>{$B6SNe;_kxK$DFiH&+>lX%$(r^5mmzfple3!C} z9r3H~c?U!XTJ+9z?o)tI=CcpYewUm)#pK5liof9Yqe_Oib~ckLULl4#6!#WqHai50 zfTgn7#7PiGKv-FyEi9BP?kd`>RU8_e#b^%mO<~z$RZ_3!z?BC?3^(Z9Ddy<9H!!qb zhR>4#>(gqXSL#v=R^QBSPc$rRwRp)7ZD{R|nym8Tih}A4CV|p>4LRLA;c~@iqqe{* zn^K)GNgW;rFJC0bbA(>T@CXRdNZ#rh`%1_@AD|QzuC0cK|5-f|tT5c1lD=5jEXAq1 zBdeLfnPOcV{>tf1njy@XnRGsd4Ixe16>!9u+TZvH9Ly*G)1%L;y;+_f#1d?cp94;YD4Y;9wf8&u_-w6h+I2`f4rLO zDAUT~Z<=Hlk8vL-UPQ$&xJav{Tt-@|hWro*^a;3Y0=nVO4{(QuK!n}FlZS06TuY*@ zoq=HY{aCiY#kG#!9fB<43771yFWhOTXlhmS8}xkssJ# z={$V>ey>(#seZH#{Dy15YT_~r z?JuqmF{KVl;`V(1>qTcq7(G`r=*|!SHlB)qov@hbA!UPxZ^>hXEHNvU zu)12^`xp>+MBNYcyENr&e3+$UY~X;Vv{BDClSaq#AmN(Dz3=zTY7fix<}a2?_mA@9 zHf#1OH<5yk=yJ_+%dK&*BK>W!dyW}vIF@94)V$aGEn)Q6ApP^j2l>-KA6dTYp^gqR zf9Ur$-RCEVDLBbmABl8cL2d-DwB?1_?1Idb1n#t&Ec!w72v3p}Y;s-0rm_VdEV#^W zZOJztQ*!fmv|jMg% z5b5MiPLBes<2<3H<#`9FyrFO>-%aV|u>_d^hZf`H zW~bsU#szrc`6j4w%p~-)9ZSkd)IE1R(X;RF!ml+SdL60kPwSmY_e^3RzPox)hx}jue+rm9@kXr+xXlAb{Wx zG1KikM>HO{>5q^qf|lKnRA;Z^*NK~_r>Y`ciaSbWg-Jgl#hTbH$Eaaes_1FR(+&ra z)m?uC#%imCa!-3#(+yMip_S2R-wdyDN4YYIs5Fl1@90wSQ2=g&=hntX`0^d8Wk21k z{_e}OV@={6%uRP}gPJ&9hf&P^p8!Tux@$8#qzf*Bb;xxZB#S|2kf{+)cLF~mTS;61 zo6jGHU;xr(AjT|MIQ}5W{}?0Y0O4k@?PV|Hr+$Jxf6YrHWnkBkJ11CQ;C!@pk{4{1 zfzUD)Lf9D@40i9xQ4C-!3yveoB7gNytwyr<ZoU4qM=3R&TS~+NBYNfHq7h1-p30 zR(NEF$KSqfFAK6I0~he);`b;U6K&VKk8>7Y-uMN$3NaXc{r7j~2f%P30wu5pXR3Psrva%6oWyG~9{5;QuX9lk3Q(>=)vqai3^{ z{$fV%u>9N9$NLKLIxCLrnOPy0k{{UP_EoE6o>*nOxZdhs5o2wwu5gzNbee~fz`BP( zJBg*R^XniLn(rV(TMHmaskq0ckJtBcQt!P)u%l;A{N?sccBfdGZKIO8Ys2t%F;OHI zfhVYyEYI;6(;KfM0RVnvp`Xpf=pw46?WP=O5R=oWU~rWdy0xLz!cNI@eMZmhQ`L%N zOym&zTm8`&qTuv*)!D7h zdt=htYcyf4&f3ic$et^UY~dz8wU2mm28&GEl+MCdw_ML;{l$br$r=qty!Lr8cm;{- zug!2VH#hp;hB(h_CZ{ye9sfZ=p0?W0&}+F zS*&jVrq%8bVHFcF0cN@tEu*9-Cik+T5#=zz*VDkv=~%TTarqhzvo&JFLF&~d9hXax z3=aN6nBMTk4d{gxsMQ4i5uRFVgw*LbS}t!*Z`j)4Kn~3Xj(YXUm&~P2%S$7w?`eao zGHiusUdTx?C3AAm3oAZJdtYT3ZwHS3DbmFLZIuR`KYT(tNTu|lZQ$XzP#m5m7?|3%k z14H0!-DFi;74s++pULc3tuewA4MhW%DiA zXJ!znO%vc}evVi~0O;Pc-{%h!=g?>jnt2KOb!;jOv-T#gRUDrn_W$hSZdUB}&d{X? z8JQgxh%9(e#15TxEl#t@fgpkGe^fUc%lZCMjf-)gI(%;Xopmp&+|55#y7{}wjrZ1U zIu9E^Jstit3>&cTpFCF+FZDS{;goKLYY!kRFT}l$J*z{&x@Y}EazMH2!Xr@U4jJHB z?y+lQlV}~EbNZNJ4z)8ALSy@l@0BBuM|iR1BRd>Y(PV2t2;_>=6FIxE3dxU@;7U%G zF^l0X8f4g-RPYCAJ4c!#wFzc=3cqAr#XVIVBBtN+{Ei97;NQy z<}E#`Y|e46U+nXeK@K;SovJ5YjN#gpqk{WUaIaP zrQ+IWS!1c{XbN@3s1=1qql0j-G8L$WGOe?t@Xzy@A=qL|p7iveeQ;nipycq(Zf(0J zxZk%(i@x*$R2H^e#1(50Q2zmn4xtM%V^rG~)QqKAI1l|NZ>2fLQw|wCX|-Q9yd(tJ z-U?SDvVz=tCnnq1w2#{%SaWt<1;uf$)bki8B1>GIrvPfv6j~Y#&_9wQhW>%=LD6jg zu(-u3P1D~zAH#dum&CIwat*W^>hEXhO}z!*GvBX6O`P8qbA66GQ)0EY;~gQ|dObwVL;d3Mqe!pHAHGu@%3WDLhzdHRkGq}N>ByERn_Cocu$W99^kE|&fI~gf z&8&&ysevUcS#6SNG?u~B%Sg%M6*_Lv9j?Ltf>BCW@y3d6mSMgZ<3xLIdoi16uG= zHT@c1Veo#mr{Pn?-NM3o`8yj;4n|91HDoT|@g&ZKli_ri`t^3ie%LXms!5)x8s2-t zLqK+NV)I}`MCr#srjTEQ^I%xzpqhSLEXnj;y=zl8QAJ)vV#{lj_37&6`xxJQKR+{{ zc7?IevGDN?EG$zvN0*Awt)WtRLc)!@yE_>so|^}?{z(lRyJkor>TR{y=9zYdSi-Ly zIQAim$(-rlag2qhv*cx7t!vJ&evYK0{L0i^)Bd{nWXl-cH;f(ZtLoPS+La^R4qqI3 zo+j;}-#}T-%Vp}!0ZI+q{P3xnky6lj?WOH>W1O-c$aiM=j>U>%L`}Sa#r*Z@jz*D) z>M-tKx0ATjlv~?e0AhoYow3v52#LZ4!(CGphQHb+9VIHWI09lC9CR(IJWHg{Uu14V z2MVidgK_J5^Yfd~tgfvv_fn?_+P|lEsU{<4KY&&$W`{3Qm=`cF`w521dc5>dKO3g_ z-;G&=egIJ`Myhe5@L|n%wGoE4;r+9<-68+6lctD*wd4PY z9ck;%qZAc7R~MnMb(H4b@NV_8H%-*vc#Z!&{LP2ADJnO`OBnRgo8xo;`>c8C>HoPs z^Dhb&Qb(1}>U)V}hGQLccfwCEzl z8)$X7Xy_%8pqC~TE`&6#Pbi?AMN?_*fDvAIz>jUMNohXbceXLT0$Z6{N-4^@pX2|K zNNhBCa~gACvzT}*ICN^EksND^vv8PUHS+eB3T+RB3!YX9S%!xK#hslaodZ^_vs(np z>ua^L42NBn-we>FvG<7@J?Ayj(z%v;^)fY7NrzjvRmeVqYZi9VHdp8&eZ&>-B9nf4kb!strE4jRgi;}LW7(8iD#kUC#L7kZy%Fon;j5> z;+CP2+p&_qRuu^h^j7er>LZm1eSzpqo@;_YKYfoampT6WATvyCf<#mxC<3sb2pXnc z+g%Q&_`Dghw$_t>>Zy)voo`!9Drwvx$vwUCEA)-fplDOhihdj7f3*UtsV6wjz0fnXTU=q@RHn#{GIT&tK#d+XtIUW-KN}% zx~mhmPDKpfn1gn2Vn`55U1}9lZs$>m64n)}4ogE(#v)m*POx;!)MeDKHoaSN6(-v* z+b%XHNhS{*e7KoRwui+CSt7i8R-^oRd=PZMTa7XXGNmq}qKP8E9J@oAuR$br^;> zJ1vak4A@cZy`wNRx$~GhyW@&4i!u#J{=c@bLI@vwUUpiVWK#GC^Bb*&Rg>s(B{930 z)~73qk?H(-?r&gu^L4!)4++6}7W=>@~Jj zv=77KJksV9fRtHfBfeI5+pMl3w+em`sP%$z*QQzLQHYI*f{Bri>9x<>f2aT|Z~1Eg zt*Pq%NeuJr_4cysZHI-s5~S5PlQ%aS0z+QkQ5!9ynt1+Img<&#Al1V^lj+pP{`7^g zP=gEF{e?q|`Fu{3EoIfzx+CjW64qt&e1W`URI9c1F_4z}yiEwZVKqN8PVC&F_wwWv zR94M`#Ro58m2Rc&F%`B3(@ z7@-PuGv&JLg<81aY$+EMs7L^_IErYf7KN2e@If@LzT;_1v(iq{SdjJrza6aA$i4L4 z;cId~XVN%)gQFw5Ia? zQ!RC`N9KR)iB&H;C>?t44G^9%BzIZY31GMtpB1Hmu+D z($!Wf%#m}Ae%lqf@fl+N8v=!f+PebIqd6hPu6clhBfucF))2q zC!YehA8Zp>S*<%Fo?J~?(|)I+(=~m?Q?`gR;i`*jao*xrT^Wwzh8@ant8FcOsC=aQ zePSMK)_Yt<^0qpo=R|BhKcv4)K}E zD^rJhb^+H5d%}L`bD-{O;PYD8-*wiHcN9{h)kX9LzJ3qNmxZ-_iM)*&ods|MY8TceCA%KLuH+Zc- z1m)0kRf5;=d+f`!%sVVLB}{Kzj6Zc8#74pljmmQ6$Yj{c8l`q?PtRo*@WxbVwsLlZ z)3wmUOKS&!kSFgnq?5(vJe2oIM`7xBh*iyZCsy#C03VgUo~KV7`%HNdJUS-dj&I$$ zL0(YhbU9klviNu^s4{^f4^NU$8^R=13?RSG)W82u`uaYxTs(P&1GTxn=P^)KB17on za5akGyL+|wi+k2k4dALAr?ri%A8ozu!PL17Vw9HnYIB@i+$IsStcmZ zCsz2}6i4Yor>pS{)=hwYObzH&7}hi61xRP)s{So?uP3J>hJQ0Mjs8(}O_`6VVUZ8n zAOek!^ai)N_9349T06hB?nM+n<8f)#C6hD7^i>xW^VdSpaaOVM z@<&|$;9t2OS)xlriJR{vAZP(&VGxig8QsBK%PiYNfAx0U3!sn|mzUF@r+3lCm|F=J2plQsm^x z2eo<4|2d$kdLWZvduN|cPUe37Kj`gL|1~YXl6e$AQ!`6T3lL>|IXU&`dOn%Ofy~eR zaCVyU_|qrZPeIY#?=Nw>IL95-hd?kX?Te|+)4BhPvG)vWvhUh{@lvsYh2Bx=ARxVi zh?Ib|&`Ur%A%sroU;~sYp@$~D6M+OIp$JHC(j^d(s+7Pj21OZd_pM2Yq&R|M#!}v7j zfaU5PLw=O@&&PfHN{!AafAuIY)RJP(YbrXOFJYVOMM$TY@n|UE&eVcp&nPY7jTSv(FWk)|b zpCw~sWqxw%ys(9m{DCz3&sHPX7cxxy1vW&;@Z=saCWa@7`7l`6`>NZQ*Pc!1#5n2Kqh0=^BRnjZ{FBbAkfX1E>A9SAUp!C_c?j zF?_eMV5DedsxBaz@gA@L-aLjj{hoST$@9?`Ygq3Ct?aUx>Ct_%(sCxNfI>HAl`SY{ zHj;HpqYb?e(Wd4T=Yv=92MT-{n@zE7j+9)KbtxF(He~;A|J#Df=gB^kpqbW~4IGb% z@m3WEmD54I*RWB^9(#eYLJGf~oec^~onVM}xOxJLp(wn;M)lxD>Zi=+yVKUO}|~ z_n_6gZwBgq2W^gvob~JV3pRbE&G4QNUk)!@SdM7Xpwv~5z)gmwt)}8@xwX~_x!bzp zQL)sm)r%ps3RvVLzuBUeyIfD~BPV*qC>(qxVofM=i+n0uqWs2kWEhA6B=X=`f8)1} zh*9VABVe}Y2qQZoh;Qgl>qk-7Ssjn~{esBduT!l(-q#p(xcAY;Es^h49YI*_)n{`v z2hvgYgI#)nt`|rJDUT_#9HdgdY~LyUt||5|#^=t%a_eVQj6SRtAMnv$>#Li|Z+N#B7Yiqlt#vLQy9XkjYew zbQr-iFWoQbNJ3C-P(Z%CTbuUSvKgJKV4<0XSeFUJgN4X=R~4#RR~X~;C$%8y(ojFL zyn;f^O8xSqz%TionZHON?QDOx@a%hmH8$72EB>W%=LVJb{%R2g ze+|+_cU)INq2-it?76;1c27=w`_(2#YWb>a+#Q|lYE;;9k=j12pW!EKk+KqLPk=$c z;bsl+K(0my3GO`C#@?TF(l0(G-DI}TH=xUwrkbzjoyRMgZJ-Y2<(@K~bU!cyG=cpG zL>kdeE;}~EWBOJg5W}gXvPiCUEyU^$@s-G;57&EUmR^^Q^-Au}aaX))R9rhqhiS}G&q(5HK zT7sp%lt;kF2ot_#gJy^q(3W=FIG;tG${tvjd<-fg0bk}i6?f~RS6*d!&^hohy~%cT z^fKQ4cK_L0j+|N;MmdhSdx9~KEyHRnbe$U>*(T3a8@UaxyFfz|ce-vi@3 zPmaGho)1ykMZ*`Kx@()5-=B5FUH9wq5wVMXi!s+J!;I6GR>1I>a~pMz5yIlKM%khg)KZS6t=&e(+s6$jyec%5arR<%Af6@00KC97&Gz4bXXM z62GR$rr!EzFbzaLdIrwx+99DMO-Py*)t5KL%{n|+wby(W#N0bh9bNvRlErvwW&Wec zj`~75bAo)@)q8?R&IRe=4U@&NmbK&t?50bte%I;z$5OXOZ=9PE#7ZT=v*9I4i++>= zpw%f3js4KcCGx!YDRp>x@(CoatIwooU}k(=cWnv*OF%$ih!g!mvD`<%&L76R#>wTA zxF0RsI9pm>{AT}=E*{V98L?!`&b_;i2&>5{{+2JoFwHPkD|G*xzPFGM^YZl- z1EDrT_ZaCKCyMsycmcTz?^Zhl%S=~66lMo9%|?ls7+Y5wUg}^u_mb>g%Pt_y(rq!M zW5i^@iC<}j09zKmCkQ*iW*?}PLx$K_kG{jERA*?GyjQI{sA53&>g@ETcO5?<9fuNv6H_ZMSEKXxkGa2UHOTOGxknFi=eqk{R+OT+-cds`vQJ$m6S%X+mS?u0iC z5R<^MhhKEhPKe#_i&WoZ&(X5LmEh60et6b)NIm{+^cXY?=$~s?3r4*)Yb_?H^g%Gv z??P6Gz}_KFVYko|mU>Ljm&7lP?HV$iRW{gX5VhlX3oXy0Y z*O>wh0ka6jA@PC<3!?4YBdZISPSbSD&-l=+&tJc)+tH8b_vF#i8|?K;_f{2pa8m3- zb_cs71(`CRCw5{$_IWdKteas#tnPx&k>VVb@76)U`6*dnJUCl(_4R*={1Vin&V_dK z9;mE<^)FkH7lN9&6`>1+?NS7sInV8U<@63^SlNHx48jfvAlec=p;OU!wjye(e<@=B zQs^Y@HpQ!eGy2&HB(4|^xhdY=h>y*tP}HBp0pq;0$Mdq;BVq|^Y*6mV+KnY|4Ls8v-S+Tn;W>h8dJI?@JTv`tC<0(oomfWvDIfCm z+kcwdlY0acP+emE(5wzE*qCOxBUSV17&kP8VS0t~6nkMCl<;FiBAsw(xlMuwBXxovP)M(08h<*^z`qrwcPCEUjBSt znuPnh=l!;G93G=fJe1z_?frk-y8j_lO|J;5-niz+g}$m=>PId<%PllYSG&zV=|adA z4d<=$)1{@!kWJ3i#E^+^K;85~$vMRySClaodQY~WqXQeO1FHE;Q7IC0VX_0gw{e$c zhy$E5j=UxLYg#@IG^;DUL(BpXTQ_>pdVBl0Y4WkLP$oK6;M|;~bV#rCYx`ai8gS4a zFYv9~->wW#CRuSokd}+u*>oxBFk!Mb(?;)t`3RUR@c@{r&9Ooo+7BQ%#%Y%5@bnbx z@ClnP!1j?Z&vxoHTJ!FJJMr>(b_(;EmB;F5Bdh0gP4@Z0dj@kyZ%y|Pr)~8m3h2J{ zsXgE=Iz;8AI>>pP2E>hH_4(^ z5fhghM9`*x$?5vsA0*1^;%evKf}1KwfXkP+^8qo2?qBCm3n` zv&%aXHaU{#e&MEL7b6@AA_<~&>jtAjx~QV2+yNWoY)~p9uelH+Yn{JH9TqBAqwedK zDD}R7YMS_GP;oPea)vR=I-4yaeAft95UKB?(9#f|qt`rgZ7;*+rh=}eVKA6~ld&Sq zFW4Qo0eRf{YhV_8rxe{bE`sF11;pRLIX0Lq83SRF{+Uj3aMi%1w%0Bo{zk?Mk9pY6 zLCZ7(l&I9?Y`kcS@GfU67djV&o(toSV`JZMB^#!s?&DrH3$P>_ zy?a-emK5xI@#p6RO7woaLxGj$EXfTc(G~Cn$<*+m1>g64pR7A-xXMNQ_Iaut&aGIl zAPxwUB49TgOMf}3F~3dK9?wReeP2o?)s&CxjoKVdRcPac%7s8|+fAk5osgW{epsri z{dPBaT_-v~?)e5&PuwS~HBi;vXLrw!xL7ZDY}=03FM`?}ZrRk8UQRSY9kaZ#*t#|$ zur_g4({D1%J3-h!Skr2ET6I!t$Y)7Ox&xATc;~CdX!wgDVP|71Jfp9dxVpa`c-YrX z@KmKs;`hOpGv}SCSaM!`@V%k3Vc{8%Ei{Zj2qXPws9vpR0hXp^ZP_^|E@W5ik*$@l z!9@S*{tFvA;_<)PbT`(jSB6`yO+}Ym_+h%fZM>5cW+#p-+lUkv@Y0;#v_zl6d$Xk2 zFY)wrG`<~W6!%_H(7y`^P?A-BE-2)LZ@4_JJPOXrU(}~|{o)3*d~X`zj%~7lKdkgB zegvw;dXrHzJvTgldG)N;#4BYRC!=SNW<9YhLDI?Hrm45O2GSm&k7D&a_H{tTel<tguR}A>XG7Px`Js^UxQIi5k|LO||(<11szCjy$Y)DOm)UcMI-loX*(br6vi* zH4Dkp`X|NJP>=K+`;AAE!ars-0JxLQwJ)qGhbB(`1L7G(TMXc$^dzF4Fauft-9}vR z&$^@o>+&kS-Eg zx_;`W%hKcT?c;#Z7c02?<+Ewnhda&;9*h+7amm?&@aV^JA&sP9m{f)3u zc?7d#OkuF`sm;T$4!aO~V4@^lK@kb*8J%XSu-%lxjx9O`y_&jF5ny=Y0@_Nn|HJpnrc0M1-_b6wgv>0 zsmuPEJ$9dLsINB*-^pAE#D44P{7XTF)>$W1`x9VSIr9Cs9Akv?gta^+Xas!9xrdry z5}%6S(FBB*=p@D}g`^xQ?sx@yalau)r^@r1$@cuUn(bkFp6doc+jdTnLFbf+OFK+F?*h-c7j zq~@shGWrOAX+_b0B81v@h>GkcM4F2$x=^-g`&NSlLhqnk2rTob!o~%JK?JIh+gIVC ztG{qiVRP%(1YEDeV{1Ld%0Sg5ohq%u0@UK5x4=WWN8Sj!vPGmGq8TgfcnFqW@MjeO zkk!@OEG-t3C(lDbAsv{W*H7G!s5K2*XUo_36^k_Kzu!+!Vz}P-WR&!Wl`rW2Dr3dT z$;k+HY;mS>iUZRbdHKz(-PfexnkVEokUoE$JECRL)y@%Ot8H(AZarfIR#;gz*Lm@# z%G3#Hni||27(QQl+i$3y`tY~F*l%#d7DiaUr1`L6x?Z;=V_crq$YF`|_Ve^(AFH{* zu#WARnYExN#p!D}ikl?@pp2k6?B!^q7w$7DnV8{j<+to_h6M<8fm>$RVs!BO>2P8I z)UrOIMTILB`D*YuVy5T&j%SVdyzb-n;G}hU?eYv# zEt|VL_Z>pV@=h2pQ@M6zVKN;9=lc6EIKiCrw!>`-E6Ry8(KyZH^n=1rN*Q5A5kchr z=+zm7DI+xvcW?fTYR7MiqaE8H&5u}Dj2$jTFGMtdlT!8VGW(%W&kG(lR@c+C{L(*{ z)Z^z0{sn<<9gqMlc0wc{ZuQ}plYfHL$E+Rknl<}omjuZA1TP`{y$)?uDYLBfT%$bY z9&ZK4Z*czJ^rNr20Q=}IGigyN4Ar&N=9%Y|?r=KKt8Ax6h;kmtgXpxoakDLFAU0zB z;(*xVkP862Yg*^N?fiCW5xGMsZku${ygT&B;`W17!zizt+!Qw`!?LRzx<{DRjl&Pz zbhZyA4;7R=P50CSW6j2+;vrz?DHaceGr-X}zzhz!O_QI|!*sjoH6v20SXOeb$lHE% z+;3SUt+(<27pkXJPekTxEqc)`NzE}K3az*dZ0_8Ci8&mJ`kx8qe-6;Hc`?fOQF{#U zy#4l`r!#y>J2T?P-xeJ-|0E;+1}k{?=~g>vlJ105!y*Otoi&*rI3NWzI&Xz1ezU+^ zQ!3dtR-}8qN3ROUba3B^6ha0&U4d>bjMY_ z7p$vlwYu^a%am)9+Y0muAI0@u%pOipja;(lwJjD#pJp3p|GtBl36kmEE)K+_=7I|5 z6V`>Eun~rl+Tfb8eD`h3^bpn=1n{0DqP{teZY=n&~F^jubZ)ji|3kkF*Q07!A4WH6-v z(md6~3I4d>#7XG5b&0)6kcoz3$hsI(M!4|s87sg=YOl)`At5sg3SUbb2(~bkb4uM4 zWvU;mfj~c9%RPj^o$Fp)D3adT-FtdBm6y;S69wlBtF%#KK7&GC3Nm`R71K6HAb-r+ zxQ1>`rql#koAHpg{1YabFD1sx7xUTKAm8FcH!N=XnhQN8PBY)=0gHD^o~{B2Yr(sf zGYfz~)ZLrzhBe=rLujnMSj*@I-(yTmtw%n4PJ4XKyU zmzKD5{Wd7oG}#=|NH7s`EQL>zae4bu<3i;*{0wVlbj#Gw+hmEbMH(aY&pkZFN(m?< z4zM`uq3*no9=x9SPW0yb*XYKJ{o-nIRnxvv5B;u1TIUfpi*-#&0!Y!x9HyJ<_O-q` zW|GLM{%ql6(8X3q<5$F3;I{B;p!3IfJ>2dlNpE_|ki;7;z9r)rC2)t-<3%aIL-5up z`T|?1bD8YBSmxNu{vzNWeN}GNp6DPe+?%x^G5yYK)died0DHte>^Z_lGxJE%IIP#q zjRP!)tY6M27yY-+z{Jj(xy(3H-_JLWwtw(44P+c(D*FqLXq>?ai5$f4>Th0 z57OuS7kB-hPWvra;;~H%&>)3Ik93a#_55PWdMHvZ8dMM9#SL8)d#qC}Q^0Ly0g3bO zY+8gjYku?A=;MB!_`*bIvAsQc^d{be6v)Cm8!O z3?Xn|^5H?cS2%J0X+}Gr@TX#%hs*4i*!9^{^3E?Rj48&%4VP{E#D)-R6N^6WKh}X- zrohm;I%m)K$vyVX)#{72nh{CHcw(|*wNT@;st;Q=+M%_CC(#rMSUu~JMQl3A6FJx1 zP`hULCxiuZy#1iqae3RPn643%0(Tpm3hh&}BxPUlbjL)xmP*((Fxn zSlKB^s+teUiHN-p$%Zm_P3X{OZ8i(j8~%%SAN+q?7VX^P->;NKSLK#BRwJ;ZWT2^e zSCzij;k{cYqSku}Z^~xP!S>x##LGJwH6>5d%95%(Qh{ALyTgpD)N!HT{go3q@0dNf z!KBfL+8HMkXF&Qf!@gT>yx)x~W2ys~`b7kXp^dup{e7-AI|D0;n!7#UcJBW1y_2I2 zmTH=;XBpy5y}f^P@KsLF!z245Hu@c#ZBE`|-TBJ3^Thu8M4G*yUqhZyDZwFTAp9ION_kE=tmVlQa=W|0?id!cD0nCw_po$dLO~JagAq)U?|2Uy6_6S6ctY zFw{(UDRXsI_d;SJo7kvkY||Sp6HtXrP*%9%T9E5Y_p7fZY#UZc#fp0Wh~Chgx0Ed& zVCvgA3ieqbXI63}JY-->KU@7u=GQ=N9}csWu632H*Uq~IJ2WPjL3o@gXNqLa2|0sW zs-YRgK|q=&74}L^)1uID%f?6=EqeJ5GDw)L4G#eejgN`N=ZS^(3Cl;=POVzS-!Pq6 zVL6WT4|+ng&S2$B?DO=w!Xgs-sP6c^zub?`Z?&79FGF zRoDMgOg$I>a8q*_U&zWL0cSE()`|6Z9iRq=PV%<`6sn=9#^g!QfN&?CAO2h}{`In$ zy-{w3DUK1x^uO$Q*sX`}AZLk|rgvlZrx(#DscAC_FZt0eUc z@yg{y@SkZ71ZCBhpYoMv^ba&omhn_uy}LitOBw(;lkYu)b4=)?>!Fn&>^{}3`uy`t zycQ`VSxUCkT1t|NZ-n{9&d6>S{(fIfx3!eBJ+9tfbma0g{QlmZlk^t}8ym8OBYt** zKdbqSRwE`pra!~fo%&m9UmvivC7dg<;|Wi|O@;QEuFWc&+Th~xFd59Bz@Lcl;Yy83 zFSho7O%hk$An`$rAF#yBEsor^Hm2pTzRm^_b7V_y;#i<*p7d?K1@NWT;91~birl;t zLMUV1zB2MB>Bel&`QcxR9#^7`>Q?AG!t!Ns#4;*G^dV7MQ>UF3o zV5sY~DKSZ3^3%FO5128tlq5JR2iNLN0$4C{idlSk-UYalu&+$ZsrGXOP9|7qS!u#r zLW$=i8^g3i40h3{BZ7LBKCnEgVh-~@i=w3lunm9@V_kmG%GLI@acXpnur~TRu^(H9 z(s})t!g+zty{ald+`d2p%leh|<11aC$z-ErlLjzsGy-(C5k~n>9AC6sQL4rcv-Z>) zst5sYEC?_?30T#ZesR2w7`hnFDhJI-mtL!8lP}^iWv#n)P3srMY@(2aZ}I`WNYcaR zJlk<{+9q-O{PJ>BkW3iYKr;=@pt9bzNk(*_(G7l6X*Nrk)$HJfcSzKQ?iOKd`>j>G z^R&JfmH`JS&=BIf&mh*4LH)B^PLWn!nJA_{7Irx-i<&11Hz@aIPWtKkdki0d0u!8Y})Ztvvv z@@Xv=7FC64mwz*xl9Jx`K9xwh+5&y<9Y+w(O&q_Z{GEqbteEaRFu3GqNs0K5Q8I;_ z#bVJJka@;wMe2$V$mpL)Xmh4vVFo2|ph=tK4ph*%ZiUj?r9?Z$%^=Z3Z}N05Uv44Va%M>{Y^$|Zn6j|O9((`X-KQ6@RFK7b~hEoWqa zbEw=Rg!PXY^A{JLGJ~KmYx`d3-fIGe9q^~$?hm9q zCPhbU=-iQGgT`>P@N$L9lAMBNwzj)Rc12`N&Y6gCX|8$K4?FfUb@TpSXP=7v*t*xV zT8@I@?q&Ma$|gLGi{r?=bLxSFAhO&$Ux^zIn>X_?v#ucQ7v)Tj>jFX=JetNOGbG70 zNamx;-iH<(+mG!U$+9)6`TTD|fO*>MMqqodPAW!jIuJUHsAF;vh6x=q<)Rgw!0Y3? z8d7Xq1e7fl6l}!M*{FYEbN>3dHNHP@Q?wN*ry*Wn&Hxa71*zuWusLkq?M&1IIW;D= zN!cdjD{IF@Id91Q^@w_@A^+BxzRJoO+{OkG_7(IeJuU72#v{eETMZTX7q{Xaxp;YH zN!G7c^<|lvflLY6DaM!xOR_!8>iQFqU@C|e2ia;NoDVeH`u`ztk0FUO;q65BFC-h! zENrj7glxCspvUaxuy?LEBG+YL;390TwO@G}w;5s;;BjU%eSki-=>ae9yt5IQhW>_I zX^vS+Ur|9BeCJFETs`RjwS^1!%y{tbkHLU9eOk;sCZhfPUgFT#Y5x9Idcl|gE7b!P z(d}8yh#;wwcm<@%ZfQG`I?&gBx;6r8Lv^`NxRKJL`M^j1K~7f_MV#4>#kv?tboq`- z=e7#RaI^a0-f`*si$TSl)o}tCis31&Z(5L$V5{XmO|}^WxF!zq2mt2wwzO}N`@yTd z5w2|%?MtFm$PWboh64>vFxCBA9Ohbz_bIi^a6abO)P(F3Zx8}?B-0pakIZ%_&^24h ze<|M9R73i$E7sit$Y{@ZM~YX~_iTwaZH}Rj3a!nxXRFmzRr1QLpM0gN6nI|FH*XwR zV0z_C09*2@2G>=B*TE@4ou{?phc%{Ta(lTRo`Qp|kBYAjLcNu_#lfvBU3&TDjXL!?Yx|{gMjdgNLm}W7LXgGx)w%V+YVYH0d4f zKTr+Pq*ZNW*QIiMS5Z8wya5%TCsZ;vvngV{ggDMwX>vcD>?&>jOR?q+!=z5e0lOfg z$!ojAG1oHq{}?OFTz7&|eO`RSeB&y|)}M|-JvZW6qaG1Q4z0xdp=aPwcLvT^H0cw{ zKSp_{9#|2mMTfEJLBk`--qdIk1+<-;KCHT0dwToSb&D`<1@5p7@S;tn7B2% zbf@wwPwi6=v}-8x(2*6o8lAJx?R{NeT8@H7t1GA4+(ShWx!UXy`JTJN)@s3~0z{jV z6$-cP7T_;0b*c7;X#W5vmuiOT(OiD+r% zduOo+Nv8|f$JYkP+6wXy%b&eNOgsaI`|sI&Kl8Nv!--QN07#=-YCnT-{O5vS$bBM5 zbp8oYU*;J)JZNG1;=mT|)v?+S7X3G(~n$>3n2bQEHe^lkrI_FtmPBgy1@b;pv~tsag=6JQwY9C$KO*L0c)w{cco; zD>SyLGa&izc1wB4i9x?zQ{E!9;~;BXtUTPP%`nXRap;+!ihrevwo&IqPSMs~ux|aCs`cuhvMc1J(XCrAmnk3h7KHc9Yuav} zPU}DGtb)GCfqh1ey6yNKK~cyGZ|kXb!)?`S{DN(k0`@{(l*3hm&6RW}e#8F(lZ4nP`l~H6(0p7n)nLMbcOgB(bpra`YY! zxTZIFi3aukV}4eXL~@Tm75B@(k$Ehxs9|g~LKLJTJd#(c*UHKXjJ&ljI?vxH!x*qr zbR4@@--5Fy$0x(EjpeRJ>p0Iye{)6E5-SUy_g~Z__%cSxNhsj#W_!^my#oy|rT-A` zYjJN=%$0xbrXgc=Hjx2i(??@HN>q+Qrd@Wc8hUz$9)i<4aE8#iegQnlGIYQX1$z_X!(Wn|a$Zu6Unj+WGBimXq{^I3;Z80>B}SMMr*%Wm z&rf&h$ZS&M(uCAv!-giCM0{Mhka~GB>w16AY|QAs?=)s*8Yi5VrA*?O3UZ=VjQnVt zz%=+yO_1M6!_z0z_t#Gc zy)8*eAY80V&dSZC2akuv^{;<;^V<4th+`b1E}EIU(extXxtQVmicz1`Y^NazsD(}1 zaz?IXexN$7Sf^|YI-3911(PAIc*Oeno5LZFx%f6(b_d@Po(oqI0nL}wNYPz$vBWe8ld3eQ)-%|*Lw4JD$7BgR27iv z4yTNdXCp7j$G7yuQPNsOkA(&^*$4^ro|K)jn8yJYN|WP~8_H3^J<*DH7Lm8~j#-pb z+032{4tNWQ4=^dTnmC_*rWESFMd6q{6vn_QlCL^1WVBZ`8&~f>#?fD`qgFR|<_SGA z+Yd3H=Y|91_{ydJaB|FgZ1La!Uys8pwg%$_f2%t=%0yB5u?^lR*8%$ZxSMvLRGF_G z%2k6+a#)heb#aE^(zOOb@l|+OV#2wa%aZ5aK=|1=7KXf)ISrP1)gr6frinsg6`Ns5pa4!4kd1aH`1Ib`VAV8__L2u0rPqv3< z*hZGYoBllzy`4rJ$l64wOW|yYzuHL05e4>X4C0$M6l!@KAAeg*nH7S7weU8wch{EA z^@xK{jSGyOsAP&71!w6L9p9{yng)cf%h7jz1P<}*-z~>wCtHu11~eo*b=w{xHOb4) zm7T>aY#5%rbFp(mE^Ao3CU-Q-+dZv#`u1gCZ3e>ui;T;MT4%WrH5zkw<0^_R$VDpR z`~@zp@wl*fY^)z3zzsJ|B~;@Ofc4tJ=?Z7?N$?WW5jVOSd&Zj=77OXqN=kj~%qjQc zm95>Kht|JPkWay8A|fySlZ)<^_a{}s&Y#B>ky=Zxf+@vCspD2N)f|<-D~?n>%$z*}^=+n})Hvpj z4>W3qxGrPPB<)!tWy5D?3NbGdUcM~R?E86;j1|sPVUO$_7L=Gg8>+;9ZQ(`f>4x-` zAyJ=Gt7761v!`2O`HLg>%}*-T>ZedM4rx>CcZAg2oPTM51#VP5bFzaM$_`%-r;qKJ zXrE5KT`{ag2;U$=-Kw^-8hyLJlLJtt*f9~dZ;Gu;WyyCfhsmBP;nf~BCOe|1AlHhs z`-s#=H}2EjMP?L-yI-_*o_bg~X|(11rC1k}9U;&i+MaE+>i?`iRC(2TrmnF~B3%4jk6o7_#8= zGKsbT=|_6_e?o-)tEl0>GTJ+;Rntr_S2X4}IFnm>EOhyDK%umD2Lj`md{14a;RcJv(jn^@YMVPd7z|_%ars{><7B z(E&S>@`Q1^fEf#&5CA}EYgxo&e}0=uIDQat^G<^luKW@3+M7(xK~ufwz>1OHZFP#TZM-0f8glqQsmKZD0@vuvA{w3!5OZ28!tTH z0^L0b8P)BUMsJ;pUOR!-D7t*M`Qy`C?!-{&v2QP>^Wk|f7NMmkX2Kru)`+U<)r{e2 zba8NPijS#JnX04%yf}zTksI;l6 z%dV^tOMJJ5+AE)`B6-@#J`K>UvGlVp-{*xf^=6>FBmaG+W{ta2#RM+CTh*eB)y?D0 zPS{3q7}jlQj&Ocuv1jid5gi@P0>P^oqMzE#fTH57In$zm8!tS{AKGR`+pXC@G4o(a zN3F#x8CjN&*Aog!JNf&hVYycqsn*a!S?#?PcT(DTJYr4H&{IEB*=nLGwj7tEeB{?+ zGi@+_nEq}n2}O7mBlOj{3eI~+i2o}%07@O1N-VP%i<=f&MS!6Pw!5AS8mGCr9HkAV zgx&qP4ZcAF#3KiSG-Nyk;wG9Eych4$U&Nk0XBV;3`pigUBm0RPZWWz$ z`*E!wH-=3}3N&2lrx3Gwp5k8;7!@txf8n`cF4$f&+eu)I+lGSTiSl%O;GVIKct4fJRWwG0e=P7YlM3`JV~qf0_{vnKSJ`9pD~i zWU-C8O>eoU@9GFtYC6^Jim8wgD&cWl`Sq*!?=Zjpz5VW3ku#w%3JIj=swAJW2mAwz zl9OABmLjGEtkO%ixq|ft&&}~mHqsKS=xy-6?%l!)8#m9kfdr7C@TY>*8^e^ZYF71B zKNN-3Ch_l_I#xKi@dz3iSmE@xk59s8i^E7w#hxoJP6dsQ<;9TG^TsJ@hO}KU(bxW$ z)o{|!Zvg|Vq;#rT*7PL96&UyZik>$Hn~Prk^n&EwBiL_lKB=W3b*islEC#SKHUUc> zrFSQT@W<^X7A^|Sv8*p)pVnAC46Veq!eO0GEK(*TJWgybmTguQBrxv5#(W*Vnz5q> z4TR3RToEy8BZqvx{Nn&WUb2lAg+3hL`i0$Xsb8?{f!u!n@zuSZ0^#HALUDNyo`m%Q z2?>5>i1B{aOFn@{mLYX~!$s)~Y{r*+qN=L;8a&2nQ_5o@sn@2n1lPT5H3tas;^cHy ztz)C~f>lxvGX=RbH#|7_C;FYuq?~CM5WWg(3=zhSTHqy{l1Iz^Bw*^0kN^xh*;Av4 zOJ#@Kn91ZxkUgc>-5WqJ3hp;ndTzIO1`0#4e&;rQZif$MPNL5Qk2_6+=T!EjCZ537 zS>E^fd4-k>;`-mMI^%CYv|$9JmF*idN8Y_B9`1>E4$Q^1oK&-+y?tZxLICWJzf>Pj zKUm0TVU_HlOJa;XzqPC%lU{*yiXDQo*0GjTL=FF7oa-;5h`Ex|nD$QA{`pkK+=yu3 zqFY^km`qAlRo2E~d{YsjIE#0vvZd|nMqAYU4a}}|s{eH&@}e*(LL6_MV!A)&z*1Gk z+?O;n6Cfc*k%#%%tCHwUN|Cr-n<^h#8v_nN&uaIN0{9%^p3Ox;Un@{+V+pMhQ*Bc{ zARB=W@{N1ro3v&{Usa0!Z7T zyuoH~4sxS)zm2SADtfUgG_Cyfzr@1){~O->|6J-1mpkzT@ut^&cqBl%sZd^Wp#44Z zvPR>ktg*9iZc$y_)1_8Vxz0_Nz96Mb{nK-O+_~h?oP(8cO3tM$&p>r6f8~+ef)HvM zlIs8|v2T%mNsCwIw=CljvYaHdzZ;rf?wig_$#Ir(cU-NiC0tsvMnqdr$JVe z`Mm41?TguRe6m2_Fx@lZ$X@I9EQb=m=;dY;vuHSX^0j=^%i0c%spEd z!c$o{wi-JmWV$;?oCb2u!eplSzjCst)0T{%<&h)=&Euq{ z#Y-8(;jyM*m953yM;F=65`9cBnhjqnw&9@^J?pVBfsyKcBRFZuglxU z5Dfc4$Qh}B0;FeqCn%kvpPgUK@&R?2#RF>)0|>DS%%2N0(#~-%gO%YAq}dgjs<1!q zEqyYMsSDqB*x>+;0bs-f@F)C+Wl6Nh2+w7-(xBIn*!6Abqu~b`6fzn~wbv3e0R|f1 zH7dU70pHHckcux&&rpAo(r!Eu^aIJ=XxToufbbvT|}_$8tgBHo89{2>WA-u z=YqflB*}@V6h`uN3K%yUJy$qWQqZKje~K4UzXnuYt~2i zxd_SE%xkU%wSD~QcGr0SG<1iQ8yh}gikLOt!I(}@`3Yau-t8*1bj5^9-)~#kj~?OU zjvw|Jitl0OWB#_(nh-@3f8EWy_GAj2w@*OplS)=$4Jtx`MXI=6Oza z;Y>}Xnzru>JZX=kt)S=E5b!{K0?OSqDQr=YK19vN9}$@U$!q@~D)GXccV+zF*4jcl zmN?{7AY-YY$uOe@O&5%5=qTK5yC{>e4yDFF3(Q;6i*~8nkg07i1?v+Tzhe9v>Rv;y zhZf=Ao-tC>J-FJyKRo3kcd#C&FNhSRD-0T$uWK$js$YZQb^yjXNCBaucuvX51^vy_ z+QIpn=n}2n831qHnRMoAT>I@>GgJQ0J6^ZqM}L;$9~H`dI|4WB8t16@Vue992rN3? zguAKn*rj+7pN7k7<(yDdmoB^!vs#+~;?!#rA7R|CaxWp>*Y)^(J+3*4-!$I1zQ(6Y z!X{iWjYe|*t~eS{$yc?84y_C6A5F$2gVm4JyZX=Z%D?tn<4aENe1}4d)XBVLarLkg zHeiC$wnu_@HMdq5BW~+Ro|4_WyYS%?6GrI)wwqTA%WtJA z)MfC&Zr1{fX!C~aMMS!nY2xX(;9IjHQmrvlVKoR{1>Bs!n0Nf7RD=w0(DW zOaIXLH2dwXY<~RnA~(u^DiSEjuR~;FvQKh$&g^7sHL3oszl+gQ0K3-Ue;&|^_m)?( z6djz!HP3aDOE3K3tujis1TnIx<(!O6UJUh2o*=Kb68};F-mK+%AGz%Y=}*e34J%h` z^7}+*hgl{VtSYCTJoDY%1gIR%{-w}V3R^QOxyz|ClsCW@T>afV@yz!xh1SOzv$D{C zd&mErw*Ef{z!V18m23g1X-RCg_>s&kUc-T0)m=`aRIj{QVe@*XR4F)7Xqi*Qo3Tzj24$E-tu3)Hw;hWH&3)+dQOHQ1%1 zKTC997HI1c^^nxCN@3%wCOb%z`_hCb)$9>|(UkD_qPGxujNF`bvwR`3P5I0o3Lv+4k|IJ$y0d zEZb`^s3l8s+xV)T?U;r^_7TPd3O0OK5BDU!Q(cDx;`4bph5R{I&b{kD(A9n}ctEDgIge(i#oi;~{oO4IyrTM4nEdTGt~DX`wx7x8s&L_iA@9uh zO|?>N7`NH+-^cK&o{ay;#^b*iAHUjA;aQx~BJPT|4h7(8Ml;(#zIc2G`~ygp|Ap>; z?_jQdT9Wk@76&_uywO07`Yw$?!Bp--&LD0aCgg0uIJsV1L)tdIq0&F@{P|ckg~=Ebncd3@lB2wF%CST?>=c``lAQun5|NP zLN$Ws83%G_i5_N{fa$C-qgd+(F!EyoOkU+iDF0sL_mYJDshP0>`)*8b!PX~&I)6pc z+hN9mnfKI<6l}K-B&ZHV`jg);w6s0(4+zF?rS3!oRc=iFESfNr#3vm_M~2@#v3fp^ z>h%u^JO_l86eX$phuq~dpTQGviW|Ik^i7}l`Tmx|pe=1VFp>2`x#5rSeu;WFQLCa< zQdMrBu$)QSi0R3OgCAPzAY!#~EtnN6H&E-ap$Az5>NvdhO~J2h^N9avaP%)vK=Cid z(v6P96Fqc>zbGN`3(0igMmo_`Le|;+x7X#dzT4j3jLX!9zyYp**7it6bJ2rLR5jc6 z>A0}X-S=se5m^_qN+oXla_$c29ZCG9Sc(2i;aZ|>35E7MG(cwqurj?p z!tbyYzm8`GL!_{X3oQ4)4qQW`;-2T@G=c#UUPH+R0>A1 zmo!3;Hk~!p%y|=McWWBn(jd`nvZQ3yk(S)YzBsXsB2X8(VB@dkZh+GifbIX3vA+Kt zc~vpkl=^EUQ*N>B^C~XOD*w6MkRga>({5T)Sk*w~`~t{Y2|xIyhvN^Bl3TFgHAPBS zLMbz|T(x}@Uw^{w1C!mFs>z%~dAD`NXaC#ifdBjNeYcz!ndWLYNq90o;_QqtrgHrB zp4n*P6IY_wS;bp{Tim^33QmT)ma`k5Sr8U+?-|n1nNj|%z{Boh{gTK zK5K7H4P8<c#Hia{kn!9*e=mk8kyDZv01kRyaw01;j5=?{OWf6 zHl(tFml38m5SW|gVM)w=i3na)*AYaKqQW6U`xkBWK?-Im#DN@|hI`Ijijl~MSNo(I zfo+Kz(E9p%AoNhyr8k17BQ0<1qi-x`E1xzCtaM{LFz(KBRvLhQBY}b$Yxz=E&nQag zKIEMP$HH$W4-~`8blK>76Di!ZAuaIQJIW#3XHJJHy8X>!9e}|$ZYQzY9q&P`wX?Dz z+NFudlk@WCyZ9x2LZoEmh7P_?>!4$yK<^cRWL(kV+QoBtNjZrrmpZ#ULdeCWm1qLPJz#ISu-<&dE-_D*`le69?&Ea4^ zd+3pj_lv&JY~D#_w?I`kw1pnn()==c-L45(5sA-;Pzl+`u&tT8<#;PIBl@DKT{YE) zR?_8_%|c>eyJ=_RbEpHHJaHw`chaM}P%>1<^r%r{cyj($#+b`AV@&kevUb%dl$X=wEhgS-GRWPW-b@Jz2!)-6jjIV;$&&8K+r9Q!0ox(rz1k#6}c1S_C7{d^*+i#`9;cgtte`@{pEl+VFxF!nZGZ0S|nH0!uu+!xcNL}re~Sp z(_Q3UxcUCXKm#9EvQktu>;?pa*i^RB#)TQm5?Mlwm;Gb1M- z3I8Vt1?aJ4Sw28b=iU`_#~*IAF75jVvW%NV-|12o(`71NU1>H6g_SOBnw_Rb7W3WV z=Wr91K7Eb=utn~;Aumq82l>G_VDrO`ov(8qeAnmv6iJIlk?s*VU|L7Fgt1y#}QW< z<5IZ`7SDz-M&-}65=O8m-YgaLvCq$0$Cy=;t%2<9Na?m&q{cXkAc*N=hWSYLW<=&p z2qR^}uoCdBh|r7VRLJ3$Pjtf>sks`e(?K%u=kidthq93PkIF}8yR=_@luc(!`JKtz zb?m9>kO9s5)UT48K%f(nbFLEAfJ$=hrsRvZ;nmIROF6w&h5p{euZH)}1v3A!^;c{# zYes%@AUd=03i(D^(AIvFLk|ulDyVT?(G5G|^Y6HVu1fUQY6dn;CZds^Lm@!jz1Vcl zYigsb`47Sq_+6JUUK!rg!8ketf~Z%LYN|V8rk}~S0aCfP+9XnjCu$zYe~CA(nedBu z>+^%*-!J8l0&pIJE+CAgGU8W3N_^3je&CV@9Y4PciYMTDRzaI9jV~{(TaI43!WM@$E=W&h z^wuDX$3vXs7B-1i3YTY6rolrd^g9H1)&v7QEiG7bUKlw#jHr#n$%q^CIad(F;9e19 trp5U!A$E8F-jx)`vSq^CHDaEuF#IOux1Ic^lmE+uqmokq9c^9h{v9V2B1ZrK diff --git a/doc/salome/gui/SMESH/image60.jpg b/doc/salome/gui/SMESH/image60.jpg deleted file mode 100755 index 2d2f4d9b68a696275c5a3877c8cf43825950358f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8061 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 S&SR45yw2fzgiVpOkN*Yo0-C1) diff --git a/doc/salome/gui/SMESH/image61.gif b/doc/salome/gui/SMESH/image61.gif deleted file mode 100755 index 17aac18326fb0d196cfcc55ec43fea9f87599d27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2241 zcmeH`|3A}-1IOQEn^{)#{mT#$4Y9HANOx^JhGC7uC3(!ZC0{=Iay}jFqb&<%vi4X< ztc)magq_iGWAiO4tdc8P>Q2K=C0~yF__DkHi~Hf8kH_oR*W>kgJ|3@tAd>f&acI!j zz#8xw7z~C)A}uT|?CtH*Xfzg!_3`l`5{YCoIXpZ(IyyQbAt5z2H9I?-!CHmDhFWU+ijWRuL11g`K#39PJAm1G>p_{_HjK~6|E_^LR(uO$f-CR^a2vQ$lD~nDK}Z80q*HLo!ZyZ^EEPQ$>n24m=!3++G}HRb zaAd>NEPW{20%->*j_K?GTfvz2x@?fiIXdhOo&bOh!I9n=8o<VCH7^+;F8$7y-N zjt&`jfdEGFT&HQsJ~pJ#kj4bw5ZEw%@C!)BTLnnhfJ@SP%c59#2-wpPVETNac(?f5 zqv|6)-CG;$%bMx2o*u1sdH?u}%*Q?^5ji^nQ$Qc0i9hFv<#ZF`)6LoFQDMFBxA*Wo96g5;rThXs>5yOxQ zh{`8`)JiTU7X%J2In`nzu`qMw7w>x?$tWRUwqcNAnB?JociMT zil1g{^_h@gB6B>t%@#EtK#n4~89zf`Oeek9k+Yx%sd7T^pWWb3y@l|@PTuQ?_iuLSJz6(J#I zId&aWutdyaKf>4G(?sT&Rz*;qbq>MynRNvJcRE{ln;IL}>}E6tTi@zXjZSW^Oxl)~ z;M&On?zwt=UscwG_41a_oNmI6Ywz4ofY;`0^ijpk#S3yiG?xydA&g?x?XoWW7CSbNa(_Q+vk=8JBVD zdA@(|G^JVT)^j*)lZUECiZ#)4LXXzdW_6{b^L*)3hJuC-BI|8IykgXx^{8(H9=F z+9YL>oYyXUm&jemj}&ZQNC-?h9_;IKq?~EOvpYI~T(5JxidregCKW!0$0uIzew?%~ zNGG&-Ju?l7t%iT2Gn@#muNq|s?K0PWc*rV~HQTkfck+O@Y#>~4K|JlNS>zo*AMll!f_2LW7(JzX6GoKv}7!u^Rlb55vUA z_!Tw?bOa6_eznqM-)_}xP}Kj8cp`p1CL)L|Hhosf>#xU2?^0eCQUVaOckl=iwTL`k zYqi?YJ$&jQsDJ$S!PUFeQqi$HCV*dZ@;K UNHoz-PptS)sjENL2nqQ91(*8A*8l(j diff --git a/doc/salome/gui/SMESH/image61.jpg b/doc/salome/gui/SMESH/image61.jpg deleted file mode 100755 index d1733325229167681d212f00e0463df73c1cadf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10055 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 Hq5uB@LQgPo diff --git a/doc/salome/gui/SMESH/image62.jpg b/doc/salome/gui/SMESH/image62.jpg deleted file mode 100755 index 390f770022fda2c959ae2635c672300c0dd7f76b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10571 zcmeHt2Ut_vw(blegeC|g9fAUaR4H4EB0&W~q*y>{qSVlP6-*EjMT&Gqnj&HYq!*=w zfQVG3_g+FbgqFO8?(K2!bMLwL-0!}3?)TmcAB45W%v}E(bIdXR@vo4($-`jpSv3tc z0E2#b04o4w5X!dU{pvX4K)ojEiJPUCo8AWKm8)t!kz*EL%_bj!0#^@1)LH=g`}pTrGo+Z4;%FN zhxHfZUO)kZ!zn1?2IQu1et=85>AQSg$$$cf_~vll!yaTRLm;p zk=I@J9h45BW;q%8B&UjoU*^KnelyoLT2=ws5y9nM)Zan>=P=*;FMUO*3rK?iUqpbX~mvS*5yYG&(ogDh!{C8K#;kxR*nWDw?2V(3?R z;%FT6#j4|H6w9|neH}`gW-I;6mY%r2a882@p0Vvc#>*f?%o;R}QoM3p+{Sk%x$vc*;fSUOZ<1oCTfvhaZXS{T_PFHL zkfNwEd?p#dRxk+`apz4MqWfz0+;&rMyIz#zD%CKHZPC6go9!e$5m-}do2Dg5IZ#@N zUyq(CXU~yiY8bun3XMtUi{d5+`!H-Ks!@8$; zMive+oqHR5RZe23XPRO0T?ahdFdIXVzGI|Xr`6cALXunY>NBg02(k~|!*a)f^UAQ( zF-Hogc$@ks^;xziY7S?_)0;jn^quc2m~c3udSzSTxiKZ{YJcH+9Nz*90@GUP($7mJ zEmAUGq%el7`P?7nTO#qe&UATWe?cZimrh~A6~Wj94s$ieP@d(5G2WD}zIcwpZ%68e zU$)&&r&_bIo6NfQH6w}z=)%wl@aMM!sT4R`APm2OzEJ2S($}P*(IvY7ZA@ffRf~#2 zi`&;K(TlF<9h>d5$$(zGC-I8xz4UMt2Y}? zx!T(Ve0Sv*NLjBiV_w`SA_J>OUe@JHHC|iY9CIO~H&SkB5?$8RT8%pIR=W$S-)lN_ zh@byurK3yzxv4^DmoIq!{te0b_ZK20^TI0XBv(aE3}!E1-Xk;9QR|J+KXkzPh`(Dv zgz;49>YZ0rqU@cGIk7^`7UgDiCYBa9^lY#2>wR|7^+Ez3^~mxY7J-4im8RXqwf^ka zt1L!yDn;y0F#)$cOZbsO85vg<35^YDy_MJ=j-W+sZKzG}(+0sUp5EeP_kA25oDmrJ zb@ra?6FQhu7=Y@2*twBk@nS9iE5E^hhsE<2WN?K-xp^+pV|c3EEg(8lv$rxmdaT_> zX}!w@k(_mKOJt}8=2=Vus7ID@Waw~F8aa@Y%X z&TW&yJFT}v+*09|{)O$+n*O%RC3{x<-pOB{R;cgbCM7}EN=@NU{CO+=%zXy;^qA?! z^`>8Cfhpyk_?h)$$jW*?A|w}k_nyrgweWjRzORLbbi?8P{@zn-Tm9$p*95;~Lp_YJ ze*KZQtYGX8--CvF0S4veL9F(B$SxFZo}Pxiha%`d>8+k3?Z^>*-8MZ&zu&rddD9}} zeCDZwpvJYG4!4=Uj+EBbI^JH`PVoKt@+H#8&SO`MQ*;L8P9&8n>@YC0+`u3Sypp+F zHCv*(`0K9z%I^J}o(l?78K(jR&J^OX*GIP`-z(=9Fnnbb>R3M~Gt=o3*`lP#%}uM6 z58q;B>+v7iiG6|H^Zk1Cn;zU2ZY|nG`9IA|;-ZV5*?P{gHY?wvAtth!RkzH9aJV?w`xg0I_482vy+Z=GBw^;y0VpNi`K z!wJNnR+qp3?Cy0>q?BGy(M}6p?Ru_IS(Vm@R(`weA3uodF$}i*3Au4BIZ2yp&)bgCfi_l4<-_|;_k(}WGqMrCVb2(66s$4xEQ z;~emdPl_<8Gg0mm+)m*tfuWxK70>`1#hkJQ_fx`kAGpJ%?EHsju1|7RQMR3Wl7GTA z$ok5J5Ldv0&N5KGn%GXrS&)kvEipEye!WpX^X;bEDT9qr)A^f@V@Xpwaax00fnZ3N z${*oc){^r)@mln>Z`r}>-Bbg9WSoEe23jfpNLI+W0hRJe{VkEkcp;y>WUc;h{h|BI zUje1!R7UNR((tzZ&zO1Une^p*dhX3r+|mNF=hm6j4}{Q^-!# z&Rdt5oJTP`)W)c4+&=sm$*(|in@xudYIR|R5i&So7*C?hAcIk1u;on#DdL)BfaoBD zWftK79@`R^P6oGT$bc9EP7EqfHC-TsDt9v2Rs|?0)at}b>~JZTbP&f_6tS_=S+QiI zOa@G7WMBREhOH@4B83d@ro#Vn(dGZHi|)hM{ON8MH(h>#P%%^g3s^@o$l&?q)`~6Q z)-OUIP`PhZl0mC5MKkbm=(KgTJS1plymGDBeswn3W;2^NQ5TtRLI(A95j%d2JBSz1 zI7<}$%pz5`lgRP6vkO-zc#0KNPf{t;3#ZaX5~X{@FANmWH6DLCmVB7{uB`o|`qLb< zZtsK!aa_s)`7@c~4ncMOns#DQ2hJELjmIHH)D)C*k8uK9Z=|NtVX;qLTHJ9iJl~T=7p%I4OWgHqf!{lQU&&ZY{6DTrL=P7z}QOAF5l=J3Tzi92Qpk>A`=Hci?E6U3LUB+)B^b z!5Wgm^ja#NENr4k?AD~NiOQfWeGxzRrqD;_;p4t8Xx?Z~Y`YkCZWuc)j;6}6-bu?a z?uqM}`q22U;~?%p$9qKTOv>KhB=5q{zw_6;P$Z@4@ZLw*0Bu%L>+8&T7PQA*6w5xq zE>V{=lK_VO_*sJ-Ue5Juhu!cx{Ws2X=s38SiA6003ETozd2=v!e4 zKn6{P0nLCT_1`=7eFZ@(ZP$Rf^4w+@8JtN62C0nVr7?n^UK4`ODR60hsWwl3tm}YM z9rhf>DIHoQo%q86teD+&&YAO6M*8VXr}yYNG{b-3?Y|X*zmFP6zju!=;?0z@)LM#~ zc?W&%^+YPr>O2VGYfqT83JQ!_c{cPwVfxIsRBBSa*VJxuO5lv;-0XX##B@Ok(!Y^jT zm8p*V*YT;d?h;1>CfcS$c%XEvE;M1Y{ zsnhJa!($U1*BFkd^PtCd;cF30Gm3MHGes|5&GoE$83&Z88^)b|SitJ&9v%&(UM{5v z)rkBK2Bti6psiwB9Ll}{G$dJotv;28Z8d}#0>!><3?PHs!D?iXS`a~^6e705poGd0 z1|?}b)Hb!waw?p}%)>>x^;Ma;H)RZs+!j!j+d;g+E*((*fMX=8yE|>tT_JwTfD`CaZaGbs;9KX(>@*t@jo|uvjPQ4&fjIL|swU2#G z=E8_+CEgp4LgD0a?ALa@XhE(YQ`tn6(Nc>zzM#(`7``riuV~S$Cy~(N3(}A^^4D@o z-)>o`(eQa+kDi}u36-JZa3J#Sm8X>n0VT*=S<3lpPj0-*tR(}-5d1A8d()^xp~76@ zCkSpWXMy!LpVs8v&l!(}txA#yQT$UHhZwlr7B+CJTyS`yMjf!hBy*T>;vEq!j|)GD zDwSUy`sTAyx(BZij#YTOM88+Ykfxhf?@}2N@{KV27+A z5@~{M`82fN^RF5zdUa?Zz!uS2<1vw&GRUj)2!=YzAPnn-O{}w(Yt`oXzpcypI8SO- zFC1R$z7$Ia?$O~fu<7+bv75YKBo|l|LAftk^#0l8O~ThU*$s(^?unIwhl=4k&uK<+ zl4MZLlm^jHr&=uW2pP=jQt2gS1bEQZ<>oGbPIGggh`knU6gF^|@&SumB~tm6Do%$9 zv*c|nN;e><_hlk78$ay+{@v={w1yW$5=t~v1;DP3HSNXR5gT7jA+rW$G;6UHK!`|H zDi7`m!!MKeR_w>NnDCRf;>qA1w7LK9KBj6MaoTIZs7Nq5)}X8DBQ{Zd!Mg!o04#>w z^T{B4&UA-224;mjUOqb2R2+Nat6A^3{g$5;e(L#$3r%YRk*%%Bw1J4V`>0JKYLiYE zVak$MHxg#j7NXd5PA_IS@a>8){C3GQ4}RRx@=@un-eX1sC-}MU$n>*P*9G(+c|Z2# z^B!PN?6hqfb>JOSfAonE*R}7lZnx$GdY@AZD)LIeAKw~lZKdoDzVB3U|2{C}IU!%5DR9&=qa~&^Ejp=&Zq=Mi+cN>Ydq!-j z<$QM8Ej=kjq)O&=RKwo-gWMt&pEZyr)uT8?6!qLiJ72$S*Xb_(RrcqX?l)0)BT@cU z!{MiHUV?dP9rN>?>NpMcX=;K%byRtO{Zo}(rEJex1E%uX@Sw*$Wx)bVN(C8Oou1Ri z2gg4Foq z0D=%de>{rXpwcAG?GkTZ8~^qWQbi_q%~uzZ09Ll{oi#rDbR?QVt<_t@pI{dRoyK-=-(W<6naaTg0*A5S1&e`Pnr*A{6RX^y^4@Za}Hy{%yMCt zdQUi72}8lwVgF3^OkP0jmC~1?d%3#i7SRkhxHN>=7#--&71xHbi%E4P0Gkebzed5M z&OT9LStQ-2h?6eOK*Pxnk$6%RV}47jLA_HLg-fNkD>H0DFJJES5Dh9Qiq}Y>o^bZe z59$nR$wC0P-p{W`!puh7r{|pe1`HcAx!a0A!x|}h8Ht;rfoHW2-AM{_B5KPrZqoH( zhdd4n&nEMA6tuiGnCXffFvenxG$v|Y`}8fXw<0Z}((Vwv9!ydqu|O=q==u)S{6}Depu!#3jrGQk4UIqrUa$}~h$5~N zb$6M-|GwcA-vK~Ez)t{ve*-Y|9RNb>Vy*t=!V9OPK%Eh{obqAb0h?)NTTss z_*<^eAgbFu<;+I#HeJe947_dek$FO6_lUk<^vud{KyJ&dhIEr{1!6z;SFkPBBsCl( z{yyUd(X^ozwv%%msy}oa5MwD6Q=S^Z@}rT2y5Q|?$#D!Ib-#rqk)Ume-t@7eR+lOw zQ{n$(C!i z zsP4bSwn{8QJQR9jL&O7=V`s%Qn-@e=^&xr56Cwk)rfYQ2F0OoyB^`q#r2@%K!~jG# z^(x4K=l}7`Q~vO7Q}&;|YuWWD?@G`8*}EJN)B4@JOa*&Xjs|yRU6K)@aLnAy0gT_u zpV5Nk-D-GLjyZDQ5ec8YMuk4#+=_RMcDGc!1hk5y^`vqn=~gEw4caMxWFt7x5fgIU z0;eI62*9icA8ZlL0mVb~8EE0dpeR7NVV8G14lUFU#cvhc`ys+t`@O}G#ja6*g+^YM zBZGarZABYIg7~4hs4^bf)`Bw9KRX3u(K64Qb!S5jJFJbs_#0EZyeL6WkOSU=L<*OA z3~ar0ryzDDZ|_wT?H4@l?O!Il8Jx9ST@q0raR;ClC_#CX(hf@$ef)zKF+)AgG!qn- z!&y$GLr|lm0g<#+H7Jg6l~h2ggYw9s2vPv&5Q%mY(oMfNQGcBQ^N(jJdp_&AnOTxB zCJ(=`;7u3kN>=5qoBs`m$gY*`sD<)Eq7N-^Y_(i*aLy(f=0shFnDbW1lrezc;8lwBWnoNk60ylDAut&wf==;gTPQ zRwR{o{Q9ud#A*1u&TllM6^~ebSVXUZS~Hv|*4CH|T52nxPJmJ|v-+0Sr&LBlGdQ(V z;w>IEG2wo%rRh=lyfsIC2Go=neU(U$aMKYfG@4-02J(%mG|B}M*r`#|t$8TBzjTAL zJ2M$T?S%rCt-tJZ!H7A3UTmj8m3bmIO$*KHCnKsdnzBzlR4*tjnOdHIDhdZh<Kay$wmwP}4K^UOa4bkP1n7Rt%rchn1k&2Y(}j zNV%(I@YbWAbl(=tCvRf-@=rhdqMC0^#pmCKW+H>Xd4<8n&n?q*=xSBk6|Q1?s};e7 z8)FPpfO#*%evCgl90L<037*a|E_{7cEa6zmHPu!2g)0qBC`TV91hAD16TiAOPxDHq zA3?8Ya2JHt2sq16Wde!EV_Xg<17aR(Ne`$Fm;@uAaLmdd4;O|a?HA~iepoNT&(UTA zktvR^EyL>N$v{0ECsaOT1L?b8D>jwBYw7-V8IN7WQp{K76poQW-e|m+l2;zZ&;^*% zUs4Gye#~iuErnF>P_gFc4(qUs#(!CeSK`G9?_><(n6jjwd5on4O`d!;;V8SLwz`M` zii)F(dwOPwxJqr2 zOIcHO(`4eE$_r}ogE*Cgs$62xsS(#0`Upi?p5xctphy=Q!4lQD9zjwY^(_TTv0Qs3 zuJ#?A2t)Hoes@{js#C|C57y{Qi(1 ztlh655+Tx&9k44V0Szx3#JBvoE-9Mp53a|MK{8{7Er3$bZPZDKm_U)TB<(~JfikPg zn&bun>OSCypiKH=SC0DcA0hO1DJ$~%fZ&&c*EDILKSWtaJF3yZ?t$UR6t_7vv+Y%` z_HQAKj>I2y)PS;)JK}jl}&HC3hh!T$-IX zHGC8&r96Uct(fY?Zqq}xD`dB&_opNIXF#l}v4Z#ts#O2bd}=uC_t8*Y+Z|2)V=}rw zCi{~)s;`<;JiXSf9y6)_PipIf@0;5 zFNA<^G}prYlg$>W`*1BesD=a(yd_dY@@FG$IYEl!zwCdB{{a~OZ9h-z!Yc{K0qU&O6{>)S=Ye%A<=O8Nbn zQ0A)^!K`Sk3!Ot8mw|=a2j`Es12;mzXb4O$h7Pf6&;NPs-M*}uaNh;vU9??xY`u!u&Hd;S;D8)$t1 diff --git a/doc/salome/gui/SMESH/image63.gif b/doc/salome/gui/SMESH/image63.gif deleted file mode 100755 index 6a9c2c86db0e435040a2f15dc7357a2b9e5e4dfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929 zcmZ?wbh9u|lw}ZS_|51jNoRGXxQ@V%9=oCfrwS6PeV6kTwWD>+H7sZ_JYT!=6Z)aI51cP03=XP AApigX diff --git a/doc/salome/gui/SMESH/image63.jpg b/doc/salome/gui/SMESH/image63.jpg deleted file mode 100755 index a453635246c104d00287f78ee5e663f4f63ff95e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12348 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 BhZg_< diff --git a/doc/salome/gui/SMESH/image65.gif b/doc/salome/gui/SMESH/image65.gif deleted file mode 100755 index 8ac6138d93d9a3256334dc1d072ed4bb13f56908..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5679 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 MsINlKzyQ_%0JA=UvH$=8 diff --git a/doc/salome/gui/SMESH/image65.jpg b/doc/salome/gui/SMESH/image65.jpg deleted file mode 100755 index d999dcd0549bfe651542ccb663c26e3a72fe10f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9630 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 diff --git a/doc/salome/gui/SMESH/image66.gif b/doc/salome/gui/SMESH/image66.gif deleted file mode 100755 index 3040b1bde5fcf9286aa4ea7402d23d759140bded..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5260 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 I3ouv%06iQ~761SM diff --git a/doc/salome/gui/SMESH/image67.jpg b/doc/salome/gui/SMESH/image67.jpg deleted file mode 100755 index 516614009e2371ec71d7782a01ebd1544be1a632..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12193 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�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 diff --git a/doc/salome/gui/SMESH/image68.jpg b/doc/salome/gui/SMESH/image68.jpg deleted file mode 100755 index 141435643e1cf46750a8e5a811876ab8942b08f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11843 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 diff --git a/doc/salome/gui/SMESH/image69.gif b/doc/salome/gui/SMESH/image69.gif deleted file mode 100755 index 91707d147ab45c4ac5e43fe7e966c1e5c3faf611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4706 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 diff --git a/doc/salome/gui/SMESH/image69.jpg b/doc/salome/gui/SMESH/image69.jpg deleted file mode 100755 index 6998984d8d799824ef3fb14eb21c04d9ce6d7b54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12705 zcmeHtbyOT%_HH$eI|PT&1PBt`g1bWq5*&gPEVz3U0)*fYNCE^J3lIVXZ6sK5cWd0; zB}kwj_s)H@=FRWUygT#nd)2F}RlOrL&ElwL6`%lO-peE)OR+4}hEjUIXZ;sA#CD=xAtY80hF2ScKSE zn3!1i@bPg7$w??E$VkY@C}|iWl+^UpWMp(~bo5NjtgNgQv>e>*EZmGNtjr*E3=Awx zEMjbIVrD8bD(3(AK(>Lh0RV&s`uza@I6x?1R5Wx9Oe}015CHyL+uiwZt^d$S2%vz# zU=&m^+TB~+brX2k2A~q55kKIOM!%=Nd-N8^(F&Z&t6)xYSqVZ{O8_S&mMHp1W4=P*i7r~P6@2~%g2+U2e zw~y^zXZSJOw({-K-iaj!aLy)0gTp6EW?>N7&3J4JE*iy4*0L>RwM z%HnSAM==-*-tcu^ts?ZcR(cWZFSO)B$4N(z@`>rx@1cF%aa|FG<1|j9$L4M zkPan^ODLd$LGGDlTc-n`(LE0IoAFxU?eZnc+N-JIB!GBiZxmR@O5qW7U_2Siz81)< zPP1dO_*iV&mqlTgz>qjiIoFCWwG{%zJhOEQkMu?R6|UMKs^^&~(;gl7D1J4mdmS_w z*a4+TaW~rHwoBPb>sKegm*~O};wzLg3D7Gf{VlT!^B@=&XJv!K^O4g9A~hWLZ}0?x@fFORc!E@B&MAzw9zawM*kwWK$Rmqb zLIRZb>p!*qYYex2UQ|`Q{?ug|@(5PVxUv7dtF%7N~<^os0)L>N7M&D)Y9fcGb~jtKXq zG-2Erd$r>}iV(37jC7a>g4C^cb(i@93ee;Mj&J4&yD|C~Q_4GV4N}*un=PN!!Z&padz} zhHHV~u9-q4Fd2dbh9mXxx>7ph$H+(k4UiNX@TV7(Q6v!T>}fqW*&lavin?-p$#t<@ zyM0|A^Ar(~`HPyS>ZZG+)De<{1VWvY2V#)G^7DLs`zDWRyQuqF`^~D%eQ6ooMS?PuIZUE3l{HdhK*@`bkhlaFVCqsNXk` z4R>YDQ%5ZqH*{cMnr@W}P{;Jie`ZR$*=x;cXk~Fu-_b$(=1T->;-V8BZsvz{cLbF2 zC?(%+8A7P)S_GdiEm?ZCxImwRYZV3|E?7NY2=rZvZyUmpWc14qJ4jB{g(s}w(R^#v z(x0he2!FP9h7m6hs5Yrg2qipI`7VYYqYRI~j$R|E={hF?E!fdwjD0uCn(5$p_%Up} z()-0!1a5*nx2^&ugcpDv3o`f-a;6LCImTB%a;W1TU9WM}GSW}=T3~k;Os4s;DRRJF z0$@=vuB70Spt!9kcSPSjx>gq4@pbnUKc$ipKo}xqIEr(u8ElMGX0J(p!Q!Pk+NEfA ze6oE$RDZIz$rl#pZKd>;$XaFZMFJoOVHge-Q};*0W1)|*Qe%THwgh`|BWw`D%?}#f^s38+56{`T zC>ow zUN8s{bG>nrT*7Zs6Ja?mNW3CpwbiEtcRu#!BktVyTS;n$;r8Fh&(Ga9e4+Ren|hPC znOGy}NFmUYy_4p4R|9N;1R|e8PiQ$k#X2Ehn)BD4FYW;_B=Bt+%CiZ;2uyBLn^qmi zkibqe64-1j3SU*V?6SxCcVNW`|Fq{spTQ6j8Cnu3-T!1cpPamc-sM@;>uQ^?7bibb zy#4SKinidqvp!xp@-L{YAhwT>lWEP8*l{i07Rj!nH&9rWYo_-rUwAOB;i!7%oSBXf zC~&AMNsxbJuQYd=Ag4FI`0#WvEFSHloIlVahx&MTzpDe^QxHo`r%3-o7gBB#9|t>y%08W3!|dEQlXSMFLkZ$qc)8yuw+Vb}G$fA%V>~_qIEr1ULckpIX80 z>h&v=+#*Q85HKaaJy&~t0;?TeybP{iD@~eQ=owszorYmoQ?;FIq!|#4)-yTwI|x0* zx;^Z`hJ%yojzSaK0d>v<(p`1;9R8$ilo2Bd++onz(a*^nn9x2N;6X;qe}n-Q6XJKI z)=urO(tzs?7vSb$-i#1RQ#@*q`x#mw+`;z6B}PQEshuN`T)pX7wU*5t>$^JRhUb2A z-W>eJ<7{>U^|_aWV<*OWRGnJGu)~qGPna{^1p`5<)bQvJIUN+2*)q~z<_WQu3}rCf zm`2LXTSNP5{e!hm*ZQ+KNa>OkdF3GX%(ff(Xw`)UA>p8_H)@$Yd6o_6Rr=`wuMdV0 zD)`Gq=py_Gz0|Jg!dYw7)91ir%BIH1|6N>nGDBN4dzgOqJIi#JJojxWhC{B_;-Gn9 z&j!^eny@ah@C+HoS5C4{)anCow0YPv>*I_8wc?AXju3gG`6xB5+ez&jqmNEi6qez_ zlnfMRjI*7q7Q)Yt(+k1z_)l*KH5+wQ`)yR<6>YZ;+1cnr0xDWkC-8AlKEiulSCU`IY9QNCI-L`%Ex*=V;El+V9$3z&f!czj zkC?I?3LONAx3>5V-2~s;(5#Xx>Al8_#c>2PdJ6M{KHi~_-_PA~B*5U5j|5CGkbuHN zV?lZ&T3HSKe~nRhz=ff@H0SqIrOZE#buHF`4DE+%g$KKfR3}{o-767ifx$za!@gxP`Dh&F5jJt``CCK z8(PqF1MiynY6)&_I+bt=&PC|spkPYe@5w&s z=@K-DKQ~-5rEM)l0BwYwQZ7R|>=9_=8?9+Ee$$D!lJFU6ckwcItXS4>yF%7I<)JnB z+8ORrw85yvvpwHh?)9>zKcY|U3xvY(W^jbQ3;N^j=lRgrhO|bp@GwR|ejtG#&|^$t zr&<$Ru;)S2lZZC5E7H2HbH1%!@rEBfcDd30WT2!O_Gof2-79<+a9Z>yHfi6;_KCuG z>N+7tzd;5Rgaphx{eX_&Gnli3>7rYOIrZD`1h>&DHBNHXV&SlF|0=op9ZPVo9*#Y( zduM9zm{Pt@9ga!!)#-5s5c~#3=_g8g5x(tK-Q+$`F}{yo-MC-&ZK41HzE2&S5;KmN zw*#1T?ICri=J2~i-^C-tH0mb8)kFfSZNJ-4{uGDxuk~~Zp@;|_w(tQJLMgmaIE@vk zPVo)9n5Jcco#ELl#sdO`?(Glm#0nW4>zpn{dOj{mR~ zBAV#yxWk`yJ?`-5MCImVgq+D@j!&aiu#4t~Wd{=%5Q zLtXHfKpgEjsp@YP-!c^IXMDX`WQYY?j*~O@Ln>1k(*st-LZ2tz^rO+1k6(FQ&o?o4 z&wXq>m{Pj1oTa#k6zWV%H#L}R?f6G&+6DqcYXdd}FW zF_NIW_@UBG-OU!nA0xG8_>Mft^h3dvPj|;D18&pXL`f=OQ%p5W&DuG~j?CfVX<}pv z-LWNO_dO*Y3eY4y@2nR+RP;WIsx$V5{HdC%j_vI*qoAIqet#s#yo{U{CGZHPK(Qy~ zdX=aja1*>0Xn4E5K60X19>vh}LB3Jg2zB+NtdoVC#1Y*hjb|6S;XU#xx=yyd{d%Co^8$k5PIS8pBzn68*O!J%#+438PPW=fsL4q-5GAKt)U7YjFx zMU$VHnL7@D%!!)&P}(I~_cSZh0rOw?A9! zobO(=a+XOg6jik@IyIfh@RD)rY8gMPzi~S@D%yFUyc*v)(rKSGttcfPre+`eb#~#G zp!G58*S7-k1C7^majjPz#j$0=<^GBA_hg&kSxHp6G`?eV{c0o16Tipv0R8w`q4O_M zXU_CY^YDA;Yy~UAzS_8LBa*sk($AYbd<}pXP#zD5e#7}-W@Z0ZCjrH%D#oh2-CgFp z(lGp(Q&nMVT9&s21Zp84VP?ijgZ=ikbStC1nxiEwpz{op5vLN%P^l9!b+&2{9|!E& zf`{S;9lkd@V99s}fU_HpQnE_*?NVu@$Ud2y=l9iFwQX%ZupKaX9-Wn5vcxl`PUFoF z3Ugiwl+~*}!jVfE$~}MSxbiqYfmo5zsUYZS$UWP=(R?$sD8nPYH>dJ-!zCpQwH0in zSNhC}?ZU_FUQ!YoSh7iBi2Npi^jRCc&fqTC&yNyF+k#4NB7$H`+AA?5>9IA}Ss@z< zQpB@9E5>DqV+lqJYG!rSmiip)u4yhVYabE^Yg-^ZLf9(+Aq)7;-@G_@vgt+XCAFvI z)uH4S&!eSU;;Cb*S3mxoz53n3qXCHkB{S?Ulp+t`f2}J1>)V!#P*1}Qq0uNN$o&i_ zE=V5mL;?h!>bO(J_9D0w-hSW4i%m%1)x2hGF*1))&`;^5>*bVvUWqsIv2Wk?6R0a9I9TjaBoJ+kGY*#6qp{QHK!Yy)^cXz3-02`h67!y$%lav{dsw z6jT1z+B8A@pt%68?~c#3M=Yw2P|x36%9dZNeOlcwu=bIy`}#Wl(}1^co|1(x0}LZQ zlVIDf&~R(ipc}1y^oz{H=U*;`P-$QL$FhL)5ATLFWuaZw&Vj8s63f9cd`ekLM_ID9 z$vyn^o;aXd)Qhrt74{i!KU$TML;l{=xti5VIonImJesG??BwMBESv-+t2wk`dbbXK__g1}9#eED-Mv4K3-#e2q0p;}ZyOxe!R-?Z!VKhE= zubX&5MKhq;oxGb8P2mtEI*57-!*v)WvM*OS&j_A=Agl+kiZN5zJ9z}EZ!-P~!~Ftm zR@PJ3ivkn23V8wf4o+C-wxYF`G4)qg3CH0(bx_f!2)NclYl&U{EwicZC}TyS%JM@w zxG#1mZMPBb6sN=`169M5^xT-s_X(pW10sB*_@Do z;H1-F+T{HTDblk~(w-bL%Gt6s*r+ZFe!2GCuG9+3;IqZx zQwyC|w})k`0%&1>&L@$8+|@_8&Sa2)WtFe4gjEuSQfCp*l431Alrz}IPQ?4yYfng3 zkL22ndaGG%R-SpKKMB6bwG|*i?;!O|sUkuRax#v7dE02|mVeWqgMjkpr6{l3StsNs z3>eI=mYp#{F_{x5d^W=R+}c`(-+zgB!$YyZ;;W9`HZuBTvZ88E zQm@#RI9ZMCJ6mwisX4OsMC0qkjQw&Syf29jc!!jj%Z<_{iuyJGpe{k4=G^%|Y3Yudh-arXD9 z-aq_s%&V!~f(ONaAVG0a=Wzb5a(Mn~P0v-8GN*QBlBWWH8OkacT6OIUIFLn-ZE(<+ zECi{Ofby3i*b64==!GN*eWT6R?mKQs)eN;Y5PVXB!G?CclLYT%$*ypvC`m7#k(*Ib?ej0k;7G=CK?K6a8({Q!!rm`s5 zon#;-{>lERZ<;CfI5}F!zCIy^i%%Ci=f@>AKD`?5X%qWVN0;c0r;&ujE+BUabpK!m zDe7CHs>6+NF^>ExJH+>^&kdgB@A-=`^)0IKJ74UsW%{kqS=usuV+8jX{86|7Pa=UA zdCnIqXOCMtrwD|Qz~?9(jN&k%MiU2HUo@pZ!3U5O<05XRv=r4!>oY{m)%T+9XR&n&AY&7*;^DaRm-&nhP^KQ{Epl|UCznN43?~cOK#)Ru} z9x2|I5FK|y%3+tA;SKBnSI61Cm36a_FQ&; zAK|?ZH!hJtD@E!P_0Ll~@$xxvF@*KQ{9Y-e@6}eg6hg}{Zr?PX9Wc1xKKD|OG_&z(0GUQ+*~f`WyBjB3?3Eb zt?-A+w>u4hxhl!IpgL~Bp|RAOfqG9@^Rf6Fdg$ZIe)l#+-YS)6!+1v_`#v$7Q64!< zpZ{(=@5TbnU7{K4P`HU8i}BAhmH)ipK-O%+G4QTFsO#ytHJS?rw7Gg#u&32+w;Ndb zE*tnI*g}~z&nv07;3+X#SW9#(1zI)QB1${f;{7i7E_-104pc|^9irmUpQ|y*+c`>P zk@ZGJAY#@!nGQwEXf0eoVyBCXV22;st=A%J{8Q~W>v8nk+;a=J>j(h*YbJ|mX6{Rn zaGTAVFdbB})U?-qIqe2zWP6zn$02gW|NTpm=G+4v&Esq|(>j<_^Pm|ZG-sqC@;OUj zSemK~hsHA37WRnc92@w>f|3V3Dzrd(rM!tojVIqd&7s`b{s;*a&tTpy>PwBrt`ko@th(7*`BV}n?i}BD;wG|P^>aD zbJ9PQO+YzIdwSR8hLw$03pCD=&x97JQA&PK-_*^;V`n;VsnnR(mDI*u?cRI4ZOiN_ z$dxI%VrM74r$ZMD4rT_Ue;5ua+U9|WddxUbq|Q(7O|p1D-gx&&N@3;9!YdYIG8M>@ zyb2EISf}a!+-DYm1O|n9x8icJ+;6YW1_AQ#JVhqT52#)*yd2@b_`c=1|4t=M5j(P8 z6zBdI>|?=uU8uSje)hS094V#4K@H@0xbbMt-cO;{^W7;ltHPL7iczMEFN%?XjArctf~o0row{ah)_tAJ9nu?r&_4XcnHq-3JI z%O<^d$0y;cl!CpaC`)hE@?KmC8>a)L1&Qg5wjx)I|H>ds6quG6;{* zzE&dyZj-#3qVlDwW`9@)j)<-++WsgaymZStU%>{`SZSbJZ@hN)(6_7^{x0e12Z3yf zgf$J~cp}WiShqorEoBL@QozKR7{;<_6ULUv=O#Ae2embcLX8X5v$H7iOAM4^0I#|b z-lzN;bW~jv){5_yHNkk>M0T21X|^1hJ+^OHnVxd%m#ne-{#=G~1;`EOAFk&V7}D`7 z7goAOLVu*GeHl(apLdxOi;3FN*r3>)9#+RQ{IdSq<6!h)nucq7Mg0tpDLEatF1d6y zvf;dBnw3Ak)q0Uko_$A}zF(%b{vPah?*XKp!S#~hh~LoJ+wA;`cF7D44VIk?T%D25(iZ#igEg{#sMtt4iVDw#;8(r%?8ziqy00CsOmu31=HSRQG<7&4Z0XaOpGnjVq0exxh|(>$nm!u1Tq?u55GJ-~Fsh3KuU&RqGXw zt1uCw{{0EPL_P~{MW+F~Pd^N_9LJ*Zd~Ae-uPCnPFbdhi3DmhC zT-g)@;=B3JIcMa{)p?g!ab_l;9e32+Aj&pLwNn`5C4EDGy8q4|;s3@SnTp>ods}3!dhtR`Im)H(SC_ESNri`}B@aTL@B^r;8T%p(1RoYg~s}|?tl?PoDT^~ z=(D#MC6BGjn!ygZwCDiOi?YM2+!KkarS9*d^qgdDMd9fcuiWHoj%UH0ea0-UE^{Q{ z=T%07cz0CS;Ty!(U|?s8qj}t3*{SH9YlG4Xrl6zKS1AxwxRfmThwRFn7tYVr{R?A+ zqHyB6mM#O_DmMul+86tjn=d5#=pDkaJcm-Pp#6Em6r;(#4^jRzw)?bVYMw5;+9kg7 zVL_HXNT63r)TO~*JbSBf{7fX_mO=B(?*`G-tbT9jmVC@(?=iKixQx*UGIw{zBs9I` z+3H{MeG9FV7~siN@t><~=CCs-lhokM)o8TIeU8tujv^HNTMWX=9AlSngI*Hus)A1} z>0(1i;%w$-gAHA8Nl1e9g8dsZ^WI)%lomMX(QiC!tZ7JRk>+R%n*qbRiWt40OC7do4MP|KlzuA);* zP@o@gJJK8r2>p7~nLCX~Cf*Cwo_fL1s&!4V?F+WG^UmNs3YelV(4qWd3m&RygUFbC-t=g( zvzBO8RbxC?Mjxz#vPMhRiNfqHPv>`?-^l#4+u}RU=c~)4U*KHW;B-lG-m4%^Te^k5$=(n>SI?*->rylFUT8A!VJ;F`wJ1SM2wLVf$@x9F!Wz%)v ziDN+%gsjt~sFt?2VY0{RN*E>qT)1JXFD z>Q;JXdF1xV5^KT7rjcE$U$%xVcMWCsJNr3SJ8amcRxRz%P@_Y~R#Szoeg?bTRAB~? z9NaPo_bkM8dj?baM46OTmyK2VN2M8Q%|CfEr9C&9KiZ^XpRP&Vu4|XOn<<}togA%F z@!_9@NPms&5fBr0#}$c(*TpN^`Gq6AoZc1>$6Xg!-4$l|L7DE39G}{%M>{N2$yql2 ziomZ}P(=Po@TC1BCiKCh9yiQ8CtEf~%2jz|aU=7FYd3pL<+ICs91(fC^L1tX1w~VP zRr9+{Hs|4wOst zdOzxPv%GYB*bEpe`H~;z$#{2GxxW{UF6uxhPd7_lVVN5(aq_7596fEI+CG=3P{OW! zkFD~neN{#*q!q&9+k6>E$yy2LB-zkBZh3x5<&qz~%LPp@MR($1SOQ&USgkkyXz2*=3$rqwSi_kz_>W-9CF8)N!Q@PMm!2 z_Bz$c{e-mJ_^#~U6R4cC5M&y6i9e<9{eBK|(zIw}f>N!XVL$8wKL$ z@t~Vs7*v*#!|%pfvV1j`eem>=MCPGWAJ#)(BahgD`LAyFBdT)l1G(E0cJ)m>m0f># z1phd@;{NCMNFV|J3<;Eikw6Y{33UQT+=Bx4f4u4UC-Gu}Zyr-~n0eOA(rnbGieWI% zzKRZ|7209vCqHx@qLWnpSpHKFc@(a>%uuf)0*yDMuVS@`%TP4!^PoIRlcE< z*WG$5ZOxh}82a3BxzNpa%h|hLdO}SeSMu`Nv$q`s0+ zfLZ+V$&t?ITI0&yN>jITzU=|Ce^bBuYdZuRm>Lcq^|(<~mh@e@)`pyo(6z;7MR#|) zk^L^V_#>Xj@uE`5`ohN%7Slel(6HK}&sEC+yBb1UxKPxZxs?%V2us*~^-L6UeM&)a zK}0(Z0}mXYz2`A{zOBV2>-K{pZk#YhV#;+0Vh>0zv3!TGsJ)s|HCeEZ+Q69Xds%}7 z8f*660=*f_4u!ZCeaBsXmC^c{Z9}LY|3)SChji+%*RIL7pupCzn?zwbz z2~*O(1KF6Chj(hZ+7nDOp*UDPRZnT93sjWd#{+CMz{_uySBcuGl{T^qx+TK^`#9`v zP3UAco`48^=7s*8Vrk0LlO1So!jJ~&+>~HCxO9xu69dv>L!J_Gi;$#40?h;_4F$mM ze0Al@li{y>Q!Y$3rj=caH36Uf+z260@b413TX>=U+d}_9v7`LinDkwBYm>L)P#CuM z|NYhf;}N)1ZcG%x7A_2#$2~tfmhL)Hu@q-j@^-Vc3xX4SU~JCY?kA@(Y)J&w!%VVN z+2`MoKnnbX=H6~393rEB3PbN*{$#Mi)9zO73ZGYHNt_kDp4X@RWea9WRAyYw$Q?rY zw}OFxhU))Tc@BXBlf1%X7yYoL|V*m1_{%;#VI|~(hzhde#Z+sv( z6v-~LkuQDmq|N^!2mX({{68M}>)YpF55d2mk3XA%4z6E(NT5yf3PthG)y5-%BOSEl zgGLOW1GUh>x)IA*vAsb=w%9G66p7@L?nVA>fF%-W+PdWjf`1erssFm@yi-Vy{;~y- zK$y{T=H*e`EfUDT7`iL@W5e4ePgWo|NI?Av2EHYAejB{eA$fh9xgv$}>(K(qT?!u^ z{PRZgPAhex)5wYhGAWS2!Bub!068oQxC0#t9we}EM?6s7xvKyF*Z*%0IB07D6hK;h i;oe3Sv!C;_Oll%S!~7Av&zO*#AUpLp^@t>L`hNl7cKta3 diff --git a/doc/salome/gui/SMESH/image7.gif b/doc/salome/gui/SMESH/image7.gif deleted file mode 100755 index c50a014afbf5df66067cdffa32c57c5733b0111c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1047 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 $5p- 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 IAGZ1CFW~D0SpWb4 diff --git a/doc/salome/gui/SMESH/image70.gif b/doc/salome/gui/SMESH/image70.gif deleted file mode 100755 index 120b8e8efa7465138b8b2838c457bc4a28edc7cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 979 zcmZ?wbh9u|lwc5J_|5CTHK~GLFGI2Qg?A(-kdMYpH3!NDXkDKOmM_glRa7b@t@tFK= z3#ZA73(Qvh8op7V)h_f{3HrEpDLnCAug92jw@c(rK(FD_Nnck9FmZi7z{;?=baJHiaRxfQ+~pnotvMZUm(cB H!e9*mkceTL diff --git a/doc/salome/gui/SMESH/image70.jpg b/doc/salome/gui/SMESH/image70.jpg deleted file mode 100755 index 0df360f68fa811aac5f539c305a0273182cf7e9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12029 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 MKSUA$zlZ7n1FcAkLI3~& diff --git a/doc/salome/gui/SMESH/image71.gif b/doc/salome/gui/SMESH/image71.gif deleted file mode 100755 index 0008354f62adc0d8164ccd123af93e4bae2c2700..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 988 zcmZ?wbh9u|6lV};_|5pT?UPA zvy5wh`E({^G_nLNUgR=sidqA+Gr!AJtF6l$7dRE?wRSCdeSIa537@NhSXTHv^}?)N zYg09*H9G7zORGQSH7;~^Kd0KgV9f=ldPeJ~5jzT#do4tb%Y1egHZn36_^mthQ;+fB UTxW5+4Ut=3US8qP&ca{~07G(Oc>n+a diff --git a/doc/salome/gui/SMESH/image71.jpg b/doc/salome/gui/SMESH/image71.jpg deleted file mode 100755 index cb1223d3895bfeb700592dfd27b64d20f6ef772b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11550 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 YUS_Tuf6PJ76D`(048Qt2@S!vR2mK@({Qv*} diff --git a/doc/salome/gui/SMESH/image72.gif b/doc/salome/gui/SMESH/image72.gif deleted file mode 100755 index 43a40df275ea4cf1eef23aa34ab23fc3f0eff3c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4721 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 diff --git a/doc/salome/gui/SMESH/image72.jpg b/doc/salome/gui/SMESH/image72.jpg deleted file mode 100755 index 21070c6a50d7a79eb10d732bf0b73f2826405f10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24132 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 K@;4bcaOA&RKKPIT diff --git a/doc/salome/gui/SMESH/image73.jpg b/doc/salome/gui/SMESH/image73.jpg deleted file mode 100755 index d13b0e55be071bcd1700255a03d5f29c05b58ca7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20374 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 diff --git a/doc/salome/gui/SMESH/image74.jpg b/doc/salome/gui/SMESH/image74.jpg deleted file mode 100755 index 177fa205e21b45220006a8df2968a46c465396ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25111 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ͧGL8besF)lbiaGHy4?+XW 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 P|5yoRtj*g8gXYuK#K( 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 diff --git a/doc/salome/gui/SMESH/image75.gif b/doc/salome/gui/SMESH/image75.gif deleted file mode 100755 index 1a9b432073c6dc75fcdcffe159064fb5facebdfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5735 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 LbAlHL1gQNRSv9_v diff --git a/doc/salome/gui/SMESH/image75.jpg b/doc/salome/gui/SMESH/image75.jpg deleted file mode 100755 index 3bb1a1381d983112dd083960fe5a63ec294c34b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24687 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 diff --git a/doc/salome/gui/SMESH/image76.gif b/doc/salome/gui/SMESH/image76.gif deleted file mode 100755 index f8c0ec0c5f962dd878b358d0a9c3b3e5e41d5e87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5694 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 Sj@{1e*v?+wPT+t6i2niBUa$55 diff --git a/doc/salome/gui/SMESH/image76.jpg b/doc/salome/gui/SMESH/image76.jpg deleted file mode 100755 index 88ec89ffe27dd1b1edba4796662917ce9dfb21f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22981 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 OfYMw4%Q6bS82>*(sV_bN diff --git a/doc/salome/gui/SMESH/image78.gif b/doc/salome/gui/SMESH/image78.gif deleted file mode 100755 index f956a221ba4966531ab7115113b580d4be15ba31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8236 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 gvy#Rt^YvHv)&6G^V!Z diff --git a/doc/salome/gui/SMESH/image8.gif b/doc/salome/gui/SMESH/image8.gif deleted file mode 100755 index 96299e3b5a9f768ca59e81ce5b809d155da05e6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 998 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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(sCurrentK==aDataCon[i].aKs[aPos[i]].sName){ - 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 62cbf7af9..000000000 --- a/doc/salome/gui/SMESH/whibody.htm +++ /dev/null @@ -1,288 +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 8a420e4b5..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 1f2835db8..000000000 --- a/doc/salome/gui/SMESH/whiform.htm +++ /dev/null @@ -1,91 +0,0 @@ - - -Index form - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whihost.js b/doc/salome/gui/SMESH/whihost.js deleted file mode 100755 index 7e2ab32d5..000000000 --- a/doc/salome/gui/SMESH/whihost.js +++ /dev/null @@ -1,432 +0,0 @@ -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 055b5b80e..000000000 --- a/doc/salome/gui/SMESH/whlang.js +++ /dev/null @@ -1,452 +0,0 @@ -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] = "s"; -gaFtsStem[1] = "e"; -gaFtsStem[2] = "ed"; -gaFtsStem[3] = "es"; -gaFtsStem[4] = "er"; -gaFtsStem[5] = "ly"; -gaFtsStem[6] = "ing"; -gaFtsStem[7] = "ingly"; - - -// 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 699779f3c..000000000 --- a/doc/salome/gui/SMESH/whmozemu.js +++ /dev/null @@ -1,68 +0,0 @@ -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.body.scrollTop = window.pageYOffset - document.body.scrollLeft = window.pageXOffset - window.document.body.scrollHeight = document.height - window.document.body.scrollWidth = document.width - window.document.body.clientWidth = window.innerWidth; - window.document.body.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) { - 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 e08cc08ac..000000000 --- a/doc/salome/gui/SMESH/whmsg.js +++ /dev/null @@ -1,64 +0,0 @@ -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_ENABLEPREV =0x0106; -var WH_MSG_ENABLESYNC =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; - -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 ccf9b7920..000000000 --- a/doc/salome/gui/SMESH/whnjs.htm +++ /dev/null @@ -1,15 +0,0 @@ - - -SMESH 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> - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whphost.js b/doc/salome/gui/SMESH/whphost.js deleted file mode 100755 index d4c80bbb9..000000000 --- a/doc/salome/gui/SMESH/whphost.js +++ /dev/null @@ -1,526 +0,0 @@ -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){ - 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 - 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;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)) - { - 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 455bec74d..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 0e235159b..000000000 --- a/doc/salome/gui/SMESH/whproj.js +++ /dev/null @@ -1,82 +0,0 @@ -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) -{ - 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 222927a0a..000000000 --- a/doc/salome/gui/SMESH/whproxy.js +++ /dev/null @@ -1,63 +0,0 @@ -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; \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whres.xml b/doc/salome/gui/SMESH/whres.xml deleted file mode 100755 index 9634684e9..000000000 --- a/doc/salome/gui/SMESH/whres.xml +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - </fonts> - <button normal="" hover="" /> - <editwith value="20" /> - </form> - <background color="#ffffff" img="" /> - <fonts> - <normal name="Tahoma" size="8pt" color="#000000" style="Normal" weight="Normal" decoration="none" /> - <hover name="Tahoma" size="8pt" color="#000080" style="Normal" weight="Normal" decoration="underline" /> - <empty name="" size="8pt" color="" style="" weight="" decoration="" /> - </fonts> - <activebackgroundcolor attr="#c0c0c0" /> - <margin attr="" /> - <indent attr="" /> - </index> - <fts> - <form> - <fonts> - <title name="Tahoma" size="8pt" color="#000080" style="Normal" weight="Normal" decoration="none" /> - </fonts> - <button normal="" hover="" /> - <editwith value="20" /> - </form> - <background color="#ffffff" img="" /> - <fonts> - <normal name="Tahoma" size="8pt" color="#000000" style="Normal" weight="Normal" decoration="none" /> - <hover name="Tahoma" size="8pt" color="#000080" style="Normal" weight="Normal" decoration="underline" /> - <error name="Tahoma" size="8pt" color="#000000" style="Normal" weight="Normal" decoration="none" /> - </fonts> - <activebackgroundcolor attr="#c0c0c0" /> - <margin attr="" /> - <indent attr="" /> - </fts> - <glossary> - <background color="#ffffff" img="" /> - <fonts> - <normal name="Tahoma" size="8pt" color="#000000" style="Normal" weight="Normal" decoration="none" /> - <hover name="Tahoma" size="8pt" color="#000080" style="Normal" weight="Normal" decoration="underline" /> - </fonts> - <activebackgroundcolor attr="#c0c0c0" /> - <margin attr="" /> - <indent attr="" /> - </glossary> - </paneskin> -</resource> \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whrstart.ico b/doc/salome/gui/SMESH/whrstart.ico deleted file mode 100755 index bffcd6eb9409a6e1121695adf763c2ab477ce902..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10134 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 UFMH1!hGZ~$el#mfpYA#HU*7IM9RL6T diff --git a/doc/salome/gui/SMESH/whskin_banner.htm b/doc/salome/gui/SMESH/whskin_banner.htm deleted file mode 100755 index afe2d3f06..000000000 --- a/doc/salome/gui/SMESH/whskin_banner.htm +++ /dev/null @@ -1,41 +0,0 @@ -<html> -<head> -<title>About WebHelp                                                                                    - - - - - - - - - - - - - - - - - - - - - - -
-

Author: eHelp Corporation

-

Powered by: WebHelp 5.00 -
Generated by: RoboHelp 2002

-

www.ehelp.com

-
- - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whskin_blank.htm b/doc/salome/gui/SMESH/whskin_blank.htm deleted file mode 100755 index 5b506c2cb..000000000 --- a/doc/salome/gui/SMESH/whskin_blank.htm +++ /dev/null @@ -1,10 +0,0 @@ - - -Blank Page - - - - - - - diff --git a/doc/salome/gui/SMESH/whskin_frmset01.htm b/doc/salome/gui/SMESH/whskin_frmset01.htm deleted file mode 100755 index 6916dee97..000000000 --- a/doc/salome/gui/SMESH/whskin_frmset01.htm +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whskin_frmset010.htm b/doc/salome/gui/SMESH/whskin_frmset010.htm deleted file mode 100755 index 357fc8224..000000000 --- a/doc/salome/gui/SMESH/whskin_frmset010.htm +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whskin_info.htm b/doc/salome/gui/SMESH/whskin_info.htm deleted file mode 100755 index a7a252fe2..000000000 --- a/doc/salome/gui/SMESH/whskin_info.htm +++ /dev/null @@ -1,20 +0,0 @@ - - -WebHelp 5.00 - - - - -

WebHelp 5.00 System Info

- - - - - - - - - -
Start Page smesh.htm
Skin Name Default
Generating Time 18:32 11/11/2004
Language ID 1033
Compile Script webhelp5_compile_script.xml
Compile Build Version 10.00.949
Product Name WebHelp 5.00
Authoring Tool Name RoboHelp 2002
- - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whskin_mbars.htm b/doc/salome/gui/SMESH/whskin_mbars.htm deleted file mode 100755 index 66e8c5329..000000000 --- a/doc/salome/gui/SMESH/whskin_mbars.htm +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whskin_papplet.htm b/doc/salome/gui/SMESH/whskin_papplet.htm deleted file mode 100755 index aab44ddea..000000000 --- a/doc/salome/gui/SMESH/whskin_papplet.htm +++ /dev/null @@ -1,357 +0,0 @@ - - -Navigation Pane - - - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/SMESH/whskin_pdhtml.htm b/doc/salome/gui/SMESH/whskin_pdhtml.htm deleted file mode 100755 index ffb243969..000000000 --- a/doc/salome/gui/SMESH/whskin_pdhtml.htm +++ /dev/null @@ -1,57 +0,0 @@ - - - Navigation Pane - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whskin_plist.htm b/doc/salome/gui/SMESH/whskin_plist.htm deleted file mode 100755 index 35f0155b8..000000000 --- a/doc/salome/gui/SMESH/whskin_plist.htm +++ /dev/null @@ -1,204 +0,0 @@ - - - Navigation Pane - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whskin_tbars.htm b/doc/salome/gui/SMESH/whskin_tbars.htm deleted file mode 100755 index 8b705444c..000000000 --- a/doc/salome/gui/SMESH/whskin_tbars.htm +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whst_topics.xml b/doc/salome/gui/SMESH/whst_topics.xml deleted file mode 100755 index 2a61402a9..000000000 --- a/doc/salome/gui/SMESH/whst_topics.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - -";]]> - - - - -"]]> - - - - -"; -OutputInTopicNavBarDataWebSearch.form();]]> - - - - - - - - - - -";]]> - - - diff --git a/doc/salome/gui/SMESH/whstart.ico b/doc/salome/gui/SMESH/whstart.ico deleted file mode 100755 index 365eceac87e1f84509afe98f098b13c5012ebef8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10134 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 Cw@GdQ diff --git a/doc/salome/gui/SMESH/whstart.js b/doc/salome/gui/SMESH/whstart.js deleted file mode 100755 index 0cb5e2c8d..000000000 --- a/doc/salome/gui/SMESH/whstart.js +++ /dev/null @@ -1,244 +0,0 @@ -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); - -if (gbNav6) -{ - var gnReload=0; - setTimeout("delayReload();",5000); -} - -function delayReload() -{ - if(!gnReload) - { - if(nViewFrameType&&nViewFrameType==1) - document.location=document.location; - } -} - -var gsToolbarOrder = "toc|fts|glo|blankblock|banner"; -var gsMinibarOrder = "blankblock|hide2|"; - -var gsTopic = "files/introduction_to_smesh.htm"; - -if (location.hash.length > 1) - gsTopic = location.hash.substring(1); - -function setToolbarOrder(sOrder) -{ - gsToolbarOrder = sOrder; -} - -function setMinibarOrder(sOrder) -{ - gsMinibarOrder = sOrder; -} - -function onSendMessageX(oMsg) -{ - var nMsgId = oMsg.nMessageId; - if (nMsgId == WH_MSG_GETSTARTFRAME) - { - oMsg.oParam.oFrame = this; - return false; - } - else if (nMsgId == WH_MSG_GETDEFAULTTOPIC) - { - if (this.cMRServer && cMRServer.m_strVersion) - { - if (cMRServer.m_strURLTopic); - { - oMsg.oParam.sTopic = cMRServer.m_strURLTopic; - return false; - } - - } - oMsg.oParam.sTopic = gsTopic; - return false; - } - else if (nMsgId == WH_MSG_TOOLBARORDER) - { - var oMsg1 = new whMessage(WH_MSG_GETPANES, this, 1, null); - if (SendMessage(oMsg1)) - { - if (oMsg1.oParam) - { - if (this.cMRServer && cMRServer.m_strVersion) - { - var aToolbarOrder=cMRServer.m_strAgentList.split(";"); - var i=0; - for (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 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 Ou1P#Q%Gbz0tN#PC0b&>c diff --git a/doc/salome/gui/SMESH/wht_abgi.jpg b/doc/salome/gui/SMESH/wht_abgi.jpg deleted file mode 100755 index f0729b7e5b4c7c54063069ca80a3c4194e8c972a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24385 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�_nkqF@BmW00=Ri)?Ih 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∨Sp@Fa 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 F{ukFtg|z?x diff --git a/doc/salome/gui/SMESH/wht_abgw.jpg b/doc/salome/gui/SMESH/wht_abgw.jpg deleted file mode 100755 index 74de750c656930519ea1f3f2ca4d813df65f2606..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22665 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 BznB03 diff --git a/doc/salome/gui/SMESH/wht_abte.jpg b/doc/salome/gui/SMESH/wht_abte.jpg deleted file mode 100755 index 78fabbbad481aa5d5da0b50bc17fb1bcc6ec2418..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8785 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 diff --git a/doc/salome/gui/SMESH/wht_abti.jpg b/doc/salome/gui/SMESH/wht_abti.jpg deleted file mode 100755 index 92c2d68ee27624e3a56016b432caf9ba0560c3ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6985 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 D-2ODE diff --git a/doc/salome/gui/SMESH/wht_abtw.jpg b/doc/salome/gui/SMESH/wht_abtw.jpg deleted file mode 100755 index 1fdd1a8dc9acc6b6fb3681debe1ada91041ff355..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7382 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 R!-3(^#)V}^r`Of|{{T5O_&NXp diff --git a/doc/salome/gui/SMESH/wht_fts_h.gif b/doc/salome/gui/SMESH/wht_fts_h.gif deleted file mode 100755 index feb79ae82af9eee69c53f26bb0259032aa075e4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmZ?wbhEHb6k-ry*vtR||BZo|;r~pAw6rq}GyfZ(`9E{!|Cwk00|8hbg;4y-!pXqE z#h?Qc1)0IXk;x#+A>*+@!I6POSS!RrfT58|K-tSA;Q<3fBLi2!k`9H&MbLd(38!(I_bg5(mI)e{m-^3EslCSX>cVorP8PRGb9PR6=s1mS VaaxGfR)s^WLRThtQ&FfcSSumvosU}!wfETS0aGr@3? zdxspSh(KrHq9aoT-KUjs8mD>B;@}XNpmBMr|7?}oYb>uWEcfeVa+@?~=Y)rj)7TcL Tg-C5xIJ7EsWs<0b0E0CE)e1Lr diff --git a/doc/salome/gui/SMESH/wht_glo_h.gif b/doc/salome/gui/SMESH/wht_glo_h.gif deleted file mode 100755 index 12223e5cc1fce0341697756352f9b0c62a8bda9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmZ?wbhEHb;*%)rSZ<1s;@p_xON zNrEGx;cz=YBa6U|fCh#RKGmQj9D&M>U1H90Uv5lDKGrGE-oazpu;k=q>F}tW&P_`^ cr|TEqTeC7i(Tj<(iA(m^<^_R`jEoG{0RC$x-v9sr diff --git a/doc/salome/gui/SMESH/wht_glo_n.gif b/doc/salome/gui/SMESH/wht_glo_n.gif deleted file mode 100755 index 32803ebd9c781fc4af17f14b9adb90110ad849a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmZ?wbhEHb@X1N5r3sx&Z zBLV=4v;qQ96f125gAlJ(vTB>)VTcF>e1HjSQzA4<9|pnMWEc<%-et>uWHyKA(+U!g z4uJt+@c?WLQ_}Q_eFTV@14JlfC4%*0>~0PKD^E&u=k diff --git a/doc/salome/gui/SMESH/wht_idx_h.gif b/doc/salome/gui/SMESH/wht_idx_h.gif deleted file mode 100755 index 2df1b16a21c18de76f78db446889be1049f15b00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmZ?wbhEHbHIyb7gPvHyQ kB=ho<%9&Y;?rBphgO@tBstIyPcx}nJ(B#3&#=>9?0DB23GXMYp diff --git a/doc/salome/gui/SMESH/wht_idx_n.gif b/doc/salome/gui/SMESH/wht_idx_n.gif deleted file mode 100755 index fd193a0f7e3769bce176e5d3218e2da3c9be2047..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmZ?wbhEHbHIyb7gPvHyQ kB=ho<%9&Y;?rBphgO@tBstIyPcx}nJ(B#3&#=>9?0JH-snE(I) diff --git a/doc/salome/gui/SMESH/wht_logo1.gif b/doc/salome/gui/SMESH/wht_logo1.gif deleted file mode 100755 index 2ef5700f23ab96a8894ca981f6dd4e03d49f15da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1405 zcma)5|4$WE6hEw{WP@2sq*B9~s6A-aMR*TnGR<$WUK)=_0wxAtNI`_D1ml-yB@+dP zsBc$OLBW;418aN}T?NWeuY}?Bfsicx`ks)f$(obf=f1z7^V``u=W{-v&$)NSs^v!0 zhCK42aU!KdDkYTSN-?EKXHqIDl;lb>B}o^BR6;1hm0(Jc?&VT(p*UBZDNcHnNyUU> zTrs8?0ZEZmBouK)Oc4@b0~%NuMmOm_I)s#5N+u=gwaA2!f=j`qAk6|rE+prYGs#Jl zLN61Namkou1dbS$BqVW3OcJ(&HNZd`EI|u3ECx29frVkxf^?4HLNFmn>%&@PoD0qb zCoLB&P-I*%CKy3INTF8{7sLcX9{d1JOv4W72MH(yYk+|?SfUj?uo&2Y1{P`ObQw8< zaZcJu=)+oMjB!Tr6>`A>MNW(pe1y|50KCu+qoEd7!Vl2IH0%H;2!=wi1{g?V612br zi-8Sj(kIg0C?iJ@E(Rl^4{MPz(vL&?>bbWrdQPZq_FP5xdW_btd%V-59y|0AJPI|E zhqS(lhld9CK;t>!N-z(auxesr;>C*>&!0aZA0L1G__5378Xg|*>+9?2=xAtYa5x-x zyS==;+-9>C6cl7Ir5@_O*4oZ-Tq?);~Jw)@?`Uhkdf_@b?ChvDevnOl;F z{O)wEUF3fwWN`b)p`hmZ74ZqyTirWDCr?jHsG7Z?C^Xjcp&@tK+MJ-tiMM~t9y(JK zd-+uTg%MTgfphNkTBpS5^mmrr#| z=1}8IkeVGn}pQ zHCVpPI1rxNZ#=ktLsVCB(fa0eo*wA+OG$X#zE39BrDL!$%heFLP(bmTWMLtsXdezCQX!b?w-hht2M>_D5ZYzs^3rKC2$Fu?!mp%pGtM0mD$)S0T6oZ8-Q*iUS3+ zDzgE-%n30xlNRs;5XMTtl6*OipdgX0;uj$63{EkQgRk@UFX;Yu=iYnnIp@B&EOx2M zye^*tXpBhdkV*-qxKd0h(wUS>3MILcOi9v3A(aqHa3z=$qJXNr>^Wl}Mr z7*~ubMnF;|6$wRL5mST&*nkEWhS5!Wj}9Rvmy$_IdMz>`q~KC8DM+(GkqgPWP8G$24B?(Df5|f0jU=1*k220RF4U2&dXkcNOv>=@$xDZST()zF#8RvpC z!AZ*n3ltd_j0r|i4^rqA#04=ykOx0N6VtE*`auE;!5Uy74VGvH4=e^Ypn*l&IbBAM zV4RaS68f+f8DpFge1%-FK#>#U1Rvov3;-{*!)U05mGA>JF%3Jw34);ztN{knm;^2G zz+zwnn)HcuH_FHngp0vQ=)+oMjP&EszWVO1i@ppt)FsLu|41fN2U zU1*M@NT-hCCimS65eCTU%XSo!jlM ztgI|6E8DSSM?pb>-EL1$PftxvO-xL*SS)dIanaGyixw?1o6Sa}apA&+c+rD zNfU@hDNHx(KS7ff-Rhk3c74^E!pVWJynC+xKzs4DS^mMz)zxQ9XR^%xa|s(llR}r2 z1jioxuG2Md`IFVX4K?R0XT4bz{IaFL*)`ZvlVS57ip{xpY2?KG(bTHa`@JWp_&u}KZK_yd+ndw= zha=RHKc}R0(C=zQuhW#Y?VB9y!1iTl`Lj_SC#@D!ZPmbq>`6%{de#gqZfY|Hy5kS* zG1S*QW3W1sFK?qS&-rgzkUFDp_5M{o$?vcK`l*4^%p04(jTpGu;s5EX)ajO}X-VCl zH9x;KvnO}N6T7;qHLas$XMA{ZS+O(QdeCt#tFSu$N=k(#^7`qoc+K9Fl0jZx{`q?w z^8W4ZKJsc%c#T4}) D2$`RH diff --git a/doc/salome/gui/SMESH/wht_next.gif b/doc/salome/gui/SMESH/wht_next.gif deleted file mode 100755 index 8ea834d5e7032dbe1ad10ea4cddaf55ac91156cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73 zcmZ?wbhEHbu&t4cF*@n~ Vey2jt%i6i7QHe!nS-}hp)&O=i6J!7Y diff --git a/doc/salome/gui/SMESH/wht_next_g.gif b/doc/salome/gui/SMESH/wht_next_g.gif deleted file mode 100755 index c0e9758468e31a83aea3f3d353e5d88920ca011b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73 zcmZ?wbhEHb0c=>&3LIf YBPcn4pOU*-tpa=3)XoK`gBTdB0bkn^WB>pF diff --git a/doc/salome/gui/SMESH/wht_prev_g.gif b/doc/salome/gui/SMESH/wht_prev_g.gif deleted file mode 100755 index 86479091649ebee62ce8a95f7880d3aa95305ce1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73 zcmZ?wbhEHbutpmhBaYhCPCMFj~25SJyItL8^ diff --git a/doc/salome/gui/SMESH/wht_sync.gif b/doc/salome/gui/SMESH/wht_sync.gif deleted file mode 100755 index 0ef174735ff57f43ff709fc824f326c8f7d9a772..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 846 zcmZ?wbhEHb1(%oXCs~51m>$<%ME692A|p#B_yPer#Ci)*`POB%^7dz+epkpkfn) diff --git a/doc/salome/gui/SMESH/wht_tab0.gif b/doc/salome/gui/SMESH/wht_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/wht_tab1.gif b/doc/salome/gui/SMESH/wht_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/wht_tab2.gif b/doc/salome/gui/SMESH/wht_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/wht_tab3.gif b/doc/salome/gui/SMESH/wht_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/wht_tab4.gif b/doc/salome/gui/SMESH/wht_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/wht_tab6.gif b/doc/salome/gui/SMESH/wht_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/wht_tab8.gif b/doc/salome/gui/SMESH/wht_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/wht_toc1.gif b/doc/salome/gui/SMESH/wht_toc1.gif deleted file mode 100755 index 515c352de2fa5d8ae7def9c3590b6ea3c49d26e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124 zcmZ?wbhEHb6krfwSoEI(2>$>7&oJ-*fddDQ9Xr<2(gG4Ur-`p57buiKh)yOmArD}p8*#ut zAm9+x5Cb$Q@e~{w3~fk5%OknCMvY^t9znt%#-cJ)bL0xUpunZNsUt@ujR3%f=Li~Z z5hd~fCb|&^m|z$VK@BlLqZ3%*z+h-Y+G9oW8rP_C92-NB@Q1Oe%sm#E)*lpUqp{Dl zq<~7f$9hwg!I;vCZ70KloIJ$x6IM7#lOT=H0b4?N@RUYTp-?E5N|j2bTCHYTR;$(O z^?IJ?jYgx{Y_{9&PN&oDc6+^EzuzAW2E*ZSG#YL8{`-*s|L4HQ)^VbDbR=5iKSA5> z((Uox<+lqT@Bdicb>eezWjfzpXg#^L_I)XzC||u&Svz?0;oilWEwu3S(*s(qx8IM} zr)T%SSzP{b;pv&V@{O0*XGVu#&vCYXZ-alGozL#f?`WMr^yS&ko98b6{`%Zr9DVh8 Xd1Wd8HoIr4wQu54=hEe|F`E1fN0FWD diff --git a/doc/salome/gui/SMESH/wht_toc3.gif b/doc/salome/gui/SMESH/wht_toc3.gif deleted file mode 100755 index 330f3691c32e371e8af44c6d5780747737d30ed9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 911 zcmb7@J!_Ov5QWDmm;@qe-9i*h41P3@iC=}qMkQM<*oi4b9MBbPV;2y%2x5`NVi3gz z8w(eMTCI&lj4LCeMf3-3XSJ1Bjn94KAMiHIaPORX&Y5>FFI_rw_WHC;%Wv5^Dqosn6`5s$)%puXwb8QAYDopE%Dt?&in1_P z>6C3(h6{4#p)9|`Dh{eiNb@-GBm{$McJ-rgP#hojMGr}y87{Qp0P{_L3$c_YV5Yxz&e_#L@5@qDKD z?EU@Sd)N9Oo3+i>_sQAA3oOHR&S`}AscYi!@wT|dXa-58AhSX_T+>obil1R^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 gA!N-p;ls7Hhjyr|dn8ybc;CR}$jc=rA;4e_0PdJkt^fc4 diff --git a/doc/salome/gui/SMESH/wht_toc_h.gif b/doc/salome/gui/SMESH/wht_toc_h.gif deleted file mode 100755 index fe20f686099a401a1ea951e81eae565b4efc9f2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmZ?wbhEHb6l4%!*v!Ci;J|^jnP(Vg{{L^x@c;k+GiS~);0205SvVOOI2d$5sz7Ei za8xn~DsU)lSa7hJnOnf6<3a-i6BjQVhrxpd&P*&~ekukF79H#sFi(<6IB>v;MS)X7 zqoGiRk&%sMS2{-t%PGMb54ie#tQ3VkTE>M8b>n fP2%BUxjRKxH>^)M>~=J2)0&$bc`mcDFjxZsWfwhm diff --git a/doc/salome/gui/SMESH/wht_toc_n.gif b/doc/salome/gui/SMESH/wht_toc_n.gif deleted file mode 100755 index ce283101f4204c55c042012228385fb6fefef830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmZ?wbhEHb6l4%!*v!Ci;J^U}oR0_I6278?~j`dAG5&b;`T z(lAAtd4tFcA+_V}BAIqFnUf#;u$YFH{qdZ%{K6E=QoEX&fedGsSmj%V{=EF;$m)oN Sv)-K8y4t-hft8Jg!5RR!bUSIM3=H~ zN)dJACBnOLG2yCKg3_iIgCMkYRX44^=D7ne&-cwcGiS~@&%6J?t1s?4K7}d#g%MhM zv~;NdN!jsxUi#%e4Q`Mj3~49>2qQ>1AtHz*ih#o$bhtx~aHOLgJ}X>_BEVN7Eg zySCFEPKpdN$?5@4^O1F@oZ(DoIh&+ul)5M}#1u3M2>&BvDR zk}F*4D({iq-G!YS5mHJewG$RJ+o3X_iiplDN9wt zxED>Y-R`3HuM)Pip z&1NhV%2Xqdn_)5Z^%z@5WJXprc;ocQ?(V|Q<>cZ0h>MaYeOV@$EFFFJua3=suUH2B zi|zfgzlbSd)m1!P{p98E;;|FUH#~7C4$f`g_{fi&XD|OWxA)BYnfI1|Hvj$2Gk?7D z{@#UCv2)qF{b!%~`O|myoS58NJ!R{@{o>r=={0v(-9CTg>%-GqrnyG@K6&o*{~mvE zZQIO+=^a<+zsf5we}FgtJaT;IOKf}N*S7SGk;rHSbOjF#b2@K=7*bBJpJ0@wSy~PcO&VR2YQMZ#sDTX=cCZ{OXWotfu7aB%eW~9-LGKMjY zW$fBccQ`3B$Rw)=IL$}aopOdVo#kwjrcvsm#1K;~v6)+peh(@b!3J*i|Q zGg-;j$cl~RMHQo%#VTT`+vDUz9>pN7f?74Rf$b)l!jz^mVXzqs`BHu{^)(+` zx=XHbrK`M0c6S$cZbV2amDEmHsQGxOLJ`VPh1woVHA(NfRHQOhsrJlD&D^`W6s0Ux z3FBTgy>`2c+QYW1of$5g4K3Wp#IQ`uvNorE7y>y5ObmHiiQ%{TP|bZ{hi7`0w;0X4 zDK?w2P$*N4JZ^@?(AQ&Z8Ic)T(cq2KBfGl`JD1Dvmm+RUTJFoTjOCT1&;Hf1>D^=s z_z&CqWq%QK!0a`=Up;>&YHISq`gNaP-*j%Iq4yyztld;}i+4) - { - if (button.arguments[4+i]) - this.aIs[i]=_getFullPath(_getPath(document.location.href),button.arguments[4+i]); - else - this.aIs[i]=""; - i++; - } -} - -function getImage(oImage,sTitle) -{ - if(oImage.aIs[0]) - { - var sI=""; - if(sTitle=="") - sTitle=oImage.sText; - sI+="\""+sTitle+"\"0) - sI+=" width="+oImage.nWidth; - if(oImage.nHeight>0) - sI+=" height="+oImage.nHeight; - sI+=" border=no align=\"absmiddle\">"; - return sI; - } - return ""; -} - -function getCurrentAveName() -{ - var oSelect=getElement("avenue"); - if(oSelect) - return oSelect.value; - else - return ""; -} - -function updateWebSearch(bEnable) -{ - var oWebSearch=getElement("btnwebsearch"); - var oWebSearchParent=null; - if(oWebSearch) - oWebSearchParent=getParentNode(oWebSearch); - goWebSearchEnable=bEnable; - if(oWebSearchParent) - { - if(bEnable) - enableButton(oWebSearchParent,goWebSearch); - else - disableButton(oWebSearchParent,goWebSearch); - } - -} - -function setState(oEL,sState) -{ - if(gbNav6) - oEL.setAttribute("state",sState); - else - oEL.state=sState; -} - -function updateAvenueIfNeeded() -{ - gbUpdateTimerCount--; - if (gbNeedUpdateAve&&gbUpdateTimerCount==0) - { - updateAvenue(); - } -} - -function updateAvenue() -{ - var sSelect=getAvenueHTML(gaAvenues); - var oSelect=getElement("avenue"); - if(oSelect) - { - if(gbNav6) - { - var oParent=getParentNode(oSelect); - - if(oParent) - { - removeThis(oSelect); - oParent.insertAdjacentHTML("afterBegin",sSelect); - } - } - else - oSelect.outerHTML=sSelect; - oSelect=getElement("avenue"); - if(isValidAvenue(gaAvenues,gsCurAveName)) - oSelect.value=gsCurAveName; - } - updateAveButton(); -} - -function initAveButtonObj() -{ - if(!gbAveButttnInited) - { - var oNext=getElement("btnavnext"); - if(oNext) - goNextParent=getParentNode(oNext); - - var oPrev=getElement("btnavprev"); - if(oPrev) - goPrevParent=getParentNode(oPrev); - } - gbAveButttnInited=true; -} - -function disableAveButton() -{ - initAveButtonObj(); - if(goNextParent) - disableButton(goNextParent,goNext); - if(goPrevParent) - disableButton(goPrevParent,goPrev); -} - -function disableButton(oEl,oBtn) -{ - setState(oEl,"disable"); - var sPF=oEl.className.substring(0,6); - oEl.className=sPF+"Normal"; - var oIs=getElementsByTag(oEl,"img"); - if(oIs.length>0&&oBtn&&oBtn.aIs&&oBtn.aIs.length>3) - { - if(oBtn.aIs[3]) - oIs[0].src=oBtn.aIs[3]; - } - else - oEl.style.visibility="hidden"; -} - -function enableButton(oEl,oBtn) -{ - setState(oEl,"normal"); - if(oEl==goEl) - { - var sPF=oEl.className.substring(0,6); - oEl.className=sPF+"Up"; - } - var oIs=getElementsByTag(oEl,"img"); - if(oIs.length>0&&oBtn&&oBtn.aIs&&oBtn.aIs.length>0) - { - if(oBtn.aIs[0]) - oIs[0].src=oBtn.aIs[0]; - } - oEl.style.visibility="visible"; -} - -function updateAveButton() -{ - initAveButtonObj(); - var strAveName=getCurrentAvenue(); - if(strAveName!="") - { - if(gaAvenues) - { - for(var i=0;i0) - { - for(var i=0;i"; - sSelect+=""; - if(aAvenues) - { - for(var i=0;i"+aAvenues[i].sName+""; - } - } - sSelect+=""; - return sSelect; -} - -function addAvenueSelection() -{ - var oMsg=new whMessage(WH_MSG_GETAVIAVENUES,this,1,new Object()); - var sButton=""; - if(SendMessage(oMsg)) - { - sButton=getAvenueHTML(oMsg.oParam.aAvenues); - } - else - { - sButton=getAvenueHTML(null); - } - gaButtons[gaButtons.length]="

"; -} - -function setSearchFormTitle(sTitle) -{ - gsSearchFormTitle=sTitle; -} - -function highLightIfNeeded() -{ - if(document.searchForm.searchString.value==gsSearchPrompt) - { - document.searchForm.searchString.select(); - } -} - -function addSearchForm() -{ - var sPropmptString=gsSearchPrompt; - - var nWidth=20; - if(!nWidth) nWidth=20; - if(gbNav4) nWidth=nWidth*.6; - - if(gsSearchFormTitle) - sPropmptString=""; - var sButton="
"+sButton+"
"; - if(gbNav6) - sButton=""+sButton; - if("image"=="text") - { - sButton+=""; - } - else if("image"=="image"&&gsIGo) - { - sButton+=""; - } - sButton+="
"+_textToHtml(gsSearchFormTitle)+"" - sButton+="\"Go\"
"; - if(gbNav6) - sButton+=""; - var nBtn=gaButtons.length; - gaButtons[nBtn]=""+sButton+""; - gaTypes[nBtn]="searchform"; -} - -function getShowHide() -{ - var sText=""; - var sI=""; - if(hasNavPane()) - { - if(goHide) - { - if(gnShowHideStyle&BTN_TEXT) - sText=goHide.sText; - if(gnShowHideStyle&BTN_IMG) - sI=getImage(goHide,"Hide"); - } - } - else - { - if(goShow) - { - if(gnShowHideStyle&BTN_TEXT) - sText=goShow.sText; - if(gnShowHideStyle&BTN_IMG) - sI=getImage(goShow,"Show"); - } - } - var sButton=genButton(sText,sI,gnShowHideStyle); - return sButton; -} - -function addBanner(sImage) -{ - if(sImage) - { - var nBtn=gaButtons.length; - gaButtons[nBtn]="     \"About"; - gaTypes[nBtn]="banner"; - } -} - -function showBanner() -{ - if (!gbPreview) - { - var nWidth=360; - var nHeight=240; - var nScreenWidth=screen.width; - var nScreenHeight=screen.height; - var nLeft=(nScreenWidth-nWidth)/2; - var nTop=(nScreenHeight-nHeight)/2; - if (gbIE4) - { - if (gbIE5) - nHeight+=20; - else - nHeight+=40; - window.showModalDialog("whskin_banner.htm","","dialogHeight:"+nHeight+"px;dialogWidth:"+nWidth+"px;resizable:no;status:no;scroll:no;help:no;center:yes;"); - } - else - window.open("whskin_banner.htm","banner","dependent,innerHeight="+nHeight+",innerWidth="+nWidth+",height="+nHeight+",width="+nWidth+",resizable=no,menubar=no,location=no,personalbar=no,status=no,scrollbar=no,toolbar=no,screenX="+nLeft+",screenY="+nTop); - } -} - -function addButton(sType,nStyle,sTitle,sHref,sOnClick,sOnMouseOver,sOnLoad,nWidth,nHeight,sI1,sI2,sI3,sI4,sI5,sI6) -{ - var sButton=""; - var bMini=false; - var sText=""; - var sI=""; - var bState=false; - var nBtn=gaButtons.length; - var bHref=false; - if(sType=="show"&&isShowHideEnable()) - { - var svTitle="Show Navigation Component"; - sButton=""; - gnShowHideStyle=nStyle; - goShow=new button(sType,sTitle,nWidth,nHeight,sI1,sI2,sI3); - gaObjBtns[nBtn]=goShow; - if(gnShowHide!=-1) - { - nBtn=gnShowHide; - } - else - { - gnShowHide=nBtn; - } - sButton+=getShowHide(); - sButton+=""; - bState=true; - } - else if(sType=="hide"&&isShowHideEnable()) - { - var svTitle="Hide Navigation Component"; - sButton=""; - gnShowHideStyle=nStyle; - goHide=new button(sType,sTitle,nWidth,nHeight,sI1,sI2,sI3); - gaObjBtns[nBtn]=goHide; - if(gnShowHide!=-1) - { - nBtn=gnShowHide; - } - else - { - gnShowHide=nBtn; - } - sButton+=getShowHide(); - sButton+=""; - bState=true; - } - else if(sType=="hide2"&&(!gbNav4)) - { - var svTitle="Hide Navigation Component"; - sButton=""; - gnShowHideStyle=nStyle; - if(!sI1) - sI1=gsIHide; - goHide2=new button(sType,sTitle,nWidth,nHeight,sI1,sI2,sI3); - gaObjBtns[nBtn]=goHide2; - if(nStyle&BTN_TEXT) - sText=goHide2.sText - - if(nStyle&BTN_IMG) - sI=getImage(goHide2,svTitle); - sButton+=genButton(sText,sI,nStyle); - sButton+=""; - bMini=true; - } - else if(sType=="synctoc") - { - var svTitle="Sync TOC"; - sButton=""; - if(!sI1) - sI1=gsISync; - goSync=new button(sType,sTitle,nWidth,nHeight,sI1,sI2,sI3); - gaObjBtns[nBtn]=goSync; - if(nStyle&BTN_TEXT) - sText=goSync.sText - - if(nStyle&BTN_IMG) - sI=getImage(goSync,svTitle); - sButton+=genButton(sText,sI,nStyle); - sButton+=""; - bMini=true; - } - else if(sType=="toc") - { - var svTitle="Contents"; - sButton=""; - if(!sI1) - sI1=gsIToc; - if(!sI2) - sI2=gsITocS; - if(!sI4) - sI4=gsITocS; - goToc=new button(sType,sTitle,nWidth,nHeight,sI1,sI2,sI3,sI4,sI5,sI6); - gaObjBtns[nBtn]=goToc; - if(nStyle&BTN_TEXT) - sText=goToc.sText - - if(nStyle&BTN_IMG) - sI=getImage(goToc,svTitle); - sButton+=genButton(sText,sI,nStyle); - sButton+=""; - bState=true; - } - else if(sType=="idx") - { - var svTitle="Index"; - sButton=""; - if(!sI1) - sI1=gsIIndex; - if(!sI2) - sI2=gsIIndexS; - if(!sI4) - sI4=gsIIndexS; - goIdx=new button(sType,sTitle,nWidth,nHeight,sI1,sI2,sI3,sI4,sI5,sI6); - gaObjBtns[nBtn]=goIdx; - if(nStyle&BTN_TEXT) - sText=goIdx.sText - - if(nStyle&BTN_IMG) - sI=getImage(goIdx,svTitle); - sButton+=genButton(sText,sI,nStyle); - sButton+=""; - bState=true; - } - else if(sType=="fts") - { - var svTitle="Search"; - sButton=""; - if(!sI1) - sI1=gsISearch; - if(!sI2) - sI2=gsISearchS; - if(!sI4) - sI4=gsISearchS; - goFts=new button(sType,sTitle,nWidth,nHeight,sI1,sI2,sI3,sI4,sI5,sI6); - gaObjBtns[nBtn]=goFts; - if(nStyle&BTN_TEXT) - sText=goFts.sText - - if(nStyle&BTN_IMG) - sI=getImage(goFts,svTitle); - sButton+=genButton(sText,sI,nStyle); - sButton+=""; - bState=true; - } - else if(sType=="glo") - { - var svTitle="Glossary"; - sButton=""; - if(!sI1) - sI1=gsIGlossary; - if(!sI2) - sI2=gsIGlossaryS; - if(!sI4) - sI4=gsIGlossaryS; - goGlo=new button(sType,sTitle,nWidth,nHeight,sI1,sI2,sI3,sI4,sI5,sI6); - gaObjBtns[nBtn]=goGlo; - if(nStyle&BTN_TEXT) - sText=goGlo.sText - - if(nStyle&BTN_IMG) - sI=getImage(goGlo,svTitle); - sButton+=genButton(sText,sI,nStyle); - sButton+=""; - bState=true; - } - else if(sType=="avnext") - { - var svTitle="Next Topic"; - sButton=""; - if(!sI1) - sI1=gsINext; - if(!sI4) - sI4=gsINextD; - goNext=new button(sType,sTitle,nWidth,nHeight,sI1,sI2,sI3,sI4,sI5,sI6); - gaObjBtns[nBtn]=goNext; - if(nStyle&BTN_TEXT) - sText=goNext.sText - - if(nStyle&BTN_IMG) - sI=getImage(goNext,svTitle); - sButton+=genButton(sText,sI,nStyle); - sButton+=""; - bMini=true; - } - else if(sType=="avprev") - { - var svTitle="Previous Topic"; - sButton=""; - if(!sI1) - sI1=gsIPrev; - if(!sI4) - sI4=gsIPrevD; - goPrev=new button(sType,sTitle,nWidth,nHeight,sI1,sI2,sI3,sI4,sI5,sI6); - gaObjBtns[nBtn]=goPrev; - if(nStyle&BTN_TEXT) - sText=goPrev.sText - - if(nStyle&BTN_IMG) - sI=getImage(goPrev,svTitle); - sButton+=genButton(sText,sI,nStyle); - sButton+=""; - bMini=true; - } - else if(sType=="blankblock") - { - gaButtons[nBtn]=null; - gaTypes[nBtn]=sType; - } - else if(sType=="websearch") - { - var svTitle="WebSearch"; - sButton=""; - if(!sI1) - sI1=gsIWebSearch; - if(!sI4) - sI4=gsIWebSearchD; - goWebSearch=new button(sType,sTitle,nWidth,nHeight,sI1,sI2,sI3,sI4,sI5,sI6); - gaObjBtns[nBtn]=goWebSearch; - if(nStyle&BTN_TEXT) - sText=goWebSearch.sText - - if(nStyle&BTN_IMG) - sI=getImage(goWebSearch,svTitle); - sButton+=genButton(sText,sI,nStyle); - sButton+=""; - } - else if(sType.indexOf("custom")==0) - { - var nCusBtnIdx=goCusButton.length; - goCusButton[nCusBtnIdx]=new cusButton(sType,sTitle,sOnClick,sOnMouseOver,sOnLoad,nWidth,nHeight,sI1,sI2,sI3); - gaObjBtns[nBtn]=goCusButton[nCusBtnIdx]; - var re=new RegExp("\"","g"); - var svTitle=sTitle.replace(re, """); - if(sHref&&sHref.length!=0) - { - sButton=""; - if(nStyle&BTN_TEXT) - sText=sTitle; - if(nStyle&BTN_IMG) - sI+=getImage(goCusButton[nCusBtnIdx],sTitle); - sButton+=genButton(sText,sI,nStyle); - sButton+=""; - } - if(sButton.length!=0) - { - var btnClass=""; - if(sText||bMini) - btnClass="clsBtnNormal"; - else - btnClass="clsNoBNormal"; - - if(!bState) - { - if(bHref) - gaButtons[nBtn]=""+sButton+""; - else - gaButtons[nBtn]=""+sButton+""; - } - else - gaButtons[nBtn]=""+sButton+""; - gaTypes[nBtn]=sType; - } - - if(sType=="avenuesel") - addAvenueSelection(); - else if(sType=="searchform") - addSearchForm(); - else if(sType=="banner") - { - if(!sI1) - sI1=gsIBanner; - addBanner(sI1); - } -} - -function isShowHideEnable() -{ - if(gbIE4) - return true; - else - return false; -} - -function genButton(sText,sI,nStyle) -{ - var sButton=""; - var sShowText=_textToHtml(sText); - if (gbNav4 && !gbNav6) - sShowText += " "; - if(sText!=""&&sI!="") - { - if(nStyle&BTN_IMG_TOP) - sButton+=sI+"
"+ sShowText; - else if(nStyle&BTN_IMG_BOTTOM) - sButton+=sText+"
"+sI; - else if(nStyle&BTN_IMG_RIGHT) - sButton+=sText+" "+sI; - else - sButton+=sI+" "+sShowText; - } - else if(sText!="") - { - sButton+=sShowText; - } - else if(sI!="") - { - sButton+=sI; - } - return sButton; -} - -function searchB() -{ - var onMsg=new whMessage(WH_MSG_SHOWFTS,this,1,null); - SendMessage(onMsg); - - var oMsg=new whMessage(WH_MSG_SEARCHTHIS,this,1,document.searchForm.searchString.value); - if(!SendMessage(oMsg)) - gstrSearch=document.searchForm.searchString.value; - else - gstrSearch=""; -} - -function ReSortToolbarButtons() -{ - var bSearchEnabled=isSearchEnabled(); - var strOrder=""; - var oMsg=new whMessage(WH_MSG_TOOLBARORDER,this,1,null); - if(SendMessage(oMsg)) - { - strOrder=oMsg.oParam; - } - if(strOrder.length>0) - { - gaOrders=strOrder.split("|"); - var aTempButtons=new Array(); - var ti=0; - for(var si=0;si0) - { - gaOrders=strOrder.split("|"); - var aTempButtons=new Array(); - var ti=0; - for(var si=0;si0) - { - var strHeight="100%"; - var strWidth="100%"; - if (gbNav4) - { - strHeight=window.innerHeight-4; - strWidth=window.innerWidth-4; - } - if (gbIE4) - { - strHeight=document.body.clientHeight-4; - strWidth=document.body.clientWidth-4; - } - if(gbNav6) - sHTML=""; - else - sHTML="
"; - if((gnButtonLayout&LAYOUT)==HLAYOUT) - { - sHTML+=""; - for(var i=0;i"; - } - sHTML+=""; - } - else - { - for(var i=0;i"+gaButtons[i]+""; - else - sHTML+=""; - } - } - if(gbNav6) - sHTML+="
"; - else - sHTML+=""; - } - document.write(sHTML); - if(document.body) - document.body.onselectstart=onSelect; - updateAveButton(); -} - -function hasNavPane() -{ - if(gnHasNavPane==-1) - { - gnHasNavPane=0; - var oParam=new Object(); - oParam.bVisible=false; - var oMsg=new whMessage(WH_MSG_ISPANEVISIBLE,this,1,oParam); - if(SendMessage(oMsg)) - { - if(oParam.bVisible) - gnHasNavPane=1; - } - - } - if(gnHasNavPane==1) - return true; - else - return false; -} - -function getTocInfo() -{ - var oParam=new Object(); - oParam.oTocInfo=null; - var oMsg=new whMessage(WH_MSG_GETTOCPATHS,this,1,oParam); - if(SendMessage(oMsg)) - { - goTocInfo=oParam.oTocInfo; - gbTocInfoInited=true; - } -} - -function onBtnClick(e) -{ - var oEl=null; - var oElo=null; - if(gbNav6) - { - oElo=e.target; - while(oElo&&oElo.nodeName.indexOf("#")==0) oElo=getParentNode(oElo); - oEl=oElo; - } - else - { - oElo=event.srcElement; - oEl=oElo; - event.cancelBubble=true; - } - while(-1==oEl.className.indexOf("clsBtn")&&-1==oEl.className.indexOf("clsNoB")) - { - oEl=getParentNode(oEl); - if(!oEl) return; - } - if(oElo.tagName=="A"||oElo.tagName=="IMG") return true; - var oaA=getElementsByTag(oElo,"A"); - if(oaA&&oaA.length) - { - var oA=oaA[0]; - if(gbNav6) - { - var sCmd=oA.getAttribute("onclick"); - var nCmd=sCmd.indexOf("return false;"); - if(nCmd!=-1); - sCmd=sCmd.substring(0,nCmd); - setTimeout(sCmd,1); - } - else - oA.onclick(); - } -} - -function onBtnMouseDown(e,nBtn) -{ - var oEl=null; - if(gbNav6) - { - var oElo=e.target; - while(oElo&&oElo.nodeName.indexOf("#")==0) oElo=getParentNode(oElo); - oEl=oElo; - } - else - { - oEl=event.srcElement; - event.cancelBubble=true; - } - while(-1==oEl.className.indexOf("clsBtn")&&-1==oEl.className.indexOf("clsNoB")) - { - oEl=getParentNode(oEl); - if(!oEl) return; - } - var sPF=oEl.className.substring(0,6); - var oIs=getElementsByTag(oEl,"img"); - if(oIs.length>0&&gaObjBtns[nBtn]&&gaObjBtns[nBtn].aIs&&gaObjBtns[nBtn].aIs.length>2) - { - if(gaObjBtns[nBtn].aIs[2]) - oIs[0].src=gaObjBtns[nBtn].aIs[2]; - } - var sState=getState(oEl); - if(sState!="disable") - { - oEl.className=sPF+"Down"; - } -} - -function onBtnMouseUp(e,nBtn) -{ - var oEl=null; - if(gbNav6) - { - var oElo=e.target; - while(oElo&&oElo.nodeName.indexOf("#")==0) oElo=getParentNode(oElo); - oEl=oElo; - } - else - { - oEl=event.srcElement; - event.cancelBubble=true; - } - while(-1==oEl.className.indexOf("clsBtn")&&-1==oEl.className.indexOf("clsNoB")) - { - oEl=getParentNode(oEl); - if(!oEl) return; - } - var sPF=oEl.className.substring(0,6); - var sState=getState(oEl); - if(sState=="down"||sState=="disable") - { - var oIs=getElementsByTag(oEl,"img"); - if(oIs.length>0&&gaObjBtns[nBtn]&&gaObjBtns[nBtn].aIs&&gaObjBtns[nBtn].aIs.length>3) - { - if(gaObjBtns[nBtn].aIs[3]) - oIs[0].src=gaObjBtns[nBtn].aIs[3]; - } - } - else - { - var oIs=getElementsByTag(oEl,"img"); - if(oIs.length>0&&gaObjBtns[nBtn]&&gaObjBtns[nBtn].aIs&&gaObjBtns[nBtn].aIs.length>0) - { - if(gaObjBtns[nBtn].aIs[0]) - oIs[0].src=gaObjBtns[nBtn].aIs[0]; - } - } - if(goEl==oEl) - { - if(sState!="down"&&sState!="disable") - { - oEl.className=sPF+"Up"; - } - } -} - -function getState(oEl) -{ - var sState=""; - if(gbNav6) - sState=oEl.getAttribute("state"); - else - if(oEl.state) - sState=oEl.state; - return sState; -} - -function onBtnMouseOver(e,nBtn) -{ - markButton(e); - var oEl=null; - if(gbNav6) - { - var oElo=e.target; - while(oElo&&oElo.nodeName.indexOf("#")==0) oElo=getParentNode(oElo); - oEl=oElo; - } - else - { - oEl=event.srcElement; - event.cancelBubble=true; - } - while(-1==oEl.className.indexOf("clsBtn")&&-1==oEl.className.indexOf("clsNoB")) - { - oEl=getParentNode(oEl); - if(!oEl) return; - } - var sPF=oEl.className.substring(0,6); - var sState=getState(oEl); - if(sState=="down"||sState=="disable") - { - if(sState=="down") - oEl.className=sPF+"Down"; - var oIs=getElementsByTag(oEl,"img"); - if(oIs.length>0&&gaObjBtns[nBtn]&&gaObjBtns[nBtn].aIs&&gaObjBtns[nBtn].aIs.length>4) - { - if(gaObjBtns[nBtn].aIs[4]) - oIs[0].src=gaObjBtns[nBtn].aIs[4]; - } - } - else - { - oEl.className=sPF+"Up"; - var oIs=getElementsByTag(oEl,"img"); - if(oIs.length>0&&gaObjBtns[nBtn]&&gaObjBtns[nBtn].aIs&&gaObjBtns[nBtn].aIs.length>1) - { - if(gaObjBtns[nBtn].aIs[1]) - oIs[0].src=gaObjBtns[nBtn].aIs[1]; - } - } -} - -function onBtnMouseOut(e,nBtn) -{ - goEl=null; - var oEl=null; - if(gbNav6) - { - var oElo=e.target; - while(oElo&&oElo.nodeName.indexOf("#")==0) oElo=getParentNode(oElo); - oEl=oElo; - } - else - { - oEl=event.srcElement; - event.cancelBubble=true; - } - while(-1==oEl.className.indexOf("clsBtn")&&-1==oEl.className.indexOf("clsNoB")) - { - oEl=getParentNode(oEl); - if(!oEl) return; - } - var sPF=oEl.className.substring(0,6); - var sState=getState(oEl); - if(sState=="down"||sState=="disable") - { - var oIs=getElementsByTag(oEl,"img"); - if(oIs.length>0&&gaObjBtns[nBtn]&&gaObjBtns[nBtn].aIs&&gaObjBtns[nBtn].aIs.length>3) - { - if(gaObjBtns[nBtn].aIs[3]) - oIs[0].src=gaObjBtns[nBtn].aIs[3]; - } - if(sState=="down") - oEl.className=sPF+"Down"; - } - else - { - var oIs=getElementsByTag(oEl,"img"); - if(oIs.length>0&&gaObjBtns[nBtn]&&gaObjBtns[nBtn].aIs&&gaObjBtns[nBtn].aIs.length>0) - { - if(gaObjBtns[nBtn].aIs[0]) - oIs[0].src=gaObjBtns[nBtn].aIs[0]; - } - oEl.className=sPF+"Normal"; - } -} - -function showToc() -{ - var oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null) - SendMessage(oMsg); -} - -function showIndex() -{ - var oMsg=new whMessage(WH_MSG_SHOWIDX,this,1,null) - SendMessage(oMsg); -} - -function showFts() -{ - var oMsg=new whMessage(WH_MSG_SHOWFTS,this,1,null) - SendMessage(oMsg); -} - -function showGlossary() -{ - var oMsg=new whMessage(WH_MSG_SHOWGLO,this,1,null) - SendMessage(oMsg); -} - -function syncWithShow() -{ - if(!gbTocInfoInited) - { - getTocInfo(); - } - if(goTocInfo) - { - showToc(); - var oParam=goTocInfo; - var oMsg=new whMessage(WH_MSG_SYNCTOC,this,1,oParam); - SendMessage(oMsg); - } -} - -function markButton(e) -{ - var oEl=null; - if(gbNav6) - { - var oElo=e.target; - while(oElo&&oElo.nodeName.indexOf("#")==0) oElo=getParentNode(oElo); - oEl=oElo; - } - else - oEl=event.srcElement; - while(oEl&&oEl.tagName!="TD") oEl=getParentNode(oEl); - if(oEl) - goEl=oEl; -} - -function showHidePane() -{ - var oMsg=null; - if(hasNavPane()) - oMsg=new whMessage(WH_MSG_HIDEPANE,this,1,null); - else - oMsg=new whMessage(WH_MSG_SHOWPANE,this,1,null); - SendMessage(oMsg); -} - -function goAveNext() -{ - goAvenue(true); -} - -function goAvePrev() -{ - goAvenue(false); -} - -function doWebSearch() -{ - if (goWebSearchEnable) - { - var oMsg=new whMessage(WH_MSG_WEBSEARCH,this,1,null); - SendMessage(oMsg); - } -} - -function goAvenue(bNext) -{ - var oMsg=null; - initAveButtonObj(); - gsCurAveName=getCurrentAveName(); - if(gbNav4&&!gbNav6) - { - if(bNext) - { - gaAvenues=null; - updateAvenue(); - oMsg=new whMessage(WH_MSG_NEXT,this,1,null); - SendMessage(oMsg); - } - else if(!bNext) - { - gaAvenues=null; - updateAvenue(); - oMsg=new whMessage(WH_MSG_PREV,this,1,null); - SendMessage(oMsg); - } - } - else - { - if(bNext&&goNextParent) - { - var sState=getState(goNextParent); - if(sState!="disable") - { - gaAvenues=null; - gbNeedUpdateAve=true; - gbUpdateTimerCount++; - setTimeout("updateAvenueIfNeeded();", 2000); - oMsg=new whMessage(WH_MSG_NEXT,this,1,null); - SendMessage(oMsg); - } - } - else if(!bNext&&goPrevParent) - { - var sState=getState(goPrevParent); - if(sState!="disable") - { - gaAvenues=null; - gbNeedUpdateAve=true; - gbUpdateTimerCount++; - setTimeout("updateAvenueIfNeeded();", 2000); - oMsg=new whMessage(WH_MSG_PREV,this,1,null); - SendMessage(oMsg); - } - } - } -} - -function window_Unload() -{ - if(!gbNav4||gbNav6) - { - UnRegisterListener2(this,WH_MSG_GETSEARCHS); - UnRegisterListener2(this,WH_MSG_PANESTATUE); - UnRegisterListener2(this,WH_MSG_SYNCINFO); - UnRegisterListener2(this,WH_MSG_PANEINFO); - UnRegisterListener2(this,WH_MSG_AVENUEINFO); - UnRegisterListener2(this,WH_MSG_GETCURRENTAVENUE); - UnRegisterListener2(this,WH_MSG_ENABLEWEBSEARCH); - UnRegisterListener2(this,WH_MSG_INITSEARCHSTRING); - } -} - -function window_OnLoad() -{ - if(document.body) - { - if(gsBgImage&&gsBgImage.length>0) - { - document.body.background=gsBgImage; - } - if(gsBgColor&&gsBgColor.length>0) - { - document.body.bgColor=gsBgColor; - } - } - doCusOnLoad(); - var oMsg=new whMessage(WH_MSG_GETPANEINFO,this,1,null); - if(SendMessage(oMsg)) - { - setTimeout("flipPaneButton(\""+oMsg.oParam+"\");",1); - } - if (!gaAvenues) - { - var oMsg2=new whMessage(WH_MSG_GETAVIAVENUES,this,1,new Object()); - if(SendMessage(oMsg2)) - { - gaAvenues=oMsg2.oParam.aAvenues; - gbNeedUpdateAve=false; - setTimeout("updateAvenue();",1); - } - } -} - -function onSendMessage(oMsg) -{ - var nMsgId=oMsg.nMessageId; - if(nMsgId==WH_MSG_GETSEARCHS) - { - if(document.searchForm&&document.searchForm.searchString) - { - oMsg.oParam.sValue=document.searchForm.searchString.value; - return false; - } - } - else if(nMsgId==WH_MSG_PANESTATUE) - { - if(oMsg.oParam=="visible") - { - if(isShowHideEnable()) - setTimeout("flipShowHide(true);",1); - setTimeout("showPaneButton();",1); - } - else - { - if(isShowHideEnable()) - setTimeout("flipShowHide(false);",1); - setTimeout("hidePaneButton();",1); - } - } - else if(nMsgId==WH_MSG_PANEINFO) - { - if(oMsg.oParam) - setTimeout("flipPaneButton(\""+oMsg.oParam+"\");",1); - else - setTimeout("hidePaneButton();",1); - } - else if(nMsgId==WH_MSG_SYNCINFO) - { - if(oMsg.oParam) - goTocInfo=oMsg.oParam; - else - goTocInfo=null; - gbTocInfoInited=true; - } - else if(nMsgId==WH_MSG_AVENUEINFO) - { - gaAvenues=oMsg.oParam; - gbNeedUpdateAve=false; - setTimeout("updateAvenue();",1); - } - else if(nMsgId==WH_MSG_GETCURRENTAVENUE) - { - var sAveName=getCurrentAvenue(); - if(sAveName!="") - { - oMsg.oParam.sAvenue=sAveName; - return false; - } - else - return true; - } - else if(nMsgId==WH_MSG_ENABLEWEBSEARCH) - { - setTimeout("updateWebSearch("+oMsg.oParam+");",1); - } - else if(nMsgId==WH_MSG_INITSEARCHSTRING) - { - if(gstrSearch!="") - { - oMsg.oParam=gstrSearch; - gstrSearch=""; - return false; - } - } - return true; -} - -function getCurrentAvenue() -{ - var strAveName=""; - var oSelect=getElement("avenue"); - if(oSelect) - { - strAveName=oSelect.value; - } - return strAveName; -} - -function initBtn() -{ - var oBtn=null; - oBtn=getElement("btntoc"); - if(oBtn) - gaBtns[gaBtns.length]=oBtn; - oBtn=getElement("btnidx"); - if(oBtn) - gaBtns[gaBtns.length]=oBtn; - oBtn=getElement("btnfts"); - if(oBtn) - gaBtns[gaBtns.length]=oBtn; - oBtn=getElement("btnglo"); - if(oBtn) - gaBtns[gaBtns.length]=oBtn; - gbInitBtn=true; -} - -function showPaneButton() -{ - flipPaneButton(gsPane); -} - -function hidePaneButton() -{ - flipPaneButton(""); -} - -function flipPaneButton(sPane) -{ - if (sPane) - gsPane=sPane; - if(!gbInitBtn) - initBtn(); - - var oUp=null; - if(sPane) - { - oUp=getElement("btn"+sPane); - } - for(var i=0;i0) - { - var strClassName=oaA[0].className; - oaA[0].className="btnsel"+strClassName.substring(3); - } - } - var oIs=getElementsByTag(oEl,"img"); - var oBtn=getButtonObjByType(gaBtns[i].id.substring(3)); - if(oIs.length>0&&oBtn&&oBtn.aIs&&oBtn.aIs.length>3) - { - if(oBtn.aIs[3]) - oIs[0].src=oBtn.aIs[3]; - } - } - } - else - { - var oEl=getParentNode(gaBtns[i]); - var sState=getState(oEl); - var sPF=oEl.className.substring(0,6); - if(sState=="down") - { - setState(oEl,"up"); - if(oEl==goEl) - oEl.className=sPF+"Up"; - else - oEl.className=sPF+"Normal"; - - if(sPF=="clsBtn") - { - if(gaBtns[i].id) - { - var sColor=getBtnColor(gaBtns[i].id.substring(3),false); - if(sColor) - { - oEl.style.backgroundColor=sColor - } - else - { - oEl.style.backgroundColor=""; - } - } - - var oaA=getElementsByTag(oEl,"A"); - if(oaA.length>0) - { - var strClassName=oaA[0].className; - oaA[0].className="btn"+strClassName.substring(6); - } - } - var oIs=getElementsByTag(oEl,"img"); - var oBtn=getButtonObjByType(gaBtns[i].id.substring(3)); - if(oIs.length>0&&oBtn&&oBtn.aIs&&oBtn.aIs.length>0) - { - if(oBtn.aIs[0]) - oIs[0].src=oBtn.aIs[0]; - } - } - } - } - } -} - -function flipShowHide(bShow) -{ - gnHasNavPane=-1; - var oA=getElement("btnshowhide"); - if(oA) - { - var oEl=getParentNode(oA); - var sPF=oEl.className.substring(0,6); - if(oEl&&oEl.state) - { - if(bShow) - { - oEl.state="down"; - oEl.className=sPF+"Down"; - } - else - { - oEl.state="up"; - - if(oEl==goEl) - oEl.className=sPF+"Up"; - else - oEl.className=sPF+"Normal"; - } - } - oA.innerHTML=getShowHide(); - } -} - -function cusOnClick(nIdx) -{ - if(goCusButton.length>nIdx) - { - var sOnClick=goCusButton[nIdx].sOnClick; - if(sOnClick&&sOnClick.length>0) - { - if(!gbPreview) - eval(sOnClick); - return false; - } - } - return true; -} - -function cusOnMouseOver(nIdx) -{ - if(goCusButton.length>nIdx) - { - var sOnMouseOver=goCusButton[nIdx].sOnMouseOver; - if(sOnMouseOver&&sOnMouseOver.length>0) - { - if(!gbPreview) - eval(sOnMouseOver); - return false; - } - } - return true; -} - -function doCusOnLoad() -{ - if(!gbPreview&&gaOrders) - { - for(var i=0;ii+7) - { - if (cusButton.arguments[7+i]) - this.aIs[i]=_getFullPath(_getPath(document.location.href),cusButton.arguments[7+i]); - else - this.aIs[i]=""; - i++; - } - if(sOnLoad) - { - registerOnLoad(sOnLoad,sType); - } -} - -function getBtnColor(sType,bSel) -{ - var aBtnColors=null; - if(bSel) - aBtnColors=gaSelBtnBgColor; - else - aBtnColors=gaBtnBgColor; - if(aBtnColors) - { - for(var i=0;i - -Table of contents - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whthost.js b/doc/salome/gui/SMESH/whthost.js deleted file mode 100755 index 80806d7c7..000000000 --- a/doc/salome/gui/SMESH/whthost.js +++ /dev/null @@ -1,1372 +0,0 @@ -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 gbLoadToc=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; - -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=="Hover") goHFont=vFont; -} - -function setActiveBgColor(sBgColor){gsABgColor=sBgColor;} - -function setMargin(sMargin){gsMargin=sMargin;} - -function setIndent(sIndent){gsIndent=sIndent;} - -function setIcon(sType,sURL) -{ - if(sType=="BookOpen") - giBookOpen=sURL; - else if(sType=="BookClose") - giBookClose=sURL; - else if(sType=="Item") - giBookItem=sURL; - else if(sType=="RemoteItem") - giURLItem=sURL; - else if(sType=="NewBookClose") - giNewBookClose=sURL; - else if(sType=="NewBookOpen") - giNewBookOpen=sURL; - else if(sType=="NewItem") - giNewBookItem=sURL; - else if(sType=="NewRemoteItem") - giNewURLItem=sURL; -} - -function bookItem(sTarget, sURL) -{ - if (sTarget) - this.sTarget=sTarget; - else - this.sTarget="bsscright"; - this.sURL=sURL; -} - -function addBookItem(sBookId, sTarget, sURL) -{ - gBookItems[sBookId] = new bookItem(sTarget, sURL); -} - -function tocChunk(sPPath,sDPath) -{ - this.sPPath=sPPath; - this.sDPath=sDPath; - this.nMI=-1; - this.aTocs=null; -} - -function addTocChunk(sPPath,sDPath) -{ - var oChunk=new tocChunk(sPPath,sDPath); - gaTocs[gaTocs.length]=oChunk; - return oChunk; -} - -function isHSLoad(nIdx) -{ - for(var i=0;i"; - sHTML+="

\"Book\""; - var sURL=_textToHtml_nonbsp(getItemURL(nIdx)); - if(sURL!="") - addBookItem(getBookId(nIdx),_textToHtml_nonbsp(getTopicTarget(nIdx)),sURL); - sHTML+=" "+sName+"

"; - return sHTML; -} - -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=getInnerText(obj).substring(1); - 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){ - sHTML+=writeBook(i); - nCIdx+=getItemContentsNum(i); - } - else if(nItemType==2||nItemType==16){ - sHTML+=writeAnItem(i); - }else if(nItemType==4){ - sHTML+=writeBook(i,false); - }else if(nItemType==8){ - sHTML+=writeBook(i,true); - } - } - 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 nCandidate=-1; - for(var i=0;in)) - { - 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 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) - sText=sText.substring(1); - if(sText==sPart) - { - aIdList[len]=aTagAs[s]; - return 1; - } - } - return 0; - } - - var aChildren=getChildrenByTag(oObj,"DIV"); - for(var i=0;i0) - { - 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(5,sPId.length-6)); -} - -function getIdByCBId(sCId) -{ - return parseInt(sCId.substring(5,sCId.length-5)); -} - -function isPBId(sId) -{ - return (sId&&sId.indexOf("Book_")==0&&sId.lastIndexOf("Parent")==sId.length-6); -} - -function isCBId(sId) -{ - return (sId&&sId.indexOf("Book_")==0&&sId.lastIndexOf("Child")==sId.length-5); -} - -function getBId(nIdx) -{ - return "Book_"+nIdx; -} - -function getPBId(nIdx) -{ - return getBId(nIdx)+"Parent"; -} - -function getCBId(nIdx) -{ - return getBId(nIdx)+"Child"; -} - -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(); - diff --git a/doc/salome/gui/SMESH/whtopic.js b/doc/salome/gui/SMESH/whtopic.js deleted file mode 100755 index 3adaa251e..000000000 --- a/doc/salome/gui/SMESH/whtopic.js +++ /dev/null @@ -1,662 +0,0 @@ -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+="\""+ 0) - sImg+=" width=" + oImage.nWidth; - if (oImage.nHeight > 0) - sImg+=" height=" + oImage.nHeight; - sImg+=" border=no>"; - } - 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()) - { - 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()) - { - 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; i < gaButtons.length; i++) - { - if (gaTypes[i]!="synctoc" || isSyncEnabled()) - { - if (gaButtons[i] == "NeedSearchForm") - sHTML += getSearchFormHTML(); - else - sHTML += gaButtons[i]; - } - } - sHTML += "
"; - - sHTML += "
"; - } - return sHTML; -} - - -function writeIntopicBar(nAligns) -{ - if (isInPopup()) return; - if (gaButtons.length > 0) - { - 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; i < gaAvenues.length ; i ++) - { - if (gaAvenues[i].sName == sAvenue) - { - nAvenue = i; - break; - } - } - if (nAvenue != -1) - { - if (bNext) - sTopic = gaAvenues[nAvenue].sNext; - else - sTopic = gaAvenues[nAvenue].sPrev; - } - } - else - { - for (var i = 0; i < gaAvenues.length ; i ++) - { - if (gaAvenues[i].sNext != null && gaAvenues[i].sNext.length > 0 && 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; i < gaAvenues.length ; i ++) - { - if ((gaAvenues[i].sNext != null && gaAvenues[i].sNext.length > 0 && 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; -} - -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") - whtopic_foldUnload = window.onunload; - } - else - { - if (window.onunload) - whtopic_foldUnload = window.onunload; - } - window.onunload = unRegisterListener; - setButtonFont("show","","10pt","","","",""); - - gbWhTopic=true; -} -else - document.location.reload(); \ No newline at end of file diff --git a/doc/salome/gui/SMESH/whutils.js b/doc/salome/gui/SMESH/whutils.js deleted file mode 100755 index 7fa6c28a8..000000000 --- a/doc/salome/gui/SMESH/whutils.js +++ /dev/null @@ -1,463 +0,0 @@ -var gsFileName=""; -var xmlDoc=null; -var sdocPath=null; -var gsInsertBeforeEndHTML=""; -var sReplaceStringsSrc=new Array(); -sReplaceStringsSrc[0]="&"; -sReplaceStringsSrc[1]=">"; -sReplaceStringsSrc[2]="<"; -sReplaceStringsSrc[3]="""; -sReplaceStringsSrc[4]=" "; -var sReplaceStringsDst=new Array(); -sReplaceStringsDst[0]="&"; -sReplaceStringsDst[1]=">"; -sReplaceStringsDst[2]="<"; -sReplaceStringsDst[3]="\""; -sReplaceStringsDst[4]=" "; -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); -} - -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) -{ - if(!getElement("dataDiv")) - { - if(!insertDataDiv()) - { - gsFileName=sFileName; - return; - } - } - var sHTML=""; - if(gbMac) - sHTML+=""; - else - sHTML+=""; - - var oDivCon=getElement("dataDiv"); - 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) - alert(err.reason); - else - putDataXML(xmlDoc,sdocPath); - } - } -} - -function insertDataDiv() -{ - 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(gsFileName); - } - else - { - setTimeout("insertWhenBodyReady();",100); - } -} - -function window_BUnload() -{ - var oDivCon=getElement("dataDiv"); - if(oDivCon) - oDivCon.innerHTML=""; -} - -function removeThis(obj) -{ - if(obj.parentNode) - obj.parentNode.removeChild(obj); - else - obj.outerHTML=""; -} - -function getParentNode(obj) -{ - if(obj.parentNode) - return obj.parentNode; - else if(obj.parentElement) - return obj.parentElement; - return null; -} - -function getElement(sID) -{ - if(document.getElementById) - return document.getElementById(sID); - else if(document.all) - return document.all(sID); - return null; -} - -function getChildrenByTag(obj,sTagName) -{ - if(obj.getElementsByTagName) - { - var aChildren=new Array(); - var aElements=getElementsByTag(obj,sTagName); - if(aElements!=null) - { - for(var i=0;i=4) -{ - if(navigator.appName=="Netscape") - { - gbNav4=true; - if(gnVerMajor>=5) - gbNav6=true; - } - gbIE4=(navigator.appName.indexOf("Microsoft")!=-1); -} -if(gbNav6) -{ - document.gnPageWidth=innerWidth; - document.gnPageHeight=innerHeight; - var nPos=gAgent.indexOf("netscape"); - if(nPos!=-1) - { - var nVersion=parseFloat(gAgent.substring(nPos+10)); - if(nVersion>=6.1) - gbNav61=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; - } -} - -var gbWhVer=true; \ No newline at end of file diff --git a/doc/salome/tui/Makefile.in b/doc/salome/tui/Makefile.in deleted file mode 100644 index 894cc0c6d..000000000 --- a/doc/salome/tui/Makefile.in +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright (C) 2003 CEA/DEN, EDF R&D -# -# -# -# File : Makefile.in -# Author : Vasily Rusyaev (Open Cascade NN) -# Module : doc -# $Header: - -top_srcdir=@top_srcdir@ -top_builddir=../../.. -root_srcdir=@ROOT_SRCDIR@ -srcdir=@srcdir@ -VPATH=.:@srcdir@ -doxygen=@DOXYGEN@ - -@COMMENCE@ - -PYTHON_SCRIPTS = \ - smesh.py - -docs: - cp -fr $(srcdir)/SMESH ./INPUT; \ - cd INPUT; \ - sed 's|../../../share/salome|$(root_srcdir)|' ./doxyfile > ./doxyfile1; \ - mv -f doxyfile1 doxyfile; \ - $(doxygen) ./doxyfile; \ - mkdir py1; mkdir py2; \ - cd .. - for file in $(PYTHON_SCRIPTS) dummy; do \ - if [ $$file != "dummy" ]; then \ - cp $(root_srcdir)/src/SMESH_SWIG/$$file INPUT/py1/; \ - fi ; \ - done - cd INPUT; \ - python $(KERNEL_ROOT_DIR)/doc/salome/tui/KERNEL/pythfilter.py ./py1 ./py2; \ - sed 's|list_py_files_to_process|$(PYTHON_SCRIPTS)|' ./doxyfile_py > py2/doxyfile_py; \ - cd py2; \ - $(doxygen) ./doxyfile_py; \ - cd ../..; \ - cp -fr $(srcdir)/SMESH/sources/static/*.* ./SMESH/ - cp -fr $(srcdir)/SMESH/sources/ SMESH/ - cp -fr $(srcdir)/SMESH/HTML/ SMESH/ - rm -fr INPUT - -clean: - rm -fr SMESH - -distclean: clean - rm -fr INPUT - -install: - $(INSTALL) -d $(docdir); \ - mkdir -p $(docdir)/tui - cp -fr SMESH $(docdir)/tui - -uninstall: - rm -fr $(docdir)/tui/SMESH diff --git a/doc/salome/tui/SMESH/HTML/SMESH_BasicHypothesis.html b/doc/salome/tui/SMESH/HTML/SMESH_BasicHypothesis.html deleted file mode 100644 index 8007326bb..000000000 --- a/doc/salome/tui/SMESH/HTML/SMESH_BasicHypothesis.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - - - - - -
interface StdMeshers_LocalLength
IDL file
Python
void SetLength ( in double length )
SetLength ( length )
double GetLength ( )
return_value = GetLength ( )

- - - - - - - - - - - - - - - - - - - - - - - -
interface StdMeshers_NumberOfSegments
IDL file
Python
void SetNumberOfSegments ( in long segmentsNumber )
SetNumberOfSegments ( segmentsNumber )
long GetNumberOfSegments ( )
return_value = GetNumberOfSegments ( )
void SetScaleFactor ( in double scaleFactor )
SetScaleFactor ( scaleFactor )
double GetScaleFactor ( )
return_value = GetScaleFactor ( )

- - - - - - - - - - - - - - - -
interface StdMeshers_Arithmetic1D
IDL file
Python
void SetLength ( in double length, in boolean isStartLength )
SetLength ( length, isStartLength )
double GetLength ( in boolean isStartLength )
return_value = GetLength ( isStartLength )

- - - - - - - - - - - - - - - -
interface StdMeshers_MaxElementArea
IDL file
Python
void SetMaxElementArea ( in double area )
SetMaxElementArea ( area )
double GetMaxElementArea ( )
return_value = GetMaxElementArea ( )

- - - - - - - - - - - - - - - -
interface StdMeshers_LengthFromEdges
IDL file
Python
void SetMode ( in long mode )
SetMode ( mode )
long GetMode ( )
return_value = GetMode ( )

- - - - - - - - - - - - - - - -
interface StdMeshers_StartEndLength
IDL file
Python
void SetLength ( in double length, in boolean isStartLength )
SetLength ( length, isStartLength )
double GetLength ( in boolean isStartLength )
return_value = GetLength ( isStartLength )

- - - - - - - - - - - - - - - -
interface StdMeshers_Deflection1D
IDL file
Python
void SetDeflection ( in double deflection )
SetDeflection ( deflection )
double GetDeflection ( )
return_value = GetDeflection ( )

- - - - - - - - - - - - - - - -
interface StdMeshers_MaxElementVolume
IDL file
Python
void SetMaxElementVolume ( in double volume )
SetMaxElementVolume ( volume )
double GetMaxElementVolume ( )
return_value = GetMaxElementVolume ( )

- - - - - - - -
interface StdMeshers_NotConformAllowed
IDL file
Python

- - - - - - - -
interface StdMeshers_Propagation
IDL file
Python

- - - - - - - -
interface StdMeshers_Regular_1D
IDL file
Python

- - - - - - - -
interface StdMeshers_MEFISTO_2D
IDL file
Python

- - - - - - - -
interface StdMeshers_Quadrangle_2D
IDL file
Python

- - - - - - - -
interface StdMeshers_Hexa_3D
IDL file
Python

-
diff --git a/doc/salome/tui/SMESH/HTML/SMESH_Gen.html b/doc/salome/tui/SMESH/HTML/SMESH_Gen.html deleted file mode 100644 index 8fdf3b2a6..000000000 --- a/doc/salome/tui/SMESH/HTML/SMESH_Gen.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
interface SMESH_Gen
IDL file
Python
FilterManager CreateFilterManager ( )
return_value = CreateFilterManager ( )
SMESH_Pattern GetPattern ( )
return_value = GetPattern ( )
void SetCurrentStudy ( in Study theStudy )
SetCurrentStudy ( theStudy )
Study GetCurrentStudy ( )
return_value = GetCurrentStudy ( )
SMESH_Hypothesis CreateHypothesis ( in string theHypName, in string theLibName )
return_value = CreateHypothesis ( theHypName, theLibName )
SMESH_Mesh CreateMesh ( in GEOM_Object theObject )
return_value = CreateMesh ( theObject )
SMESH_Mesh CreateMeshesFromUNV ( in string theFileName )
return_value = CreateMeshesFromUNV ( theFileName )
mesh_array CreateMeshesFromMED ( in string theFileName, out DriverMED_ReadStatus theStatus )
[ return_value, theStatus ] = CreateMeshesFromMED ( theFileName )
SMESH_Mesh CreateMeshesFromSTL ( in string theFileName )
return_value = CreateMeshesFromSTL ( theFileName )
boolean Compute ( in SMESH_Mesh theMesh, in GEOM_Object theSubObject )
return_value = Compute ( theMesh, theSubObject )
boolean IsReadyToCompute ( in SMESH_Mesh theMesh, in GEOM_Object theSubObject )
return_value = IsReadyToCompute ( theMesh, theSubObject )
long_array GetSubShapesId ( in GEOM_Object theMainObject, in object_array theListOfSubObjects )
return_value = GetSubShapesId ( theMainObject, theListOfSubObjects )

-
diff --git a/doc/salome/tui/SMESH/HTML/SMESH_Hypothesis.html b/doc/salome/tui/SMESH/HTML/SMESH_Hypothesis.html deleted file mode 100644 index ff9d3d619..000000000 --- a/doc/salome/tui/SMESH/HTML/SMESH_Hypothesis.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -
interface SMESH_Hypothesis
IDL file
Python
string GetName ( )
return_value = GetName ( )
string GetLibName ( )
return_value = GetLibName ( )
long GetId ( )
return_value = GetId ( )

- - - - - - - - - - - -
interface SMESH_Algo
IDL file
Python
ListOfHypothesisName GetCompatibleHypothesis ( )
return_value = GetCompatibleHypothesis ( )

- - - - - - - -
interface SMESH_1D_Algo
IDL file
Python

- - - - - - - -
interface SMESH_2D_Algo
IDL file
Python

- - - - - - - -
interface SMESH_3D_Algo
IDL file
Python

-
diff --git a/doc/salome/tui/SMESH/HTML/SMESH_Mesh.html b/doc/salome/tui/SMESH/HTML/SMESH_Mesh.html deleted file mode 100644 index 527298f54..000000000 --- a/doc/salome/tui/SMESH/HTML/SMESH_Mesh.html +++ /dev/null @@ -1,306 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
interface SMESH_Mesh
IDL file
Python
SMESH_subMesh GetSubMesh ( in GEOM_Object aSubObject, in string name )
return_value = GetSubMesh ( aSubObject, name )
void RemoveSubMesh ( in SMESH_subMesh aSubMesh )
RemoveSubMesh ( aSubMesh )
SMESH_Group CreateGroup ( in ElementType elem_type, in string name )
return_value = CreateGroup ( elem_type, name )
SMESH_Group CreateGroupFromGEOM ( in ElementType elem_type, in string name, in GEOM_Object theGEOMGroup )
return_value = CreateGroupFromGEOM ( elem_type, name, theGEOMGroup )
void RemoveGroup ( in SMESH_Group aGroup )
RemoveGroup ( aGroup )
void RemoveGroupWithContents ( in SMESH_Group aGroup )
RemoveGroupWithContents ( aGroup )
SMESH_Group UnionGroups ( in SMESH_Group aGroup1, in SMESH_Group aGroup2, in string name )
return_value = UnionGroups ( aGroup1, aGroup2, name )
SMESH_Group IntersectGroups ( in SMESH_Group aGroup1, in SMESH_Group aGroup2, in string name )
return_value = IntersectGroups ( aGroup1, aGroup2, name )
SMESH_Group CutGroups ( in SMESH_Group aMainGroup, in SMESH_Group aToolGroup, in string name )
return_value = CutGroups ( aMainGroup, aToolGroup, name )
Hypothesis_Status AddHypothesis ( in GEOM_Object aSubObject, in SMESH_Hypothesis anHyp )
return_value = AddHypothesis ( aSubObject, anHyp )
Hypothesis_Status RemoveHypothesis ( in GEOM_Object aSubObject, in SMESH_Hypothesis anHyp )
return_value = RemoveHypothesis ( aSubObject, anHyp )
ListOfHypothesis GetHypothesisList ( in GEOM_Object aSubObject )
return_value = GetHypothesisList ( aSubObject )
log_array GetLog ( in boolean clearAfterGet )
return_value = GetLog ( clearAfterGet )
void ClearLog ( )
ClearLog ( )
long GetId ( )
return_value = GetId ( )
long GetStudyId ( )
return_value = GetStudyId ( )
SMESH_MeshEditor GetMeshEditor ( )
return_value = GetMeshEditor ( )
void ExportDAT ( in string file )
ExportDAT ( file )
void ExportMED ( in string file, in boolean auto_groups )
ExportMED ( file, auto_groups )
void ExportUNV ( in string file )
ExportUNV ( file )
void ExportSTL ( in string file, in boolean isascii )
ExportSTL ( file, isascii )
MESH GetMEDMesh ( )
return_value = GetMEDMesh ( )
long NbNodes ( )
return_value = NbNodes ( )
long NbEdges ( )
return_value = NbEdges ( )
long NbFaces ( )
return_value = NbFaces ( )
long NbTriangles ( )
return_value = NbTriangles ( )
long NbQuadrangles ( )
return_value = NbQuadrangles ( )
long NbVolumes ( )
return_value = NbVolumes ( )
long NbTetras ( )
return_value = NbTetras ( )
long NbHexas ( )
return_value = NbHexas ( )
long NbPyramids ( )
return_value = NbPyramids ( )
long NbPrisms ( )
return_value = NbPrisms ( )
long NbSubMesh ( )
return_value = NbSubMesh ( )
string Dump ( )
return_value = Dump ( )

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
interface SMESH_subMesh
IDL file
Python
long GetNumberOfElements ( )
return_value = GetNumberOfElements ( )
long GetNumberOfNodes ( in boolean all )
return_value = GetNumberOfNodes ( all )
long_array GetElementsId ( )
return_value = GetElementsId ( )
long_array GetElementsByType ( in ElementType theType )
return_value = GetElementsByType ( theType )
long_array GetNodesId ( )
return_value = GetNodesId ( )
SMESH_Mesh GetFather ( )
return_value = GetFather ( )
long GetId ( )
return_value = GetId ( )
FAMILY GetFamily ( )
return_value = GetFamily ( )

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
interface SMESH_MeshEditor
IDL file
Python
boolean RemoveElements ( in long_array IDsOfElements )
return_value = RemoveElements ( IDsOfElements )
boolean RemoveNodes ( in long_array IDsOfNodes )
return_value = RemoveNodes ( IDsOfNodes )
boolean AddNode ( in double x, in double y, in double z )
return_value = AddNode ( x, y, z )
boolean AddEdge ( in long_array IDsOfNodes )
return_value = AddEdge ( IDsOfNodes )
boolean AddFace ( in long_array IDsOfNodes )
return_value = AddFace ( IDsOfNodes )
boolean AddVolume ( in long_array IDsOfNodes )
return_value = AddVolume ( IDsOfNodes )
boolean MoveNode ( in long NodeID, in double x, in double y, in double z )
return_value = MoveNode ( NodeID, x, y, z )
boolean InverseDiag ( in long NodeID1, in long NodeID2 )
return_value = InverseDiag ( NodeID1, NodeID2 )
boolean DeleteDiag ( in long NodeID1, in long NodeID2 )
return_value = DeleteDiag ( NodeID1, NodeID2 )
boolean Reorient ( in long_array IDsOfElements )
return_value = Reorient ( IDsOfElements )
boolean TriToQuad ( in long_array IDsOfElements, in NumericalFunctor Criterion, in double MaxAngle )
return_value = TriToQuad ( IDsOfElements, Criterion, MaxAngle )
boolean QuadToTri ( in long_array IDsOfElements, in NumericalFunctor Criterion )
return_value = QuadToTri ( IDsOfElements, Criterion )
boolean SplitQuad ( in long_array IDsOfElements, in boolean Diag13 )
return_value = SplitQuad ( IDsOfElements, Diag13 )
boolean Smooth ( in long_array IDsOfElements, in long_array IDsOfFixedNodes, in long MaxNbOfIterations, in double MaxAspectRatio, in Smooth_Method Method )
return_value = Smooth ( IDsOfElements, IDsOfFixedNodes, MaxNbOfIterations, MaxAspectRatio, Method )
void RenumberNodes ( )
RenumberNodes ( )
void RenumberElements ( )
RenumberElements ( )
void RotationSweep ( in long_array IDsOfElements, in AxisStruct Axix, in double AngleInRadians, in long NbOfSteps, in double Tolerance )
RotationSweep ( IDsOfElements, Axix, AngleInRadians, NbOfSteps, Tolerance )
void ExtrusionSweep ( in long_array IDsOfElements, in DirStruct StepVector, in long NbOfSteps )
ExtrusionSweep ( IDsOfElements, StepVector, NbOfSteps )
void Mirror ( in long_array IDsOfElements, in AxisStruct Mirror, in MirrorType theMirrorType, in boolean Copy )
Mirror ( IDsOfElements, Mirror, theMirrorType, Copy )
void Translate ( in long_array IDsOfElements, in DirStruct Vector, in boolean Copy )
Translate ( IDsOfElements, Vector, Copy )
void Rotate ( in long_array IDsOfElements, in AxisStruct Axis, in double AngleInRadians, in boolean Copy )
Rotate ( IDsOfElements, Axis, AngleInRadians, Copy )
void FindCoincidentNodes ( in double Tolerance, out array_of_long_array GroupsOfNodes )
GroupsOfNodes = FindCoincidentNodes ( Tolerance )
void MergeNodes ( in array_of_long_array GroupsOfNodes )
MergeNodes ( GroupsOfNodes )
void MergeEqualElements ( )
MergeEqualElements ( )
boolean SewFreeBorders ( in long FirstNodeID1, in long SecondNodeID1, in long LastNodeID1, in long FirstNodeID2, in long SecondNodeID2, in long LastNodeID2 )
return_value = SewFreeBorders ( FirstNodeID1, SecondNodeID1, LastNodeID1, FirstNodeID2, SecondNodeID2, LastNodeID2 )
boolean SewConformFreeBorders ( in long FirstNodeID1, in long SecondNodeID1, in long LastNodeID1, in long FirstNodeID2, in long SecondNodeID2 )
return_value = SewConformFreeBorders ( FirstNodeID1, SecondNodeID1, LastNodeID1, FirstNodeID2, SecondNodeID2 )
boolean SewBorderToSide ( in long FirstNodeIDOnFreeBorder, in long SecondNodeIDOnFreeBorder, in long LastNodeIDOnFreeBorder, in long FirstNodeIDOnSide, in long LastNodeIDOnSide )
return_value = SewBorderToSide ( FirstNodeIDOnFreeBorder, SecondNodeIDOnFreeBorder, LastNodeIDOnFreeBorder, FirstNodeIDOnSide, LastNodeIDOnSide )
boolean SewSideElements ( in long_array IDsOfSide1Elements, in long_array IDsOfSide2Elements, in long NodeID1OfSide1ToMerge, in long NodeID1OfSide2ToMerge, in long NodeID2OfSide1ToMerge, in long NodeID2OfSide2ToMerge )
return_value = SewSideElements ( IDsOfSide1Elements, IDsOfSide2Elements, NodeID1OfSide1ToMerge, NodeID1OfSide2ToMerge, NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge )

-
diff --git a/doc/salome/tui/SMESH/doxyfile b/doc/salome/tui/SMESH/doxyfile deleted file mode 100755 index 883136c2f..000000000 --- a/doc/salome/tui/SMESH/doxyfile +++ /dev/null @@ -1,203 +0,0 @@ -# Doxyfile 1.3-rc1 - -#--------------------------------------------------------------------------- -# General configuration options -#--------------------------------------------------------------------------- -PROJECT_NAME = "SALOME - SMESH - v.2.1.0" -PROJECT_NUMBER = id#1.1 -OUTPUT_DIRECTORY = ../ -OUTPUT_LANGUAGE = English -EXTRACT_ALL = YES -EXTRACT_PRIVATE = YES -EXTRACT_STATIC = YES -EXTRACT_LOCAL_CLASSES = YES -HIDE_UNDOC_MEMBERS = NO -HIDE_UNDOC_CLASSES = NO -HIDE_FRIEND_COMPOUNDS = NO -HIDE_IN_BODY_DOCS = NO -BRIEF_MEMBER_DESC = YES -REPEAT_BRIEF = NO -ALWAYS_DETAILED_SEC = YES -INLINE_INHERITED_MEMB = YES -FULL_PATH_NAMES = NO -STRIP_FROM_PATH = -INTERNAL_DOCS = YES -CASE_SENSE_NAMES = YES -SHORT_NAMES = NO -HIDE_SCOPE_NAMES = NO -VERBATIM_HEADERS = YES -SHOW_INCLUDE_FILES = YES -JAVADOC_AUTOBRIEF = YES -MULTILINE_CPP_IS_BRIEF = NO -DETAILS_AT_TOP = NO -INHERIT_DOCS = YES -INLINE_INFO = YES -SORT_MEMBER_DOCS = NO -DISTRIBUTE_GROUP_DOC = NO -TAB_SIZE = 5 -GENERATE_TODOLIST = YES -GENERATE_TESTLIST = YES -GENERATE_BUGLIST = YES -GENERATE_DEPRECATEDLIST= YES -ALIASES = -ENABLED_SECTIONS = -MAX_INITIALIZER_LINES = 25 -OPTIMIZE_OUTPUT_FOR_C = YES -OPTIMIZE_OUTPUT_JAVA = YES -SHOW_USED_FILES = NO -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- -QUIET = NO -WARNINGS = YES -WARN_IF_UNDOCUMENTED = YES -WARN_FORMAT = "$file:$line: $text" -WARN_LOGFILE = log.txt -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- -INPUT = ../../../share/salome/idl/SMESH_Gen.idl \ - ../../../share/salome/idl/SMESH_Mesh.idl \ - ../../../share/salome/idl/SMESH_BasicHypothesis.idl \ - ../../../share/salome/idl/SMESH_Hypothesis.idl -FILE_PATTERNS = -RECURSIVE = NO -EXCLUDE = -EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = -EXAMPLE_PATH = -EXAMPLE_PATTERNS = -EXAMPLE_RECURSIVE = NO -IMAGE_PATH = sources/ -INPUT_FILTER = -FILTER_SOURCE_FILES = YES -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- -SOURCE_BROWSER = NO -INLINE_SOURCES = NO -STRIP_CODE_COMMENTS = YES -REFERENCED_BY_RELATION = NO -REFERENCES_RELATION = YES -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- -ALPHABETICAL_INDEX = NO -COLS_IN_ALPHA_INDEX = 5 -IGNORE_PREFIX = -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- -GENERATE_HTML = YES -HTML_OUTPUT = SMESH -HTML_FILE_EXTENSION = .html -HTML_HEADER = sources/myheader.html -HTML_FOOTER = -HTML_STYLESHEET = -HTML_ALIGN_MEMBERS = YES -GENERATE_HTMLHELP = NO -CHM_FILE = -HHC_LOCATION = -GENERATE_CHI = NO -BINARY_TOC = YES -TOC_EXPAND = YES -DISABLE_INDEX = YES -ENUM_VALUES_PER_LINE = 4 -GENERATE_TREEVIEW = YES -TREEVIEW_WIDTH = 250 -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- -GENERATE_LATEX = NO -LATEX_OUTPUT = latex -LATEX_CMD_NAME = latex -MAKEINDEX_CMD_NAME = makeindex -COMPACT_LATEX = NO -PAPER_TYPE = a4wide -EXTRA_PACKAGES = -LATEX_HEADER = -PDF_HYPERLINKS = NO -USE_PDFLATEX = NO -LATEX_BATCHMODE = NO -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- -GENERATE_RTF = NO -RTF_OUTPUT = rtf -COMPACT_RTF = NO -RTF_HYPERLINKS = NO -RTF_STYLESHEET_FILE = -RTF_EXTENSIONS_FILE = -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- -GENERATE_MAN = NO -MAN_OUTPUT = man -MAN_EXTENSION = .3 -MAN_LINKS = NO -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- -GENERATE_XML = NO -XML_SCHEMA = -XML_DTD = -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- -GENERATE_AUTOGEN_DEF = NO -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- -GENERATE_PERLMOD = NO -PERLMOD_LATEX = NO -PERLMOD_PRETTY = YES -PERLMOD_MAKEVAR_PREFIX = -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- -ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = YES -EXPAND_ONLY_PREDEF = NO -SEARCH_INCLUDES = YES -INCLUDE_PATH = -INCLUDE_FILE_PATTERNS = -PREDEFINED = -EXPAND_AS_DEFINED = -SKIP_FUNCTION_MACROS = NO -#--------------------------------------------------------------------------- -# Configuration::addtions related to external references -#--------------------------------------------------------------------------- -TAGFILES = -GENERATE_TAGFILE = -ALLEXTERNALS = NO -EXTERNAL_GROUPS = YES -PERL_PATH = /usr/bin/perl -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- -CLASS_DIAGRAMS = YES -HIDE_UNDOC_RELATIONS = NO -HAVE_DOT = YES -CLASS_GRAPH = YES -COLLABORATION_GRAPH = NO -TEMPLATE_RELATIONS = YES -INCLUDE_GRAPH = YES -INCLUDED_BY_GRAPH = NO -GRAPHICAL_HIERARCHY = YES -DOT_IMAGE_FORMAT = jpg -DOT_PATH = -DOTFILE_DIRS = -MAX_DOT_GRAPH_WIDTH = 1024 -MAX_DOT_GRAPH_HEIGHT = 1200 -GENERATE_LEGEND = NO -DOT_CLEANUP = YES -#--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine -#--------------------------------------------------------------------------- -SEARCHENGINE = NO -CGI_NAME = search.cgi -CGI_URL = -DOC_URL = -DOC_ABSPATH = -BIN_ABSPATH = /usr/local/bin/ -EXT_DOC_PATHS = diff --git a/doc/salome/tui/SMESH/doxyfile_py b/doc/salome/tui/SMESH/doxyfile_py deleted file mode 100755 index 8569636d5..000000000 --- a/doc/salome/tui/SMESH/doxyfile_py +++ /dev/null @@ -1,200 +0,0 @@ -# Doxyfile 1.3-rc1 - -#--------------------------------------------------------------------------- -# General configuration options -#--------------------------------------------------------------------------- -PROJECT_NAME = "SALOME - SMESH - v.2.1.0" -PROJECT_NUMBER = id#1.1 -OUTPUT_DIRECTORY = ../ -OUTPUT_LANGUAGE = English -EXTRACT_ALL = YES -EXTRACT_PRIVATE = YES -EXTRACT_STATIC = YES -EXTRACT_LOCAL_CLASSES = YES -HIDE_UNDOC_MEMBERS = NO -HIDE_UNDOC_CLASSES = NO -HIDE_FRIEND_COMPOUNDS = NO -HIDE_IN_BODY_DOCS = NO -BRIEF_MEMBER_DESC = YES -REPEAT_BRIEF = NO -ALWAYS_DETAILED_SEC = YES -INLINE_INHERITED_MEMB = YES -FULL_PATH_NAMES = NO -STRIP_FROM_PATH = -INTERNAL_DOCS = YES -CASE_SENSE_NAMES = YES -SHORT_NAMES = NO -HIDE_SCOPE_NAMES = NO -VERBATIM_HEADERS = YES -SHOW_INCLUDE_FILES = YES -JAVADOC_AUTOBRIEF = YES -MULTILINE_CPP_IS_BRIEF = NO -DETAILS_AT_TOP = NO -INHERIT_DOCS = YES -INLINE_INFO = YES -SORT_MEMBER_DOCS = NO -DISTRIBUTE_GROUP_DOC = NO -TAB_SIZE = 5 -GENERATE_TODOLIST = YES -GENERATE_TESTLIST = YES -GENERATE_BUGLIST = YES -GENERATE_DEPRECATEDLIST= YES -ALIASES = -ENABLED_SECTIONS = -MAX_INITIALIZER_LINES = 25 -OPTIMIZE_OUTPUT_FOR_C = YES -OPTIMIZE_OUTPUT_JAVA = YES -SHOW_USED_FILES = NO -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- -QUIET = NO -WARNINGS = YES -WARN_IF_UNDOCUMENTED = YES -WARN_FORMAT = "$file:$line: $text" -WARN_LOGFILE = log.txt -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- -INPUT = list_py_files_to_process -FILE_PATTERNS = -RECURSIVE = NO -EXCLUDE = -EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = -EXAMPLE_PATH = -EXAMPLE_PATTERNS = -EXAMPLE_RECURSIVE = NO -IMAGE_PATH = ../sources/ -INPUT_FILTER = -FILTER_SOURCE_FILES = YES -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- -SOURCE_BROWSER = NO -INLINE_SOURCES = NO -STRIP_CODE_COMMENTS = YES -REFERENCED_BY_RELATION = NO -REFERENCES_RELATION = YES -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- -ALPHABETICAL_INDEX = NO -COLS_IN_ALPHA_INDEX = 5 -IGNORE_PREFIX = -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- -GENERATE_HTML = YES -HTML_OUTPUT = ../SMESH/meshpy_doc -HTML_FILE_EXTENSION = .html -HTML_HEADER = ../sources/myheader_py2.html -HTML_FOOTER = -HTML_STYLESHEET = -HTML_ALIGN_MEMBERS = YES -GENERATE_HTMLHELP = NO -CHM_FILE = -HHC_LOCATION = -GENERATE_CHI = NO -BINARY_TOC = YES -TOC_EXPAND = YES -DISABLE_INDEX = YES -ENUM_VALUES_PER_LINE = 4 -GENERATE_TREEVIEW = YES -TREEVIEW_WIDTH = 250 -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- -GENERATE_LATEX = NO -LATEX_OUTPUT = latex -LATEX_CMD_NAME = latex -MAKEINDEX_CMD_NAME = makeindex -COMPACT_LATEX = NO -PAPER_TYPE = a4wide -EXTRA_PACKAGES = -LATEX_HEADER = -PDF_HYPERLINKS = NO -USE_PDFLATEX = NO -LATEX_BATCHMODE = NO -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- -GENERATE_RTF = NO -RTF_OUTPUT = rtf -COMPACT_RTF = NO -RTF_HYPERLINKS = NO -RTF_STYLESHEET_FILE = -RTF_EXTENSIONS_FILE = -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- -GENERATE_MAN = NO -MAN_OUTPUT = man -MAN_EXTENSION = .3 -MAN_LINKS = NO -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- -GENERATE_XML = NO -XML_SCHEMA = -XML_DTD = -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- -GENERATE_AUTOGEN_DEF = NO -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- -GENERATE_PERLMOD = NO -PERLMOD_LATEX = NO -PERLMOD_PRETTY = YES -PERLMOD_MAKEVAR_PREFIX = -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- -ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = YES -EXPAND_ONLY_PREDEF = NO -SEARCH_INCLUDES = YES -INCLUDE_PATH = -INCLUDE_FILE_PATTERNS = -PREDEFINED = -EXPAND_AS_DEFINED = -SKIP_FUNCTION_MACROS = NO -#--------------------------------------------------------------------------- -# Configuration::addtions related to external references -#--------------------------------------------------------------------------- -TAGFILES = -GENERATE_TAGFILE = -ALLEXTERNALS = NO -EXTERNAL_GROUPS = YES -PERL_PATH = /usr/bin/perl -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- -CLASS_DIAGRAMS = YES -HIDE_UNDOC_RELATIONS = NO -HAVE_DOT = YES -CLASS_GRAPH = YES -COLLABORATION_GRAPH = NO -TEMPLATE_RELATIONS = YES -INCLUDE_GRAPH = YES -INCLUDED_BY_GRAPH = NO -GRAPHICAL_HIERARCHY = YES -DOT_IMAGE_FORMAT = jpg -DOT_PATH = -DOTFILE_DIRS = -MAX_DOT_GRAPH_WIDTH = 1024 -MAX_DOT_GRAPH_HEIGHT = 1200 -GENERATE_LEGEND = NO -DOT_CLEANUP = YES -#--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine -#--------------------------------------------------------------------------- -SEARCHENGINE = NO -CGI_NAME = search.cgi -CGI_URL = -DOC_URL = -DOC_ABSPATH = -BIN_ABSPATH = /usr/local/bin/ -EXT_DOC_PATHS = diff --git a/doc/salome/tui/SMESH/sources/Application-About.png b/doc/salome/tui/SMESH/sources/Application-About.png deleted file mode 100755 index 7b58330d50856e28562e8f9ed80dae72d6e6dda3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19226 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

5r3>=?gKv-6#gF2kVYm^Euk4pDx%bDo{L~m zgS1GapZxVAn3cEn>zxB-X}(|}RLG;R8{7?6YT`~f|EAwz{s;8qGKD}`5Z=K5#;hPB zd{K6QN2uW85nuze$XhrwY>Du0#kcvwfnlh0$(lJs>Z@c#m{f`8yDgu(Xxl;U&g83B zUq#HqKOMzC5+qT3wDfF*kxQLz!l%{qHnb@s;}k1cUe^{;|G=)`Q7XcxsGROqks=Ag zoG&{r(5Uh^AmM?y6E772#8>?DKUFS210lo3mrT6UhI+A37UK;xw|ch#S1h1BXDG=0 z`SiNg1^NZ*(PT8LkDAb9n>5TF~*;2X|?`-g4}Gv zHVASR|W^#YY+&=*csqa%VVRcgH;U|fb#O&RhxdbC{o>7 z9sXQmS7K!HHpD>$O;_GV)`q5ZdKo{(;6`qw|4liq0fGA^2xmybmm^?^5=Tzm8%Q=4 zxyVdzWIccl`P{Q@)3Ol=o-se6E3p`DR=kPOaeEoszU?{gdD;P*A{mPm7jCbqFB}!d z+Kt-6%F$pT*&zY(gc(J_j%HtucuzSt=;xH=zNPQ@D!Y^Gn&u!0t zd!$P}@X`C^*w+=z5bak_D)nRLRbug>V~S~pCd%L>R2W_0@3h;GD&t&`XzDzI?_s{TqX#5#lQ25WD?j*(qQt zGsh5u08x{uy9~0Q)l*NPPFxzK83a^V)k21`no1$G8 z^g#{_Nna2JEnf`k?4wPQs6wRp)i3=ra}+Et=ggZl*1@gTrzH7vZrLW>yJ+koTO&r& zb4n&kQfR3VlQr<>>h4Mc4AFg-1)~QPbWL`a$(j|E18OWFoPG zF9Lo3nkYf^vkFB+XEMK&1-$=s5Hw6;6F1WDM@@rMPLo^Mi`$6heFP=iCli++35AiU zd9c^0?B4}GSXegeF`BvPF>Ns6urz-;L}-bMWCVO`yCs-XxsVaR>lbK> zv5I@zodKgEpScyRX)&NSTeC`Fcs9A%)OeP2-8#Ok63~L$H&fx7YcZ`nM8aqYI0~Ft ztS7S;jGVxI99M-gd2^AIT1pfT%*Bar5QaqxIl1yf2$=G!Hn%n3Y~)vqxNjT$jajM@ zDB;vz!RfYkr)^B0L6HdW!nd3}fa{>ky9(Y)n{TU(&$1MW+ZXB_v*ddzZ~PCrGTctP z22dU5jpaxNwDZ1}`bu(CouH_i?k=5Wnsi8j$;tBt-c>&7>wiEmY~(XP9Arqc0jWx3 zmCq#MFHe{-0OjxB29U?1@`_G(z-dQ;2l|=rl)tc$s0YLBnR>;~I#6QDP0Y=HHj9k3 z_+9iB#Jei7?$5DpLDIrihG52Ek_5VelB{R!=mYrLb$+P~ECC7y*X$hE-;z@v^Oibl zkM{fb`}_Ub3{tJJos+q!bATN(%Vwbz82dgzm~wo}8$DcFrt`})bXb#7diPs$o0yu! z0=0>OXexC6Zei(ryQ8(@Y1u{bD_jt9pn;l?aW-TrQ z9tZ31%nlI_{yraxt|O=v=LOq@W`uozSeP&gWDZ!S2z$Tx69X+Bc++$m|6Ia7eeb>r zypgw~rok>T+g&*82q-~&FZ%g(G- zF?W}JEQN?5%6ybUtav)xopGFX*qYxDcp3TL$M-$H-?Ue?{|yi4+P@i?aGEAthMyqd zyOFcYX}Qw4b>J)}d50JTlk57L1aS8;GuESI7fZ9&!#4tZ3Fi+AQX}MjJ9S=@YHbZS zGboo(LPEmd9R)Y+k$Ik2M_zC{zklu=dw+Jn?hG|V^hYDfG}LVnP78gaFm_Aj$?i&9 z*Sm%13*vUJS!#d6j=W7#|Va0XloS= zeT1)L&vW<&CDSaYz9IXxyKiHPq`j_i)lq1Y+B+VwVjlaPPy#;sr%bNCew~^tbnJU= zTen0|g|_B~4wo)|7>@CV<<&d>4C11m?z=83IA*X^QRIxG0mjpL^}2e?`O>GM%F@AD zC2Z`%0iF8Yh@1bwAA4tDgy`IkG`uRI8Z}50?1CfVzWtu{ zb+t7WbFv&U4-kG*J3PenKfbC2doslF=yRJ42n3d_U0W8)NsW6Yz4|N0rHw~FALM+u z=J(m5#6Uu-+W5}OZ~8pAd#M(U_itJCN<3WmE^z_7)}PLTIyHOw_0?E~HqwuATd%-SL&P zB4)|r4LSetF!v-561a@{EzbIVmEKl+3k&%bHTRzm_Owh;p;!Uo=?=IgjPc<3-dNm{ z=|h#{kM-19Mt5$D0J<2cjm0yL^rV$Ih!wUu3iRbUk@lNaqc9oy}Q`Yq8i|^yRT`{Uv#8So4Z~%Wr50^68`yl@& zU2;|SHfUt-GabaxR_0(;-)?9vgWH#(Y}pcb$%XljV=dh;Y~q5YvpeQ28a>Ft(|ZkL z+p5M-sRkdDSO-6W;~(|W=PjpYluexxSl=Z8fCjN*^Y)Wba(S40Yd3@sUn7uRlmk%cK)=nhlr zy^wS$btG;1H!c`3elu%~&mcoc@C4a^+HZdSwLafIJUrR4;tJJDkS?!xn~La}w7yWl znb)H?VkR>Z*}|!UW-HLcrhJU2S#+8VFK3E$rkNudRDk` zg_-#cf&j!9XrLW;_(eV|L;{5oh@j+gPq*_&_t(i?%R7YZA%Q8xw@eLAiE<3}dW53C zJo{W}fKBQp?3p*RXc%^}FA=ru*UZ=(EyIGFhO<5O zmw8i98C=QGKFTnIM|4dcgYv3PM0*BH&uBWlXpvXHu)FK@#W-y(4D%JQT8<|G$Nf_? z*4l4|B%R|EV?n`P&i^t7iB*buRm>_e0jf5BU|Its@X8R5FPFN?v^ znAFo)4W@&8z_Y7({wPl1k$#f}aS%0f^RvA;r zUn{Z4ou7qmDj}N3MFpGlrsLr#?6JZ^stURn_(B{yu3@+0xIvwJtQ6|Tk^{B-DGJNj zW9&R&`XeO~yjLK4piGrvG-v2D{1}z7hRU8v9`hO~Jw$yw=6Qymh2Di?Q*oR=&YSC8GCNQ2W)CcuRKLK7P6e8_M5!xhr`7d5DGoez?%LGeu6laQ#?>{T z37ys_n~Kur69NVAu%}Ugv*e2TARVDY+kz!8qEfm!Yp$j#;kM4y>s9ck79c`H+tcm& zmb75$G7ea~*igp0Qj>a1FTr@goB^Oz5AN96{`0fY+3eaYkJ2Hup+pbvD@wRnP{G$6pkFlcvz}qy zg9PZ^R^iO@?ni;l$Rr?TkI1OsifCq0nr&`BxMwXP2S}zAw*8Xo-R~r`T!xl5jJl;B zWj2Tk>B9e|3IB8ZQL#V&?0f-(zPIpn8F@RaPswLxR+eEibgQYfMuCdH8@4%;dgV#qMms@gf&a0*B6R_;KYD19o(V ztjdjxP{+97O7r6}tuuZU@hO2xHg5jE%_C|45-(L)bq!J!%7Lv{hy6~<4Gyj@RpUk=Wc@nLQTq?v&~<# zrx@5-GahHyB*ne9WSS?hCNt$+=!y?)^1v?I&^0DvawhTMJG;pY+;^VZdF0C0N=iwn!f*!v zmbpHczaSvE!e6k<*2r7lYeyvutt2R2vpqm(%}1$3dgPu*9jm55u6-eY^-m9}Sdcac zY5G$s7)n%{?$_`FQxlSpz2d5?BQNWY|Jy%smQ=$hP%~nwM+uTkjlgV-wY!#>qhv63 zmZDTV?47urA_rUn-wmuY7a7jr^3(ctL?B;CjbbPvrl2O2V%}M_9{=2i`y!Nsp|~`@ zJ{%KD&s(B(RH98NQ!F88hQYw@2W1)X(Wb$vd$Nr$Ymd16M{wM4TLX_9#=dojpF&Wl1Wg?;Gdl=^o|SJCL?Nri;yHkn6;HFZ5u8vfAT6hE0L^Ge zo#B?LJf~=G$s@yErx$+|>94cB3W-g#J?lr9VNuJZoL1N8OZ*4>*uC!V@U*&J6t~Ha zo+Wk=`lm@7^Bk6uOxo=AEG8;>29Xc9a(Rdyg&|JWR5C0q1FJ@J_$LZc=%x+GDvDjJ z`wi>j7y`6s4kc3`sF_|iI<%ayd&eSi`)K$;rA97cs*@2Vn(^zGKO zxPSb=i9Z&Y35TyOdFq+f{J9sq&QlZLOGOgxg&jWGh2PV{OQu@ec3l z{nh99N+#-iC)b1e9mEk05?vd8%Rjr zy4Y))2`RD^sa~Ga4KCvI*2U;l8@Yy+ZdqF7@N=%8M&W)Gf)V0D<*QwV;;b@;UG2m@ z!Pyms1Q3i5*DGf-!Dslr(kR7G>qZ+<7%NV{x#!Q)nQD_A_Pf7Si-Gw}v!HfAaT3EGA8C&+^^Td?o#0{KpLC@(Qh8#052I@M=^}QNB zDrS}W!cPv5^SkgSkiyNHJlT_QhKJ*z+Q61Umm!hijhmu`CGs+PY4NzNX2KYUi6Lnv zP$C)_;h56c4zw5c)YV#Ru{1T(zE!j8AyISv!KvTMywaaI zmqCqjf;y!F^t9l+fxa`Evhsy07&-gC5V7Q^I*xzg&_+kwm6SS{KhgSS@i_MjnNXBT zM}8(pF;sI1gAzGteybvS>8qBRzCgt3!zXAV+_@xmADY%g*L&Zp_b-R*#nhIGP>6h< z476#{3h;|=;`P7`;SV2em&Lp6b@xs}i^|D)cj9V4FDQ@o+}-T?D(D8Xb{VMK1Asl- zuM4Fqf=v*6fpdnCpocA6|;9&qJ1Vko&%&i$B1 zdUM}4z)210pv7O8U=yJauh*Xxz%{($VNyql$xgn1^r@A1#%~LdxXyRrzXfE@D^Nb< zUJEekF+W*J|HXY3Wmh!An3a|nW|iiO8l#M1d4L}R)|FSueIe|j7pVPVZ2Nk))7nSt z5Uuw1__l`O*=Lp&M^LP zfibvm^6&#TL@v-OzCrg?SvF`&XdXqvLye!X#vr`YNkqor6NAx6g2Ri{PL=t?xFF(wu(TZRTSznl&I%;$@C~n-^Y`Y_K{X zh1=r(9nwn_tYcOW3(>~Gf16DbgMvSPC+-^p{sQ2>DETs)N{Cu@ zUBi-mTziKOxGv6v=KwXP$3SJz9`06i26lWgip4%Ryia%bYl{Ll^n$^*o#;o}q+~bU zafVX}ZTw+_xwh5Q^(?c~2lzNq$gs%`2A5MtH|9~u71r7}|E$8&r2I}GVdp7eqL4cR z*pq%ypaeNgfMc_{ND%+>zvo_K;f24L?Cfz5atUpK$l)+_`oy_>w~%6DU&<{ai&@GU zAUKSF#~>_#peXXtxrubQVs#$kI=0QL`KQZS?uCfY%s8IcV|PT^gN$HVW}!<9g6e`m zG_~wz<&p9@J#@~-)OrglKxwS1&wCvMh1twI#oJi~+8I&GllA>S{pihdh1gJnZPY{k8k&>>@wY*rys~`}QCa>)=dZCS)csTC9gXVF zYCX&TVal0)>rc(!man+u>*+BO|HoX(fv!*DmGy1pXU;5iyWH&(4-J!XF%4JTzUQfS zPEL5Bx8BJE&s}b6Q_&VI|80W(A_$RA+&vzlcN;u+ZPPhCB4l;9JVV1P{(-6p6T@YG zG1XC+xL(A}X4-Uuar<8Q+N0U#s)=Xzm$rLAof6IJJ<2Z2r`4TUVoCMYn;=+(kXT_j zOGRa}?#Bg(JpSxk&2;+u4~HsoujWS1f9WB^bfYZBAulwZnHE5}w`NeRHs>HeY=1_| znkJNQL0Te>>e~-0pt#eOu_B1b+4>+Xs77#(8k3!b9aIK}au)dpZ`ujR=M5RzSE z7-{A@hMXj}T%DNTDDEF1t1M&Qn}^p-IPzw%|5Dv%y;#>|7FSAzUN_fH-dT4g-`#&le`t^tV+CaSqyOiT0r@7>AT{hg(!|WXV!5J!Rj*RlE$%R*Z!(s7hl%_@8qOpr2sH6FaVi92jKMufG6&3X6$Na zO73ChYDunUX+|zBtN7`41t1PUMnptHL_kJDLVEKC`7J6o8Y&73Dgh=I1~v&H87T=N zF)=wc3oSV%6BRKr9S=Pd8#@;l7a1*|5HE)y3nv%HUxdKCdGiJp1r;9+4WEO8n1bVf zyS)AY0FeQAup)3UlmJ*D3>*;VbpSvNfC0cD{OQJj6eL)91Vm)Gztn2J1Hiz+!or~- zA-+Y1LqY)jX$=bp4@5x3q+mzF!p0L-RyR)k2Bzdta|%e9#mTFyZ|KFP5>rwA>>L=h z!3pB#F>%R17f-sNe$QpKtdf3N8aoOBGv0M0QHY7SRfn_AOgsl1p*`_ zV1V!7B|ZTEpPs(UKuOLu&zi6OiECAA8Fa{)?`hJX&yPm#oG8kF(vWt;k_-_bjh9N% zCS0iZB6?)`QnjiH(tst>L=aG{UMyRdehgrQ6E+(>)GuN-NO%P>2c4=G^fUSY1XIXI zXtdL~F|eqc^F^?&HgQA!*?SPu`dh>&7A=wxTu_)0gVv47Bp1y3X*Xs1Hq{>#4ybj^ z_a3Hfp`x^?5z!SfQ{Z3U^ZRBC>xQna2TQPS17o?a z+5EnQGR^M8D*!lfQDU4nsPPJTFJA-mOK0UB6wk(zxZgSj%2<}nu|ieFBej1TE+IK^ z2*ei3ZjqS4Cv~Xmx1>Lm@R zh1L1uX7F1nd2)hpzDQOR!Hto@DyIbHEdL1TO=K%%EY=*w;7>@S?#iswo4p^k1H~%4 z!4}BAlNn~47*!43P?c6frO4I}srG!IH$2t4v%9TRNL0MLNLI+s-HPQ5RUI@rwa!5& zv)wEz-xbUD{gf01O_(ih6q>r4Un)xiLqUPf*=(1)()rM+_>Xgsohur5ZkS_5dYNYP z$$DF+Y6UZoQ9IzH?`=0g?aj0-7L2fQeXYx}FI9!>;E(lydHxY?*_M2?{U)EvUBJOavEAl_^GDK<3r32~cCk%SBnc;1qy{1K{V{U^~L zLdZ^2^0{>o+A8IYqazPv*Ow8Zv|!ayptmzGQezzIz3f&OKxyM`hnHO=c%6tuANU?oP{< zoSrBhwD`=%9df-`h*AFCrmB)C_a>&(8q|dlB(Bd&n7nt0W~^$hn(LrumG{22QAsul zot)*F-!wW$1Ay3=M*k8_V2Dne(#`rD7tg(nR{8IUI8r z$DrEJgJT=dtssw`&W8*?NUV72W`hSNKYGNabt+aB08JghDV!8~#y(}MB35@`9k*v; zEBx$W%pP%mZ~Pg`>yX32ArNVF3yIV;oSzOHhMv+5Nf?SpjqRZ<^O0M1SLs{_rYehR zx72hhesL9PwB(o|USTwAm$p7qAGY;^m(ZK+ zyO*(~jt4Br8fsLuqkkswV3MbDZF$UM_!6ZDV-rPUVY5rld=!-VO*2V*QjA5Z_wC-X z=l3X(q9#gE*$NR=-QIxR!)L_PbA!k>{S@C#OCtjd}-dV)WIeGl^!qaUG{X zDQ|hGG%55&12>rl&*hjTLz+uN>ffz?O{nxn8?JLsOur+Uz|{Dp6r`|6ibSN3Gjb)L z<=3ro^&1 zE@So`rVjX09EN(od3zD%SmoDold~U&s%p~!JA}z4OeBf+2c4q+`C)#=+RnG1QcHZt z=aCzsauHjhxO|r*>qG4MI|CU2?CBH_s)CY$WZsGTQ5DyKl38ODw?#j<8=KqGBMM34 zw(c-r69Xb9dqC9USR{#hmP1i6z{lCV_1Rx#^zC(zpp< zidI=vo#;CkE3+fjPv89E<%S1ZJ~cBR39B~nr%qmBJfYs)c)?tR!BZq!{xSOoRE3F^ zBm9MKC7~ZSZfWECmMAmg@`oSg%jqntg{E!x-3rx#lUVP=!-j6dKtB%2j~S}2%53;( z>Ta|@27p^rIq;X9-7=&gIUMLsd$c6=PD0pb?ev*v?PRw{m@jxs>^3MS(}{0fipkHB zk-S%4bTwMLn1xz@Q%xGKrgm_&c@Sj443!;y=0@|D2;8>fl)(gfr7Fxp#I@lpN|Ngb zj`q8X*B6(ZBfsAUzvR1wyeFOS1`|~DJuNx2bxIB?c6BQU724p-p9Tvmtl>}Yp$pZ$6dkP z3?A8d>Lo<-1~74>S8X?#YmotOSa_(Drqo+7hM}*3${w+ra8t`Jx|fo{##7(t+Wc1l zdyeH`1#=ELk@=zcfzIY1K4v6{^&bnp58Kl|0AhFEPC4S(z?~W9f-v} zN4}O2bTYs9w}$2h18g;H6Er>e71*tAOv#+@^z(ab(F(5^LHwtxAu6gnyzDgn1Qn$| zscAgpXy~)EJv>Qn9!dTMXoI96(xwarL}2Sc(p-d-f|#5Yi)ctf(|`*J`KGX0I#HC7 z1~mLL^$lM(4&_-2;Z5-)U$>h))5;3e$%B{ybIyvyi8;VE^!>6$h^?m~)rRLs+4luL z;E8h`(+r9Bq2+2qkSB$$?*6XgwF`^$XtRxN(a10S8`0Bf&+MrEw<)bSI_vJp;i0gU zM_qC zG};iOn`qcypTgVPUjbTrOycRgyiJqLRF;%uZjBJHz3D57x2G*6m#+X?^^GqJWHBFT z`}fugn9-3$C+B^Q7=KqwnZ`x*&UQ^WF6!87IG|49pW=|a^2W$7GF$Fs?WD)tA|b%~ zus@GtcMKCL2V9wPc?)B>u~GJr-J%IUf>h#8pkU9-N7f{W=baq<5fh z#io?z#|O8-qE2WO58^m}hNNV<^fzo)RsgvuO?HmJw&Pd_TA4F1JC+uMqVV#P#KdZA zD;-^GR#$s?8+am|?MgEoy8TCvZVtzkigNxF+~l?tq01rFm?Rmfx+rz@7x4Q5Lm3jU zR{$MCyS}G4qub=*y%5M*H8SziS8uO9>@F(u6@YZC)y{I1d8hPO*OG*NO0ep;rY8DV zZ<1fEKkQ#&^9l&N9?2`>IOP>NU48{@Jaf=LJcm8LYxVa@0{YgMvRyI2{#J>qX&FvFV!K3`LB0O7> zj~d|8EXFgSgL5x6Q0^L&+{*CM)0?D^HzXAPX;h^VUt{DNl5L_AtcUB+|Ei*KFR_ zN|%BsQM&0*FGW~JY0>yTZkKcWb22Q$2aRj$w+2s9E6iKYW>5CSVnSvClT=c7@W6A` zXH($9%%m)pZr3?r^If&u!1=*>`2*b{{_Z$QH8GRhSHBxFqW7j{Qt~gD&Q95! z(d(~(gSlEo5((fm0SzA^>70!o(6N)@$|+Qo|kM+TDFhnyqvR8})0Gm+ytC(9(-0 zE+@1G(oO|5!vzmh#I(5V%wrTEzG^jn`@trc>5mf`izwJ4Tddh==xrX4@N2wGTF|VM z=<& zsw$P@XwtRdX6a_ReRU;anydrUw>_>!L*!0KiGMD zwZ4PnmI6X?>Yu&-Blm$5%RPkT*R9Orc$A)9=}M9VEkhj8P*=?^b_p9tm!YVg_LHin zv^Jc1z{W-UEjQJHLC3+NUcZvArj&!CIu}wlJ&IpQg1Pl@+KNw&fv+3uefg;4a1A}K z)27oER)NRde8$1yCjUpyuvjV zI|5*v4HhklD7@jmX2Jw1E@e8wd-BEQBUX4y?x>UcSP!8@|P_OO3i~Wq#3#QyYl+?v?8PPQYu(`)?KNyisD1byloq3Kj%%6R}MMHN#|8W zn?ZoPLTzXWZri=Zu^~`eZ*PNhH`_L+=I&~B%&k@ubHhQJ+)86`%wYZpFyV9P2{pevUEp{Dn|*6ikkmGXz`D=OL<}?$lGBIj$zQ7E>*_M3&zDggaQegmeom4MGdkT z@!(OWxT1=9F0NMX*jaL&r#)$7BHZA5e3U3oT>RY=J3R^azNYrKZmspzQN&D&Bz(o5 z(7vmwD)Qv%;)p5!aTwv99esT?G^)dLVhM$&5xix)yBhWa2MI5IPiraNs;!#D`qa09 z77k)O!sbms!Z1%h+yqW%NhL@e6q_pGdH*DwUC`{N(xssapVyGHe<*YfQ*Tc6yV+6_ zI4J*I8XiEcgkeSb*xPE5p5DbU58OR#fi#U?^DD7#0FAV`czyW!*;6rfxDz)$eQmhb zcoy>xnW5CS;vrzJ@#^36I^7->Q@opK+y%ZT-x|B~QsYX!6@>=yb5-w;ZZnFAXT!}#-Q-T(R zi8(5%l%JBT`tv$Zbz_NHLBmR1MU72B87S;JA&JpZ#>-&p2Nr3YD8(VjytWBp9O(~w z8?8+P6Qh)q*@kOT4{$|mvJU7oQ>)$b;KCDu*;Gc!E8t67&AH!bRQ~ufck+~X39pE& zpmM+QukO*P9JJFOhjO03Vsl}!-LS~tusNC2p66ND@JXatQbeTo6`-^o)c<=RbB&kv z)1Ls;Q(b;Kbr`G}9fy47+-U&i&81>q%qj|1c?D!nS5St1>urBxwa1XBxcVYa)RHPC ziBTgOuq27-@0md(`2tb-gVG&pPuNI*56hc9~CRensrAoNej0YEuM^|^4~mm~?T}_Sj@_*Y{}X_+N|KJQ&drM zCrw}*wud6>anj5Hj6^twws`e;r|>}V>u1iEzlK(j z1$-leNY~^bl)ou!G+MB-G-psU31?(!exR#6F(XKT>Q#h-{9*=UVfrnpN&Na+n7$_- z6%VdgR|QKeDv|qN=bw^eGTU74U$Kgs%~T6y&@mRf%Ueq=wcP?HsNR@)_kU5>Q)HPJ zwXv5We2nrPUvd3DI+~2ulSOUv{NZ`r3ix$~kO_9~PJxg>=8E4Pqwskwvg5tIg6WId zPQ3b7YYlR!#&`mHtaXt{^t1FG|z ztafGb1*v&~)ArnBtU=(=Jdq*Q^n6l1{nIS_a1zHnFnlFgwf$!e!tgIy@o$%B5-RRE zKV9ZE_-6v_JD8e;QSVU3&YWK4Cm$F5Xn$uXfoskS41?f%&mVY}6}Z#+_=pz=hgl%s z@&e|@J>Uwe%n5=&tXK;bdEy8(T zw5$7u+uV2hJbL2fR*^v`3lqM!E^s?zb-CKp(^E}9_Eb4$1Khe%HySSLV!;I}L@_i^ zo~BzGsjjOUa(i@0ZBtItkZYLNd+wR--q0=EIlOI38W-XkdMpf1sJL})!<|F0#Yy;X zl%$w>OLd?(ry01}h|XNuZ@o^r2JYK^rqC*Eb#vZ(WA!5OB_?5q_Zj`$K;4rFib;;P zau=wjCw{BeFrF^e6?I23EtpFUQCd};!qYolx7f}|s=LJw#_~AkQb01=C5}@P^2`kr zt?`cje5@sCjFQ~@mgU<9RD6wgV$aa44ZW@_?%Z&ji<4t&f z8KpODr_X>FK)I@&Ujf8h*@x(8)*7d&f%dLHt*tyklI>=h0qW7>BzDF?Wto{>Tp6y_ zn)Km#k}mmadNWk13gV*l=D;uXl<`8lme&qOGPv$DGH}Mr#TuZxfyFILR7*58`wBpb zxw-8H-SeMaH8tNl77 zpOiks2zDOkt?*3NFKHso;wyN&C}80fep8tnmQ~L8=-P>nY1frJ2HV}yagzNwtiNSf z4pR?37&t-#EsOU32s)*3_3w&laAWN+hdyZ+>Pn>+3W48D^-8#jU2Y4-p9<4#4bk z)!Z{a^@N#xu{X-Cu*cHlX-ijJ|3XN;c+|qqFijygmg&amlzG%7FP{6pl=@Jx9DWr! z)uK`+=e&C~(k50@9@UwzDAq-kSui*zl5V=q1t*7NUK2d4qzpf4430?GpvY^kg+7Sz zS8QA=H=X*4%vuak?x-wxrc=gya8J1s*g+gW+xs{v5aixU>3>G4@%DrAP|kIW4L&k- zbo8uuN5c`gPtbHemgSslER>%F1?Nx}mzb%pVJmI9`jmllo;-aR&+s3Viu~^{@6}*A zc6r^67USIfdqt4gr$Pq2D_-8>Ez&(H-ASyqtlj%3`rGe+*N_fv!EWRKx_)`D;TKz- z-u*q9s|Hi-!o5QxDo$Ci_g*08*BaGlyjK9YXT8vF!qL_OxxAvRs<^bcB<0-#hZ3#K zue+vG<{HZ#Jq~t;YINmI@L;uG@2k@}xF*5(nwKnM1E;_TK84n1)fF%O<_c%gZXqdWa$X zBf;c=`;*h5_!kWd8oWp_R7!C@IZ?}bzm>?2c)YMy4-&d{{kZ}o;nZw|;+UB{?pEj! zcHmM&C`|6+(oSI}?A;QTdGfGOx?&2pWBZ%N&}Sv)<|E_!9ABIr>Ma&iLe>U?Cb~=h zM7i5o)l;oZLk{H)?5VPf;jtH_-73_3!#kK#p|Hfr+{i6gtY zZco3TjDiQUkUt!{f0NmUnS%-O0q*MWb~@}l4QlE^dHe2O==e7$0Wjse&{~aq+&7wO zPEy9#ipJk3T{>GVzXG};_3K1wTVE=3p}pK>N=B~RCi1aeCK9c{iZTUH7bfEe^I(-( zwl1g>r_91xY!3xFnod}oOb1K5aecQP@Nl61;H)9hTq6{D-!iu-PR(&>ape%Uf8Sur z?ZoU#;)=DXnaHi2`-bI-7@95840;9h|K_eVKoxhI5X=fJ=6uO*7CZ>poHHL=qU<}O zj#*jF9wFY%p(s#>`CQwHf@jYvv1hD4X_*zA^zj@3CXok=IbElUkcm%CVculSP0wc? z=od-9ftnC0O>})QP>XS)%e4u~q_QNxBw}^M%kWi_XeWbnO9Zr+BB<)fRRVgQrK?cC zHKnf9S^lo@B>0Hd;%0*MXyCWgRd?dqp!h5=y($&h-GWdOn;7dALm1i`u4N#dcv0&$ z+$A$Gw-8(CQ$5j0;Z|>|YC9+Aub-n|fqqPdWzwi0rrvmkuP3}yYx;zThkvZXiCzxV zPTe-km+Psx!*F>pJm)i}@I@XHM`@j2$)>yiR%DgM_xGEy3i%^;hel67ZDe2hHD9lo zZbpQ5DecOtAKI5@Ov$X_n7dLldOpRraN3LR41!Y0v$mb1igVQ65|}mTI*YZ(25-yK z_oPXa`z5EE6YgqEQrK@3(UBrxMJ^M4@TPk!z4O>v4rqJ5-pFApa(nI%Iaw9WWY%Wh zBpU*}8OPmn-p`-4-f@q=zxPOalz#<$R(iYF^Y^Dj5bI8Z2RaIK5De~p$)fI=G<<&< zKV_l(N8`?Z7j9tGyrUOk*R3v|<(Y$h-Vuz8$NGZMOj@dI(t7pz1TClWmtgg8i!3xW zv5(X$Biw=Ly%QSs8#h*CdanR+%e|!x%7z?sFbUn!TNGS+km9M*vB zbpc13xCKSG88;$%h*G$6RPKIFb2vzvlJWykU`%HOL%h!H)%N4v$pxci40X1M0ti!! zyFUd7)*7{!44~MO_n1a{lsI01uqFH#b6pgz3v-VsA*EMSZzuNn$KD5Q~23o*I}Jt~pH9nvR_F z#%;I!%tRNNbZ9dP(e0f-F(}ft*~VQE8bR5T#0o&Skr5C@A>&s6QI59TM@KDqT5K%* zn=v5VlZSTK!1=Ra(7rA`Xg0kuM`dtHoJq_z6d~+zFQDW=^P1NkN6!B^&6gTpXJww* zuB%sTT;;*d8am%S*EP$(GtT1TtMw^zKl&xeGjYNM5>@EZoGkr*Y=kj+G6BjAe-+;uY>T)N(^KZdDFxD7o9}L#@=sgyf{ic- zdiJZ_L~8BW^?$vsNt_+!WIBiQwFdK+S&^8~)211&*P^DmAni1It8*x!=(uJgH;;!{ z?s3aIFhQoy9?Q`L+&dhqV78PaQ(Eg2DKYk}?{V~in>e;lW}<)>#netG_VynSkR5@j zOoSV9W~%Y|WgQo(C6eZCth{?tJN#p&IZSH!#PW{OiY{Gr)`_&}OE{|h7CRA^ z(?X|09a@d0cB&-N(=Kc$Ntmj@3(+V1)fWtKliCu6`>6JrW)3y@CEDi|fOEB-?tN%U z`U;37V7|-W@YZ8c;32};x-_-zu=@OF-K@qjZng1xs6D0$tQSTP;PEN?jyw<&|^>un?t zUyDm*<*>gPI8+mmzVtWy0(yyY zUZaU^3~oByYgL}eYxEtNXDaQn_(MafkAbbG4*Ufrbw^~QM!1t9x0hPJVGq^dus z?UJFeHJ%VEE&hzBWO2mrdlwMNm${1%CWeY1x9-O(ZuD@}oRk}M1qspLyrMt#g%*WaiAGE`11QdJLs?>Y8pEj!#U~GC(Vpge=6$(uhPnD|lDB;#EEo)H@ z|1&G`uPx}G?$RaF$T3~`TQ~U;z$~oN6M;yUOVg((~r zo@W~gq;K20C zJiIj~4vis24KmZC@j&gWAx)phk%9tLdM(@+=0OvuKC&W zCrGIKCerOdk$*V-qM9Qq9b34Nm!S!7Em<|QzlVrC6l$_UH`KG z1;%ksARK=b`dGSW$Y!bVLQdc{7SM=+(BJjx9f5?_`D4vULa6k!15671C`VGEG=@9`;DMFG%UE9}2&%r95j%M8? z>(zOJvhW(sz^}@0=!$~<`h7M&@ z^#Hx&J_$&#P!vAiVu zPddz(D?xfEqO{m;liW}yj8_l92eVZ7nUB+H?Vw9U(cezIine%Le!o#6C!H}XG82v< z83JOlDK4%6Hol>PYZ(M zYdW*Qhdb8NuUBjXCv~-t%Q(bubFLMRLr%j{EIz67YW0o#johilGhkz)JUR6P33+k5=k zx`Lly^J)Y}owo6m74=#0)FYuvI;$@h>SGR6aO189>noTbEiG^C79+{3GRwt+6EjvY55ZVSryq!~ln%b3X_S7H<2x*j5iJ{&_n`yI7mFi>iy1 z>OD|uQSA6EKswpMU3&Z3iSXgfLS`k76>*=9#P1_xBzm5*@ilAWPO}nLeg@V+Va(=~ z$zH4DE_sX%oOqViHbCZn+3m#Xo;fy&xUjT2csApTPqcwbxVynLyf4C4rn@jdG%}V@ z3o+V>i%Sb2Lwu|0^n+wfGunki)N$Qc(qKST&!*lbrD50AN!D4&BtK@r;1$5p8He^Y z#_mxVWgAx;xyq>e;vl%aP^{U`m5D59j@QQQIcUB1W=R*N6v;Q3C~nfB*Uo`*97|t7 z3#u0rmh91-CTfF|H-+U;R;aO^*}c*_XVbPsB*>^caCr&`Cod^9)K%A@QKPcV-l<#{ z2G~8MO)ZmdonkQcuH0z6%r*mhP3aX*)i0)sLEjCO=STOGGKQadb!I&;+%bDL>CWYt zb4&C7>=yO#2Isp_HCGs+WCHMLKi3796vrG&TJv8@X~Y(exkic0%aF>n{9bHM|EVI! zRHrKVky0ui2L7;PWub9DlOPX&dDZ@=DlyU0nqFU#50U5OF6fR9T3SIxJIm!3;uWfAR{tGf_R~>xAprU?+}hb2`yy?4za7tm*gj2 z2YH2RoZHeL=ue8o4J}va_lZA_`+4rF5=L@Nk6OVvyG$Hbla5+mI3B_LOfk9e9 zwbd;;Lv|yJAMK+))+KV+^G1GxenOlK#+;vc$xqQ#s{@L{MxE$jHSe%xoH zxE;-^K^-A@@x{NIj;o(PY0L7PNd5fH5nWY$BvQbuhNm zcMcP!FT*^Mq8s9zdgz0&M|y94qy=>Fay;!b->YG1W9P4 zBhFl>ID$GQGLzQ;-2UOraz?wg1$RjIv(uOcsrk?zhG%_xg2S!XixkiJu0-X}R2;Nf zKaf26uCLJWRDGKLZqt0MeKtF)0=!joc05<7p%xhaU7@K`1Ee_P(+%wv)Ab)u&%5B2fN1QKPZgnrEbdu zFL24YSKO5LyG(pA_RigaV7Nz#5H6wpXk`~(@j7k~kROiL1Mx2YYR4C(qFv{u(*1GX zE;R-~G*QA&Sb#dO&$?v-V2qexDdS!K(H;NO!2ApL=wGn*|LU=*vHaqg2pFY`X{M+CS?^^C-7V#3hTvL$iSkEKN2v z8^mA*y!n+RU!UU5-`tE0w^lzc=KVsp?yIdkD5Nmd$+lYt^ZJ^1An_n?>f%ZoT1!C~ z3v2HA_6}APph+tlDFs$dkJxa>D04%Ucz8>b3#nW}my?|o-?T?tuvX(NjfmEbE==n<1hhxK?}0=sYm ze*C8%vj&GYwhaIfMg^k|n+NFVFBCW`Fe;3FL29gl8iArrj?9!>=J}s+&c_U8!yadte(hY)0=41tOU|6{<1sN%i>}kWjd{&j3;S2z3U4x!yQ)2(8e%%( z#Pc)w-LXc%kpH)k{~nY7wv+$Exl`^h6V;3(mXB3$`CC*vQ*s+UBBN`3^W)#dk#pia z^vKocrzgxxk$V?#5a`HKX^fM8^3-6k6@}P?s|FQm*7xZ{0~4wzPjmG3lR@rs$D5|1iGPqy+K@Y`1-m{|1HFzW=NeRx(y= z$Nrmx&Cqz`s#>k5A>H~Cf1n%_Zq~Udb+H8q+;-=LhNK&@ZK*x*|KVRRq}QeY0oL4} Ao&W#< diff --git a/doc/salome/tui/SMESH/sources/application.gif b/doc/salome/tui/SMESH/sources/application.gif deleted file mode 100644 index 0b05d5c18ee88779d283508781836e2b151f606f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2602 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 diff --git a/doc/salome/tui/SMESH/sources/bg_salome.gif b/doc/salome/tui/SMESH/sources/bg_salome.gif deleted file mode 100755 index 677b70468f798fe4fbc20fac3d706e61179ff12b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17294 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 diff --git a/doc/salome/tui/SMESH/sources/myheader.html b/doc/salome/tui/SMESH/sources/myheader.html deleted file mode 100755 index 83ca543cd..000000000 --- a/doc/salome/tui/SMESH/sources/myheader.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - Main Page - - - -  -
- - - - - - -
-
-
- - - - diff --git a/doc/salome/tui/SMESH/sources/myheader_py2.html b/doc/salome/tui/SMESH/sources/myheader_py2.html deleted file mode 100755 index 372b2247f..000000000 --- a/doc/salome/tui/SMESH/sources/myheader_py2.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - Main Page - - - -  -
- - - - - - -
-
-
- - - - diff --git a/doc/salome/tui/SMESH/sources/occ.gif b/doc/salome/tui/SMESH/sources/occ.gif deleted file mode 100755 index ce017c8ae11236ef5c52eee1723657cb8b08989f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14790 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⁣iMxf-qnJ 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 diff --git a/doc/salome/tui/SMESH/sources/static/PluginMeshers.html b/doc/salome/tui/SMESH/sources/static/PluginMeshers.html deleted file mode 100755 index f860aef7b..000000000 --- a/doc/salome/tui/SMESH/sources/static/PluginMeshers.html +++ /dev/null @@ -1,344 +0,0 @@ - - - - - - - - Main Page - - - - -   -
- - - - - - - - -
-

-

-
- -
-
- -
-

How to add your own mesher

-
- -
-

(as a set of hypotheses and algorithms)

-
- -
-

to the application.

-
- -

Table of contents

- - - -

1. Introduction

- All hypotheses and algorithms are available in SMESH module via plugin mechanism. -Such approach allows easily to introduce new hypotheses and algorithms types -to the application. Also, it makes possible the customization of available -hypotheses and algorithms list for different users without recompilation -of sources.
-The goal of this document is to describe the process of creation external -mesher plugins. -

Back to the contents

-

2. Implementation steps

- -

-

2.1. Mesher plugin package

-

-Create your mesher plugin package which will contain the sources files, e.g. - MyMesherPlugin.
-
-Back -to the contents
-

2.2. List of available hypotheses and algorithms

-Create XML file to describe all algorithms and hypotheses, provided by your -plugin package (see SMESH_SRC/resources/SMESH_Meshers.xml for example).
-
<meshers-group name="MyName"
-               resources="MyResourceKey"
-               -server-lib="libMyServerLib.so"
-               gui-lib="libMyClientLib.so">
-     <hypotheses>
-          <hypothesis type="MyHypType1"
-                  -    label-id="My beautiful hypothesis name"
-                   -   icon-id="my_hypo_1_icon.png"/>
-          </hypotheses>
-     <algorithms>
-          <algorithm type="MyAlgType1"
-                -     label-id="My beautiful algorithm name"
-                 -    icon-id="my_algo_1_icon.png"/>
-          </algorithms>
-</meshers-group>
-

- -
    -
  • Attributes of <meshers-group> tag:
  • -
-
-
    -
  • value of <name> attribute is used to collect hypotheses/algoritms -in groups; you can also use this attribute for short description of your -mesher plugin.
  • -
  • value of <resources> attribute (MyResourceKey) is used to -access resources (messages and icons) from GUI (see paragraphs 2.4.2 and 2.5); in the current implementation -it should coincide with the name of plugin package; this limitation will -be eliminated in the further development.
  • -
  • value of <server-lib> attribute describes the name of your -mesher's server plugin library (See paragraph 2.3)
  • -
  • value of <gui-lib> attribute describes the name of your mesher's -client plugin library (See paragraph 2.4)
  • -
-
-
    -
  • Attributes of <hypothesis/algorithm> tag:
  • -
-
-
    -
  • value of <type> attribute is an unique name of the hypothesis/algorithm
  • -
-
    -
      -
    • It is a value of _name field of your hypothesis class (see paragraph - 2.3, implementation of constructor of StdMeshers_LocalLength -class: _name = "LocalLength")
    • -
    • It is a key to each certain hypothesis class (see paragraph 2.3, implementation of "GetHypothesisCreator()" method in -StdMeshers_i.cxx)
    • -
    • It is a key to each certain hypothesis GUI (see paragraph 2.4, implementation of "StdMeshersGUI_HypothesisCreator::CreateHypothesis()" -and "StdMeshersGUI_HypothesisCreator::EditHypothesis()" methods in StdMeshersGUI.cxx)
    • -
    • It is a key to each certain hypothesis icon in Object Browser -(see paragraph 2.4.2.1)
    • -
    -
-
-
-
    -
  • value of <label-id> attribute is displayed in the GUI in -the list of available hypotheses/algorithms ("Create Hypothesis/Algorithm" -dialog)
  • -
  • value of <icon-id> attribute is a name of icon file, which -is displayed in GUI in the list of available hypotheses/algorithms ("Create -Hypothesis/Algorithm" dialog)
  • -
-
-Note: All attributes values are accessible in your GUI via HypothesisData -class (see paragraph 2.4.1)
-
-Note: The environment variable SMESH_MeshersList contains the list of plugins -names, separated by colon (":") symbol, e.g.:
-
-     setenv SMESH_MeshersList StdMeshers:NETGENPlugin
-
-Please, pay attention that StdMeshers should also be included into this environment -variable, if you want to use standard hypotheses/algorithms, provided with -SMESH module.
-
-The SALOME automatically locates XML files, searching them in the following -directories:
-
-    ${<PLUGINNAME>_ROOT_DIR}/share/salome/resources
-    ${SALOME_<PluginName>Resources}
-    ${HOME}/.salome/resources
-    ${KERNEL_ROOT_DIR}/share/salome/resources

-
-where <PluginName> is a name of each mesher plugin package
-
-Back to the contents -

2.3. Build server plugin library <libMyServerLib.so>.

- -

2.3.1. Define interface to your hypotheses and algorithms.

- -
Example: SMESH_SRC/idl/SMESH_BasicHypothesis.idl
-         NETGENPLUGIN_SRC/src/NETGENPlugin_Algorithm.idl
-
- -

2.3.2. Implement functionality of your hypotheses -and algorithms.

- -
Inherit corresponding classes from SMESH. -

Example: SMESH_SRC/src/StdMeshers/StdMeshers_*
-         NETGENPLUGIN_SRC/src/NETGENPlugin_NETGEN_3D
-

-
- -

2.3.3.Implement interface to your hypotheses and -algorithms.

- -
Inherit corresponding classes from SMESH_I. -

Example: SMESH_SRC/src/StdMeshers_I/SMESH_*_i
-         NETGENPLUGIN_SRC/src/NETGENPlugin_NETGEN_3D_i
-

-
- -

2.3.4. Implement being exported method.

- -
GenericHypothesisCreator_i* GetHypothesisCreator (const char* -aHypType) -

<aHypType> is a value of <type> attribute in the XML-description -file

-
- -
Example: SMESH_SRC/src/StdMeshers_I/StdMeshers_i.cxx
-         NETGENPLUGIN_SRC/src/NETGENPlugin_i.cxx
-
- Back to the contents -

2.4. Build client (GUI) plugin library <libMyClientLib.so>.

- -
This step is required only if your hypotheses/algorithms need -specific GUI for their construction.
- -

2.4.1. Implement the required GUI (e.g. construction -dialog boxes).

- -
Example: SMESH_SRC/src/StdMeshersGUI/StdMeshersGUI_*Dlg -

Note: all data from XML-description files is accessible in your GUI -via HypothesisData class  (mySMESHGUI->GetHypothesisData (aHypType), -see SMESHGUI_Hypotheses.h for HypothesisData definition)

-
- -

2.4.2. Provide icons and messages for your GUI.

- -
2.4.2.1. Implement resource files
- -
MyResourceKey_icons.po and MyResourceKey_msg_en.po -

Example: SMESH_SRC/src/StdMeshersGUI/StdMeshers_*.po
-         NETGENPLUGIN_SRC/src/NETGENPlugin_icons.po
-

-Note: ICON_SMESH_TREE_HYPO_MyHypType1 is ID of icon for Object Browser for -hypothesis with type="MyHypType1"; ICON_SMESH_TREE_ALGO_MyAlgType1 is ID -of icon for Object Browser for algorithm with type="MyAlgType1".
-See paragraph 2 for definition of MyResourceKey, MyHypType1, MyAlgType1.
-

-
- -
2.4.2.2. Define environment variable SALOME_<MyResourceKey>Resources
-
It should point to the directory where resources are situated.
- -
Example: setenv SALOME_StdMeshersResources ${SMESH_ROOT_DIR}/share/salome/resources
- -

2.4.3. Implement your Hypothesis Creator and being -exported method

- -
SMESHGUI_GenericHypothesisCreator* GetHypothesisCreator -
-   (QString aHypType, QString aServerLibName, SMESHGUI* aSMESHGUI) -

<aHypType> is to pass a value of <type> attribute in XML-description -file;
-<aServerLibName> is to pass a value of <server-lib> attribute -in XML-description file.

-

Example: SMESH_SRC/src/StdMeshersGUI/StdMeshersGUI.cxx

-
- Back to the contents -

2.5. Provide icons for object browser.

- -
If your hypotheses/algorithms do not need specific GUI, but you -want to provide icons for object browser, see 2.4.2 paragrath.
-
- - -

2.6. Setup your SALOME environment.

- -

2.6.1.  Add your plugin to the LD_LIBRARY_PATH, -PYTHONPATH (and maybe PATH) environment variables.
-

-
setenv PATH <path-to-my-plugin>/bin/salome:${PATH}
-setenv LD_LIBRARY_PATH <path-to-my-plugin>/lib/salome:${LD_LIBRARY_PATH}
-Setenv PYTHONPATH <path-to-my-plugin>/lib/python2.2/site-packages/salome:${PYTHONPATH}
-
  
-
-

2.6.2.  Set mesher plugin resources environment -variable

-
 This enviroment variable is used to set meshers plugins -which should be loaded by SMESH module (see 2.4.2.2 -paragraph). Add your plugin to this variable. All plugins are separated by -colon (":") symbol.
-
-Note: If you use runSalome.py script from KERNEL package to launch SALOME, -you may not to set environment variables, because this script sets them itself. -All what you should do is to add <plugin> section to your ${HOME}/.salome/salome.launch -file for SMESH module section:
-
-...
-<modules-list>
-    ...
-    <module name="SMESH">
-        <plugin name="MyMesher"/>
-    </module>
-    ...
-</modules-list>
-...

-
-Back to the contents

- - diff --git a/doc/salome/tui/SMESH/sources/static/doxygen.css b/doc/salome/tui/SMESH/sources/static/doxygen.css deleted file mode 100755 index 0a8e93d50..000000000 --- a/doc/salome/tui/SMESH/sources/static/doxygen.css +++ /dev/null @@ -1,49 +0,0 @@ -H1 { text-align: center; } -CAPTION { font-weight: bold } -A.qindex {} -A.qindexRef {} -A.el { text-decoration: none; font-weight: bold } -A.elRef { font-weight: bold } -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 } -DIV.fragment { width: 100%; border: none; background-color: #CCCCCC } -DIV.ah { background-color: #CCCCCC; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } -TD.md { background-color: lightblue; font-weight: bold; } -TD.mdname1 { background-color: lightblue; font-weight: bold; color: #602020; } -TD.mdname { background-color: lightblue; font-weight: bold; color: #602020; width: 600px; } -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: url(sources/bg_salome.gif) } -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 -} -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/tui/SMESH/sources/static/page2.html b/doc/salome/tui/SMESH/sources/static/page2.html deleted file mode 100755 index 0e5c0ad5e..000000000 --- a/doc/salome/tui/SMESH/sources/static/page2.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - Main Page - - - - -   -
- - - - - - - - -
- - -
-
- - -
- - diff --git a/doc/salome/tui/SMESH/sources/static/tree.js b/doc/salome/tui/SMESH/sources/static/tree.js deleted file mode 100755 index b2a9953b2..000000000 --- a/doc/salome/tui/SMESH/sources/static/tree.js +++ /dev/null @@ -1,29 +0,0 @@ -foldersTree = gFld("SALOME v.2.1.0 ", "", "") - insDoc(foldersTree, gLnk("Main Page", "", "main.html")) - -aux1 = insFld(foldersTree, gFld("TUI Reference Guide", "")) - aux2 = insFld(aux1, gFld("Modules", "")) - aux3 = insFld(aux2, gFld("SALOME SMESH module", "")) -/*! insDoc(aux3, gLnk("Overview", "", "overview_SMESH.html"))*/ - aux4 = insFld(aux3, gFld("Packages", "")) - insDoc(aux4, gLnk("SMESH", "", "namespaceSMESH.html")) -/*! insDoc(aux3, gLnk("Examples", "", "examples_SMESH.html")) -*/ - - insDoc(aux1, gLnk("Data Structures", "", "annotated.html")) - insDoc(aux1, gLnk("Class Hierarchy", "", "hierarchy.html")) - insDoc(aux1, gLnk("Class methods list", "", "functions.html")) - insDoc(aux1, gLnk("Namespace Members", "", "namespacemembers.html")) - insDoc(aux1, gLnk("File List", "", "files.html")) - -aux1 = insFld(foldersTree, gFld("IDL/Python mapping", "")) - insDoc(aux1, gLnk("Mapping of SMESH IDL definitions to Python language", "", "page2.html")) - -aux1 = insFld(foldersTree, gFld("Python Commands", "", "meshpy_doc/main.html")) - insDoc(aux1, gLnk("Package List", "", "meshpy_doc/namespaces.html")) - insDoc(aux1, gLnk("Data Structures", "", "meshpy_doc/annotated.html")) - insDoc(aux1, gLnk("Namespace Members", "", "meshpy_doc/namespacemembers.html")) - insDoc(aux1, gLnk("File List", "", "meshpy_doc/files.html")) - -aux1 = insFld(foldersTree, gFld("Adding meshers in SMESH", "")) - insDoc(aux1, gLnk("Using Plugin mechanism in SMESH", "", "PluginMeshers.html")) diff --git a/doc/salome/tui/SMESH/sources/static/treeview.js b/doc/salome/tui/SMESH/sources/static/treeview.js deleted file mode 100644 index 55eb43d07..000000000 --- a/doc/salome/tui/SMESH/sources/static/treeview.js +++ /dev/null @@ -1,505 +0,0 @@ -//**************************************************************** -// You are free to copy the "Folder-Tree" script as long as you -// keep this copyright notice: -// Script found in: http://www.geocities.com/Paris/LeftBank/2178/ -// Author: Marcelino Alves Martins (martins@hks.com) December '97. -//**************************************************************** - -//Log of changes: -// 17 Feb 98 - Fix initialization flashing problem with Netscape -// -// 27 Jan 98 - Root folder starts open; support for USETEXTLINKS; -// make the ftien4 a js file -// -// DvH: Dec 2000 - Made some minor changes to support external -// references - -// Definition of class Folder -// ***************************************************************** - -function Folder(folderDescription, tagName, hreference) //constructor -{ - //constant data - this.desc = folderDescription - this.tagName = tagName - this.hreference = hreference - this.id = -1 - this.navObj = 0 - this.iconImg = 0 - this.nodeImg = 0 - this.isLastNode = 0 - - //dynamic data - this.isOpen = true - this.iconSrc = "ftv2folderopen.png" - this.children = new Array - this.nChildren = 0 - - //methods - this.initialize = initializeFolder - this.setState = setStateFolder - this.addChild = addChild - this.createIndex = createEntryIndex - this.hide = hideFolder - this.display = display - this.renderOb = drawFolder - this.totalHeight = totalHeight - this.subEntries = folderSubEntries - this.outputLink = outputFolderLink -} - -function setStateFolder(isOpen) -{ - var subEntries - var totalHeight - var fIt = 0 - var i=0 - - if (isOpen == this.isOpen) - return - - if (browserVersion == 2) - { - totalHeight = 0 - for (i=0; i < this.nChildren; i++) - totalHeight = totalHeight + this.children[i].navObj.clip.height - subEntries = this.subEntries() - if (this.isOpen) - totalHeight = 0 - totalHeight - for (fIt = this.id + subEntries + 1; fIt < nEntries; fIt++) - indexOfEntries[fIt].navObj.moveBy(0, totalHeight) - } - this.isOpen = isOpen - propagateChangesInState(this) -} - -function propagateChangesInState(folder) -{ - var i=0 - - if (folder.isOpen) - { - if (folder.nodeImg) - if (folder.isLastNode) - folder.nodeImg.src = "ftv2mlastnode.png" - else - folder.nodeImg.src = "ftv2mnode.png" - folder.iconImg.src = "ftv2folderopen.png" - for (i=0; i 0) - auxEv = "" - else - auxEv = "" - - if (level>0) - if (lastNode) //the last 'brother' in the children array - { - this.renderOb(leftSide + auxEv + "") -// leftSide = leftSide + "" - this.isLastNode = 1 - } - else - { - this.renderOb(leftSide + auxEv + "") - leftSide = leftSide + "" - this.isLastNode = 0 - } - else - this.renderOb("") - - if (nc > 0) - { - level = level + 1 - for (i=0 ; i < this.nChildren; i++) - { - if (i == this.nChildren-1) - this.children[i].initialize(level, 1, leftSide) - else - this.children[i].initialize(level, 0, leftSide) - } - } -} - -function drawFolder(leftSide) -{ - if (browserVersion == 2) { - if (!doc.yPos) - doc.yPos=8 - doc.write("") - } - if (browserVersion == 3) - { - doc.write("
") - } - - doc.write("\n") - doc.write("\n\n") - doc.write("\n
") - doc.write(leftSide) - this.outputLink() - doc.write("") - doc.write("") - if (USETEXTLINKS) - { - this.outputLink() - doc.write(this.desc + "") - } - else - doc.write(this.desc) - -/*! - if (this.tagName!="") - { - doc.write(" [external]") - } -*/ - doc.write("
\n") - - if (browserVersion == 2) { - doc.write("") - } - if (browserVersion == 3) { - doc.write("
") - } - - if (browserVersion == 1) { - this.navObj = doc.all["folder"+this.id] - this.iconImg = doc.all["folderIcon"+this.id] - this.nodeImg = doc.all["nodeIcon"+this.id] - } else if (browserVersion == 2) { - this.navObj = doc.layers["folder"+this.id] - this.iconImg = this.navObj.document.images["folderIcon"+this.id] - this.nodeImg = this.navObj.document.images["nodeIcon"+this.id] - doc.yPos=doc.yPos+this.navObj.clip.height - } else if (browserVersion == 3) { - this.navObj = doc.getElementById("folder"+this.id) - this.iconImg = doc.images.namedItem("folderIcon"+this.id) - this.nodeImg = doc.images.namedItem("nodeIcon"+this.id) - } -} - -function outputFolderLink() -{ - if (this.hreference) - { - doc.write(" 0) - doc.write("onClick='javascript:clickOnFolder("+this.id+")'") - doc.write(">") - } - else - doc.write("") -} - -function addChild(childNode) -{ - this.children[this.nChildren] = childNode - this.nChildren++ - return childNode -} - -function folderSubEntries() -{ - var i = 0 - var se = this.nChildren - - for (i=0; i < this.nChildren; i++){ - if (this.children[i].children) //is a folder - se = se + this.children[i].subEntries() - } - - return se -} - - -// Definition of class Item (a document or link inside a Folder) -// ************************************************************* - -function Item(itemDescription, tagName, itemLink) // Constructor -{ - // constant data - this.desc = itemDescription - this.tagName = tagName - this.link = itemLink - this.id = -1 //initialized in initalize() - this.navObj = 0 //initialized in render() - this.iconImg = 0 //initialized in render() - this.iconSrc = "ftv2doc.png" - - // methods - this.initialize = initializeItem - this.createIndex = createEntryIndex - this.hide = hideItem - this.display = display - this.renderOb = drawItem - this.totalHeight = totalHeight -} - -function hideItem() -{ - if (browserVersion == 1 || browserVersion == 3) { - if (this.navObj.style.display == "none") - return - this.navObj.style.display = "none" - } else { - if (this.navObj.visibility == "hidden") - return - this.navObj.visibility = "hidden" - } -} - -function initializeItem(level, lastNode, leftSide) -{ - this.createIndex() - - if (level>0) - if (lastNode) //the last 'brother' in the children array - { - this.renderOb(leftSide + "") - leftSide = leftSide + "" - } - else - { - this.renderOb(leftSide + "") - leftSide = leftSide + "" - } - else - this.renderOb("") -} - -function drawItem(leftSide) -{ - if (browserVersion == 2) - doc.write("") - if (browserVersion == 3) - doc.write("
") - - doc.write("\n\n") - doc.write("\n
") - doc.write(leftSide) - if (this.link!="") - { - doc.write("") - } - doc.write("") - if (this.link!="") - { - doc.write("") - } - doc.write("") - if (USETEXTLINKS && this.link!="") - doc.write("" + this.desc + "") - else - doc.write(this.desc) -/*! - if (this.tagName!="") - { - doc.write(" [external]"); - } -*/ - doc.write("\n
\n") - - if (browserVersion == 2) - doc.write("") - if (browserVersion == 3) - doc.write("
") - - if (browserVersion == 1) { - this.navObj = doc.all["item"+this.id] - this.iconImg = doc.all["itemIcon"+this.id] - } else if (browserVersion == 2) { - this.navObj = doc.layers["item"+this.id] - this.iconImg = this.navObj.document.images["itemIcon"+this.id] - doc.yPos=doc.yPos+this.navObj.clip.height - } else if (browserVersion == 3) { - this.navObj = doc.getElementById("item"+this.id) - this.iconImg = doc.images.namedItem("itemIcon"+this.id) - } -} - - -// Methods common to both objects (pseudo-inheritance) -// ******************************************************** - -function display() -{ - if (browserVersion == 1 || browserVersion == 3) - this.navObj.style.display = "block" - else - this.navObj.visibility = "show" -} - -function createEntryIndex() -{ - this.id = nEntries - indexOfEntries[nEntries] = this - nEntries++ -} - -// total height of subEntries open -function totalHeight() //used with browserVersion == 2 -{ - var h = this.navObj.clip.height - var i = 0 - - if (this.isOpen) //is a folder and _is_ open - for (i=0 ; i < this.nChildren; i++) - h = h + this.children[i].totalHeight() - - return h -} - - -// Events -// ********************************************************* - -function clickOnFolder(folderId) -{ - var clicked = indexOfEntries[folderId] - - if (!clicked.isOpen) - clickOnNode(folderId) - - return - - if (clicked.isSelected) - return -} - -function clickOnNode(folderId) -{ - var clickedFolder = 0 - var state = 0 - - clickedFolder = indexOfEntries[folderId] - state = clickedFolder.isOpen - - clickedFolder.setState(!state) //open<->close -} - -function initializeDocument() -{ - doc = document; - if (doc.all) - browserVersion = 1 //IE4 - else - if (doc.layers) - browserVersion = 2 //NS4 - else if(navigator.userAgent.toLowerCase().indexOf('gecko') != -1) - browserVersion = 3 //mozilla - else - browserVersion = 0 //other - - foldersTree.initialize(0, 1, "") - foldersTree.display() - - if (browserVersion > 0) - { - if(browserVersion != 3) - doc.write(" ") - - // close the whole tree - clickOnNode(0) - // open the root folder - clickOnNode(0) - } -} - -// Auxiliary Functions for Folder-Treee backward compatibility -// ********************************************************* - -function gFld(description, tagName, hreference) -{ - folder = new Folder(description, tagName, hreference) - return folder -} - -function gLnk(description, tagName, linkData) -{ - fullLink = "" - - if (linkData!="") - { - fullLink = "'"+linkData+"' target=\"basefrm\"" - } - - linkItem = new Item(description, tagName, fullLink) - return linkItem -} - -function insFld(parentFolder, childFolder) -{ - return parentFolder.addChild(childFolder) -} - -function insDoc(parentFolder, document) -{ - parentFolder.addChild(document) -} - -// Global variables -// **************** - -USETEXTLINKS = 1 -indexOfEntries = new Array -nEntries = 0 -doc = document -browserVersion = 0 -selectedFolder=0 diff --git a/idl/Makefile.in b/idl/Makefile.in deleted file mode 100644 index 8bc4e84d3..000000000 --- a/idl/Makefile.in +++ /dev/null @@ -1,74 +0,0 @@ -# -# generate dependencies for idl file : -# - -# source path -top_srcdir=@top_srcdir@ -top_builddir=.. -srcdir=@srcdir@ -VPATH=.:${KERNEL_ROOT_DIR}/idl/salome:${GEOM_ROOT_DIR}/idl/salome:${MED_ROOT_DIR}/idl/salome - -@COMMENCE@ - -IDL_FILES = \ - SMESH_Gen.idl \ - SMESH_Mesh.idl \ - SMESH_Hypothesis.idl \ - SMESH_BasicHypothesis.idl \ - SMESH_Filter.idl \ - SMESH_Group.idl \ - SMESH_Pattern.idl - -PY_CLIENT_IDL = $(IDL_FILES) - -# we copy all idl file in $(top_builddir)/idl -inc: $(top_builddir)/idl/salome $(IDL_FILES:%=$(top_builddir)/idl/salome/%) - -$(top_builddir)/idl/salome: - mkdir $@ - -$(IDL_FILES:%=$(top_builddir)/idl/salome/%):$(IDL_FILES:%=$(top_srcdir)/idl/%) -# $(CP) $< $@ - cp -f $^ $(top_builddir)/idl/salome - - -lib: pyidl - -PYTHON_BUILD_SITE=$(top_builddir)/lib/python$(PYTHON_VERSION)/site-packages/@PACKAGE@ - -pyidl: $(PYTHON_BUILD_SITE) $(IDL_FILES:%.idl=$(PYTHON_BUILD_SITE)/%_idl.py) - -$(PYTHON_BUILD_SITE): - $(INSTALL) -d $@ - -$(PYTHON_BUILD_SITE)/%_idl.py: $(top_builddir)/idl/salome/%.idl - $(OMNIORB_IDL) $(OMNIORB_IDLPYFLAGS) -C$(PYTHON_BUILD_SITE) $< - - -# install python client (generated from idl file -install: install-pyidl install-idl - -# create directory $(idldir) and copy idl files into it -install-idl: $(IDL_FILES:%=$(top_builddir)/idl/salome/%) - $(INSTALL) -d $(idldir) - $(INSTALL_DATA) $^ $(idldir) - - -install-pyidl: $(IDL_FILES:%=$(top_builddir)/idl/salome/%) - $(INSTALL) -d $(PYTHON_SITE_INSTALL) - @for file in $^ dummy; do \ - if [ $$file != "dummy" ]; then \ - $(OMNIORB_IDL) $(OMNIORB_IDLPYFLAGS) -C$(PYTHON_SITE_INSTALL) $$file ; \ - fi ; \ - done ; - -#@ CONCLUDE @ - -cleandep: - -$(RM) .dep* - -distclean: - -$(RM) *.py - -$(RM) $(IDL_FILES:%=$(top_builddir)/idl/salome/%) - -$(RM) Makefile - diff --git a/idl/SMESH_BasicHypothesis.idl b/idl/SMESH_BasicHypothesis.idl deleted file mode 100644 index 78ca9b77e..000000000 --- a/idl/SMESH_BasicHypothesis.idl +++ /dev/null @@ -1,284 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_BasicHypothesis.idl -// Author : Paul RASCLE, EDF -// $Header$ - -#ifndef _SMESH_BASICHYPOTHESIS_IDL_ -#define _SMESH_BASICHYPOTHESIS_IDL_ - -#include "SALOME_Exception.idl" -#include "SMESH_Hypothesis.idl" -#include "SMESH_Mesh.idl" - - -/*! - * StdMeshers: interfaces to standard hypotheses and algorithms - */ -module StdMeshers -{ - /*! - * StdMeshers_LocalLength: interface of "Average length" hypothesis - */ - interface StdMeshers_LocalLength : SMESH::SMESH_Hypothesis - { - /*! - * Sets parameter value - */ - void SetLength(in double length) - raises (SALOME::SALOME_Exception); - - /*! - * Returns parameter value - */ - double GetLength(); - }; - - /*! - * StdMeshers_NumberOfSegments: interface of "Nb. Segments" hypothesis - */ - interface StdMeshers_NumberOfSegments : SMESH::SMESH_Hypothesis - { - /*! - * Sets parameter value - */ - void SetNumberOfSegments(in long segmentsNumber) - raises (SALOME::SALOME_Exception); - - /*! - * Returns parameter value - */ - long GetNumberOfSegments(); - - /*! - * Sets parameter value - */ - void SetDistrType(in long typ) - raises (SALOME::SALOME_Exception); - - /*! - * Returns parameter value - */ - long GetDistrType(); - - /*! - * Sets parameter value - */ - void SetScaleFactor(in double scaleFactor) - raises (SALOME::SALOME_Exception); - - /*! - * Returns parameter value - */ - double GetScaleFactor() - raises (SALOME::SALOME_Exception); - - /*! - * Sets parameter value for distribution DT_TabFunc - */ - void SetTableFunction(in SMESH::double_array table) - raises (SALOME::SALOME_Exception); - - /*! - * Returns
parameter value for distribution DT_TabFunc - */ - SMESH::double_array GetTableFunction() - raises (SALOME::SALOME_Exception); - - /*! - * Sets parameter value for distribution DT_ExprFunc - */ - void SetExpressionFunction(in string expr) - raises (SALOME::SALOME_Exception); - - /*! - * Returns parameter value for distribution DT_ExprFunc - */ - string GetExpressionFunction() - raises (SALOME::SALOME_Exception); - - /*! - * Sets parameter value for functional distributions - */ - void SetExponentMode(in boolean isExponent) - raises (SALOME::SALOME_Exception); - - /*! - * Returns parameter value for functional distributions - */ - boolean IsExponentMode() - raises (SALOME::SALOME_Exception); - }; - - /*! - * StdMeshers_Arithmetic1D: interface of "Arithmetic 1D" hypothesis - */ - interface StdMeshers_Arithmetic1D : SMESH::SMESH_Hypothesis - { - /*! - * Sets or parameter value - */ - void SetLength(in double length, in boolean isStartLength) - raises (SALOME::SALOME_Exception); - - /*! - * Returns or parameter value - */ - double GetLength(in boolean isStartLength); - }; - - /*! - * StdMeshers_MaxElementArea: interface of "Max. Triangle Area" hypothesis - */ - interface StdMeshers_MaxElementArea : SMESH::SMESH_Hypothesis - { - /*! - * Sets parameter value - */ - void SetMaxElementArea(in double area) - raises (SALOME::SALOME_Exception); - - /*! - * Returns parameter value - */ - double GetMaxElementArea(); - }; - - /*! - * StdMeshers_LengthFromEdges: interface of "Length From Edges (2D Hyp. for Triangulator)" hypothesis - */ - interface StdMeshers_LengthFromEdges : SMESH::SMESH_Hypothesis - { - /*! - * Sets parameter value - */ - void SetMode(in long mode) - raises (SALOME::SALOME_Exception); - - /*! - * Returns parameter value - */ - long GetMode(); - }; - - /*! - * StdMeshers_StartEndLength: interface of "Start and End Length" hypothesis - */ - interface StdMeshers_StartEndLength : SMESH::SMESH_Hypothesis - { - /*! - * Sets or parameter value - */ - void SetLength(in double length, in boolean isStartLength) - raises (SALOME::SALOME_Exception); - - /*! - * Returns or parameter value - */ - double GetLength(in boolean isStartLength); - }; - - - /*! - * StdMeshers_Deflection1D: interface of "Deflection 1D" hypothesis - */ - interface StdMeshers_Deflection1D : SMESH::SMESH_Hypothesis - { - /*! - * Sets parameter value - */ - void SetDeflection(in double deflection) - raises (SALOME::SALOME_Exception); - - /*! - * Returns parameter value - */ - double GetDeflection(); - }; - - - /*! - * StdMeshers_MaxElementVolume: interface of "Max. Hexahedron or Tetrahedron Volume" hypothesis - */ - interface StdMeshers_MaxElementVolume : SMESH::SMESH_Hypothesis - { - /*! - * Sets parameter value - */ - void SetMaxElementVolume(in double volume) - raises (SALOME::SALOME_Exception); - - /*! - * Returns parameter value - */ - double GetMaxElementVolume(); - }; - - /*! - * StdMeshers_NotConformAllowed: interface of "Not Conform Mesh Allowed" hypothesis. - * Presence of this hypothesis permits to algorithm generation of not conform mesh. - */ - interface StdMeshers_NotConformAllowed : SMESH::SMESH_Hypothesis - { - }; - - /*! - * StdMeshers_Propagation: interface of "Propagation" hypothesis. - * Presence of this hypothesis on any edge propagates any other 1D - * hypothesis from this edge on all edges, opposite to it. - * It concerns only edges of quadrangle faces. - */ - interface StdMeshers_Propagation : SMESH::SMESH_Hypothesis - { - }; - - /*! - * StdMeshers_Regular_1D: interface of "Wire discretisation" algorithm - */ - interface StdMeshers_Regular_1D : SMESH::SMESH_1D_Algo - { - }; - - /*! - * StdMeshers_MEFISTO_2D: interface of "Triangle (Mefisto)" algorithm - */ - interface StdMeshers_MEFISTO_2D : SMESH::SMESH_2D_Algo - { - }; - - /*! - * StdMeshers_Quadrangle_2D: interface of "Quadrangle (Mapping)" algorithm - */ - interface StdMeshers_Quadrangle_2D : SMESH::SMESH_2D_Algo - { - }; - - /*! - * StdMeshers_Hexa_3D: interface of "Hexahedron (i,j,k)" algorithm - */ - interface StdMeshers_Hexa_3D : SMESH::SMESH_3D_Algo - { - }; - -}; - -#endif diff --git a/idl/SMESH_Filter.idl b/idl/SMESH_Filter.idl deleted file mode 100644 index 929afb67a..000000000 --- a/idl/SMESH_Filter.idl +++ /dev/null @@ -1,435 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Filter.idl -// Author : Alexey Petrov, OCC - -#ifndef _SMESH_FILTER_IDL_ -#define _SMESH_FILTER_IDL_ - -#include "SALOME_Exception.idl" -#include "SALOME_GenericObj.idl" -#include "SMESH_Mesh.idl" - - -module GEOM -{ - interface GEOM_Object; -}; - - -module SMESH -{ - - /*! - * Enumeration of functor types - */ - enum FunctorType - { - FT_AspectRatio, - FT_AspectRatio3D, - FT_Warping, - FT_MinimumAngle, - FT_Taper, - FT_Skew, - FT_Area, - FT_FreeBorders, - FT_FreeEdges, - FT_MultiConnection, - FT_MultiConnection2D, - FT_Length, - FT_Length2D, - FT_BelongToGeom, - FT_BelongToPlane, - FT_BelongToCylinder, - FT_LyingOnGeom, - FT_RangeOfIds, - FT_BadOrientedVolume, - FT_LessThan, - FT_MoreThan, - FT_EqualTo, - FT_LogicalNOT, - FT_LogicalAND, - FT_LogicalOR, - FT_Undefined - }; - - /*! - * Base interface for all functors ( i.e. numerical functors and predicates ) - */ - interface Functor: SALOME::GenericObj - { - void SetMesh( in SMESH_Mesh theMesh ); - FunctorType GetFunctorType(); - ElementType GetElementType(); - }; - - - - /*! - * Numerical functors are intended for calculating value by Id of mesh entity - */ - interface NumericalFunctor: Functor - { - double GetValue( in long theElementId ); - - /*! - * Set precision for calculation. It is a position after point which is - * used to functor value after calculation. - */ - void SetPrecision( in long thePrecision ); - long GetPrecision(); - }; - interface MinimumAngle : NumericalFunctor{}; - interface AspectRatio : NumericalFunctor{}; - interface AspectRatio3D : NumericalFunctor{}; - interface Warping : NumericalFunctor{}; - interface Taper : NumericalFunctor{}; - interface Skew : NumericalFunctor{}; - interface Area : NumericalFunctor{}; - interface Length : NumericalFunctor{}; - interface Length2D : NumericalFunctor - { - struct Value - { - double myLength; - long myPnt1, myPnt2; - }; - typedef sequence Values; - Values GetValues(); - }; - interface MultiConnection : NumericalFunctor{}; - interface MultiConnection2D : NumericalFunctor - { - struct Value - { - long myNbConnects; - long myPnt1, myPnt2; - }; - - typedef sequence Values; - Values GetValues(); - }; - - /*! - * Predicates are intended for verification of criteria, - * must return bool value by mesh id - */ - interface Predicate: Functor - { - boolean IsSatisfy( in long thEntityId ); - }; - - /*! - * Logical functor (predicate) "Bad Oriented Volume". - * Verify whether a mesh volume is incorrectly oriented from - * the point of view of MED convention - */ - interface BadOrientedVolume: Predicate {}; - - /*! - * Logical functor (predicate) "Belong To Geometry". - * Verify whether mesh element or node belong to pointed Geom Object - */ - interface BelongToGeom: Predicate - { - void SetGeom( in GEOM::GEOM_Object theGeom ); - void SetElementType( in ElementType theType ); - - void SetShapeName( in string theName ); - string GetShapeName(); - }; - - /*! - * Logical functor (predicate) "Belong To Surface". - * Base interface for "belong to plane" and "belong to cylinder interfaces" - */ - interface BelongToSurface: Predicate - { - void SetTolerance( in double theToler ); - double GetTolerance(); - void SetShapeName( in string theName, in ElementType theType ); - string GetShapeName(); - }; - - - /*! - * Logical functor (predicate) "Belong To Plane". - * Verify whether mesh element lie in pointed Geom planar object - */ - interface BelongToPlane: BelongToSurface - { - void SetPlane( in GEOM::GEOM_Object theGeom, in ElementType theType ); - }; - - /*! - * Logical functor (predicate) "Belong To Culinder". - * Verify whether mesh element lie in pointed Geom cylindrical object - */ - interface BelongToCylinder: BelongToSurface - { - void SetCylinder( in GEOM::GEOM_Object theGeom, in ElementType theType ); - }; - - /*! - * Logical functor (predicate) "Lying On Geometry". - * Verify whether mesh element or node lying or partially lying on the pointed Geom Object - */ - interface LyingOnGeom: Predicate - { - void SetGeom( in GEOM::GEOM_Object theGeom ); - void SetElementType( in ElementType theType ); - - void SetShapeName( in string theName ); - string GetShapeName(); - }; - - /*! - * Logical functor (predicate) "Free borders". - * Verify whether 1D mesh element is free ( i.e. connected to one face only ) - */ - interface FreeBorders: Predicate{}; - - /*! - * Logical functor (predicate) "Free edges". - * Verify whether 2D mesh element has free edges( i.e. edges connected to one face only ) - */ - interface FreeEdges: Predicate - - { - struct Border - { - long myElemId; - long myPnt1, myPnt2; - }; - typedef sequence Borders; - Borders GetBorders(); - }; - - - /*! - * Abstract logical functor (predicate) "RangeOfIds". - * Verify whether an Entity Id belongs to defined sequence of id's - */ - interface RangeOfIds: Predicate - { - void SetRange( in long_array theIds ); - boolean SetRangeStr( in string theRange ); - string GetRangeStr(); - - void SetElementType( in ElementType theType ); - }; - - /*! - * Comparator. Predicate for compare value calculated - * by numerical functor with threshold value - */ - interface Comparator: Predicate - { - void SetMargin( in double theValue ); - void SetNumFunctor( in NumericalFunctor theFunct ); - double GetMargin(); - }; - interface LessThan: Comparator{}; - interface MoreThan: Comparator{}; - interface EqualTo : Comparator - { - void SetTolerance( in double theToler ); - double GetTolerance(); - }; - - /*! - * Logical predicates are intended for compose predicates using boolean operations - */ - interface Logical: Predicate{}; - - interface LogicalNOT: Logical - { - void SetPredicate(in Predicate thePredicate); - }; - - interface LogicalBinary: Logical -{ - void SetPredicate1( in Predicate thePredicate ); - void SetPredicate2( in Predicate thePredicate ); - }; - - interface LogicalAND: LogicalBinary{}; - interface LogicalOR : LogicalBinary{}; - - /*! - * Filter - */ - interface Filter: SALOME::GenericObj, SMESH_IDSource - { - /*! - * Structure containing information about one criterion - * Type - FT_Taper, FT_Skew ... - * Compare - FT_LessThan, FT_MoreThan, FT_EqualTo - * Threshold - threshold value - * UnaryOp - unary logical operation: FT_LogicalNOT or FT_Undefined - * BinaryOp - binary logical operation FT_LogicalAND, FT_LogicalOR or - * (FT_Undefined must be for the last criterion) - * ThresholdStr - Threshold value defined as string. Used for: - * 1. Diaposon of identifiers. Example: "1,2,3,5-10,12,27-29" - * 2. BelongToGeom predicate for storing name of shape - * Tolerance - Tolerance is used for comparators (EqualTo comparision) and for - * "Belong to plane" and "Belong to cylinder" predicates - * TypeOfElement - type of element SMESH::NODE, SMESH::FACE (used by BelongToGeom predicate only) - * Precision - Precision of numerical functors - */ - struct Criterion - { - long Type; - long Compare; - double Threshold; - string ThresholdStr; - long UnaryOp; - long BinaryOp; - double Tolerance; - ElementType TypeOfElement; - long Precision; - }; - - typedef sequence Criteria; - - void SetPredicate( in Predicate thePredicate ); - void SetMesh( in SMESH_Mesh theMesh ); - - long_array GetElementsId( in SMESH_Mesh theMesh ); - ElementType GetElementType(); - Predicate GetPredicate(); - - boolean GetCriteria( out Criteria theCriteria ); - boolean SetCriteria( in Criteria theCriteria ); - }; - - - /*! - * Interface for working with library of filters - */ - interface FilterLibrary : SALOME::GenericObj - { - /*! - * Copy filter from library by name (new filter is created) - */ - Filter Copy( in string theFilterName ); - - /*! - * Methods for editing library - */ - boolean Add ( in string theFilterName, in Filter theFilter ); - boolean AddEmpty( in string theFilterName, in ElementType theType ); // add empty filter - boolean Delete ( in string theFilterName ); - boolean Replace ( in string theFilterName, in string theNewName, in Filter theFilter ); - - /*! - * Save library on disk - */ - boolean Save(); - boolean SaveAs( in string aFileName ); - - /*! - * Query methods - */ - boolean IsPresent( in string aFilterName ); - long NbFilters( in ElementType aType ); - string_array GetNames( in ElementType aType ); - string_array GetAllNames(); - void SetFileName( in string aFilterName ); - string GetFileName(); - }; - - - /*! - * Interface of Filter manager - */ - interface FilterManager: SALOME::GenericObj - { - /*! - * Create numerical functors - */ - MinimumAngle CreateMinimumAngle(); - AspectRatio CreateAspectRatio(); - AspectRatio3D CreateAspectRatio3D(); - Warping CreateWarping(); - Taper CreateTaper(); - Skew CreateSkew(); - Area CreateArea(); - Length CreateLength(); - Length2D CreateLength2D(); - MultiConnection CreateMultiConnection(); - MultiConnection2D CreateMultiConnection2D(); - - /*! - * Create logical functors ( predicates ) - */ - BelongToGeom CreateBelongToGeom(); - BelongToPlane CreateBelongToPlane(); - BelongToCylinder CreateBelongToCylinder(); - - LyingOnGeom CreateLyingOnGeom(); - - FreeBorders CreateFreeBorders(); - FreeEdges CreateFreeEdges(); - - RangeOfIds CreateRangeOfIds(); - - BadOrientedVolume CreateBadOrientedVolume(); - - /*! - * Create comparators ( predicates ) - */ - LessThan CreateLessThan(); - MoreThan CreateMoreThan(); - EqualTo CreateEqualTo(); - - /*! - * Create boolean operations ( predicates ) - */ - LogicalNOT CreateLogicalNOT(); - LogicalAND CreateLogicalAND(); - LogicalOR CreateLogicalOR(); - - /*! - * Create filter - */ - Filter CreateFilter(); - - /*! - * Load filter library. If libary does not exist it is created - */ - FilterLibrary LoadLibrary( in string aFileName ); - - /*! - * Create new library - */ - FilterLibrary CreateLibrary(); - - /*! - * Delete library - */ - boolean DeleteLibrary( in string aFileName ); - }; -}; - - -#endif diff --git a/idl/SMESH_Gen.idl b/idl/SMESH_Gen.idl deleted file mode 100644 index 32486e5aa..000000000 --- a/idl/SMESH_Gen.idl +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Gen.idl -// Author : Paul RASCLE, EDF -// $Header$ - -#ifndef _SMESH_GEN_IDL_ -#define _SMESH_GEN_IDL_ - -#include "SALOME_Exception.idl" -#include "SALOME_Component.idl" -#include "SALOMEDS.idl" - -#include "GEOM_Gen.idl" - -#include "SMESH_Mesh.idl" -#include "SMESH_Hypothesis.idl" - -module SMESH -{ - typedef sequence object_array; - typedef sequence mesh_array; - - interface FilterManager; - interface SMESH_Pattern; - - interface SMESH_Gen : Engines::Component, SALOMEDS::Driver - { - - FilterManager CreateFilterManager(); - - SMESH_Pattern GetPattern(); - - /*! - Set the current study - */ - void SetCurrentStudy( in SALOMEDS::Study theStudy ); - - /*! - Get the current study - */ - SALOMEDS::Study GetCurrentStudy(); - - /*! - * Create a hypothesis that can be shared by differents parts of the mesh. - * An hypothesis is either: - * - a method used to generate or modify a part of the mesh (algorithm). - * - a parameter or a law used by an algorithm. - * Algorithms are 1D, 2D or 3D. - */ - SMESH_Hypothesis CreateHypothesis( in string theHypName, - in string theLibName ) - raises ( SALOME::SALOME_Exception ); - - /*! - * Create a Mesh object, given a geometry shape. - * Mesh is created empty (no points, no elements). - * Shape is explored via GEOM_Client to create local copies. - * of TopoDS_Shapes and bind CORBA references of shape & subshapes - * with TopoDS_Shapes - */ - SMESH_Mesh CreateMesh( in GEOM::GEOM_Object theObject ) - raises ( SALOME::SALOME_Exception ); - - /*! - * Create Mesh object importing data from given UNV file - */ - SMESH_Mesh CreateMeshesFromUNV( in string theFileName ) - raises ( SALOME::SALOME_Exception ); - - /*! - * Create Mesh object(s) importing data from given MED file - */ - mesh_array CreateMeshesFromMED( in string theFileName, - out SMESH::DriverMED_ReadStatus theStatus ) - raises ( SALOME::SALOME_Exception ); - - /*! - * Create Mesh object importing data from given STL file - */ - SMESH_Mesh CreateMeshesFromSTL( in string theFileName ) - raises ( SALOME::SALOME_Exception ); - - /*! - * Create a Mesh object, without a geometry shape reference - */ -// SMESH_Mesh NewEmpty() -// raises ( SALOME::SALOME_Exception ); - - /*! - * Mesh a subShape. - * First, verify list of hypothesis associated with the subShape, - * return NOK if hypothesis are not sufficient - */ - boolean Compute( in SMESH_Mesh theMesh, - in GEOM::GEOM_Object theSubObject ) - raises ( SALOME::SALOME_Exception ); - - /*! - * - */ - - boolean IsReadyToCompute( in SMESH_Mesh theMesh, - in GEOM::GEOM_Object theSubObject ) - raises ( SALOME::SALOME_Exception ); - - /*! - * - */ - long_array GetSubShapesId( in GEOM::GEOM_Object theMainObject, - in object_array theListOfSubObjects ) - raises ( SALOME::SALOME_Exception ); - - /*! - * - */ - // long_array GetSubMeshesState( in object_array theListOfSubShape ) - // raises ( SALOME::SALOME_Exception ); - - }; - -}; - -#endif diff --git a/idl/SMESH_Group.idl b/idl/SMESH_Group.idl deleted file mode 100644 index 37657674b..000000000 --- a/idl/SMESH_Group.idl +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright (C) 2004 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Group.idl -// Author : Sergey ANIKIN, OCC -// $Header$ - - -#ifndef _SMESH_GROUP_IDL_ -#define _SMESH_GROUP_IDL_ - -#include "SALOME_Exception.idl" -#include "SALOME_GenericObj.idl" - -#include "SMESH_Mesh.idl" - -module SMESH -{ - interface Predicate; - - /*! - * SMESH_Group: base interface of group object - */ - interface SMESH_GroupBase : SALOME::GenericObj, SMESH_IDSource - { - /*! - * Sets group name - */ - void SetName( in string name ); - - /*! - * Returns group name - */ - string GetName(); - - /*! - * Returns group type (type of elements in the group) - */ - ElementType GetType(); - - /*! - * Returns the number of elements in the group - */ - long Size(); - - /*! - * Returns true if the group does not contain any elements - */ - boolean IsEmpty(); - - /*! - * returns true if the group contains an element with ID == - */ - boolean Contains( in long elem_id ); - - /*! - * Returns ID of an element at position - */ - long GetID( in long elem_index ); - - /*! - * Returns a sequence of all element IDs in the group - */ - long_array GetListOfID(); - - /*! - * Returns the mesh object this group belongs to - */ - SMESH_Mesh GetMesh(); - }; - - /*! - * SMESH_Group: interface of group object - */ - interface SMESH_Group : SMESH_GroupBase - { - /*! - * Clears the group's contents - */ - void Clear(); - - /*! - * Adds elements to the group - */ - long Add( in long_array elem_ids ); - long AddByPredicate( in Predicate thePredicate ); - - /*! - * Removes elements from the group - */ - long Remove( in long_array elem_ids ); - long RemoveByPredicate( in Predicate thePredicate ); - - }; - /*! - * SMESH_Group: interface of group object linked to geometry - */ - interface SMESH_GroupOnGeom : SMESH_GroupBase - { - GEOM::GEOM_Object GetShape(); - }; - -}; - - -#endif diff --git a/idl/SMESH_Hypothesis.idl b/idl/SMESH_Hypothesis.idl deleted file mode 100644 index 69832b9ed..000000000 --- a/idl/SMESH_Hypothesis.idl +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Hypothesis.idl -// Author : Paul RASCLE, EDF -// $Header$ - -#ifndef _SMESH_HYPOTHESIS_IDL_ -#define _SMESH_HYPOTHESIS_IDL_ - -#include "SALOME_Exception.idl" -#include "SALOME_GenericObj.idl" - -module SMESH -{ - enum Dimension - { - DIM_1D, - DIM_2D, - DIM_3D - }; - - interface SMESH_Hypothesis : SALOME::GenericObj - { - /*! - * Get the Hypothesis typeName - */ - string GetName(); - - /*! - * Get the Hypothesis plugin library Name - */ - string GetLibName(); - - /*! - * Get the internal Id - */ - long GetId(); - - /*! - * Verify whether hypothesis supports given entity type - */ - boolean IsDimSupported( in Dimension type ); - }; - - typedef sequence ListOfHypothesisName; - - interface SMESH_Algo : SMESH_Hypothesis - { - /*! - * Get list of hypothesis that can be used with this algorithm - */ - ListOfHypothesisName GetCompatibleHypothesis(); - - }; - - interface SMESH_1D_Algo : SMESH_Algo - { - /*! - * - */ - }; - - interface SMESH_2D_Algo : SMESH_Algo - { - /*! - * - */ - }; - - interface SMESH_3D_Algo : SMESH_Algo - { - /*! - * - */ - }; -}; - - // ----------------------------------------------------------------- - // Specific Algorithms in separate idl file - // ----------------------------------------------------------------- - - -#endif diff --git a/idl/SMESH_Mesh.idl b/idl/SMESH_Mesh.idl deleted file mode 100644 index 7dee0ce3f..000000000 --- a/idl/SMESH_Mesh.idl +++ /dev/null @@ -1,773 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Mesh.idl -// Author : Paul RASCLE, EDF -// $Header$ - -#ifndef _SMESH_MESH_IDL_ -#define _SMESH_MESH_IDL_ - -#include "SALOME_Exception.idl" -#include "SALOME_GenericObj.idl" - -module GEOM -{ - interface GEOM_Object; -}; - - -module SALOME_MED -{ - interface MESH; - interface FAMILY; -}; - - -module SMESH -{ - interface SMESH_Hypothesis; - typedef sequence ListOfHypothesis; - - typedef sequence double_array ; - typedef sequence long_array ; - typedef sequence string_array ; - typedef sequence array_of_long_array ; - - enum log_command - { - ADD_NODE, - ADD_EDGE, - ADD_TRIANGLE, - ADD_QUADRANGLE, - ADD_POLYGON, - ADD_TETRAHEDRON, - ADD_PYRAMID, - ADD_PRISM, - ADD_HEXAHEDRON, - ADD_POLYHEDRON, - REMOVE_NODE, - REMOVE_ELEMENT, - MOVE_NODE, - CHANGE_ELEMENT_NODES, - CHANGE_POLYHEDRON_NODES, - RENUMBER - }; - - struct log_block - { - long commandType; - long number; - double_array coords; - long_array indexes; - }; - - struct PointStruct { double x; - double y; - double z; } ; - struct DirStruct { PointStruct PS ; } ; // analog to Occ Direction - - struct AxisStruct { double x; - double y; - double z; - double vx; - double vy; - double vz; } ; - - - /*! - * Enumeration for element type, like in SMDS - */ - enum ElementType - { - ALL, - NODE, - EDGE, - FACE, - VOLUME - }; - - /*! - * Enumeration for hypothesis status (used by AddHypothesis() and RemoveHypothesis() methods) - */ - enum Hypothesis_Status // in the order of severity - { - HYP_OK, - HYP_MISSING, // algo misses a hypothesis - HYP_CONCURENT, // several applicable hypotheses - HYP_BAD_PARAMETER,// hypothesis has a bad parameter value - HYP_UNKNOWN_FATAL,// --- all statuses below should be considered as fatal - // for Add/RemoveHypothesis operations - HYP_INCOMPATIBLE, // hypothesis does not fit algo - HYP_NOTCONFORM, // not conform mesh is produced appling a hypothesis - HYP_ALREADY_EXIST,// such hypothesis already exist - HYP_BAD_DIM // bad dimension - }; - - /*! - * Enumeration for DriverMED read status (used by ImportMEDFile() method) - */ - enum DriverMED_ReadStatus // in the order of severity - { - DRS_OK, - DRS_EMPTY, // a MED file contains no mesh with the given name - DRS_WARN_RENUMBER, // a MED file has overlapped ranges of element numbers, - // so the numbers from the file are ignored - DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data - DRS_FAIL // general failure (exception etc.) - }; - - /*! - * Enumeration for DriverMED (used by Perform() method) - */ - enum MED_VERSION // in the order of severity - { - MED_V2_1, - MED_V2_2 - }; - - typedef sequence log_array; - - - interface SMESH_IDSource - { - /*! - * Returns a sequence of all element IDs - */ - long_array GetIDs(); - }; - - interface SMESH_GroupBase; - interface SMESH_Group; - interface SMESH_GroupOnGeom; - interface SMESH_subMesh; - interface SMESH_MeshEditor; - interface SMESH_Mesh : SALOME::GenericObj, SMESH_IDSource - { - ///*! - // * Associate a Shape to a Mesh created with NewEmpty - // */ - //boolean SetMesh(in GEOM::GEOM_Object anObject) - // raises (SALOME::SALOME_Exception); - - /*! - * Get the subMesh object associated to a subShape. The subMesh object - * gives access to nodes and elements IDs. - * SubMesh will be used instead of SubShape in a next idl version to - * adress a specific subMesh... - */ - SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name) - raises (SALOME::SALOME_Exception); - - ///*! - // * Create a subMesh without reference to a subShape - // */ - //SMESH_subMesh NewEmpty() - // raises (SALOME::SALOME_Exception); - - /*! - * Get geom shape to mesh. A result may be nil - */ - GEOM::GEOM_Object GetShapeToMesh() - raises (SALOME::SALOME_Exception); - - /*! - * Remove a submesh - */ - void RemoveSubMesh(in SMESH_subMesh aSubMesh) - raises (SALOME::SALOME_Exception); - - /*! - * Create a group - */ - SMESH_Group CreateGroup( in ElementType elem_type, - in string name ) - raises (SALOME::SALOME_Exception); - - /*! - * Create a group from geometry group - */ - SMESH_GroupOnGeom CreateGroupFromGEOM( in ElementType elem_type, - in string name, - in GEOM::GEOM_Object theGeomObject ) - raises (SALOME::SALOME_Exception); - - /*! - * Remove a group - */ - void RemoveGroup(in SMESH_GroupBase aGroup) - raises (SALOME::SALOME_Exception); - - /*! - * Remove group with its contents - */ - void RemoveGroupWithContents( in SMESH_GroupBase aGroup ) - raises (SALOME::SALOME_Exception); - - /*! - * Union of two groups - * New group is created. All mesh elements that are - * present in initial groups are added to the new one - */ - SMESH_Group UnionGroups (in SMESH_GroupBase aGroup1, - in SMESH_GroupBase aGroup2, - in string name ) - raises (SALOME::SALOME_Exception); - - /*! - * Intersection of two groups - * New group is created. All mesh elements that are - * present in both initial groups are added to the new one. - */ - SMESH_Group IntersectGroups (in SMESH_GroupBase aGroup1, - in SMESH_GroupBase aGroup2, - in string name ) - raises (SALOME::SALOME_Exception); - - /*! - * 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 - */ - SMESH_Group CutGroups (in SMESH_GroupBase aMainGroup, - in SMESH_GroupBase aToolGroup, - in string name ) - raises (SALOME::SALOME_Exception); - - /*! - * Add hypothesis to the mesh, under a particular subShape - * (or the main shape itself) - * The Add method is only used to prepare the build of the mesh and store - * the algorithms and associated parameters. - * Actual job of mesh the shape is done by MESH_Gen. - * @params - * - aSubShape : subShape obtained by a shape explode in GEOM - * (or main shape) - * - anHyp : hypothesis object - * @return - * - OK if the hypothesis is compatible with the subShape - * (and all previous hypothesis on the subShape) - * - NOK if the hypothesis is not compatible with the subShape - * (or one previous hypothesis on the subShape) - * raises exception if hypothesis has not been created - */ - Hypothesis_Status AddHypothesis(in GEOM::GEOM_Object aSubObject, - in SMESH_Hypothesis anHyp) - raises (SALOME::SALOME_Exception); -// boolean AddHypothesis(in SMESH_subMesh aSubMesh, in SMESH_Hypothesis anHyp) -// raises (SALOME::SALOME_Exception); - - /*! - * Remove an hypothesis previouly added with AddHypothesis. - */ - Hypothesis_Status RemoveHypothesis(in GEOM::GEOM_Object aSubObject, - in SMESH_Hypothesis anHyp) - raises (SALOME::SALOME_Exception); -// boolean RemoveHypothesis(in SMESH_subMesh aSubMesh, -// in SMESH_Hypothesis anHyp) -// raises (SALOME::SALOME_Exception); - - /*! - * Get the list of hypothesis added on a subShape - */ - ListOfHypothesis GetHypothesisList(in GEOM::GEOM_Object aSubObject) - raises (SALOME::SALOME_Exception); -// ListOfHypothesis GetHypothesisList(in SMESH_subMesh aSubMesh) -// raises (SALOME::SALOME_Exception); - - /*! - * Get the log of nodes and elements added or removed since previous - * clear of the log. - * @params - * - clearAfterGet : log is emptied after Get (safe if concurrents access) - */ - // string_array GetLog(in boolean clearAfterGet) - // raises (SALOME::SALOME_Exception); - log_array GetLog(in boolean clearAfterGet) - raises (SALOME::SALOME_Exception); - - /*! - * Clear the log of nodes and elements added or removed since previous - * clear. Must be used immediately after GetLog if clearAfterGet is false. - */ - void ClearLog() - raises (SALOME::SALOME_Exception); - - /*! - * Get the internal Id - */ - long GetId(); - - /*! - * Get the study Id - */ - long GetStudyId(); - - /*! - * Obtain instance of SMESH_MeshEditor - */ - SMESH_MeshEditor GetMeshEditor() - raises (SALOME::SALOME_Exception); - - /*! - * Export Mesh to different MED Formats - * @params - * - 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. - * - theVersion : define the version of format of MED file, that will be created - */ - void ExportToMED( in string file, in boolean auto_groups, in MED_VERSION theVersion ) - raises (SALOME::SALOME_Exception); - - /*! - * Export Mesh to MED_V2_1 MED format - * Works, just the same as ExportToMED, with MED_VERSION parameter equal to MED_V2_1. - * The method is kept in order to support old functionality - */ - void ExportMED( in string file, in boolean auto_groups ) - raises (SALOME::SALOME_Exception); - - /*! - * Export Mesh to DAT, UNV and STL Formats - */ - void ExportDAT( in string file ) - raises (SALOME::SALOME_Exception); - void ExportUNV( in string file ) - raises (SALOME::SALOME_Exception); - void ExportSTL( in string file, in boolean isascii ) - raises (SALOME::SALOME_Exception); - - /*! - * Get MED Mesh - */ - SALOME_MED::MESH GetMEDMesh() - raises (SALOME::SALOME_Exception); - - /*! - * Get informations about mesh contents - */ - long NbNodes() - raises (SALOME::SALOME_Exception); - - long NbElements() - raises (SALOME::SALOME_Exception); - - long NbEdges() - raises (SALOME::SALOME_Exception); - - long NbFaces() - raises (SALOME::SALOME_Exception); - - long NbTriangles() - raises (SALOME::SALOME_Exception); - - long NbQuadrangles() - raises (SALOME::SALOME_Exception); - - long NbPolygons() - raises (SALOME::SALOME_Exception); - - long NbVolumes() - raises (SALOME::SALOME_Exception); - - long NbTetras() - raises (SALOME::SALOME_Exception); - - long NbHexas() - raises (SALOME::SALOME_Exception); - - long NbPyramids() - raises (SALOME::SALOME_Exception); - - long NbPrisms() - raises (SALOME::SALOME_Exception); - - long NbPolyhedrons() - raises (SALOME::SALOME_Exception); - - long NbSubMesh() - raises (SALOME::SALOME_Exception); - - long_array GetElementsId() - raises (SALOME::SALOME_Exception); - - long_array GetElementsByType( in ElementType theType ) - raises (SALOME::SALOME_Exception); - - long_array GetNodesId() - raises (SALOME::SALOME_Exception); - - /*! - * Returns type of mesh element - */ - ElementType GetElementType( in long id, in boolean iselem ) - raises (SALOME::SALOME_Exception); - - /*! - * Get mesh description - */ - string Dump(); - }; - - interface SMESH_subMesh : SALOME::GenericObj, SMESH_IDSource - { - /*! - * - */ - long GetNumberOfElements() - raises (SALOME::SALOME_Exception); - - /*! - * - */ - long GetNumberOfNodes( in boolean all ) - raises (SALOME::SALOME_Exception); - - /*! - * - */ - long_array GetElementsId() - raises (SALOME::SALOME_Exception); - - /*! - * - */ - long_array GetElementsByType( in ElementType theType ) - raises (SALOME::SALOME_Exception); - - /*! - * Return type of submesh element - */ - ElementType GetElementType( in long id, in boolean iselem ) - raises (SALOME::SALOME_Exception); - - /*! - * - */ - long_array GetNodesId() - raises (SALOME::SALOME_Exception); - - /*! - * Get geom shape the submesh is dedicated to - */ - GEOM::GEOM_Object GetSubShape() - raises (SALOME::SALOME_Exception); - - /*! - * Get SMESH_Mesh which stores nodes coordinates & elements definition - */ - SMESH_Mesh GetFather() - raises (SALOME::SALOME_Exception); - - /*! - * Get the internal Id - */ - long GetId(); - - /*! - * Get MED subMesh - */ - SALOME_MED::FAMILY GetFamily() - raises (SALOME::SALOME_Exception); - }; - - /*! - * This interface makes modifications on the Mesh - removing elements and nodes etc. - */ - interface NumericalFunctor; - interface SMESH_MeshEditor - { - boolean RemoveElements(in long_array IDsOfElements); - - boolean RemoveNodes(in long_array IDsOfNodes); - - boolean AddNode(in double x, in double y, in double z); - - boolean AddEdge(in long_array IDsOfNodes); - - boolean AddFace(in long_array IDsOfNodes); - - boolean AddVolume(in long_array IDsOfNodes); - - /*! - * Create volume of many faces, giving nodes for each face. - * \param IdsOfNodes List of node IDs for volume creation face by face. - * \param Quantities List of integer values, Quantities[i] - * gives quantity of nodes in face number i. - */ - boolean AddPolyhedralVolume (in long_array IdsOfNodes, - in long_array Quantities); - - /*! - * Create volume of many faces, giving IDs of existing faces. - * \param IdsOfFaces List of face IDs for volume creation. - * \note The created volume will refer only to nodes - * of the given faces, not to the faces itself. - */ - boolean AddPolyhedralVolumeByFaces (in long_array IdsOfFaces); - - boolean MoveNode(in long NodeID, in double x, in double y, in double z); - - boolean InverseDiag(in long NodeID1, in long NodeID2); - - boolean DeleteDiag(in long NodeID1, in long NodeID2); - - boolean Reorient(in long_array IDsOfElements); - - boolean ReorientObject(in SMESH_IDSource theObject); - - /*! - * \brief Fuse neighbour triangles into quadrangles. - * \param theElems The triangles to be fused. - * \param theCriterion Is used to choose a neighbour to fuse with. - * \param theMaxAngle Is a max angle between element normals at which fusion - * is still performed; theMaxAngle is mesured in radians. - * \return TRUE in case of success, FALSE otherwise. - */ - boolean TriToQuad (in long_array IDsOfElements, - in NumericalFunctor Criterion, - in double MaxAngle); - - /*! - * \brief Fuse neighbour triangles into quadrangles. - * - * Behaves like the above method, taking list of elements from \a theObject - */ - boolean TriToQuadObject (in SMESH_IDSource theObject, - in NumericalFunctor Criterion, - in double MaxAngle); - - /*! - * \brief Split quadrangles into triangles. - * \param theElems The faces to be splitted. - * \param theCriterion Is used to choose a diagonal for splitting. - * \return TRUE in case of success, FALSE otherwise. - */ - boolean QuadToTri (in long_array IDsOfElements, - in NumericalFunctor Criterion); - - /*! - * \brief Split quadrangles into triangles. - * - * Behaves like the above method, taking list of elements from \a theObject - */ - boolean QuadToTriObject (in SMESH_IDSource theObject, - in NumericalFunctor Criterion); - - /*! - * \brief Split quadrangles into triangles. - * \param theElems The faces to be splitted. - * \param the13Diag Is used to choose a diagonal for splitting. - * \return TRUE in case of success, FALSE otherwise. - */ - boolean SplitQuad (in long_array IDsOfElements, - in boolean Diag13); - - /*! - * \brief Split quadrangles into triangles. - * - * Behaves like the above method, taking list of elements from \a theObject - */ - boolean SplitQuadObject (in SMESH_IDSource theObject, - in boolean Diag13); - - /*! - * Find better splitting of the given quadrangle. - * \param IDOfQuad ID of the quadrangle to be splitted. - * \param Criterion A criterion to choose a diagonal for splitting. - * \return 1 if 1-3 diagonal is better, 2 if 2-4 - * diagonal is better, 0 if error occurs. - */ - long BestSplit (in long IDOfQuad, - in NumericalFunctor Criterion); - - enum Smooth_Method { LAPLACIAN_SMOOTH, CENTROIDAL_SMOOTH }; - - boolean Smooth(in long_array IDsOfElements, - in long_array IDsOfFixedNodes, - in long MaxNbOfIterations, - in double MaxAspectRatio, - in Smooth_Method Method); - - boolean SmoothObject(in SMESH_IDSource theObject, - in long_array IDsOfFixedNodes, - in long MaxNbOfIterations, - in double MaxAspectRatio, - in Smooth_Method Method); - - boolean SmoothParametric(in long_array IDsOfElements, - in long_array IDsOfFixedNodes, - in long MaxNbOfIterations, - in double MaxAspectRatio, - in Smooth_Method Method); - - boolean SmoothParametricObject(in SMESH_IDSource theObject, - in long_array IDsOfFixedNodes, - in long MaxNbOfIterations, - in double MaxAspectRatio, - in Smooth_Method Method); - - void RenumberNodes(); - - void RenumberElements(); - - void RotationSweep(in long_array IDsOfElements, - in AxisStruct Axix, - in double AngleInRadians, - in long NbOfSteps, - in double Tolerance); - - void RotationSweepObject(in SMESH_IDSource theObject, - in AxisStruct Axix, - in double AngleInRadians, - in long NbOfSteps, - in double Tolerance); - - void ExtrusionSweep(in long_array IDsOfElements, - in DirStruct StepVector, - in long NbOfSteps); - - void ExtrusionSweepObject(in SMESH_IDSource theObject, - in DirStruct StepVector, - in long NbOfSteps); - - void ExtrusionSweepObject1D(in SMESH_IDSource theObject, - in DirStruct StepVector, - in long NbOfSteps); - - void ExtrusionSweepObject2D(in SMESH_IDSource theObject, - in DirStruct StepVector, - in long NbOfSteps); - - enum Extrusion_Error { - EXTR_OK, - EXTR_NO_ELEMENTS, - EXTR_PATH_NOT_EDGE, - EXTR_BAD_PATH_SHAPE, - EXTR_BAD_STARTING_NODE, - EXTR_BAD_ANGLES_NUMBER, - EXTR_CANT_GET_TANGENT - }; - - Extrusion_Error ExtrusionAlongPath(in long_array IDsOfElements, - in SMESH_Mesh PathMesh, - in GEOM::GEOM_Object PathShape, - in long NodeStart, - in boolean HasAngles, - in double_array Angles, - in boolean HasRefPoint, - in PointStruct RefPoint); - - Extrusion_Error ExtrusionAlongPathObject(in SMESH_IDSource theObject, - in SMESH_Mesh PathMesh, - in GEOM::GEOM_Object PathShape, - in long NodeStart, - in boolean HasAngles, - in double_array Angles, - in boolean HasRefPoint, - in PointStruct RefPoint); - - enum MirrorType { POINT, AXIS, PLANE }; - - void Mirror (in long_array IDsOfElements, - in AxisStruct Mirror, - in MirrorType theMirrorType, - in boolean Copy); - - void MirrorObject (in SMESH_IDSource theObject, - in AxisStruct Mirror, - in MirrorType theMirrorType, - in boolean Copy); - - void Translate (in long_array IDsOfElements, - in DirStruct Vector, - in boolean Copy); - - void TranslateObject (in SMESH_IDSource theObject, - in DirStruct Vector, - in boolean Copy); - - void Rotate (in long_array IDsOfElements, - in AxisStruct Axis, - in double AngleInRadians, - in boolean Copy); - - void RotateObject (in SMESH_IDSource theObject, - in AxisStruct Axis, - in double AngleInRadians, - in boolean Copy); - - void FindCoincidentNodes (in double Tolerance, - out array_of_long_array GroupsOfNodes); - - void MergeNodes (in array_of_long_array GroupsOfNodes); - - void MergeEqualElements(); - - enum Sew_Error { - SEW_OK, - SEW_BORDER1_NOT_FOUND, - SEW_BORDER2_NOT_FOUND, - SEW_BOTH_BORDERS_NOT_FOUND, - SEW_BAD_SIDE_NODES, - SEW_VOLUMES_TO_SPLIT, - // for SewSideElements() only: - SEW_DIFF_NB_OF_ELEMENTS, - SEW_TOPO_DIFF_SETS_OF_ELEMENTS, - SEW_BAD_SIDE1_NODES, - SEW_BAD_SIDE2_NODES - }; - - Sew_Error SewFreeBorders (in long FirstNodeID1, - in long SecondNodeID1, - in long LastNodeID1, - in long FirstNodeID2, - in long SecondNodeID2, - in long LastNodeID2, - in boolean CreatePolygons, - in boolean CreatePolyedrs); - - Sew_Error SewConformFreeBorders (in long FirstNodeID1, - in long SecondNodeID1, - in long LastNodeID1, - in long FirstNodeID2, - in long SecondNodeID2); - - Sew_Error SewBorderToSide (in long FirstNodeIDOnFreeBorder, - in long SecondNodeIDOnFreeBorder, - in long LastNodeIDOnFreeBorder, - in long FirstNodeIDOnSide, - in long LastNodeIDOnSide, - in boolean CreatePolygons, - in boolean CreatePolyedrs); - - Sew_Error SewSideElements (in long_array IDsOfSide1Elements, - in long_array IDsOfSide2Elements, - in long NodeID1OfSide1ToMerge, - in long NodeID1OfSide2ToMerge, - in long NodeID2OfSide1ToMerge, - in long NodeID2OfSide2ToMerge); - - }; -}; - -#endif diff --git a/idl/SMESH_Pattern.idl b/idl/SMESH_Pattern.idl deleted file mode 100644 index d2324a0b2..000000000 --- a/idl/SMESH_Pattern.idl +++ /dev/null @@ -1,189 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Pattern.idl -// Created : Mon Aug 2 10:48:36 2004 -// Author : Edward AGAPOV (eap) -// $Header: - -#ifndef _SMESH_PATTERN_IDL_ -#define _SMESH_PATTERN_IDL_ - -#include "SMESH_Mesh.idl" - -module SMESH -{ - - typedef sequence point_array; - - /*! - * SMESH_Pattern: interface of mesh pattern - */ - interface SMESH_Pattern { - - /*! - * Load a pattern from the string - */ - boolean LoadFromFile(in string theFileContents); - - /*! - * Create a pattern from the mesh built on . - * ==true makes override nodes positions - * on computed by mesher - */ - boolean LoadFromFace(in SMESH_Mesh theMesh, - in GEOM::GEOM_Object theFace, - in boolean theProject); - - /*! - * Create a pattern from the mesh built on - */ - boolean LoadFrom3DBlock(in SMESH_Mesh theMesh, - in GEOM::GEOM_Object theBlock); - - /*! - * Compute nodes coordinates applying - * the loaded pattern to . The first key-point - * will be mapped into , which must - * be in the outer wire of theFace - */ - point_array ApplyToFace(in GEOM::GEOM_Object theFace, - in GEOM::GEOM_Object theVertexOnKeyPoint1, - in boolean theReverse); - - /*! - * Compute nodes coordinates applying - * the loaded pattern to . The (0,0,0) key-point - * will be mapped into . The (0,0,1) - * key-point will be mapped into . - */ - point_array ApplyTo3DBlock(in GEOM::GEOM_Object theBlock, - in GEOM::GEOM_Object theVertex000, - in GEOM::GEOM_Object theVertex001); - - /*! - * Compute nodes coordinates applying - * the loaded pattern to mesh faces. The first key-point - * will be mapped into -th node of each face - */ - point_array ApplyToMeshFaces(in SMESH_Mesh theMesh, - in long_array theFacesIDs, - in long theNodeIndexOnKeyPoint1, - in boolean theReverse); - - /*! - * Compute nodes coordinates applying - * the loaded pattern to hexahedrons. The (0,0,0) key-point - * will be mapped into -th node of each volume. - * The (0,0,1) key-point will be mapped into -th - * node of each volume. - */ - point_array ApplyToHexahedrons(in SMESH_Mesh theMesh, - in long_array theVolumesIDs, - in long theNode000Index, - in long theNode001Index); - - /*! - * Create nodes and elements in using nodes - * coordinates computed by either of Apply...() methods. - * If CreatePolygons is TRUE, replace adjacent faces by polygons - * to keep mesh conformity. - * If CreatePolyedrs is TRUE, replace adjacent volumes by polyedrs - * to keep mesh conformity. - */ - boolean MakeMesh (in SMESH_Mesh theMesh, - in boolean CreatePolygons, - in boolean CreatePolyedrs); - - /*! - * Return the loaded pattern in the string form to be saved in file - */ - string GetString(); - - /*! - * error code of the last of one of above operations - */ - enum ErrorCode { - ERR_OK, - // Load(file) - ERR_READ_NB_POINTS, // couldn't read nb of points - ERR_READ_POINT_COORDS, // invalid nb of point coordinates - ERR_READ_TOO_FEW_POINTS, // too few points in a pattern - ERR_READ_3D_COORD, // coordinate of 3D point out of [0,1] range - ERR_READ_NO_KEYPOINT, // no key-points in 2D pattern - ERR_READ_BAD_INDEX, // invalid point index - ERR_READ_ELEM_POINTS, // invalid nb of points in element - ERR_READ_NO_ELEMS, // no elements in a pattern - ERR_READ_BAD_KEY_POINT, // a key-point not on a boundary - // Save(file) - ERR_SAVE_NOT_LOADED, // pattern was not loaded - // Load(shape) - ERR_LOAD_EMPTY_SUBMESH, // no elements to load - // Load(face) - ERR_LOADF_NARROW_FACE, // too narrow face - ERR_LOADF_CLOSED_FACE, // closed face - // Load(volume) - ERR_LOADV_BAD_SHAPE, // volume is not a brick of 6 faces - ERR_LOADV_COMPUTE_PARAMS, // cant compute point parameters - // Apply(shape) - ERR_APPL_NOT_LOADED, // pattern was not loaded - ERR_APPL_BAD_DIMENTION, // wrong shape dimention - ERR_APPL_BAD_NB_VERTICES, // keypoints - vertices mismatch - // Apply(face) - ERR_APPLF_BAD_TOPOLOGY, // bad pattern topology - ERR_APPLF_BAD_VERTEX, // first vertex not on an outer face boundary - ERR_APPLF_INTERNAL_EEROR, // program error - // Apply(volume) - ERR_APPLV_BAD_SHAPE, // volume is not a brick of 6 faces - // MakeMesh - ERR_MAKEM_NOT_COMPUTED // mapping failed - }; - - /*! - * Return error code of the last operation - */ - ErrorCode GetErrorCode(); - - /*! - * Return true if the loaded pattern is a 2D one - */ - boolean Is2D(); - - /*! - * Return coordinates of pattern points - */ - point_array GetPoints(); - - /*! - * Return indices of key-points within the arrays returned by - * GetPoints() - */ - long_array GetKeyPoints(); - - /*! - * Return nodal connectivity of the elements of the pattern - * or of all elements to be crated - */ - array_of_long_array GetElementPoints(in boolean all); - }; -}; - -#endif diff --git a/resources/ModuleMesh.png b/resources/ModuleMesh.png deleted file mode 100755 index 5e781ac34ae9fb5c72ad6337e1fb71a085c6b4a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2629 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 - - - - - - - - - - - - - - SMESH - Mesh - MESH - NRI - 3.0.0 - Mesh component - 1 - ModuleMesh.png - - - SMESH - - - - CreateHypothesis - - - - 1 - - - string - anHyp - - - - long - studyId - - - - - - SMESH_Hypothesis - aHyp - - - - - - Init - - - - 1 - - - GEOM_Gen - geomEngine - - - - long - studyId - - - - GEOM_Shape - aShape - - - - - - SMESH_Mesh - aMesh - - - - - - Compute - - - - 1 - - - SMESH_Mesh - aMesh - - - - GEOM_Shape - aSubShape - - - - - - boolean - res - Result - - - - - IsReadyToCompute - - - - 1 - - - SMESH_Mesh - aMesh - - - - GEOM_Shape - aSubShape - - - - - boolean - res - Result - - - - SMESH_Mesh - - - - AddHypothesis - - - - 1 - - - GEOM_Shape - aSubShape - - - - SMESH_Hypothesis - aHyp - - - - - - boolean - res - Result - - - - - - hostname = localhost - - - diff --git a/resources/SMESH_en.xml b/resources/SMESH_en.xml deleted file mode 100644 index 7d314c75d..000000000 --- a/resources/SMESH_en.xml +++ /dev/null @@ -1,483 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/SMESH_fr.xml b/resources/SMESH_fr.xml deleted file mode 100644 index d5dbf4640..000000000 --- a/resources/SMESH_fr.xml +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/StdMeshers.xml b/resources/StdMeshers.xml deleted file mode 100644 index 60aec655d..000000000 --- a/resources/StdMeshers.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/advanced_mesh_info.png b/resources/advanced_mesh_info.png deleted file mode 100644 index 01eaea2678cc032f562a6ff949634bb47f9a07e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VTavfC3&Vd9T(EcfWS|IVfk$L9 z0|U1p2s75F#7_hYvX^-Jy0Ty4mgA6DsPdY1ih+TV(bL5-q+-t6DZ6=F3{)eU_hKe5!w`vrw$iCz zH+{OaAX9o-hl9(BeKW1twF<%`pDc~!-&NG@^O!|8TgAhMFFjq)rO2{}IcSN368{G# zfkl_)cJWpAxmmuQ-ZhVDJNp^cBUjyT{SjrW&AoVCZ2uvT`KJ!-F}XKIo^ki7b$gSK zz0y0f^#4+Z7q4^g%Q1hx)X@F7boy3z&F`icLaUD--@5n6l-T17A9mQrlsx|`(@rg-Ah&~qbJAIlNn3bsxYn=!7I{qkM#2JM P_%L|7`njxgN@xNA(p-;G diff --git a/resources/delete.png b/resources/delete.png deleted file mode 100644 index 8ae8475270846e746507f5bdd7752821fb1e88c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~q!3-pCt=%unz`)E9;1l8sL#cK@(5tK^L4Lu&#Q&e+_cp#@pg^Rji(^Q|E#GsETnvgF%oh@G z|NsBVa=JU~LVs1qNz3`)HwMdQavt~mEVPW{xMI6d(A$KBu1e__8@xUpahmz;vqPyE v!~ecD?K;;U{BCHMV=yw=saPV-wD17?vMOc`V~)i0paAxC^>bP0l+XkK1JFi| diff --git a/resources/flight_solid.brep b/resources/flight_solid.brep deleted file mode 100644 index a1717afc0..000000000 --- a/resources/flight_solid.brep +++ /dev/null @@ -1,13835 +0,0 @@ -DBRep_DrawableShape - -CASCADE Topology V1, (c) Matra-Datavision -Locations 0 -Curve2ds 739 -7 0 0 9 18 3 0.41008236 0.84752031 0.410288721116551 0.848018210013126 0.410512694715336 0.848494001779385 0.410754282080313 0.848947688294738 0.411013480343025 0.849379262905495 0.411290293807721 0.849788735468964 0.411584718084984 0.850176095891108 0.41189675616236 0.850541351160252 0.412226406649857 0.850884498036808 0.412686516107917 0.851309861938193 0.412801222124165 0.851411851893701 0.412917788015902 0.851511507336148 0.413036213782896 0.851608828265284 0.413156499424904 0.851703814680868 0.413278644941687 0.851796466582653 0.413402650333006 0.851886783970395 0.41352851559862 0.851974766843847 0.413656240738291 0.852060415202764 - 0 10 0.1 8 0.132495842436784 10 -7 0 0 3 4 2 0 55.31736968 0.071577424652243 55.3201286844149 0.116887749292198 55.3262592484463 0.17703176 55.33417125 - 0 4 0.132495842436784 4 -7 0 0 9 18 3 0.413656240738291 0.852060415202764 0.413725040954009 0.852106550408289 0.413794380817468 0.852152008247789 0.413864260328631 0.852196788721226 0.41393467948746 0.852240891828562 0.414005638293919 0.852284317569758 0.414077136747969 0.852327065944776 0.414149174849574 0.852369136953578 0.414221752598695 0.852410530596126 0.414503727223458 0.852567551459183 0.414716988400245 0.852678329380334 0.414934647672889 0.852783578856898 0.415156725998107 0.85288330626268 0.41538317726183 0.852977497561363 0.415614069921756 0.85306617362111 0.415849333157221 0.853149312823977 0.416089017338431 0.853226930589878 0.4163331 0.85329902 - 0.132495842436784 10 0.15 8 0.2 10 -7 0 0 5 6 2 0.17703176 55.33417125 0.195417119112928 55.3365899096272 0.192524267410444 55.3362808334757 0.283278462165895 55.3483207401871 0.230231261368446 55.3412658576374 0.25286332 55.34428547 - 0.132495842436784 6 0.2 6 -8 0.625 0.75 -7 0 0 10 29 4 0.47919147 55.3732371 0.458962850543076 55.3707757236626 0.443802301295076 55.3689231730498 0.431227964617491 55.367380124404 0.420500793869518 55.3660572085357 0.410923058136591 55.3648699802239 0.402212000179146 55.3637838927784 0.394032435629815 55.3627579772731 0.386189843456487 55.3617680239735 0.378476264305612 55.3607879518754 0.366799407238582 55.3592942621059 0.362889229703656 55.3587924170077 0.358936068462618 55.3582834148439 0.354914121206614 55.3577639263097 0.350796456467887 55.3572304503062 0.346554151140419 55.3566792020948 0.342154984231222 55.3561059414163 0.337561686842193 55.3555057395169 0.33272974838302 55.3548726862563 0.322479809645869 55.3535263862486 0.31706158729616 55.352813109873 0.31129610018702 55.3520525123972 0.305116424404339 55.3512356588456 0.298444256401293 55.3503520779771 0.291180511243476 55.3493885022517 0.28319654366915 55.3483276905218 0.274324676485957 55.3471471550415 0.264333848297687 55.345815889593 0.25286332 55.34428547 - 0.625 11 0.6875 9 0.71875 9 0.75 11 -7 0 0 9 26 4 0.421419233714204 0.854378375383088 0.421408724578323 0.85437703174307 0.421398214712478 0.85437568379662 0.421387704119531 0.854374331544096 0.421377192802346 0.85437297498586 0.421366680763785 0.854371614122278 0.421356168006712 0.854370248953719 0.421345654533991 0.854368879480552 0.421335140348488 0.854367505703154 0.421049278519141 0.85433004067742 0.420773444667682 0.85429100241145 0.420497175524154 0.854249019606855 0.420220522807335 0.854204100486739 0.419943538329829 0.854156254714823 0.419666273997255 0.854105493394876 0.419388781809199 0.854051829071366 0.41911111385837 0.853995275728881 0.418555530803956 0.853876421856185 0.418277616358952 0.853814121520681 0.417999625134002 0.85374896144515 0.417721630115384 0.853680964544785 0.417443636848365 0.853610135441177 0.417165765713599 0.853536513684488 0.416887996993909 0.853460099322532 0.416610432380243 0.853380929179368 0.4163331 0.85329902 - 0.625 10 0.627342019607739 8 0.688671009803869 8 0.75 10 -7 0 0 9 10 2 0.421419233714204 0.854378375383088 0.42162626646769 0.854404845446442 0.421833015921969 0.854429644181601 0.422039460194169 0.854452768845145 0.42224557748412 0.854474217174743 0.422451346087938 0.854493987387354 0.422656744411601 0.854512078177426 0.422861750984535 0.854528488715104 0.423066344473184 0.854543218644425 0.423270503694597 0.854556268081525 - 0.301909390322789 10 0.339524884162641 10 -7 0 0 3 4 2 0.47919147 55.3732371 0.503954646308396 55.3762502176997 0.529339233015005 55.3794060043009 0.55492435 55.38255655 - 0.301909390322789 4 0.339524884162641 4 -8 0.375 0.5 -7 0 0 11 32 4 0.67801019 55.39702465 0.666584190893305 55.3957142897046 0.656983787670606 55.3946116915496 0.648669368121809 55.3936552615707 0.641337265061191 55.3928103137286 0.634756968014638 55.3920504857651 0.628786283131536 55.3913594929417 0.623288997234573 55.3907217000789 0.618179377950216 55.3901272256352 0.613372164353592 55.3895662080309 0.608800514777051 55.3890308563824 0.602201728162073 55.3882552033493 0.600045255855038 55.3880012157352 0.597924063677702 55.3877508694956 0.595830811474013 55.387503297567 0.59375817685397 55.3872576302006 0.59169891738079 55.3870130020925 0.589645935881049 55.3867685603869 0.587592091769012 55.3865234416853 0.585529788530008 55.386276722624 0.583450654637167 55.3860273808104 0.579241190192661 55.3855212961428 0.577110813907899 55.3852645476316 0.574945954811114 55.3850030075051 0.572736933395688 55.384735480921 0.570473132214319 55.3844606522241 0.568142729099653 55.3841770516709 0.565732260796604 55.383883000953 0.563226016998262 55.3835765367239 0.56060526479206 55.3832553129161 0.557847303512234 55.3829164811933 0.55492435 55.38255655 - 0.375 12 0.4375 10 0.46875 10 0.5 12 -7 0 0 11 22 3 0.42617692 0.85458915 0.425907172004119 0.854600711756659 0.426146286684528 0.854589536135972 0.424262395934449 0.854661159226996 0.427511202983691 0.85452530299163 0.422652069617444 0.854716866925565 0.42706813152373 0.854531674372239 0.423797101657499 0.854658906241426 0.425160158179562 0.854597204250858 0.424601242002163 0.854613758995449 0.424556237197151 0.854609194726696 0.424345913668217 0.85460463847709 0.424246410619118 0.854602297943986 0.424150535851109 0.854599760720235 0.424056258929567 0.854596892521203 0.423961549420351 0.854593559066635 0.42386437688891 0.854589626069788 0.423762710900766 0.854584959251571 0.423654521021808 0.854579424325638 0.423537776817281 0.85457288701117 0.423410447853057 0.854565213023994 0.423270503694597 0.854556268081525 - 0.375 12 0.4375 10 0.5 12 -8 0.4 0.6 -7 0 0 9 26 4 0.42617692 0.85458915 0.426194113228556 0.854588412226726 0.426226435714986 0.854588330491922 0.426273887457241 0.854588904796454 0.426336468453217 0.854590135140843 0.426414178700862 0.854592021526122 0.426507018198108 0.85459456395275 0.426614986942859 0.854597762421684 0.426738084933068 0.854601616933541 0.426945425783436 0.854608382766914 0.427018321712828 0.854610802055249 0.427094999954214 0.854613385354197 0.427175460507028 0.854616132663505 0.427259703370657 0.85461904398356 0.427347728544505 0.854622119313817 0.427439536028012 0.854625358654751 0.427535125820547 0.854628762005996 0.427733870022533 0.85463589672939 0.427837024809266 0.854639628115687 0.427943959376763 0.854643523417337 0.428054684132618 0.854647583025675 0.428169176179377 0.854651806079854 0.428287469508571 0.854656193857644 0.428409528947264 0.854660745037018 0.428535379503884 0.854665460557793 0.42866501 0.85467034 - 0.4 10 0.5 8 0.55 8 0.6 10 -7 0 0 9 10 2 0.678010189999999 55.3970246499999 0.679466766105051 55.397191692687 0.672267258065191 55.3963580504787 0.711168432408913 55.4008606633961 0.659851366595554 55.3948832074081 0.750100967508816 55.405466964986 0.691864748842144 55.3986254774015 0.753036540660531 55.4058336509712 0.757377707818412 55.4063476047459 0.77912526 55.40891471 - 0.4 10 0.6 10 -8 0.125 0.25 -7 0 0 9 10 2 0.85471089 55.4176593 0.841623799434198 55.4161539556967 0.829709307777954 55.4147820913976 0.818964941821067 55.4135434221775 0.809396870013699 55.4124386586811 0.800996291262819 55.4114667869151 0.793771218352117 55.4106287302393 0.787716775469767 55.4099239263145 0.782835018684141 55.4093526130069 0.77912526 55.40891471 - 0.125 10 0.25 10 -7 0 0 7 8 2 0.43002793 0.85464274 0.429622733922243 0.854650945479358 0.431215957113761 0.854618681692231 0.427290723357091 0.854698170182226 0.430575420468532 0.854631652968227 0.4283619302953 0.854676477557579 0.428775912899907 0.854668094145483 0.42866501 0.85467034 - 0.125 8 0.25 8 -8 0.8 1 -7 0 0 11 32 4 0.43002793 0.85464274 0.430129530886392 0.854636490001381 0.430238847795081 0.854631893266681 0.430355920314158 0.854628947657 0.430480635879583 0.854627659376971 0.430613204036399 0.854628016790392 0.430753344683226 0.854630035508681 0.430901334863621 0.854633700049561 0.431056970943397 0.854639021809332 0.431220362248338 0.854645994660571 0.431391467802293 0.85465462090159 0.431659712046024 0.8546700395318 0.431751057504888 0.854675592301993 0.43184433367563 0.854681558298956 0.431939540558868 0.854687937522967 0.432036678155895 0.854694729973602 0.432135746466822 0.854701935651772 0.432236745493416 0.854709554556371 0.432339675235586 0.854717586688705 0.432444535694899 0.854726032047792 0.432551326871768 0.854734890634369 0.432768770662643 0.85475343426196 0.432879424002827 0.854763119378869 0.432992004451029 0.854773217346934 0.433106522586754 0.85478372926856 0.433222966595374 0.854794653911966 0.433341337959124 0.854805991434995 0.433461647109929 0.85481774291822 0.433583888041142 0.854829907741832 0.433708048021654 0.854842484578363 0.433834150906707 0.854855475908872 0.43396218 0.85486888 - 0.8 12 0.9 10 0.95 10 1 12 -7 0 0 6 7 2 0.85471089 55.4176593 0.870478258648852 55.4194729460974 0.828066493724232 55.4146179511299 0.938973869688871 55.4272271260317 0.913091011192183 55.4246736069713 0.962212494798925 55.4306342887528 1 55.43536728 - 0.8 7 1 7 -7 0 0 11 12 2 0.483898951543211 0.0757973607092663 0.484718833285831 0.0689709430393895 0.485534263180288 0.0621348936230656 0.486345359392154 0.0552881545346237 0.487152238645572 0.0484296618410228 0.487955016328154 0.0415583446147901 0.488753806614351 0.034673123761602 0.489548722590598 0.0277729107857078 0.490339876342338 0.0208566068127285 0.491127378969461 0.0139231021763989 0.491911340532775 0.00697127665354478 0.49269187 1.38777878078145e-017 - 0.950938201119073 12 1 12 -7 0 0 7 8 2 0.4722801 0.85484443 0.466789500252486 0.854845331879234 0.461307614478533 0.854844788135968 0.4558372040934 0.854854296625448 0.45036014228203 0.854840336164391 0.444901618916856 0.854862492730337 0.439427352726877 0.854851909558305 0.43396218 0.85486888 - 0.950938201119073 8 1 8 -7 0 0 11 42 5 0.45321307 0.30680907 0.453729790864326 0.30325473646253 0.454244312741397 0.299705515137932 0.454756671257376 0.296161176361939 0.455266841107241 0.292621911516964 0.455774963254162 0.289086759882457 0.456280887149921 0.285556776286988 0.456784807441019 0.28203062865387 0.4572866277577 0.278508993537445 0.457786431213128 0.274991307817124 0.458284218216135 0.271477578022367 0.459275813349804 0.264457674152131 0.459769620920646 0.260951503965957 0.460261460604498 0.257448971282021 0.46075135428148 0.253949932445049 0.461239323602217 0.250454244391026 0.461725389988911 0.246961764647602 0.462209574633848 0.24347235133332 0.462691898501022 0.239985863158712 0.463172382324756 0.236502159425124 0.463651046610616 0.233021100025678 0.465081641683601 0.222585436282666 0.466028174889952 0.215638344993907 0.466967673699282 0.208700154232853 0.467900301154371 0.201769723945616 0.468826203727843 0.194846021567394 0.469745546489084 0.187927857014599 0.470658477628715 0.181014149777405 0.471565134320155 0.17410388491043 0.472465677567411 0.167195850726739 0.473360239809705 0.160289033435849 0.475154366903634 0.146345993993304 0.476053709942175 0.139309780976316 0.476947143739439 0.132272513241352 0.47783481430802 0.125233036746644 0.478716865286771 0.118190196664911 0.479593438256426 0.111142834837518 0.480464672810608 0.104089789119832 0.48133070657936 0.0970298931024687 0.482191675287788 0.089961975545034 0.483047712859508 0.0828848594174753 0.483898951543211 0.0757973607092663 - 0.8 12 0.825 10 0.85 10 0.9 10 0.950938201119073 12 -7 0 0 4 5 2 0.593687291780516 0.851774647070098 0.56211649610672 0.853976786248088 0.531587010329472 0.854551512833234 0.501840719572529 0.854839573814472 0.472280100000001 0.854844430000001 - 0.8 5 0.950938201119073 5 -7 0 0 10 11 2 0.593687291780516 0.851774647070098 0.601211595549467 0.851249808726209 0.608508131880417 0.850666146028417 0.615646646265907 0.85001822246774 0.622692130963994 0.849299101164707 0.629708540557657 0.848500022217949 0.636761998014721 0.847609912997879 0.643924629484319 0.846614601458954 0.651279076737211 0.845495632753651 0.658925997187374 0.844228279713016 0.66699988 0.84277681 - 0.30821290778553 11 0.4 11 -7 0 0 4 5 2 0.45321307 0.30680907 0.448101330665096 0.341970848641403 0.443257345042937 0.374038380578519 0.438345127130327 0.406167980874987 0.432258371063966 0.443982329876691 - 0.30821290778553 5 0.4 5 -7 0 0 9 10 2 0.66699988 0.84277681 0.667938270303744 0.842608112356231 0.668872300236765 0.842438706496576 0.669802149862391 0.842268574349855 0.670727994846164 0.842097697836668 0.671650006719177 0.841926058852686 0.672568353123644 0.841753639252599 0.673483198042765 0.841580420834599 0.67439470201664 0.841406385325249 0.675303022345725 0.841231514364644 - 0.4 10 0.412299566132293 10 -7 0 0 3 4 2 0.432258371063966 0.443982329876691 0.431409448239406 0.449256315496198 0.430570518843949 0.45443086372581 0.42973718 0.45953245 - 0.4 4 0.412299566132293 4 -8 0.4 0.6 -7 0 0 10 38 5 0.38054399 0.71278377 0.381858843641531 0.707244910868633 0.383161939181277 0.701691661402556 0.384454033652945 0.69612141011009 0.385735881853231 0.690531463673992 0.38700818746178 0.684919258760369 0.388271651778481 0.679282156165054 0.389526960154723 0.673617502312056 0.390774762860894 0.667922713119528 0.392015716521283 0.662195096431368 0.39448519228334 0.650668866895156 0.395713713976883 0.64487025647532 0.396936661133765 0.639033439038814 0.398154640977216 0.633155790859591 0.399368296470634 0.627234417900331 0.400578208596298 0.621266657870917 0.401784966108566 0.615249726865773 0.402989206375491 0.609180510543193 0.404191476129224 0.603056273002096 0.406593290012002 0.590691501859338 0.407792833223947 0.584450972536027 0.408991595957577 0.57814929709361 0.410190167314135 0.571783360596611 0.411389135764613 0.56534996922178 0.412589088865184 0.558845851367277 0.413790616463853 0.552267640170009 0.414994314688262 0.545611851432073 0.416200788011688 0.538874870933102 0.4186205053619 0.525231059322123 0.419833750294925 0.518324223005699 0.421050986862503 0.511328752494501 0.422272857970793 0.504240638227735 0.423499938197085 0.497056192422785 0.424732955711649 0.4897707301368 0.42597247779148 0.482380432728587 0.427219236983064 0.474880411188326 0.428473898238721 0.467266082883004 0.42973718 0.45953245 - 0.4 11 0.45 9 0.5 9 0.55 9 0.6 11 -7 0 0 10 11 2 0.8127628 0.80236953 0.799936179726446 0.806753591009002 0.80061344413641 0.806482847477998 0.745984146017852 0.824916631504725 0.806071456029577 0.804202975554392 0.708645458768151 0.836958406882081 0.76178471272223 0.818236151065207 0.712191139681367 0.834238558518749 0.709219946699497 0.833951908634456 0.691826391693781 0.838050414726336 0.675303022345724 0.841231514364644 - 0.4 11 0.6 11 -8 0.6 0.8 -7 0 0 11 62 7 0.8127628 0.80236953 0.819083030051482 0.800209312944397 0.824584397565109 0.798329257858517 0.829445562917497 0.796668248546164 0.833786896900119 0.795185109054417 0.837697378361423 0.793849402293345 0.841244846510488 0.792637922889737 0.844482433986026 0.791532496496559 0.847452858149205 0.790518511793586 0.850190773558357 0.789584115767987 0.852724866178385 0.788719497290184 0.857433286845732 0.787113440171498 0.859607616120375 0.786372001109954 0.861626007278488 0.785683963082816 0.863507692821434 0.785042749126469 0.865268503568357 0.784442946093252 0.86692170866957 0.78388001729784 0.868478568577771 0.783350113369844 0.869948729417529 0.782849937348101 0.871340534025818 0.782376638302466 0.872661271670931 0.781927725926675 0.876429462484849 0.780647598493936 0.878682897768131 0.77988299168231 0.880728767533842 0.779189734564644 0.882604100030896 0.778555191878507 0.88433747882604 0.77796962214564 0.885951480769491 0.777425342416218 0.887465057686227 0.776915918607548 0.888893692154263 0.776436109728541 0.890250957487546 0.775981338021297 0.891548839707472 0.775547582639378 0.894047566459856 0.774714863201055 0.895248411867357 0.774315898862942 0.896411661609934 0.773930689893944 0.897547130578147 0.773555992426683 0.898664073824855 0.773188775165004 0.899771701534496 0.77282605164266 0.90087943547579 0.772464799246971 0.901997357831381 0.772101817371828 0.903136943785894 0.771733497299643 0.904311893314484 0.771355569215018 0.906153761120751 0.770766102529403 0.906780958326902 0.770565850991564 0.907423601108319 0.770361155164651 0.908084149864754 0.77015125627596 0.908765351629815 0.769935309333635 0.909470342799155 0.769712351469793 0.910202739131048 0.769481274584239 0.910966735827026 0.769240795155029 0.911767281775541 0.768989401158503 0.912610366862131 0.768725264253023 0.914396372400094 0.768167005113901 0.9153392941159 0.767872882484937 0.916339518393998 0.767561515403388 0.917405853686524 0.76723021983683 0.918548878454024 0.766875774116401 0.919781632347438 0.76649420870767 0.921120258801298 0.766080611074874 0.922585309614215 0.765628729070073 0.924203750723593 0.765130360979465 0.92601196270906 0.764574443830203 0.92806391 0.76394457 - 0.6 12 0.625 10 0.65 10 0.7 10 0.75 10 0.775 10 0.8 12 -7 0 0 10 29 4 0.38054399 0.71278377 0.374842599920762 0.73680104141338 0.377238815242729 0.726081240886808 0.351930486502475 0.830311949321813 0.389443889885197 0.673060373518486 0.338750712896314 0.883157406931875 0.376227355771103 0.725974559689369 0.352922434730347 0.822150661176888 0.358653036166761 0.797357662882107 0.356105791221009 0.807130787936398 0.353632468729015 0.815852076064742 0.352515743588215 0.819763840887901 0.351505934501222 0.823276149890377 0.350590021416018 0.826438426490969 0.349754984281584 0.829300094111153 0.348987803045754 0.831910576168948 0.348275457657346 0.834319296085838 0.347604928064547 0.836575677280563 0.346963194215831 0.838729143173563 0.345085319747138 0.845029065206369 0.34373078705905 0.849457104657451 0.342472083641388 0.853552890340945 0.341398793778824 0.857075119692648 0.34049164039711 0.860101532784885 0.339622485059375 0.863028912320684 0.33855432797049 0.866573083640533 0.336941307972971 0.871768914716076 0.334328702550049 0.879970316154875 0.330152927823851 0.89285024119753 - 0.6 11 0.65 9 0.7 9 0.8 11 -7 0 0 11 12 2 0.32546703 0.907144330000001 0.325898021911402 0.905843945630701 0.326328001858043 0.904543776591601 0.326756972783441 0.903243815638316 0.327184939223215 0.901944050577702 0.327611905626647 0.900644469422363 0.328037876135703 0.899345061068711 0.328462854709165 0.898045814915048 0.328886845248807 0.896746720473686 0.329309851661913 0.89544776717892 0.329731877874922 0.894148944345332 0.330152927823851 0.89285024119753 - 0.2 12 0.214883998084454 12 -7 0 0 3 4 2 0.938183832958998 0.760874129742791 0.934774321696946 0.761896373944402 0.931401913716968 0.762919923083032 0.92806391 0.76394457 - 0.2 4 0.214883998084454 4 -8 0 0.2 -7 0 0 9 18 3 0.29266018 1 0.294668145224848 0.994625237976582 0.296650976404109 0.989282746493952 0.298609114837995 0.983971403350465 0.300543063022448 0.978689902358005 0.302453183070055 0.973437293067843 0.304339952238217 0.968212299880731 0.306203750053424 0.963013885099063 0.308044978459857 0.957840935015388 0.311683052848662 0.947543822205248 0.313479898791562 0.942419659573335 0.315254934744575 0.937318812545983 0.317008548553221 0.932240158171779 0.318741036354825 0.927182823483997 0.320452837866402 0.922145488414491 0.322144201649125 0.917127372871065 0.323815499644607 0.912127310817357 0.32546703 0.90714433 - 0 10 0.1 8 0.2 10 -7 0 0 4 5 2 1.00922414 0.74147285 0.989425757284546 0.74632170688145 0.971219550891217 0.751216057882008 0.954218158149659 0.756066697036722 0.938183832958998 0.760874129742791 - 0 5 0.2 5 -8 1.00922414 1.18410863 -7 0 0 9 26 4 1.00922414 0.74147285 1.01408204262137 0.741472850000007 1.01893991725357 0.741472849999973 1.02379789700094 0.741472850000054 1.02865568399904 0.741472849999932 1.03351369698859 0.741472850000059 1.03837153130044 0.741472849999964 1.04322945942915 0.741472850000014 1.04808735750741 0.741472849999997 1.05780316265395 0.741472850000001 1.06266106522385 0.741472849999994 1.06751896779078 0.741472850000018 1.07237687035488 0.741472849999968 1.07723477291685 0.741472850000039 1.08209267547655 0.741472849999968 1.08695057803479 0.741472850000017 1.09180848059155 0.741472849999996 1.10638218825893 0.741472850000005 1.11609799416097 0.741472849999982 1.12581379732145 0.741472850000037 1.13552960307218 0.741472849999943 1.14524541019272 0.741472850000066 1.15496121435441 0.741472849999946 1.16467701682554 0.741472850000029 1.17439282483558 0.741472849999991 1.18410863 0.74147285 - 1.00922414 10 1.0529452625 8 1.096666385 8 1.18410863 10 -8 1.00922414 1.18410863 -7 0 0 9 26 4 1.00922414 0.74147285 1.01408204262138 0.741472850000004 1.01893991725356 0.741472849999982 1.02379789700094 0.741472850000037 1.02865568399905 0.741472849999951 1.03351369698859 0.741472850000045 1.03837153130042 0.741472849999971 1.04322945942916 0.741472850000011 1.04808735750741 0.741472849999998 1.05780316265395 0.741472849999998 1.06266106522389 0.741472850000014 1.06751896779066 0.741472849999965 1.07237687035506 0.741472850000056 1.07723477291666 0.741472849999939 1.0820926754767 0.741472850000044 1.08695057803472 0.741472849999981 1.09180848059156 0.741472850000003 1.10638218825892 0.741472849999996 1.11609799416097 0.741472850000007 1.12581379732147 0.741472849999992 1.13552960307215 0.741472850000007 1.14524541019274 0.741472849999994 1.1549612143544 0.741472850000004 1.16467701682554 0.741472849999998 1.17439282483558 0.74147285 1.18410863 0.74147285 - 1.00922414 10 1.0529452625 8 1.096666385 8 1.18410863 10 -8 0 0.25852715 -7 0 0 5 6 2 0 0 0.311126674396231 0 0.622253201920746 0 0.933380364971317 0 1.24450640850895 0 1.5556334 0 - 0 6 0.25852715 6 -8 0 0.25852715 -7 0 0 9 34 5 1.18410863 1 1.18410863 0.985637380555556 1.18410862999999 0.971274751719565 1.18410863000001 0.956912139516071 1.18410862999998 0.942549514730978 1.18410863000002 0.928186892306275 1.18410862999999 0.913824278003367 1.18410863000001 0.899461656095281 1.18410863 0.885099038190717 1.18410863 0.863555110367713 1.18410862999999 0.856373801131478 1.18410863000002 0.849192491918724 1.18410862999997 0.842011182714583 1.18410863000003 0.834829873504627 1.18410862999998 0.827648564273864 1.18410863000001 0.820467255007849 1.18410863 0.813285945691731 1.18410863 0.802513981620461 1.18410863000002 0.79892332689718 1.18410862999996 0.795332672140347 1.18410863000004 0.79174201734918 1.18410862999997 0.788151362523099 1.18410863000002 0.784560707661195 1.18410862999999 0.780970052762942 1.18410863 0.777379397827496 1.18410862999999 0.770198087880887 1.18410863000004 0.766607430411617 1.18410862999991 0.763016789445456 1.18410863000014 0.759426098306542 1.18410862999986 0.755835494828376 1.1841086300001 0.752244800439501 1.18410862999996 0.748654153268587 1.18410863000001 0.745063506584214 1.18410863 0.74147285 - 0 10 0.129263575 8 0.1938953625 8 0.22621125625 8 0.25852715 10 -8 0 1.18410863 -7 0 0 8 9 2 0 0 0.371269587115106 0 0.742539179280128 0 1.1138087782994 0 1.48507836667744 0 1.85634795748295 0 2.22761755620468 0 2.59888714994868 0 2.97015674 0 - 0 9 1.18410863 9 -8 0 1.18410863 -7 0 0 1 2 2 0 1 1.18410863 1 - 0 2 1.18410863 2 -8 0.84752031 1 -7 0 0 11 22 3 0 1 0 0.993069104406396 0 0.986138208849539 0 0.979207313332654 0 0.972276417858363 0 0.965345522430293 0 0.958414627050844 0 0.951483731723526 0 0.944552836451119 0 0.937621941236727 0 0.930691046083379 0 0.916829255904823 0 0.909898361518517 0 0.902967460911541 0 0.896036589709656 0 0.889105631219491 0 0.882174852971717 0 0.875243805133201 0 0.868313052649494 0 0.861382067381547 0 0.85445120504469 0 0.84752031 - 0.84752031 12 0.923760155 10 1 12 -8 0.84752031 1 -7 0 0 9 26 4 3.42297087 0 3.39397456123907 0 3.36497825252016 0 3.33598194383491 0 3.3069856351764 0 3.27798932653539 0 3.24899301790543 0 3.21999670927749 0 3.1910004006444 0 3.14750593767475 0 3.13300778336002 0 3.11850962905526 0 3.10401147476118 0 3.08951332047997 0 3.07501516621183 0 3.06051701195894 0 3.04601885772198 0 3.01702254928302 0 3.00252439259124 0 2.98802625260231 0 2.97352806201412 0 2.95902995975216 0 2.94453176638976 0 2.9300336198709 0 2.91553547426346 0 2.90103732 0 - 0.84752031 10 0.923760155 8 0.9618800775 8 1 10 -8 0 0.41008236 -7 0 0 11 12 2 0 0.84752031 0.0372802149724388 0.847520309999987 0.0745604094268512 0.847520310000054 0.111840727592314 0.847520309999866 0.149120648933534 0.847520310000239 0.186401419070602 0.84752030999968 0.223680885866641 0.847520310000326 0.260961831183704 0.847520309999749 0.298241532177005 0.847520310000144 0.335521998090816 0.847520309999941 0.372802137083162 0.847520310000014 0.41008236 0.84752031 - 0 12 0.41008236 12 -8 0 0.41008236 -7 0 0 11 12 2 0 0.84752031 0.0372802149724377 0.847520310000014 0.0745604094268389 0.847520309999941 0.111840727592367 0.847520310000144 0.14912064893342 0.847520309999749 0.186401419070743 0.847520310000326 0.223680885866531 0.84752030999968 0.260961831183748 0.847520310000239 0.298241532177001 0.847520309999866 0.335521998090812 0.847520310000054 0.372802137083161 0.847520309999987 0.41008236 0.84752031 - 0 12 0.41008236 12 -8 0.15247929 0.84752031 -7 0 0 11 32 4 0 0.847520310000001 0 0.815927538358542 0 0.784334734909756 0 0.752742051420888 0 0.721149143880304 0 0.689556481526776 0 0.657963671185674 0 0.626370880620017 0 0.594778134932641 0 0.563185351384169 0 0.531592577823446 0 0.484203415523367 0 0.468407028049005 0 0.452610640749739 0 0.43681425377191 0 0.421017867189485 0 0.405221481008008 0 0.389425095159994 0 0.373628709509155 0 0.357832323847323 0 0.342035937896227 0 0.310443164717159 0 0.294646776405038 0 0.278850391159865 0 0.263054004525883 0 0.247257614923636 0 0.231461225388395 0 0.215664839606931 0 0.199868456917252 0 0.184072070955527 0 0.168275676615318 0 0.15247929 - 0.15247929 12 0.4999998 10 0.673760055 10 0.84752031 12 -8 0.15247929 0.84752031 -7 0 0 9 34 5 2.90103732 0 2.83495106794814 0 2.76886480826467 0 2.70277854943329 0 2.63669233638168 0 2.57060603185903 0 2.50451982218345 0 2.43843355289609 0 2.37234730226667 0 2.24017479459073 0 2.17408854063064 0 2.10800228656112 0 2.04191603239451 0 1.97582977814386 0 1.90974352382117 0 1.84365726943959 0 1.77757101501133 0 1.64539850608703 0 1.57931225167175 0 1.51322599731703 0 1.44713974303517 0 1.38105348884079 0 1.31496723474567 0 1.24888098076422 0 1.18279472690899 0 1.05062221947805 0 0.984535969644205 0 0.91844969428098 0 0.852363496377609 0 0.786277163154294 0 0.720190969031909 0 0.654104703164648 0 0.58801843539655 0 0.52193218 0 - 0.15247929 10 0.326239545 8 0.4999998 8 0.673760055 8 0.84752031 10 -8 0 0.41008734 -7 0 0 5 6 2 0.41008734 0.15247929 0.328069871407767 0.15247929 0.246052404373543 0.15247929 0.164034933809258 0.152479289999999 0.082017469374599 0.15247929 0 0.15247929 - 0 6 0.41008734 6 -8 0 0.41008734 -7 0 0 5 6 2 0.41008734 0.15247929 0.328069871407767 0.15247929 0.246052404373544 0.152479289999999 0.164034933809258 0.15247929 0.0820174693745991 0.15247929 -2.77555756156289e-017 0.15247929 - 0 6 0.41008734 6 -7 0 0 9 26 4 0.41008734 0.15247929 0.410021345790742 0.152760187178713 0.409970096044097 0.153052251782977 0.409934050632413 0.153355322079789 0.409913622824187 0.153669201938993 0.409909182253005 0.153993618839877 0.409921037241531 0.154328275415787 0.409949439927267 0.154672798637842 0.40999457376101 0.155026778604441 0.410118535029869 0.155752726977817 0.410197362436128 0.156124695516046 0.410293151992492 0.156505197150426 0.410405950164464 0.156893723225939 0.410535731210226 0.157289721231675 0.410682395498354 0.157692599220996 0.410845769438848 0.158101731108935 0.411025607026243 0.158516462846037 0.411328037055361 0.159164043715956 0.411439244559788 0.159393420689383 0.411555165019092 0.159624142260701 0.411675741895178 0.159856098436327 0.4118009127671 0.160089177697258 0.411930609526628 0.160323267337522 0.412064758604308 0.160558253801764 0.412203281225999 0.16079402302196 0.412346093699899 0.161030460753262 - 0 10 0.125 8 0.25 8 0.317890101713215 10 -7 0 0 4 5 2 0 55.09513178 0.05835199350951 55.0943239795164 0.135344794742906 55.0971578697083 0.254368086645081 55.1059530172545 0.39369133 55.11954557 - 0 5 0.317890101713215 5 -7 0 0 9 18 3 0.412346093699899 0.161030460753262 0.412466229119535 0.161229354766455 0.412589400192579 0.161428721842103 0.412715557099722 0.161628493973553 0.412844647559141 0.161828603065609 0.412976616947409 0.162028981076 0.413111408431197 0.162229560156546 0.413248963109793 0.162430272794013 0.413389220168411 0.162631051950658 0.413844884351858 0.163271289292823 0.414170298049521 0.163710747711571 0.41450770251876 0.16414951043323 0.414856399763867 0.164586893175792 0.41521566204383 0.165022235230671 0.415584735166873 0.165454899969593 0.415962847612104 0.165884280582411 0.416349223468138 0.16630980929328 0.41674308 0.16673095 - 0.317890101713215 10 0.375 8 0.5 10 -7 0 0 3 4 2 0.39369133 55.11954557 0.500110251989145 55.1299279316035 0.620085977754412 55.1433938928359 0.744100615116397 55.1587559264803 - 0.317890101713215 4 0.5 4 -7 0 0 11 12 2 0.86723898 55.17442391 0.855761851301078 55.1729268433062 0.844341433589788 55.1714443389572 0.832977264819737 55.1699763370424 0.821669975345255 55.1685229186213 0.810419078858408 55.1670840216664 0.799224471177881 55.1656596326067 0.788086599460285 55.1642498085906 0.777005477246084 55.1628545514222 0.765980596940289 55.1614737962571 0.755012330890908 55.1601075906742 0.744100615116397 55.1587559264802 - 0.5 12 0.559785527676533 12 -7 0 0 4 5 2 0.418581908921481 0.16842585654686 0.418074205511971 0.168029849638425 0.417601107703569 0.167609834589518 0.417159600579378 0.1671763236143 0.41674308 0.16673095 - 0.5 5 0.559785527676533 5 -8 0.25 0.5 -7 0 0 11 12 2 0.93354024 55.18312422 0.92603097290166 55.1821352561468 0.918818039010463 55.1811858920062 0.911901751831456 55.1802761686374 0.905280953854896 55.1794059345418 0.89895841584889 55.1785755521431 0.892929391683737 55.1777844009748 0.887199967007804 55.1770332762774 0.881764261508744 55.1763214098963 0.876626507672835 55.1756493545654 0.871784490104115 55.1750168210419 0.86723898 55.17442391 - 0.25 12 0.5 12 -7 0 0 4 5 2 0.419693477235591 0.169203422685851 0.419332683718347 0.168979420400613 0.419031873479082 0.168768746087214 0.418782984576078 0.168582694863971 0.418581908921481 0.16842585654686 - 0.25 5 0.5 5 -8 0 0.25 -7 0 0 11 12 2 1 55.19186736 0.993958206427339 55.1910725294581 0.987915788578306 55.190277616789 0.981876321463449 55.1894830923061 0.975829693171504 55.1886876257291 0.969794615493756 55.1878936787005 0.963746286601417 55.1870979884037 0.957708965631414 55.1863037462515 0.951665099460813 55.1855086430548 0.945623897422081 55.1847138903274 0.939582030981543 55.1839190502016 0.93354024 55.18312422 - 0 12 0.25 12 -7 0 0 3 4 2 0.42090498 0.16985645 0.42048374492839 0.169663059904517 0.420080541694459 0.169443735549516 0.419693477235591 0.169203422685851 - 0 4 0.25 4 -8 0.8 1 -7 0 0 10 29 4 2.54253999 0.84589577 2.54179279180027 0.850535209335359 2.54105836540743 0.855115895464505 2.54033641425725 0.859639557431345 2.5396266541985 0.864107864034413 2.53892881234366 0.868522430782738 2.53824262661508 0.872884822414279 2.53756784564881 0.877196553218039 2.53690422868161 0.881459087388566 2.53625154509632 0.885673841656686 2.53496760139647 0.894010543193322 2.53433634130445 0.898132490310909 2.5337155698136 0.902209420133409 2.53310507467794 0.906242666295107 2.53250465225548 0.910233524495259 2.53191410669731 0.914183257637844 2.53133324996675 0.918093095597134 2.5307619020469 0.92196423387365 2.53019989066188 0.925797835413837 2.52854136829337 0.937189448747403 2.52747236931527 0.944638267964325 2.52643872864698 0.951950592643216 2.52543923164934 0.959135096439069 2.52447277673131 0.966199993713758 2.52353834175023 0.973153305488493 2.52263501830184 0.980002586490149 2.52176196015315 0.986755347702323 2.52091841988631 0.993418778033492 2.52010372 1 - 0.8 11 0.85 9 0.9 9 1 11 -7 0 0 4 5 2 0.484640253200537 0.194861846390272 0.46419871559807 0.188422276517317 0.447848165577824 0.182179163959945 0.433597967261165 0.176047855774695 0.42090498 0.16985645 - 0.8 5 1 5 -7 0 0 11 22 3 2.56182051530947 0.730892495636628 2.56129854269883 0.733910056171408 2.56077982915707 0.736913172694053 2.56026438467347 0.739901788249163 2.55975221908612 0.742875846557381 2.55924334207736 0.745835292040886 2.55873776317611 0.748780069809206 2.55823549177663 0.751710125550935 2.55773653717866 0.754625405303879 2.5572409086226 0.757525855255826 2.55674861520181 0.760411422250686 2.55487579569093 0.771406783507642 2.55351871216566 0.779411878898473 2.55218860480064 0.787296229601509 2.55088570782835 0.795058436741985 2.54961007982496 0.802698156072551 2.54836211449223 0.810212987148063 2.54714168751533 0.817603667007413 2.54594920491214 0.824867688439523 2.54478464575289 0.83200512874535 2.54364820651605 0.839014725092356 2.54253999 0.84589577 - 0.664667925968128 12 0.7 10 0.8 12 -7 0 0 3 4 2 0.53782595 0.20914955 0.517283185420326 0.204470912379206 0.499684644605854 0.199601187017902 0.484640253200537 0.194861846390272 - 0.664667925968128 4 0.8 4 -7 0 0 11 12 2 2.57291933 0.66753805 2.57185773834826 0.673528376162893 2.57080645558847 0.67947371196638 2.56976555842203 0.685373636817168 2.56873511522454 0.691227775326542 2.56771519806255 0.697035729092691 2.56670587701709 0.702797108997507 2.56570721918325 0.708511540840756 2.56471929035878 0.714178655708386 2.56374215509124 0.719798089734369 2.56277587632541 0.725369486115831 2.56182051530947 0.730892495636628 - 0.6 12 0.664667925968128 12 -7 0 0 3 4 2 0.569295382630129 0.215719216039619 0.558124218293994 0.213575572864934 0.547642233288241 0.21138521953766 0.53782595 0.20914955 - 0.6 4 0.664667925968128 4 -7 0 0 10 11 2 0.569295382630129 0.215719216039619 0.582236061809498 0.21820241275609 0.595799938013076 0.220627270377371 0.609986664835455 0.222993645364223 0.624795819260835 0.225301401204649 0.640226902854916 0.22755040865478 0.656279341254303 0.229740545686536 0.672952483083518 0.231871697328995 0.690245599427379 0.233943755590184 0.708157884991659 0.235956619646429 0.726688462077035 0.237910196485819 - 0.550748293513788 11 0.747780415043284 11 -7 0 0 3 4 2 2.57291933 0.66753805 2.58794957857627 0.582725665799181 2.60537850840012 0.487626081264505 2.62565605 0.38838725 - 0.550748293513788 4 0.747780415043284 4 -7 0 0 10 29 4 0.726688462077035 0.237910196485819 0.726897210730903 0.237932203708453 0.727106037847384 0.237954203407403 0.727314943425224 0.237976195582536 0.727523927463166 0.237998180233719 0.727732989959954 0.23802015736082 0.72794213091433 0.238042126963705 0.728151350325033 0.238064089042244 0.728360648190804 0.238086043596302 0.728570024510381 0.238107990625748 0.740575309145083 0.239365493598966 0.752619958440018 0.240577191715929 0.764913196168762 0.241765000357371 0.77745480344161 0.24292889879119 0.790244487490752 0.244068861789236 0.803282039616639 0.24518487427924 0.816567140917062 0.246276913118901 0.830099527676631 0.247344962796845 0.84387889237424 0.248389005906655 0.86173823708523 0.249687798815237 0.865589973020326 0.249964776150744 0.869460126966472 0.250239958918018 0.873348692475899 0.250513346807977 0.877255663037762 0.250784939518383 0.88118103209001 0.251054736754427 0.885124793012042 0.251322738228362 0.889086939117603 0.251588943659145 0.893067463651521 0.251853352772281 0.897066359789266 0.252115965299792 - 0.747780415043284 11 0.75 9 0.875 9 0.909162471422618 11 -7 0 0 3 4 2 2.62565605 0.38838725 2.64226466480508 0.307104226455839 2.66083027560171 0.222994549808893 2.6820843 0.13957584 - 0.747780415043284 4 0.909162471422618 4 -8 0 0.2 -7 0 0 8 23 4 2.72079289 0 2.7183319724904 0.00811253117801628 2.71587815716197 0.0163085346106228 2.71343112298143 0.0245889827857283 2.71099063771137 0.0329545849415767 2.70855633696646 0.0414065316366137 2.70612800204665 0.0499455547115631 2.70370531353511 0.0585727629439577 2.70007934303179 0.0716473254264106 2.69887203033031 0.0760278029694986 2.69766602546172 0.0804307015271723 2.69646129329963 0.0848561499656131 2.69525779934673 0.0893042770547248 2.69405550919449 0.0937752134714036 2.69285438797794 0.0982690938027341 2.69045441169143 0.107303023295728 2.68925555579495 0.111843075667666 2.68805780269671 0.11640633187481 2.68686111158898 0.120992953586234 2.68566544895462 0.125603076983201 2.68447078362425 0.130236831538155 2.68327707859496 0.134894371116535 2.6820843 0.13957584 - 0 9 0.1 7 0.15 7 0.2 9 -7 0 0 4 5 2 1.00922544 0.25852666 0.981420455807856 0.257150663090619 0.953452536922146 0.255639042707618 0.925336860032921 0.253972524526952 0.897066359789266 0.252115965299792 - 0 5 0.2 5 -8 1.00922544 1.18410863 -7 0 0 10 20 3 1.18410863 0.25852666 1.17536447044898 0.258526660000002 1.16662030599648 0.258526659999992 1.15787615350554 0.258526660000019 1.14913199280541 0.258526659999969 1.14038782892639 0.258526660000037 1.13164367163173 0.258526659999968 1.12289951559045 0.258526660000019 1.11415535250283 0.258526659999993 1.1054111943689 0.258526660000002 1.08792287573986 0.258526659999999 1.07917871970279 0.258526660000007 1.07043454012966 0.258526659999984 1.06169044079557 0.258526660000026 1.05294617184267 0.258526659999971 1.04420214643111 0.258526660000023 1.03545787594513 0.258526659999988 1.02671377676156 0.258526660000004 1.01796959944013 0.258526659999999 1.00922544 0.25852666 - 1.00922544 11 1.096667035 9 1.18410863 11 -8 1.00922544 1.18410863 -7 0 0 10 20 3 1.18410863 0.25852666 1.17536447044898 0.258526659999999 1.16662030599648 0.258526660000004 1.15787615350558 0.258526659999988 1.14913199280531 0.258526660000023 1.14038782892653 0.258526659999971 1.13164367163159 0.258526660000026 1.12289951559053 0.258526659999984 1.11415535250281 0.258526660000007 1.1054111943689 0.258526659999999 1.08792287573986 0.258526660000002 1.07917871970275 0.258526659999993 1.07043454012976 0.258526660000019 1.06169044079538 0.258526659999968 1.05294617184292 0.258526660000037 1.04420214643089 0.258526659999969 1.03545787594526 0.258526660000019 1.0267137767615 0.258526659999992 1.01796959944014 0.258526660000002 1.00922544 0.25852666 - 1.00922544 11 1.096667035 9 1.18410863 11 -8 0.5 0.74147334 -7 0 0 9 34 5 1.18410863 0.25852666 1.18410862999999 0.271941851633635 1.18410863000003 0.285357040940475 1.18410862999995 0.298772228326612 1.18410863000007 0.312187414198338 1.18410862999994 0.325602598961624 1.18410863000004 0.339017783022826 1.18410862999998 0.35243296678795 1.18410863 0.365848150663242 1.18410863 0.385970927250619 1.18410862999999 0.392678519425328 1.18410863000001 0.399386111595992 1.18410863 0.406093703779739 1.18410862999999 0.412801295993526 1.18410863000002 0.419508888254556 1.18410862999999 0.426216480579753 1.18410863000001 0.432924072986291 1.18410862999999 0.442985461743612 1.18410863000003 0.446339258015292 1.18410862999994 0.449693054307884 1.18410863000009 0.4530468506233 1.1841086299999 0.456400646963006 1.18410863000007 0.459754443329086 1.18410862999996 0.463108239722974 1.18410863000001 0.466462036146624 1.18410862999999 0.473169629056732 1.18410863000004 0.47652351425593 1.18410862999992 0.479876804193706 1.18410863000012 0.483231899432756 1.18410862999987 0.486583844621953 1.1841086300001 0.48993903851969 1.18410862999995 0.493292562835508 1.18410863000001 0.4966460536118 1.18410863 0.49999985 - 0.5 10 0.62073667 8 0.681105005 8 0.7112891725 8 0.74147334 10 -8 0.5 0.74147334 -7 0 0 11 32 4 1.4508111 0 1.41783813714872 0 1.38486515974655 0 1.35189216046134 0 1.31891923555563 0 1.28594619229624 0 1.25297327364433 0 1.22000025997118 0 1.18702729810195 0 1.15405431587567 0 1.12108133789871 0 1.05513537959425 0 1.02216239982497 0 0.989189419406406 0 0.956216438403269 0 0.92324345694558 0 0.890270475197337 0 0.85729749332389 0 0.824324511461846 0 0.791351529685517 0 0.758378547976952 0 0.659459602625368 0 0.593513638623584 0 0.52756767640179 0 0.461621711902032 0 0.395675747613401 0 0.329729787560796 0 0.263783831111237 0 0.197837873664426 0 0.131891913677626 0 0.065945956889569 0 0 0 - 0.5 12 0.560368335 10 0.62073667 10 0.74147334 12 -8 0.25852715 0.5 -7 0 0 5 6 2 1.5556334 0 1.84623598140308 0 2.1368383276968 0 2.42744107994131 0 2.71804353902199 0 3.00864606 0 - 0.25852715 6 0.5 6 -8 0.25852715 0.5 -7 0 0 9 34 5 1.18410863 0.74147285 1.18410863 0.72805769669167 1.18410863000001 0.714642529667241 1.18410862999998 0.701227364318415 1.18410863000003 0.687812205631773 1.18410862999998 0.674397051861455 1.18410863000001 0.660981898201875 1.18410863 0.647566740460332 1.18410863 0.634151578729775 1.18410863 0.614028842227237 1.18410862999999 0.607321263444672 1.18410863000001 0.600613684695745 1.18410862999998 0.593906105962522 1.18410863000002 0.587198527227005 1.18410862999998 0.580490948471253 1.18410863000002 0.573783369677305 1.18410862999999 0.567075790827178 1.18410863000001 0.557014422440808 1.18410862999994 0.553660632951267 1.18410863000014 0.550306843440955 1.18410862999979 0.546953053916342 1.18410863000021 0.543599264384185 1.18410862999986 0.540245474850918 1.18410863000006 0.536891685323229 1.18410862999999 0.533537895807669 1.18410863 0.526830316814005 1.18410863000001 0.523476616055325 1.18410862999996 0.520122320011292 1.18410863000006 0.516769829284679 1.18410862999994 0.513414188569352 1.18410863000004 0.510061796340561 1.18410862999998 0.506707734837085 1.18410863000001 0.503353639583496 1.18410863 0.49999985 - 0.25852715 10 0.379263575 8 0.4396317875 8 0.46981589375 8 0.5 10 -8 0.8 1 -7 0 0 9 18 3 0.12786832 2.68510674 0.120296116125506 2.6870605838962 0.112782478520506 2.68901807649004 0.105327592934346 2.69097916876426 0.0979309038932307 2.69294400657431 0.0905932999244442 2.69491235601499 0.0833138195878083 2.6968844699046 0.0760930998017088 2.6988601811754 0.0689308639012173 2.70083956200524 0.0547234529473224 2.70480563948981 0.0476782758882974 2.70679233649938 0.0406916116836793 2.70878269631196 0.0337634606973503 2.71077671860483 0.0268938103821156 2.71277440709736 0.0200826432392625 2.71477576713099 0.0133299541017127 2.71678080036226 0.00663574926620494 2.71878950499734 -3.46944695195361e-018 2.72080189 - 0.8 10 0.9 8 1 10 -7 0 0 4 5 2 0.905948157513261 0.747319411003955 0.931926140519115 0.745645249624567 0.957840659308173 0.74412544950758 0.983637378291133 0.742738973109192 1.00922414 0.74147285 - 0.8 5 1 5 -7 0 0 9 50 7 0.28937250360486 2.64669271659733 0.288433480023675 2.64689979379268 0.287495315059453 2.64710686477944 0.286558007709503 2.64731392977154 0.285621556977604 2.64752098898201 0.284685961885107 2.64772804262055 0.283751221482169 2.64793509089104 0.282817334850416 2.64814213399087 0.28188430107858 2.64834917211624 0.277301442062136 2.64936700427958 0.273663832018681 2.65017772967108 0.270039235060847 2.65098839327797 0.266427584680414 2.65179900966346 0.262828824846192 2.65260959116343 0.259242906947756 2.65342014855875 0.255669777632186 2.65423069380486 0.252109374476999 2.65504124100484 0.245013918420006 2.65666236268298 0.241478864680711 2.65747293735042 0.237956431623724 2.65828353807226 0.234446560043 2.65909417857043 0.23094921279635 2.65990486744782 0.227464326926774 2.66071561948829 0.223991832419661 2.66152645128557 0.220531709681057 2.66233736772409 0.213636065795149 2.66395940396049 0.210200548677308 2.6647705228192 0.206777286643296 2.66558175447877 0.203366229034148 2.66639311134463 0.199967324873323 2.66720460602088 0.196580523466868 2.66801625117071 0.193205775003468 2.66882805936825 0.189843031154652 2.66964004295897 0.183141460195026 2.67126438486759 0.179802632011699 2.67207674343925 0.176475712807636 2.67288930211231 0.17316065639006 2.67370207289807 0.169857402831587 2.67451507145407 0.166565916660859 2.67532830746421 0.163286167050771 2.67614178952281 0.160018078253904 2.6769555375681 0.153505159405941 2.6785835837536 0.150260326238464 2.67939788267574 0.147027080148899 2.68021246834134 0.143805364151188 2.68102735643053 0.140595151471733 2.68184255486759 0.13739638613984 2.68265807929089 0.134209004908092 2.68347394740962 0.131033007453919 2.68429016076603 0.12786832 2.68510674 - 0.668616376685245 10 0.675 8 0.7 8 0.725 8 0.75 8 0.775 8 0.8 10 -7 0 0 4 5 2 0.79063868 0.75601331 0.819754263988397 0.753454178688467 0.848684846305856 0.751191630102131 0.877419247037757 0.749157967912063 0.905948157513261 0.747319411003955 - 0.668616376685245 5 0.8 5 -7 0 0 9 10 2 0.79063868 0.75601331 0.783318512686967 0.756656720930977 0.776141293526371 0.757300655569526 0.769101919751214 0.757945364738127 0.762195565810469 0.758591093561238 0.755417656616066 0.759238082656639 0.748763846774954 0.759886568975609 0.742230003867887 0.76053678643106 0.735812193839944 0.761188966456727 0.729506666565393 0.76184333863788 - 0.5 10 0.553192694020208 10 -7 0 0 3 4 2 0.28937250360486 2.64669271659733 0.322170685650815 2.63945993172711 0.35360688034215 2.63281978228129 0.38388975 2.6266127 - 0.5 4 0.553192694020208 4 -7 0 0 9 26 4 0.729506666565393 0.76184333863788 0.728403367084342 0.76195783635654 0.727303505216937 0.762072401189546 0.726207060874012 0.76218703436677 0.725114014138807 0.762301737116354 0.724024345264592 0.762416510664806 0.722938034672307 0.762531356237115 0.721855062948198 0.762646275056851 0.72077541084143 0.762761268346282 0.712471191833672 0.763649043335999 0.705392154984034 0.764425162628197 0.69845618062134 0.765205063518305 0.69165777659207 0.765989117791098 0.684991858114125 0.766777683595265 0.678453475391214 0.767571134852811 0.67203804172864 0.768369834119328 0.665741146905031 0.769174152282425 0.648357320925121 0.771452551152456 0.637531404806373 0.772940308285088 0.627055979548052 0.774449952360412 0.616908464451982 0.775983739629034 0.607068236131674 0.777543986316236 0.5975163520128 0.77913309070396 0.588235325597114 0.780753556175548 0.579208939777134 0.782408016400612 0.570422084485564 0.784099263837749 - 0.553192694020208 10 0.5625 8 0.625 8 0.738235102006945 10 -7 0 0 4 5 2 0.38388975 2.6266127 0.462898934579973 2.61041817491542 0.534912783272737 2.5968765412288 0.601873284806845 2.58460528120047 0.665345 2.57334584 - 0.553192694020208 5 0.738235102006945 5 -8 0.2 0.4 -7 0 0 11 52 6 0.83003831 2.54514399 0.82843902301987 2.54540503605748 0.82683161700297 2.54566778222135 0.8252161212768 2.54593222422928 0.823592587631116 2.54619835410353 0.821961067848465 2.54646616384764 0.820321606962792 2.54673564652308 0.818674246269178 2.54700679579572 0.817019030145024 2.54727960477042 0.815356010698591 2.54755406527355 0.813685244305484 2.54783016838652 0.810328303806228 2.54838564629802 0.808642133427752 2.5486650204806 0.806948304996186 2.54894602330666 0.805246872447545 2.54922864619126 0.803537891293141 2.54951288026393 0.80182141458082 2.54979871701909 0.800097493089005 2.55008614831429 0.798366177705625 2.55037516594159 0.796627521990409 2.55066576123644 0.794881582867196 2.5509579249335 0.789622086588141 2.55183909324844 0.786086848007467 2.55243277551041 0.782523141569377 2.55303262272643 0.778931426064053 2.55363855947842 0.775312170219339 2.5542505082034 0.771665850055883 2.55486838963801 0.767992950070324 2.55549212261369 0.76429396574535 2.55612162363564 0.760569404872093 2.55675680665855 0.756819785186772 2.55739758348498 0.749271466428959 2.55869014693777 0.745472769696304 2.55934193316301 0.741650053405061 2.55999913523653 0.737803856975803 2.56066166031191 0.733934717752373 2.56132941548287 0.730043178072679 2.56200230653789 0.72612979442461 2.56268023638411 0.722195135112595 2.56336310542738 0.718239768028174 2.56405081373324 0.714264255212641 2.56474326195412 0.70627411693695 2.56613742916601 0.702259487029802 2.56683914894871 0.698225952224782 2.56754538860821 0.694173668876899 2.56825611949051 0.690104463945428 2.56897101831363 0.686016673181299 2.56969037608521 0.681913730872843 2.57041358567125 0.677793715729296 2.57114098274264 0.673658834395407 2.5718721753282 0.669508991881257 2.5726071767445 0.665345 2.57334584 - 0.2 12 0.225 10 0.25 10 0.3 10 0.35 10 0.4 12 -7 0 0 4 5 2 0.491680637984723 0.802993637520819 0.50740408077076 0.798283473309672 0.525886299012917 0.793365251561515 0.547107455425676 0.788586740339516 0.570422084485564 0.784099263837749 - 0.2 5 0.4 5 -8 0 0.2 -7 0 0 9 18 3 1 2.52012912 0.992061759955903 2.52111220521841 0.983998400361719 2.52213833073325 0.975798143574128 2.52320858112978 0.967448892928555 2.52432421282793 0.958938123449775 2.52548665993822 0.950252762662118 2.52669754423127 0.941379061498422 2.52795868922292 0.93230245530956 2.5292721383743 0.913712374634653 2.53200821643757 0.904198905732437 2.53343084441518 0.89445142207234 2.53491035588156 0.884453613375276 2.53644924923614 0.874187402665746 2.53805038980275 0.863634446675219 2.53971677291974 0.852773682885322 2.54145191414789 0.841583139101652 2.54325956763946 0.83003831 2.54514399 - 0 10 0.1 8 0.2 10 -7 0 0 4 5 2 0.42089936 0.83014305 0.43467823182042 0.82342175586927 0.450323307798048 0.816724098565623 0.468464039837767 0.809948475032199 0.491680637984723 0.802993637520819 - 0 5 0.2 5 -8 0.75 1 -7 0 0 8 16 3 0.06616403 55.20420903 0.0620287704289727 55.2047535559312 0.0578936326526455 55.2052980659253 0.0537582084127802 55.2058426137422 0.0496229962481993 55.2063871337338 0.0454878416518414 55.2069316462462 0.0413524855895481 55.2074761853883 0.037217265770299 55.2080207066913 0.0289467643450649 55.209109757635 0.024811578207446 55.2096542747054 0.0206760152713119 55.2101988414913 0.0165414778155853 55.2107432733475 0.0124053035696455 55.2112879208315 0.00827078401609165 55.2118323505318 0.00413524394440041 55.2123769147119 0 55.21292144 - 0.75 9 0.875 7 1 9 -7 0 0 3 4 2 0.419704598752335 0.830807056488716 0.420085024692346 0.830561730595137 0.420480012145971 0.830335578946966 0.42089936 0.83014305 - 0.75 4 1 4 -8 0.5 0.75 -7 0 0 11 12 2 0.13222607 55.19553183 0.12770598573368 55.1961219408333 0.122888836583308 55.1967517908068 0.117774560741705 55.1974213873805 0.112362668810278 55.1981307969865 0.106655689793962 55.1988796826538 0.100647371810077 55.1996688732972 0.0943476508420914 55.2004970544339 0.0877454354333364 55.2013656916158 0.0808496312265721 55.2022736090304 0.07365522065788 55.2032214687955 0.06616403 55.20420903 - 0.5 12 0.75 12 -7 0 0 3 4 2 0.4186083787104 0.831593543767701 0.418873997153163 0.831384470615429 0.419230823539424 0.831112580679465 0.419704598752335 0.830807056488716 - 0.5 4 0.75 4 -7 0 0 9 18 3 0.4186083787104 0.831593543767701 0.418099308812231 0.831994242029576 0.417568420842887 0.832447907367605 0.417019769727589 0.832954818997003 0.416458727614933 0.833513586154644 0.415891975095116 0.834120749178688 0.415327264532486 0.834770529021443 0.414772847490227 0.835454963653342 0.414236608175241 0.836164711691804 0.413564521484672 0.837118324498774 0.413406002965015 0.837348317275255 0.413250201109205 0.837579528842635 0.413097325313558 0.837811643753213 0.412947574095536 0.838044343632654 0.412801133418135 0.838277309907364 0.412658175273358 0.838510226518514 0.412518856576365 0.838742782495551 0.412383318385601 0.83897467430126 - 0.0901996913858489 10 0.25 8 0.300346391715297 10 -7 0 0 4 5 2 0.13222607 55.19553183 0.226212394641144 55.1832616094896 0.34838005121977 55.1677950399005 0.484704283971534 55.1524243362964 0.60518057 55.1406414 - 0.0901996913858489 5 0.300346391715297 5 -7 0 0 10 56 7 0.931530229241678 55.1168642957768 0.931203177617892 55.1168745131372 0.930875787541128 55.1168847954812 0.930548059043906 55.1168951428093 0.930219992158895 55.116905555122 0.929891586918915 55.11691603242 0.929562843356933 55.1169265747036 0.929233761506065 55.1169371819735 0.92890434139958 55.11694785423 0.928574583070898 55.1169585914736 0.924196550033659 55.1171018602522 0.92009777407405 55.1172440986761 0.915948167285881 55.117396112146 0.911747817491986 55.1175578997398 0.907496823405729 55.1177294598007 0.903195256505902 55.1179107913723 0.898843153123674 55.1181018949891 0.894440536722011 55.1183027712345 0.889987470387053 55.1185134186792 0.880980808644399 55.1189542410441 0.876427176698873 55.1191844174963 0.871823311700103 55.1194243571604 0.867169286497262 55.1196740574022 0.862465178769929 55.1199335149425 0.857711071024328 55.1202027259434 0.852907050598356 55.1204816859288 0.848053209656245 55.1207703898338 0.843149645193061 55.1210688319909 0.833243272870431 55.121685180251 0.828240461497605 55.1220030864228 0.823188084878979 55.1223307211275 0.81808625386711 55.1226680771229 0.812935090501537 55.1230151459293 0.807734704869166 55.1233719198151 0.802485188521929 55.1237383917262 0.797186624456012 55.1241145551371 0.791839113647598 55.124500401769 0.781046522652088 55.1252914360383 0.775601384125868 55.1256966279311 0.770107541708224 55.126111483279 0.764565119187612 55.1265359916659 0.758974230505319 55.1269701431117 0.753334985260022 55.1274139277089 0.747647494208444 55.1278673351247 0.741911874769806 55.128330354256 0.736128256527332 55.128802972751 0.718633847140125 55.1302495843591 0.706779579714055 55.1312523258357 0.694733951114412 55.1322933974342 0.682502411216992 55.1333722913862 0.670074856800599 55.1344899098816 0.657470149188339 55.1356445270412 0.644671374946687 55.1368376439008 0.631691649788178 55.1380680535268 0.618527247044867 55.1393360557521 0.60518057 55.1406414 - 0.0599516605892503 11 0.0625 9 0.09375 9 0.125 9 0.15625 9 0.1875 9 0.25 11 -7 0 0 6 7 2 0.40993166 0.84570494 0.40998600372797 0.844675906046194 0.410249527947446 0.843597929411718 0.410571583766898 0.842591463332663 0.411083228200071 0.841362353654924 0.411668652875925 0.840197392965145 0.412383318385601 0.83897467430126 - 0.0599516605892503 7 0.25 7 -7 0 0 10 11 2 1 55.11607678 0.994003646258079 55.1159942734591 0.987817645626544 55.1159474922749 0.981442182507501 55.1159364884438 0.974877464159309 55.1159613079137 0.96812372446209 55.1160219904009 0.961181227679555 55.1161185694257 0.954050272225494 55.1162510720768 0.946731194425638 55.1164195190475 0.939224372283087 55.1166239244501 0.931530229241678 55.1168642957768 - 0 11 0.0599516605892503 11 -7 0 0 10 29 4 0.41008236 0.84752031 0.410062955999925 0.847437725411345 0.41004474121411 0.847354087033706 0.41002774232312 0.847269420308121 0.410011986006785 0.847183750674914 0.409997498946228 0.847097103575583 0.409984307820825 0.847009504450142 0.409972439311811 0.846920978740105 0.409961920098859 0.846831551885762 0.409952776862662 0.846741249328194 0.409941165993796 0.846604520098056 0.409937644205956 0.8465587326108 0.409934472450182 0.846512738291254 0.409931652256272 0.846466541383594 0.409929185155022 0.846420146133534 0.409927072675728 0.846373556784442 0.409925316349406 0.846326777582419 0.409923917705555 0.84627981277113 0.409922878274685 0.846232666595859 0.409921520898969 0.846138020006435 0.409921154701026 0.846091224182221 0.409921516743372 0.846038290390025 0.409920887779725 0.846010349767829 0.409923667458428 0.845917206111469 0.409922328161312 0.845932023146309 0.4099255284263 0.845834033360559 0.409926979631516 0.845801366186882 0.409929088596713 0.845753632076508 0.40993166 0.84570494 - 0 11 0.0299758302946251 9 0.0449637454419377 9 0.0599516605892503 11 -8 0 0.15247929 -7 0 0 11 22 3 0 0.15247929 0 0.145548413128915 0 0.138617572785782 0 0.131686594948997 0 0.124755877430608 0 0.117824829630903 0 0.110894083330534 0 0.103963135487357 0 0.0970322852568474 0 0.0901014021450404 0 0.083170525988808 0 0.0693087721278791 0 0.0623778951246226 0 0.0554470180557387 0 0.0485161409283545 0 0.0415852637496623 0 0.0346543865267658 0 0.0277235092668633 0 0.0207926319770746 0 0.0138617546645689 0 0.00693087733649289 0 8.38250590400241e-019 - 0 12 0.076239645 10 0.15247929 12 -8 0 0.15247929 -7 0 0 9 26 4 0.52193218 0 0.507434063747883 0 0.492935961109469 0 0.478437856970967 0 0.463939678605514 0 0.449441644579506 0 0.434943470607215 0 0.420445376833049 0 0.405947256617991 0 0.376951024079543 0 0.36245290781737 0 0.347954791560891 0 0.333456675308974 0 0.318958559060083 0 0.304460442813244 0 0.289962326566876 0 0.275464210319896 0 0.231969861572979 0 0.202973629040611 0 0.173977396469614 0 0.144981163855897 0 0.115984931195201 0 0.0869886984834624 0 0.0579924657164359 0 0.0289962328900111 0 0 0 - 0 10 0.0381198225 8 0.076239645 8 0.15247929 10 -8 0 1.18410863 -7 0 0 1 2 2 0 0 1.18410863 0 - 0 2 1.18410863 2 -8 0 1.18410863 -7 0 0 8 9 2 0 1 0.371269587115113 1 0.742539179280126 0.999999999999988 1.11380877829939 1.00000000000002 1.48507836667746 0.999999999999982 1.85634795748294 1.00000000000001 2.22761755620468 0.999999999999995 2.59888714994868 1 2.97015674 1 - 0 9 1.18410863 9 -8 0.74147334 1 -7 0 0 9 26 4 1.4508111 0 1.49395752055349 0 1.53710389484095 0 1.5802503172861 0 1.62339669341872 0 1.6665431017033 0 1.70968949393606 0 1.75283589163933 0 1.795982288527 0 1.88227508273768 0 1.92542147994536 0 1.96856787722321 0 2.0117142745392 0 2.05486067186103 0 2.09800706915678 0 2.14115346639417 0 2.18429986354113 0 2.31373905461433 0 2.40003184788015 0 2.48632464203414 0 2.57261743602084 0 2.65891022827271 0 2.74520301803508 0 2.83149580580389 0 2.9177885928741 0 3.00408138 0 - 0.74147334 10 0.806105005 8 0.87073667 8 1 10 -8 0.74147334 1 -7 0 0 10 29 4 1.18410863 0.25852666 1.18410863000002 0.252063489510114 1.18410862999991 0.245600328236197 1.18410863000019 0.239137196588179 1.18410862999971 0.232673936704402 1.18410863000033 0.226210879341565 1.18410862999972 0.219747635212336 1.18410863000017 0.213284503544328 1.18410862999993 0.2068213273765 1.18410863000002 0.200358162430836 1.18410862999997 0.187431830007468 1.18410863000013 0.180968663853982 1.1841086299997 0.174505497747245 1.18410863000049 0.168042331676139 1.18410862999945 0.161579165628906 1.18410863000045 0.155115999594724 1.18410862999974 0.148652833561706 1.1841086300001 0.142189667518912 1.18410862999998 0.135726501454751 1.18410863000002 0.116337003164399 1.18410862999996 0.103410671089233 1.18410863000008 0.0904843386349666 1.1841086299999 0.077558005675355 1.1841086300001 0.0646316723087097 1.18410862999991 0.0517053387106199 1.18410863000006 0.0387790049873666 1.18410862999997 0.0258526710286416 1.18410863000001 0.012926336360848 1.18410863 1.00898853335041e-017 - 0.74147334 11 0.806105005 9 0.87073667 9 1 11 -7 0 0 10 11 2 1.00922544 0.25852666 1.0006240513357 0.25642002619265 0.992728400970777 0.254433616696504 0.98532887753901 0.252523059013841 0.978282635574226 0.25065710483155 0.971477985072832 0.248810376859446 0.964823689369477 0.246961134074298 0.958239595731204 0.245089248089859 0.951651731816183 0.243175040593446 0.944987550040863 0.241198070374494 0.93817111158698 0.239135718447365 - 0 11 0.0918409922080835 11 -7 0 0 4 5 2 2.72494532 1 2.71512919182863 0.973730201644435 2.70750693718564 0.952356676860187 2.70003652906738 0.930989919272212 2.69212772 0.90713174 - 0 5 0.0918409922080835 5 -7 0 0 11 42 5 2.6430183054988 0.737367675843688 2.64358614866108 0.7396529691489 2.64415594062545 0.74193554292068 2.64472769365356 0.744215454066447 2.64530142011012 0.746492759262634 2.64587713248588 0.74876751505025 2.6464548434283 0.751039777963291 2.64703456574067 0.753309604528018 2.647616312296 0.755577050911937 2.64820009589863 0.757842172356531 2.64878592931229 0.760105023297419 2.65053371487335 0.766825777122192 2.65170163418751 0.77127727306976 2.65287768865984 0.775720586639089 2.65406196241364 0.780156073514799 2.65525460394693 0.784584314777509 2.65645567535544 0.78900556515337 2.65766528459213 0.793420240908067 2.65888358554305 0.797828917547157 2.66011064654679 0.802231845076633 2.66134660208174 0.806629511136928 2.6638365254152 0.815415105179208 2.66509049404352 0.819803036190585 2.66635358327853 0.824186502765259 2.66762592067828 0.828565944313318 2.66890760689038 0.832941703252365 2.67019878850219 0.837314266300471 2.67149958455278 0.841684020158261 2.67281010004627 0.846051297034579 2.67413049847524 0.850416615657502 2.67546088922712 0.854780306291075 2.67814194142889 0.863505299803783 2.67949260310688 0.867866603030984 2.6808535231668 0.872227083204394 2.68222489810258 0.8765873271051 2.68360668831864 0.880947193189935 2.68499939717774 0.885308196204243 2.68640267227907 0.889669214902875 2.68781714297814 0.894032139290339 2.68924264054111 0.898396395956371 2.69067945869909 0.902762827111708 2.69212772 0.90713174 - 0.624657200339206 12 0.65 10 0.7 10 0.75 10 0.8 12 -7 0 0 4 5 2 0.82853129 0.2030414 0.854248257095329 0.21189477141112 0.880608132660651 0.220820319259028 0.908076811552104 0.23003051811549 0.93817111158698 0.239135718447365 - 0.624657200339206 5 0.8 5 -7 0 0 11 12 2 2.63704064 0.7127592 2.63757517114683 0.715010799102995 2.63811144823561 0.717259342368701 2.6386494825649 0.719504887007003 2.63918928462085 0.721747486239304 2.63973086497066 0.723987193016327 2.64027423442936 0.726224060719323 2.64081940398222 0.728458142843687 2.64136638469891 0.730689492645151 2.64191518770795 0.732918163033689 2.64246582421018 0.735144206628973 2.6430183054988 0.737367675843688 - 0.6 12 0.624657200339206 12 -7 0 0 3 4 2 0.814114745698882 0.198106711462962 0.818906298254293 0.199736543532826 0.823709433467134 0.201381417942606 0.82853129 0.2030414 - 0.6 4 0.624657200339206 4 -7 0 0 10 38 5 2.59117950984538 0.479697286203414 2.59209392550287 0.485179449242017 2.5930044222894 0.490602326821964 2.59391127225528 0.495967757283147 2.59481474227193 0.501277521008615 2.59571509428414 0.506533342592766 2.59661258596195 0.511736895319249 2.59750747145612 0.516889806172528 2.59840000196126 0.521993659607466 2.59929042579054 0.527049998300009 2.60138874269861 0.538881747050971 2.60259504713777 0.545617879838277 2.60379851912383 0.552272499204983 2.60499977081229 0.558849265485357 2.6061994061004 0.565351708265505 2.6073980225137 0.571783238076689 2.6085962148644 0.578147166956654 2.60979457841491 0.584446725721645 2.6109937091391 0.590685065778373 2.61339468847434 0.60304540085642 2.61459653602056 0.609167390808045 2.6158003554981 0.615234362600128 2.61700670162442 0.62124909219368 2.61821621847177 0.627214726398113 2.61942950249907 0.633134085525506 2.6206471425417 0.639009868017002 2.62186978865714 0.644844999206138 2.62309805677017 0.650642140828584 2.62556713650205 0.662165935502869 2.62680794699625 0.667892582900321 2.62805567592029 0.673586714198443 2.62931096733389 0.679250959654666 2.63057451482527 0.684888098619702 2.63184698192474 0.69050067263091 2.63312909345173 0.696091429600471 2.63442156746847 0.701662979852892 2.63572515661758 0.707218004738819 2.63704064 0.7127592 - 0.413275132100674 11 0.45 9 0.5 9 0.55 9 0.6 11 -7 0 0 6 7 2 0.68608119 0.16093914 0.710920015977125 0.166147162488298 0.733481680809916 0.171893880912946 0.754328794085754 0.178375809732587 0.774364053600123 0.184726244688904 0.794097785779316 0.191298003253921 0.814114745698882 0.198106711462962 - 0.413275132100674 7 0.6 7 -7 0 0 11 12 2 0.68608119 0.16093914 0.685072028009351 0.160727546218615 0.684069328956655 0.160518923388344 0.683072882187869 0.160313208312554 0.682082482970821 0.160110339909804 0.681097932171522 0.159910259110785 0.68011903595918 0.159712908763611 0.679145605535196 0.1595182335463 0.67817745688232 0.159326179885492 0.677214410530883 0.159136695880619 0.676256291339683 0.158949731232889 0.675302928289615 0.15876523717856 - 0.4 12 0.411315319709357 12 -7 0 0 3 4 2 2.59117950984538 0.479697286203414 2.59002516498361 0.472776684305172 2.5889191221429 0.46606933227442 2.58784952 0.4595214 - 0.4 4 0.411315319709357 4 -7 0 0 11 32 4 0.675302928289615 0.15876523717856 0.67204358204575 0.158134491102395 0.668839826112228 0.157532621598673 0.665684826706073 0.156957680108366 0.662572313171756 0.156407927778798 0.659496481595735 0.155881804300384 0.656451918769852 0.155377903598598 0.653433536102597 0.154894953548081 0.650436512898149 0.154431799128169 0.647456250821028 0.153987389100426 0.644488336345632 0.153560765359748 0.637702897426394 0.152621496004462 0.633890787309427 0.152120189589651 0.63008294061659 0.151645241120984 0.626270532470769 0.151194989365054 0.622445004802412 0.150767969029981 0.618597949824501 0.150362883500424 0.61472100476798 0.149978583307754 0.610805752768644 0.149614049276019 0.606843624805791 0.149268379297795 0.602825797577685 0.14894077767941 0.598286138102024 0.148595824377124 0.597828381168172 0.148561320330506 0.59736979853369 0.148527032889379 0.596910377259831 0.148492961090192 0.596450104348334 0.14845910398458 0.595988966739534 0.148425460639227 0.595526951310431 0.148392030135721 0.595064044872734 0.148358811570427 0.594600234170875 0.14832580405435 0.594135505879991 0.148293006713014 0.593669846603879 0.148260418686337 - 0.411315319709357 12 0.45 10 0.5 10 0.505596080964352 12 -7 0 0 5 6 2 2.58784952 0.4595214 2.58250227525829 0.426786449473237 2.57790998768025 0.397373176612322 2.57348308657198 0.368539570555499 2.56906524843505 0.339068167388737 2.56437509 0.30680216 - 0.411315319709357 6 0.505596080964352 6 -7 0 0 11 42 5 2.53513158141861 0.0877166749488884 2.53585834482156 0.0937032221449259 2.5365886828234 0.099683507697649 2.53732267832843 0.105658257346883 2.53806041519553 0.111628193904847 2.53880197827948 0.1175940376458 2.5395474534348 0.12355650638223 2.54029692748392 0.129516315254774 2.54105048823345 0.135474176917694 2.54180822475996 0.141430803863956 2.54257022802878 0.147386913295507 2.54422507163049 0.160248662904776 2.54511941186373 0.167154371559663 2.546019751217 0.174061438911804 2.54692624654885 0.180971061269528 2.5478390077789 0.187884069658507 2.5487582627425 0.194802155353323 2.54968405910879 0.201725648527253 2.55061665178669 0.208656408935061 2.55155613700127 0.215595093381931 2.55250270263727 0.222543026034134 2.55393341107182 0.232980438880554 2.55441212410726 0.236462163806487 2.55489266799941 0.239946618017965 2.55537506360857 0.243433944102005 2.55585933204535 0.246924285257504 2.55634549462727 0.25041778529523 2.55683357294351 0.253914588637939 2.55732358877768 0.257414840320157 2.55781556418186 0.260918685988431 2.55830952141983 0.264426271901127 2.55930144458269 0.27144921795596 2.55979940999272 0.274964574520103 2.56029940616467 0.27848399203911 2.56080143642786 0.282007483807493 2.56130557601623 0.285535558953036 2.56181174808073 0.28906767444739 2.56232011538479 0.292604943569464 2.56283056859351 0.296146594251458 2.56334321081839 0.299693326870651 2.56385804302007 0.303245130485731 2.56437509 0.30680216 - 0.0568724255241282 12 0.1 10 0.15 10 0.175 10 0.2 12 -7 0 0 4 5 2 0.47839695 0.14515792 0.506461938427874 0.145180270954121 0.534737057016871 0.145495256090693 0.563713540502916 0.146163999797197 0.593669846603879 0.148260418686337 - 0.0568724255241282 5 0.2 5 -7 0 0 11 12 2 2.52655024482567 0.0146345759481185 2.52731191069448 0.0213459576706141 2.52807695617477 0.0280407990254084 2.5288454832526 0.0347201279565897 2.52961759474167 0.0413849622600353 2.53039339433011 0.0480363102480111 2.53117298682662 0.0546751727619274 2.53195647793834 0.0613025416702205 2.53274397437094 0.0679194009200159 2.53353558403229 0.0745267283374578 2.53433141616607 0.0811254968164204 2.53513158141862 0.0877166749488884 - 0.00938904044701609 12 0.0568724255241282 12 -7 0 0 3 4 2 0.44128756 0.14514773 0.453637039413593 0.145151124414626 0.465979659663563 0.145154513637083 0.478396949999999 0.14515792 - 0.00938904044701609 4 0.0568724255241282 4 -8 0.8 1 -7 0 0 10 29 4 0.44128756 0.14514773 0.441104548554555 0.145147304500127 0.440921529874539 0.145146878997354 0.440738534026284 0.145146453561587 0.440555507617226 0.14514602806869 0.440372499007402 0.145145602631088 0.440189496492224 0.145145177221591 0.440006474207828 0.145144751780037 0.439823468142443 0.145144326390127 0.439640455416967 0.145143900998643 0.439274432260012 0.145143050248864 0.439091420666705 0.145142624887844 0.438908409058487 0.145142199540765 0.438725397435515 0.145141774207462 0.438542385797503 0.145141348888209 0.438359374144822 0.14514092358266 0.438176362477069 0.145140498291155 0.437993350794559 0.145140073013433 0.437810339097092 0.145139647749647 0.437261303960048 0.145138371999905 0.436895281467943 0.14513752155794 0.436529251781964 0.145136671154921 0.436163246360448 0.145135820863994 0.435797189469095 0.145134970509147 0.435431206339182 0.145134120381355 0.435065148881466 0.145133270136583 0.434699143280583 0.145132420067949 0.434333113959648 0.145131569999906 0.43396709 0.14513072 - 0.8 11 0.85 9 0.9 9 1 11 -7 0 0 11 12 2 2.52655024482567 0.0146345759481185 2.52639963821584 0.0133075131377156 2.52624916374345 0.0119798036252657 2.52609882062002 0.0106514394636793 2.52594860805837 0.00932241269035335 2.52579852527255 0.00799271532697062 2.52564857147786 0.00666233937937919 2.52549874589088 0.00533127683761026 2.52534904772949 0.00399951967611696 2.525199476213 0.00266705985435147 2.52505003056226 0.00133388931784315 2.52490071 -1.38777878078145e-017 - 0.8 12 1 12 -8 0.875 1 -7 0 0 11 32 4 0.1565789 55.41588432 0.150548828476561 55.4165756824858 0.145430190103914 55.4171637388136 0.140960167479133 55.4176783631002 0.136982413095536 55.4181373357246 0.13339147699164 55.4185526557808 0.13010893599575 55.4189332533005 0.12707476405681 55.4192859710086 0.12424317691484 55.4196160364446 0.121577878175949 55.4199276021501 0.119047327617797 55.4202242832781 0.114205365095857 55.4207936716461 0.111893863319371 55.4210663888771 0.109666089008816 55.4213300923293 0.107501175250834 55.4215871932003 0.105381368435975 55.4218397548008 0.103290888471927 55.4220896223468 0.101215227879828 55.422338504401 0.0991406966312459 55.4225880244394 0.0970540195947745 55.4228397693082 0.0949417934516194 55.4230953537188 0.0884852429349642 55.4238788697674 0.0840215285028713 55.4244235049156 0.0792834266641181 55.4250044050559 0.0741580459252911 55.4256353969373 0.0684532971229534 55.4263403958357 0.0620781498125947 55.4271305943068 0.0545660830732412 55.4280644696992 0.0458004686278358 55.4291565189457 0.0347609427428446 55.4305347840863 0.0207786138578454 55.4322831728699 -1.38777878078145e-017 55.4348855 - 0.875 12 0.90625 10 0.9375 10 1 12 -7 0 0 10 29 4 0.43089701 0.14540341 0.430914789061213 0.145403985501985 0.430935837865607 0.145404150195346 0.430960183607296 0.145403904572794 0.430987778030864 0.145403247664596 0.431018664791235 0.145402180398566 0.431052833363999 0.14540070252983 0.43109026038943 0.145398813568629 0.431130978307822 0.145396514220383 0.431174966520877 0.145393804029972 0.431269497579606 0.145387562279424 0.431320039380429 0.145384030695906 0.431373857453743 0.145380088404184 0.431430951800031 0.145375735404103 0.431491322420826 0.145370971695894 0.431554969316172 0.145365797279216 0.43162189248774 0.145360212154389 0.431692091935815 0.145354216321134 0.431765567661595 0.14534780977959 0.431995823674303 0.145327358029867 0.432162433813884 0.145312080590057 0.432342141779864 0.145295161077706 0.432534979765723 0.145276596130798 0.432740870294543 0.145256393839971 0.432959941495141 0.145234540825573 0.433192041845369 0.145211052908691 0.433437300441065 0.145185916611195 0.433695639921257 0.145159140008246 0.43396709 0.14513072 - 0.875 11 0.90625 9 0.9375 9 1 11 -7 0 0 10 20 3 0.43089701 0.14540341 0.430725428487636 0.145397858838736 0.430545519411181 0.14539240604962 0.43035739987376 0.145387082858216 0.430161210644643 0.14538192053917 0.429957298788866 0.145376955380085 0.429746083310431 0.14537222351543 0.429528105318645 0.145367761480199 0.429304099818962 0.145363607403753 0.429074881154548 0.145359796415356 0.428801048424096 0.145355768326732 0.428760561334234 0.145355185884408 0.428719952015852 0.14535461486741 0.42867922548115 0.145354055445035 0.428638386848512 0.14535350778434 0.428597441339052 0.145352972049917 0.428556394273041 0.145352448403674 0.428515251066201 0.145351937004628 0.428474017225883 0.145351438008702 0.428432698347115 0.145350951568534 - 0.25 11 0.3125 9 0.323304246662853 11 -7 0 0 4 5 2 0.1565789 55.41588432 0.17757357499726 55.4134772333813 0.139838369460081 55.4178041631687 0.198839855731313 55.4110481419577 0.22896476 55.40748034 - 0.25 5 0.323304246662853 5 -8 0.625 0.75 -7 0 0 11 22 3 0.32499996 55.39620377 0.322717077332313 55.3964653033542 0.320226329305913 55.3967518980291 0.317525728040808 55.3970637825028 0.314621076879065 55.3974002890334 0.31150081063855 55.397762749607 0.308181549033208 55.3981492485756 0.304645878668294 55.3985617940093 0.300906896100145 55.3989988756697 0.296957702621325 55.3994612886722 0.292800759393006 55.3999487496083 0.28407027908823 55.4009738932221 0.279496773925058 55.4015115723278 0.2747151948391 55.4020743361016 0.26972491775346 55.4026622584543 0.264527095403844 55.4032752028483 0.259120554263047 55.4039133083298 0.253505564055656 55.4045765428257 0.247683189732147 55.4052647803858 0.241651645991026 55.4059782322774 0.235412400314917 55.4067167248206 0.22896476 55.40748034 - 0.625 12 0.6875 10 0.75 12 -7 0 0 3 4 2 0.426177215634701 0.14534344097593 0.426581780191565 0.145340998152446 0.4273326808245 0.145338001248377 0.428432698347115 0.145350951568534 - 0.625 4 0.75 4 -8 0.5 0.625 -7 0 0 10 20 3 0.46774262 55.37928407 0.45690313125758 55.3806248055594 0.448270851615531 55.3816884427367 0.440894744616537 55.3825937531538 0.434390511076232 55.3833886205485 0.428475035104922 55.3841082366787 0.422955537277219 55.3847764515481 0.417698431873232 55.3854096517096 0.412571924725931 55.3860239101282 0.407468618250395 55.3866321139836 0.397071003243798 55.3878645733196 0.39177674609484 55.3884888213352 0.386268887935998 55.3891350930677 0.380425550771371 55.3898176388326 0.374102003213527 55.3905532483758 0.367112599824479 55.391363251411 0.359226583682484 55.3922741221112 0.3500533872024 55.3933304419654 0.339078502416305 55.3945908992069 0.32499996 55.39620377 - 0.5 11 0.5625 9 0.625 11 -7 0 0 10 11 2 0.42351021 0.14542923 0.423605442207539 0.145417328378714 0.423734955420757 0.145405551603784 0.423902103562258 0.145394098420091 0.424109883481863 0.145383181962414 0.424359941898306 0.14537308529463 0.424652660185351 0.145364066272314 0.42498601275535 0.145356409554315 0.425355633169521 0.145350333865374 0.425755198857194 0.145345989178627 0.426177215634701 0.14534344097593 - 0.5 11 0.625 11 -8 0.5 0.75 -7 0 0 11 32 4 0.42351021 0.14542923 0.423318800709215 0.145453150934071 0.423136378226642 0.145475918602672 0.422962919950222 0.145497535829199 0.422798490155305 0.14551799458405 0.422642969173155 0.145537309817212 0.422496516950701 0.14555546154661 0.422358975275107 0.145572469537842 0.422230460425329 0.145588319264105 0.422110909965777 0.145603018525542 0.422000347291517 0.145616564399396 0.421847976651102 0.145635154166591 0.421799432155694 0.14564106256219 0.421753133378088 0.145646682764475 0.421709080316988 0.145652014773278 0.421667272973082 0.14565705858909 0.421627711344191 0.14566181421138 0.421590395431381 0.145666281640867 0.421555325232787 0.145670460877039 0.42152250074867 0.145674351920368 0.421491921978062 0.14567795477069 0.421435255863018 0.145684584085643 0.421409168948104 0.145687610515203 0.421385325607911 0.145690348926475 0.421363732118866 0.14569279880583 0.421344381449145 0.145694960731013 0.421327274500702 0.145696834624746 0.421312417483497 0.14569841997785 0.421299806798812 0.145699717089876 0.421289434860709 0.145700726582642 0.421281315919864 0.145701447271932 0.42127544 0.14570188 - 0.5 12 0.625 10 0.6875 10 0.75 12 -7 0 0 6 7 2 0.46774262 55.37928407 0.496340954110395 55.3757467408258 0.400953422659636 55.3875480606534 0.57382370236175 55.3661414659626 0.504498072659137 55.3748088337821 0.514880554347713 55.3734865583473 0.51663621 55.37327277 - 0.5 7 0.75 7 -8 0.25 0.375 -7 0 0 11 42 5 0.74578591 55.34399089 0.734597920387493 55.3454846337438 0.724936653272533 55.3467730482347 0.716420536351824 55.3479073519964 0.708806152691325 55.3489202050576 0.70192341347228 55.3498344349724 0.695632159542908 55.3506688162684 0.689843067548269 55.3514353351446 0.684467711006366 55.3521458202669 0.67944436840987 55.3528085280091 0.674718507296344 55.3534307401577 0.665771308048582 55.3546062266709 0.661549949677186 55.3551595037563 0.65753562273824 55.3556843401123 0.65369137172525 55.3561856474136 0.649986099858036 55.3566675444484 0.646392843020545 55.3571335879169 0.642887553566618 55.3575869346007 0.639448234294633 55.3580304560364 0.636054262939302 55.3584668268956 0.632685747484863 55.3588986085185 0.625959757791053 55.3597580886961 0.622602311557313 55.3601857837082 0.619230418850407 55.3606139877131 0.615824878408792 55.3610451389355 0.612363371137429 55.361482037657 0.608829475251886 55.3619267457307 0.60519184311785 55.362383153934 0.601432257598923 55.3628535060092 0.597516013517578 55.3633420759111 0.593409615491692 55.3638529608298 0.584729354494646 55.3649299984036 0.580155577846773 55.3654961404624 0.575304455469011 55.3660952385729 0.570125764282006 55.3667334071506 0.564556523057478 55.3674183007844 0.558520903089541 55.3681591225917 0.551923941008323 55.3689673857266 0.544641146332151 55.3698581711951 0.536506977609107 55.3708515223455 0.527292487596802 55.371975145262 0.51663621 55.37327277 - 0.25 12 0.28125 10 0.3125 10 0.34375 10 0.375 12 -7 0 0 9 18 3 0.415669812049734 0.146917127401513 0.4163959466149 0.146615071225696 0.416909832388797 0.146438123760218 0.417282003279915 0.146338255683749 0.417568769078563 0.146278270055905 0.417812215456505 0.146231802316994 0.418040203967459 0.146183320288401 0.418266372046562 0.146128124172137 0.418490133010824 0.14607234655125 0.418903219106818 0.145993558227824 0.418861280527643 0.145975804939371 0.42048306780623 0.145833627917714 0.41690173598331 0.146088759281657 0.423388377352643 0.145574573135416 0.417015679832377 0.146051489493082 0.421945971385667 0.14565145300658 0.420636114405132 0.145748956612726 0.42127544 0.14570188 - 0.25 10 0.3125 8 0.375 10 -8 0.125 0.25 -7 0 0 11 22 3 0.81865078 55.33426732 0.81834245750182 55.3343080450466 0.817733726961923 55.334388900478 0.81682467158632 55.33450987525 0.815615328037556 55.3346709644055 0.814105582862337 55.3348721830249 0.812295350733752 55.335113542605 0.810184696019442 55.3353950345069 0.80777375938175 55.3357166399956 0.805062551266185 55.3360783576058 0.802050874335968 55.3364802137421 0.795426799787681 55.3373641740438 0.791814360185152 55.3378462838267 0.787901749264374 55.3383684923804 0.783688002115888 55.3389309285775 0.779175693009071 55.339533248641 0.774360034667232 55.3401760918422 0.769247536513031 55.3408585889711 0.763831621096519 55.3415816183054 0.758117208340568 55.3423445229005 0.752101659962121 55.343147655039 0.74578591 55.34399089 - 0.125 12 0.1875 10 0.25 12 -7 0 0 4 5 2 0.413786066706607 0.147911857528494 0.413830045702653 0.147882776011928 0.414152101459438 0.147666042212949 0.414747511397736 0.147300784400172 0.415669812049734 0.146917127401513 - 0.125 5 0.25 5 -8 0 0.125 -7 0 0 11 12 2 1 55.31688457 0.984462494561633 55.3174847930303 0.970074629867905 55.3182292547837 0.956220402775526 55.3191148741629 0.942520977914117 55.3201476671273 0.928589860584466 55.3213464559976 0.91418378971617 55.3227273691498 0.898871737877632 55.3243315104225 0.882333270337612 55.3261971462785 0.864001555321915 55.3283966061498 0.843188833224874 55.3310262056729 0.81865078 55.33426732 - 0 12 0.125 12 -7 0 0 7 8 2 0.41008734 0.15247929 0.410367122686552 0.151804196530941 0.410655950745377 0.151200414654309 0.411121403029022 0.150511239126142 0.4113702900796 0.150008140893992 0.412140878286153 0.149183688116685 0.412786038594384 0.148573135336682 0.413786066706607 0.147911857528494 - 0 8 0.125 8 -7 0 0 9 74 10 2.57033879 0.50000087 2.57018215327951 0.499959821424722 2.57002554590105 0.499918797765833 2.56986891439843 0.499877785002269 2.56971231393114 0.499836797503236 2.56955535311041 0.49979573291719 2.56939858637994 0.499754736367817 2.56924165580985 0.499713714121952 2.56908470879211 0.499672704793468 2.56877069378384 0.499590688908229 2.56861362942978 0.499549683305786 2.5684565089105 0.499508680225857 2.56829933273858 0.499467679805768 2.56814210125466 0.499426682137945 2.56798481462666 0.499385687269677 2.56782747285127 0.499344695203469 2.56767007575205 0.499303705896659 2.56719771743931 0.499180745991851 2.56688259028655 0.499098783690744 2.56656724155595 0.499016832394089 2.56625167128049 0.498934892137422 2.56593587949349 0.498852962956545 2.56561986622764 0.498771044886908 2.56530363151645 0.498689137964316 2.56498717539263 0.498607242224302 2.56403714288314 0.49836158865905 2.56340290236741 0.498197864493097 2.56276777664723 0.498034185496188 2.56213176602516 0.497870551959657 2.56149487080797 0.497706964175134 2.5608570912969 0.497543422433842 2.56021842779872 0.497379927027432 2.559578880616 0.497216478247212 2.55765758892898 0.496726272659655 2.55637319411329 0.496399656599396 2.55508526833308 0.496073230546471 2.553793814315 0.495746996843231 2.55249883478531 0.495420957832365 2.55120033247079 0.495095115856137 2.54989831009778 0.494769473257228 2.5485927703928 0.494444032377997 2.54466560746169 0.493468321926985 2.54203344134037 0.492818664568474 2.53938724109281 0.492169842286629 2.53672703114963 0.491521873908928 2.53405283700548 0.49087477828968 2.53136468520706 0.490228574309247 2.52866260336742 0.489583280874965 2.52594662015273 0.488938916920277 2.51775705556941 0.487008670375549 2.51224185934582 0.485725632919718 2.50667141438864 0.484446540934734 2.50104597564621 0.483171546395752 2.49536581525049 0.48190080135669 2.48963122251304 0.480634457949549 2.48384250392935 0.479372668385194 2.47799998317508 0.478115584952643 2.46031203697571 0.474358910153438 2.44830622863356 0.471873893635868 2.43608930094865 0.469409527036381 2.42366425760978 0.466967024413719 2.41103437718959 0.464547594032714 2.39820320920529 0.462152435080346 2.38517457018075 0.459782734382906 2.37195253970671 0.457439663121957 2.3510035919374 0.453823036519228 2.34340600281739 0.452530476151255 2.33574945895753 0.451246896993551 2.32803475576534 0.449972501729616 2.3202627137958 0.448707490982629 2.31243417826312 0.447452063123104 2.30455001851001 0.446206414081851 2.29661112743417 0.444970737168251 2.28861842087227 0.443745222893856 - 0 10 0.00065104166015625 8 0.0013020833203125 8 0.002604166640625 8 0.00520833328125 8 0.0104166665625 8 0.020833333125 8 0.04166666625 8 0.0833333325 8 0.106752595681131 10 -7 0 0 4 5 2 1 0.06075625 0.975155584051176 0.0619100874558675 0.94649659797079 0.0630050799161219 0.914138768346783 0.0639324065529099 0.87898407 0.06464678 - 0 5 0.106752595681131 5 -7 0 0 9 18 3 2.28861842087227 0.443745222893856 2.26817048571348 0.440609959985732 2.24737032695765 0.437541211785518 2.2262332796408 0.434542168274111 2.2047756614423 0.431615899580757 2.18301470516841 0.42876533665038 2.16096847928198 0.425993253401173 2.13865579647882 0.423302250372441 2.1160961103096 0.420694739862657 2.07054741434539 0.41565386156619 2.04755889775227 0.413220308198521 2.02436376785992 0.410874476578857 2.00098247007798 0.40861837144726 1.97743587026609 0.406453785993001 1.95374513971211 0.404382292267859 1.92993163667359 0.402405234439353 1.90601678823666 0.400523724971345 1.882021975585 0.398738643647066 - 0.106752595681131 10 0.166666665 8 0.226515723937158 10 -7 0 0 3 4 2 0.87898407 0.06464678 0.826398473757192 0.0657153660287013 0.766582973506242 0.0661785927508086 0.70550968 0.06622642 - 0.106752595681131 4 0.226515723937158 4 -8 0.625 0.75 -7 0 0 9 18 3 0.6046294 0.06608293 0.613624007648967 0.0661064731567844 0.621661403882583 0.0661266736044409 0.628953158932934 0.0661441702380138 0.635645184929371 0.0661593883050562 0.641849259860904 0.0661726383429675 0.64765395564776 0.0661841487958463 0.653132742883033 0.0661940893623691 0.65834875978588 0.066202582337381 0.668369104611577 0.0662168350662663 0.673173433259177 0.0662225948217866 0.677828832749249 0.0662270689043181 0.68238600477956 0.0662302969901631 0.686893429567052 0.0662322826803808 0.691400311049448 0.0662329938154845 0.695960480301905 0.0662323550335256 0.700636248496493 0.0662302375497549 0.70550968 0.06622642 - 0.625 10 0.6875 8 0.75 10 -7 0 0 6 7 2 1.64326070115387 0.38531898163311 1.70730885323159 0.387784887909226 1.74961920914742 0.390117602642382 1.78588441358853 0.392121365147878 1.81735352995674 0.394162191079026 1.84753864659435 0.396173274728631 1.882021975585 0.398738643647066 - 0.625 7 0.75 7 -7 0 0 10 20 3 0.543222487858905 0.0659335805384061 0.544794679153542 0.0659368841438723 0.546386548632608 0.0659402787755437 0.548000054587055 0.0659437679207412 0.549637188588484 0.0659473553281233 0.551299990108199 0.0659510450280432 0.552990561309033 0.0659548413568371 0.554711083033676 0.0659587489864637 0.556463831513465 0.0659627729586058 0.558251190927103 0.0659669187146691 0.563621304755777 0.065979496949062 0.567307157234879 0.0659882839609982 0.571151716987028 0.0659975964713223 0.575175360113526 0.0660074842713542 0.579400869966192 0.0660180048443815 0.583854140140803 0.0660292251531832 0.588565030932894 0.0660412239037624 0.593568495333825 0.0660540945944465 0.598906247109956 0.0660679501022897 0.6046294 0.06608293 - 0.530339034103805 11 0.5625 9 0.625 11 -7 0 0 5 6 2 1.49732765 0.38125063 1.51934846534438 0.381630081368396 1.54316010593927 0.382125682291735 1.57033190448692 0.382814988434717 1.60211169245367 0.383734711119157 1.64326070115387 0.385318981633109 - 0.530339034103805 6 0.625 6 -7 0 0 10 11 2 0.5289847 0.06590575 0.530368607712421 0.0659082270567238 0.531756977377323 0.0659107667985276 0.533151507326002 0.0659133709362855 0.534553858922593 0.0659160413482231 0.535965656701879 0.0659187800576659 0.53738850493663 0.0659215892454628 0.538824001176052 0.0659244712611671 0.540273747604311 0.0659274286336488 0.541739361840252 0.0659304640835326 0.543222487858905 0.0659335805384061 - 0.5 11 0.530339034103805 11 -7 0 0 3 4 2 1.46344236641377 0.380743095505887 1.4744239518484 0.380883258254898 1.48556478904807 0.381047938278289 1.49732765 0.38125063 - 0.5 4 0.530339034103805 4 -7 0 0 9 26 4 1.46344236641377 0.380743095505887 1.43756261964025 0.380412781046916 1.41108606916866 0.380171677065926 1.38404053087244 0.380023099174431 1.35645796100044 0.379970097041478 1.32837445190987 0.380015399282592 1.29983017624804 0.380161358509804 1.27086903803419 0.380409898978076 1.24153840499738 0.380762475567093 1.19487668718217 0.381482574413431 1.17775971831032 0.381779669986125 1.16054717231021 0.38211150811515 1.14324887121311 0.382478214525283 1.12587492796599 0.382879858618365 1.10843571376496 0.383316451927377 1.09094182211366 0.38378794705545 1.07340402961073 0.384294237098513 1.04106037460302 0.385289940402325 1.02626417982316 0.385769203546115 1.01145115808274 0.386272846042191 0.996627870291961 0.386800739064911 0.981800921539201 0.387352724416196 0.96697695759222 0.387928614088878 0.952162647943192 0.388528190527945 0.937364653828645 0.38915120770909 0.922589615817229 0.389797391625992 - 0.344046308627282 10 0.416666665 8 0.4583333325 8 0.493365173226304 10 -7 0 0 4 5 2 0.5289847 0.06590575 0.478690296430512 0.0658157223092564 0.422173199062303 0.0657754474918033 0.361617721403325 0.0659537914815382 0.30221679 0.06638239 - 0.344046308627282 5 0.493365173226304 5 -7 0 0 9 18 3 0.922589615817229 0.389797391625992 0.919791309597855 0.389919775099532 0.916993826817475 0.390042989567491 0.914197212589447 0.390167033168379 0.911401512000538 0.390291904004704 0.908606770107896 0.390417600143088 0.905813031936931 0.390544119614362 0.903020342480398 0.390671460413611 0.900228746699048 0.390799620500181 0.8543395986117 0.39292065584682 0.811512510457075 0.395107659717802 0.769122433763545 0.397481961335438 0.727331992068711 0.400033924664596 0.686297092224374 0.402752094094882 0.646163092205387 0.40562349369339 0.607061681861267 0.408633999874275 0.569108774471459 0.411768737626115 0.532403391212581 0.415012458030018 - 0.493365173226304 10 0.5 8 0.602475089373382 10 -7 0 0 3 4 2 0.30221679 0.06638239 0.244343051237851 0.0667999712879464 0.187805125444445 0.067483536659256 0.13858066 0.0683359 - 0.493365173226304 4 0.602475089373382 4 -7 0 0 10 29 4 0.0596871747500459 0.0698968908722486 0.0605619531957373 0.0698779220542209 0.0614305513531467 0.0698591140876834 0.0622931090349687 0.0698404638103763 0.0631497630174323 0.0698219681355254 0.0640006471674792 0.0698036240489007 0.0648458925699407 0.0697854286058755 0.065685627654717 0.0697673789284845 0.0665199783239553 0.0697494722024824 0.0673490680792206 0.0697317056744046 0.0708981112698566 0.0696557712504276 0.0735669834252473 0.0695989699355412 0.0761840168219969 0.0695435752667643 0.07875331837617 0.0694894968138596 0.0812787582182416 0.0694366502742661 0.0837640048573355 0.0693849566819965 0.086212557002725 0.0693343417046883 0.0886277720444363 0.0692847350287655 0.0910128911911111 0.069236069832812 0.0980874014176804 0.0690927073815149 0.102695947391883 0.0690006432162316 0.107221886223142 0.0689115794627476 0.111688906368597 0.0688250542305521 0.116120046908006 0.0687406372312306 0.120538173030761 0.0686579206220693 0.124967005296588 0.068576501604082 0.129431437583662 0.068495978467081 0.133958929671349 0.0684159296326439 0.13858066 0.0683359 - 0.146801354201132 11 0.15625 9 0.1875 9 0.25 11 -7 0 0 5 6 2 0.34480012 0.43452143 0.390147331923848 0.428974881982615 0.427656077540485 0.42497195095324 0.462446698016548 0.421423161577788 0.496050037160526 0.418225068982948 0.532403391212581 0.415012458030018 - 0.146801354201132 6 0.25 6 -7 0 0 10 20 3 0.03779578 0.07037827 0.0395049817248071 0.0703402266041751 0.041188697666045 0.0703028202278088 0.0428478436909338 0.0702660295855473 0.0444834213893917 0.0702298315850274 0.0460960506195444 0.0701942116661887 0.0476868498139299 0.0701591442978185 0.0492563780162837 0.0701246164331286 0.0508054987854735 0.0700906083245715 0.0523349092252828 0.0700571040006353 0.0544423581312618 0.0700110363207862 0.0550364317866361 0.0699980614847354 0.0556275791193147 0.0699851618638023 0.0562158427345484 0.0699723364867751 0.0568012646073013 0.0699595843979794 0.0573838860974301 0.0699469046569272 0.0579637479648616 0.0699342963379654 0.0585408903847717 0.0699217585299251 0.0591153529627635 0.0699092903357707 0.0596871747500459 0.0698968908722486 - 0.125 11 0.140625 9 0.146801354201132 11 -7 0 0 4 5 2 0.292853383143588 0.44117714741059 0.306999353810418 0.439281672842096 0.320266366023218 0.437564717124493 0.332825270417433 0.435986109493388 0.34480012 0.43452143 - 0.125 5 0.146801354201132 5 -8 0 0.125 -7 0 0 10 20 3 0 0.07121022 0.00110999490450371 0.0711865237136546 0.00228564986983823 0.0711612863661483 0.00352877784035738 0.0711344737013042 0.00484179051082043 0.071106037194092 0.00622745081841692 0.0710759195304447 0.00768926633330155 0.0710440463169739 0.00923110547709872 0.0710103343437567 0.0108576298033373 0.0709746823565186 0.0125741387961103 0.0709369743475971 0.0161994687426301 0.0708571746119661 0.0181082887116314 0.0708150829066132 0.0201194297106075 0.0707706636379191 0.022239895658825 0.0707237619804414 0.0244776540659377 0.0706742012376572 0.0268417860793118 0.0706217795148277 0.0293426832248074 0.0705662653364042 0.0319923131918947 0.0705073917074735 0.0348045770147187 0.0704448481195041 0.03779578 0.07037827 - 0 11 0.0625 9 0.125 11 -7 0 0 6 7 2 0.20327796 0.45411017 0.212031114087676 0.452753917459781 0.222654496371833 0.451130318657426 0.235347952765811 0.449223391708901 0.25063629646005 0.446986673341991 0.269196331872767 0.444347049293292 0.292853383143588 0.44117714741059 - 0 7 0.125 7 -7 0 0 10 11 2 0.20327796 0.45411017 0.200096099272467 0.454729269900308 0.196991900490075 0.455339333838763 0.193962671826092 0.455940780769885 0.191005876495484 0.456534008892542 0.188119120597378 0.457119397396151 0.185300142274191 0.457697308033005 0.182546802011996 0.458268086538498 0.179857073934082 0.45883206391826 0.177229037962459 0.459389557618823 0.174660872740947 0.459940872596311 - 0 11 0.11097547291231 11 -7 0 0 3 4 2 0 36.84377716 0.0780187214301323 36.8399372641308 0.147510664310045 36.8370032433385 0.21070762 36.8342907 - 0 4 0.11097547291231 4 -7 0 0 10 11 2 0.174660872740947 0.459940872596311 0.171216528711955 0.460680279249317 0.167879876281904 0.461408572018397 0.1646465215973 0.462126486582022 0.161512390213815 0.462834718206611 0.158473696387605 0.463533926383877 0.15552691679893 0.464224738874713 0.152668767878126 0.464907755272827 0.149896186102389 0.465583550179336 0.147206310776766 0.466252676061949 0.144596468920789 0.466915665859125 - 0.11097547291231 11 0.25981235625939 11 -7 0 0 3 4 2 0.21070762 36.8342907 0.295465430345778 36.830652716587 0.368895221832376 36.8273429051638 0.43419735 36.82418923 - 0.11097547291231 4 0.25981235625939 4 -8 0.5 0.66666667 -7 0 0 9 34 5 0.67713246 36.81712964 0.668323810415358 36.8171517809638 0.660253201316873 36.817183262589 0.652768305811015 36.8172231420472 0.645758233792029 36.8172708310708 0.639137543555951 36.8173259664174 0.632837012365878 36.8173883436259 0.626798849353166 36.8174578906236 0.620974034142018 36.8175346569179 0.609664895021208 36.8177029328718 0.604180565678877 36.8177944430815 0.598823485082383 36.8178934787872 0.593556532993983 36.8180003049014 0.58834649566398 36.8181152872679 0.583162486155305 36.8182388960757 0.577974679649574 36.8183717196575 0.572753293644104 36.8185144849404 0.562182192255721 36.8188216766476 0.556832419767189 36.8189861053439 0.551387872453572 36.8191622521167 0.545816688421124 36.8193511844464 0.540085055874694 36.8195541634281 0.53415603947079 36.8197726877104 0.527987874053783 36.8200085698209 0.521531725784801 36.8202640450735 0.507926115524475 36.820819780719 0.500776614691399 36.8211200432942 0.493221671579913 36.821445502774 0.485192038792341 36.8217995650547 0.476606652850684 36.8221862921971 0.467361264953846 36.8226109983543 0.45733316355603 36.823080029575 0.446354673101374 36.8236021085788 0.43419735 36.82418923 - 0.5 10 0.5416666675 8 0.583333335 8 0.6250000025 8 0.66666667 10 -7 0 0 5 6 2 0.112620972747793 0.476447432665769 0.120796530583272 0.473469199861339 0.12379391068276 0.472740959702865 0.129853618206912 0.470876578570637 0.132935462161493 0.469877963551037 0.144596468920789 0.466915665859125 - 0.5 6 0.66666667 6 -7 0 0 10 11 2 0.112620972747793 0.476447432665769 0.111392853992997 0.476894817864048 0.110194762991694 0.477341919868944 0.109026240109188 0.477788900720945 0.107886854008857 0.478235922071652 0.106776200668128 0.478683145519872 0.105693902518944 0.479130732945528 0.104639607703806 0.479578846844315 0.103612989440991 0.480027650666016 0.102613745494379 0.480477309159494 0.101641597745167 0.480927988727755 - 0.483275274148006 11 0.590805291191008 11 -7 0 0 3 4 2 0.67713246 36.81712964 0.708889757828281 36.817049816732 0.73764355388071 36.8171499592905 0.764213660000001 36.8171798100001 - 0.483275274148006 4 0.590805291191008 4 -8 0.16666667 0.33333333 -7 0 0 11 32 4 0.90074562 36.81686472 0.897082266243251 36.8168799198677 0.893412976408336 36.8168948587124 0.88973941807025 36.8169095249095 0.886069046409812 36.8169238846419 0.882393672825806 36.8169379658492 0.878733478322415 36.8169516857974 0.875072791046906 36.8169651027553 0.8714289607819 36.8169781461582 0.867797317920682 36.8169908324105 0.864183693395037 36.8170031371945 0.856997356767851 36.8170269632796 0.85342471061992 36.8170384843317 0.849875632024755 36.8170496006604 0.846353162800186 36.817060300237 0.842860327659722 36.8170705716384 0.839400120690734 36.8170804043614 0.835975491812442 36.8170897884973 0.83258933325932 36.8170987152178 0.829244466038011 36.8171071764164 0.825943626406964 36.8171151650636 0.816181104206942 36.8171376951245 0.809859490263722 36.8171508004807 0.803745468092877 36.8171619428361 0.797859199695371 36.8171710880807 0.792217997731418 36.8171782201452 0.786837306972746 36.8171833387055 0.781730602834941 36.8171864599095 0.776908410660567 36.8171876153089 0.772378210378977 36.8171868516431 0.768145691180943 36.8171842266755 0.76421366 36.81717981 - 0.16666667 12 0.208333335 10 0.25 10 0.33333333 12 -7 0 0 4 5 2 0.0868737295748928 0.490307523452096 0.0903435767207467 0.486926954562923 0.095081468598451 0.484041175471148 0.0990040681574102 0.482150725391859 0.101641597745167 0.480927988727755 - 0.16666667 5 0.33333333 5 -8 0 0.16666667 -7 0 0 10 29 4 1 36.81695782 0.994354359486993 36.8169093987847 0.989315191343669 36.8168703909399 0.984686474144149 36.816838449751 0.980348959443397 36.8168122270797 0.976206520225756 36.8167907662226 0.972194331075857 36.8167734615857 0.968243492725017 36.8167598343786 0.964302093807652 36.8167496087874 0.960312754870038 36.8167426016144 0.954167977228527 36.8167368378494 0.952092935037039 36.8167357076644 0.949983583945369 36.816735361735 0.94783233490202 36.8167358002722 0.945631104518365 36.8167370309496 0.943371137562187 36.8167390688935 0.941042929394909 36.8167419372667 0.938636094584339 36.8167456677441 0.936139027937216 36.8167503021088 0.930937380429831 36.8167614867392 0.928232797009678 36.8167680371571 0.925411054509608 36.8167755992339 0.922456906537648 36.816784239812 0.919353054124791 36.8167940395669 0.916079618431547 36.8168050957454 0.912613291763075 36.8168175266229 0.908926166889136 36.8168314782591 0.904984244671939 36.8168471329713 0.90074562 36.81686472 - 0 11 0.083333335 9 0.1250000025 9 0.16666667 11 -7 0 0 5 6 2 0.08150659 0.50000033 0.0818207500208935 0.497630374271205 0.0823958106068094 0.496295789611764 0.0834518030945842 0.494528774193683 0.0839539252893805 0.493152201939411 0.0868737295748928 0.490307523452096 - 0 6 0.16666667 6 -8 0 0.08150659 -7 0 0 2 3 2 0.0815065892490915 0.50000033 0.040753292366406 0.50000033 7.50908543678541e-010 0.50000033 - 0 3 0.08150659 3 -8 0 0.08150659 -7 0 0 2 3 2 0.0815065892490916 0.50000033 0.0407532923664056 0.50000033 7.50908439595133e-010 0.50000033 - 0 3 0.08150659 3 -8 0.49999967 1 -7 0 0 9 26 4 0 0.50000033 0 0.486111431955032 0 0.472222513256102 0 0.458333672272959 0 0.444444688782876 0 0.430555872422634 0 0.4166669239346 0 0.402778044839883 0 0.388889143529007 0 0.361111347571513 0 0.347222449597914 0 0.333333551628694 0 0.319444653662946 0 0.305555755699975 0 0.291666857738848 0 0.277777959778835 0 0.263889061819072 0 0.222222367938141 0 0.194444572013818 0 0.16666677608054 0 0.138888980133113 0 0.111111184166238 0 0.0833333881747504 0 0.0555555921533563 0 0.0277777960968568 0 0 - 0.49999967 10 0.6249997525 8 0.749999835 8 1 10 -8 0.49999967 1 -7 0 0 10 29 4 1.88324107 0.50000033 1.88324107000001 0.487500321759534 1.88324106999997 0.475000292244931 1.88324107000004 0.462500345947151 1.88324106999996 0.450000236366262 1.88324107000003 0.437500338777545 1.88324106999997 0.425000247214749 1.88324107000003 0.412500281585464 1.88324106999998 0.400000259826733 1.88324107000001 0.387500253731142 1.88324106999999 0.362500237369381 1.88324107000004 0.350000229192649 1.88324106999995 0.337500221019441 1.88324107000002 0.325000212849255 1.88324107000003 0.312500204681465 1.88324106999995 0.30000019651551 1.88324107000003 0.287500188350856 1.88324106999999 0.275000180186876 1.88324107 0.262500172023041 1.88324107000001 0.225000147530203 1.88324106999994 0.200000131198679 1.88324107000013 0.175000114860528 1.88324106999982 0.150000098512083 1.88324107000018 0.125000082149669 1.88324106999985 0.100000065769655 1.88324107000009 0.0750000493683219 1.88324106999996 0.0500000329420617 1.88324107000001 0.0250000164871695 1.88324107 8.54683369596916e-026 - 0.49999967 11 0.6249997525 9 0.749999835 9 1 11 -8 0 0.50000087 -7 0 0 3 4 2 0 0.50000087 0 0.33333391128273 0 0.166666958760574 0 0 - 0 4 0.50000087 4 -8 0 0.50000087 -7 0 0 9 26 4 2.97015674 0.50000087 2.97015673999998 0.486111956773562 2.97015674000008 0.472223054653506 2.97015673999987 0.458334110755184 2.97015674000012 0.444445243623615 2.97015673999993 0.430556286489527 2.97015674000002 0.416667400571964 2.97015674 0.402778477283351 2.97015674 0.388889565988211 2.97015673999999 0.361111739842346 2.97015674000004 0.347222826784757 2.97015673999994 0.333333913740226 2.97015674000005 0.319445000706565 2.97015673999998 0.305556087681449 2.97015674 0.291667174662679 2.97015674000001 0.277778261647985 2.97015674 0.263889348635111 2.97015673999998 0.222222609595217 2.9701567400001 0.194444783561792 2.9701567399998 0.166666957508005 2.97015674000026 0.13888913142033 2.97015673999976 0.111111305285231 2.97015674000016 0.0833334790891804 2.97015673999992 0.0555556528186448 2.97015674000002 0.0277778264600953 2.97015674 5.55111512312578e-017 - 0 10 0.1250002175 8 0.250000435 8 0.50000087 10 -8 2.57033879 2.97015674 -7 0 0 11 12 2 2.97015674 0.50000087 2.93380965449239 0.500000870000008 2.89746252253813 0.500000869999965 2.8611156589232 0.500000870000084 2.82476797836058 0.500000869999854 2.78842196976991 0.500000870000193 2.75207349148943 0.500000869999803 2.71572771212688 0.500000870000156 2.67937974931867 0.500000869999908 2.64303306312603 0.500000870000038 2.60668587511204 0.500000869999991 2.57033879 0.50000087 - 2.57033879 12 2.97015674 12 -8 2.57033879 2.97015674 -7 0 0 11 12 2 2.97015674 0.50000087 2.9338096544923 0.500000869999991 2.89746252253848 0.500000870000038 2.86111565892238 0.500000869999908 2.82476797836199 0.500000870000156 2.78842196976802 0.500000869999803 2.75207349149142 0.500000870000193 2.71572771212527 0.500000869999854 2.67937974931965 0.500000870000084 2.64303306312563 0.500000869999965 2.60668587511213 0.500000870000008 2.57033879 0.50000087 - 2.57033879 12 2.97015674 12 -8 0.50000087 1 -7 0 0 9 26 4 2.97015674 0.50000087 2.97015673999998 0.513889734721227 2.97015674000007 0.527778610792842 2.97015673999984 0.541667444313104 2.97015674000024 0.555556355768084 2.97015673999974 0.569445175856436 2.97015674000019 0.583334068152375 2.97015673999991 0.597222922526091 2.97015674000002 0.611111789035472 2.97015673999998 0.638889518408022 2.97015674000007 0.652778383088859 2.97015673999989 0.66666724776493 2.97015674000013 0.680556112436945 2.97015673999989 0.694444977105598 2.97015674000007 0.708333841771539 2.97015673999997 0.722222706435527 2.97015674 0.73611157109819 2.97015674 0.777778165084378 2.97015673999998 0.805555894407632 2.97015674000004 0.833333623734167 2.97015673999994 0.861111353068365 2.97015674000004 0.88888908241419 2.97015673999998 0.916666811776156 2.97015674000001 0.94444454115823 2.97015674 0.972222270564798 2.97015674 1 - 0.50000087 10 0.6250006525 8 0.750000435 8 1 10 -8 0.50000087 1 -7 0 0 1 2 2 0 0.500000869991061 0 1.00000000004157 - 0.50000087 2 1 2 -8 0 0.49999967 -7 0 0 10 29 4 1.88324107 0.50000033 1.88324107000001 0.51250032190514 1.88324106999996 0.52500029247335 1.8832410700001 0.537500346342558 1.88324106999986 0.550000236722664 1.88324107000014 0.562500339301266 1.8832410699999 0.575000247688602 1.88324107000007 0.587500282118518 1.88324106999996 0.600000260348969 1.88324107000002 0.61250025424393 1.88324106999996 0.637500237835303 1.8832410700002 0.650000229623133 1.88324106999955 0.662500221403787 1.8832410700007 0.675000213179203 1.88324106999922 0.687500204948933 1.88324107000065 0.700000196715905 1.88324106999962 0.712500188479355 1.88324107000014 0.725000180241665 1.88324106999998 0.737500172003158 1.88324106999999 0.775000147289107 1.8832410700001 0.800000130817119 1.88324106999975 0.825000114355612 1.88324107000038 0.850000097912286 1.88324106999959 0.875000081492471 1.88324107000032 0.900000065104785 1.88324106999983 0.925000048754319 1.88324107000006 0.950000032449129 1.88324106999999 0.975000016195329 1.88324107 1 - 0 11 0.1249999175 9 0.249999835 9 0.49999967 11 -8 0 0.49999967 -7 0 0 9 26 4 0 0.50000033 0 0.513889209894611 0 0.527778069062903 0 0.541667006031533 0 0.555555800284514 0 0.569444761846441 0 0.583333591103589 0 0.597222489814467 0 0.611111366266625 0 0.638889125812616 0 0.652778005575671 0 0.666666885330358 0 0.680555765078019 0 0.694444644820377 0 0.708333524558684 0 0.722222404294633 0 0.736111284029606 0 0.777777923236224 0 0.805555682712269 0 0.833333442202963 0 0.861111201718134 0 0.888888961267309 0 0.916666720860467 0 0.944444480507083 0 0.972222240217046 0 1 - 0 10 0.1249999175 8 0.249999835 8 0.49999967 10 -8 0.83333333 1 -7 0 0 11 22 3 0.90093908 1.37508615 0.908397882340601 1.37511789551397 0.914976386463459 1.37514355409623 0.920885357295594 1.37516432732012 0.926270898144847 1.37518101441146 0.931236427854085 1.3751941232728 0.935859672781538 1.3752040676649 0.940219872396141 1.3752111048199 0.944356976950594 1.3752154077437 0.948329922186802 1.37521708882118 0.952177585956753 1.37521617564774 0.959706733655903 1.37520908663438 0.963388054530177 1.3752029107645 0.967027498282775 1.37519406399888 0.970663638564187 1.37518243709385 0.974335585762615 1.37516784402371 0.978084707416639 1.37515001556828 0.981956977752844 1.37512857782966 0.986006249995863 1.37510301797999 0.990298791225448 1.37507263341605 0.994921465827136 1.37503642994975 1 1.37499288 - 0.83333333 12 0.916666665 10 1 12 -7 0 0 5 6 2 0.086853206421423 0.509679206490503 0.084032069299139 0.506923770749196 0.0834418699990379 0.505498309184647 0.0824075265306424 0.503743882731178 0.0818174507570432 0.502345412319621 0.08150659 0.50000033 - 0.83333333 6 1 6 -8 0.66666667 0.83333333 -7 0 0 11 22 3 0.76431717 1.37477091 0.767985318514328 1.37476674090643 0.772041799742182 1.37476426943552 0.776486828709346 1.37476362312478 0.7813207048126 1.37476492139064 0.786520011759617 1.37476824804766 0.792086650110804 1.37477368693424 0.797973400184317 1.37478125945455 0.804163244917724 1.37479097424178 0.810610524289137 1.3748027913904 0.817274391264952 1.37481663739709 0.830943000805527 1.37484817620684 0.837947796281036 1.37486586904922 0.845077200937532 1.374885379369 0.852282673578362 1.37490656968873 0.859514324634959 1.37492927355281 0.866722868529091 1.37495330211291 0.8738615440822 1.37497845237624 0.880887598370994 1.37500451546419 0.887763197878284 1.37503128391304 0.894455899198023 1.37505855777874 0.90093908 1.37508615 - 0.66666667 12 0.75 10 0.83333333 12 -7 0 0 4 5 2 0.101624718349277 0.519071755635629 0.099164412899412 0.517930834970797 0.0948247038742984 0.515933929108478 0.0899183671929698 0.512672982821351 0.086853206421423 0.509679206490503 - 0.66666667 5 0.83333333 5 -7 0 0 11 12 2 0.101624718349277 0.519071755635629 0.102732079706668 0.51958527376654 0.103874284111854 0.520097469294138 0.105051732385784 0.520608582208445 0.106264863496939 0.521118849863533 0.107514155293466 0.5216285075852 0.10880012541719 0.522137789260522 0.110123332404438 0.52264692791539 0.11148437698176 0.523156156285566 0.112883903567741 0.523665707386437 0.114322601995888 0.524175815086677 0.115801209478417 0.524686714691289 - 0.409120244843595 12 0.543968604417467 12 -7 0 0 3 4 2 0.76431717 1.37477091 0.731021989874177 1.37480874967554 0.694277491112666 1.37498238083873 0.65252552 1.37471381 - 0.409120244843595 4 0.543968604417467 4 -8 0.33333333 0.5 -7 0 0 8 30 5 0.42945929 1.36753154 0.442488634426464 1.36816158585058 0.454116343349695 1.36871580874671 0.464644612421862 1.36920987028907 0.474281015563621 1.36965442480614 0.483176479163603 1.37005717043982 0.491454681044649 1.37042430607694 0.499212004941024 1.37076057740937 0.513846887181929 1.3713791560637 0.520724497403062 1.37166146558045 0.527242920931582 1.37192065962551 0.533466844004618 1.37215970907577 0.539450257205643 1.37238096001497 0.54524043961026 1.37258632485819 0.550880664763563 1.37277739592872 0.561942592211133 1.37313356705213 0.567364332005258 1.37329866832858 0.572717603512002 1.37345209957632 0.57804107852668 1.37359490700136 0.583373027953093 1.37372793275535 0.588753426162042 1.3738518561876 0.594226476754899 1.37396721235581 0.605460642705284 1.37418156322911 0.611221798534691 1.37428055819706 0.61717834584797 1.37437175835898 0.623390004671927 1.3744554140624 0.629926692320886 1.37453162008077 0.636876956965312 1.37460031769398 0.64435448682883 1.37466124771494 0.65252552 1.37471381 - 0.33333333 9 0.3749999975 7 0.416666665 7 0.4583333325 7 0.5 9 -7 0 0 5 6 2 0.14522680218064 0.533247098871843 0.134112796714545 0.530437717104447 0.130958088057959 0.529427278707453 0.125481625620456 0.527817825842717 0.122591748752992 0.527033033015441 0.115801209478417 0.524686714691289 - 0.33333333 6 0.5 6 -7 0 0 11 12 2 0.14522680218064 0.533247098871842 0.147537503637425 0.533831194548454 0.149909987743957 0.534420096434956 0.152346047202526 0.535014159878386 0.154847581495481 0.53561375145831 0.157416604082514 0.536219250221059 0.160055250408495 0.536831049013025 0.162765786835428 0.537449555931079 0.165550620635617 0.538075195911031 0.168412311212122 0.538708412478557 0.171353582748036 0.539349669691052 0.174377338529506 0.539999454303556 - 0.743934327122079 12 0.887898366733494 12 -7 0 0 3 4 2 0.42945929 1.36753154 0.365890020941815 1.36445758330428 0.294654165642281 1.3612633738537 0.21279921 1.3577497 - 0.743934327122079 4 0.887898366733494 4 -7 0 0 11 12 2 0.174377338529506 0.539999454303555 0.176731870693348 0.540505427298824 0.179136416309958 0.541016570793195 0.181592346146173 0.541533114604756 0.184101096815626 0.542055296896329 0.186664174879127 0.54258336479553 0.189283161318153 0.543117575064782 0.191959716423955 0.543658194827024 0.194695585150671 0.544205502353522 0.197492602987485 0.544759787920826 0.200352702412546 0.54532135474475 0.20327792 0.54589052 - 0.887898366733494 12 1 12 -7 0 0 3 4 2 0.21279921 1.3577497 0.149060555761036 1.35501368077307 0.0788984755053684 1.35205610556599 1.38777878078145e-017 1.34817287 - 0.887898366733494 4 1 4 -8 0.875 1 -7 0 0 10 20 3 0.07037813 0.0377961 0.0704499426869137 0.0345681548164226 0.0705159654563911 0.0315982669073528 0.0705769848588014 0.0288512066588311 0.0706336264183882 0.0262989361723267 0.0706863996167464 0.0239185967144787 0.0707357284896106 0.0216911391816053 0.0707819714963668 0.0196004336151033 0.0708254343262612 0.0176326938034808 0.0708663793003677 0.0157760530071601 0.0709436907651144 0.0122642006765379 0.0709800571021766 0.0106089961260095 0.0710143627652237 0.00904412289620943 0.0710467991909085 0.00756083799264718 0.0710775375670998 0.00615125947513862 0.0711067145142684 0.00480903933938631 0.0711344662214359 0.00352776604925062 0.0711608964323466 0.00230245230955844 0.071186108777507 0.00112800963909492 0.07121019 -8.67361737988404e-019 - 0.875 11 0.9375 9 1 11 -7 0 0 6 7 2 0.292853996512273 0.558823680902877 0.267324465259208 0.55540286807992 0.249130739015365 0.552788417482159 0.234404200628063 0.550637077242087 0.222402588493264 0.548829693310337 0.212173132094285 0.547268788391822 0.20327792 0.54589052 - 0.875 7 1 7 -7 0 0 8 16 3 0.0698967092057798 0.0596872562155088 0.0699173044628521 0.0587379593450928 0.0699381161313903 0.0577801677457936 0.0699591502803325 0.056813610894843 0.0699804131783438 0.0558380101073412 0.0700019113072075 0.0548530779529296 0.0700236513752154 0.0538585176724655 0.0700456403305598 0.0528540225946948 0.0701040612536585 0.0501890488386233 0.0701409143960235 0.0485117093814221 0.0701784762027226 0.0468058737805824 0.0702167778740569 0.0450701746654927 0.0702558569229707 0.0433029658087883 0.0702957480087893 0.0415027386217731 0.0703364916683205 0.0396677260747343 0.07037813 0.0377961 - 0.849766973181494 9 0.859375 7 0.875 9 -7 0 0 4 5 2 0.34480012 0.56547934 0.332967436702522 0.564032044882102 0.320486969202548 0.562463962947263 0.307196876280102 0.560745545685334 0.292853996512273 0.558823680902877 - 0.849766973181494 5 0.875 5 -7 0 0 8 30 5 0.06855952 0.12599594 0.0686060508956445 0.123443721444552 0.0686523734690961 0.120928712511283 0.0686986128973645 0.118443132091556 0.0687448861906601 0.115979880791496 0.0687913045976996 0.113532375057738 0.0688379758273821 0.111094401335934 0.0688850060867181 0.108659990261752 0.0689799977835502 0.103786631507548 0.0690279591846604 0.101347685606851 0.0690764928123559 0.0989006361585669 0.0691257053475821 0.0964398012879232 0.0691757055853389 0.0939595335354975 0.0692266061576057 0.091454126070681 0.0692785252006407 0.0889177275865702 0.0693846513890724 0.0837707676331971 0.0694388585638577 0.0811602047676904 0.0694943354280622 0.0785064670053409 0.0695512153222684 0.0758032097813292 0.0696096411491599 0.0730437465663444 0.0696697678399199 0.0702209343522129 0.0697317654566045 0.0673270340309319 0.069808156757815 0.0637810208752886 0.0698205669495402 0.0632055455413722 0.0698330548555482 0.0626270589394621 0.0698456218512422 0.0620454993131167 0.0698582693388753 0.061460803819062 0.0698709987488409 0.0608729084710057 0.0698838115409616 0.0602817480834508 0.0698967092057798 0.0596872562155088 - 0.75 9 0.78125 7 0.8125 7 0.84375 7 0.849766973181494 9 -7 0 0 4 5 2 0.502430083744267 0.582273314723503 0.463619884081318 0.578670451937887 0.428648542294595 0.575091895706327 0.391584479334934 0.571201692288573 0.34480012 0.565479339999999 - 0.75 5 0.849766973181494 5 -7 0 0 11 12 2 0.502430083744267 0.582273314723503 0.522501663186258 0.584136617341065 0.542976113011614 0.5859693979723 0.56383871644875 0.587769125398031 0.585073292810326 0.589533285490213 0.606662228571089 0.591259396444165 0.628586527041634 0.592945024604801 0.650825877296698 0.594587800588423 0.673358742035027 0.596185435326258 0.696162463167186 0.597735735624371 0.719213383148094 0.599236618846785 0.742486979392384 0.600686126384672 - 0.388108130442962 12 0.458397371248378 12 -7 0 0 3 4 2 0.06855952 0.12599594 0.0679961312025538 0.156898302596973 0.0674937765389551 0.190973145070398 0.06708392 0.22674332 - 0.388108130442962 4 0.458397371248378 4 -7 0 0 11 32 4 0.742486979392384 0.600686126384672 0.756262100209903 0.60154405746033 0.770115228780121 0.60238399065138 0.784041280441872 0.603205519848021 0.79803506437323 0.604008254161498 0.812091293355079 0.604791818902465 0.826204594097137 0.60555585650716 0.840369518058716 0.606300027402817 0.854580552686244 0.607024010804566 0.868832132980287 0.607727505437332 0.883118653296366 0.608410230177853 0.926110203815611 0.610397350572973 0.954903515452315 0.61163839619357 0.983769089186947 0.612792967079421 1.01266137989942 0.61385931009982 1.04153397334368 0.61483599567896 1.07034236818034 0.615722014538298 1.09904061196152 0.616516646794217 1.12758577970924 0.617219615540303 1.15593507259641 0.617830955573276 1.18404799773671 0.618351074519563 1.21845825328772 0.618882138445721 1.22501535251886 0.618978528771721 1.23155660788941 0.619069884703224 1.23808151620627 0.619156216920335 1.24458958051358 0.619237537122628 1.25108031028417 0.619313858015604 1.25755322159892 0.619385193296466 1.26400783731497 0.619451557639239 1.27044368722367 0.619512966679235 1.27686030819888 0.619569436996878 1.28325724433633 0.619620986100931 - 0.458397371248378 12 0.5 10 0.583333335 10 0.603008108383431 12 -7 0 0 4 5 2 0.06708392 0.22674332 0.0664514980136923 0.281937593812552 0.0660201617958299 0.340830340174219 0.0658626482918891 0.399203526854614 0.065844 0.45339225 - 0.458397371248378 5 0.603008108383431 5 -7 0 0 11 12 2 1.28325724433633 0.619620986100931 1.3039548018292 0.61978777540786 1.3244462839915 0.619903045838727 1.34471624841828 0.619967390450874 1.36475004417459 0.619981504042133 1.38453386117681 0.619946177201283 1.40405476914654 0.619862289660439 1.42330074801604 0.619730803041945 1.44226070961195 0.619552753163055 1.46092450839156 0.619329242127378 1.47928293695478 0.619061430509943 1.4973277 0.61875053 - 0.603008108383431 12 0.66666667 12 -7 0 0 4 5 2 0.065844 0.45339225 0.0658357872605889 0.477246469933229 0.0658536737774236 0.500321756070562 0.0658910123888447 0.522366341383861 0.0659340686464917 0.543222394527479 - 0.603008108383431 5 0.66666667 5 -7 0 0 9 10 2 0.06604976 0.59201791 0.0660330364552352 0.585611354854732 0.0660174769769041 0.579517079616863 0.066002976078619 0.573700673612952 0.065989445460411 0.568132760038515 0.0659768102346407 0.562787823911149 0.0659650063302675 0.557643391728085 0.0659539786536799 0.552679435254906 0.0659436797246696 0.547877911941166 0.0659340686464917 0.543222394527479 - 0.375 10 0.41045693926711 10 -7 0 0 4 5 2 1.61331836212274 0.61576988267499 1.5790856767609 0.616938598025865 1.5492600901306 0.617732037046776 1.52225080980301 0.618321120168623 1.4973277 0.61875053 - 0.375 5 0.41045693926711 5 -8 0.25 0.375 -7 0 0 11 32 4 0.06622745 0.68027135 0.0662249617422559 0.676327523715387 0.0662222282362122 0.672873988095422 0.0662192487746604 0.669724990888826 0.0662160098166212 0.666778643112277 0.0662124911671566 0.66395981881058 0.0662086644628992 0.661212876262881 0.0662044942239083 0.65849023049417 0.0661999352779993 0.655749982102431 0.0661949304267246 0.652951051318653 0.0661894062361583 0.650050769693855 0.0661801937874518 0.645475215145041 0.0661769686147643 0.643912510047743 0.0661735768074134 0.642306188774598 0.0661700045819582 0.64064979335027 0.0661662363313223 0.638936353802124 0.0661622543022349 0.637158243793873 0.0661580382042005 0.635307016013435 0.0661535646795615 0.633373191459627 0.0661488065713732 0.631345976795835 0.0661437319188159 0.629212883922825 0.0661328733123762 0.624705567937472 0.0661270893572923 0.622331344490672 0.0661209126014347 0.61982185298855 0.0661142987788384 0.617160203986058 0.0661071958680381 0.614326706603127 0.0660995424167349 0.611298246607044 0.0660912649045486 0.608047309255978 0.0660822740343289 0.604540607541912 0.0660724596328476 0.600737200212827 0.0660616825913633 0.596585522922818 0.06604976 0.59201791 - 0.25 12 0.3125 10 0.34375 10 0.375 12 -7 0 0 7 8 2 1.82243701492879 0.605418142870447 1.79314661649893 0.607325803168772 1.77603857669341 0.608318155756781 1.7545231352709 0.609479674042788 1.73858666581076 0.610556692117729 1.7087596066923 0.611771948890432 1.68150162747433 0.613442083145185 1.61331836212274 0.615769882674991 - 0.25 8 0.375 8 -7 0 0 8 16 3 1.82243701492879 0.605418142870447 1.85704378901435 0.603164231264085 1.89156921790408 0.60070598110988 1.92594744408152 0.598044934272556 1.96011165522021 0.595183736121992 1.99399491567649 0.592126151449912 2.02753107366233 0.588877045130956 2.0606556768397 0.585442323085112 2.10378946698009 0.580668725702695 2.11422334860896 0.579490185753496 2.12460637498729 0.578293447031874 2.13493652307908 0.577078746472272 2.14521179934256 0.575846330788774 2.15543024246294 0.574596456129768 2.16558992595918 0.573329387700741 2.17568896064473 0.57204539935976 - 0.757022074411284 9 0.833333335 7 0.857833183419821 9 -7 0 0 3 4 2 0.06622745 0.68027135 0.0662600002586235 0.731861495571935 0.066071003871452 0.783202082049036 0.06544933 0.8306101 - 0.757022074411284 4 0.857833183419821 4 -7 0 0 8 9 2 2.17568896064473 0.57204539935976 2.23429126655193 0.564594719182665 2.2908514020851 0.55657431072021 2.34500023722083 0.548037683370255 2.39641092670016 0.539048156893567 2.44481509975849 0.529676200014164 2.49001347652848 0.519995726434809 2.53187651037283 0.51008035950624 2.57033879 0.50000087 - 0.857833183419821 9 1 9 -7 0 0 4 5 2 0.06544933 0.8306101 0.0647918081833654 0.880752244040605 0.0637268608521369 0.927027559065475 0.0622921412548716 0.966928948778884 0.06075625 1 - 0.857833183419821 5 1 5 -8 0 55.21292144 -7 0 0 11 12 2 0 55.21292144 0 50.1935649403198 0 45.1742088735556 0 40.1548507332976 0 35.1354977241614 0 30.116136289694 0 25.0967847290392 0 20.0774247530174 0 15.0580699358463 0 10.0387129269252 0 5.01935650168796 0 -5.15367502986138e-015 - 0 12 55.21292144 12 -8 0 55.21292144 -7 0 0 10 20 3 1 2.52012912 1 2.39412266365863 0.999999999999985 2.26811627384546 1.00000000000003 2.14210959374573 0.999999999999961 2.01610355062153 1.00000000000004 1.89009659637101 0.999999999999975 1.76409054778864 1.00000000000001 1.63808386844942 0.999999999999996 1.51207748770569 1 1.38607101930746 1 1.13405810685792 0.999999999999988 1.00805165061462 1.00000000000002 0.882045194352718 0.999999999999963 0.756038738072331 1.00000000000005 0.630032281773265 0.999999999999954 0.504025825455808 1.00000000000004 0.378019369119629 0.99999999999998 0.252012912765009 1.00000000000001 0.126006456391774 1 0 - 0 11 27.60646072 9 55.21292144 11 -8 0 1 -7 0 0 11 32 4 2.77555756156289e-017 0 0.0454545454545524 0 0.090909018600636 0 0.136364097864244 0 0.18181672377039 0 0.227275428498608 0 0.272723958197112 0 0.318183872316266 0 0.363635697765604 0 0.409090941474244 0 0.454545532719968 0 0.522727346377397 0 0.545454616381054 0 0.568181775202725 0 0.590909063510762 0 0.613636436020497 0 0.636363726275171 0 0.659090915332787 0 0.681818149217452 0 0.704545492428793 0 0.727272747112523 0 0.772727272728162 0 0.795454554762829 0 0.81818184726602 0 0.84090910882119 0 0.863636335243012 0 0.886363562012609 0 0.909090829954948 0 0.931818144963694 0 0.954545462442222 0 0.977272727272764 0 1 0 - 0 12 0.5 10 0.75 10 1 12 -8 0 1 -7 0 0 9 130 17 8.71417242 0.85810406 8.72010671487786 0.857286845569454 8.72602716238065 0.856351876801175 8.73193223984309 0.855303740939545 8.73782042645557 0.854147024899107 8.74369020328675 0.852886315265377 8.74954005325127 0.85152619829356 8.7553684611454 0.850071259910111 8.76117391361634 0.848526085711279 8.76984539196607 0.846079848590558 8.77272976686283 0.84524302377225 8.77560783430614 0.844385359773355 8.77847940472216 0.843507429858183 8.78134428854858 0.842609807290734 8.78420229620877 0.841693065335432 8.7870532381398 0.840757777256273 8.7898969247685 0.839804516317561 8.7955694082867 0.837863195249356 8.79839834862678 0.836875121771589 8.80121913308274 0.835870270479452 8.80403229413738 0.83484914745426 8.8068385101943 0.833812245199008 8.80963823980813 0.832760076668873 8.8124318396533 0.831693164301046 8.8152197745939 0.830612020466432 8.82078528206614 0.828422291096367 8.82356284626603 0.827313706424674 8.82633564719776 0.826191916643458 8.82910423514508 0.82505742992972 8.83186895223975 0.823910765700799 8.83463018363273 0.822752441052485 8.83738861162208 0.821582957040358 8.84014489214571 0.82040281613687 8.84565145436764 0.818022388282796 8.84840187183256 0.81682209400419 8.85114924601435 0.815612266951401 8.85389339726666 0.814393454701264 8.85663414595834 0.813166204831528 8.85937131243956 0.811931064918804 8.86210471707822 0.810688582540795 8.86483418022914 0.809439305274393 8.87028486427983 0.806928256119498 8.87300616389328 0.805666371303003 8.87572256457962 0.804399644927308 8.87843655700553 0.803124793639073 8.88114191212064 0.801851043567619 8.88384616448719 0.80056787550528 8.88654498596995 0.799281788100189 8.88924065431021 0.797989803608726 8.89462538193967 0.795395054238824 8.89731449906522 0.794092206392907 8.90000070715852 0.79278369075162 8.90268434387487 0.791469312680149 8.90536574687161 0.790148877544388 8.90804525380423 0.788822190709328 8.91072320232956 0.78748905754085 8.91339993010352 0.786149283404142 8.91875161946183 0.783456063925493 8.92142667017012 0.782102601672385 8.92410040886305 0.780742254648928 8.92677231749087 0.77937499059765 8.92944187801373 0.778000777262708 8.932108572378 0.776619582386082 8.93477188254465 0.775231373711966 8.93743129046285 0.773836118982837 8.94274126571488 0.771031452901492 8.94539175937448 0.769622183903817 8.94803781009952 0.768204826910553 8.9506768184001 0.766783440410601 8.95331281393284 0.765349050919613 8.95593900821557 0.763913952268704 8.95855982217862 0.762468401123379 8.96117360216221 0.761014596582506 8.96638765763751 0.758087268848398 8.96898790471009 0.756613801517266 8.97158132978091 0.755129560000932 8.97416789151184 0.753633573578166 8.97674754856661 0.752124871527921 8.97932025960704 0.750602483128875 8.98188598329666 0.749065437660042 8.98444467829759 0.747512764400119 8.98954792824834 0.744374220855922 8.99209261860689 0.742788311118308 8.99462888752844 0.741185213901434 8.99716325306338 0.739562047081663 8.99968128458306 0.737922033033361 9.00219377413311 0.736261044096632 9.00469127465916 0.734580850454755 9.00717571540018 0.732879907129056 9.01211360970985 0.729435974021651 9.01456713095515 0.727692966521647 9.01700397674227 0.725928288417601 9.01942207351488 0.724141584567384 9.02182034480689 0.722332167650432 9.02419756486951 0.720499400074731 9.02655156785102 0.718642957451459 9.02888037715023 0.716762452332329 9.03348974621098 0.712950512979629 9.03577007117633 0.711019156972917 9.03802583252999 0.709061436656014 9.04025682623083 0.707076374048553 9.04246284822885 0.705062991171129 9.04464369448397 0.703020310043047 9.04679916094799 0.700947352684929 9.04892904357763 0.698843141116378 9.05208518570231 0.695638475478174 9.0531307607161 0.694562223926386 9.05416992705927 0.693477720767548 9.0552025804297 0.69238493181677 9.05622864630788 0.691283789603147 9.05724815322801 0.690174111482033 9.0582611815468 0.689055656892157 9.05926768770529 0.687928323760948 9.06126672027463 0.685656644349723 9.06225926822408 0.684512273996756 9.0632445438215 0.683359562016299 9.0642222430453 0.682198697427905 9.06519206188264 0.681029869251695 9.06615369630901 0.679853266507035 9.06710684231157 0.678669078214046 9.06805119586871 0.677477493392281 9.07085696715352 0.673881116400246 9.07269109561411 0.671454701477404 9.07448640615027 0.669000968558531 9.07624046656604 0.666521429909358 9.0779508446663 0.664017597795072 9.07961510825532 0.661490984481634 9.08123082513756 0.658943102234172 9.08279556311769 0.656375463318496 9.08430689 0.65378958 - 0 10 0.125 8 0.1875 8 0.25 8 0.3125 8 0.375 8 0.4375 8 0.5 8 0.5625 8 0.625 8 0.6875 8 0.75 8 0.8125 8 0.875 8 0.90625 8 0.9375 8 1 10 -8 0 55.31736968 -7 0 0 11 12 2 1 0 0.999999999999979 5.01055243742526 1.00000000000009 10.0211048217798 0.999999999999798 15.0316576183568 1.00000000000035 20.0422088675203 0.999999999999541 25.0527637704289 1.00000000000049 30.0633126980327 0.999999999999595 35.0738686576139 1.00000000000026 40.0844186104698 0.999999999999882 45.0949722142143 1.00000000000003 50.1055243443264 1 55.11607678 - 0 12 55.31736968 12 -8 0 55.31736968 -7 0 0 9 18 3 0 9.62275446028575e-016 0 3.07318720700961 0 6.14637441389696 0 9.21956162066097 0 12.2927488273033 0 15.3659360338224 0 18.4391232402191 0 21.5123104464933 0 24.5854976526446 0 30.7318720647026 0 33.8050592104033 0 36.8782467501872 0 39.9514330890524 0 43.0246216466821 0 46.0978074984557 0 49.1709955579907 0 52.2441824748387 0 55.31736968 - 0 10 27.65868484 8 55.31736968 10 -8 0 1 -7 0 0 10 38 5 0 0 0.0250000000000009 0 0.0499999935982559 0 0.0749999951115954 0 0.100000005706131 0 0.125000018349978 0 0.150000022765503 0 0.175000010382173 0 0.199999979288816 0 0.224999939186311 0 0.274999893493831 0 0.299999860945725 0 0.325000012430857 0 0.349999539230054 0 0.375001005301938 0 0.399999458593392 0 0.425000319885521 0 0.449999954067061 0 0.475000055708348 0 0.525000081923469 0 0.550000063826084 0 0.574999942038634 0 0.599999918468625 0 0.624999993447079 0 0.650000089978594 0 0.675000066260017 0 0.699999890279141 0 0.724999960709841 0 0.775000025744176 0 0.800000070824655 0 0.825000026156557 0 0.84999992844648 0 0.874999851592024 0 0.899999842281814 0 0.92499989303318 0 0.949999952652911 0 0.974999974137886 0 1 0 - 0 11 0.25 9 0.5 9 0.75 9 1 11 -8 0 1 -7 0 0 11 232 24 9.08430689 0.65378958 9.08508284878552 0.649023057634539 9.08556488405621 0.644120886110153 9.08575432501281 0.639117360424039 9.08565250090079 0.634046775572625 9.08526074087754 0.628943426553749 9.08458037423481 0.6238416083632 9.08361273010158 0.618775615999201 9.08235913776507 0.613779744457585 9.08082092638903 0.608888288736121 9.07899942521361 0.604135543831295 9.07584423255725 0.597265935194777 9.07472201132118 0.595019317533022 9.07352946596792 0.592820238578348 9.07226676272958 0.590672985152841 9.07093406783661 0.588581844080954 9.06953154753184 0.586551102183763 9.06805936802888 0.584585046286107 9.06651769558478 0.582687963209481 9.06490669641066 0.580864139777775 9.06322653675331 0.579117862813493 9.05972822892558 0.575788975466071 9.05791016328993 0.574206206879086 9.05602864635833 0.572699254653611 9.05408913855769 0.571262260063659 9.05209710031347 0.569889364384597 9.05005799205418 0.568574708890074 9.04797727420245 0.567312434855298 9.04586040718934 0.56609668355455 9.04371285143705 0.564921596262332 9.04154006737459 0.563781314253332 9.03825123945369 0.562114311076325 9.03715002149503 0.561565879995439 9.03604454410693 0.561023953220054 9.03493548983777 0.560487798411537 9.03382354124741 0.559956683229671 9.03270938088474 0.559429875337181 9.03159369130211 0.558906642392537 9.03047715505942 0.558386252059068 9.02936045470135 0.557867971995701 9.02824427278816 0.557351069864503 9.02601431095095 0.556318556787143 9.02490075301549 0.555802685384149 9.0237877289477 0.555288310941245 9.02268033703368 0.554769519828005 9.02157437442052 0.55425131210463 9.02046983983329 0.553733757884169 9.01936802910315 0.553215405167419 9.0182676174064 0.552697877097873 9.01716841320553 0.552181466938608 9.01607039912075 0.551666263672921 9.01277872307835 0.550125893123371 9.0105875236918 0.549105852009951 9.00839744348638 0.548095733828487 9.00620635031953 0.547098588925188 9.00401211208315 0.546117467645254 9.00181259661358 0.545155420335542 8.99960567181534 0.544215497340615 8.99738920552787 0.543300749007648 8.99516106563923 0.54241422568143 8.99291912000926 0.54155897770845 8.98953229476053 0.540327594297213 8.98839922944729 0.539925941527947 8.98726297985933 0.539531510979102 8.98611842023471 0.539152612456654 8.98497695353454 0.538770586917952 8.98382077689848 0.538414428573102 8.98266499263712 0.538059442366149 8.98150321617556 0.537715992073234 8.98033709931785 0.537381328939358 8.97916715267653 0.537054566292128 8.9768198560428 0.536416316760472 8.97564253729798 0.536104778899009 8.97446185486582 0.535800273879792 8.97327811548189 0.535502247639629 8.97209162589183 0.535210146117235 8.97090269282783 0.53492341524885 8.96971162303482 0.534641500973121 8.96851872324972 0.534363849226954 8.96732430021152 0.534089905948144 8.966128660661 0.533819117074222 8.9637355620119 0.5332827400112 8.96253810291232 0.533017151822198 8.96134004077601 0.532753609914236 8.96014168234461 0.532491560226159 8.95894333435148 0.532230448696115 8.95774530354626 0.531969721263465 8.95654789665393 0.531708823865887 8.9553514204283 0.531447202442935 8.95415618159706 0.531184302932489 8.95296248690598 0.530919571273599 8.95057879927765 0.530385335535819 8.94938888179289 0.530115692434918 8.9482005080735 0.529844240111591 8.94701700862454 0.529564853111399 8.94583033548749 0.529292371169174 8.94465677568417 0.528996796075961 8.94347482749564 0.528717756487004 8.9423056498211 0.528416277643856 8.94113691673964 0.528115081521516 8.93997230233905 0.527807409620025 8.93648768158404 0.526870773665613 8.93417715819225 0.526227709354557 8.93187684946778 0.525570409641345 8.92958441297771 0.524903279465876 8.92729750626435 0.524230723766894 8.92501378691084 0.523557147484873 8.92273091244775 0.522886955558214 8.9204465404594 0.522224552927327 8.91815832848623 0.521574344531043 8.9158639340971 0.520940735309188 8.91240955522143 0.52002182764706 8.91125596138529 0.519720781887026 8.91009994554373 0.519425533894347 8.9089412160496 0.519136632064487 8.90777947871178 0.51885462966722 8.9066144381507 0.518580082301097 8.90544579906753 0.518313545343577 8.90427326764197 0.518055571407715 8.90309655277596 0.517806707790968 8.9019153674852 0.517567493931509 8.89954349287097 0.517109423786374 8.89835289635364 0.516890388929962 8.89715794638743 0.516680753162023 8.89595894874807 0.516479915354004 8.89475620918217 0.516287274379226 8.89355003348352 0.516102229108037 8.89234072738382 0.515924178414423 8.89112859668099 0.515752521168869 8.88991394711632 0.515586656244528 8.8886970844692 0.51542598251295 8.88504077456033 0.514957731513383 8.88259560534575 0.514663924454373 8.88014525296213 0.514383668642823 8.87769216352933 0.514112155051425 8.8752387831421 0.513844574654188 8.8727875579334 0.513576118423298 8.87034093398798 0.513301977332934 8.86790135744077 0.513017342355536 8.86547127438408 0.51271740446475 8.86305313093928 0.512397354633575 8.85944749434878 0.511879898436099 8.85824935146861 0.511700920423304 8.85705426161359 0.511516707729181 8.85586531165175 0.511321430077167 8.85467972245889 0.511120286693688 8.85349738217728 0.510913461764539 8.85231898316167 0.510699627209688 8.85114355795927 0.510480575969959 8.84997087533704 0.510256716563381 8.84880079450106 0.510028287556911 8.84646508981279 0.509563641699114 8.84529948080399 0.509327396911271 8.84413582452765 0.509087750499166 8.84297383036808 0.508845222697497 8.84181320773732 0.508600333740979 8.84065366600339 0.50835360386434 8.83949491458863 0.508105553302191 8.83833666286224 0.50785670228939 8.83717862023476 0.507607571060469 8.83602049609141 0.507358679850265 8.83370350356706 0.506862417936553 8.83254463520838 0.506615047241278 8.83138510414184 0.506368957038407 8.83022461976242 0.506124667559355 8.82906289144867 0.505882699034242 8.8278996286094 0.50564357169536 8.82673454061112 0.505407805772157 8.8255673368665 0.505175921497002 8.82439772674837 0.504948439099926 8.82322541965681 0.504725878812382 8.82146247763755 0.50440020189163 8.82087408314383 0.504293003963982 8.82028490524361 0.504187231954852 8.81969490770179 0.504082950735242 8.81910405424583 0.503980225179253 8.8185123086652 0.503879120156456 8.81791963466772 0.503779700541573 8.81732599604746 0.50368203120469 8.81673135652587 0.503586177019212 8.81613567987201 0.503492202856665 8.81494217979175 0.503308144322122 8.8143443688041 0.503218036452382 8.81374553465518 0.503129774987318 8.81314571511162 0.503043284934263 8.81254494797801 0.502958491299975 8.81194327100534 0.502875319092414 8.81134072200236 0.502793693317656 8.81073733872959 0.502713538984051 8.8101331589787 0.502634781097822 8.8095282205261 0.502557344666721 8.80649992366341 0.502176394821522 8.80406575123184 0.501891578375669 8.80162246205324 0.501621905854459 8.79917247434137 0.501362577753725 8.79671820627054 0.501108794566549 8.79426207607773 0.50085575678994 8.79180650192045 0.500598664916463 8.78935390203699 0.500332719442707 8.78690669460021 0.500053120862348 8.78446729782438 0.499755069670725 8.78082354594424 0.499273114708323 8.7796114734086 0.499106738315851 8.77840252722177 0.498933434819672 8.77719609498628 0.498754366804217 8.7759938505332 0.498566291484616 8.77479532906868 0.498370086978597 8.77360008541866 0.498166593742038 8.77240967647685 0.497952794208601 8.77122492118106 0.497727092921974 8.7700437520661 0.4974934563149 8.76768953916743 0.497008441260479 8.76651637812818 0.496757288831323 8.76534688380167 0.49649801098869 8.76418077747348 0.496231127221307 8.76301778046165 0.495957157017343 8.76185761403591 0.495676619865876 8.76069999952385 0.495390035254814 8.75954465819676 0.495097922673265 8.75839131137031 0.494800801609364 8.75723968033229 0.494499191551857 8.75378909848708 0.493582452863905 8.7514944576916 0.492955415343671 8.74920333514876 0.4923166555505 8.74691350200968 0.491670329605959 8.7446227294231 0.491020593632438 8.74232878854491 0.490371603751161 8.74002945051849 0.48972751608463 8.73772248650284 0.489092486754237 8.73540566764223 0.488470671882148 8.73307676509158 0.487866227590093 8.73073355 0.48728331 - 0 12 0.125 10 0.1875 10 0.25 10 0.28125 10 0.3125 10 0.375 10 0.40625 10 0.4375 10 0.46875 10 0.5 10 0.5625 10 0.59375 10 0.625 10 0.6875 10 0.71875 10 0.75 10 0.78125 10 0.796875 10 0.8125 10 0.875 10 0.90625 10 0.9375 10 1 12 -8 0 2.52492265 -7 0 0 8 9 2 1 7.105427357601e-015 1 6.92942092010763 1 13.858841881843 1 20.7882625760624 0.999999999999995 27.7176839784132 1.00000000000001 34.6471042549407 0.999999999999997 41.5765256355166 1 48.5059463649497 1 55.43536728 - 0 9 2.52492265 9 -8 0 2.52492265 -7 0 0 10 20 3 3.01761452 0 2.89136838715582 0 2.7651222543313 0 2.6388761215265 0 2.51262998874125 0 2.38638385597588 0 2.2601377232299 0 2.13389159050386 0 2.00764545779732 0 1.8813993251105 0 1.62890705977622 0 1.50266091733515 0 1.37641484530259 0 1.25016853348531 0 1.12392272811173 0 0.997676195579593 0 0.871430394579796 0 0.7451840821463 0 0.618938002783951 0 0.49269187 0 - 0 11 1.262461325 9 2.52492265 11 -8 0 1 -7 0 0 11 352 36 8.71417242 0.85810406 8.66490715429855 0.865980023914049 8.61559248658661 0.873574387795598 8.56623099814832 0.880890740230876 8.51682527098765 0.887932669707493 8.46737788781893 0.89470376460983 8.41789143208361 0.90120761322706 8.36836848792617 0.907447803741921 8.31881164022235 0.913427924243525 8.26922347455214 0.919151562715384 8.21960657722077 0.92462230704455 8.14514201425829 0.932454464001723 8.1203139562303 0.935002856520232 8.09547968422149 0.937489371090979 8.07063952128644 0.939914456234512 8.04579379049047 0.942278560469289 8.02094281488184 0.944582132316827 7.99608691753013 0.946825620295129 7.97122642148374 0.94900947292539 7.9463616498077 0.95113413872652 7.9214929255569 0.953200066218699 7.87174821802481 0.957215341624456 7.84687224148305 0.959164688493601 7.82199286469362 0.961056208653495 7.79711087176296 0.962890279057449 7.77222567427271 0.964667489710213 7.74733808633593 0.966388212908191 7.72244942342931 0.968052743118521 7.69755906472904 0.969661675380441 7.67266537513865 0.971215762171357 7.64776987229435 0.972715266580858 7.59797361600325 0.97560636007587 7.57307297767539 0.976997931291562 7.54816970995578 0.978336044148526 7.52326369362773 0.979621215817826 7.49835480949001 0.980853963474605 7.47344293831702 0.982034804287762 7.4485279609129 0.983164255433708 7.42360975805317 0.984242834081655 7.39868821053517 0.985271057406318 7.37376319914318 0.98624944257909 7.32390601019163 0.988107570966713 7.29897391041481 0.988987303628704 7.27403747819468 0.989818317976584 7.2490994188497 0.990600747978746 7.22415369368224 0.991335913903124 7.19920558206362 0.992023600498361 7.17425646183983 0.99266412182843 7.14930207602941 0.993258556438582 7.12434731163469 0.993806742307332 7.09939036796847 0.994309424732858 7.04947435063386 0.995224482347997 7.02451519171679 0.995636869103167 6.99955534289922 0.996004552349433 6.97459526452617 0.996327970629028 6.94963541695131 0.996607562486819 6.92467626051511 0.996843766463488 6.89971825557399 0.997037021105009 6.87476186246887 0.997187764951942 6.84980754155274 0.997296436549335 6.82485575317117 0.997363474439251 6.7749581621753 0.997415159891365 6.75001227661638 0.997399797095871 6.72507045168257 0.997343753523473 6.70013159621276 0.997247273981923 6.67519510150596 0.997110663526211 6.65026087739168 0.996934291952016 6.62532869421683 0.996718511647293 6.60039794771612 0.996463628213868 6.57546808607107 0.996169953810417 6.55053906143608 0.995837863519816 6.50068151956109 0.995097467611508 6.475753078667 0.994689163923938 6.45082439599549 0.994243102121004 6.42589541472742 0.993759587108802 6.40096557121191 0.993238965829057 6.37603427104486 0.992681587770783 6.35110130734788 0.992087770286609 6.32616658620036 0.99145782136056 6.3012294435907 0.990792096257114 6.27628875914587 0.990090988086863 6.22640322350431 0.988618364073199 6.20145823424969 0.987846859680982 6.17651156817549 0.987040417925207 6.15156376989639 0.986199293825693 6.12661538402567 0.98532374240597 6.10166695518129 0.984414018684395 6.07671902797166 0.983470377684971 6.05177214701829 0.982493074426757 6.02682685692988 0.981482363932352 6.00188370232418 0.980438501222256 5.95200275330478 0.978284981413737 5.92706487633709 0.977175324454284 5.90213078047747 0.976033024378178 5.87719883362557 0.974858339893144 5.8522734751408 0.973651519422884 5.82735277167765 0.972412822182931 5.8024322562595 0.971142511696036 5.77752730301052 0.969840817837524 5.75262186132857 0.968508023766149 5.72772306356203 0.967144373331431 5.67793356722847 0.964355880423713 5.65304311708238 0.962931037529217 5.62815643652966 0.961475855035217 5.60327299713861 0.959990589781369 5.57839227048462 0.958475498610051 5.55351372813496 0.956930838359851 5.52863684166362 0.955356865873482 5.50376108264055 0.953753837990082 5.47888592263757 0.952122011551273 5.45401083322561 0.950461643397306 5.40425973872679 0.947084337340717 5.37938349144727 0.945367414663593 5.35450830229934 0.9436223354284 5.32962341569894 0.941849999415617 5.3047562399593 0.940048907210694 5.2798565353352 0.938222440746723 5.25498016831603 0.936367311643688 5.23008851924464 0.934486171301356 5.20520134301332 0.932578001484729 5.18031286891735 0.930643388579726 5.1305371758184 0.926721481766138 5.10564982389034 0.92473419621277 5.080763565467 0.922720764490115 5.05587899942491 0.920681372573898 5.03099672465338 0.918616206442882 5.00611734002348 0.916525452071456 4.98124144442686 0.91440929543892 4.95636963673622 0.91226792252013 4.93150251583892 0.910101519293274 4.90664068061259 0.907910271734429 4.85692877926819 0.903478459907169 4.83207897741117 0.901237888501572 4.80723387150833 0.898972892969865 4.78240059802841 0.896683482789859 4.75757069418704 0.894370088569272 4.73274641927132 0.892032851474741 4.70792926812639 0.889671933304271 4.68311486762309 0.887287654238357 4.65830531543883 0.884880159799165 4.6334988509731 0.882449699657303 4.58389144829772 0.877543269776798 4.5590904768674 0.875067300949405 4.53429162552125 0.872568796835572 4.50949428442583 0.87004797603434 4.48469784376669 0.867505057147791 4.45990169370181 0.864940258773707 4.43510522442131 0.862353799514659 4.4103078260849 0.85974589796898 4.38550888887565 0.857116772737991 4.3607078029622 0.854466642421338 4.31110011407819 0.849124808817472 4.28629359671398 0.846433101311865 4.26148503645524 0.843720760617285 4.23667506332419 0.840987944248098 4.21186430735171 0.838234809719013 4.18705339855871 0.835461514544713 4.1622429669744 0.832668216239329 4.13743364262343 0.829855072318054 4.11262605553136 0.827022240294895 4.08782083572477 0.824169877684763 4.03821639073333 0.818426406319438 4.01341729503066 0.815535299245335 3.98862083513135 0.812624963741463 3.96383223360562 0.809695616943437 3.93904049384272 0.806747265426999 3.9142660558766 0.803780323884026 3.88948662840744 0.800794652261359 3.8647194124268 0.797790623199078 3.83996047135917 0.794768334927047 3.81520734610698 0.791727904858107 3.76571342998845 0.78561106892078 3.74097248253552 0.782534661019645 3.71623689399829 0.779440404061758 3.69150601268799 0.776328438922408 3.66677918691145 0.773198906477441 3.64205576498391 0.770051947602338 3.61733509520805 0.76688770317243 3.59261652590117 0.763706314063744 3.56789940536731 0.760507921151377 3.54318308191977 0.757292665311191 3.50610881484068 0.752444698472374 3.49375076216306 0.750824529012944 3.48139266437318 0.749200196650194 3.46903444000919 0.747571718992592 3.45667600761082 0.745939113651361 3.44431728571579 0.744302398233538 3.43195819286369 0.742661590351186 3.41959864759285 0.741016707611528 3.40723856844212 0.739367767625513 3.39487787395036 0.737714788001835 3.37015509136211 0.734400784698618 3.35779296818664 0.732739762446993 3.34543008146751 0.731074735177651 3.3330664894246 0.729405714813925 3.32070229176975 0.727732711589972 3.30833759532334 0.726055735450986 3.2959724935786 0.724374796883908 3.28360706029821 0.722689907179871 3.27124135704503 0.721001078125657 3.25887545473994 0.71930832112783 3.22177749804561 0.714218295042219 3.19704514193278 0.710809272977024 3.17231305813882 0.707384667159969 3.14758190396416 0.703944565179111 3.12285233671092 0.700489054625459 3.09812501368184 0.697018223085743 3.07340059217467 0.693532158151551 3.0486797294963 0.690030947410082 3.02396308294312 0.686514678451714 2.99925130982005 0.682983438864969 2.96219194623053 0.677664254926384 2.94984017573031 0.675887478261979 2.93748995948876 0.674106976668331 2.92514125371432 0.67232278239022 2.91279409336856 0.67053491435795 2.90044864580813 0.668743369114932 2.88810510514052 0.666948138683262 2.87576354059089 0.665149236198446 2.86342381201949 0.663346710196756 2.85108566590485 0.661540628384319 2.82641258398443 0.657921395144492 2.81407762684554 0.656108247323941 2.80174416512687 0.654291608090766 2.78941211043136 0.6524715172317 2.77708137435304 0.650648014535972 2.76475186850155 0.648821139789028 2.7524235044648 0.646990932780889 2.74009619385471 0.645157433297126 2.72776984826223 0.643320681126779 2.71544437929257 0.641480716056749 2.67847033704598 0.635951301511358 2.65382412843812 0.632252332701078 2.62918036552176 0.628540989745774 2.60453834109616 0.624817590946007 2.57989734796545 0.62108245460422 2.55525667892672 0.617335899020449 2.53061562678479 0.613578242497045 2.50597348433784 0.609809803334729 2.4813295443886 0.606030899834999 2.45668309973724 0.602241850299157 2.4073837866331 0.594644095757837 2.38273103217414 0.59083538655885 2.35807344602754 0.587017201491949 2.33341276528685 0.583189768952942 2.30874995402705 0.579353345768627 2.28408516667518 0.575508218543135 2.259418786314 0.57165466547246 2.23475178752731 0.567792942996718 2.21008505567612 0.56392331083766 2.18541867642353 0.560046058129519 2.13608850669955 0.552276826907638 2.11142460685135 0.548384824617415 2.08676275035905 0.544485836199189 2.06210314782028 0.540579888958988 2.03744665628433 0.536667382703632 2.0127941634414 0.532748734894583 1.9881460584375 0.528824075722845 1.96350259724179 0.52489345863724 1.93886478201998 0.520957367064967 1.914234185277 0.517016613073664 1.86498373674319 0.509123464740112 1.84036407976073 0.505171182650492 1.81574938737164 0.50121275130766 1.79113905688661 0.497247729380374 1.76653248561173 0.493275675538804 1.7419290708618 0.48929614845145 1.71732820993902 0.485308706788251 1.69272930015984 0.481312909218308 1.66813173882805 0.477308314410942 1.64353492325616 0.473294481035607 1.60663991450021 0.467259211124536 1.59434161401452 0.46524503451276 1.58204327395941 0.46322838275977 1.56974481899757 0.46120920069971 1.55744617379518 0.459187433165447 1.54514726301289 0.457163024991896 1.53284801131816 0.455135921011393 1.52054834337176 0.453106066058863 1.50824818383971 0.451073404967147 1.49594745738478 0.449037882570424 1.47134471995782 0.444961004833987 1.45904271200126 0.442919649402071 1.44674002094557 0.440875321276278 1.43443645097013 0.438827968979406 1.42213193537636 0.436777537080238 1.40982658656813 0.434723964665288 1.39752060854658 0.432667188015048 1.38521416545432 0.430607144632044 1.37290729980601 0.428543775741104 1.360599993941 0.426477024410546 1.32367741707025 0.420266430432903 1.29906135051283 0.416112251971594 1.27444504863964 0.41194380737221 1.24982929144323 0.407760612972731 1.22521485891943 0.403562185111394 1.20060253105987 0.399348040126197 1.17599308786035 0.395117694355207 1.15138730931342 0.390870664136651 1.12678597541361 0.386606465808457 1.10218986615452 0.382324615708835 1.06530470921787 0.375874637409319 1.05301113902766 0.373720111372902 1.040719198586 0.371560990060026 1.02842896742048 0.369397213568308 1.01614051192326 0.367228722401098 1.00385391822021 0.365055456452431 0.991569302944949 0.36287735467325 0.979286801921723 0.360694355422012 0.967006536749435 0.358506397496076 0.954728559296949 0.35631342184719 0.930176988902362 0.351917326110084 0.917903380221585 0.349714206508435 0.905631873523765 0.347505960030893 0.893362394276573 0.345292531534625 0.881094867945128 0.343073865876851 0.868829219998678 0.340849907914745 0.856565375901128 0.338620602505492 0.844303261121978 0.336385894506313 0.832042801125995 0.334145728774362 0.819783921381114 0.331900050166855 0.783011799298804 0.325146310289229 0.758503074122086 0.320621544965371 0.733999775573149 0.316074066429743 0.709501307400814 0.311503433542032 0.685007073355367 0.306909205163069 0.660516477185223 0.302290940152191 0.636028922640554 0.297648197370226 0.611543813470335 0.292980535676854 0.587060553424079 0.288287513932441 0.562578546251196 0.283568690997025 0.513615845150921 0.274078560464545 0.489134897145232 0.269307256076272 0.464655666688461 0.264509247085296 0.440171994775105 0.259684163226902 0.41568838333407 0.254831497811781 0.391211780668872 0.249950715567654 0.366729638421076 0.24504152444547 0.342256363233821 0.240103295426424 0.317784241413954 0.235135676227071 0.29331771772033 0.230138162333957 0.244395826089671 0.220082448045822 0.219940565586381 0.215024246540705 0.195491869303712 0.209935240694337 0.17105061614992 0.204814970526222 0.146617685033879 0.199662976056375 0.12219395486359 0.194478797304138 0.0977803045480152 0.189261974289543 0.0733776129952767 0.184012047032068 0.048986759114082 0.178728555551537 0.0246086218128154 0.173411039867608 0.000244080000000035 0.16805904 - 0 12 0.0625 10 0.09375 10 0.125 10 0.15625 10 0.1875 10 0.21875 10 0.25 10 0.28125 10 0.3125 10 0.34375 10 0.375 10 0.40625 10 0.4375 10 0.46875 10 0.5 10 0.53125 10 0.5625 10 0.59375 10 0.609375 10 0.625 10 0.65625 10 0.671875 10 0.6875 10 0.71875 10 0.75 10 0.78125 10 0.8125 10 0.828125 10 0.84375 10 0.875 10 0.890625 10 0.90625 10 0.9375 10 0.96875 10 1 12 -8 0 1 -7 0 0 8 51 8 1 0 0.984375000774147 0 0.968750001386624 0 0.953125001865166 0 0.937500002220135 0 0.921875002444373 0 0.906250002513341 0 0.890625002385045 0 0.859375001615033 0 0.843750000087245 0 0.828125003788836 0 0.812499993343597 0 0.796875000511569 0 0.781250001194506 0 0.765625000025975 0 0.73437499766231 0 0.718749996702288 0 0.703124992925731 0 0.687499995659139 0 0.671874999688788 0 0.656249998477326 0 0.640624998915187 0 0.609374999128777 0 0.593749999582341 0 0.578124999385275 0 0.562499999730391 0 0.546875001384623 0 0.531250003649526 0 0.515625004897816 0 0.484375004475271 0 0.468750003241562 0 0.45312499937109 0 0.437499998668617 0 0.421874999525723 0 0.406249998585838 0 0.390624998474697 0 0.359374999855157 0 0.343750000928138 0 0.328125002434728 0 0.312500000809015 0 0.296874999221871 0 0.281250000338318 0 0.265624999947567 0 0.218749999907064 0 0.187500000011456 0 0.156250000064604 0 0.125000000035467 0 0.093749999977093 0 0.0624999999590653 0 0.0312500000000001 0 0 0 - 0 9 0.125 7 0.25 7 0.375 7 0.5 7 0.625 7 0.75 7 1 9 -8 0 1 -7 0 0 11 252 26 0.00024407999999998 0.16805904 0.0251430908304699 0.168161570414973 0.0500467988029904 0.168226375233833 0.074954604046646 0.168253933086278 0.0998659066905673 0.168244722601897 0.124780106863781 0.168199222410499 0.14969660469549 0.168117911141539 0.174614800314665 0.168001267424939 0.199534093850519 0.167849769890118 0.224453885432063 0.167663897166929 0.249373575188442 0.167444127884933 0.299211551309025 0.166937753462743 0.324129949405078 0.166651145154435 0.349046467602423 0.166331613892273 0.373962264239998 0.165979588568612 0.398874649568705 0.165595606916411 0.423783395004662 0.16518013705937 0.448689809772061 0.164733603619691 0.473592074452496 0.164256519701459 0.498487000991705 0.163749437123146 0.523378421005259 0.163212709179881 0.573153156610956 0.162080916740493 0.598036594967209 0.161485848770865 0.622916598824473 0.160862056711309 0.647793663129275 0.160209988221692 0.672668282830387 0.159530090962148 0.697540952872959 0.158822812592428 0.722412168206817 0.158088600772704 0.747282423776903 0.157327903162794 0.772152214532281 0.156541167422741 0.797022035419239 0.155728841212482 0.846762727351791 0.154053903171497 0.871633496889005 0.15319129477537 0.896506220408789 0.152303959644523 0.921376313427733 0.151392517229014 0.946259864408228 0.150456887808571 0.97112481634639 0.149498619969142 0.996018382141811 0.1485165813449 1.0208973532616 0.147512697672759 1.04578559821239 0.146486626107199 1.07067361031477 0.14543915256993 1.12045228917444 0.143302224821183 1.14534273756927 0.142212777995158 1.17023381420231 0.141102828876489 1.19512503834324 0.13997285812398 1.22001592926864 0.13882334639682 1.24490600624484 0.137654774353661 1.26979478855011 0.136467622653724 1.29468179545169 0.135262371955772 1.31956654622493 0.134039502918841 1.34444856014043 0.132799496201853 1.39420615280158 0.130286168725668 1.41908190098745 0.129012842127363 1.44395268041666 0.127723382944722 1.46882339112511 0.126418086420151 1.49368297094513 0.125097797839281 1.51853989554645 0.123762689231349 1.54339658730862 0.122413141216545 1.56824560758263 0.121049874216194 1.59309458413014 0.119673089479091 1.61794047959676 0.118283355761564 1.66762909558063 0.115478815614982 1.69247168870894 0.114064013575804 1.71731306336421 0.112637126558171 1.74215371593641 0.111198601549486 1.76699414281654 0.109748885537184 1.79183484039404 0.108288425508681 1.81667630506038 0.106817668451386 1.84151903320486 0.105337061352739 1.86636352121865 0.103847051200142 1.89121026549161 0.102348084981025 1.94090925933712 0.0993331343845875 1.96576138258088 0.0978172108989139 1.99061749411859 0.0962928689926534 2.01547645475802 0.0947613440277901 2.04033758836855 0.0932236481329104 2.06520077719353 0.0916805242714543 2.09006578420881 0.0901327729142649 2.11493198750593 0.0885813800584796 2.13979880110271 0.0870273143857638 2.16466614557599 0.0854713003860739 2.21440069700606 0.0823573262587966 2.23926798381264 0.0807993467433584 2.26413465952812 0.0792412673644031 2.28900067727877 0.0776839620355358 2.31386544573171 0.0761283223438927 2.33872831982346 0.0745752416200134 2.36358906071491 0.0730256000087705 2.38844757657122 0.0714802728833859 2.41330320881918 0.0699401540139568 2.43815478143465 0.0684061539654499 2.48785238618365 0.0653520525699928 2.51269832042999 0.0638319544003991 2.53754189751435 0.062319664559134 2.56238362840822 0.0608160388464033 2.5872240240714 0.0593219330623715 2.61206359548347 0.057838203007299 2.63690285359759 0.0563657044812878 2.66174230939503 0.0549052932846316 2.6865824738333 0.0534578252174526 2.71142385788562 0.0520241560799847 2.76111008714917 0.0491861272648394 2.78595479130469 0.0477817037923345 2.81080268014783 0.0463932174094186 2.83565050662185 0.045019824242729 2.86050616222328 0.0436657181369992 2.88536225622998 0.0423281812654677 2.91022087807797 0.0410087832874794 2.935090596292 0.0397120241773578 2.9599609675448 0.0384338055550872 2.98483633564685 0.0371767167020943 3.03459372031686 0.0347045350867781 3.05947587155193 0.0334895032303059 3.08436102313564 0.0322959476775459 3.10924871650878 0.0311242857809583 3.13413849312739 0.0299749348931166 3.15902989442469 0.0288483123664421 3.18392246186103 0.0277448355535199 3.20881573687066 0.0266649218067916 3.23370926090824 0.0256089884788023 3.2586025754156 0.0245774529220357 3.30838786826608 0.0225640120559737 3.33327989132426 0.0215821052753804 3.35817067719183 0.0206254346072355 3.38305947371188 0.0196944270619446 3.40794843190065 0.0187894141481778 3.43283157258152 0.0179109948225061 3.45771120874254 0.0170594952652418 3.48259323388727 0.01623512387306 3.50747073979614 0.0154385101638886 3.53234846690487 0.0146699004651941 3.5821023938204 0.0131895584178489 3.60697878431735 0.0124778197958278 3.6318549946735 0.0117949029209087 3.65673141770556 0.0111411971385227 3.68160844623613 0.0105170917941374 3.70648647308009 0.00992297623316847 3.73136589106014 0.00935923980109021 3.75624709299252 0.00882627184332262 3.78113047169815 0.00832446170532785 3.8060164199948 0.00785419873254051 3.85579424140955 0.00697754580827957 3.88068606130384 0.00657114460063459 3.90558125206792 0.00619707255330623 3.93048066957251 0.00585581696051386 3.95538398882777 0.00554761534058223 3.98029042098456 0.00527260710275947 4.00519963102824 0.00503102764602361 4.03011181225948 0.00482322412719392 4.05502692194714 0.00464949377485429 4.07994412991696 0.00450996726186032 4.12978303020129 0.00429999531429121 4.15470464213276 0.00422953287826439 4.17962818552469 0.00419385152776757 4.2045534300404 0.00419320881056122 4.229480145357 0.00422786227442765 4.25440810113319 0.00429806946711733 4.27933706704675 0.00440408793641806 4.30426681276002 0.00454617523008204 4.32919710794499 0.00472458889588916 4.35412772226918 0.0049395864816019 4.42891983166597 0.00569510364177022 4.47878167779285 0.00634601841139322 4.52864138147444 0.00714735952472559 4.57850018067968 0.00809648410307554 4.62834820793217 0.00920770437051597 4.67819800635143 0.0104611174573548 4.72802940835443 0.011886761116124 4.77785689171283 0.0134617788165489 4.8276695813162 0.0152020211180208 4.87746667373967 0.01710796186728 4.97703304180171 0.0212445777395994 5.02680208725829 0.0234756043082411 5.07655727313448 0.0258681706758664 5.12629887842481 0.028421098008985 5.17602718212373 0.0311332074740823 5.22574246322557 0.0340033202376991 5.27544500072499 0.037030257466282 5.32513507361559 0.0402128403263983 5.37481296089313 0.0435498899844986 5.42447894155061 0.0470402276071172 5.49896047109983 0.0525038977375608 5.52378474070342 0.0543631483963527 5.54860613827377 0.0562602789830113 5.57342469868031 0.0581951421433447 5.5982404568109 0.0601675905233161 5.62305344752844 0.0621774767686683 5.64786370572208 0.0642246535253893 5.67267126625922 0.0663089734392485 5.69747616402153 0.0684302891561735 5.72227843388314 0.0705884533219978 5.77187778756005 0.0749781838432062 5.79667488103728 0.0772097633860232 5.82146935871139 0.0794778179567225 5.84626138146982 0.0817823722247315 5.87105100789447 0.084123311170625 5.8958381283389 0.0865002901876626 5.92062253868009 0.0889128356448586 5.94540406313461 0.0913605126531845 5.97018263617107 0.0938430367825133 5.99495825295125 0.0963602064718093 6.06927558869549 0.104014185692281 6.11880803155602 0.109253637816164 6.16832585593788 0.114626960092738 6.21783466096596 0.12013226303196 6.26731333073302 0.125764082525184 6.31680393933042 0.131525409626135 6.36624304457812 0.137405116758387 6.4156890769361 0.143408383531806 6.46510911330897 0.149528165991202 6.5145160997086 0.155763557693538 6.58860342295541 0.165285621880671 6.61329541400197 0.168487848944685 6.6379836813682 0.171717840137921 6.66266828006537 0.174975392242167 6.68734926664214 0.178260224572936 6.71202669990619 0.181571939402062 6.73670063888795 0.184910129645376 6.76137114030165 0.188274504847521 6.78603825830276 0.191664906522306 6.81070204882685 0.195081083882092 6.86002311357606 0.201963118136848 6.88468038783779 0.205428973178986 6.90933447000961 0.208918899596241 6.93398542610568 0.212432130848448 6.95863332215446 0.215967900396378 6.98327822416778 0.219525441699531 7.00792019817088 0.223103988218757 7.03255931018296 0.226702773413767 7.05719562622215 0.230321030745042 7.08182921231085 0.233957993672642 7.15572197878209 0.244922699625161 7.20497309093209 0.252304247632317 7.25421432596627 0.259751459474272 7.30344595498902 0.26725816184661 7.35266772138303 0.274818097315233 7.40188104656107 0.282425275968674 7.45108808770763 0.290073825197103 7.50028966412386 0.297757659095581 7.54948579987469 0.305470564979963 7.59867877845541 0.313206690376744 7.74624995294185 0.336466348199009 7.84462041065208 0.352041164799277 7.94299161808946 0.367636400497407 8.04136771555015 0.383202967935867 8.1397560104544 0.398692294903516 8.23816412304941 0.414055860188884 8.33659839878075 0.429244935322105 8.43506535591744 0.444210819978107 8.53357248059731 0.458904971132736 8.63212621882153 0.473278676350862 8.73073355 0.48728331 - 0 12 0.03125 10 0.0625 10 0.09375 10 0.125 10 0.15625 10 0.1875 10 0.21875 10 0.25 10 0.28125 10 0.3125 10 0.34375 10 0.375 10 0.40625 10 0.4375 10 0.46875 10 0.5 10 0.5625 10 0.625 10 0.65625 10 0.6875 10 0.75 10 0.78125 10 0.8125 10 0.875 10 1 12 -8 0 1 -7 0 0 11 62 7 3.01761452 1 3.01761452000003 0.977272727272754 3.01761451999989 0.954545458952347 3.01761452000024 0.931818180579275 3.01761451999962 0.909090941508644 3.01761452000048 0.886363580318583 3.01761451999951 0.863636386800601 3.0176145200004 0.840909079708789 3.01761451999975 0.818181816768186 3.01761452000011 0.795454549680564 3.01761451999998 0.772727275300118 3.01761452000001 0.738636364426379 3.01761451999997 0.727272727449474 3.01761452000005 0.715909090646184 3.01761451999994 0.704545454128683 3.01761452000003 0.693181817930106 3.01761452000003 0.681818182022945 3.01761451999994 0.670454546311371 3.01761452000006 0.659090910655758 3.01761451999995 0.647727274864778 3.01761452000003 0.63636363871418 3.01761451999995 0.613636365181345 3.01761452000028 0.602272727943593 3.01761451999922 0.590909087840968 3.01761452000148 0.579545450469745 3.01761451999796 0.568181815810649 3.01761452000211 0.556818180633238 3.01761451999837 0.545454543729989 3.01761452000092 0.534090907016914 3.01761451999965 0.52272727167765 3.01761452000006 0.511363634755547 3.01761451999993 0.477272723718002 3.0176145200002 0.454545449727639 3.0176145199996 0.431818164255781 3.01761452000057 0.409090906987681 3.0176145199994 0.386363641806255 3.01761452000046 0.363636356339733 3.01761451999975 0.34090907869922 3.01761452000008 0.318181816780743 3.01761452000001 0.295454543612041 3.01761451999997 0.272727273863953 3.01761452000004 0.238636365550922 3.01761451999977 0.227272727949315 3.01761452000052 0.215909095605142 3.01761451999922 0.204545450266751 3.01761452000083 0.193181810640359 3.01761451999933 0.181818182637572 3.01761452000041 0.170454551298017 3.0176145199998 0.159090911620822 3.01761452000008 0.147727276662507 3.01761451999998 0.136363639670457 3.01761452000003 0.113636365754823 3.01761451999988 0.102272728825826 3.01761452000025 0.0909090919594786 3.01761451999966 0.0795454551795924 3.01761452000033 0.068181818499561 3.01761451999976 0.0568181819230542 3.01761452000012 0.045454545443056 3.01761451999997 0.0340909090429393 3.01761452 0.0227272726954942 3.01761452 0.0113636363636379 3.01761452 0 - 0 12 0.25 10 0.375 10 0.5 10 0.75 10 0.875 10 1 12 -8 0.29266018 3.01761452 -7 0 0 11 22 3 0 2.72080189 0 2.59712907646943 0 2.47345635130272 0 2.34978320717007 0 2.22611108576215 0 2.10243730236467 0 1.97876544519257 0 1.8550919650648 0 1.73141947044543 0 1.60774656103064 0 1.48407376163755 0 1.23672813473882 0 1.11305532128488 0 0.98938250782675 0 0.865709694363718 0 0.742036880896868 0 0.618364067424868 0 0.494691253949019 0 0.371018440468329 0 0.247345626983373 0 0.123672813493905 0 -1.01377830984962e-016 - 0.29266018 12 1.65513735 10 3.01761452 12 -8 0.29266018 3.01761452 -7 0 0 11 12 2 0.292660179999999 0.999999999999999 0.540383302249042 1.00000000000002 0.788106376004919 0.999999999999917 1.03582967948996 1.00000000000019 1.2835524219986 0.999999999999708 1.53127607643145 1.00000000000035 1.77899867300501 0.999999999999671 2.02672216179261 1.00000000000025 2.27444510841769 0.999999999999855 2.52216828340486 1.00000000000006 2.76989139782454 0.999999999999985 3.01761452 1 - 0.29266018 12 3.01761452 12 -8 0 1.95653393 -7 0 0 11 22 3 1 0.06075625 0.999999999999989 0.149689610540508 1.00000000000004 0.238622918591813 0.999999999999915 0.327556475341045 1.00000000000013 0.416489424881262 0.999999999999851 0.505423361124478 1.00000000000015 0.594356153671739 0.999999999999872 0.683289909856496 1.00000000000009 0.772223080783251 0.999999999999954 0.861156498034186 1.00000000000002 0.950089849901488 0.999999999999974 1.12795657025245 1.00000000000013 1.21688993039163 0.999999999999671 1.30582329049364 1.00000000000055 1.39475665056055 0.99999999999934 1.48369001058888 1.00000000000059 1.57262337058302 0.999999999999597 1.66155673053869 1.00000000000021 1.75049009045914 0.999999999999918 1.83942345034246 1.00000000000002 1.92835681018951 1 2.01729017 - 0 12 0.978266965 10 1.95653393 12 -8 0 1.95653393 -7 0 0 11 22 3 0.06075625 1 0.149689610540547 1.00000000000002 0.238622918591639 0.999999999999918 0.327556475341512 1.00000000000021 0.416489424880369 0.999999999999597 0.505423361125748 1.00000000000059 0.594356153670389 0.99999999999934 0.683289909857567 1.00000000000055 0.772223080782628 0.999999999999671 0.861156498034439 1.00000000000013 0.950089849901427 0.999999999999974 1.12795657025251 1.00000000000002 1.21688993039134 0.999999999999954 1.30582329049433 1.00000000000009 1.39475665055941 0.999999999999872 1.48369001059027 1.00000000000015 1.57262337058171 0.999999999999851 1.66155673053964 1.00000000000013 1.75049009045862 0.999999999999915 1.83942345034267 1.00000000000004 1.92835681018946 0.999999999999989 2.01729017 1 - 0 12 0.978266965 10 1.95653393 12 -8 0 1 -7 0 0 11 82 9 1 2.01729017 0.977272727272724 2.01729017000003 0.954545454295335 2.01729016999987 0.931818186108257 2.01729017000034 0.909090900886391 2.01729016999937 0.886363655512493 2.01729017000088 0.863636346830899 2.01729016999906 0.840909106973765 2.01729017000077 0.818181816625671 2.01729016999954 0.795454545383319 2.01729017000019 0.772727273258435 2.01729016999996 0.738636365032973 2.01729017000002 0.727272728621812 2.01729016999992 0.715909093396735 2.01729017000021 0.704545456684803 2.01729016999963 0.693181818712266 2.01729017000052 0.681818181335921 2.01729016999942 0.670454545248849 2.0172901700005 0.659090909339886 2.01729016999968 0.647727272682762 2.01729017000014 0.636363636474201 2.01729016999998 0.613636363613231 2.01729017 0.602272726981702 2.01729017000006 0.590909090086397 2.0172901699998 0.579545453070897 2.01729017000041 0.568181816123531 2.01729016999939 0.556818179373834 2.01729017000068 0.545454542840569 2.01729016999944 0.534090906441066 2.01729017000033 0.522727270049743 2.01729016999988 0.511363633618162 2.01729017000002 0.477272724803062 2.01729016999998 0.454545452905612 2.01729017000008 0.431818181507489 2.01729016999982 0.409090910338248 2.0172901700003 0.386363639395896 2.01729016999962 0.363636365750591 2.01729017000036 0.340909088501278 2.01729016999975 0.318181813034406 2.01729017000012 0.295454543922811 2.01729016999997 0.272727272507805 2.01729017 0.244318182740536 2.01729017000001 0.238636364693953 2.01729016999997 0.232954546620145 2.01729017000006 0.22727272851318 2.01729016999998 0.221590910325119 2.01729016999988 0.215909091990959 2.01729017000027 0.210227273460852 2.01729016999969 0.204545454723548 2.01729017000022 0.198863635838509 2.01729016999992 0.19318181696098 2.01729017 0.181818179782503 2.01729017000004 0.176136361420087 2.01729016999974 0.170454543121784 2.01729017000069 0.164772724962679 2.01729016999883 0.159090907046532 2.01729017000143 0.153409089375498 2.0172901699987 0.147727271807445 2.01729017000089 0.142045454089971 2.01729016999954 0.136363635982371 2.01729017000017 0.130681817455864 2.01729016999996 0.119318180502217 2.01729017000004 0.113636361898355 2.01729016999984 0.107954543363076 2.01729017000036 0.10227272501304 2.01729016999943 0.0965909068987371 2.01729017000068 0.0909090890148474 2.01729016999936 0.085227271314145 2.0172901700005 0.0795454537171954 2.01729016999969 0.0738636361261527 2.01729017000015 0.0681818184352736 2.01729016999994 0.0568181826518812 2.01729017000009 0.0511363643941505 2.01729016999952 0.0454545457337553 2.01729017000121 0.039772727344993 2.01729016999795 0.034090909566717 2.01729017000256 0.0284090921763329 2.01729016999759 0.0227272746599311 2.01729017000174 0.0170454566456454 2.01729016999905 0.0113636381771453 2.01729017000037 0.00568181949486899 2.01729016999992 -6.93889390390723e-018 2.01729017 - 0 12 0.25 10 0.375 10 0.5 10 0.75 10 0.8125 10 0.875 10 0.9375 10 1 12 -8 0 1 -7 0 0 11 32 4 0.000126649999999673 0.89142684 0.347482824926461 0.91235210410736 0.694952401556145 0.932606135238641 1.04224405969436 0.951348300868163 1.39015435122504 0.96839857475423 1.73779294031391 0.982582911811502 2.08527614969377 0.993310502908847 2.43349387257227 1.00041225124145 2.78209414666498 1.00298600656342 3.12980810904059 0.999719791848694 3.47765565738034 0.990899458421025 3.99931557440465 0.968628136835156 4.17316668730421 0.959692549121209 4.34701847583653 0.949225757814763 4.52073250000143 0.937160813938153 4.69419427911569 0.923440933176403 4.86738987576989 0.908037080515894 5.04039535327459 0.890940031918557 5.21331399676993 0.872141529273933 5.38619618865269 0.851619144934744 5.55897682851656 0.829339472079632 5.90395354781298 0.781249042315971 6.07624269040541 0.755426058102447 6.24754699893371 0.727915405427532 6.42139749534939 0.698078225612449 6.58558689858239 0.668121102062421 6.76631184237894 0.632939031501274 6.93024098748477 0.598995450176349 7.10167676620893 0.561464069314949 7.27124934773016 0.522129790071542 7.44048979930555 0.480646942376525 7.60893367 0.43705553 - 0 12 0.5 10 0.75 10 1 12 -8 0.07121022 2.01729017 -7 0 0 11 22 3 0 2.01729017 0 1.92883199091819 0 1.84037381179449 0 1.75191563262723 0 1.66345745342024 0 1.57499927416703 0 1.48654109487616 0 1.39808291553862 0 1.30962473616206 0 1.22116655674126 0 1.13270837727902 0 0.95579201826944 0 0.867333836787705 0 0.778875670414204 0 0.690417446880194 0 0.601959358986412 0 0.513501047624198 0 0.425043001375136 0 0.336584726309973 0 0.248126591974326 0 0.159668399927801 0 0.0712102200000001 - 0.07121022 12 1.044250195 10 2.01729017 12 -8 0.0712102200000002 2.01729017 -7 0 0 8 9 2 0 3.32701216511258e-015 0 4.60547214481023 0 9.21094428793428 0 13.8164164430734 0 18.4218885616398 0 23.0273607429041 0 27.6328328584068 0 32.2383050151898 0 36.84377716 - 0.07121022 9 2.01729017 9 -8 0 1 -7 0 0 7 20 4 0 0 0.0714285714285722 0 0.142857145117323 0 0.214285717135627 0 0.285714286194275 0 0.357142853645558 0 0.428571423483165 0 0.535714291771835 0 0.571428606654919 0 0.607142833493042 0 0.642857071913042 0 0.678571368569323 0 0.714285666500745 0 0.785714273384903 0 0.821428561907346 0 0.857142721630493 0 0.892857382663097 0 0.928571292550354 0 0.964285714285713 0 1 0 - 0 8 0.5 6 0.75 6 1 8 -8 0 1 -7 0 0 10 47 6 7.60893367 0.43705553 7.63067378230924 0.429277735772104 7.65246817184998 0.421656274112611 7.67429126022898 0.414106704973386 7.69611091623787 0.406548937946926 7.7178958645965 0.398902442706185 7.73961865482035 0.3910841821826 7.76125419023141 0.383009268485398 7.78277381708495 0.374594341558339 7.80413497384184 0.365763670577734 7.83583211392237 0.351805131844107 7.84633754099951 0.347031560523056 7.85680307958427 0.342126065389591 7.8671599016112 0.337054212730188 7.87745174251784 0.331810846343518 7.88770830353961 0.326387170474516 7.89786076622004 0.320748773156115 7.9078238646391 0.314856964469676 7.91762290742537 0.308701808779404 7.93198567809356 0.299025947427563 7.93671692221253 0.295732284809995 7.94139092763034 0.29232523851021 7.94597301219639 0.288843975828444 7.95047037271179 0.285222628269066 7.95488553028213 0.281407271291546 7.959184706319 0.27743519726472 7.96332758200262 0.273360108653609 7.96731419313212 0.269134383383669 7.97301392047527 0.262613442084645 7.97486699191407 0.260413080321384 7.97667102736047 0.258154566626171 7.97840737417027 0.255875317035328 7.9800771534664 0.253528107562264 7.98167968147189 0.251074018587534 7.98319739660481 0.248546842330502 7.98460935604089 0.245994883270756 7.98591311729808 0.243386985910249 7.98827202593027 0.238114071634718 7.989327356486 0.235439574221551 7.99025242474338 0.232789912872415 7.99103633878144 0.229845140928864 7.99168356031082 0.227379147986885 7.99216769325987 0.224088296057274 7.99250201432156 0.221270748025632 7.99266927175899 0.218233116249939 7.99266756089451 0.215286447202363 7.99248988 0.21240573 - 0 11 0.5 9 0.75 9 0.875 9 0.9375 9 1 11 -8 1.37499288 38.1919507 -7 0 0 11 12 2 1 -4.44089209285582e-016 0.999999999999992 3.34699616120019 1.00000000000004 6.69399235686738 0.999999999999904 10.0409882925469 1.00000000000018 13.387985209083 0.99999999999975 16.7349798138378 1.00000000000026 20.0819781920561 0.999999999999808 23.4289721564618 1.0000000000001 26.7759698620877 0.999999999999959 30.1229653055451 1.00000000000001 33.4699616572426 1 36.81695782 - 1.37499288 12 38.1919507 12 -8 1.37499288 38.1919507 -7 0 0 8 9 2 1 38.1919507 1 33.5898309783501 0.999999999999988 28.9877112797469 1.00000000000002 24.3855914300879 0.999999999999982 19.7834719819657 1.00000000000001 15.1813518857906 0.999999999999997 10.5792324382749 1 5.97711260379112 1 1.37499288 - 1.37499288 9 38.1919507 9 -8 0 1 -7 0 0 11 32 4 0.000126649999999895 0.89142684 0.33897424571357 0.812202564870591 0.678046857895864 0.733620771477464 1.01719914504832 0.656559194842077 1.35724662902095 0.581060891243014 1.69750978742503 0.50843328936794 2.03820294069169 0.439239107077584 2.38023176070723 0.373494881356353 2.72340152343174 0.312149208976976 3.06668287492734 0.256709332728399 3.41103287926726 0.206721432657571 3.92897326139915 0.140669624285575 4.10184008125329 0.120148494050239 4.27496588087195 0.10113650834974 4.44822549856895 0.0837230099411851 4.62151567386264 0.0679832809928071 4.7948275673999 0.0539482916820069 4.96823770853009 0.0416143031180695 5.14184929533161 0.0309720322815727 5.31571577158857 0.0220350866743401 5.48977860554822 0.0148473763718523 5.837923784429 0.00405104597164846 6.01209992172211 0.000438778442330958 6.18559004671604 -0.00134386859592186 6.3619823624414 -0.00126287080055919 6.52887225615856 0.000566156368508808 6.71294220085935 0.00475574448180907 6.88024805865163 0.0105579780931912 7.05555830614353 0.0186302826778351 7.22933614627826 0.0287939187607358 7.40314911298187 0.0411313801678024 7.57653262 0.05568158 - 0 12 0.5 10 0.75 10 1 12 -8 0 1 -7 0 0 11 82 9 2.01729017 1 2.01729016999996 0.977272727272724 2.01729017000018 0.954545454295312 2.01729016999957 0.931818186108351 2.01729017000071 0.909090900886276 2.01729016999911 0.886363655512467 2.01729017000086 0.863636346831114 2.01729016999936 0.840909106973519 2.01729017000037 0.818181816625807 2.01729016999984 0.795454545383281 2.01729017000005 0.772727273258436 2.01729016999996 0.738636365032985 2.0172901700002 0.727272728621731 2.01729016999947 0.715909093396953 2.01729017000095 0.704545456684443 2.01729016999875 0.693181818712687 2.01729017000125 0.681818181335562 2.01729016999905 0.670454545249082 2.01729017000053 0.659090909339783 2.01729016999979 0.647727272682794 2.01729017000005 0.636363636474197 2.01729016999996 0.61363636361323 2.01729017000017 0.602272726981723 2.01729016999956 0.590909090086333 2.01729017000079 0.579545453071019 2.01729016999894 0.568181816123367 2.01729017000108 0.556818179373994 2.01729016999917 0.545454542840459 2.01729017000045 0.534090906441118 2.01729016999984 0.522727270049726 2.01729017000001 0.51136363361817 2.01729017000004 0.477272724803049 2.01729016999972 0.454545452905636 2.01729017000076 0.43181818150743 2.01729016999865 0.409090910338352 2.01729017000176 0.386363639395766 2.01729016999825 0.363636365750694 2.01729017000133 0.340909088501216 2.01729016999924 0.318181813034428 2.01729017000031 0.295454543922804 2.01729016999992 0.27272727250781 2.01729017000002 0.244318182740533 2.01729016999991 0.238636364693976 2.01729017000022 0.232954546620085 2.01729016999963 0.227272728513286 2.01729017000047 0.221590910324991 2.01729016999956 0.215909091991078 2.01729017000031 0.210227273460772 2.01729016999984 0.204545454723592 2.01729017000005 0.198863635838494 2.01729016999999 0.193181816960983 2.01729017000001 0.181818179782501 2.01729016999998 0.176136361420091 2.01729017000005 0.170454543121775 2.01729016999988 0.164772724962693 2.01729017000017 0.159090907046524 2.01729016999982 0.153409089375512 2.01729017000013 0.147727271807443 2.01729016999993 0.142045454089972 2.01729017000002 0.136363635982369 2.01729017 0.130681817455863 2.01729017 0.119318180502218 2.01729017000002 0.113636361898358 2.01729016999994 0.107954543363073 2.01729017000011 0.102272725013054 2.01729016999989 0.0965909068987187 2.01729017000006 0.0909090890148676 2.01729016999999 0.0852272713141246 2.01729017 0.0795454537172043 2.01729017 0.073863636126146 2.01729017000001 0.0681818184352741 2.01729016999998 0.0568181826518785 2.01729017000015 0.0511363643941594 2.01729016999959 0.0454545457337328 2.01729017000071 0.03977272734503 2.01729016999911 0.0340909095666706 2.01729017000084 0.0284090921763756 2.0172901699994 0.0227272746599004 2.01729017000033 0.0170454566456619 2.01729016999987 0.0113636381771385 2.01729017000003 0.00568181949487062 2.01729017 6.93889390390723e-018 - 0 12 0.25 10 0.375 10 0.5 10 0.75 10 0.8125 10 0.875 10 0.9375 10 1 12 -8 0 1 -7 0 0 10 47 6 7.57653262 0.05568158 7.59927325403158 0.0596803461183721 7.62204101188675 0.0635158606740607 7.64482493101527 0.0672756758037402 7.66760685142842 0.0710441521509246 7.69036952974536 0.0749059378633095 7.71309991628752 0.0789475095161865 7.7357875952705 0.08325677496172 7.75841838802759 0.0879207381043414 7.7809631193356 0.093021225601995 7.81456076050582 0.101432400439219 7.82572091964797 0.10436529041284 7.83686401752246 0.107434942828718 7.84792802039159 0.110686908145558 7.85895690768428 0.114118891654787 7.86998143957808 0.117734553420106 7.88093958858328 0.121579421035477 7.89175383701355 0.125706013002672 7.90245080792863 0.130119853677599 7.91824003961536 0.137234038963162 7.92345911346554 0.139682335110537 7.9286408965738 0.142252045734181 7.93374459695145 0.144910416199971 7.93878841968509 0.147721156434327 7.94378394668515 0.150736992723626 7.948691593147 0.153926866276058 7.95346255872094 0.157244646191439 7.95810491076255 0.160737264542883 7.96482302909929 0.166203199735308 7.96702074239722 0.168059411377222 7.96917993278207 0.169981214066535 7.97127590310677 0.171934874554126 7.97331772469636 0.173966751040373 7.97531128899589 0.176115320813977 7.9772335855744 0.178350238417031 7.9790558231182 0.180627424483715 7.98078084979665 0.182978000151575 7.98399548847705 0.187777393253323 7.98548688047145 0.190235524221389 7.98684568661374 0.192691151974867 7.98811514947376 0.19546146701959 7.98916910424907 0.19778294160769 7.99020146748829 0.200944940475067 7.99100631833602 0.203665719323841 7.99168362618447 0.206631598461975 7.99217904069946 0.209536325701182 7.99248988 0.21240573 - 0 11 0.5 9 0.75 9 0.875 9 0.9375 9 1 11 -8 0 1 -7 0 0 7 20 4 0 38.1919507 0.0714285714285716 38.1919506999999 0.142857145117315 38.1919507000004 0.214285717135611 38.1919506999993 0.285714286194273 38.1919507000008 0.357142853645566 38.1919506999996 0.42857142348319 38.1919507000001 0.53571429177184 38.1919507 0.571428606654827 38.1919507000001 0.607142833492968 38.1919506999997 0.642857071913193 38.1919507000004 0.678571368569571 38.1919506999997 0.714285666500807 38.1919507000001 0.785714273384821 38.1919506999999 0.821428561907317 38.1919507000003 0.857142721630875 38.1919506999995 0.89285738266266 38.1919507000005 0.928571292550456 38.1919506999997 0.964285714285717 38.1919507000001 1 38.1919507 - 0 8 0.5 6 0.75 6 1 8 -8 1.34817287 38.1919507 -7 0 0 10 11 2 0.0712101900000001 0 0.265818189231975 0 0.460426152693828 0 0.655034271191777 0 0.849642048848226 0 1.04425031359222 0 1.23885809376947 0 1.43346621105781 0 1.62807416854172 0 1.82268217262929 0 2.01729017 0 - 1.34817287 11 38.1919507 11 -8 1.34817287 38.1919507 -7 0 0 9 10 2 0 1.34817287 0 5.44192595893886 0 9.53567934249462 0 13.6294315589082 0 17.7231860306616 0 21.8169377384492 0 25.9106917129042 0 30.0044444606133 0 34.0981976110612 0 38.1919507 - 1.34817287 10 38.1919507 10 -8 0 1 -7 0 0 1 2 2 0 1 0 0 - 0 2 1 2 -8 0 1 -7 0 0 6 7 2 1.11022302462516e-016 1 0.313873509999999 1 0.627747021213052 1 0.941620533821613 0.999999999999999 1.25549404454256 1 1.56936755666667 0.999999999999999 1.88324107 1 - 0 7 1 7 -8 0 1 -7 0 0 1 2 2 3.42297087 0 3.42297087 1 - 0 2 1 2 -8 0 1 -7 0 0 6 7 2 1.88324107 0 1.56936755666667 0 1.25549404454258 0 0.941620533821613 0 0.62774702121304 0 0.313873509999999 0 0 0 - 0 7 1 7 -8 1.20676907 1.78417229 -7 0 0 9 26 4 1.20676907 0 1.22280804805787 0 1.23884702974807 0 1.25488601107094 0 1.27092497265607 0 1.28696397278988 0 1.30300293556488 0 1.31904191977425 0 1.33508089692565 0 1.36715885334346 0 1.38319783155388 0 1.39923680976669 0 1.41527578798299 0 1.43131476620344 0 1.44735374442938 0 1.46339272266135 0 1.47943170090057 0 1.52754863564249 0 1.55962659220858 0 1.59170454884447 0 1.6237825055471 0 1.6558604623159 0 1.68793841914701 0 1.7200163760399 0 1.75209433299142 0 1.78417229 0 - 1.20676907 10 1.351119875 8 1.49547068 8 1.78417229 10 -8 1.20676907 1.78417229 -7 0 0 11 22 3 2.31521104 1 2.36556375897663 1.00000000000002 2.41591646145813 0.999999999999915 2.46626922613211 1.00000000000019 2.51662187416885 0.99999999999971 2.56697466988839 1.00000000000034 2.6173273311953 0.999999999999677 2.66768008213272 1.00000000000024 2.71803278979129 0.999999999999863 2.76838551198729 1.00000000000005 2.81873823114176 0.999999999999992 2.91944367018376 0.999999999999999 2.96979638979501 1.00000000000003 3.02014910949279 0.999999999999916 3.07050182927902 1.00000000000015 3.12085454914516 0.999999999999828 3.17120726909713 1.00000000000015 3.22155998912532 0.999999999999898 3.27191270923337 1.00000000000005 3.3222654294158 0.999999999999982 3.37261814967223 1 3.42297087 1 - 1.20676907 12 1.49547068 10 1.78417229 12 -8 0.57740334 1.20676907 -7 0 0 9 26 4 2.31521104 1 2.24813043121012 1 2.18104980603644 0.999999999999986 2.11396923903274 1.00000000000003 2.04688856257493 0.999999999999962 1.97980801405831 1.00000000000004 1.91272736407771 0.99999999999997 1.84564676760964 1.00000000000002 1.77856615426511 0.999999999999996 1.67794523841517 1 1.64440493319503 1.00000000000001 1.61086462802881 0.99999999999999 1.57732432290733 1.00000000000001 1.5437840178213 1 1.51024371276156 0.999999999999994 1.47670340771881 1 1.44316310268388 1 1.37608249261114 0.999999999999997 1.34254218229722 1.00000000000002 1.30900190732801 0.999999999999969 1.27546152507912 1.00000000000004 1.24192132992847 0.999999999999964 1.2083809417011 1.00000000000003 1.17484065263126 0.999999999999986 1.1413003654683 1 1.10776006 1 - 0.57740334 10 0.892086205 8 1.0494276375 8 1.20676907 10 -8 0.57740334 1.20676907 -7 0 0 10 29 4 1.20676907 0 1.17530078381152 0 1.14383251380024 0 1.11236417896872 0 1.08089597007369 0 1.04942759742584 0 1.01795937436364 0 0.986491054243712 0 0.955022777464331 0 0.923554488710774 0 0.876352058130795 0 0.860617914630653 0 0.844883771153397 0 0.829149627696121 0 0.81341548425443 0 0.797681340826148 0 0.781947197406589 0 0.766213053993261 0 0.750478910582192 0 0.71901062375813 0 0.703276481892531 0 0.687542327247066 0 0.671808224720329 0 0.656073989480849 0 0.640339976777163 0 0.624605722564598 0 0.608871619946307 0 0.593137483597116 0 0.57740334 0 - 0.57740334 11 0.892086205 9 1.0494276375 9 1.20676907 11 -8 0 0.57740334 -7 0 0 10 29 4 2.77555756156289e-017 0 0.0288701670523694 0 0.0577403340657856 0 0.0866105010329885 0 0.115480667946584 0 0.14435083479943 0 0.173221001584016 0 0.202091168293261 0 0.230961334919682 0 0.259831501456093 0 0.303136751114669 0 0.317571834318388 0 0.332006917509426 0 0.346442000690779 0 0.360877083865694 0 0.375312167037053 0 0.389747250208155 0 0.404182333381924 0 0.418617416561543 0 0.447487582938584 0 0.461922667682895 0 0.476357739693725 0 0.490792863748989 0 0.505227855379776 0 0.519663069172597 0 0.534098041954116 0 0.548533166092303 0 0.562968256625208 0 0.57740334 0 - 0 11 0.28870167 9 0.433052505 9 0.57740334 11 -8 0 0.57740334 -7 0 0 9 26 4 0 1 0.0615422259798095 0.999999999999993 0.123084451866241 1.00000000000003 0.184626677639244 0.999999999999934 0.246168903278889 1.00000000000009 0.307711128765047 0.999999999999913 0.369253354077838 1.00000000000006 0.430795579197136 0.999999999999975 0.492337804103011 1 0.584651141111606 1 0.615422253409593 1 0.646193365677936 0.999999999999993 0.676964477925504 1.00000000000002 0.707735590160605 0.999999999999974 0.738506702392312 1.00000000000002 0.769277814628911 0.999999999999987 0.800048926879302 1 0.861591151424753 0.999999999999998 0.892362258492393 1.00000000000001 0.923133400673403 0.999999999999975 0.953904436507895 1.00000000000004 0.984675658015256 0.999999999999951 1.01544668816331 1.00000000000004 1.04621781670473 0.999999999999977 1.07698894730089 1.00000000000001 1.10776006 1 - 0 10 0.28870167 8 0.433052505 8 0.57740334 10 -8 0 1 -7 0 0 9 10 2 1.15245074 1 1.02440065720316 1 0.896350567744475 0.999999999999985 0.768300522990695 1.00000000000002 0.640250357274025 0.999999999999971 0.512200381767934 1.00000000000003 0.384150216933849 0.999999999999977 0.256100172076722 1.00000000000001 0.128050082239948 0.999999999999996 0 1 - 0 10 1 10 -7 0 0 4 5 2 1 0 0.863340413930186 0 0.735176185600528 0 0.614335192870819 0 0.5 0 - 0 5 1 5 -8 0 1 -7 0 0 1 2 2 0 1 0 0 - 0 2 1 2 -8 0 1 -7 0 0 5 6 2 1 0 0.799999999291919 0 0.599999998999466 0 0.399999999616473 0 0.19999999769002 0 1.11022302462516e-016 0 - 0 6 1 6 -8 0 1 -7 0 0 1 2 2 0 0 1.15245074 0 - 0 2 1 2 -8 0 1 -7 0 0 10 11 2 0 1.11022302462516e-016 0 0.152068152185004 0 0.304136281475966 0 0.456204466332198 0 0.608272535610324 0 0.760340782856035 0 0.912408850478254 0 1.06447703942306 0 1.21654517480863 0 1.36861332376717 0 1.52068147 - 0 11 1 11 -8 0 0.5 -7 0 0 9 18 3 1.15245074 -5.55111512312578e-017 1.15245074 0.0555555555555557 1.15245073999998 0.111111111116116 1.15245074000003 0.166666667531817 1.15245073999996 0.22222222565278 1.15245074000005 0.277777786329154 1.15245073999996 0.333333350411048 1.15245074000002 0.388888918748614 1.15245074 0.444444492191974 1.15245074 0.555555650990539 1.15245074000001 0.61111044061216 1.15245073999997 0.666670552049266 1.15245074000005 0.722214075283864 1.15245073999996 0.777789211527317 1.15245074000002 0.833324383533255 1.15245074 0.888893655284878 1.15245074 0.944444349180754 1.15245074 1 - 0 10 0.25 8 0.5 10 -8 0 0.5 -7 0 0 4 5 2 1.12886001 0.5 1.12886001 0.375000000058529 1.12886001 0.249999999935807 1.12886001 0.125 1.12886001 0 - 0 5 0.5 5 -8 0 1.48870447 -7 0 0 9 18 3 1 0 0.999999999999999 0.089892838532626 1.00000000000001 0.179790521642252 0.999999999999975 0.269669932424109 1.00000000000004 0.359582903153954 0.999999999999952 0.449456513241746 1.00000000000003 0.53936126118228 0.999999999999986 0.629249664112954 1 0.71914330936352 0.999999999999997 0.898929042104648 1.00000000000001 0.988821914144237 0.99999999999998 1.07871479129143 1.00000000000002 1.16860767298502 0.999999999999982 1.25850055866347 1.00000000000001 1.34839344776557 1 1.43828633972995 0.999999999999998 1.52817923399518 1 1.61807213 - 0 10 0.744352235 8 1.48870447 10 -8 0 1.48870447 -7 0 0 5 6 2 0 -1.11022302462516e-016 0 0.2977408897595 0 0.59548178463372 0 0.893222679199177 0 1.19096357619219 0 1.48870447 - 0 6 1.48870447 6 -8 0 1 -1 1 1.61807213 -1 0 -8 0 1.82687438 -7 0 0 7 8 2 0 1.61807213 0 1.38691896861617 0 1.15576580628647 0 0.924612641377626 0 0.693459482832089 0 0.462306318723421 0 0.231153158439249 0 -1.70066688892096e-017 - 0 8 1.82687438 8 -8 0 1.82687438 -7 0 0 7 8 2 1.82687438 0 1.56589232737771 0 1.30491027318021 0 1.0439282154995 0 0.782946164361323 0 0.52196410666827 0 0.260982052523557 0 1.11022302462516e-016 0 - 0 8 1.82687438 8 -8 0 1 -7 0 0 9 10 2 1 0 1 0.149214037827723 0.999999999999985 0.298428084787751 1.00000000000002 0.447642078270868 0.999999999999971 0.596856213329659 1.00000000000003 0.74607012685746 0.999999999999977 0.895284261775339 1.00000000000001 1.04449825535379 0.999999999999996 1.19371230222192 1 1.34292634 - 0 10 1 10 -7 0 0 4 5 2 0.5 0 0.385664807051278 0 0.264823814827912 0 0.136659585668982 0 0 0 - 0 5 1 5 -8 0 1.61807207 -7 0 0 9 26 4 1 -5.55111512312578e-017 1 0.0413529264329582 1 0.0827015201192849 0.999999999999998 0.124066433639995 1.00000000000001 0.165401399612487 0.999999999999988 0.206771488852768 1.00000000000001 0.248113802937041 0.999999999999989 0.289470701706362 1.00000000000001 0.330822927906434 0.999999999999989 0.413528776948552 1.00000000000005 0.454881700350476 0.99999999999989 0.496234622624708 1.00000000000016 0.537587543762775 0.999999999999849 0.57894046375606 1.0000000000001 0.620293382596143 0.999999999999955 0.661646300274383 1.00000000000001 0.702999216782344 0.999999999999986 0.827057962769609 1.00000000000004 0.909763788642009 0.999999999999919 0.992469610136004 1.00000000000011 1.0751754276604 0.999999999999888 1.15788124162148 1.00000000000008 1.24058705242882 0.999999999999962 1.32329286048873 1.00000000000001 1.40599866621 1 1.48870447 - 0 10 0.4045180175 8 0.809036035 8 1.61807207 10 -8 0 1.61807207 -7 0 0 5 6 2 1.61807207 0 1.29445766042458 0 0.970843245192979 0 0.64722883052217 0 0.32361441343933 0 0 0 - 0 6 1.61807207 6 -8 0 1 -1 1 1.48870447 -1 0 -8 0 1 -7 0 0 10 38 5 0 0 0.0282215020923101 0 0.0564429966276207 0 0.0846645015100594 0 0.112886001451254 0 0.141107498267012 0 0.169328998928296 0 0.197550500946033 0 0.225771998854649 0 0.253993499759292 0 0.310436500435937 0 0.338658000511576 0 0.366879501534188 0 0.395101002744601 0 0.423322503245608 0 0.451544002878438 0 0.479765502308966 0 0.507987002466732 0 0.536208503503469 0 0.592651503328598 0 0.620873002932361 0 0.649094502630444 0 0.67731600257834 0 0.705537502762561 0 0.733759003073738 0 0.761980503388104 0 0.790202003638854 0 0.81842350389734 0 0.874866504995944 0 0.903088006218329 0 0.931309503151528 0 0.959531015276684 0 0.987752492361548 0 1.01597402478905 0 1.04419549688738 0 1.07241701572036 0 1.10063851024319 0 1.12886001 0 - 0 11 0.25 9 0.5 9 0.75 9 1 11 -8 0 1 -7 0 0 5 6 2 1 0 0.799999998377 0 0.599999999673636 0 0.400000000319857 0 0.200000001627906 0 5.55111512312578e-017 0 - 0 6 1 6 -8 0 1 -1 -9.59518922649671e-017 1 9.59518922649671e-017 -1 -8 0 1 -7 0 0 9 10 2 -1.11022302462516e-016 0 0.128045938854511 0 0.256091885653204 0 0.384137786331314 0 0.512183809507973 0 0.640229641001412 0 0.768275663007673 0 0.896321564260143 0 1.02436751073719 0 1.15241345 0 - 0 10 1 10 -7 0 0 4 5 2 1.61807207 0.5 1.61807206999998 0.385664808412349 1.61807207 0.264823815243716 1.61807207000002 0.136659586185943 1.61807207 0 - 0 5 1 5 -8 0 1 -7 0 0 5 6 2 1 0 1 0.268644077998361 1 0.537288155825674 0.999999999999999 0.805932234223934 1 1.07457631207818 1 1.34322039 - 0 6 1 6 -7 0 0 4 5 2 1.61807207 1 1.61807207 0.863340413756017 1.61807206999999 0.735176184034568 1.61807207000001 0.614335191962566 1.61807207 0.5 - 0 5 1 5 -8 0 1.82687438 -7 0 0 7 8 2 1.61807207 1 1.38691892013218 0.999999999999998 1.15576576841944 1.00000000000001 0.924612612882194 0.999999999999991 0.69345946290809 1.00000000000001 0.462306306570669 0.999999999999997 0.231153152812406 1 -1.70066641020411e-017 1 - 0 8 1.82687438 8 -8 0 1.82687438 -7 0 0 7 8 2 -1.92365834798148e-017 1 0.260982052523556 1 0.52196410666827 0.999999999999997 0.782946164361319 1.00000000000001 1.0439282154995 0.999999999999991 1.30491027318021 1.00000000000001 1.56589232737772 0.999999999999998 1.82687438 1 - 0 8 1.82687438 8 -8 2.78088653 5.56177307 -7 0 0 8 23 4 0 0 0.0364104119095881 0 0.0728208239647636 0 0.109231238706418 0 0.145641656393508 0 0.182052067036896 0 0.218462483564498 0 0.254872897655543 0 0.327693726739259 0 0.364104141291552 0 0.400514555847953 0 0.436924970402023 0 0.473335384947521 0 0.509745799477958 0 0.546156213987067 0 0.655387457431195 0 0.728208286303289 0 0.801029115252506 0 0.873849944293437 0 0.946670773353551 0 1.01949160233896 0 1.0923124312006 0 1.16513326 0 - 2.78088653 9 3.476108165 7 4.1713298 7 5.56177307 9 -8 2.78088653 5.56177307 -7 0 0 11 22 3 2.78088653 1 2.90729045960056 0.999999999999995 3.0336944394577 1.00000000000002 3.16009819784812 0.999999999999971 3.28650250787856 1.00000000000001 3.41290590496158 1.00000000000003 3.53931037334963 0.999999999999931 3.66571393151963 1.00000000000006 3.79211804562029 0.999999999999968 3.91852192472455 1.00000000000001 4.04492586636968 0.999999999999998 4.29773373363029 1 4.42413766726297 0.999999999999996 4.55054160089755 0.999999999999987 4.67694553453467 1.00000000000006 4.80334946817054 0.99999999999988 4.92975340181144 1.00000000000014 5.05615733544765 0.999999999999882 5.18256126908841 1.00000000000007 5.30896520272573 0.999999999999971 5.43536913636372 1.00000000000001 5.56177307 1 - 2.78088653 12 4.1713298 10 5.56177307 12 -8 0.60294418 0.79736362 -7 0 0 7 8 2 0 0.79736362 0 0.769589414285875 0 0.741815210248582 0 0.714040998723605 0 0.68626680120742 0 0.658492589841049 0 0.630718385714596 0 0.60294418 - 0.60294418 8 0.79736362 8 -7 0 0 3 4 2 1.16513326 1 1.16513325999999 0.671247149536677 1.16513326000002 0.33797764114207 1.16513326 1.11022302462516e-016 - 0.60294418 4 0.79736362 4 -8 0 1 -7 0 0 9 26 4 1.16513326 1 1.10040363427343 1 1.03567400854571 0.999999999999986 0.970944382815507 1.00000000000002 0.906214757081435 0.999999999999975 0.841485131342169 1.00000000000002 0.776755505596325 0.999999999999981 0.712025879842566 1.00000000000001 0.647296254079521 0.999999999999997 0.550201815418995 0.999999999999999 0.517837002532539 1.00000000000001 0.485472189648371 0.999999999999984 0.453107376768598 1.00000000000002 0.420742563894984 0.999999999999985 0.388377751029715 1.00000000000001 0.356012938174585 0.999999999999998 0.323648125331662 1 0.258918499674082 0.999999999999998 0.226553686596679 1.00000000000001 0.194188875344442 0.999999999999983 0.16182405832853 1.00000000000002 0.129459252370422 0.999999999999984 0.0970944332469287 1.00000000000001 0.0647296230421442 0.999999999999997 0.0323648112133912 1 -2.77555756156289e-017 1 - 0 10 0.5 8 0.75 8 1 10 -8 0 1 -7 0 0 4 5 2 0 0 0 0.335805097499999 0 0.671610195680635 0 1.00741529232776 0 1.34322039 - 0 5 1 5 -8 0 1 -7 0 0 7 8 2 0 1 0 0.857142854990173 0 0.71428571867533 0 0.571428563870542 0 0.428571433221326 0 0.285714284178413 0 0.142857141494259 0 0 - 0 8 1 8 -8 0 1 -7 0 0 5 6 2 0 1.3088836 0.199999997999686 1.3088836 0.400000001236192 1.3088836 0.599999998384548 1.3088836 0.800000001908034 1.3088836 1 1.3088836 - 0 6 1 6 -8 0.5 1 -7 0 0 5 6 2 0 0 0.201333763085333 0 0.401996202900362 0 0.601991784089002 0 0.801324929812359 0 1 0 - 0.5 6 1 6 -7 0 0 3 4 2 0 0.797363620000357 0 0.863511248791802 0 0.931027169094537 0 0.999999999999647 - 0.5 4 1 4 -8 0 1 -7 0 0 5 6 2 1 1.34322039 0.79999999883525 1.34322039 0.599999998412672 1.34322039 0.399999999107195 1.34322039 0.199999998067233 1.34322039 0 1.34322039 - 0 6 1 6 -8 0 1 -7 0 0 1 2 2 0 0 0 1 - 0 2 1 2 -8 0 0.5 -7 0 0 1 2 2 1.15241345 0 1.15241345 1 - 0 2 0.5 2 -8 0 0.5 -7 0 0 11 12 2 0 0 0 0.0454544701819247 0 0.0909127055905363 0 0.136353170437431 0 0.181837060879128 0 0.227250401615514 0 0.272745541202072 0 0.318171757448794 0 0.363639848813339 0 0.409090310789355 0 0.454545454583984 0 0.5 - 0 12 0.5 12 -8 0 1 -7 0 0 9 42 6 0 1.52499365 0 1.44027178088413 0 1.35554991117709 0 1.27082804146504 0 1.18610617195849 0 1.10138430262025 0 1.01666243329384 0 0.931940563831656 0 0.847218694222917 0 0.720135889971818 0 0.677774955210816 0 0.63541402043662 0 0.593053085646577 0 0.550692150838214 0 0.508331216008801 0 0.465970281155883 0 0.423609346276787 0 0.360067943915052 0 0.338887476450433 0 0.317707008977442 0 0.296526541498467 0 0.275346074015801 0 0.254165606531858 0 0.232985139048935 0 0.211804671569416 0 0.180033970358746 0 0.169443736624022 0 0.158853502892221 0 0.148263269164196 0 0.137673035440635 0 0.127082801722432 0 0.116492568010287 0 0.10590233430504 0 0.0847218669098685 0 0.074131634012385 0 0.063541395992177 0 0.0529511732764732 0 0.0423609235227812 0 0.0317707037617147 0 0.0211804649995803 0 0.0105902285085298 0 0 - 0 10 0.5 8 0.75 8 0.875 8 0.9375 8 1 10 -8 0 1 -7 0 0 1 2 2 0 1 1.15241345 1 - 0 2 1 2 -8 0 1 -7 0 0 10 11 2 0 0 0.196208622530365 0 0.392417390538429 0 0.588625216923938 0 0.784835855600817 0 0.981041407829617 0 1.1772530447449 0 1.37345975575091 0 1.56966910527409 0 1.76587759780704 0 1.96208622 0 - 0 11 1 11 -7 0 0 4 5 2 1 0.5 1.00000000000007 0.381185003861604 0.999999999999915 0.258450427594587 1.00000000000004 0.131506978875905 1 0 - 0 5 1 5 -8 0.5 1 -7 0 0 9 18 3 1.96208622 -2.77555756156289e-017 1.96208621999998 0.0555555523035814 1.96208622000006 0.11111111397286 1.96208621999989 0.166666668761289 1.96208622000015 0.222222208285801 1.96208621999985 0.27777778810819 1.96208622000009 0.333333328456881 1.96208621999996 0.38888889008864 1.96208622000001 0.444444444448868 1.96208621999999 0.555555555238185 1.96208622000005 0.611111110938788 1.96208621999991 0.666666665271072 1.9620862200001 0.722222221938749 1.96208621999993 0.777777779266299 1.96208622000003 0.833333334071772 1.96208622 0.888888888499725 1.96208622 0.944444448173889 1.96208622 1 - 0.5 10 0.75 8 1 10 -8 0.5 1 -7 0 0 9 10 2 1 0 0.944444444616847 0 0.888888889580116 0 0.833333331900517 0 0.777777782510201 0 0.722222217071936 0 0.666666671611277 0 0.611111109388471 0 0.555555555855359 0 0.5 0 - 0.5 10 1 10 -8 0 1 -7 0 0 6 7 2 1.96208622 1 1.63507185184914 0.999999999999999 1.30805747762177 1 0.98104311980038 0.999999999999999 0.654028738199671 1 0.327014374301247 1 0 1 - 0 7 1 7 -8 0 1 -7 0 0 7 8 2 0 0 0 0.18698337216296 0 0.373966744889951 0 0.56095011520507 0 0.747933491572343 0 0.934916858063026 0 1.12190022994666 0 1.3088836 - 0 8 1 8 -8 0 1 -7 0 0 9 10 2 0 1 0 0.888888891321088 0 0.777777768308211 0 0.666666697148778 0 0.555555506494124 0 0.444444497385197 0 0.333333297409667 0 0.222222238431217 0 0.111111105870627 0 0 - 0 10 1 10 -8 0 1 -7 0 0 9 10 2 5.55111512312578e-017 1.52499365 0.111111110358824 1.52499365 0.222222223840445 1.52499365 0.333333322868476 1.52499365 0.444444468942103 1.52499365000001 0.555555520649817 1.52499364999998 0.666666693786343 1.52499365000003 0.777777763554574 1.52499364999998 0.888888894129374 1.52499365000001 1 1.52499365 - 0 10 1 10 -8 0.5 1 -7 0 0 11 12 2 -5.55111512312578e-017 0 0.0909090896502861 0 0.181818180721328 0 0.27272726945024 0 0.363636372038099 0 0.454545435064013 0 0.545454576104464 0 0.636363596219469 0 0.72727275867978 0 0.818181805265519 0 0.909090914249097 0 1 0 - 0.5 12 1 12 -8 0.5 1 -7 0 0 10 11 2 0 0.5 0 0.549999999983016 0 0.599999998345583 0 0.650000004014295 0 0.699999993228581 0 0.750000006850331 0 0.799999995174032 0 0.850000001937854 0 0.899999999639318 0 0.950000000000011 0 1 - 0.5 11 1 11 -8 0.5 1 -7 0 0 8 16 3 1 -5.55111512312578e-017 1 0.0953121078049919 0.999999999999998 0.190614493583351 1 0.285961269240173 0.999999999999992 0.38122461470222 1.00000000000001 0.476569384981238 0.999999999999996 0.571872052846062 1 0.667183947513085 1 0.857809655149615 0.999999999999997 0.953121743874874 1.00000000000001 1.04845480594896 0.999999999999986 1.14369818624137 1.00000000000001 1.23907465069676 0.999999999999992 1.33438169956076 1 1.42968154767915 1 1.52499365 - 0.5 9 0.75 7 1 9 -8 0.5 1 -7 0 0 11 62 7 1 1 0.999999999999969 0.99431818181816 1.00000000000013 0.988636363737565 0.99999999999965 0.982954544821883 1.00000000000065 0.97727272608913 0.999999999999094 0.971590923388496 1.00000000000096 0.965909067531029 0.999999999999226 0.96022728760003 1.00000000000046 0.954545450602659 0.999999999999814 0.948863637821561 1.00000000000004 0.943181819031002 0.999999999999973 0.931818182932264 1.00000000000008 0.926136364845761 0.999999999999825 0.920454546736101 1.00000000000029 0.914772728612151 0.999999999999611 0.909090910478306 1.00000000000042 0.903409092333494 0.999999999999654 0.897727274171865 1.00000000000022 0.892045455983158 0.999999999999909 0.88636363775114 1.00000000000002 0.880681819455704 0.999999999999984 0.869318182686522 1.00000000000007 0.863636364708883 0.999999999999823 0.857954543472136 1.00000000000035 0.852272733546789 0.99999999999949 0.846590910406027 1.00000000000057 0.840909089101921 0.99999999999952 0.835227275629674 1.0000000000003 0.829545454415114 0.999999999999873 0.823863636896218 1.00000000000003 0.81818181849911 0.999999999999972 0.806818181911553 1.00000000000012 0.801136363668812 0.999999999999704 0.795454545251684 1.00000000000053 0.78977272672355 0.999999999999265 0.784090908244072 1.00000000000078 0.778409089938551 0.999999999999358 0.77272727182502 1.00000000000039 0.767045453808399 0.999999999999846 0.761363635726832 1.00000000000003 0.755681817468179 0.999999999999974 0.738636362483049 1.00000000000007 0.727272725619848 0.99999999999986 0.715909088295049 1.00000000000024 0.70454545205656 0.999999999999676 0.693181815806376 1.00000000000033 0.681818178277321 0.999999999999752 0.670454540387947 1.00000000000014 0.659090904368011 0.999999999999949 0.647727270300953 1.00000000000001 0.636363634686063 1 0.613636364101506 0.999999999999993 0.60227272847319 1 0.590909094427322 1.00000000000004 0.579545458487552 0.99999999999988 0.568181820714172 1.00000000000018 0.556818183251012 0.999999999999818 0.545454546947337 1.00000000000012 0.534090910585628 0.999999999999945 0.522727273288495 1.00000000000001 0.511363636752357 1 0.5 - 0.5 12 0.5625 10 0.625 10 0.6875 10 0.75 10 0.875 10 1 12 -8 0 0.5 -7 0 0 11 12 2 1.16510272 1.11022302462516e-016 1.16510271999999 0.0915153499115751 1.16510272000003 0.182908638685773 1.16510271999992 0.274180128338194 1.16510272000015 0.365330133059749 1.16510271999978 0.456358837201827 1.16510272000027 0.54726661085126 1.16510271999974 0.638053636678727 1.16510272000019 0.728720238349052 1.1651027199999 0.819266650868679 1.16510272000003 0.909693150732382 1.16510272 1 - 0 12 0.5 12 -7 0 0 3 4 2 0 0.2026364 0 0.268784036312586 0 0.333563330640592 0 0.39705586 - 0 4 0.5 4 -8 0.5 1 -7 0 0 6 7 2 1 1.34292634 0.834437441367002 1.34292634 0.668436164132433 1.34292634 0.501993992292434 1.34292634 0.335108721278925 1.34292634 0.167778137767802 1.34292634 0 1.34292634 - 0.5 7 1 7 -7 0 0 3 4 2 0 1.47493128821452e-013 0 0.0689728390320898 0 0.136488763690295 0 0.202636400000395 - 0.5 4 1 4 -8 0 1 -1 1.82687438 0 0 1 -8 0 1 -7 0 0 10 20 3 0 0.60294418 0 0.592649764216289 0 0.582355348443213 0 0.572060932678271 0 0.561766516919441 0 0.551472101163936 0 0.54117768540989 0 0.530883269654575 0 0.520588853895906 0 0.510294438131408 0 0.489705606586193 0 0.479411201103391 0 0.469116721656516 0 0.45882249440564 0 0.448527734131027 0 0.438233739240613 0 0.427938974337642 0 0.417644747695293 0 0.407350275753428 0 0.39705586 - 0 11 0.5 9 1 11 -8 0 1 -7 0 0 3 4 2 5.56177307 1 5.56177307 0.666666664949986 5.56177307 0.333333335062264 5.56177307 0 - 0 4 1 4 -8 0 1 -7 0 0 5 6 2 0 1.34292634 0 1.07434107474412 0 0.805755802632449 0 0.537170537042451 0 0.268585266273248 0 -1.11022302462516e-016 - 0 6 1 6 -8 0 1 -7 0 0 8 16 3 1.16510272 0 1.09228380042731 0 1.01946488075598 0 0.946645961015007 0 0.873827041233277 0 0.801008121439839 0 0.728189201663553 0 0.655370281933446 0 0.509732442623431 0 0.436913523931127 0 0.364094598906441 0 0.291275690976483 0 0.218456754988162 0 0.145637847206749 0 0.0728189229184326 0 0 0 - 0 9 0.5 7 1 9 -8 0 2.78088653 -7 0 0 10 20 3 1.16510272 1 1.10684758409168 1 1.04859244821643 0.999999999999994 0.990337312429701 1.00000000000001 0.93208217670746 1 0.87382704100828 0.999999999999988 0.815571905307726 1.00000000000002 0.757316769612159 0.999999999999985 0.699061633942589 1.00000000000001 0.640806498298637 0.999999999999998 0.524296226889166 1 0.466041091297891 0.999999999999988 0.407785954258587 1.00000000000003 0.349530823130246 0.999999999999956 0.291275675945237 1.00000000000005 0.23302055820821 0.999999999999957 0.174765401721485 1.00000000000003 0.116510280626449 0.99999999999999 0.0582551392152425 1 5.55111512312578e-017 1 - 0 11 1.390443265 9 2.78088653 11 -8 0 2.78088653 -7 0 0 11 22 3 5.56177307 0 5.43536913583475 0 5.30896520178526 0 5.18256126784634 0 5.05615733402047 0 4.92975340029273 0 4.80334946667817 0 4.67694553315177 0 4.55054159973066 0 4.42413766639697 0 4.29773373315549 0 4.0449258668446 0 3.91852192107422 0 3.79211807494853 0 3.66571385190948 0 3.53931052663034 0 3.41290571978653 0 3.28650267533674 0 3.16009810625426 0 3.03369447849409 0 2.90729046392144 0 2.78088653 0 - 0 12 1.390443265 10 2.78088653 12 -8 0 1 -7 0 0 7 8 2 0 1 0 0.857142858511134 0 0.714285715932997 0 0.571428566879807 0 0.428571437019646 0 0.285714280897039 0 0.142857145867568 0 0 - 0 8 1 8 -8 0 1 -7 0 0 7 8 2 1 0 0.857142858511129 0 0.714285715324754 0 0.571428569392098 0 0.428571430723744 0 0.285714284624755 0 0.14285714151723 0 0 0 - 0 8 1 8 -8 0.5 1 -7 0 0 5 6 2 1 1.3090632 0.800000001104403 1.3090632 0.599999998792295 1.3090632 0.400000000721726 1.3090632 0.199999996927193 1.3090632 -5.55111512312578e-017 1.3090632 - 0.5 6 1 6 -8 0.5 1 -7 0 0 1 2 2 -3.73390207641933e-012 1.66079697 0.500000000169238 1.66079697 - 0.5 2 1 2 -8 0 1 -7 0 0 6 7 2 0 1.3090632 0 1.09088599985582 0 0.872708800645047 0 0.654531597141147 0 0.436354401745033 0 0.218177196325256 0 0 - 0 7 1 7 -8 0 1 -7 0 0 9 10 2 1.94845075 0 1.73195622349702 0 1.51546169773443 0 1.29896715437693 0 1.08247265879091 0 0.865978085634337 0 0.649483593599106 0 0.432989045066847 0 0.216494534441434 0 -1.11022302462516e-016 0 - 0 10 1 10 -8 2.78088653 5.56177307 -7 0 0 8 9 2 1 -1.11022302462516e-016 1 0.1636328947308 0.999999999999991 0.327265801238538 1.00000000000002 0.490898695014202 0.999999999999968 0.65453160059615 1.00000000000003 0.818164499356699 0.999999999999979 0.981797399309678 1.00000000000001 1.14543029952776 1 1.3090632 - 2.78088653 9 5.56177307 9 -8 2.78088653 5.56177307 -7 0 0 11 22 3 2.78088653 0 2.65448259702444 0 2.52807874497192 0 2.40167450880193 0 2.2752712100686 0 2.14886638760496 0 2.02246333118869 0 1.89605878638813 0 1.76965514545665 0 1.64325112391645 0 1.51684720321175 0 1.26403933606331 0 1.13763540248407 0 1.01123146889928 0 0.884827535309349 0 0.75842360171282 0 0.632019668111194 0 0.505615734502199 0 0.379211800887454 0 0.252807867265334 0 0.126403933636378 0 0 0 - 2.78088653 12 4.1713298 10 5.56177307 12 -8 0 2.78088653 -7 0 0 11 22 3 2.78088653 1 2.65448259664406 0.999999999999948 2.5280787118236 1.00000000000021 2.40167459687621 0.999999999999487 2.27527104367287 1.00000000000088 2.14886657746748 0.999999999998866 2.02246316957588 1.00000000000113 1.89605886974685 0.999999999999136 1.76965511168116 1.00000000000049 1.64325112547786 0.999999999999811 1.5168471997533 1.00000000000004 1.26403933292207 0.99999999999998 1.13763539952713 1.00000000000004 1.01123146615298 0.999999999999914 0.884827532801418 1.00000000000013 0.758423599471083 0.999999999999843 0.632019666165282 1.00000000000017 0.505615732881716 0.99999999999985 0.379211799623639 1.00000000000011 0.252807866389771 0.999999999999944 0.126403933181838 1.00000000000002 0 1 - 0 12 1.390443265 10 2.78088653 12 -8 0 2.78088653 -7 0 0 7 8 2 1 1.3088836 1 1.12190023063868 0.999999999999991 0.934916854783302 1.00000000000001 0.747933491100822 0.999999999999993 0.560950113941828 1 0.373966744561544 1 0.186983372191844 1 1.11022302462516e-016 - 0 8 2.78088653 8 -8 0 1.66079697 -7 0 0 4 5 2 0 1 0 0.749999999447045 0 0.499999999338884 0 0.250000001663566 0 0 - 0 5 1.66079697 5 -8 0 1.66079697 -7 0 0 8 9 2 0 0 0 0.207599620459176 0 0.415199241299651 0 0.622798861535063 0 0.830398484153901 0 1.03799810094248 0 1.24559772397368 0 1.45319734611858 0 1.66079697 - 0 9 1.66079697 9 -8 0 0.5 -7 0 0 7 26 5 0 0 0.0357142853571433 0 0.0714285708477501 0 0.107142856448995 0 0.142857142138037 0 0.178571427892057 0 0.214285713688213 0 0.267857142411415 0 0.285714285114668 0 0.303571428824012 0 0.32142857055597 0 0.339285714103659 0 0.357142857234118 0 0.39285714266462 0 0.410714285861968 0 0.428571428547306 0 0.446428571302388 0 0.464285714343074 0 0.48214285721109 0 0.571428571653931 0 0.642857143272796 0 0.714285715000469 0 0.785714286770207 0 0.8571428584043 0 0.928571429614109 0 1 0 - 0 8 0.125 6 0.1875 6 0.25 6 0.5 8 -8 0 0.5 -7 0 0 9 10 2 0.5 0 0.44444444444265 0 0.388888886589609 0 0.333333337900726 0 0.277777771194801 0 0.222222227004 0 0.166666663984062 0 0.111111111458594 0 0.0555555554295097 0 -2.77555756156289e-017 0 - 0 10 0.5 10 -8 0 1.55787992 -7 0 0 2 3 2 1 -4.96072405375969e-010 1 0.830398480125371 1 1.66079697049607 - 0 3 1.55787992 3 -8 0 1.55787992 -7 0 0 11 12 2 0 -4.90420586846931e-017 0 0.141625447124879 0 0.28325089520749 0 0.424876337380632 0 0.56650179862753 0 0.70812722131623 0 0.849752698867709 0 0.99137812094727 0 1.13300358299717 0 1.27462902473884 0 1.41625447291787 0 1.55787992 - 0 12 1.55787992 12 -8 0 0.5 -7 0 0 1 2 2 1.00000000000265 1.66079697 0.499999999830761 1.66079697 - 0 2 0.5 2 -8 0 0.5 -7 0 0 11 12 2 1.94845075 1 1.94845075000001 0.909090909902146 1.94845074999995 0.818181810093745 1.94845075000008 0.72727275718617 1.94845074999989 0.636363591813676 1.94845075000012 0.545454594439164 1.94845074999988 0.454545404772688 1.94845075000009 0.363636407660912 1.94845074999994 0.272727242721281 1.94845075000002 0.181818191717389 1.94845074999999 0.0909090882620897 1.94845075 5.55111512312578e-017 - 0 12 0.5 12 -8 0 1 -7 0 0 1 2 2 0 0 1 0 - 0 2 1 2 -8 0 1 -7 0 0 6 7 2 1 0 0.914144088788573 0 0.828288183214944 0 0.742432277591041 0 0.656576361215102 0 0.570720458577047 0 0.48486454 0 - 0 7 1 7 -8 0 2.03028442 -7 0 0 5 6 2 1 -2.22044604925031e-016 0.999999999999999 0.311575984209246 1 0.623151968114862 0.999999999999998 0.934727951560437 1 1.24630393589731 1 1.55787992 - 0 6 2.03028442 6 -8 0 2.03028442 -7 0 0 5 6 2 1 2.03028442 1 1.62422753572731 0.999999999999998 1.2181706518503 1 0.812113768572859 0.999999999999999 0.406056884133826 1 0 - 0 6 2.03028442 6 -8 0 1 -7 0 0 1 2 2 1 1.55787992 0 1.55787992 - 0 2 1 2 -8 0 1 -7 0 0 9 18 3 0 0.48486452 0 0.5134831629328 0 0.542101775382266 0 0.570720472435231 0 0.599339027744309 0 0.627957742167297 0 0.656576333189345 0 0.685194987922986 0 0.713813622405997 0 0.771050897507752 0 0.799669534973713 0 0.828288172415858 0 0.8569068098957 0 0.885525447474039 0 0.914144085212598 0 0.942762723172165 0 0.971381361414274 0 1 - 0 10 0.5 8 1 10 -8 0 1 -7 0 0 11 12 2 0 0.48486452 0 0.44078592708327 0 0.396707316876254 0 0.352628792934228 0 0.30855005962914 0 0.264471662125775 0 0.220392877710133 0 0.176314419389356 0 0.13223576262473 0 0.0881571892885173 0 0.0440785934326898 0 2.77555756156289e-017 - 0 12 1 12 -8 0 1 -7 0 0 1 2 2 1 0 0 0 - 0 2 1 2 -8 0 1 -7 0 0 1 2 2 1 2.03028442 0 2.03028442 - 0 2 1 2 -8 0 1 -7 0 0 3 4 2 0.48486454 0 0.323243029864074 0 0.16162151335535 0 2.77555756156289e-017 0 - 0 4 1 4 -8 0 3.67726025 -7 0 0 5 6 2 0 2.03028442 0 1.62422753483625 0 1.2181706500412 0 0.812113769909915 0 0.406056885034227 0 0 - 0 6 3.67726025 6 -8 0 3.67726025 -7 0 0 5 6 2 1 3.67726025 0.999999999999999 2.9418081998922 1 2.20635614950741 0.999999999999999 1.47090410652343 1 0.735452053873191 1 0 - 0 6 3.67726025 6 -8 0 1 -7 0 0 6 12 3 1 1 0.916666666666666 1 0.833333333246833 1 0.750000000459229 1 0.666666665648958 0.999999999999999 0.583333334276045 1 0.41666666749509 0.999999999999999 0.333333332845459 1 0.250000000344898 0.999999999999997 0.166666666569951 1 0.0833333333333334 0.999999999999999 0 1 - 0 7 0.5 5 1 7 -8 0 1 -7 0 0 1 2 2 1 0 0 0 - 0 2 1 2 -8 7.7471244 11.44318406 -7 0 0 6 37 8 0 1 0 0.997396697811275 0 0.994789854731891 0 0.99218932826108 0 0.989582356468773 0 0.986979259179871 0 0.981771650375325 0 0.979166784189066 0 0.976562358014029 0 0.973958322976891 0 0.971354166576317 0 0.963541666019163 0 0.958333332941531 0 0.953125000226874 0 0.947916667611032 0 0.942708334829833 0 0.927083335197692 0 0.916666668738112 0 0.906250002198549 0 0.895833335537144 0 0.885416668712063 0 0.854166667620251 0 0.833333333785895 0 0.812500000074151 0 0.791666666380819 0 0.770833332601645 0 0.708333330693968 0 0.666666668834446 0 0.625000008888808 0 0.583333346692011 0 0.541666678079 0 0.416666640496201 0 0.333333364679301 0 0.250000011525638 0 0.166666641808083 0 0.0833333371175927 0 0 - 7.7471244 7 7.8048753321875 5 7.862626264375 5 7.97812812875 5 8.2091318575 5 8.671139315 5 9.59515423 5 11.44318406 7 -8 7.7471244 11.44318406 -7 0 0 10 20 3 7.74712417 1 7.93192728547397 1.00000000000003 8.11673172065963 0.999999999999887 8.30153009113798 1.00000000000026 8.48634083175846 0.999999999999611 8.67113527289716 1.00000000000043 8.85594465777044 0.999999999999635 9.0407444312365 1.00000000000023 9.22554841504506 0.999999999999904 9.41035124702442 1.00000000000002 9.77995721297578 0.99999999999999 9.96476019596232 1.00000000000002 10.1495631789583 0.999999999999959 10.3343661619587 1.00000000000007 10.5191691449678 0.999999999999909 10.7039721279746 1.00000000000009 10.8887751109867 0.999999999999934 11.0735780939943 1.00000000000003 11.2583810770001 0.999999999999991 11.44318406 1 - 7.7471244 11 9.59515423 9 11.44318406 11 -8 0 1.10976049 -7 0 0 9 10 2 1.12886001 1 1.00342768997398 1 0.878015496455446 0.999999999999987 0.752547402525934 1.00000000000003 0.627175383522143 0.999999999999963 0.501692263556591 1.00000000000004 0.376297206042746 0.999999999999962 0.250855490921177 1.00000000000003 0.125428896643021 0.999999999999991 2.47944830040419e-017 1 - 0 10 1.10976049 10 -8 0 1.10976049 -7 0 0 11 42 5 1 1.10976049 1.00000000000001 1.05931683136365 0.999999999999962 1.0088731725829 1.00000000000009 0.958429519255552 0.999999999999856 0.907985846839667 1.00000000000018 0.857542212133173 0.999999999999816 0.807098525805361 1.00000000000015 0.75665488781198 0.99999999999991 0.706211218225612 1.00000000000004 0.655767562780678 0.99999999999999 0.605323904362354 1.00000000000001 0.529658416876651 0.999999999999975 0.504436587034878 1.00000000000007 0.479214762062585 0.999999999999859 0.453992919068916 1.00000000000021 0.42877111166013 0.999999999999757 0.403549255185357 1.0000000000002 0.378327446635967 0.999999999999876 0.353105607980849 1.00000000000005 0.327883782189324 0.999999999999992 0.302661952701742 0.999999999999999 0.26482920888495 1.00000000000002 0.252218293498788 0.99999999999992 0.239607382841914 1.00000000000016 0.226996458068415 0.999999999999772 0.214385551063233 1.00000000000025 0.201774639980741 0.999999999999805 0.189163716416968 1.00000000000011 0.176552804503556 0.999999999999967 0.163941891750751 0.999999999999997 0.151330976397031 1.00000000000002 0.126109146305859 0.999999999999864 0.113498231089364 1.00000000000035 0.100887317199798 0.999999999999392 0.0882764037682846 1.00000000000078 0.0756654898265021 0.999999999999225 0.0630545751413675 1.00000000000059 0.0504436601081525 0.999999999999659 0.0378327451903315 1.00000000000014 0.0252218303975076 0.999999999999965 0.0126109152898778 1 0 - 0 12 0.554880245 10 0.8323203675 10 0.97104042875 10 1.10976049 12 -8 0 1 -7 0 0 10 20 3 1 1.10976049 0.950000000000004 1.10976048999999 0.899999999993938 1.10976049000003 0.850000000040888 1.10976048999995 0.799999999894132 1.10976049000005 0.750000000108814 1.10976048999997 0.700000000055725 1.10976049000001 0.649999999723437 1.10976049 0.600000000255969 1.10976049 0.550000000109299 1.10976049 0.449999998763695 1.10976049000001 0.39999999759406 1.10976048999996 0.349999995948303 1.10976049000011 0.299999995273113 1.10976048999982 0.249999999313948 1.10976049000022 0.199999994579504 1.10976048999981 0.149999997178248 1.10976049000012 0.0999999967626193 1.10976048999995 0.049999998006787 1.10976049000001 0 1.10976049 - 0 11 0.5 9 1 11 -8 0 1 -7 0 0 7 14 3 1 1 0.999999999999999 0.928571428571427 1 0.857142856792674 0.99999999999999 0.785714286832605 1.00000000000001 0.714285712842501 0.999999999999992 0.642857143460724 1 0.571428571921622 0.999999999999998 0.428571427593852 1 0.357142856278644 0.999999999999994 0.285714286878605 1.00000000000001 0.214285713268776 0.999999999999996 0.142857143204011 1 0.0714285714285722 1 2.77555756156289e-017 - 0 8 0.5 6 1 8 -8 3.65967968 7.7471244 -7 0 0 10 20 3 7.74712417 1 7.54275196094592 1.00000000000001 7.3383816693846 0.999999999999958 7.13400366803808 1.00000000000009 6.92964090855589 0.999999999999852 6.72525836371454 1.00000000000017 6.52089384776809 0.999999999999856 6.31651768558919 1.00000000000009 6.11214670775867 0.999999999999961 5.90777427475701 1.00000000000001 5.49902980080448 0.99999999999999 5.29465756486534 1.00000000000003 5.0902853296732 0.999999999999938 4.88591309494131 1.00000000000008 4.6815408603778 0.999999999999924 4.47716862569652 1.00000000000005 4.2727963906066 0.999999999999978 4.06842415481992 1.00000000000001 3.8640519180474 0.999999999999998 3.65967968 1 - 3.65967968 11 5.70340204 9 7.7471244 11 -8 3.65967968 7.7471244 -7 0 0 10 29 4 0 -5.25973662476286e-018 0 0.0277440126268422 0 0.0554881059947595 0 0.0832322679477913 0 0.110974981068965 0 0.138720229519954 0 0.166464989144673 0 0.194207338500423 0 0.221952294067733 0 0.249696113347553 0 0.305184136483414 0 0.332928148370127 0 0.360672160507772 0 0.388416172827756 0 0.416160185262881 0 0.443904197743986 0 0.471648210204042 0 0.499392222574223 0 0.527136234786857 0 0.610368270747512 0 0.665856382687525 0 0.721343819955899 0 0.776833745366783 0 0.832317877956471 0 0.887811407981532 0 0.943293896171295 0 0.99878585268618 0 1.05427201394165 0 1.10976049 - 3.65967968 11 4.68154086 9 5.70340204 9 7.7471244 11 -8 0.5 1 -7 0 0 3 4 2 1.12886001 0.5 1.12886001 0.66666666649191 1.12886001 0.833333515238157 1.12886001 1 - 0.5 4 1 4 -8 0.5 1 -7 0 0 10 11 2 0 1.52068147 0.099999998718934 1.52068147000002 0.199999997250452 1.52068146999992 0.300000007347172 1.52068147000018 0.399999978351613 1.52068146999971 0.500000038203663 1.52068147000033 0.599999952604801 1.52068146999973 0.700000033765418 1.52068147000016 0.799999986603413 1.52068146999993 0.900000005194768 1.52068147000002 1 1.52068147 - 0.5 11 1 11 -8 0 1 -7 0 0 10 11 2 5.55111512312578e-017 0 0.099999999000435 0 0.19999999783188 0 0.300000004660058 0 0.399999984674565 0 0.500000025317384 0 0.599999967850364 0 0.700000022322396 0 0.799999992259453 0 0.900000002848119 0 1 0 - 0 11 1 11 -8 0 1 -7 0 0 11 12 2 0 0 0 0.0909090870005873 0 0.181818194699957 0 0.272727243223232 0 0.3636364028566 0 0.454545417493743 0 0.545454578812931 0 0.636363609214597 0 0.727272746354653 0 0.818181811433325 0 0.909090911680101 0 1 - 0 12 1 12 -8 0.5 1 -7 0 0 9 18 3 1 1 0.972222223107143 0.999999999999996 0.944444445260269 1.00000000000001 0.916666666971317 0.99999999999998 0.888888888618995 1.00000000000001 0.861111110448061 1.00000000000001 0.833333332570161 0.999999999999983 0.805555554963123 1.00000000000001 0.777777777471372 0.999999999999998 0.722222222140174 0.999999999999998 0.694444440737269 1.00000000000001 0.66666668661602 0.999999999999976 0.638888849063158 1.00000000000003 0.611111169227293 0.999999999999985 0.583333288546101 1 0.555555579821702 1 0.527777777490575 0.999999999999999 0.5 1 - 0.5 10 0.75 8 1 10 -7 0 0 4 5 2 1 1.52068147 1 1.17720178811077 1 0.811610086521991 1 0.420780379991539 1 0 - 0.5 5 1 5 -8 0 1 -7 0 0 4 5 2 1.94845075 1 1.46133806234165 1 0.974225374608466 1 0.487112687637795 1 -1.11022302462516e-016 1 - 0 5 1 5 -7 0 0 4 5 2 5.55111512312578e-017 1 0.138352569460285 0.999999999999956 0.26685716841291 1.00000000000001 0.387063898265423 1.00000000000004 0.5 1 - 0 5 1 5 -8 0 3.65967968 -7 0 0 9 26 4 0 0 0.0555555565558975 0 0.111111112347649 0 0.166666667882863 0 0.22222222349947 0 0.277777779366071 0 0.333333335481409 0 0.388888891674995 0 0.444444447606518 0 0.527777780346183 0 0.555555557789258 0 0.583333335137524 0 0.611111112432472 0 0.63888888971651 0 0.666666667030835 0 0.694444444417863 0 0.722222221919072 0 0.777777777233893 0 0.805555547810258 0 0.833333368302565 0 0.861111027280528 0 0.888889005370496 0 0.916666564009156 0 0.944444504677849 0 0.972222202870418 0 1 0 - 0 10 1.82983984 8 2.74475976 8 3.65967968 10 -8 0 3.65967968 -7 0 0 11 32 4 3.54324898762612e-017 1 0.166349076363619 0.999999999999997 0.332698152727337 1.00000000000002 0.49904722909074 0.999999999999956 0.665396305454837 1.00000000000008 0.831745381817779 0.999999999999905 0.998094458182237 1.00000000000007 1.16444353454511 0.999999999999973 1.3307926109093 0.999999999999989 1.49714168727263 1.00000000000002 1.6634907636364 0.999999999999988 1.91301437818178 1.00000000000001 1.99618891636397 0.999999999999916 2.07936345454524 1.00000000000023 2.16253799272871 0.999999999999565 2.24571253090888 1.00000000000059 2.32888706909276 0.99999999999938 2.41206160727334 1.00000000000049 2.49523614545587 0.999999999999703 2.57841068363729 1.00000000000012 2.66158522181878 0.999999999999974 2.82793429818123 1.00000000000002 2.91110883680859 0.999999999999933 2.99428337184251 1.00000000000014 3.07745792024613 0.999999999999816 3.16063244070584 1.00000000000016 3.24380699277148 0.999999999999911 3.32698151552843 1.00000000000002 3.41015607347226 1.00000000000001 3.49333059414949 0.999999999999993 3.57650513990764 1 3.65967968 1 - 0 12 1.82983984 10 2.74475976 10 3.65967968 12 -8 0 1 -7 0 0 11 32 4 0 1 0 0.977272727220067 0 0.954545453624753 0 0.931818186168602 0 0.909090899445788 0 0.88636364776312 0 0.863636353991642 0 0.840909095589628 0 0.818181816177811 0 0.795454545347626 0 0.77272727231941 0 0.727272726812242 0 0.704545454061328 0 0.681818181312959 0 0.659090908567418 0 0.636363635824184 0 0.61363636308402 0 0.590909090346039 0 0.568181817611056 0 0.545454544878479 0 0.52272727214864 0 0.454545453966938 0 0.40909090852297 0 0.36363636308955 0 0.318181817666517 0 0.272727272254191 0 0.227272726852105 0 0.181818181460788 0 0.136363636079766 0 0.0909090907093733 0 0.0454545453494261 0 0 - 0 12 0.25 10 0.5 10 1 12 -8 0 1 -7 0 0 1 2 2 0.999999999420943 0 -5.78139536244748e-010 0 - 0 2 1 2 -8 1.23049347 1.78417229 -7 0 0 10 29 4 -4.42139104810896e-017 0 0.177557083724617 0 0.355114179164191 0 0.532671265723126 0 0.710228350979233 0 0.88778544052934 0 1.06534253139195 0 1.24289961830775 0 1.42045670227528 0 1.59801379066455 0 1.86434942203471 0 1.9531279660713 0 2.04190651021952 0 2.1306850543818 0 2.21946359850005 0 2.30824214255179 0 2.39702068655557 0 2.48579923056503 0 2.57457777467395 0 2.75213486335206 0 2.84091340476899 0 2.92969196890499 0 3.01847045132397 0 3.10724911167726 0 3.19602750485484 0 3.28480617666664 0 3.37358464875575 0 3.46236321662454 0 3.55114176 0 - 1.23049347 11 1.50733288 9 1.645752585 9 1.78417229 11 -8 1.23049347 1.78417229 -7 0 0 10 29 4 1.38090458579697e-017 1 0.0276839413856586 0.999999999999987 0.0553678827232684 1.00000000000005 0.0830518240218066 0.99999999999988 0.110735765290407 1.00000000000019 0.138419706537915 0.999999999999767 0.166103647773587 1.00000000000022 0.193787589006213 0.999999999999849 0.221471530245007 1.00000000000007 0.249155471498878 0.99999999999998 0.290681383415914 1.00000000000001 0.304523354065416 0.99999999999995 0.318365324724551 1.00000000000012 0.332207295392484 0.999999999999819 0.346049266068338 1.0000000000002 0.35989123675129 0.999999999999839 0.373733207440461 1.00000000000009 0.387575178135026 0.999999999999968 0.40141714883411 1 0.429101090239648 1 0.442943061779962 0.99999999999998 0.456785026416304 1.00000000000005 0.470627019206511 0.999999999999936 0.484468940307674 1.00000000000006 0.498310981591275 0.999999999999962 0.512152892421255 1.00000000000001 0.525994885112835 0.999999999999996 0.539836859545316 1 0.55367883 1 - 1.23049347 11 1.50733288 9 1.645752585 9 1.78417229 11 -8 0.55367874 1.23049347 -7 0 0 10 38 5 1.23049356 1 1.21357319156174 1 1.19665281925741 0.999999999999989 1.17973242857977 1.00000000000003 1.16281212085985 0.99999999999995 1.14589168109816 1.00000000000008 1.12897136308299 0.999999999999917 1.11205097251655 1.00000000000007 1.09513061046629 0.999999999999965 1.07821024143755 1.00000000000001 1.0443695050728 0.999999999999989 1.02744913688487 1.00000000000005 1.01052876868973 0.999999999999891 0.993608400485952 1.00000000000016 0.976688032271822 0.999999999999837 0.959767664045847 1.00000000000012 0.942847295806527 0.999999999999938 0.925926927552128 1.00000000000002 0.909006559281252 0.999999999999996 0.875165822703216 1 0.85824545439859 0.999999999999995 0.841325086081774 1.00000000000001 0.824404717756554 0.999999999999973 0.807484349426089 1.00000000000004 0.790563981094322 0.999999999999949 0.773643612764468 1.00000000000004 0.756723244440234 0.999999999999981 0.739802876125107 1 0.705962139520118 1 0.689041772058309 0.999999999999991 0.672121397800164 1.00000000000002 0.655201051386918 0.999999999999965 0.638280634163597 1.00000000000004 0.621360335795543 0.999999999999971 0.604439908527925 1.00000000000002 0.587519562235686 0.999999999999994 0.570599198004511 1 0.55367883 1 - 0.55367874 11 0.7228824225 9 0.892086105 9 1.0612897875 9 1.23049347 11 -8 0.55367874 1.23049347 -7 0 0 9 34 5 7.89204289 0 7.77146229205754 0 7.65088172851121 0 7.53030116626264 0 7.40972046482044 0 7.28914002952841 0 7.16855932685043 0 7.04797878730685 0 6.92739819345864 0 6.68623702064032 0 6.56565643206094 0 6.44507584784013 0 6.32449525956051 0 6.20391466924563 0 6.08333408407792 0 5.96275350227569 0 5.842172911813 0 5.60101173579473 0 5.48043114949974 0 5.3598505627863 0 5.23926997519365 0 5.11868938725656 0 4.99810879983884 0 4.87752821345553 0 4.75694762760484 0 4.51578645258266 0 4.39520586637987 0 4.2746252722845 0 4.1540446849511 0 4.03346410315783 0 3.9128835164437 0 3.79230292585595 0 3.67172234655226 0 3.55114176 0 - 0.55367874 10 0.7228824225 8 0.892086105 8 1.0612897875 8 1.23049347 10 -8 0 0.55367874 -7 0 0 9 26 4 7.89204289 0 7.99068570888011 0 8.08932851035561 0 8.18797133458052 0 8.2866141284304 0 8.38525693788119 0 8.48389976357459 0 8.58254255743162 0 8.68118536914935 0 8.87847099525057 0 8.97711381050956 0 9.07575662006887 0 9.17439942683395 0 9.27304223527023 0 9.37168504650287 0 9.47032785768819 0 9.56897066574816 0 9.86489909466331 0 10.0621847168576 0 10.2594703319995 0 10.4567559438124 0 10.6540416005815 0 10.8513271944277 0 11.0486128271671 0 11.2458984391937 0 11.44318406 0 - 0 10 0.138419685 8 0.27683937 8 0.55367874 10 -8 0 0.55367874 -7 0 0 10 29 4 1.23049356 1 1.24433552850671 0.999999999999984 1.25817749298298 1.00000000000007 1.27201943886836 0.999999999999853 1.28586146816808 1.00000000000023 1.29970336455019 0.999999999999745 1.31354538339506 1.00000000000022 1.32738732920117 0.999999999999863 1.34122930369363 1.00000000000005 1.35507127115464 0.999999999999994 1.38275520778502 0.999999999999995 1.39659717610442 1.00000000000004 1.41043914442817 0.999999999999893 1.42428111275722 1.00000000000018 1.43812308109109 0.999999999999797 1.45196504943114 1.00000000000017 1.46580701777693 0.999999999999905 1.47964898612938 1.00000000000004 1.49349095448863 0.999999999999992 1.53501685958818 1.00000000000001 1.56270079632804 0.99999999999995 1.59038473307061 1.00000000000012 1.61806866981182 0.999999999999816 1.64575260654753 1.00000000000021 1.6734365432736 0.999999999999814 1.70112047998608 1.00000000000012 1.72880441668062 0.999999999999944 1.75648835335334 1.00000000000001 1.78417229 1 - 0 11 0.138419685 9 0.27683937 9 0.55367874 11 -8 0 1 -7 0 0 1 2 2 11.44318406 -5.8042859407692e-010 11.44318406 0.999999999421405 - 0 2 1 2 -8 0 1 -7 0 0 1 2 2 -5.80428149987711e-010 3.67726025 0.999999999421403 3.67726025 - 0 2 1 2 -8 8.022e-005 1.00008022 -7 0 0 10 11 2 1.00008022 10.70174454 0.900080220691835 10.7017445399999 0.80008016872875 10.7017445400003 0.700080392644256 10.7017445399995 0.600079947282026 10.7017445400005 0.500080493829118 10.7017445399998 0.400080043761691 10.7017445399998 0.300080304672485 10.7017445400003 0.200080203789985 10.7017445399998 0.100080220544766 10.70174454 8.02199999998532e-005 10.70174454 - 8.022e-005 11 1.00008022 11 -8 8.02200000000752e-005 1.00008022 -7 0 0 7 20 4 1 0 0.928571405290599 0 0.857142841923268 0 0.785714286697053 0 0.714285725515053 0 0.642857153384565 0 0.571428574416945 0 0.464285715533088 0 0.428571391555464 0 0.392857156960854 0 0.357142952061166 0 0.321428668565348 0 0.285714287730597 0 0.214285749296371 0 0.178571609022626 0 0.142857691581956 0 0.107142733134823 0 0.0714286179547425 0 0.0357142820465784 0 -2.77555756156289e-017 0 - 8.022e-005 8 0.50008022 6 0.75008022 6 1.00008022 8 -8 0.00020743 46.24578153 -7 0 0 3 4 2 8.022e-005 10.70174454 8.022e-005 7.13451286431973 8.022e-005 3.56728118147016 8.022e-005 4.9500000001446e-005 - 0.00020743 4 46.24578153 4 -8 0.000207430000003228 46.24578153 -7 0 0 7 8 2 1.00034374 46.24578153 1.00034374 39.6392709503669 1.00034374 33.0327603095913 1.00034373999999 26.4262498523667 1.00034374000002 19.8197391231767 1.00034373999999 13.2132286154134 1.00034374 6.6067180119622 1.00034374 0.000207430000006781 - 0.00020743 8 46.24578153 8 -8 8.022e-005 1.00008022 -7 0 0 9 18 3 8.02199999998809e-005 4.95e-005 0.0556357606383708 4.94999999999994e-005 0.111191303890827 4.95000000000021e-005 0.166746938925969 4.94999999999954e-005 0.222302401817526 4.95000000000067e-005 0.277857960957205 4.9499999999993e-005 0.333413613161736 4.95000000000052e-005 0.388969090394135 4.94999999999975e-005 0.444524664200662 4.95000000000006e-005 0.555635780083466 4.94999999999997e-005 0.611191342569405 4.95000000000006e-005 0.666746881308704 4.9499999999999e-005 0.722302526833658 4.95000000000014e-005 0.777857798814903 4.94999999999987e-005 0.833413731036291 4.95000000000008e-005 0.888969031263523 4.94999999999997e-005 0.944524675547781 4.95000000000001e-005 1.00008022 4.95e-005 - 8.022e-005 10 0.50008022 8 1.00008022 10 -8 8.02200000000752e-005 1.00008022 -7 0 0 6 27 6 1 4.45537137 0.999999999999999 4.08409064500845 1 3.71280954332189 0.999999999999996 3.34152828558409 1 2.97024747045353 0.999999999999998 2.59896707971167 1 2.13486508428653 0.999999999999999 2.04204486653467 1 1.94922475307073 0.999999999999998 1.85640466684943 1 1.7635845308255 0.999999999999999 1.62435413651776 1 1.57794395866149 0.999999999999999 1.53153358330699 1 1.48512285937647 0.999999999999999 1.43871163579206 1 1.34588788715981 0.999999999999996 1.29947381886895 1.00000000000001 1.25306475246647 0.999999999999996 1.20665824914299 1 1.16024991993606 0.999999999999998 0.928205871503354 1 0.74255733963797 0.999999999999997 0.556924676182699 1 0.371279879901405 0.999999999999999 0.18564047273382 1 1.11082684003667e-016 - 8.022e-005 7 0.50008022 5 0.62508022 5 0.68758022 5 0.75008022 5 1.00008022 7 -8 4.95e-005 10.70174454 -7 0 0 6 7 2 1.00008022 4.94999999993695e-005 1.00008022 1.78366533834248 1.00008022 3.56728118718778 1.00008022 5.35089700214743 1.00008022 7.13451287410224 1.00008022 8.91812869820214 1.00008022 10.70174454 - 4.95e-005 7 10.70174454 7 -8 4.94999999993695e-005 10.70174454 -7 0 0 10 11 2 1.00005543 7.14491407 1.00005543000001 6.43042608664393 1.00005542999996 5.71593815697054 1.0000554300001 5.00145000433524 1.00005542999982 4.28696231021984 1.00005543000022 3.5724740201257 1.0000554299998 2.85798624264157 1.00005543000014 2.14349818880025 1.00005542999994 1.42901020594359 1.00005543000002 0.714522232453753 1.00005543 3.42500000005685e-005 - 4.95e-005 11 10.70174454 11 -8 0.00034374 1.00034374 -7 0 0 11 52 6 1 4.45537137 0.97727512767128 4.45537137000003 0.954549327562179 4.45537136999986 0.93182274977946 4.45537137000035 0.909095544432258 4.45537136999939 0.886367861625119 4.45537137000079 0.863639851469544 4.45537136999923 0.840911664068547 4.45537137000055 0.818183449533582 4.45537136999971 0.795455357969267 4.45537137000012 0.772727539484659 4.45537136999995 0.727272748888535 4.4553713700001 0.70456047965547 4.4553713699995 0.681719813570529 4.45537137000128 0.659352848897423 4.4553713699978 0.636043992317676 4.4553713700028 0.613879413127025 4.45537136999725 0.590772437586996 4.45537137000211 0.568226498992893 4.45537136999875 0.545447447440316 4.45537137000054 0.522727287109376 4.45537136999986 0.488636357502175 4.45537137000008 0.477272805548352 4.45537136999969 0.465909313311678 4.45537137000073 0.45454584925959 4.45537136999882 0.443182381861823 4.45537137000138 0.431818879584616 4.45537136999884 0.42045531089837 4.4553713700007 0.409091644269537 4.4553713699997 0.397727848167577 4.4553713700001 0.386363891060114 4.45537136999996 0.363635591771201 4.45537137000009 0.352267177912036 4.45537136999948 0.340901118576086 4.45537137000143 0.329538588671444 4.45537136999734 0.318178099006253 4.45537137000367 0.306817541307829 4.45537136999617 0.295455498554919 4.45537137000299 0.284091820591499 4.45537136999831 0.272727465056574 4.45537137000062 0.261363603598927 4.45537136999991 0.227272773001565 4.45537137000005 0.204545532031698 4.45537137000002 0.181818273898881 4.45537136999976 0.159091002011588 4.45537137000059 0.13636371977859 4.4553713699991 0.113636430608293 4.45537137000096 0.0909091379094693 4.45537136999926 0.0681818450905971 4.45537137000042 0.045454555560341 4.45537136999983 0.0227272727272726 4.45537137000004 0 4.45537137 - 0.00034374 12 0.25034374 10 0.50034374 10 0.62534374 10 0.75034374 10 1.00034374 12 -8 0.000343739999999926 1.00034374 -7 0 0 11 42 5 1.00034374 0.00020743 0.977616493888741 0.000207430000000008 0.95488913795499 0.000207429999999967 0.932162083238209 0.000207430000000083 0.90943459571591 0.000207429999999855 0.886707009947719 0.000207430000000189 0.863980915639475 0.000207429999999813 0.841252069303054 0.000207430000000141 0.818525951433066 0.000207429999999921 0.795798275483191 0.00020743000000003 0.773071043187773 0.000207429999999994 0.727616471370123 0.000207430000000003 0.704889217295523 0.000207429999999996 0.682161960576593 0.000207430000000002 0.659434686545194 0.000207430000000005 0.636707395034759 0.000207429999999984 0.61398009506681 0.000207430000000022 0.591252799544316 0.00020742999999998 0.568525519936852 0.000207430000000013 0.54579826097387 0.000207429999999994 0.523071015331338 0.000207430000000002 0.477616501314267 0.000207429999999998 0.454889289623612 0.000207430000000007 0.432161781415383 0.000207429999999981 0.40943470175341 0.000207430000000039 0.386707513056481 0.00020742999999994 0.36398002603401 0.000207430000000069 0.341252697024919 0.000207429999999941 0.318525631654824 0.000207430000000036 0.295798334556349 0.000207429999999986 0.273071010642786 0.000207430000000002 0.22761645935256 0.00020743 0.204889243603897 0.000207429999999996 0.182162026881326 0.000207430000000013 0.15943459895072 0.000207429999999974 0.136707284771218 0.000207430000000036 0.113980125734277 0.000207429999999964 0.0912528665483132 0.000207430000000027 0.0685255031953503 0.000207429999999985 0.0457982978327127 0.000207430000000006 0.0230710210041008 0.000207429999999999 0.000343740000000009 0.00020743 - 0.00034374 12 0.25034374 10 0.50034374 10 0.75034374 10 1.00034374 12 -8 5.799e-005 1.00005799 -7 0 0 10 29 4 0 4.45537137 0 4.34399764389714 0 4.23251650220087 0 4.12148276991122 0 4.00939256506556 0 3.89889166226731 0 3.78679002931944 0 3.67578485509394 0 3.56427732628911 0 3.45291293554463 0 3.23014408850958 0 3.11875972842914 0 3.00737541972277 0 2.89599115032893 0 2.78460690818257 0 2.6732226812245 0 2.56183845738823 0 2.45045422461419 0 2.33906997083782 0 2.00491711031607 0 1.78214853681189 0 1.55937996385882 0 1.33661139182976 0 1.11384282109963 0 0.891074252040694 0 0.668305685028014 0 0.445537120434288 0 0.222768558633796 0 2.22044604925031e-016 - 5.799e-005 11 0.25005799 9 0.50005799 9 1.00005799 11 -8 5.79899999999522e-005 1.00005799 -7 0 0 11 122 13 1.00005799 3.574e-005 0.997217074881069 3.57399999999993e-005 0.994376178445408 3.57400000000032e-005 0.991535270255704 3.5739999999992e-005 0.988694355262974 3.5740000000014e-005 0.985853442634206 3.57399999999818e-005 0.983012534285705 3.57400000000179e-005 0.980171626068293 3.57399999999867e-005 0.977330714609382 3.57400000000074e-005 0.974489802754918 3.57399999999971e-005 0.971648896608216 3.57400000000006e-005 0.965967077638978 3.57399999999995e-005 0.963126167943042 3.57400000000015e-005 0.960285259053338 3.57399999999972e-005 0.957444351153267 3.57400000000034e-005 0.954603443857032 3.57399999999978e-005 0.95176253648633 3.57399999999998e-005 0.948921628330006 3.57400000000017e-005 0.946080718923655 3.57399999999985e-005 0.943239808310156 3.57400000000005e-005 0.940398897315151 3.574e-005 0.931876168808541 3.57399999999996e-005 0.926194347978344 3.57400000000024e-005 0.920512547354844 3.57399999999934e-005 0.914830713599236 3.57400000000123e-005 0.909148989573916 3.57399999999829e-005 0.903466910037855 3.57400000000182e-005 0.897785432196611 3.57399999999851e-005 0.8921033699598 3.57400000000092e-005 0.886421630205502 3.5739999999996e-005 0.880739805039871 3.5740000000001e-005 0.869376169955158 3.57399999999991e-005 0.863694350934584 3.57400000000036e-005 0.858012534823186 3.57399999999922e-005 0.852330719842665 3.5740000000012e-005 0.846648902824239 3.57399999999855e-005 0.840967082224435 3.57400000000143e-005 0.835285259328209 3.57399999999882e-005 0.829603437711101 3.57400000000077e-005 0.823921620880371 3.57399999999962e-005 0.818239808169468 3.57400000000012e-005 0.809717079158118 3.57399999999992e-005 0.806876168919218 3.57400000000039e-005 0.804035258556415 3.57399999999904e-005 0.801194348411266 3.57400000000155e-005 0.79835343872157 3.57399999999819e-005 0.795512529621849 3.57400000000158e-005 0.792671621143667 3.57399999999897e-005 0.789830713214362 3.57400000000051e-005 0.786989805658849 3.57399999999982e-005 0.784148898197969 3.57400000000003e-005 0.778467082701081 3.57399999999997e-005 0.775626173858472 3.57400000000009e-005 0.772785272736888 3.57399999999982e-005 0.76994435144636 3.5740000000002e-005 0.767103424848904 3.57399999999989e-005 0.764262517928382 3.57399999999992e-005 0.761421626698455 3.5740000000002e-005 0.758580723283862 3.57399999999983e-005 0.755739800653122 3.57400000000006e-005 0.752898897502245 3.574e-005 0.738694353245886 3.57399999999992e-005 0.727330713385101 3.5740000000004e-005 0.715967073767087 3.57399999999903e-005 0.704603436538154 3.57400000000167e-005 0.693239801950169 3.57399999999784e-005 0.681876169023066 3.57400000000216e-005 0.670512536201288 3.57399999999837e-005 0.659148902016668 3.57400000000092e-005 0.647785265745526 3.57399999999962e-005 0.636421628070187 3.57400000000009e-005 0.619376173571342 3.57399999999995e-005 0.613694355194034 3.57400000000021e-005 0.608012536805792 3.57399999999953e-005 0.602330718539708 3.57400000000067e-005 0.596648900461538 3.57399999999934e-005 0.590967082569894 3.57400000000046e-005 0.585285264796492 3.57399999999974e-005 0.579603447005364 3.57400000000012e-005 0.573921628993963 3.57399999999995e-005 0.568239810492125 3.57400000000002e-005 0.556876171833425 3.57399999999997e-005 0.551194381716412 3.57400000000018e-005 0.545512338750805 3.57399999999951e-005 0.539831124223778 3.57400000000087e-005 0.534148472830326 3.57399999999889e-005 0.528467367864546 3.57400000000104e-005 0.522785127254883 3.57399999999927e-005 0.517103476029795 3.57400000000038e-005 0.511421614850711 3.57399999999987e-005 0.505739801558959 3.57400000000001e-005 0.477330709444077 3.57400000000002e-005 0.45460343459111 3.57399999999986e-005 0.431876168855726 3.57400000000031e-005 0.409148892941062 3.57399999999959e-005 0.386421616401226 3.57400000000038e-005 0.363694353094423 3.57399999999974e-005 0.340967094735787 3.57400000000016e-005 0.3182398195524 3.5739999999999e-005 0.295512529039206 3.57400000000007e-005 0.27278526174066 3.57399999999995e-005 0.238694352586961 3.57400000000006e-005 0.227330716242957 3.57399999999965e-005 0.215967079932214 3.57400000000091e-005 0.204603443647389 3.57399999999842e-005 0.193239807381152 3.57400000000201e-005 0.18187617112625 3.57399999999809e-005 0.170512534875218 3.57400000000138e-005 0.15914889862092 3.57399999999927e-005 0.14778526235586 3.57400000000026e-005 0.136421626072833 3.57399999999996e-005 0.11369435345609 3.574e-005 0.102330720164933 3.57400000000006e-005 0.0909670720224507 3.5739999999998e-005 0.0796034515750348 3.5740000000004e-005 0.0682398130430839 3.57399999999938e-005 0.0568761602582731 3.57400000000073e-005 0.0455125336292754 3.57399999999935e-005 0.0341489129281276 3.57400000000043e-005 0.0227852491190059 3.5739999999998e-005 0.0114216268927474 3.57400000000005e-005 5.79899999999939e-005 3.574e-005 - 5.799e-005 12 0.03130799 10 0.06255799 10 0.12505799 10 0.18755799 10 0.21880799 10 0.25005799 10 0.37505799 10 0.43755799 10 0.50005799 10 0.75005799 10 0.87505799 10 1.00005799 12 -8 0 1 -7 0 0 11 12 2 0 0 0.0909090901741543 0 0.181818184108565 0 0.272727343983139 0 0.363636084535339 0 0.454545975255027 0 0.545453860419655 0 0.636364187834514 0 0.727272474909878 0 0.818181870562669 0 0.909090908561348 0 1 0 - 0 12 1 12 -8 0 1 -7 0 0 2 3 2 0 1.07764908108265e-011 0 0.499999976118536 0 0.999999999989224 - 0 3 1 3 -8 6.281e-005 1.00006281 -7 0 0 11 52 6 2.22139684312905e-016 0 0.159445921344642 0 0.318891844450831 0 0.47833776870749 0 0.637783693505315 0 0.797229618231324 0 0.956675542278511 0 1.1161214650321 0 1.27556738588548 0 1.43501330422508 0 1.59445921944215 0 1.91335104240829 0 2.07279862626797 0 2.23223255313714 0 2.39171925574075 0 2.55107620757855 0 2.71065119525303 0 2.86996902109924 0 3.02948460396835 0 3.18892600440825 0 3.34836312230645 0 3.66725396373815 0 3.82670434855582 0 3.98618024347122 0 4.14550903373577 0 4.30516394215646 0 4.46435927562755 0 4.6240173097608 0 4.78337254913853 0 4.9428294724407 0 5.10227108944369 0 5.34143895191086 0 5.42116184728818 0 5.50088537457551 0 5.58060964899185 0 5.66033446589812 0 5.74005932432541 0 5.81978355172696 0 5.8995065299841 0 5.97922802264097 0 6.05894860338187 0 6.21839176811596 0 6.29811400146086 0 6.37783667457054 0 6.45755961260225 0 6.5372826771078 0 6.61700576599509 0 6.69672881357544 0 6.77645179051782 0 6.85617470388367 0 6.93589759710626 0 7.01562055 0 - 6.281e-005 12 0.25006281 10 0.50006281 10 0.75006281 10 0.87506281 10 1.00006281 12 -8 6.28099999999687e-005 1.00006281 -7 0 0 9 18 3 1.00006281 3.88e-005 0.944507237358673 3.88e-005 0.888951652809529 3.88e-005 0.833396218670292 3.88000000000001e-005 0.7778405439425 3.87999999999995e-005 0.722284967812953 3.88000000000011e-005 0.666729534788824 3.87999999999988e-005 0.611173909425782 3.88000000000008e-005 0.555618358179738 3.87999999999998e-005 0.444507252754543 3.88000000000002e-005 0.388951734360358 3.87999999999993e-005 0.333396022232517 3.88000000000013e-005 0.277840815075917 3.87999999999985e-005 0.222284742967548 3.88000000000012e-005 0.166729704962631 3.87999999999994e-005 0.111173807719118 3.88000000000003e-005 0.0556183700697033 3.87999999999999e-005 6.28100000001075e-005 3.88e-005 - 6.281e-005 10 0.50006281 8 1.00006281 10 -8 0 1 -1 7.01562055 0 0 1 -8 5.543e-005 1.00005543 -7 0 0 10 29 4 7.01562055 1 6.84023003682772 1 6.66484004973113 0.99999999999999 6.48945006516268 1.00000000000003 6.31405975646539 0.999999999999938 6.13866899387289 1.00000000000009 5.96327784450889 0.999999999999918 5.7878865723882 1.00000000000005 5.61249563841569 0.999999999999979 5.43710570038679 1 5.08632952558854 1 4.91096763054934 0.999999999999972 4.73545031445841 1.00000000000007 4.56040863674769 0.99999999999989 4.38449022132834 1.00000000000012 4.20956487724138 0.999999999999907 4.03389988431036 1.00000000000005 3.85859492206002 0.999999999999987 3.68320064219735 0.999999999999998 3.1570295314241 1.00000000000002 2.80624867078815 0.999999999999923 2.45546771118764 1.00000000000018 2.10468667377609 0.999999999999717 1.75390557971188 1.00000000000032 1.40312445014609 0.999999999999721 1.05234330623828 1.00000000000018 0.701562169140263 0.999999999999919 0.350781060009398 1.00000000000002 0 1 - 5.543e-005 11 0.25005543 9 0.50005543 9 1.00005543 11 -8 5.54299999999675e-005 1.00005543 -7 0 0 8 23 4 5.54299999999813e-005 7.14491407 0.0313054258217603 7.14491407000003 0.0625554279719316 7.14491406999989 0.0938054298787953 7.14491407000019 0.125055429993017 7.14491406999978 0.156305429501241 7.14491407000017 0.187555430039607 7.14491406999992 0.218805431407366 7.14491407000002 0.281305427153427 7.14491407 0.312555438035834 7.14491406999997 0.343805409089175 7.14491407000004 0.375055437251669 7.14491406999997 0.406305457103626 7.14491407 0.437555414912181 7.14491407000001 0.468805428244396 7.14491407 0.562555435124715 7.14491406999999 0.625055410412666 7.14491407000003 0.687555500400519 7.14491406999993 0.750055317824769 7.1449140700001 0.812555531560356 7.14491406999991 0.875055392858892 7.14491407000005 0.937555434355485 7.14491406999999 1.00005543 7.14491407 - 5.543e-005 9 0.25005543 7 0.50005543 7 1.00005543 9 -8 3.88e-005 8.09360706 -7 0 0 2 3 2 5.543e-005 7.14491407029497 5.543e-005 3.5724741632494 5.543e-005 3.42497050276336e-005 - 3.88e-005 3 8.09360706 3 -8 3.88000000004496e-005 8.09360706 -7 0 0 10 20 3 6.281e-005 3.88000000000264e-005 6.28100000000002e-005 0.404717214062959 6.28099999999994e-005 0.809395615605185 6.28100000000003e-005 1.21407403623817 6.28100000000014e-005 1.61875245715844 6.28099999999963e-005 2.02343086719106 6.28100000000048e-005 2.42810927361238 6.28099999999962e-005 2.83278768771172 6.28100000000019e-005 3.23746610703796 6.28099999999994e-005 3.64214451629207 6.28100000000007e-005 4.45150134133179 6.28099999999971e-005 4.85617973684956 6.2810000000007e-005 5.26085825409687 6.28099999999884e-005 5.66553635636097 6.28100000000141e-005 6.07021533536986 6.28099999999878e-005 6.47489305553737 6.28100000000076e-005 6.87957204197316 6.28099999999968e-005 7.28425014323844 6.28100000000008e-005 7.68892864784028 6.281e-005 8.09360706 - 3.88e-005 11 4.04682293 9 8.09360706 11 -8 5.543e-005 1.00005543 -7 0 0 10 11 2 5.54300000000785e-005 3.425e-005 0.10005545327349 3.42500000000009e-005 0.200055324657142 3.42499999999963e-005 0.300055662485614 3.42500000000084e-005 0.400055158026799 3.42499999999869e-005 0.500055620126499 3.42500000000149e-005 0.600055344652079 3.42499999999875e-005 0.700055458153806 3.42500000000075e-005 0.800055425654538 3.42499999999969e-005 0.90005543187508 3.42500000000007e-005 1.00005543 3.425e-005 - 5.543e-005 11 1.00005543 11 -8 5.54299999999675e-005 1.00005543 -7 0 0 8 16 3 2.77555756156289e-017 1.82448587 0.0625000144690981 1.82448587 0.125000014464461 1.82448587 0.187500001770316 1.82448587000001 0.249999989421712 1.82448586999998 0.312499991198303 1.82448587000002 0.375000011118271 1.82448586999999 0.437500032932087 1.82448587 0.562499986300738 1.82448587 0.625000121917143 1.82448587000001 0.687499775377622 1.82448586999998 0.7500000340545 1.82448587000003 0.812500076573746 1.82448586999997 0.874999965719539 1.82448587000002 0.937499999703886 1.82448586999999 1 1.82448587 - 5.543e-005 9 0.50005543 7 1.00005543 9 -8 6.281e-005 1.00006281 -7 0 0 9 18 3 1.00006281 8.09360706 0.944507262123437 8.09360705999998 0.888951632699342 8.09360706000008 0.83339626900489 8.0936070599998 0.777840456749281 8.09360706000038 0.72228509180494 8.09360705999948 0.666729482521586 8.09360706000045 0.611173902735136 8.09360705999974 0.555618364121602 8.09360706000007 0.444507254115184 8.09360705999993 0.388951680536548 8.09360706000022 0.333396173807954 8.09360705999962 0.277840563533612 8.09360706000047 0.222285018814967 8.09360705999955 0.166729516055836 8.09360706000032 0.111173885702575 8.09360705999984 0.0556183656141817 8.09360706000004 6.28099999999965e-005 8.09360706 - 6.281e-005 10 0.50006281 8 1.00006281 10 -8 6.28099999999687e-005 1.00006281 -7 0 0 9 34 5 2.07179401 1 2.07179400999999 0.972222223863225 2.07179401000001 0.94444443843988 2.07179401 0.916666703954082 2.07179400999997 0.888888815180695 2.07179401000004 0.861111037920439 2.07179400999996 0.833333377038953 2.07179401000002 0.805555564553543 2.07179401 0.777777787350623 2.07179400999998 0.722222223069936 2.07179401000009 0.694444431046355 2.07179400999983 0.666666705911611 2.07179401000022 0.638888849631174 2.0717940099998 0.611111078291679 2.07179401000013 0.583333407902705 2.07179400999995 0.555555571521531 2.07179401000001 0.527777641824197 2.07179400999999 0.472222104014092 2.07179401000002 0.444444486025565 2.07179400999998 0.416666844772189 2.07179401 0.388888582870524 2.07179401000003 0.361111351569702 2.07179400999996 0.333333217176735 2.07179401000003 0.305555577557909 2.07179400999999 0.277777777380392 2.07179401000001 0.222222222012139 2.07179401 0.194444441954192 2.07179400999997 0.166666661641139 2.07179401000007 0.138888882453199 2.07179400999991 0.111111105032001 2.07179401000007 0.0833333292807435 2.07179400999996 0.0555555543640008 2.07179401000001 0.0277777787079004 2.07179401 -1.38642352802046e-017 - 6.281e-005 10 0.25006281 8 0.50006281 8 0.75006281 8 1.00006281 10 -8 3.88e-005 8.09360706 -7 0 0 9 18 3 1.00006281 3.87999999991173e-005 1.00006281 0.449681481039108 1.00006280999998 0.899324096853196 1.00006281000004 1.34896697113894 1.00006280999995 1.79860934603414 1.00006281000004 2.24825233294654 1.00006280999998 2.69789481803233 1.00006281000001 3.14753757469811 1.00006281 3.59718024225551 1.00006281 4.49646560460157 1.00006281000002 4.94610830258812 1.00006280999996 5.39575089012877 1.00006281000005 5.84539381376743 1.00006280999994 6.29503611630151 1.00006281000004 6.74467917602574 1.00006280999998 7.19432161781887 1.00006281 7.64396437929334 1.00006281 8.09360706 - 3.88e-005 10 4.04682293 8 8.09360706 10 -8 3.88000000004496e-005 8.09360706 -7 0 0 9 18 3 5.799e-005 3.57399999999707e-005 5.79900000000002e-005 0.428094351372108 5.79899999999992e-005 0.856152918921198 5.79900000000013e-005 1.28421166064277 5.79899999999987e-005 1.71227006615661 5.79900000000007e-005 2.14032888392304 5.799e-005 2.56838736386191 5.79899999999998e-005 2.99644602677515 5.79900000000001e-005 3.42450462979809 5.79899999999998e-005 4.2806218543772 5.79900000000011e-005 4.7086804579054 5.79899999999973e-005 5.13673911920207 5.79900000000042e-005 5.56479760462291 5.79899999999954e-005 5.9928564152031 5.79900000000034e-005 6.42091482932701 5.79899999999983e-005 6.84897356705444 5.79900000000005e-005 7.27703213737074 5.799e-005 7.70509075 - 3.88e-005 10 4.04682293 8 8.09360706 10 -8 5.799e-005 1.00005799 -7 0 0 11 22 3 1.00005799 7.70509075 0.954603407580899 7.70509074999959 0.909149067890989 7.70509075000166 0.863693887762444 7.70509074999612 0.818240717793713 7.70509075000643 0.772784058791765 7.70509074999189 0.727331742842822 7.70509075000799 0.681875648622276 7.70509074999384 0.63642176049988 7.70509075000362 0.590967076371366 7.70509074999849 0.545512530797722 7.70509075000034 0.454603450176526 7.70509074999971 0.409148898743847 7.70509075000107 0.363694369317895 7.70509074999746 0.318239781021119 7.70509075000443 0.272785250852391 7.70509074999412 0.227330754631083 7.70509075000602 0.181876181767242 7.70509074999526 0.136421588614998 7.70509075000281 0.0909671093936988 7.70509074999883 0.0455125321542873 7.70509075000029 5.79900000000633e-005 7.70509075 - 5.799e-005 12 0.50005799 10 1.00005799 12 -8 5.79899999999522e-005 1.00005799 -7 0 0 10 47 6 1.98405473 1 1.98405472999996 0.993749999999979 1.98405473000017 0.987501010538497 1.98405472999965 0.981250143598927 1.98405473000051 0.974999362400682 1.98405472999946 0.968749735856847 1.98405473000043 0.96250044642989 1.98405472999974 0.956250318308421 1.9840547300001 0.949999632876465 1.98405472999998 0.943749998396367 1.98405473 0.931250083342912 1.98405473000005 0.925000050696024 1.98405472999987 0.918750017113937 1.98405473000022 0.912500010677875 1.98405472999975 0.906250027877974 1.98405473000021 0.900000048129629 1.98405472999987 0.893750048284903 1.98405473000005 0.88750001714921 1.98405472999999 0.881249969993403 1.98405473 0.862499949220526 1.98405473000003 0.849999959763311 1.98405472999996 0.837499980959357 1.98405473000001 0.825000002537759 1.98405473000005 0.812500017693341 1.98405472999992 0.800000023088577 1.98405473000007 0.787500018851834 1.98405472999997 0.775000008578436 1.98405473 0.762499999330354 1.98405473000001 0.725000006247591 1.98405472999991 0.700000350498769 1.9840547300002 0.674996486762471 1.98405472999968 0.650007686697422 1.98405473000035 0.624991474489992 1.98405472999973 0.600005682245333 1.98405473000015 0.574997740730977 1.98405472999994 0.550000439097731 1.98405473000001 0.524999995741942 1.98405472999996 0.449999999528852 1.98405473000014 0.40000000113115 1.98405472999969 0.350000001971501 1.98405473000045 0.300000002210569 1.98405472999952 0.250000002008464 1.98405473000037 0.200000001526079 1.98405472999979 0.150000000923435 1.98405473000009 0.100000000361322 1.98405472999998 0.0499999999999964 1.98405473 -5.55111512312578e-017 - 5.799e-005 11 0.06255799 9 0.12505799 9 0.25005799 9 0.50005799 9 1.00005799 11 -8 0.00020743 46.24578153 -7 0 0 4 5 2 1.00005799 3.57400000003949e-005 1.00005799 1.92629949072116 1.00005799 3.85256323841487 1.00005799 5.77882699422172 1.00005799 7.70509075 - 0.00020743 5 46.24578153 5 -8 0.000207430000003228 46.24578153 -7 0 0 10 11 2 0.00034374 0.000207429999999286 0.000343740000000005 4.62476482606811 0.000343739999999984 9.24932228893823 0.000343740000000034 13.8738794491178 0.000343739999999949 18.4984374085628 0.000343740000000058 23.1229939899904 0.000343739999999951 27.7475523153813 0.000343740000000031 32.3721090590755 0.000343739999999986 36.9966667961182 0.000343740000000003 41.6212241209749 0.00034374 46.24578153 - 0.00020743 11 46.24578153 11 -8 0.00034374 1.00034374 -7 0 0 6 22 5 1.00034374 46.24578153 0.958677071650599 46.24578153 0.917010447139227 46.2457815299999 0.875343762317089 46.2457815300002 0.833677068698062 46.2457815299998 0.792010424068354 46.2457815300001 0.708677062123799 46.2457815299999 0.667010336655569 46.2457815300003 0.62534387426246 46.2457815299997 0.583677010082887 46.2457815300003 0.542010425148763 46.2457815299999 0.458677091242933 46.2457815300001 0.417010362128915 46.2457815299999 0.375343770968326 46.2457815300001 0.333677072792701 46.24578153 0.292010405879796 46.24578153 0.208677057109782 46.24578153 0.167010433442731 46.24578153 0.125343748252506 46.2457815300001 0.0836770509214932 46.2457815299999 0.0420104048748928 46.24578153 0.000343740000000009 46.24578153 - 0.00034374 7 0.25034374 5 0.50034374 5 0.75034374 5 1.00034374 7 -8 0.000343739999999926 1.00034374 -7 0 0 10 29 4 1 0 0.950000024955944 0 0.899999996798145 0 0.849999948840411 0 0.799999905629308 0 0.749999882946107 0 0.699999887804226 0 0.649999918451849 0 0.599999964369802 0 0.550000006272922 0 0.475000021027584 0 0.449995269226255 0 0.425024202491394 0 0.399946682111777 0 0.375053906040032 0 0.349969226815634 0 0.325009943364576 0 0.299998634070113 0 0.274999893344682 0 0.225000103904678 0 0.20000560074254 0 0.174981436573636 0 0.149999878782888 0 0.125016095508731 0 0.0999806152668234 0 0.0750097040431328 0 0.049997810442273 0 0.0249999989263508 0 -1.38777878078145e-017 0 - 0.00034374 11 0.50034374 9 0.75034374 9 1.00034374 11 -8 0.48181163 12.06882334 -7 0 0 10 11 2 0 11.58701171 0 10.4283105398355 0 9.26960932710873 0 8.11090829996033 0 6.95220686281626 0 5.79350601461831 0 4.63480457588211 0 3.47610355319894 0 2.31740233219096 0 1.1587011700806 0 -1.37824154703343e-015 - 0.48181163 11 12.06882334 11 -8 0.481811629999999 12.06882334 -7 0 0 11 12 2 0.0792074399999997 1 0.252375374203454 1.00000000000003 0.425543359551064 0.999999999999889 0.59871110344283 1.00000000000027 0.771879437724079 0.999999999999529 0.945046812318046 1.00000000000061 1.11821530078407 0.999999999999387 1.2913828501376 1.00000000000047 1.46455097025993 0.999999999999725 1.63771885026562 1.00000000000012 1.8108867941332 0.999999999999972 1.98405473 1 - 0.48181163 12 12.06882334 12 -8 0.19391992 2.76255331 -7 0 0 2 3 2 1 -3.04465785916364e-010 1 5.61082069513139 1 11.2216414103045 - 0.19391992 3 2.76255331 3 -8 0.19391992 2.76255331 -7 0 0 6 7 2 0 0 0 0.428105565911718 0 0.856211133737532 0 1.28431669137203 0 1.71242226731611 0 2.14052782546412 0 2.56863339 - 0.19391992 7 2.76255331 7 -8 0 0.09090909 -7 0 0 11 22 3 1 11.22164141 0.998070983243245 11.2219748896762 0.9961089067382 11.2223165137146 0.994109756255573 11.2226669036589 0.992066627925749 11.2230272030845 0.989978606641132 11.2233975366598 0.987835342234588 11.2237796804743 0.985636773545764 11.2241736444904 0.983373434173871 11.2245810833801 0.981041384124558 11.2250027102487 0.978633361339818 11.2254398296213 0.973651588164366 11.2263475679635 0.971077821888384 11.2268181896145 0.968414079334354 11.2273068569465 0.965652734495061 11.227814971045 0.962785419963412 11.2283440800889 0.959802935364425 11.228895896047 0.956695138304173 11.2294723153094 0.95345074839591 11.2300754553079 0.950057063676501 11.2307077083176 0.946499657160258 11.2313717988602 0.942762190000001 11.23207082 - 0 12 0.045454545 10 0.09090909 12 -7 0 0 7 8 2 1.2763119 0.65056074 1.2761892741829 0.650815451387967 1.27603993643422 0.65108397936635 1.27590621199672 0.651378175653639 1.27572570925855 0.65170044506319 1.27554497216911 0.652065805209218 1.2753268840792 0.652485454086663 1.27506871855941 0.652985405529875 - 0 8 0.09090909 8 -7 0 0 11 12 2 0.942762190000001 11.23207082 0.939960314677771 11.2325948556375 0.937387403142818 11.2330756149436 0.935007302571951 11.2335199072641 0.932791854933754 11.2339330344071 0.93071850256379 11.2343192419955 0.928768761555735 11.2346820073594 0.926927202744974 11.2350242315405 0.925180750418341 11.2353483713643 0.923518182940206 11.2356565334784 0.921929763569305 11.2359505438637 0.920406957829693 11.2362320010235 - 0.09090909 12 0.109634221545924 12 -7 0 0 4 5 2 1.27506871855941 0.652985405529875 1.2748993715054 0.653313355227138 1.2747753046873 0.6535533781779 1.27466957977923 0.653757905222991 1.27457777 0.65393546 - 0.09090909 5 0.109634221545924 5 -7 0 0 11 22 3 0.920406957829693 11.2362320010235 0.918233210525194 11.2366337704197 0.916193160686883 11.2370099607643 0.914261984386188 11.2373652215669 0.912419849510035 11.2377032578455 0.910650240665427 11.238027145364 0.908939016360462 11.2383395077592 0.907273671471029 11.2386426546013 0.90564276223303 11.2389386878931 0.904035541615462 11.2392295686927 0.902442040906436 11.239517104172 0.898148023823803 11.2402895646017 0.895454079850674 11.2407716477164 0.892720045165465 11.2412584083405 0.889896039710571 11.2417586918366 0.886931121928895 11.2422814591955 0.883753789406898 11.2428391376774 0.880297094277138 11.2434432864178 0.87644407691601 11.2441140528144 0.872047089486371 11.2448767168203 0.866880031137277 11.2457699821667 0.86046065 11.24687623 - 0.109634221545924 12 0.136363635 10 0.18181818 12 -7 0 0 7 8 2 1.27457777 0.65393546 1.27437552851933 0.654326579926238 1.27424377225826 0.654608009358054 1.27409928666095 0.654885194752602 1.27398811159714 0.655125482712034 1.27382318684184 0.655458022751369 1.27366391706507 0.655786407927048 1.27334147610436 0.656453911880128 - 0.109634221545924 8 0.18181818 8 -7 0 0 10 11 2 1.2729392 0.65728834 1.2729820004056 0.657199405818655 1.2730242290814 0.657111691936532 1.27306588602602 0.657025198356451 1.27310697123841 0.65693992508063 1.27314748471774 0.656855872110753 1.27318742646344 0.656773039448038 1.2732267964751 0.656691427093294 1.27326559475252 0.656611035046984 1.27330382129559 0.65653186330928 1.27334147610436 0.656453911880128 - 0.6 11 0.633484377590191 11 -7 0 0 8 9 2 0.84647518 11.24929061 0.848223366721428 11.2489888122028 0.849971566075599 11.2486870121632 0.85171971437114 11.2483852208762 0.853467981126687 11.2480834090775 0.855216065536353 11.2477816286963 0.856964314971532 11.2474798197642 0.8587124693038 11.2471780271886 0.86046065 11.24687623 - 0.6 9 0.633484377590191 9 -8 0.27272727 0.36363636 -7 0 0 10 29 4 0.84647518 11.24929061 0.842421385941215 11.2499929270255 0.838680216515283 11.2506442794008 0.835197775445094 11.2512536836733 0.831932553933594 11.2518281040313 0.828851534248018 11.252373099032 0.825927595132777 11.252893253451 0.8231378865983 11.2533924497624 0.820462841642635 11.2538740342308 0.817885492451023 11.2543409320767 0.812896024809033 11.2552506012185 0.810483923867752 11.2556933693465 0.80813933264208 11.2561267033384 0.805849294793766 11.2565528826331 0.803601978137562 11.2569740198868 0.801386525972044 11.2573920822839 0.79919291972088 11.257808913492 0.797011538019915 11.258226314796 0.794832665180111 11.2586461373977 0.788274978997787 11.2599184181711 0.783875055194636 11.2607836968111 0.779369914101869 11.2616810261009 0.774681737247538 11.2626260143096 0.769721500499504 11.2636370290822 0.764388320673333 11.2647352699268 0.758545292943835 11.2659499053641 0.752012087751825 11.267319798196 0.744527655171355 11.2689014749327 0.73560521 11.2708009 - 0.27272727 11 0.2954545425 9 0.318181815 9 0.36363636 11 -7 0 0 9 18 3 1.2729392 0.657288339999999 1.27275855454563 0.657663695016555 1.27340345747101 0.656328626868788 1.27134263989192 0.660582655955935 1.27384330712594 0.655367661012608 1.27137599190512 0.660484222976582 1.27264662599304 0.657811900979999 1.27203754026811 0.659059317269334 1.27201316957581 0.659084152443856 1.27178961345928 0.659494763475301 1.27168100464153 0.659694105413195 1.27156985314144 0.659896992135768 1.27145044703858 0.660112932006966 1.27131707440842 0.660351433388263 1.27116402333153 0.660622004644244 1.27098558188368 0.660934154136542 1.27077603814406 0.661297390228917 1.27052968019006 0.661721221283981 - 0.27272727 10 0.318181815 8 0.36363636 10 -7 0 0 9 18 3 1.26914508582996 0.664044173172146 1.26921966581855 0.663922129766095 1.26929452009627 0.663799264502761 1.2693695917321 0.663675668197376 1.26944482266119 0.663551434280105 1.26952015394561 0.663426658392303 1.26959552605394 0.663301437943886 1.26967087915595 0.663175871636984 1.26974615342833 0.663050058961068 1.26990128660093 0.662789990804151 1.26998112701312 0.662655715747612 1.2700607387348 0.66252139498754 1.27014005029312 0.662387149371015 1.2702189909952 0.662253099462722 1.2702974913203 0.662119364876925 1.27037548329971 0.66198606361563 1.27045290086986 0.661853311438825 1.27052968019006 0.661721221283981 - 0.48389543156306 10 0.5 8 0.517146533720261 10 -7 0 0 3 4 2 0.68082736 11.28239685 0.698850208113797 11.27863500758 0.717630162781317 11.2746274550465 0.73560521 11.2708009 - 0.48389543156306 4 0.517146533720261 4 -7 0 0 9 10 2 1.26861337345316 0.664905705801424 1.26867121075329 0.664812943990424 1.26872942116647 0.66471934465519 1.26878797902892 0.664624946804857 1.26884685781868 0.664529791114731 1.26890603021811 0.664433919838782 1.26896546818412 0.66433737670811 1.26902514302531 0.66424020681654 1.26908502548507 0.664142456494476 1.26914508582996 0.664044173172146 - 0.470926189373896 10 0.48389543156306 10 -7 0 0 3 4 2 0.66023824 11.28670238 0.666899996877013 11.2853022403314 0.673797738092064 11.283864117416 0.68082736 11.28239685 - 0.470926189373896 4 0.48389543156306 4 -7 0 0 10 38 5 0.66023824 11.28670238 0.654874163858785 11.2878297756157 0.649939895854102 11.2888737803654 0.645359981347406 11.289849528495 0.641075966782311 11.2907687985359 0.637043290812959 11.2916405960617 0.633223316291641 11.2924727884244 0.629585906322221 11.2932715416005 0.626103724698107 11.294042506276 0.6227539649058 11.2947904432009 0.617897302749234 11.2958842879185 0.616306410911348 11.2962442261399 0.614740976604074 11.2966000243972 0.613198623356011 11.296952188892 0.611677118071778 11.2973011990947 0.610174352866694 11.2976475116037 0.608688326895372 11.2979915639016 0.607217128187252 11.2983337782312 0.605758915475769 11.2986745653583 0.602864884588597 11.2993540914832 0.601429071089034 11.2996928294763 0.600002667284059 11.3000309467273 0.59858397874539 11.3003688293835 0.597171342077771 11.3007068611584 0.595763108876315 11.3010454269568 0.594357655390972 11.3013849104916 0.59295339286286 11.3017256917043 0.59154875349316 11.3020681501304 0.589230123639454 11.3026360602116 0.588317286641091 11.3028603107643 0.587403181519157 11.30308553814 0.586487372675561 11.3033118498475 0.585569422216148 11.3035393547714 0.584648888772369 11.3037681634689 0.583725326315289 11.3039983884703 0.582798282939805 11.3042301445915 0.581867299596913 11.3044635492629 0.580931908751862 11.3046987228826 - 0.54545455 11 0.5681818225 9 0.57954545875 9 0.590909095 9 0.598276846616651 11 -7 0 0 5 6 2 1.26861337345316 0.664905705801424 1.26796393912124 0.665947294959543 1.26756166189023 0.66656295649156 1.26717073982347 0.667150217633228 1.26682293338974 0.667671623059082 1.26640452 0.6682432 - 0.54545455 6 0.598276846616651 6 -7 0 0 10 11 2 1.26428285310632 0.671006307371842 1.26449334488105 0.670745510328659 1.26470410323145 0.670481468162803 1.26491516660836 0.670214109326707 1.26512657406385 0.669943359937039 1.26533836530453 0.669669143655632 1.26555058074762 0.669391381562435 1.26576326157404 0.669109992027756 1.26597644976448 0.668824890602664 1.26619018808903 0.668535989966614 1.26640452 0.6682432 - 0.384100626478303 11 0.4 11 -7 0 0 3 4 2 0.51639486 11.32193444 0.536783985791201 11.3162884947045 0.558030319104041 11.3104565831008 0.580931908751862 11.3046987228826 - 0.384100626478303 4 0.4 4 -8 0.63636364 0.72727273 -7 0 0 10 38 5 0.51639486 11.32193444 0.514127900976736 11.3225621827762 0.511937474820656 11.3231690816184 0.509818780838796 11.3237564538558 0.507767444272568 11.3243255003509 0.505779470285174 11.3248773180943 0.5038512008916 11.3254129119445 0.501979274818926 11.3259332056732 0.500160590312166 11.3264390521174 0.498392270870261 11.3269312426384 0.494950996979526 11.3278897888118 0.493278068642943 11.3283561371835 0.491650155150356 11.3288103024698 0.490064795928529 11.3292529624604 0.488519720367337 11.329684743088 0.487012814940149 11.3301062274771 0.485542100678721 11.3305179621938 0.484105720996033 11.3309204605312 0.482701939863251 11.3313142029938 0.478583571281779 11.3324704985642 0.475961951117587 11.3332081219353 0.473451156284829 11.3339161450608 0.471040193797969 11.3345976224622 0.46871831465979 11.335255555184 0.466477722314083 11.335892125015 0.464309047100013 11.3365099713405 0.462205696835537 11.3371109623896 0.460160408841278 11.3376971686212 0.454179683186378 11.3394169118857 0.450399319190988 11.3405115921032 0.446774229695154 11.34156926681 0.443259294363613 11.3426031740508 0.439813768269339 11.3436255163916 0.436394465540458 11.3446495510073 0.432959457563365 11.3456884775451 0.429457272841364 11.3467588135508 0.425826101412469 11.3478808051031 0.42197703 11.34908406 - 0.63636364 11 0.64772727625 9 0.6590909125 9 0.681818185 9 0.72727273 11 -7 0 0 5 6 2 1.26428285310632 0.671006307371842 1.26303466822787 0.672552795000965 1.26245949580055 0.673164916680664 1.26185615574349 0.673855450111334 1.26142661707783 0.674318357221275 1.26080958600737 0.674960552107723 - 0.63636364 6 0.72727273 6 -8 0.72727273 0.81818182 -7 0 0 9 18 3 0.42197703 11.34908406 0.415980690719686 11.3509585698258 0.4101304366521 11.3528271316506 0.404393119119065 11.3546986194999 0.398738093080379 11.3565817105857 0.393139350585892 11.3584841131144 0.387569837100871 11.3604143185855 0.382005606926226 11.3623802638283 0.376421521257756 11.3643907000638 0.365163364756301 11.3685190019798 0.359489287364656 11.3706368689337 0.353744889461134 11.3728177391148 0.34790454181795 11.3750714505797 0.341941016917537 11.377408884707 0.335825340256547 11.3798420280899 0.329525835741807 11.3823843818077 0.323006343013529 11.3850517329154 0.31622551 11.38786254 - 0.72727273 10 0.772727275 8 0.81818182 10 -7 0 0 5 6 2 1.26080958600737 0.674960552107723 1.25994445923467 0.675860960557384 1.259109438707 0.676680662711418 1.25820876083757 0.677519305417183 1.25721056910586 0.678406487417102 1.25592726076431 0.679433059270539 - 0.72727273 6 0.81818182 6 -7 0 0 10 20 3 1.24899664963209 0.68404912640032 1.24940037579701 0.683827255380109 1.24979971057319 0.683602565672839 1.25019483722801 0.683374976029874 1.25058593331827 0.683144402667796 1.25097317117649 0.68291075909574 1.2513567183633 0.682673955931806 1.2517367380859 0.682433900708535 1.25211338958262 0.68219049766745 1.25248682847352 0.681943647542672 1.2531731288954 0.681479663480256 1.25348682422714 0.681263496701809 1.2537983876128 0.681044683099097 1.25410791190433 0.680823156755555 1.25441548841329 0.680598849642955 1.25472120705808 0.680371691514806 1.25502515651014 0.680141609787402 1.25532742433928 0.679908529408519 1.25562809715789 0.679672372713757 1.25592726076431 0.679433059270539 - 0.274729071771431 11 0.3 9 0.321555342341725 11 -7 0 0 3 4 2 0.2017635 11.44137215 0.237018052337933 11.4220720075448 0.275017974542339 11.4049439935631 0.316225510000001 11.38786254 - 0.274729071771431 4 0.321555342341725 4 -7 0 0 10 20 3 1.23463578 0.689720950000001 1.2358163824156 0.689387858998465 1.23695353292919 0.689049645957188 1.23805067324879 0.688705885896978 1.23911083306573 0.688356166211563 1.24013683748374 0.688000040113008 1.24113113688194 0.687637084774294 1.24209607651861 0.68726683143201 1.24303373719694 0.686888815739619 1.24394607749755 0.686502540837318 1.24527449828719 0.685912102796156 1.24570834238384 0.685714570079349 1.24613665300656 0.68551482746691 1.24655964044426 0.685312810639037 1.24697750726975 0.685108453630299 1.24739044889532 0.684901688713108 1.24779865409844 0.684692446271582 1.24820230551773 0.684480654665821 1.24860158011909 0.684266240086575 1.24899664963209 0.68404912640032 - 0.2 11 0.25 9 0.274729071771431 11 -7 0 0 4 5 2 0.0393362703298748 11.5538234236251 0.082233705750673 11.5186904088694 0.121002384279037 11.4902107293552 0.15956699697509 11.4644726761407 0.2017635 11.44137215 - 0.2 5 0.274729071771431 5 -7 0 0 10 11 2 0.0393362703298748 11.5538234236251 0.0355092350271834 11.5569577668893 0.031660377094284 11.5601313868157 0.0277890195494411 11.563344894027 0.0238944737034269 11.566598917869 0.0199760384397717 11.5698941071066 0.016032999410372 11.5732311307094 0.0120646281180384 11.5766106787542 0.00807018085756455 11.5800334634677 0.00404889748689899 11.5835002204349 0 11.58701171 - 0.983770113025408 11 1 11 -7 0 0 3 4 2 1.23463578 0.68972095 1.23332396645803 0.690091063540609 1.23194546508382 0.690447278875847 1.23049356 0.69078273 - 0.983770113025408 4 1 4 -7 0 0 9 18 3 1.2763119 0.65056074 1.2795802089108 0.640837613268172 1.28258842662084 0.631114047559318 1.2853365588186 0.621390025352046 1.28782459278323 0.611665585640551 1.29005254639861 0.601940673717498 1.2920204023694 0.592215342442264 1.29372817235888 0.582489556200178 1.29517585106192 0.572763331170267 1.29657892186313 0.561271808837366 1.29678584102129 0.559506940244664 1.29698419743507 0.557742057083267 1.29717399110479 0.555977159357011 1.29735522203018 0.554212247062809 1.29752789021088 0.552447320196296 1.29769199564659 0.550682378754047 1.29784753833715 0.548917422734124 1.29799451828249 0.547152452135888 - 0 10 0.5 8 0.590722431411216 10 -7 0 0 4 5 2 0 2.56863339 0.144164643962134 2.549444149143 0.290151503907789 2.5345307167232 0.437406086503872 2.52286309406687 0.58576992 2.5142589 - 0 5 0.590722431411216 5 -7 0 0 9 10 2 1.29799451828249 0.547152452135888 1.29865759128139 0.539190111799102 1.29914639551863 0.531227474764861 1.29946093098874 0.523264540974378 1.29960119773122 0.515301310906554 1.29956719580283 0.507337785229822 1.29935892473626 0.499373958329322 1.29897638551548 0.491409842133733 1.29841957705492 0.483445423335088 1.2976885 0.47548071 - 0.590722431411216 10 1 10 -7 0 0 4 5 2 0.58576992 2.5142589 0.688562679122694 2.50829754655923 0.791921385660117 2.50380333951751 0.895705008966056 2.50071901850037 1 2.49917007 - 0.590722431411216 5 1 5 -8 0.66666667 1 -7 0 0 10 38 5 0.57369412 0.16862534 0.583531818908411 0.169106873283514 0.593428177849613 0.169569688039045 0.603382075699869 0.170013680972164 0.6133924113185 0.17043875634263 0.623458051673828 0.170844823752435 0.633577825119598 0.171231797901025 0.643750538050735 0.171599599355853 0.653974993158393 0.171948155385584 0.664249987514396 0.172277399904712 0.684898549896295 0.172897143248457 0.695272119359376 0.173187642182696 0.705693740847552 0.173458707702648 0.71616215590757 0.173710285211599 0.726676088504725 0.173942326309224 0.737234247995175 0.174154788873807 0.747835330422003 0.174347637107137 0.758478018165362 0.174520841545823 0.769160977915177 0.17467437903531 0.790604736070896 0.174942086303927 0.801365521853324 0.175056256009471 0.812164010535648 0.17515072618136 0.822998349186515 0.175225482143132 0.833868147803271 0.175280528239443 0.844770769332884 0.175315855787672 0.855705904140312 0.175331483228311 0.866671526766104 0.17532741951962 0.877666469287707 0.175303688463767 0.89971205277522 0.175216945612163 0.910762698219543 0.175153933924891 0.921839794538032 0.175071309433361 0.932941911148946 0.174969106171806 0.944067619737002 0.174847364303858 0.955215497195062 0.174706130059974 0.966384115610232 0.174545455850903 0.977572033388829 0.174365400346981 0.988777801652607 0.174166028314662 1 0.17394741 - 0.66666667 11 0.7500000025 9 0.833333335 9 0.9166666675 9 1 11 -7 0 0 6 7 2 1.27806415187964 0.368547891748681 1.28306907016081 0.384882348058484 1.28752929190375 0.40196431131988 1.29131070202547 0.419673540394115 1.2943138124956 0.437917356226014 1.29645562676565 0.456566877421156 1.2976885 0.47548071 - 0.66666667 7 1 7 -7 0 0 10 29 4 1.27806415187964 0.368547891748681 1.27733907536754 0.366181473369245 1.27660000763965 0.363818448816778 1.2758469788278 0.361458938635611 1.27508002089391 0.359103063014397 1.27429916762317 0.35675094175115 1.27350445461613 0.354402694218394 1.27269591927962 0.352058439328408 1.27187360081663 0.34971829549858 1.27103754021501 0.347382380616876 1.26787409374552 0.338702526705394 1.26545884851774 0.332386462010016 1.26294290764026 0.326104986091066 1.26032723166943 0.319860436284313 1.2576128767342 0.313655113949982 1.25480099224577 0.307491279552674 1.25189281822922 0.301371147973047 1.24888968225469 0.295296884038498 1.24579299599166 0.289270598285761 1.2415317926002 0.281284370939317 1.24044892059225 0.279280058111341 1.2393556921717 0.277281482632895 1.2382521650771 0.275288721767496 1.23713839809263 0.273301852064066 1.2360144510198 0.271320949324279 1.23488038463944 0.269346088557528 1.23373626068687 0.267377343955402 1.232582141835 0.265414788877995 1.23141809167887 0.263458495843353 - 0.408181166309187 11 0.5 9 0.75 9 0.834081581640313 11 -7 0 0 4 5 2 0.57369412 0.16862534 0.463513448824709 0.16323224472903 0.355120059168907 0.154693212054554 0.250282910653485 0.142388280782469 0.15044892 0.12565888 - 0.408181166309187 5 0.834081581640313 5 -7 0 0 10 11 2 1.23141809167887 0.263458495843353 1.22912106827577 0.259598137369789 1.22678537313026 0.255762162813843 1.22441149489971 0.251951129396252 1.22199993622376 0.24816558157006 1.21955121326316 0.244406050704722 1.2170658553298 0.240673054954837 1.21454440387705 0.236967098297783 1.211987409935 0.233288667479993 1.20939544149301 0.229638242816745 1.20676907 0.22601628 - 0.834081581640313 11 1 11 -7 0 0 3 4 2 0.15044892 0.12565888 0.0985923600462589 0.116969162175933 0.048356476095935 0.106945353340889 0 0.0954315 - 0.834081581640313 4 1 4 -8 0 0.22601628 -7 0 0 9 26 4 1.20676907 0.22601628 1.20676907000001 0.219738050016548 1.20676906999998 0.213459803236317 1.20676907000005 0.20718161960739 1.20676906999993 0.200903320172189 1.20676907000006 0.194625156537015 1.20676906999997 0.188346885537016 1.20676907000001 0.182068670918783 1.20676907 0.175790438246499 1.20676907 0.163233978312979 1.20676907000003 0.156955748348477 1.20676906999994 0.150677518386259 1.20676907000008 0.144399288426403 1.20676906999992 0.138121058468883 1.20676907000005 0.131842828513823 1.20676906999998 0.12556459856119 1.20676907 0.119286368611071 1.20676907 0.100451678768316 1.20676906999998 0.0878952188832814 1.20676907000005 0.0753387590087188 1.20676906999993 0.0627822991449571 1.20676907000008 0.0502258392923426 1.20676906999994 0.0376693794512005 1.20676907000003 0.025112919621874 1.20676906999999 0.0125564598046948 1.20676907 0 - 0 10 0.05650407 8 0.11300814 8 0.22601628 10 -8 0 0.22601628 -7 0 0 9 26 4 1.20676907 0.22601628 1.20676906999999 0.219738050016546 1.20676907000003 0.213459803236325 1.20676906999993 0.207181619607371 1.20676907000009 0.200903320172216 1.20676906999992 0.194625156536987 1.20676907000005 0.188346885537036 1.20676906999998 0.182068670918775 1.20676907 0.1757904382465 1.20676907 0.16323397831298 1.20676906999999 0.156955748348474 1.20676907000001 0.150677518386269 1.20676907 0.144399288426389 1.20676906999999 0.138121058468898 1.20676907000001 0.131842828513814 1.20676906999999 0.125564598561194 1.20676907 0.11928636861107 1.20676906999999 0.100451678768316 1.20676907000002 0.0878952188832842 1.20676906999995 0.0753387590087117 1.20676907000008 0.0627822991449662 1.20676906999992 0.0502258392923335 1.20676907000006 0.0376693794512061 1.20676906999997 0.0251129196218712 1.20676907000001 0.0125564598046953 1.20676907 -6.93889390390723e-018 - 0 10 0.05650407 8 0.11300814 8 0.22601628 10 -8 0 1 -7 0 0 1 2 2 1.78417229 3.86028986554265e-011 1.78417229 1.00000000011581 - 0 2 1 2 -8 0 1 -7 0 0 1 2 2 0 1.56619606173081e-010 0 4.05709804046985 - 0 2 1 2 -8 0.69078273 1 -7 0 0 8 9 2 1.23049356 1 1.23049356000001 0.961347841151065 1.23049355999998 0.922695683390375 1.23049356000005 0.884043519662025 1.23049355999994 0.845391372099344 1.23049356000005 0.806739199218751 1.23049355999998 0.768087051467067 1.23049356000001 0.72943488858991 1.23049356 0.69078273 - 0.69078273 9 1 9 -8 0.69078273 1 -7 0 0 8 9 2 1.23049356 1 1.23049356000001 0.961347841151067 1.23049355999998 0.922695683390373 1.23049356000005 0.88404351966202 1.23049355999994 0.84539137209936 1.23049356000005 0.806739199218732 1.23049355999998 0.768087051467078 1.23049356000001 0.729434888589907 1.23049356 0.69078273 - 0.69078273 9 1 9 -7 0 0 10 20 3 0.55367883 0.69078275 0.554092120542089 0.690876352509526 0.554504279876802 0.690965937350908 0.554915309737323 0.691051504909554 0.555325207068619 0.691133054506088 0.555733974648744 0.691210586759935 0.556141611812068 0.691284101522476 0.556548117080241 0.691353598463827 0.556953492519029 0.691419078044755 0.557357736819609 0.69148053997262 0.557829211316113 0.691547725889667 0.557897539683077 0.69155735189432 0.557965835531715 0.691566862361291 0.55803409886202 0.691576257290576 0.558102329673988 0.691585536682175 0.558170527967613 0.691594700536086 0.558238693742891 0.691603748852307 0.558306826999817 0.691612681630836 0.558374927738386 0.691621498871673 0.558442995958592 0.691630200574814 - 0 11 0.03125 9 0.0365494431488469 11 -7 0 0 3 4 2 1.90484754 1 1.9069746670639 0.997504267501124 1.90909560330242 0.995324422644333 1.91118283 0.993162 - 0 4 0.0365494431488469 4 -7 0 0 10 11 2 0.558442995958592 0.691630200574814 0.558773567192057 0.691672460130479 0.559103371470327 0.691711994695445 0.559432408792824 0.691748804269525 0.559760679158968 0.691782888852533 0.560088182568173 0.69181424844429 0.560414919019887 0.691842883044571 0.560740888513486 0.691868792653275 0.56106609104844 0.691891977270101 0.561390526624132 0.691912436894956 0.561714195240008 0.691930171527613 - 0.0365494431488469 11 0.0622860270214097 11 -7 0 0 3 4 2 1.91118283 0.993162 1.91265256686044 0.991639312362698 1.91409015813018 0.990148253592962 1.915532 0.98858095 - 0.0365494431488469 4 0.0622860270214097 4 -7 0 0 10 29 4 0.561714195240007 0.691930171527613 0.561716886208558 0.691930318972674 0.561719577124096 0.691930466229378 0.561722267986619 0.691930613297725 0.561724958796129 0.691930760177715 0.561727649552625 0.691930906869349 0.561730340256108 0.691931053372626 0.561733030906576 0.691931199687546 0.561735721504031 0.691931345814109 0.561738412048472 0.691931491752315 0.562134039338063 0.691952923754415 0.56252584537091 0.691970192435708 0.562916520637047 0.691983443546566 0.563306065134312 0.691992677086529 0.56369447886205 0.691997893057195 0.564081761817387 0.691999091456936 0.564467913999979 0.691996272288038 0.564852935407231 0.691989435549081 0.565236826038096 0.69197858124136 0.566002345743375 0.691948837487997 0.566383974703956 0.691929948058767 0.566764473764611 0.691907040942101 0.567143838918329 0.691880116683593 0.567522080332035 0.691849173905362 0.567899180156233 0.691814215019459 0.568275161042156 0.691775236977224 0.568650002079016 0.691732242581509 0.569023716993094 0.691685230000956 0.5693963 0.6916342 - 0.0622860270214097 11 0.0625 9 0.09375 9 0.125 11 -7 0 0 6 7 2 1.915532 0.988580949999999 1.917288720057 0.986671379685847 1.91904798662786 0.984673474195285 1.92064522630782 0.982827946373936 1.92257589954775 0.980477480289714 1.92413438721136 0.978537659484705 1.92581296 0.976356 - 0.0622860270214097 7 0.125 7 -8 0.80952381 0.85714286 -7 0 0 11 12 2 1.93442335 0.96340193 1.93373359642299 0.964646284749983 1.93304874331018 0.965834897004273 1.93236074984078 0.966984942932673 1.93166209010196 0.968111085694746 1.93094620500901 0.969225098839624 1.93020519306335 0.970339970399669 1.92943200453574 0.971466153208711 1.92861746637073 0.972616611830435 1.92775167046244 0.973804178723761 1.92682216054156 0.975044330137597 1.92581296 0.976356 - 0.80952381 12 0.85714286 12 -7 0 0 10 29 4 0.575760441157504 0.690115264049866 0.57547977878412 0.690217964118478 0.575200450536556 0.69031616911943 0.574921415641058 0.690410220167916 0.574641633323649 0.690500458378728 0.574360062810575 0.690587224867277 0.574075663328083 0.690670860748299 0.573787394102035 0.690751707137056 0.57349421435898 0.690830105148531 0.573195083324746 0.690906395897771 0.572735898676154 0.691018182800941 0.572581082283445 0.691054942429499 0.572424376486814 0.691091202599597 0.572265646724586 0.691126966523947 0.57210475843676 0.691162237417746 0.571941577061078 0.691197018492705 0.571775968037631 0.691231312964336 0.571607796804614 0.691265124044889 0.571436928801392 0.691298454948805 0.571089530132214 0.691364162830015 0.570920610201144 0.691395460118083 0.570689304165743 0.691434666100074 0.570676402268529 0.691441593716491 0.570151309146928 0.691521996339706 0.570391483962445 0.691488621654998 0.569872503573977 0.691567588238779 0.569780083251934 0.69158017324198 0.569602342170593 0.691605979761762 0.5693963 0.6916342 - 0.80952381 11 0.833333335 9 0.8452380975 9 0.85714286 11 -8 0.76190476 0.80952381 -7 0 0 9 26 4 1.94080727 0.94944064 1.94066601212516 0.94982882257534 1.94052217501372 0.950217873948559 1.94037581503828 0.950607617046903 1.94022687451437 0.950998184535788 1.94007551605315 0.951389123552017 1.93992162464551 0.951780726165032 1.93976533390682 0.952172625088767 1.93960663134154 0.952564847391261 1.93928449542553 0.953349684767435 1.93912106092833 0.953742303089256 1.93895529293502 0.954135029495101 1.93878722842007 0.954527766724518 1.93861690615432 0.954920416777972 1.93844436559268 0.955312883509145 1.93826964679337 0.95570507283894 1.938092791359 0.956096890590253 1.9375559505058 0.95727093265191 1.93718968784614 0.958051751384909 1.93681541459414 0.958829913882799 1.93643347627074 0.959604709913551 1.93604429179377 0.960375335876309 1.93564826696779 0.961141060240794 1.93524579737434 0.961901217859903 1.93483735106812 0.962655050697246 1.93442335 0.96340193 - 0.76190476 10 0.7738095225 8 0.785714285 8 0.80952381 10 -7 0 0 4 5 2 0.580535470821911 0.687679143844734 0.579547194292696 0.688355302219083 0.578416193063627 0.689016286958931 0.577138730382161 0.689610920000394 0.575760441157504 0.690115264049867 - 0.76190476 5 0.80952381 5 -8 0.71428571 0.76190476 -7 0 0 9 18 3 1.94439319 0.93775271 1.94417432086634 0.938568904817766 1.94396086146547 0.939353228228349 1.94375204529926 0.940108808533583 1.94354720413216 0.940838309733982 1.9433456704142 0.941544298885141 1.94314687925189 0.942228883990704 1.94295023331238 0.942894202746216 1.94275519252445 0.943542103180465 1.94236722021942 0.944806658197058 1.94217429057089 0.945423306990147 1.94198186395174 0.94602612776867 1.94178942827873 0.946616709112234 1.94159639495054 0.947196764951491 1.94140227501348 0.947767640591339 1.94120644083064 0.948330972338505 1.94100832921614 0.948888123264217 1.94080727 0.94944064 - 0.71428571 10 0.738095235 8 0.76190476 10 -7 0 0 4 5 2 0.583403528425449 0.685311831786704 0.582616794045971 0.686085923698913 0.581907705060018 0.686682139500429 0.581238798770231 0.687197941399759 0.580535470821911 0.687679143844733 - 0.71428571 5 0.76190476 5 -8 0.66666667 0.71428571 -7 0 0 11 22 3 1.94884185 0.91682829 1.94863326524917 0.918076768189013 1.94843342253581 0.919246998445068 1.94824041254502 0.920352090617507 1.94805262756871 0.921402756656059 1.94786871657916 0.922407745275004 1.94768744172768 0.923374740916632 1.94750766996428 0.924310471081898 1.94732834811746 0.925220882056301 1.94714842597496 0.926111578750255 1.94696685548485 0.926987814748748 1.94659824596264 0.928721581898206 1.94641120529656 0.929579120308595 1.94622035313145 0.930432376458812 1.94602450696904 0.931286570255098 1.94582259084088 0.932146135145097 1.945613107039 0.933017081121342 1.94539475277075 0.933904155633271 1.9451657404447 0.934813912455234 1.94492416106863 0.935752928707559 1.94466761675431 0.936729327754963 1.94439319 0.93775271 - 0.66666667 12 0.69047619 10 0.71428571 12 -7 0 0 5 6 2 0.587084813270479 0.680718288020093 0.586284027862026 0.681960067758119 0.5856512577536 0.682802143567232 0.585002762828827 0.68360443515737 0.584368051003604 0.684362808652132 0.583403528425449 0.685311831786704 - 0.66666667 6 0.71428571 6 -8 0.61904762 0.66666667 -7 0 0 9 18 3 1.95387979 0.87425567 1.95364361442539 0.877133106261122 1.95340556894966 0.879902719593967 1.95316494094418 0.882576609124954 1.95292099734777 0.885165811460621 1.95267306985702 0.887679534694289 1.95242038044545 0.890127132630461 1.9521622133811 0.892516319711729 1.95189774988292 0.89485493467692 1.95135451969203 0.899445448389223 1.95107575223368 0.901697354715867 1.95078897279379 0.903913176304788 1.95049326063127 0.906099814655991 1.95018761873297 0.908263942768147 1.94987095335936 0.910412139390183 1.94954204828454 0.912551021721951 1.94919953373111 0.914687376577705 1.94884185 0.91682829 - 0.61904762 10 0.642857145 8 0.66666667 10 -7 0 0 5 6 2 0.591872613550153 0.670814033050775 0.590944689403003 0.673273508638251 0.590057293952948 0.675343776644359 0.58915386281337 0.677217976731742 0.588208341970092 0.678976029532931 0.587084813270479 0.680718288020093 - 0.61904762 6 0.66666667 6 -7 0 0 11 22 3 1.95495491240121 0.86004919638079 1.95492446783613 0.860478730051908 1.95489466289562 0.860898116600048 1.95486544821325 0.861308067567818 1.95483677755773 0.861709246198773 1.95480860738953 0.862102273917762 1.95478089647598 0.86248773592168 1.95475360554908 0.862866186112903 1.95472669700752 0.863238151352326 1.95470013468373 0.86360413472804 1.95467388365703 0.863964618110201 1.95457800945955 0.86527665014896 1.95451011599114 0.866196788024225 1.95444356592971 0.867089563682689 1.95437773756307 0.867963265429535 1.95431203591898 0.868825619970437 1.95424583324092 0.869684544541156 1.95417846626365 0.870548175047827 1.95410919580993 0.871425343825128 1.95403712651161 0.872326524179322 1.9539611583378 0.873264321754933 1.95387979 0.87425567 - 0.586390813604534 12 0.595238095 10 0.61904762 12 -7 0 0 5 6 2 0.59307675 0.66742789 0.592796417403245 0.668261962277093 0.592569051741754 0.668912655496401 0.592351579242839 0.669521793560653 0.59214057737488 0.670103791284496 0.591872613550153 0.670814033050775 - 0.586390813604534 6 0.61904762 6 -7 0 0 11 12 2 1.95567354 0.84970832 1.95558808763771 0.850954504534697 1.9555083603736 0.85211430494205 1.95543358419912 0.853199210484388 1.95536313095451 0.854218531028882 1.95529647251141 0.855180077085206 1.95523316256762 0.856090433285265 1.95517281686566 0.85695525187742 1.95511509992323 0.857779449464604 1.95505971553901 0.858567347464277 1.95500639929068 0.859322782566608 1.95495491240121 0.86004919638079 - 0.57142857 12 0.586390813604534 12 -7 0 0 4 5 2 0.593909167290605 0.664953675963996 0.593632835669931 0.665773998418988 0.593419989895103 0.666406902040234 0.593237298892547 0.666950210402956 0.59307675 0.66742789 - 0.57142857 5 0.586390813604534 5 -8 0.52380952 0.57142857 -7 0 0 11 22 3 1.95747084 0.82504194 1.95737284874349 0.826274223015519 1.95728435252989 0.827396485383459 1.95720277510489 0.828439872385491 1.9571263581809 0.82942579801752 1.95705378201496 0.830370491430925 1.95698397949523 0.83128723422907 1.95691604816864 0.832187429667258 1.9568491960114 0.833081273741436 1.95678268794389 0.833978426865302 1.95671579148626 0.834888713796064 1.9565797108223 0.836756302603835 1.95651052551326 0.837713618813298 1.95643944321132 0.838704776079447 1.95636565534928 0.839741093844462 1.95628832652971 0.840834460167047 1.95620642221264 0.841999776573641 1.95611881083287 0.84325350331831 1.95602396742193 0.844617985758307 1.95592006427051 0.846120154875581 1.95580452241047 0.847798138509612 1.95567354 0.84970832 - 0.52380952 12 0.547619045 10 0.57142857 12 -7 0 0 5 6 2 0.595912292258761 0.659055839824978 0.595465530871195 0.660349704157464 0.595222651857474 0.661070538981641 0.594870052602272 0.662105533929618 0.594586875743061 0.662941819846589 0.593909167290605 0.664953675963996 - 0.52380952 6 0.57142857 6 -7 0 0 11 22 3 1.95970161035693 0.798742628519546 1.95959490428809 0.799950587770102 1.95949299668386 0.801106648111251 1.95939540431944 0.802216204199119 1.9593017040956 0.80328399249751 1.95921152091501 0.804314225758133 1.95912451868995 0.805310693067415 1.95904039316503 0.806276840020828 1.95895886629784 0.807215831831887 1.95887968298895 0.808130590525064 1.95880260388573 0.809023876571973 1.95860107105185 0.811367315096859 1.95848004368449 0.812783084371046 1.95836325894885 0.814157973681549 1.95824976459074 0.815503235101708 1.95813867209627 0.816829555075282 1.95802911774946 0.818147526952009 1.95792022790388 0.819468087957306 1.95781108057692 0.820803014629487 1.95770065303765 0.822165618996816 1.9575877419292 0.823571835887772 1.95747084 0.82504194 - 0.485827660893864 12 0.5 10 0.52380952 12 -7 0 0 5 6 2 0.5981687 0.65279432 0.597537737890411 0.654487356885709 0.597093881178523 0.655696063555506 0.596695441925308 0.65680635976922 0.596337409685662 0.657824658502932 0.595912292258761 0.659055839824978 - 0.485827660893864 6 0.52380952 6 -7 0 0 11 12 2 1.96065211 0.788049900000001 1.96054851157482 0.789209718675471 1.9604491624102 0.790322990666332 1.96035373406128 0.791393353021102 1.96026193279988 0.79242406049818 1.96017349530073 0.793418033008894 1.96008818413109 0.794377905450237 1.96000578402461 0.795306068900473 1.95992609887587 0.796204703858652 1.95984894927007 0.797075807584623 1.95977417041072 0.797921217055789 1.95970161035693 0.798742628519546 - 0.47619048 12 0.485827660893864 12 -7 0 0 4 5 2 0.599113545079743 0.65025232950052 0.598831703371486 0.651010589314807 0.598587451207332 0.651667719910444 0.598368304677137 0.652257307283129 0.5981687 0.65279432 - 0.47619048 5 0.485827660893864 5 -7 0 0 11 12 2 1.96189831621882 0.774008721238536 1.96181058041611 0.775006589814294 1.9617191925403 0.776043885657193 1.9616237839267 0.777124746710639 1.96152394303248 0.778253780007271 1.96141920690771 0.779436156718791 1.96130905057751 0.780677730191992 1.96119287346136 0.781985186680838 1.96106998148504 0.783366243698886 1.9609395633746 0.784829912674745 1.96080065996133 0.786386838522533 1.96065211 0.7880499 - 0.463237442359126 12 0.47619048 12 -7 0 0 4 5 2 0.60035469 0.64691319 0.600112033205885 0.647566025580183 0.599836808005269 0.648306482686035 0.59951767726932 0.649165062463602 0.599113545079742 0.65025232950052 - 0.463237442359126 5 0.47619048 5 -7 0 0 11 22 3 1.96382484 0.75114736 1.96370537693461 0.752655869150113 1.96359206086613 0.754072390361285 1.96348271658307 0.755426118569833 1.96337574166536 0.756738274922121 1.96326983037159 0.75802588611892 1.96316384598516 0.759303513078893 1.96305674459557 0.760584262171244 1.96294751371838 0.761880584357675 1.96283511991476 0.76320493766324 1.96271846105252 0.764570356852511 1.96254058432518 0.766639270076353 1.96248373214619 0.767298751283835 1.96242561588195 0.767971159420823 1.96236611177473 0.768657924646714 1.96230508823009 0.769360558704155 1.96224240479411 0.770080666782829 1.96217791051975 0.770819966101546 1.96211144196464 0.771580308510051 1.96204282085793 0.772363706686688 1.9619718512968 0.773172365483295 1.96189831621882 0.774008721238536 - 0.42857143 12 0.452380955 10 0.463237442359126 12 -7 0 0 5 6 2 0.602272496442653 0.641459358341834 0.601883891185403 0.64261525829052 0.601571475911531 0.643517389592125 0.601232704655668 0.644484602395185 0.60086723298489 0.645514876879786 0.60035469 0.64691319 - 0.42857143 6 0.463237442359126 6 -8 0.38095238 0.42857143 -7 0 0 11 22 3 1.9700491 0.62814999 1.96987391485199 0.634541424127404 1.96968919632562 0.64080754701908 1.96949484768832 0.646957465717424 1.96929075568842 0.652999405208814 1.96907675958448 0.658941885238066 1.96885270404651 0.664791882402765 1.96861837010538 0.670557332537053 1.96837354211994 0.676244752479178 1.96811795464127 0.681861141460664 1.96785132109679 0.687412939107941 1.96729531619497 0.698400131349307 1.96700594484282 0.703835524269666 1.96670488275012 0.70921907616634 1.96639177401318 0.714556995338308 1.96606622921939 0.719855342657138 1.96572782098787 0.725120094564171 1.96537608113559 0.730357179779355 1.96501049861619 0.735572498747641 1.96463051519485 0.740771963781755 1.96423551849052 0.74596156373635 1.96382484 0.75114736 - 0.38095238 12 0.404761905 10 0.42857143 12 -7 0 0 4 5 2 0.609875901124084 0.611630757447247 0.60823263799465 0.62024165989788 0.606532689105603 0.627698971631196 0.604566335856786 0.634636370717201 0.602272496442653 0.641459358341834 - 0.38095238 5 0.42857143 5 -8 0.33333333 0.38095238 -7 0 0 11 22 3 1.97152657 0.554107540000001 1.97144753333553 0.559180976597245 1.9713727849601 0.563884608818213 1.97130152889872 0.568275711548174 1.9712331147149 0.572400070406147 1.97116699360532 0.576295304206115 1.97110268734946 0.579993140401413 1.97103976723916 0.583520912745181 1.97097783906596 0.58690258633329 1.97091653043933 0.590159566472739 1.97085547851052 0.593311414166114 1.97073315991638 0.599441331231826 1.97067189316829 0.602419404154224 1.97061015537182 0.605328820426953 1.97054757836089 0.608186624557016 1.97048378965522 0.611008822346319 1.97041837332116 0.613811890407742 1.97035090342038 0.616611547168343 1.97028086667028 0.619425526650522 1.97020770272143 0.622271947232936 1.97013072580126 0.62517193140431 1.9700491 0.628149990000001 - 0.33333333 12 0.357142855 10 0.38095238 12 -7 0 0 5 6 2 0.612983757502479 0.593443878167867 0.612127665325399 0.598937411013122 0.611535842163381 0.602451831173291 0.610985714300154 0.605636036058628 0.610488437735424 0.608420989691122 0.609875901124084 0.611630757447247 - 0.33333333 6 0.38095238 6 -7 0 0 11 22 3 1.97160670068336 0.548932228154997 1.97160548838637 0.549010707289708 1.97160428471831 0.549088624941061 1.97160308967917 0.549165981107863 1.97160190326899 0.549242775788757 1.97160072548779 0.549319008982363 1.97159955633559 0.549394680687527 1.97159839581238 0.549469790903679 1.97159724391817 0.549544339631381 1.97159610065292 0.549618326873069 1.97159496601655 0.549691752634083 1.97158516182609 0.550326184713513 1.97157699621673 0.550854399403713 1.9715693429259 0.551349277293674 1.97156220303263 0.551810749262528 1.97155557366218 0.552238999618487 1.97154946016703 0.552633685040818 1.97154385526749 0.552995272587993 1.97153876632109 0.553323290136638 1.97153418782391 0.553618090892493 1.97153012273029 0.553879485263612 1.97152657 0.55410754 - 0.306434487924756 12 0.30952381 10 0.33333333 12 -7 0 0 3 4 2 0.61318127 0.59217018 0.613086106516271 0.592786850359111 0.613019986732055 0.5932113956526 0.61298375750248 0.593443878167867 - 0.306434487924756 4 0.33333333 4 -7 0 0 11 12 2 1.97171749 0.54175305 1.97170547740221 0.542531993072374 1.97169385301376 0.543285675396294 1.97168261669514 0.544014105973124 1.9716717686118 0.544717274156458 1.97166130871596 0.545395182941971 1.97165123695043 0.54604783613002 1.97164155334702 0.546675231598813 1.97163225793909 0.547277367211931 1.97162335069137 0.547854245248704 1.97161483160428 0.548405865683045 1.97160670068336 0.548932228154997 - 0.28571429 12 0.306434487924756 12 -7 0 0 3 4 2 0.613454602532188 0.590403147144828 0.61334559855282 0.591106154068834 0.613254574674235 0.591695158372925 0.61318127 0.59217018 - 0.28571429 4 0.306434487924756 4 -8 0.23809524 0.28571429 -7 0 0 10 38 5 1.97282039 0.47997479 1.97278538215258 0.481590894518991 1.9727521216268 0.483141424351589 1.97272037129726 0.484636355916171 1.97268993280114 0.486084108741229 1.97266063666891 0.487491950788498 1.97263233579273 0.488866265560843 1.97260490065678 0.490212749830985 1.97257821546703 0.491536577981403 1.97255217505448 0.492842536105882 1.97251393716533 0.49478137621125 1.972501328316 0.495424307035466 1.97248884454493 0.496064447767288 1.97247647434224 0.496702339086991 1.9724642066664 0.497338505787069 1.97245203089008 0.497973459321944 1.97243993674248 0.498607700358963 1.97242791425507 0.499241721327704 1.97241595370437 0.499876008971002 1.97239213740992 0.501146084818287 1.97238028168449 0.501781872108207 1.97236846881427 0.502418894461001 1.9723566894702 0.503057631937657 1.97234493450479 0.503698562389819 1.97233319487536 0.504342164413064 1.97232146161803 0.504988919842337 1.97230972578816 0.505639315772052 1.97229797844783 0.506293846117185 1.97223913939836 0.509589679046381 1.97219174058933 0.51230052814841 1.97214343988979 0.515117732036134 1.97209365291765 0.51807576776078 1.97204174328443 0.521213808603559 1.97198698799443 0.524577826381845 1.97192850832057 0.528225109296631 1.97186520199284 0.532228905812855 1.97179559882714 0.536688156315301 1.97171749 0.54175305 - 0.23809524 11 0.2500000025 9 0.25595238375 9 0.261904765 9 0.28571429 11 -7 0 0 6 7 2 0.615865270592698 0.575200528183971 0.615434829533785 0.577850579198309 0.615130848965071 0.579751610914945 0.614823031849282 0.581669962379581 0.614479200096972 0.583850276562349 0.614098941337427 0.586247568200662 0.613454602532188 0.590403147144828 - 0.23809524 7 0.28571429 7 -7 0 0 11 22 3 1.97418937676635 0.424193023169849 1.97414727295315 0.425766406943205 1.97410597381579 0.427315127025188 1.97406544257756 0.42884051808252 1.97402564434077 0.430343854912248 1.97398654591285 0.431826358623685 1.97394811565102 0.433289202212099 1.97391032332221 0.434733515641788 1.97387313997586 0.436160390526147 1.97383653782796 0.437570884462347 1.97380049015563 0.43896602504822 1.97366576597299 0.444203386808607 1.9735706852086 0.44794800249775 1.97347916785648 0.451602469471273 1.97339070977601 0.455187078836117 1.97330485251746 0.458720998981934 1.97322115635076 0.462223460235763 1.97313921120518 0.465713250681062 1.97305859518047 0.469210677056231 1.97297889254083 0.472736853767431 1.97289965447418 0.476315707661576 1.97282039 0.47997479 - 0.205761069651825 12 0.214285715 10 0.23809524 12 -7 0 0 5 6 2 0.61815104 0.56148505 0.617598073827388 0.564712370351046 0.617136945464844 0.567460429330412 0.616711267282509 0.57002240910709 0.61630202903492 0.572511583602929 0.615865270592698 0.575200528183972 - 0.205761069651825 6 0.23809524 6 -7 0 0 11 12 2 1.97520533 0.38726097 1.97509121021274 0.391326478944059 1.97498266664496 0.395207854263088 1.97487918757756 0.3989227496892 1.97478032667264 0.402486616285116 1.97468569109333 0.405913107509503 1.97459493221632 0.409214396974902 1.97450773834365 0.412401428728533 1.97442382892539 0.415484116680937 1.97434294989848 0.418471506601709 1.97426486984451 0.421371910896007 1.97418937676635 0.424193023169849 - 0.19047619 12 0.205761069651825 12 -7 0 0 4 5 2 0.619704552199201 0.552406391229385 0.619235077795086 0.555154866434463 0.618835244670284 0.557490499559363 0.618477784884294 0.559578042541019 0.61815104 0.56148505 - 0.19047619 5 0.205761069651825 5 -7 0 0 10 29 4 1.97626491246814 0.349337349659825 1.97625947964007 0.349533987274137 1.97625401703633 0.349731646941871 1.97624852386213 0.3499303575068 1.97624299931259 0.35013014815646 1.97623744257204 0.350331048446098 1.9762318528134 0.350533088322848 1.97622622919745 0.35073629815007 1.97622057087222 0.350940708731743 1.97621487697224 0.351146351336738 1.97617868431167 0.352453162786685 1.97614719182962 0.353588781552889 1.97611453686841 0.354764891061199 1.97608057584649 0.355986659147662 1.97604515021511 0.357259777439735 1.97600808272065 0.35859059542632 1.97596917277859 0.359986286055604 1.9759281900871 0.361455073316617 1.97588486564221 0.36300655225681 1.97579289293237 0.366297711526549 1.97574424459499 0.368037394432548 1.97569261426991 0.369882584225989 1.97563762968522 0.371846538112112 1.97557885504821 0.373944767227313 1.97551577184815 0.376195719217404 1.97544775451371 0.378621643436785 1.97537403591747 0.381249817039671 1.97529364987676 0.384114588126986 1.97520533 0.38726097 - 0.16442722501096 11 0.166666665 9 0.1785714275 9 0.19047619 11 -7 0 0 6 7 2 0.62128791 0.54308159 0.621131691338104 0.54401924099364 0.620955050946605 0.545061970155311 0.620753204726769 0.546256184613878 0.620498376860182 0.547753433641782 0.620186382620268 0.549585579373079 0.619704552199201 0.552406391229385 - 0.16442722501096 7 0.19047619 7 -7 0 0 10 11 2 1.97674449 0.33168639 1.97669168462482 0.333670208905329 1.97664277230289 0.335497515517267 1.97659610540601 0.337232041761061 1.9765506677277 0.338912828006488 1.97650565260618 0.340570630986732 1.9764604059277 0.342230145249433 1.97641432101342 0.343914046667183 1.97636680709367 0.34564417762242 1.97631724098057 0.347443353804699 1.97626491246814 0.349337349659825 - 0.14285714 11 0.16442722501096 11 -7 0 0 5 6 2 0.622000743676933 0.538738887163246 0.621842949528895 0.539715341811963 0.621711357628224 0.540520942586517 0.621579501537659 0.541324471886604 0.621443140399718 0.542149873383308 0.62128791 0.54308159 - 0.14285714 6 0.16442722501096 6 -8 0.0952381 0.14285714 -7 0 0 8 16 3 1.97906567 0.20832799 1.97901633858566 0.215159194432692 1.9789547594075 0.221917938267826 1.97888119765251 0.22865725922874 1.97879564379903 0.235424888841481 1.9786978742814 0.242265380999785 1.97858743785988 0.249223896319555 1.97846366154864 0.25634664050519 1.9781875219514 0.271021995019375 1.97803515873849 0.278574598595102 1.97786755049477 0.286392691669505 1.97768346875991 0.294531079976813 1.97748136126882 0.303051144381573 1.97725927997115 0.312023668784039 1.97701474305491 0.321533376717525 1.97674449 0.33168639 - 0.0952381 9 0.11904762 7 0.14285714 9 -7 0 0 5 6 2 0.626196129160615 0.508284020466012 0.6256139055767 0.513702436003971 0.624965208497744 0.518905579727557 0.624206149323094 0.524500731441122 0.623292866529717 0.530743030650156 0.622000743676933 0.538738887163246 - 0.0952381 6 0.14285714 6 -7 0 0 9 26 4 0.626196129160615 0.508284020466012 0.626375856394234 0.50661140385936 0.626544760496132 0.504966572431627 0.626703105275748 0.503347649093498 0.626851122679809 0.501752853410485 0.62698901500509 0.500180488273096 0.627116956666424 0.498628927930064 0.627235095519966 0.497096607384662 0.627343553741606 0.495582013154047 0.627588818192983 0.491865292282153 0.627714200083123 0.489682543406569 0.627818888989608 0.487530657582764 0.627903079237975 0.485405064525727 0.627966848886429 0.483301336451229 0.628010160457809 0.481215129606699 0.62803285794198 0.479142125729859 0.628034660064178 0.477077973434504 0.628004268501652 0.473869461750035 0.627986757821806 0.472722064945031 0.627962545471801 0.471575268668467 0.627931545804336 0.470428291537454 0.627893659540036 0.469280341052788 0.627848772813867 0.468130607782352 0.627796756276359 0.46697826162714 0.627737463994285 0.465822447694868 0.627670732073834 0.46466228134557 - 0.916393161028006 10 0.9375 8 0.96875 8 0.986178862274954 10 -7 0 0 4 5 2 1.97906567 0.20832799 1.97942817897546 0.158128751407591 1.9788782974445 0.115372890363099 1.97765667097592 0.0751166767024129 1.97524312 0.0334885 - 0.916393161028006 5 0.986178862274954 5 -7 0 0 9 10 2 0.627670732073834 0.46466228134557 0.627617813469701 0.463742266106212 0.627560216422604 0.46281951383398 0.627497859201542 0.461893583374258 0.627430652972875 0.460964021808509 0.627358501368562 0.460030362900581 0.627281299985365 0.459092125337099 0.627198935799883 0.458148810676049 0.627111286512081 0.457199901236591 0.62701822 0.45624486 - 0.986178862274954 10 1 10 -7 0 0 3 4 2 1.97524312 0.0334885 1.9746057777518 0.0224958228776549 1.97387435381486 0.01138680246768 1.97302096 0 - 0.986178862274954 4 1 4 -7 0 0 10 20 3 0.62701822 0.45624486 0.626578677056948 0.451545829833278 0.626094388734111 0.447141801340734 0.625564836978654 0.442928933164298 0.624987971481874 0.438834099034169 0.624360617611801 0.434798189421269 0.623678434513707 0.430770412476256 0.622935834553153 0.426703789940681 0.62212571886306 0.422552255005031 0.621239054113323 0.418267595584689 0.620185444090915 0.413435212100837 0.620106248384809 0.413073398265097 0.620026472176196 0.412710339310864 0.619946109173764 0.412346006670773 0.619865152967953 0.411980371520569 0.619783597027914 0.411613404765676 0.619701434698388 0.411245077027622 0.619618659196498 0.410875358630283 0.619535263608444 0.410504219585901 0.619451240886078 0.410131629580822 - 0 11 0.166666665 9 0.180106373495116 11 -7 0 0 5 6 2 0.01152171 0 0.0145987835532756 0.0435237130931196 0.0179526208017665 0.0803678383431967 0.0215449705012737 0.116920455681316 0.0256157757245953 0.154624437669632 0.03059095 0.19744373 - 0 6 0.180106373495116 6 -8 0.66666667 0.83333333 -7 0 0 10 29 4 0.04567056 0.32068046 0.04515376585308 0.316591050587293 0.0446501854966428 0.312600769997741 0.0441590781669446 0.308703853281094 0.0436797450746797 0.304894851000344 0.0432115429757919 0.301168738109325 0.0427538730459694 0.297520826847849 0.0423061695288323 0.29394667752756 0.041867898114817 0.290442086167783 0.0414385594913178 0.287003113019581 0.0405967984921446 0.280248889184296 0.0401843761078349 0.276933638410326 0.0397799376808404 0.273676495757779 0.0393830357886999 0.270473907330023 0.0389932468622211 0.267322495778868 0.0386101685322157 0.264219039398337 0.0382334172042125 0.261160452886168 0.0378626258623617 0.258143769777118 0.0374974421013264 0.255166126543837 0.0364176949587387 0.246341992019126 0.035718935865397 0.240604297187558 0.0350385306269539 0.23498944681633 0.0343739735888398 0.229476702140125 0.0337228821987564 0.224046060824603 0.0330830091555598 0.218678359903803 0.0324521163424738 0.213354202447494 0.0318280002025641 0.208054142987581 0.0312083991955097 0.20275786362874 0.03059095 0.19744373 - 0.66666667 11 0.708333335 9 0.75 9 0.83333333 11 -7 0 0 5 6 2 0.612361326426256 0.381449780130372 0.614363669512824 0.389044327558124 0.615874059414133 0.395003082503 0.6171749393396 0.400298381048954 0.618333299727608 0.405174236030784 0.619451240886078 0.410131629580821 - 0.66666667 6 0.83333333 6 -8 0.5 0.66666667 -7 0 0 7 8 2 0.05192274 0.36997388 0.0506133285490218 0.359663968395003 0.0494426640171155 0.350443382709616 0.0484107494691164 0.342312147054885 0.0475175798441837 0.335270221652979 0.0467631588800982 0.329317635807326 0.0461474859103143 0.324454384408322 0.04567056 0.32068046 - 0.5 8 0.66666667 8 -7 0 0 3 4 2 0.609297860587819 0.370020242130715 0.610813048069585 0.375591631152778 0.611822364714738 0.379405589847836 0.612361326426256 0.381449780130372 - 0.5 4 0.66666667 4 -7 0 0 9 26 4 0.0619449186344799 0.449444284630742 0.0618382620997701 0.448588048803597 0.061731104526723 0.447728195471606 0.0616234151907732 0.446864477009541 0.0615151630822231 0.445996643829967 0.0614063168507227 0.445124443933893 0.0612968447489508 0.444247622456356 0.0611867145748575 0.443365921201664 0.0610758936117301 0.442479078162248 0.0605901917959274 0.438593939230301 0.0602078876088785 0.435540198992401 0.0598161812663701 0.432415569429794 0.0594137411932596 0.429209438134148 0.0589991384277245 0.425910452222014 0.0585708168907918 0.422506282240871 0.058127054474838 0.418983314922015 0.0576659149507604 0.415326274775657 0.0567044664373606 0.407709274288903 0.0562041568873424 0.403749309525666 0.055682052688866 0.399620479418027 0.0551356662686294 0.395303217451907 0.0545621682938523 0.390775293161667 0.0539583055063518 0.386011167740359 0.0533202818812298 0.380981062752226 0.0526435850589449 0.375649601174756 0.05192274 0.36997388 - 0.404244838774849 10 0.416666665 8 0.4583333325 8 0.5 10 -7 0 0 5 6 2 0.60421347 0.35165085 0.604983289168265 0.354391454773492 0.60579874760555 0.357305167620019 0.606729637840556 0.360657203780323 0.607819087217837 0.364582748870781 0.609297860587819 0.370020242130715 - 0.404244838774849 6 0.5 6 -7 0 0 9 10 2 0.06732328 0.49316312 0.0666764988320849 0.487835767633053 0.066060520612289 0.482780537556557 0.0654649357659956 0.477909764980001 0.0648819284481093 0.473158005433226 0.0643049583449636 0.468470843127561 0.0637282358874011 0.463800465502714 0.0631463142668568 0.459102249194088 0.0625537804604209 0.454332211193989 0.0619449186344799 0.449444284630742 - 0.33333333 10 0.404244838774849 10 -7 0 0 5 6 2 0.601387555006221 0.341577403675895 0.602005645326975 0.343784340271282 0.602561949700037 0.345768107211971 0.603101557860718 0.347691351610726 0.603643380459581 0.349621294430133 0.604213469999999 0.35165085 - 0.33333333 6 0.404244838774849 6 -7 0 0 11 12 2 0.0737667969251898 0.547374694350679 0.0732215031502526 0.542677620629974 0.0726687795000524 0.537939627751566 0.0721084199094129 0.533159037066309 0.0715402108589464 0.528334124941012 0.0709639298620303 0.523463110479549 0.0703793491432348 0.518544185980364 0.0697862317363207 0.513575485143867 0.0691843273256575 0.508555049288436 0.0685733773942555 0.503480870187897 0.0679531236217151 0.498350959585574 0.06732328 0.49316312 - 0.297103147762731 12 0.33333333 12 -7 0 0 5 6 2 0.59791576 0.32911896 0.598569460918832 0.331490545441361 0.599245629209148 0.333915014807148 0.599938129418867 0.336399355243593 0.600651894843495 0.33895067538009 0.601387555006221 0.341577403675895 - 0.297103147762731 6 0.33333333 6 -7 0 0 11 32 4 0.0913447299999999 0.715532649999999 0.0904963111790493 0.706200451301805 0.0896323577192773 0.696887627555456 0.0887516452403923 0.68757742538305 0.0878530187760875 0.678254738404011 0.086935042941158 0.668902270462438 0.0859965789581961 0.659506725376441 0.0850360438373014 0.650050741025684 0.0840520756415536 0.640520126885509 0.0830430458559684 0.630898521039772 0.0820073002221456 0.621170053544618 0.0804109083304109 0.606392056586726 0.079871649023837 0.601435176989023 0.0793250364492411 0.596445338442777 0.0787708387344558 0.591420431426442 0.0782088160850342 0.586358309809427 0.0776387201419189 0.581256785421949 0.0770602933394382 0.576113622633453 0.0764732682628639 0.570926532921032 0.0758773670064403 0.565693169447297 0.075272300531004 0.56041112163096 0.0745775865292525 0.554382055743448 0.0744972438943882 0.553685330810559 0.0744167394429279 0.552987729365618 0.0743360724997343 0.552289245852792 0.0742552423879896 0.551589874710631 0.0741742484285103 0.550889610366445 0.0740930899392423 0.550188447232164 0.0740117662348977 0.549486379701358 0.0739302766266984 0.548783402147144 0.0738486204222028 0.548079508920771 0.0737667969251898 0.547374694350679 - 0.16666667 12 0.25 10 0.291666665 10 0.297103147762731 12 -7 0 0 4 5 2 0.588030771105816 0.290659941332366 0.590170449712138 0.299816583133491 0.592460967307398 0.30890501319961 0.594973934941205 0.318446185193987 0.59791576 0.32911896 - 0.16666667 5 0.297103147762731 5 -8 0 0.16666667 -7 0 0 9 10 2 0.10836658 1 0.107658100538701 0.970367952486721 0.106657705036611 0.940400688103318 0.105366441460749 0.910033129619932 0.10378357355058 0.87919963829568 0.101906592384323 0.847831675018637 0.0997312653128484 0.815858699441601 0.0972515184692884 0.783205484518925 0.0944593769101453 0.749792283644273 0.09134473 0.71553265 - 0 10 0.16666667 10 -7 0 0 5 6 2 0.57740334 0.22601628 0.578317786763577 0.23811863954492 0.579833006956004 0.25049454933861 0.582004754198583 0.26328124460529 0.584745987498226 0.276602883043307 0.588030771105817 0.290659941332366 - 0 6 0.16666667 6 -8 0 0.22601628 -7 0 0 11 22 3 0.57740334 0.22601628 0.577403340000002 0.215742812981225 0.57740333999999 0.205469311605531 0.577403340000028 0.195195973064021 0.577403339999946 0.184922236988444 0.577403340000077 0.174649146921186 0.577403339999915 0.164375308081853 0.577403340000071 0.154102100148817 0.577403339999954 0.143828509055662 0.577403340000024 0.133555079241959 0.577403339999989 0.123281606631646 0.57740334000002 0.102734672311002 0.577403339999896 0.0924612051372938 0.577403340000258 0.0821877379504031 0.577403339999562 0.0719142707504179 0.577403340000557 0.0616408035376491 0.577403339999457 0.0513673363120816 0.577403340000403 0.0410938690740794 0.577403339999778 0.0308204018236485 0.577403340000086 0.0205469345610711 0.57740333999998 0.0102734672864566 0.57740334 2.65910746569326e-018 - 0 12 0.11300814 10 0.22601628 12 -8 0 0.22601628 -7 0 0 11 22 3 0.57740334 0.22601628 0.57740333999998 0.215742812981233 0.577403340000086 0.205469311605505 0.577403339999778 0.19519597306407 0.577403340000403 0.18492223698838 0.577403339999457 0.174649146921253 0.577403340000557 0.164375308081794 0.577403339999562 0.154102100148857 0.577403340000258 0.143828509055644 0.577403339999896 0.133555079241963 0.57740334000002 0.123281606631646 0.577403339999989 0.102734672311001 0.577403340000024 0.092461205137297 0.577403339999954 0.0821877379503969 0.577403340000071 0.0719142707504271 0.577403339999915 0.0616408035376411 0.577403340000077 0.0513673363120875 0.577403339999946 0.041093869074077 0.577403340000028 0.0308204018236495 0.57740333999999 0.0205469345610711 0.577403340000002 0.0102734672864567 0.57740334 0 - 0 12 0.11300814 10 0.22601628 12 -8 0.83333333 1 -7 0 0 9 10 2 0.09134529 0.28446737 0.0944599438226219 0.250207732190921 0.0972520907121525 0.21679453969962 0.099731845932075 0.184141304968772 0.101907176686121 0.152168329558986 0.10378416431982 0.120800383711978 0.105367037391815 0.0899668633461406 0.106658305657614 0.059599322555451 0.107658706033004 0.0296320503312597 0.10836719 0 - 0.83333333 10 1 10 -7 0 0 5 6 2 1.19614163363155 0.290659939797332 1.1994264168191 0.276602881072571 1.2021676500943 0.263281242752326 1.20433939801217 0.250494549683452 1.20585462019821 0.238118639222945 1.20676907 0.22601628 - 0.83333333 6 1 6 -7 0 0 11 22 3 0.0737673431417201 0.45262530433427 0.0744762842084175 0.446518603624923 0.0751726666746893 0.440481067973563 0.0758569437863812 0.434509005116552 0.0765295481868687 0.428598845586053 0.0771908936328445 0.422747129193188 0.0778413760900294 0.416950496373523 0.0784813739944967 0.411205686306615 0.0791112498682197 0.405509523754447 0.0797313564986338 0.399858867408228 0.0803420278682206 0.394250682346849 0.0820078511618632 0.378829963852425 0.0830435980052378 0.369101493356542 0.0840526270547483 0.359479905532062 0.0850366014621972 0.349949233533071 0.0859971261837972 0.340493372708981 0.0869356071307365 0.33109765236292 0.0878535674444252 0.321745364087779 0.0887522065676232 0.312422549090648 0.08963291446097 0.303112407276653 0.0904968704178619 0.293799566552231 0.09134529 0.28446737 - 0.702896862227506 12 0.75 10 0.83333333 12 -7 0 0 4 5 2 1.18625665 0.32911895 1.18919847308686 0.318446177937178 1.19171143910573 0.30890500893676 1.1940019562357 0.299816577873038 1.19614163363155 0.290659939797332 - 0.702896862227506 5 0.83333333 5 -7 0 0 11 12 2 0.06732382 0.50683689 0.0679536642094862 0.501649049413337 0.0685739197192156 0.496519128319759 0.0691848681086084 0.491444965606367 0.0697867736555298 0.486424524096771 0.070379892966129 0.48145581127454 0.0709644737852453 0.476536889572493 0.0715407544594214 0.471665881336457 0.0721089643872501 0.466840965525304 0.0726693247039646 0.462060372362742 0.0732220488717613 0.457322378691483 0.0737673431417201 0.45262530433427 - 0.66666667 12 0.702896862227506 12 -7 0 0 5 6 2 1.18278485474595 0.341577394560763 1.18352051498107 0.338950666007563 1.18423428036575 0.336399346019039 1.184926780955 0.333915004214082 1.18560294902315 0.331490535651878 1.18625665 0.32911895 - 0.66666667 6 0.702896862227506 6 -7 0 0 9 10 2 0.0619454509369303 0.550555722766231 0.0625543136221414 0.545667795839402 0.0631468482879982 0.540897757460859 0.0637287706465414 0.536199541822945 0.0643054938882444 0.531529164603679 0.0648824660213891 0.526841992633514 0.0654654720053174 0.522090251357865 0.066061059741688 0.517219462676534 0.0666770380778206 0.512164239775711 0.06732382 0.50683689 - 0.59575517380927 10 0.66666667 10 -7 0 0 5 6 2 1.17995894 0.35165084 1.18052902951734 0.349621284512292 1.18107085247616 0.347691340410312 1.18161046014577 0.345768097762253 1.18216676477296 0.343784329913509 1.18278485474595 0.341577394560763 - 0.59575517380927 6 0.66666667 6 -7 0 0 9 26 4 0.05192326 0.63002613 0.0526441053116105 0.624350413179063 0.0533208023782567 0.619018955675301 0.053958827548031 0.61398884420312 0.0545626895728969 0.609224730213041 0.0551361879616269 0.604696807858579 0.0556825761655834 0.60037953682195 0.0562046800875089 0.59625071367811 0.0567049904117416 0.59229074745706 0.0576664401125355 0.584673746600663 0.0581275797380933 0.581016710004877 0.0585713436939493 0.577493734782492 0.0589996657995196 0.574089564444337 0.0594142682493003 0.570790585052769 0.0598167088889891 0.567584453252444 0.0602084167614431 0.564459815535435 0.0605907210275388 0.561406078526201 0.0610764236959044 0.557520937819413 0.0611872449340922 0.556634093735971 0.0612973753825629 0.555752391439066 0.0614068477604628 0.554875568901474 0.0615156942699925 0.554003367926629 0.0616239466577047 0.553135533656256 0.0617316362729867 0.552271814099649 0.0618387941247213 0.551411959676439 0.0619454509369303 0.550555722766231 - 0.5 10 0.5416666675 8 0.583333335 8 0.59575517380927 10 -7 0 0 5 6 2 1.17487454732213 0.370020230653315 1.1763533203152 0.364582741317736 1.17744277040648 0.36065719549727 1.17837366121183 0.357305158967741 1.17918912023729 0.35439144548592 1.17995894 0.35165084 - 0.5 6 0.59575517380927 6 -8 0.33333333 0.5 -7 0 0 4 5 2 0.04567107 0.67931955 0.0465056900874428 0.672715194308066 0.0478259281176727 0.662298175035368 0.0496317850043979 0.648068484965373 0.05192326 0.63002613 - 0.33333333 5 0.5 5 -7 0 0 3 4 2 1.17181108032962 0.381449767861762 1.17235004124898 0.379405581447932 1.17335935843405 0.375591622245512 1.17487454732213 0.370020230653315 - 0.33333333 4 0.5 4 -8 0.16666667 0.33333333 -7 0 0 9 26 4 0.03059144 0.80255628 0.0312774961760819 0.796651684515529 0.0319662396528051 0.790769427622821 0.0326610584008135 0.784878502294036 0.0333651271483642 0.778950467587187 0.0340816328673224 0.77295738685565 0.0348137229882589 0.76687220627137 0.0355647394455922 0.760666725207016 0.0363382127290277 0.754311656707208 0.037537933348081 0.744507062956475 0.0379444252772077 0.741193533736758 0.0383579873121365 0.73783070918492 0.0387791259552348 0.734414477418582 0.0392083726394971 0.730940550249598 0.0396462877782642 0.727404430556199 0.0400934653866326 0.723801375476566 0.0405505382746159 0.720126355426935 0.0414858293494274 0.712621662457414 0.0419640470484137 0.708791993419467 0.0424535185097829 0.704879606670172 0.0429549515908204 0.70087892098166 0.0434691493179271 0.696783620600102 0.0439969117643358 0.692587439323138 0.044539155545877 0.68828320786648 0.0450968536293839 0.683863338580951 0.04567107 0.67931955 - 0.16666667 10 0.25 8 0.291666665 8 0.33333333 10 -7 0 0 5 6 2 1.16472116397153 0.410131615670975 1.16583910574461 0.405174220254121 1.1669974655328 0.400298369308289 1.1682983465528 0.395003067786363 1.16980873641148 0.389044315232951 1.17181108032962 0.381449767861762 - 0.16666667 6 0.33333333 6 -7 0 0 10 29 4 1.16472116397153 0.410131615670975 1.16463714120216 0.410504205819946 1.16455374556836 0.410875345006588 1.16447097002197 0.411245063544589 1.16438880764919 0.411613391421737 1.16430725166711 0.411980358314189 1.16422629542049 0.412345993600447 1.16414593237846 0.412710326375118 1.16406615613146 0.413073385462487 1.16398696038816 0.413435199429946 1.1634208446313 0.416031689698026 1.16295543127886 0.41822080086075 1.16251062712592 0.420369881085363 1.1620851315297 0.422485317818533 1.16167779020499 0.42457325180349 1.16128757570661 0.426639680567258 1.16091357238823 0.428690556828209 1.16055496501954 0.430731890088259 1.1602110302693 0.432769859690313 1.1595512302066 0.436852035522525 1.15923536493673 0.438896241581472 1.15893289645026 0.440950049757891 1.15864327309641 0.443020241053069 1.15836602159906 0.445114047493984 1.15810074625136 0.447239285300139 1.15784712655975 0.44940456606296 1.1576049179691 0.451619561950213 1.1573739607778 0.45389532584534 1.15715419 0.45624484 - 0.819893620897672 11 0.833333335 9 0.9166666675 9 1 11 -7 0 0 5 6 2 0.03059144 0.80255628 0.0256162615055831 0.845375575835192 0.0215454517262361 0.883079567509442 0.0179530997213153 0.919632168923602 0.0145992580912778 0.956476300165538 0.01152218 1 - 0.819893620897672 6 1 6 -8 0.95238095 1 -7 0 0 11 12 2 0.00992432 0.01565901 0.0100200272780714 0.0142275044655274 0.0101167718386408 0.0127976096477753 0.010214560665559 0.0113692205433015 0.0103133748347515 0.00994262334039353 0.0104132473739023 0.00851731457222071 0.0105141380011249 0.00709391556061794 0.010616081497651 0.00567187944069551 0.0107190574221378 0.00425153961485812 0.0108230727887155 0.00283277010448512 0.0109281272428452 0.00141558767143496 0.01103422 8.67361737988404e-019 - 0.95238095 12 1 12 -7 0 0 8 30 5 1.15680965029242 0.460183043874983 1.15681925617559 0.460059347152079 1.15682898122755 0.459935228544936 1.15683873331072 0.459811852458051 1.15684869419605 0.459686986334159 1.15685861195543 0.459563714366519 1.156868425119 0.45944278198196 1.15687863162603 0.45931807069201 1.15689899958258 0.459071335128202 1.15690926696619 0.458948005499707 1.15691961766675 0.458824715520599 1.1569300515963 0.458701466686957 1.15694056866619 0.458578260494702 1.15695116878849 0.458455098439911 1.15696185187478 0.458331982018565 1.1569833837989 0.45808584343479 1.1569942325646 0.457962821736292 1.15700516432604 0.457839845936462 1.15701617927577 0.457716914340715 1.15702727760556 0.457594025254234 1.15703845950813 0.457471176982474 1.15704972517538 0.457348367830662 1.15707242442403 0.457102824377658 1.15708386779644 0.456980004070078 1.15709506372058 0.456860655138224 1.15710769901854 0.456727133644948 1.15711825023203 0.456616469677338 1.1571305858498 0.456487928851324 1.15714225853476 0.456367279359252 1.15715419 0.45624484 - 0.95238095 9 0.9642857125 7 0.976190475 7 0.9880952375 7 1 9 -7 0 0 11 12 2 0.00604403560224287 0.0976197411686703 0.00626870213996237 0.0899138097079333 0.00651781083008766 0.0822825916843202 0.00679161618777302 0.0747179227978116 0.0070904380825137 0.0672118299911649 0.00741466328183968 0.0597564849966344 0.00776474772423031 0.0523441602869657 0.00814121953955524 0.0449671868877856 0.00854468292678559 0.0376179127264714 0.00897582321889605 0.03028865597524 0.00943541350067638 0.0229716451188031 0.00992432000000001 0.01565901 - 0.929879242695092 12 0.95238095 12 -7 0 0 4 5 2 1.15618823 0.48072882 1.15611292594389 0.475432186197534 1.15619203614034 0.470295233572656 1.15641708838123 0.465238135748288 1.15680965029242 0.460183043874983 - 0.929879242695092 5 0.95238095 5 -7 0 0 10 20 3 1.15618823 0.48072882 1.15621182033281 0.482388149904415 1.15624531784567 0.484002926752861 1.15628824304018 0.485580788131087 1.15634023583293 0.487128346189039 1.15640103292563 0.488651492587151 1.15647045240182 0.490155537686529 1.15654838392006 0.491645353970972 1.15663478218757 0.493125499545744 1.15672966231643 0.494600275857587 1.1569023817993 0.497060842942585 1.15697550413541 0.498047310441059 1.15705248722927 0.499034471096024 1.15713336500263 0.500023535391104 1.15721818288403 0.501015690270811 1.15730699771964 0.502012108274091 1.1573998778439 0.503013956016934 1.1574969033149 0.504022402282972 1.15759816631886 0.505038625981444 1.15770377174819 0.506063824231818 - 0.125 11 0.15625 9 0.177182002986322 11 -7 0 0 4 5 2 0.00604403560224287 0.0976197411686703 0.00523602956254487 0.125333877973273 0.00493504768138352 0.149511427243877 0.00480787082176291 0.173608790283708 0.00493494 0.19936977 - 0.125 5 0.177182002986322 5 -8 0.85714286 0.9047619 -7 0 0 11 22 3 0.00706201 0.32223301 0.00687710146822796 0.315103333321966 0.00670408139917526 0.30824637789236 0.00654211073443794 0.301634920748467 0.00639046658772291 0.29524473386505 0.00624852244213882 0.289053947896529 0.00611573887408807 0.283042858047227 0.00599164603384736 0.277193272491385 0.0058758362753103 0.271488249612433 0.00576796410059705 0.265912137406608 0.00566773298586681 0.260450004049063 0.00548206042118976 0.24972523567881 0.0053966189195666 0.2444625999087 0.00531832601334422 0.239285479411824 0.00524698463774126 0.234180373959566 0.00518244164408558 0.229133956116951 0.00512459113897169 0.224133776665809 0.00507336456920362 0.219166603482849 0.00502874179956438 0.21422013970726 0.00499074189518771 0.209280921051415 0.00495943453559047 0.204335577590766 0.00493494 0.19936977 - 0.85714286 12 0.88095238 10 0.9047619 12 -7 0 0 5 6 2 1.16182353748536 0.536411045142013 1.1605990685778 0.528687870226675 1.15967914694525 0.522426214462651 1.15891381105662 0.516777642683665 1.15826200589711 0.511483059553337 1.15770377174819 0.506063824231818 - 0.85714286 6 0.9047619 6 -8 0.80952381 0.85714286 -7 0 0 9 26 4 0.00875086 0.38373641 0.00865986440340725 0.380497409467172 0.00857551870620454 0.37749270230661 0.00849691911033711 0.374690294614368 0.00842334175509056 0.372064547674941 0.00835419750714322 0.369594582313611 0.00828898516789808 0.367262620183079 0.00822728378119564 0.365053714691917 0.00816872709797485 0.362954844685754 0.00805726691782629 0.358954519546038 0.00800436337446579 0.357053062763004 0.00795396801258821 0.355238974625307 0.00790580905197734 0.353502555840722 0.00785965007152752 0.351835346665151 0.00781528202680317 0.350229843003888 0.00777251754403077 0.348679292476323 0.00773118652347007 0.347177536004622 0.00761102320844719 0.342801509452582 0.00753602073615774 0.340056485196552 0.00746486951909043 0.337438076525532 0.0073965295671725 0.334907848336523 0.00733004640357743 0.332429881288167 0.00726449285273363 0.329968616391742 0.00719884698765557 0.327483996104936 0.00713192710919425 0.324928835574208 0.00706201 0.32223301 - 0.80952381 10 0.8214285725 8 0.833333335 8 0.85714286 10 -7 0 0 6 7 2 1.16431660337733 0.551540022700136 1.16350444616466 0.546762206749304 1.16307769035792 0.544162243815551 1.16270037552831 0.541879988301636 1.16241056286636 0.540082033755734 1.16213921109061 0.538402114457371 1.16182353748536 0.536411045142013 - 0.80952381 7 0.85714286 7 -7 0 0 11 12 2 0.00909064694457245 0.395882219887666 0.009062062227876 0.394855622200121 0.00903305685300032 0.393814920682742 0.00900361844236404 0.392759682081006 0.0089737341280238 0.391689456391472 0.00894339052220106 0.390603775840232 0.0089125736855287 0.389502153783101 0.00888126909281066 0.388384083520415 0.00884946159607354 0.387249037018834 0.00881713538467461 0.386096463532049 0.00878427394221593 0.384925788111782 0.00875086 0.38373641 - 0.804942507297722 12 0.80952381 12 -7 0 0 3 4 2 1.16482661 0.55452589 1.16466782368687 0.553600567791137 1.1644988540824 0.552612180051156 1.16431660337733 0.551540022700136 - 0.804942507297722 4 0.80952381 4 -7 0 0 11 22 3 0.01101028 0.46988747 0.010932239748402 0.466471693136854 0.0108552515937301 0.463159885983849 0.0107786477230667 0.459918468798578 0.01070186600218 0.456720059036761 0.0106243709878907 0.453539605842363 0.0105456969020087 0.450356031917904 0.0104653377391696 0.447147339690037 0.0103828203434367 0.443893739452215 0.010297619890378 0.440573968615253 0.0102091819104403 0.437166304597892 0.0100423426684138 0.430804770413042 0.00996528447217942 0.42788974761594 0.00988537983323518 0.424889374781816 0.00980227244932146 0.421790322689462 0.0097155709915268 0.41857818013626 0.0096248396427297 0.415237106644651 0.00952958673262927 0.411749424468541 0.00942925092792059 0.408095129569824 0.00932318303687112 0.404251253599222 0.00921062008816836 0.400190961271776 0.00909064694457245 0.395882219887666 - 0.76190476 12 0.785714285 10 0.804942507297722 12 -7 0 0 5 6 2 1.16788888234853 0.572720066171718 1.16733894752605 0.569379578466071 1.16685918354506 0.566501007921239 1.16632006454002 0.563290332164677 1.16572161221846 0.559741496099339 1.16482661 0.55452589 - 0.76190476 6 0.804942507297722 6 -8 0.71428571 0.76190476 -7 0 0 11 22 3 0.01227327 0.53758166 0.0122021660264087 0.532991927724206 0.0121368288514335 0.528837309508138 0.012075932001973 0.525025701554431 0.0120184998600981 0.521490269389102 0.0119637640596063 0.518179246761492 0.0119110885016536 0.515050715564339 0.0118599270278734 0.512069688712588 0.0118097937706867 0.509206097229321 0.0117602377892838 0.506433158974258 0.011710820801669 0.503726079631207 0.0116113784635588 0.498396133608497 0.0115613529531453 0.495773259005153 0.0115105801871475 0.493168735245432 0.0114586052117043 0.490559513304991 0.0114049594969707 0.487923005765879 0.0113490976876604 0.485234171956695 0.0112904370248512 0.482467265899467 0.0112282364364204 0.479590630707974 0.0111616360020968 0.476568566962185 0.0110894975743582 0.473354726037626 0.01101028 0.46988747 - 0.71428571 12 0.738095235 10 0.76190476 12 -7 0 0 5 6 2 1.17055929004495 0.589376325329759 1.16978674308901 0.58440546985396 1.1693534789157 0.581734434530918 1.16889412736152 0.578863577632124 1.16850652716929 0.576471847011659 1.16788888234853 0.572720066171718 - 0.71428571 6 0.76190476 6 -7 0 0 10 11 2 0.0124007899364611 0.545841455231958 0.0123880376598415 0.54501547605539 0.0123752854455191 0.544189496763857 0.0123625332918292 0.543363517249527 0.012349781198742 0.542537537510479 0.0123370291704303 0.541711557816976 0.0123242772137971 0.540885578616115 0.0123115253244109 0.540059599620894 0.0122987734756791 0.539233619108924 0.0122860217088639 0.53840763975268 0.01227327 0.537581660000001 - 0.688716234519205 11 0.71428571 11 -7 0 0 3 4 2 1.17087384 0.59140941 1.17076947536309 0.59073172937687 1.1706646167737 0.590054036816847 1.17055929004495 0.589376325329759 - 0.688716234519205 4 0.71428571 4 -7 0 0 10 11 2 0.01251076 0.552964200000001 0.0124997627830087 0.552251925767335 0.0124887655913925 0.551539650092223 0.0124777684723271 0.550827376030156 0.0124667713958103 0.550115101637936 0.0124557743624856 0.549402826957243 0.0124447773786249 0.548690552394307 0.0124337804457815 0.547978278049735 0.0124227835623036 0.547266003816535 0.0124117867262193 0.546553729566992 0.0124007899364611 0.545841455231958 - 0.66666667 11 0.688716234519205 11 -7 0 0 3 4 2 1.1711451525737 0.593162467933147 1.17105426022413 0.592578153447188 1.17096383766092 0.591993800661399 1.17087384 0.59140941 - 0.66666667 4 0.688716234519205 4 -8 0.61904762 0.66666667 -7 0 0 9 18 3 0.01405168 0.62979303 0.0139443449852295 0.625942449702343 0.0138458863180714 0.622260655924187 0.0137541108259737 0.618683690559154 0.0136674515552209 0.615162916867949 0.013584657260439 0.611656578624458 0.0135046925112499 0.608126978786159 0.0134266355580819 0.604537097170301 0.0133496349306881 0.600848897051465 0.0131960510075816 0.593191346321852 0.0131194677179322 0.58922199365856 0.0130422463459228 0.585069855150375 0.0129635446999062 0.580688468822623 0.0128824717013991 0.576024575555884 0.0127980225056127 0.571014008984676 0.0127090099296265 0.565577066104092 0.0126139444993747 0.559609925510137 0.01251076 0.5529642 - 0.61904762 10 0.642857145 8 0.66666667 10 -7 0 0 6 7 2 1.17433224279194 0.612034956614046 1.17379882073302 0.609205333608813 1.17336626249936 0.606759554301473 1.17292705881374 0.604238401988825 1.17245049281207 0.601380856304864 1.1719083833069 0.598069006004151 1.1711451525737 0.593162467933147 - 0.61904762 7 0.66666667 7 -7 0 0 11 32 4 1.17433224279194 0.612034956614046 1.17458838335775 0.61339369539406 1.1748396841739 0.614694666327968 1.17508733534142 0.615945436701823 1.17533240988957 0.617152565702489 1.17557589850167 0.618321847327933 1.17581873530246 0.619458482775295 1.17606181897911 0.620567213493395 1.17630603099606 0.621652427115853 1.17655225283955 0.622718249196141 1.17680138285556 0.623768620944303 1.17731082155939 0.625860482922133 1.1775712369668 0.626901649654212 1.17783657482973 0.627934874163388 1.17810784484301 0.628964037209942 1.1783861147599 0.629992989017157 1.17867253147423 0.631025625813736 1.17896834444316 0.632065966215473 1.17927493460578 0.633118236323779 1.17959385217495 0.634186972456106 1.17992686646408 0.635277150389838 1.18041872007625 0.636850902833559 1.18056410620259 0.637311968304189 1.18071232974674 0.637777927555955 1.18086353887691 0.638249178417643 1.18101789054234 0.638726137678399 1.18117555137341 0.639209243323251 1.18133669866652 0.639698956954653 1.18150152150458 0.64019576652672 1.18167022204889 0.640700189480416 1.18184301703811 0.641212776364747 1.18202013954388 0.641734115061065 - 0.406675816552983 12 0.4375 10 0.46875 10 0.4815205691812 12 -7 0 0 5 6 2 0.01405168 0.62979303 0.0148776453392194 0.659424096435276 0.0157936089342203 0.681537846607377 0.0169057479237536 0.703144445621927 0.01807951836636 0.72419293338828 0.02032222 0.75230479 - 0.406675816552983 6 0.4815205691812 6 -8 0.52380952 0.57142857 -7 0 0 11 22 3 0.02349338 0.78906361 0.0232016678408236 0.785797739499792 0.0229501956818601 0.782976667689194 0.0227288701628223 0.780488225400435 0.0225312172498049 0.778260374719751 0.0223526122065348 0.776241576625797 0.0221894813731077 0.774391905849015 0.0220391374466859 0.772681236362571 0.0218993193743777 0.771084104715985 0.0217682047200934 0.769579841289704 0.0216442009956327 0.768150222699987 0.0214075921428467 0.765407547385419 0.0212949870384399 0.764094491210498 0.0211866662965583 0.762823313785348 0.0210813873909557 0.761579382837295 0.0209779861744298 0.760348733745845 0.0208753111237305 0.759117295481495 0.0207721499226731 0.757869967797824 0.0206671466659337 0.756589550151377 0.0205586943998766 0.755255339985708 0.020444726349087 0.753840374979318 0.02032222 0.75230479 - 0.52380952 12 0.547619045 10 0.57142857 12 -7 0 0 6 7 2 1.18514547453576 0.650493544781998 1.18408868281196 0.647646645422741 1.18361811721769 0.646309912010288 1.18315326621881 0.645022930658788 1.18280988739955 0.644027738789154 1.18247754698609 0.643080438604606 1.18202013954388 0.641734115061065 - 0.52380952 7 0.57142857 7 -7 0 0 11 12 2 0.0238348542154167 0.792893145357802 0.0238055635665154 0.792564048232601 0.0237759457926424 0.792231401260291 0.0237459935777369 0.791895123410698 0.0237156993845072 0.791555131230117 0.0236850554442694 0.791211338729292 0.0236540537460929 0.790863657263769 0.0236226860251638 0.790511995405626 0.0235909437502549 0.790156258805349 0.0235588181101702 0.789796350042379 0.0235262999990016 0.789432168462517 0.02349338 0.78906361 - 0.520588390320385 12 0.52380952 12 -7 0 0 3 4 2 1.18548451 0.65140388 1.18537734689021 0.651117061905989 1.18526473510458 0.650814821746317 1.18514547453576 0.650493544781996 - 0.520588390320385 4 0.52380952 4 -7 0 0 11 22 3 0.02665329 0.825912910000001 0.0265386019412422 0.824462099938464 0.0264266704309445 0.823060359056727 0.0263163203258581 0.821691656539312 0.0262066077037742 0.82034331894325 0.0260966309122728 0.819003520436921 0.0259856682937489 0.817662953780976 0.025872896703994 0.816311249171635 0.025757605625983 0.814939660920745 0.0256389843608642 0.813538382095101 0.0255162009067546 0.812097555266506 0.0252777364145877 0.809316700860453 0.0251633418086438 0.807989408050457 0.0250445309947175 0.806617335398288 0.0249206447225478 0.80519288810161 0.024790960484886 0.803707822580973 0.0246546589918439 0.802152866564178 0.0245108058398007 0.800517512853695 0.0243583203568216 0.798789672272513 0.0241959222283109 0.796955080867733 0.0240220703079991 0.79499662480162 0.0238348542154167 0.792893145357802 - 0.47619048 12 0.5 10 0.520588390320385 12 -7 0 0 5 6 2 1.18835200447941 0.659262136302128 1.18785059644875 0.657842561785145 1.18742025466232 0.656650768305608 1.18692117397287 0.655279033471583 1.18637075156496 0.653775865761281 1.18548451 0.65140388 - 0.47619048 6 0.520588390320385 6 -7 0 0 10 20 3 0.0278932350697893 0.842648892677029 0.0278403445652367 0.841891802103585 0.0277901305518117 0.841175465353814 0.0277421884116688 0.840493975100643 0.0276961788761013 0.839842400780225 0.0276518090883182 0.839216509725198 0.02760882058671 0.838612591099054 0.02756697989162 0.838027318908646 0.0275260714580649 0.837457650872437 0.0274858928625045 0.83690076124055 0.0273744939168511 0.835364249807223 0.0273044892535617 0.834407566297033 0.0272350652525299 0.833467778869531 0.0271651599084328 0.832530588352063 0.0270935817359974 0.831580351593916 0.0270191884367288 0.830602414208008 0.0269403588894761 0.829576263919692 0.0268552271872972 0.828478763930848 0.0267610749148876 0.827276410594824 0.02665329 0.82591291 - 0.439226064907278 11 0.452380955 9 0.47619048 11 -7 0 0 5 6 2 1.18972319 0.66326176 1.1893876068655 0.662242905902267 1.18915694352065 0.661573541103217 1.18891893215488 0.660879437553825 1.18870867292527 0.660271927541581 1.18835200447941 0.659262136302128 - 0.439226064907278 6 0.47619048 6 -7 0 0 10 11 2 0.02843456 0.85048174 0.0283646252220122 0.849462023668996 0.0282995410513983 0.848514595573224 0.0282386340838159 0.847629510483806 0.0281813625931402 0.846798774713539 0.0281272797576247 0.846015801695631 0.0280760097047385 0.84527505759275 0.0280272313331912 0.844571822124702 0.027980666818157 0.843902018760294 0.0279360730571914 0.843262088499642 0.0278932350697893 0.842648892677029 - 0.42857143 11 0.439226064907278 11 -7 0 0 4 5 2 1.19034199744208 0.665137556196831 1.19014022393904 0.664527071172727 1.18998127696954 0.664045027272314 1.18984410072407 0.663628853542497 1.18972319 0.66326176 - 0.42857143 5 0.439226064907278 5 -7 0 0 11 12 2 0.0295851430584376 0.866721597110353 0.0295030424173013 0.865624468732253 0.0294196157895989 0.864495683755398 0.0293339967222896 0.863323891617491 0.0292453042716024 0.86209716560269 0.0291525933417906 0.860802365883081 0.0290548054327103 0.859424462383049 0.0289507084498607 0.857945674645153 0.0288388174385918 0.856344307341226 0.0287172785051279 0.854593026970906 0.0285836658302899 0.852655837186934 0.02843456 0.85048174 - 0.400518874948611 12 0.42857143 12 -7 0 0 5 6 2 1.1916409 0.66902158 1.19143989009598 0.668445820850433 1.19123716460395 0.667828502313173 1.19099687603274 0.667117986421417 1.1907205675793 0.666282956340352 1.19034199744208 0.665137556196831 - 0.400518874948611 6 0.42857143 6 -7 0 0 11 12 2 0.03023112 0.874933409999999 0.0301655205992715 0.874141530103735 0.0301026391464892 0.873373973090629 0.0300418908695621 0.872624293154913 0.0299827930528082 0.87188708347884 0.0299249330984329 0.871157640611815 0.0298679469524316 0.87043173098827 0.0298115040312728 0.869705424609988 0.0297552959689539 0.868974968159889 0.0296990274133551 0.868236677632811 0.0296424077809247 0.867486837810487 0.0295851430584376 0.866721597110353 - 0.38095238 12 0.400518874948611 12 -7 0 0 4 5 2 1.19235074284817 0.670975712718757 1.1921552847542 0.670458836951191 1.19198452571843 0.669992399630153 1.19181615177494 0.669523566023736 1.1916409 0.66902158 - 0.38095238 5 0.400518874948611 5 -8 0.33333333 0.38095238 -7 0 0 9 18 3 0.03529606 0.917321930000001 0.0349360868241647 0.915185377867076 0.0345913475148285 0.913053642720672 0.0342602809440505 0.910919661831718 0.0339415553266128 0.908776916536387 0.0336339217308661 0.906618643158531 0.0333363304884457 0.904438580383653 0.0330477651795393 0.902230004486973 0.0327673231081541 0.899986193276908 0.0322209707632699 0.895413766430213 0.0319550605184531 0.893085149046086 0.0316955652967407 0.890707013825408 0.0314416797226053 0.888271735738403 0.0311926777106298 0.885771563796402 0.0309478126786792 0.883197570935579 0.0307064050153912 0.880540537560574 0.0304677414682853 0.877789760907654 0.03023112 0.874933410000001 - 0.33333333 10 0.357142855 8 0.38095238 10 -7 0 0 4 5 2 1.19718068974824 0.680826804111174 1.19576370396408 0.678656131232607 1.19462515425407 0.676451512383773 1.19350442368552 0.674026544005482 1.19235074284817 0.670975712718757 - 0.33333333 5 0.38095238 5 -8 0.28571429 0.33333333 -7 0 0 11 22 3 0.03977078 0.93815762 0.0394918900281569 0.937124943915015 0.0392315197920095 0.936141449139086 0.0389866332049127 0.935197162867943 0.0387547839773354 0.934283864003295 0.0385339355151585 0.93339449228728 0.0383223667055562 0.932522888169167 0.038118578879407 0.931663474194667 0.0379212165432236 0.930810951222475 0.0377290372922763 0.929960192679676 0.037540914643547 0.929106277405798 0.0371705480966609 0.927381735341096 0.0369883057222351 0.926511114546196 0.0368079024235218 0.925627017847772 0.0366282617178155 0.924724085469863 0.0364483704499232 0.923796991219585 0.0362670767322847 0.922839271255928 0.0360833477477987 0.921844842410835 0.0358958468502306 0.920805492594414 0.0357032711759 0.919712824847317 0.0355039803406225 0.918555993504656 0.03529606 0.91732193 - 0.28571429 12 0.30952381 10 0.33333333 12 -7 0 0 5 6 2 1.20085071207735 0.685398205381529 1.19988404644341 0.68443934745858 1.19925395344545 0.683681816067817 1.19860853530681 0.68288420159938 1.1979809469242 0.682052713761885 1.19718068974824 0.680826804111174 - 0.28571429 6 0.33333333 6 -8 0.23809524 0.28571429 -7 0 0 9 10 2 0.0423906 0.94698261 0.0421161859608369 0.946161839377729 0.0418381197288348 0.945302669126723 0.041556191658955 0.94440456269717 0.0412701801738961 0.943466880112293 0.0409798766577991 0.942488981161454 0.0406850231312947 0.941469987985604 0.0403854006692708 0.940409115370197 0.0400807403259703 0.939305342466363 0.03977078 0.93815762 - 0.23809524 10 0.28571429 10 -7 0 0 3 4 2 1.20292701545684 0.687210224474421 1.20228349699944 0.686720583245947 1.20158322890817 0.686124805709782 1.20085071207735 0.685398205381529 - 0.23809524 4 0.28571429 4 -7 0 0 9 34 5 0.0461083979788055 0.956415984746819 0.0459866239695226 0.956149248437085 0.0458659432785366 0.955882526092577 0.0457463385567529 0.955615782176497 0.0456277926852196 0.955348980822443 0.045510290526006 0.955082089694021 0.0453938192268216 0.954815080693365 0.0452783567005522 0.954547904544461 0.0451638936012913 0.954280539159944 0.0448880018030585 0.953629969552845 0.0447276035930686 0.953246526643353 0.0445691760255746 0.952862516645396 0.0444126768823888 0.952477836169071 0.0442580654246168 0.952092381645874 0.0441053029479412 0.951706050799089 0.0439543525363129 0.951318741993327 0.043805178014125 0.95093035147567 0.0435840241381341 0.950345977007684 0.0435107405342423 0.950150886618299 0.04343788784849 0.949955486605772 0.0433654624262997 0.949759765778714 0.0432934585449365 0.949563706853757 0.0432218705511358 0.949367292320202 0.0431506953732283 0.949170511547747 0.0430799317948118 0.948973358894998 0.0429392139582996 0.948578266253918 0.0428692605311166 0.948380328601523 0.0427997074585248 0.948181982608984 0.0427305515230066 0.94798321659395 0.0426617896133263 0.947784018905439 0.0425934178378735 0.947584375333015 0.0425254315638416 0.947384269214293 0.0424578263824459 0.947183684247031 0.0423906 0.94698261 - 0.205967571246725 10 0.214285715 8 0.2261904775 8 0.23214285875 8 0.23809524 10 -7 0 0 3 4 2 1.20575727 0.68899085 1.20469173918903 0.688449786025928 1.20377792647501 0.687857666846069 1.20292701545684 0.687210224474422 - 0.205967571246725 4 0.23809524 4 -7 0 0 10 11 2 1.20575727 0.68899085 1.20591429673261 0.689070586195467 1.20607285726031 0.689149360395013 1.20623294345823 0.689227158911896 1.20639454693961 0.689303968311119 1.206557658855 0.689379775319369 1.20672226985774 0.689454566817782 1.20688837011018 0.689528329854675 1.20705594929345 0.689601051659717 1.20722499661353 0.68967271965589 1.2073955008045 0.689743321469603 - 0.875 11 0.885661287061455 11 -7 0 0 3 4 2 0.0461083979788055 0.956415984746819 0.0468015281525145 0.957934231421863 0.047532272442626 0.959431599646572 0.0482957999999999 0.960907430000001 - 0.875 4 0.885661287061455 4 -7 0 0 10 20 3 1.2073955008045 0.689743321469603 1.20772477266655 0.68987966527754 1.20805947778481 0.69001203286318 1.20839953502093 0.690140335110773 1.20874485667262 0.690264485733906 1.20909534855929 0.690384401547124 1.20945090995672 0.690500002641689 1.2098114334587 0.690611212501892 1.21017680640582 0.690717958876031 1.21054690898713 0.690820172944625 1.21129569472537 0.691015244135238 1.21167436239081 0.691108116651918 1.21205749488225 0.691196343993651 1.21244496197274 0.691279866303085 1.21283662788799 0.6913586280956 1.21323235156118 0.69143257844352 1.21363198691179 0.691501671137602 1.214035383148 0.691565864825748 1.21444238509298 0.691625123128943 1.21485283353482 0.691679414734434 - 0.885661287061455 11 0.90625 9 0.926804154260539 11 -7 0 0 3 4 2 0.0482958 0.96090743 0.0512423154735146 0.966602793240655 0.0546623499074065 0.971714384775479 0.05834572 0.976490549999999 - 0.885661287061455 4 0.926804154260539 4 -7 0 0 10 20 3 1.21485283353482 0.691679414734434 1.21506642019775 0.691707666669781 1.21528094013416 0.691734573677962 1.21549637090926 0.69176013134665 1.21571268979237 0.691784335635009 1.21592987377029 0.691807182877252 1.21614789956114 0.69182866978574 1.21636674362862 0.691848793453642 1.2165863821968 0.691867551357125 1.21680679126537 0.69188494135711 1.21755943985558 0.691939462707674 1.21809524337632 0.691970053062333 1.21863502116751 0.691992708414503 1.21917843014043 0.692007417284099 1.21972512141128 0.692014181140765 1.22027474158084 0.692013014389987 1.22082693402297 0.692003944266792 1.22138134017884 0.691987010635631 1.22193760085936 0.691962265697531 1.22249535755445 0.691929773603968 - 0.926804154260539 11 0.9375 9 0.963204869208055 11 -7 0 0 3 4 2 0.0583457199999999 0.976490549999999 0.0616045424943351 0.980716211514631 0.0650506797598575 0.984809785299053 0.06857136 0.9886335 - 0.926804154260539 4 0.963204869208055 4 -7 0 0 10 20 3 1.22249535755445 0.691929773603968 1.22261567848662 0.691922764312963 1.22273606903792 0.691915394497227 1.22285652560928 0.691907664800773 1.22297704460311 0.691899575893496 1.22309762242387 0.691891128470993 1.22321825547875 0.691882323254368 1.22333894017822 0.691873160990036 1.2234596729367 0.691863642449518 1.22358045017312 0.691853768429214 1.22390561240053 0.691826239615252 1.2241100734941 0.691807924938795 1.22431463428708 0.69178859969199 1.22451927751683 0.691768268049479 1.22472398597048 0.691746934385615 1.22492874249249 0.691724603270807 1.2251335299921 0.691701279467817 1.22533833145071 0.691676967928073 1.22554312992933 0.691651673787973 1.22574790857607 0.6916254023652 - 0.963204869208055 11 0.96875 9 0.978128680339632 11 -7 0 0 3 4 2 0.06857136 0.9886335 0.0700147885269828 0.990201174810364 0.0714496316841416 0.991688433493362 0.07289849 0.9931894 - 0.963204869208055 4 0.978128680339632 4 -7 0 0 10 20 3 1.22574790857607 0.6916254023652 1.22588429374337 0.69160790526554 1.22602067011378 0.691589974669832 1.22615703270883 0.691571612149051 1.22629337656717 0.691552819309842 1.22642969674556 0.691533597794036 1.22656598831982 0.691513949278164 1.22670224638586 0.691493875472973 1.2268384660606 0.691473378122946 1.22697464248295 0.691452459005813 1.22745129216199 0.69137774081521 1.2277915125417 0.691321733880066 1.22813135639119 0.691263127429367 1.22847074866235 0.691201951093741 1.22880961536395 0.691138235733123 1.22914788389659 0.691072013293694 1.22948548280718 0.691003316804648 1.22982234125435 0.690932180470856 1.2301583891998 0.690858639615802 1.23049356 0.69078273 - 0.978128680339632 11 0.984375 9 1 11 -7 0 0 3 4 2 0.07289849 0.9931894 0.0750218367025939 0.995389114911367 0.0771428778215308 0.997577672974491 0.07920744 1 - 0.978128680339632 4 1 4 -8 0.69078275 1 -7 0 0 9 18 3 0.55367883 1 0.553678829999996 0.982821264072413 0.553678830000014 0.965642528157859 0.55367882999997 0.948463792255267 0.553678830000041 0.931285056364312 0.553678829999958 0.91410632048343 0.55367883000003 0.896927584612626 0.553678829999987 0.879748848750359 0.553678830000003 0.862570112896267 0.553678829999999 0.828212641202362 0.553678829999998 0.811033898936538 0.553678830000012 0.793855199599479 0.553678829999973 0.776676366245425 0.553678830000036 0.759497788122592 0.553678829999969 0.742318887193752 0.553678830000017 0.725140261558044 0.553678829999995 0.7079614858136 0.55367883 0.69078275 - 0.69078275 10 0.845391375 8 1 10 -8 0.69078275 1 -7 0 0 9 18 3 0.55367883 1 0.553678829999995 0.982821264072429 0.553678830000017 0.965642528157803 0.553678829999969 0.948463792255373 0.553678830000036 0.931285056364173 0.553678829999973 0.914106320483564 0.553678830000012 0.896927584612531 0.553678829999998 0.879748848750404 0.553678829999999 0.862570112896256 0.553678830000003 0.82821264120237 0.553678829999987 0.811033898936518 0.55367883000003 0.793855199599508 0.553678829999958 0.776676366245401 0.553678830000041 0.759497788122605 0.55367882999997 0.742318887193747 0.553678830000014 0.725140261558046 0.553678829999996 0.707961485813599 0.55367883 0.69078275 - 0.69078275 10 0.845391375 8 1 10 -8 0 1 -7 0 0 1 2 2 0 1.00000000011596 0 3.85753651244158e-011 - 0 2 1 2 -8 0 1 -7 0 0 1 2 2 1 4.05709804047046 1 1.56492596659064e-010 - 0 2 1 2 -7 0 0 9 10 2 0.57740334 0.22601628 0.574485168908269 0.230040655317211 0.571610003858814 0.234100601017076 0.568778663871953 0.238195462185682 0.565991953752192 0.242324554650541 0.563250657170415 0.246487173446383 0.560555538570483 0.250682589073487 0.557907341465324 0.254910048926469 0.55530678704319 0.259168778433677 0.552754573108648 0.263457981879367 - 0 10 0.165915009955367 10 -7 0 0 3 4 2 1 0.09543064 0.951643863855859 0.106944389065374 0.901408723094909 0.116968263826342 0.849553149999999 0.12565764 - 0 4 0.165915009955367 4 -7 0 0 9 26 4 0.552754573108648 0.263457981879367 0.551461122423653 0.265631731132839 0.550180087593486 0.267813307365621 0.548911559448753 0.270002607002378 0.54765562727749 0.272199525072947 0.546412378789764 0.274403955239825 0.545181900087934 0.276615789820284 0.543964275642805 0.278834919802865 0.54275958825891 0.281061234881667 0.53802486891365 0.289934895368286 0.534596896409032 0.296637696670766 0.531286131970515 0.30340009685179 0.528094572408515 0.310219068115244 0.525024073137441 0.317091493565328 0.522076341473048 0.324014175793399 0.519252930899961 0.330983846028743 0.516555236309304 0.337997173852992 0.513040306038245 0.347641426498714 0.512113246560009 0.350237508514583 0.511203372833194 0.35283885597271 0.510310742967963 0.355445300384091 0.509435412097712 0.358056672391112 0.508577432356582 0.360672801835383 0.507736852859911 0.363293517826386 0.506913719687604 0.365918648810802 0.506108075870396 0.368548022642323 - 0.165915009955367 10 0.25 8 0.5 8 0.59182005246956 10 -7 0 0 4 5 2 0.84955315 0.12565764 0.74971792440844 0.142386914660135 0.644880274891697 0.154692662408025 0.536486617040378 0.163231121212432 0.42630538 0.16862434 - 0.165915009955367 5 0.59182005246956 5 -8 0 0.33333333 -7 0 0 11 22 3 0 0.17394647 0.0204040624885866 0.174343954670496 0.0407543900046298 0.174678452342288 0.0610426122775305 0.17494955249586 0.0812603650401261 0.175156905069795 0.101399306601644 0.175300221874242 0.121451134853296 0.175379277741699 0.141407604703769 0.175393911406883 0.161260545948439 0.175344026126827 0.181001881567782 0.175229590028668 0.200623646459511 0.175050636196882 0.239612366741796 0.174563888784773 0.258979328097728 0.174256094908462 0.278210990551605 0.173883981319552 0.297299920480676 0.173447699088525 0.316237790519249 0.172947507398559 0.335018697274662 0.172383635067243 0.353633310010963 0.171756522794685 0.372076683671907 0.171066502433411 0.390340551331236 0.170314110116557 0.408418983829516 0.169499854565367 0.42630538 0.16862434 - 0 12 0.166666665 10 0.33333333 12 -7 0 0 6 7 2 0.48648389 0.47548073 0.487716767050042 0.456566836109428 0.489858557257757 0.437917241539643 0.492861732970719 0.419672974441571 0.496643053044708 0.401964176744109 0.501103267259162 0.384882179887825 0.506108075870396 0.368548022642323 - 0 7 0.33333333 7 -7 0 0 10 11 2 0.48648389 0.47548073 0.48582589152821 0.482649280356779 0.485307320158107 0.489817593023097 0.484928175750765 0.496985669684817 0.484688458584679 0.504153507061068 0.484588168350756 0.511321108786716 0.484627305251437 0.518488472484628 0.48480586922495 0.525655598878253 0.485123860265631 0.53282248803329 0.485581278380601 0.5399891398635 0.486178123570706 0.54715555435555 - 0 11 0.409295174620928 11 -7 0 0 4 5 2 0 2.49916951 0.104299473595229 2.50071850505137 0.208087609374514 2.50380272387037 0.311450567702593 2.50829779236144 0.41424785 2.51425894 - 0 5 0.409295174620928 5 -7 0 0 10 20 3 0.486178123570706 0.54715555435555 0.486310391777378 0.548743719609874 0.486449507525203 0.550331873208048 0.48659547081419 0.551920015149928 0.486748281644332 0.553508145435544 0.486907940015599 0.555096264065223 0.487074445927926 0.556684371039675 0.487247799381223 0.558272466359926 0.487428000375412 0.559860550026858 0.487615048910542 0.561448622039875 0.488877774984199 0.571790683889172 0.490154677056385 0.580544331106311 0.491639651492372 0.589297624922005 0.493332697173543 0.598050561947289 0.495233816793106 0.606803150354172 0.497343005903742 0.615555376650506 0.499660269767944 0.624307256805282 0.502185603906874 0.633058777197851 0.504919010981265 0.641809945944253 0.50786049 0.65056076 - 0.409295174620928 11 0.5 9 1 11 -7 0 0 4 5 2 0.41424785 2.51425894 0.562607407121899 2.52286221303333 0.70985539597643 2.53453500163556 0.855839674083193 2.54944400051588 1 2.56863264 - 0.409295174620928 5 1 5 -8 0.9 1 -7 0 0 11 22 3 0.05942176 11.23696609 0.0552265172854449 11.236181132573 0.0513114411473243 11.2354498511421 0.04764027484064 11.2347653967168 0.0441830651455495 11.2341221208646 0.0409146572277524 11.2335152903986 0.0378135636055425 11.2329408731244 0.0348611348320886 11.23239538132 0.0320409594988455 11.2318757587418 0.0293384211692585 11.2313792980245 0.0267403398486086 11.2309035742517 0.0217289113486621 11.2299891885314 0.0193155412618645 11.229550522662 0.0169826589974425 11.2291282184156 0.0147183521313002 11.2287201311753 0.0125149823351038 11.2283248845079 0.0103582414857482 11.2279399726215 0.0082452376185174 11.227564894137 0.00616030703086554 11.2271969619241 0.00409892160822844 11.2268354489195 0.00204868526429301 11.2264783003139 0 11.22612399 - 0.9 12 0.95 10 1 12 -7 0 0 7 8 2 0.509151648434261 0.653078376570388 0.508861513862964 0.652517288851792 0.508634717688235 0.652080827854647 0.508451422881105 0.651712055286479 0.508274001699678 0.651393323502238 0.508140395818763 0.651101878864762 0.507990722728367 0.650831272790385 0.50786049 0.65056076 - 0.9 8 1 8 -7 0 0 8 9 2 0.0796872526852902 11.2407395912722 0.0777584528321941 11.2403829338694 0.0757165228439116 11.2400046061477 0.0735401546064573 11.2396006116658 0.0712034043107755 11.2391660760774 0.0686738438974643 11.2386948987936 0.0659094143286826 11.2381791599885 0.0628537216175662 11.2376082330736 0.05942176 11.23696609 - 0.880853970078994 9 0.9 9 -7 0 0 4 5 2 0.50959725 0.65393945 0.509512560161921 0.65377590671475 0.509415714693759 0.653588829724309 0.509302687813702 0.653370469789236 0.509151648434261 0.653078376570388 - 0.880853970078994 5 0.9 5 -8 0.2 0.4 -7 0 0 10 20 3 0.50959725 0.65393945 0.509631241026504 0.654005089051155 0.509670564920697 0.654082082051294 0.509715225826002 0.654170437050703 0.50976521400539 0.654270135151866 0.509820544223992 0.654381204984624 0.509881200591413 0.654503615760592 0.509947195566871 0.654637391602903 0.510018522097534 0.654782518865664 0.510095182952016 0.654939002901996 0.510259171947152 0.655274681891585 0.510346500168553 0.655453877000802 0.510439162113859 0.655644427724537 0.510537157782908 0.655846334062759 0.510640487176057 0.656059596015614 0.510749150292851 0.656284213583032 0.510863147133808 0.656520186765184 0.510982477698531 0.656767515561993 0.511107141987295 0.6570261999736 0.51123714 0.65729624 - 0.2 11 0.3 9 0.4 11 -7 0 0 6 7 2 0.0796872526852901 11.2407395912722 0.0848481570916091 11.241693902192 0.112877789325687 11.2466180784537 0.0518984161356361 11.236261945529 0.175901974854275 11.2576430208145 0.120223384774473 11.24803806818 0.1418269 11.25176309 - 0.2 7 0.4 7 -8 0.7 0.8 -7 0 0 10 29 4 0.26635512 11.27572027 0.255342889130292 11.2733729727402 0.246831286237603 11.2715730624251 0.239698881902237 11.2700771697141 0.233543111820422 11.2687983626561 0.228034609795169 11.2676656580586 0.222999420301308 11.2666421907801 0.218279160807069 11.2656944910642 0.213758325879119 11.2647989194031 0.209330978462961 11.2639342463492 0.202670939582103 11.2626529644662 0.200447737648758 11.2622284877354 0.198208080408287 11.2618040765598 0.195938845703171 11.2613772541082 0.19362573024455 11.2609453714888 0.191254337035411 11.2605058092176 0.188808624536307 11.2600556922945 0.186269529244773 11.2595916422421 0.183616009594531 11.2591099847797 0.17802752817087 11.2581023415357 0.175092592460548 11.2575763606655 0.171990821323568 11.2570236930362 0.168691429941215 11.2564390439398 0.165157451680504 11.2558160877388 0.161343375156906 11.2551470701052 0.157192162496967 11.2544223045802 0.152630232617688 11.2536293236513 0.147557370432875 11.2527511755747 0.1418269 11.25176309 - 0.7 11 0.75 9 0.775 9 0.8 11 -7 0 0 10 11 2 0.513684740124091 0.661805814675191 0.513136809727546 0.660864420744725 0.512506441289287 0.659630070672593 0.514426400258583 0.663729200155072 0.507562019205369 0.649425342643341 0.52010967919241 0.675682247073766 0.503455927023289 0.640991000824194 0.517989230604255 0.671277042713695 0.508908059954085 0.652477406007722 0.511696909449295 0.658251304665698 0.51123714 0.65729624 - 0.7 11 0.8 11 -7 0 0 10 20 3 0.513684740124091 0.661805814675191 0.513755364277266 0.661927153351711 0.513826496957493 0.662048982659072 0.513898094134561 0.662171224651301 0.513970110504806 0.662293799830163 0.51404249964202 0.662416627421657 0.514115214161374 0.662539625670115 0.514188205894164 0.662662712145745 0.514261426070569 0.662785804060478 0.514334825507005 0.662908818586041 0.514456738660087 0.663112514146974 0.514505178750714 0.663193285872369 0.514553660988063 0.663273964821983 0.514602171252598 0.663354527526658 0.514650695406184 0.663434950608192 0.514699219315482 0.66351521081805 0.5147477288754 0.663595285075719 0.51479621003239 0.663675150506366 0.514844648807405 0.663754784477525 0.514893031318344 0.663834164634536 - 0.482462206547696 11 0.5 9 0.511540248577535 11 -7 0 0 3 4 2 0.26635512 11.27572027 0.282044366945169 11.2790644919784 0.298282012580075 11.2825371526078 0.31415251 11.28585527 - 0.482462206547696 4 0.511540248577535 4 -7 0 0 10 11 2 0.514893031318344 0.663834164634536 0.51496497175353 0.663952195776982 0.515036787794408 0.664069665761453 0.515108433804811 0.664186501099006 0.515179864622456 0.664302629658649 0.515251035722096 0.664417980924949 0.515321903373167 0.66453248624225 0.51539242478924 0.66464607904137 0.515462558267051 0.664758695045509 0.515532263313361 0.664870272452974 0.515601500758393 0.66498075209519 - 0.511540248577535 11 0.528699558598993 11 -7 0 0 3 4 2 0.31415251 11.28585527 0.323517886911792 11.2878133289176 0.332726441450526 11.2897294157878 0.34154549 11.29158637 - 0.511540248577535 4 0.528699558598993 4 -7 0 0 10 29 4 0.422657966469266 11.3101236360822 0.421440937968388 11.309814594463 0.420233235230539 11.3095089909581 0.419033850450325 11.3092065621938 0.417841805030536 11.3089070544247 0.416656144711576 11.3086102222303 0.415475935117293 11.3083158273396 0.414300257599974 11.3080236375509 0.413128205261074 11.3077334257123 0.411958878988007 11.3074449687204 0.407975256130987 11.3064659587046 0.405169779251886 11.30578280037 0.40236236536182 11.3051054789146 0.3995406995738 11.3044310371172 0.396691775076687 11.303756428967 0.393802733074188 11.3030787119239 0.39085970848749 11.3023947813862 0.387846911314504 11.30170116554 0.384747680952079 11.3009942831346 0.378336793440339 11.2995455985535 0.375025154058302 11.2988038006774 0.371587702905658 11.2980403917443 0.368002198296504 11.2972507220374 0.364243181491293 11.2964295264115 0.360280790751457 11.2955706844746 0.356079341710501 11.2946669353966 0.351595421398961 11.2937094976693 0.346774629875178 11.292687420429 0.34154549 11.29158637 - 0.439635627177706 11 0.45 9 0.475 9 0.5 11 -7 0 0 5 6 2 0.5178806 0.6683963 0.517433739011863 0.66779156106082 0.517072586071234 0.667254277821101 0.516670169888177 0.666654298757384 0.516262344479962 0.66603523609421 0.515601500758393 0.66498075209519 - 0.439635627177706 6 0.5 6 -7 0 0 9 10 2 0.5178806 0.6683963 0.518112242154857 0.668709781847376 0.518343070742294 0.669018655767906 0.51857314446045 0.66932304176768 0.51880252054434 0.669623055151025 0.519031254844936 0.6699188067541 0.519259401924885 0.670210403188074 0.519487015156392 0.670497947073864 0.519714146815628 0.670781537262057 0.51994084817201 0.67106126903675 - 0.6 10 0.614734712035438 10 -7 0 0 3 4 2 0.422657966469266 11.3101236360822 0.444704190665417 11.3157218622674 0.465219731834965 11.3213606902932 0.48491685 11.32682113 - 0.6 4 0.614734712035438 4 -8 0.3 0.4 -7 0 0 9 18 3 0.57922482 11.35399331 0.574827877830719 11.3526134271855 0.570775205314887 11.3513584202101 0.566910567316348 11.3501763133654 0.563138671699647 11.349036014295 0.559384290550527 11.3479134660905 0.555581137614919 11.3467879974788 0.551666822121973 11.3456407278371 0.547574333107235 11.3444518536527 0.538874951496234 11.3419453723686 0.534268067112464 11.3406277661714 0.52932465152708 11.3392229379619 0.523953843191186 11.3377051713267 0.518040730458314 11.3360423279469 0.511442296287179 11.3341946885283 0.503951696273567 11.3321051142673 0.495284934346975 11.3296953729071 0.48491685 11.32682113 - 0.3 10 0.35 8 0.4 10 -7 0 0 5 6 2 0.523417356271674 0.675009456362825 0.522781974984806 0.674348823828004 0.522377201248506 0.673912936591592 0.521766561815082 0.673212366901729 0.52122961310116 0.672651504342558 0.51994084817201 0.67106126903675 - 0.3 6 0.4 6 -8 0.2 0.3 -7 0 0 6 17 4 0.68476969 11.39282464 0.674623106140842 11.3886105246263 0.665081310299121 11.3847309896225 0.655981681639087 11.3811133477542 0.647203276676091 11.3777061797719 0.638640529995324 11.3744670875255 0.625969706812221 11.3698053269751 0.621774975776005 11.3682842164131 0.617596573172545 11.3667913014812 0.613422253990748 11.3653222916629 0.609239645393266 11.3638730784761 0.600831985891441 11.3610061095838 0.596606994153556 11.359588374162 0.592347682773453 11.3581822473405 0.588040968007826 11.3567838473661 0.583672010688376 11.355388961844 0.57922482 11.35399331 - 0.2 7 0.25 5 0.275 5 0.3 7 -7 0 0 4 5 2 0.528291828785647 0.679476362881167 0.52669306641889 0.678195801685654 0.525538969751749 0.6771280082593 0.524488427005237 0.676123093462799 0.523417356271674 0.675009456362825 - 0.2 5 0.3 5 -7 0 0 9 18 3 0.528291828785647 0.679476362881167 0.528689784376291 0.679795113495713 0.529090209704162 0.680108022345966 0.529493319006296 0.680415296466551 0.529899328739415 0.68071713260804 0.530308458310668 0.681013718074823 0.530720930814563 0.681305231467077 0.531136973789987 0.681591843345074 0.531556820011195 0.681873716834098 0.532325432879117 0.68237651366798 0.532672830733178 0.682598988679619 0.533023030353554 0.682818517259563 0.533376162861413 0.683035180433051 0.533732362332802 0.683249056408909 0.534091766110753 0.683460220758885 0.534454515134816 0.683668746583559 0.53482075429194 0.683874704666642 0.535190632793723 0.684078163619316 - 0.674965095271805 10 0.7 8 0.720359481525137 10 -7 0 0 3 4 2 0.68476969 11.39282464 0.725986018962399 11.4099427419598 0.763786976355746 11.4270402492404 0.79876482 11.44623253 - 0.674965095271805 4 0.720359481525137 4 -7 0 0 9 10 2 0.535190632793723 0.684078163619316 0.536637492607827 0.684874037348189 0.538140039946908 0.685631670569478 0.539707205905392 0.686355170021179 0.541348934137578 0.687048133772452 0.543076526378162 0.687713783419162 0.544903082469978 0.688355060578684 0.546844105434993 0.688974710670579 0.548918402917954 0.689575367021342 0.55114967 0.69015964 - 0.720359481525137 10 0.8 10 -7 0 0 3 4 2 0.79876482 11.44623253 0.860130420936333 11.4799037170199 0.912351838353414 11.5177413762378 0.976195632636491 11.5713201237537 - 0.720359481525137 4 0.8 4 -7 0 0 10 11 2 1 11.59164008 0.997577041548979 11.589537880172 0.995163966710509 11.5874517014116 0.99276060874937 11.5853813807783 0.990366803275716 11.583326758546 0.987982388116733 11.5812876780816 0.98560720320151 11.5792639857365 0.983241090457849 11.577255530747 0.980883893719742 11.5752621651465 0.978535458644247 11.5732837436844 0.976195632636491 11.5713201237537 - 0 11 0.0107143665106604 11 -7 0 0 3 4 2 0.55367883 0.69078275 0.552809975306701 0.690582007392303 0.551967413984352 0.690373770188761 0.55114967 0.69015964 - 0 4 0.0107143665106604 4 -8 0 2.49917007 -7 0 0 2 3 2 1 -1.29143584715052e-010 1 1.24958503831894 1 2.49917007012914 - 0 3 2.49917007 3 -8 0 2.49917007 -7 0 0 10 11 2 1 1.82448587 1.00000000000002 1.65943202352431 0.999999999999934 1.49437818139389 1.00000000000014 1.32932430918611 0.999999999999792 1.16427054008857 1.00000000000022 0.99921655363122 0.999999999999822 0.834162879481461 1.00000000000011 0.669108891388316 0.999999999999954 0.504055123247654 1.00000000000001 0.33900125504311 1 0.17394741 - 0 11 2.49917007 11 -8 0 1.72905437 -7 0 0 9 10 2 0 1.82448587 0 1.63236871688937 0 1.44025156178362 0 1.24813442162655 0 1.0560172370389 0 0.863900135074375 0 0.671782933220025 0 0.479665813019969 0 0.287548651114474 0 0.0954315 - 0 10 1.72905437 10 -8 0 1.72905437 -7 0 0 10 20 3 2.07179401 0 1.97362266964401 0 1.87545132923854 0 1.77727998878472 0 1.67910864828009 0 1.58093730772852 0 1.48276596712538 0 1.38459462647497 0 1.28642328577419 0 1.18825194502474 0 0.991909263427194 0 0.893737931146988 0 0.795566537211546 0 0.697395353254789 0 0.599223725344616 0 0.50105273478758 0 0.402881102915826 0 0.304709919257487 0 0.206538531254 0 0.10836719 0 - 0 11 0.864527185 9 1.72905437 11 -8 0.01103422 1.98405473 -7 0 0 10 20 3 2.07179401 1 1.96878041893208 1 1.86576682780783 0.999999999999998 1.76275323662711 1.00000000000001 1.65973964539016 0.999999999999973 1.5567260540965 1.00000000000005 1.45371246274668 0.999999999999941 1.35069887134012 1.00000000000005 1.24768527987719 0.999999999999972 1.14467168835764 1.00000000000001 0.938644505205442 0.999999999999998 0.83563090940557 0.999999999999998 0.732617343458738 1.00000000000002 0.629603675418813 0.999999999999945 0.526590222974921 1.00000000000009 0.423576460775544 0.999999999999895 0.320563010088171 1.00000000000008 0.217549341526449 0.999999999999962 0.114535772166398 1.00000000000001 0.0115221800000001 1 - 0.01103422 11 0.997544475 9 1.98405473 11 -8 0.01103422 1.98405473 -7 0 0 5 6 2 1.98405473 0 1.58945062622767 0 1.19484652283288 0 0.800242422651778 0 0.405638320236386 0 0.01103422 0 - 0.01103422 6 1.98405473 6 -8 0 1.72904906 -7 0 0 9 10 2 1 0.09543064 1.00000000000001 0.287547202087267 0.999999999999968 0.479663787252419 1.00000000000006 0.671780282208771 0.999999999999912 0.863896952223124 1.00000000000009 1.05601340820797 0.999999999999933 1.2481300401974 1.00000000000003 1.44024657731642 0.999999999999991 1.63236314591658 1 1.82447971 - 0 10 1.72904906 10 -8 0 1.72904906 -7 0 0 10 20 3 0.10836658 1 0.206537951718066 1 0.304709378665106 0.999999999999992 0.402880564251975 1.00000000000001 0.501052279270761 0.999999999999994 0.599223236787823 1 0.697394947145429 1 0.795566133121795 0.999999999999994 0.893737567130333 1.00000000000001 0.991908928322369 0.999999999999995 1.18825167084805 1.00000000000001 1.28642304206173 0.999999999999944 1.38459441322607 1.00000000000012 1.48276578434159 0.999999999999836 1.5809371554073 1.00000000000017 1.67910852642457 0.999999999999859 1.77727989739198 1.00000000000009 1.87545126831062 0.999999999999957 1.97362263917988 1.00000000000001 2.07179401 1 - 0 11 0.86452453 9 1.72904906 11 -8 5.543e-005 1.00005543 -7 0 0 11 12 2 1 1.82447971 0.909090888044948 1.82447971000001 0.818182007963492 1.82447970999995 0.727271568025782 1.8244797100001 0.636367230124829 1.82447970999986 0.545448155878196 1.82447971000013 0.454551906391309 1.82447970999994 0.363632554793476 1.82447971 0.272728557791767 1.82447971000002 0.181817975902205 1.82447970999998 0.0909090909090876 1.82447971000001 0 1.82447971 - 5.543e-005 12 1.00005543 12 -8 5.54299999999675e-005 1.00005543 -7 0 0 10 11 2 5.54299999999119e-005 7.14491407 0.100055453273508 7.14491407000001 0.200055324657059 7.14491406999994 0.300055662485845 7.14491407000015 0.400055158026452 7.14491406999983 0.500055620126811 7.1449140700001 0.600055344651902 7.14491406999998 0.700055458153884 7.14491406999998 0.800055425654522 7.14491407000001 0.900055431875078 7.14491406999999 1.00005543 7.14491407 - 5.543e-005 11 1.00005543 11 -8 0.17394647 1.82447971 -7 0 0 11 12 2 0 1.82447971 0 1.67443123290515 0 1.52438275920634 0 1.37433426002839 0 1.22428585702428 0 1.07423722713075 0 0.924188968937252 0 0.774140272944166 0 0.624091951616035 0 0.474043402659847 0 0.323994945792487 0 0.17394647 - 0.17394647 12 1.82447971 12 -8 0.17394647 1.82447971 -7 0 0 11 22 3 0 -5.87469061401301e-017 0 0.113598614157295 0 0.2271972282901 0 0.340795842398463 0 0.454394456482256 0 0.567993070541712 0 0.681591684576532 0 0.795190298586962 0 0.908788912572912 0 1.02238752653432 0 1.1359861404713 0 1.36318336829624 0 1.47678199187437 0 1.59038053955901 0 1.70397937323109 0 1.81757752730139 0 1.93117680050288 0 2.04477474535732 0 2.15837383629772 0 2.27197222192398 0 2.38557089644618 0 2.49916951 - 0.17394647 12 0.99921309 10 1.82447971 12 -8 0.01152171 2.07179401 -7 0 0 2 3 2 0.011521710116174 0 1.04165786549234 0 2.07179400988383 0 - 0.01152171 3 2.07179401 3 -8 0.0115217099999998 2.07179401 -7 0 0 10 20 3 1.97302096 0 1.87436991252604 0 1.77571884046276 0 1.67706787549979 0 1.57841667539026 0 1.47976581156843 0 1.38111461338389 0 1.28246364799231 0 1.18381257238223 0 1.08516152904782 0 0.887859433294585 0 0.789208385364565 0 0.690557337381207 0 0.591906289344327 0 0.493255241254115 0 0.394604193110297 0 0.295953144913091 0 0.197302096662269 0 0.0986510483579338 0 -3.32251789273158e-018 0 - 0.01152171 11 1.04165786 9 2.07179401 11 -8 6.281e-005 1.00006281 -7 0 0 9 34 5 2.07179401 1.35525263554376e-020 2.07179401000001 0.0277777761367734 2.07179400999996 0.0555555615601266 2.07179401000007 0.0833332960458994 2.07179400999991 0.111111184819333 2.07179401000007 0.138888962079544 2.07179400999997 0.166666622961044 2.07179401 0.194444435446457 2.07179401000001 0.222222212649381 2.07179400999999 0.277777776930062 2.07179401000003 0.305555568953645 2.07179400999996 0.333333294088394 2.07179401000003 0.361111150368819 2.07179401 0.388888921708322 2.07179400999998 0.416666592097294 2.07179401000002 0.444444428478471 2.07179400999999 0.472222358175801 2.07179401000001 0.527777895985907 2.07179400999995 0.555555513974443 2.07179401000013 0.583333155227798 2.0717940099998 0.611111417129459 2.07179401000022 0.638888648430348 2.07179400999983 0.666666782823207 2.07179401000009 0.694444422442104 2.07179400999998 0.72222222261961 2.07179401 0.777777777987861 2.07179401000002 0.805555558045828 2.07179400999996 0.833333338358823 2.07179401000004 0.86111111754685 2.07179400999997 0.888888894967946 2.07179401 0.916666670719292 2.07179401000001 0.94444444563598 2.07179400999999 0.972222221292105 2.07179401 1 - 6.281e-005 10 0.25006281 8 0.50006281 8 0.75006281 8 1.00006281 10 -8 6.28099999999687e-005 1.00006281 -7 0 0 6 12 3 1.00006281 3.88e-005 0.916729488127207 3.88e-005 0.833396113914404 3.88000000000001e-005 0.750062845813491 3.87999999999998e-005 0.666729463197402 3.88000000000002e-005 0.583396143307731 3.87999999999999e-005 0.416729479844628 3.88000000000001e-005 0.333396127970785 3.87999999999999e-005 0.25006283818095 3.88000000000002e-005 0.166729459331795 3.87999999999999e-005 0.0833961434792419 3.88e-005 6.28099999999687e-005 3.88e-005 - 6.281e-005 7 0.50006281 5 1.00006281 7 -8 3.88e-005 8.09360706 -7 0 0 8 9 2 1.00006281 3.87999999986732e-005 1.00006281 1.01173483408992 1.00006281000001 2.02343084535778 1.00006280999998 3.03512695155291 1.00006281000002 4.04682285824265 1.00006280999998 5.0585190270105 1.00006281000001 6.07021496719345 1.00006281 7.08191103016194 1.00006281 8.09360706 - 3.88e-005 9 8.09360706 9 -8 3.88000000004496e-005 8.09360706 -7 0 0 9 10 2 5.799e-005 3.57399999999704e-005 5.79899999999992e-005 0.856152965258641 5.79900000000028e-005 1.71227013879958 5.79899999999941e-005 2.56838754045745 5.79900000000083e-005 3.42450443286552 5.79899999999917e-005 4.28062206454708 5.79900000000058e-005 5.13673895351306 5.79899999999973e-005 5.99285635691951 5.79900000000007e-005 6.84897352725582 5.799e-005 7.70509075 - 3.88e-005 10 8.09360706 10 -8 6.281e-005 1.00006281 -7 0 0 11 22 3 1.00006281 8.09360706 0.95460825049386 8.09360705999999 0.909153719529796 8.09360706000003 0.863699179896275 8.09360705999985 0.818244628309187 8.09360706000046 0.772790074849488 8.0936070599991 0.727335528953224 8.0936070600012 0.681880991971375 8.09360705999892 0.636426456276887 8.09360706000066 0.590971910943287 8.09360705999976 0.545517353972963 8.09360706000002 0.454608268209947 8.09360706000004 0.409153754304189 8.09360705999962 0.363699053036348 8.09360706000111 0.318244965788597 8.09360705999792 0.272789485820291 8.09360706000284 0.22733627564614 8.09360705999714 0.181880374487198 8.09360706000214 0.136426794690996 8.09360705999881 0.0909717839896043 8.09360706000045 0.0455173592202783 8.0936070599999 6.28100000000797e-005 8.09360706 - 6.281e-005 12 0.50006281 10 1.00006281 12 -8 6.28099999999687e-005 1.00006281 -7 0 0 11 52 6 9.9050420844917e-022 1 0.159445921344673 0.999999999999998 0.318891844450705 1.00000000000001 0.478337768707832 0.999999999999988 0.637783693504755 1 0.797229618232148 1.00000000000004 0.956675542277749 0.999999999999922 1.1161214650328 1.00000000000009 1.27556738588516 0.999999999999939 1.43501330422532 1.00000000000003 1.59445921944214 0.999999999999997 1.91335104240838 0.999999999999997 2.07279862626762 1.00000000000002 2.23223255313817 0.999999999999936 2.39171925573855 1.00000000000011 2.55107620758247 0.999999999999855 2.71065119524873 1.00000000000015 2.86996902110233 0.999999999999873 3.02948460396674 1.00000000000007 3.18892600440883 0.999999999999979 3.34836312230642 0.999999999999996 3.66725396373816 1.00000000000002 3.82670434855595 0.99999999999987 3.98618024347027 1.00000000000033 4.14550903373886 0.999999999999445 4.30516394214961 1.00000000000068 4.46435927563633 0.999999999999365 4.62401730975379 1.00000000000046 4.7833725491417 0.999999999999747 4.94282947244006 1.0000000000001 5.10227108944369 0.999999999999974 5.34143895191098 1.00000000000001 5.42116184728777 0.999999999999939 5.5008853745766 1.00000000000014 5.58060964899005 0.999999999999767 5.66033446590039 1.00000000000027 5.74005932432351 0.99999999999977 5.81978355172821 1.00000000000014 5.8995065299836 0.999999999999935 5.97922802264109 1.00000000000002 6.05894860338195 0.999999999999994 6.21839176811581 1.00000000000001 6.29811400146161 0.999999999999972 6.37783667456844 1.00000000000005 6.45755961260592 0.999999999999953 6.53728267710306 1.00000000000002 6.61700576599972 1.00000000000002 6.69672881357207 0.999999999999973 6.77645179051969 1.00000000000002 6.85617470388298 0.999999999999997 6.9358975971064 0.999999999999999 7.01562055 1 - 6.281e-005 12 0.25006281 10 0.50006281 10 0.75006281 10 0.87506281 10 1.00006281 12 -8 3.88e-005 8.09360706 -7 0 0 9 18 3 6.281e-005 8.09360706 6.28100000000001e-005 7.64396437881898 6.28099999999998e-005 7.19432163852811 6.28100000000005e-005 6.74467913276919 6.28099999999995e-005 6.29503617407659 6.28100000000003e-005 5.84539377055884 6.28099999999999e-005 5.39575091198857 6.281e-005 4.94610829972747 6.28100000000001e-005 4.49646560676569 6.28099999999997e-005 3.59718024561041 6.28100000000013e-005 3.14753756449985 6.28099999999974e-005 2.69789488334227 6.28100000000033e-005 2.24825220244403 6.28099999999973e-005 1.79860952193173 6.28100000000017e-005 1.34896684175322 6.28099999999993e-005 0.899324161675886 6.28100000000001e-005 0.449681481288565 6.281e-005 3.88000000000264e-005 - 3.88e-005 10 4.04682293 8 8.09360706 10 -8 3.88000000004496e-005 8.09360706 -7 0 0 2 3 2 5.543e-005 3.42497050267454e-005 5.543e-005 3.57247415675061 5.543e-005 7.14491407029497 - 3.88e-005 3 8.09360706 3 -8 0 1 -1 7.01562055 0 0 1 -8 0 1 -7 0 0 11 12 2 1 4.45537137 0.909090908561344 4.45537137000009 0.818181870562903 4.45537136999962 0.727272474909002 4.45537137000098 0.636364187836403 4.45537136999827 0.54545386041735 4.45537137000226 0.454545975256516 4.4553713699978 0.363636084534925 4.45537137000161 0.272727343983109 4.45537136999912 0.181818184108585 4.45537137000035 0.0909090901741503 4.45537136999992 5.55111512312578e-017 4.45537137 - 0 12 1 12 -8 0 1 -7 0 0 2 3 2 0 1.0773715253265e-011 0 0.500000023881465 0 0.999999999989226 - 0 3 1 3 -8 5.543e-005 1.00005543 -7 0 0 8 23 4 5.54300000000369e-005 3.425e-005 0.0313054258217708 3.425e-005 0.0625554279719374 3.425e-005 0.0938054298788004 3.42499999999999e-005 0.125055429993016 3.42500000000001e-005 0.156305429501246 3.42499999999998e-005 0.187555430039611 3.42500000000001e-005 0.21880543140737 3.425e-005 0.281305427153432 3.425e-005 0.312555438035821 3.425e-005 0.343805409089177 3.425e-005 0.375055437251671 3.42499999999999e-005 0.40630545710361 3.42500000000001e-005 0.437555414912189 3.425e-005 0.468805428244393 3.425e-005 0.562555435124715 3.425e-005 0.625055410412726 3.42500000000002e-005 0.687555500400406 3.42499999999995e-005 0.75005531782487 3.42500000000005e-005 0.812555531560301 3.42499999999996e-005 0.875055392858908 3.42500000000002e-005 0.93755543435549 3.425e-005 1.00005543 3.425e-005 - 5.543e-005 9 0.25005543 7 0.50005543 7 1.00005543 9 -8 5.54299999999675e-005 1.00005543 -7 0 0 10 29 4 7.01562055 0 6.84023003682787 0 6.66484004973054 0 6.48945006516399 0 6.31405975646337 0 6.13866899387512 0 5.96327784450699 0 5.78788657238934 0 5.61249563841518 0 5.4371057003869 0 5.08632952558854 0 4.9109676305497 0 4.7354503144573 0 4.56040863674913 0 4.38449022132798 0 4.20956487724054 0 4.03389988431105 0 3.85859492206003 0 3.68320064219728 0 3.15702953142413 0 2.80624867078815 0 2.45546771118766 0 2.10468667377624 0 1.75390557971171 0 1.40312445014636 0 1.05234330623812 0 0.701562169140364 0 0.350781060009377 0 9.50793968322335e-020 0 - 5.543e-005 11 0.25005543 9 0.50005543 9 1.00005543 11 -8 0.00034374 1.00034374 -7 0 0 11 42 5 1.00034374 46.24578153 0.977616493888739 46.2457815300006 0.954889137955091 46.2457815299974 0.932162083238866 46.2457815300064 0.909434595712866 46.245781529989 0.886707009953973 46.2457815300139 0.863980915631975 46.2457815299868 0.841252069308971 46.2457815300095 0.81852595143018 46.2457815299948 0.795798275483847 46.2457815300021 0.773071043187691 46.2457815299995 0.727616471370085 46.2457815300007 0.704889217295533 46.2457815299969 0.682161960576673 46.2457815300076 0.659434686545274 46.2457815299879 0.636707395034772 46.245781530014 0.613980095066871 46.2457815299878 0.591252799544174 46.2457815300081 0.568525519936845 46.245781529996 0.545798260973786 46.2457815300013 0.52307101533133 46.2457815299999 0.477616501314268 46.2457815299999 0.454889289623569 46.2457815300012 0.432161781415039 46.2457815299967 0.409434701753659 46.2457815300056 0.386707513057072 46.2457815299932 0.363980026033306 46.2457815300064 0.341252697024785 46.2457815299954 0.318525631655204 46.2457815300023 0.295798334556379 46.2457815299993 0.273071010642716 46.24578153 0.227616459352553 46.2457815300002 0.204889243603818 46.245781529999 0.182162026881318 46.2457815300029 0.159434598950831 46.245781529994 0.136707284771353 46.2457815300093 0.11398012573395 46.2457815299894 0.0912528665483094 46.2457815300089 0.0685255031955272 46.2457815299945 0.0457982978325648 46.2457815300024 0.0230710210040975 46.2457815299994 0.000343739999999995 46.24578153 - 0.00034374 12 0.25034374 10 0.50034374 10 0.75034374 10 1.00034374 12 -8 0.000343739999999926 1.00034374 -7 0 0 11 52 6 1 0 0.977275127671299 0 0.954549327562109 0 0.93182274977962 0 0.909095544432021 0 0.886367861625418 0 0.863639851469271 0 0.840911664068786 0 0.818183449533457 0 0.795455357969336 0 0.77272753948466 0 0.727272748888533 0 0.70456047965549 0 0.681719813570318 0 0.659352848898331 0 0.636043992316036 0 0.613879413128843 0 0.590772437585764 0 0.56822649899333 0 0.545447447440282 0 0.5227272871094 0 0.488636357502206 0 0.477272805548422 0 0.465909313311632 0 0.454545849259763 0 0.443182381861666 0 0.431818879584808 0 0.42045531089825 0 0.409091644269608 0 0.397727848167542 0 0.386363891060109 0 0.363635591771177 0 0.352267177912083 0 0.340901118576007 0 0.329538588671557 0 0.318178099005992 0 0.306817541307962 0 0.29545549855474 0 0.28409182059159 0 0.272727465056575 0 0.261363603598935 0 0.227272773001575 0 0.204545532031739 0 0.181818273898856 0 0.159091002011685 0 0.136363719778514 0 0.113636430608396 0 0.0909091379094149 0 0.0681818450906376 0 0.045454555560329 0 0.0227272727272757 0 2.77555756156289e-017 0 - 0.00034374 12 0.25034374 10 0.50034374 10 0.62534374 10 0.75034374 10 1.00034374 12 -8 8.022e-005 1.00008022 -7 0 0 6 27 6 1 6.03815022416017e-020 1 0.371280706212315 0.999999999999997 0.742561831507869 1 1.1138430898223 0.999999999999998 1.48512389207806 1 1.856404284172 1 2.32050628516103 1 2.41332650324476 1 2.50614661646899 1 2.59896670208833 1 2.69178683735733 1 2.83101723061722 1 2.87742740824387 1 2.92383778346266 1 2.97024850732583 1 3.01665973088547 1 3.1094834795021 1 3.15589754779991 1 3.20230661418854 1 3.24871311755242 1 3.29512144693572 1 3.5271654968527 1 3.71281403192373 1 3.89844669300604 1 4.08409149032159 0.999999999999999 4.26973089726617 1 4.45537137 - 8.022e-005 7 0.50008022 5 0.62508022 5 0.68758022 5 0.75008022 5 1.00008022 7 -8 8.02200000000752e-005 1.00008022 -7 0 0 11 32 4 8.0219999999992e-005 10.70174454 0.0455347532495493 10.7017445399998 0.0909892379257091 10.7017445400011 0.136444043423401 10.7017445399972 0.181898128233998 10.7017445400051 0.227353210696058 10.701744539993 0.272807250815849 10.701744540007 0.318262205776428 10.7017445399946 0.363716521997788 10.7017445400031 0.409171141471925 10.7017445399987 0.454625674666092 10.7017445400004 0.522807495880055 10.7017445399998 0.545534770750323 10.7017445400012 0.568262045648732 10.7017445399968 0.590989319783437 10.7017445400059 0.613716592668486 10.701744539992 0.636443864135146 10.7017445400082 0.659171134316099 10.7017445399938 0.68189840366312 10.7017445400034 0.70462567293118 10.7017445399988 0.727352943189844 10.7017445400002 0.772807488443974 10.70174454 0.795534771748931 10.7017445399994 0.818262008838073 10.7017445400017 0.840989335325769 10.7017445399969 0.863716599118179 10.701744540004 0.886443819366105 10.7017445399962 0.909171129974072 10.7017445400027 0.931898452840699 10.7017445399986 0.95462562401606 10.7017445400006 0.977352951814984 10.7017445399999 1.00008022 10.70174454 - 8.022e-005 12 0.50008022 10 0.75008022 10 1.00008022 12 -8 5.799e-005 1.00005799 -7 0 0 11 122 13 1.00005799 7.70509075 0.997217074881086 7.70509074999979 0.994376178445369 7.70509075000075 0.9915352702558 7.70509074999842 0.988694355262816 7.70509075000218 0.985853442634354 7.70509074999795 0.983012534285616 7.70509075000124 0.980171626068354 7.70509074999964 0.977330714609377 7.70509074999994 0.97448980275493 7.7050907500001 0.971648896608209 7.70509074999996 0.965967077638999 7.70509075000005 0.963126167942884 7.70509074999974 0.960285259053737 7.70509075000059 0.957444351152589 7.70509074999916 0.954603443857863 7.70509075000079 0.951762536485576 7.70509074999961 0.948921628330512 7.70509074999995 0.946080718923401 7.70509075000022 0.94323980831025 7.70509074999988 0.940398897315142 7.70509074999999 0.931876168808581 7.70509075000015 0.926194347978234 7.70509074999914 0.920512547355076 7.7050907500022 0.91483071359887 7.70509074999624 0.909148989574192 7.70509075000476 0.903466910037785 7.70509074999536 0.897785432196583 7.70509075000348 0.892103369959743 7.70509074999805 0.886421630205589 7.70509075000078 0.880739805039836 7.70509074999982 0.869376169955189 7.70509075000018 0.863694350934466 7.70509074999919 0.858012534823471 7.7050907500021 0.852330719842102 7.70509074999629 0.846648902824976 7.70509075000478 0.840967082223676 7.70509074999537 0.835285259328792 7.70509075000346 0.829603437710765 7.70509074999803 0.823921620880513 7.70509075000076 0.818239808169441 7.70509074999989 0.80971707915813 7.70509074999995 0.806876168919211 7.70509075000066 0.804035258556397 7.70509074999798 0.80119434841137 7.70509075000396 0.798353438721378 7.70509074999441 0.795512529622089 7.70509075000585 0.792671621143483 7.70509074999547 0.789830713214463 7.70509075000252 0.786989805658831 7.70509074999911 0.784148898197962 7.7050907500001 0.778467082701118 7.70509075000007 0.775626173858273 7.70509074999932 0.772785272737421 7.70509075000188 0.769944351445433 7.70509074999669 0.767103424850096 7.70509075000421 0.764262517927244 7.70509074999592 0.761421626699285 7.70509075000304 0.758580723283424 7.70509074999831 0.755739800653285 7.70509075000065 0.752898897502226 7.70509074999988 0.738694353245935 7.70509075000035 0.727330713384973 7.70509074999863 0.715967073767339 7.70509075000329 0.704603436537757 7.70509074999437 0.693239801950648 7.70509075000728 0.681876169022619 7.70509074999276 0.670512536201647 7.70509075000552 0.659148902016474 7.70509074999686 0.647785265745616 7.70509075000122 0.636421628070163 7.70509074999977 0.619376173571364 7.70509075000004 0.61369435519401 7.70509075000009 0.608012536805876 7.70509074999966 0.602330718539619 7.70509075000059 0.596648900461624 7.70509074999927 0.590967082569863 7.70509075000074 0.585285264796486 7.70509074999939 0.579603447005392 7.70509075000036 0.573921628993951 7.7050907499999 0.56823981049213 7.70509074999996 0.556876171833421 7.70509075000015 0.551194381716387 7.70509074999911 0.545512338750805 7.70509075000225 0.539831124223782 7.70509074999616 0.534148472830471 7.70509075000481 0.528467367864203 7.70509074999542 0.522785127255278 7.70509075000329 0.517103476029558 7.70509074999829 0.511421614850782 7.70509075000058 0.505739801558947 7.70509074999992 0.47733070944412 7.70509075000015 0.454603434591061 7.70509074999955 0.431876168855809 7.70509075000097 0.409148892940961 7.70509074999843 0.386421616401416 7.70509075000201 0.363694353094242 7.70509074999798 0.340967094735868 7.70509075000156 0.318239819552361 7.70509074999908 0.295512529039267 7.7050907500004 0.272785261740627 7.70509074999987 0.238694352586977 7.70509075000011 0.227330716242959 7.70509074999939 0.21596707993229 7.70509075000151 0.204603443647319 7.70509074999752 0.193239807381297 7.70509075000298 0.181876171126139 7.70509074999733 0.170512534875328 7.70509075000177 0.159148898620866 7.70509074999913 0.147785262355887 7.70509075000031 0.136421626072828 7.70509074999993 0.113694353456098 7.70509075000008 0.10233072016492 7.70509074999968 0.0909670720224964 7.70509075000076 0.0796034515749901 7.70509074999883 0.0682398130431228 7.70509075000127 0.056876160258253 7.70509074999905 0.045512533629319 7.70509075000046 0.0341489129280815 7.70509074999987 0.0227852491190353 7.70509075000002 0.0114216268927452 7.70509075 5.79900000000008e-005 7.70509075 - 5.799e-005 12 0.03130799 10 0.06255799 10 0.12505799 10 0.18755799 10 0.21880799 10 0.25005799 10 0.37505799 10 0.43755799 10 0.50005799 10 0.75005799 10 0.87505799 10 1.00005799 12 -8 5.79899999999522e-005 1.00005799 -7 0 0 10 29 4 0 1.11022302462516e-016 0 0.111373720469612 0 0.222854868712989 0 0.333888555968671 0 0.4459789374464 0 0.55647954248498 0 0.668581391024805 0 0.779586510305519 0 0.8910940437051 0 1.00245843435129 0 1.22522728159448 0 1.33661164131742 0 1.44799594935506 0 1.55938021792027 0 1.67076445922691 0 1.78214868548745 0 1.89353290891576 0 2.00491714172469 0 2.11630139612762 0 2.45045426075794 0 2.67322283589484 0 2.89599140957459 0 3.11875998162545 0 3.34152855187189 0 3.56429712014344 0 3.78706568626444 0 4.00983425006341 0 4.2326028113662 0 4.45537137 - 5.799e-005 11 0.25005799 9 0.50005799 9 1.00005799 11 -8 4.95e-005 10.70174454 -7 0 0 10 11 2 1.00005543 3.42499999996804e-005 1.00005543000002 0.714522233356203 1.00005542999994 1.42901016302895 1.00005543000014 2.14349831566587 1.0000554299998 2.85798600977847 1.00005543000022 3.57247429987626 1.00005542999982 4.28696207735667 1.0000554300001 5.00145013120096 1.00005542999996 5.71593811405583 1.00005543000001 6.43042608754641 1.00005543 7.14491407 - 4.95e-005 11 10.70174454 11 -8 4.94999999993695e-005 10.70174454 -7 0 0 6 7 2 1.00008022 10.70174454 1.00008022 8.91812870165755 1.00008022 7.1345128528121 1.00008022 5.35089703785272 1.00008022 3.56728116589766 1.00008022 1.7836653417979 1.00008022 4.94999999993695e-005 - 4.95e-005 7 10.70174454 7 -8 8.022e-005 1.00008022 -7 0 0 8 44 7 0 0 0.0312500101853637 0 0.0625000112215282 0 0.0937500063864762 0 0.124999998958206 0 0.156249992214695 0 0.187499989433941 0 0.218749993893925 0 0.281250023851357 0 0.312500188873368 0 0.343749911602939 0 0.374999927826731 0 0.406250075377093 0 0.437499971280698 0 0.468749997131025 0 0.531249998230702 0 0.562499966519099 0 0.593749990653394 0 0.625000041964788 0 0.656250050113951 0 0.687499978196004 0 0.718749897846216 0 0.757812605969801 0 0.765625016513974 0 0.773438369338462 0 0.781249316087704 0 0.789063797699258 0 0.796875769956424 0 0.804688202759971 0 0.820312969096119 0 0.828125370737943 0 0.835937789019035 0 0.843750222104974 0 0.851562668161247 0 0.859375125353431 0 0.867187591847046 0 0.890625013728808 0 0.906249985513582 0 0.921874975494871 0 0.937499978005513 0 0.9531249873785 0 0.968749997946605 0 0.984375004042828 0 1 0 - 8.022e-005 9 0.25008022 7 0.50008022 7 0.75008022 7 0.81258022 7 0.87508022 7 1.00008022 9 -8 8.02200000000752e-005 1.00008022 -7 0 0 10 11 2 1.00008022 4.95e-005 0.900080220691835 4.95000000000006e-005 0.800080168728752 4.94999999999976e-005 0.70008039264424 4.95000000000046e-005 0.600079947282075 4.94999999999947e-005 0.500080493829049 4.95000000000037e-005 0.400080043761758 4.9499999999999e-005 0.300080304672447 4.94999999999994e-005 0.200080203789997 4.95000000000007e-005 0.100080220544759 4.94999999999997e-005 8.02200000000752e-005 4.95e-005 - 8.022e-005 11 1.00008022 11 -8 0.00020743 46.24578153 -7 0 0 3 4 2 8.022e-005 10.70174454 8.022e-005 7.13451285852981 8.022e-005 3.56728117568025 8.022e-005 4.9500000001446e-005 - 0.00020743 4 46.24578153 4 -8 0.000207430000003228 46.24578153 -7 0 0 7 8 2 1.00034374 46.24578153 1.00034374 39.639270948038 1.00034374 33.0327603445863 1.00034373999999 26.4262498368236 1.00034374000002 19.8197391076333 1.00034373999999 13.2132286504086 1.00034374 6.60671800963317 1.00034374 0.000207429999999675 - 0.00020743 8 46.24578153 8 -8 0.00034374 1.00034374 -7 0 0 10 11 2 0 0 0.0999999500881446 0 0.199999293786438 0 0.300010524487044 0 0.399967295082615 0 0.50005609751992 0 0.599943652496074 0 0.700027448184805 0 0.799994284326663 0 0.900000009864911 0 1 0 - 0.00034374 11 1.00034374 11 -8 0.000343739999999926 1.00034374 -7 0 0 10 38 5 1.00034374 0.00020743 0.975343738990379 0.000207430000000003 0.950343816191408 0.00020742999999999 0.925343698612731 0.000207430000000019 0.900343641606223 0.000207429999999978 0.875344082777388 0.000207430000000017 0.85034346329948 0.000207429999999992 0.825343838084894 0.000207430000000001 0.800343756061513 0.000207430000000001 0.775343748436166 0.000207429999999999 0.725343732432926 0.000207430000000002 0.700343761249878 0.00020742999999999 0.675343590727321 0.000207430000000023 0.65034388447147 0.000207429999999965 0.625343791333255 0.000207430000000038 0.600343626080944 0.00020742999999997 0.575343832129243 0.000207430000000017 0.550343713900046 0.000207429999999993 0.525343761342508 0.000207430000000001 0.475343755049168 0.00020743 0.450343742879787 0.000207429999999999 0.425343740444252 0.000207430000000002 0.400343716854987 0.00020743 0.375343727721199 0.000207429999999996 0.350343772492064 0.000207430000000006 0.325343765981833 0.000207429999999996 0.300343698635455 0.000207430000000003 0.27534374164966 0.000207429999999998 0.225343727634588 0.000207430000000004 0.200343744945587 0.00020742999999998 0.175343749075031 0.000207430000000049 0.150343745749393 0.000207429999999919 0.125343742413284 0.000207430000000097 0.100343738449423 0.000207429999999914 0.0753437321347001 0.000207430000000057 0.0503437293318024 0.000207429999999975 0.0253437389249381 0.000207430000000006 0.000343739999999981 0.00020743 - 0.00034374 11 0.25034374 9 0.50034374 9 0.75034374 9 1.00034374 11 -8 0.00020743 46.24578153 -7 0 0 10 11 2 0.00034374 46.24578153 0.000343740000000003 41.621224133932 0.000343739999999986 36.9966666710609 0.000343740000000031 32.3721095108846 0.000343739999999951 27.7475515514332 0.000343740000000058 23.1229949700143 0.000343739999999949 18.4984366446146 0.000343740000000034 13.8738799009271 0.000343739999999984 9.24932216388076 0.000343740000000005 4.62476483902525 0.00034374 0.000207430000006391 - 0.00020743 11 46.24578153 11 -8 0.000207430000003228 46.24578153 -7 0 0 2 3 2 1.00005799 7.70509074925026 1.00005799 3.85256325005715 1.00005799 3.57407497348916e-005 - 0.00020743 3 46.24578153 3 -8 5.799e-005 1.00005799 -7 0 0 10 47 6 0 1 0 0.993749999999998 0 0.987501010538419 0 0.981250143599094 0 0.974999362400445 0 0.968749735857093 0 0.962500446429699 0 0.956250318308527 0 0.949999632876425 0 0.943749998396373 0 0.93125008334292 0 0.925000050695985 0 0.918750017114019 0 0.91250001067777 0 0.906250027878066 0 0.900000048129568 0 0.893750048284947 0 0.887500017149191 0 0.881249969993405 0 0.862499949220533 0 0.849999959809184 0 0.837499981048856 0 0.825000002638047 0 0.812500017758865 0 0.80000002307882 0 0.787500018748567 0 0.775000008404132 0 0.762499999165189 0 0.725000006577913 0 0.700000418900636 0 0.674996124150154 0 0.650007788610574 0 0.624991566918328 0 0.600005584507136 0 0.574997782778467 0 0.550000430985358 0 0.524999995742756 0 0.449999999533816 0 0.400000001137488 0 0.350000001978168 0 0.300000002216581 0 0.250000002013479 0 0.200000001529503 0 0.150000000925499 0 0.100000000362059 0 0.0500000000000016 0 5.55111512312578e-017 - 5.799e-005 11 0.06255799 9 0.12505799 9 0.25005799 9 0.50005799 9 1.00005799 11 -8 5.79899999999522e-005 1.00005799 -7 0 0 10 20 3 1.00005799 3.574e-005 0.950057949338991 3.57400000000003e-005 0.900058111585238 3.57399999999988e-005 0.850057771364433 3.57400000000023e-005 0.80005832105473 3.5739999999997e-005 0.750057570554602 3.57400000000029e-005 0.700058365556268 3.57399999999977e-005 0.650057786149051 3.57400000000014e-005 0.600058042013366 3.57399999999994e-005 0.550057990701193 3.57400000000002e-005 0.450057990273045 3.57399999999998e-005 0.400058015295386 3.57400000000007e-005 0.350057958980397 3.57399999999983e-005 0.300057980805575 3.57400000000025e-005 0.250058019032638 3.57399999999973e-005 0.200057994119238 3.57400000000022e-005 0.150057968731338 3.57399999999987e-005 0.1000580107817 3.57400000000006e-005 0.050057986369708 3.57399999999998e-005 5.79899999998967e-005 3.574e-005 - 5.799e-005 11 0.50005799 9 1.00005799 11 -8 0.48200245 12.07364253 -7 0 0 10 11 2 1.90484754 1 1.71436278645836 1.00000000000001 1.52387809678395 0.999999999999953 1.33339312691666 1.00000000000011 1.1429087712801 0.999999999999815 0.9524235362114 1.00000000000022 0.76193917455565 0.999999999999816 0.571454204771969 1.00000000000011 0.380969522292609 0.999999999999951 0.190484755371325 1.00000000000001 0 1 - 0.48200245 11 12.07364253 11 -8 0.48200245 12.07364253 -7 0 0 5 6 2 1 11.59164008 1 9.27331206634654 0.999999999999999 6.95498405939573 1 4.63665603052536 1 2.31832801717221 1 -5.55111512593258e-017 - 0.48200245 6 12.07364253 6 -8 0.19391945 2.76255209 -7 0 0 10 11 2 0 11.22612399 0 10.1035115891638 0 8.98089927643656 0 7.85828657713474 0 6.73567473366163 0 5.6130616584005 0 4.49044981462292 0 3.36783710980871 0 2.24522481425632 0 1.12261239861635 0 0 - 0.19391945 11 2.76255209 11 -8 0.19391945 2.76255209 -7 0 0 9 18 3 1 2.56863264 1.00000000000001 2.42593082675304 0.999999999999979 2.28322903912503 1.00000000000004 2.14052714986383 0.999999999999943 1.99782545691053 1.00000000000005 1.85512352331422 0.999999999999968 1.71242178701159 1.00000000000001 1.56971994388737 0.999999999999999 1.42701813579435 0.999999999999999 1.1416145088419 1.00000000000001 0.998912695336978 0.99999999999998 0.856210881803475 1.00000000000003 0.713509068241145 0.999999999999965 0.570807254650344 1.00000000000003 0.428105441030695 0.999999999999988 0.285403627382499 1 0.142701813705574 1 0 - 0.19391945 10 1.47823577 8 2.76255209 10 -8 0 1 -7 0 0 3 4 2 0 3.67726025 0 2.45150682563609 0 1.22575343236394 0 0 - 0 4 1 4 -8 0 1 -7 0 0 5 6 2 0 4.05709804 0.200000001799805 4.05709804 0.40000000064645 4.05709804 0.599999999198855 4.05709804 0.799999997982635 4.05709804 1 4.05709804 - 0 6 1 6 -8 0 1 -7 0 0 11 12 2 -1.11022302462516e-016 0 0.090909090331084 0 0.181818180896727 0 0.272727273142096 0 0.363636360063309 0 0.454545460830504 0 0.545454539117348 0 0.636363640067172 0 0.727272726913188 0 0.818181819206672 0 0.909090909737503 0 1 0 - 0 12 1 12 -8 0 1 -7 0 0 9 10 2 0 0 0 0.111111110404643 0 0.222222221611554 0 0.333333331798037 0 0.444444447205093 0 0.555555552752463 0 0.666666668320041 0 0.777777778483341 0 0.888888889679183 0 1 - 0 10 1 10 -8 0 1 -7 0 0 1 2 2 3.00864606 0 3.00864606 1 - 0 2 1 2 -8 0 1 -7 0 0 1 2 2 0 0 0 1 - 0 2 1 2 -8 0 3.00864606 -7 0 0 10 11 2 3.00864606 1 2.70778145923607 1 2.40691686155656 0.99999999999999 2.10605224734983 1.00000000000001 1.8051876212115 0.999999999999987 1.50432309089857 1.00000000000001 1.20345833399492 0.999999999999985 0.90259387400944 1.00000000000002 0.601729187608688 0.999999999999986 0.300864611528041 1.00000000000001 -4.4617441654307e-016 0.999999999999999 - 0 11 3.00864606 11 -8 0 3.00864606 -7 0 0 5 6 2 -9.70839405195408e-017 1 0.260699294310712 1 0.521398585483448 0.999999999999999 0.782097895072832 1 1.04279718572186 1 1.30349648 1 - 0 6 3.00864606 6 -8 0 1 -7 0 0 1 2 2 0 1 0 0 - 0 2 1 2 -8 0 1 -7 0 0 1 2 2 1.97290517 0 0 0 - 0 2 1 2 -8 0 1 -7 0 0 1 2 2 1.30349648 0 1.30349648 1 - 0 2 1 2 -8 0 1 -7 0 0 1 2 2 0 0 0 1 - 0 2 1 2 -8 0 1 -7 0 0 1 2 2 0 1 0 0 - 0 2 1 2 -8 0 1 -7 0 0 1 2 2 1.30349672 1 1.30349672 0 - 0 2 1 2 -8 0.5 1 -7 0 0 10 11 2 0.99985324 1.31362197 0.99985324000001 1.47868650908338 0.977637803292952 1.65124268601173 0.929801214752552 1.8268282776871 0.854099237851703 1.99922948122372 0.750465218529965 2.16099259904186 0.622153941248319 2.30397333870479 0.476148132824211 2.42286529078029 0.319650129502703 2.51574693988732 0.159246915218279 2.58312625311809 0.000146760000000024 2.62709718 - 0.5 11 1 11 -7 0 0 5 6 2 0.651748238245532 0 0.548024547120161 0 0.433715645341778 0 0.306606043213288 0 0.163810510482119 0 0 0 - 0.5 6 1 6 -8 0 0.5 -7 0 0 10 11 2 0.000146760000000024 0.000146759999999913 0.159246915430953 0.0441176869407254 0.319650120426599 0.111496992869133 0.476148153828738 0.204378676287597 0.622153909436436 0.323270540837198 0.750465246512743 0.466251423768605 0.854099220363847 0.628014379625326 0.929801220401464 0.800415710055775 0.97763780125469 0.97600123349003 0.999853240000015 1.14855743091663 0.99985324 1.31362197 - 0 11 0.5 11 -7 0 0 5 6 2 1.30349648 0 1.13968596903557 0 0.996890429415642 0 0.869780833806151 0 0.755471929370902 0 0.651748238245532 0 - 0 6 0.5 6 -8 0 1 -7 0 0 4 5 2 0.00014676 2.62709718 0.00014676 1.97035957613165 0.00014676 1.31362195250096 0.00014676 0.656884363868342 0.00014676 0.000146760000000024 - 0 5 1 5 -8 0 1 -7 0 0 3 4 2 0.00014676 0.000146760000000246 0.00014676 0.875796901824028 0.00014676 1.75144703817597 0.00014676 2.62709718 - 0 4 1 4 -8 0 0.5 -7 0 0 10 11 2 0.000146760000000024 0.000146759999999968 0.159246915222108 0.0441176868830037 0.319650129459034 0.1114969988117 0.476148133038802 0.204378655949482 0.622153940649458 0.323270584316883 0.750465219360645 0.466251367063505 0.854099236780812 0.62801443240254 0.9298012152712 0.800415678988031 0.977637802879177 0.976001247349965 0.999853240000002 1.14855743098519 0.99985324 1.31362197 - 0 11 0.5 11 -7 0 0 5 6 2 1.30349672 0 1.13968617949923 0 0.996890613173178 0 0.869780995230209 0 0.755472069793607 0 0.651748359641201 0 - 0 6 0.5 6 -8 0.5 1 -7 0 0 10 11 2 0.99985324 1.31362197 0.999853240000011 1.47868650900993 0.97763780160512 1.65124269714955 0.929801221813122 1.8268282434144 0.854099220585076 1.9992295398394 0.750465245081546 2.16099253701641 0.622153911743598 2.30397338406251 0.476148153502901 2.42286526950834 0.319650120694749 2.51574694591521 0.159246915471409 2.58312625304813 0.000146760000000024 2.62709718 - 0.5 11 1 11 -7 0 0 5 6 2 0.651748359641201 0 0.548024649491869 0 0.433715725017794 0 0.306606105319351 0 0.163810540701904 0 0 0 - 0.5 6 1 6 -8 0 3.00408138 -7 0 0 8 9 2 3.00408138 1 2.62857120902943 1 2.25306103566516 0.999999999999994 1.87755084659461 1.00000000000001 1.50204071660554 0.999999999999977 1.12653049328261 1.00000000000002 0.751020370098095 0.999999999999983 0.375510169180209 1.00000000000001 1.11448944103616e-016 1 - 0 9 3.00408138 9 -8 0 3.00408138 -7 0 0 5 6 2 -2.07823552837653e-016 1 0.260699347638647 1 0.521398688142469 1 0.782098032357405 1 1.04279737242475 1 1.30349672 1 - 0 6 3.00408138 6 -8 0 1 -7 0 0 1 2 2 3.00408138 0 3.00408138 1 - 0 2 1 2 -8 0 1 -7 0 0 1 2 2 0 1 1.97290517 1 - 0 2 1 2 -8 0 1 -1 1.97290517 0 0 1 -8 0 55.31688457 -7 0 0 8 9 2 0 55.09513178 0 48.2082403044823 0 41.321349100233 0 34.4344569348827 0 27.5475663622202 0 20.6606741799412 0 13.7737830203081 0 6.88689147792451 0 -1.60204627225624e-015 - 0 9 55.31688457 9 -8 0 55.31688457 -7 0 0 11 12 2 1 55.31688457 1.00000000000003 50.2880768800848 0.999999999999894 45.259269690319 1.00000000000025 40.2304600882515 0.999999999999559 35.2016564626053 1.00000000000057 30.1728430038668 0.999999999999427 25.1440410564378 1.00000000000044 20.1152293276968 0.999999999999748 15.0864235798192 1.0000000000001 10.0576152990077 0.999999999999975 5.0288076929403 1 0 - 0 12 55.31688457 12 -8 0 1 -7 0 0 1 2 2 0 0 1 0 - 0 2 1 2 -8 0 1 -7 0 0 11 152 16 9.03616111 0.33998394 9.03492694683461 0.337881579514934 9.03365802837837 0.335791165727328 9.03235558427816 0.33371345814961 9.03102084419046 0.331649216293567 9.02965503775069 0.329599199672078 9.02825939463153 0.327564167796651 9.02683514445173 0.325544880180061 9.02538351689344 0.323542096334256 9.02390574157916 0.32155657577151 9.02240304817549 0.319589078004088 9.01935028447266 0.315691647084252 9.01779998322769 0.313761456033108 9.01622904544826 0.311852840815746 9.0146300401287 0.30995689339802 9.01302674702583 0.308099544821558 9.01138111725351 0.306237709970532 9.00974022743682 0.304423324895972 9.00807225716937 0.30262025704346 9.00639014678705 0.300842337922438 9.00469097466729 0.299085693157087 9.0012593609245 0.295614679380043 8.99952691475417 0.293900305285298 8.99777791990779 0.292206552033917 8.99601246699389 0.290532907676096 8.99423064665221 0.288878860260763 8.99243254947354 0.287243897838932 8.99061826610716 0.285627508458856 8.98878788714811 0.284029180171739 8.98694150323062 0.282448401026259 8.98507920496701 0.280884659072789 8.98132296099073 0.277790225648909 8.97942910424586 0.27625956609204 8.97751937618067 0.27474487027359 8.97559357205895 0.273245520291675 8.97365262978249 0.271761308099021 8.97169787377269 0.270292164298189 8.96973016625746 0.268837853707068 8.9677498784344 0.267397965010415 8.96575763232713 0.265972176858122 8.96375480234027 0.26456043777009 8.95972880519215 0.261764266721789 8.95770576477109 0.260379877557254 8.95567327145518 0.259008863132638 8.95363239261708 0.25765104559474 8.95158389153097 0.256306155703149 8.94952834457119 0.254973868042499 8.94746648437955 0.253653904195577 8.94539933744776 0.252346074023534 8.94332796449618 0.251050197663334 8.9412528545365 0.249765923414536 8.93709367257399 0.247219134898585 8.93500978002588 0.245956674544508 8.93292157205797 0.244704645341821 8.9308290348222 0.243462544538886 8.92873215445977 0.242229869382316 8.92663091713178 0.241006117121493 8.92452530896977 0.239790785002269 8.92241531614011 0.238583370274144 8.92030092477671 0.237383370183581 8.91818212103724 0.236190281979041 8.91393566109468 0.233816923836932 8.91180807184306 0.23263676723575 8.90967567767313 0.231461899495384 8.90753958385483 0.23029371224334 8.90539856131531 0.229129645621261 8.90325241064379 0.22796888274919 8.90110235455174 0.226813014175672 8.89894888887878 0.225662399708068 8.89679138372977 0.224515493599967 8.89463080264681 0.22337344762677 8.89030358641594 0.221098282614444 8.88813698567773 0.219965221835827 8.88596767773869 0.218836686552217 8.88379594804272 0.21771268053065 8.88162208198972 0.216593207538956 8.87944636504922 0.215478271343872 8.87726908260193 0.214367875713271 8.87509052012049 0.213262024414139 8.8729109630006 0.212160721213962 8.87073069668931 0.211063969880048 8.86636931652507 0.20887957847939 8.86418829296388 0.207791959679875 8.86200674233862 0.206708808708625 8.85982447108231 0.205630016493715 8.85764128559194 0.204555473961956 8.85545699232165 0.203485072042111 8.85327139765241 0.202418701660555 8.8510843080413 0.201356253746017 8.84889552988117 0.200297619225347 8.84670486960842 0.199242689026603 8.8423193976641 0.197140019127858 8.84012462908126 0.196092338739976 8.83792745140638 0.19504796213631 8.83572788151591 0.194007059936877 8.83352578297644 0.192969599604893 8.83132079788812 0.191935254914506 8.82911255073181 0.190903676419803 8.82690091898915 0.189874849932507 8.82468616382446 0.188849269982827 8.82246871555066 0.18782765527041 8.81802809933618 0.185792210900773 8.81580499580823 0.184778466628268 8.81357920574179 0.18376899289593 8.81135083801852 0.182764082331529 8.80912000152282 0.181764027563016 8.80688680513355 0.180769121218078 8.8046513577373 0.17977965592469 8.80241376821259 0.178795924310582 8.80017414544425 0.177818219003645 8.79793259831359 0.176846832631698 8.79344587309266 0.174917283013436 8.79120060344281 0.173959109108919 8.78895384734474 0.17300786502235 8.78670558554548 0.172063828464923 8.78445556686399 0.171127250150222 8.78220346162242 0.170198371652604 8.7799489603727 0.169277436904338 8.7776918182414 0.168364697351617 8.7754318445056 0.167460410747358 8.77316883777939 0.166564833600841 8.76863609523786 0.164791580937565 8.76636641509845 0.163913920027999 8.76409309229951 0.16304543742245 8.76181593238018 0.162186414979667 8.75953474544838 0.161337123546322 8.75724927975361 0.160497801368368 8.75495921803574 0.159668669898028 8.75266423089633 0.158849965974042 8.7503640816641 0.158041969374482 8.74805877701541 0.15724500471952 8.74343873852894 0.155673788720393 8.74112389345964 0.154899519652911 8.73880431912069 0.154136879659932 8.73648011206121 0.153386158883922 8.7341513688443 0.152647647467216 8.73181818601278 0.15192163555239 8.72948066013258 0.151208413281693 8.72713888774862 0.150508270797714 8.7247929654211 0.149821498242772 8.72244298970142 0.149148385759344 8.71538119203165 0.147170898950848 8.7106575027719 0.14590837580232 8.70591875906338 0.144703974735531 8.70116573135895 0.143560016580505 8.69639919084295 0.142478822307231 8.69161990947351 0.141462713023594 8.68682865992383 0.140514009978199 8.68202621564693 0.139635034557232 8.67721335081804 0.138828108287318 8.67239084037618 0.138095552833399 8.66755946 0.13743969 - 0 12 0.0625 10 0.125 10 0.1875 10 0.25 10 0.3125 10 0.375 10 0.4375 10 0.5 10 0.5625 10 0.625 10 0.6875 10 0.75 10 0.8125 10 0.875 10 1 12 -8 10.79509318 65.98696054 -7 0 0 11 12 2 1 1.77635684038426e-015 0.999999999999996 5.01744249005212 1.00000000000002 10.0348850219412 0.999999999999937 15.0523272149336 1.00000000000015 20.0697706774574 0.99999999999975 25.0872111241826 1.00000000000031 30.1046565240121 0.999999999999712 35.1220960631846 1.00000000000019 40.1395406170041 0.999999999999914 45.156982132875 1.00000000000002 50.1744248719555 1 55.19186736 - 10.79509318 12 65.98696054 12 -8 10.79509318 65.98696054 -7 0 0 10 20 3 8.9364967910993e-017 1 0.126005186233783 1.00000000000001 0.252010372449022 0.999999999999944 0.378015558645665 1.00000000000013 0.504020744823829 0.999999999999807 0.630025930983324 1.00000000000021 0.756031117124381 0.999999999999821 0.882036303246788 1.00000000000011 1.00804148935069 0.999999999999952 1.13404667543601 1.00000000000001 1.38605704756957 0.999999999999996 1.51206223898351 1 1.63806739182739 1.00000000000001 1.76407267591601 0.999999999999966 1.89007768295249 1.00000000000005 2.01608308776699 0.999999999999944 2.14208809242235 1.00000000000004 2.26809337687042 0.999999999999983 2.39409853381664 1 2.52010372 1 - 10.79509318 11 38.39102686 9 65.98696054 11 -8 0 1 -7 0 0 8 51 8 0 1 0 0.98437500077415 0 0.968750001386618 0 0.953125001865184 0 0.937500002220123 0 0.921875002444383 0 0.906250002513336 0 0.89062500238504 0 0.859375001615035 0 0.843750000087235 0 0.828125003788859 0 0.812499993343556 0 0.796875000511621 0 0.78125000119448 0 0.765625000025975 0 0.734374997662308 0 0.718749996702289 0 0.70312499292573 0 0.687499995659129 0 0.671874999688806 0 0.656249998477309 0 0.640624998915187 0 0.609374999128773 0 0.593749999582356 0 0.578124999385266 0 0.562499999730399 0 0.546875001384613 0 0.53125000364954 0 0.515625004897823 0 0.48437500447526 0 0.468750003241582 0 0.453124999371074 0 0.437499998668618 0 0.421874999525713 0 0.406249998585848 0 0.390624998474694 0 0.359374999855155 0 0.343750000928147 0 0.328125002434705 0 0.312500000809035 0 0.296874999221877 0 0.281250000338328 0 0.265624999947559 0 0.218749999907059 0 0.187500000011462 0 0.156250000064615 0 0.125000000035463 0 0.093749999977081 0 0.0624999999590517 0 0.0312500000000003 0 0 - 0 9 0.125 7 0.25 7 0.375 7 0.5 7 0.625 7 0.75 7 1 9 -8 0 1 -7 0 0 11 312 32 8.66755946 0.13743969 8.61853518215067 0.129698935720928 8.56946229401492 0.122238411947448 8.52034335934806 0.115054544174876 8.47118094193558 0.108143757898504 8.42197760550044 0.101502478613629 8.37273591386659 0.0951271318156089 8.32345843072789 0.089014142999637 8.27414771991297 0.0831599376611638 8.22480634513848 0.0775609412953571 8.17543687019457 0.0722135793976128 8.10134435315466 0.0645646264959822 8.07664046359624 0.0620769905554133 8.05193051070067 0.0596509228348969 8.02721481500486 0.0572859765279116 8.00249369705338 0.05498170482778 7.97776747738332 0.052737660928109 7.95303647653398 0.0505533980220963 7.92830101505027 0.0484284693034059 7.9035614134661 0.0463624279652821 7.87881799232649 0.0443548272012637 7.82932415201165 0.040455613208204 7.80457362583695 0.0385639835805082 7.77982032039279 0.0367299620936069 7.75506374559997 0.0349529777131492 7.7303044192413 0.0332326138635983 7.70554329934974 0.0315685214332203 7.68078074126586 0.0299602589535394 7.65601627511752 0.0284072584849918 7.63124937714338 0.0269089438350674 7.60648028720193 0.0254648558328683 7.55693731787212 0.0226840791240721 7.53216343935775 0.0213473905517051 7.50738704740746 0.0200638875069831 7.48260802244817 0.0188330557355289 7.45782624487869 0.017654380982946 7.43304159514465 0.0165273489948748 7.40825395362883 0.0154514455168993 7.38346320078213 0.0144261562946708 7.35866921699635 0.013450967073778 7.33387188270349 0.0125253635998547 7.28427027392662 0.0107722996371657 7.25946584229729 0.00994481813623105 7.23465843709074 0.00916597625075362 7.20984671297901 0.00843509583403856 7.1850306106052 0.0077516706827301 7.16021108268552 0.00711532991986633 7.13538895887125 0.00652568621048924 7.1105644707298 0.00598227225237719 7.08573778258867 0.00548461175204881 7.06090969783721 0.00503231386428646 7.01125137106765 0.00421753181763606 6.98642114980257 0.00385505043325395 6.96159032776934 0.0035370415433001 6.93675936209217 0.00326306800326288 6.91192870987123 0.00303269266862452 6.8870988282442 0.00284547839487721 6.86227017430151 0.00270098803749966 6.83744320518214 0.00259878445198562 6.81261837798452 0.0025384304938152 6.78779614983417 0.00251948901847837 6.73815780585111 0.00256355674444086 6.71334170821037 0.00262656363909578 6.68852941245123 0.00273007212637102 6.66372039309672 0.00287376967424943 6.63891396059261 0.00305736455748094 6.6141096711857 0.00328053388276339 6.58930729573441 0.0035429275347171 6.5645065859003 0.00384419783826879 6.53970707555243 0.00418402473271604 6.51490815590033 0.00456210625310911 6.4653111685814 0.0053940619754165 6.44051297054015 0.00584793832339657 6.41571493522591 0.00633940380545345 6.39091641750304 0.00686810757557636 6.36611694351193 0.00743371266300945 6.3413162919873 0.00803590255546968 6.31651425653449 0.00867436194715742 6.29171037240128 0.00934875460172566 6.2669038908271 0.0100587212802103 6.24209428451718 0.010803920684167 6.19247085026106 0.0123643520438125 6.16765699058001 0.0131795814276479 6.14284152964275 0.014029569779829 6.11802500874047 0.0149140623646791 6.0932079691753 0.0158328044465375 6.068390952234 0.0167855412897272 6.04357449921958 0.0177720181585782 6.01875915142206 0.0187919803174282 5.99394545013906 0.0198451730305963 5.96913393666529 0.0209313415624216 5.9195163679264 0.023169120792037 5.89471018028559 0.0243207315203298 5.86990817505125 0.0255048083911938 5.8451071584477 0.0267210975126431 5.82031529250249 0.0279693424300097 5.79552451199923 0.0292492903464736 5.77073758542487 0.0305606860259811 5.74596366529187 0.0319032727928253 5.7211905298905 0.0332767987853741 5.69642370449429 0.0346810081454568 5.64689832844478 0.0375502853514302 5.62213997465414 0.0390153531540204 5.59738542892185 0.0405105956603977 5.57263416506523 0.0420357583747885 5.5478856569157 0.043590586801323 5.52313937828437 0.0451748264443016 5.49839480300411 0.0467882228077862 5.47365140489033 0.0484305213961047 5.44890865776865 0.0501014677133495 5.42416603546068 0.0518008072637758 5.37467998811701 0.0552557638393334 5.34993632214515 0.0570113661796158 5.32519376272457 0.0587949767013253 5.30044160835248 0.0606057208826049 5.27570712796769 0.0624450378947601 5.25094033635147 0.064309659499401 5.22619681582533 0.0662027501171159 5.20143814258614 0.0681217459930594 5.17668397062655 0.070067622288883 5.15192855819194 0.072039806699524 5.10241908273502 0.0760365802773439 5.07766488746715 0.0780611613863676 5.05291183005919 0.0801117506594152 5.02816050592171 0.0821881619402 5.00341151044199 0.0842902090728302 4.97866543904515 0.0864177059008247 4.9539228871069 0.0885704662683826 4.92918445005519 0.0907483040190877 4.9044507232735 0.0929510329969589 4.87972230217522 0.0951784670457792 4.83027726214171 0.0996823729730702 4.80556074701947 0.101958847453989 4.78084985183218 0.10425963271642 4.75614857312525 0.106584627874438 4.73145347269672 0.108933545649168 4.70676269590854 0.111306138449573 4.68207772952328 0.113702242456323 4.657398324523 0.116121650352922 4.63272158587581 0.118564088491961 4.60804886457263 0.121029389647747 4.55870868838015 0.126005246443998 4.53404135957629 0.128515805228666 4.50937618298597 0.13104877810551 4.48471255152663 0.133603948779951 4.46004985812261 0.13618110095787 4.43538749568954 0.138780018344421 4.41072485715051 0.14140048464563 4.38606133542505 0.144042283566719 4.36139632343215 0.14670519881348 4.33672921409337 0.149389014091398 4.28738958656254 0.15479801212076 4.26271715353838 0.157523198905202 4.23804272770677 0.160268915558003 4.21336693552091 0.163035004177821 4.18869040342988 0.165821306863156 4.16401375789008 0.168627665712816 4.13933762534741 0.171453922825148 4.11466263225984 0.17429992029904 4.08998940507429 0.177165500232881 4.06531857024564 0.180050504725418 4.01598293820308 0.185859047024988 3.99131802299306 0.188782586590739 3.96665737612823 0.191725225624196 3.94199969280281 0.19468683501124 3.91734797713457 0.197667221409498 3.89270233439784 0.200666234684827 3.86806122729651 0.203683749186963 3.84342684977288 0.206719583653756 3.81880277960034 0.209773536194322 3.79418408770645 0.212845531711352 3.74495912461069 0.219025286766964 3.72035265685194 0.22213304923521 3.69575155430975 0.225258557746599 3.67115516841287 0.228401673404179 3.64656285058772 0.231562257310283 3.62197395226457 0.234740170568422 3.59738782486798 0.237935274280538 3.57280381982969 0.241147429550265 3.54822128857418 0.244376497479774 3.52363958253156 0.247622339172228 3.47447652372599 0.254147292288343 3.44989523672914 0.257426406262537 3.42531275299563 0.260721988094972 3.40073287361414 0.264034071458989 3.37613963264693 0.267361923405547 3.35156758239363 0.270706770229077 3.32696128494509 0.274066348142933 3.30237490410673 0.277442644032774 3.27777707478153 0.280834327725259 3.25318081545703 0.284241790371337 3.20398695233589 0.291087872162041 3.17938966777631 0.294526503688348 3.15479268393614 0.297980637454518 3.13019665453501 0.301450185069361 3.10560223328984 0.304935058141884 3.08101007392245 0.308435168280857 3.05642083014741 0.311950427095181 3.03183515568801 0.315480746193846 3.00725370425913 0.319026037185575 2.98267712958207 0.322586211679376 2.93353504116653 0.329736150888782 2.90896936546226 0.333325888537969 2.88441123643586 0.33693056058685 2.8598550444943 0.340549032003965 2.83531491781953 0.344183466067607 2.810778877328 0.347831663362466 2.78624426035531 0.351492981312415 2.7617213389971 0.355168938812574 2.73719896538324 0.358857475356167 2.7126818195645 0.362559175374167 2.66365343813506 0.369987747533758 2.63914240820673 0.373714654046152 2.61463383493251 0.37745386569349 2.59012701417581 0.381205067178499 2.56562124180926 0.384967943203102 2.5411158136913 0.388742178470571 2.51661002569712 0.392527457682337 2.49210317368637 0.396323465541871 2.46759455353013 0.400129886750835 2.4430834610928 0.40394640601214 2.39405492339095 0.411599010043978 2.3695375915393 0.41543509876831 2.34501547123582 0.419280623297908 2.32049029011461 0.423135353112457 2.29596300675057 0.426999030884365 2.27143377421838 0.430871371204985 2.24690297307745 0.434752096596092 2.22237157235923 0.438640950093229 2.19784045232707 0.44253767163777 2.17330969764542 0.446441973436539 2.12425079179517 0.454265221339395 2.0997225318635 0.458184191304955 2.07519631804087 0.462110107180185 2.05067235977775 0.466042941400887 2.0261515088985 0.469982294606614 2.00163464769516 0.473927749812726 1.97712216302827 0.477879176766268 1.95261430943943 0.481836521809393 1.92811208295649 0.485799302118416 1.90361704637343 0.489766706847848 1.8546376845982 0.497713075671331 1.8301535529879 0.501691927724612 1.80567437193895 0.505676887606861 1.78119954273745 0.509668395506349 1.75672846666544 0.513666891609626 1.73226054501137 0.517672816106037 1.70779517905555 0.521686609181269 1.68333177008659 0.525708711024872 1.65886971938633 0.529739561823122 1.63440842824098 0.533779601764497 1.58548616762816 0.541878940308158 1.56102535955948 0.545938243541532 1.53656299075846 0.550007584074978 1.51210310102769 0.554087535189858 1.48763551750918 0.558178262363298 1.46317062104976 0.562280520809453 1.43870479304002 0.566394664069157 1.41422650407809 0.570520818705715 1.38975173000928 0.574659900459045 1.36527325618065 0.578812159691537 1.31631487652251 0.587144119061276 1.29183470307784 0.591323811517337 1.26735432287796 0.595517696398802 1.24287451278675 0.599726253360734 1.21839604966099 0.60394996205635 1.19391971036856 0.608189302141995 1.16944627176357 0.612444753269827 1.14497651071385 0.616716795096447 1.12051120407626 0.62100590727473 1.09605112871459 0.625312569459986 1.04714299426405 0.633961953152676 1.02269521877753 0.638304682881271 0.998251811646476 0.642665851924794 0.973825738927082 0.647046293055032 0.949384145799227 0.651445511637271 0.924988309294321 0.655865739987204 0.900569531474941 0.660305445113613 0.876176182960891 0.664766485440348 0.851783431822624 0.669248598751687 0.827398857486815 0.673752461772003 0.778641426457746 0.682804467234045 0.754268745020105 0.687352614760177 0.72990150538113 0.691923347066194 0.705539115261867 0.6965171041362 0.681180982384741 0.701134325955739 0.656826514470032 0.705775452507965 0.63247511924076 0.710440923779197 0.608126204417085 0.715131179752379 0.583779177721576 0.719846660413343 0.559433446875199 0.724587805745965 0.510743392324265 0.734122305724317 0.486398740856268 0.738915656825848 0.462056385368851 0.743735576174739 0.437707852871457 0.748582418586563 0.413363225728865 0.753456739478751 0.389020228507406 0.758358960415681 0.364677175635513 0.763289509516297 0.340339203919952 0.768248888839402 0.316004249210243 0.773237522387102 0.291674383920436 0.778255878945513 0.243026016494218 0.788352943671568 0.21870754501811 0.79343165216225 0.19439566127952 0.798540992633522 0.170091240779351 0.803681420937085 0.145795159017702 0.808853392926908 0.121508291495962 0.814057364453767 0.097231513713886 0.819293791372026 0.0729657011728806 0.824563129532765 0.0487117293730157 0.829865834789524 0.0244704738152226 0.835202362994346 0.000242809999999927 0.84057317 - 0 12 0.0625 10 0.09375 10 0.125 10 0.15625 10 0.1875 10 0.21875 10 0.25 10 0.28125 10 0.3125 10 0.34375 10 0.375 10 0.40625 10 0.4375 10 0.46875 10 0.5 10 0.53125 10 0.5625 10 0.59375 10 0.625 10 0.65625 10 0.6875 10 0.71875 10 0.75 10 0.78125 10 0.8125 10 0.84375 10 0.875 10 0.90625 10 0.9375 10 0.96875 10 1 12 -8 0 2.72494532 -7 0 0 8 9 2 0 0 0.340099111137137 0 0.68019821977123 0 1.02029734288953 0 1.3603964272587 0 1.70049557224311 0 2.04059465729369 0 2.38069377876185 0 2.72079289 0 - 0 9 2.72494532 9 -8 0 2.72494532 -7 0 0 9 18 3 0 1 0.151385851245213 0.999999999999999 0.302771702483559 1 0.454157553715249 0.999999999999991 0.60554340493985 1.00000000000001 0.756929256157999 0.99999999999999 0.908315107369001 1.00000000000001 1.05970095857342 0.999999999999997 1.21108680977093 1 1.51385851215238 0.999999999999998 1.66524435906055 1.00000000000001 1.81663023392999 1 1.96801602372598 0.999999999999986 2.11940197077613 1.00000000000002 2.27078772606933 0.99999999999998 2.42217363788312 1.00000000000001 2.57355946870983 0.999999999999997 2.72494532 1 - 0 10 1.36247266 8 2.72494532 10 -8 0 1 -7 0 0 11 222 23 9.03616111 0.33998394 9.03694215742438 0.344724203118509 9.03743106834477 0.349599972362949 9.03762909948982 0.354577128541447 9.03753750760005 0.359621552461846 9.03715754939132 0.364699124932557 9.03649048162005 0.36977572676111 9.03553756098884 0.374817238756114 9.03430004425826 0.379789541725138 9.03277918813838 0.384658516476522 9.03097624937433 0.389390043818187 9.02785060235152 0.39622998492821 9.02673851333553 0.398467073128076 9.02555637480118 0.400657004304862 9.02430434390742 0.402795513606199 9.0229825778109 0.404878336178551 9.02159123366959 0.406901207170194 9.02013046864106 0.40885986172719 9.01860043988377 0.410750034997765 9.01700130455369 0.412567462128444 9.01533321981033 0.41430787826682 9.01185946580982 0.41762615885311 9.01005387890149 0.419204180456617 9.00818502534187 0.42070690118611 9.00625834840466 0.422140138857408 9.00427929132679 0.423509711285952 9.00225329740724 0.424821436287783 9.00018580986149 0.426081131678154 8.99808227199527 0.427294615273171 8.99594812703633 0.428467704888192 8.99378881826541 0.42960621833909 8.99052027427123 0.431270850992669 8.98942582946185 0.431818538951593 8.98832713491626 0.43235976454524 8.98722487103686 0.432895255000339 8.98611971823793 0.433425737544087 8.98501235691851 0.433951939403128 8.98390346749051 0.434474587804509 8.98279373036005 0.434994409975189 8.98168382593211 0.435512133141945 8.98057443461562 0.436028484531812 8.97835803901762 0.437059898211499 8.97725119887464 0.43757515234031 8.97614521101321 0.438089295038549 8.97504404333975 0.438606895970718 8.97394529572358 0.439125081804631 8.97284749235944 0.439642059594702 8.97175192520884 0.440159271288301 8.97065874748904 0.44067682791533 8.96956597773181 0.441192345454931 8.96847471366064 0.441707038880307 8.96520309378236 0.443245702080652 8.9630252351487 0.444264634451814 8.96084847091076 0.445273693321173 8.95867067417337 0.446269848281322 8.95648971805251 0.447250068927547 8.9543034756465 0.448211324850921 8.95210982007605 0.449150585647762 8.94990662443931 0.450064820909145 8.94769176185246 0.450951000230351 8.9454631054202 0.451806093203983 8.94209623966957 0.453037557533943 8.94096983210148 0.45343929095662 8.93984024299913 0.453833845780974 8.93870235734653 0.454212965281375 8.9375675544718 0.454595189452477 8.93641806881865 0.454951709340205 8.93526897102352 0.455307062099092 8.93411389027325 0.455650950594202 8.93295447479885 0.455986105813039 8.93179123434619 0.456313408964613 8.92945735933155 0.456952833066316 8.92828675595016 0.457265004672385 8.92711279290848 0.457570186428641 8.92593577639203 0.457868928930109 8.92475601264105 0.458161782771673 8.92357380781558 0.458449298548548 8.92238946816814 0.458732026855396 8.92120329986573 0.45901051828753 8.92001560913933 0.45928532343972 8.91882670218119 0.459556992907047 8.9164470682234 0.460095161661928 8.91525634122088 0.460361660948969 8.91406501040741 0.460626125739731 8.91287338196943 0.460889106627604 8.91168176214672 0.461151154207344 8.91049045709477 0.46141281907178 8.90929977307559 0.461674651815884 8.90811001624233 0.461937203032703 8.90692149283805 0.462201023316705 8.90573450904651 0.462466663261483 8.90336423311719 0.46300268366069 8.902180867732 0.463272929779713 8.90100010134383 0.463546916519983 8.899820618554 0.463822220323762 8.89864545962508 0.464104406265059 8.89747272840835 0.464389985669617 8.89630228245229 0.464678686191054 8.89513708920791 0.464975939454625 8.89397591829617 0.465279477782839 8.89281779722927 0.465587506534339 8.88935308031306 0.466525942085232 8.88705579653783 0.467170085209188 8.88476870157759 0.467828370196426 8.88248945672429 0.468496419486028 8.88021572330758 0.469169855518447 8.87794516260513 0.469844300732484 8.87567543595039 0.470515377568385 8.87340420463 0.471178708465556 8.87112912996108 0.471829915863607 8.86884787324555 0.47246462220229 8.86541320706403 0.473385363780636 8.86426618515897 0.473687052255473 8.86311674274674 0.473982977734289 8.86196458863499 0.47427259522979 8.86080942912444 0.474555354911205 8.85965096927839 0.474830704633745 8.85848891430385 0.475098092471324 8.85732297082089 0.475356969246777 8.85615284821881 0.475606791063139 8.85497825996075 0.475847021835154 8.8526195898625 0.476307249804838 8.85143560068188 0.476527424461191 8.85024726270558 0.476738257208049 8.84905488124303 0.476940345463859 8.84785876165581 0.477134286648007 8.84665920922779 0.477320678178752 8.84545652933326 0.477500117475291 8.8442510272633 0.477673201956346 8.84304300836959 0.477840529040677 8.84183277796919 0.478002696147201 8.83819636824458 0.478475509789707 8.83576447038673 0.478772468650345 8.83332739044344 0.479055956622016 8.83088757102534 0.479330753049182 8.82844745476481 0.479601637278106 8.82600948426362 0.479873388652472 8.8235761021582 0.480150786518819 8.82114975105265 0.480438610221193 8.81873287357638 0.480741639105381 8.81632791234194 0.481064652516188 8.81274200878629 0.481586318440205 8.81155040021314 0.48176659063532 8.81036204521245 0.481952450658458 8.80917931558503 0.482148363514808 8.80800057687679 0.482351296123671 8.80682477855312 0.482559308411347 8.80565261197577 0.482773720206748 8.80448405002656 0.482994506804513 8.80331772186568 0.483219128499009 8.80215419706247 0.483448677296023 8.79983152334695 0.483915377444948 8.79867242568078 0.484152624712907 8.79751527710945 0.484393252203944 8.79635978751373 0.484636742947263 8.79520566681517 0.484882579972676 8.79405262487875 0.485130246309338 8.79290037163138 0.485379224986841 8.79174861694575 0.485628999034714 8.79059707073272 0.485879051482253 8.7894454428814 0.486128865359057 8.78714144370076 0.48662698203001 8.78598907236838 0.486875284824727 8.78483603919565 0.487122315107468 8.78368205406252 0.487367555905983 8.78252682689116 0.487610490250034 8.78137006754048 0.487850601166421 8.78021148594503 0.488087371685389 8.77905079196637 0.488320284833962 8.77788769552289 0.488548823641591 8.77672190649752 0.488772471136266 8.77438436308382 0.489208949557063 8.77321248703947 0.48942155170177 8.77203823175133 0.489629908939999 8.77085743187801 0.489826216707144 8.76967836205925 0.490026064462444 8.76848966435087 0.490208121707891 8.76729746544211 0.490383938270171 8.76610328950893 0.490556409424683 8.7649041747198 0.490719993617191 8.76370239731524 0.490879000142946 8.76008819824389 0.491340719387996 8.75766721949253 0.491628714298285 8.75523714284016 0.491901661242266 8.75280038308338 0.492164330173298 8.75035935502958 0.492421491044815 8.74791647347343 0.492677913810299 8.74547415321923 0.492938368422951 8.74303480906844 0.493207624836463 8.74060085581916 0.493490453003993 8.7381747082751 0.493791622879092 8.73455081771611 0.494278045183148 8.73334538070529 0.49444590898894 8.73214296995342 0.494620471637442 8.73094330822988 0.494801218730858 8.72974753027548 0.494990343970562 8.72855561385878 0.495187822033 8.7273671144923 0.49539281769671 8.72618314497569 0.495607482524653 8.72500505951067 0.495834431126079 8.72383045962155 0.496069080682057 8.72148941106256 0.496556079633611 8.7203228281369 0.496808171551855 8.71915990834473 0.497068339652831 8.71800037344665 0.497336067675272 8.71684394523962 0.497610839360807 8.71569034546856 0.497892138446924 8.71453929593694 0.498179448675754 8.71339051839504 0.498472253785284 8.71224373463294 0.498770037516454 8.71109866641583 0.499072283608532 8.70766777373417 0.499990860187529 8.70538626712111 0.500619027377904 8.70310828559746 0.501258848464632 8.70083160021916 0.50190619420954 8.69855398336033 0.50255693504926 8.69627320841747 0.503206941087213 8.6939870502023 0.50385208210391 8.69169328452097 0.504488227546246 8.68938968853946 0.505111246536561 8.68707404052694 0.505717007866411 8.68474412 0.50630138 - 0 12 0.125 10 0.1875 10 0.25 10 0.28125 10 0.3125 10 0.375 10 0.40625 10 0.4375 10 0.46875 10 0.5 10 0.5625 10 0.59375 10 0.625 10 0.6875 10 0.71875 10 0.75 10 0.78125 10 0.8125 10 0.875 10 0.90625 10 0.9375 10 1 12 -8 0 1 -7 0 0 10 38 5 1 0 0.975000000000004 0 0.950000006401749 0 0.925000004888471 0 0.899999994293789 0 0.874999981650047 0 0.849999977234337 0 0.824999989617775 0 0.800000020711123 0 0.775000060813665 0 0.72500010650604 0 0.700000139053616 0 0.674999987571804 0 0.650000460765151 0 0.624998994703204 0 0.60000054140304 0 0.574999680116269 0 0.55000004593225 0 0.524999944291789 0 0.474999918076515 0 0.449999934458026 0 0.425000064178845 0 0.400000072687117 0 0.37500001047011 0 0.349999914501244 0 0.324999918250023 0 0.300000139933745 0 0.275000094877938 0 0.225000047207865 0 0.199999975722988 0 0.174999953958752 0 0.150000010217268 0 0.12500009422964 0 0.100000131830193 0 0.0750000942166869 0 0.0500000322013259 0 0.0250000258621326 0 0 0 - 0 11 0.25 9 0.5 9 0.75 9 1 11 -8 0 1 -7 0 0 11 242 25 8.68474412 0.50630138 8.58667610594276 0.520421918009433 8.48866201111845 0.534909523730818 8.39069534536866 0.549715747721165 8.29276845880819 0.564792331363556 8.19487480447899 0.580090834760861 8.09700793908139 0.595562801105519 7.99916060016539 0.611159908378749 7.90132524859098 0.626833879952443 7.80349551592956 0.642536246419629 7.70566604692046 0.658218371698454 7.55890639335147 0.681639529954779 7.50998398415175 0.689429569444467 7.46105803593038 0.697196573242559 7.41212717760295 0.704934576473211 7.36319058015729 0.712637526807127 7.31424731000717 0.720299388787606 7.26529589421302 0.727914213969369 7.21633480030417 0.735476063513731 7.16736347843119 0.742978840053649 7.11838255904969 0.750416255805406 7.04489483699405 0.761465373205932 7.02039624523251 0.765130571608187 6.99589490192074 0.768777166852696 6.97139073990472 0.77240439651269 6.94688369205976 0.776011498162004 6.92237369121279 0.779597709373482 6.8978606702535 0.783162267721239 6.87334456200656 0.786704410778076 6.84882529935063 0.790223376117924 6.82430281512869 0.793718401313885 6.77525126927542 0.800659046565283 6.7507222076003 0.804104664777407 6.72618978642589 0.807524647660579 6.70165394960774 0.810918745834065 6.67711464300199 0.814286801739238 6.65257180958469 0.81762852653328 6.62802538990857 0.820943515364279 6.60347532466037 0.824231372679689 6.57892155708404 0.827491819362535 6.55436403204452 0.830724653352551 6.48068000389164 0.840338999854331 6.43154174555775 0.846636528164721 6.38239028379314 0.852819073144436 6.33321273836767 0.858885757598402 6.28404184724704 0.864829511756756 6.2348194942877 0.870655599116283 6.18560877011508 0.876352829582298 6.13636782523559 0.881924258487 6.08711765534648 0.88736441004303 6.03785268677187 0.89267141520437 5.96393626684055 0.900427826265665 5.93929423978581 0.902979323505286 5.91464920554515 0.905496360919235 5.89000116853728 0.907978737985289 5.86535019342414 0.910426171625699 5.84069645422062 0.91283822887941 5.81604015310795 0.915214438185742 5.79138139847879 0.917554456523362 5.76672013185408 0.919858169579654 5.74205619321947 0.922125602203318 5.69272303557034 0.926587430439187 5.66805380696755 0.928781839188791 5.64338189361164 0.930939596048003 5.61870726052028 0.933060554495348 5.59402987272428 0.935144568007919 5.56934969523779 0.937191490065635 5.54466669309026 0.939201174144068 5.51998083130134 0.941173473723974 5.49529207489448 0.943108242281325 5.4706003888928 0.945005333295473 5.39651643717131 0.950583134141051 5.34711527775901 0.954150371772692 5.29770198028315 0.957565140963483 5.24827626493673 0.960826269538881 5.19883785192978 0.963932585322771 5.14938646144476 0.966882916141323 5.0999218136995 0.969676089817904 5.05044362887542 0.972310934178779 5.00095162718403 0.974786277047746 4.9514455288171 0.977100946250258 4.8524045791357 0.981406592971657 4.80287009402663 0.983398127265077 4.7533188212271 0.985223403068274 4.70375566922706 0.986889136219669 4.65418188510401 0.988396475998657 4.60459842302655 0.989746126392854 4.55500771993022 0.990941045645065 4.50541197262916 0.991983826964563 4.4558122579238 0.99287536074285 4.40621092736102 0.993618475433981 4.30700835813369 0.99481142624689 4.25740692201845 0.995261348632281 4.2078091275965 0.995566346425931 4.15820861962748 0.995730215130108 4.10862873600428 0.995750409620523 4.05903236173816 0.995637293848612 4.00947175468899 0.995382147048287 3.95990256251469 0.994996878724354 3.91035397608586 0.994477693824713 3.86082212714513 0.993827856846446 3.78654096369736 0.992662594844146 3.76178346178108 0.992242397984291 3.73702845573414 0.99179081300547 3.71227555551919 0.99130822797927 3.68752437111242 0.990795030981046 3.66277451247061 0.99025161008048 3.63802558957225 0.989678353353953 3.61327721237651 0.989075648871515 3.58852899085637 0.988443884708043 3.56378053497679 0.987783448935437 3.51428237443644 0.986406010318728 3.48953248006329 0.985689001597792 3.46478275215435 0.984944133990065 3.44002847537633 0.984171661596518 3.41527652326105 0.983372197471599 3.39052103331593 0.982545960182145 3.36575970522217 0.981693278638062 3.34099848820546 0.980814737257106 3.3162352430755 0.979910669937729 3.29147071889076 0.978981500033335 3.24194033529894 0.977073793240628 3.21717443140338 0.976095254973765 3.19240827237957 0.975092446144914 3.16764231519231 0.974065781061499 3.14287701681871 0.973015674032729 3.11811283421809 0.971942539365646 3.09335022437022 0.970846791369268 3.06858964423599 0.969728844351291 3.04383155079032 0.968589112620027 3.0190764009997 0.96742801048359 2.96957290266988 0.965063894016773 2.9448244202789 0.963860940532382 2.92008086833945 0.962636957567959 2.89533793055485 0.961394529229419 2.87060598816961 0.960129558521711 2.84587652575979 0.958846538370408 2.82114746777664 0.957547034264467 2.79642616132441 0.956228328402877 2.77170476393888 0.954894607886669 2.74698650419011 0.953545027033555 2.69755309137074 0.950816829054876 2.67283807850073 0.949438148196629 2.64812425249649 0.948045737796972 2.62341110668357 0.946640450179829 2.59869813438675 0.945223137676016 2.5739848289346 0.9437946526062 2.54927068364807 0.942355847302851 2.52455519185823 0.940907574087446 2.49983784688647 0.939450685289675 2.47511814206096 0.937986033234354 2.42567299935202 0.935042907262714 2.40094754945893 0.933564432979195 2.37621839208554 0.932079889879012 2.35148608994128 0.930590162956133 2.32675139053722 0.929096142850671 2.30201477081183 0.927598711938904 2.2772764700509 0.926098745336138 2.25253674774407 0.92459711877621 2.22779610322669 0.923094715318002 2.20305519375398 0.921592422845112 2.15357318188714 0.918589805777396 2.12883221405864 0.917089515584263 2.10409145019323 0.915591005311081 2.07935155319306 0.91409527495111 2.0546130211618 0.912603245448651 2.02987610739197 0.911115720327406 2.0051410492238 0.90963349545009 1.9804083324466 0.908157485853965 1.95567871833727 0.906688738713119 1.93095276002464 0.90522820137981 1.88150631036598 0.902324025687229 1.85678584016397 0.900880397467173 1.832067631635 0.899445674483201 1.80735119182063 0.898020302344648 1.78263602776973 0.896604726661578 1.7579216465213 0.895199393043368 1.73320755512479 0.893804747099733 1.7084932606209 0.892421234440502 1.68377827005612 0.891049300675121 1.65906209047392 0.889689391413398 1.60962636736414 0.886994513116536 1.58490695057096 0.885659548205017 1.56018449348925 0.884337470861121 1.53546201876188 0.883028841079718 1.51073193867829 0.881733873632192 1.48600165459207 0.880453270982725 1.46126875744962 0.879187416400322 1.43652481595648 0.877936497202224 1.41178083641626 0.876701333153063 1.38703194482059 0.875482227315368 1.33752816081756 0.873077179762259 1.3127730998466 0.87189123256178 1.28801534905495 0.870722339178138 1.26325538758968 0.869570976849067 1.23849369460111 0.868437622818078 1.21373074923462 0.867322754320202 1.18896703064172 0.866226848600354 1.16420301796764 0.865150382894167 1.1394391903629 0.864093834444334 1.11467602697442 0.863057680489213 1.06515198692765 0.861027116049328 1.04039102108491 0.860032702720722 1.01563205028584 0.859059650246088 0.990874963023737 0.858108417030748 0.966118855030088 0.857179436204423 0.941369268893151 0.856273346458334 0.916623212360691 0.855390514344373 0.891875133824929 0.854531224805385 0.867131869054896 0.85369615776839 0.842388409656881 0.852885615497613 0.792903042546476 0.851314566300716 0.768160929397414 0.850554052825875 0.74341889515444 0.849818996763779 0.718676448315426 0.849109844401721 0.693933097382287 0.848427042030458 0.669188350850987 0.847771035935893 0.644441717224387 0.847142272409182 0.619692704998937 0.846541197737047 0.594940822675892 0.845968258209119 0.570185578753619 0.845423900113564 0.520667384710084 0.844393239364649 0.495904312458489 0.843906933493352 0.471137808741556 0.843450125671688 0.446364062616928 0.843023174782593 0.421586246536745 0.84262662359037 0.396806171484512 0.842260978999752 0.372022535961203 0.841926665960567 0.3472355681804 0.841624149713524 0.322447944759731 0.841353959974822 0.297658514328771 0.841116525650172 0.24807860761157 0.840708153923747 0.223288020179387 0.84053721358575 0.198497396310213 0.840399993748332 0.173707333640297 0.840296969384311 0.148918429806501 0.840228615471421 0.12413128244486 0.840195406980181 0.0993464891922709 0.84019781888949 0.0745646476849273 0.8402363261704 0.0497863555594745 0.840311403799919 0.0250122104523296 0.84042352675141 0.00024281000000001 0.84057317 - 0 12 0.125 10 0.1875 10 0.21875 10 0.25 10 0.3125 10 0.34375 10 0.375 10 0.4375 10 0.5 10 0.5625 10 0.59375 10 0.625 10 0.65625 10 0.6875 10 0.71875 10 0.75 10 0.78125 10 0.8125 10 0.84375 10 0.875 10 0.90625 10 0.9375 10 0.96875 10 1 12 -8 0 1 -7 0 0 11 62 7 0 0 0 0.011363636363636 0 0.0227272726955003 0 0.0340909090429152 0 0.0454545454430845 0 0.0568181819229988 0 0.0681818184996005 0 0.0795454551795459 0 0.0909090919594956 0 0.10227272882581 0 0.113636365754824 0 0.136363639670449 0 0.147727276662543 0 0.159090911620726 0 0.17045455129816 0 0.181818182637426 0 0.193181810640526 0 0.204545450266624 0 0.215909095605229 0 0.227272727949287 0 0.238636365550928 0 0.272727273863937 0 0.295454543612129 0 0.318181816780574 0 0.340909078699388 0 0.363636356339593 0 0.386363641806436 0 0.409090906987479 0 0.431818164255926 0 0.454545449727582 0 0.477272723718024 0 0.51136363475553 0 0.522727271677702 0 0.53409090701677 0 0.545454543730296 0 0.556818180632824 0 0.568181815811035 0 0.579545450469468 0 0.590909087841127 0 0.602272727943527 0 0.613636365181366 0 0.636363638714159 0 0.647727274864886 0 0.659090910655486 0 0.670454546311849 0 0.681818182022328 0 0.693181817930709 0 0.704545454128235 0 0.715909090646422 0 0.727272727449392 0 0.73863636442639 0 0.772727275300148 0 0.795454549680486 0 0.818181816768056 0 0.840909079709345 0 0.863636386799946 0 0.886363580318735 0 0.909090941508985 0 0.931818180578928 0 0.95454545895252 0 0.977272727272714 0 1 - 0 12 0.125 10 0.25 10 0.5 10 0.625 10 0.75 10 1 12 -8 0.49271381 3.01761452 -7 0 0 4 5 2 0 55.4348855 0 41.5761641195265 0 27.7174427697608 0 13.8587213905875 0 2.60208521396521e-015 - 0.49271381 5 3.01761452 5 -8 0.49271381 3.01761452 -7 0 0 1 2 2 2.52490070971683 0 5.84379211687747e-010 0 - 0.49271381 2 3.01761452 2 -Curves 311 -7 0 0 5 6 2 28.764323306232 -1.33232061328183 0.776095407667552 28.7631626161769 -1.33118958622811 0.785466025745633 28.7644648862387 -1.32985992316495 0.79335818044249 28.768239196418 -1.32839266909526 0.799787920850886 28.7744897667149 -1.3268249520208 0.804772078665621 28.7832164471294 -1.32517199794229 0.80832593387442 - 0 6 0.2 6 -7 0 0 14 41 4 28.8098298583934 -1.32059808672504 0.816143875492752 28.8083149183215 -1.32082796973596 0.815889182877655 28.8069891582585 -1.3210267897454 0.815683583508889 28.8058128482026 -1.32120332675379 0.815500831497209 28.8047545081524 -1.32136251576135 0.815334554160311 28.8037969481069 -1.32150875376829 0.815169133357454 28.8029112480648 -1.32164304277467 0.815023895657556 28.8021031680264 -1.32177022678071 0.814859010574724 28.8013376779901 -1.32188851878633 0.814719312124089 28.8006268379563 -1.32200227779174 0.814562661115648 28.7999516679242 -1.3221110107969 0.814409973183396 28.7993063378936 -1.32221578680188 0.814258970712224 28.7986903978643 -1.32231819980674 0.814098731704613 28.798094497836 -1.3224184178115 0.813936620551913 28.7967547177724 -1.32264686582235 0.81355232699366 28.7960222977376 -1.32277408182839 0.813327508596982 28.7953062777036 -1.3229004298344 0.813095395235957 28.7945973376699 -1.32302731184042 0.812854622721521 28.7938867476362 -1.32315610484654 0.812603444731591 28.7931659876019 -1.32328822885282 0.812339680055063 28.7924263975668 -1.32342519685932 0.812060598097807 28.7916586475303 -1.32356869786614 0.811762880044666 28.790851987492 -1.32372069787336 0.811442585454453 28.7899934474512 -1.32388355288109 0.811094990335943 28.7890669374072 -1.32406018388948 0.810714238686858 28.788051557359 -1.3242543458987 0.810292969605849 28.7869174573051 -1.324471114909 0.8098224422295 28.7852864672277 -1.32478042092369 0.809159998211036 28.7849453572115 -1.32484500492676 0.809022068784485 28.7845928871947 -1.32491165092992 0.808880041881739 28.7842284171774 -1.32498050693319 0.808733468513777 28.7838512771595 -1.32505173893658 0.808581816056574 28.783460777141 -1.32512552894008 0.8084244689081 28.7830561771217 -1.32520207794372 0.808260718840322 28.7826366971018 -1.3252816109475 0.808089744554201 28.7822015270812 -1.32536437895143 0.807910581160692 28.7817498370597 -1.32545066395553 0.807722078691738 28.7812807670374 -1.32554078995981 0.807522850575275 28.7807934770143 -1.32563512296429 0.807311211254223 28.7802871169902 -1.32573408896899 0.807085103556484 28.7797609069652 -1.32583817597393 0.806842015435937 - 0.625 15 0.672274639 13 0.734255787 13 0.75 15 -7 0 0 6 7 2 28.7832164471294 -1.32517199794229 0.80832593387442 28.7914793375218 -1.32360689686795 0.811690895844247 28.8001096979317 -1.32207158379503 0.814533341462256 28.8090491683563 -1.32058408072438 0.816819928019863 28.8182268587923 -1.31916069965677 0.818530258462099 28.8275643192358 -1.31781358259278 0.81966044530278 28.8369834496832 -1.31655043853279 0.820220862617399 - 0.2 7 0.4 7 -7 0 0 9 18 3 28.837212029694 -1.31651983653133 0.820234224483033 28.8350109695895 -1.31681561454538 0.820099489463634 28.8332774695071 -1.31704273155617 0.820036826811657 28.8318383294388 -1.31723420556526 0.819964087973203 28.8306061993802 -1.31739874957308 0.819898529204089 28.8295245493289 -1.31754613358008 0.819820749555394 28.8285534892828 -1.31767994358644 0.819741576363634 28.8276636592405 -1.31780490159237 0.819653651847458 28.8268308692009 -1.31792394559803 0.819558056661917 28.8253991291329 -1.31813296060795 0.819366071954798 28.8247872791039 -1.31822387261227 0.819273930171422 28.8241856290753 -1.31831465861658 0.819174834215715 28.8235838190467 -1.31840673062096 0.819068233406652 28.8229702790176 -1.31850179662547 0.818952661214162 28.8223318889872 -1.31860189363023 0.818825761201135 28.821653098955 -1.31870954063534 0.818684094034406 28.8209112889198 -1.31882845464099 0.81852227582772 28.8200653888796 -1.31896532764749 0.818330998054635 - 0.375 10 0.444639259 8 0.5 10 -7 0 0 4 5 2 28.8369834496832 -1.31655043853279 0.820220862617399 28.8374470997052 -1.31648826352983 0.820248429679708 28.8399875498258 -1.31612093151239 0.820557380502382 28.8446042000451 -1.31544842048044 0.821147661621419 28.8512877803626 -1.31447021343398 0.822017542732736 - 0.4 5 0.6 5 -7 0 0 5 10 3 28.8616900808567 -1.31305132736659 0.822754478269739 28.8596917907617 -1.31331593737916 0.82266123877631 28.8579017606767 -1.31355080839031 0.822597422024279 28.8563390706025 -1.31375986840024 0.822514661872348 28.855001340539 -1.31394295040894 0.82241574237665 28.8531212804497 -1.31420579242142 0.82223974185929 28.8524613104183 -1.31429988742589 0.822165755300776 28.8518996203916 -1.31438093942974 0.82209699969451 28.8514344903695 -1.31444866443296 0.822037097422665 28.851064970352 -1.31450290543553 0.821988064078336 - 0.125 6 0.199338336 4 0.25 6 -7 0 0 4 5 2 28.8593423607451 -1.31336093238129 0.822651636094854 28.8627165609054 -1.31291584736015 0.822800061676904 28.8675518911351 -1.31221184832672 0.82340106936345 28.873844821434 -1.31124906028099 0.824453830151454 28.8815857818017 -1.3100262342229 0.825953884705703 - 0.8 5 1 5 -7 0 0 14 28 3 29.7795252944515 -1.17556651583641 0.898635472668893 29.7494215730216 -1.18022998805791 0.897425283353412 29.7194628615987 -1.18486855827823 0.896073638636212 29.6896410501822 -1.1894827514974 0.89458867242368 29.659949838772 -1.1940725507154 0.892981689068352 29.6303567073664 -1.1986411519324 0.891247506605983 29.6009010359673 -1.20318300114812 0.889427275436527 29.5714944045705 -1.20770954836312 0.887461291075147 29.54221788318 -1.21220698357674 0.885455180312862 29.5129814517913 -1.2166906497897 0.883305046149736 29.4838272604066 -1.22115019100152 0.881106290579301 29.4547216290241 -1.22559199221249 0.878814434878444 29.4256623476439 -1.23001453742255 0.876456163868432 29.3966378162653 -1.23441901863175 0.87403157430927 29.3331173732482 -1.24402824808817 0.868590518671834 29.2986319716103 -1.24922569333503 0.865549127890376 29.2641657899732 -1.25439935058077 0.862433189800376 29.2297023483363 -1.25955026382542 0.859252295581292 29.1952251866987 -1.26467946606905 0.856015881666571 29.1607179250597 -1.26978797631169 0.852733296330656 29.1261641434185 -1.2748767945534 0.849413863666992 29.0915474117743 -1.27994690279421 0.846066946315022 29.0568511801263 -1.28499925803419 0.842702008647196 29.0220587484738 -1.29003479427336 0.839328681679971 28.9871532568158 -1.29505441051178 0.835956831438817 28.9521175551517 -1.30005897774949 0.832596632098216 28.9169342834806 -1.30504932498651 0.82925864551367 28.8815857818017 -1.3100262392229 0.825953908590704 - 0.8 15 0.891306872 13 1 15 -7 0 0 12 13 2 29.1024811722936 -1.27830134371605 0.847100938681134 29.2616749298549 -1.25501573061005 0.862419606980731 29.3883294158707 -1.23597266670555 0.873720132031477 29.4953334409531 -1.21963353492948 0.88247538610133 29.588514715379 -1.20525221024641 0.889306178618775 29.6721690193523 -1.19226740662966 0.894647160910458 29.7489788530006 -1.18030879606166 0.898722025016004 29.8213373464375 -1.1690458545267 0.90170505207869 29.8910892397505 -1.15820558301181 0.903662570311667 29.9601033430285 -1.14751396150399 0.904624392417351 30.0303755963662 -1.13665427398818 0.90453573072014 30.1043241198786 -1.12523987844602 0.903267088482883 30.1859472237555 -1.11255269284341 0.900484930273737 - 0.2 13 0.4 13 -7 0 0 9 18 3 30.1859472237555 -1.11255269284341 0.900484930273737 30.2565114071071 -1.10158446532245 0.898079721124496 30.3226436402482 -1.09124671183144 0.894843704381793 30.386809883296 -1.08115591135215 0.890829558584132 30.4506020063259 -1.07103903287162 0.886023107082837 30.5154086394041 -1.06063934237766 0.880370377533347 30.5825117725913 -1.04969799285798 0.87377556263411 30.6532954659533 -1.03790217629771 0.86608924821303 30.7293636595664 -1.02485763667812 0.85709297084073 30.8298768443405 -1.00688389482442 0.844241206312304 30.8472113251638 -1.00376094667608 0.841994438852588 30.8648723760027 -1.00055422452377 0.839674728249408 30.882878886858 -0.997257940678208 0.837278691605602 30.9012507277306 -0.993865835692092 0.834802657894997 30.9200089286215 -0.990371096721101 0.832242624769402 30.9391757195319 -0.986766271188881 0.829594215388609 30.9587747404628 -0.983043182844043 0.826852635232391 30.9788311014155 -0.979192847362162 0.824012628924498 - 0.4 10 0.566121971 8 0.6 10 -7 0 0 10 47 6 30.9858701317498 -0.977839270163871 0.823014661591097 30.9722836111045 -0.980456105749164 0.824943199185698 30.9586704504579 -0.983059451071816 0.826865707596012 30.9450273798099 -0.985650381673879 0.828781691613016 30.93134616916 -0.988230140019411 0.830690960943702 30.9176314485086 -0.990799470552447 0.832592411220016 30.9038676778549 -0.993359859618059 0.834486269485969 30.8900577871989 -0.995912091153284 0.836371457703511 30.8761933165404 -0.998457365608178 0.838247617865624 30.8622706758791 -1.00099669554479 0.840114002204272 30.8278562342445 -1.007233103841 0.844680720136179 30.8072928032678 -1.01092464601634 0.847369158930874 30.786579722284 -1.01460904419134 0.8500330192414 30.7657020612924 -1.01828955736616 0.852669824517642 30.7446446502922 -1.02196944454094 0.855276774944465 30.7233920492827 -1.02565198771585 0.85785070025772 30.7019285382633 -1.02934050189105 0.860388007241236 30.680237987233 -1.03303836106669 0.862884624763818 30.6583036361912 -1.03674901024293 0.86533594923325 30.6246076945907 -1.04240697451167 0.868980695246366 30.6130375040412 -1.0443423446036 0.870211039375805 30.6013950534882 -1.04628253969575 0.871427444204581 30.5896782329317 -1.04822800278816 0.872629492661675 30.5778849323715 -1.05017918688083 0.873816732098066 30.5660129918076 -1.0521365499738 0.87498867428673 30.5540602212399 -1.05410055706709 0.876144795421643 30.5420244006682 -1.05607167816071 0.877284536121777 30.5299032700925 -1.05805039125469 0.878407301424106 30.5005922287003 -1.06282032848125 0.881060598077131 30.4833180078798 -1.0656193276142 0.882574177892022 30.4658656570509 -1.06843551474796 0.884051450466189 30.4482288162132 -1.0712702578826 0.885490511643541 30.4304009453664 -1.0741249620182 0.886889284168979 30.4123753845103 -1.0770010701548 0.888245498952395 30.3941452536444 -1.0799000732925 0.889556676368673 30.3757035227684 -1.08282350843135 0.890820107520683 30.3570429518821 -1.08577296857145 0.892032835530284 30.3278762104968 -1.09037052078982 0.893822357797282 30.3175292800053 -1.09199913786717 0.89443709825948 30.3071139895106 -1.09363622594493 0.895035344591896 30.2966289490126 -1.0952820630231 0.895616555015502 30.2860727785112 -1.09693693310171 0.896180159580271 30.2754440480064 -1.09860112618075 0.896725560169177 30.264741317498 -1.10027494026025 0.897252130489187 30.2539631069861 -1.10195867934023 0.897759216085273 30.2431079164705 -1.10365265242069 0.8982461343244 30.2321741959512 -1.10535717650165 0.898712174408536 - 0.4 11 0.441198284 9 0.501374891 9 0.532553008 9 0.576228162 9 0.6 11 -7 0 0 12 46 5 30.9788311014155 -0.979192847362162 0.824012628924498 31.0384235142459 -0.967752546075777 0.815574260834697 31.0829604763613 -0.95884980103692 0.809214432952621 31.1187352080605 -0.95155721148054 0.804078118782659 31.1481829394592 -0.945439747025976 0.79983136648395 31.1731352906444 -0.94019743987698 0.796220701800452 31.1945204416601 -0.935644890153746 0.793117371240052 31.2132022725475 -0.931637044705383 0.790400352656001 31.2296458233285 -0.928075913873239 0.788004511147204 31.2442988740245 -0.924881544034514 0.78586663353266 31.2574534546493 -0.921994542097389 0.783945436459408 31.2693581452147 -0.919366775652577 0.782205639782773 31.2910523362452 -0.914552734846922 0.779034137379134 31.3008419967102 -0.912366448047079 0.777602409296131 31.3097674871341 -0.910362377002891 0.776297208849137 31.3179733075238 -0.908511192522964 0.775097893775173 31.3255720678848 -0.906789714394198 0.773988336055471 31.3326546082212 -0.905179036829695 0.772955507356415 31.3392959985366 -0.903663383020705 0.771988636245491 31.3455593488341 -0.902229362913593 0.77107867531427 31.3514985991162 -0.900865417484809 0.770217905849386 31.3571608893852 -0.899561343042869 0.769399598640518 31.362588629643 -0.898307898311334 0.768617739085382 31.3730517201399 -0.895885315806267 0.767116091761058 31.3780870803791 -0.894716181577736 0.766396303734869 31.3829648806108 -0.893580677750803 0.765702108733897 31.3877198808366 -0.892471041450098 0.765028643561909 31.3923847010582 -0.891379899407271 0.764371394227691 31.396991041277 -0.890300001124979 0.763726029186038 31.4015706514945 -0.889223996545871 0.763088263235746 31.4061564017123 -0.888144196224584 0.762453719817607 31.4107836219321 -0.887052251011719 0.7618177587814 31.4154919721557 -0.885938689288828 0.761175237409882 31.4203281423854 -0.884792248887375 0.760520171830768 31.4303709928624 -0.882405634115017 0.759170361100656 31.4355776631097 -0.881165466065112 0.758475618622657 31.4410277233686 -0.879864242210307 0.757753649427365 31.4467879536422 -0.87848570903483 0.756996051276381 31.4529477039348 -0.87700752463862 0.756191538996169 31.459605824251 -0.875405599896533 0.755327834410145 31.4669083045979 -0.873643077370818 0.754386589147439 31.4750394649841 -0.871673736234279 0.753344782603955 31.4842521454217 -0.869434081090901 0.752170891796199 31.49495373593 -0.866819169638699 0.750813560780729 31.5077222365364 -0.863681795405682 0.74920044876211 31.5238736173036 -0.85967247649725 0.747163416475356 - 0.6 13 0.65 11 0.7 11 0.75 11 0.8 13 -7 0 0 13 38 4 31.5669417893492 -0.848882981573776 0.741834860685264 31.5497705185336 -0.853223773892953 0.743916620376142 31.5326284477194 -0.85752310662516 0.746032829314656 31.5155107169064 -0.861781948879444 0.748181984326736 31.498428786095 -0.866000775046828 0.750361645569264 31.4813413152834 -0.870181604513406 0.752572569399277 31.4643047244742 -0.874323531092137 0.754809715409536 31.4472451936639 -0.878429589725165 0.757075786174169 31.4302228128554 -0.882498621726433 0.759365660618932 31.4131892020464 -0.886532936541053 0.761680531913882 31.3961654512378 -0.890532539614024 0.764017624431888 31.379137950429 -0.894498597604402 0.766376149517912 31.36210626962 -0.898431809946219 0.768754586867882 31.3367451884155 -0.904238084434002 0.772322186235334 31.3284220380201 -0.906135537872127 0.773497182354143 31.3200965276247 -0.908025445020892 0.774676457892156 31.3117682472291 -0.909907897642304 0.775859858225364 31.3034367968334 -0.911782986947366 0.777047228606761 31.2951017364375 -0.913650803730082 0.778238414339339 31.2867626660414 -0.915511438156458 0.779433260505092 31.2784191756451 -0.917364980036496 0.78063161231101 31.2700708452486 -0.919211518535202 0.781833314722088 31.2617172548518 -0.92105114242658 0.783038212788318 31.2533580044548 -0.922883939908633 0.784246151400692 31.2449926540574 -0.924709998714366 0.785456975441203 31.2176088327568 -0.930661168307031 0.789426436857742 31.1985633218522 -0.93475862938465 0.792196415098309 31.1794808409458 -0.938822760710686 0.794978535970453 31.1603577800375 -0.942854515829184 0.797770923694084 31.1411907091271 -0.94685484750119 0.800571590783108 31.1219763782145 -0.950824708312748 0.803378437331426 31.1027115172995 -0.954765045571904 0.806189308609936 31.0833927763819 -0.958676797223702 0.809002040384533 31.0640166654615 -0.962560892655187 0.811814457376116 31.0445797245383 -0.966418257997402 0.814624324741577 31.0250786136121 -0.970249822662392 0.817429288584806 31.0055100526826 -0.9740565197972 0.820226876076684 30.9858701317498 -0.977839270163871 0.823014661591097 - 0.2 14 0.277002434 12 0.314605576 12 0.4 14 -7 0 0 11 12 2 31.8489252827427 -0.773601863627115 0.713410574618182 31.8220562114665 -0.781134310126887 0.71547147970507 31.7954741902039 -0.788515161507459 0.717666815499343 31.7691658789543 -0.795749525970073 0.719984750568439 31.743114867717 -0.802842214477957 0.72241480490586 31.7173152964916 -0.809797873912333 0.724946610083115 31.6917402652768 -0.816620746832402 0.727572388057832 31.666394314073 -0.823315119898368 0.730282554577558 31.6412507428787 -0.829884824293412 0.733070773970992 31.6163034916938 -0.836333676508716 0.73592962873878 31.5915378505175 -0.84266525019745 0.738852957311631 31.5669417893492 -0.848882981573776 0.741834860685264 - 0 12 0.2 12 -7 1 0 3 4 2 31.8489252827427 -0.773601855954115 0.713410573785182 0.93988417 32.0505522923195 -0.724482736181082 0.749903029068481 0.95992278 32.2407081413514 -0.671765830587163 0.784903062690893 0.97996139 32.4183769697902 -0.614560682900065 0.818500392946681 1 - 1.00922414 4 1.18410863 4 -7 0 0 4 13 10 32.4183772197902 -0.208516963644024 1.41444139018236 32.4183769697902 -0.219472775064397 1.41049133499474 32.4183769697902 -0.241418770796776 1.40195406758924 32.4183769697902 -0.28533279434258 1.38224928165331 32.4183769697902 -0.35050471677808 1.34436762685403 32.4183769697902 -0.423612111790495 1.28718743413812 32.4183769697902 -0.498797019581586 1.2031992711489 32.4183769697902 -0.560492321731956 1.10084265228722 32.4183769697902 -0.597748956941551 0.996775537894295 32.4183769697902 -0.612675038880501 0.90853869682327 32.4183769697902 -0.615074544824472 0.850609804891796 32.4183769697902 -0.614776890290334 0.826062804735876 32.4183769697902 -0.614560682900065 0.818500392946681 - 0 5 0.01923077 1 0.03846154 1 0.07692308 1 0.11538462 1 0.15384615 1 0.19230769 1 0.23076923 1 0.25 1 0.25852715 5 -7 0 0 3 6 4 25.9893209044264 -1.2407928679345 1.41444127418235 26.7065109884911 -1.21027243248485 1.41444127718235 28.1506004970817 -1.12559133446272 1.41444128718235 30.3018883192624 -0.844083729111824 1.41444131818235 31.7217072867002 -0.463447276602563 1.41444136118236 32.4183772197902 -0.208516963644024 1.41444139018236 - 0 4 0.39052523 1 0.78105045 1 1.18410863 4 -7 1 0 4 5 2 25.9893209044264 -1.2407928679345 1.41444127418235 1 25.9893209344264 -1.41763458733403 1.22360243311799 0.90854116 25.9893209544264 -1.55287971875783 0.999768089566434 0.83195587 25.9893209844264 -1.640277496909 0.753283430359041 0.76769325 25.9893210144265 -1.67578856559568 0.495540494136909 0.7139803 - 0.84752031 5 1 5 -7 1 0 3 5 3 25.9893210144265 -1.67578856559568 0.495540494136909 0.7139803 26.947889129956 -1.56406817828925 0.592676574200625 0.7454239 27.8775648941132 -1.45450203008514 0.686230593334203 0.77844216 28.7256136843934 -1.33769375553704 0.772171202166162 0.81146043 28.764323326232 -1.33232061228183 0.776095388572551 0.81303509 - 0 4 0.39052523 1 0.41008236 4 -7 1 0 4 9 6 25.9893210144265 -1.67578856559568 0.495540494136909 0.7139803 25.9893210344265 -1.70144306581421 0.309337531622744 0.67962751 25.9893210644265 -1.69899160869777 0.0816351803774628 0.64366663 25.9893210944265 -1.64126602295595 -0.22088238007135 0.60319778 25.9893211344265 -1.47954387927456 -0.574297145927649 0.56361201 25.9893212744265 -0.665660853617193 -1.80079859153334 0.46123605 25.9893212744265 0.889675705037327 -1.79063114005041 0.47001385 25.9893211544265 1.84259967351878 -0.715184450739437 0.53736762 25.9893210144265 1.67578665759559 0.495543775207065 0.71398086 - 0.15247929 5 0.2499996 1 0.26923037 1 0.30769191 1 0.34615345 1 0.84752031 5 -7 1 0 3 5 3 28.7643514962333 1.33236617428399 0.776100352742787 0.81303666 28.7256321143942 1.33773997653924 0.772175194506352 0.8114616 27.8775746041137 1.45453324408662 0.686234055524367 0.778443 26.947888489956 1.56406622428916 0.592679383050759 0.7454244 25.9893210144265 1.67578665759559 0.495543775207065 0.71398086 - 0 4 0.01956211 1 0.41008734 4 -7 0 0 8 9 2 28.7643514962333 1.33236617228399 0.776100376027788 28.7665148763361 1.33297752231303 0.769628534457392 28.7711779565576 1.3333684033316 0.762177387467482 28.7785521169078 1.33347304333657 0.753845316767729 28.788662237388 1.3332316603251 0.74483620342982 28.8012362279853 1.33260497929534 0.735483724686601 28.8156703486708 1.33162007824856 0.726172912508361 28.831316009414 1.33034136118782 0.717207842395543 28.8475721701861 1.3288461991168 0.708805353876446 - 0 9 0.5 9 -7 0 0 8 37 6 28.8635969109472 1.32726895104189 0.701446176772904 28.862456220893 1.32738860604757 0.70189706753832 28.8613238708393 1.32750608305315 0.702357319301181 28.8601999107859 1.32762143505863 0.70282638224446 28.8590843907329 1.32773471406401 0.703303719859133 28.8579773706803 1.3278459700693 0.703788808944173 28.8568789006281 1.32795525307449 0.704281139608558 28.8557890105764 1.32806261107959 0.704780215268262 28.8530777604476 1.32832710309215 0.706047350307448 28.8514672803711 1.3284818530995 0.706823379399308 28.8498749602955 1.32863256310666 0.70761210936277 28.8482995402206 1.32877944411363 0.708412066896766 28.8467397801466 1.32892270012044 0.709221835969228 28.8451945200732 1.32906252712708 0.710040057810092 28.8436626400004 1.32919911113357 0.710865430916295 28.8405309298516 1.32947428514664 0.712578640729668 28.8389326397757 1.3296124901532 0.713467215522873 28.8373484597005 1.32974739615961 0.714360848447318 28.8357785996259 1.32987914616587 0.715258022919931 28.8342232795521 1.33000787717198 0.716157292744644 28.8326826694789 1.33013372017796 0.717057282123392 28.8311569594064 1.3302567981838 0.717956685650111 28.8280566892592 1.33050395719554 0.719798765373605 28.8264837391844 1.33062775420142 0.720741245169371 28.8249265891105 1.33074861420716 0.721682191341063 28.8233844190372 1.33086653021277 0.722622054045704 28.8218564289647 1.33098149621823 0.723561249954314 28.8203418988927 1.33109351022355 0.72450016225691 28.8188401188214 1.33120257022873 0.725439140656509 28.81565267867 1.33142959823951 0.727449071700975 28.8139705785901 1.33154668124507 0.72852018071385 28.812306248511 1.33165984825045 0.729591554222738 28.8106600984329 1.33176898125563 0.730664144269683 28.8090359983557 1.33187408426062 0.731736012449594 28.8074321082795 1.33197499426541 0.732809698574591 28.8058526882045 1.33207174827001 0.733882719607557 28.8042968881306 1.3321642362744 0.734956607492564 - 0.5 9 0.532434554 7 0.581329743 7 0.633204096 7 0.687789792 7 0.75 9 -7 0 0 5 6 2 28.8725322913716 1.3263007059959 0.698266208584864 28.8702816712647 1.32655229800785 0.698975729951564 28.8682673711691 1.32677251501831 0.699670023485541 28.8664848210844 1.32696416802741 0.700323549686582 28.8649292810105 1.32712918803525 0.700919516398889 28.8635969109472 1.32726895104189 0.701446176772904 - 0.25 6 0.5 6 -7 0 0 3 4 2 28.8816743518059 1.32524719294586 0.695787436587128 28.8785997916598 1.32561306096324 0.696481690791104 28.875550471515 1.32596363097989 0.697314801029674 28.8725322913716 1.3263007059959 0.698266208584864 - 0 4 0.25 4 -7 0 0 6 12 3 29.3247476328507 1.26377048402587 0.616047313029676 29.2959450914827 1.26822368423739 0.619576365166297 29.2680213501564 1.27248978544002 0.623233076075981 29.2409041988684 1.27658089063434 0.627006338975202 29.2145292976156 1.28050764082085 0.630886987012523 29.1888388963954 1.284279451 0.634867498745587 29.1109860926976 1.29554277653498 0.647525485836809 29.0609972403232 1.30253048186688 0.656525171202271 29.013409778063 1.30894354017148 0.665872511224246 28.9678696758999 1.31483929045151 0.675534312953157 28.924058423819 1.3202625617091 0.685500844463541 28.8816743618059 1.32524719994586 0.695787437392128 - 0.8 7 0.864373661 5 1 7 -7 0 0 12 46 5 29.8455255075863 1.17804480095412 0.580272516141464 29.8316172069257 1.18043860006782 0.58058508181631 29.8177952462692 1.1828130281806 0.580927322185566 29.8040607756169 1.18516793429245 0.581299131666226 29.7904106849685 1.18750336440338 0.58170030169528 29.7768555143247 1.18981874551336 0.582130851974731 29.7633751736844 1.19211490762242 0.582590212541549 29.7499994230491 1.1943904087305 0.583078711972751 29.7366989524173 1.19664650883766 0.583595564153301 29.7234937617901 1.19888221794385 0.584140872315201 29.7103768611671 1.20109778404908 0.584714219883434 29.6973509105484 1.20329301915335 0.585315346759986 29.6702682192621 1.20784670036964 0.586631489241499 29.6562294585952 1.21020113548147 0.587351904567717 29.6423008479337 1.21253101959213 0.588104767686476 29.6284831772774 1.21483623570162 0.588889642053756 29.6147772066264 1.21711667280994 0.589706064330534 29.6011836859807 1.21937222491707 0.590553544365787 29.5877032953404 1.22160279602302 0.591431565214491 29.5743367247056 1.22380829512777 0.592339583122619 29.5610846040761 1.22598863823133 0.593277027540145 29.5479475434521 1.2281437473337 0.594243301108041 29.5349261328336 1.23027355343486 0.595237779668276 29.5157179819213 1.23340580858363 0.596758976202529 29.5094427616233 1.23442757163216 0.59726471435355 29.5031953213265 1.2354432776804 0.59777695195688 29.4969757410311 1.23645291672836 0.598295613046515 29.490784100737 1.23745648377603 0.598820620467452 29.4846204404443 1.2384539718234 0.599351895840686 29.4784848501528 1.23944537587049 0.599889359610214 29.4723773798627 1.24043068791729 0.600432930992033 29.466298079574 1.2414099039638 0.600982528022137 29.4602470292866 1.24238302001002 0.601538067516524 29.4542242790005 1.24335002905595 0.602099465099189 29.437432618203 1.2460417261838 0.603688236792651 29.4267273576945 1.24775270026507 0.604728566747064 29.4161141471904 1.2494438373454 0.605787128890343 29.4055930566907 1.25111512542478 0.606863414531464 29.3951641561953 1.25276655650322 0.607956903378402 29.3848275057043 1.25439812658071 0.609067064504132 29.3745831552178 1.25600983165726 0.610193357260628 29.3644311647356 1.25760167273287 0.611335232260864 29.3543715942578 1.25917365180754 0.612492132284814 29.3444044637844 1.26072577488126 0.61366349325645 29.3345298033153 1.26225804895404 0.614848745166747 29.3247476328507 1.26377048402587 0.616047313029676 - 0.6 13 0.655705608 11 0.716637454 11 0.74639676 11 0.8 13 -7 0 0 7 14 3 29.6596001887553 1.20962777945423 0.587203269689657 29.8122989560081 1.18405813923974 0.579110702408281 29.977440593852 1.15566238989102 0.575507028593116 30.1534039622098 1.12469733742025 0.576319452436704 30.3383318909934 1.09138266583789 0.581343044372312 30.5302674701098 1.05585148715025 0.590267040324179 30.7273241494695 1.01811461035785 0.602726568181975 31.0578282151676 0.95204564820774 0.628467701132613 31.1893139114128 0.92506420271319 0.639924323437773 31.3216729276996 0.897073473371702 0.652603229655989 31.4543521840015 0.868022972856877 0.666396375236128 31.5868068202927 0.837836960627118 0.681196700197106 31.7185050065481 0.80641298927756 0.696901184080029 31.8489294027429 0.77362090954702 0.713412672832282 - 0.5 8 0.803241134 6 1 8 -7 0 0 10 20 3 31.8489294127429 0.77362090385602 0.713412653179281 31.8323807119569 0.777781676802646 0.711317619503772 31.8157280711659 0.781942446402272 0.709223803642321 31.79897090037 0.786103426509907 0.707131539490944 31.7821086195691 0.790264830227564 0.705041167004657 31.7651406587631 0.79442686990925 0.702953032199476 31.7480664079522 0.798589757154976 0.700867487146418 31.7308852871361 0.802753702819753 0.6987848899815 31.7135966863149 0.80691891700259 0.696705604896739 31.6962000054886 0.811085609056497 0.694630002144153 31.6541659434921 0.821094765531907 0.689655787583891 31.6294239123169 0.826938855426486 0.686761080875399 31.6044658611315 0.83278682359725 0.683875453542339 31.5792920099358 0.838639258762225 0.680999797448753 31.5538941187295 0.844496675485438 0.678135745773718 31.5282800475129 0.850359723190918 0.675283590477248 31.5024357962853 0.856228863591687 0.672445501680446 31.4763669950471 0.862104723024775 0.669622015420338 31.450068953798 0.867987838649208 0.666814566917991 31.423540272538 0.873878773661013 0.664024343198462 - 0 11 0.08329130498 9 0.2 11 -7 1 0 3 4 2 32.4183769697902 0.614559651360016 0.818501410646729 1 32.2407093113515 0.671764094897081 0.784904408830957 0.97996156 32.0505548523196 0.724489624011409 0.749904728278562 0.95992312 31.8489294127429 0.773620905355019 0.713412653345281 0.93988468 - 1.00922544 4 1.18410863 4 -7 0 0 4 13 10 32.4183769697902 0.614559651360016 0.818501410646729 32.4183769697902 0.614288263017125 0.809008347865833 32.4183769697902 0.612138687585026 0.765248555047354 32.4183769697902 0.600784069615711 0.686219157443659 32.4183769697902 0.569424242696199 0.590233999654609 32.4183769697902 0.51418802550262 0.492932551593039 32.4183769697902 0.442676084495985 0.404482602531892 32.4183769697902 0.355877809683288 0.32732432491707 32.4183769697902 0.252652863160367 0.268708200192954 32.4183769697902 0.138605139903391 0.233247368748655 32.4183769697902 0.0596177359616904 0.222970747120542 32.4183769697902 0.0198719786838683 0.22125799555919 32.4183769697902 -8.97180042613763e-007 0.221258007919191 - 0.5 5 0.5107041 1 0.54916564 1 0.58762718 1 0.60685795 1 0.62608872 1 0.66455026 1 0.7030118 1 0.72224257 1 0.74147334 5 -7 0 0 4 11 8 32.4183769697902 -0.614560682900065 0.818500392946681 32.4183769697902 -0.614289290967174 0.809007759075805 32.4183769697902 -0.612139704835075 0.765248386617346 32.4183769697902 -0.600785176575763 0.686219394253671 32.4183769697902 -0.563781888948201 0.57296065804417 32.4183769697902 -0.484434072519383 0.444916593312403 32.4183769697902 -0.373083585980519 0.337094069381108 32.4183769697902 -0.235450488863298 0.258939153868949 32.4183769697902 -0.119238130213507 0.228109187164604 32.4183769697902 -0.0397466489178644 0.221258032639192 32.4183769697902 -8.97180042613763e-007 0.221258007919191 - 0.25852715 5 0.26923077 1 0.30769231 1 0.34615385 1 0.38461538 1 0.42307692 1 0.46153846 1 0.5 5 -7 0 0 8 16 3 31.4590698742256 -0.865908783142458 0.667790990368369 31.4874241655723 -0.859557568106792 0.670826711469558 31.5155215469069 -0.85321088317034 0.673883359993741 31.5433610882292 -0.846868703485103 0.676959027485827 31.5709416695392 -0.840530994024078 0.680051847255728 31.598265710837 -0.834197742024265 0.683159674571342 31.6253308921225 -0.82786888667266 0.686280791676587 31.6521383633958 -0.821544389164263 0.689413212695369 31.7005847556969 -0.810011431893477 0.695146493661685 31.7223063067286 -0.804801598420023 0.697744317480075 31.743851797752 -0.799594654568706 0.700347574486723 31.765220838767 -0.794390563032525 0.702955259362582 31.7864130597735 -0.789189283530478 0.705566378337603 31.8074280907717 -0.783990772811562 0.708179949182741 31.8282656117614 -0.778794984649775 0.710795001215949 31.8489252927427 -0.773601869849115 0.713410575298183 - 0.8 9 0.909602415 7 1 9 -7 0 0 11 32 4 30.6873264475697 -1.02513159269114 0.601824542228131 30.7097988986371 -1.02081442648608 0.603221326220474 30.7321328996979 -1.01650736928151 0.604645818509134 30.7543291307522 -1.01221026707741 0.606097056611064 30.7763885417999 -1.00792296287377 0.607574048399217 30.7983109628412 -1.00364527867059 0.60907607322556 30.8200987038761 -0.999377084391862 0.610601883050032 30.8417514049045 -0.995118191580576 0.612150853592604 30.8632683659265 -0.990868400763721 0.613722456346251 30.8846538169423 -0.986627620735295 0.615315088013897 30.9059067279517 -0.982395641230287 0.616928336876522 30.950103790051 -0.973558474310544 0.620345082037809 30.9730224911396 -0.968954957484889 0.622152401915652 30.9957865522208 -0.964361534343713 0.623982083349557 31.0183964132947 -0.959777959073005 0.625833198624481 31.0408561343615 -0.955204038284755 0.62770445558936 31.0631641954211 -0.950639492444951 0.629595200327166 31.0853213964735 -0.94608407536058 0.631504549644855 31.1073312675189 -0.941537579291633 0.633431354439373 31.1291923385572 -0.936999720142096 0.635375031291693 31.1509069895886 -0.932470269373959 0.637334604879768 31.1996524519039 -0.922252163836625 0.641797434253741 31.2265975831837 -0.916568299688656 0.644309580623061 31.2533145144527 -0.910896859739277 0.646844359246457 31.2798019857108 -0.905237295293462 0.649400756295879 31.3060727669586 -0.899589144303189 0.65197669277823 31.3321087981952 -0.893951747886428 0.654572515573525 31.3579394694221 -0.888324745429159 0.657184899404606 31.3835430406382 -0.882707450047352 0.659814529129507 31.4089336118442 -0.877099400175984 0.662459317437128 31.43410839304 -0.871500024566028 0.665118517191433 31.4590698742256 -0.865908783142458 0.667790990368369 - 0.6 12 0.657654167 10 0.720639234 10 0.8 12 -7 0 0 14 41 4 30.9709463610409 -0.969355198172899 0.6220144492951 30.921260078681 -0.979367729657469 0.618042062666421 30.8723650563586 -0.989120434992698 0.614276964092589 30.8242432240729 -0.998627861566276 0.610716253800464 30.7768629818225 -1.00790452587289 0.607357283262922 30.730198679606 -1.01696342330317 0.604197649709847 30.6842473074235 -1.02581437672357 0.601235191429138 30.6389434352717 -1.03447223613479 0.598467982994703 30.5943225731523 -1.04294167553707 0.595894332351461 30.5503067010616 -1.05123719893109 0.593512776693343 30.5069171090007 -1.05936349731706 0.59132208141429 30.4641095569675 -1.06733073769549 0.589321237274255 30.4218743249614 -1.07514537306666 0.587509460513201 30.3801889829815 -1.08281454243093 0.5858861921241 30.2978814590721 -1.09787456814624 0.583016005680773 30.2572592071426 -1.10526543249729 0.581769087804548 30.2171495652375 -1.11252350984203 0.580710011658244 30.1775340433559 -1.11965467718074 0.579838669843858 30.1383945914969 -1.12666435651368 0.579155181524394 30.0997135496596 -1.13355755184109 0.578659893764869 30.0614736078433 -1.14033887616319 0.57835338376531 30.0236577760472 -1.14701257348017 0.578236462183757 29.9862493842704 -1.15358253979223 0.578310177244258 29.9492320225121 -1.16005234309953 0.578575820014876 29.9125895107717 -1.16642523540222 0.579034930448682 29.8763059090483 -1.17270416270046 0.579689304554763 29.8403654373412 -1.17889176899435 0.580541002416217 29.7335265522667 -1.19718767286336 0.583695066882027 29.6636106789458 -1.2090290544258 0.586596405519833 29.5948798856813 -1.22053336697222 0.590315040503459 29.5272116624672 -1.23171469250331 0.594874024084999 29.4604849392979 -1.2425825580195 0.60030108840977 29.3945791561675 -1.25314189652104 0.606629030155332 29.3293731530704 -1.26339282000794 0.613896188486503 29.2647440800007 -1.27333021447994 0.622147026337397 29.2005661269524 -1.28294311993653 0.631432831411449 29.1367092039194 -1.29221381537686 0.641812559643459 29.0730373008951 -1.30111652679972 0.653353850202641 29.0094067378728 -1.3096155992034 0.666134247514677 28.9456638948452 -1.31766296858563 0.680242672091792 28.8816427018044 -1.32519472994337 0.695781188365831 - 0.5 15 0.625 13 0.75 13 1 15 -7 0 0 12 35 4 29.3706265150298 -1.25654995568292 0.610659127374751 29.3824114955896 -1.25470063159508 0.609340915032139 29.3943529661568 -1.25281937550572 0.60803980637734 29.4064503867314 -1.25090634141486 0.606757146919417 29.4186973173131 -1.24896195932251 0.605494290491434 29.4311055679024 -1.24698587822865 0.60425244687545 29.4436472984981 -1.24497950113335 0.603033034234531 29.4563547691017 -1.24294161403656 0.601837061871725 29.4691965497117 -1.24087381493834 0.600665888379097 29.4821861003286 -1.23877574883869 0.599520550107697 29.4953149209522 -1.23664804373763 0.598402169821577 29.5085816715824 -1.23449102863517 0.597311774204786 29.5348779228314 -1.23020192543145 0.595229075355863 29.5478974334498 -1.22807198033029 0.594234620942629 29.561039374074 -1.22591566022787 0.59326786228971 29.5743011847039 -1.22373335112421 0.592329631858146 29.5876802453393 -1.22152545801934 0.591420713441975 29.6011738259802 -1.21929240491328 0.590541840728231 29.6147791266265 -1.21703463280604 0.589693695824946 29.6284932972779 -1.21475260169765 0.588876907829151 29.6423133879343 -1.21244678658813 0.588092051357872 29.6562363685956 -1.2101176814775 0.587339645109135 29.6702591792616 -1.20776579436579 0.586620150398961 29.6979052205747 -1.203117203145 0.585276603885146 29.7115205412214 -1.200822328036 0.584649814046375 29.7252216418722 -1.19850749092605 0.584053963285073 29.7390054225269 -1.19617317681517 0.583489360595256 29.7528725031855 -1.19381970070339 0.58295635144694 29.7668067938474 -1.19144817659075 0.582454889967121 29.7808298445134 -1.18905796347722 0.581985636768833 29.7949131451824 -1.18665077436288 0.581548200319056 29.8090730558549 -1.18422622224772 0.581143052865813 29.8232972565305 -1.18178528513179 0.580770020572094 29.8375864572092 -1.17932832401509 0.580429167359905 29.8519372878909 -1.17685590889765 0.58012041325224 - 0.2 13 0.269349856 11 0.336075946 11 0.4 13 -7 0 0 6 12 3 28.8816427218044 -1.32519473694337 0.695781198726832 28.9240191838171 -1.32020936270658 0.685496049742314 28.9678649458997 -1.3147800114487 0.675520404289496 29.0134545080651 -1.30887587116826 0.665848246645093 29.0610777403271 -1.30245597186334 0.656495869742879 29.1110549327008 -1.29546798953142 0.647501271513659 29.1954184967079 -1.28326072195161 0.633784307095138 29.2280715682588 -1.27844785372301 0.628788981260873 29.2618018098609 -1.27338956348276 0.623960916669552 29.2967188115194 -1.26806809223 0.619315941543927 29.3329456432401 -1.26246291796377 0.614873933166943 29.3706265150298 -1.25654995568292 0.610659127374751 - 0 7 0.124914392 5 0.2 7 -7 0 0 3 4 2 28.8725411413721 -1.32624420999322 0.698247348627968 28.8755461215148 -1.32590835897726 0.697301197132028 28.878581911659 -1.32555912496068 0.696472385444662 28.8816427118044 -1.32519472794337 0.695781197682832 - 0.75 4 1 4 -7 0 0 5 6 2 28.8636368209491 -1.32720991303909 0.701411936938278 28.8649620110121 -1.32707078503248 0.700888918047436 28.8665108610856 -1.32690633302467 0.70029633541829 28.86828721117 -1.32671518601559 0.699645906423396 28.8702957812654 -1.32649541500515 0.698954401028551 28.8725411413721 -1.32624420999322 0.698247348627968 - 0.5 6 0.75 6 -7 0 0 13 14 2 28.8816427018044 -1.32519472994337 0.695781188365831 28.8755222515136 -1.32592130897788 0.697162805132455 28.868013081157 -1.32677168601827 0.699448616989025 28.8590177407297 -1.32774128406432 0.702815451384941 28.8485486002325 -1.32880937611506 0.70740703573803 28.8367860196738 -1.32992323216796 0.713312302218515 28.8242410090779 -1.3310061462194 0.720387980331591 28.8115928384772 -1.33193826126367 0.728419148537051 28.800157537934 -1.33258714729449 0.736549767700235 28.7903531774683 -1.3329999313141 0.744302834031486 28.7824601970934 -1.33319045232315 0.751316459132615 28.776408246806 -1.33321567332434 0.757438945656418 28.7720205165976 -1.33311831231972 0.762636611341294 28.7690560464568 -1.3329368063111 0.766952592424292 - 0 14 0.5 14 -7 0 0 8 30 5 28.764323326232 -1.33232061228183 0.776095388547551 28.7648122762552 -1.33245871128839 0.774632508741068 28.7654243162843 -1.33258563029442 0.773112303825862 28.7661684063196 -1.33270025829986 0.771541043543231 28.7670499663615 -1.33280158530468 0.769925899656516 28.7680693364099 -1.33288876630882 0.768275056388105 28.7692203264646 -1.33296118331226 0.766597820867441 28.7704887065248 -1.33301851631498 0.764904733565024 28.7729088366398 -1.33309365831855 0.761889212362794 28.7740226766927 -1.33311744331968 0.760568654877071 28.7751926767482 -1.33313204732037 0.759246972780294 28.7764213568066 -1.33313742632063 0.757923462474431 28.7777078068677 -1.33313368732045 0.75659767851046 28.7790537169316 -1.33312102631985 0.755266996647256 28.7804584369984 -1.33309981131884 0.753928345599673 28.7831772771275 -1.33304545331626 0.751417432643411 28.7844759571892 -1.33301447031479 0.750248137676873 28.7858172972529 -1.33297760031304 0.749069462850889 28.7872006473186 -1.33293457731099 0.747884466070604 28.7886250373863 -1.33288550430866 0.746692712419999 28.7900891674558 -1.33283015630603 0.745497155624213 28.7915914175271 -1.33276854430311 0.744298598166285 28.7944445076627 -1.33264252229712 0.742073583118602 28.7957854177264 -1.33257981829414 0.741047555599869 28.7971527977913 -1.33251248929094 0.740020703261096 28.7985470678575 -1.33244055628753 0.738992697373268 28.799968697925 -1.33236405428389 0.737963072552363 28.8014180779939 -1.33228303328005 0.736931265798355 28.8028956180641 -1.33219755327599 0.735896588818211 28.8044018181356 -1.33210769427172 0.734858133632887 - 0 9 0.08296566455 7 0.147422886 7 0.20273237 7 0.25 9 -7 1 0 4 5 2 25.9893210144265 1.67578665759559 0.495543775207065 0.71398086 25.9893209844264 1.64027518590889 0.753285898569159 0.76769375 25.9893209544264 1.55287732375771 0.999769719386511 0.83195628 25.9893209344264 1.41763240633392 1.22360330111804 0.9085414 25.9893209044264 1.24079115393441 1.41444155318237 1 - 0 5 0.15247929 5 -7 0 0 3 6 4 25.9893209044264 1.24079115393441 1.41444155318237 26.7065109984911 1.21027048648476 1.41444154918237 28.1506003870817 1.1255888294626 1.41444154018237 30.3018881792624 0.844080731411682 1.41444150818236 31.7217071467002 0.463445326412471 1.41444146518236 32.4183773097902 0.208515993143978 1.41444143718236 - 0 4 0.39052523 1 0.78105045 1 1.18410863 4 -7 0 0 4 12 9 32.4183769697902 0.614559651360016 0.818501410646729 32.4183769697902 0.614775833620284 0.826063385215904 32.4183769697902 0.61507346469442 0.850609945421803 32.4183769697902 0.612673985430451 0.908538408493257 32.4183769697902 0.597748087161509 0.996774824704261 32.4183769697902 0.560491614381922 1.10084200428719 32.4183769697902 0.498796362461555 1.20319866714887 32.4183769697902 0.42361158841047 1.2871869911381 32.4183769697902 0.340060319251998 1.352535736242 32.4183769697902 0.274386795812673 1.38819172293557 32.4183769697902 0.230428868494783 1.40654101280711 32.4183773097902 0.208515993143978 1.41444143718236 - 0.74147334 5 0.75 1 0.76923077 1 0.80769231 1 0.84615385 1 0.88461538 1 0.92307692 1 0.96153846 1 1 5 -7 0 0 13 14 2 31.8489294027429 0.77362090954702 0.713412672832282 31.7951551301888 0.788698901028186 0.717537605417206 31.7471985679109 0.801848136746741 0.721684376129167 31.7022006357737 0.813986303088273 0.725995719326945 31.6584965436978 0.825590051200421 0.730571922171303 31.6147113016181 0.837032235121896 0.735518512282253 31.5697071794806 0.848602492500454 0.740936609165599 31.5221731772228 0.860585042087594 0.74697464829539 31.4708648047858 0.873272269166205 0.753773572052322 31.4138943920798 0.886989661386746 0.761589035881536 31.3491636990053 0.902166613745613 0.770691025636858 31.2730186753886 0.919344705626528 0.781591987285626 31.1803926909891 0.939356664142045 0.794971441054115 31.0591049452283 0.963541400137759 0.812517825658524 - 0 14 0.2 14 -7 0 0 13 38 4 30.9858134217471 0.977903962460944 0.823030042269828 31.0054603226803 0.974119616529197 0.820241282048369 31.02503550361 0.970311358604314 0.817442747134445 31.0445428845366 0.966478262527252 0.814636863284173 31.0639857954601 0.962619389787965 0.811826103072669 31.0833675863807 0.95873380561541 0.809012819695045 31.1026917672985 0.954820578544542 0.806199246957408 31.1219618182138 0.950878773828316 0.80338755872786 31.1411811391267 0.946907448140688 0.800579917656504 31.1603530200373 0.942905648765613 0.797778476660443 31.1794807409458 0.938872417630045 0.794985333765775 31.1985677518524 0.934806796439938 0.792202474467597 31.2176177027572 0.930707826028248 0.789431772492995 31.2450057740581 0.924754882988498 0.785461577976421 31.2533710244554 0.922928583551753 0.784250733179909 31.2617301648524 0.921095543323689 0.783042774632534 31.2700836352492 0.9192556741463 0.781837857173304 31.2784318356457 0.917408887371582 0.780636135581225 31.286775196042 0.915555093818531 0.779437764579305 31.2951141364381 0.913694203832144 0.778242898833552 31.303449056834 0.911826127213415 0.777051692950973 31.3117803872297 0.90995077329034 0.775864301483575 31.3201085276253 0.908068050854916 0.774680878922366 31.3284339180207 0.906177868213137 0.773501579705352 31.336756948416 0.90428013315 0.772326558209541 31.3621141596204 0.898473796014213 0.768759376702109 31.3791421104292 0.894540794969406 0.76638136858616 31.3961659412378 0.890574930390037 0.764023253532156 31.4131860720462 0.886575499558075 0.761686549835168 31.4302162028551 0.882541331136462 0.759372040590235 31.4472351336634 0.878472417815199 0.757082504521488 31.4642914144736 0.874366443503176 0.754816737356869 31.4813248252826 0.870224565454447 0.752579867080624 31.4984092860941 0.866043743231869 0.750369182520622 31.5154883869053 0.861824878416483 0.748189724261103 31.5326034477182 0.857565948474195 0.746040735561032 31.5497430585323 0.853266473280981 0.743924653173523 31.5669120893478 0.848925479314795 0.741842979814649 - 0.6 14 0.685413043 12 0.723015358 12 0.8 14 -7 0 0 10 47 6 30.2321642859507 1.10541675850448 0.898718531898838 30.2431034264703 1.10371136642347 0.898252323556694 30.2539634969861 1.10201661634298 0.897765236006559 30.2647460574982 1.10033218826297 0.897257983647465 30.2754526380068 1.09865776718344 0.896731252389447 30.2860847285118 1.09699304710437 0.896185699659535 30.2966437990133 1.09533772602575 0.895621954391758 30.3071312995114 1.09369151094756 0.895040617040146 30.3175486400062 1.09205411286978 0.894442259563726 30.3278971904978 1.09042525179242 0.893827425441523 30.3570699018834 1.085826806574 0.892037542828508 30.3757338227699 1.08287685343389 0.890824579470895 30.3941776636459 1.07995312429502 0.889560973466877 30.4124087745118 1.07705400915732 0.888249689224594 30.430434295368 1.07417795002071 0.886893440676176 30.4482611962147 1.07132344288513 0.88549471027374 30.4658962470524 1.0684890267505 0.884055767983394 30.4833460778812 1.06567328161676 0.882578690289236 30.5006171387015 1.06287482448384 0.881065379184358 30.5299255000936 1.05810536225731 0.878412329851345 30.5420473306693 1.05612654516332 0.877289497967013 30.554083561241 1.05415536306969 0.876149715288877 30.5660364618088 1.0521913329764 0.874993575713963 30.5779082923726 1.05023397888343 0.873821637270299 30.5897012929328 1.04828282979076 0.872634422113909 30.6014176234893 1.04633742369836 0.871432416531817 30.6130594440422 1.04439730360621 0.870216070940044 30.6246288845918 1.04246201851429 0.868985799883609 30.6583228561921 1.03680424824556 0.865341249594502 30.6802557472339 1.03309372406932 0.862890075913077 30.7019447082641 1.02939598089368 0.860393628578503 30.7234067092834 1.02570753771849 0.857856487950995 30.7446580702928 1.02202498654358 0.855282699272746 30.765714721293 1.01834497736879 0.852675827870927 30.7865922722846 1.01466419319396 0.850039014567685 30.8073061032685 1.01097933901894 0.847375028561152 30.8278713442452 1.00728712084357 0.844686314868445 30.8622775658795 1.0010515595474 0.840120602658586 30.8761896265402 0.998513900384863 0.838255615570003 30.8900442671983 0.995970175573043 0.836380775159953 30.9038451378538 0.993419363625886 0.83449681821747 30.9176007585072 0.990860252738334 0.83260408787657 30.9313082191582 0.988292050633351 0.830703653645304 30.9449831498078 0.985713258904865 0.828795274157661 30.9586209604555 0.98312312204184 0.826880042343693 30.9722299311019 0.980520385930217 0.824958137189407 30.9858134217471 0.977903962460944 0.823030042269828 - 0.4 11 0.423768824 9 0.467444023 9 0.498631602 9 0.55882774 9 0.6 11 -7 0 0 12 13 2 30.2921827688014 1.09603597105891 0.895836130508931 30.2011782944789 1.11030095673646 0.900691172234533 30.1193358205916 1.1229614403378 0.903570121558276 30.0421995569278 1.1348778259038 0.904950828640856 29.9670678533593 1.14650023945584 0.90503282298175 29.8917452397816 1.15819118201113 0.903918406590818 29.8142046260987 1.17025358258406 0.901603641197873 29.7324770322168 1.18298533518879 0.898041082865661 29.6440426080164 1.19673764084199 0.893060015900073 29.5461059433647 1.21189999556216 0.886436187497458 29.4342162780502 1.22905668337706 0.87771471975121 29.3023663417877 1.2489785763233 0.86624209054029 29.1372734839462 1.27325142047619 0.850442588228854 - 0.4 13 0.6 13 -7 0 0 14 28 3 28.8816130618029 1.31007156122506 0.825958550520924 28.9169647634821 1.30509472798867 0.829263607191906 28.9521496251533 1.30010464775165 0.83260177028346 28.9871855868174 1.29510049751397 0.835962020150063 29.0220903284753 1.29008140927558 0.839333817245215 29.0568812501277 1.28504647803643 0.842707013224433 29.0915755017756 1.27999476479649 0.846071770126251 29.1261900534197 1.2749252995557 0.849418485912211 29.1607416950608 1.26983708731402 0.852737725161867 29.1952471366998 1.26472911007141 0.856020152884774 29.2297230483373 1.2596003298278 0.859256470564491 29.2641860899742 1.25444968958316 0.862437352194574 29.2986529616113 1.24927612033743 0.865553379419578 29.3331404232493 1.24407853909056 0.868594973747046 29.396651796266 1.23447097963422 0.874035267016446 29.425664687644 1.23006840042511 0.876458920353563 29.4547135890238 1.22564757221513 0.878816417176538 29.4838102504058 1.22120727900423 0.881107675754367 29.5129570517902 1.21674901879247 0.883306011570782 29.5421877531786 1.21226638357956 0.885455893204896 29.5714604745689 1.20776970236598 0.887461994297181 29.6008652259656 1.203243627151 0.889428036555563 29.6303213173647 1.19870192093528 0.891248601485035 29.6599170987704 1.19413313871828 0.892983178815423 29.6896135501809 1.18954279150025 0.894590720032777 29.7194432615977 1.18492767328104 0.896076315637339 29.7494127530212 1.18028777306066 0.897428640215571 29.7795303144517 1.17562254783907 0.898639505287084 - 0 15 0.108720274 13 0.2 15 -7 0 0 3 4 2 28.9242454838279 1.30404539993883 0.829974324077663 28.9100657831544 1.30605622103434 0.828638383185209 28.8958550324794 1.30806489912975 0.82729979351063 28.8816130518029 1.31007156622506 0.825958539315924 - 0.8 4 1 4 -7 0 0 12 24 3 28.8601063007814 1.31330906737883 0.82268733031055 28.8614316808444 1.31313434937053 0.82274501861229 28.8624522008929 1.31299965136413 0.822789372112396 28.863297550933 1.31288691135878 0.822833341564485 28.8640210209674 1.31278964735416 0.822875363849481 28.8646584409976 1.31270312735005 0.822917139350465 28.865233751025 1.3126242233463 0.822959526876478 28.8657625710501 1.31255100534282 0.823002262465508 28.8662574610736 1.31248179433954 0.823046042876588 28.866728991096 1.31241510433637 0.823091974164769 28.8671844511176 1.31235001333328 0.823140029021052 28.8676315311389 1.31228535833021 0.823191549941499 28.8686913811892 1.31213016732284 0.823324818417829 28.8693026712182 1.31203913231851 0.823410503047898 28.8699276812479 1.31194446931402 0.823507544505508 28.8705894212793 1.31184376130923 0.823611911505465 28.8712859013124 1.31173386330401 0.82374802881093 28.8720837413503 1.31161192029822 0.823874245944925 28.8729317513906 1.31147237029159 0.8240779478386 28.8739786114403 1.31130977528387 0.824259455528221 28.8751520914961 1.31111389627457 0.824558975871448 28.8766854615689 1.31086840026291 0.824876053215508 28.8785961816596 1.31054810824769 0.825373932987156 28.8816130618029 1.31007156222506 0.825958550559924 - 0.875 13 0.92751383 11 1 13 -7 0 0 11 12 2 28.8645655309932 1.31271484335061 0.822917849715499 28.8608576008171 1.31321964237458 0.822664123999447 28.8565161106109 1.31381450340284 0.822342806575186 28.8515691703759 1.31449651643523 0.821949454003502 28.8461397301181 1.31524976547101 0.821486235500501 28.8404996098502 1.31603748150842 0.820970087241985 28.8350543495915 1.31680416154484 0.820428928410281 28.8304514793729 1.31745922457595 0.81992676697043 28.8268111092 1.31798406260088 0.819487979869589 28.8241705390746 1.3183719186193 0.819126354713412 28.8224176689913 1.31863697763189 0.818840918771855 28.8214102689435 1.31879804163954 0.818624878022593 - 0.25 12 0.5 12 -7 0 0 6 12 3 28.8368130696751 1.31662173753617 0.820213447078046 28.8372438596955 1.31656407853344 0.820238455248234 28.8377307797186 1.31649844153032 0.820268244329649 28.8382732997444 1.31642474552682 0.820303881963342 28.8388705597728 1.31634285552293 0.820347117965395 28.8395212198037 1.31625255051864 0.820400783017944 28.8414541498955 1.31597984150569 0.82058911329289 28.8428430499615 1.31577930249616 0.820754275085734 28.8443864700348 1.31555132948533 0.820971929393072 28.8460843401154 1.3152959304732 0.821242067185903 28.8479445002038 1.31501440545983 0.821548027781436 28.8499903503009 1.3147105764454 0.821840538515329 - 0.625 7 0.670401837 5 0.75 7 -7 0 0 9 18 3 28.8170659787371 1.31950260967301 0.817631542069412 28.8187143188154 1.31923380666024 0.818018112482774 28.8199704988751 1.31902845065049 0.818318092457022 28.821041528926 1.3188560246423 0.818556996768369 28.8219784689705 1.31870636463519 0.818759853132005 28.8228422790115 1.31857072162875 0.818932453323203 28.8236546390501 1.31844476762276 0.81908566842748 28.8244465890877 1.31832406961703 0.819222367787973 28.8252396091253 1.3182054456114 0.819345657781829 28.8268431692015 1.31797098560026 0.819560674746041 28.8276510992399 1.31785530359477 0.819653511585451 28.8285059892805 1.31773499958905 0.819738614286493 28.8294313893244 1.31760724958298 0.819814728100108 28.8304578393732 1.31746693857632 0.819891080647735 28.8316236994286 1.31731099856891 0.819954500111747 28.8329914594935 1.31712849856024 0.820027565955218 28.8346498695723 1.31691127054993 0.820087867103082 28.8368130696751 1.31662173753617 0.820213447078046 - 0.5 10 0.564002183 8 0.625 10 -7 0 0 4 5 2 28.8214102689435 1.31879804163954 0.818624878022593 28.8156502586699 1.31971895868328 0.817389634033923 28.8116829784814 1.32035071371329 0.816543974222756 28.8095167383786 1.3206941167296 0.816091120395246 28.8091520483612 1.32074919773222 0.816031238844402 - 0.5 5 0.75 5 -7 0 0 14 41 4 28.7799607669747 1.32584875397443 0.806925949891924 28.7804820969995 1.32574593896955 0.807164483405254 28.7809815970232 1.32564854896492 0.80738568044576 28.7814603370459 1.32555603996053 0.807592197739569 28.7819193970678 1.32546794495635 0.807786148258781 28.7823598570887 1.32538386695235 0.807969235108478 28.7827827871088 1.32530345494853 0.808142852877724 28.7831891671281 1.32522640594487 0.808308161746576 28.7835799571466 1.32515244994136 0.808466139374079 28.7839560471645 1.32508134493798 0.808617616007274 28.7843182871817 1.32501287793473 0.808763297714194 28.7846674671983 1.3249468559316 0.808903783250866 28.7850043372143 1.32488310692857 0.809039579469316 28.7853296072297 1.32482147692564 0.809171120688564 28.7870275873104 1.32449923891034 0.809860800771322 28.788199347366 1.32427493489968 0.810347918319459 28.7892284674149 1.32407801889033 0.810774668213728 28.7901542674589 1.32390153988195 0.811154176507754 28.7910028574992 1.3237406528743 0.811496611238019 28.7917938775368 1.32359171286723 0.811809561684883 28.7925428875723 1.32345185386059 0.812098899804626 28.7932624576065 1.32331874985426 0.812369427981475 28.7939632276398 1.32319043484817 0.812625148146622 28.7946550676727 1.32306515684222 0.812869311934219 28.7953479377056 1.32294125683634 0.813104494710389 28.796052137739 1.32281709883044 0.813332814540234 28.7967786577735 1.32269100382445 0.813556057219837 28.7980987978362 1.32246616281377 0.813934701288822 28.7986754678636 1.32236922880917 0.814091992425293 28.7992762578922 1.32226939680442 0.814248625337733 28.7999097579222 1.32216621279952 0.81439994839692 28.8005814479542 1.32205855479441 0.814548918387996 28.8012907579878 1.32194411878897 0.814712467898764 28.8020686480248 1.3218246877833 0.814849525277274 28.802894068064 1.32169402777709 0.815023795002551 28.8038142581077 1.32155489377049 0.815172375502608 28.8048211881555 1.32140097176318 0.815347617511932 28.8059527782093 1.3212309597551 0.815524058153312 28.8072330982701 1.32103893574598 0.815721839759706 28.8087071183401 1.32081803073549 0.81594866635548 28.8104346584222 1.32055462072298 0.816246845714643 - 0.25 15 0.264507692 13 0.328367394 13 0.375 15 -7 0 0 6 12 3 28.7716188765785 1.32777682106601 0.801271957808374 28.7716674465808 1.32776265906534 0.801324072537849 28.7718009165871 1.32772365706349 0.801466960270636 28.7720204765976 1.32765991406046 0.80169905458966 28.7723309266123 1.32757175605627 0.802014812455658 28.7727404766318 1.32745984905096 0.802403638025126 28.7739010466869 1.32715956803669 0.803397269349321 28.7747092567253 1.32695948002719 0.804031209697431 28.7757038367725 1.32672676601614 0.804724457663359 28.7769053768296 1.32646336700363 0.805447632101708 28.7783278468972 1.32617079898973 0.806178801376437 28.7799607669747 1.32584875397443 0.806925949891924 - 0.125 7 0.181002718 5 0.25 7 -7 0 0 10 11 2 28.7643514962333 1.33236617428399 0.776100352762787 28.7640454062188 1.33206785026982 0.778570837303129 28.7639826662158 1.33175198125482 0.780926068983996 28.7640817662205 1.33141705323891 0.783225414119209 28.7643339762325 1.3310566602218 0.785524203166396 28.7647412562518 1.3306631042031 0.787876335077116 28.7653408462803 1.33022821618245 0.790307766929603 28.76617678632 1.32973817215917 0.792885281537028 28.7673572763761 1.3291807771327 0.79559578477977 28.7690306264556 1.32853157210186 0.798494596016456 28.7716188765785 1.32777682106601 0.801271957808374 - 0 11 0.125 11 -7 0 0 8 24 4 31.5453892183255 -1.51657874603362e-009 1.57010472357597 31.5453883083255 -1.29124022533062e-007 1.57010478257597 31.5453873983254 -2.56731596694096e-007 1.57010484157597 31.5453864883254 -3.84339301355136e-007 1.57010490057598 31.5453855883253 -5.11947136316183e-007 1.57010495957598 31.5453846783253 -6.39555101677236e-007 1.57010501857598 31.5453837683253 -7.67163197538295e-007 1.57010507757599 31.5453828583252 -8.9477142379936e-007 1.57010513657599 31.5453819483252 -1.02237978056043e-006 1.57010519557599 31.4238071425507 -0.0170570573111667 1.57798352495019 31.2867202260394 -0.036442841776942 1.58648465135397 31.1345681188126 -0.0582017511304347 1.59553074478364 30.9684260009212 -0.0820719134452065 1.60501951723433 30.7900713024498 -0.107386502227585 1.61483886970073 30.6019401435141 -0.133126647594176 1.62490890217903 30.4068382842473 -0.158235965141805 1.63518376966706 30.0829897888653 -0.196506227996545 1.65217397247405 29.956724472868 -0.210623006996056 1.65878295378796 29.8295375868269 -0.223898154842591 1.66545311910477 29.7021152707747 -0.236125589944363 1.67217969942427 29.5751287647432 -0.247136068738333 1.67895884274626 29.4492113187624 -0.25680495437358 1.6857852730705 29.3249398628598 -0.265052519066319 1.69265037139657 29.2028253170597 -0.27183839557063 1.6995418177239 - 0 9 1.533855516e-006 8 0.205015484 7 0.33333333 9 -7 0 0 11 12 2 29.5198405221171 -0.250540240871022 1.68202467189188 29.595777855724 -0.244553236540655 1.67791268869657 29.6587537887151 -0.239133177788216 1.67453742053626 29.7132283113026 -0.234210951743423 1.67163664439848 29.7615812035992 -0.22966349766343 1.66907470927679 29.8055475956875 -0.225404839823155 1.66675338216653 29.8463686876264 -0.221341960301178 1.66460373206443 29.8851070694664 -0.21739925219291 1.66256736296771 29.9226982312518 -0.21349062610226 1.66059338687395 29.9601160930291 -0.20952135469473 1.65862991378069 29.9984639148505 -0.205371588006627 1.65661856168516 30.0394559567975 -0.200835396582169 1.65447111358316 - 0.625 12 0.75 12 -7 0 0 12 24 3 29.129269883566 -0.275730274348485 1.70371406692207 29.141545064149 -0.275113237801177 1.70301424488883 29.1538864147352 -0.274481082234151 1.70231205285548 29.1663358953266 -0.273831464730296 1.7016050978219 29.1789336159249 -0.273161941410495 1.70089111878799 29.1917186765322 -0.272469924570626 1.70016792975364 29.2047299771502 -0.271752640595557 1.69943337671875 29.2180068877808 -0.271007084628145 1.69868529768322 29.231589888426 -0.270229967968234 1.69792149364694 29.2455211990877 -0.269417654189651 1.69713968860981 29.259845479768 -0.268566079940204 1.6963374975717 29.2746105804693 -0.267670656414673 1.69551238953251 29.3051263419187 -0.26578163852795 1.6938108924517 29.3208769926669 -0.264788092876759 1.69293450241007 29.3371724234409 -0.263739770370966 1.6920297433671 29.3540683842434 -0.262633289998411 1.69109373432264 29.3716269150774 -0.261453951007396 1.69012321127654 29.3899128359459 -0.260212372329424 1.68911500622865 29.4090043168527 -0.258869308570632 1.68806489817878 29.4289797378015 -0.257452605133342 1.68696926112674 29.4499371187969 -0.255916220084368 1.68582291807229 29.4719807098439 -0.254266344425003 1.6846208930152 29.4952341609484 -0.252480240727167 1.68335709995517 29.5198405221171 -0.250540240871022 1.68202467189188 - 0.5 13 0.5625 11 0.625 13 -7 0 0 8 16 3 29.2028253170597 -0.27183839557063 1.6995418177239 29.0800910612301 -0.278658710669578 1.70646823605289 28.9504753550737 -0.284599020038727 1.71391870540677 28.8146183686209 -0.28943955207164 1.72188511978515 28.6734146019141 -0.292958081824762 1.73034535218699 28.5280284450086 -0.294952795190505 1.73925944661039 28.3798484679704 -0.295272037426669 1.74856567105241 28.2303963908718 -0.293835552323439 1.75817988550906 27.8875461245873 -0.286473085760741 1.78075124358114 27.6943281854099 -0.27933648031277 1.79385060520333 27.5049981964172 -0.269183235492517 1.80707984783168 27.3230443977749 -0.25617312405157 1.8201734894536 27.1515664396301 -0.240681010353734 1.83283718205509 26.9927678020876 -0.223200862065472 1.84480372062347 26.8479659352099 -0.204243778621058 1.8558743091493 26.7177242490237 -0.184290442138326 1.86592110662649 - 0.33333333 9 0.478381373 7 0.66666667 9 -7 0 0 7 20 4 26.6072784237779 -0.16639063003013 1.87446000803207 26.6164925142155 -0.167967448674025 1.87374662799818 26.6255547846459 -0.169501796540903 1.87304521096487 26.6344717550695 -0.170995851452867 1.8723552539321 26.6432494954864 -0.17245157623501 1.87167628589985 26.651893755897 -0.173870778940418 1.8710078628681 26.6604100463015 -0.175255173073174 1.87034955783683 26.7085333985872 -0.183002351687145 1.86663094766021 26.7455170703438 -0.188656566354706 1.86377829952472 26.7803306119974 -0.193751365728696 1.86109870139744 26.8134074035685 -0.198403605426665 1.8585587912768 26.8451097750742 -0.202702083512832 1.85613078516148 26.8757536865297 -0.206715080145439 1.85379058005032 26.9368850894333 -0.214456041010115 1.84913682682928 26.967301190878 -0.218162538933164 1.84682940371969 26.9972157322989 -0.22167675116708 1.84456834261229 27.0269377437106 -0.225043725086003 1.842330466506 27.0567840151282 -0.228301680947747 1.84009231039969 27.0871000765682 -0.231484590937928 1.83782855529217 27.1183171680509 -0.234623878395036 1.83550800218195 - 0.125 8 0.13670061 6 0.192082866 6 0.25 8 -7 0 0 8 9 2 26.4173907547587 -0.130843790654746 1.88911937372835 26.4312802954184 -0.133671459454053 1.88805401267775 26.4472918261789 -0.136892483595044 1.88682281061927 26.4655885970479 -0.140519586443322 1.88541340755233 26.4864593380393 -0.144583570641351 1.88380355647586 26.5103123291722 -0.149130629395324 1.88196166438838 26.5377448904752 -0.154222017018152 1.87984137328767 26.569594631988 -0.159941751890825 1.87737759417065 26.6072784237779 -0.16639063003013 1.87446000803207 - 0 9 0.125 9 -7 0 0 10 11 2 26.4173907547587 -0.130843795363747 1.88911937672835 26.3567195118769 -0.115263839834738 1.89400557996043 26.3094811696332 -0.101604542922957 1.8977797871397 26.2714430878265 -0.0890809856171196 1.90081696228396 26.2405837963608 -0.0772326661653546 1.90328776340131 26.2155186951703 -0.0656905689771344 1.90530944949734 26.1954721342181 -0.0541343529342437 1.90694288157492 26.1799265934797 -0.0422448644935233 1.90822926063602 26.1687265329478 -0.0296394476247982 1.90917105068075 26.1619808026274 -0.0158419111434504 1.90974727370812 26.1604470425545 6.88644543408859e-009 1.90984293371267 - 0 11 1 11 -7 0 0 8 23 4 26.2259318656649 -0.067715742568325 1.9044854114582 26.2300461658603 -0.0697902440828586 1.90415126244233 26.2335799760281 -0.0714924854057107 1.90386475242872 26.2367425561783 -0.0729724572880056 1.90360893941657 26.239641486316 -0.0742931491807351 1.90337448740543 26.2423591764451 -0.0755044835972704 1.90315472039499 26.2449545865684 -0.0766367350200494 1.90294477138502 26.2474790366883 -0.0777160829223157 1.90274067937533 26.2527221869373 -0.0799124545346377 1.90231789635525 26.2554359270662 -0.0810229971503857 1.90209971734488 26.2581820371967 -0.0821235780726605 1.9018789873344 26.2610158273313 -0.0832366442095283 1.90165119832358 26.2639985074729 -0.0843845442220506 1.9014115023122 26.2672013376251 -0.0855913360503701 1.90115444529999 26.2707175577921 -0.0868861218668691 1.90087307428662 26.2765462380689 -0.0889762506411449 1.90040824026454 26.2784943281614 -0.0896675178809784 1.90025308425717 26.2805574982594 -0.0903918085133803 1.90008898424938 26.2827541083638 -0.091154473298605 1.89991448224109 26.2851060184755 -0.09196178143795 1.89972783823223 26.2876401285958 -0.0928213832317789 1.89952686922268 26.2903911187265 -0.0937432583365656 1.89930860321231 26.2934057288697 -0.0947411496019629 1.89906874020092 - 0.5 9 0.563946704 7 0.63410039 7 0.66666667 9 -7 0 0 13 50 5 26.1714319830763 -0.0281336217002753 1.90893723466965 26.1722381031145 -0.0292180816067843 1.90886990466645 26.1730712831541 -0.0302889593156483 1.90880036466315 26.1739290331949 -0.0313432450327242 1.90872896665976 26.1748142332369 -0.032394750766668 1.90865434065621 26.1757130732796 -0.0334076425647778 1.9085803096527 26.1766405033237 -0.0344302162213474 1.90850179164897 26.177573893368 -0.0354072443577538 1.90842499364532 26.1785285334133 -0.0363824664830743 1.90834500864152 26.179489163459 -0.0373247885538322 1.90826562663775 26.1804597835051 -0.0382484626217044 1.90818524763393 26.1814348735514 -0.0391463799983532 1.90810488263011 26.1824125135978 -0.0400193617608176 1.9080245736263 26.1839469436707 -0.0413490738639755 1.90789902662034 26.1845039436971 -0.0418233876665042 1.90785355561818 26.1850604537236 -0.0422893617166368 1.90780821561602 26.18561608375 -0.0427471068913785 1.90776302661388 26.1861704337763 -0.0431967355247347 1.90771800761174 26.1867231038025 -0.0436383606997108 1.90767317960961 26.1872737338287 -0.0440720955543121 1.90762856460749 26.1878219138547 -0.044498052580544 1.90758418260538 26.1883672938806 -0.0449163429264117 1.90754005360329 26.1889094939064 -0.0453270756949205 1.9074962006012 26.189448153932 -0.0457303572480753 1.90745264259913 26.1899829239574 -0.0461262905018811 1.90740940159708 26.1909118340015 -0.0468068058552039 1.90733428459351 26.1913078040203 -0.047094550456871 1.90730226159199 26.191701244039 -0.0473782510263461 1.90727043759048 26.1920920240576 -0.047657949070631 1.90723882158898 26.192480004076 -0.0479336846177277 1.90720742158749 26.1928650540943 -0.0482054962166381 1.90717624658601 26.1932470341124 -0.0484734209403638 1.90714530558454 26.1936258241304 -0.0487374943819067 1.90711460658308 26.1940013041482 -0.0489977506562682 1.90708415658163 26.1943733541659 -0.0492542223994499 1.9070539655802 26.1947418641834 -0.0495069407724534 1.90702404157878 26.1951067242007 -0.04975593545328 1.90699439157737 26.1961183742488 -0.0504431608969215 1.90691211657346 26.1967567442791 -0.0508730920153421 1.90686012557099 26.1973823943088 -0.0512909752331905 1.90680911056857 26.1979948443379 -0.051696775417465 1.90675912756619 26.1985936443664 -0.0520904743901647 1.90671023056387 26.1991783643941 -0.0524720702512895 1.9066624645616 26.1997486244212 -0.0528415766918401 1.90661587655939 26.2003040744476 -0.0531990223228179 1.90657050355724 26.2008443844733 -0.0535444499892248 1.90652638355514 26.2013692644982 -0.0538779160950636 1.90648354855311 26.2018784845224 -0.0541994899183375 1.90644202555113 26.2023718245458 -0.0545092529370505 1.90640183754922 26.2028490945685 -0.0548072981472068 1.90636300654738 - 0.16666667 14 0.226857112 12 0.261165727 12 0.28692533 12 0.33333333 14 -7 0 0 8 16 3 26.1604470425545 1.77635692337242e-018 1.90984293371267 26.1607000625665 -0.00261342196013088 1.90982715271192 26.1610724325842 -0.0048322910525215 1.90979921171059 26.1614839426038 -0.00682925173437204 1.90976687470905 26.1619465926257 -0.0086994314182008 1.90972928470727 26.1624547626499 -0.010506752769044 1.90968720870527 26.1630310326772 -0.0123073737535689 1.90963889970298 26.1636971327089 -0.0141521883591928 1.90958274470031 26.1650169727716 -0.017315307820433 1.90947199269505 26.1655850327985 -0.0185775882593881 1.90942443069279 26.1662235128289 -0.0198946319369443 1.90937107769026 26.1669491828633 -0.0212844779519584 1.90931057468738 26.1677873029031 -0.0227698912045117 1.90924080268407 26.1687719129499 -0.0243782691409056 1.90915893168018 26.1699542630061 -0.0261456898648536 1.90906065767551 26.1714319830763 -0.0281336217002753 1.90893723466965 - 0 9 0.102114573 7 0.16666667 9 -7 1 0 3 4 2 26.1604470425545 0 1.90984293371267 0.85627786 26.1033286698415 1.16600005538203e-008 1.91340561488189 0.85664204 26.0462845771321 2.31100010976661e-008 1.91696526805096 0.85700622 25.9893209344264 3.43500016315375e-008 1.92052189721989 0.85737039 - 0 4 0.08150659 4 -7 1 0 2 3 2 25.9893209344264 3.43500016315375e-008 1.92052189721989 0.85737039 25.9893209344264 -0.723603771269333 1.92052220221991 0.8573703 25.9893209044264 -1.2407928679345 1.41444127418235 1 - 0.49999967 3 1 3 -7 1 0 2 3 2 32.4183771497902 -9.50500045146328e-008 1.51294273986092 0.81755784 32.4183771297902 -0.127524357907082 1.51294293586093 0.81755753 32.4183772197902 -0.208516963644024 1.41444139018236 1 - 0 3 0.50000087 3 -7 1 0 3 4 2 32.4183771497902 -9.50500045146328e-008 1.51294273986092 0.81755784 32.1295243260704 -7.68100036482792e-008 1.53207982076988 0.81934426 31.8381423422305 -4.48100021283608e-008 1.55113363467489 0.82113067 31.5453892383255 0 1.57010472357597 0.82291708 - 2.57033879 4 2.97015674 4 -7 1 0 2 3 2 32.4183771497902 -9.50500045146328e-008 1.51294273986092 0.81755784 32.4183771797902 0.127523624177047 1.51294254486091 0.81755816 32.4183773097902 0.208515993143978 1.41444143718236 1 - 0.50000087 3 1 3 -7 1 0 2 3 2 25.9893209344264 3.43500016315375e-008 1.92052189721989 0.85737039 25.9893209344264 0.723602733989284 1.92052159121988 0.85737049 25.9893209044264 1.24079115393441 1.41444155318237 1 - 0 3 0.49999967 3 -7 0 0 8 16 3 26.1713970830746 0.0280867553500492 1.90894003966978 26.1699539730061 0.0261416401106612 1.90906071967551 26.1687868129506 0.0243988984198854 1.90915784368013 26.1678081129041 0.0228036109531133 1.909239278684 26.1669703428643 0.0213226307687706 1.90930904368731 26.1662415628297 0.019930480645647 1.90936980369019 26.1655980927992 0.0186058244577292 1.90942355369275 26.1650238327719 0.0173313863651966 1.90947160569503 26.163700322709 0.0141596479355472 1.9095825807003 26.1630312126772 0.012309692981679 1.90963892170298 26.1624508326497 0.0104966731585652 1.90968752370529 26.1619383526253 0.0086739333079897 1.9097299227073 26.1614741726033 0.00678879003845021 1.90976760670909 26.1610623725837 0.00478312311518615 1.90979996071063 26.1606957625663 0.0025690390610228 1.90982741871193 26.1604470425545 0 1.90984293371267 - 0.83333333 9 0.89855491 7 1 9 -7 0 0 13 50 5 26.2028224445672 0.0547906460574159 1.90636519754748 26.2023770245461 0.0545124133092006 1.90640143254921 26.2019104845239 0.0542195089292884 1.90643943855101 26.2014229045007 0.0539117447716704 1.9064792045529 26.2009144444766 0.0535889641253391 1.90652071255487 26.2003853544515 0.0532510443112888 1.90656393455692 26.1998359844254 0.0528978992595153 1.90660883355906 26.1992667343983 0.0525294821120164 1.90665536556127 26.1986781143704 0.0521457878017919 1.90670347656355 26.1980707143415 0.0517468556478436 1.90675310556591 26.1974452143118 0.0513327719391757 1.90680418156833 26.1968023542813 0.0509036725317946 1.90685662557083 26.19614297425 0.0504597454287092 1.90691034857338 26.1951095442009 0.0497577142563645 1.90699441657737 26.1947466641836 0.0495100815316026 1.90702391157877 26.1943795441662 0.0492583341826452 1.90705372858019 26.1940083441486 0.0490024720844924 1.90708385558162 26.1936332241308 0.0487424960071442 1.90711427858306 26.1932543741128 0.0484784076226007 1.90714498558452 26.1928719540946 0.048210209496862 1.90717596258599 26.1924861740763 0.0479379050939282 1.90720719658748 26.1920972140578 0.0476614987777996 1.90723867458897 26.1917052740392 0.0473809958064764 1.90727038159048 26.1913105640204 0.047096402339959 1.90730230259199 26.1909132940016 0.0468077254322476 1.90733442559352 26.1899790839572 0.0461233298507405 1.90740995559711 26.1894402839316 0.0457243946167921 1.90745350959918 26.1888978039058 0.0453181905484984 1.90749736260126 26.1883521638799 0.0449047458028609 1.90754147960335 26.1878039138539 0.044484094497881 1.90758582360546 26.1872535838277 0.0440562777205608 1.90763036160758 26.1867017438015 0.0436213445499026 1.9076750576097 26.1861489337753 0.0431793530619091 1.90771987561183 26.185595723749 0.0427303713525836 1.90776478161396 26.1850426637227 0.0422744785459299 1.9078097416161 26.1844903036965 0.0418117658139522 1.90785472161823 26.1839391936703 0.0413423373876556 1.90789968762037 26.1823476735947 0.0399632018841501 1.90802983262655 26.1813118835455 0.0390363598131275 1.90811489263059 26.1802867734968 0.0380881202090885 1.9081994026346 26.1792765134489 0.0371216418491833 1.90828295763857 26.1782854134018 0.0361389125775062 1.90836517364248 26.1773158033557 0.0351434711112252 1.90844589064631 26.176374753311 0.0341412782436236 1.90852405265002 26.1754583632675 0.033125399184372 1.90860097365368 26.1745786532257 0.0321183254695385 1.90867390265714 26.1737277931853 0.0310984991010994 1.90874546566054 26.1729151331467 0.0300904355812189 1.90881315766376 26.1721378131098 0.0290851556404707 1.90887809666684 26.1713970830746 0.0280867553500492 1.90894003966978 - 0.66666667 14 0.713097125 12 0.737756681 12 0.770746153 12 0.83333333 14 -7 0 0 10 11 2 26.1604470425545 6.88644544808859e-009 1.90984293371267 26.1619825026274 0.0158596199022915 1.90974715470812 26.1687284929478 0.029659781555764 1.90917055668073 26.1799226934795 0.0422613242453051 1.90822900063601 26.1954568542174 0.0541432426356659 1.90694336357495 26.2154868651688 0.0656904805501303 1.90531122849742 26.2405334363584 0.0772236153999247 1.90329107040147 26.2713746078233 0.0890644987763365 1.90082188628419 26.3094034796296 0.101584319499996 1.89778566413998 26.3566516718737 0.115246429239911 1.89401094496069 26.4173906747587 0.130843780695746 1.88911926972835 - 0 11 1 11 -7 0 0 7 20 4 26.2947420389332 0.0951825669969291 1.89896225719586 26.2909502687531 0.0939328659485715 1.89926392221019 26.2875919785936 0.0928087603491794 1.89953002922283 26.2845659484498 0.091780359603333 1.89976994223423 26.2818066083188 0.0908289930571455 1.89998907724463 26.2792663381981 0.0899411425729748 1.90019115725423 26.276906658086 0.089105563976287 1.90037925726317 26.270148067765 0.0866817601061625 1.9009189902888 26.2662398475794 0.0852349088684407 1.9012325743037 26.2627134574119 0.0838957542548343 1.90151646731718 26.2594353972562 0.0826211825922954 1.90178033532971 26.2562894371068 0.0813696042678486 1.90203337434173 26.253179316959 0.0801032625777006 1.90228307035359 26.247851946706 0.0778718401157138 1.90271195337396 26.245684146603 0.0769477443088216 1.90288677738227 26.2434400164965 0.0759738553875643 1.90306782339087 26.2410781863843 0.0749298197269753 1.90325838639992 26.2385435162639 0.0737853707176169 1.90346296240964 26.235765886132 0.0725019408106572 1.9036875034203 26.2326150859823 0.0709962630481414 1.90394302443244 - 0.33333333 8 0.370941824 6 0.448433655 6 0.5 8 -7 0 0 9 10 2 26.6072797137779 0.166390913513144 1.87445947603204 26.571131682061 0.160204900173324 1.87725790616496 26.5415197306545 0.154893509450047 1.87954860727376 26.5164031294615 0.150255095239734 1.88149022036599 26.4947145384314 0.146150760790788 1.88316556344556 26.4756851075275 0.142481518250509 1.88463425151532 26.4587999167255 0.139170872265261 1.88593611757715 26.4436531860061 0.136159371824223 1.88710247163255 26.4299373153546 0.133398069388068 1.88815692268264 26.4173906847587 0.130843791972746 1.88911928272835 - 0.875 10 1 10 -7 0 0 7 20 4 27.0541411050027 0.227925169143864 1.84029762140944 27.0321313539573 0.225543144787724 1.84194690348778 27.0106869929387 0.223154149657253 1.84355838856432 26.9896027119373 0.220741500292658 1.84514714763978 26.9687069409448 0.218288335297139 1.84672586171477 26.9478457099539 0.215776997172857 1.84830599978982 26.9268711989577 0.213188057083889 1.84989864786547 26.8756773165261 0.206705541787986 1.85379522405054 26.8451987950785 0.202712858017344 1.85612264816109 26.8137754935859 0.198452075104967 1.8585292822754 26.7809783620282 0.193842057240003 1.86104782639502 26.7463170503818 0.188775299038345 1.86371587452175 26.709202368619 0.183110107801263 1.86657881365773 26.6604715763044 0.175265119746646 1.87034450183659 26.651999925902 0.173888107184242 1.8709993678677 26.6433813154926 0.172473334952043 1.87166580689935 26.6346082150759 0.17101865146195 1.87234440093158 26.6256726746515 0.169521753389851 1.87303576396442 26.616566224219 0.167980114340627 1.8737405529979 26.6072797137779 0.166390913513144 1.87445947603204 - 0.75 8 0.796268396 6 0.861538591 6 0.875 8 -7 0 0 8 16 3 26.7177242590237 0.184290512227329 1.86592093162648 26.8479645052098 0.204243648119052 1.85587422014929 26.9927653120875 0.223200562146457 1.84480369662347 27.15156329963 0.240680572546713 1.83283719505509 27.3230410577747 0.256172578121544 1.8201735124536 27.5049951164171 0.269182607054487 1.80707984983168 27.6943257854098 0.279335788839737 1.79385055920333 27.8875447845872 0.286472345361706 1.78075112558114 28.2303956808718 0.293834705481399 1.75817972150905 28.3798472179703 0.295271171091627 1.7485655360524 28.5280268450085 0.294951956075466 1.73925932361038 28.673412871914 0.292957312115725 1.73034522118698 28.8146167586208 0.289438886746609 1.72188496178514 28.9504741050737 0.284598485701702 1.71391850140676 29.0800904112301 0.27865832609656 1.70646797205288 29.2028254870597 0.27183817297862 1.69954147872388 - 0.33333333 9 0.521619607 7 0.66666667 9 -7 0 0 9 18 3 29.4547642790262 0.255517210528416 1.68556186205989 29.383430965638 0.260802167271438 1.6894550472448 29.3195784226052 0.265105946808856 1.69298179141232 29.2614303298433 0.268717273663385 1.6962237875663 29.2077709572946 0.271804821613036 1.69924043570959 29.1576600249145 0.27448294518524 1.7020787678444 29.1103434326671 0.276836016852005 1.7047778469726 29.0651763405217 0.278923836026171 1.70737184009581 29.0215808684511 0.280793253790963 1.70989233721552 28.9519997251461 0.283547610442788 1.71394226040789 28.9254087038831 0.28454244591704 1.71549678448172 28.8990818326327 0.285472358045209 1.71704248855514 28.8728800613882 0.286344300562624 1.71858737162852 28.8466632701429 0.287163652364541 1.72013964970225 28.82028430889 0.287934591056159 1.72170810177674 28.7935838976218 0.288660088743618 1.72330238085247 28.7663843263299 0.289341585202987 1.72493341492994 28.7384762050043 0.289978774745252 1.72661425400977 - 0.375 10 0.451498985 8 0.5 10 -7 0 0 14 15 2 29.9096498506321 0.214757286947423 1.66128009790657 29.8777571291172 0.218065511273556 1.66295632998618 29.8519558078917 0.220680556017763 1.6643167870508 29.8287849967912 0.222998044760838 1.66553916910886 29.8070504157589 0.225139057483531 1.66668686916337 29.7856825947439 0.227224261483573 1.66781516421697 29.7640259737153 0.229297325768038 1.66896038927136 29.7414337326422 0.231453542408453 1.67015480832809 29.717070201485 0.233712176098732 1.67144652438945 29.6903914102179 0.236184562371164 1.67286135145665 29.6599849487736 0.238905117454384 1.67448028553354 29.6248178671033 0.24202056907036 1.67635640462265 29.5821503750767 0.245639895649268 1.67864535873137 29.528848772545 0.250028424066712 1.68151851886784 29.4547642790262 0.255517210528416 1.68556186205989 - 0.25 15 0.375 15 -7 0 0 8 16 3 29.2028254870597 0.27183817297862 1.69954147872388 29.3249378528597 0.265052625344324 1.69265012739656 29.4492078687623 0.256805311205597 1.68578509207049 29.575124594743 0.247136586436357 1.67895869674626 29.7021110207745 0.236126172514391 1.67217956342426 29.8295338368268 0.223898707301617 1.66545297110477 29.9567216828679 0.210623443878076 1.65878277578795 30.0829883088652 0.196506481071557 1.65217374847404 30.4068397542473 0.158235744844794 1.63518345066704 30.6019436535143 0.133126081618149 1.62490851517901 30.7900770524501 0.10738555900654 1.6148383977007 30.9684337309216 0.0820706558411468 1.60501895923431 31.134577168813 0.0582003356043675 1.59553012578361 31.2867296660398 0.0364414404928755 1.58648401635394 31.4238159825511 0.0170558049651072 1.57798293795016 31.5453892183255 -1.51657873603362e-009 1.57010472357597 - 0.66666667 9 0.794985529 7 1 9 -7 0 0 1 2 2 28.8816427118044 -1.32519472694337 0.695781197647832 32.0208866309104 -6.53046184918028 1.31476716144809 - 0 2 55.21292144 2 -7 0 0 3 12 10 32.0208866309104 -6.53046184918028 1.31476716144809 32.0174108207453 -6.5303949531771 1.31543514747981 32.0123115705031 -6.5302285001692 1.31709785555879 32.0059034301988 -6.52993352415518 1.32004483969876 32.0011686399739 -6.52968809114353 1.32249696181523 31.9965438297542 -6.52943259913139 1.32504963093648 31.9919472195359 -6.52916172411853 1.32775604306502 31.9875125893252 -6.52887544610493 1.33061643320089 31.983276369124 -6.52855022508948 1.33386606035524 31.9796234889505 -6.52817485107165 1.3376170325334 31.9776155188552 -6.52787563105744 1.34060717367542 31.9768135388171 -6.52772034505006 1.34215900474913 - 0 4 0.2003372 1 0.30051995 1 0.4007027 1 0.50095845 1 0.6012142 1 0.70136214 1 0.80151008 1 0.90075504 1 1 4 -7 0 0 1 2 2 31.9768135388171 -6.52772034505006 1.34215900474913 28.764323326232 -1.33232061228183 0.776095388572551 - 0 2 55.31736968 2 -7 0 0 3 13 11 31.9768135388171 -6.52772034505006 1.34215900474913 31.9764636788005 -6.52739737503472 1.34538679790244 31.9782710188863 -6.52680712600669 1.35128621018265 31.984897389201 -6.52656153899502 1.35374180329928 31.989697889429 -6.52635515198522 1.35580529939729 31.9951559396883 -6.52629706998246 1.35638671142491 32.000118179924 -6.5261503899755 1.35785351649458 32.005677440188 -6.52615118497553 1.35784651349425 32.0090679103491 -6.52607721797202 1.35858633352939 32.0125978305167 -6.52604328697041 1.35892605054552 32.0163001006926 -6.52604464097047 1.35891314154491 32.019572370848 -6.52595305996612 1.35982898558841 32.0213115109306 -6.52591981196454 1.36016157360421 - 0 4 0.18739138 1 0.28860531 1 0.38981924 1 0.49147355 1 0.59312786 1 0.69484995 1 0.79657203 1 0.79958851 1 0.89828602 1 1 4 -7 0 0 1 2 2 32.0213115109306 -6.52591981196454 1.36016157360421 28.8815857718017 -1.3100262312229 0.825953907820704 - 0 2 2.52492265 2 -7 0 0 3 20 18 32.0208866309104 -6.53046184918028 1.31476716144809 32.0599073027638 -6.53130058622012 1.30639122705025 32.1191450255775 -6.53226358526586 1.29677680959359 32.19857216935 -6.53307327830432 1.28869800320987 32.2584536021943 -6.53347889432358 1.2846543290178 32.3182868450362 -6.53371059933459 1.28234875990829 32.3783239178878 -6.53379236833847 1.28154173086996 32.4381797307308 -6.53373951533596 1.28208011489554 32.4982063135819 -6.53357143732798 1.28377011997581 32.5579894764214 -6.53329855631502 1.28650751810583 32.6179377292688 -6.53293795829789 1.29012160227749 32.6776144221033 -6.53249803027699 1.2945284974868 32.7374592549458 -6.5319907352529 1.2996086937281 32.7970201577748 -6.53141960822577 1.30532680299969 32.8567681006127 -6.53080887319676 1.31144079329009 32.9162629034385 -6.53017449516663 1.31779103359171 32.9759893362754 -6.52948805113403 1.32466167791805 33.0354316890987 -6.52871351909724 1.3324126432862 33.0751543109855 -6.52811956706903 1.33835550956847 33.0949317119248 -6.52779751805373 1.34157750972151 - 0 4 0.11096149 1 0.1664966 1 0.22203172 1 0.27757823 1 0.33312473 1 0.38866776 1 0.4442108 1 0.49975652 1 0.55530224 1 0.61084887 1 0.66639551 1 0.72194273 1 0.77748996 1 0.83303754 1 0.88858512 1 0.94429256 1 1 4 -7 0 0 3 18 16 33.0949317119248 -6.52779751805373 1.34157750972151 33.0749870309775 -6.52769816004901 1.34256712776851 33.0350597490811 -6.52744555603701 1.3450849458881 32.9754666962506 -6.526939984013 1.35012765812762 32.9158161034173 -6.52633654398434 1.35614847341359 32.856418010596 -6.52566978495267 1.36280215672963 32.796898447769 -6.52496807991934 1.36980508006225 32.7375086249481 -6.52429319588728 1.37653997438214 32.6778686421154 -6.52370143985918 1.38244401566256 32.5984294083422 -6.52306348482888 1.38880643396476 32.4985535435984 -6.5226114128074 1.39330760417856 32.398875878864 -6.5227418618136 1.39198694111583 32.3191691150781 -6.52315529183324 1.38784147891893 32.2594855522433 -6.52359702785422 1.38341652970876 32.1998835294123 -6.5241482588804 1.37789726144661 32.1205334756434 -6.52495908791891 1.36978014606106 32.0610295228171 -6.52557503794817 1.36361408176819 32.0213115109306 -6.52591981196454 1.36016157360421 - 0 4 0.05561239 1 0.11122478 1 0.16678543 1 0.22234607 1 0.27790839 1 0.33347071 1 0.38903003 1 0.44458935 1 0.55565963 1 0.66672992 1 0.72228792 1 0.77784592 1 0.83340755 1 0.88896917 1 1 4 -7 0 0 1 2 2 31.8489252827427 -0.773601855954115 0.713410573785182 33.0949317119248 -6.52779751805373 1.34157750972151 - 0.29266018 2 3.01761452 2 -7 0 0 1 2 2 31.5453892383255 0 1.57010472357597 33.1092560926052 0 7.84503997861939 - 0 2 1.95653393 2 -7 0 0 3 14 12 33.1092560926052 0 7.84503997861939 32.9895453769193 -0.0174714467798492 7.84504261961951 32.8098959283864 -0.0429466935898584 7.84504381761957 32.5696040969731 -0.070608380443718 7.84504292161953 32.3889470183924 -0.0869780922712375 7.84504175361947 32.2079753097967 -0.0977326682720524 7.84504084461943 32.0265309411785 -0.10222907288562 7.8450401736194 31.8453674425737 -0.0997574941882265 7.84503972761937 31.6942097353941 -0.0916727632842224 7.84503890461934 31.5738657696781 -0.0813848521755729 7.84503793661929 31.4836215553917 -0.0716292427922063 7.84503776061928 31.3938244411266 -0.0597831102495452 7.8450381676193 31.3340220282861 -0.0504008000939094 7.84503929761935 31.3042272068709 -0.045332982233201 7.84504008261939 - 0 4 0.2001314 1 0.30012179 1 0.40011218 1 0.50009203 1 0.60007187 1 0.70004513 1 0.80001838 1 0.85001273 1 0.90000708 1 0.95000354 1 1 4 -7 0 0 1 2 2 31.3042272068709 -0.045332982233201 7.84504008261939 26.4173907547587 -0.130843790614746 1.88911937672835 - 0.07121022 2 2.01729017 2 -7 0 0 3 16 14 31.3042272068709 -0.045332982233201 7.84504008261939 31.2954192964526 -0.0430010329424394 7.8450403266194 31.2849880359571 -0.0404181135897573 7.84504044361941 31.2711565353002 -0.0366831687623569 7.84504048261941 31.2626947448983 -0.0342734346779007 7.84504047961941 31.2555276245578 -0.0320034650000829 7.84504046661941 31.2474899541761 -0.0292649012000082 7.84504045761941 31.2386162737546 -0.0259637195232104 7.84504045761941 31.2282306232613 -0.0211038953923812 7.84504046261941 31.2204445328915 -0.0163844822182211 7.84504046161941 31.2159691826789 -0.0127338964548276 7.84504046261941 31.212855312531 -0.00944111784842901 7.84504046261941 31.210897412438 -0.00656500002182075 7.84504046261941 31.2095850123757 -0.00348249726540974 7.84504046261941 31.2092171223582 -0.0011274605635515 7.84504046261941 31.209191012357 0 7.84504046261941 - 0 4 0.24987845 1 0.294687 1 0.39290714 1 0.49113232 1 0.5007068 1 0.6257727 1 0.7508386 1 0.8132895 1 0.8757404 1 0.90694145 1 0.9381425 1 0.96907125 1 1 4 -7 0 0 1 2 2 31.209191012357 0 7.84504046261941 26.1604470425545 0 1.90984293371267 - 1.37499288 2 38.1919507 2 -7 0 0 3 14 12 33.1092560926052 0 7.84503997861939 32.9895453769193 0.0174714467798492 7.84504261961951 32.8098959283864 0.0429466935898584 7.84504381761957 32.5696040969731 0.070608380443718 7.84504292161953 32.3889470183924 0.0869780922712375 7.84504175361947 32.2079753097967 0.0977326682720524 7.84504084461943 32.0265309411785 0.10222907288562 7.8450401736194 31.8453674425737 0.0997574941882265 7.84503972761937 31.6942097353941 0.0916727632842224 7.84503890461934 31.5738657696781 0.0813848521755729 7.84503793661929 31.4836215553917 0.0716292427922063 7.84503776061928 31.3938244411266 0.0597831102495452 7.8450381676193 31.3340220282861 0.0504008000939094 7.84503929761935 31.3042272068709 0.045332982233201 7.84504008261939 - 0 4 0.2001314 1 0.30012179 1 0.40011218 1 0.50009203 1 0.60007187 1 0.70004513 1 0.80001838 1 0.85001273 1 0.90000708 1 0.95000354 1 1 4 -7 0 0 3 16 14 31.3042272068709 0.045332982233201 7.84504008261939 31.2954192964526 0.0430010329424394 7.8450403266194 31.2849880359571 0.0404181135897573 7.84504044361941 31.2711565353002 0.0366831687623569 7.84504048261941 31.2626947448983 0.0342734346779007 7.84504047961941 31.2555276245578 0.0320034650000829 7.84504046661941 31.2474899541761 0.0292649012000082 7.84504045761941 31.2386162737546 0.0259637195232104 7.84504045761941 31.2282306232613 0.0211038953923812 7.84504046261941 31.2204445328915 0.0163844822182211 7.84504046161941 31.2159691826789 0.0127338964548276 7.84504046261941 31.212855312531 0.00944111784842901 7.84504046261941 31.210897412438 0.00656500002182075 7.84504046261941 31.2095850123757 0.00348249726540974 7.84504046261941 31.2092171223582 0.0011274605635515 7.84504046261941 31.209191012357 0 7.84504046261941 - 0 4 0.24987845 1 0.294687 1 0.39290714 1 0.49113232 1 0.5007068 1 0.6257727 1 0.7508386 1 0.8132895 1 0.8757404 1 0.90694145 1 0.9381425 1 0.96907125 1 1 4 -7 0 0 1 2 2 26.4173906747587 0.130843792164746 1.88911926872835 31.3042272068709 0.045332982233201 7.84504008261939 - 1.34817287 2 38.1919507 2 -7 0 0 3 5 3 20.1549001573063 1.36866520500811 1.41444156718237 21.1275192035033 1.36275808372753 1.41444156618237 23.0918736368051 1.3214520967656 1.41444156218237 25.0175634582704 1.28214516389862 1.41444155718237 25.9893209044264 1.24079115393441 1.41444155318237 - 0 4 0.5 1 1 4 -7 0 0 3 5 3 25.9893209044264 -1.2407928679345 1.41444127418235 25.0175634582704 -1.28214692889871 1.41444127418235 23.0918736368051 -1.32145396176569 1.41444126918235 21.1275192035033 -1.36276005072763 1.41444126418235 20.1549001573063 -1.3686672230082 1.41444126018235 - 0 4 0.5 1 1 4 -7 1 0 4 5 2 20.1549001573063 -1.6722750014288 -1.30306872289244 0.51628915 20.1549001573063 -2.12609070698389 -0.664735298283231 0.56902713 20.1549001573063 -2.2280313158258 0.134736863629657 0.65761235 20.1549001573063 -1.952167939723 0.891999712877711 0.79192942 20.1549001573063 -1.3686672230082 1.41444126018235 1 - 1.20676907 5 1.78417229 5 -7 1 0 4 5 2 20.1549001573063 -1.6722750014288 -1.30306872289244 0.51628915 20.1549001573063 -1.05878403728954 -2.16600004587948 0.45880508 20.1549001573063 -9.66830045921961e-007 -2.50054346576944 0.44391061 20.1549001573063 1.05878214028945 -2.16600015987948 0.45880507 20.1549001573063 1.67227319742871 -1.30306890389245 0.5162891 - 0.57740334 5 1.20676907 5 -7 1 0 4 5 2 20.1549001573063 1.36866520500811 1.41444156718237 1 20.1549001573063 1.95216618472291 0.892000020827726 0.79192938 20.1549001573063 2.22802971682573 0.134737003109664 0.6576123 20.1549001573063 2.12608908598381 -0.664735369373234 0.56902708 20.1549001573063 1.67227319742871 -1.30306890389245 0.5162891 - 0 5 0.57740334 5 -7 0 0 9 10 2 1.319586737677 0.845840769945279 -1.40924429193551 1.319586659677 0.911201699796756 -1.34202809774291 1.319586580677 0.971165013922861 -1.26677391416853 1.31958650067699 1.02414066164407 -1.1841225882428 1.31958642167699 1.06862271175685 -1.0951809540183 1.31958634567699 1.1033771554076 -1.00152301856979 1.31958627467698 1.12768212356202 -0.905094104071661 1.31958620867698 1.14144614121578 -0.807892187166818 1.31958614967698 1.14508858338879 -0.711738539749765 1.31958609667697 1.13939655511843 -0.618156123250839 - 0 10 1 10 -7 0 0 3 4 2 1.31958609667697 1.13939655511843 -0.618156123250839 1.66514323309006 1.22851847935149 -0.337326809062163 2.03334541657872 1.23856713582878 -0.0865812842123901 2.42419264614297 1.16954252255029 0.134080451298479 - 0 4 1 4 -7 0 0 3 4 2 2.42419264614297 1.16954252255029 0.134080451298479 2.35726404496403 1.43069673595445 -0.401872591037923 2.33241626178382 1.39050386204539 -0.916314172062586 2.34964929660235 1.04896390382311 -1.40924429193551 - 0 4 1 4 -7 0 0 3 4 2 2.34964929660235 1.04896390382311 -1.40924429193551 2.00555960725897 0.985535358690416 -1.40924429193551 1.66190643893632 0.917897397927785 -1.40924429193551 1.31958612467697 0.845840769945279 -1.40924429193551 - 0 4 0.5 4 -7 1 0 2 3 2 1.31958612467697 0.845840769945279 -1.40924429193551 1 0.394505621298011 0.642110639198617 -1.32940753514347 0.89437537 -5.85000027786009e-009 0 -0.750000037063089 1 - 0 3 1.48870447 3 -7 1 0 2 3 2 -5.85000027786009e-009 0 -0.750000037063089 1 0.432062391501861 0.542313653068515 -0.110187358133618 0.93068591 1.31958587667696 0.752125697664052 0.131521655936943 1 - 0 3 1.82687438 3 -7 0 0 9 10 2 1.31958609667697 1.13939655511843 -0.618156123250839 1.31958604467697 1.13370452684807 -0.524573706687913 1.31958599667697 1.11843521112282 -0.429570341772495 1.31958595567697 1.09299188191433 -0.334753159849921 1.31958592067696 1.05717899721331 -0.241980838797473 1.31958589467696 1.01132950403557 -0.153225526850822 1.31958587767696 0.956395730060357 -0.0703307337745304 1.31958586867696 0.893793348397904 0.00529071017229524 1.31958586867696 0.825151337520584 0.0727226440751401 1.31958587667696 0.752125697664052 0.131521655936943 - 0 10 1 10 -7 1 0 2 3 2 1.31958612467697 -0.845840762795279 -1.40924429893551 1 0.394505620558011 -0.642110642718618 -1.32940753014347 0.89437537 -5.85000027786009e-009 0 -0.750000037063089 1 - 0 3 1.61807207 3 -7 1 0 2 3 2 1.31958553267695 -0.845840762795279 -1.40924429893551 1 1.31958615867698 6.5900003130082e-009 -2.13022950418047 0.76104147 1.31958612467697 0.845840769945279 -1.40924429193551 1 - 0 3 1 3 -7 0 0 9 10 2 1.31958607367697 -1.13939655511843 -0.618156128230839 1.31958608867697 -1.14508858238879 -0.711738544337765 1.31958610167697 -1.14144614121578 -0.807892191987818 1.31958611267697 -1.12768212256202 -0.905094109628661 1.31958612167697 -1.1033771524076 -1.00152302556979 1.31958612767697 -1.06862270875685 -1.0951809620183 1.31958613067698 -1.02414065664407 -1.1841225962428 1.31958613167698 -0.97116500805686 -1.26677392216853 1.31958612867698 -0.911201693019756 -1.34202810574291 1.31958612467697 -0.845840762795279 -1.40924429893551 - 0 10 1 10 -7 0 0 9 10 2 1.31958587667696 -0.752125697664052 0.131521655936943 1.31958590167696 -0.825151337388584 0.0727226441901401 1.31958592667697 -0.893793348643904 0.00529070983429522 1.31958595167697 -0.956395731128358 -0.0703307346275305 1.31958597567697 -1.01132950603557 -0.153225529606822 1.31958599967697 -1.05717899821331 -0.241980840241473 1.31958602067697 -1.09299188291433 -0.334753163231921 1.31958604067697 -1.11843521212282 -0.429570346254496 1.31958605867697 -1.13370452784807 -0.524573711815913 1.31958607367697 -1.13939655511843 -0.618156128230839 - 0 10 1 10 -7 1 0 2 3 2 1.31958587667696 -0.752125697664052 0.131521655936943 1 0.432062391501861 -0.542313653068515 -0.110187358133618 0.93068591 -5.85000027786009e-009 0 -0.750000037063089 1 - 0 3 1.82687438 3 -7 0 0 2 5 4 2.00023807100621 -0.163958005517587 0.96768671484265 1.97195678666292 -0.164035661541275 0.947403402219245 1.77326186422542 -0.164680340701896 0.799426138540702 1.4596446303294 -0.166750159990207 0.507738950436305 1.31958583467696 -0.168220024990022 0.347343154077914 - 2.78088653 3 2.99095102 1 4.27636204 1 5.56177307 3 -7 0 0 6 7 2 1.31958584867696 -0.472656105287959 0.273205850890581 1.31958584567696 -0.424345904326348 0.291062125421709 1.31958584267696 -0.374834406919678 0.30687310219069 1.31958583967696 -0.324277181791339 0.320505595748198 1.31958583767696 -0.272854209813879 0.331846201256848 1.31958583567696 -0.220765201681784 0.340809716696592 1.31958583467696 -0.168220024785022 0.347343154081914 - 0.60294418 7 0.79736362 7 -7 0 0 3 4 2 1.31958586967696 -0.472656103389959 0.273205851646581 1.62133537900929 -0.826879248094655 0.310046348786411 1.98951906749708 -1.05922000731025 0.26367793930403 2.42413693614032 -1.16967838155674 0.134100623219438 - 0 4 1 4 -7 0 0 3 4 2 2.42413693614032 -1.16967838155674 0.134100623219438 2.24551604265628 -0.95101212419065 0.533630074436067 2.10421642094491 -0.615771998917599 0.811492104973805 2.00023807100621 -0.163958005517587 0.96768671484265 - 0 4 1 4 -7 1 0 2 3 2 1.31958586967696 -0.472656103389959 0.273205851646581 0.98679458 1.31958587967696 -0.620585997516252 0.218528439069543 0.98679458 1.31958587667696 -0.752125697664052 0.131521655936943 1 - 0.5 3 1 3 -7 0 0 3 4 2 1.31958607367697 -1.13939655511843 -0.618156128230839 1.66504253008527 -1.22892561037083 -0.337230843807605 2.03322615057306 -1.23901955185027 -0.0864785933175126 2.42413693614032 -1.16967838155674 0.134100623219438 - 0 4 1 4 -7 0 0 3 4 2 1.31958612467697 -0.845840762795279 -1.40924429893551 1.66190643893632 -0.917897390397785 -1.40924429893551 2.00555960725897 -0.985535350790415 -1.40924429993551 2.34964929660235 -1.04896389482311 -1.40924429993551 - 0 4 0.5 4 -7 0 0 3 4 2 2.42413693614032 -1.16967838155674 0.134100623219438 2.35753187697675 -1.43089684996395 -0.401910199549709 2.33270266479743 -1.39065868805274 -0.916358507244692 2.34964929660235 -1.04896389482311 -1.40924429993551 - 0 4 1 4 -7 0 0 9 10 2 3.38400016073138 -1.63898554684763 0.123910676095441 3.38400016073138 -1.60590036227617 0.306577631105655 3.38400016073138 -1.55181365870719 0.48777462586905 3.38400016073138 -1.47656403813303 0.6634103617933 3.38400016073138 -1.38121541960421 0.829217912826736 3.38400016073138 -1.26819352023596 0.981266358479649 3.38400016073138 -1.14109947419931 1.11671842704128 3.38400016073138 -1.00385725768066 1.2341315946181 3.38400016073138 -0.860222781176388 1.33319288632326 3.38400016073138 -0.713493162199105 1.41444133318236 - 0 10 1 10 -7 0 0 3 4 2 3.38400016073138 -0.713493162199105 1.41444133318236 3.27445931052846 -0.639131929057136 1.41444134218236 3.17041912258682 -0.554860477054457 1.41444135118236 3.07361411498883 -0.462644191244419 1.41444136118236 - 0.5 4 1 4 -7 0 0 3 4 2 3.07361411498883 -0.462644191244419 1.41444136118236 2.85458862158568 -0.732749933643753 1.00795785087543 2.63809622830284 -0.968427997007859 0.581177604814454 2.42413693614032 -1.16967838155674 0.134100623219438 - 0 4 1 4 -7 0 0 3 4 2 2.42413693614032 -1.16967838155674 0.134100623219438 2.77043749558871 -1.23304481456648 0.0801088377749654 3.04682124571624 -1.52801746657693 0.153081894611 3.38400016073138 -1.63898554684763 0.123910676095441 - 0 4 1 4 -7 0 0 3 4 2 2.34964929660235 -1.04896389482311 -1.40924429993551 2.69373898594573 -1.1123924398358 -1.40924429993551 3.03826519730985 -1.17161156764856 -1.40924429993551 3.38400016073138 -1.22492845218098 -1.40924430093551 - 0.5 4 1 4 -7 1 0 4 6 3 3.38400016073138 -1.22492845218098 -1.40924430093551 1 3.38400016073138 -1.2271690202874 -1.40661808881077 0.99911678 3.38400016073138 -1.48299770543861 -1.10549465250818 0.90755662 3.38400016073138 -1.65869698678388 -0.72954908182172 0.84661465 3.38400016073138 -1.71654928653171 -0.30432728671477 0.81629087 3.38400016073138 -1.63898554684763 0.123910676095441 0.81629087 - 0.5 5 0.50480769 1 1 5 -7 1 0 2 3 2 1.31958584867696 0.472656068989958 0.273205864366582 0.98679458 1.31958583867696 0.324726155953664 0.327883279403619 0.98679458 1.31958583467696 0.168219952200019 0.347343163127914 1 - 0 3 0.5 3 -7 1 0 2 3 2 1.31958587667696 0.752125697664052 0.131521655936943 1 1.31958585967696 0.620585982016251 0.218528449319544 0.98679458 1.31958584867696 0.472656068989958 0.273205864366582 0.98679458 - 0.5 3 1 3 -7 1 0 2 3 2 1.31958583467696 -0.168220024990022 0.347343154077914 1 1.31958585167696 -3.69600017555058e-008 0.368259531631388 0.99235835 1.31958583467696 0.168219952200019 0.347343163127914 1 - 0 3 1 3 -7 0 0 3 4 2 1.31958584867696 0.472656068989958 0.273205864366582 1.62155162301957 0.826495304876419 0.309755297252586 1.98975388950823 1.05879078928986 0.263380159569886 2.42419264614297 1.16954252255029 0.134080451298479 - 0 4 1 4 -7 0 0 2 5 4 1.31958583467696 0.168219952200019 0.347343163127914 1.4596446333294 0.166750089070204 0.507738967696306 1.77326187922542 0.164680272451893 0.799426170020704 1.97195680466292 0.164035594161272 0.947403436749246 2.00023808900621 0.163957938237584 0.967686749742652 - 0 3 1.28541102 1 2.57082205 1 2.78088653 3 -7 0 0 3 4 2 2.00023808900621 0.163957938237584 0.967686749742652 2.10416159294231 0.615567439697883 0.81123155905143 2.24547977765456 0.950762301278784 0.533362792903372 2.42419264614297 1.16954252255029 0.134080451298479 - 0 4 1 4 -7 0 0 3 4 2 2.8066391803082 0.164126150055573 1.41444143218236 2.8872393151365 0.270266674356978 1.41444144418236 2.97680914339084 0.370427751174373 1.41444145518236 3.07361414598883 0.46264399884441 1.41444146518236 - 0.5 4 1 4 -7 0 0 3 4 2 3.07361414598883 0.46264399884441 1.41444146518236 2.85456857558473 0.73278062610521 1.00800873287784 2.63809474230277 0.968413467477169 0.581221728086549 2.42419264614297 1.16954252255029 0.134080451298479 - 0 4 1 4 -7 0 0 2 4 3 2.00023808900621 0.163957938237584 0.967686749742652 2.17329483222596 0.163482751855014 1.09180289485785 2.57776472443725 0.163499698825819 1.319607622678 2.8066391803082 0.164126150055573 1.41444143218236 - 2.78088653 3 4.06629756 1 5.56177307 3 -7 0 0 2 4 3 2.00023807100621 -0.163958005517587 0.96768671484265 2.17329481122596 -0.163482818485017 1.09180285785785 2.57776470343725 -0.163499765415822 1.31960758567799 2.8066391593082 -0.164126217435577 1.41444139518236 - 0 3 1.28541102 1 2.78088653 3 -7 1 0 2 3 2 2.8066391593082 -0.164126217435577 1.41444139518236 1 2.8066391693082 -4.41600020974874e-008 1.50762491060834 0.86961586 2.8066391803082 0.164126150055573 1.41444143218236 1 - 0 3 1.66079697 3 -7 0 0 3 4 2 3.07361411498883 -0.462644191244419 1.41444136118236 2.97680910839084 -0.370427905424381 1.41444137218236 2.8872392831365 -0.270266785806983 1.41444138318236 2.8066391593082 -0.164126217435577 1.41444139518236 - 0 4 0.5 4 -7 1 0 2 3 2 3.38400016073138 -0.713493162199105 1.41444133318236 1 3.38400016073138 -2.00150009506615e-007 1.90799178962474 0.82241132 3.38400016073138 0.713492872779091 1.41444149318236 1 - 0 3 1.55787992 3 -7 0 0 3 4 2 3.38400016073138 0.713492872779091 1.41444149318236 3.27445932652846 0.639131665047124 1.41444148518236 3.17041914858682 0.554860246514446 1.41444147618236 3.07361414598883 0.46264399884441 1.41444146518236 - 0 4 0.5 4 -7 0 0 3 5 3 3.38400016073138 -0.713493162199105 1.41444133318236 3.80221815059566 -0.997398256103873 1.41444130118235 4.31570353198491 -1.14106831119783 1.41444128518235 4.84213726998917 -1.22700175927945 1.41444127518235 4.85761506672432 -1.22947768939705 1.41444127518235 - 0 4 0.97061845 1 1 4 -7 1 0 2 3 2 4.85761506672432 -1.22947768939705 1.41444127518235 1 4.85761515072433 -2.74260013026651e-007 2.51879543963636 0.74394828 4.85761506672432 1.22947738839704 1.41444155118237 1 - 0 3 2.03028442 3 -7 0 0 3 5 3 4.85761506672432 1.22947738839704 1.41444155118237 4.84213726798917 1.22700145827944 1.41444155118237 4.31570353398491 1.14106800419782 1.41444154118237 3.80221817559566 0.997397928223857 1.41444152518236 3.38400016073138 0.713492872779091 1.41444149318236 - 0 4 0.02938155 1 1 4 -7 0 0 3 4 2 4.85761506672432 1.22947738839704 1.41444155118237 5.35344570327501 1.30879371316436 1.41444156018237 5.85990504933054 1.33789804554674 1.41444156418237 6.35000030160882 1.34685307097209 1.41444156518237 - 0 4 1 4 -7 0 0 3 4 2 4.85761506672432 -1.22947768939705 1.41444127518235 5.35344570927501 -1.30879400916438 1.41444126618235 5.85990504633054 -1.33789834854676 1.41444126318235 6.35000030160882 -1.3468533929721 1.41444126218235 - 0 4 1 4 -7 1 0 2 3 2 6.35000030160882 -1.3468533929721 1.41444126218235 1 6.35000030160882 -3.13400014885701e-007 2.77044820958922 0.70470804 6.35000030160882 1.34685307097209 1.41444156518237 1 - 0 3 3.67726025 3 -7 0 0 3 10 8 3.38400016073138 -1.22492845218098 -1.40924430093551 3.50690798156918 -1.2434099750588 -1.40885295291692 3.75304017125983 -1.27959269377739 -1.40867256290835 4.1221729047927 -1.33031313618648 -1.40923667193515 4.49244474837966 -1.37659426138472 -1.4098462769641 4.86287561097419 -1.41722414131453 -1.40953009994908 5.23443025562208 -1.45128758493246 -1.4074986558526 5.73056810418737 -1.49426433297374 -1.40825210888838 6.10314154888365 -1.53110727872369 -1.41951769042347 6.35000030160882 -1.56406656428917 -1.43766213928528 - 0 4 0.12485839 1 0.24971677 1 0.37457514 1 0.49943351 1 0.62429129 1 0.74914907 1 1 4 -7 0 0 4 56 53 6.35000030160882 -1.56406656428917 -1.43766213928528 6.35000030160882 -1.56503501633517 -1.43651043523058 6.35000030160882 -1.56724607444019 -1.43387575410544 6.35000030160882 -1.57055458359734 -1.42991536991733 6.35000030160882 -1.57495915180654 -1.42460670166518 6.35000030160882 -1.57948445502148 -1.41911327440426 6.35000030160882 -1.58386336222947 -1.41376084415003 6.35000030160882 -1.58822788543677 -1.40838893289488 6.35000030160882 -1.59258151264356 -1.4029932126386 6.35000030160882 -1.59692168984971 -1.39757660138132 6.35000030160882 -1.60341384315807 -1.38941765499379 6.35000030160882 -1.60987313446487 -1.38120483860371 6.35000030160882 -1.61630172777021 -1.3729348442109 6.35000030160882 -1.62269449707385 -1.36461311081564 6.35000030160882 -1.62906811837658 -1.35625731041876 6.35000030160882 -1.6348793416526 -1.34854786705258 6.35000030160882 -1.67483234755026 -1.29497145550784 6.35000030160882 -1.71413296241694 -1.23737758477228 6.35000031260882 -1.75055322114681 -1.17883401099161 6.35000030060882 -1.78784490891807 -1.11232406783256 6.35000030160882 -1.79670454133888 -1.09616322806496 6.35000030060882 -1.8054316117534 -1.0798727922912 6.35000030260882 -1.82605691673305 -1.04046361441937 6.35000030060882 -1.84586494567388 -1.0002873635111 6.35000030360882 -1.86629662664433 -0.955879660721845 6.35000030160882 -1.88997241576887 -0.900109907012924 6.35000030160882 -1.90698155157676 -0.857735863910265 6.35000030160882 -1.92569673646568 -0.807535389635871 6.35000030160882 -1.94547816440525 -0.749175207583911 6.35000030160882 -1.96359245826563 -0.689892949298155 6.35000030160882 -1.97998559004426 -0.629757236271862 6.35000030160882 -1.99460568073868 -0.568842395628563 6.35000030160882 -2.00740638434668 -0.507224837511886 6.35000030160882 -2.01834437986621 -0.444986134795706 6.35000030160882 -2.0273825162955 -0.382209341503969 6.35000030160882 -2.03448725163295 -0.318982007460832 6.35000030160882 -2.0396317388773 -0.255392437090489 6.35000030160882 -2.04279320202747 -0.191532650437312 6.35000030160882 -2.04395595008269 -0.127494595025668 6.35000030160882 -2.04310867804245 -0.063373067760059 6.35000030160882 -2.04024739590655 0.000738103995058057 6.35000030160882 -2.03537264767501 0.0647431624351351 6.35000030160882 -2.02849235534821 0.128548250745714 6.35000030160882 -2.01961894492675 0.19205851643229 6.35000030160882 -2.00606039428275 0.270962786250041 6.35000030060882 -1.98589130332477 0.364690056691847 6.35000030260882 -1.95680945794346 0.47225357529084 6.35000030060882 -1.91628365701859 0.5920591599213 6.35000030260882 -1.86887279776669 0.70812623748419 6.35000030060882 -1.8150406642098 0.819896683623001 6.35000030260882 -1.75530927037271 0.926891169014966 6.35000030060882 -1.69023573928189 1.02869898086058 6.35000030260882 -1.58549732230708 1.17314407372135 6.35000029960882 -1.48956503675054 1.28150641286829 6.35000030660882 -1.40890616991945 1.36006180859947 6.35000030160882 -1.3468533929721 1.41444126218235 - 7.7471244 5 7.75489856 1 7.76489392 1 7.77377867 1 7.78266343 1 7.79154819 1 7.80043295 1 7.80931771 1 7.81820247 1 7.82708723 1 7.8537415 1 7.86262626 1 7.87151102 1 7.88039578 1 7.90705006 1 7.91149244 1 8.20913186 1 8.22690137 1 8.24467089 1 8.28020993 1 8.29797944 1 8.31574896 1 8.4579051 1 8.49344414 1 8.52898317 1 8.60006124 1 8.67113931 1 8.74221738 1 8.81329545 1 8.88437353 1 8.9554516 1 9.02652967 1 9.09760774 1 9.16868581 1 9.23976388 1 9.31084195 1 9.38192002 1 9.45299809 1 9.52407616 1 9.59515423 1 9.6662323 1 9.73731037 1 9.80838844 1 9.87946651 1 10.02162265 1 10.16377879 1 10.30593493 1 10.44809107 1 10.59024722 1 10.73240336 1 10.8745595 1 11.01671564 1 11.44318406 5 -7 1 0 4 10 7 3.38400016073138 1.2249309651811 -1.40924642893561 1 3.38400016073138 1.19329932567867 -1.4547623830975 0.98094125 3.38400016073138 0.835819791189308 -1.91901396914827 0.82129371 3.38400016073138 0.262270601187184 -2.18911475097737 0.75025417 3.38400016073138 -0.387184014110253 -2.1053319619979 0.77093894 3.38400016073138 -0.866821797431824 -1.77217810317394 0.86586424 3.38400016073138 -0.98321933440041 -1.68728329414165 0.89391166 3.38400016073138 -1.08116652435265 -1.59512279276426 0.92649144 3.38400016073138 -1.16208426819604 -1.49968456523119 0.96283113 3.38400016073138 -1.22492845218098 -1.40924430093551 1 - 0 5 0.09851974 1 0.87717512 1 0.88728753 1 0.89739994 1 0.91762475 1 1.10976049 5 -7 0 0 3 10 8 3.38400016073138 1.2249309651811 -1.40924642893561 3.50690798256918 1.2434099760588 -1.40885295191692 3.75304017225983 1.27959268077739 -1.40867257790835 4.1221729057927 1.33031310618648 -1.40923670693515 4.49244475037967 1.37659421838471 -1.4098463289641 4.86287561297419 1.41722408331453 -1.40953016794909 5.23443025762208 1.45128751093245 -1.4074987418526 5.73056810618737 1.49426423997374 -1.40825221788839 6.10314155088365 1.53110718072369 -1.41951781642348 6.35000030160882 1.56406643828917 -1.43766224628529 - 0 4 0.12485839 1 0.24971677 1 0.37457514 1 0.49943351 1 0.62429129 1 0.74914906 1 1 4 -7 0 0 4 39 36 6.35000030160882 -1.56406656428917 -1.43766213928528 6.35000030160882 -1.56087668413766 -1.44145561046546 6.35000030160882 -1.55156186169523 -1.45246056498817 6.35000030160882 -1.5373982540225 -1.46887876476799 6.35000030160882 -1.51815295810839 -1.49055888279774 6.35000030160882 -1.49696523310203 -1.51368582889622 6.35000030160882 -1.475700256092 -1.53624261796761 6.35000030160882 -1.44253690651682 -1.57034704858748 6.35000030160882 -1.40830251989078 -1.60375210217413 6.35000030160882 -1.37436364727877 -1.63515800666583 6.35000030160882 -1.34229977275582 -1.66341536900799 6.35000030760882 -1.30840676714598 -1.69256358039245 6.35000029960882 -1.27654247863251 -1.71864403563121 6.35000030360882 -1.24245652801352 -1.74524789089482 6.35000029860882 -1.19998609099628 -1.77673806039053 6.35000030560882 -1.16608700238616 -1.80098233854207 6.35000029960882 -1.12829044859092 -1.8266202997598 6.35000030360882 -1.08970144575804 -1.85141809693764 6.35000025760881 -0.939382638728279 -1.94379931232551 6.35000030460882 -0.783807161088841 -2.01855482587621 6.35000030160882 -0.618231422944416 -2.0769283926488 6.35000030160882 -0.445655486767499 -2.11692251654842 6.35000030960882 -0.382553708270325 -2.1304975311932 6.35000029660882 -0.31068994845698 -2.14322195679758 6.35000031460882 -0.14911305225249 -2.16479364782218 6.35000029360882 0.0737504559729585 -2.17192667516098 6.35000030360882 0.290588303112203 -2.15304765926427 6.35000030060882 0.521041608308147 -2.10183263283169 6.35000030160882 0.682523250928113 -2.05064460740039 6.35000030160882 0.809166112923326 -2.00103335504398 6.35000030160882 0.932604324226326 -1.9429211842838 6.35000030160882 1.05218995497634 -1.87653050613041 6.35000030160882 1.16729123144336 -1.80213953659703 6.35000030160882 1.27730312466864 -1.7200860396997 6.35000030160882 1.3816488896248 -1.6307591154569 6.35000030160882 1.46594275062854 -1.54816896053408 6.35000030160882 1.52238723030951 -1.48648207360411 6.35000030160882 1.55445007583241 -1.44909820582847 6.35000030160882 1.56406643828917 -1.43766224628529 - 3.65967968 5 3.68528616 1 3.73417126 1 3.77141705 1 3.80866284 1 3.84590863 1 3.89246587 1 4.01351469 1 4.05076048 1 4.07869482 1 4.10662916 1 4.23698943 1 4.25561232 1 4.29285812 1 4.3673497 1 4.44184128 1 4.47908707 1 4.51633286 1 5.22400287 1 5.26124867 1 5.29849446 1 5.33574025 1 5.5219692 1 5.59646078 1 6.04341026 1 6.34137659 1 6.49035975 1 6.63934291 1 6.78832607 1 6.93730923 1 7.08629239 1 7.23527556 1 7.38425872 1 7.53324188 1 7.68222504 1 7.7471244 5 -7 0 0 3 4 2 2.34964929660235 1.04896390382311 -1.40924429193551 2.69373898594573 1.1123924478358 -1.40924429193551 3.03826519730985 1.17161157664856 -1.40924429093551 3.38400016073138 1.22492846018098 -1.40924428993551 - 0.5 4 1 4 -7 0 0 3 4 2 2.42419264614297 1.16954252255029 0.134080451298479 2.77046508259002 1.23319283557351 0.0802219015803357 3.04699638772456 1.52739187354722 0.152755600165501 3.38400016073138 1.63898521684762 0.123909655855393 - 0 4 1 4 -7 1 0 2 3 2 3.38400016073138 1.2249309651811 -1.40924642893561 1 3.38400016073138 1.79561973928736 -0.74088125163997 0.81629209 3.38400016073138 1.63898521684762 0.123909655855393 0.81629209 - 0.5 3 1 3 -7 0 0 9 10 2 3.38400016073138 0.713492872779091 1.41444149318236 3.38400016073138 0.867860532830161 1.32896323012236 3.38400016073138 1.0167936112951 1.22488173617876 3.38400016073138 1.15664911093788 1.10242486136237 3.38400016073138 1.28361979496867 0.962881171050399 3.38400016073138 1.39415240821868 0.808751490747633 3.38400016073138 1.48559714856207 0.643730709204567 3.38400016073138 1.55672507894047 0.471986537773157 3.38400016073138 1.6075368743539 0.29753830456331 3.38400016073138 1.63898521684762 0.123909655855393 - 0 10 1 10 -7 0 0 4 20 17 6.35000030160882 1.34685307097209 1.41444156518237 6.35000030160882 1.39020921303139 1.3764466293777 6.35000030060882 1.4747759580481 1.29657054758379 6.35000030360882 1.59428476072446 1.16524941034637 6.35000029960882 1.73527748542125 0.968329296123171 6.35000030360882 1.85426945907307 0.751455380122214 6.35000029960882 1.94779785051543 0.517164088903975 6.35000030360882 2.01269872159806 0.268693744052267 6.35000030060882 2.04208931299403 0.0422534092469292 6.35000030260882 2.04712503723322 -0.188466825981693 6.35000029960882 2.02707971328112 -0.420798429896852 6.35000030660882 1.9879657644233 -0.618945184968317 6.35000029760882 1.926903483523 -0.812790331575467 6.35000030160882 1.8616705484246 -0.969794349982758 6.35000030160882 1.80105181754537 -1.09202145586823 6.35000030160882 1.73223369227668 -1.21022656048267 6.35000030160882 1.66386524302935 -1.31141914428906 6.35000030160882 1.61053579749634 -1.38134698661046 6.35000030160882 1.57652542688094 -1.42284578458155 6.35000030160882 1.56406643828917 -1.43766224628529 - 0 5 0.29796632 1 0.59593265 1 0.89389897 1 1.19186529 1 1.48983162 1 1.78779794 1 2.08576426 1 2.23474742 1 2.53271375 1 2.83068007 1 2.97966323 1 3.12864639 1 3.27762955 1 3.42661271 1 3.57559588 1 3.65967968 5 -7 0 0 1 2 2 6.35000030160882 1.34685307097209 1.41444156518237 7.21279194058922 1.34821630603684 1.41444156518237 - 0 2 1 2 -7 1 0 4 5 2 7.21279194058922 1.34821630603684 1.41444156518237 1 7.21279194058922 1.91010410272507 0.923940212774803 0.79865395 7.21279194058922 2.19662408433404 0.213845419037112 0.66599028 7.21279194058922 2.14079379068224 -0.549837299455869 0.57684744 7.21279194058922 1.75566519138962 -1.18857467445427 0.52168057 - 1.23049347 5 1.78417229 5 -7 1 0 4 5 2 7.21279194058922 -1.75566531738962 -1.18857460045426 0.5216806 7.21279194058922 -1.15782027499351 -2.18010316954934 0.45424482 7.21279194058922 -9.18700043635909e-008 -2.57413700826494 0.43757767 7.21279194058922 1.1578201079935 -2.18010321754934 0.4542448 7.21279194058922 1.75566519138962 -1.18857467445427 0.52168057 - 0.55367874 5 1.23049347 5 -7 1 0 4 5 2 7.21279194058922 -1.75566531738962 -1.18857460045426 0.5216806 7.21279194058922 -2.14079380968225 -0.549837342155871 0.57684749 7.21279194058922 -2.19662412933404 0.213845207717102 0.66599032 7.21279194058922 -1.91010430372508 0.923939885424788 0.79865398 7.21279194058922 -1.34821673503686 1.41444126218235 1 - 0 5 0.55367874 5 -7 0 0 1 2 2 7.21279194058922 -1.34821673503686 1.41444126218235 6.35000030160882 -1.3468533929721 1.41444126218235 - 0 2 1 2 -7 0 0 3 13 10 15.178436250937 -6.33367198983326 -0.437746756651854 15.1343853388447 -6.33367547583343 -0.436113434594276 15.0352413141356 -6.33368261083377 -0.433229486547295 14.891937437329 -6.33369061383415 -0.431634620151543 14.7926607126136 -6.33369456083433 -0.432310291673636 14.6420810954615 -6.33369947183457 -0.434534157059264 14.4471870362045 -6.33370243483471 -0.441194527435615 14.2135702951083 -6.33369850783452 -0.457514709300782 14.082694108892 -6.33369355083429 -0.469730016690978 13.9777072539054 -6.33368883283406 -0.480356019745686 13.8803298892803 -6.3336833968338 -0.491393000689914 13.786676794832 -6.33367670883349 -0.503635333521394 13.7551732833356 -6.33367429383337 -0.507938351705776 - 8.022e-005 4 0.09279991 1 0.20869951 1 0.3014192 2 0.52503238 1 0.71137669 1 0.79400113 1 0.8014192 1 0.93320092 1 1.00008022 4 -7 0 0 2 4 3 13.7551732833356 -6.33367429383337 -0.507938351705776 15.0025245925816 -8.8175303468102 -0.305345950613154 17.4972272110737 -13.7852424547639 0.0998388515820908 18.7445785303197 -16.2690985127407 0.302431252674713 - 0.00020743 3 23.12299448 1 46.24578153 3 -7 0 0 3 13 10 18.7445785303197 -16.2690985127407 0.302431252674713 18.7583463509736 -16.2690995627407 0.304311725944031 18.7992747729176 -16.2691024827409 0.309660445368081 18.8418315149389 -16.269104862741 0.314489031607427 18.8877124771182 -16.2691069227411 0.319129711877847 18.944911689835 -16.2691090927412 0.32446878737144 19.047001814684 -16.2691108027413 0.331600704970188 19.1321832887299 -16.2691095127412 0.334510369238389 19.1979807318551 -16.2691073627411 0.335482974464586 19.2413794739164 -16.269105642741 0.335777379528569 19.3039958968906 -16.2691021427408 0.3350811617055 19.3473283089487 -16.2690990227407 0.333820518075623 19.3665796498631 -16.2690975027406 0.333106715941719 - 8.022e-005 4 0.06695952 1 0.19874124 1 0.20615931 1 0.28878375 1 0.47512806 1 0.69874124 2 0.79146093 1 0.90736053 1 1.00008022 4 -7 0 0 2 3 2 19.3665796498631 -16.2690975027406 0.333106715941719 17.2725079504001 -11.3013847467869 -0.0523200203650675 15.178436250937 -6.33367198983326 -0.437746756651854 - 4.95e-005 3 10.70174454 3 -7 0 0 3 31 29 18.7445785303197 -16.2690985127407 0.302431252674713 18.7383657600246 -16.2690977327406 0.302444747525354 18.7320197997232 -16.2690970127406 0.302121298909991 18.7248254393814 -16.2690962727406 0.301366516094141 18.7218629192407 -16.2690959727406 0.30103174414824 18.717195029019 -16.2690955327405 0.300392184317862 18.7117647287611 -16.2690950427405 0.299472912274199 18.7070789985385 -16.2690946527405 0.298545220530136 18.7033094483595 -16.2690943627405 0.297708798980409 18.701045568252 -16.2690941927405 0.297165473694602 18.6973949580786 -16.2690939327405 0.296258702231533 18.6925716978495 -16.2690936127404 0.294916421617778 18.6862643475499 -16.2690932727404 0.29281445876794 18.6819269473439 -16.2690930727404 0.291163236809511 18.6782378171686 -16.2690929327404 0.28964460350738 18.6744653869895 -16.2690928127404 0.287983806278496 18.6687113467162 -16.2690926827404 0.285188325765718 18.6637437364802 -16.2690926427404 0.282429784694694 18.6587295362421 -16.2690926627404 0.279362878199024 18.6552624460774 -16.2690927027404 0.277085441310852 18.6520903759267 -16.2690927827404 0.274837030944058 18.6505273858525 -16.2690928327404 0.273683666759276 18.6486964857655 -16.2690928827404 0.272311076414081 18.6468712856788 -16.2690929627404 0.270888193566498 18.6434776655176 -16.2690931127404 0.26811628979484 18.6404659953746 -16.2690932927404 0.26550772764094 18.6373324252257 -16.2690935127404 0.262586288212179 18.6325611049991 -16.2690938827405 0.257956703852285 18.6258536746805 -16.2690945427405 0.250810657642866 18.6202961544166 -16.2690953127405 0.243862286492837 18.6177078042936 -16.2690957227405 0.240354853816242 - 0.00034374 4 0.12844973 1 0.13092921 1 0.14807888 1 0.18926565 1 0.22666433 1 0.2593107 1 0.28513852 1 0.30371952 1 0.30555395 1 0.35968911 1 0.40366864 1 0.43987085 1 0.45418655 1 0.48522664 1 0.52438856 1 0.58584973 1 0.60243388 1 0.64566678 1 0.67135118 1 0.68258527 1 0.68568331 1 0.7184619 1 0.73014898 1 0.77558629 1 0.79999969 1 0.81719017 1 0.91044076 1 1.00034374 4 -7 0 0 3 53 51 18.6177078042936 -16.2690957227405 0.240354853816242 18.6193550543719 -16.2690947727405 0.238341288930603 18.6216040844787 -16.2690935627404 0.235746947277379 18.6254744246625 -16.2690916427404 0.231601845800497 18.6282029547921 -16.2690903927403 0.22885903458022 18.6307491649131 -16.2690893027402 0.226459921546269 18.6338726350614 -16.2690880027402 0.22359557769022 18.6380820152614 -16.2690863927401 0.220006733239759 18.6429975454948 -16.26908476274 0.216279876522742 18.6456606756213 -16.26908395274 0.214416388654232 18.6476069757138 -16.26908339274 0.213095185531478 18.6487171257665 -16.2690830827399 0.212367093306895 18.6505658358543 -16.2690825827399 0.211195651491255 18.6518920659173 -16.2690822427399 0.210378005372419 18.6580929462118 -16.2690807227398 0.206709231938161 18.6661300765936 -16.2690791527398 0.202741567749707 18.6741954469766 -16.2690780027397 0.199580975239587 18.6770945171143 -16.2690776427397 0.198535120109912 18.6847337074772 -16.2690766827396 0.195808538100406 18.6927523278581 -16.2690759827396 0.193538544022587 18.7010868382539 -16.2690755127396 0.191693838764968 18.7018911882921 -16.2690754627396 0.191519803576702 18.7095456886557 -16.2690750627396 0.189885414169073 18.7194729891272 -16.2690748027396 0.188298638523705 18.732057689725 -16.2690748227396 0.186999616222005 18.7417047001832 -16.2690749727396 0.186282049827922 18.7523150306871 -16.2690752927396 0.185823196876128 18.7630570211973 -16.2690757327396 0.18560597385581 18.7748173117559 -16.2690762427396 0.185485067440068 18.787934472379 -16.2690768127396 0.185392925125691 18.7990130629052 -16.2690772027397 0.185225269537728 18.8048859131841 -16.2690773827397 0.185110024222254 18.8123205735372 -16.2690776027397 0.184957193894995 18.8237582740805 -16.2690779027397 0.184666807031202 18.8440723350454 -16.2690782127397 0.183919672535715 18.8604509858233 -16.2690782527397 0.183051998514503 18.8725101763961 -16.2690781327397 0.182217963684888 18.9065197980115 -16.2690777027397 0.179741542697265 18.9442069198015 -16.2690756027396 0.174805820332831 18.9828896316388 -16.2690737227395 0.170315723969562 18.9914358320448 -16.2690733427395 0.169381817555204 18.9968209923005 -16.2690731027395 0.16880633010787 19.0116798130063 -16.2690724827394 0.16726097540447 19.0512026348835 -16.2690711127394 0.163627565061892 19.0958831370057 -16.2690702727393 0.16077116238622 19.1410530091512 -16.2690699527393 0.158804688432818 19.1628509001865 -16.2690699327393 0.158092576928994 19.1795389409792 -16.2690699727393 0.157651292188034 19.1909516415212 -16.2690700227393 0.157375936444956 19.2131543025758 -16.2690701427393 0.156926655233616 19.3055107069625 -16.2690710227394 0.155707695955718 19.3916959010561 -16.2690727927395 0.15654399209544 19.4649687145364 -16.2690729827395 0.155572182299282 - 5.799e-005 4 0.00911011 1 0.01184943 1 0.01933622 1 0.02215936 1 0.02361054 1 0.03357248 1 0.04070557 1 0.04443321 1 0.04462717 1 0.04873214 1 0.04898016 1 0.05214827 1 0.05409931 1 0.07388539 1 0.08340877 1 0.08435152 1 0.08463293 1 0.11169353 1 0.11313579 1 0.1140504 1 0.1145288 1 0.14009726 1 0.14853784 1 0.15817185 1 0.1736098 1 0.18544934 1 0.19557634 1 0.2145634 1 0.23110051 1 0.23408285 1 0.2349686 1 0.25693061 1 0.27380952 1 0.30553373 1 0.31387299 1 0.31581004 1 0.42402476 1 0.44619464 1 0.45133548 1 0.45393803 1 0.4650376 1 0.50330337 1 0.59196272 1 0.62060496 1 0.6604875 1 0.66781698 1 0.678677 1 0.70020207 1 0.74507885 1 1.00005799 4 -7 0 0 1 2 2 19.4649687145364 -16.2690729827395 0.155572182299282 19.3665796498631 -16.2690975027406 0.333106715941719 - 0 2 1 2 -7 0 0 3 13 11 19.4649687145364 -16.2690729827395 0.155572182299282 19.4899993457253 -16.2690743727395 0.156277522982784 19.5415420481734 -16.2690760527396 0.158350777271258 19.6100063214253 -16.2690758927396 0.162486888947713 19.6836233849219 -16.2690743727395 0.167877378613747 19.7486700380114 -16.2690722427394 0.173353668313857 19.811126750978 -16.2690703027393 0.178975915600899 19.8544829430373 -16.2690692527393 0.182955870389937 19.9056394154671 -16.2690684627392 0.187655083153138 19.9844783492117 -16.2690685827393 0.194779951381551 20.1070847350352 -16.2690746827395 0.204729381064123 20.2041447296453 -16.2690900027403 0.209871008458338 20.2590217622519 -16.2691035827409 0.211302165326314 - 6.281e-005 4 0.09442575 1 0.19433944 1 0.25856568 1 0.37257442 1 0.44027042 1 0.49483365 1 0.53663486 1 0.6339335 1 0.79319117 1 1.00006281 4 -7 0 0 3 19 15 20.2590217622519 -16.2691035827409 0.211302165326314 20.2374981112295 -16.2690992927407 0.214927312588499 20.2009077494916 -16.2690935727404 0.221373680584685 20.1536237172457 -16.2690891627402 0.230168908222436 20.091921974315 -16.2690858527401 0.241979363993403 20.0454316421069 -16.2690863827401 0.251230397152803 20.0012057000062 -16.2690882527402 0.25995733479731 19.9825802591216 -16.2690891627402 0.263625185741524 19.9549764878105 -16.2690909027403 0.269013800647469 19.9168953460017 -16.2690937327405 0.276349123365878 19.8792293042127 -16.2690970327406 0.283428997242154 19.8415842424246 -16.2691005927408 0.290241914215751 19.8128828410614 -16.2691033527409 0.295270698234605 19.7660393488364 -16.2691078127411 0.303169240009766 19.6829660748907 -16.2691150527415 0.31586349777271 19.6092537513895 -16.2691183027416 0.324224538679839 19.4981263761113 -16.2691173227416 0.333158931784199 19.4322681729832 -16.2691117427413 0.335327173117185 19.3665796498631 -16.2690975027406 0.333106715941719 - 5.543e-005 4 0.07264197 1 0.12345255 1 0.15974582 1 0.28146727 2 0.30978555 1 0.34462514 1 0.3749384 1 0.43859614 1 0.47194039 1 0.5022533 1 0.5355975 1 0.63013701 1 0.78146727 2 1.00005543 4 -7 0 0 2 4 3 20.2590217622519 -16.2691035827409 0.211302165326314 19.4993968861716 -13.7852491647642 -0.0206383583502694 17.9801471540111 -8.81754032981067 -0.484519405703436 17.2205222879309 -6.33368591083392 -0.716459929370019 - 3.88e-005 3 4.04682293 1 8.09360706 3 -7 0 0 3 19 15 17.2205222879309 -6.33368591083392 -0.716459929370019 17.1720715056296 -6.333687510834 -0.704349721074815 17.0895424517097 -6.33368999283412 -0.684412453257846 16.9823821166198 -6.33369268283425 -0.660041473020286 16.8419193099482 -6.33369571983439 -0.629491992219264 16.7351797248783 -6.33369735683447 -0.608187890327373 16.6334954700486 -6.33369842683452 -0.589284515399511 16.5906758480148 -6.33369882983454 -0.581461927457958 16.5272499150022 -6.33369926683456 -0.570329120559178 16.439766290847 -6.33369964283458 -0.555618916310481 16.3531875767347 -6.33369969183458 -0.541979903582663 16.266494792617 -6.33369940883456 -0.529270515738999 16.200386409477 -6.33369902683455 -0.520051855971136 16.0924788643517 -6.3336981328345 -0.505775628033052 15.9016943952899 -6.33369559383438 -0.483264874763849 15.733138927284 -6.3336917328342 -0.467985540898119 15.4790280452143 -6.33368441883385 -0.449204947796089 15.3287786380779 -6.33367883483359 -0.441686339218974 15.178436250937 -6.33367198983326 -0.437746756651854 - 5.543e-005 4 0.07264197 1 0.12345255 1 0.15974582 1 0.28146727 2 0.30978555 1 0.34462514 1 0.3749384 1 0.43859614 1 0.47194039 1 0.5022533 1 0.5355975 1 0.63013701 1 0.78146727 2 1.00005543 4 -7 0 0 3 13 11 15.4035701016303 -6.3336158858306 -0.843981276536958 15.4608449143507 -6.33361840283072 -0.842360442489972 15.5787170399493 -6.33362166583087 -0.837609274544304 15.7354255173926 -6.3336221928309 -0.828150550615039 15.903907215395 -6.33362067483083 -0.815831239849903 16.0527312724638 -6.33361818483071 -0.803320766485687 16.1955867992491 -6.33361615783061 -0.790477797945679 16.2947672539599 -6.33361533483057 -0.78138490557379 16.4118575095214 -6.33361522083057 -0.770646112303724 16.5923172280927 -6.33361748183067 -0.754359070240132 16.8729204314207 -6.33363148183134 -0.731594013948849 17.0949563119668 -6.33366082183273 -0.719784291197918 17.2205222879309 -6.33368591083392 -0.716459929370019 - 6.281e-005 4 0.09442575 1 0.19433944 1 0.25856568 1 0.37257442 1 0.44027042 1 0.49483365 1 0.53663486 1 0.6339335 1 0.79319117 1 1.00006281 4 -7 0 0 1 2 2 19.4649687145364 -16.2690729827395 0.155572182299282 15.4035701016303 -6.3336158858306 -0.843981276536958 - 3.88e-005 2 8.09360706 2 -7 0 0 3 53 51 13.4648676895469 -6.33366791783307 -0.649981567562466 13.4632048594679 -6.33365203783231 -0.655758151886839 13.4625395894363 -6.33363457683149 -0.663726866155333 13.4642965595197 -6.33361330583048 -0.676666707629942 13.4670970696528 -6.33360328483 -0.685176782364149 13.4709280898347 -6.33359839182977 -0.692171616156386 13.4761928800848 -6.33359459082959 -0.700207466808068 13.4851501305102 -6.33359675482969 -0.709151155032871 13.4974649510952 -6.33360553683011 -0.71712713779171 13.5044626414275 -6.33361101283037 -0.720782745865342 13.5096263516728 -6.33361503683056 -0.723300650344936 13.5125874218134 -6.33361727283066 -0.72464628526885 13.5175400520487 -6.33362089083084 -0.72674514210854 13.5210826222169 -6.33362332083095 -0.728177462686572 13.5374956129965 -6.33363319683142 -0.734409631982584 13.5577367939579 -6.33363728883162 -0.740154104565432 13.577086204877 -6.33363467383149 -0.743894301283082 13.5839447852027 -6.33363317883142 -0.745048125467885 13.6019911560599 -6.33362912283123 -0.748043828710174 13.620247616927 -6.33362107683084 -0.74988112437744 13.6390814078216 -6.33361437383053 -0.751687915403259 13.6408978079079 -6.3336137358305 -0.751860481171455 13.6581699087282 -6.3336075798302 -0.753468392547827 13.6805557997915 -6.33360317482999 -0.755817298019394 13.7092528711545 -6.33360194282993 -0.759129430186711 13.7314234422076 -6.33360257782997 -0.761791091823134 13.7560189733758 -6.3336053358301 -0.764865435479157 13.7810930445668 -6.33360985783031 -0.768081067161891 13.8086398358752 -6.3336158628306 -0.771641069270982 13.8394567973389 -6.33362377183097 -0.775631303400508 13.8654663785743 -6.33363049783129 -0.778891913335379 13.8792397392285 -6.33363390683145 -0.780571489885155 13.8966793600568 -6.33363826783166 -0.782694961186014 13.9234305513274 -6.33364401883193 -0.785784343612752 13.9706848635719 -6.33365075983225 -0.790686414975588 14.0085556253707 -6.33365275583235 -0.794067824006196 14.0363677566917 -6.33365260583234 -0.796276426911099 14.1147511504147 -6.33365110883227 -0.80231423939788 14.2013370145273 -6.33363667983159 -0.806759585419022 14.2900875187427 -6.33362174083088 -0.810635390793113 14.3096906496738 -6.33361857383073 -0.811478385843153 14.3220451802606 -6.33361664883063 -0.812014481908616 14.356119191879 -6.33361130983038 -0.813459830097267 14.4468917061905 -6.33360011282985 -0.817447821036686 14.5499647710862 -6.33359627782967 -0.822445993784087 14.6544602060495 -6.33359726282971 -0.827596122568705 14.7049538784478 -6.33359880382979 -0.830075981796492 14.7436226802845 -6.33360034682986 -0.831952494615621 14.7700676815405 -6.33360147682991 -0.833230552696326 14.8215221339845 -6.33360393383003 -0.835674183472392 15.0354168841439 -6.33361504683056 -0.845530307270533 15.2344341335968 -6.33362486183102 -0.851195051269594 15.4035701016303 -6.3336158858306 -0.843981276536958 - 5.799e-005 4 0.00911011 1 0.01184943 1 0.01933622 1 0.02215936 1 0.02361054 1 0.03357248 1 0.04070557 1 0.04443321 1 0.04462717 1 0.04873214 1 0.04898016 1 0.05214827 1 0.05409931 1 0.07388539 1 0.08340877 1 0.08435152 1 0.08463293 1 0.11169353 1 0.11313579 1 0.1140504 1 0.1145288 1 0.14009726 1 0.14853784 1 0.15817185 1 0.1736098 1 0.18544934 1 0.19557634 1 0.2145634 1 0.23110051 1 0.23408285 1 0.2349686 1 0.25693061 1 0.27380952 1 0.30553373 1 0.31387299 1 0.31581004 1 0.42402476 1 0.44619464 1 0.45133548 1 0.45393803 1 0.4650376 1 0.50330337 1 0.59196272 1 0.62060496 1 0.6604875 1 0.66781698 1 0.678677 1 0.70020207 1 0.74507885 1 1.00005799 4 -7 0 0 2 4 3 18.6177078042936 -16.2690957227405 0.240354853816242 17.3294977731069 -13.7852387747637 0.0177707484740652 14.7530777207336 -8.81752486880994 -0.427397462210289 13.4648676895469 -6.33366791783307 -0.649981567562466 - 0.00020743 3 23.12299448 1 46.24578153 3 -7 0 0 3 31 29 13.7551732833356 -6.33367429383337 -0.507938351705776 13.7410455626646 -6.33367991883364 -0.510546119379638 13.7264243219701 -6.33368167983372 -0.513962461971906 13.7100939911945 -6.33368182383373 -0.517435040326845 13.7033859008759 -6.33368177483373 -0.518836209713397 13.6929111303783 -6.3336812948337 -0.520861177339577 13.6808298298045 -6.33368013383365 -0.523124316637071 13.670439259311 -6.33367863683358 -0.525192101125285 13.6620850589142 -6.33367711183351 -0.527012448251747 13.6570592186755 -6.33367603883346 -0.528220327009118 13.6489469482902 -6.33367420383337 -0.530258970305948 13.6380266577715 -6.33367133183323 -0.533358766143181 13.6233938770765 -6.33366737983304 -0.537981139052732 13.6131846365915 -6.33366492383293 -0.541334598022012 13.6044516061767 -6.33366316983284 -0.544194393997845 13.5954809957507 -6.33366173783278 -0.547113666136503 13.581677365095 -6.33366042783271 -0.551700875504384 13.5695549945192 -6.33366032683271 -0.556151408125773 13.5570896639272 -6.33366098483274 -0.561406864565394 13.5483289035111 -6.33366184683278 -0.565530757171268 13.5402414031269 -6.33366299283284 -0.569754445801883 13.5362538629375 -6.33366364183287 -0.571939274515657 13.5315848127158 -6.3336644338329 -0.574549126149618 13.5269394124951 -6.33366531983295 -0.577249409807875 13.5183692620881 -6.33366709783303 -0.582537830359061 13.5108563417312 -6.33366875783311 -0.587629427220899 13.5032698513709 -6.33367030283318 -0.593676022478097 13.4919576008336 -6.33367232683328 -0.60376210355716 13.4770737501266 -6.33367365383334 -0.621468899478187 13.4679253196921 -6.3336707248332 -0.640374273226144 13.4648676895469 -6.33366791783307 -0.649981567562466 - 0.00034374 4 0.12844973 1 0.13092921 1 0.14807888 1 0.18926565 1 0.22666433 1 0.2593107 1 0.28513852 1 0.30371952 1 0.30555395 1 0.35968911 1 0.40366864 1 0.43987085 1 0.45418655 1 0.48522664 1 0.52438856 1 0.58584973 1 0.60243388 1 0.64566678 1 0.67135118 1 0.68258527 1 0.68568331 1 0.7184619 1 0.73014898 1 0.77558629 1 0.79999969 1 0.81719017 1 0.91044076 1 1.00034374 4 -7 0 0 1 2 2 11.2339737235851 -1.75393664830752 -1.18752892440459 13.4648676895469 -6.33366791783307 -0.649981567562466 - 0.48181163 2 12.06882334 2 -7 0 0 1 2 2 13.7551732833356 -6.33367429383337 -0.507938351705776 11.7544106983045 -1.87810382820514 -0.947904145423029 - 0.19391992 2 2.76255331 2 -7 0 0 7 8 2 11.7544106983045 -1.87810382520514 -0.947904145760029 11.7511115481478 -1.87781746519154 -0.948560236622192 11.7476131379817 -1.87750514417671 -0.949270933641948 11.7438178778014 -1.87715942816028 -0.950056136040243 11.7396259576023 -1.87677176214187 -0.950939249624189 11.7349020073779 -1.87632951412087 -0.951948193159111 11.7294703271199 -1.87581629809649 -0.953125736656041 11.7230005468126 -1.87519847706714 -0.954527313500612 - 0 8 0.09090909 8 -7 0 0 9 18 3 11.7230005468126 -1.87519847706714 -0.954527313500612 11.7182484865869 -1.87474468904559 -0.955556771977509 11.7147218264194 -1.87440932702966 -0.956320251037772 11.7117968162805 -1.87413204301649 -0.956947920193585 11.7093072261622 -1.87389723200534 -0.95748026745087 11.7070775760563 -1.8736879019954 -0.957952890918319 11.7050421059596 -1.87349800198638 -0.95838221302671 11.7031173858682 -1.8733195599779 -0.958785024790843 11.7012501357795 -1.87314767196974 -0.959172910732266 11.6976449056083 -1.87281824595409 -0.959914876058508 11.6959076955258 -1.8726605989466 -0.960269303964342 11.6941189054408 -1.87249937093894 -0.960631631639552 11.6922332853513 -1.87233048093092 -0.961010624738553 11.690184855254 -1.87214815192226 -0.961420330278013 11.6879140251461 -1.87194705291271 -0.961870545825397 11.6852870250213 -1.87171562190172 -0.962389472181045 11.6821623748729 -1.87144139488869 -0.963001560687118 11.6780848446792 -1.87108504887177 -0.963799833250033 - 0.09090909 10 0.138085007 8 0.18181818 10 -7 0 0 4 5 2 11.6672705041656 -1.87013482582663 -0.965924593252954 11.6844733549827 -1.87166202789917 -0.96251442727198 11.6974458555988 -1.87281494695393 -0.959918134296663 11.7061885860141 -1.87360302699136 -0.958138320939126 11.7107016962285 -1.87402893301159 -0.957175687632403 - 0.6 5 0.8 5 -7 0 0 9 18 3 11.6705331843206 -1.87042310684033 -0.965280878400379 11.6664259741255 -1.87006122882314 -0.96608956310479 11.6629190439589 -1.86974794380826 -0.966786142260875 11.6598103038112 -1.86946655479489 -0.967411883354597 11.6569909036773 -1.8692078017826 -0.967986890295908 11.6543829635535 -1.86896499577107 -0.968526094385519 11.6519272334368 -1.86873296176005 -0.969041117828981 11.6495786033253 -1.86850762774935 -0.969540783172714 11.6472960732169 -1.86828522173878 -0.970033914189136 11.6419584829633 -1.86775695571369 -0.971206370764825 11.6389286428194 -1.86745054369914 -0.971887377974171 11.6358577326736 -1.86713354368408 -0.972590295376558 11.6326625525218 -1.86679744566812 -0.973333920372878 11.6292411423593 -1.86643099965071 -0.974141618640242 11.625488562181 -1.86602290363133 -0.975041499236984 11.6212205419783 -1.86555156460894 -0.976077554846194 11.6162135917405 -1.86499178158235 -0.977312041408829 11.60988705144 -1.86427362754824 -0.978885058245543 - 0.27272727 10 0.311110684 8 0.36363636 10 -7 0 0 13 14 2 11.5253851174264 -1.85416340406803 -1.00069086553026 11.5309641976914 -1.85495133410546 -0.999017899189802 11.5382577680378 -1.85593192115203 -0.996931358761696 11.5474563184747 -1.85711904820842 -0.994398228872379 11.5586474690063 -1.8585124352746 -0.991414581982664 11.5717528796287 -1.8600892853495 -0.988021567915504 11.5863414603217 -1.86178862743021 -0.984345385838895 11.601760831054 -1.86352161951252 -0.980566236954395 11.6166787117626 -1.86513983558938 -0.977011169254538 11.6303736224131 -1.86657771165768 -0.973836621456755 11.6423470729818 -1.86779192071535 -0.971144284570876 11.6524481334616 -1.86877903276224 -0.968949018326607 11.6607072138538 -1.86955215479896 -0.967225668346752 11.6672705041656 -1.87013482582663 -0.965924593252954 - 0.4 14 0.6 14 -7 0 0 9 18 3 11.5686412494809 -1.85959163232586 -0.989067894755202 11.5632220392236 -1.85897247429645 -0.990404714278697 11.5586254190052 -1.85843713327102 -0.991553265726251 11.5545678088125 -1.85795627224818 -0.992585352830272 11.5509009286383 -1.85751379622717 -0.993534217643341 11.5475190584777 -1.85709810120742 -0.994424825258643 11.5443423283268 -1.85670021318852 -0.995276633542101 11.5413109681828 -1.85631308417014 -0.996104126320405 11.5383704480432 -1.85593016115195 -0.996922159387259 11.5314537077146 -1.85501157910832 -0.998885586665517 11.5275161775276 -1.85447407908279 -1.00003543449913 11.5235306773383 -1.85391560405626 -1.00122523955564 11.5193855571414 -1.85332078602801 -1.00248843561564 11.5149455669305 -1.85266844099702 -1.003864526681 11.5100696266989 -1.85193821696234 -1.00540615275423 11.504513016435 -1.85108829792197 -1.00718969883894 11.4979746861245 -1.85007186087369 -1.00933067794063 11.4896716757301 -1.8487498478109 -1.01209293307183 - 0.54545455 10 0.583550284 8 0.63636364 10 -7 0 0 9 10 2 11.2476413042343 -1.76656090890714 -1.16638962240053 11.26671057514 -1.78237843365843 -1.1395370341251 11.2871293761099 -1.79508003526172 -1.11692149105092 11.3093907871672 -1.80588765777506 -1.0970715151081 11.3339992183361 -1.81535286222463 -1.07918743925865 11.3616030696472 -1.82390046763062 -1.06265331947332 11.392991591138 -1.83180554600609 -1.04700680573015 11.4293728128661 -1.83932332736317 -1.03179823600778 11.4723937949094 -1.84667946971256 -1.01658107428501 11.5253851174264 -1.85416340406803 -1.00069086553026 - 0.2 10 0.4 10 -7 0 0 14 28 3 11.4896716757301 -1.8487498478109 -1.01209293307183 11.487521775628 -1.84840753779464 -1.0128081651058 11.4854957355317 -1.84808401377928 -1.01348438013792 11.4835809354408 -1.84777736276471 -1.01412530716837 11.4817668053546 -1.84748591675087 -1.01473344819725 11.4800449552729 -1.84720817773768 -1.01530899322459 11.4784003151947 -1.8469433567251 -1.01587232825134 11.4768456651209 -1.84668897171302 -1.01637313427513 11.4753394650494 -1.8464464457015 -1.01690546730042 11.4739157249817 -1.84621216369037 -1.01736680732233 11.4725369649162 -1.8459875506797 -1.01784356934497 11.4712175848536 -1.84577057666939 -1.01828717636604 11.4699450547931 -1.84556115465945 -1.01872075038664 11.4687180347349 -1.84535851364982 -1.0191389854065 11.4647783145477 -1.84470593561883 -1.02048600747048 11.4622481144275 -1.84428351159876 -1.02135752851188 11.4598976543159 -1.84388798957998 -1.02217351955063 11.4576919042111 -1.8435137985622 -1.0229454885873 11.4556022141119 -1.84315628854522 -1.02368282962232 11.453604124017 -1.84281140252884 -1.02439364665609 11.4516757139254 -1.84247541651288 -1.02508535368894 11.4497964138361 -1.84214473849718 -1.02576511772123 11.4479461237482 -1.84181575648155 -1.02644017775329 11.4461042836608 -1.84148466746582 -1.02711816978549 11.4442487335726 -1.8411472604498 -1.02780762181824 11.4423538034826 -1.84079854143323 -1.02851879185202 11.4403873433892 -1.84043211341583 -1.02926512388747 11.4383059532904 -1.84003920239717 -1.03006557492549 - 0.63636364 15 0.663720479 13 0.72727273 15 -7 0 0 5 14 4 11.4383059532904 -1.84003920239717 -1.03006557492549 11.4357428031686 -1.83955534637419 -1.03105130297231 11.4332318830493 -1.83907106935118 -1.032034270019 11.4307599029319 -1.83858438932807 -1.0330197180658 11.4283154628158 -1.83809345530475 -1.03401254111296 11.4210443224705 -1.83660463423404 -1.03702371725598 11.4162679322436 -1.83558849418577 -1.03907926635361 11.4114830720163 -1.83453250913561 -1.04120668045466 11.4066237617855 -1.83342116208283 -1.04343437456047 11.397685651361 -1.83130159498215 -1.04766024076119 11.39366454117 -1.83032282493567 -1.04960431185353 11.3895148209729 -1.82928666688645 -1.05165460795091 11.3851968107678 -1.82818081783393 -1.05383511905448 11.3806606805524 -1.82698744377724 -1.05618044516588 - 0.72727273 6 0.747207949 4 0.786983787 4 0.81818182 6 -7 0 0 13 26 3 11.3208351477108 -1.8081960518847 -1.09221848887759 11.3171783675371 -1.80676527781674 -1.0948967360048 11.3135399973643 -1.80528833874659 -1.09765016313558 11.3099189871923 -1.80376460567422 -1.10048591327027 11.3063184570213 -1.80219296859957 -1.10338496740797 11.302732926851 -1.80057313552263 -1.10638583655051 11.2991719266818 -1.79890322544331 -1.1094300476951 11.2956252465134 -1.79718330536162 -1.11258969984517 11.2921042163461 -1.79541118927745 -1.11579753399754 11.2886021761798 -1.79358645719078 -1.11910544915465 11.2851250360147 -1.79170734210153 -1.12248511831518 11.2816724858507 -1.78977264100963 -1.12595062747978 11.278247135688 -1.78778078491503 -1.12949934864834 11.2714552253654 -1.78367955272023 -1.13676778999357 11.2680886852055 -1.78157017462004 -1.14048743017024 11.2647538950471 -1.77940041751698 -1.14429397535104 11.2614535148903 -1.77716855341097 -1.14818901653605 11.2581906347353 -1.77487273730193 -1.15217424472534 11.2549687445823 -1.77251099818975 -1.15625143791899 11.2517918244314 -1.77008123107434 -1.16042245411711 11.2486643742829 -1.7675811909556 -1.16468921631977 11.2455915141369 -1.7650084738334 -1.16905369952707 11.2425790239938 -1.76236051170763 -1.17351790573911 11.2396334538539 -1.75963455457815 -1.17808384995598 11.2367622237175 -1.75682765344483 -1.18275353417778 11.2339737135851 -1.75393664830752 -1.18752892440459 - 0.90909091 14 0.954545455 12 1 14 -7 0 0 7 8 2 11.7544106583045 -1.87810383020514 -0.947904129004028 12.0783651736915 -1.89769579713571 -0.902928185592786 12.402266709076 -1.91178326380483 -0.867147394679289 12.7261328244588 -1.92138281926078 -0.840884580001872 13.0499763698406 -1.92718805153652 -0.824271077433774 13.3738045752216 -1.92955992964917 -0.81735884869746 13.697618850602 -1.92853900160068 -0.820155925459314 14.0214149259814 -1.92384090537754 -0.832597703716267 - 0 8 1 8 -7 0 0 13 50 5 15.4046082516796 -1.88091313133858 -0.93821375417976 15.3978077413566 -1.88129073635651 -0.937351763946818 15.3909982510332 -1.88166667337437 -0.936492398574 15.3841798107093 -1.88204094039214 -0.935635675149308 15.377352450385 -1.88241353640984 -0.934781610779742 15.3705161700603 -1.88278446142746 -0.933930222530303 15.3636710097352 -1.883153714445 -0.933081527536992 15.3568169894096 -1.88352129346246 -0.93223554283381 15.3499541290837 -1.88388719747984 -0.931392285578758 15.3430824387573 -1.88425142649714 -0.930551772805835 15.3362019684305 -1.88461397751436 -0.929714021649044 15.3293127181033 -1.8849748515315 -0.928879049177385 15.3224147177756 -1.88533404754856 -0.928046872494859 15.2913195962987 -1.88694363362501 -0.924312953280507 15.2670241551447 -1.8881751036835 -0.921442889486187 15.2426231139857 -1.88938591274101 -0.91860806388454 15.2181179628218 -1.89057600379754 -0.915809214355601 15.193510201653 -1.89174532485308 -0.913047070124407 15.1688013604794 -1.89289382390763 -0.91032235168799 15.143992989301 -1.89402144996119 -0.907635770915384 15.119086658118 -1.89512815701375 -0.904988030933623 15.0940839569305 -1.89621390106532 -0.90237982623674 15.0689865057384 -1.8972786371159 -0.899811842598767 15.0437959545419 -1.89832232816547 -0.897284757130737 15.0185139733411 -1.89934493321404 -0.894799238251681 14.9734693412016 -1.90112295629849 -0.890461450881647 14.9537424802646 -1.90188679633477 -0.888592340906869 14.9339622793251 -1.90263792537045 -0.886748910425311 14.9141293583831 -1.90337633240552 -0.884931449711986 14.8942443274386 -1.90410200543999 -0.883140244684909 14.8743078364917 -1.90481493447385 -0.881375576866092 14.8543205055423 -1.90551511150711 -0.879637723443548 14.8342829645906 -1.90620252653976 -0.877926957190291 14.8141958736365 -1.9068771735718 -0.876243546551333 14.7940598726801 -1.90753904660324 -0.874587755566687 14.7738756017214 -1.90818813863407 -0.872959843927366 14.7536437307604 -1.90882444566429 -0.87136006694338 14.6802281372734 -1.91108177477151 -0.865671145999171 14.6267702747343 -1.91262777884494 -0.861748464979854 14.5730032921805 -1.9140859049142 -0.858025137881005 14.5189342596123 -1.91545624897929 -0.854505131850814 14.4646001770316 -1.91673823904018 -0.851194027395545 14.4099715444369 -1.91793293309692 -0.848093027886255 14.3551209518316 -1.91903900314946 -0.845209412286291 14.3000041192137 -1.92005794819785 -0.84254294146164 14.244681076586 -1.92098883024207 -0.840099578975587 14.1891396939479 -1.92183246828214 -0.837880534953188 14.1334066713008 -1.92258880331806 -0.835889150017602 14.077493188645 -1.92325818434986 -0.834127519602929 14.0214149759814 -1.92384089337753 -0.832597738772269 - 0.66666667 14 0.68992277 12 0.771369089 12 0.834521425 12 1 14 -7 0 0 8 9 2 14.0214149259814 -1.92384090537754 -0.832597703716267 14.4469519161934 -1.91941914516751 -0.844206113928637 14.8746440165076 -1.90954145869835 -0.870309830529497 15.3002858267245 -1.89368147794504 -0.911214039722342 15.71936963663 -1.87078778785765 -0.966689618380291 16.1273476160079 -1.83925587135996 -1.0358682782011 16.5200163346586 -1.79705184335538 -1.11704284505669 16.8938235024135 -1.7422726037535 -1.20755015635555 17.2459916091406 -1.67360683349206 -1.30407192294009 - 0 9 1 9 -7 1 0 1 2 2 17.2459916291406 -1.67360684049206 -1.30407191694009 0.51545457 20.1549001573063 -1.6722750014288 -1.30306872289244 0.51628915 - 0 2 0.22601628 2 -7 0 0 1 2 2 20.1549001573063 -1.3686672230082 1.41444126018235 7.21279194058922 -1.34821673503686 1.41444126218235 - 0 2 1 2 -7 1 0 1 2 2 7.21279194058922 -1.75566531738962 -1.18857460045426 0.5216806 11.2339737235851 -1.75393664830752 -1.18752892440459 0.5228068 - 0.69078273 2 1 2 -7 0 0 4 5 2 11.2339734735851 1.75393601130749 -1.1875290174046 11.2219366830134 1.7412030157027 -1.20856125940358 11.2161503127385 1.72852284410043 -1.22874235436213 11.2166156027606 1.7159510815033 -1.24808465628084 11.2233329330797 1.70353742691368 -1.26660390716045 - 0 5 0.125 5 -7 0 0 6 12 3 11.2431027540187 1.68196504388905 -1.29813864065827 11.2408827239133 1.68359650096654 -1.29580168054727 11.2388492538167 1.68520934304315 -1.29348151743707 11.2369567337268 1.68682613111994 -1.29114947632631 11.2351752936422 1.68846606119783 -1.28877807021367 11.2334815035617 1.69014832527773 -1.28633739309774 11.2302573734086 1.69361462344237 -1.28127979985752 11.2287250033358 1.69539677152702 -1.27866604573338 11.227255703266 1.69726117461558 -1.27592152160302 11.2258514631993 1.69923059970912 -1.27301195746482 11.2245206231361 1.70133227680894 -1.26989396831672 11.2232964030779 1.70360386691684 -1.26650453215573 - 0.80952381 7 0.833512563 5 0.85714286 7 -7 0 0 7 20 4 11.2747063555198 1.66523611609447 -1.3217362977791 11.2724905554145 1.66609751913538 -1.32053980272227 11.27028850531 1.66699117917783 -1.31929676266323 11.2681053252063 1.66791611122176 -1.31800751560199 11.2659480851038 1.66887117726712 -1.31667339553863 11.2638213350028 1.66985510131386 -1.31529543147318 11.2617311049035 1.6708664823619 -1.31387558040574 11.2583084247409 1.67259955044421 -1.3114367472899 11.2569531446766 1.67330696047781 -1.31043972424254 11.2556181946132 1.67402558951195 -1.30942536419436 11.2543050745508 1.67475496154659 -1.30839435514539 11.2530152244895 1.67549458758172 -1.30734744709567 11.2517499644294 1.67624395761731 -1.30628545404523 11.2493863043172 1.67769065068603 -1.30423305094774 11.2482833142648 1.67838634271907 -1.30324515690082 11.2472020942134 1.67908923975246 -1.30224575185335 11.2461430641631 1.67979895578617 -1.30123507480535 11.2451066241139 1.68051509682018 -1.30021342075682 11.2440931040657 1.68123726085448 -1.29918113870779 11.2431027540187 1.68196504388905 -1.29813864065827 - 0.76190476 8 0.78279883 6 0.796812364 6 0.80952381 8 -7 0 0 14 28 3 11.3057201669929 1.65529250362217 -1.33542224342915 11.3038177169025 1.65582096564727 -1.33470145139491 11.3019811068153 1.65633760967181 -1.33399498136136 11.3002050267309 1.65684367469585 -1.33330439032856 11.2984877866493 1.65734000671942 -1.33261553529584 11.2968156865699 1.65782857474263 -1.33197540126543 11.2952067164935 1.65830826376541 -1.33127581423221 11.2936254864184 1.65878308478797 -1.33067404520362 11.2921045063462 1.65925048381017 -1.32999259717126 11.2906103162752 1.65971425583219 -1.32938145714223 11.2891606362063 1.66017325485399 -1.32873824211168 11.287742256139 1.66062931387566 -1.32811440108205 11.2863568960732 1.6610828308972 -1.32748825205231 11.2850010360088 1.66153471391866 -1.32686459102268 11.2829928959134 1.66221653295105 -1.32592237997793 11.2823203458814 1.662447100962 -1.32560357396279 11.2816546758498 1.66267755297294 -1.32528475394765 11.2809955958185 1.66290799498389 -1.32496578193249 11.2803428257875 1.66313853599484 -1.32464651891733 11.2796960657568 1.6633692830058 -1.32432682490215 11.2790550657263 1.66360034701677 -1.32400655888693 11.2784195256962 1.66383183602777 -1.32368557787169 11.2777891956662 1.66406386403879 -1.3233637368564 11.2771637956365 1.66429654304984 -1.32304088684107 11.276543075607 1.66452998806093 -1.32271687682568 11.2759267655778 1.66476431907206 -1.32239154881023 11.2753146155487 1.66499965408324 -1.3220647447947 11.2747063555198 1.66523611609447 -1.3217362977791 - 0.71428571 15 0.74578602 13 0.76190476 15 -7 0 0 10 29 4 11.3654084298279 1.64206252299378 -1.35325031727594 11.3630723197169 1.64248090601365 -1.35269312624947 11.3608336496106 1.64288656203292 -1.35215172422376 11.3586817795084 1.64328118405166 -1.35162475919873 11.3566081294099 1.64366619506995 -1.35110878917422 11.3546027193147 1.64404311208785 -1.35060816315044 11.3526615492225 1.64441282310541 -1.35011164812686 11.3507753391329 1.6447767181227 -1.34962649610382 11.3489399290457 1.64513565513975 -1.34914599108099 11.3471492189606 1.64549067915661 -1.34867098705843 11.3436474687943 1.64619472819005 -1.34772837901366 11.341936398713 1.64654375620663 -1.34726083699145 11.3402601386334 1.64689071822311 -1.34679580096936 11.3386140085552 1.64723650423953 -1.34633206094734 11.3369936684783 1.64758197525594 -1.34586843292532 11.3353949784023 1.64792797727238 -1.34540373990325 11.3338140083273 1.64827535428887 -1.34493678588107 11.3322469182528 1.64862495530548 -1.34446633385872 11.3306899381789 1.64897765232223 -1.34399108583615 11.3268853679982 1.6498528313638 -1.34280987278004 11.3246448278917 1.65037977138883 -1.34209702074618 11.3224060577854 1.65091794641439 -1.34136792671155 11.3201573676786 1.65147032444063 -1.34061894167598 11.3178868175708 1.65204009746769 -1.33984593563926 11.3155819074613 1.65263076949575 -1.33904419960118 11.3132291073495 1.65324629352498 -1.33820825356148 11.3108133072348 1.65389125655562 -1.33733156451984 11.3083171471162 1.65457111958791 -1.33640617547588 11.3057201669929 1.65529250362217 -1.33542224342915 - 0.66666667 11 0.680455039 9 0.694243409 9 0.71428571 11 -7 0 0 11 22 3 11.4940436859378 1.62454952916196 -1.37619157236559 11.4897629057344 1.62500140118342 -1.37560923333793 11.4855620055349 1.62545111720478 -1.37502951431039 11.481436915339 1.62589900822606 -1.37445140728294 11.4773844051465 1.62634541024726 -1.37387633525562 11.4733994749572 1.6267906152684 -1.37329860122818 11.4694814447711 1.62723498328951 -1.37272750720106 11.4656234145879 1.62767875631059 -1.3721495421736 11.4618258244075 1.62812230033166 -1.3715768961464 11.4580833742297 1.62856587635272 -1.37100089411905 11.4543941240545 1.62900979737381 -1.37042434309166 11.4420489134681 1.63051797144544 -1.36846321499851 11.4336305030683 1.63158526149614 -1.36707170093242 11.4254623226803 1.6326603025472 -1.36566643186567 11.4175101223026 1.63374717059882 -1.36424226679803 11.4097422619337 1.6348500036512 -1.36279402872924 11.402129121572 1.63597306670455 -1.36131630265905 11.3946423712164 1.63712084375906 -1.35980322058718 11.3872544908655 1.63829813881498 -1.35824822051333 11.379938130518 1.63951019187255 -1.35664380143712 11.3726656101726 1.64076281193205 -1.35498124135815 11.3654084298279 1.64206252299378 -1.35325031727594 - 0.61904762 12 0.633084236 10 0.66666667 12 -7 0 0 10 11 2 11.5701541695528 1.61709257980777 -1.38573625381894 11.5565882589085 1.61836862986838 -1.38411372374187 11.5463530084223 1.61933918391448 -1.3828827616834 11.5378684680193 1.62014982995298 -1.38184516863412 11.5306096076745 1.62085002798624 -1.38094888359155 11.5241078873657 1.62148357901633 -1.38013327655281 11.5181217870814 1.62207436704439 -1.37937391051674 11.5123987968096 1.62264687307159 -1.37863758248177 11.5066990665389 1.62322634709911 -1.3778930324464 11.5007704262573 1.62383946812823 -1.37710664740905 11.4940436859378 1.62454952916196 -1.37619157236559 - 0.57142857 11 0.61904762 11 -7 0 0 8 16 3 11.64673082319 1.60964937245424 -1.39514540826585 11.6415692929448 1.61017718347931 -1.39448205623434 11.6370536727304 1.61063562950108 -1.39390590420697 11.6329136925337 1.61105294652091 -1.39338080518203 11.6290120323484 1.61144336453945 -1.39288879815866 11.6252370321691 1.61181835755726 -1.39241542413618 11.6215033819918 1.61218654457475 -1.39194995011407 11.6177280118124 1.61255619659231 -1.39148213609185 11.6097871514353 1.61332830162898 -1.39050496504544 11.605612821237 1.61373144464813 -1.3899947260212 11.6011999110274 1.61415507766825 -1.38945854399574 11.5964374308012 1.61460983468985 -1.38888282896839 11.5911974305523 1.6151078557135 -1.38825274993846 11.5852859202715 1.61566741674008 -1.38754434390482 11.5784521199469 1.6163120527707 -1.38672871686608 11.5701541695528 1.61709257980777 -1.38573625381894 - 0.52380952 9 0.547237546 7 0.57142857 9 -7 0 0 10 11 2 11.7609727086162 1.59741305187305 -1.41038047298947 11.7415220476923 1.59954192697416 -1.40775573786481 11.7263593269722 1.60119696205277 -1.40569829676708 11.7136148763668 1.60258279711859 -1.40397787868537 11.7025580358417 1.60377924017542 -1.40248858661463 11.6925938153684 1.60485106122633 -1.40115556355131 11.6833678349302 1.60583618927312 -1.39992674549295 11.6745395145108 1.60677089331752 -1.39875905943749 11.6657822640949 1.60768875036111 -1.39760923238287 11.6567435236656 1.60862549340561 -1.39643222332697 11.64673082319 1.60964937245424 -1.39514540826585 - 0.47619048 11 0.52380952 11 -7 0 0 12 13 2 11.8750858240363 1.58526635829611 -1.42520972769383 11.8665017236286 1.58613092033717 -1.4241649136442 11.8588757832663 1.58690873337412 -1.42322122559938 11.8516629329238 1.58765259340945 -1.42231806455648 11.8445812625874 1.58839030544449 -1.42142268151395 11.8374007922463 1.58914534848035 -1.42050678347045 11.8299087718905 1.58993916151805 -1.41954166742461 11.8219092115105 1.59079318655862 -1.41850387137532 11.8131298310935 1.59173611860341 -1.41735564832078 11.8032795306257 1.59279983465393 -1.41605576825904 11.791874780084 1.59403741071271 -1.41453982518703 11.7782648894375 1.59552041978315 -1.41271393510031 11.7609727086162 1.59741305187305 -1.41038047298947 - 0.42857143 13 0.47619048 13 -7 0 0 7 8 2 12.2620384124155 1.55536501987587 -1.46042144336629 12.1982259993846 1.55909803305318 -1.45614240816305 12.1387333265589 1.56293043123521 -1.45172253495312 12.0824993938879 1.56690423342395 -1.44709274773321 12.028708781333 1.57106528162159 -1.44220256550094 11.9766526688604 1.57546640183064 -1.43698822425327 11.9256735864391 1.58017132105411 -1.43136702498628 11.8750858240363 1.58526635829611 -1.42520972769383 - 0.38095238 8 0.42857143 8 -7 0 0 9 10 2 12.4978729636171 1.54304602729075 -1.47438376302947 12.4583060717378 1.54495717938152 -1.47224143092771 12.4259631602016 1.54655090845722 -1.47045485484285 12.3979668388718 1.54795592152396 -1.46886604376739 12.3729873676853 1.54923548058473 -1.46741494769847 12.3499553865914 1.550441253642 -1.46604155763323 12.3281435655554 1.55161109269757 -1.46470910056995 12.3067910445412 1.55278694075342 -1.46336856150627 12.285164153514 1.55401217381161 -1.46197217243995 12.2620384124155 1.55536501987587 -1.46042144336629 - 0.33333333 10 0.38095238 10 -7 0 0 5 6 2 12.5372930154894 1.54114996220069 -1.47650613213027 12.5247258148925 1.54175276422932 -1.47583238709827 12.5145005944069 1.54224443125268 -1.47528256907216 12.5066168740324 1.54262413027071 -1.47485688905194 12.5010743737691 1.54289139428341 -1.4745571020377 12.4978729636171 1.54304602729075 -1.47438376302947 - 0.28571429 6 0.33333333 6 -7 0 0 9 18 3 12.7343610748497 1.53144516073974 -1.48727912364196 12.7247541943934 1.53194050476327 -1.48673288161602 12.715882653972 1.53239576878489 -1.48623070559217 12.7075319435754 1.53282218580514 -1.48575998656981 12.6995521731963 1.5332275928244 -1.48531199854853 12.6918270128294 1.53361804084294 -1.48488005152801 12.6842579824699 1.53399861886102 -1.48445855050799 12.6767573921136 1.53437382187884 -1.48404258948824 12.6692439517568 1.5347477748966 -1.48362771446853 12.6511079308954 1.53564601293927 -1.48263089242119 12.6403978603867 1.5361729619643 -1.4820458813934 12.6292848698588 1.53671650599011 -1.48144208536472 12.6175491493014 1.53728751201724 -1.48080756133458 12.6049341487022 1.53789853804626 -1.48012816230231 12.5911369280469 1.53856430507788 -1.47938806626716 12.5757302373151 1.53930553511309 -1.47856340422799 12.5581391864796 1.5401500511532 -1.47762372318336 12.5372930154894 1.54114996220069 -1.47650613213027 - 0.23809524 10 0.25807507 8 0.28571429 10 -7 0 0 9 10 2 13.029730568879 1.51556611498552 -1.50459785046456 12.980423296537 1.51826033811349 -1.50169357632661 12.9398135146081 1.52048154921899 -1.49927953921195 12.9045599129337 1.52240450031033 -1.49718858911264 12.8730533614372 1.52411537939159 -1.49532328702404 12.8440213100582 1.52568133946597 -1.49361426794287 12.8165760387547 1.5271493625357 -1.49200713586653 12.7898174774837 1.52856586560298 -1.49045236579269 12.7628736662039 1.52997500166991 -1.48890033771897 12.7343610748497 1.53144516073974 -1.48727912364196 - 0.19047619 10 0.23809524 10 -7 0 0 13 14 2 13.2067962572891 1.5060408855331 -1.51479260394878 13.196056816779 1.50660367155983 -1.51419480492039 13.1867213163356 1.50709556758319 -1.51367162889554 13.1778722059153 1.50756377860543 -1.51317366787189 13.1691423855007 1.50802747262746 -1.51268011284845 13.1601684950744 1.50850570565017 -1.51217156782429 13.1507413546267 1.50900961667411 -1.51163404479876 13.1404793741393 1.50955973970024 -1.51104868977096 13.1291712936021 1.5101673567291 -1.5103990407401 13.1162438229881 1.51086401976219 -1.50965511570477 13.1012543922762 1.51167347780063 -1.50878760566356 13.0831247614151 1.51265573084729 -1.5077335226135 13.0605663703436 1.5138811979055 -1.50641412655083 13.029730568879 1.51556611498552 -1.50459785046456 - 0.14285714 14 0.19047619 14 -7 0 0 7 14 3 13.6011781260213 1.48824087468765 -1.53339961183257 13.5798940150103 1.48898567072302 -1.5326360677963 13.5588446340105 1.4897557187596 -1.53184360475866 13.5378626030139 1.49055520279757 -1.5310190727195 13.5167994820135 1.49138857883715 -1.53015823067861 13.4955146810025 1.49226075687858 -1.52925590063575 13.4738664799743 1.49317735692212 -1.52830587059063 13.4216938974962 1.49545550503032 -1.52593912847822 13.3907415360261 1.49685965509702 -1.52447628940873 13.3584732644934 1.49837413616895 -1.52289355433356 13.3244875428792 1.50001904724708 -1.52116739725157 13.2883073411607 1.50182016433263 -1.51926944216142 13.2493512393104 1.50381084942718 -1.5171613790613 13.2067962572891 1.5060408855331 -1.51479260394878 - 0.0952381 8 0.115465374 6 0.14285714 8 -7 0 0 10 11 2 13.1505413946172 1.50901974167459 -1.51162079679813 13.3141227023869 1.50027129725906 -1.52095808824163 13.4536125290123 1.49353754593922 -1.52799715857597 13.57693951487 1.48834884969277 -1.5333475748301 13.6886526701761 1.48445606650788 -1.53730917201826 13.7921738550931 1.48170494237721 -1.54007034514941 13.8901284297457 1.48002003729718 -1.54171981922776 13.9848544842449 1.47937997626678 -1.54228786725474 14.0786412886995 1.47983049428817 -1.541724938228 14.1739947532286 1.4814879153669 -1.53990398514151 14.2745160980031 1.48462394451585 -1.53651035798032 - 0.875 11 1 11 -7 0 0 12 13 2 14.2745160980031 1.48462394451585 -1.53651035798032 14.3757877128132 1.4876546686598 -1.53322643382434 14.4666377971284 1.49119504582796 -1.52940377264278 14.5529301112271 1.49524710202042 -1.52502600643485 14.6378334352597 1.49985683323937 -1.52003056219757 14.7239976893523 1.50509451248815 -1.5143298089268 14.8137552636156 1.51106512977174 -1.50778606061599 14.9094918081628 1.51790425909658 -1.50023751625746 15.0141639431345 1.52581004947209 -1.49141527883842 15.1311833786926 1.53504324991064 -1.48099649834356 15.2658554050892 1.54600745843141 -1.46841387274591 15.4254657126703 1.55929194806239 -1.45287215000772 15.6256432021782 1.57605418785855 -1.43254562104226 - 0 13 0.33333333 13 -7 0 0 12 13 2 15.2409906139082 1.54403293233763 -1.4704537228428 15.2001328519675 1.54071130117986 -1.47429363302519 15.1624846501793 1.53768636603618 -1.47777308919045 15.1274487085152 1.534903560904 -1.48095808034173 15.0945445969524 1.53232132478135 -1.48390033548148 15.0634182954739 1.52990616466664 -1.48663962661159 15.0336982040623 1.52763066555856 -1.48921192473377 15.0051441927061 1.52547107245598 -1.49164393084928 14.9774548913909 1.52340685035794 -1.49396245495941 14.9504059801061 1.52141909826353 -1.49618885606515 14.9237399488396 1.51949014317191 -1.49834434116753 14.8972047875792 1.51760250008225 -1.50044853026748 14.8705154663116 1.51573790399368 -1.50252118936592 - 0.66666667 13 0.83333333 13 -7 0 0 5 6 2 15.3885468509167 1.55619168391514 -1.45627137516918 15.3453959788672 1.55259813374445 -1.46050067737006 15.3090442871406 1.54959636460187 -1.46401048653676 15.279514945738 1.54717332848679 -1.46682263367033 15.2568270146604 1.54532039339878 -1.46896538077211 15.2409906139082 1.54403293233763 -1.4704537228428 - 0.5 6 0.66666667 6 -7 0 0 13 14 2 15.7556448283529 1.58688135837282 -1.4193056554134 15.7298998971301 1.58475305927173 -1.42193022853806 15.7062021860045 1.5827882251784 -1.42434651565283 15.6835612649292 1.58090510008896 -1.42665424476244 15.6613435538739 1.57905151100092 -1.42891766386994 15.6390223628137 1.57718467291225 -1.43118906897783 15.6161536717275 1.57526719582117 -1.43351416708827 15.5922556805924 1.57326081272588 -1.43593882020343 15.5668529893858 1.57112537462445 -1.43851152432563 15.5393496180795 1.56881256651459 -1.44128867845754 15.5090191866388 1.56626359639353 -1.44433990760246 15.4748805250173 1.56339833525743 -1.44775633276473 15.4355348331485 1.560104779101 -1.45166598995043 15.3885468509167 1.55619168391514 -1.45627137516918 - 0.33333333 14 0.5 14 -7 0 0 8 16 3 16.4124981395518 1.63647381372833 -1.35562464238871 16.3704973375569 1.63373339659817 -1.35929253056293 16.3286095955673 1.63092208146464 -1.36303756774081 16.2866340735736 1.62802959132725 -1.36686931292281 16.2443868415669 1.62504548818552 -1.37079866510944 16.2016816095385 1.62195881303891 -1.37483775830129 16.1583333974796 1.61875781688687 -1.37899984149897 16.1141476353809 1.61542963672879 -1.38329938170319 16.0328957815216 1.60919677343274 -1.39129776708309 15.9962124497793 1.60634388529724 -1.39494061625612 15.9587587880003 1.60339392815712 -1.39868839643413 15.9204230461795 1.60033899401202 -1.40254939261752 15.8810822643109 1.59717042986152 -1.4065324168067 15.8406070923884 1.59387865970517 -1.41064652300211 15.798849100405 1.59045299954246 -1.4149011862042 15.7556448283529 1.58688135837282 -1.4193056554134 - 0.16666667 9 0.259447893 7 0.33333333 9 -7 0 0 5 10 3 17.2459916391406 1.67360538349199 -1.3040721009401 17.1335462037997 1.67137476238604 -1.30733039309486 17.0192550783712 1.66801763822658 -1.31216887232467 16.9024750128244 1.66354900201433 -1.31851824562625 16.7825416271279 1.65796314274902 -1.32634457999798 16.6107263889671 1.64862871230566 -1.3391814886077 16.562172776661 1.64585138817374 -1.34297922378809 16.5129843043246 1.64290117403361 -1.3469880629785 16.4631107819558 1.63977612488518 -1.35120469117878 16.4124981395518 1.63647381372833 -1.35562464238871 - 0 6 0.120137747 4 0.16666667 6 -7 1 0 1 2 2 17.2459916391406 1.67360539449199 -1.3040720999401 0.51545453 20.1549001573063 1.67227319742871 -1.30306890389245 0.5162891 - 0 2 0.22601628 2 -7 0 0 5 10 3 16.4124981595518 -1.63647514272839 -1.3556244743887 16.4631108119558 -1.63977746188525 -1.35120452117877 16.5129843443246 -1.64290252003368 -1.34698789097849 16.562172816661 -1.64585274217381 -1.34297905078808 16.6107264389671 -1.64863007430572 -1.3391813146077 16.7825416771279 -1.65796452974909 -1.32634440299798 16.9024750428244 -1.6635504060144 -1.31851806762624 17.0192550983712 -1.66801905822665 -1.31216869232467 17.1335462037997 -1.67137619738611 -1.30733021109485 17.2459916291406 -1.67360683149206 -1.30407191894009 - 0.83333333 6 0.879862261 4 1 6 -7 0 0 8 16 3 15.7556449483529 -1.58688263737288 -1.41930548641339 15.798849220405 -1.59045428254252 -1.41490101720419 15.8406072123884 -1.59387994570523 -1.4106463530021 15.8810823843109 -1.59717171986158 -1.40653224680669 15.9204231661795 -1.60034028701208 -1.40254922161751 15.9587589080003 -1.60339522315718 -1.39868822543412 15.9962125697793 -1.6063451842973 -1.39494044425611 16.0328959015217 -1.6091980754328 -1.39129759508309 16.1141477353809 -1.61543094472885 -1.38329920970318 16.1583334974796 -1.61875912788693 -1.37899967049897 16.2016816895386 -1.62196012603897 -1.37483758830128 16.2443869115669 -1.62504680518558 -1.37079849610943 16.2866341235736 -1.62803091132732 -1.3668691439228 16.3286096355673 -1.6309234034647 -1.3630373987408 16.3704973775569 -1.63373472159823 -1.35929236256292 16.4124981595518 -1.63647514272839 -1.3556244743887 - 0.66666667 9 0.74055212 7 0.83333333 9 -7 0 0 13 14 2 15.3885470009167 -1.55619291391519 -1.45627120916917 15.4355349431485 -1.56010601310106 -1.45166582695042 15.4748806250174 -1.56339957225749 -1.44775616976472 15.5090192866389 -1.56626483739358 -1.44433974460245 15.5393497180795 -1.56881381251465 -1.44128851445753 15.5668530893858 -1.57112662362451 -1.43851136032562 15.5922557905924 -1.57326206572593 -1.43593865520342 15.6161537817275 -1.57526845282123 -1.43351400108826 15.6390224728137 -1.57718593391231 -1.43118890197782 15.6613436738739 -1.57905277500098 -1.42891749586994 15.6835613949292 -1.58090636808902 -1.42665407676243 15.7062023060045 -1.58278949717846 -1.42434634565282 15.7299000271301 -1.58475433527179 -1.42193005853805 15.7556449483529 -1.58688263737288 -1.41930548641339 - 0.5 14 0.66666667 14 -7 0 0 5 6 2 15.2409907739082 -1.54403413833768 -1.47045355884279 15.2568271446604 -1.54532159939883 -1.4689652187721 15.279515065738 -1.54717453748684 -1.46682247167033 15.3090443971406 -1.54959757860193 -1.46401032553676 15.3453961088672 -1.55259935574451 -1.46050051437005 15.3885470009167 -1.55619291391519 -1.45627120916917 - 0.33333333 6 0.5 6 -7 0 0 12 13 2 14.8705156463116 -1.51573906099374 -1.50252102936592 14.8972049775792 -1.5176036620823 -1.50044836926747 14.9237401288396 -1.51949130917196 -1.49834417916753 14.9504061601062 -1.52142026826358 -1.49618869406515 14.9774550713909 -1.523408024358 -1.4939622929594 15.0051443727061 -1.52547225045604 -1.49164376884927 15.0336983840623 -1.52763184755862 -1.48921176273376 15.063418465474 -1.5299073496667 -1.48663946461158 15.0945447669524 -1.53232251378141 -1.48390017348147 15.1274488785152 -1.53490475390406 -1.48095791734172 15.1624848101794 -1.53768756303624 -1.47777292519044 15.2001330119675 -1.54071250317991 -1.47429346902518 15.2409907739082 -1.54403413833768 -1.47045355884279 - 0.16666667 13 0.33333333 13 -7 0 0 12 13 2 15.6256433321782 -1.57605547485861 -1.43254541804225 15.4254658526703 -1.55929320606245 -1.45287195700771 15.2658555550892 -1.54600869243147 -1.4684136877459 15.1311835286926 -1.5350444659107 -1.48099631834355 15.0141640931345 -1.52581124947214 -1.49141510383841 14.9094919581628 -1.51790544409664 -1.50023734325745 14.8137554236156 -1.51106630377179 -1.50778588961598 14.7239978493523 -1.50509567648821 -1.5143296379268 14.6378336052598 -1.49985798923943 -1.52003039019757 14.5529302912271 -1.49524825102048 -1.52502583143484 14.4666379971284 -1.49119618982802 -1.52940359364277 14.3757879328133 -1.48765580765986 -1.53322624782434 14.2745163580031 -1.4846250815159 -1.53651016198031 - 0.66666667 13 1 13 -7 0 0 3 4 2 14.2235895455842 -1.48319931344818 -1.53805698605378 14.2406525763947 -1.4836229264683 -1.53759586403188 14.257628397201 -1.48409819549088 -1.53708032600739 14.2745163580031 -1.4846250615159 -1.53651018298031 - 0.95238095 4 1 4 -7 0 0 7 8 2 13.6299348273871 -1.48726313564121 -1.53440132188015 13.7265329319753 -1.48406927948951 -1.53766545503519 13.8169123162681 -1.48183791138352 -1.53991370014197 13.9027079103432 -1.48046879631849 -1.54124504320521 13.9851801242604 -1.47991494329218 -1.54172806922815 14.0654404080725 -1.48016389830401 -1.54138427321182 14.1445352418293 -1.48123668735496 -1.54019339915526 14.2235895455842 -1.48319931344818 -1.53805698605378 - 0.9047619 8 0.95238095 8 -7 0 0 11 12 2 13.957822802961 -1.48071066232998 -1.54093196319034 13.8797529092529 -1.48111023334896 -1.54059554517436 13.8092175859026 -1.48205305639374 -1.53968428813108 13.7416248026921 -1.48344676645994 -1.53829802706523 13.6744988895038 -1.48527834154693 -1.53645037897747 13.6055975562312 -1.48756495465554 -1.53412115986684 13.5330363127847 -1.49035338978798 -1.53126024973096 13.4544183890506 -1.49372971794835 -1.52776867056511 13.3672150049086 -1.49781189514224 -1.52351831836323 13.267407420168 -1.50280594137945 -1.51826950511393 13.149673724576 -1.50900751267401 -1.51168768880131 13.0022709775747 -1.51706796305686 -1.50297810438763 - 0.125 12 0.25 12 -7 0 0 7 14 3 13.2369364587207 -1.50447268745861 -1.51645684802783 13.2727282604207 -1.50262278737075 -1.51841678912092 13.3062503620129 -1.50093087329039 -1.52020462820584 13.3379131235169 -1.49937201721635 -1.52184579728379 13.3680362449476 -1.49792773914775 -1.52336081835575 13.3968897263181 -1.49658328008389 -1.5247660764225 13.4247077576394 -1.4953266720242 -1.52607542248469 13.4786048001993 -1.49297353091243 -1.52852034560082 13.5046898314383 -1.49187642586032 -1.52965654965478 13.5301726626487 -1.49084678081142 -1.5307201437053 13.5552468938396 -1.48987671076534 -1.5317201107528 13.5800994450201 -1.48895967472179 -1.53266362079761 13.6049237961992 -1.48809008468048 -1.53355617784001 13.6299348273871 -1.48726313564121 -1.53440132188015 - 0.85714286 8 0.880996175 6 0.9047619 8 -7 0 0 11 12 2 13.0409571994122 -1.51495405295645 -1.50525837749593 13.0747213010159 -1.51311090086891 -1.50724365359023 13.1006728122485 -1.51170388180208 -1.5087568036621 13.1221326632678 -1.51054516274704 -1.50999835472107 13.140410004136 -1.50956284070038 -1.51104808677093 13.1565285949015 -1.50869975465939 -1.51196852981465 13.1710500555913 -1.50792588662263 -1.51279191585376 13.1845323262317 -1.50721056758866 -1.51355234988988 13.1973548968407 -1.50653387755652 -1.514270868924 13.2099796774403 -1.50587153152506 -1.51497380595739 13.2228697480526 -1.50519972949315 -1.51568656099125 13.2369364587207 -1.50447268745861 -1.51645684802783 - 0.80952381 12 0.85714286 12 -7 0 0 10 11 2 12.7665140163768 -1.5297769746605 -1.48911799672931 12.7904641375144 -1.52852508660104 -1.49049556879474 12.8127913785749 -1.52734618954505 -1.49179158885629 12.834668149614 -1.52618072148969 -1.49306931391698 12.856815860666 -1.52499162943321 -1.49436947397874 12.8798950817622 -1.52374440437397 -1.49573035904338 12.904588612935 -1.52240308431026 -1.49719051711273 12.9316585342208 -1.52092687024015 -1.498796284189 12.9621946656712 -1.51925786016087 -1.50060794627505 12.9976421573548 -1.51731857906876 -1.50271152137496 13.0409571994122 -1.51495405295645 -1.50525837749593 - 0.76190476 11 0.80952381 11 -7 0 0 8 16 3 12.5506044261217 -1.54051285417043 -1.47721902516414 12.5695661270223 -1.53960372712725 -1.47823415721235 12.5861097078081 -1.53880869308949 -1.47911862025436 12.6009576185133 -1.53809276805548 -1.47991450229216 12.6145343191582 -1.53743546602426 -1.48064461532684 12.627162259758 -1.53682117599509 -1.48132681735925 12.6390853203243 -1.53623803196739 -1.48197413938999 12.6505125808671 -1.53567577394068 -1.48259812641963 12.6741369319892 -1.53450571288511 -1.4838966074813 12.6862536825647 -1.53390091085638 -1.48456777051318 12.6982554631347 -1.5332970328277 -1.48523706754497 12.710388873711 -1.53268157579847 -1.48591798557731 12.7229077043057 -1.53204146176806 -1.48662477561088 12.7361257049335 -1.53136031173571 -1.48737551764654 12.750431825613 -1.53061760470043 -1.48819297368537 12.7665140163768 -1.5297769746605 -1.48911799672931 - 0.71428571 9 0.736704105 7 0.76190476 9 -7 0 0 4 5 2 12.5015211137904 -1.54287086928243 -1.47458101303884 12.5137909743731 -1.54227977025435 -1.47524436507034 12.526061494956 -1.54168970622633 -1.47590433910169 12.5383326255388 -1.54110071919835 -1.47656212313293 12.5506044261217 -1.54051285417043 -1.47721902516414 - 0.66666667 5 0.71428571 5 -7 0 0 10 11 2 12.2568199221677 -1.55567286189049 -1.4600700223496 12.2788344832133 -1.55437664582893 -1.46155669342021 12.2991488041782 -1.55321534777377 -1.46287991548306 12.3188956451161 -1.55211620972156 -1.46413171854252 12.3387526560593 -1.55103864967038 -1.46535989960086 12.3593292770366 -1.54994749361855 -1.46660200265985 12.3812471380777 -1.54881030556454 -1.46789681472135 12.4051883192148 -1.54759200250667 -1.46927740478693 12.4321295404944 -1.54624615644275 -1.47079797185915 12.4633551819776 -1.54471207636988 -1.47251722894081 12.5015211137904 -1.54287086928243 -1.47458101303884 - 0.61904762 11 0.66666667 11 -7 0 0 13 14 2 12.5242478048698 -1.54177777523051 -1.47580487909697 12.4115901295189 -1.54718985348757 -1.46974956080935 12.3298571156368 -1.55136235668575 -1.4650217525848 12.2630834724652 -1.55499541385832 -1.46087903738803 12.2067551497897 -1.55829177501488 -1.45709255320818 12.156399547398 -1.56146612416566 -1.45342631203404 12.1106448652247 -1.56459296831417 -1.44979497286156 12.0667424031395 -1.56783828746832 -1.44600004468131 12.0240680011126 -1.57125433763057 -1.44199075549088 11.9802657890321 -1.57503493681014 -1.43751431427826 11.9342868768482 -1.5792932050124 -1.43245108503777 11.8830730244157 -1.58435061525261 -1.42637375374911 11.8236605115937 -1.5905549415473 -1.41886209539233 11.7460295679064 -1.59904775895069 -1.40836310489365 - 0.375 14 0.5 14 -7 0 0 12 13 2 11.7578452284677 -1.59775592088933 -1.40995819996942 11.7763185993451 -1.59573370179328 -1.4124526730879 11.7902231600055 -1.59421806772129 -1.41431969417658 11.8016349405476 -1.59297868266242 -1.41583743124867 11.8112976910065 -1.5919339296128 -1.41711336430927 11.8198222114114 -1.59101688456924 -1.41823162436238 11.8275042817763 -1.5901949305302 -1.41922764940969 11.8346709321167 -1.58943370749405 -1.4201562004538 11.8415270324423 -1.5887106054597 -1.42103154149537 11.8483051727643 -1.58800208642605 -1.42189358253632 11.8552772030954 -1.58728030139177 -1.42277017257795 11.8627587234508 -1.58651384135536 -1.42370183462221 11.8714941938657 -1.58562980031337 -1.424771169673 - 0.52380952 13 0.57142857 13 -7 0 0 10 11 2 11.6440345330619 -1.60992547746735 -1.39479924724941 11.6539177435314 -1.60891837741952 -1.39606559330955 11.6630512439652 -1.6079747923747 -1.39725135836588 11.6719787543892 -1.60704159333038 -1.39842083442142 11.6810162748185 -1.60608697928503 -1.3996140364781 11.6904539452667 -1.60508117123726 -1.40086907053771 11.7005933657483 -1.60399220418554 -1.40222465960209 11.711766096279 -1.60278458912818 -1.4037280186735 11.7244698568824 -1.60140419706261 -1.40544299075496 11.7393535075893 -1.59978013998548 -1.40746125185082 11.7578452284677 -1.59775592088933 -1.40995819996942 - 0.47619048 11 0.52380952 11 -7 0 0 9 18 3 11.5677496294386 -1.61731962381856 -1.38544842180527 11.5761810998391 -1.61652629778088 -1.3864575308532 11.5830037001631 -1.61588304875032 -1.38727142189185 11.5888217404395 -1.6153330717242 -1.38796789292493 11.5939091706811 -1.61485063370129 -1.38857844895393 11.5984736208979 -1.61441617568065 -1.38912884898008 11.6026452310961 -1.61401739366171 -1.38963389700407 11.6065357012808 -1.61364365864396 -1.39010730002655 11.6102329914564 -1.61328650862699 -1.39055954704803 11.6169351217748 -1.61263504859605 -1.3913842490872 11.6199668019188 -1.61233868158197 -1.39175933410502 11.6229717920615 -1.61204320056794 -1.39213296012276 11.6260031522055 -1.6117433345537 -1.39251166014075 11.6291146623533 -1.61143367653899 -1.3929021701593 11.632371552508 -1.6111075875235 -1.39331283617881 11.6358553426734 -1.61075668850683 -1.39375423519977 11.6396763828549 -1.61036957048845 -1.39424083322288 11.6440345330619 -1.60992547746735 -1.39479924724941 - 0.42857143 10 0.454070987 8 0.47619048 10 -7 0 0 10 11 2 11.4919541158385 -1.6247715081725 -1.37590627535204 11.4984897561489 -1.62407746213954 -1.37680102239454 11.504491846434 -1.62345320610989 -1.37760305843263 11.5103516167123 -1.62285458108145 -1.37837284646919 11.5162869469943 -1.62225817205312 -1.37914021950564 11.5224991272893 -1.6216428700239 -1.37993145554322 11.5291987976075 -1.62098791599279 -1.38077360558322 11.5366147279598 -1.62027095395874 -1.38169169462683 11.545104248363 -1.61945842792014 -1.38273024767616 11.5551269288391 -1.61850731187497 -1.38393768973351 11.5677496294386 -1.61731962381856 -1.38544842180527 - 0.38095238 11 0.42857143 11 -7 0 0 11 22 3 11.3639594397591 -1.6423238890062 -1.35290319325945 11.3713320201093 -1.64099408794303 -1.35467502434361 11.3787196404602 -1.6397134018822 -1.35637546342437 11.3861519708132 -1.63847499082338 -1.35801524550226 11.3936578211697 -1.63727277676628 -1.3596035235777 11.401265671531 -1.63610128571064 -1.36114816465107 11.4090042018986 -1.63495550465622 -1.36265603472269 11.4169029322738 -1.63383075560279 -1.36413326279285 11.424992832658 -1.63272259055016 -1.36558549286183 11.4333069730529 -1.63162669749811 -1.36701812192987 11.4418812934602 -1.63053882144643 -1.36843651599724 11.4542319040468 -1.62902998137477 -1.37039850209043 11.4577544942141 -1.62860583135462 -1.3709493851166 11.4613256543837 -1.62818200333449 -1.37149991114275 11.4649468645557 -1.62775822531436 -1.37204698416873 11.4686230647303 -1.62733427929423 -1.37259931019497 11.4723534749075 -1.62690984227407 -1.37314499322088 11.4761443350876 -1.62648471325387 -1.37369675724709 11.4799960452705 -1.62605857923363 -1.37424598827318 11.4839129754566 -1.62563119121333 -1.37479781929939 11.4878978456458 -1.62520226219296 -1.37535095932566 11.4919541158385 -1.6247715081725 -1.37590627535204 - 0.33333333 12 0.367547965 10 0.38095238 12 -7 0 0 13 26 3 11.3046116869402 -1.65560230163689 -1.33500039040911 11.3067215270404 -1.65501189560884 -1.33580612144738 11.3087643171375 -1.6544487825821 -1.33657327848382 11.3107502672318 -1.65390964955649 -1.33730680951866 11.3126884073238 -1.65339161453188 -1.33801096455211 11.314586857414 -1.65289214950816 -1.33868941558433 11.3164529775026 -1.65240901748521 -1.33934535761549 11.3182935475901 -1.65194021546295 -1.33998160164571 11.3201149076766 -1.65148392444127 -1.34060064367511 11.3219231077625 -1.65103846942012 -1.3412047287038 11.323723977848 -1.6506022873994 -1.34179589073188 11.3255232379335 -1.65017390337905 -1.34237598675944 11.3273265580191 -1.64975191335901 -1.34294670678654 11.3314356582143 -1.64880696931413 -1.34422239484713 11.3337473383241 -1.64828705828943 -1.34492260488039 11.3360859984352 -1.64777252926499 -1.34561471391327 11.3384637785481 -1.64726072024068 -1.34630064194585 11.3408904686634 -1.64674929421639 -1.34699065597862 11.3433841587818 -1.64623515119197 -1.34767150701096 11.3459479389036 -1.64571669716734 -1.34837885904456 11.3486122890301 -1.64518962814231 -1.34906868407732 11.3513756691614 -1.64465276711681 -1.34980047011208 11.354273389299 -1.64410122509061 -1.35052832914665 11.3573161694435 -1.6435324200636 -1.35129113018288 11.3605345595964 -1.64294164303554 -1.35208010022036 11.3639594397591 -1.6423238890062 -1.35290319325945 - 0.28571429 14 0.306725198 12 0.33333333 14 -7 0 0 13 14 2 11.2810043058189 -1.66290642198381 -1.32496578293249 11.2824776358889 -1.66238670195913 -1.32568446296663 11.2840056459615 -1.66186065993414 -1.3264122620012 11.2855888860367 -1.66132811990885 -1.3271492540362 11.2872284261146 -1.66078884688323 -1.32789264407151 11.2889232961951 -1.6602428228573 -1.32865099910753 11.2906784562784 -1.65968942483101 -1.32940222114321 11.2924862863643 -1.65912927580441 -1.33018841618056 11.2943599164533 -1.65856096477741 -1.33094761121662 11.2962855565447 -1.65798569875009 -1.33175245025484 11.2982770466393 -1.65740200172237 -1.33253838929217 11.3003261867367 -1.65681052869427 -1.33335037733074 11.302437596837 -1.65621068966578 -1.33417011836968 11.3046116869402 -1.65560230163689 -1.33500039040911 - 0.23809524 14 0.28571429 14 -7 0 0 9 26 4 11.2480894142556 -1.67853118172595 -1.3030426428912 11.2493581043158 -1.67771062868698 -1.30421052994667 11.2506435143769 -1.67690622664877 -1.30535253100092 11.2519457044387 -1.6761173366113 -1.30647003905399 11.2532674145015 -1.67534329957453 -1.3075670951061 11.254603864565 -1.67458365953845 -1.30863952515704 11.2559600246294 -1.67383776650302 -1.30969334120709 11.2573327146946 -1.67310518246823 -1.31072598825614 11.2587237047607 -1.67238538543404 -1.31173971330429 11.2611864748776 -1.67114886237531 -1.3134789653869 11.2622503149282 -1.67062670035051 -1.31421273642175 11.2633243949792 -1.67011123832602 -1.31493641045613 11.2644088350307 -1.66960228830185 -1.31565025749003 11.2655037650827 -1.66909966827798 -1.31635452552348 11.2666093451352 -1.6686032012544 -1.31704944555649 11.2677257251882 -1.6681127182311 -1.31773522958906 11.2688530852418 -1.66762805520808 -1.31841206862121 11.2711655453516 -1.66665513616187 -1.31976901068566 11.2723513854079 -1.66616723713869 -1.32044860771794 11.2735489254648 -1.6656851861158 -1.32111871474977 11.2747596455223 -1.66520879709317 -1.32178127678124 11.2759809355803 -1.66473794607081 -1.32243214281215 11.277216685639 -1.66427242204869 -1.3230772668428 11.2784650456983 -1.66381210102683 -1.32371349987301 11.2797275057583 -1.66335681600521 -1.32434296590291 11.2810043058189 -1.66290642198381 -1.32496578293249 - 0.19047619 10 0.209380743 8 0.223517894 8 0.23809524 10 -7 0 0 8 9 2 11.2578643547198 -1.67284334945579 -1.31109645527374 11.2426415339968 -1.68084097483566 -1.29983127373867 11.2301680834043 -1.68991952226687 -1.2868544711223 11.2210538729714 -1.69993431574254 -1.27227502442982 11.215801932722 -1.71064508825128 -1.25633205767257 11.2146886526691 -1.72171682477716 -1.23941424086901 11.217613312808 -1.73280012430359 -1.22201125804242 11.2242121531214 -1.74361043981705 -1.20458565121475 11.2339737335851 -1.75393665630752 -1.18752890240459 - 0.875 9 1 9 -7 1 0 1 2 2 7.21279194058922 1.75566519138962 -1.18857467445427 0.52168057 11.2339734135851 1.75393602830749 -1.1875289974046 0.52280677 - 0.69078275 2 1 2 -7 0 0 1 2 2 7.21279194058922 1.34821630603684 1.41444156518237 20.1549001573063 1.36866520500811 1.41444156718237 - 0 2 1 2 -7 0 0 8 9 2 17.2459916091406 1.67360536749199 -1.3040721329401 16.8938187024133 1.74227214975348 -1.2075490303555 16.5200106346584 1.79705144235536 -1.11704135405661 16.1273440860077 1.83925517335993 -1.03586715020105 15.71937003663 1.8707868238576 -0.966689137102268 15.3002902667248 1.89368036494499 -0.911214093493345 14.874650746508 1.90954031569829 -0.870310131872511 14.4469575261936 1.91941807216746 -0.84420638245665 14.0214146759814 1.92383994537749 -0.832597813744272 - 0 9 1 9 -7 0 0 5 18 5 14.0214147359814 1.92383995137749 -0.832597823147273 14.1672179729067 1.92232488930553 -0.83657525203819 14.311736019771 1.92013380720146 -0.842361039431 14.4545403865538 1.91725810906487 -0.849896857586933 14.5952119732353 1.91369481989562 -0.859083371296269 14.7860901723016 1.90782580961686 -0.873874419382806 14.8384486847885 1.90610491153512 -0.878181430370378 14.8904223072571 1.90428436244865 -0.882702678907126 14.9419926797065 1.90236440335746 -0.887430356702678 15.0591089152693 1.89774151213788 -0.898708625390367 15.1243755783693 1.89497288500638 -0.905390581275743 15.1888937214337 1.8920405388671 -0.912383020540866 15.2526183644605 1.88894582272011 -0.919665823827781 15.3334650083005 1.88476087452133 -0.929373943238891 15.3513541191502 1.88381823447656 -0.931552193977353 15.3691744899966 1.88286252143117 -0.933751893171833 15.3869254808397 1.88189376538515 -0.935972551859309 15.4046064516795 1.88091199733852 -0.938213681074757 - 0 6 0.165477907 4 0.228630266 4 0.31007727 4 0.33333333 6 -7 0 0 7 8 2 14.0214146759814 1.92383994537749 -0.832597813744272 13.6976186006019 1.92853808760064 -0.820156019786319 13.3738043252216 1.92955905964913 -0.817358932644464 13.0499761198406 1.92718722353648 -0.824271156460777 12.7261325744588 1.92138202926075 -0.840884659578876 12.402266459076 1.91178251080479 -0.867147480227293 12.0783649236915 1.89769507813568 -0.90292828237979 11.7544104083045 1.87810314020511 -0.947904241881033 - 0 8 1 8 -7 0 0 8 9 2 11.7217974167555 1.87508298106166 -0.954787928982991 11.7281512470573 1.87568982509048 -0.953411785743628 11.7332951873016 1.87617674311361 -0.952294839481576 11.7376899475103 1.87658987813323 -0.951353041119843 11.7415475776936 1.87694897715029 -0.950534297015954 11.7450330378591 1.87726984016553 -0.949805499599338 11.7482632380125 1.87756276817944 -0.949139275329694 11.7513445581589 1.87783704919247 -0.948513904893991 11.7544103983045 1.87810315920511 -0.947904211473032 - 0.9 9 1 9 -7 0 0 9 18 3 11.6768490646205 1.87097646086661 -0.964041737011523 11.6813374948337 1.87136890588525 -0.963162957851784 11.6847028549936 1.87166430389928 -0.962504829434524 11.6875036651266 1.87191093791099 -0.961951949856264 11.6898950952402 1.87212256092105 -0.961478301719767 11.6920365753419 1.87231294993009 -0.961050208012433 11.6939902254347 1.87248770093839 -0.960657723726791 11.6958319755222 1.87265345894626 -0.960284765082077 11.6976103356067 1.87281460795392 -0.959921994331846 11.7011935557768 1.87314160996945 -0.95918456173682 11.7029975758625 1.87330744797733 -0.958809905302025 11.7048485559504 1.87347881798546 -0.958422685455633 11.706796746043 1.87366035499409 -0.958012098350131 11.7089201261438 1.87385949900355 -0.957562294416766 11.7112802462559 1.87408195001411 -0.957058310054828 11.714039906387 1.87434344702653 -0.956466662586727 11.7173534665444 1.8746585460415 -0.955750421560707 11.7217974167555 1.87508298106166 -0.954787928982991 - 0.8 10 0.849357845 8 0.9 10 -7 0 0 4 5 2 11.710650046226 1.87402202601127 -0.957189850571076 11.7063992160241 1.87362026999218 -0.958097878172205 11.6977354756126 1.87283978595511 -0.959860682670934 11.6846586649915 1.87167794689993 -0.96247757469723 11.6671681741607 1.87012470482615 -0.965945782344961 - 0.2 5 0.4 5 -7 0 0 10 20 3 11.6088043513886 1.86415020054238 -0.979154379089335 11.6154770517055 1.86490871657841 -0.97749375378246 11.6204952619439 1.86547106860512 -0.976254606212603 11.6246613521418 1.86593324862707 -0.975242223499518 11.628224442311 1.86632293364558 -0.974385058333805 11.6314133924625 1.86666729266193 -0.973629401466913 11.6343249626008 1.86697646267662 -0.972947248468512 11.6370724427313 1.86726350669025 -0.972312653195371 11.6397243328572 1.86753546270317 -0.971708730031686 11.6423556729822 1.86780019871574 -0.971119123009681 11.6472548032149 1.86828335573869 -0.970042979015567 11.6495041333217 1.86850165574906 -0.969556744519472 11.6518367634325 1.86872452475965 -0.969059895893873 11.6542972735494 1.86895617077065 -0.968543291026336 11.6569459636752 1.86920196778233 -0.967994601994274 11.659847313813 1.86946771979495 -0.967402071096131 11.6630967139673 1.86976173180891 -0.966747433854037 11.666836234145 1.8700961498248 -0.966003430093699 11.6712624843552 1.87048799884341 -0.965135520835475 11.6768490646205 1.87097646086661 -0.964041737011523 - 0.7 11 0.754871106 9 0.8 11 -7 0 0 11 12 2 11.6671681741607 1.87012470482615 -0.965945782344961 11.6588349637649 1.869384676791 -0.967598178118445 11.6481695832583 1.86837904174324 -0.969838763611867 11.6349910426324 1.86707440068127 -0.97273728835354 11.6193418318891 1.86545493260435 -0.976318883917656 11.6018079810563 1.86356641551465 -0.980474669623046 11.5833392901791 1.86148335541571 -0.98501626557876 11.5663588493725 1.85947645732039 -0.989346801042449 11.5516506786739 1.85766745923447 -0.993228694062829 11.5396754881052 1.85612865816138 -0.996513434029846 11.5303492676622 1.85487207710169 -0.999186427819806 11.5234026273322 1.85388100405462 -1.00128891055867 - 0.4 12 0.6 12 -7 0 0 10 20 3 11.4889479756957 1.84863372080539 -1.01233376208327 11.4962541560427 1.84979859886071 -1.00990084796771 11.5022323563267 1.8507330399051 -1.00793516187435 11.5073769865711 1.85152523294273 -1.0062708907953 11.5119320167874 1.85221504597549 -1.0048181637263 11.5160687269839 1.85283093400474 -1.00351901766459 11.5199099171663 1.85339255703142 -1.0023317716082 11.5235480673391 1.85391388405618 -1.00122494555563 11.5270670275063 1.85440771107964 -1.00017333250568 11.5305408876713 1.85488433510227 -0.99915512264732 11.5367377179656 1.85571473714172 -0.997380737282041 11.5394459280942 1.85607112915864 -0.996619051686863 11.5422105482256 1.85642864317562 -0.995857140675674 11.5450731583615 1.85679188719288 -0.995078170809675 11.548072918504 1.85716624221066 -0.994279664980748 11.5512661286557 1.85755741422924 -0.993439414087838 11.5547129188194 1.85797275324897 -0.992549989134592 11.5585026289994 1.85842165027029 -0.991586180537814 11.5627536292013 1.85891700529382 -0.9905226775593 11.567673409435 1.85948026632057 -0.989306851204552 - 0.4 11 0.456633276 9 0.5 11 -7 0 0 10 11 2 11.5234026273322 1.85388100405462 -1.00128891055867 11.4738143649769 1.84680626771859 -1.01629740327153 11.4330275530396 1.83988533138986 -1.0306258179521 11.3983210613912 1.83288208205722 -1.04482383362647 11.3682295299619 1.82560812571173 -1.05927051131265 11.3417048987021 1.8178766633445 -1.07431696902732 11.3180304875776 1.80946917494517 -1.09032314478757 11.2966379365615 1.80012995150158 -1.10769981361292 11.2770853856328 1.78948188199582 -1.12698091952872 11.2589931347735 1.77700944840342 -1.14888336056903 11.2419919239659 1.76167681167515 -1.17463584279221 - 0.6 11 0.8 11 -7 0 0 14 28 3 11.4376549332594 1.8399157263913 -1.0303164099374 11.4398449433635 1.84033079841102 -1.02947113389725 11.4418830134603 1.84071194242912 -1.02869566686042 11.4438265535526 1.84107076044616 -1.0279647128257 11.4457153836423 1.84141517646252 -1.02726161779231 11.4475804337309 1.84175122647849 -1.02657395875964 11.4494480838196 1.84208393049429 -1.02589151872723 11.4513422739095 1.84241772951014 -1.02520534269464 11.4532860240019 1.84275677052625 -1.02450714266148 11.4553027840977 1.84310515354279 -1.02378875862735 11.4574178741981 1.84346718455999 -1.02304160959187 11.4596599743046 1.84384762957806 -1.02225615955456 11.4620628944187 1.84425198959726 -1.02142132751491 11.4646684745425 1.84468691661792 -1.02052350947226 11.4686715247326 1.8453496966494 -1.01915481940725 11.4698519147887 1.84554458165866 -1.01875239238814 11.4710768848469 1.84574619566824 -1.01833527936833 11.4723488649073 1.84595522267816 -1.01790583834793 11.4736762549704 1.84617202068846 -1.01745164532636 11.4750550150358 1.84639789869919 -1.01699395030462 11.4765026251046 1.84663279671035 -1.0164987062811 11.4780139751764 1.84687833672201 -1.01599250425705 11.4795988052517 1.84713527773421 -1.01546467923198 11.481270135331 1.84740433074699 -1.01489783220506 11.4830279154145 1.84768732376043 -1.01431119217719 11.4848868755028 1.84798533277459 -1.01368800014759 11.4868558655964 1.84830015978954 -1.01303042311636 11.4889479756957 1.84863372080539 -1.01233376208327 - 0.3 15 0.371532238 13 0.4 15 -7 0 0 5 14 4 11.3801215705267 1.82684482977047 -1.05645936017912 11.3847705207476 1.8280707098287 -1.05405075806472 11.3891986109579 1.82920665788265 -1.05181086795833 11.3934556511601 1.83027080593319 -1.04970520985832 11.3975817713561 1.83127568698092 -1.04770918376351 11.4064881417791 1.83338763208124 -1.04349831256351 11.4112250020041 1.83447219413275 -1.04132482746027 11.4158896322256 1.83550387418175 -1.0392474613616 11.4205398424465 1.83649638722889 -1.03724116626631 11.4276755027854 1.8379638912986 -1.03427402312538 11.4301237429017 1.83845771732205 -1.03327567607796 11.4325955430191 1.83894644834527 -1.03228661203098 11.4351017931382 1.83943183036832 -1.03130184198421 11.4376549332594 1.8399157263913 -1.0303164099374 - 0.2 6 0.235273769 4 0.277914942 4 0.3 6 -7 0 0 12 24 3 11.2339734135851 1.75393602730749 -1.1875289974046 11.2369856237282 1.75705895445582 -1.18237051615958 11.2400950538758 1.76008308259946 -1.17733619892047 11.2432909140276 1.7630124817386 -1.17242351768713 11.2465637841831 1.76585091887341 -1.16762989045944 11.2499054343418 1.76860188000408 -1.16295272323729 11.2533087445035 1.77126860213074 -1.15838944302054 11.2567674646677 1.77385408725354 -1.15393753280909 11.2602762048344 1.77636112537262 -1.14959455660281 11.2638302350032 1.7787923134881 -1.14535818440159 11.267425465174 1.78115006460008 -1.14122621320533 11.2710583953465 1.78343662470869 -1.13719657601394 11.2783936056949 1.78787153491934 -1.12933813364068 11.2820958958708 1.79001988502138 -1.12550926045882 11.2858297560481 1.79210122712024 -1.12177949128166 11.2895931362269 1.794117441216 -1.11814398610899 11.2933825564069 1.79607045530876 -1.11461023894114 11.2971992565881 1.79796161139859 -1.11115791377717 11.3010373667704 1.79979289848557 -1.1078152026184 11.304901196954 1.80156514956975 -1.10454638046314 11.3087851271384 1.80328015765121 -1.10138230531285 11.312692047324 1.80493872672999 -1.09830045616647 11.3166198775106 1.80654211280614 -1.09531229802454 11.3205692276982 1.80809119887972 -1.09241330088685 - 0 13 0.05 11 0.1 13 -7 0 0 1 2 2 15.178436250937 -6.33367198983326 -0.437746756651854 14.0214149859814 -1.92384089837754 -0.832597738396269 - 0 2 2.49917007 2 -7 0 0 1 2 2 17.2205222879309 -6.33368591083392 -0.716459929370019 17.2459916291406 -1.67360684049206 -1.30407191694009 - 0 2 1.72905437 2 -7 0 0 1 2 2 15.4035701016303 -6.3336158858306 -0.843981276536958 14.2745163580031 -1.4846250625159 -1.53651018298031 - 0.01103422 2 1.98405473 2 -7 0 0 1 2 2 17.2459916391406 1.67360539449199 -1.3040720999401 17.2205222879309 6.33368591083392 -0.716459929370019 - 0 2 1.72904906 2 -7 0 0 3 19 15 17.2205222879309 6.33368591083392 -0.716459929370019 17.1720715056296 6.333687510834 -0.704349721074815 17.0895424517097 6.33368999283412 -0.684412453257846 16.9823821166198 6.33369268283425 -0.660041473020286 16.8419193099482 6.33369571983439 -0.629491992219264 16.7351797248783 6.33369735683447 -0.608187890327373 16.6334954700486 6.33369842683452 -0.589284515399511 16.5906758480148 6.33369882983454 -0.581461927457958 16.5272499150022 6.33369926683456 -0.570329120559178 16.439766290847 6.33369964283458 -0.555618916310481 16.3531875767347 6.33369969183458 -0.541979903582663 16.266494792617 6.33369940883456 -0.529270515738999 16.200386409477 6.33369902683455 -0.520051855971136 16.0924788643517 6.3336981328345 -0.505775628033052 15.9016943952899 6.33369559383438 -0.483264874763849 15.733138927284 6.3336917328342 -0.467985540898119 15.4790280452143 6.33368441883385 -0.449204947796089 15.3287786380779 6.33367883483359 -0.441686339218974 15.178436250937 6.33367198983326 -0.437746756651854 - 5.543e-005 4 0.07264197 1 0.12345255 1 0.15974582 1 0.28146727 2 0.30978555 1 0.34462514 1 0.3749384 1 0.43859614 1 0.47194039 1 0.5022533 1 0.5355975 1 0.63013701 1 0.78146727 2 1.00005543 4 -7 0 0 1 2 2 15.178436250937 6.33367198983326 -0.437746756651854 14.0214147359814 1.92383994737749 -0.832597823546273 - 0.17394647 2 1.82447971 2 -7 0 0 1 2 2 14.2745160980031 1.48462396151585 -1.53651033998032 15.4035701016303 6.3336158858306 -0.843981276536958 - 0.01152171 2 2.07179401 2 -7 0 0 3 13 11 15.4035701016303 6.3336158858306 -0.843981276536958 15.4608449143507 6.33361840283072 -0.842360442489972 15.5787170399493 6.33362166583087 -0.837609274544304 15.7354255173926 6.3336221928309 -0.828150550615039 15.903907215395 6.33362067483083 -0.815831239849903 16.0527312724638 6.33361818483071 -0.803320766485687 16.1955867992491 6.33361615783061 -0.790477797945679 16.2947672539599 6.33361533483057 -0.78138490557379 16.4118575095214 6.33361522083057 -0.770646112303724 16.5923172280927 6.33361748183067 -0.754359070240132 16.8729204314207 6.33363148183134 -0.731594013948849 17.0949563119668 6.33366082183273 -0.719784291197918 17.2205222879309 6.33368591083392 -0.716459929370019 - 6.281e-005 4 0.09442575 1 0.19433944 1 0.25856568 1 0.37257442 1 0.44027042 1 0.49483365 1 0.53663486 1 0.6339335 1 0.79319117 1 1.00006281 4 -7 0 0 1 2 2 15.4035701016303 6.3336158858306 -0.843981276536958 19.4649687145364 16.2690729827395 0.155572182299282 - 3.88e-005 2 8.09360706 2 -7 0 0 3 13 11 19.4649687145364 16.2690729827395 0.155572182299282 19.4899993457253 16.2690743727395 0.156277522982784 19.5415420481734 16.2690760527396 0.158350777271258 19.6100063214253 16.2690758927396 0.162486888947713 19.6836233849219 16.2690743727395 0.167877378613747 19.7486700380114 16.2690722427394 0.173353668313857 19.811126750978 16.2690703027393 0.178975915600899 19.8544829430373 16.2690692527393 0.182955870389937 19.9056394154671 16.2690684627392 0.187655083153138 19.9844783492117 16.2690685827393 0.194779951381551 20.1070847350352 16.2690746827395 0.204729381064123 20.2041447296453 16.2690900027403 0.209871008458338 20.2590217622519 16.2691035827409 0.211302165326314 - 6.281e-005 4 0.09442575 1 0.19433944 1 0.25856568 1 0.37257442 1 0.44027042 1 0.49483365 1 0.53663486 1 0.6339335 1 0.79319117 1 1.00006281 4 -7 0 0 2 4 3 20.2590217622519 16.2691035827409 0.211302165326314 19.4993968861716 13.7852491647642 -0.0206383583502694 17.9801471540111 8.81754032981067 -0.484519405703436 17.2205222879309 6.33368591083392 -0.716459929370019 - 3.88e-005 3 4.04682293 1 8.09360706 3 -7 0 0 1 2 2 19.3665796498631 16.2690975027406 0.333106715941719 19.4649687145364 16.2690729827395 0.155572182299282 - 0 2 1 2 -7 0 0 3 19 15 20.2590217622519 16.2691035827409 0.211302165326314 20.2374981112295 16.2690992927407 0.214927312588499 20.2009077494916 16.2690935727404 0.221373680584685 20.1536237172457 16.2690891627402 0.230168908222436 20.091921974315 16.2690858527401 0.241979363993403 20.0454316421069 16.2690863827401 0.251230397152803 20.0012057000062 16.2690882527402 0.25995733479731 19.9825802591216 16.2690891627402 0.263625185741524 19.9549764878105 16.2690909027403 0.269013800647469 19.9168953460017 16.2690937327405 0.276349123365878 19.8792293042127 16.2690970327406 0.283428997242154 19.8415842424246 16.2691005927408 0.290241914215751 19.8128828410614 16.2691033527409 0.295270698234605 19.7660393488364 16.2691078127411 0.303169240009766 19.6829660748907 16.2691150527415 0.31586349777271 19.6092537513895 16.2691183027416 0.324224538679839 19.4981263761113 16.2691173227416 0.333158931784199 19.4322681729832 16.2691117427413 0.335327173117185 19.3665796498631 16.2690975027406 0.333106715941719 - 5.543e-005 4 0.07264197 1 0.12345255 1 0.15974582 1 0.28146727 2 0.30978555 1 0.34462514 1 0.3749384 1 0.43859614 1 0.47194039 1 0.5022533 1 0.5355975 1 0.63013701 1 0.78146727 2 1.00005543 4 -7 0 0 3 31 29 18.7445785303197 16.2690985127407 0.302431252674713 18.7383657600246 16.2690977327406 0.302444747525354 18.7320197997232 16.2690970127406 0.302121298909991 18.7248254393814 16.2690962727406 0.301366516094141 18.7218629192407 16.2690959727406 0.30103174414824 18.717195029019 16.2690955327405 0.300392184317862 18.7117647287611 16.2690950427405 0.299472912274199 18.7070789985385 16.2690946527405 0.298545220530136 18.7033094483595 16.2690943627405 0.297708798980409 18.701045568252 16.2690941927405 0.297165473694602 18.6973949580786 16.2690939327405 0.296258702231533 18.6925716978495 16.2690936127404 0.294916421617778 18.6862643475499 16.2690932727404 0.29281445876794 18.6819269473439 16.2690930727404 0.291163236809511 18.6782378171686 16.2690929327404 0.28964460350738 18.6744653869895 16.2690928127404 0.287983806278496 18.6687113467162 16.2690926827404 0.285188325765718 18.6637437364802 16.2690926427404 0.282429784694694 18.6587295362421 16.2690926627404 0.279362878199024 18.6552624460774 16.2690927027404 0.277085441310852 18.6520903759267 16.2690927827404 0.274837030944058 18.6505273858525 16.2690928327404 0.273683666759276 18.6486964857655 16.2690928827404 0.272311076414081 18.6468712856788 16.2690929627404 0.270888193566498 18.6434776655176 16.2690931127404 0.26811628979484 18.6404659953746 16.2690932927404 0.26550772764094 18.6373324252257 16.2690935127404 0.262586288212179 18.6325611049991 16.2690938827405 0.257956703852285 18.6258536746805 16.2690945427405 0.250810657642866 18.6202961544166 16.2690953127405 0.243862286492837 18.6177078042936 16.2690957227405 0.240354853816242 - 0.00034374 4 0.12844973 1 0.13092921 1 0.14807888 1 0.18926565 1 0.22666433 1 0.2593107 1 0.28513852 1 0.30371952 1 0.30555395 1 0.35968911 1 0.40366864 1 0.43987085 1 0.45418655 1 0.48522664 1 0.52438856 1 0.58584973 1 0.60243388 1 0.64566678 1 0.67135118 1 0.68258527 1 0.68568331 1 0.7184619 1 0.73014898 1 0.77558629 1 0.79999969 1 0.81719017 1 0.91044076 1 1.00034374 4 -7 0 0 3 13 10 18.7445785303197 16.2690985127407 0.302431252674713 18.7583463509736 16.2690995627407 0.304311725944031 18.7992747729176 16.2691024827409 0.309660445368081 18.8418315149389 16.269104862741 0.314489031607427 18.8877124771182 16.2691069227411 0.319129711877847 18.944911689835 16.2691090927412 0.32446878737144 19.047001814684 16.2691108027413 0.331600704970188 19.1321832887299 16.2691095127412 0.334510369238389 19.1979807318551 16.2691073627411 0.335482974464586 19.2413794739164 16.269105642741 0.335777379528569 19.3039958968906 16.2691021427408 0.3350811617055 19.3473283089487 16.2690990227407 0.333820518075623 19.3665796498631 16.2690975027406 0.333106715941719 - 8.022e-005 4 0.06695952 1 0.19874124 1 0.20615931 1 0.28878375 1 0.47512806 1 0.69874124 2 0.79146093 1 0.90736053 1 1.00008022 4 -7 0 0 3 53 51 18.6177078042936 16.2690957227405 0.240354853816242 18.6193550543719 16.2690947727405 0.238341288930603 18.6216040844787 16.2690935627404 0.235746947277379 18.6254744246625 16.2690916427404 0.231601845800497 18.6282029547921 16.2690903927403 0.22885903458022 18.6307491649131 16.2690893027402 0.226459921546269 18.6338726350614 16.2690880027402 0.22359557769022 18.6380820152614 16.2690863927401 0.220006733239759 18.6429975454948 16.26908476274 0.216279876522742 18.6456606756213 16.26908395274 0.214416388654232 18.6476069757138 16.26908339274 0.213095185531478 18.6487171257665 16.2690830827399 0.212367093306895 18.6505658358543 16.2690825827399 0.211195651491255 18.6518920659173 16.2690822427399 0.210378005372419 18.6580929462118 16.2690807227398 0.206709231938161 18.6661300765936 16.2690791527398 0.202741567749707 18.6741954469766 16.2690780027397 0.199580975239587 18.6770945171143 16.2690776427397 0.198535120109912 18.6847337074772 16.2690766827396 0.195808538100406 18.6927523278581 16.2690759827396 0.193538544022587 18.7010868382539 16.2690755127396 0.191693838764968 18.7018911882921 16.2690754627396 0.191519803576702 18.7095456886557 16.2690750627396 0.189885414169073 18.7194729891272 16.2690748027396 0.188298638523705 18.732057689725 16.2690748227396 0.186999616222005 18.7417047001832 16.2690749727396 0.186282049827922 18.7523150306871 16.2690752927396 0.185823196876128 18.7630570211973 16.2690757327396 0.18560597385581 18.7748173117559 16.2690762427396 0.185485067440068 18.787934472379 16.2690768127396 0.185392925125691 18.7990130629052 16.2690772027397 0.185225269537728 18.8048859131841 16.2690773827397 0.185110024222254 18.8123205735372 16.2690776027397 0.184957193894995 18.8237582740805 16.2690779027397 0.184666807031202 18.8440723350454 16.2690782127397 0.183919672535715 18.8604509858233 16.2690782527397 0.183051998514503 18.8725101763961 16.2690781327397 0.182217963684888 18.9065197980115 16.2690777027397 0.179741542697265 18.9442069198015 16.2690756027396 0.174805820332831 18.9828896316388 16.2690737227395 0.170315723969562 18.9914358320448 16.2690733427395 0.169381817555204 18.9968209923005 16.2690731027395 0.16880633010787 19.0116798130063 16.2690724827394 0.16726097540447 19.0512026348835 16.2690711127394 0.163627565061892 19.0958831370057 16.2690702727393 0.16077116238622 19.1410530091512 16.2690699527393 0.158804688432818 19.1628509001865 16.2690699327393 0.158092576928994 19.1795389409792 16.2690699727393 0.157651292188034 19.1909516415212 16.2690700227393 0.157375936444956 19.2131543025758 16.2690701427393 0.156926655233616 19.3055107069625 16.2690710227394 0.155707695955718 19.3916959010561 16.2690727927395 0.15654399209544 19.4649687145364 16.2690729827395 0.155572182299282 - 5.799e-005 4 0.00911011 1 0.01184943 1 0.01933622 1 0.02215936 1 0.02361054 1 0.03357248 1 0.04070557 1 0.04443321 1 0.04462717 1 0.04873214 1 0.04898016 1 0.05214827 1 0.05409931 1 0.07388539 1 0.08340877 1 0.08435152 1 0.08463293 1 0.11169353 1 0.11313579 1 0.1140504 1 0.1145288 1 0.14009726 1 0.14853784 1 0.15817185 1 0.1736098 1 0.18544934 1 0.19557634 1 0.2145634 1 0.23110051 1 0.23408285 1 0.2349686 1 0.25693061 1 0.27380952 1 0.30553373 1 0.31387299 1 0.31581004 1 0.42402476 1 0.44619464 1 0.45133548 1 0.45393803 1 0.4650376 1 0.50330337 1 0.59196272 1 0.62060496 1 0.6604875 1 0.66781698 1 0.678677 1 0.70020207 1 0.74507885 1 1.00005799 4 -7 0 0 2 3 2 19.3665796498631 16.2690975027406 0.333106715941719 17.2725079504001 11.3013847467869 -0.0523200203650675 15.178436250937 6.33367198983326 -0.437746756651854 - 4.95e-005 3 10.70174454 3 -7 0 0 3 13 10 15.178436250937 6.33367198983326 -0.437746756651854 15.1343853388447 6.33367547583343 -0.436113434594276 15.0352413141356 6.33368261083377 -0.433229486547295 14.891937437329 6.33369061383415 -0.431634620151543 14.7926607126136 6.33369456083433 -0.432310291673636 14.6420810954615 6.33369947183457 -0.434534157059264 14.4471870362045 6.33370243483471 -0.441194527435615 14.2135702951083 6.33369850783452 -0.457514709300782 14.082694108892 6.33369355083429 -0.469730016690978 13.9777072539054 6.33368883283406 -0.480356019745686 13.8803298892803 6.3336833968338 -0.491393000689914 13.786676794832 6.33367670883349 -0.503635333521394 13.7551732833356 6.33367429383337 -0.507938351705776 - 8.022e-005 4 0.09279991 1 0.20869951 1 0.3014192 2 0.52503238 1 0.71137669 1 0.79400113 1 0.8014192 1 0.93320092 1 1.00008022 4 -7 0 0 2 4 3 18.7445785303197 16.2690985127407 0.302431252674713 17.4972272110737 13.7852424547639 0.0998388515820908 15.0025245925816 8.8175303468102 -0.305345950613154 13.7551732833356 6.33367429383337 -0.507938351705776 - 0.00020743 3 23.12299448 1 46.24578153 3 -7 0 0 3 31 29 13.7551732833356 6.33367429383337 -0.507938351705776 13.7410455626646 6.33367991883364 -0.510546119379638 13.7264243219701 6.33368167983372 -0.513962461971906 13.7100939911945 6.33368182383373 -0.517435040326845 13.7033859008759 6.33368177483373 -0.518836209713397 13.6929111303783 6.3336812948337 -0.520861177339577 13.6808298298045 6.33368013383365 -0.523124316637071 13.670439259311 6.33367863683358 -0.525192101125285 13.6620850589142 6.33367711183351 -0.527012448251747 13.6570592186755 6.33367603883346 -0.528220327009118 13.6489469482902 6.33367420383337 -0.530258970305948 13.6380266577715 6.33367133183323 -0.533358766143181 13.6233938770765 6.33366737983304 -0.537981139052732 13.6131846365915 6.33366492383293 -0.541334598022012 13.6044516061767 6.33366316983284 -0.544194393997845 13.5954809957507 6.33366173783278 -0.547113666136503 13.581677365095 6.33366042783271 -0.551700875504384 13.5695549945192 6.33366032683271 -0.556151408125773 13.5570896639272 6.33366098483274 -0.561406864565394 13.5483289035111 6.33366184683278 -0.565530757171268 13.5402414031269 6.33366299283284 -0.569754445801883 13.5362538629375 6.33366364183287 -0.571939274515657 13.5315848127158 6.3336644338329 -0.574549126149618 13.5269394124951 6.33366531983295 -0.577249409807875 13.5183692620881 6.33366709783303 -0.582537830359061 13.5108563417312 6.33366875783311 -0.587629427220899 13.5032698513709 6.33367030283318 -0.593676022478097 13.4919576008336 6.33367232683328 -0.60376210355716 13.4770737501266 6.33367365383334 -0.621468899478187 13.4679253196921 6.3336707248332 -0.640374273226144 13.4648676895469 6.33366791783307 -0.649981567562466 - 0.00034374 4 0.12844973 1 0.13092921 1 0.14807888 1 0.18926565 1 0.22666433 1 0.2593107 1 0.28513852 1 0.30371952 1 0.30555395 1 0.35968911 1 0.40366864 1 0.43987085 1 0.45418655 1 0.48522664 1 0.52438856 1 0.58584973 1 0.60243388 1 0.64566678 1 0.67135118 1 0.68258527 1 0.68568331 1 0.7184619 1 0.73014898 1 0.77558629 1 0.79999969 1 0.81719017 1 0.91044076 1 1.00034374 4 -7 0 0 2 4 3 18.6177078042936 16.2690957227405 0.240354853816242 17.3294977731069 13.7852387747637 0.0177707484740652 14.7530777207336 8.81752486880994 -0.427397462210289 13.4648676895469 6.33366791783307 -0.649981567562466 - 0.00020743 3 23.12299448 1 46.24578153 3 -7 0 0 3 53 51 13.4648676895469 6.33366791783307 -0.649981567562466 13.4632048594679 6.33365203783231 -0.655758151886839 13.4625395894363 6.33363457683149 -0.663726866155333 13.4642965595197 6.33361330583048 -0.676666707629942 13.4670970696528 6.33360328483 -0.685176782364149 13.4709280898347 6.33359839182977 -0.692171616156386 13.4761928800848 6.33359459082959 -0.700207466808068 13.4851501305102 6.33359675482969 -0.709151155032871 13.4974649510952 6.33360553683011 -0.71712713779171 13.5044626414275 6.33361101283037 -0.720782745865342 13.5096263516728 6.33361503683056 -0.723300650344936 13.5125874218134 6.33361727283066 -0.72464628526885 13.5175400520487 6.33362089083084 -0.72674514210854 13.5210826222169 6.33362332083095 -0.728177462686572 13.5374956129965 6.33363319683142 -0.734409631982584 13.5577367939579 6.33363728883162 -0.740154104565432 13.577086204877 6.33363467383149 -0.743894301283082 13.5839447852027 6.33363317883142 -0.745048125467885 13.6019911560599 6.33362912283123 -0.748043828710174 13.620247616927 6.33362107683084 -0.74988112437744 13.6390814078216 6.33361437383053 -0.751687915403259 13.6408978079079 6.3336137358305 -0.751860481171455 13.6581699087282 6.3336075798302 -0.753468392547827 13.6805557997915 6.33360317482999 -0.755817298019394 13.7092528711545 6.33360194282993 -0.759129430186711 13.7314234422076 6.33360257782997 -0.761791091823134 13.7560189733758 6.3336053358301 -0.764865435479157 13.7810930445668 6.33360985783031 -0.768081067161891 13.8086398358752 6.3336158628306 -0.771641069270982 13.8394567973389 6.33362377183097 -0.775631303400508 13.8654663785743 6.33363049783129 -0.778891913335379 13.8792397392285 6.33363390683145 -0.780571489885155 13.8966793600568 6.33363826783166 -0.782694961186014 13.9234305513274 6.33364401883193 -0.785784343612752 13.9706848635719 6.33365075983225 -0.790686414975588 14.0085556253707 6.33365275583235 -0.794067824006196 14.0363677566917 6.33365260583234 -0.796276426911099 14.1147511504147 6.33365110883227 -0.80231423939788 14.2013370145273 6.33363667983159 -0.806759585419022 14.2900875187427 6.33362174083088 -0.810635390793113 14.3096906496738 6.33361857383073 -0.811478385843153 14.3220451802606 6.33361664883063 -0.812014481908616 14.356119191879 6.33361130983038 -0.813459830097267 14.4468917061905 6.33360011282985 -0.817447821036686 14.5499647710862 6.33359627782967 -0.822445993784087 14.6544602060495 6.33359726282971 -0.827596122568705 14.7049538784478 6.33359880382979 -0.830075981796492 14.7436226802845 6.33360034682986 -0.831952494615621 14.7700676815405 6.33360147682991 -0.833230552696326 14.8215221339845 6.33360393383003 -0.835674183472392 15.0354168841439 6.33361504683056 -0.845530307270533 15.2344341335968 6.33362486183102 -0.851195051269594 15.4035701016303 6.3336158858306 -0.843981276536958 - 5.799e-005 4 0.00911011 1 0.01184943 1 0.01933622 1 0.02215936 1 0.02361054 1 0.03357248 1 0.04070557 1 0.04443321 1 0.04462717 1 0.04873214 1 0.04898016 1 0.05214827 1 0.05409931 1 0.07388539 1 0.08340877 1 0.08435152 1 0.08463293 1 0.11169353 1 0.11313579 1 0.1140504 1 0.1145288 1 0.14009726 1 0.14853784 1 0.15817185 1 0.1736098 1 0.18544934 1 0.19557634 1 0.2145634 1 0.23110051 1 0.23408285 1 0.2349686 1 0.25693061 1 0.27380952 1 0.30553373 1 0.31387299 1 0.31581004 1 0.42402476 1 0.44619464 1 0.45133548 1 0.45393803 1 0.4650376 1 0.50330337 1 0.59196272 1 0.62060496 1 0.6604875 1 0.66781698 1 0.678677 1 0.70020207 1 0.74507885 1 1.00005799 4 -7 0 0 1 2 2 11.2339734135851 1.75393602830749 -1.1875289974046 13.4648676895469 6.33366791783307 -0.649981567562466 - 0.48200245 2 12.07364253 2 -7 0 0 1 2 2 11.7544103983045 1.87810315920511 -0.947904211513032 13.7551732833356 6.33367429383337 -0.507938351705776 - 0.19391945 2 2.76255209 2 -7 1 0 2 3 2 7.21279194058922 -1.34821673503686 1.41444126218235 1 7.21279194058922 -3.70620017603505e-007 2.80803629137456 0.69530859 7.21279194058922 1.34821630603684 1.41444156518237 1 - 0 3 1 3 -7 1 0 2 3 2 20.1549001573063 -1.3686672230082 1.41444126018235 1 20.1549001573063 -1.16040005511604e-006 2.76152380216534 0.71270411 20.1549001573063 1.36866520500811 1.41444156718237 1 - 0 3 1 3 -7 0 0 3 4 2 32.4183769697902 -8.97180042613763e-007 0.221258007919191 32.5955505782055 -6.92920032911934e-007 0.275451984623267 32.7725279766115 -4.78380022721831e-007 0.330344534450523 32.9492818450068 -2.51270011934685e-007 0.385932318830801 - 0 4 1 4 -7 1 0 3 4 2 32.9492818450068 -2.51270011934685e-007 0.385932318830801 1 32.9492792850067 -0.831730021345054 0.481581306303884 0.4094979 32.9492816250068 -0.831729816895045 1.3187928326393 0.4094979 32.949284715007 -9.00000042747706e-011 1.41444141318236 1 - 0 4 3.00864606 4 -7 0 0 3 4 2 32.949284715007 -9.00000042747706e-011 1.41444141318236 32.7741353166878 -0.0736942506102889 1.41444140518236 32.5970604982772 -0.143131934658402 1.41444139718236 32.4183772197902 -0.208516963644024 1.41444139018236 - 0 4 1 4 -7 0 0 3 4 2 33.8393312472819 3.1000001472421e-010 1.20936400844171 33.5450377833037 1.00000004749745e-010 1.28623003409265 33.2478993791904 -3.00000014249235e-011 1.35431147932634 32.949284715007 -9.00000042747706e-011 1.41444141318236 - 0 4 1 4 -7 0 0 3 4 2 32.9492818450068 -2.51270011934685e-007 0.385932318830801 33.2466357191304 -2.06840009824373e-007 0.479447801742548 33.5433570032239 -1.26790006022202e-007 0.574930771547745 33.8393156872812 0 0.672364923065619 - 0 4 1 4 -7 0 0 10 11 2 33.8392977572803 -0.20435919121254 0.940864465816662 33.8392967772803 -0.20435919123154 0.907122105847986 33.8392963272803 -0.199817963158844 0.87184829298957 33.8392965172803 -0.190039065924371 0.835955334826746 33.8392974472803 -0.174564579440372 0.800712922594821 33.8392991472804 -0.153379125093117 0.767645932553224 33.8393016072805 -0.127150480545323 0.738417393319943 33.8393046572807 -0.0973036963086774 0.714113961327592 33.8393081272808 -0.0653126459411841 0.69512701975076 33.839311857281 -0.0325231257177655 0.681353423136549 33.8393156872812 -5.59165355758928e-010 0.672364921580619 - 0.5 11 1 11 -7 0 0 10 11 2 33.8393312472819 -2.49199968536363e-010 1.20936400844171 33.8393268972817 -0.0325231254187655 1.20037550701477 33.8393223672815 -0.0653126456581841 1.18660191036056 33.8393177972813 -0.0973036960466773 1.16761496945873 33.8393133372811 -0.127150480311323 1.14331153730438 33.8393091872809 -0.153379124893117 1.1140829989161 33.8393055672807 -0.174564579279372 1.0810160083455 33.8393025972806 -0.190039065803371 1.04577359667158 33.8393003272804 -0.199817963079844 1.00988063896675 33.8392987372804 -0.20435919119254 0.974606825785338 33.8392977572803 -0.20435919121254 0.940864465816662 - 0 11 0.5 11 -7 0 0 1 2 2 33.8393156872812 0 0.672364923065619 33.8393312472819 3.1000001472421e-010 1.20936400844171 - 0 2 1 2 -7 0 0 10 11 2 33.8393156872812 5.5916771475904e-010 0.672364923624619 33.839311857281 0.0325231256937655 0.68135342511055 33.8393081272808 0.0653126458971841 0.69512702163476 33.8393046572807 0.0973036962526774 0.714113963103592 33.8393016072805 0.127150480484323 0.738417394969943 33.8392991472804 0.153379125038117 0.767645934061224 33.8392974472803 0.174564579401372 0.800712923953821 33.8392965172803 0.190039065908371 0.835955336033746 33.8392963272803 0.199817963174844 0.87184829404957 33.8392967772803 0.20435919128254 0.907122106767986 33.8392977572803 0.20435919130254 0.940864466608662 - 0 11 0.5 11 -7 0 0 10 11 2 33.8392977572803 0.20435919130254 0.940864466608662 33.8392987372804 0.20435919132154 0.974606826448338 33.8393003272804 0.199817963253844 1.00988063896675 33.8393025972806 0.190039066029371 1.04577359667158 33.8393055672807 0.174564579562372 1.0810160093455 33.8393091872809 0.153379125238117 1.1140829989161 33.8393133372811 0.127150480718323 1.14331153730438 33.8393177972813 0.0973036965136774 1.16761496945873 33.8393223672815 0.0653126461811841 1.18660191036056 33.8393268972817 0.0325231259927655 1.20037550701477 33.8393312472819 8.69133045081603e-010 1.20936400844171 - 0.5 11 1 11 -7 1 0 3 4 2 32.949284715007 -9.00000042747706e-011 1.41444141318236 1 32.9492816250068 0.831730547915079 1.31879279163929 0.40949755 32.9492792850067 0.83173034345507 0.481580534523847 0.40949755 32.9492818450068 -2.51270011934685e-007 0.385932318830801 1 - 0 4 3.00408138 4 -7 0 0 3 4 2 32.4183773097902 0.208515993143978 1.41444143718236 32.5970603082772 0.143130653238341 1.41444142918236 32.7741352066878 0.0736935940402577 1.41444142218236 32.949284715007 -9.00000042747706e-011 1.41444141318236 - 0 4 1 4 -7 0 0 1 2 2 28.7643514962333 1.33236617428399 0.776100352742787 31.9768135388171 6.52772034505006 1.34215900474913 - 0 2 55.31688457 2 -7 0 0 3 13 11 31.9768135388171 6.52772034505006 1.34215900474913 31.9776257188556 6.52787760605753 1.34058743667448 31.9796644289525 6.52818048507192 1.33756072953072 31.9833584091279 6.52855755808983 1.33379279035176 31.9876254293306 6.5288832181053 1.3305387791972 31.9920575595411 6.52916842511885 1.32768909906185 31.9966522397594 6.52943877313169 1.32498794793355 32.0012638999784 6.52969316214377 1.32244629881283 32.0059658002017 6.52993654115533 1.32001469869733 32.0091598003534 6.5300832841623 1.3185486566277 32.014036060585 6.53028479217187 1.31653555253208 32.0174359507465 6.53039543717712 1.31543031647958 32.0208866309104 6.53046184918028 1.31476716144809 - 0 4 0.10050716 1 0.20101433 1 0.30117802 1 0.4013417 1 0.50136613 1 0.60139055 1 0.70125099 1 0.7996628 1 0.80111143 1 1 4 -7 0 0 1 2 2 32.0208866309104 6.53046184918028 1.31476716144809 28.8816743618059 1.32524719294586 0.695787436618128 - 10.79509318 2 65.98696054 2 -7 0 0 3 20 18 32.0208866309104 6.53046184918028 1.31476716144809 32.0599073027638 6.53130058622012 1.30639122705025 32.1191450255775 6.53226358526586 1.29677680959359 32.19857216935 6.53307327830432 1.28869800320987 32.2584536021943 6.53347889432358 1.2846543290178 32.3182868450362 6.53371059933459 1.28234875990829 32.3783239178878 6.53379236833847 1.28154173086996 32.4381797307308 6.53373951533596 1.28208011489554 32.4982063135819 6.53357143732798 1.28377011997581 32.5579894764214 6.53329855631502 1.28650751810583 32.6179377292688 6.53293795829789 1.29012160227749 32.6776144221033 6.53249803027699 1.2945284974868 32.7374592549458 6.5319907352529 1.2996086937281 32.7970201577748 6.53141960822577 1.30532680299969 32.8567681006127 6.53080887319676 1.31144079329009 32.9162629034385 6.53017449516663 1.31779103359171 32.9759893362754 6.52948805113403 1.32466167791805 33.0354316890987 6.52871351909724 1.3324126432862 33.0751543109855 6.52811956706903 1.33835550956847 33.0949317119248 6.52779751805373 1.34157750972151 - 0 4 0.11096149 1 0.1664966 1 0.22203172 1 0.27757823 1 0.33312473 1 0.38866776 1 0.4442108 1 0.49975652 1 0.55530224 1 0.61084887 1 0.66639551 1 0.72194273 1 0.77748996 1 0.83303754 1 0.88858512 1 0.94429256 1 1 4 -7 0 0 1 2 2 33.0949317119248 6.52779751805373 1.34157750972151 31.8489294127429 0.773620905355019 0.713412653345281 - 0 2 2.72494532 2 -7 0 0 3 12 10 31.9768135388171 6.52772034505006 1.34215900474913 31.9764636788005 6.52739737503472 1.34538679790244 31.9782710188863 6.52680712600669 1.35128621018265 31.984897389201 6.52656153899502 1.35374180329928 31.989697889429 6.52635515198522 1.35580529939729 31.9951559396883 6.52629706998246 1.35638671142491 32.000118179924 6.5261503899755 1.35785351649458 32.005677440188 6.52615118497553 1.35784651349425 32.0106887004261 6.52604185897034 1.35894000154618 32.0162508506902 6.52604601997054 1.35889935654425 32.019572370848 6.52595305996612 1.35982898558841 32.0213115109306 6.52591981196454 1.36016157360421 - 0 4 0.18739138 1 0.28860531 1 0.38981924 1 0.49147355 1 0.59312786 1 0.69484995 1 0.79657203 1 0.89828602 1 1 4 -7 0 0 3 18 16 32.0213115109306 6.52591981196454 1.36016157360421 32.0610295228171 6.52557503794817 1.36361408176819 32.1205334756434 6.52495908791891 1.36978014606106 32.1998835294123 6.5241482588804 1.37789726144661 32.2594855522433 6.52359702785422 1.38341652970876 32.3191691150781 6.52315529183324 1.38784147891893 32.398875878864 6.5227418618136 1.39198694111583 32.4985535435984 6.5226114128074 1.39330760417856 32.5984294083422 6.52306348482888 1.38880643396476 32.6778686421154 6.52370143985918 1.38244401566256 32.7375086249481 6.52429319588728 1.37653997438214 32.796898447769 6.52496807991934 1.36980508006225 32.856418010596 6.52566978495267 1.36280215672963 32.9158161034173 6.52633654398434 1.35614847341359 32.9754666962506 6.526939984013 1.35012765812762 33.0350597490811 6.52744555603701 1.3450849458881 33.0749870309775 6.52769816004901 1.34256712776851 33.0949317119248 6.52779751805373 1.34157750972151 - 0 4 0.11103083 1 0.16659245 1 0.22215408 1 0.27771208 1 0.33327008 1 0.44434037 1 0.55541065 1 0.61096997 1 0.66652929 1 0.72209161 1 0.77765393 1 0.83321457 1 0.88877522 1 0.94438761 1 1 4 -7 0 0 1 2 2 28.8816130618029 1.31007156222506 0.825958550560924 32.0213115109306 6.52591981196454 1.36016157360421 - 0.49271381 2 3.01761452 2 -Polygon3D 0 -PolygonOnTriangulations 704 -4 1 3 4 2 -p 0.0217114002497624 1 0 0.058887041083015 0.0956914417598994 0.132495842436784 -4 2 32 33 29 -p 0.139833966338934 1 0 0.058887041083015 0.0956914417598994 0.132495842436784 -4 2 6 7 5 -p 0.0217114002497624 1 0.132495842436784 0.162497690242658 0.181248845121329 0.2 -4 29 30 31 28 -p 0.134067157912031 1 0.132495842436784 0.162497690242658 0.181248845121329 0.2 -4 8 9 10 5 -p 0.0217114002497624 1 0.625 0.680555555555556 0.715277777777778 0.75 -4 23 26 27 28 -p 0.141289464704623 1 0.625 0.680555555555556 0.715277777777778 0.75 -4 8 12 13 11 -p 0.0217114002497624 1 0.301909390322789 0.318627387584946 0.329076135873794 0.339524884162641 -4 23 24 25 22 -p 0.134078622671144 1 0.301909390322789 0.318627387584946 0.329076135873794 0.339524884162641 -4 14 15 16 11 -p 0.0217114002497624 1 0.375 0.430555555555556 0.465277777777778 0.5 -4 17 20 21 22 -p 0.136786295185328 1 0.375 0.430555555555556 0.465277777777778 0.5 -4 14 18 19 17 -p 0.0217114002497624 1 0.4 0.488888888888889 0.544444444444444 0.6 -4 17 18 19 16 -p 0.135601706769003 1 0.4 0.488888888888889 0.544444444444444 0.6 -4 20 21 22 17 -p 0.0217114002497624 1 0.125 0.180555555555556 0.215277777777778 0.25 -4 11 14 15 16 -p 0.133706190678966 1 0.125 0.180555555555556 0.215277777777778 0.25 -4 20 24 25 23 -p 0.0217114002497624 1 0.8 0.888888888888889 0.944444444444444 1 -4 11 12 13 10 -p 0.138398074901815 1 0.8 0.888888888888889 0.944444444444444 1 -4 26 27 28 23 -p 0.0884057280462486 1 0.950938201119073 0.972743445066152 0.986371722533076 1 -4 27 28 29 2 -p 0.218328324649171 1 0.950938201119073 0.972743445066152 0.986371722533076 1 -4 29 30 31 26 -p 0.271277841269355 1 0.8 0.86708364494181 0.909010923030441 0.950938201119073 -4 22 25 26 27 -p 0.400787253241069 1 0.8 0.86708364494181 0.909010923030441 0.950938201119073 -4 29 33 34 32 -p 0.162794920043528 1 0.30821290778553 0.349007170991961 0.374503585495981 0.4 -4 22 23 24 19 -p 0.292539749822413 1 0.30821290778553 0.349007170991961 0.374503585495981 0.4 -4 32 36 37 35 -p 0.0217114002497624 1 0.4 0.405466473836574 0.408883019984433 0.412299566132293 -4 19 20 21 18 -p 0.148461068651578 1 0.4 0.405466473836574 0.408883019984433 0.412299566132293 -4 38 39 40 35 -p 0.310162931019732 1 0.4 0.488888888888889 0.544444444444444 0.6 -4 13 16 17 18 -p 0.430040802055804 1 0.4 0.488888888888889 0.544444444444444 0.6 -4 38 42 43 41 -p 0.226701566455158 1 0.6 0.688888888888889 0.744444444444444 0.8 -4 13 14 15 12 -p 0.346579396586611 1 0.6 0.688888888888889 0.744444444444444 0.8 -4 44 45 46 41 -p 0.0217114002497624 1 0.2 0.206615110259757 0.210749554172106 0.214883998084454 -4 9 10 11 12 -p 0.14719766463088 1 0.2 0.206615110259757 0.210749554172106 0.214883998084454 -4 47 48 49 44 -p 0.112813752801465 1 0 0.0888888888888889 0.144444444444444 0.2 -4 6 7 8 9 -p 0.242763564501105 1 0 0.0888888888888889 0.144444444444444 0.2 -4 47 51 52 50 -p 0.227780754819001 1 1.00922414 1.08695058 1.135529605 1.18410863 -4 69 70 71 65 -p 0.357750925570527 1 1.00922414 1.08695058 1.135529605 1.18410863 -7 27 31 32 33 34 35 30 -p 0.119318360526317 1 0 0.06282209745 0.119361985155 0.1702478840895 0.21604519313055 0.237286171565275 0.25852715 -4 56 57 58 53 -p 0.642905660536378 1 0 0.526270502222222 0.855189566111111 1.18410863 -4 53 56 57 58 -p 0.675398194661762 1 0 0.526270502222222 0.855189566111111 1.18410863 -4 56 60 61 59 -p 0.367560392018177 1 0.84752031 0.915289061111111 0.957644530555556 1 -4 25 26 27 8 -p 0.497530564519701 1 0.84752031 0.915289061111111 0.957644530555556 1 -4 59 62 63 1 -p 0.642905660536378 1 0 0.182258826666667 0.296170593333333 0.41008236 -4 1 2 3 4 -p 0.642905660536378 1 0 0.182258826666667 0.296170593333333 0.41008236 -18 1 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 5 -p 0.642905660536378 1 0.15247929 0.2046073665 0.25152263535 0.293746377315 0.33597011928 0.378193861245 0.42041760321 0.462641345175001 0.504865087140001 0.547088829105001 0.589312571070001 0.631536313035001 0.673760055000001 0.715983796965001 0.758207538930001 0.800431280895001 0.823975795447501 0.84752031 -18 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 5 -p 1.07351294138913 1 0.15247929 0.2046073665 0.25152263535 0.293746377315 0.33597011928 0.378193861245 0.42041760321 0.462641345175001 0.504865087140001 0.547088829105001 0.589312571070001 0.631536313035001 0.673760055000001 0.715983796965001 0.758207538930001 0.800431280895001 0.823975795447501 0.84752031 -4 22 23 24 5 -p 0.642905660536378 1 0 0.18226104 0.29617419 0.41008734 -4 1 2 3 4 -p 0.642905660536378 1 0 0.18226104 0.29617419 0.41008734 -4 22 26 27 25 -p 0.0169516157761017 1 0 0.141284489650318 0.229587295681766 0.317890101713215 -4 14 15 16 11 -p 0.167704394738365 1 0 0.141284489650318 0.229587295681766 0.317890101713215 -4 25 29 30 28 -p 0.017828509082463 1 0.317890101713215 0.398827834285119 0.44941391714256 0.5 -4 11 12 13 10 -p 0.168540461567515 1 0.317890101713215 0.398827834285119 0.44941391714256 0.5 -4 31 32 33 28 -p 0.00643026472471604 1 0.5 0.526571345634015 0.543178436655274 0.559785527676533 -4 7 8 9 10 -p 0.157605357519707 1 0.5 0.526571345634015 0.543178436655274 0.559785527676533 -4 34 35 36 31 -p 0.00359422273581913 1 0.25 0.361111111111111 0.430555555555556 0.5 -4 4 5 6 7 -p 0.154767643449415 1 0.25 0.361111111111111 0.430555555555556 0.5 -4 37 38 39 34 -p 0.0036674923889251 1 0 0.111111111111111 0.180555555555556 0.25 -4 1 2 3 4 -p 0.154850467737342 1 0 0.111111111111111 0.180555555555556 0.25 -4 40 41 42 37 -p 0.177477995241493 1 0.8 0.888888888888889 0.944444444444444 1 -4 21 22 23 2 -p 0.328428511514088 1 0.8 0.888888888888889 0.944444444444444 1 -4 43 44 45 40 -p 0.134184181089731 1 0.664667925968128 0.724815514426738 0.762407757213369 0.8 -4 18 19 20 21 -p 0.285130294987161 1 0.664667925968128 0.724815514426738 0.762407757213369 0.8 -4 46 47 48 43 -p 0.0744606139709532 1 0.6 0.628741300430279 0.646704613199204 0.664667925968128 -4 13 16 17 18 -p 0.225564749987571 1 0.6 0.628741300430279 0.646704613199204 0.664667925968128 -4 46 50 51 49 -p 0.331785856142649 1 0.550748293513788 0.638318125304675 0.693049270173979 0.747780415043284 -4 13 14 15 10 -p 0.482543745344843 1 0.550748293513788 0.638318125304675 0.693049270173979 0.747780415043284 -4 49 53 54 52 -p 0.300293524566547 1 0.747780415043284 0.819505773434099 0.864334122428358 0.909162471422618 -4 10 11 12 9 -p 0.451050107007315 1 0.747780415043284 0.819505773434099 0.864334122428358 0.909162471422618 -4 55 56 57 52 -p 0.170175817170122 1 0 0.0888888888888889 0.144444444444444 0.2 -4 6 7 8 9 -p 0.321349609018735 1 0 0.0888888888888889 0.144444444444444 0.2 -4 58 59 60 55 -p 0.227779102818924 1 1.00922544 1.08695130222222 1.13552996611111 1.18410863 -4 11 14 15 16 -p 0.378973189191404 1 1.00922544 1.08695130222222 1.13552996611111 1.18410863 -8 5 6 7 8 9 10 11 1 -p 0.119318364162317 1 0.5 0.540245556666667 0.580491113333333 0.616712114333333 0.649311015233333 0.681909916133333 0.711691628066666 0.74147334 -8 30 36 37 38 39 40 41 1 -p 0.119318360526317 1 0.25852715 0.298772625 0.3390181 0.3752390275 0.40783786225 0.440436697 0.4702183485 0.5 -4 72 73 74 69 -p 0.155999474162883 1 0.8 0.888888888888889 0.944444444444444 1 -4 22 23 24 1 -p 0.307136950612582 1 0.8 0.888888888888889 0.944444444444444 1 -4 75 76 77 72 -p 0.195306672995662 1 0.668616376685245 0.727009098158469 0.763504549079235 0.8 -4 17 20 21 22 -p 0.346442914142406 1 0.668616376685245 0.727009098158469 0.763504549079235 0.8 -4 75 79 80 78 -p 0.113608929104876 1 0.5 0.523641197342315 0.538416945681261 0.553192694020208 -4 17 18 19 14 -p 0.264641402497676 1 0.5 0.523641197342315 0.538416945681261 0.553192694020208 -4 78 82 83 81 -p 0.334451310524173 1 0.553192694020208 0.635433764236536 0.68683443312174 0.738235102006945 -4 14 15 16 13 -p 0.485348588421557 1 0.553192694020208 0.635433764236536 0.68683443312174 0.738235102006945 -4 84 85 86 81 -p 0.192994078484681 1 0.2 0.288888888888889 0.344444444444444 0.4 -4 10 11 12 13 -p 0.343713368625824 1 0.2 0.288888888888889 0.344444444444444 0.4 -4 87 88 89 84 -p 0.195966610379899 1 0 0.0888888888888889 0.144444444444444 0.2 -4 7 8 9 10 -p 0.346794800060204 1 0 0.0888888888888889 0.144444444444444 0.2 -4 90 91 92 87 -p 0.00375173355008656 1 0.75 0.861111111111111 0.930555555555556 1 -4 18 19 20 1 -p 0.154829221115348 1 0.75 0.861111111111111 0.930555555555556 1 -4 93 94 95 90 -p 0.00377599847747661 1 0.5 0.611111111111111 0.680555555555556 0.75 -4 13 16 17 18 -p 0.154748676964202 1 0.5 0.611111111111111 0.680555555555556 0.75 -4 93 97 98 96 -p 0.0242081863479626 1 0.0901996913858489 0.183598224865604 0.241972308290451 0.300346391715297 -4 13 14 15 12 -p 0.174917195661142 1 0.0901996913858489 0.183598224865604 0.241972308290451 0.300346391715297 -4 99 100 101 96 -p 0.014310448166988 1 0.0599516605892503 0.14441758921625 0.197208794608125 0.25 -4 9 10 11 12 -p 0.165316535098279 1 0.0599516605892503 0.14441758921625 0.197208794608125 0.25 -4 4 102 103 99 -p 0.00366833695294249 1 0 0.0266451824841112 0.0432984215366808 0.0599516605892503 -4 6 7 8 9 -p 0.154851510657451 1 0 0.0266451824841112 0.0432984215366808 0.0599516605892503 -4 4 6 7 5 -p 0.36755919119012 1 0 0.0677685733333333 0.110123931666667 0.15247929 -4 5 6 7 2 -p 0.496378701370654 1 0 0.0677685733333333 0.110123931666667 0.15247929 -4 5 9 10 8 -p 0.642905660536378 1 0 0.526270502222222 0.855189566111111 1.18410863 -4 8 9 10 5 -p 0.675110538081513 1 0 0.526270502222222 0.855189566111111 1.18410863 -7 5 13 14 15 16 17 12 -p 0.119318364162317 1 0.74147334 0.784561116666667 0.827648893333333 0.87073667 0.913824446666667 0.956912223333333 1 -4 16 18 19 17 -p 0.113045898477635 1 0 0.0408182187591482 0.0663296054836158 0.0918409922080835 -4 2 31 32 30 -p 0.241627904162505 1 0 0.0408182187591482 0.0663296054836158 0.0918409922080835 -4 20 21 22 17 -p 0.203505505309364 1 0.624657200339206 0.702587333521781 0.75129366676089 0.8 -4 27 28 29 30 -p 0.331941134359003 1 0.624657200339206 0.702587333521781 0.75129366676089 0.8 -4 23 24 25 20 -p 0.0293856235403936 1 0.6 0.610958755706314 0.61780797802276 0.624657200339206 -4 24 25 26 27 -p 0.158137521258689 1 0.6 0.610958755706314 0.61780797802276 0.624657200339206 -4 26 27 28 23 -p 0.277878377095838 1 0.413275132100674 0.496263962278152 0.548131981139076 0.6 -4 19 22 23 24 -p 0.406270496512281 1 0.413275132100674 0.496263962278152 0.548131981139076 0.6 -4 26 30 31 29 -p 0.0240244320866296 1 0.4 0.405029030981936 0.408172175345647 0.411315319709357 -4 19 20 21 16 -p 0.152826906387239 1 0.4 0.405029030981936 0.408172175345647 0.411315319709357 -4 29 33 34 32 -p 0.181185712181161 1 0.411315319709357 0.453217880267132 0.479406980615742 0.505596080964352 -4 16 17 18 15 -p 0.309871669334103 1 0.411315319709357 0.453217880267132 0.479406980615742 0.505596080964352 -4 35 36 37 32 -p 0.257364374160822 1 0.0568724255241282 0.120484680846738 0.160242340423369 0.2 -4 12 13 14 15 -p 0.385723975286375 1 0.0568724255241282 0.120484680846738 0.160242340423369 0.2 -4 38 39 40 35 -p 0.0852479780882632 1 0.00938904044701609 0.0304927671479548 0.0436825963360415 0.0568724255241282 -4 7 10 11 12 -p 0.214030691525058 1 0.00938904044701609 0.0304927671479548 0.0436825963360415 0.0568724255241282 -4 38 42 43 41 -p 0.017061916651825 1 0.8 0.888888888888889 0.944444444444444 1 -4 7 8 9 6 -p 0.145872553425539 1 0.8 0.888888888888889 0.944444444444444 1 -4 44 45 46 41 -p 0.0140081717961451 1 0.875 0.930555555555556 0.965277777777778 1 -4 20 23 24 25 -p 0.136530447546772 1 0.875 0.930555555555556 0.965277777777778 1 -4 44 48 49 47 -p 0.0135352789214262 1 0.25 0.28257966518349 0.302941955923171 0.323304246662853 -4 20 21 22 19 -p 0.133756588597998 1 0.25 0.28257966518349 0.302941955923171 0.323304246662853 -4 50 51 52 47 -p 0.0135352789214262 1 0.625 0.680555555555556 0.715277777777778 0.75 -4 16 17 18 19 -p 0.134099988209206 1 0.625 0.680555555555556 0.715277777777778 0.75 -4 53 54 55 50 -p 0.0135352789214262 1 0.5 0.555555555555556 0.590277777777778 0.625 -4 11 14 15 16 -p 0.135841310553192 1 0.5 0.555555555555556 0.590277777777778 0.625 -4 53 57 58 56 -p 0.0135352789214262 1 0.5 0.611111111111111 0.680555555555556 0.75 -4 11 12 13 10 -p 0.132597498359974 1 0.5 0.611111111111111 0.680555555555556 0.75 -4 59 60 61 56 -p 0.0137676491777583 1 0.25 0.305555555555556 0.340277777777778 0.375 -4 7 8 9 10 -p 0.140747743347293 1 0.25 0.305555555555556 0.340277777777778 0.375 -4 62 63 64 59 -p 0.0135352789214262 1 0.125 0.180555555555556 0.215277777777778 0.25 -4 4 5 6 7 -p 0.132087090921702 1 0.125 0.180555555555556 0.215277777777778 0.25 -4 1 65 66 62 -p 0.0135352789214262 1 0 0.0555555555555556 0.0902777777777778 0.125 -4 1 2 3 4 -p 0.138814820443407 1 0 0.0555555555555556 0.0902777777777778 0.125 -4 1 3 4 2 -p 0.247128841578528 1 0 0.0474455980805028 0.077099096880817 0.106752595681131 -4 1 34 35 31 -p 0.39314651311019 1 0 0.0474455980805028 0.077099096880817 0.106752595681131 -4 2 6 7 5 -p 0.355821302354724 1 0.106752595681131 0.15998065268381 0.193248188310484 0.226515723937158 -4 31 32 33 30 -p 0.501626510245666 1 0.106752595681131 0.15998065268381 0.193248188310484 0.226515723937158 -4 8 9 10 5 -p 0.208021352668102 1 0.625 0.680555555555556 0.715277777777778 0.75 -4 27 28 29 30 -p 0.354051875192448 1 0.625 0.680555555555556 0.715277777777778 0.75 -4 11 12 13 8 -p 0.126924323465684 1 0.530339034103805 0.572410574502114 0.598705287251057 0.625 -4 24 25 26 27 -p 0.27300603451605 1 0.530339034103805 0.572410574502114 0.598705287251057 0.625 -4 14 15 16 11 -p 0.0294238459231764 1 0.5 0.513484015157247 0.521911524630525 0.530339034103805 -4 19 22 23 24 -p 0.175623540625634 1 0.5 0.513484015157247 0.521911524630525 0.530339034103805 -4 14 18 19 17 -p 0.469059716108416 1 0.344046308627282 0.41041024844907 0.451887710837687 0.493365173226304 -4 19 20 21 16 -p 0.614669337890339 1 0.344046308627282 0.41041024844907 0.451887710837687 0.493365173226304 -4 17 21 22 20 -p 0.336522202215116 1 0.493365173226304 0.541858469291672 0.572166779332527 0.602475089373382 -4 16 17 18 15 -p 0.482109256793404 1 0.493365173226304 0.541858469291672 0.572166779332527 0.602475089373382 -4 23 24 25 20 -p 0.160526460639545 1 0.146801354201132 0.192667419000629 0.221333709500315 0.25 -4 12 13 14 15 -p 0.306443621393575 1 0.146801354201132 0.192667419000629 0.221333709500315 0.25 -4 26 27 28 23 -p 0.0441833793613924 1 0.125 0.134689490756059 0.140745422478596 0.146801354201132 -4 9 10 11 12 -p 0.190379594598386 1 0.125 0.134689490756059 0.140745422478596 0.146801354201132 -4 29 30 31 26 -p 0.0759599795464013 1 0 0.0555555555555556 0.0902777777777778 0.125 -4 6 7 8 9 -p 0.2221565503611 1 0 0.0555555555555556 0.0902777777777778 0.125 -4 29 33 34 32 -p 0.0243947204967824 1 0 0.049322432405471 0.0801489526588904 0.11097547291231 -4 17 18 19 14 -p 0.170398835618514 1 0 0.049322432405471 0.0801489526588904 0.11097547291231 -4 32 36 37 35 -p 0.0256666525673765 1 0.11097547291231 0.177125198844345 0.218468777551868 0.25981235625939 -4 14 15 16 13 -p 0.171601839773672 1 0.11097547291231 0.177125198844345 0.218468777551868 0.25981235625939 -4 38 39 40 35 -p 0.0272782144424809 1 0.5 0.574074075555556 0.620370372777778 0.66666667 -4 8 11 12 13 -p 0.173181444538909 1 0.5 0.574074075555556 0.620370372777778 0.66666667 -4 38 42 43 41 -p 0.00932543928484648 1 0.483275274148006 0.531066392833785 0.560935842012396 0.590805291191008 -4 8 9 10 7 -p 0.15544361864965 1 0.483275274148006 0.531066392833785 0.560935842012396 0.590805291191008 -4 44 45 46 41 -p 0.0130633893003221 1 0.16666667 0.240740741111111 0.287037035555556 0.33333333 -4 4 5 6 7 -p 0.158702800028615 1 0.16666667 0.240740741111111 0.287037035555556 0.33333333 -4 47 48 49 44 -p 0.0117174365470354 1 0 0.0740740755555555 0.120370372777778 0.16666667 -4 1 2 3 4 -p 0.157408269034261 1 0 0.0740740755555555 0.120370372777778 0.16666667 -4 47 51 52 50 -p 0.0684505232512223 1 0 0.0362251511111111 0.0588658705555556 0.08150659 -4 14 15 16 11 -p 0.214651787531248 1 0 0.0362251511111111 0.0588658705555556 0.08150659 -4 50 54 55 53 -p 0.496317240913799 1 0.49999967 0.722222038888889 0.861111019444444 1 -4 1 17 18 14 -p 0.583442097712011 1 0.49999967 0.722222038888889 0.861111019444444 1 -4 6 10 11 9 -p 0.0530907785216762 1 0 0.166666956666667 0.333333913333333 0.50000087 -4 59 62 63 1 -p 0.349195244585881 1 2.57033879 2.74803565666667 2.85909619833333 2.97015674 -4 1 2 3 4 -p 0.495396510365887 1 2.57033879 2.74803565666667 2.85909619833333 2.97015674 -4 6 7 8 3 -p 0.0530907785216762 1 0.50000087 0.666667246666667 0.833333623333333 1 -4 11 12 13 8 -p 0.496316527833765 1 0 0.222222075555556 0.361110872777778 0.49999967 -4 1 2 3 4 -p 0.583442097712011 1 0 0.222222075555556 0.361110872777778 0.49999967 -4 17 18 19 14 -p 0.0116858109642619 1 0.83333333 0.907407405555556 0.953703702777778 1 -4 16 17 18 19 -p 0.168520879067806 1 0.83333333 0.907407405555556 0.953703702777778 1 -4 20 21 22 17 -p 0.0130815236584581 1 0.66666667 0.740740741111111 0.787037035555556 0.83333333 -4 11 14 15 16 -p 0.169835974042751 1 0.66666667 0.740740741111111 0.787037035555556 0.83333333 -4 20 24 25 23 -p 0.0120755381645282 1 0.409120244843595 0.469052849098649 0.506510726758058 0.543968604417467 -4 11 12 13 10 -p 0.169263013130296 1 0.409120244843595 0.469052849098649 0.506510726758058 0.543968604417467 -4 26 27 28 23 -p 0.0251143113646577 1 0.33333333 0.407407405555556 0.453703702777778 0.5 -4 5 8 9 10 -p 0.18216778007763 1 0.33333333 0.407407405555556 0.453703702777778 0.5 -4 26 30 31 29 -p 0.0248985937008868 1 0.743934327122079 0.807918344727152 0.847908355730323 0.887898366733494 -4 5 6 7 1 -p 0.181959069709794 1 0.743934327122079 0.807918344727152 0.847908355730323 0.887898366733494 -4 29 33 34 32 -p 0.0246386816164232 1 0.887898366733494 0.937721314851941 0.968860657425971 1 -4 1 2 3 4 -p 0.181768256495326 1 0.887898366733494 0.937721314851941 0.968860657425971 1 -4 35 36 37 32 -p 0.0759605756093393 1 0.875 0.930555555555556 0.965277777777778 1 -4 33 34 35 1 -p 0.233287095553079 1 0.875 0.930555555555556 0.965277777777778 1 -4 38 39 40 35 -p 0.0441828666060005 1 0.849766973181494 0.860981651767497 0.867990825883748 0.875 -4 30 31 32 33 -p 0.201509065446233 1 0.849766973181494 0.860981651767497 0.867990825883748 0.875 -4 41 42 43 38 -p 0.134846336381432 1 0.75 0.794340876969553 0.822053925075523 0.849766973181494 -4 25 28 29 30 -p 0.29190338036409 1 0.75 0.794340876969553 0.822053925075523 0.849766973181494 -4 41 45 46 44 -p 0.206679500437461 1 0.388108130442962 0.419347793023147 0.438872582135763 0.458397371248378 -4 25 26 27 22 -p 0.363525366831892 1 0.388108130442962 0.419347793023147 0.438872582135763 0.458397371248378 -4 44 48 49 47 -p 0.468177362943766 1 0.458397371248378 0.522668809975069 0.56283845917925 0.603008108383431 -4 22 23 24 19 -p 0.624866087258049 1 0.458397371248378 0.522668809975069 0.56283845917925 0.603008108383431 -4 47 51 52 50 -p 0.185781286525067 1 0.603008108383431 0.63130080243524 0.64898373621762 0.66666667 -4 19 20 21 18 -p 0.343070991464657 1 0.603008108383431 0.63130080243524 0.64898373621762 0.66666667 -4 53 54 55 50 -p 0.100882537737616 1 0.375 0.390758639674271 0.400607789470691 0.41045693926711 -4 15 16 17 18 -p 0.258105650464897 1 0.375 0.390758639674271 0.400607789470691 0.41045693926711 -4 56 57 58 53 -p 0.182078303635413 1 0.25 0.305555555555556 0.340277777777778 0.375 -4 10 13 14 15 -p 0.339287929042992 1 0.25 0.305555555555556 0.340277777777778 0.375 -4 56 60 61 59 -p 0.308835532844203 1 0.757022074411284 0.801827011748411 0.829830097584116 0.857833183419821 -4 10 11 12 7 -p 0.4657970101622 1 0.757022074411284 0.801827011748411 0.829830097584116 0.857833183419821 -4 59 62 63 4 -p 0.34614698191874 1 0.857833183419821 0.921018435233234 0.960509217616617 1 -4 7 8 9 6 -p 0.503160226604632 1 0.857833183419821 0.921018435233234 0.960509217616617 1 -2 1 2 -p 0.622517224554979 1 0 55.21292144 -2 7 3 -p 0.637818569109754 1 0 55.21292144 -4 2 4 5 3 -p 0.0176293168373448 1 0 0.444444444444444 0.722222222222222 1 -4 9 10 11 1 -p 0.112210986329735 1 0 0.444444444444444 0.722222222222222 1 -2 3 6 -p 0.622517224554979 1 0 55.31736968 -2 1 2 -p 0.623547928988935 1 0 55.31736968 -8 1 4 5 6 7 8 9 3 -p 0.0179392128520661 1 0 0.10935 0.18906615 0.29841615 0.46244115 0.70847865 0.854239325 1 -8 1 2 3 4 5 6 7 8 -p 0.112210986329735 1 0 0.10935 0.18906615 0.29841615 0.46244115 0.70847865 0.854239325 1 -2 3 10 -p 0.623547928988935 1 0 2.52492265 -2 1 2 -p 0.637219664481308 1 0 2.52492265 -5 9 13 14 15 12 -p 0.112210986329735 1 0 0.166666666666667 0.388888888888889 0.694444444444444 1 -5 3 4 5 6 2 -p 0.51938682146955 1 0 0.166666666666667 0.388888888888889 0.694444444444444 1 -4 12 16 17 8 -p 0.112210986329735 1 0 0.444444444444444 0.722222222222222 1 -4 3 4 5 1 -p 0.519216869461468 1 0 0.444444444444444 0.722222222222222 1 -2 1 2 -p 0.637818569109754 1 0.29266018 3.01761452 -2 6 3 -p 0.661844054337434 1 0.29266018 3.01761452 -2 1 2 -p 0.68706828063399 1 0 1.95653393 -2 6 3 -p 0.713253797014977 1 0 1.95653393 -4 6 7 8 1 -p 0.19066308105601 1 0 0.444444444444444 0.722222222222222 1 -2 3 6 -p 0.68706828063399 1 0.07121022 2.01729017 -2 20 17 -p 0.681352342574739 1 0.07121022 2.01729017 -5 20 22 23 24 21 -p 0.0380148813278424 1 0 0.444444444444444 0.888888888888889 0.944444444444444 1 -5 1 2 3 4 5 -p 0.19066308105601 1 0 0.444444444444444 0.888888888888889 0.944444444444444 1 -2 21 1 -p 0.61738581012425 1 1.37499288 38.1919507 -2 20 19 -p 0.645152860483351 1 1.37499288 38.1919507 -4 6 10 11 9 -p 0.19066308105601 1 0 0.444444444444444 0.722222222222222 1 -4 3 4 5 2 -p 0.68706828063399 1 0 0.444444444444444 0.722222222222222 1 -5 9 12 13 14 5 -p 0.0380149807281612 1 0 0.444444444444444 0.888888888888889 0.944444444444444 1 -5 21 22 23 24 20 -p 0.1600153225848 1 0 0.444444444444444 0.888888888888889 0.944444444444444 1 -2 1 2 -p 0.68706828063399 1 1.34817287 38.1919507 -2 4 21 -p 0.683467514267576 1 1.34817287 38.1919507 -4 5 6 7 4 -p 0.583442097712011 1 0 0.444444444444444 0.722222222222222 1 -4 14 15 16 8 -p 0.583442097712011 1 0 0.444444444444444 0.722222222222222 1 -5 31 32 33 34 28 -p 1.07351294138913 1 1.20676907 1.379990036 1.553211002 1.668691646 1.78417229 -5 59 60 61 62 63 -p 1.29421084167171 1 1.20676907 1.379990036 1.553211002 1.668691646 1.78417229 -7 31 36 37 38 39 40 35 -p 1.07351294138913 1 0.57740334 0.715045625151 0.852687910302 0.9765659669379 1.08805621791021 1.1474126439551 1.20676907 -7 108 109 110 111 112 113 107 -p 1.29421084167171 1 0.57740334 0.715045625151 0.852687910302 0.9765659669379 1.08805621791021 1.1474126439551 1.20676907 -5 1 41 42 43 35 -p 1.07351294138913 1 0 0.19246778 0.38493556 0.48116945 0.57740334 -5 11 12 13 14 15 -p 1.29421084167171 1 0 0.19246778 0.38493556 0.48116945 0.57740334 -5 1 3 4 5 2 -p 0.154332494323399 1 0 0.3 0.6 0.8 1 -5 1 21 22 23 17 -p 0.154076614787245 1 0 0.3 0.6 0.8 1 -4 2 7 8 6 -p 0.154332494323399 1 0 0.432113840210477 0.716056920105239 1 -4 1 16 17 10 -p 0.14132715381128 1 0 0.432113840210477 0.716056920105239 1 -10 6 10 11 12 13 14 15 16 17 9 -p 0.154332494323399 1 0 0.135 0.2565 0.36585 0.4752 0.58455 0.6939 0.80325 0.901625 1 -10 5 6 7 8 9 10 11 12 13 1 -p 0.185198973188079 1 0 0.135 0.2565 0.36585 0.4752 0.58455 0.6939 0.80325 0.901625 1 -4 9 18 19 1 -p 0.154332494323399 1 0 0.222222222222222 0.361111111111111 0.5 -4 34 35 36 33 -p 0.244985961736207 1 0 0.222222222222222 0.361111111111111 0.5 -9 1 3 4 5 6 7 8 9 2 -p 0.154076614787245 1 0 0.248117411666667 0.471423082166667 0.672398185616667 0.873373289066667 1.07434839251667 1.27532349596667 1.38201398298333 1.48870447 -9 9 10 11 12 13 14 15 16 8 -p 0.169168173274056 1 0 0.248117411666667 0.471423082166667 0.672398185616667 0.873373289066667 1.07434839251667 1.27532349596667 1.38201398298333 1.48870447 -2 2 10 -p 1e-005 1 0 1 -7 10 12 13 14 15 16 11 -p 0.154076614787245 1 0 0.304479063333333 0.608958126666667 0.91343719 1.21791625333333 1.52239531666667 1.82687438 -7 8 9 10 11 12 13 5 -p 0.156610876042657 1 0 0.304479063333333 0.608958126666667 0.91343719 1.21791625333333 1.52239531666667 1.82687438 -6 1 3 4 5 6 2 -p 0.110460699746601 1 0 0.2187 0.4374 0.6561 0.82805 1 -7 1 3 4 5 6 7 2 -p 0.169168173274056 1 0 0.269678678333333 0.539357356666667 0.809036035 1.07871471333333 1.34839339166667 1.61807207 -7 3 4 5 6 7 8 2 -p 0.157333852363806 1 0 0.269678678333333 0.539357356666667 0.809036035 1.07871471333333 1.34839339166667 1.61807207 -2 2 8 -p 1e-005 1 0 1 -13 1 17 18 19 20 21 22 23 24 25 26 27 9 -p 0.169168173274056 1 0 0.0833333333333333 0.166666666666667 0.25 0.333333333333333 0.416666666666667 0.5 0.583333333333333 0.666666666666667 0.75 0.833333333333334 0.916666666666667 1 -13 19 22 23 24 25 26 27 28 29 30 31 32 33 -p 0.244985961736207 1 0 0.0833333333333333 0.166666666666667 0.25 0.333333333333333 0.416666666666667 0.5 0.583333333333333 0.666666666666667 0.75 0.833333333333334 0.916666666666667 1 -2 1 2 -p 1e-005 1 0 1 -5 9 10 11 12 3 -p 0.154076615487245 1 0 0.3 0.6 0.8 1 -5 1 6 7 8 9 -p 0.154334512315495 1 0 0.3 0.6 0.8 1 -6 2 6 7 8 9 5 -p 0.110455126646336 1 0 0.2187 0.4374 0.6561 0.82805 1 -7 13 17 18 19 20 21 1 -p 0.154076615487245 1 0 0.304479063333333 0.608958126666667 0.91343719 1.21791625333333 1.52239531666667 1.82687438 -7 15 16 17 18 19 20 14 -p 0.156741209765721 1 0 0.304479063333333 0.608958126666667 0.91343719 1.21791625333333 1.52239531666667 1.82687438 -4 1 3 4 2 -p 0.110455130146336 1 2.78088653 4.01683610333333 4.78930458666667 5.56177307 -4 1 17 18 14 -p 0.148705354563124 1 2.78088653 4.01683610333333 4.78930458666667 5.56177307 -4 5 6 7 2 -p 0.110455130146336 1 0.60294418 0.68935282 0.74335822 0.79736362 -4 21 24 25 26 -p 0.15042515953281 1 0.60294418 0.68935282 0.74335822 0.79736362 -7 5 9 10 11 12 13 8 -p 0.110455130146336 1 0 0.166666666666667 0.333333333333333 0.5 0.666666666666667 0.833333333333333 1 -7 1 14 15 16 17 18 10 -p 0.132546133200603 1 0 0.166666666666667 0.333333333333333 0.5 0.666666666666667 0.833333333333333 1 -7 8 14 15 16 17 18 1 -p 0.110455130146336 1 0 0.166666666666667 0.333333333333333 0.5 0.666666666666667 0.833333333333333 1 -7 8 9 10 11 12 13 5 -p 0.128034097196292 1 0 0.166666666666667 0.333333333333333 0.5 0.666666666666667 0.833333333333333 1 -4 1 3 4 2 -p 0.110455126646336 1 0.5 0.722222222222222 0.861111111111111 1 -4 21 22 23 15 -p 0.15042515953281 1 0.5 0.722222222222222 0.861111111111111 1 -5 5 11 12 13 10 -p 0.110455126646336 1 0 0.333333333333333 0.633333333333333 0.816666666666667 1 -5 1 2 3 4 5 -p 0.154334512315495 1 0 0.333333333333333 0.633333333333333 0.816666666666667 1 -4 9 11 12 10 -p 0.154334512315495 1 0 0.222222222222222 0.361111111111111 0.5 -4 19 20 21 16 -p 0.244985961736207 1 0 0.222222222222222 0.361111111111111 0.5 -10 5 13 14 15 16 17 18 19 20 10 -p 0.154334512315495 1 0 0.135 0.2565 0.36585 0.4752 0.58455 0.6939 0.80325 0.901625 1 -10 13 18 19 20 21 22 23 24 25 1 -p 0.185201394778594 1 0 0.135 0.2565 0.36585 0.4752 0.58455 0.6939 0.80325 0.901625 1 -9 1 3 4 5 6 7 8 9 2 -p 0.130190205264702 1 0 0.135 0.27 0.405 0.54 0.675 0.81 0.905 1 -9 8 9 10 11 12 13 14 15 5 -p 0.296600035187744 1 0 0.135 0.27 0.405 0.54 0.675 0.81 0.905 1 -4 2 11 12 10 -p 0.124154498297018 1 0.5 0.722222222222222 0.861111111111111 1 -4 5 6 7 1 -p 0.14269862349782 1 0.5 0.722222222222222 0.861111111111111 1 -4 10 14 15 13 -p 0.130190205264702 1 0 0.444444444444444 0.722222222222222 1 -4 1 14 15 8 -p 0.153770329500848 1 0 0.444444444444444 0.722222222222222 1 -6 13 16 17 18 19 1 -p 0.130190205264702 1 0 0.1215 0.278092130347508 0.521092130347508 0.760546065173754 1 -6 13 14 15 16 17 5 -p 0.154344781515982 1 0 0.1215 0.278092130347508 0.521092130347508 0.760546065173754 1 -4 1 3 4 2 -p 0.154344781515982 1 0.5 0.722222222222222 0.861111111111111 1 -4 16 17 18 15 -p 0.244985961736207 1 0.5 0.722222222222222 0.861111111111111 1 -9 2 6 7 8 9 10 11 12 5 -p 0.154344781515982 1 0.5 0.575 0.65 0.725 0.7925 0.85325 0.914 0.957 1 -9 16 17 18 19 20 21 22 23 8 -p 0.296600035187744 1 0.5 0.575 0.65 0.725 0.7925 0.85325 0.914 0.957 1 -4 1 3 4 2 -p 0.110460701146601 1 0 0.222222222222222 0.361111111111111 0.5 -4 5 6 7 1 -p 0.111788063006744 1 0.5 0.722222222222222 0.861111111111111 1 -4 2 7 8 9 -p 0.110460699746601 1 0.5 0.722222222222222 0.861111111111111 1 -2 8 14 -p 1e-005 1 0 1 -4 26 27 28 2 -p 0.134576070876016 1 0 0.444444444444444 0.722222222222222 1 -4 14 15 16 11 -p 0.148705354563124 1 0 0.444444444444444 0.722222222222222 1 -7 9 11 12 13 14 15 10 -p 0.110460699746601 1 0 0.166666666666667 0.333333333333333 0.5 0.666666666666667 0.833333333333333 1 -7 1 14 15 16 17 18 8 -p 0.134096142399155 1 0 0.166666666666667 0.333333333333333 0.5 0.666666666666667 0.833333333333333 1 -4 2 6 7 5 -p 0.110460701146601 1 0 1.23594956888889 2.00841804944444 2.78088653 -4 11 12 13 8 -p 0.148705354563124 1 0 1.23594956888889 2.00841804944444 2.78088653 -7 5 9 10 11 12 13 8 -p 0.110460701146601 1 0 0.166666666666667 0.333333333333333 0.5 0.666666666666667 0.833333333333333 1 -7 8 9 10 11 12 13 5 -p 0.128036121388388 1 0 0.166666666666667 0.333333333333333 0.5 0.666666666666667 0.833333333333333 1 -4 1 3 4 2 -p 0.119407219515535 1 0.5 0.722222222222222 0.861111111111111 1 -4 22 23 24 19 -p 0.14269862349782 1 0.5 0.722222222222222 0.861111111111111 1 -4 2 6 7 5 -p 0.128036121388388 1 0 0.444444444444444 0.722222222222222 1 -4 15 16 17 10 -p 0.153211880572423 1 0 0.444444444444444 0.722222222222222 1 -4 8 14 15 1 -p 0.128036121388388 1 2.78088653 4.01683610333333 4.78930458666667 5.56177307 -4 8 9 10 5 -p 0.148705354563124 1 2.78088653 4.01683610333333 4.78930458666667 5.56177307 -4 5 6 7 2 -p 0.128034097196292 1 0 1.23594956888889 2.00841804944444 2.78088653 -4 2 6 7 5 -p 0.13130102699646 1 0 0.738131986666667 1.19946447833333 1.66079697 -4 4 25 26 22 -p 0.14269862349782 1 0 0.738131986666667 1.19946447833333 1.66079697 -4 1 3 4 2 -p 0.119407269523537 1 0 0.222222222222222 0.361111111111111 0.5 -4 1 2 3 4 -p 0.14269862349782 1 0 0.222222222222222 0.361111111111111 0.5 -12 5 9 10 11 12 13 14 15 16 17 18 8 -p 0.14269862349782 1 0 0.170354169252 0.340708338504 0.4940270908308 0.63201396792492 0.77000084501904 0.90798772211316 1.04597459920728 1.1839614763014 1.32194835339552 1.43991413669776 1.55787992 -12 1 20 21 22 23 24 25 26 27 28 29 17 -p 0.245895527779409 1 0 0.170354169252 0.340708338504 0.4940270908308 0.63201396792492 0.77000084501904 0.90798772211316 1.04597459920728 1.1839614763014 1.32194835339552 1.43991413669776 1.55787992 -4 8 20 21 19 -p 0.124154485897017 1 0 0.222222222222222 0.361111111111111 0.5 -4 1 18 19 15 -p 0.13019269349282 1 0 0.222222222222222 0.361111111111111 0.5 -4 1 3 4 2 -p 0.245895527779409 1 0 0.333333333333333 0.666666666666667 1 -4 5 6 7 1 -p 0.296600035187744 1 0 0.333333333333333 0.666666666666667 1 -13 2 6 7 8 9 10 11 12 13 14 15 16 5 -p 0.245895527779409 1 0 0.169190368333333 0.338380736666667 0.507571105 0.676761473333333 0.845951841666667 1.01514221 1.18433257833333 1.35352294666667 1.522713315 1.69190368333333 1.86109405166667 2.03028442 -13 5 6 7 8 9 10 11 12 13 14 15 16 1 -p 0.295074613335291 1 0 0.169190368333333 0.338380736666667 0.507571105 0.676761473333333 0.845951841666667 1.01514221 1.18433257833333 1.35352294666667 1.522713315 1.69190368333333 1.86109405166667 2.03028442 -4 5 18 19 17 -p 0.245895527779409 1 0 0.444444444444444 0.722222222222222 1 -4 10 11 12 1 -p 0.296600034587744 1 0 0.444444444444444 0.722222222222222 1 -4 1 3 4 2 -p 0.269370666394419 1 0 0.444444444444444 0.722222222222222 1 -4 10 13 14 15 -p 0.296600034587744 1 0 0.444444444444444 0.722222222222222 1 -4 5 18 19 17 -p 0.269370666394419 1 0 0.444444444444444 0.722222222222222 1 -4 1 2 3 4 -p 0.296600035187744 1 0 0.444444444444444 0.722222222222222 1 -15 17 20 21 22 23 24 25 26 27 28 29 30 31 32 2 -p 0.269370666394419 1 0 0.306438354166667 0.612876708333333 0.9193150625 1.19510958125 1.443324648125 1.691539715 1.939754781875 2.18796984875 2.436184915625 2.6843999825 2.932615049375 3.18083011625 3.429045183125 3.67726025 -15 2 19 20 21 22 23 24 25 26 27 28 29 30 31 18 -p 0.324529977020346 1 0 0.306438354166667 0.612876708333333 0.9193150625 1.19510958125 1.443324648125 1.691539715 1.939754781875 2.18796984875 2.436184915625 2.6843999825 2.932615049375 3.18083011625 3.429045183125 3.67726025 -4 16 25 26 24 -p 0.296600035187744 1 0 0.444444444444444 0.722222222222222 1 -4 1 2 3 4 -p 0.355920021125293 1 0 0.444444444444444 0.722222222222222 1 -13 24 27 28 29 30 31 32 33 34 35 36 37 4 -p 0.296600035187744 1 7.7471244 8.05512937166667 8.36313434333333 8.671139315 8.97914428666666 9.28714925833333 9.59515423 9.90315920166666 10.2111641733333 10.519169145 10.8271741166667 11.1351790883333 11.44318406 -13 49 50 51 52 53 54 55 56 57 58 59 60 48 -p 0.410646876704678 1 7.7471244 8.05512937166667 8.36313434333333 8.671139315 8.97914428666666 9.28714925833333 9.59515423 9.90315920166666 10.2111641733333 10.519169145 10.8271741166667 11.1351790883333 11.44318406 -15 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 -p 0.312813320257834 1 0 0.0924800408333333 0.184960081666667 0.2774401225 0.369920163333333 0.453152200083333 0.528061033158333 0.602969866233333 0.677878699308334 0.752787532383334 0.827696365458334 0.902605198533334 0.996564921280388 1.05316270564019 1.10976049 -15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -p 0.309703803869768 1 0 0.0924800408333333 0.184960081666667 0.2774401225 0.369920163333333 0.453152200083333 0.528061033158333 0.602969866233333 0.677878699308334 0.752787532383334 0.827696365458334 0.902605198533334 0.996564921280388 1.05316270564019 1.10976049 -4 5 20 21 19 -p 0.312813320257834 1 0 0.444444444444444 0.722222222222222 1 -4 29 30 31 16 -p 0.36131801712756 1 0 0.444444444444444 0.722222222222222 1 -16 4 22 23 24 25 26 27 28 29 30 31 32 33 34 35 19 -p 0.312813399155366 1 3.65967968 4.00030007333333 4.30685842733333 4.58276094593333 4.85866346453333 5.13456598313333 5.41046850173333 5.68637102033333 5.96227353893333 6.23817605753333 6.51407857613333 6.78998109473333 7.06588361333333 7.34178613193333 7.54445526596666 7.7471244 -16 49 61 62 63 64 65 66 67 68 69 70 71 72 73 74 14 -p 0.410646876704678 1 3.65967968 4.00030007333333 4.30685842733333 4.58276094593333 4.85866346453333 5.13456598313333 5.41046850173333 5.68637102033333 5.96227353893333 6.23817605753333 6.51407857613333 6.78998109473333 7.06588361333333 7.34178613193333 7.54445526596666 7.7471244 -4 1 3 4 2 -p 0.154332494323399 1 0.5 0.722222222222222 0.861111111111111 1 -6 10 11 12 13 14 2 -p 0.13019269349282 1 0 0.1215 0.278423389270726 0.521423389270726 0.760711694635363 1 -9 2 19 20 21 22 23 24 25 14 -p 0.154332494323399 1 0.5 0.575 0.65 0.725 0.7925 0.85325 0.914 0.957 1 -9 29 32 33 34 35 36 37 38 9 -p 0.296600034587744 1 0.5 0.575 0.65 0.725 0.7925 0.85325 0.914 0.957 1 -9 1 3 4 5 6 7 8 9 2 -p 0.13019269349282 1 0 0.15 0.285 0.4065 0.528 0.6495 0.771 0.8855 1 -9 1 2 3 4 5 6 7 8 9 -p 0.296600034587744 1 0 0.15 0.285 0.4065 0.528 0.6495 0.771 0.8855 1 -14 15 17 18 19 20 21 22 23 24 25 26 27 28 16 -p 0.296600034587744 1 0 0.304973306666667 0.609946613333333 0.91491992 1.21989322666667 1.52486653333333 1.82983984 2.13481314666667 2.43978645333333 2.74475976 3.04973306666667 3.32420904266667 3.49194436133333 3.65967968 -14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -p 0.410646876704678 1 0 0.304973306666667 0.609946613333333 0.91491992 1.21989322666667 1.52486653333333 1.82983984 2.13481314666667 2.43978645333333 2.74475976 3.04973306666667 3.32420904266667 3.49194436133333 3.65967968 -2 18 3 -p 0.269643324107369 1 0 1 -9 15 17 18 19 20 21 22 23 16 -p 0.410646876704678 1 1.23049347 1.32277327333333 1.40582509633333 1.48057173703333 1.55531837773333 1.63006501843333 1.70481165913333 1.74449197456667 1.78417229 -9 3 4 5 6 7 8 9 10 1 -p 1.29421084167171 1 1.23049347 1.32277327333333 1.40582509633333 1.48057173703333 1.55531837773333 1.63006501843333 1.70481165913333 1.74449197456667 1.78417229 -17 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 16 -p 0.410646876704678 1 0.55367874 0.60443984475 0.6552009495 0.700885943775 0.7420024386225 0.78311893347 0.8242354283175 0.865351923164999 0.906468418012499 0.947584912859999 0.988701407707499 1.029817902555 1.0709343974025 1.11205089225 1.1531673870975 1.19183042854875 1.23049347 -17 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 -p 1.29421084167171 1 0.55367874 0.60443984475 0.6552009495 0.700885943775 0.7420024386225 0.78311893347 0.8242354283175 0.865351923164999 0.906468418012499 0.947584912859999 0.988701407707499 1.029817902555 1.0709343974025 1.11205089225 1.1531673870975 1.19183042854875 1.23049347 -9 24 41 42 43 44 45 46 47 40 -p 0.410646876704678 1 0 0.06727196691 0.13454393382 0.20181590073 0.26908786764 0.33635983455 0.40363180146 0.47865527073 0.55367874 -9 65 66 67 68 69 70 71 72 64 -p 1.29421084167171 1 0 0.06727196691 0.13454393382 0.20181590073 0.26908786764 0.33635983455 0.40363180146 0.47865527073 0.55367874 -2 1 2 -p 0.269643324107369 1 0 1 -4 9 10 11 8 -p 0.48746050605313 1 8.022e-005 0.444524664444444 0.722302442222222 1.00008022 -4 2 6 7 5 -p 0.993553093791236 1 0.00020743 20.5537959188889 33.3997887244444 46.24578153 -4 1 11 12 8 -p 1.13380302101275 1 0.00020743 20.5537959188889 33.3997887244444 46.24578153 -4 1 19 20 18 -p 0.084726111024273 1 8.022e-005 0.444524664444444 0.722302442222222 1.00008022 -4 8 11 12 1 -p 0.993553093791236 1 4.95e-005 4.75635840666667 7.72905147333333 10.70174454 -4 4 11 12 8 -p 1.13380315041275 1 4.95e-005 4.75635840666667 7.72905147333333 10.70174454 -4 1 3 4 2 -p 0.050748815742574 1 0.00034374 0.444788184444444 0.722565962222222 1.00034374 -4 8 9 10 5 -p 0.108991320200818 1 0.00034374 0.444788184444444 0.722565962222222 1.00034374 -14 2 6 7 8 9 10 11 12 13 14 15 16 17 5 -p 0.0847263287280665 1 5.799e-005 0.0203961823242634 0.0387005554161004 0.0551744911987537 0.0716484269814071 0.0933408333781089 0.118051737052089 0.150987683176571 0.200409490524531 0.274542201546471 0.385741268079381 0.552539867878747 0.776298928939373 1.00005799 -14 14 15 16 17 18 19 20 21 22 23 24 25 26 13 -p 0.397147393887498 1 5.799e-005 0.0203961823242634 0.0387005554161004 0.0551744911987537 0.0716484269814071 0.0933408333781089 0.118051737052089 0.150987683176571 0.200409490524531 0.274542201546471 0.385741268079381 0.552539867878747 0.776298928939373 1.00005799 -2 5 18 -p 0.071013893456975 1 0 1 -2 1 6 -p 0.0892442312388724 1 0 1 -4 1 3 4 2 -p 0.0892442312388724 1 6.281e-005 0.444507254444444 0.722285032222222 1.00006281 -4 8 9 10 5 -p 0.371167894061585 1 6.281e-005 0.444507254444444 0.722285032222222 1.00006281 -2 2 5 -p 1e-005 1 0 1 -4 5 7 8 6 -p 0.0892443514709342 1 5.543e-005 0.444499874444444 0.722277652222222 1.00005543 -4 1 2 3 4 -p 0.410523519930905 1 5.543e-005 0.444499874444444 0.722277652222222 1.00005543 -4 1 6 7 5 -p 0.993554176191288 1 3.88e-005 3.59718024888889 5.84539365444444 8.09360706 -4 5 6 7 2 -p 1.16127753697519 1 3.88e-005 3.59718024888889 5.84539365444444 8.09360706 -4 3 4 5 1 -p 0.491832010960765 1 5.543e-005 0.444499874444444 0.722277652222222 1.00005543 -4 3 4 5 1 -p 0.491737079556256 1 6.281e-005 0.444507254444444 0.722285032222222 1.00006281 -2 8 1 -p 0.993558382591488 1 3.88e-005 8.09360706 -2 13 2 -p 1.15618494809832 1 3.88e-005 8.09360706 -15 87 88 89 90 91 92 93 94 95 96 97 98 99 100 86 -p 0.487616129060521 1 5.799e-005 0.00759597456829301 0.015133959136586 0.022671943704879 0.030209928273172 0.0402605743642294 0.0553365435008154 0.0779504972056945 0.111871427763013 0.162752823598991 0.239074917352958 0.353558057983908 0.525282768930333 0.762670379465166 1.00005799 -4 14 27 28 1 -p 0.993559351491534 1 0.00020743 20.5537959188889 33.3997887244444 46.24578153 -4 5 6 7 2 -p 1.15970801397121 1 0.00020743 20.5537959188889 33.3997887244444 46.24578153 -4 1 3 4 2 -p 0.116123231090771 1 0.00034374 0.444788184444444 0.722565962222222 1.00034374 -4 3 4 5 2 -p 0.479195312360554 1 0.00034374 0.444788184444444 0.722565962222222 1.00034374 -2 1 2 -p 0.479195312360554 1 0.48181163 12.06882334 -2 4 87 -p 0.487616129060521 1 0.48181163 12.06882334 -2 3 6 -p 0.479195312360554 1 0.19391992 2.76255331 -2 8 5 -p 0.48746050605313 1 0.19391992 2.76255331 -4 6 8 9 7 -p 0.0126451864386091 1 0 0.04040404 0.065656565 0.09090909 -4 41 42 43 38 -p 0.0907182185186287 1 0 0.04040404 0.065656565 0.09090909 -4 7 11 12 10 -p 0.0100141437385746 1 0.09090909 0.0992313706870772 0.1044327961165 0.109634221545924 -4 38 39 40 35 -p 0.0830761196650173 1 0.09090909 0.0992313706870772 0.1044327961165 0.109634221545924 -4 10 14 15 13 -p 0.0131211764058463 1 0.109634221545924 0.141715980858847 0.161767080429423 0.18181818 -4 35 36 37 34 -p 0.0912033285610868 1 0.109634221545924 0.141715980858847 0.161767080429423 0.18181818 -4 16 17 18 13 -p 0.0100141437385746 1 0.6 0.61488194559564 0.624183161592915 0.633484377590191 -4 29 32 33 34 -p 0.0818275746163607 1 0.6 0.61488194559564 0.624183161592915 0.633484377590191 -4 16 20 21 19 -p 0.0282641106476433 1 0.27272727 0.31313131 0.338383835 0.36363636 -4 29 30 31 28 -p 0.101768141656819 1 0.27272727 0.31313131 0.338383835 0.36363636 -4 22 23 24 19 -p 0.0123430858112961 1 0.48389543156306 0.498673699188483 0.507910116454372 0.517146533720261 -4 25 26 27 28 -p 0.0901851416798969 1 0.48389543156306 0.498673699188483 0.507910116454372 0.517146533720261 -4 25 26 27 22 -p 0.0100141437385746 1 0.470926189373896 0.476690297013524 0.480292864288292 0.48389543156306 -4 20 23 24 25 -p 0.0826238169549619 1 0.470926189373896 0.476690297013524 0.480292864288292 0.48389543156306 -4 25 29 30 28 -p 0.0174479043018643 1 0.54545455 0.568931126274067 0.583603986445359 0.598276846616651 -4 20 21 22 19 -p 0.0954512381089906 1 0.54545455 0.568931126274067 0.583603986445359 0.598276846616651 -4 31 32 33 28 -p 0.0145366596294501 1 0.384100626478303 0.391167014710168 0.395583507355084 0.4 -4 14 17 18 19 -p 0.0924537686079844 1 0.384100626478303 0.391167014710168 0.395583507355084 0.4 -4 31 35 36 34 -p 0.0208727907440547 1 0.63636364 0.67676768 0.702020205 0.72727273 -4 14 15 16 11 -p 0.0986670460147735 1 0.63636364 0.67676768 0.702020205 0.72727273 -4 34 38 39 37 -p 0.0234240329310566 1 0.72727273 0.76767677 0.792929295 0.81818182 -4 11 12 13 10 -p 0.101260543756161 1 0.72727273 0.76767677 0.792929295 0.81818182 -4 40 41 42 37 -p 0.024253989995475 1 0.274729071771431 0.295540747580451 0.308548044961088 0.321555342341725 -4 7 8 9 10 -p 0.102059045339183 1 0.274729071771431 0.295540747580451 0.308548044961088 0.321555342341725 -4 43 44 45 40 -p 0.0298394754897539 1 0.2 0.233212920787303 0.253970996279367 0.274729071771431 -4 1 5 6 7 -p 0.10782216894249 1 0.2 0.233212920787303 0.253970996279367 0.274729071771431 -4 43 46 47 1 -p 0.0100141437385746 1 0.983770113025408 0.990983396125227 0.995491698062613 1 -4 1 2 3 4 -p 0.0866114516325893 1 0.983770113025408 0.990983396125227 0.995491698062613 1 -4 41 45 46 44 -p 0.535827250214245 1 0 0.262543302849429 0.426632867130322 0.590722431411216 -4 5 6 7 1 -p 0.48746050605313 1 0 0.262543302849429 0.426632867130322 0.590722431411216 -4 44 48 49 47 -p 0.371193265912547 1 0.590722431411216 0.772623573006231 0.886311786503115 1 -4 1 2 3 4 -p 0.48746050605313 1 0.590722431411216 0.772623573006231 0.886311786503115 1 -4 10 13 14 2 -p 0.491832010960765 1 0.66666667 0.814814816666667 0.907407408333333 1 -4 10 11 12 7 -p 0.491832010960765 1 0.408181166309187 0.597470239789688 0.715775910715 0.834081581640313 -4 53 57 58 56 -p 0.19353881501188 1 0.834081581640313 0.907823100911285 0.953911550455642 1 -4 7 8 9 6 -p 0.491832010960765 1 0.834081581640313 0.907823100911285 0.953911550455642 1 -2 56 59 -p 1.1635634912663 1 0 0.22601628 -2 114 108 -p 1.29421084167171 1 0 0.22601628 -2 63 64 -p 1.29421084167171 1 0 1 -2 17 1 -p 1.37624017537639 1 0 1 -2 65 4 -p 1.29421084167171 1 0.69078273 1 -2 223 220 -p 1.29421084167171 1 0.69078273 1 -4 1 3 4 2 -p 0.0102024340099068 1 0 0.0162441969550431 0.026396820051945 0.0365494431488469 -4 1 96 97 93 -p 0.139973228375296 1 0 0.0162441969550431 0.026396820051945 0.0365494431488469 -4 2 6 7 5 -p 0.00719256608931236 1 0.0365494431488469 0.0479879248699859 0.0551369759456978 0.0622860270214097 -4 93 94 95 90 -p 0.136874150683582 1 0.0365494431488469 0.0479879248699859 0.0551369759456978 0.0622860270214097 -4 5 9 10 8 -p 0.0158877696157515 1 0.0622860270214097 0.0901589039007832 0.107579451950392 0.125 -4 90 91 92 89 -p 0.145625993260439 1 0.0622860270214097 0.0901589039007832 0.107579451950392 0.125 -4 11 12 13 8 -p 0.012811812915812 1 0.80952381 0.830687832222222 0.843915346111111 0.85714286 -4 86 87 88 89 -p 0.142908047116627 1 0.80952381 0.830687832222222 0.843915346111111 0.85714286 -4 14 15 16 11 -p 0.0131649358728723 1 0.76190476 0.783068782222222 0.796296296111111 0.80952381 -4 83 84 85 86 -p 0.142955221294265 1 0.76190476 0.783068782222222 0.796296296111111 0.80952381 -4 17 18 19 14 -p 0.0129058892818563 1 0.71428571 0.735449732222222 0.748677246111111 0.76190476 -4 80 81 82 83 -p 0.142648894620346 1 0.71428571 0.735449732222222 0.748677246111111 0.76190476 -4 20 21 22 17 -p 0.0240656147159754 1 0.66666667 0.687830687777778 0.701058198888889 0.71428571 -4 77 78 79 80 -p 0.154165224242568 1 0.66666667 0.687830687777778 0.701058198888889 0.71428571 -4 23 24 25 20 -p 0.0516856684436831 1 0.61904762 0.640211642222222 0.653439156111111 0.66666667 -4 74 75 76 77 -p 0.181740501335652 1 0.61904762 0.640211642222222 0.653439156111111 0.66666667 -4 26 27 28 23 -p 0.0176969578995838 1 0.586390813604534 0.600904949780297 0.609976284890148 0.61904762 -4 71 72 73 74 -p 0.147875653149214 1 0.586390813604534 0.600904949780297 0.609976284890148 0.61904762 -4 29 30 31 26 -p 0.0129566826430349 1 0.57142857 0.57807845604646 0.582234634825497 0.586390813604534 -4 68 69 70 71 -p 0.143138347604315 1 0.57142857 0.57807845604646 0.582234634825497 0.586390813604534 -4 32 33 34 29 -p 0.0309178693073783 1 0.52380952 0.544973542222222 0.558201056111111 0.57142857 -4 65 66 67 68 -p 0.160915355289499 1 0.52380952 0.544973542222222 0.558201056111111 0.57142857 -4 35 36 37 32 -p 0.032717098436656 1 0.485827660893864 0.502708487163258 0.513259003581629 0.52380952 -4 62 63 64 65 -p 0.162793586009717 1 0.485827660893864 0.502708487163258 0.513259003581629 0.52380952 -4 38 39 40 35 -p 0.0132252381428934 1 0.47619048 0.480473671508384 0.483150666201124 0.485827660893864 -4 59 60 61 62 -p 0.143485238747357 1 0.47619048 0.480473671508384 0.483150666201124 0.485827660893864 -4 41 42 43 38 -p 0.0173727528111144 1 0.463237442359126 0.468994347977292 0.472592413988646 0.47619048 -4 56 57 58 59 -p 0.147625083719625 1 0.463237442359126 0.468994347977292 0.472592413988646 0.47619048 -4 44 45 46 41 -p 0.0284165077934162 1 0.42857143 0.443978546604056 0.453607994481591 0.463237442359126 -4 53 54 55 56 -p 0.158597700055786 1 0.42857143 0.443978546604056 0.453607994481591 0.463237442359126 -4 47 48 49 44 -p 0.155066143959365 1 0.38095238 0.402116402222222 0.415343916111111 0.42857143 -4 50 51 52 53 -p 0.285070167732101 1 0.38095238 0.402116402222222 0.415343916111111 0.42857143 -4 50 51 52 47 -p 0.0946171355284612 1 0.33333333 0.354497352222222 0.367724866111111 0.38095238 -4 47 48 49 50 -p 0.224617456245596 1 0.33333333 0.354497352222222 0.367724866111111 0.38095238 -4 53 54 55 50 -p 0.0066107385804159 1 0.306434487924756 0.318389528847087 0.325861429423543 0.33333333 -4 44 45 46 47 -p 0.136892657116145 1 0.306434487924756 0.318389528847087 0.325861429423543 0.33333333 -4 56 57 58 53 -p 0.00917079233790759 1 0.28571429 0.294923266855447 0.300678877390102 0.306434487924756 -4 41 42 43 44 -p 0.139450723554111 1 0.28571429 0.294923266855447 0.300678877390102 0.306434487924756 -4 59 60 61 56 -p 0.0790153552195648 1 0.23809524 0.259259262222222 0.272486776111111 0.28571429 -4 38 39 40 41 -p 0.209112928918533 1 0.23809524 0.259259262222222 0.272486776111111 0.28571429 -4 62 63 64 59 -p 0.0712640720644629 1 0.205761069651825 0.220131812028791 0.229113526014396 0.23809524 -4 35 36 37 38 -p 0.2013840503823 1 0.205761069651825 0.220131812028791 0.229113526014396 0.23809524 -4 65 66 67 62 -p 0.0470863886917556 1 0.19047619 0.197269469845255 0.20151526974854 0.205761069651825 -4 32 33 34 35 -p 0.177341855484047 1 0.19047619 0.197269469845255 0.20151526974854 0.205761069651825 -4 68 69 70 65 -p 0.0483599671907427 1 0.16442722501096 0.176004542783867 0.183240366391933 0.19047619 -4 29 30 31 32 -p 0.178611704610463 1 0.16442722501096 0.176004542783867 0.183240366391933 0.19047619 -4 71 72 73 68 -p 0.0225204236586315 1 0.14285714 0.152443844449316 0.158435534730138 0.16442722501096 -4 26 27 28 29 -p 0.152789892810286 1 0.14285714 0.152443844449316 0.158435534730138 0.16442722501096 -4 74 75 76 71 -p 0.158048850651588 1 0.0952381 0.116402117777778 0.129629628888889 0.14285714 -4 21 24 25 26 -p 0.288042623110037 1 0.0952381 0.116402117777778 0.129629628888889 0.14285714 -4 74 78 79 77 -p 0.226067424710723 1 0.916393161028006 0.947409028248872 0.966793945261913 0.986178862274954 -4 21 22 23 18 -p 0.356078068105251 1 0.916393161028006 0.947409028248872 0.966793945261913 0.986178862274954 -4 77 81 82 80 -p 0.0436015208786827 1 0.986178862274954 0.992321590152752 0.996160795076376 1 -4 18 19 20 17 -p 0.173830295687542 1 0.986178862274954 0.992321590152752 0.996160795076376 1 -4 80 84 85 83 -p 0.238780187870613 1 0 0.0800472771089406 0.130076825302028 0.180106373495116 -4 23 24 25 22 -p 0.368687641988891 1 0 0.0800472771089406 0.130076825302028 0.180106373495116 -4 86 87 88 83 -p 0.148542710287565 1 0.66666667 0.740740741111111 0.787037035555556 0.83333333 -4 19 20 21 22 -p 0.278470779086241 1 0.66666667 0.740740741111111 0.787037035555556 0.83333333 -4 89 90 91 86 -p 0.0593597856789316 1 0.5 0.574074075555556 0.620370372777778 0.66666667 -4 16 17 18 19 -p 0.189312894417765 1 0.5 0.574074075555556 0.620370372777778 0.66666667 -4 92 93 94 89 -p 0.0950407558434996 1 0.404244838774849 0.446802688208249 0.473401344104125 0.5 -4 13 14 15 16 -p 0.225130475221879 1 0.404244838774849 0.446802688208249 0.473401344104125 0.5 -4 95 96 97 92 -p 0.0520276445681425 1 0.33333333 0.364849556122155 0.384547197448502 0.404244838774849 -4 10 11 12 13 -p 0.182289090180814 1 0.33333333 0.364849556122155 0.384547197448502 0.404244838774849 -4 98 99 100 95 -p 0.0643348525940048 1 0.297103147762731 0.313205450979295 0.323269390489647 0.33333333 -4 7 8 9 10 -p 0.194592542695577 1 0.297103147762731 0.313205450979295 0.323269390489647 0.33333333 -4 101 102 103 98 -p 0.198723520355401 1 0.16666667 0.224638437894547 0.260870792828639 0.297103147762731 -4 4 5 6 7 -p 0.328728915617423 1 0.16666667 0.224638437894547 0.260870792828639 0.297103147762731 -4 104 105 106 101 -p 0.33368501608783 1 0 0.0740740755555555 0.120370372777778 0.16666667 -4 1 2 3 4 -p 0.463679967977529 1 0 0.0740740755555555 0.120370372777778 0.16666667 -2 104 107 -p 1.16356348726629 1 0 0.22601628 -2 16 15 -p 1.29385117113892 1 0 0.22601628 -4 115 116 117 114 -p 0.333684973238998 1 0.83333333 0.907407405555556 0.953703702777778 1 -4 27 28 29 2 -p 0.463679957269252 1 0.83333333 0.907407405555556 0.953703702777778 1 -4 118 119 120 115 -p 0.198723443402496 1 0.702896862227506 0.760868625681948 0.797100977840974 0.83333333 -4 24 25 26 27 -p 0.328728870023658 1 0.702896862227506 0.760868625681948 0.797100977840974 0.83333333 -4 121 122 123 118 -p 0.0643348105808322 1 0.66666667 0.682768977656669 0.692832919942088 0.702896862227506 -4 21 22 23 24 -p 0.194592548760773 1 0.66666667 0.682768977656669 0.692832919942088 0.702896862227506 -4 124 125 126 121 -p 0.0520275907081086 1 0.59575517380927 0.627271394338483 0.646969032169242 0.66666667 -4 18 19 20 21 -p 0.182289084030003 1 0.59575517380927 0.627271394338483 0.646969032169242 0.66666667 -4 127 128 129 124 -p 0.0950407922439403 1 0.5 0.542557855026342 0.569156514417806 0.59575517380927 -4 15 16 17 18 -p 0.225130469245067 1 0.5 0.542557855026342 0.569156514417806 0.59575517380927 -4 130 131 132 127 -p 0.0593598226920847 1 0.33333333 0.407407405555556 0.453703702777778 0.5 -4 12 13 14 15 -p 0.189312890373394 1 0.33333333 0.407407405555556 0.453703702777778 0.5 -4 133 134 135 130 -p 0.148542739809493 1 0.16666667 0.240740741111111 0.287037035555556 0.33333333 -4 7 10 11 12 -p 0.278470770865577 1 0.16666667 0.240740741111111 0.287037035555556 0.33333333 -4 133 137 138 136 -p 0.238780122918066 1 0.819893620897672 0.899940900498707 0.949970450249353 1 -4 7 8 9 6 -p 0.368687609368394 1 0.819893620897672 0.899940900498707 0.949970450249353 1 -4 139 140 141 136 -p 0.0203810482435628 1 0.95238095 0.973544972222222 0.986772486111111 1 -4 82 83 84 85 -p 0.150658498666575 1 0.95238095 0.973544972222222 0.986772486111111 1 -4 142 143 144 139 -p 0.106316121925179 1 0.929879242695092 0.939880001497273 0.946130475748637 0.95238095 -4 77 80 81 82 -p 0.236594447496594 1 0.929879242695092 0.939880001497273 0.946130475748637 0.95238095 -4 142 146 147 145 -p 0.131294887429856 1 0.125 0.148192001327254 0.162687002156788 0.177182002986322 -4 77 78 79 76 -p 0.261443206217911 1 0.125 0.148192001327254 0.162687002156788 0.177182002986322 -4 148 149 150 145 -p 0.157479484103826 1 0.85714286 0.878306877777778 0.891534388888889 0.9047619 -4 73 74 75 76 -p 0.287484095373187 1 0.85714286 0.878306877777778 0.891534388888889 0.9047619 -4 151 152 153 148 -p 0.0786145930747196 1 0.80952381 0.830687832222222 0.843915346111111 0.85714286 -4 70 71 72 73 -p 0.208682081682716 1 0.80952381 0.830687832222222 0.843915346111111 0.85714286 -4 154 155 156 151 -p 0.0154852226819401 1 0.804942507297722 0.806978641832068 0.808251225916034 0.80952381 -4 67 68 69 70 -p 0.145762397227318 1 0.804942507297722 0.806978641832068 0.808251225916034 0.80952381 -4 157 158 159 154 -p 0.0945408909987144 1 0.76190476 0.781032647687876 0.792987577492799 0.804942507297722 -4 64 65 66 67 -p 0.224593593898088 1 0.76190476 0.781032647687876 0.792987577492799 0.804942507297722 -4 160 161 162 157 -p 0.0866176631184359 1 0.71428571 0.735449732222222 0.748677246111111 0.76190476 -4 61 62 63 64 -p 0.216648713372557 1 0.71428571 0.735449732222222 0.748677246111111 0.76190476 -4 163 164 165 160 -p 0.0105565828686949 1 0.688716234519205 0.700080445844003 0.707183077922002 0.71428571 -4 58 59 60 61 -p 0.140830255173302 1 0.688716234519205 0.700080445844003 0.707183077922002 0.71428571 -4 166 167 168 163 -p 0.00909716365124424 1 0.66666667 0.67646647645298 0.682591355486093 0.688716234519205 -4 55 56 57 58 -p 0.139378346019285 1 0.66666667 0.67646647645298 0.682591355486093 0.688716234519205 -4 169 170 171 166 -p 0.0979604971496308 1 0.61904762 0.640211642222222 0.653439156111111 0.66666667 -4 50 53 54 55 -p 0.228168576880219 1 0.61904762 0.640211642222222 0.653439156111111 0.66666667 -4 169 173 174 172 -p 0.154416086472857 1 0.406675816552983 0.439940151054413 0.460730360117807 0.4815205691812 -4 50 51 52 49 -p 0.284409917969825 1 0.406675816552983 0.439940151054413 0.460730360117807 0.4815205691812 -4 175 176 177 172 -p 0.0457616508821367 1 0.52380952 0.544973542222222 0.558201056111111 0.57142857 -4 46 47 48 49 -p 0.175755097932461 1 0.52380952 0.544973542222222 0.558201056111111 0.57142857 -4 178 179 180 175 -p 0.00473056757536767 1 0.520588390320385 0.522020003511325 0.522914761755662 0.52380952 -4 43 44 45 46 -p 0.135014098771924 1 0.520588390320385 0.522020003511325 0.522914761755662 0.52380952 -4 181 182 183 178 -p 0.0408825133547353 1 0.47619048 0.495922884586838 0.508255637453611 0.520588390320385 -4 40 41 42 43 -p 0.171087993171618 1 0.47619048 0.495922884586838 0.508255637453611 0.520588390320385 -4 184 185 186 181 -p 0.0208526534721344 1 0.439226064907278 0.455654693837377 0.465922586918688 0.47619048 -4 37 38 39 40 -p 0.151058000508972 1 0.439226064907278 0.455654693837377 0.465922586918688 0.47619048 -4 187 188 189 184 -p 0.00977064619936385 1 0.42857143 0.433306823292123 0.436266444099701 0.439226064907278 -4 34 35 36 37 -p 0.140028580180301 1 0.42857143 0.433306823292123 0.436266444099701 0.439226064907278 -4 190 191 192 187 -p 0.020215307853185 1 0.400518874948611 0.412986677193673 0.420779053596836 0.42857143 -4 31 32 33 34 -p 0.150455967263287 1 0.400518874948611 0.412986677193673 0.420779053596836 0.42857143 -4 193 194 195 190 -p 0.0101913429976726 1 0.38095238 0.389648599977161 0.395083737462886 0.400518874948611 -4 28 29 30 31 -p 0.140437329977215 1 0.38095238 0.389648599977161 0.395083737462886 0.400518874948611 -4 196 197 198 193 -p 0.0514490945944431 1 0.33333333 0.354497352222222 0.367724866111111 0.38095238 -4 25 26 27 28 -p 0.181474678533149 1 0.33333333 0.354497352222222 0.367724866111111 0.38095238 -4 199 200 201 196 -p 0.0240748154949245 1 0.28571429 0.306878307777778 0.320105818888889 0.33333333 -4 22 23 24 25 -p 0.154039614728706 1 0.28571429 0.306878307777778 0.320105818888889 0.33333333 -4 202 203 204 199 -p 0.00953121483394881 1 0.23809524 0.259259262222222 0.272486776111111 0.28571429 -4 19 20 21 22 -p 0.139722452403843 1 0.23809524 0.259259262222222 0.272486776111111 0.28571429 -4 205 206 207 202 -p 0.00935291145642339 1 0.205967571246725 0.220246535137069 0.229170887568535 0.23809524 -4 14 17 18 19 -p 0.139551383450078 1 0.205967571246725 0.220246535137069 0.229170887568535 0.23809524 -4 205 209 210 208 -p 0.0039727489325422 1 0.875 0.879738349805091 0.882699818433273 0.885661287061455 -4 14 15 16 11 -p 0.134203962368407 1 0.875 0.879738349805091 0.882699818433273 0.885661287061455 -4 208 212 213 211 -p 0.0152958108301195 1 0.885661287061455 0.903947005816603 0.915375580038571 0.926804154260539 -4 11 12 13 8 -p 0.145040560067364 1 0.885661287061455 0.903947005816603 0.915375580038571 0.926804154260539 -4 211 215 216 214 -p 0.0158385684514437 1 0.926804154260539 0.942982249792768 0.953093559500411 0.963204869208055 -4 8 9 10 5 -p 0.14554695168604 1 0.926804154260539 0.942982249792768 0.953093559500411 0.963204869208055 -4 214 218 219 217 -p 0.00713462697123868 1 0.963204869208055 0.969837674155422 0.973983177247527 0.978128680339632 -4 5 6 7 1 -p 0.136839207718983 1 0.963204869208055 0.969837674155422 0.973983177247527 0.978128680339632 -4 217 221 222 220 -p 0.0101272646043819 1 0.978128680339632 0.987849266855351 0.993924633427675 1 -4 1 2 3 4 -p 0.139934409862094 1 0.978128680339632 0.987849266855351 0.993924633427675 1 -2 239 1 -p 1.29421084167171 1 0.69078275 1 -2 1 2 -p 1.29421084167171 1 0.69078275 1 -2 3 11 -p 1.29421084167171 1 0 1 -2 16 18 -p 1.371690566742 1 0 1 -4 16 18 19 17 -p 0.193536381058084 1 0 0.0737400044246074 0.119827507189987 0.165915009955367 -4 1 13 14 10 -p 0.491832010960765 1 0 0.0737400044246074 0.119827507189987 0.165915009955367 -4 10 11 12 7 -p 0.491832010960765 1 0.165915009955367 0.355206139961675 0.473513096215617 0.59182005246956 -4 6 8 9 7 -p 0.491832010960765 1 0 0.148148146666667 0.240740738333333 0.33333333 -4 23 27 28 26 -p 0.371208910108275 1 0 0.18190896649819 0.295602070559559 0.409295174620928 -4 2 10 11 7 -p 0.48746050605313 1 0 0.18190896649819 0.295602070559559 0.409295174620928 -4 26 30 31 29 -p 0.535810994179935 1 0.409295174620928 0.671830652567182 0.835915326283591 1 -4 7 8 9 6 -p 0.48746050605313 1 0.409295174620928 0.671830652567182 0.835915326283591 1 -4 32 33 34 29 -p 0.0297091816694998 1 0.9 0.944444444444444 0.972222222222222 1 -4 37 38 39 40 -p 0.322963115142009 1 0.9 0.944444444444444 0.972222222222222 1 -4 35 36 37 32 -p 0.0297091816694998 1 0.880853970078994 0.889363316710552 0.894681658355276 0.9 -4 32 35 36 37 -p 0.314379016434775 1 0.880853970078994 0.889363316710552 0.894681658355276 0.9 -4 35 39 40 38 -p 0.0297091816694998 1 0.2 0.288888888888889 0.344444444444444 0.4 -4 32 33 34 31 -p 0.325375521832221 1 0.2 0.288888888888889 0.344444444444444 0.4 -4 41 42 43 38 -p 0.0391015526477439 1 0.7 0.744444444444444 0.772222222222222 0.8 -4 26 29 30 31 -p 0.335210119437592 1 0.7 0.744444444444444 0.772222222222222 0.8 -4 41 45 46 44 -p 0.0297091816694998 1 0.482462206547696 0.49538578078318 0.503463014680358 0.511540248577535 -4 26 27 28 23 -p 0.32042231619826 1 0.482462206547696 0.49538578078318 0.503463014680358 0.511540248577535 -4 44 48 49 47 -p 0.0297091816694998 1 0.511540248577535 0.519166608587072 0.523933083593033 0.528699558598993 -4 23 24 25 22 -p 0.315866023617048 1 0.511540248577535 0.519166608587072 0.523933083593033 0.528699558598993 -4 50 51 52 47 -p 0.0297091816694998 1 0.439635627177706 0.466464237320948 0.483232118660474 0.5 -4 17 20 21 22 -p 0.327619839327934 1 0.439635627177706 0.466464237320948 0.483232118660474 0.5 -4 50 54 55 53 -p 0.0297091816694998 1 0.6 0.606548760904639 0.610641736470038 0.614734712035438 -4 17 18 19 16 -p 0.323711313932535 1 0.6 0.606548760904639 0.610641736470038 0.614734712035438 -4 56 57 58 53 -p 0.0297091816694998 1 0.3 0.344444444444444 0.372222222222222 0.4 -4 13 14 15 16 -p 0.330400343804413 1 0.3 0.344444444444444 0.372222222222222 0.4 -4 59 60 61 56 -p 0.0297091816694998 1 0.2 0.244444444444444 0.272222222222222 0.3 -4 8 11 12 13 -p 0.33298724365516 1 0.2 0.244444444444444 0.272222222222222 0.3 -4 59 63 64 62 -p 0.0297091816694998 1 0.674965095271805 0.695140378051064 0.7077499297881 0.720359481525137 -4 8 9 10 5 -p 0.333731134626364 1 0.674965095271805 0.695140378051064 0.7077499297881 0.720359481525137 -4 62 66 67 65 -p 0.033371039475665 1 0.720359481525137 0.755755267513965 0.777877633756982 0.8 -4 5 6 7 4 -p 0.342829841077071 1 0.720359481525137 0.755755267513965 0.777877633756982 0.8 -4 2 68 69 65 -p 0.0297091816694998 1 0 0.00476194067140462 0.00773815359103251 0.0107143665106604 -4 1 2 3 4 -p 0.315076409053202 1 0 0.00476194067140462 0.00773815359103251 0.0107143665106604 -2 9 4 -p 0.48746050605313 1 0 2.49917007 -2 1 2 -p 0.538475210293698 1 0 2.49917007 -2 3 6 -p 0.491832010960765 1 0 1.72905437 -2 1 2 -p 0.565929082906187 1 0 1.72905437 -2 3 6 -p 0.491737079556256 1 0.01103422 1.98405473 -2 86 85 -p 0.553631726230648 1 0.01103422 1.98405473 -2 1 2 -p 0.491832010960765 1 0 1.72904906 -2 1 27 -p 0.564374454551346 1 0 1.72904906 -4 2 4 5 3 -p 0.491832010960765 1 5.543e-005 0.444499874444444 0.722277652222222 1.00005543 -4 8 9 10 5 -p 0.993554176191288 1 5.543e-005 0.444499874444444 0.722277652222222 1.00005543 -2 3 6 -p 0.491832010960765 1 0.17394647 1.82447971 -2 1 2 -p 0.53934960661273 1 0.17394647 1.82447971 -2 23 26 -p 0.491737079556256 1 0.01152171 2.07179401 -2 17 3 -p 0.553603573335566 1 0.01152171 2.07179401 -4 26 28 29 27 -p 0.491737079556256 1 6.281e-005 0.444507254444444 0.722285032222222 1.00006281 -4 1 2 3 4 -p 0.993558382591488 1 6.281e-005 0.444507254444444 0.722285032222222 1.00006281 -2 1 5 -p 0.993558382591488 1 3.88e-005 8.09360706 -2 2 28 -p 1.15846053203392 1 3.88e-005 8.09360706 -4 3 4 5 2 -p 0.0892442312388724 1 6.281e-005 0.444507254444444 0.722285032222222 1.00006281 -4 6 9 10 4 -p 0.993558382591487 1 3.88e-005 3.59718024888889 5.84539365444444 8.09360706 -4 1 11 12 8 -p 1.15845658953373 1 3.88e-005 3.59718024888889 5.84539365444444 8.09360706 -2 1 2 -p 1e-005 1 0 1 -2 6 3 -p 0.071013893456975 1 0 1 -2 5 8 -p 0.084726111024273 1 0 1 -4 1 7 8 6 -p 0.0892443514709342 1 5.543e-005 0.444499874444444 0.722277652222222 1.00005543 -4 1 2 3 4 -p 0.406877815604543 1 5.543e-005 0.444499874444444 0.722277652222222 1.00005543 -4 1 3 4 2 -p 0.050748815742574 1 0.00034374 0.444788184444444 0.722565962222222 1.00034374 -4 5 8 9 10 -p 0.111733763715085 1 0.00034374 0.444788184444444 0.722565962222222 1.00034374 -4 1 6 7 5 -p 0.084726111024273 1 8.022e-005 0.444524664444444 0.722302442222222 1.00008022 -4 8 9 10 5 -p 0.309785921122007 1 8.022e-005 0.444524664444444 0.722302442222222 1.00008022 -14 2 9 10 11 12 13 14 15 16 17 18 19 20 8 -p 0.0847263287321059 1 5.799e-005 0.0203961823247482 0.0387005554170216 0.0551744912000676 0.0716484269831136 0.0933408333803895 0.118051737054959 0.150987683180219 0.200409490529357 0.274542201553064 0.385741268088625 0.552539867891966 0.776298928945983 1.00005799 -14 13 16 17 18 19 20 21 22 23 24 25 26 27 28 -p 0.399889837401766 1 5.799e-005 0.0203961823247482 0.0387005554170216 0.0551744912000676 0.0716484269831136 0.0933408333803895 0.118051737054959 0.150987683180219 0.200409490529357 0.274542201553064 0.385741268088625 0.552539867891966 0.776298928945983 1.00005799 -4 4 6 7 5 -p 0.993554176191288 1 4.95e-005 4.75635840666667 7.72905147333333 10.70174454 -4 5 6 7 1 -p 1.17116468916678 1 4.95e-005 4.75635840666667 7.72905147333333 10.70174454 -4 1 4 5 3 -p 0.48746050605313 1 8.022e-005 0.444524664444444 0.722302442222222 1.00008022 -4 8 11 12 2 -p 0.993553093791236 1 0.00020743 20.5537959188889 33.3997887244444 46.24578153 -4 5 6 7 1 -p 1.14573287044676 1 0.00020743 20.5537959188889 33.3997887244444 46.24578153 -4 1 3 4 2 -p 0.11612348194347 1 0.00034374 0.444788184444444 0.722565962222222 1.00034374 -4 41 42 43 44 -p 0.479195314760554 1 0.00034374 0.444788184444444 0.722565962222222 1.00034374 -4 10 11 12 2 -p 0.99355275199122 1 0.00020743 20.5537959188889 33.3997887244444 46.24578153 -4 13 14 15 1 -p 1.11189992389557 1 0.00020743 20.5537959188889 33.3997887244444 46.24578153 -15 2 4 5 6 7 8 9 10 11 12 13 14 15 16 3 -p 0.487616129060521 1 5.799e-005 0.00759597456829301 0.015133959136586 0.022671943704879 0.030209928273172 0.0402605743642294 0.0553365435008154 0.0779504972056945 0.111871427763013 0.162752823598991 0.239074917352958 0.353558057983908 0.525282768930333 0.762670379465166 1.00005799 -2 1 2 -p 0.487616129060521 1 0.48200245 12.07364253 -2 1 44 -p 0.499995725765673 1 0.48200245 12.07364253 -2 40 41 -p 0.479195314760554 1 0.19391945 2.76255209 -2 6 3 -p 0.516794096330643 1 0.19391945 2.76255209 -16 1 4 5 6 7 8 9 10 11 12 13 14 15 16 17 3 -p 0.269643324107369 1 0 0.0833333333333333 0.166666666666667 0.241666666666667 0.309166666666667 0.376666666666666 0.444166666666666 0.511666666666666 0.579166666666666 0.646666666666666 0.714166666666666 0.781666666666666 0.849166666666666 0.916666666666666 0.958333333333333 1 -16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -p 1.29421084167171 1 0 0.0833333333333333 0.166666666666667 0.241666666666667 0.309166666666667 0.376666666666666 0.444166666666666 0.511666666666666 0.579166666666666 0.646666666666666 0.714166666666666 0.781666666666666 0.849166666666666 0.916666666666666 0.958333333333333 1 -7 8 9 10 11 12 13 5 -p 0.583442097712011 1 0 0.166666666666667 0.333333333333333 0.5 0.666666666666667 0.833333333333333 1 -4 1 3 4 2 -p 0.119318360526317 1 0 0.444444444444444 0.722222222222222 1 -4 1 2 3 4 -p 0.119318364162317 1 0 0.444444444444444 0.722222222222222 1 -23 2 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 5 -p 0.119318360526317 1 0 0.20308360905 0.385858857195 0.5503565805255 0.69840453152295 0.831647687420655 0.96489084331836 1.09813399921607 1.23137715511377 1.3512959954217 1.45922295169885 1.56714990797599 1.67507686425313 1.78300382053027 1.89093077680741 1.99885773308455 2.10678468936169 2.24371987282383 2.38942126379797 2.52055251567469 2.68773707533994 2.84819156766997 3.00864606 -23 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 -p 0.126714581540419 1 0 0.20308360905 0.385858857195 0.5503565805255 0.69840453152295 0.831647687420655 0.96489084331836 1.09813399921607 1.23137715511377 1.3512959954217 1.45922295169885 1.56714990797599 1.67507686425313 1.78300382053027 1.89093077680741 1.99885773308455 2.10678468936169 2.24371987282383 2.38942126379797 2.52055251567469 2.68773707533994 2.84819156766997 3.00864606 -4 1 12 13 9 -p 0.0530907785216762 1 0 0.444444444444444 0.722222222222222 1 -4 1 3 4 2 -p 0.102850929435156 1 0 0.444444444444444 0.722222222222222 1 -4 1 2 3 4 -p 0.110529385198731 1 0 0.444444444444444 0.722222222222222 1 -4 5 28 29 27 -p 0.102850929435156 1 0 0.444444444444444 0.722222222222222 1 -4 17 18 19 11 -p 0.110528116198682 1 0 0.444444444444444 0.722222222222222 1 -7 3 9 10 11 12 13 1 -p 0.0537059286378936 1 0.5 0.583333333333333 0.666666666666667 0.75 0.833333333333333 0.916666666666667 1 -7 2 4 5 6 7 8 3 -p 0.0537059286378936 1 0 0.0833333333333333 0.166666666666667 0.25 0.333333333333333 0.416666666666667 0.5 -2 1 2 -p 0.0537059286378936 1 0 1 -2 1 8 -p 0.0644410942697753 1 0 1 -7 1 3 4 5 6 7 2 -p 0.0537059286378936 1 0 0.0833333333333333 0.166666666666667 0.25 0.333333333333333 0.416666666666667 0.5 -7 11 12 13 14 15 16 5 -p 0.102850929435156 1 0 0.0833333333333333 0.166666666666667 0.25 0.333333333333333 0.416666666666667 0.5 -7 2 9 10 11 12 13 8 -p 0.0537059286378936 1 0.5 0.583333333333333 0.666666666666667 0.75 0.833333333333333 0.916666666666667 1 -7 5 6 7 8 9 10 1 -p 0.102850929435156 1 0.5 0.583333333333333 0.666666666666667 0.75 0.833333333333333 0.916666666666667 1 -27 4 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 17 -p 0.102850929435156 1 0 0.182497943835 0.3467460932865 0.49456942779285 0.627610428848565 0.747347329798709 0.867084230748852 0.986821131698996 1.09458434255412 1.19157123232374 1.28855812209336 1.38554501186297 1.48253190163259 1.57951879140221 1.67650568117182 1.77349257094144 1.87047946071105 1.96746635048067 2.06445324025029 2.1614401300199 2.28294164925907 2.41387395044806 2.53171302151814 2.64955209258823 2.80200579261216 2.90304358630608 3.00408138 -27 18 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4 -p 0.124035321023271 1 0 0.182497943835 0.3467460932865 0.49456942779285 0.627610428848565 0.747347329798709 0.867084230748852 0.986821131698996 1.09458434255412 1.19157123232374 1.28855812209336 1.38554501186297 1.48253190163259 1.57951879140221 1.67650568117182 1.77349257094144 1.87047946071105 1.96746635048067 2.06445324025029 2.1614401300199 2.28294164925907 2.41387395044806 2.53171302151814 2.64955209258823 2.80200579261216 2.90304358630608 3.00408138 -4 3 4 5 2 -p 0.0530907785216762 1 0 0.444444444444444 0.722222222222222 1 -2 1 2 -p 1e-005 1 0 1 -2 14 17 -p 0.622517224554979 1 0 55.31688457 -2 1 27 -p 0.623547928988935 1 0 55.31688457 -4 17 19 20 18 -p 0.0176293168373448 1 0 0.333333333333333 0.666666666666667 1 -4 1 16 17 12 -p 0.112215331329941 1 0 0.333333333333333 0.666666666666667 1 -2 18 1 -p 0.622517224554979 1 10.79509318 65.98696054 -2 1 2 -p 0.637818569109754 1 10.79509318 65.98696054 -5 12 13 14 15 9 -p 0.112215331329941 1 0 0.166666666666667 0.388888888888889 0.694444444444444 1 -2 3 6 -p 0.637818569109754 1 0 2.72494532 -2 1 2 -p 0.659847044807075 1 0 2.72494532 -8 1 3 4 5 6 7 8 2 -p 0.0179392128520661 1 0 0.10935 0.18906615 0.29841615 0.46244115 0.70847865 0.854239325 1 -8 27 28 29 30 31 32 33 26 -p 0.0887162302137796 1 0 0.10935 0.18906615 0.29841615 0.46244115 0.70847865 0.854239325 1 -4 2 10 11 9 -p 0.112215331329941 1 0 0.444444444444444 0.722222222222222 1 -4 3 4 5 1 -p 0.500365121766059 1 0 0.444444444444444 0.722222222222222 1 -2 25 26 -p 0.623547928988935 1 0.49271381 3.01761452 -2 6 3 -p 0.637219664481308 1 0.49271381 3.01761452 -Surfaces 83 -9 1 1 0 0 3 4 6 35 4 32 25.9893209044264 1.24079115393441 1.41444155318237 1 25.9893209144264 1.2822751379048 1.36967410805603 0.97693039 25.9893209244264 1.3627299827262 1.27401077351226 0.93268382 25.9893209444264 1.47127512888182 1.11565706899086 0.87174635 25.9893209744264 1.58512328428931 0.880018332248626 0.80045415 25.9893210044264 1.66384068402819 0.618812053391994 0.73828835 25.9893210344265 1.70030219276002 0.337462372068602 0.68449316 25.9893210644265 1.6897855082605 0.0825492001808764 0.64415145 25.9893210844265 1.64816147328347 -0.137692002530019 0.61400143 25.9893211144265 1.57851686697552 -0.358006185714381 0.58719589 25.9893211344265 1.4795426112745 -0.574296813547634 0.56361201 25.9893211644265 1.34624978294343 -0.775165883678402 0.54384264 25.9893211844265 1.18120730410433 -0.954314886817523 0.52765158 25.9893211944265 0.991078565083704 -1.11361808489402 0.51420981 25.9893212144265 0.778331953498782 -1.24885322531734 0.5034512 25.9893212244265 0.54465051770951 -1.3478598540199 0.49594024 25.9893212344265 0.296990527996292 -1.40701193782948 0.49158247 25.9893212344265 0.0427271076694286 -1.43268506804889 0.4897189 25.9893212344265 -0.213044431039067 -1.42410571364139 0.49034009 25.9893212244265 -0.505014806086915 -1.36465336881755 0.49468841 25.9893212144265 -0.816603772766596 -1.2326388005472 0.50470302 25.9893211944265 -1.09270254090058 -1.04429528560136 0.51991389 25.9893211644265 -1.32308762884329 -0.810072817306392 0.54054774 25.9893211344265 -1.47954387927456 -0.574297145927649 0.56361201 25.9893211144265 -1.57851818297559 -0.358006540334397 0.58719589 25.9893210844265 -1.64816283828353 -0.137692372790036 0.61400143 25.9893210644265 -1.68978692326057 0.0825488205708584 0.64415145 25.9893210344265 -1.70030366476009 0.337461990098584 0.68449316 25.9893210044264 -1.66384222002826 0.618811679601976 0.73828835 25.9893209744264 -1.58512487828939 0.880017976148609 0.80045415 25.9893209444264 -1.48447892450896 1.08833140069297 0.86283482 25.9893209244264 -1.37982669253825 1.24907096232768 0.92252758 25.9893209144264 -1.30169948982741 1.3465796719591 0.96586875 25.9893209144264 -1.26129280790819 1.39231875213159 0.98846519 25.9893209044264 -1.2407928679345 1.41444127418235 1 -26.7065109984911 1.21027048648476 1.41444154918237 1 26.7213278091949 1.24558332416203 1.37381204925257 0.97946655 26.7515571406307 1.31363351739424 1.28736330014647 0.94008423 26.7975896728172 1.40427928769968 1.14505414838715 0.88584592 26.8591513857412 1.49686369309721 0.934447565713876 0.82239124 26.9211453286857 1.55749285597694 0.702566418670113 0.76705964 26.9824908715995 1.58031314006084 0.454154142881163 0.71917843 27.0341360340525 1.56274270022629 0.229643645327487 0.68327169 27.076423046061 1.51887566714272 0.0360118875004728 0.65643622 27.1170321779899 1.45039909889026 -0.157107980142228 0.63257754 27.1553807398113 1.3563338224224 -0.346337304340138 0.61158636 27.1896150214374 1.23199119851644 -0.522459168235478 0.59399033 27.2192011628426 1.07941564726949 -0.679799770688755 0.57957924 27.2449048240635 0.904807393216043 -0.819594031988626 0.56761519 27.2662717950784 0.710263977475727 -0.938342486678874 0.55803933 27.2816287558078 0.496798980586684 -1.02553062771009 0.55135409 27.2907106162391 0.270770031540886 -1.07764181518524 0.54747539 27.2946338064255 0.0389720961310751 -1.10024787025897 0.54581669 27.2933234263632 -0.194261222626913 -1.09269727590033 0.54636959 27.2842245359311 -0.460730032143501 -1.04026799241008 0.55023988 27.2637480049585 -0.745357876112598 -0.924013897068303 0.55915354 27.2338661935392 -0.99827445118549 -0.758423352063175 0.57269219 27.1955189017178 -1.21057690449931 -0.552832445788131 0.59105766 27.1553807398113 -1.35633539842247 -0.346337463440146 0.61158636 27.1170321779899 -1.45040068989033 -0.157108154972237 0.63257754 27.076423046061 -1.5188772841428 0.0360116864604632 0.65643622 27.0341360340525 -1.56274434022637 0.229643430607477 0.68327169 26.9824908815995 -1.58031480806092 0.454153906161152 0.71917843 26.9211453286857 -1.55749457897702 0.702566171410101 0.76705964 26.8591513857412 -1.49686545709729 0.934447301413863 0.82239124 26.8047982131595 -1.4150717702123 1.12039302921581 0.87791409 26.7588567809774 -1.32797084307523 1.2647962700746 0.93104451 26.7286549295429 -1.2620551999444 1.3528579812573 0.96962097 26.7138425388394 -1.22773734731439 1.39433727022746 0.98973327 26.7065109884911 -1.21027243248485 1.41444127718235 1 -28.1506003870817 1.1255888294626 1.41444154018237 1 28.1838979086633 1.1508387036619 1.38202397364261 0.98453887 28.2507726118396 1.19906384495247 1.3134474553854 0.95488505 28.3499580765507 1.26229193995565 1.20112752105049 0.91404507 28.4778294026243 1.32465551091776 1.03503591816157 0.86626542 28.6013833784928 1.36213596169798 0.852541449963544 0.82460223 28.7187943440695 1.37034541108791 0.656740721763509 0.78854897 28.8140999785962 1.34829534004059 0.478493511307221 0.76151217 28.8898424021938 1.30652540405662 0.323759373307744 0.74130578 28.9607162955601 1.24513548614076 0.169063565130088 0.72334085 29.0260289786623 1.16333549725547 0.0168410757499081 0.70753505 29.0830505013707 1.0564882841805 -0.126562545831398 0.69428572 29.1313840436664 0.925640577995566 -0.255916218385368 0.68343456 29.172682565628 0.776320905553263 -0.371242212553058 0.67442596 29.2065335872358 0.610076253717066 -0.469747313181799 0.66721559 29.2305984583789 0.426973807490167 -0.542714468587553 0.66218179 29.24472746905 0.232731934034173 -0.586447823104776 0.65926123 29.2508075893387 0.0336059541961971 -0.605421909825996 0.65801228 29.2487783392424 -0.166911773857883 -0.599089180955208 0.6584286 29.234644708571 -0.396046505331199 -0.554983562510303 0.66134282 29.202557877047 -0.640191804457478 -0.457692937649247 0.66805456 29.1550255647893 -0.856629817587731 -0.320151179026364 0.6782488 29.0927656018322 -1.03819581031165 -0.150996809981963 0.6920775 29.0260290386623 -1.16321649124982 0.0168411919799137 0.70753505 28.9607163555602 -1.24502744813563 0.169063681600094 0.72334085 28.8898424721938 -1.30642885505204 0.323759452207748 0.74130578 28.8141000485962 -1.34821061203656 0.478493575457224 0.76151217 28.7187944240695 -1.37027489908456 0.65674073758351 0.78854897 28.6013834684928 -1.36208207569542 0.852541430373543 0.82460223 28.4778295026243 -1.32461812391598 1.03503582516156 0.86626542 28.365206657275 -1.26961740730359 1.18132183610977 0.90807262 28.2667104025966 -1.20914361243124 1.29539928852816 0.94807839 28.2002362094393 -1.16257346221927 1.36526994584684 0.97712541 28.1671195178663 -1.13810082605689 1.39835883341848 0.99226943 28.1506004970817 -1.12559133446272 1.41444128718235 1 -30.3018881792624 0.844080731411682 1.41444150818236 1 30.3352791008484 0.861588063783235 1.39431348522633 0.99222874 30.4008019839605 0.89546851587247 1.35148542719211 0.97732378 30.4943660884046 0.941799190673059 1.27983350878883 0.95679629 30.6090238638506 0.991697733903113 1.16948537054757 0.9327807 30.713902088832 1.02663141576237 1.04380938057828 0.91183944 30.8085964133297 1.04238241951051 0.903889975212468 0.89371791 30.8821451868231 1.03535339717665 0.771378608878516 0.88012835 30.9385996295046 1.01174128005513 0.652922561462156 0.86997197 30.9899002119412 0.972524739062444 0.532391080447218 0.86094222 31.0359241841272 0.91677449101445 0.411609457150399 0.85299772 31.0751611859909 0.839442628421384 0.294677541886432 0.84633818 31.1077531275389 0.740495013681624 0.187014432592708 0.84088404 31.1351300888393 0.625032615127455 0.0900692181980581 0.83635602 31.1572539098901 0.494174422372024 0.00632167723026354 0.83273186 31.172811930629 0.347181239430223 -0.0565969960882129 0.83020171 31.1818814710598 0.189545165882912 -0.0945044870587221 0.82873374 31.1857697012445 0.0274447231135543 -0.110967986580696 0.82810598 31.1844729811829 -0.136091540084001 -0.105477300889903 0.82831523 31.1754141407526 -0.32246090643607 -0.067120530118054 0.82978002 31.1546700997674 -0.518456339435354 0.0167712304665907 0.83315355 31.1234775582858 -0.68841401761791 0.133779782114198 0.8382775 31.0817606763043 -0.82633217441867 0.275010207732283 0.84522825 31.0359242641272 -0.916659908829007 0.411609880910419 0.85299772 30.9899003119412 -0.97241875496741 0.53239153125724 0.86094222 30.9385997295046 -1.01164467305054 0.652922972232176 0.86997197 30.8821452968231 -1.03526682717253 0.771379014828535 0.88012835 30.8085965433297 -1.04230848350699 0.903890315232484 0.89371791 30.713902238832 -1.02657314875961 1.0438096705783 0.91183944 30.6090240238506 -0.991655972121129 1.16948553054758 0.9327807 30.5083829090704 -0.947824774759259 1.26634406214811 0.95379434 30.4161223646882 -0.903003212690349 1.33975319063486 0.97390253 30.3514747916176 -0.869933533189624 1.38372764772353 0.9885025 30.3185186000523 -0.852792032715446 1.40441666870621 0.99611437 30.3018883192624 -0.844083729111824 1.41444131818235 1 -31.7217071467002 0.463445326412471 1.41444146518236 1 31.7366649974106 0.482481440186638 1.4024437676125 0.99738245 31.7655748987838 0.520301318582985 1.37601550735723 0.99236209 31.8058725406978 0.575505889705062 1.3287598301127 0.98544793 31.8537414129715 0.642849482753711 1.24935044134096 0.97735889 31.896133824985 0.700080021952015 1.15274732975256 0.97030537 31.9333186867512 0.742403917452292 1.03935310736662 0.96420159 31.9615144780904 0.761747711411073 0.927145044797025 0.95962429 31.9827633190997 0.762408991562482 0.823947474025403 0.95620338 32.0017831500031 0.748575581085431 0.717179860194214 0.95316194 32.0186177208027 0.719217832831012 0.608554745424798 0.95048603 32.0328026314764 0.669001687915874 0.501381754744354 0.94824294 32.0444701220306 0.597459147677785 0.401380615984555 0.94640585 32.0541909024923 0.509664132937746 0.310743913729543 0.9448807 32.0619939328629 0.406625881433692 0.231912568125255 0.94366 32.0674534631222 0.287305702476288 0.172224242540212 0.94280778 32.0706255632729 0.157254995519211 0.136158712457191 0.94231333 32.0719831033374 0.0227817569220753 0.120485102642735 0.94210189 32.0715305233159 -0.11317808804567 0.125710523100929 0.94217237 32.0683643731655 -0.267402066010916 0.16226597496722 0.94266574 32.0610850028198 -0.426495507637449 0.241850492137281 0.94380203 32.0500620722962 -0.559485357584127 0.352005298629354 0.9455279 32.035173381589 -0.660615109577532 0.483470896923634 0.94786909 32.0186178008027 -0.719219974031114 0.608555339334826 0.95048603 32.0017832500031 -0.748577590085526 0.717180500194244 0.95316194 31.9827634290997 -0.762410909232573 0.823948078815432 0.95620338 31.9615146080904 -0.761749518031159 0.927145656597054 0.95962429 31.9333188267512 -0.742405581722371 1.03935365236665 0.96420159 31.896133974985 -0.700081650202093 1.15274782675258 0.97030537 31.8537415829715 -0.642851000933783 1.24935078534098 0.97735889 31.81181331098 -0.583855287361637 1.31890539864464 0.9844368 31.7722523291009 -0.52944233527716 1.36818548098532 0.99120973 31.7438653577526 -0.491897118783858 1.39586195029988 0.99612736 31.7291763270549 -0.472950566343945 1.40845051389781 0.99869122 31.7217072867002 -0.463447276602563 1.41444136118236 1 -32.4183773097902 0.208515993143978 1.41444143718236 1 32.4183769697902 0.230428868494783 1.40654101280711 1 32.4183769697902 0.274386795812673 1.38819172293557 1 32.4183769697902 0.340060319251998 1.352535736242 1 32.4183769697902 0.42361158841047 1.2871869911381 1 32.4183769697902 0.498796362461555 1.20319866714887 1 32.4183769697902 0.560491614381922 1.10084200428719 1 32.4183769697902 0.597748087161509 0.996774824704261 1 32.4183769697902 0.614200232972944 0.899515794844706 1 32.4183769697902 0.616397663677317 0.797982349572126 1 32.4183769697902 0.603286407844565 0.693878234457446 1 32.4183769697902 0.569424242696199 0.590233999654609 1 32.4183769697902 0.51418802550262 0.492932551593039 1 32.4183769697902 0.442676084495985 0.404482602531892 1 32.4183769697902 0.355877809683288 0.32732432491707 1 32.4183769697902 0.252652863160367 0.268708200192954 1 32.4183769697902 0.138605139903391 0.233247368748655 1 32.4183769697902 0.0201240339958403 0.217832436316485 1 32.4183769697902 -0.0998694037735419 0.222970859380547 1 32.4183769697902 -0.235450488863298 0.258939153868949 1 32.4183769697902 -0.373083585980519 0.337094069381108 1 32.4183769697902 -0.484434072519383 0.444916593312403 1 32.4183769697902 -0.563781888948201 0.57296065804417 1 32.4183769697902 -0.603287652174625 0.693878908917478 1 32.4183769697902 -0.616398762167369 0.797983080002161 1 32.4183769697902 -0.614201228372992 0.899516493914739 1 32.4183769697902 -0.597748956941551 0.996775537894295 1 32.4183769697902 -0.560492321731956 1.10084265228722 1 32.4183769697902 -0.498797019581586 1.2031992711489 1 32.4183769697902 -0.423612111790495 1.28718743413812 1 32.4183769697902 -0.35050471677808 1.34436762685403 1 32.4183769697902 -0.28533279434258 1.38224928165331 1 32.4183769697902 -0.241418770796776 1.40195406758924 1 32.4183769697902 -0.219472775064397 1.41049133499474 1 32.4183772197902 -0.208516963644024 1.41444139018236 1 - -0 4 -0.39052523 1 -0.78105045 1 -1.18410863 4 - -0 5 -0.03846154 1 -0.07692308 1 -0.11538462 1 -0.15384615 1 -0.19230769 1 -0.23076923 1 -0.25 1 -0.26923077 1 -0.30769231 1 -0.34615385 1 -0.36538462 1 -0.38461538 1 -0.42307692 1 -0.46153846 1 -0.48076923 1 -0.5 1 -0.53846154 1 -0.57692308 1 -0.61538462 1 -0.65384615 1 -0.69230769 1 -0.73076923 1 -0.75 1 -0.76923077 1 -0.80769231 1 -0.84615385 1 -0.88461538 1 -0.92307692 1 -0.96153846 1 -0.98076923 1 -1 5 - -9 0 0 0 0 3 2 20 4 18 3 31.9768135388171 -6.52772034505006 1.34215900474913 31.01492907313 -4.97211271016267 1.17266812269874 29.0911601417559 -1.86089743938788 0.833686358567975 28.1292756760688 -0.305289803630487 0.664195476387591 -31.9764636788005 -6.52739737503472 1.34538679790244 31.0143909631045 -4.97162784513964 1.17764030293491 29.0902455317125 -1.86008878434947 0.842147311759849 28.1281728160165 -0.304319254304388 0.674400816372318 -31.9777014388592 -6.52699314101552 1.34942703009434 31.0162679131936 -4.97095567810771 1.18384361722955 29.0934008518623 -1.85888075129209 0.852676791759972 28.1319673261967 -0.302843288144284 0.687093379125183 -31.9816308290459 -6.52668260400077 1.35253128324179 31.0221954034751 -4.97030522007682 1.1887775764639 29.1033245623337 -1.85755045222891 0.861270161918136 28.1438891367629 -0.301173068524952 0.697516454740252 -31.9835034791348 -6.52661267499745 1.353230491275 31.0250512936108 -4.97011976506801 1.18987273451592 29.1081469325627 -1.85713394420912 0.863157222517766 28.1496947470387 -0.300641034159682 0.69979946630869 -31.9866428592839 -6.52648649599146 1.35449209133492 31.029897763841 -4.96979779805272 1.19178877460693 29.1164075729551 -1.85642040217523 0.866382141270942 28.1596624775121 -0.299731703776491 0.703678824472949 -31.9883847393667 -6.52641453798804 1.35521155436909 31.0325750739682 -4.96961380104398 1.19291129866024 29.1209557231711 -1.85601232815585 0.868310787992547 28.1651460477726 -0.299211591051787 0.706010532433699 -31.9916632495224 -6.52633423798423 1.35601465740724 31.0375919242064 -4.9693510280315 1.19420364172163 29.1294492735745 -1.85538461012604 0.870581610130406 28.1753779482586 -0.298401400633305 0.708770594404795 -31.9936058596147 -6.52631217498318 1.35623548441773 31.0405779643483 -4.9692373840261 1.19454376173778 29.1345221838155 -1.85508780011194 0.871160316717893 28.1814942985491 -0.298013008604858 0.709468594297949 -31.9969259197724 -6.52624475097998 1.35690990744976 31.0457036145917 -4.96899990601482 1.19554477178533 29.1432589842305 -1.8545102160845 0.872814499746462 28.1920366790498 -0.297265370679347 0.71144936381203 -31.9986822598558 -6.52619487997761 1.35740863147345 31.0484060147201 -4.96885029000771 1.19631807882206 29.1478535444487 -1.85416111106792 0.874136974689276 28.197577309313 -0.296816521068028 0.713046422387886 -32.002077120017 -6.52615066997551 1.35785104949446 31.0536122749674 -4.96863996599772 1.19703635885617 29.156682584868 -1.85361855704215 0.875406978219598 28.2082177398184 -0.296107853314368 0.714592287951311 -32.0040059401086 -6.52614984397547 1.35785962949487 31.0565789851083 -4.96856015699393 1.19704484085658 29.1617250651076 -1.85338078203086 0.875415265619992 28.2142981001072 -0.295791094039322 0.7146004777817 -32.0074207502708 -6.52611315297373 1.35822691351231 31.0618457653584 -4.96836616398472 1.1975779238819 29.1706958055336 -1.8528721870067 0.876279946121062 28.2251208206212 -0.295125198837694 0.715630957130645 -32.0091448703527 -6.52607647797198 1.35859374052974 31.0644998454845 -4.96823892297868 1.19814180990868 29.175209795748 -1.85256381099206 0.877237949136565 28.2305647708798 -0.294726255258745 0.716786018585507 -32.0125978305167 -6.52604328697041 1.35892605054552 31.0698047657365 -4.96804558796949 1.19866448193351 29.1842186161759 -1.85205019096766 0.878141344459474 28.2414255413957 -0.294052492146743 0.717879775677458 -32.014476420606 -6.52604397397044 1.35891950054521 31.0726944658737 -4.96797050196593 1.1986475049327 29.1891305464092 -1.8518235579569 0.878103514097677 28.247348591677 -0.29375008651238 0.717831518655166 -32.0179362407703 -6.5259988509683 1.35937106356666 31.0780221161268 -4.96776049595595 1.19932877596506 29.1981938868397 -1.85128378693126 0.879244201521857 28.2582797721962 -0.29304543204891 0.719201914170256 -32.0195981608492 -6.5259525669661 1.35983391758864 31.0805800662483 -4.96762083194932 1.20004355499901 29.2025438770463 -1.85095736191575 0.880462830019738 28.2635257924454 -0.292625626828971 0.720672467560104 -32.0213115109306 -6.52591981196454 1.36016157360421 31.0832152563734 -4.96750017294359 1.20054947602304 29.2070227372591 -1.85066089390167 0.881325279380702 28.2689264827019 -0.292241255160714 0.721713181239535 - -0 4 -0.18739138 1 -0.1976523 1 -0.28860531 1 -0.29795585 1 -0.38981924 1 -0.39825939 1 -0.49147355 1 -0.49862089 1 -0.59312786 1 -0.59898239 1 -0.69484995 1 -0.69928545 1 -0.79657203 1 -0.79958851 1 -0.89828602 1 -0.89979425 1 -1 4 - -0 3 -33.12627597 1 -66.25255193 3 - -9 0 0 0 0 2 3 4 26 3 24 28.2689264827019 -0.292241255160714 0.721713181239535 28.3961812587462 -0.284397949308177 0.734133185749454 28.5870343678112 -0.272641093469756 0.753729140240211 28.8126166985258 -0.259167066449775 0.775118303946142 28.9401261245822 -0.251733210446685 0.786186542591855 29.0677133406422 -0.244433847629984 0.796421405117985 29.1817207560573 -0.238115434989876 0.804278298051168 29.3095848921305 -0.231289159275645 0.811337527776463 29.4448216585539 -0.224289548483181 0.817296564549502 29.6159003866797 -0.215994099319169 0.820905054190896 29.8024283255393 -0.207759839438062 0.818960698558544 29.9870924743104 -0.200302810283873 0.812228936158802 30.1608932725655 -0.193980458033577 0.80134281528174 30.2940844088917 -0.189594556135258 0.790225941423716 30.4216250749496 -0.185632528127072 0.778227837773837 30.5371700504377 -0.182306878039112 0.76593838801012 30.6644332564824 -0.178925569838508 0.7512782490838 30.7917710125306 -0.175703373785462 0.73613385993448 30.9073940980224 -0.172967123165497 0.72204592278534 31.0347069540694 -0.170091552488915 0.706833073972768 31.1619371001125 -0.16730603716661 0.69201716031905 31.2782823556386 -0.164848569069887 0.679537620406304 31.4059446117023 -0.162169725972648 0.667247481652553 31.5339495777822 -0.159490988805415 0.656203178347977 31.6510248333429 -0.156998219177015 0.648881518810217 31.7151041563865 -0.155601073240654 0.64594542643076 -29.2070227372591 -1.85066089390167 0.881325279380702 29.3123933222639 -1.84469222161817 0.891503409684138 29.4704091497693 -1.83572059219205 0.907741891635424 29.6571647386397 -1.82543554670353 0.925580970172735 29.7627281836537 -1.81976610343425 0.934823804381746 29.8683558986707 -1.81420466317009 0.943370328297684 29.9627408331538 -1.80940013494189 0.949921315608839 30.0685981581817 -1.80422136969591 0.955807669588426 30.1805566534995 -1.79892150844418 0.960779981554598 30.3221804902262 -1.79266725114712 0.96381512397876 30.4766107775613 -1.78649618385401 0.962313071137416 30.6295128548237 -1.78094584259038 0.956842638387585 30.773400821658 -1.77627975836876 0.947923972103971 30.8836523668947 -1.7730700562163 0.938791292900192 30.98924270191 -1.77018504607927 0.928929784541795 31.0849239864546 -1.76778033196506 0.918819512091583 31.1902794314587 -1.76535358184979 0.906734400257571 31.2956869464653 -1.76305060474041 0.894241746344202 31.3914083610118 -1.76110457064797 0.882616392752027 31.4967993260176 -1.75906092255091 0.870078785776523 31.6021282910205 -1.75708107845687 0.857876235866933 31.6984698155965 -1.75532985937369 0.84759983239883 31.8041523906161 -1.75341172728258 0.837474428947899 31.9100954156481 -1.75148512419108 0.828368865475408 32.0070153802516 -1.74967320410501 0.822302920967291 32.0600610427711 -1.74865018405642 0.819853447300947 -31.0832152563734 -4.96750017294359 1.20054947602304 31.1448174592994 -4.96528076583817 1.20624385729351 31.2371586936854 -4.96187958967662 1.21576739474585 31.3462608188674 -4.95797250649105 1.22650630225592 31.4079322917967 -4.95583189038937 1.23209832752153 31.4696410247277 -4.95374629329031 1.23726817476708 31.5247809773467 -4.95196953320592 1.24120735095418 31.5866247002841 -4.95008579111645 1.24474795312235 31.6520266333905 -4.94818542802619 1.24774681526479 31.7347407173192 -4.94601355492303 1.24963526335449 31.8249756616052 -4.94396887382591 1.24901781632516 31.9143536158504 -4.94223190574341 1.24607004318515 31.9984159198431 -4.94087836067912 1.24108628594843 32.0627882629007 -4.9400210566384 1.23592199570314 32.1244779458308 -4.93929008360368 1.23033367843771 32.1804318684884 -4.93872723957695 1.22458176016451 32.2419717614114 -4.93820960755236 1.21764670283511 32.3035188143347 -4.93774506653029 1.21045751949364 32.3594369069907 -4.93737946551293 1.2037573331754 32.420984059914 -4.93699966249489 1.19657020983403 32.4825106628364 -4.93663116047739 1.1895943865027 32.5388447455121 -4.9362924384613 1.18372425622388 32.6005679284438 -4.93589573044246 1.17792832394859 32.6623870813801 -4.9354733944224 1.17270023970027 32.7189964840689 -4.93502317540101 1.16914572553144 32.7499748255403 -4.93474840638796 1.16766948946132 -32.0213115109306 -6.52591981196454 1.36016157360421 32.0610295228171 -6.52557503794817 1.36361408176819 32.1205334756434 -6.52495908791891 1.36978014606106 32.1908088589813 -6.5242409868848 1.37696896840251 32.2305343508682 -6.52386478386694 1.38073558958142 32.2702835827562 -6.52351710785042 1.38421709774678 32.3058010444431 -6.52325423283794 1.38685036787185 32.3456379663353 -6.52301800082672 1.38921809498432 32.3877616283361 -6.52281738781719 1.39123023207989 32.4410208208657 -6.52268670681098 1.39254533314235 32.4991581136271 -6.52270521881186 1.39237018913403 32.5567739963637 -6.52287493781992 1.39068374505393 32.6109234689357 -6.5231776608343 1.38766744291066 32.6523562209036 -6.52349655684945 1.38448734775962 32.6920955727911 -6.52384260186588 1.38103562459567 32.7281858045053 -6.52420069388289 1.37746288442597 32.7678179363878 -6.52463761990364 1.37310285421888 32.8074347482695 -6.52509229792524 1.36856540600337 32.8434511699801 -6.52551691294541 1.36432780280209 32.8830764318622 -6.52596903296688 1.35981592158779 32.9227018537444 -6.52640620198765 1.35545346238058 32.95903221547 -6.5267737280051 1.35178646820641 32.9987756973577 -6.52713773102239 1.34815527103394 33.038532919246 -6.52746753003806 1.3448659268777 33.0749870309775 -6.52769816004901 1.34256712776851 33.0949317119248 -6.52779751805373 1.34157750972151 - -0 3 -1.50880726 1 -3.01761452 3 - -0 4 -0.11103083 1 -0.16659245 1 -0.196748 1 -0.22215408 1 -0.27771208 1 -0.29593722 1 -0.33327008 1 -0.39512644 1 -0.44434037 1 -0.49514916 1 -0.55541065 1 -0.59517188 1 -0.61096997 1 -0.66652929 1 -0.69603633 1 -0.72209161 1 -0.77765393 1 -0.79690078 1 -0.83321457 1 -0.88877522 1 -0.89845039 1 -0.94438761 1 -1 4 - -9 1 1 0 0 3 4 6 35 4 32 25.9893209044264 1.24079115393441 1.41444155318237 1 25.9893209144264 1.2822751379048 1.36967410805603 0.97693039 25.9893209244264 1.3627299827262 1.27401077351226 0.93268382 25.9893209444264 1.47127512888182 1.11565706899086 0.87174635 25.9893209744264 1.58512328428931 0.880018332248626 0.80045415 25.9893210044264 1.66384068402819 0.618812053391994 0.73828835 25.9893210344265 1.70030219276002 0.337462372068602 0.68449316 25.9893210644265 1.6897855082605 0.0825492001808764 0.64415145 25.9893210844265 1.64816147328347 -0.137692002530019 0.61400143 25.9893211144265 1.57851686697552 -0.358006185714381 0.58719589 25.9893211344265 1.4795426112745 -0.574296813547634 0.56361201 25.9893211644265 1.34624978294343 -0.775165883678402 0.54384264 25.9893211844265 1.18120730410433 -0.954314886817523 0.52765158 25.9893211944265 0.991078565083704 -1.11361808489402 0.51420981 25.9893212144265 0.778331953498782 -1.24885322531734 0.5034512 25.9893212244265 0.54465051770951 -1.3478598540199 0.49594024 25.9893212344265 0.296990527996292 -1.40701193782948 0.49158247 25.9893212344265 0.0427271076694286 -1.43268506804889 0.4897189 25.9893212344265 -0.213044431039067 -1.42410571364139 0.49034009 25.9893212244265 -0.505014806086915 -1.36465336881755 0.49468841 25.9893212144265 -0.816603772766596 -1.2326388005472 0.50470302 25.9893211944265 -1.09270254090058 -1.04429528560136 0.51991389 25.9893211644265 -1.32308762884329 -0.810072817306392 0.54054774 25.9893211344265 -1.47954387927456 -0.574297145927649 0.56361201 25.9893211144265 -1.57851818297559 -0.358006540334397 0.58719589 25.9893210844265 -1.64816283828353 -0.137692372790036 0.61400143 25.9893210644265 -1.68978692326057 0.0825488205708584 0.64415145 25.9893210344265 -1.70030366476009 0.337461990098584 0.68449316 25.9893210044264 -1.66384222002826 0.618811679601976 0.73828835 25.9893209744264 -1.58512487828939 0.880017976148609 0.80045415 25.9893209444264 -1.48447892450896 1.08833140069297 0.86283482 25.9893209244264 -1.37982669253825 1.24907096232768 0.92252758 25.9893209144264 -1.30169948982741 1.3465796719591 0.96586875 25.9893209144264 -1.26129280790819 1.39231875213159 0.98846519 25.9893209044264 -1.2407928679345 1.41444127418235 1 -26.7065109984911 1.21027048648476 1.41444154918237 1 26.7213278091949 1.24558332416203 1.37381204925257 0.97946655 26.7515571406307 1.31363351739424 1.28736330014647 0.94008423 26.7975896728172 1.40427928769968 1.14505414838715 0.88584592 26.8591513857412 1.49686369309721 0.934447565713876 0.82239124 26.9211453286857 1.55749285597694 0.702566418670113 0.76705964 26.9824908715995 1.58031314006084 0.454154142881163 0.71917843 27.0341360340525 1.56274270022629 0.229643645327487 0.68327169 27.076423046061 1.51887566714272 0.0360118875004728 0.65643622 27.1170321779899 1.45039909889026 -0.157107980142228 0.63257754 27.1553807398113 1.3563338224224 -0.346337304340138 0.61158636 27.1896150214374 1.23199119851644 -0.522459168235478 0.59399033 27.2192011628426 1.07941564726949 -0.679799770688755 0.57957924 27.2449048240635 0.904807393216043 -0.819594031988626 0.56761519 27.2662717950784 0.710263977475727 -0.938342486678874 0.55803933 27.2816287558078 0.496798980586684 -1.02553062771009 0.55135409 27.2907106162391 0.270770031540886 -1.07764181518524 0.54747539 27.2946338064255 0.0389720961310751 -1.10024787025897 0.54581669 27.2933234263632 -0.194261222626913 -1.09269727590033 0.54636959 27.2842245359311 -0.460730032143501 -1.04026799241008 0.55023988 27.2637480049585 -0.745357876112598 -0.924013897068303 0.55915354 27.2338661935392 -0.99827445118549 -0.758423352063175 0.57269219 27.1955189017178 -1.21057690449931 -0.552832445788131 0.59105766 27.1553807398113 -1.35633539842247 -0.346337463440146 0.61158636 27.1170321779899 -1.45040068989033 -0.157108154972237 0.63257754 27.076423046061 -1.5188772841428 0.0360116864604632 0.65643622 27.0341360340525 -1.56274434022637 0.229643430607477 0.68327169 26.9824908815995 -1.58031480806092 0.454153906161152 0.71917843 26.9211453286857 -1.55749457897702 0.702566171410101 0.76705964 26.8591513857412 -1.49686545709729 0.934447301413863 0.82239124 26.8047982131595 -1.4150717702123 1.12039302921581 0.87791409 26.7588567809774 -1.32797084307523 1.2647962700746 0.93104451 26.7286549295429 -1.2620551999444 1.3528579812573 0.96962097 26.7138425388394 -1.22773734731439 1.39433727022746 0.98973327 26.7065109884911 -1.21027243248485 1.41444127718235 1 -28.1506003870817 1.1255888294626 1.41444154018237 1 28.1838979086633 1.1508387036619 1.38202397364261 0.98453887 28.2507726118396 1.19906384495247 1.3134474553854 0.95488505 28.3499580765507 1.26229193995565 1.20112752105049 0.91404507 28.4778294026243 1.32465551091776 1.03503591816157 0.86626542 28.6013833784928 1.36213596169798 0.852541449963544 0.82460223 28.7187943440695 1.37034541108791 0.656740721763509 0.78854897 28.8140999785962 1.34829534004059 0.478493511307221 0.76151217 28.8898424021938 1.30652540405662 0.323759373307744 0.74130578 28.9607162955601 1.24513548614076 0.169063565130088 0.72334085 29.0260289786623 1.16333549725547 0.0168410757499081 0.70753505 29.0830505013707 1.0564882841805 -0.126562545831398 0.69428572 29.1313840436664 0.925640577995566 -0.255916218385368 0.68343456 29.172682565628 0.776320905553263 -0.371242212553058 0.67442596 29.2065335872358 0.610076253717066 -0.469747313181799 0.66721559 29.2305984583789 0.426973807490167 -0.542714468587553 0.66218179 29.24472746905 0.232731934034173 -0.586447823104776 0.65926123 29.2508075893387 0.0336059541961971 -0.605421909825996 0.65801228 29.2487783392424 -0.166911773857883 -0.599089180955208 0.6584286 29.234644708571 -0.396046505331199 -0.554983562510303 0.66134282 29.202557877047 -0.640191804457478 -0.457692937649247 0.66805456 29.1550255647893 -0.856629817587731 -0.320151179026364 0.6782488 29.0927656018322 -1.03819581031165 -0.150996809981963 0.6920775 29.0260290386623 -1.16321649124982 0.0168411919799137 0.70753505 28.9607163555602 -1.24502744813563 0.169063681600094 0.72334085 28.8898424721938 -1.30642885505204 0.323759452207748 0.74130578 28.8141000485962 -1.34821061203656 0.478493575457224 0.76151217 28.7187944240695 -1.37027489908456 0.65674073758351 0.78854897 28.6013834684928 -1.36208207569542 0.852541430373543 0.82460223 28.4778295026243 -1.32461812391598 1.03503582516156 0.86626542 28.365206657275 -1.26961740730359 1.18132183610977 0.90807262 28.2667104025966 -1.20914361243124 1.29539928852816 0.94807839 28.2002362094393 -1.16257346221927 1.36526994584684 0.97712541 28.1671195178663 -1.13810082605689 1.39835883341848 0.99226943 28.1506004970817 -1.12559133446272 1.41444128718235 1 -30.3018881792624 0.844080731411682 1.41444150818236 1 30.3352791008484 0.861588063783235 1.39431348522633 0.99222874 30.4008019839605 0.89546851587247 1.35148542719211 0.97732378 30.4943660884046 0.941799190673059 1.27983350878883 0.95679629 30.6090238638506 0.991697733903113 1.16948537054757 0.9327807 30.713902088832 1.02663141576237 1.04380938057828 0.91183944 30.8085964133297 1.04238241951051 0.903889975212468 0.89371791 30.8821451868231 1.03535339717665 0.771378608878516 0.88012835 30.9385996295046 1.01174128005513 0.652922561462156 0.86997197 30.9899002119412 0.972524739062444 0.532391080447218 0.86094222 31.0359241841272 0.91677449101445 0.411609457150399 0.85299772 31.0751611859909 0.839442628421384 0.294677541886432 0.84633818 31.1077531275389 0.740495013681624 0.187014432592708 0.84088404 31.1351300888393 0.625032615127455 0.0900692181980581 0.83635602 31.1572539098901 0.494174422372024 0.00632167723026354 0.83273186 31.172811930629 0.347181239430223 -0.0565969960882129 0.83020171 31.1818814710598 0.189545165882912 -0.0945044870587221 0.82873374 31.1857697012445 0.0274447231135543 -0.110967986580696 0.82810598 31.1844729811829 -0.136091540084001 -0.105477300889903 0.82831523 31.1754141407526 -0.32246090643607 -0.067120530118054 0.82978002 31.1546700997674 -0.518456339435354 0.0167712304665907 0.83315355 31.1234775582858 -0.68841401761791 0.133779782114198 0.8382775 31.0817606763043 -0.82633217441867 0.275010207732283 0.84522825 31.0359242641272 -0.916659908829007 0.411609880910419 0.85299772 30.9899003119412 -0.97241875496741 0.53239153125724 0.86094222 30.9385997295046 -1.01164467305054 0.652922972232176 0.86997197 30.8821452968231 -1.03526682717253 0.771379014828535 0.88012835 30.8085965433297 -1.04230848350699 0.903890315232484 0.89371791 30.713902238832 -1.02657314875961 1.0438096705783 0.91183944 30.6090240238506 -0.991655972121129 1.16948553054758 0.9327807 30.5083829090704 -0.947824774759259 1.26634406214811 0.95379434 30.4161223646882 -0.903003212690349 1.33975319063486 0.97390253 30.3514747916176 -0.869933533189624 1.38372764772353 0.9885025 30.3185186000523 -0.852792032715446 1.40441666870621 0.99611437 30.3018883192624 -0.844083729111824 1.41444131818235 1 -31.7217071467002 0.463445326412471 1.41444146518236 1 31.7366649974106 0.482481440186638 1.4024437676125 0.99738245 31.7655748987838 0.520301318582985 1.37601550735723 0.99236209 31.8058725406978 0.575505889705062 1.3287598301127 0.98544793 31.8537414129715 0.642849482753711 1.24935044134096 0.97735889 31.896133824985 0.700080021952015 1.15274732975256 0.97030537 31.9333186867512 0.742403917452292 1.03935310736662 0.96420159 31.9615144780904 0.761747711411073 0.927145044797025 0.95962429 31.9827633190997 0.762408991562482 0.823947474025403 0.95620338 32.0017831500031 0.748575581085431 0.717179860194214 0.95316194 32.0186177208027 0.719217832831012 0.608554745424798 0.95048603 32.0328026314764 0.669001687915874 0.501381754744354 0.94824294 32.0444701220306 0.597459147677785 0.401380615984555 0.94640585 32.0541909024923 0.509664132937746 0.310743913729543 0.9448807 32.0619939328629 0.406625881433692 0.231912568125255 0.94366 32.0674534631222 0.287305702476288 0.172224242540212 0.94280778 32.0706255632729 0.157254995519211 0.136158712457191 0.94231333 32.0719831033374 0.0227817569220753 0.120485102642735 0.94210189 32.0715305233159 -0.11317808804567 0.125710523100929 0.94217237 32.0683643731655 -0.267402066010916 0.16226597496722 0.94266574 32.0610850028198 -0.426495507637449 0.241850492137281 0.94380203 32.0500620722962 -0.559485357584127 0.352005298629354 0.9455279 32.035173381589 -0.660615109577532 0.483470896923634 0.94786909 32.0186178008027 -0.719219974031114 0.608555339334826 0.95048603 32.0017832500031 -0.748577590085526 0.717180500194244 0.95316194 31.9827634290997 -0.762410909232573 0.823948078815432 0.95620338 31.9615146080904 -0.761749518031159 0.927145656597054 0.95962429 31.9333188267512 -0.742405581722371 1.03935365236665 0.96420159 31.896133974985 -0.700081650202093 1.15274782675258 0.97030537 31.8537415829715 -0.642851000933783 1.24935078534098 0.97735889 31.81181331098 -0.583855287361637 1.31890539864464 0.9844368 31.7722523291009 -0.52944233527716 1.36818548098532 0.99120973 31.7438653577526 -0.491897118783858 1.39586195029988 0.99612736 31.7291763270549 -0.472950566343945 1.40845051389781 0.99869122 31.7217072867002 -0.463447276602563 1.41444136118236 1 -32.4183773097902 0.208515993143978 1.41444143718236 1 32.4183769697902 0.230428868494783 1.40654101280711 1 32.4183769697902 0.274386795812673 1.38819172293557 1 32.4183769697902 0.340060319251998 1.352535736242 1 32.4183769697902 0.42361158841047 1.2871869911381 1 32.4183769697902 0.498796362461555 1.20319866714887 1 32.4183769697902 0.560491614381922 1.10084200428719 1 32.4183769697902 0.597748087161509 0.996774824704261 1 32.4183769697902 0.614200232972944 0.899515794844706 1 32.4183769697902 0.616397663677317 0.797982349572126 1 32.4183769697902 0.603286407844565 0.693878234457446 1 32.4183769697902 0.569424242696199 0.590233999654609 1 32.4183769697902 0.51418802550262 0.492932551593039 1 32.4183769697902 0.442676084495985 0.404482602531892 1 32.4183769697902 0.355877809683288 0.32732432491707 1 32.4183769697902 0.252652863160367 0.268708200192954 1 32.4183769697902 0.138605139903391 0.233247368748655 1 32.4183769697902 0.0201240339958403 0.217832436316485 1 32.4183769697902 -0.0998694037735419 0.222970859380547 1 32.4183769697902 -0.235450488863298 0.258939153868949 1 32.4183769697902 -0.373083585980519 0.337094069381108 1 32.4183769697902 -0.484434072519383 0.444916593312403 1 32.4183769697902 -0.563781888948201 0.57296065804417 1 32.4183769697902 -0.603287652174625 0.693878908917478 1 32.4183769697902 -0.616398762167369 0.797983080002161 1 32.4183769697902 -0.614201228372992 0.899516493914739 1 32.4183769697902 -0.597748956941551 0.996775537894295 1 32.4183769697902 -0.560492321731956 1.10084265228722 1 32.4183769697902 -0.498797019581586 1.2031992711489 1 32.4183769697902 -0.423612111790495 1.28718743413812 1 32.4183769697902 -0.35050471677808 1.34436762685403 1 32.4183769697902 -0.28533279434258 1.38224928165331 1 32.4183769697902 -0.241418770796776 1.40195406758924 1 32.4183769697902 -0.219472775064397 1.41049133499474 1 32.4183772197902 -0.208516963644024 1.41444139018236 1 - -0 4 -0.39052523 1 -0.78105045 1 -1.18410863 4 - -0 5 -0.03846154 1 -0.07692308 1 -0.11538462 1 -0.15384615 1 -0.19230769 1 -0.23076923 1 -0.25 1 -0.26923077 1 -0.30769231 1 -0.34615385 1 -0.36538462 1 -0.38461538 1 -0.42307692 1 -0.46153846 1 -0.48076923 1 -0.5 1 -0.53846154 1 -0.57692308 1 -0.61538462 1 -0.65384615 1 -0.69230769 1 -0.73076923 1 -0.75 1 -0.76923077 1 -0.80769231 1 -0.84615385 1 -0.88461538 1 -0.92307692 1 -0.96153846 1 -0.98076923 1 -1 5 - -9 1 1 0 0 4 3 20 4 15 2 32.4183772197902 -0.208516963644024 1.41444139018236 1 32.5970604982772 -0.143131934658402 1.41444139718236 1 32.7741353166878 -0.0736942506102889 1.41444140518236 1 32.949284715007 -9.00000042747706e-011 1.41444141318236 1 -32.4183769697902 -0.219472775064397 1.41049133499474 1 32.5950247081805 -0.154525315509558 1.41140751903826 0.9943221 32.7720870665905 -0.0847712907564201 1.4123410200826 0.98864419 32.949284685007 -0.0099950104147375 1.41329199112776 0.98296629 -32.4183769697902 -0.241418770796776 1.40195406758924 1 32.5909900479889 -0.177509380711243 1.40465327471745 0.98325746 32.7679577163944 -0.10731144496702 1.40746684385108 0.96651492 32.949284605007 -0.0305025093887914 1.41039966299039 0.94977238 -32.4183769697902 -0.28533279434258 1.38224928165331 1 32.5830897376136 -0.224119960755126 1.38826324893896 0.96229289 32.7595924259971 -0.153820917666101 1.39481859625033 0.92458578 32.949284435007 -0.0735686563743235 1.40197815559039 0.88687867 -32.4183769697902 -0.35050471677808 1.34436762685403 1 32.5719988770869 -0.294229175235135 1.35462811534138 0.93434013 32.7471814954076 -0.225355241593799 1.36654019990717 0.86868025 32.9492841450069 -0.141483974010128 1.38048717656962 0.80302038 -32.4183769697902 -0.423612111790495 1.28718743413812 1 32.5604028665361 -0.374017878514895 1.30088956378894 0.90682413 32.733294264748 -0.309029397378108 1.31789498559665 0.81364825 32.9492837450069 -0.223779306188946 1.33943253961963 0.72047238 -32.4183769697902 -0.498797019581586 1.2031992711489 1 32.5494676460167 -0.456769884125404 1.2186021878805 0.88236546 32.7192576940813 -0.39792516020043 1.23898965184885 0.76473092 32.9492832350069 -0.314557243260667 1.26697658917816 0.64709638 -32.4183769697902 -0.568204234498252 1.08804807467951 1 32.5401982155764 -0.533525153331084 1.10242625036243 0.86271117 32.706577983479 -0.482104103058715 1.12258912332012 0.72542235 32.9492826150069 -0.403917878905069 1.15241312073668 0.58813352 -32.4183769697902 -0.602673077355434 0.98156344848176 1 32.5361827153857 -0.570706214987089 0.994236516563698 0.85455829 32.7008607432075 -0.522313113698541 1.01252473909234 0.70911657 32.9492821550069 -0.446471934676278 1.04054463542322 0.56367486 -32.4183769697902 -0.613655709577081 0.899267056102891 1 32.5350490553318 -0.582031940285032 0.910741168867882 0.85237448 32.6992369531303 -0.534103355878547 0.927489109533367 0.70474895 32.9492818750068 -0.458504803777809 0.95344004576597 0.55712343 -32.4183769697902 -0.61502839074228 0.831720436424599 1 32.5349909953291 -0.582947117258501 0.842414448322537 0.85237448 32.6991751431274 -0.534591628891739 0.858093575267256 0.70474895 32.9492816750068 -0.458504821117809 0.882435955593457 0.55712343 -32.4183769697902 -0.614213577173578 0.780632384818047 1 32.5351601053371 -0.581598379834439 0.790890394815276 0.85281124 32.69943962314 -0.53271261546249 0.80596076025108 0.70562248 32.9492815350068 -0.456075677812431 0.829349488431985 0.55843371 -32.4183769697902 -0.603287652174625 0.693878908917478 1 32.5364997154007 -0.568953113813822 0.70437908943621 0.85572298 32.7014152232338 -0.518326260279175 0.719713679654564 0.71144597 32.9492813450068 -0.440168153566864 0.743257377152829 0.56716895 -32.4183769697902 -0.563781888948201 0.57296065804417 1 32.5407843656042 -0.526092289288042 0.586519580248184 0.86489498 32.7075595335256 -0.472516866293346 0.605724400430364 0.72978997 32.9492812050068 -0.393113979361911 0.634109658608591 0.59468495 -32.4183769697902 -0.484434072519383 0.444916593312403 1 32.5487707759836 -0.444016255369639 0.466036475495544 0.88236546 32.718515614046 -0.389731501741252 0.494321178208995 0.76473092 32.9492811850068 -0.314557422400675 0.533397296455011 0.64709638 -32.4183769697902 -0.373083585980519 0.337094069381108 1 32.5594737264919 -0.334335296030074 0.369329639212216 0.90682413 32.732304914701 -0.285751536672469 0.409641450116924 0.81364825 32.9492812950068 -0.223779520728956 0.460941301693536 0.72047238 -32.4183769697902 -0.235450488863298 0.258939153868949 1 32.5724390171078 -0.205716077230989 0.303410972681247 0.93827098 32.7477875854364 -0.171259081204369 0.354851368574535 0.87654197 32.9492814750068 -0.131088921946389 0.414700726137227 0.81481295 -32.4183769697902 -0.119238130213507 0.228109187164604 1 32.5835958776377 -0.102057795727485 0.279435924852494 0.96709727 32.7601546760238 -0.0834167005920805 0.335082727895575 0.93419454 32.9492816550068 -0.0631687053803524 0.395447484802747 0.90129181 -32.4183769697902 -0.0397466489178644 0.221258032639192 1 32.5915141680138 -0.0335065327014748 0.274966304700198 0.98864419 32.7684461664176 -0.0270416122144076 0.330623761983785 0.97728838 32.9492817750068 -0.0203427842862304 0.388271711691916 0.96593257 -32.4183769697902 -8.97180042613763e-007 0.221258007919191 1 32.5955505782055 -6.92920032911934e-007 0.275451984623267 1 32.7725279766115 -4.78380022721831e-007 0.330344534450523 1 32.9492818450068 -2.51270011934685e-007 0.385932318830801 1 - -0 5 -0.11571716 1 -0.23143431 1 -0.46286863 1 -0.69430294 1 -0.92573725 1 -1.15717156 1 -1.50432303 3 -1.62004019 1 -1.8514745 1 -2.08290881 1 -2.31434313 1 -2.54577744 1 -2.77721175 1 -3.00864606 5 - -0 4 -1 4 - -9 1 1 0 0 3 2 6 4 4 3 25.9893209044264 -1.2407928679345 1.41444127418235 1 25.9893209344264 -0.723604166519352 1.92052181521989 0.85737039 25.9893209344264 0.723602338749265 1.9205219782199 0.85737039 25.9893209044264 1.24079115393441 1.41444155318237 1 -26.7065109884911 -1.21027243248485 1.41444127718235 1 26.6771494170965 -0.709426906225968 1.87757598918007 0.8529936 26.6771494170965 0.70942484422587 1.87757614918008 0.8529936 26.7065109984911 1.21027048648476 1.41444154918237 1 -28.1506004970817 -1.12559133446272 1.41444128718235 1 28.0835873238988 -0.666630513403249 1.79034847403699 0.84424001 28.0835872638988 0.666627888893124 1.79034862403699 0.84424001 28.1506003870817 1.1255888294626 1.41444154018237 1 -30.3018883192624 -0.844083729111824 1.41444131818235 1 30.2330803859942 -0.507891786923564 1.6546025515894 0.83096916 30.2330803059942 0.507888670973416 1.65460266558941 0.83096916 30.3018881792624 0.844080731411682 1.41444150818236 1 -31.7217072867002 -0.463447276602563 1.41444136118236 1 31.6903881952126 -0.281876920968435 1.56117344415176 0.8220751 31.6903881052126 0.281874858058337 1.56117350815176 0.8220751 31.7217071467002 0.463445326412471 1.41444146518236 1 -32.4183772197902 -0.208516963644024 1.41444139018236 1 32.4183771297902 -0.12752453053709 1.51294272586092 0.81755784 32.4183771797902 0.127523451547039 1.51294275486092 0.81755784 32.4183773097902 0.208515993143978 1.41444143718236 1 - -0 4 -0.97957324 1 -1.95914649 1 -2.97015674 4 - -0 3 -0.5 1 -1 3 - -9 1 1 0 0 4 3 5 5 2 3 25.9893209044264 1.24079115393441 1.41444155318237 1 25.0175634582704 1.28214516389862 1.41444155718237 1 23.0918736368051 1.3214520967656 1.41444156218237 1 21.1275192035033 1.36275808372753 1.41444156618237 1 20.1549001573063 1.36866520500811 1.41444156718237 1 -25.9893212344265 3.87379303799529 -1.42696263277709 0.40019002 25.123349293295 4.29750952712074 -1.5962689568187 0.39300223 23.2580136246963 4.58650414984725 -1.7754363963287 0.37862663 21.2410419088953 5.33284517229654 -2.09114358632399 0.36425103 20.1549001573063 5.3675639999456 -2.16599949987945 0.35706323 -25.9893214844265 -2.9615001406637e-007 -3.57904640699557 0.44010137 25.0918429517985 -2.64820012578275e-007 -4.0750756145557 0.43647271 23.1372043289582 -3.39050016104011e-007 -4.50801631311928 0.4292154 21.2082447073375 -2.53570012043929e-007 -5.07724453415616 0.42195809 20.1549001573063 -2.8646001360612e-007 -5.01896813038818 0.41832944 -25.9893212344265 -3.87379411299534 -1.42696350277713 0.40019002 25.123349253295 -4.29751003012076 -1.59626974181874 0.39300223 23.2580136246963 -4.5865052898473 -1.77543742432875 0.37862663 21.2410419688953 -5.33284692229662 -2.09114493332405 0.36425103 20.1549001573063 -5.36756521394566 -2.16600070587951 0.35706323 -25.9893209044264 -1.2407928679345 1.41444127418235 1 25.0175634582704 -1.28214692889871 1.41444127418235 1 23.0918736368051 -1.32145396176569 1.41444126918235 1 21.1275192035033 -1.36276005072763 1.41444126418235 1 20.1549001573063 -1.3686672230082 1.41444126018235 1 - -0 5 -3.42297087 5 - -0 4 -0.5 1 -1 4 - -9 1 1 0 0 3 4 6 35 4 32 25.9893209044264 1.24079115393441 1.41444155318237 1 25.9893209144264 1.2822751379048 1.36967410805603 0.97693039 25.9893209244264 1.3627299827262 1.27401077351226 0.93268382 25.9893209444264 1.47127512888182 1.11565706899086 0.87174635 25.9893209744264 1.58512328428931 0.880018332248626 0.80045415 25.9893210044264 1.66384068402819 0.618812053391994 0.73828835 25.9893210344265 1.70030219276002 0.337462372068602 0.68449316 25.9893210644265 1.6897855082605 0.0825492001808764 0.64415145 25.9893210844265 1.64816147328347 -0.137692002530019 0.61400143 25.9893211144265 1.57851686697552 -0.358006185714381 0.58719589 25.9893211344265 1.4795426112745 -0.574296813547634 0.56361201 25.9893211644265 1.34624978294343 -0.775165883678402 0.54384264 25.9893211844265 1.18120730410433 -0.954314886817523 0.52765158 25.9893211944265 0.991078565083704 -1.11361808489402 0.51420981 25.9893212144265 0.778331953498782 -1.24885322531734 0.5034512 25.9893212244265 0.54465051770951 -1.3478598540199 0.49594024 25.9893212344265 0.296990527996292 -1.40701193782948 0.49158247 25.9893212344265 0.0427271076694286 -1.43268506804889 0.4897189 25.9893212344265 -0.213044431039067 -1.42410571364139 0.49034009 25.9893212244265 -0.505014806086915 -1.36465336881755 0.49468841 25.9893212144265 -0.816603772766596 -1.2326388005472 0.50470302 25.9893211944265 -1.09270254090058 -1.04429528560136 0.51991389 25.9893211644265 -1.32308762884329 -0.810072817306392 0.54054774 25.9893211344265 -1.47954387927456 -0.574297145927649 0.56361201 25.9893211144265 -1.57851818297559 -0.358006540334397 0.58719589 25.9893210844265 -1.64816283828353 -0.137692372790036 0.61400143 25.9893210644265 -1.68978692326057 0.0825488205708584 0.64415145 25.9893210344265 -1.70030366476009 0.337461990098584 0.68449316 25.9893210044264 -1.66384222002826 0.618811679601976 0.73828835 25.9893209744264 -1.58512487828939 0.880017976148609 0.80045415 25.9893209444264 -1.48447892450896 1.08833140069297 0.86283482 25.9893209244264 -1.37982669253825 1.24907096232768 0.92252758 25.9893209144264 -1.30169948982741 1.3465796719591 0.96586875 25.9893209144264 -1.26129280790819 1.39231875213159 0.98846519 25.9893209044264 -1.2407928679345 1.41444127418235 1 -26.7065109984911 1.21027048648476 1.41444154918237 1 26.7213278091949 1.24558332416203 1.37381204925257 0.97946655 26.7515571406307 1.31363351739424 1.28736330014647 0.94008423 26.7975896728172 1.40427928769968 1.14505414838715 0.88584592 26.8591513857412 1.49686369309721 0.934447565713876 0.82239124 26.9211453286857 1.55749285597694 0.702566418670113 0.76705964 26.9824908715995 1.58031314006084 0.454154142881163 0.71917843 27.0341360340525 1.56274270022629 0.229643645327487 0.68327169 27.076423046061 1.51887566714272 0.0360118875004728 0.65643622 27.1170321779899 1.45039909889026 -0.157107980142228 0.63257754 27.1553807398113 1.3563338224224 -0.346337304340138 0.61158636 27.1896150214374 1.23199119851644 -0.522459168235478 0.59399033 27.2192011628426 1.07941564726949 -0.679799770688755 0.57957924 27.2449048240635 0.904807393216043 -0.819594031988626 0.56761519 27.2662717950784 0.710263977475727 -0.938342486678874 0.55803933 27.2816287558078 0.496798980586684 -1.02553062771009 0.55135409 27.2907106162391 0.270770031540886 -1.07764181518524 0.54747539 27.2946338064255 0.0389720961310751 -1.10024787025897 0.54581669 27.2933234263632 -0.194261222626913 -1.09269727590033 0.54636959 27.2842245359311 -0.460730032143501 -1.04026799241008 0.55023988 27.2637480049585 -0.745357876112598 -0.924013897068303 0.55915354 27.2338661935392 -0.99827445118549 -0.758423352063175 0.57269219 27.1955189017178 -1.21057690449931 -0.552832445788131 0.59105766 27.1553807398113 -1.35633539842247 -0.346337463440146 0.61158636 27.1170321779899 -1.45040068989033 -0.157108154972237 0.63257754 27.076423046061 -1.5188772841428 0.0360116864604632 0.65643622 27.0341360340525 -1.56274434022637 0.229643430607477 0.68327169 26.9824908815995 -1.58031480806092 0.454153906161152 0.71917843 26.9211453286857 -1.55749457897702 0.702566171410101 0.76705964 26.8591513857412 -1.49686545709729 0.934447301413863 0.82239124 26.8047982131595 -1.4150717702123 1.12039302921581 0.87791409 26.7588567809774 -1.32797084307523 1.2647962700746 0.93104451 26.7286549295429 -1.2620551999444 1.3528579812573 0.96962097 26.7138425388394 -1.22773734731439 1.39433727022746 0.98973327 26.7065109884911 -1.21027243248485 1.41444127718235 1 -28.1506003870817 1.1255888294626 1.41444154018237 1 28.1838979086633 1.1508387036619 1.38202397364261 0.98453887 28.2507726118396 1.19906384495247 1.3134474553854 0.95488505 28.3499580765507 1.26229193995565 1.20112752105049 0.91404507 28.4778294026243 1.32465551091776 1.03503591816157 0.86626542 28.6013833784928 1.36213596169798 0.852541449963544 0.82460223 28.7187943440695 1.37034541108791 0.656740721763509 0.78854897 28.8140999785962 1.34829534004059 0.478493511307221 0.76151217 28.8898424021938 1.30652540405662 0.323759373307744 0.74130578 28.9607162955601 1.24513548614076 0.169063565130088 0.72334085 29.0260289786623 1.16333549725547 0.0168410757499081 0.70753505 29.0830505013707 1.0564882841805 -0.126562545831398 0.69428572 29.1313840436664 0.925640577995566 -0.255916218385368 0.68343456 29.172682565628 0.776320905553263 -0.371242212553058 0.67442596 29.2065335872358 0.610076253717066 -0.469747313181799 0.66721559 29.2305984583789 0.426973807490167 -0.542714468587553 0.66218179 29.24472746905 0.232731934034173 -0.586447823104776 0.65926123 29.2508075893387 0.0336059541961971 -0.605421909825996 0.65801228 29.2487783392424 -0.166911773857883 -0.599089180955208 0.6584286 29.234644708571 -0.396046505331199 -0.554983562510303 0.66134282 29.202557877047 -0.640191804457478 -0.457692937649247 0.66805456 29.1550255647893 -0.856629817587731 -0.320151179026364 0.6782488 29.0927656018322 -1.03819581031165 -0.150996809981963 0.6920775 29.0260290386623 -1.16321649124982 0.0168411919799137 0.70753505 28.9607163555602 -1.24502744813563 0.169063681600094 0.72334085 28.8898424721938 -1.30642885505204 0.323759452207748 0.74130578 28.8141000485962 -1.34821061203656 0.478493575457224 0.76151217 28.7187944240695 -1.37027489908456 0.65674073758351 0.78854897 28.6013834684928 -1.36208207569542 0.852541430373543 0.82460223 28.4778295026243 -1.32461812391598 1.03503582516156 0.86626542 28.365206657275 -1.26961740730359 1.18132183610977 0.90807262 28.2667104025966 -1.20914361243124 1.29539928852816 0.94807839 28.2002362094393 -1.16257346221927 1.36526994584684 0.97712541 28.1671195178663 -1.13810082605689 1.39835883341848 0.99226943 28.1506004970817 -1.12559133446272 1.41444128718235 1 -30.3018881792624 0.844080731411682 1.41444150818236 1 30.3352791008484 0.861588063783235 1.39431348522633 0.99222874 30.4008019839605 0.89546851587247 1.35148542719211 0.97732378 30.4943660884046 0.941799190673059 1.27983350878883 0.95679629 30.6090238638506 0.991697733903113 1.16948537054757 0.9327807 30.713902088832 1.02663141576237 1.04380938057828 0.91183944 30.8085964133297 1.04238241951051 0.903889975212468 0.89371791 30.8821451868231 1.03535339717665 0.771378608878516 0.88012835 30.9385996295046 1.01174128005513 0.652922561462156 0.86997197 30.9899002119412 0.972524739062444 0.532391080447218 0.86094222 31.0359241841272 0.91677449101445 0.411609457150399 0.85299772 31.0751611859909 0.839442628421384 0.294677541886432 0.84633818 31.1077531275389 0.740495013681624 0.187014432592708 0.84088404 31.1351300888393 0.625032615127455 0.0900692181980581 0.83635602 31.1572539098901 0.494174422372024 0.00632167723026354 0.83273186 31.172811930629 0.347181239430223 -0.0565969960882129 0.83020171 31.1818814710598 0.189545165882912 -0.0945044870587221 0.82873374 31.1857697012445 0.0274447231135543 -0.110967986580696 0.82810598 31.1844729811829 -0.136091540084001 -0.105477300889903 0.82831523 31.1754141407526 -0.32246090643607 -0.067120530118054 0.82978002 31.1546700997674 -0.518456339435354 0.0167712304665907 0.83315355 31.1234775582858 -0.68841401761791 0.133779782114198 0.8382775 31.0817606763043 -0.82633217441867 0.275010207732283 0.84522825 31.0359242641272 -0.916659908829007 0.411609880910419 0.85299772 30.9899003119412 -0.97241875496741 0.53239153125724 0.86094222 30.9385997295046 -1.01164467305054 0.652922972232176 0.86997197 30.8821452968231 -1.03526682717253 0.771379014828535 0.88012835 30.8085965433297 -1.04230848350699 0.903890315232484 0.89371791 30.713902238832 -1.02657314875961 1.0438096705783 0.91183944 30.6090240238506 -0.991655972121129 1.16948553054758 0.9327807 30.5083829090704 -0.947824774759259 1.26634406214811 0.95379434 30.4161223646882 -0.903003212690349 1.33975319063486 0.97390253 30.3514747916176 -0.869933533189624 1.38372764772353 0.9885025 30.3185186000523 -0.852792032715446 1.40441666870621 0.99611437 30.3018883192624 -0.844083729111824 1.41444131818235 1 -31.7217071467002 0.463445326412471 1.41444146518236 1 31.7366649974106 0.482481440186638 1.4024437676125 0.99738245 31.7655748987838 0.520301318582985 1.37601550735723 0.99236209 31.8058725406978 0.575505889705062 1.3287598301127 0.98544793 31.8537414129715 0.642849482753711 1.24935044134096 0.97735889 31.896133824985 0.700080021952015 1.15274732975256 0.97030537 31.9333186867512 0.742403917452292 1.03935310736662 0.96420159 31.9615144780904 0.761747711411073 0.927145044797025 0.95962429 31.9827633190997 0.762408991562482 0.823947474025403 0.95620338 32.0017831500031 0.748575581085431 0.717179860194214 0.95316194 32.0186177208027 0.719217832831012 0.608554745424798 0.95048603 32.0328026314764 0.669001687915874 0.501381754744354 0.94824294 32.0444701220306 0.597459147677785 0.401380615984555 0.94640585 32.0541909024923 0.509664132937746 0.310743913729543 0.9448807 32.0619939328629 0.406625881433692 0.231912568125255 0.94366 32.0674534631222 0.287305702476288 0.172224242540212 0.94280778 32.0706255632729 0.157254995519211 0.136158712457191 0.94231333 32.0719831033374 0.0227817569220753 0.120485102642735 0.94210189 32.0715305233159 -0.11317808804567 0.125710523100929 0.94217237 32.0683643731655 -0.267402066010916 0.16226597496722 0.94266574 32.0610850028198 -0.426495507637449 0.241850492137281 0.94380203 32.0500620722962 -0.559485357584127 0.352005298629354 0.9455279 32.035173381589 -0.660615109577532 0.483470896923634 0.94786909 32.0186178008027 -0.719219974031114 0.608555339334826 0.95048603 32.0017832500031 -0.748577590085526 0.717180500194244 0.95316194 31.9827634290997 -0.762410909232573 0.823948078815432 0.95620338 31.9615146080904 -0.761749518031159 0.927145656597054 0.95962429 31.9333188267512 -0.742405581722371 1.03935365236665 0.96420159 31.896133974985 -0.700081650202093 1.15274782675258 0.97030537 31.8537415829715 -0.642851000933783 1.24935078534098 0.97735889 31.81181331098 -0.583855287361637 1.31890539864464 0.9844368 31.7722523291009 -0.52944233527716 1.36818548098532 0.99120973 31.7438653577526 -0.491897118783858 1.39586195029988 0.99612736 31.7291763270549 -0.472950566343945 1.40845051389781 0.99869122 31.7217072867002 -0.463447276602563 1.41444136118236 1 -32.4183773097902 0.208515993143978 1.41444143718236 1 32.4183769697902 0.230428868494783 1.40654101280711 1 32.4183769697902 0.274386795812673 1.38819172293557 1 32.4183769697902 0.340060319251998 1.352535736242 1 32.4183769697902 0.42361158841047 1.2871869911381 1 32.4183769697902 0.498796362461555 1.20319866714887 1 32.4183769697902 0.560491614381922 1.10084200428719 1 32.4183769697902 0.597748087161509 0.996774824704261 1 32.4183769697902 0.614200232972944 0.899515794844706 1 32.4183769697902 0.616397663677317 0.797982349572126 1 32.4183769697902 0.603286407844565 0.693878234457446 1 32.4183769697902 0.569424242696199 0.590233999654609 1 32.4183769697902 0.51418802550262 0.492932551593039 1 32.4183769697902 0.442676084495985 0.404482602531892 1 32.4183769697902 0.355877809683288 0.32732432491707 1 32.4183769697902 0.252652863160367 0.268708200192954 1 32.4183769697902 0.138605139903391 0.233247368748655 1 32.4183769697902 0.0201240339958403 0.217832436316485 1 32.4183769697902 -0.0998694037735419 0.222970859380547 1 32.4183769697902 -0.235450488863298 0.258939153868949 1 32.4183769697902 -0.373083585980519 0.337094069381108 1 32.4183769697902 -0.484434072519383 0.444916593312403 1 32.4183769697902 -0.563781888948201 0.57296065804417 1 32.4183769697902 -0.603287652174625 0.693878908917478 1 32.4183769697902 -0.616398762167369 0.797983080002161 1 32.4183769697902 -0.614201228372992 0.899516493914739 1 32.4183769697902 -0.597748956941551 0.996775537894295 1 32.4183769697902 -0.560492321731956 1.10084265228722 1 32.4183769697902 -0.498797019581586 1.2031992711489 1 32.4183769697902 -0.423612111790495 1.28718743413812 1 32.4183769697902 -0.35050471677808 1.34436762685403 1 32.4183769697902 -0.28533279434258 1.38224928165331 1 32.4183769697902 -0.241418770796776 1.40195406758924 1 32.4183769697902 -0.219472775064397 1.41049133499474 1 32.4183772197902 -0.208516963644024 1.41444139018236 1 - -0 4 -0.39052523 1 -0.78105045 1 -1.18410863 4 - -0 5 -0.03846154 1 -0.07692308 1 -0.11538462 1 -0.15384615 1 -0.19230769 1 -0.23076923 1 -0.25 1 -0.26923077 1 -0.30769231 1 -0.34615385 1 -0.36538462 1 -0.38461538 1 -0.42307692 1 -0.46153846 1 -0.48076923 1 -0.5 1 -0.53846154 1 -0.57692308 1 -0.61538462 1 -0.65384615 1 -0.69230769 1 -0.73076923 1 -0.75 1 -0.76923077 1 -0.80769231 1 -0.84615385 1 -0.88461538 1 -0.92307692 1 -0.96153846 1 -0.98076923 1 -1 5 - -9 0 0 0 0 3 2 13 4 11 3 31.9768135388171 6.52772034505006 1.34215900474913 31.01492907313 4.97211271016267 1.17266812269874 29.0911601417559 1.86089743938788 0.833686358567975 28.1292756760688 0.305289803630487 0.664195476387591 -31.9776257188556 6.52787760605753 1.34058743667448 31.0159628731791 4.97234342617363 1.17015097357919 29.0926371918261 1.86127506740582 0.829278047298592 28.1309743561495 0.305740887431912 0.658841584043295 -31.9796644289525 6.52818048507192 1.33756072953072 31.019160623331 4.97273251419211 1.16541305835415 29.098153002088 1.86183657143249 0.821117715620997 28.1376491964666 0.306388600312677 0.648970044164422 -31.9833584091279 6.52855755808983 1.33379279035176 31.0249405036055 4.97315292021208 1.15967029208138 29.1081046925607 1.86234364445657 0.811425297120632 28.1496867970383 0.30693900613882 0.637302799540257 -31.9876254293306 6.5288832181053 1.3305387791972 31.0314678639156 4.97349169522817 1.15457946183958 29.1191527530855 1.86270864847391 0.802660826474342 28.1629951876704 0.30731712514678 0.626701508916723 -31.9920575595411 6.52916842511885 1.32768909906185 31.0382502542377 4.97376464924113 1.15007888362581 29.1306356436309 1.86295709748571 0.794858452093749 28.1768283383275 0.307553321457998 0.617248236277717 -31.9966522397594 6.52943877313169 1.32498794793355 31.0453044645728 4.97400342325247 1.14584320242463 29.1426089041996 1.86313272349405 0.787553710466792 28.191261129013 0.30769737396484 0.608408964567874 -32.0012638999784 6.52969316214377 1.32244629881283 31.0523935149095 4.97421614326258 1.14185770023533 29.1546527647716 1.8632621055002 0.780680503590332 28.2057823797027 0.307785086679007 0.600091905042835 -32.0059658002017 6.52993654115533 1.32001469869733 31.0596181652526 4.97440876527173 1.13803990705399 29.1669228953544 1.86335321450452 0.774090324447316 28.2205752604053 0.307825438490923 0.592115532973977 -32.0091598003534 6.5300832841623 1.3185486566277 31.0645287154859 4.97451102927658 1.1357304489443 29.1752665557507 1.86336651950516 0.770094032897502 28.2306354708832 0.307794265029442 0.587275825114104 -32.014036060585 6.53028479217187 1.31653555253208 31.0720285258421 4.97463153828231 1.1325576017936 29.1880134563562 1.86332503050319 0.76460170183663 28.2460059216132 0.307671776593624 0.580623751708147 -32.0174359507465 6.53039543717712 1.31543031647958 31.0772645760908 4.97466831528406 1.13081204871069 29.1969218267793 1.86321407249792 0.761575513642894 28.2567504421236 0.307486950444846 0.576957245903997 -32.0208866309104 6.53046184918028 1.31476716144809 31.0825822863434 4.9746334702824 1.1297553436605 29.2059735872092 1.86297671148664 0.759731710075318 28.2676692426422 0.307148332868762 0.574719893107729 - -0 4 -0.10050716 1 -0.20101433 1 -0.30117802 1 -0.4013417 1 -0.50136613 1 -0.60139055 1 -0.70125099 1 -0.7996628 1 -0.80111143 1 -1 4 - -0 3 -32.99348027 1 -65.98696054 3 - -9 0 0 0 0 2 3 4 27 3 25 33.0949317119248 6.52779751805373 1.34157750972151 33.0751543109855 6.52811956706903 1.33835550956847 33.0354316890987 6.52871351909724 1.3324126432862 32.9759893362754 6.52948805113403 1.32466167791805 32.9162629034385 6.53017449516663 1.31779103359171 32.8567681006127 6.53080887319676 1.31144079329009 32.8076428782793 6.53131102422061 1.30641382305132 32.7679022763918 6.53169881823903 1.30253135786692 32.7281508845037 6.53206964125665 1.29881851069057 32.6919298627833 6.53237668027123 1.29574372754452 32.6521050908917 6.53268608128592 1.29264473139733 32.6122951490008 6.5329718992995 1.28978142926133 32.5763027372913 6.53318839930978 1.28761156415826 32.5363966153958 6.5333971173197 1.28551880705886 32.4988313036116 6.53356580532771 1.28382651697848 32.4604938817907 6.53367703433299 1.28270835392537 32.4205272498923 6.5337551023367 1.28192133588799 32.3848972182 6.53378656433819 1.28160085487277 32.3448926862999 6.53374683633631 1.28199111989131 32.3049120644009 6.53365880533213 1.28286413393277 32.2692945227092 6.53352087632558 1.28423659299796 32.2293816708134 6.53328197131423 1.28661749911105 32.1895057089194 6.53298085329993 1.28962018425367 32.1543253672484 6.53262221928289 1.29319849642363 32.0948969144257 6.53186939524713 1.30071233378052 32.0554701025531 6.53120520921559 1.30734368909549 32.0208866309104 6.53046184918028 1.31476716144809 -32.7499748255403 4.93474840638796 1.16766948946132 32.7192204240795 4.93564017743032 1.16298702823892 32.6575667711511 4.93741089151442 1.15412881181817 32.5651846167632 4.94004520463955 1.1421308042483 32.472584992365 4.94267194976431 1.13122674473038 32.3801581979749 4.94531115288966 1.1211634432524 32.3039714143562 4.94750503299387 1.11341569388441 32.2422415114242 4.94928912707861 1.10751365360407 32.180486768491 4.95107294916334 1.10190174133752 32.1243025358224 4.95268575923994 1.09726041111707 32.062458792885 4.95445182732382 1.09258553789503 32.0006183199477 4.95620824040725 1.08826206168967 31.9448008672966 4.95776608248124 1.08498480853401 31.8828457843538 4.95947124256223 1.0818390673846 31.8244735415813 4.9610559516375 1.07930980626446 31.7650015787565 4.96261041271134 1.07765987218609 31.7029736558104 4.96419200378646 1.0765272571323 31.6476336431819 4.96556264385156 1.07611284811262 31.5855674002339 4.96700725992017 1.07683585714696 31.523503667286 4.96839015498586 1.07833730021827 31.4681498946568 4.96954612004076 1.08064176932773 31.4062086417148 4.97072058709655 1.08458515251503 31.3443655287774 4.97180469314804 1.08952466074964 31.2897805661848 4.97263065818727 1.09535999902681 31.1975343518033 4.97381913424372 1.10748819660286 31.1362556088927 4.97437685327021 1.11807348310564 31.0825822863434 4.9746334702824 1.1297553436605 -32.0600610427711 1.74865018405642 0.819853447300947 32.0073526302676 1.7506813981529 0.812250063599806 31.9018369252559 1.75480563634879 0.79756114746212 31.7435751777388 1.76115951265058 0.777069055988798 31.5852291702178 1.76766685795967 0.758098167717729 31.4269384126994 1.77431571427547 0.740608743727026 31.29662849651 1.77989304954038 0.727419435510568 31.1909200014891 1.78446974475776 0.717478243578386 31.0851585464657 1.78907956497672 0.708068202251433 30.9890478919007 1.79330391817736 0.700293778702168 30.8831661868716 1.79798331839962 0.692467150500423 30.7772646518416 1.80268092162275 0.68522332424636 30.6817971173071 1.80692144882416 0.679731297115503 30.5757441222699 1.8116194930473 0.67447958972606 30.4757580275208 1.81603624525709 0.670276383356418 30.3740169726883 1.82047716846802 0.667562910077535 30.2678664576464 1.82506580668597 0.665739098780909 30.1731064831456 1.82911480487829 0.665136832552303 30.0669168181018 1.83352810908791 0.666525331488253 29.9606868630562 1.83785285429332 0.669283633299265 29.8658606385522 1.84159660847114 0.673452121867258 29.7598625835176 1.84559782066119 0.680520458992986 29.6540851684934 1.84945237384427 0.689333611881588 29.5606909840574 1.85264753799603 0.699683003513158 29.4028092365584 1.8577186112369 0.721039922477557 29.297826631572 1.86072014137946 0.739533071485934 29.2059735872092 1.86297671148664 0.759731710075318 -31.7151041563865 0.155601073240654 0.64594542643076 31.6514187333616 0.158202009114192 0.636881581510251 31.5239720073083 0.163503008365976 0.619277315384093 31.3327704582267 0.171716666386104 0.594538182009047 31.1415512591442 0.180164312727345 0.571533879146401 30.9503285100617 0.188817994238373 0.550331393799337 30.7929570325869 0.196087058173635 0.534421306283649 30.6652592465216 0.202060053337337 0.522460538775543 30.5374944404531 0.208082872803406 0.511151432738389 30.4214205649399 0.213612997176072 0.501810462414717 30.2935198788649 0.21974906441752 0.492407956978122 30.1655878127885 0.225917262300494 0.483703955744704 30.0502952473124 0.231499132155618 0.477104541351249 29.9221932912278 0.237693618419841 0.470799850661792 29.8014002754905 0.243526392546882 0.465759672082396 29.6785246696542 0.249410546986365 0.462514428918256 29.5503128635645 0.255502708045727 0.460345019605214 29.4358429081274 0.260890884931651 0.459648824992147 29.3075915220358 0.266788533021775 0.461370068843901 29.1792784659413 0.272584203627054 0.464756799784762 29.0647160204999 0.27762185237633 0.469857298097023 28.9366895544189 0.283036437433509 0.478488112366965 28.8089449883514 0.288276213802385 0.489238087677561 28.6961461829937 0.292655977140412 0.501844505726334 28.505446673936 0.299668350593482 0.527815785529903 28.3786121379117 0.303891784814085 0.550262865726082 28.2676692426422 0.307148332868762 0.574719893107729 - -0 3 -1.50650805 1 -3.0130161 3 - -0 4 -0.05570744 1 -0.11141488 1 -0.16696246 1 -0.22251004 1 -0.27805727 1 -0.30397683 1 -0.33360449 1 -0.38915113 1 -0.4048358 1 -0.44469776 1 -0.50024348 1 -0.50488387 1 -0.5557892 1 -0.60493193 1 -0.61133224 1 -0.66687527 1 -0.70412236 1 -0.72242177 1 -0.77796828 1 -0.80331279 1 -0.8335034 1 -0.88903851 1 -0.9016564 1 -1 4 - -9 1 1 0 0 4 3 20 4 17 2 32.4183769697902 -8.97180042613763e-007 0.221258007919191 1 32.5955505782055 -6.92920032911934e-007 0.275451984623267 1 32.7725279766115 -4.78380022721831e-007 0.330344534450523 1 32.9492818450068 -2.51270011934685e-007 0.385932318830801 1 -32.4183769697902 0.0198719786838683 0.22125799555919 1 32.5935439781102 0.0166567782111545 0.275210549321799 0.99432209 32.7705106865157 0.013365243554815 0.330482605967081 0.98864418 32.9492818150068 0.00999475977472559 0.387081735455395 0.98296628 -32.4183769697902 0.0596177359616904 0.222970747120542 1 32.5895673579213 0.050361924592063 0.276065393542402 0.98325745 32.7664431163225 0.0406644601914581 0.331701403054971 0.9665149 32.9492817450068 0.0305022608987796 0.389974052952773 0.94977235 -32.4183769697902 0.138605139903391 0.233247368748655 1 32.5817831575516 0.118902490467565 0.28333205772755 0.96229287 32.758201385931 0.0972974650813814 0.338206541173948 0.92458573 32.9492816250068 0.0735684152643121 0.398395538012772 0.8868786 -32.4183769697902 0.252652863160367 0.268708200192954 1 32.5708664570331 0.221319688622121 0.311408071501089 0.93434009 32.7459757953503 0.184665518311141 0.361266461449235 0.86868017 32.9492814550068 0.141483752450117 0.419886484193537 0.80302026 -32.4183769697902 0.355877809683288 0.32732432491707 1 32.5611437165713 0.317771918303355 0.360840726629014 0.91075493 32.7343708747991 0.270482982417252 0.402334067289842 0.82150986 32.9492813150068 0.210886663836579 0.454509442358039 0.73226479 -32.4183769697902 0.442676084495985 0.404482602531892 1 32.5528538561775 0.402181284982585 0.429149465493505 0.89153739 32.7238902243013 0.349220414277079 0.46132688547185 0.78307479 32.9492812250068 0.278201215013848 0.504378968516714 0.67461218 -32.4183769697902 0.51418802550262 0.492932551593039 1 32.5458136458431 0.474411141953319 0.510654098994767 0.87581396 32.7145277038566 0.419876638943069 0.534883771065615 0.75162791 32.9492811950068 0.342477898996827 0.569192420665188 0.62744187 -32.4183769697902 0.569424242696199 0.590233999654609 1 32.5401778555754 0.532158590946176 0.603202827900596 0.86358462 32.7067009834849 0.47891960997746 0.62165613176708 0.72716923 32.9492812250068 0.399567453958435 0.649079376379615 0.59075385 -32.4183769697902 0.603286407844565 0.693878234457446 1 32.5364995654007 0.568951860643762 0.704378496926182 0.8557229 32.7014151032338 0.518325492839139 0.719713205554541 0.71144579 32.9492813450068 0.44016805630686 0.743257089652816 0.56716869 -32.4183769697902 0.616397663677317 0.797982349572126 1 32.5348909253243 0.584136639085 0.808262964870429 0.8522288 32.699040453121 0.535617744200476 0.823380807048488 0.7044576 32.9492815750068 0.459317062316389 0.846891879695204 0.5566864 -32.4183769697902 0.614200232972944 0.899515794844706 1 32.5349779253285 0.582655098754631 0.91093754907721 0.8522288 32.6991329631254 0.534818949032536 0.927618090989493 0.7044576 32.9492818650068 0.45931708834639 0.953481628297945 0.5566864 -32.4183769697902 0.597748087161509 0.996774824704261 1 32.5367608554131 0.565350224252693 1.00981781896377 0.8557229 32.701693393247 0.516455560750322 1.02855669485382 0.71144579 32.9492822250068 0.440168132956863 1.05711642721033 0.56716869 -32.4183769697902 0.560491614381922 1.10084200428719 1 32.5412487556263 0.524823580627781 1.11559490998791 0.8648949 32.7080541435491 0.472302576673168 1.13614139496382 0.7297898 32.9492826850069 0.393113914651908 1.16626418339457 0.59468471 -32.4183769697902 0.498796362461555 1.20319866714887 1 32.5494674360167 0.45676894188536 1.21860172088047 0.88236539 32.7192575440813 0.397924667950407 1.23898936584883 0.76473078 32.9492832350069 0.314557294460669 1.26697655717815 0.64709617 -32.4183769697902 0.42361158841047 1.2871869911381 1 32.5604026365361 0.374016994114853 1.30088923478892 0.90682407 32.733294124748 0.309028938368086 1.31789479759664 0.81364814 32.9492837450069 0.223779335838948 1.33943253361963 0.72047221 -32.4183769697902 0.340060319251998 1.352535736242 1 32.5736001771629 0.283213244271907 1.36204763069379 0.93827095 32.7490240054951 0.214261898486894 1.37299118421358 0.87654189 32.9492841950069 0.131088696766379 1.38567307281594 0.81481284 -32.4183769697902 0.274386795812673 1.38819172293557 1 32.5849312177011 0.212653721140509 1.39335010718058 0.96709725 32.7615764560913 0.142480674927469 1.39891498944489 0.9341945 32.949284475007 0.0631684621303408 1.40492628073041 0.90129175 -32.4183769697902 0.230428868494783 1.40654101280711 1 32.5929656280827 0.166049587306932 1.4083386898925 0.98864418 32.769991506491 0.0961064613648118 1.41019188898052 0.97728837 32.949284645007 0.0203425346262185 1.41210203107124 0.96593255 -32.4183773097902 0.208515993143978 1.41444143718236 1 32.5970603082772 0.143130653238341 1.41444142918236 1 32.7741352066878 0.0736935940402577 1.41444142218236 1 32.949284715007 -9.00000042747706e-011 1.41444141318236 1 - -0 5 -0.11554159 1 -0.23108318 1 -0.46216637 1 -0.69324955 1 -0.80879114 1 -0.92433273 1 -1.15541592 1 -1.3864991 1 -1.50204069 1 -1.61758228 1 -1.84866547 1 -2.07974865 1 -2.31083183 1 -2.54191502 1 -2.7729982 1 -3.00408138 5 - -0 4 -1 4 - -9 0 0 0 0 3 2 27 4 25 3 33.0949317119248 -6.52779751805373 1.34157750972151 32.7499748255403 -4.93474840638796 1.16766948946132 32.0600610427711 -1.74865018405642 0.819853447300947 31.7151041563865 -0.155601073240654 0.64594542643076 -33.0751543109855 -6.52811956706903 1.33835550956847 32.7192204240795 -4.93564017743032 1.16298702823892 32.0073526302676 -1.7506813981529 0.812250063599806 31.6514187333616 -0.158202009114192 0.636881581510251 -33.0354316890987 -6.52871351909724 1.3324126432862 32.6575667711511 -4.93741089151442 1.15412881181817 31.9018369252559 -1.75480563634879 0.79756114746212 31.5239720073083 -0.163503008365976 0.619277315384093 -32.9759893362754 -6.52948805113403 1.32466167791805 32.5651846167632 -4.94004520463955 1.1421308042483 31.7435751777388 -1.76115951265058 0.777069055988798 31.3327704582267 -0.171716666386104 0.594538182009047 -32.9162629034385 -6.53017449516663 1.31779103359171 32.472584992365 -4.94267194976431 1.13122674473038 31.5852291702178 -1.76766685795967 0.758098167717729 31.1415512591442 -0.180164312727345 0.571533879146401 -32.8567681006127 -6.53080887319676 1.31144079329009 32.3801581979749 -4.94531115288966 1.1211634432524 31.4269384126994 -1.77431571427547 0.740608743727026 30.9503285100617 -0.188817994238373 0.550331393799337 -32.8076428782793 -6.53131102422061 1.30641382305132 32.3039714143562 -4.94750503299387 1.11341569388441 31.29662849651 -1.77989304954038 0.727419435510568 30.7929570325869 -0.196087058173635 0.534421306283649 -32.7679022763918 -6.53169881823903 1.30253135786692 32.2422415114242 -4.94928912707861 1.10751365360407 31.1909200014891 -1.78446974475776 0.717478243578386 30.6652592465216 -0.202060053337337 0.522460538775543 -32.7281508845037 -6.53206964125665 1.29881851069057 32.180486768491 -4.95107294916334 1.10190174133752 31.0851585464657 -1.78907956497672 0.708068202251433 30.5374944404531 -0.208082872803406 0.511151432738389 -32.6919298627833 -6.53237668027123 1.29574372754452 32.1243025358224 -4.95268575923994 1.09726041111707 30.9890478919007 -1.79330391817736 0.700293778702168 30.4214205649399 -0.213612997176072 0.501810462414717 -32.6521050908917 -6.53268608128592 1.29264473139733 32.062458792885 -4.95445182732382 1.09258553789503 30.8831661868716 -1.79798331839962 0.692467150500423 30.2935198788649 -0.21974906441752 0.492407956978122 -32.6122951490008 -6.5329718992995 1.28978142926133 32.0006183199477 -4.95620824040725 1.08826206168967 30.7772646518416 -1.80268092162275 0.68522332424636 30.1655878127885 -0.225917262300494 0.483703955744704 -32.5763027372913 -6.53318839930978 1.28761156415826 31.9448008672966 -4.95776608248124 1.08498480853401 30.6817971173071 -1.80692144882416 0.679731297115503 30.0502952473124 -0.231499132155618 0.477104541351249 -32.5363966153958 -6.5333971173197 1.28551880705886 31.8828457843538 -4.95947124256223 1.0818390673846 30.5757441222699 -1.8116194930473 0.67447958972606 29.9221932912278 -0.237693618419841 0.470799850661792 -32.4988313036116 -6.53356580532771 1.28382651697848 31.8244735415813 -4.9610559516375 1.07930980626446 30.4757580275208 -1.81603624525709 0.670276383356418 29.8014002754905 -0.243526392546882 0.465759672082396 -32.4604938817907 -6.53367703433299 1.28270835392537 31.7650015787565 -4.96261041271134 1.07765987218609 30.3740169726883 -1.82047716846802 0.667562910077535 29.6785246696542 -0.249410546986365 0.462514428918256 -32.4205272498923 -6.5337551023367 1.28192133588799 31.7029736558104 -4.96419200378646 1.0765272571323 30.2678664576464 -1.82506580668597 0.665739098780909 29.5503128635645 -0.255502708045727 0.460345019605214 -32.3848972182 -6.53378656433819 1.28160085487277 31.6476336431819 -4.96556264385156 1.07611284811262 30.1731064831456 -1.82911480487829 0.665136832552303 29.4358429081274 -0.260890884931651 0.459648824992147 -32.3448926862999 -6.53374683633631 1.28199111989131 31.5855674002339 -4.96700725992017 1.07683585714696 30.0669168181018 -1.83352810908791 0.666525331488253 29.3075915220358 -0.266788533021775 0.461370068843901 -32.3049120644009 -6.53365880533213 1.28286413393277 31.523503667286 -4.96839015498586 1.07833730021827 29.9606868630562 -1.83785285429332 0.669283633299265 29.1792784659413 -0.272584203627054 0.464756799784762 -32.2692945227092 -6.53352087632558 1.28423659299796 31.4681498946568 -4.96954612004076 1.08064176932773 29.8658606385522 -1.84159660847114 0.673452121867258 29.0647160204999 -0.27762185237633 0.469857298097023 -32.2293816708134 -6.53328197131423 1.28661749911105 31.4062086417148 -4.97072058709655 1.08458515251503 29.7598625835176 -1.84559782066119 0.680520458992986 28.9366895544189 -0.283036437433509 0.478488112366965 -32.1895057089194 -6.53298085329993 1.28962018425367 31.3443655287774 -4.97180469314804 1.08952466074964 29.6540851684934 -1.84945237384427 0.689333611881588 28.8089449883514 -0.288276213802385 0.489238087677561 -32.1543253672484 -6.53262221928289 1.29319849642363 31.2897805661848 -4.97263065818727 1.09535999902681 29.5606909840574 -1.85264753799603 0.699683003513158 28.6961461829937 -0.292655977140412 0.501844505726334 -32.0948969144257 -6.53186939524713 1.30071233378052 31.1975343518033 -4.97381913424372 1.10748819660286 29.4028092365584 -1.8577186112369 0.721039922477557 28.505446673936 -0.299668350593482 0.527815785529903 -32.0554701025531 -6.53120520921559 1.30734368909549 31.1362556088927 -4.97437685327021 1.11807348310564 29.297826631572 -1.86072014137946 0.739533071485934 28.3786121379117 -0.303891784814085 0.550262865726082 -32.0208866309104 -6.53046184918028 1.31476716144809 31.0825822863434 -4.9746334702824 1.1297553436605 29.2059735872092 -1.86297671148664 0.759731710075318 28.2676692426422 -0.307148332868762 0.574719893107729 - -0 4 -0.05570744 1 -0.11141488 1 -0.16696246 1 -0.22251004 1 -0.27805727 1 -0.30397683 1 -0.33360449 1 -0.38915113 1 -0.4048358 1 -0.44469776 1 -0.50024348 1 -0.50488387 1 -0.5557892 1 -0.60493193 1 -0.61133224 1 -0.66687527 1 -0.70412236 1 -0.72242177 1 -0.77796828 1 -0.80331279 1 -0.8335034 1 -0.88903851 1 -0.9016564 1 -1 4 - -0 3 -1.50650805 1 -3.0130161 3 - -9 0 0 0 0 3 2 17 4 15 3 32.0208866309104 -6.53046184918028 1.31476716144809 31.0825822863434 -4.9746334702824 1.1297553436605 29.2059735872092 -1.86297671148664 0.759731710075318 28.2676692426422 -0.307148332868762 0.574719893107729 -32.0174108207453 -6.5303949531771 1.31543514747981 31.077225846089 -4.97466856928407 1.13081974571105 29.1968558967762 -1.863215800498 0.761588943223532 28.2566709221198 -0.307489416804963 0.576973541944771 -32.0123115705031 -6.5302285001692 1.31709785555879 31.0693727157159 -4.97461261628141 1.13344564083578 29.1834949961416 -1.86338084650584 0.766141211199753 28.2405561413544 -0.307764961818051 0.582488996446741 -32.0059369002004 -6.52993506515526 1.32002944469803 31.0595748952506 -4.97440760527167 1.13806254805507 29.166850875351 -1.8633526855045 0.774128754589141 28.2204888704012 -0.307825225570913 0.592161857776178 -32.0027806400504 -6.5297716511475 1.32166211677558 31.0547235150202 -4.97427822626553 1.14062696317687 29.1586092649596 -1.86329137750159 0.778556656259455 28.2105521399293 -0.307797952679618 0.597521502820747 -31.9996599799022 -6.52960474713957 1.32332966785478 31.0499279847924 -4.97414225225907 1.14324290430112 29.1504640045727 -1.86321726249807 0.783069375583798 28.2007320094628 -0.307754768047566 0.602982611390136 -31.9965831497561 -6.52943477113149 1.32502793293545 31.0451996845678 -4.97399995325231 1.14590501842757 29.1424327541912 -1.86313031849394 0.787659189741802 28.1910492890029 -0.307695501554751 0.608536275293921 -31.9935173996105 -6.52925425412292 1.32683154602111 31.0404909243441 -4.97384035924473 1.14873495756198 29.1344379838115 -1.86301257048834 0.792541783003713 28.1814115085452 -0.307598676510152 0.614445195484579 -31.9905438394692 -6.52907101711422 1.32866236210807 31.0359338441277 -4.97367142623671 1.15161598369882 29.1267138534446 -1.86287224348168 0.797523227640319 28.1721038481031 -0.307472652404167 0.620476849581068 -31.9890277493972 -6.52897325810957 1.32963913715447 31.0336148240175 -4.97357776023226 1.15315792377206 29.1227889832582 -1.86278676647762 0.800195497717245 28.1673760578785 -0.307391269690301 0.623714284684837 -31.9861686792614 -6.52877203910002 1.33164968724996 31.0292394438097 -4.97337603822267 1.15631745292213 29.1153809829063 -1.86258403746799 0.805652985636462 28.1584517474546 -0.307188036660648 0.630320751898628 -31.9847156291924 -6.52866071909473 1.33276199530279 31.0270153637041 -4.97326009621717 1.15805749400478 29.1116148227274 -1.86245884946204 0.80864849003874 28.1539145572391 -0.307058226254482 0.633943988290722 -31.9820989290681 -6.52842899308372 1.33507748741278 31.0229698235119 -4.97300958020527 1.16162831617438 29.1047116223996 -1.86217075544836 0.814729973927596 28.1455825168434 -0.306751342619906 0.641280802829202 -31.9808528690089 -6.52830118407765 1.33635463547344 31.0210205534193 -4.97286678219849 1.16357509426685 29.1013559222402 -1.86199797744015 0.818016010803674 28.1415236066506 -0.306563575560988 0.645236469207086 -31.9786322689035 -6.52802714406464 1.33909308860351 31.0175416632541 -4.97253552718275 1.16781176646808 29.0953604619554 -1.86155229341899 0.825249121637228 28.1342698663061 -0.306060676767101 0.653967799261802 -31.9776155188552 -6.52787563105744 1.34060717367542 31.0159498931785 -4.97234052917349 1.17018258458069 29.0926186418252 -1.86127032440559 0.829333408441221 28.1309530161485 -0.305735222561643 0.658908820136488 -31.9768135388171 -6.52772034505006 1.34215900474913 31.01492907313 -4.97211271016267 1.17266812269874 29.0911601417559 -1.86089743938788 0.833686358567975 28.1292756760688 -0.305289803630487 0.664195476387591 - -0 4 -0.2003372 1 -0.30051995 1 -0.39860945 1 -0.4007027 1 -0.50095845 1 -0.5986583 1 -0.6012142 1 -0.69882198 1 -0.70136214 1 -0.79898567 1 -0.80151008 1 -0.89949284 1 -0.90075504 1 -1 4 - -0 3 -33.00573364 1 -66.01146728 3 - -9 1 1 0 0 3 2 6 4 4 3 25.9893209044264 -1.2407928679345 1.41444127418235 1 25.9893209344264 -0.723604166519352 1.92052181521989 0.85737039 25.9893209344264 0.723602338749265 1.9205219782199 0.85737039 25.9893209044264 1.24079115393441 1.41444155318237 1 -26.7065109884911 -1.21027243248485 1.41444127718235 1 26.6771494170965 -0.709426906225968 1.87757598918007 0.8529936 26.6771494170965 0.70942484422587 1.87757614918008 0.8529936 26.7065109984911 1.21027048648476 1.41444154918237 1 -28.1506004970817 -1.12559133446272 1.41444128718235 1 28.0835873238988 -0.666630513403249 1.79034847403699 0.84424001 28.0835872638988 0.666627888893124 1.79034862403699 0.84424001 28.1506003870817 1.1255888294626 1.41444154018237 1 -30.3018883192624 -0.844083729111824 1.41444131818235 1 30.2330803859942 -0.507891786923564 1.6546025515894 0.83096916 30.2330803059942 0.507888670973416 1.65460266558941 0.83096916 30.3018881792624 0.844080731411682 1.41444150818236 1 -31.7217072867002 -0.463447276602563 1.41444136118236 1 31.6903881952126 -0.281876920968435 1.56117344415176 0.8220751 31.6903881052126 0.281874858058337 1.56117350815176 0.8220751 31.7217071467002 0.463445326412471 1.41444146518236 1 -32.4183772197902 -0.208516963644024 1.41444139018236 1 32.4183771297902 -0.12752453053709 1.51294272586092 0.81755784 32.4183771797902 0.127523451547039 1.51294275486092 0.81755784 32.4183773097902 0.208515993143978 1.41444143718236 1 - -0 4 -0.97957324 1 -1.95914649 1 -2.97015674 4 - -0 3 -0.5 1 -1 3 - -9 0 0 0 0 2 3 4 26 3 24 32.0213115109306 6.52591981196454 1.36016157360421 32.0610295228171 6.52557503794817 1.36361408176819 32.1205334756434 6.52495908791891 1.36978014606106 32.1908088589813 6.5242409868848 1.37696896840251 32.2305343508682 6.52386478386694 1.38073558958142 32.2702835827562 6.52351710785042 1.38421709774678 32.3058010444431 6.52325423283794 1.38685036787185 32.3456379663353 6.52301800082672 1.38921809498432 32.3877616283361 6.52281738781719 1.39123023207989 32.4410208208657 6.52268670681098 1.39254533314235 32.4991581136271 6.52270521881186 1.39237018913403 32.5567739963637 6.52287493781992 1.39068374505393 32.6109234689357 6.5231776608343 1.38766744291066 32.6523562209036 6.52349655684945 1.38448734775962 32.6920955727911 6.52384260186588 1.38103562459567 32.7281858045053 6.52420069388289 1.37746288442597 32.7678179363878 6.52463761990364 1.37310285421888 32.8074347482695 6.52509229792524 1.36856540600337 32.8434511699801 6.52551691294541 1.36432780280209 32.8830764318622 6.52596903296688 1.35981592158779 32.9227018537444 6.52640620198765 1.35545346238058 32.95903221547 6.5267737280051 1.35178646820641 32.9987756973577 6.52713773102239 1.34815527103394 33.038532919246 6.52746753003806 1.3448659268777 33.0749870309775 6.52769816004901 1.34256712776851 33.0949317119248 6.52779751805373 1.34157750972151 -31.0832152563734 4.96750017294359 1.20054947602304 31.1448174592994 4.96528076583817 1.20624385729351 31.2371586936854 4.96187958967662 1.21576739474585 31.3462608188674 4.95797250649105 1.22650630225592 31.4079322917967 4.95583189038937 1.23209832752153 31.4696410247277 4.95374629329031 1.23726817476708 31.5247809773467 4.95196953320592 1.24120735095418 31.5866247002841 4.95008579111645 1.24474795312235 31.6520266333905 4.94818542802619 1.24774681526479 31.7347407173192 4.94601355492303 1.24963526335449 31.8249756616052 4.94396887382591 1.24901781632516 31.9143536158504 4.94223190574341 1.24607004318515 31.9984159198431 4.94087836067912 1.24108628594843 32.0627882629007 4.9400210566384 1.23592199570314 32.1244779458308 4.93929008360368 1.23033367843771 32.1804318684884 4.93872723957695 1.22458176016451 32.2419717614114 4.93820960755236 1.21764670283511 32.3035188143347 4.93774506653029 1.21045751949364 32.3594369069907 4.93737946551293 1.2037573331754 32.420984059914 4.93699966249489 1.19657020983403 32.4825106628364 4.93663116047739 1.1895943865027 32.5388447455121 4.9362924384613 1.18372425622388 32.6005679284438 4.93589573044246 1.17792832394859 32.6623870813801 4.9354733944224 1.17270023970027 32.7189964840689 4.93502317540101 1.16914572553144 32.7499748255403 4.93474840638796 1.16766948946132 -29.2070227372591 1.85066089390167 0.881325279380702 29.3123933222639 1.84469222161817 0.891503409684138 29.4704091497693 1.83572059219205 0.907741891635424 29.6571647386397 1.82543554670353 0.925580970172735 29.7627281836537 1.81976610343425 0.934823804381746 29.8683558986707 1.81420466317009 0.943370328297684 29.9627408331538 1.80940013494189 0.949921315608839 30.0685981581817 1.80422136969591 0.955807669588426 30.1805566534995 1.79892150844418 0.960779981554598 30.3221804902262 1.79266725114712 0.96381512397876 30.4766107775613 1.78649618385401 0.962313071137416 30.6295128548237 1.78094584259038 0.956842638387585 30.773400821658 1.77627975836876 0.947923972103971 30.8836523668947 1.7730700562163 0.938791292900192 30.98924270191 1.77018504607927 0.928929784541795 31.0849239864546 1.76778033196506 0.918819512091583 31.1902794314587 1.76535358184979 0.906734400257571 31.2956869464653 1.76305060474041 0.894241746344202 31.3914083610118 1.76110457064797 0.882616392752027 31.4967993260176 1.75906092255091 0.870078785776523 31.6021282910205 1.75708107845687 0.857876235866933 31.6984698155965 1.75532985937369 0.84759983239883 31.8041523906161 1.75341172728258 0.837474428947899 31.9100954156481 1.75148512419108 0.828368865475408 32.0070153802516 1.74967320410501 0.822302920967291 32.0600610427711 1.74865018405642 0.819853447300947 -28.2689264827019 0.292241255160714 0.721713181239535 28.3961812587462 0.284397949308177 0.734133185749454 28.5870343678112 0.272641093469756 0.753729140240211 28.8126166985258 0.259167066449775 0.775118303946142 28.9401261245822 0.251733210446685 0.786186542591855 29.0677133406422 0.244433847629984 0.796421405117985 29.1817207560573 0.238115434989876 0.804278298051168 29.3095848921305 0.231289159275645 0.811337527776463 29.4448216585539 0.224289548483181 0.817296564549502 29.6159003866797 0.215994099319169 0.820905054190896 29.8024283255393 0.207759839438062 0.818960698558544 29.9870924743104 0.200302810283873 0.812228936158802 30.1608932725655 0.193980458033577 0.80134281528174 30.2940844088917 0.189594556135258 0.790225941423716 30.4216250749496 0.185632528127072 0.778227837773837 30.5371700504377 0.182306878039112 0.76593838801012 30.6644332564824 0.178925569838508 0.7512782490838 30.7917710125306 0.175703373785462 0.73613385993448 30.9073940980224 0.172967123165497 0.72204592278534 31.0347069540694 0.170091552488915 0.706833073972768 31.1619371001125 0.16730603716661 0.69201716031905 31.2782823556386 0.164848569069887 0.679537620406304 31.4059446117023 0.162169725972648 0.667247481652553 31.5339495777822 0.159490988805415 0.656203178347977 31.6510248333429 0.156998219177015 0.648881518810217 31.7151041563865 0.155601073240654 0.64594542643076 - -0 3 -1.50880726 1 -3.01761452 3 - -0 4 -0.11103083 1 -0.16659245 1 -0.196748 1 -0.22215408 1 -0.27771208 1 -0.29593722 1 -0.33327008 1 -0.39512644 1 -0.44434037 1 -0.49514916 1 -0.55541065 1 -0.59517188 1 -0.61096997 1 -0.66652929 1 -0.69603633 1 -0.72209161 1 -0.77765393 1 -0.79690078 1 -0.83321457 1 -0.88877522 1 -0.89845039 1 -0.94438761 1 -1 4 - -9 0 0 0 0 3 2 20 4 18 3 32.0213115109306 6.52591981196454 1.36016157360421 31.0832152563734 4.96750017294359 1.20054947602304 29.2070227372591 1.85066089390167 0.881325279380702 28.2689264827019 0.292241255160714 0.721713181239535 -32.0195981608492 6.5259525669661 1.35983391758864 31.0805800662483 4.96762083194932 1.20004355499901 29.2025438770463 1.85095736191575 0.880462830019738 28.2635257924454 0.292625626828971 0.720672467560104 -32.0179362407703 6.5259988509683 1.35937106356666 31.0780221161268 4.96776049595595 1.19932877596506 29.1981938868397 1.85128378693126 0.879244201521857 28.2582797721962 0.29304543204891 0.719201914170256 -32.014476420606 6.52604397397044 1.35891950054521 31.0726944658737 4.96797050196593 1.1986475049327 29.1891305464092 1.8518235579569 0.878103514097677 28.247348591677 0.29375008651238 0.717831518655166 -32.0125978305167 6.52604328697041 1.35892605054552 31.0698047657365 4.96804558796949 1.19866448193351 29.1842186161759 1.85205019096766 0.878141344459474 28.2414255413957 0.294052492146743 0.717879775677458 -32.0091448703527 6.52607647797198 1.35859374052974 31.0644998454845 4.96823892297868 1.19814180990868 29.175209795748 1.85256381099206 0.877237949136565 28.2305647708798 0.294726255258745 0.716786018585507 -32.0074207502708 6.52611315297373 1.35822691351231 31.0618457653584 4.96836616398472 1.1975779238819 29.1706958055336 1.8528721870067 0.876279946121062 28.2251208206212 0.295125198837694 0.715630957130645 -32.0040059401086 6.52614984397547 1.35785962949487 31.0565789851083 4.96856015699393 1.19704484085658 29.1617250651076 1.85338078203086 0.875415265619992 28.2142981001072 0.295791094039322 0.7146004777817 -32.002077120017 6.52615066997551 1.35785104949446 31.0536122749674 4.96863996599772 1.19703635885617 29.156682584868 1.85361855704215 0.875406978219598 28.2082177398184 0.296107853314368 0.714592287951311 -31.9986822598558 6.52619487997761 1.35740863147345 31.0484060147201 4.96885029000771 1.19631807882206 29.1478535444487 1.85416111106792 0.874136974689276 28.197577309313 0.296816521068028 0.713046422387886 -31.9969259197724 6.52624475097998 1.35690990744976 31.0457036145917 4.96899990601482 1.19554477178533 29.1432589842305 1.8545102160845 0.872814499746462 28.1920366790498 0.297265370679347 0.71144936381203 -31.9936058596147 6.52631217498318 1.35623548441773 31.0405779643483 4.9692373840261 1.19454376173778 29.1345221838155 1.85508780011194 0.871160316717893 28.1814942985491 0.298013008604858 0.709468594297949 -31.9916632495224 6.52633423798423 1.35601465740724 31.0375919242064 4.9693510280315 1.19420364172163 29.1294492735745 1.85538461012604 0.870581610130406 28.1753779482586 0.298401400633305 0.708770594404795 -31.9883847393667 6.52641453798804 1.35521155436909 31.0325750739682 4.96961380104398 1.19291129866024 29.1209557231711 1.85601232815585 0.868310787992547 28.1651460477726 0.299211591051787 0.706010532433699 -31.9866428592839 6.52648649599146 1.35449209133492 31.029897763841 4.96979779805272 1.19178877460693 29.1164075729551 1.85642040217523 0.866382141270942 28.1596624775121 0.299731703776491 0.703678824472949 -31.9835034791348 6.52661267499745 1.353230491275 31.0250512936108 4.97011976506801 1.18987273451592 29.1081469325627 1.85713394420912 0.863157222517766 28.1496947470387 0.300641034159682 0.69979946630869 -31.9816308290459 6.52668260400077 1.35253128324179 31.0221954034751 4.97030522007682 1.1887775764639 29.1033245623337 1.85755045222891 0.861270161918136 28.1438891367629 0.301173068524952 0.697516454740252 -31.9777014388592 6.52699314101552 1.34942703009434 31.0162679131936 4.97095567810771 1.18384361722955 29.0934008518623 1.85888075129209 0.852676791759972 28.1319673261967 0.302843288144284 0.687093379125183 -31.9764636788005 6.52739737503472 1.34538679790244 31.0143909631045 4.97162784513964 1.17764030293491 29.0902455317125 1.86008878434947 0.842147311759849 28.1281728160165 0.304319254304388 0.674400816372318 -31.9768135388171 6.52772034505006 1.34215900474913 31.01492907313 4.97211271016267 1.17266812269874 29.0911601417559 1.86089743938788 0.833686358567975 28.1292756760688 0.305289803630487 0.664195476387591 - -0 4 -0.10020575 1 -0.10171398 1 -0.20041149 1 -0.20342797 1 -0.30071455 1 -0.30515005 1 -0.40101761 1 -0.40687214 1 -0.50137911 1 -0.50852645 1 -0.60174061 1 -0.61018076 1 -0.70204415 1 -0.71139469 1 -0.8023477 1 -0.81260862 1 -1 4 - -0 3 -33.12627597 1 -66.25255193 3 - -9 0 0 0 0 3 2 24 4 22 3 26.2385734862653 -0.133972769733365 1.67118258137691 27.5049869164167 -0.111812822860824 3.21464695668753 30.0378137767195 -0.067492929105742 6.30157570730877 31.3042272068709 -0.045332982233201 7.84504008261939 -26.3221248302338 -0.150819505293542 1.66585452612384 27.5748616097356 -0.125674429739215 3.21065072549772 30.0803351787392 -0.0753842786205609 6.30024312424548 31.333071958241 -0.050239203066234 7.84503932261936 -26.4089476643576 -0.166482214647481 1.66030359286019 27.6474531931835 -0.138597253173016 3.20648738229997 30.1244642508352 -0.0828273302240869 6.29885496117954 31.3629697796611 -0.0549423687496224 7.84503875061933 -26.5773176623548 -0.193400207166017 1.64952352334816 27.7882119698692 -0.160882582261512 3.19840215691594 30.210000584898 -0.0958473324525038 6.29615942505151 31.4208948824124 -0.0633297075479996 7.84503805861929 -26.6671877866234 -0.206000402394494 1.64376167707449 27.8633361134374 -0.171357505609044 3.19408073371069 30.2556327770654 -0.102071712038146 6.29471884798309 31.4517811038794 -0.0674288152526967 7.84503790461929 -26.8340617545495 -0.226727837208994 1.63305734956606 28.0028178000624 -0.188632847959579 3.18605246632936 30.3403298710883 -0.112442869470749 6.29204270185598 31.5090859166012 -0.0743478802213347 7.84503781961928 -26.9272687289766 -0.236869101680678 1.62707594028196 28.0807210937626 -0.197111936142314 3.18156642311629 30.3876258333347 -0.117597605045586 6.29054738978495 31.5410781981208 -0.0778404395072223 7.84503787261929 -27.0923852668192 -0.252403219598509 1.61648695577901 28.2187268903175 -0.21014834783151 3.17362475173908 30.4714101173143 -0.125638604297513 6.28790034465923 31.5977517308126 -0.0833837325305146 7.8450381406193 -27.1879642213589 -0.260064135942383 1.61036194648808 28.2986098741118 -0.216605696228218 3.16903105852089 30.5199011796175 -0.129688816809888 6.2863692805865 31.6305468323703 -0.0862303770957229 7.84503839261931 -27.4385005532588 -0.277581877764431 1.59433205672671 28.5080015540574 -0.231377759269853 3.15700879694986 30.6470035456545 -0.138969522290698 6.28236227739618 31.7165045364531 -0.09276540379612 7.84503901761934 -27.6248403021094 -0.286903391567179 1.58244993316234 28.6637460114548 -0.23924905940372 3.14809729352659 30.7415574501456 -0.143940395076802 6.2793920142551 31.7804631694909 -0.0962860629133424 7.84503937461936 -27.9611700380843 -0.297806707585059 1.56117826715199 28.9448640248072 -0.24843818431018 3.13214366176883 30.9122519982531 -0.149701137750422 6.27407444900253 31.8959459849761 -0.100332614465543 7.84503984361938 -28.1499816170523 -0.300652547040229 1.5493379885896 29.102679622303 -0.250822399883424 3.12326349434705 31.0080756228045 -0.151162105579814 6.27111450586194 31.9607736180552 -0.10133195843301 7.84504001161939 -28.4864236030325 -0.299853141422259 1.52852821960119 29.3838787556593 -0.250110963269633 3.10765625460574 31.1787890709129 -0.15062660697438 6.26591232561485 32.0762442235398 -0.100884428831753 7.8450403616194 -28.6783108021466 -0.29604558607141 1.51683037304557 29.5442574932769 -0.246875488625956 3.09888293018903 31.2761508755374 -0.148535293725048 6.26298804447596 32.1420975666676 -0.0993651962695934 7.84504060161942 -29.0145723681182 -0.283292751025683 1.49675284409194 29.825306316626 -0.236141293086109 3.08382490747382 31.4467742236416 -0.141838377216961 6.25796903423757 32.2575081721494 -0.0946869192773871 7.84504109761944 -29.2060504272129 -0.27254200267505 1.48556749456067 29.9853424242273 -0.227127536037979 3.07543597707536 31.543926408256 -0.136298602753836 6.25517294110476 32.3232184052704 -0.0908841361167646 7.84504142361946 -29.5442646532772 -0.247030494983318 1.4663714446489 30.2680210476538 -0.205857922677726 3.06103910439155 31.715533826407 -0.123512778076542 6.25037442287684 32.4392902107835 -0.0823402057709497 7.84504208261949 -29.7354326423572 -0.228957257974886 1.45585172814924 30.4278011252429 -0.190835632514206 3.05314942201681 31.8125381010144 -0.114592381592846 6.24774480975194 32.5049065839001 -0.0764707561221658 7.84504250361951 -30.0754408185067 -0.19215116659669 1.43786412729488 30.7119890087411 -0.160256378111769 3.03965887337604 31.98508539921 -0.096466801151927 6.24324836453837 32.6216335894444 -0.0645720126670059 7.84504311061954 -30.2633554174322 -0.169264827759648 1.4283356788423 30.8690548262014 -0.14124652326885 3.03251259803661 32.0804536337397 -0.0852099142772536 6.24086643742524 32.6861530425089 -0.0571916097764556 7.84504335661955 -30.7878702723453 -0.101128406633341 1.4030922776433 31.3074549470242 -0.0845866069976481 3.01358006913737 32.3466242763821 -0.0515030077362615 6.23455565112549 32.8662089410611 -0.0349612081005682 7.84504344261955 -31.1473124494179 -0.0486549430809857 1.38772885591358 31.6078706812932 -0.0408590690007015 3.00205729659006 32.5289871450439 -0.0252673208601333 6.23071417894303 32.9895453769193 -0.0174714467798492 7.84504261961951 -31.4968264760189 0 1.37524916732083 31.8999338851655 0 2.99269687014547 32.7061486934586 0 6.22759227579475 33.1092560926052 0 7.84503997861939 - -0 4 -0.04840223 1 -0.04999646 1 -0.09680446 1 -0.09999292 1 -0.14548894 1 -0.14998727 1 -0.19417342 1 -0.19998162 1 -0.29260823 1 -0.29995487 1 -0.39104303 1 -0.39992813 1 -0.49098994 1 -0.49990797 1 -0.59093685 1 -0.59988782 1 -0.6924457 1 -0.69987821 1 -0.79395456 1 -0.7998686 1 -1 4 - -0 3 -1.00864509 1 -2.01729017 3 - -9 0 0 0 0 3 2 22 4 20 3 31.3042272068709 -0.045332982233201 7.84504008261939 30.0378137767195 -0.067492929105742 6.30157570730877 27.5049869164167 -0.111812822860824 3.21464695668753 26.2385734862653 -0.133972769733365 1.67118258137691 -31.2954192964526 -0.0430010329424394 7.8450403266194 30.024938176108 -0.0641732514780657 6.30190422532437 27.4839759354187 -0.106517688569318 3.21563202473432 26.2134948050741 -0.127689907114945 1.67249592343929 -31.2849880359571 -0.0404181135897573 7.84504044361941 30.0097547153868 -0.0602504308117418 6.30232239334424 27.4592880642461 -0.0999150652457107 3.21688629179389 26.1840547336758 -0.119747382467695 1.67416824051872 -31.2711565353002 -0.0366831687623569 7.84504048261941 29.989631784431 -0.054584658592632 6.30286085336981 27.4265822826927 -0.0903876382531822 3.21850159287062 26.1450575218235 -0.108289128083457 1.67632196262102 -31.2626947448983 -0.0342734346779007 7.84504047961941 29.9773164338461 -0.0509537275901721 6.30318216238507 27.4065598017417 -0.0843143134147148 3.2194655279164 26.1211814806895 -0.100994606326986 1.67760721068206 -31.2555276245578 -0.0320034650000829 7.84504046661941 29.9668683033498 -0.0476185928117617 6.30343642239715 27.3895496709337 -0.0788488484351192 3.22022833495263 26.1008903497257 -0.0944639762567979 1.67862429073037 -31.2487468742358 -0.0296931540403491 7.84504045961941 29.9569815928802 -0.0442119682799557 6.30369688640952 27.3734510401691 -0.073249596749169 3.22100973998975 26.0816857588135 -0.0877684109787756 1.67966616677986 -31.2441337840167 -0.0280163400307047 7.84504045761941 29.9502569225608 -0.0417295018020449 6.30388836341862 27.3625031996491 -0.0691558253447253 3.22158417501703 26.0686263381933 -0.0828689871260655 1.68043208081624 -31.2376848837103 -0.0254019436265275 7.84504045861941 29.9408977221163 -0.0378194367463268 6.30421141343396 27.3473233989281 -0.0626544229859253 3.22255332206306 26.050536237334 -0.0750719161057245 1.68172427587761 -31.2322833934538 -0.0230003371124573 7.84504046061941 29.9330869817453 -0.034205374154668 6.30451057344817 27.3346941483282 -0.0566154482290894 3.22345079910569 26.0354977366197 -0.0678204852713 1.68292091093445 -31.2268400231952 -0.0202011957395053 7.84504046261941 29.9252038113708 -0.0299911429345028 6.30482938846331 27.321931377722 -0.0495710373144978 3.22440724115112 26.0202951658976 -0.0593609845094953 1.68419616699502 -31.2230135330135 -0.0179416411721822 7.84504046261941 29.919669971108 -0.0265972898433034 6.30505113947385 27.312982857297 -0.0439085871855459 3.22507249318272 26.0096393053915 -0.0525642358566671 1.68508317003715 -31.2202117928804 -0.0160547392125592 7.84504046261941 29.9156128509153 -0.0238139574311022 6.30520923548135 27.3064149669851 -0.0393323938781884 3.22554678220524 26.0018160350199 -0.0470916121067314 1.68571555606719 -31.2177941327656 -0.0142225279255338 7.84504046261941 29.9121203907494 -0.0211252507733955 6.30534365548774 27.3007729167171 -0.034930696479119 3.2259500432244 25.9950991747009 -0.0418334193269807 1.68625323609273 -31.2155956426612 -0.0122746684130154 7.84504046261941 29.9089590705993 -0.0182088665348747 6.3054669504936 27.2956859164755 -0.0300772627585933 3.22631992524197 25.9890493444135 -0.0360114608804525 1.68674641311615 -31.2139735025841 -0.0106235524045916 7.84504046261941 29.9066635704902 -0.0157140662463781 6.30555472149776 27.2920437163025 -0.0258950939399509 3.22658323825447 25.9847337942086 -0.0309856077817373 1.68709749713283 -31.2124867825135 -0.00889975212271552 7.84504046261941 29.9045834103914 -0.0131345461738574 6.30563254850146 27.2887766661473 -0.0216041342861413 3.22681672026556 25.9808732940252 -0.0258389283472832 1.68740880614761 -31.2113676824603 -0.00725582020463295 7.84504046261941 29.9030427303182 -0.0107210043292204 6.30568901250414 27.2863928160341 -0.0176513725683952 3.22698611327361 25.978067863892 -0.0211165566929826 1.68763466415834 -31.2103373424114 -0.00524955023934025 7.84504046261941 29.9016044802499 -0.00772706604701593 6.30574444550678 27.284138735927 -0.0126820976423673 3.22715241328151 25.9754058637655 -0.015159613440043 1.68785639616887 -31.2095343923733 -0.00315845015001833 7.84504046261941 29.9004620401957 -0.00458087260757976 6.30579163950902 27.2823173558405 -0.00742571752270264 3.22729399328823 25.9732450136629 -0.00884813998026408 1.68804517017784 -31.2092171223582 -0.0011274605635515 7.84504046261941 29.8999609201719 -0.00164308905804254 6.30581745351024 27.2814485357992 -0.00267434605702462 3.22737143629191 25.9721923436129 -0.00318997455151565 1.68814842718274 -31.209191012357 0 7.84504046261941 29.8998665001674 0 6.30582602951065 27.2812174857882 0 3.22739716329313 25.9718929735987 0 1.68818273118437 - -0 4 -0.24987845 1 -0.294687 1 -0.39290714 1 -0.49113232 1 -0.5007068 1 -0.58935751 1 -0.6257727 1 -0.69131083 1 -0.7508386 1 -0.79326416 1 -0.8132895 1 -0.84328602 1 -0.8757404 1 -0.89330787 1 -0.90694145 1 -0.9381425 1 -0.94665394 1 -0.96907125 1 -1 4 - -0 3 -19.09597535 1 -38.1919507 3 - -9 1 1 0 0 3 2 5 4 3 3 20.1549001573063 -1.3686672230082 1.41444126018235 1 20.1549001573063 -0.799126971766493 1.97500000380746 0.85635206 20.1549001573063 0.799124827656391 1.97500018380747 0.85635206 20.1549001573063 1.36866520500811 1.41444156718237 1 -21.1275192035033 -1.36276005072763 1.41444126418235 1 21.1285731335533 -0.79930629359501 1.97484654080017 0.85652178 21.1285731335533 0.799304151064908 1.97484660280018 0.85652178 21.1275192035033 1.36275808372753 1.41444156618237 1 -23.0918736368051 -1.32145396176569 1.41444126918235 1 23.0936071268874 -0.771101954625376 1.94774472551291 0.85686122 23.0936071268874 0.771099969805282 1.94774489651291 0.85686122 23.0918736368051 1.3214520967656 1.41444156218237 1 -25.0175634582704 -1.28214692889871 1.41444127418235 1 25.0191922683478 -0.768009936338513 1.97739153592105 0.85720067 25.0191922783478 0.768008160368428 1.97739197892107 0.85720067 25.0175634582704 1.28214516389862 1.41444155718237 1 -25.9893209044264 -1.2407928679345 1.41444127418235 1 25.9893209344264 -0.723604166519352 1.92052181521989 0.85737039 25.9893209344264 0.723602338749265 1.9205219782199 0.85737039 25.9893209044264 1.24079115393441 1.41444155318237 1 - -0 4 -0.94162053 1 -1.88324107 4 - -0 3 -0.5 1 -1 3 - -9 1 0 0 0 3 2 4 4 2 3 32.4183772197902 -0.208516963644024 1.41444139018236 1 32.4183771297902 -0.12752453053709 1.51294272586092 0.81755784 32.4183771797902 0.127523451547039 1.51294275486092 0.81755784 32.4183773097902 0.208515993143978 1.41444143718236 1 -32.5970604982772 -0.143131934658402 1.41444139718236 1 32.6016955784974 -0.0969974994171338 1.49939513121744 0.81755784 32.6016955584974 0.0969963613670797 1.49939560421747 0.81755784 32.5970603082772 0.143130653238341 1.41444142918236 1 -32.7741353166878 -0.0736942506102889 1.41444140518236 1 32.7741352566878 -0.0450698927207049 1.44727518374188 0.81755784 32.7741351866878 0.045069200000672 1.44727519374188 0.81755784 32.7741352066878 0.0736935940402577 1.41444142218236 1 -32.949284715007 -9.00000042747706e-011 1.41444141318236 1 32.949284715007 -9.00000042747706e-011 1.41444141318236 0.81755784 32.949284715007 -9.00000042747706e-011 1.41444141318236 0.81755784 32.949284715007 -9.00000042747706e-011 1.41444141318236 1 - -0 4 -1.97290517 4 - -0 3 -0.5 1 -1 3 - -9 0 0 0 0 3 2 22 4 20 3 26.2385734862653 0.133972769733365 1.67118258137691 27.5049869164167 0.111812822860824 3.21464695668753 30.0378137767195 0.067492929105742 6.30157570730877 31.3042272068709 0.045332982233201 7.84504008261939 -26.2134948050741 0.127689907114945 1.67249592343929 27.4839759354187 0.106517688569318 3.21563202473432 30.024938176108 0.0641732514780657 6.30190422532437 31.2954192964526 0.0430010329424394 7.8450403266194 -26.1840547336758 0.119747382467695 1.67416824051872 27.4592880642461 0.0999150652457107 3.21688629179389 30.0097547153868 0.0602504308117418 6.30232239334424 31.2849880359571 0.0404181135897573 7.84504044361941 -26.1450575218235 0.108289128083457 1.67632196262102 27.4265822826927 0.0903876382531822 3.21850159287062 29.989631784431 0.054584658592632 6.30286085336981 31.2711565353002 0.0366831687623569 7.84504048261941 -26.1211814806895 0.100994606326986 1.67760721068206 27.4065598017417 0.0843143134147148 3.2194655279164 29.9773164338461 0.0509537275901721 6.30318216238507 31.2626947448983 0.0342734346779007 7.84504047961941 -26.1008903497257 0.0944639762567979 1.67862429073037 27.3895496709337 0.0788488484351192 3.22022833495263 29.9668683033498 0.0476185928117617 6.30343642239715 31.2555276245578 0.0320034650000829 7.84504046661941 -26.0816857588135 0.0877684109787756 1.67966616677986 27.3734510401691 0.073249596749169 3.22100973998975 29.9569815928802 0.0442119682799557 6.30369688640952 31.2487468742358 0.0296931540403491 7.84504045961941 -26.0686263381933 0.0828689871260655 1.68043208081624 27.3625031996491 0.0691558253447253 3.22158417501703 29.9502569225608 0.0417295018020449 6.30388836341862 31.2441337840167 0.0280163400307047 7.84504045761941 -26.050536237334 0.0750719161057245 1.68172427587761 27.3473233989281 0.0626544229859253 3.22255332206306 29.9408977221163 0.0378194367463268 6.30421141343396 31.2376848837103 0.0254019436265275 7.84504045861941 -26.0354977366197 0.0678204852713 1.68292091093445 27.3346941483282 0.0566154482290894 3.22345079910569 29.9330869817453 0.034205374154668 6.30451057344817 31.2322833934538 0.0230003371124573 7.84504046061941 -26.0202951658976 0.0593609845094953 1.68419616699502 27.321931377722 0.0495710373144978 3.22440724115112 29.9252038113708 0.0299911429345028 6.30482938846331 31.2268400231952 0.0202011957395053 7.84504046261941 -26.0096393053915 0.0525642358566671 1.68508317003715 27.312982857297 0.0439085871855459 3.22507249318272 29.919669971108 0.0265972898433034 6.30505113947385 31.2230135330135 0.0179416411721822 7.84504046261941 -26.0018160350199 0.0470916121067314 1.68571555606719 27.3064149669851 0.0393323938781884 3.22554678220524 29.9156128509153 0.0238139574311022 6.30520923548135 31.2202117928804 0.0160547392125592 7.84504046261941 -25.9950991747009 0.0418334193269807 1.68625323609273 27.3007729167171 0.034930696479119 3.2259500432244 29.9121203907494 0.0211252507733955 6.30534365548774 31.2177941327656 0.0142225279255338 7.84504046261941 -25.9890493444135 0.0360114608804525 1.68674641311615 27.2956859164755 0.0300772627585933 3.22631992524197 29.9089590705993 0.0182088665348747 6.3054669504936 31.2155956426612 0.0122746684130154 7.84504046261941 -25.9847337942086 0.0309856077817373 1.68709749713283 27.2920437163025 0.0258950939399509 3.22658323825447 29.9066635704902 0.0157140662463781 6.30555472149776 31.2139735025841 0.0106235524045916 7.84504046261941 -25.9808732940252 0.0258389283472832 1.68740880614761 27.2887766661473 0.0216041342861413 3.22681672026556 29.9045834103914 0.0131345461738574 6.30563254850146 31.2124867825135 0.00889975212271552 7.84504046261941 -25.978067863892 0.0211165566929826 1.68763466415834 27.2863928160341 0.0176513725683952 3.22698611327361 29.9030427303182 0.0107210043292204 6.30568901250414 31.2113676824603 0.00725582020463295 7.84504046261941 -25.9754058637655 0.015159613440043 1.68785639616887 27.284138735927 0.0126820976423673 3.22715241328151 29.9016044802499 0.00772706604701593 6.30574444550678 31.2103373424114 0.00524955023934025 7.84504046261941 -25.9732450136629 0.00884813998026408 1.68804517017784 27.2823173558405 0.00742571752270264 3.22729399328823 29.9004620401957 0.00458087260757976 6.30579163950902 31.2095343923733 0.00315845015001833 7.84504046261941 -25.9721923436129 0.00318997455151565 1.68814842718274 27.2814485357992 0.00267434605702462 3.22737143629191 29.8999609201719 0.00164308905804254 6.30581745351024 31.2092171223582 0.0011274605635515 7.84504046261941 -25.9718929735987 0 1.68818273118437 27.2812174857882 0 3.22739716329313 29.8998665001674 0 6.30582602951065 31.209191012357 0 7.84504046261941 - -0 4 -0.24987845 1 -0.294687 1 -0.39290714 1 -0.49113232 1 -0.5007068 1 -0.58935751 1 -0.6257727 1 -0.69131083 1 -0.7508386 1 -0.79326416 1 -0.8132895 1 -0.84328602 1 -0.8757404 1 -0.89330787 1 -0.90694145 1 -0.9381425 1 -0.94665394 1 -0.96907125 1 -1 4 - -0 3 -19.09597535 1 -38.1919507 3 - -9 0 0 0 0 2 3 4 24 3 22 26.2385734862653 0.133972769733365 1.67118258137691 26.3221248302338 0.150819505293542 1.66585452612384 26.4089476643576 0.166482214647481 1.66030359286019 26.5773176623548 0.193400207166017 1.64952352334816 26.6671877866234 0.206000402394494 1.64376167707449 26.8340617545495 0.226727837208994 1.63305734956606 26.9272687289766 0.236869101680678 1.62707594028196 27.0923852668192 0.252403219598509 1.61648695577901 27.1879642213589 0.260064135942383 1.61036194648808 27.4385005532588 0.277581877764431 1.59433205672671 27.6248403021094 0.286903391567179 1.58244993316234 27.9611700380843 0.297806707585059 1.56117826715199 28.1499816170523 0.300652547040229 1.5493379885896 28.4864236030325 0.299853141422259 1.52852821960119 28.6783108021466 0.29604558607141 1.51683037304557 29.0145723681182 0.283292751025683 1.49675284409194 29.2060504272129 0.27254200267505 1.48556749456067 29.5442646532772 0.247030494983318 1.4663714446489 29.7354326423572 0.228957257974886 1.45585172814924 30.0754408185067 0.19215116659669 1.43786412729488 30.2633554174322 0.169264827759648 1.4283356788423 30.7878702723453 0.101128406633341 1.4030922776433 31.1473124494179 0.0486549430809857 1.38772885591358 31.4968264760189 0 1.37524916732083 -27.5049869164167 0.111812822860824 3.21464695668753 27.5748616097356 0.125674429739215 3.21065072549772 27.6474531931835 0.138597253173016 3.20648738229997 27.7882119698692 0.160882582261512 3.19840215691594 27.8633361134374 0.171357505609044 3.19408073371069 28.0028178000624 0.188632847959579 3.18605246632936 28.0807210937626 0.197111936142314 3.18156642311629 28.2187268903175 0.21014834783151 3.17362475173908 28.2986098741118 0.216605696228218 3.16903105852089 28.5080015540574 0.231377759269853 3.15700879694986 28.6637460114548 0.23924905940372 3.14809729352659 28.9448640248072 0.24843818431018 3.13214366176883 29.102679622303 0.250822399883424 3.12326349434705 29.3838787556593 0.250110963269633 3.10765625460574 29.5442574932769 0.246875488625956 3.09888293018903 29.825306316626 0.236141293086109 3.08382490747382 29.9853424242273 0.227127536037979 3.07543597707536 30.2680210476538 0.205857922677726 3.06103910439155 30.4278011252429 0.190835632514206 3.05314942201681 30.7119890087411 0.160256378111769 3.03965887337604 30.8690548262014 0.14124652326885 3.03251259803661 31.3074549470242 0.0845866069976481 3.01358006913737 31.6078706812932 0.0408590690007015 3.00205729659006 31.8999338851655 0 2.99269687014547 -30.0378137767195 0.067492929105742 6.30157570730877 30.0803351787392 0.0753842786205609 6.30024312424548 30.1244642508352 0.0828273302240869 6.29885496117954 30.210000584898 0.0958473324525038 6.29615942505151 30.2556327770654 0.102071712038146 6.29471884798309 30.3403298710883 0.112442869470749 6.29204270185598 30.3876258333347 0.117597605045586 6.29054738978495 30.4714101173143 0.125638604297513 6.28790034465923 30.5199011796175 0.129688816809888 6.2863692805865 30.6470035456545 0.138969522290698 6.28236227739618 30.7415574501456 0.143940395076802 6.2793920142551 30.9122519982531 0.149701137750422 6.27407444900253 31.0080756228045 0.151162105579814 6.27111450586194 31.1787890709129 0.15062660697438 6.26591232561485 31.2761508755374 0.148535293725048 6.26298804447596 31.4467742236416 0.141838377216961 6.25796903423757 31.543926408256 0.136298602753836 6.25517294110476 31.715533826407 0.123512778076542 6.25037442287684 31.8125381010144 0.114592381592846 6.24774480975194 31.98508539921 0.096466801151927 6.24324836453837 32.0804536337397 0.0852099142772536 6.24086643742524 32.3466242763821 0.0515030077362615 6.23455565112549 32.5289871450439 0.0252673208601333 6.23071417894303 32.7061486934586 0 6.22759227579475 -31.3042272068709 0.045332982233201 7.84504008261939 31.333071958241 0.050239203066234 7.84503932261936 31.3629697796611 0.0549423687496224 7.84503875061933 31.4208948824124 0.0633297075479996 7.84503805861929 31.4517811038794 0.0674288152526967 7.84503790461929 31.5090859166012 0.0743478802213347 7.84503781961928 31.5410781981208 0.0778404395072223 7.84503787261929 31.5977517308126 0.0833837325305146 7.8450381406193 31.6305468323703 0.0862303770957229 7.84503839261931 31.7165045364531 0.09276540379612 7.84503901761934 31.7804631694909 0.0962860629133424 7.84503937461936 31.8959459849761 0.100332614465543 7.84503984361938 31.9607736180552 0.10133195843301 7.84504001161939 32.0762442235398 0.100884428831753 7.8450403616194 32.1420975666676 0.0993651962695934 7.84504060161942 32.2575081721494 0.0946869192773871 7.84504109761944 32.3232184052704 0.0908841361167646 7.84504142361946 32.4392902107835 0.0823402057709497 7.84504208261949 32.5049065839001 0.0764707561221658 7.84504250361951 32.6216335894444 0.0645720126670059 7.84504311061954 32.6861530425089 0.0571916097764556 7.84504335661955 32.8662089410611 0.0349612081005682 7.84504344261955 32.9895453769193 0.0174714467798492 7.84504261961951 33.1092560926052 0 7.84503997861939 - -0 3 -1.00864509 1 -2.01729017 3 - -0 4 -0.04840223 1 -0.04999646 1 -0.09680446 1 -0.09999292 1 -0.14548894 1 -0.14998727 1 -0.19417342 1 -0.19998162 1 -0.29260823 1 -0.29995487 1 -0.39104303 1 -0.39992813 1 -0.49098994 1 -0.49990797 1 -0.59093685 1 -0.59988782 1 -0.6924457 1 -0.69987821 1 -0.79395456 1 -0.7998686 1 -1 4 - -9 0 0 0 0 1 1 2 2 2 2 33.0960754019792 -6.5257441579562 1.36209953369625 33.0894483416644 -6.53796320553657 1.23997796789579 -31.9805927989966 -6.51972867467048 1.42203054754282 31.9739657386818 -6.53194772225085 1.29990898074236 - -0 2 -9.08881627 2 - -0 2 -1 2 - -9 0 0 0 0 1 1 2 2 2 2 33.0914102617576 0.210407268463809 7.8450401756194 33.11146319271 -0.0256241361470811 7.84503995461939 -31.2048325821499 0.0501260046108573 7.84504053261941 31.2248855131024 -0.185905400000032 7.8450403116194 - -0 2 -7.99290962 2 - -0 2 -1 2 - -9 1 1 0 0 4 2 5 4 2 3 20.1549001573063 1.36866520500811 1.41444156718237 1 16.9193731036271 1.36355297976529 1.41444156618237 1 10.4483189962685 1.35332853127965 1.41444156518237 1 7.21279194058922 1.34821630603684 1.41444156518237 1 -20.1549001573063 5.3675639999456 -2.16599949987945 0.35706323 16.9594987755329 5.39184365709882 -2.16948154504484 0.35559326 10.4887791881903 5.4410102044341 -2.17653272037975 0.35265331 7.21279194058922 5.46590217761641 -2.18010257954931 0.35118334 -20.1549001573063 -2.8646001360612e-007 -5.01896813038818 0.41832944 16.9355044943933 -8.74500041536521e-008 -5.03003175591368 0.41763537 10.4645041870373 3.12540014844853e-007 -5.05226969296992 0.41624723 7.21279194058922 5.13540024391841e-007 -5.06344437550069 0.41555316 -20.1549001573063 -5.36756521394566 -2.16600070587951 0.35706323 16.9594987755329 -5.39184447709886 -2.1694827560449 0.35559326 10.4887791881903 -5.44101022743411 -2.17653394237981 0.35265331 7.21279194058922 -5.46590179861639 -2.18010380754937 0.35118334 -20.1549001573063 -1.3686672230082 1.41444126018235 1 16.9193731036271 -1.36355460076537 1.41444126018235 1 10.4483189962685 -1.35332935627969 1.41444126118235 1 7.21279194058922 -1.34821673503686 1.41444126218235 1 - -0 5 -1.78417229 5 - -0 3 -0.5 1 -1 3 - -9 1 1 0 0 4 2 5 4 2 3 20.1549001573063 1.36866520500811 1.41444156718237 1 16.9193731036271 1.36355297976529 1.41444156618237 1 10.4483189962685 1.35332853127965 1.41444156518237 1 7.21279194058922 1.34821630603684 1.41444156518237 1 -20.1549001573063 5.3675639999456 -2.16599949987945 0.35706323 16.9594987755329 5.39184365709882 -2.16948154504484 0.35559326 10.4887791881903 5.4410102044341 -2.17653272037975 0.35265331 7.21279194058922 5.46590217761641 -2.18010257954931 0.35118334 -20.1549001573063 -2.8646001360612e-007 -5.01896813038818 0.41832944 16.9355044943933 -8.74500041536521e-008 -5.03003175591368 0.41763537 10.4645041870373 3.12540014844853e-007 -5.05226969296992 0.41624723 7.21279194058922 5.13540024391841e-007 -5.06344437550069 0.41555316 -20.1549001573063 -5.36756521394566 -2.16600070587951 0.35706323 16.9594987755329 -5.39184447709886 -2.1694827560449 0.35559326 10.4887791881903 -5.44101022743411 -2.17653394237981 0.35265331 7.21279194058922 -5.46590179861639 -2.18010380754937 0.35118334 -20.1549001573063 -1.3686672230082 1.41444126018235 1 16.9193731036271 -1.36355460076537 1.41444126018235 1 10.4483189962685 -1.35332935627969 1.41444126118235 1 7.21279194058922 -1.34821673503686 1.41444126218235 1 - -0 5 -1.78417229 5 - -0 3 -0.5 1 -1 3 - -9 1 1 0 0 4 2 5 4 2 3 20.1549001573063 1.36866520500811 1.41444156718237 1 16.9193731036271 1.36355297976529 1.41444156618237 1 10.4483189962685 1.35332853127965 1.41444156518237 1 7.21279194058922 1.34821630603684 1.41444156518237 1 -20.1549001573063 5.3675639999456 -2.16599949987945 0.35706323 16.9594987755329 5.39184365709882 -2.16948154504484 0.35559326 10.4887791881903 5.4410102044341 -2.17653272037975 0.35265331 7.21279194058922 5.46590217761641 -2.18010257954931 0.35118334 -20.1549001573063 -2.8646001360612e-007 -5.01896813038818 0.41832944 16.9355044943933 -8.74500041536521e-008 -5.03003175591368 0.41763537 10.4645041870373 3.12540014844853e-007 -5.05226969296992 0.41624723 7.21279194058922 5.13540024391841e-007 -5.06344437550069 0.41555316 -20.1549001573063 -5.36756521394566 -2.16600070587951 0.35706323 16.9594987755329 -5.39184447709886 -2.1694827560449 0.35559326 10.4887791881903 -5.44101022743411 -2.17653394237981 0.35265331 7.21279194058922 -5.46590179861639 -2.18010380754937 0.35118334 -20.1549001573063 -1.3686672230082 1.41444126018235 1 16.9193731036271 -1.36355460076537 1.41444126018235 1 10.4483189962685 -1.35332935627969 1.41444126118235 1 7.21279194058922 -1.34821673503686 1.41444126218235 1 - -0 5 -1.78417229 5 - -0 3 -0.5 1 -1 3 - -9 1 1 0 0 3 3 4 4 2 2 2.42419264614297 1.16954252255029 0.134080451298479 1 2.03334541657872 1.23856713582878 -0.0865812842123901 1 1.66514323309006 1.22851847935149 -0.337326809062163 1 1.31958609667697 1.13939655511843 -0.618156123250839 1 -2.35726404496403 1.43069673595445 -0.401872591037923 1 2.01243271658542 1.37765821243525 -0.546829964673028 0.98104034 1.66651124815503 1.29263589439691 -0.716397241947042 0.96208068 1.31958626367698 1.15750248597842 -0.915835043099828 0.94312103 -2.33241626178382 1.39050386204539 -0.916314172062586 1 2.00273548112483 1.29179416835693 -0.988492350130865 0.98104034 1.66226491995334 1.19968203998184 -1.08869934271044 0.96208068 1.31958648967699 1.0537491750504 -1.19543442578009 0.94312103 -2.34964929660235 1.04896390382311 -1.40924429193551 1 2.00555960725897 0.985535358690416 -1.40924429193551 1 1.66190643893632 0.917897397927785 -1.40924429193551 1 1.319586737677 0.845840769945279 -1.40924429193551 1 - -0 4 -1.15245074 4 - -0 4 -1 4 - -9 1 1 0 0 2 2 4 4 3 3 1.31958587667696 0.752125697664052 0.131521655936943 1 0.891755746716123 0.650985935430171 0.0150059799227458 0.96534296 0.20827539713255 0.261421950456876 -0.441578743393864 0.96534296 -5.85000027786009e-009 0 -0.750000037063089 1 -1.31958583967696 1.11139322878834 -0.157754491992936 0.83664232 0.894255615634861 0.92750749807424 -0.240144307486242 0.79744645 0.20203273896604 0.34449744198275 -0.550822022302641 0.79744645 -5.85000027786009e-009 0 -0.750000037063089 0.83664232 -1.31958635467699 1.16739988144852 -1.07855775422874 0.83664232 0.888926097521722 0.989964824570804 -1.07602378110838 0.78836882 0.188732380694307 0.37052369753893 -0.901685778877774 0.78836882 -5.85000027786009e-009 0 -0.750000037063089 0.83664232 -1.319586737677 0.845840769945279 -1.40924429193551 1 0.88283603870246 0.749655391746719 -1.3715516411452 0.94718769 0.186254588936618 0.303154248469053 -1.02355078361605 0.94718769 -5.85000027786009e-009 0 -0.750000037063089 1 - -0 3 -0.5 1 -1 3 - -0 3 -0.80903606 1 -1.61807213 3 - -9 1 1 0 0 3 3 5 6 3 4 2.42419264614297 1.16954252255029 0.134080451298479 1 2.27937972726472 1.13262527879681 0.177180354055615 1 2.00447310920736 1.03178106700697 0.244952477214618 1 1.63627084371869 0.799485582383526 0.291327614897319 1 1.42024110745783 0.590602480952111 0.28538900865525 1 1.31958584867696 0.472656068989958 0.273205864366582 1 -2.29391023595488 1.19255072664312 0.0605265394648562 1 2.16902785802329 1.15329688577866 0.107955992457634 0.9977298 1.92910658662764 1.05030922388701 0.186504393618483 0.99459382 1.602170168099 0.822836792902649 0.254900275537113 0.9941031 1.40921128693394 0.619854407571503 0.265146597383787 0.9965848 1.31958585167696 0.505359753263299 0.26111802572244 0.99852785 -1.91061135574917 1.23521758366968 -0.170163125832314 1 1.8400650803984 1.19714532886135 -0.107421641602254 0.99108277 1.69892783269474 1.09985602824036 0.00806201148292498 0.97886599 1.49620620706598 0.891336723516221 0.144204154819329 0.97739384 1.37502693331027 0.706171740261356 0.20180388161517 0.98764776 1.31958585867696 0.602247199925206 0.221022579678009 0.99558356 -1.54995752161903 1.19881117094047 -0.430936580458388 1 1.52424455839773 1.17697917390351 -0.348293364563046 0.98492646 1.46993257681805 1.11100023876968 -0.186717805408619 0.9646103 1.38870078195974 0.941079732378887 0.0227773942518681 0.96362887 1.34071576768058 0.782670105474834 0.128120967165419 0.98263645 1.31958586867696 0.693879398917501 0.170048603146875 0.99705571 -1.31958609667697 1.13939655511843 -0.618156123250839 1 1.31958604367697 1.13359452284285 -0.52276512652001 0.98104034 1.31958595167697 1.09548585203278 -0.33158791620958 0.9557608 1.31958587467696 0.960420377057518 -0.0701285701709282 0.9557608 1.31958586867696 0.826562636019617 0.0715862903601662 0.98104034 1.31958587667696 0.752125697664052 0.131521655936943 1 - -0 4 -0.33333333 1 -1 4 - -0 4 -0.44764211 1 -0.89528423 1 -1.34292634 4 - -9 1 1 0 0 3 3 8 9 6 7 2.42419264614297 1.16954252255029 0.134080451298479 1 2.41861526287806 1.19130537358397 0.0894176977771125 1 2.40804495137599 1.23064570045253 0.000390961008569651 1 2.38924215248291 1.29258484739448 -0.176467431321753 1 2.37012207257475 1.33861845958096 -0.395299644525725 1 2.35419144681809 1.3436342798192 -0.654313056808201 1 2.34230190425337 1.28335602195614 -0.99488394845445 1 2.34390495132951 1.16281055623054 -1.2449342521312 1 2.34964929660235 1.04896390382311 -1.40924429193551 1 -2.53961679162532 1.19075929355803 0.116127601395765 1 2.53391830235466 1.21159794154781 0.0720504338522118 0.99940425 2.5229081938317 1.25002106137281 -0.0157380167075156 0.99831205 2.50338132890423 1.31029389623562 -0.1910102603125 0.9965248 2.48355378496247 1.35492587935552 -0.408649177199793 0.99503543 2.46737528019403 1.35879523053931 -0.666427615983612 0.99443969 2.45587057164759 1.29792147364796 -1.00425990869978 0.99523402 2.45818385875746 1.17960180302808 -1.24939093734288 0.99761701 2.46434586005014 1.07010675182734 -1.40924429193551 1 -2.75496705385391 1.28442588600695 0.108309067874404 1 2.74978798660791 1.30223985385307 0.0645015090636571 0.99821276 2.7400692091463 1.33406416636464 -0.0229466916499093 0.99493614 2.72262776631787 1.38328042170229 -0.198367758641963 0.98957441 2.70500126648066 1.41645427027796 -0.417215303246663 0.9851063 2.69114744282264 1.40977760596084 -0.676678062870482 0.98331906 2.68246913941044 1.33898084359817 -1.01480171720049 0.98570205 2.68660863060706 1.21904082290133 -1.25570940664299 0.99285103 2.69383599095034 1.11145702179137 -1.40924429093551 1 -3.00952343694469 1.45308167301767 0.126573836841934 1 3.00563047675978 1.46698780967818 0.0827251773192349 0.99672339 2.99918679045372 1.48868008770851 -0.00557844647496198 0.99071626 2.98758246990255 1.51976236318484 -0.183649559162886 0.98088642 2.97662797338224 1.53159320474677 -0.407648276642253 0.97269489 2.96931506303489 1.50226561435378 -0.674310721468039 0.96941828 2.96714691893191 1.40612900078754 -1.02003737044917 0.97378709 2.97364046324034 1.27376877950077 -1.26135803191129 0.98689355 2.98108417259389 1.16049280912045 -1.40924429093551 1 -3.19269105364468 1.55804852000333 0.131934602026557 1 3.19041165753642 1.56913526952992 0.0880896238140324 0.99568083 3.18694691737185 1.58551531830793 -0.000610481988996337 0.98776235 3.18069775207503 1.60624085129234 -0.180411781619099 0.97480483 3.17512368581028 1.60583552827309 -0.407779760898498 0.9640069 3.17197530466074 1.56300774723888 -0.678633658803368 0.95968773 3.17229773367605 1.4509747599176 -1.02764925481072 0.96544662 3.17733827091546 1.30999705422152 -1.26631039314651 0.98272331 3.18243537415756 1.19326095267685 -1.40924429093551 1 -3.30058911276956 1.60855069040205 0.129713091341041 1 3.29953207771936 1.61789725984599 0.0859509633524515 0.99508508 3.2980212506476 1.63196010451394 -0.00271838400911631 0.98607439 3.29528183251748 1.64779264626595 -0.183137215058551 0.97132963 3.29292796840568 1.64184741398356 -0.4119273860355 0.95904233 3.29176637735051 1.59295750766142 -0.684350187104888 0.95412741 3.29232954037725 1.47376522700009 -1.03384818210515 0.96068064 3.29500084850413 1.32905418612668 -1.26949237629765 0.98034032 3.29758320762679 1.21151726354398 -1.40924429093551 1 -3.35591651339747 1.62968577140592 0.126313484549568 1 3.35562035038341 1.63791551479681 0.082593403422976 0.99478721 3.355232904365 1.65077893440779 -0.00600635158528638 0.98523042 3.35447139632883 1.66414363604258 -0.186641300334986 0.96959204 3.3537632002952 1.65585035764867 -0.415937811785985 0.95656005 3.35334338927526 1.60482983222532 -0.688732669043045 0.95134726 3.3534158592787 1.48345068146012 -1.03776382529113 0.95829765 3.35425519731857 1.33785002154446 -1.27121487637946 0.97914882 3.35518891336291 1.22048538696994 -1.40924428993551 1 -3.38400016073138 1.63898521684762 0.123909655855393 1 3.38400016073138 1.64688968422306 0.080268500472549 0.99463827 3.38400016073138 1.65965826482953 -0.00818193018862081 0.98480843 3.38400016073138 1.67247644443836 -0.1887638144358 0.96872324 3.38400016073138 1.66342220800831 -0.418193177073109 0.95531891 3.38400016073138 1.6112991915326 -0.691102256865594 0.94995718 3.38400016073138 1.48839452869494 -1.03984279838988 0.95710615 3.38400016073138 1.34202071974256 -1.27211268842211 0.97855308 3.38400016073138 1.22492846018098 -1.40924428993551 1 - -0 4 -0.33333333 1 -0.66666667 1 -0.83333333 1 -0.91666667 1 -1 4 - -0 4 -0.12672346 1 -0.25344691 1 -0.50689382 1 -0.76034073 1 -1.01378765 1 -1.52068147 4 - -9 1 1 0 0 4 3 22 5 19 3 1.31958553267695 -0.845840762795279 -1.40924429893551 1 1.66190643893632 -0.917897390397785 -1.40924429893551 1 2.34921277558161 -1.05317331102305 -1.40924429993551 1 3.03826519730985 -1.17161156764856 -1.40924429993551 1 3.38400016073138 -1.22492845218098 -1.40924430093551 1 -1.31958554067695 -0.834513074837242 -1.41889989339413 0.9958126 1.66311127499354 -0.906481390365554 -1.42023315545745 0.9965105 2.35137844368448 -1.04147014546718 -1.42289408458384 0.9979063 3.03896348234301 -1.16255637921846 -1.42785537281949 0.9993021 3.38400016073138 -1.2126798005992 -1.42687156877276 1 -1.31958555767695 -0.811408684579843 -1.43799603430114 0.98763347 1.66548915110649 -0.883111705595553 -1.44204000549322 0.98969456 2.35647529892657 -1.01269338110035 -1.44629742369544 0.99381674 3.04115177644695 -1.13844373007317 -1.46117880740227 0.99793891 3.38400016073138 -1.18726051339185 -1.46200986444174 1 -1.31958559167695 -0.763417331180376 -1.47524958307059 0.97205792 1.67010912932592 -0.834213042502991 -1.48487380952772 0.97671493 2.36589566837401 -0.956357032144519 -1.49488337700315 0.98602896 3.04487683162388 -1.08891395372064 -1.52952327164845 0.99534299 3.38400016073138 -1.13266850779886 -1.53165046474949 1 -1.31958564267695 -0.686775787270098 -1.52744761254987 0.95104269 1.67654076763141 -0.754873897264585 -1.5458029534217 0.95920224 2.37916819200442 -0.866368529680295 -1.5644778033087 0.97552135 3.05008214987112 -1.00162597257468 -1.62834997734247 0.99184045 3.38400016073138 -1.03925138436179 -1.63308674756745 1 -1.31958570167695 -0.590782994830685 -1.58221230215105 0.92994923 1.68323692194946 -0.653600842124373 -1.6109117805142 0.94162436 2.39282278165298 -0.754641485583545 -1.64133548395925 0.96497462 3.05515118911189 -0.882815233931472 -1.73784773254333 0.98832487 3.38400016073138 -0.913117842120768 -1.74435742585253 1 -1.31958576667696 -0.473149797613408 -1.63484961065119 0.91053863 1.68962359625281 -0.526832905963219 -1.67475428254656 0.92544885 2.40594198327611 -0.615641859111418 -1.71801919160153 0.95526931 3.05983150933419 -0.723356033677566 -1.84823506978645 0.98508977 3.38400016073138 -0.746133687889447 -1.85642849517562 1 -1.31958582867696 -0.34855514485548 -1.67627187361864 0.89582422 1.69461584948993 -0.390163314851762 -1.72584612497329 0.91318685 2.41625730876606 -0.465612306975397 -1.78038769356387 0.94791211 3.06329581049874 -0.542796538351451 -1.93899381109726 0.98263737 3.38400016073138 -0.558579077761081 -1.94789581152008 1 -1.31958588067696 -0.235034433413536 -1.70160188882175 0.88705828 1.69765416663424 -0.263879783153617 -1.75751108647729 0.9058819 2.42273869507391 -0.325820731075654 -1.81874580338579 0.94352914 3.06535307959645 -0.369762295562766 -1.99624070581634 0.98117638 3.38400016073138 -0.37992587665551 -2.00548539625544 1 -1.31958592167697 -0.135477862654853 -1.71503206745965 0.88247974 1.69926067371055 -0.152320155924819 -1.77439814927939 0.90206645 2.42636004924591 -0.201384891495269 -1.83851121032459 0.94123987 3.06640534364643 -0.21417445326274 -2.02711354428272 0.98041329 3.38400016073138 -0.219844259262041 -2.03634579972123 1 -1.31958595967697 -0.0347898019324268 -1.7216251937728 0.88024931 1.70004821974795 -0.039165639840268 -1.78270715567404 0.90020776 2.42839860834274 -0.0744235365949281 -1.84707788973149 0.94012465 3.06690548267019 -0.0552402538037711 -2.04239826800871 0.98004155 3.38400015973138 -0.0566881002325402 -2.05154485744315 1 -1.31958599467697 0.0662326885058837 -1.72127654875625 0.88036697 1.70000659574598 0.0745440846406539 -1.78227128065334 0.90030581 2.42881935536272 0.0538707024487209 -1.84426026959766 0.94018349 3.06685117866761 0.105088336581428 -2.04175092197796 0.98006116 3.38400015973138 0.107825662621444 -2.05076104840592 1 -1.31958603067697 0.183345100748425 -1.71076722925708 0.88392856 1.69875085868633 0.20617359109272 -1.76900305202313 0.9032738 2.42691218627214 0.203291082295808 -1.82454146666107 0.94196428 3.06598615862652 0.290094264188738 -2.01765673683355 0.98065476 3.38400015973138 0.297852470327233 -2.02638573424815 1 -1.31958606467697 0.314374959132009 -1.68525654704539 0.89269514 1.69569482354118 0.352317344374175 -1.73703209050459 0.91057928 2.42141115701085 0.370260157726413 -1.78112875459907 0.94634757 3.06391574252818 0.491780321298311 -1.95979965008548 0.98211586 3.38400015973138 0.505585230104009 -1.96813226448126 1 -1.31958609167697 0.440561205645533 -1.64704102323025 0.90615792 1.69109600132275 0.491300761635533 -1.68971112625697 0.92179827 2.41253062758905 0.530434430604282 -1.72031453471055 0.95307896 3.06071154437599 0.677640509616196 -1.87551525108219 0.98435965 3.38400015973138 0.698024423364379 -1.88304183443968 1 -1.31958611467697 0.582957037438972 -1.58778498941574 0.92785516 1.68391537698168 0.645637776806147 -1.61744742282463 0.9398793 2.39798042989795 0.710776177540055 -1.63184791350861 0.96392758 3.05555534413108 0.874898680755456 -1.74903979407493 0.98797586 3.38400015973138 0.904442985938735 -1.75506127336093 1 -1.31958612367697 0.68947935426851 -1.52707619053222 0.95118902 1.67649518962924 0.758040536764992 -1.54513304738988 0.95932418 2.38207897314267 0.846661852584278 -1.54976586860993 0.97559451 3.04989296386214 1.00726292384242 -1.62728476629188 0.99186484 3.38400015973138 1.044540214613 -1.63101228146892 1 -1.31958612567697 0.765080917499392 -1.47432392602663 0.97243898 1.66999464632049 0.835979502046894 -1.48372748947327 0.97703248 2.36768665645908 0.944815449946324 -1.4842543684983 0.98621949 3.04481138562077 1.09089843581489 -1.52729738954273 0.9954065 3.38400016073138 1.13498204490875 -1.52945140364504 1 -1.31958612567697 0.819060182683269 -1.43153990099449 0.99038364 1.66468596606834 0.890812002421298 -1.43469961114457 0.99198637 2.35545566987814 1.01784484234503 -1.43531939417401 0.99519182 3.04037963241028 1.14645560545372 -1.45025331488333 0.99839727 3.38400016073138 1.1954641837815 -1.45034831288785 1 -1.31958612467697 0.830329525808534 -1.42233064755708 0.99433319 1.66353896501386 0.902238155024011 -1.424160715644 0.99527766 2.35287964575578 1.03270910805105 -1.42447793265907 0.9971666 3.03950121336855 1.15729700696866 -1.43324455807546 0.99905553 3.38400016073138 1.20801266637752 -1.43326130307626 1 -1.31958612467697 0.83923074369132 -1.41487860420312 0.99755226 1.66260970096972 0.911233640251273 -1.41565839524016 0.99796022 2.35047760964169 1.04633792469838 -1.41721606531415 0.99877613 3.0384810543201 1.16748288145246 -1.42099029249341 0.99959204 3.38400016073138 1.21777108484102 -1.419549927425 1 -1.31958612467697 0.845840769945279 -1.40924429193551 1 1.66190643893632 0.917897397927785 -1.40924429193551 1 2.34921277558161 1.05317331902305 -1.40924429193551 1 3.03826519730985 1.17161157664856 -1.40924429093551 1 3.38400016073138 1.2249309651811 -1.40924642893561 1 - -0 5 -0.03956326 1 -0.07912651 1 -0.15825303 1 -0.23737954 1 -0.31650606 1 -0.39563257 1 -0.47475909 1 -0.51432235 1 -0.5538856 1 -0.63301212 1 -0.71213863 1 -0.79126515 1 -0.87039166 1 -0.94951818 1 -1.09031566 1 -1.09802453 1 -1.1057334 1 -1.12886001 5 - -0 4 -0.5 1 -1 4 - -9 1 1 0 0 2 2 4 4 3 3 1.31958612467697 0.845840769945279 -1.40924429193551 1 0.882835714782444 0.749655391746719 -1.3715516411452 0.94718769 0.186254588936618 0.303154248469053 -1.02355078361605 0.94718769 -5.85000027786009e-009 0 -0.750000037063089 1 -1.31958613967698 0.480307131283364 -1.72082107973461 0.88052073 0.886558505229267 0.428933874253265 -1.60896504042174 0.82770842 0.184667034601213 0.173457200778775 -1.09258267889489 0.82770842 -5.85000027786009e-009 0 -0.750000037063089 0.88052073 -1.31958580367696 -0.480307121533363 -1.72082108373461 0.88052073 0.886558326289259 -0.428933870143265 -1.60896504142173 0.82770842 0.184667034411213 -0.173457201878775 -1.09258267789489 0.82770842 -5.85000027786009e-009 0 -0.750000037063089 0.88052073 -1.31958553267695 -0.845840762795279 -1.40924429893551 1 0.88283540205243 -0.749655389626719 -1.3715516431452 0.94718769 0.186254588606618 -0.303154250159054 -1.02355078161605 0.94718769 -5.85000027786009e-009 0 -0.750000037063089 1 - -0 3 -0.5 1 -1 3 - -0 3 -0.74435223 1 -1.48870447 3 - -9 1 1 0 0 2 2 4 4 3 3 1.31958587667696 0.752125697664052 0.131521655936943 1 1.31958583267696 0.410089306358196 0.357761232952746 0.91702671 1.31958583267696 -0.410089306358196 0.357761232952746 0.91702671 1.31958587667696 -0.752125697664052 0.131521655936943 1 -0.891755746716123 0.650985935430171 0.0150059799227458 0.96534296 0.893253836737279 0.356100571543869 0.186873177695999 0.88236967 0.893253836737279 -0.356100571543869 0.186873177695999 0.88236967 0.891755746716123 -0.650985935430171 0.0150059799227458 0.96534296 -0.20827539713255 0.261421950456876 -0.441578743393864 0.96534296 0.207546073557909 0.143002330632246 -0.38876235909522 0.88236967 0.207546073557909 -0.143002330632246 -0.38876235909522 0.88236967 0.20827539713255 -0.261421950456876 -0.441578743393864 0.96534296 --5.85000027786009e-009 0 -0.750000037063089 1 -5.85000027786009e-009 0 -0.750000037063089 0.91702671 -5.85000027786009e-009 0 -0.750000037063089 0.91702671 -5.85000027786009e-009 0 -0.750000037063089 1 - -0 3 -0.91343719 1 -1.82687438 3 - -0 3 -0.5 1 -1 3 - -9 1 1 0 0 2 2 4 4 3 3 -5.85000027786009e-009 0 -0.750000037063089 1 -5.85000027786009e-009 0 -0.750000037063089 0.83664231 -5.85000027786009e-009 0 -0.750000037063089 0.83664231 -5.85000027786009e-009 0 -0.750000037063089 1 -0.186254588606618 -0.303154250159054 -1.02355078161605 0.94718769 0.18873244576431 -0.370523699708931 -0.901685778007774 0.78836882 0.202032803526043 -0.34449744307275 -0.550822021852641 0.79744645 0.20827539713255 -0.261421950456876 -0.441578743393864 0.96534296 -0.882835714392444 -0.749655389626719 -1.3715516431452 0.94718769 0.88892605283172 -0.989964825840804 -1.07602378410838 0.78836882 0.894255764064868 -0.92750750046424 -0.240144307976242 0.79744645 0.891755746716123 -0.650985935430171 0.0150059799227458 0.96534296 -1.31958612467697 -0.845840762795279 -1.40924429893551 1 1.31958614767698 -1.16739987944852 -1.07855776222874 0.83664231 1.31958599867697 -1.11139323078834 -0.157754493832936 0.83664231 1.31958587667696 -0.752125697664052 0.131521655936943 1 - -0 3 -0.80903604 1 -1.61807207 3 - -0 3 -0.5 1 -1 3 - -9 1 1 0 0 3 3 4 4 2 2 1.31958607367697 -1.13939655511843 -0.618156128230839 1 1.66504253008527 -1.22892561037083 -0.337230843807605 1 2.03322615057306 -1.23901955185027 -0.0864785933175126 1 2.42413693614032 -1.16967838155674 0.134100623219438 1 -1.31958612167697 -1.15750248497842 -0.915835049989829 0.94312102 1.66652056815548 -1.29310018041896 -0.716362105295373 0.96208068 2.01253799559042 -1.37814992545861 -0.546789587691111 0.98104034 2.35753187697675 -1.43089684996395 -0.401910199549709 1 -1.31958613967698 -1.0537491720504 -1.19543443378009 0.94312102 1.66233682095676 -1.19985629399011 -1.08868495970976 0.96208068 2.00288635213199 -1.29212058637243 -0.988523311362336 0.98104034 2.33270266479743 -1.39065868805274 -0.916358507244692 1 -1.31958612467697 -0.845840762795279 -1.40924429893551 1 1.66190643893632 -0.917897390397785 -1.40924429893551 1 2.00555960725897 -0.985535350790415 -1.40924429993551 1 2.34964929660235 -1.04896389482311 -1.40924429993551 1 - -0 4 -1.15241345 4 - -0 4 -1 4 - -9 1 1 0 0 3 3 5 6 3 4 1.31958586967696 -0.472656103389959 0.273205851646581 1 1.42016903945441 -0.590730484958191 0.285486017359858 1 1.63609852971051 -0.799794273568188 0.291555480648142 1 2.00428221819829 -1.03213503302378 0.24518707116576 1 2.27926431325924 -1.13285892380791 0.177293061910968 1 2.42413693614032 -1.16967838155674 0.134100623219438 1 -1.31958587167696 -0.505359783523301 0.26111801354244 0.99852786 1.40915002693103 -0.619974747737219 0.265227999307653 0.9965848 1.60202192909195 -0.823128663436512 0.255091729976206 0.9941031 1.92893238561937 -1.05067168290422 0.186710119468254 0.99459382 2.16890695601755 -1.15359505079282 0.108072198453154 0.9977298 2.29383334095123 -1.19279210465458 0.0605742177071208 1 -1.31958587667696 -0.602247217935207 0.221022570018008 0.99558357 1.37499003730852 -0.706268622175958 0.201850119687366 0.98764777 1.49611776206178 -0.891570687617333 0.144310994224404 0.97739384 1.69880870668908 -1.10019966525668 0.00819262339912871 0.97886599 1.83994813239284 -1.19754665388041 -0.107308190066865 0.99108277 1.91049827674379 -1.23565490469046 -0.170062676817543 1 -1.31958587767696 -0.693879405727502 0.170048598636875 0.99705571 1.34069359067953 -0.782725213587451 0.128149309836765 0.98263645 1.38865401795752 -0.941209313985041 0.0228402070548516 0.96362887 1.46987940681552 -1.11118992177869 -0.186647256305269 0.9646103 1.52418573139493 -1.17721586091475 -0.348228519749966 0.98492646 1.54989037761584 -1.19908259195336 -0.43087260527535 1 -1.31958587667696 -0.752125697664052 0.131521655936943 1 1.31958590167696 -0.826562636439617 0.0715862900301662 0.98104034 1.31958595267697 -0.960420378167518 -0.0701285714209283 0.9557608 1.31958602167697 -1.09548585303278 -0.33158791933958 0.9557608 1.31958605767697 -1.13359452284285 -0.52276513094001 0.98104034 1.31958607367697 -1.13939655511843 -0.618156128230839 1 - -0 4 -0.33333333 1 -1 4 - -0 4 -0.44774013 1 -0.89548026 1 -1.34322039 4 - -9 1 1 0 0 3 3 8 7 4 5 2.00023807100621 -0.163958005517587 0.96768671484265 1 2.03489752065244 -0.314562669980924 0.915621844889702 1 2.11251003633884 -0.589866694887163 0.784454900379607 1 2.23025972093165 -0.869233465956372 0.552903208261492 1 2.33689989299678 -1.05386892705609 0.327106047676703 1 2.39436678672631 -1.13323400482572 0.200688865082209 1 2.42413693614032 -1.16967838155674 0.134100623219438 1 -1.98138388111068 -0.164009776200046 0.95416450643038 1 2.01504411070946 -0.312385186227499 0.903362128677397 0.99996293 2.09023358728076 -0.583990171228043 0.77560964416948 0.99991351 2.20403387768599 -0.860991457974898 0.550560562000222 0.99991351 2.30705065557902 -1.04512455964075 0.33126285025414 0.99995058 2.36257833021644 -1.12458131441474 0.20846277010145 0.99998147 2.39130647758096 -1.16133450216043 0.143888722034347 1 -1.96265344722103 -0.164065846862709 0.940474777060153 1 1.99491238575325 -0.310816731043002 0.891751841965938 0.99992586 2.06753723720274 -0.578790921771092 0.767713537284435 0.99982702 2.17792843244604 -0.852359185904887 0.548119195694264 0.99982702 2.27762002318114 -1.03549304618328 0.334785579801461 0.99990115 2.33121681972685 -1.11510570796468 0.215637798732245 0.99996293 2.3588550990396 -1.15229515073108 0.153202023216705 1 -1.83019016592936 -0.164495632963123 0.841823267944458 1 1.85416547706813 -0.296687479231898 0.80459500050621 0.99966197 1.91022013373058 -0.537223610496751 0.705047458307956 0.99921127 1.99596376180319 -0.788341846404227 0.526939293198272 0.99921127 2.07123821337853 -0.964298845591735 0.357341915672829 0.9995493 2.11073489225452 -1.04388093058168 0.263952815307085 0.99983099 2.13052836519466 -1.08299171843934 0.21612444244536 1 -1.72099232574275 -0.165025310578281 0.750811607191636 1 1.73885368059111 -0.281781516483903 0.722134653769554 0.99943515 1.78308796569213 -0.493934152800612 0.641436519246598 0.99868201 1.85075662490622 -0.719267860203389 0.496181355417349 0.99868201 1.90698885557711 -0.882657111663961 0.361459885758422 0.99924687 1.93499312590724 -0.95908497806409 0.288924944153198 0.99971757 1.94846807054726 -0.997382061603104 0.25243017736979 1 -1.51191416881207 -0.166405190103822 0.556353481785371 1 1.51951449017306 -0.246449390155717 0.542092091377991 0.9989815 1.54204818424336 -0.394265980376628 0.497368471233734 0.99762351 1.57623454086712 -0.558404644222796 0.415830091230869 0.99762351 1.59979668198626 -0.68294656852822 0.344075986692732 0.998642 1.60911907042905 -0.74350161106443 0.30735819398873 0.99949075 1.61273576060083 -0.774080653576856 0.289485285659813 1 -1.41295836511192 -0.167240114993479 0.454273684986841 1 1.41630714827098 -0.226014923805132 0.445727350470912 0.99875468 1.42774374981419 -0.337166772504562 0.417990721203493 0.99709425 1.44500484663404 -0.464995688236109 0.367139210968176 0.99709425 1.45524431912039 -0.563614526410252 0.323085389885732 0.99833957 1.45828385726476 -0.612172068896612 0.301015419117465 0.99937734 1.45906374530181 -0.636388902176849 0.290234659035406 1 -1.31958583467696 -0.168220024990022 0.347343154077914 1 1.31958583967696 -0.202819713033419 0.343041048563575 0.99852786 1.31958584967696 -0.271740193206966 0.331774555398445 0.996565 1.31958585967696 -0.35659725493746 0.311109877006925 0.996565 1.31958586567696 -0.423380963929516 0.290706506737818 0.99803714 1.31958586767696 -0.456316308323861 0.27924531866344 0.99926393 1.31958586967696 -0.472656103389959 0.273205851646581 1 - -0 4 -0.08801262 2 -0.62657294 2 -1.16513326 4 - -0 4 -0.33333333 1 -0.66666667 1 -0.83333333 1 -1 4 - -9 1 1 0 0 2 2 6 4 5 3 2.8066391803082 0.164126150055573 1.41444143218236 1 2.8066391753082 0.0877860075896114 1.45778393424102 0.93480793 2.8066391643082 -0.0877860847096151 1.45778391524102 0.93480793 2.8066391593082 -0.164126217435577 1.41444139518236 1 -2.57776472443725 0.163499698825819 1.319607622678 1 2.56650351790237 0.0866858236373555 1.35019340213074 0.94305882 2.56650350690237 -0.0866858986973591 1.35019338213074 0.94305882 2.57776470343725 -0.163499765415822 1.31960758567799 1 -2.14274171277477 0.163481471704953 1.07459482804051 1 2.11985345168763 0.0851855702760973 1.08772681066425 0.95956061 2.11985344068763 -0.0851856428761007 1.08772679166425 0.95956061 2.14274169177476 -0.163481538334956 1.07459479004051 1 -1.77326187922542 0.164680272451893 0.799426170020704 1 1.75205970121837 0.0844597695316236 0.805574293662724 0.97490342 1.75205969321837 -0.084459841471627 0.805574277512723 0.97490342 1.77326186422542 -0.164680340701896 0.799426138540702 1 -1.4596446333294 0.166750089070204 0.507738967696306 1 1.45021434788148 0.0842949151737935 0.514985808490512 0.98908726 1.45021434588148 -0.0842949876837969 0.514985799770512 0.98908726 1.4596446303294 -0.166750159990207 0.507738950436305 1 -1.31958583467696 0.168219952200019 0.347343163127914 1 1.31958584267696 0.0844325598103312 0.357761235222746 0.99617917 1.31958584267696 -0.0844326331603347 0.357761230682746 0.99617917 1.31958583467696 -0.168220024990022 0.347343154077914 1 - -0 3 -1.49547551 1 -2.99095102 1 -4.27636204 1 -5.56177307 3 - -0 3 -0.5 1 -1 3 - -9 0 0 0 0 3 3 6 7 4 4 3.07361411498883 -0.462644191244419 1.41444136118236 2.95582892039433 -0.607898777433641 1.19584699279968 2.83877628783463 -0.743197021369963 0.971382893078209 2.65580223414383 -0.940362616654825 0.609062659318923 2.55618206841213 -1.04319434354907 0.40819202783808 2.45710311770613 -1.13867034808394 0.202984852991263 2.42413693614032 -1.16967838155674 0.134100623219438 -3.04134577945617 -0.431905429304406 1.41444136518236 2.92145942776187 -0.561999162443527 1.21372068264864 2.80004749599511 -0.685200475105275 1.01080032501044 2.60845905189515 -0.870980548019354 0.687476856073397 2.5037597429222 -0.970071136875904 0.509208434616102 2.39924118095784 -1.0658929696272 0.328335491625098 2.36459663831231 -1.09678962909471 0.267277106954981 -2.97841692646721 -0.368662386800523 1.41444137218236 2.85082380640686 -0.471444862962428 1.25349867353799 2.72029614320713 -0.572026468689798 1.09321270592481 2.51425035042048 -0.728588994946119 0.838706317116411 2.40265130311981 -0.812779906704972 0.697249796597587 2.29088073981099 -0.897737162110225 0.554837037643344 2.25380965805021 -0.925106820160214 0.506592869841869 -2.88923255023118 -0.26893801941387 1.41444138318236 2.7465453114539 -0.328708662862823 1.3119505043143 2.60472786171793 -0.386844604694132 1.20435016420356 2.38463558326411 -0.476953721134085 1.02584820372517 2.26799496772398 -0.523368207758655 0.922452844384157 2.15146739918921 -0.573048783158355 0.81890692627599 2.11251003633884 -0.589866694887163 0.784454900379607 -2.8335058675843 -0.199506406896045 1.41444139118236 2.68306070143854 -0.221843683387009 1.34122520470478 2.53606373245656 -0.243257614734116 1.25915754080677 2.31025832273138 -0.275489761955061 1.11613971101379 2.19076498205575 -0.291173623430004 1.0321690330254 2.07376893549873 -0.308423620369335 0.944852886058102 2.03489752065244 -0.314562669980924 0.915621844889702 -2.8066391593082 -0.164126217435577 1.41444139518236 2.6540561890609 -0.16370858275574 1.35121885517945 2.5052608679935 -0.163496727565677 1.27877211973841 2.27716058115932 -0.163487170365224 1.15030192963641 2.15561091138602 -0.163589285980074 1.07592130710352 2.03869512483282 -0.163852408392571 0.995268079952695 2.00023807100621 -0.163958005517587 0.96768671484265 - -0 4 -0.33333333 1 -0.66666667 1 -1 4 - -0 4 -0.70387747 2 -1.10721489 1 -1.3088836 4 - -9 0 0 0 0 3 4 8 15 6 12 2.34964929660235 -1.04896389482311 -1.40924429993551 2.34962109460101 -1.04953254385012 -1.40842403889655 2.34956489459834 -1.05066835790407 -1.40678341081862 2.34948121259436 -1.05236762498478 -1.40432214970172 2.34936167558869 -1.0548124741009 -1.40076630453283 2.3464648664511 -1.11454227593791 -1.31349252238754 2.34304618328872 -1.21528196872279 -1.14133668721058 2.34457102936114 -1.3175929185823 -0.881477839057949 2.35716887995951 -1.35205004121893 -0.588354694915347 2.37403613676066 -1.33062613520135 -0.350352063290829 2.39032353153427 -1.28831377419162 -0.169972884403278 2.40263657611911 -1.24960776035318 -0.0489692164159129 2.41296244460956 -1.21270492160039 0.04234669613136 2.42033128395956 -1.18460377126566 0.103474265184764 2.42413693614032 -1.16967838155674 0.134100623219438 -2.46434586005014 -1.07010674382734 -1.40924429993551 2.46432620304921 -1.0706491678531 -1.40845555889805 2.46428712604735 -1.07173236590455 -1.4068776948231 2.46422893504459 -1.07335383598157 -1.40451085071068 2.46414620304066 -1.07568638309236 -1.40109042554822 2.46214886194579 -1.13269591280017 -1.31715197256136 2.46016843985173 -1.22982248941343 -1.15085267066257 2.46280371897689 -1.33123972023049 -0.897176159883579 2.47528689956981 -1.36800685597684 -0.606169275691494 2.49161447334533 -1.34835709804352 -0.368206524348871 2.50732894809173 -1.30727396009218 -0.187680544644347 2.5191647956539 -1.26936310829151 -0.0666066753636472 2.52901720512187 -1.23308950356861 0.0246340517600546 2.53603135245502 -1.2053131062493 0.0855248924822142 2.53957045562312 -1.19080052555999 0.116103361404614 -2.69383599095034 -1.11145701379137 -1.40924429993551 2.69375012594626 -1.11242668983743 -1.40885742091713 2.69376620694702 -1.11323088187563 -1.40719049683796 2.69371126094441 -1.11491343295554 -1.40506588773705 2.69366794694236 -1.11712467006057 -1.40182860958328 2.69247962488591 -1.17211207867233 -1.32307479684268 2.69154916584172 -1.26791793022287 -1.16491051733028 2.69415151396532 -1.37436552827886 -0.917622474674727 2.70415517844047 -1.42379473762662 -0.62565023393679 2.71708945605482 -1.41614680226336 -0.383993145058695 2.72946526964264 -1.38454652876243 -0.200118354035111 2.73879732208589 -1.35308881126827 -0.076874738901354 2.74657657745538 -1.32175811678014 0.0157579120384606 2.75199910871294 -1.29758209363184 0.0774275866776128 2.75490042685074 -1.28451286301108 0.108323247175078 -2.98108417259389 -1.16049280112045 -1.40924429993551 2.98090652458546 -1.16203062319349 -1.40934699194039 2.98097339758863 -1.16255474221838 -1.40754356685473 2.98089542558493 -1.16441554930677 -1.40568306476636 2.98086191658334 -1.16662370041165 -1.40261955962085 2.97971240552874 -1.22271079907564 -1.32894388512144 2.97810392645234 -1.32356738186607 -1.17762603293423 2.97780336143806 -1.44478122262342 -0.932633855817729 2.9818189966288 -1.51949897617233 -0.634208558503289 2.98816539093023 -1.53559303293675 -0.384011197299552 2.9946261082371 -1.5225344083165 -0.192891717841865 2.99975236948059 -1.5035354914141 -0.064876177951453 3.0042940156963 -1.48149347536716 0.0310876587065845 3.00735767284182 -1.46397864753525 0.0949609630104035 3.00942613994006 -1.45335844503082 0.126706513498236 -3.18243537415756 -1.19326094367685 -1.40924430093551 3.18229333815082 -1.19460263674058 -1.40923159593491 3.18234929715347 -1.19523082977042 -1.40758784085683 3.18228959715064 -1.19703877285629 -1.40580154077199 3.18226688014956 -1.199264488962 -1.40291697863498 3.18144120211034 -1.25541827162917 -1.33327835432732 3.18009810304655 -1.35852918352667 -1.1880763954306 3.1791117119997 -1.48821154168625 -0.946934079056953 3.18028402605538 -1.57814387395781 -0.645688041768535 3.18282615617612 -1.60863399340601 -0.390410371283497 3.18558474930715 -1.60715659733584 -0.194854404705087 3.1878891784166 -1.59613049981213 -0.0637899280798589 3.19005242151935 -1.58021252705606 0.0343966424537528 3.19146242058632 -1.56676639741741 0.0996674759439509 3.19261795364121 -1.55828895801475 0.132057217152381 -3.29758320762679 -1.21151725554398 -1.40924430093551 3.29750499662308 -1.21248980359017 -1.40897026492249 3.29753616962456 -1.2133009096287 -1.40752897585404 3.29750367962301 -1.21499482070915 -1.40574047776909 3.29749175562245 -1.21722780981522 -1.40298675863829 3.29705046660149 -1.27284433145686 -1.33596412145489 3.29630264056597 -1.37617961936502 -1.19505426076203 3.29564154853457 -1.50923171168466 -0.957446587626271 3.29590698954717 -1.60605078628332 -0.655657637822065 3.29678444558885 -1.64315495604567 -0.398149184771071 3.29777858963607 -1.64720978823826 -0.200583695787214 3.29864534767724 -1.64010804390095 -0.0680862704639242 3.29949866771777 -1.62731559629334 0.0311699092604912 3.30003168774309 -1.61579569974617 0.0970559413299096 3.3005498087677 -1.60868790840857 0.129784810234447 -3.35518891336291 -1.22048537796994 -1.40924430093551 3.35515959736152 -1.22117309600261 -1.40876371791268 3.35517131736208 -1.22212307704773 -1.4074671238511 3.3551591933615 -1.22372646412389 -1.40566050776529 3.3551548333613 -1.22596061023 -1.40298379963815 3.3549928083536 -1.28104821984652 -1.33740161252316 3.3547655133428 -1.38387972773076 -1.19899338694913 3.35467861133868 -1.51750336607754 -0.963777748696985 3.35490538634945 -1.61650110577968 -0.662236761864557 3.35518633336279 -1.65613343066211 -0.403917028975029 3.35540158837302 -1.66268310197321 -0.205551218763159 3.3555654253808 -1.65752571672824 -0.072442100270815 3.355717081388 -1.64643314520137 0.027295803466481 3.35578078939103 -1.63596463470415 0.093440218248172 3.35590191739678 -1.62973820740841 0.126341610970904 -3.38400016073138 -1.22492845218098 -1.40924430093551 3.38400016073138 -1.22544504920551 -1.40863878690675 3.38400016073138 -1.22647791225457 -1.40742699784919 3.38400016073138 -1.22802637332812 -1.40560651276272 3.38400016073138 -1.23026038643423 -1.40297166663758 3.38400016073138 -1.28501268103482 -1.33814808855862 3.38400016073138 -1.38764131790942 -1.20105164204689 3.38400016073138 -1.52198104829022 -0.967070649443389 3.38400016073138 -1.62247285906332 -0.665657587487037 3.38400016073138 -1.66325943400058 -0.407000902781505 3.38400016073138 -1.67063232935077 -0.208364577446786 3.38400016073138 -1.66600580313103 -0.0750673966955099 3.38400016073138 -1.65529696062238 0.0247951568877067 3.38400016073138 -1.64495198913102 0.0909692943408094 3.38400016073138 -1.63898554684763 0.123910676095441 - -0 4 -0.33333333 1 -0.66666667 1 -0.83333333 1 -0.91666667 1 -1 4 - -0 5 -0.00338386 1 -0.00676772 1 -0.01015158 1 -0.0146634 1 -0.36320115 1 -0.7117389 1 -1.06027665 1 -1.1764559 1 -1.29263515 1 -1.4088144 1 -1.52499365 5 - -9 1 1 0 0 4 3 9 11 6 9 3.38400016073138 -1.63898554684763 0.123910676095441 1 3.35590191739678 -1.62973820740841 0.126341610970904 1 3.3005498087677 -1.60868790840857 0.129784810234447 1 3.19261795364121 -1.55828895801475 0.132057217152381 1 3.06176665842611 -1.4833385914548 0.128235285970849 1 2.90761585510434 -1.38582021282292 0.119353206968973 1 2.75270491474646 -1.29226863737946 0.11253950853534 1 2.6199532764411 -1.22723528129055 0.113888528799415 1 2.5097410092063 -1.18873674246196 0.122366077442077 1 2.45299531551102 -1.17495891780755 0.129601307765732 1 2.42413693614032 -1.16967838155674 0.134100623219438 1 -3.38400016073138 -1.62962242840291 0.175605490660813 0.99381499 3.35624418241304 -1.62005353494841 0.177760787143184 0.9939868 3.30187716683074 -1.59786217089438 0.180526174854533 0.99433041 3.19580430879255 -1.54600628443135 0.181633556937131 0.99501763 3.06728977168844 -1.46989973181649 0.176562669256276 0.99587666 2.91598587650189 -1.37157487814631 0.166438482485403 0.9969075 2.76423437929408 -1.27737021367183 0.1583895573531 0.99793833 2.63464810413906 -1.21139940153838 0.15850282239848 0.99879736 2.52738055004413 -1.17148495864255 0.1656152057763 0.99948458 2.47227232142663 -1.1565357209325 0.171911311745349 0.99982819 2.44419561909306 -1.15081115766059 0.17601409024022 1 -3.38400016073138 -1.60687981832269 0.278763023740533 0.98258052 3.35669113743427 -1.59730627286797 0.280561543355958 0.98306439 3.30385210892455 -1.57402469676216 0.282294362908262 0.98403214 3.20106899204261 -1.52059348722431 0.281315390621763 0.98596764 3.07734074416584 -1.44243764451211 0.273478879609549 0.98838701 2.93245712128423 -1.34159530972236 0.260083781973316 0.99129026 2.78782467441456 -1.24497710113324 0.248813717878017 0.99419351 2.66485103657363 -1.1769284839011 0.246273169207347 0.99661288 2.56322371974659 -1.13502600491084 0.251065355434964 0.99854838 2.51106301626909 -1.11864287613268 0.255951356967037 0.99951613 2.48435256600041 -1.11253877784275 0.259523887796723 1 -3.38400016073138 -1.54539565240235 0.482548279189812 0.96457321 3.3579362134934 -1.53555276993484 0.483581096718868 0.96555729 3.30845504914318 -1.51050536974515 0.483376452679148 0.96752544 3.21280599660009 -1.45499548410857 0.478534851879185 0.97146175 3.09905810019735 -1.37510701231408 0.465704131419758 0.97638214 2.96724470293655 -1.27281894345565 0.446308566818518 0.9822866 2.83674628873821 -1.17476391079829 0.428889100671138 0.98819107 2.72651648750258 -1.10460712846602 0.420945883793856 0.99311146 2.63556669218269 -1.05968386733228 0.420892733061331 0.99704777 2.5889159169669 -1.04085199043781 0.422932230088202 0.99901592 2.56482477982263 -1.03384228910487 0.425274936949475 1 -3.38400016073138 -1.40809479788091 0.769737930640588 0.95047013 3.3606183476208 -1.39836719041887 0.769834117555157 0.95184596 3.31678500253883 -1.37361296724311 0.76768355091301 0.95459762 3.23297207455793 -1.31984222168914 0.758927949287142 0.96010094 3.13498056290358 -1.24353276906463 0.741091099809937 0.96698009 3.02323053959574 -1.14622760544289 0.715355902897581 0.97523507 2.91374468639544 -1.05231054298207 0.691008169851125 0.98349004 2.82166089002169 -0.983492227053372 0.676528442413375 0.99036919 2.74551939940517 -0.937514642709554 0.670588730341254 0.99587251 2.70636039054521 -0.917246927316889 0.669400620634822 0.99862417 2.68600805457853 -0.909342365861443 0.670095872757845 1 -3.38400016073138 -1.19086198756291 1.06367976252208 0.9518099 3.36495603082683 -1.18207687314564 1.06306852149304 0.95314851 3.32899198511863 -1.16107598914815 1.06010723435239 0.95582574 3.2608340388813 -1.11526732697235 1.05029535888635 0.96118019 3.18199457013663 -1.05071823690644 1.03206433302042 0.96787326 3.09328753592327 -0.968073443551019 1.00596751678089 0.97590495 3.00714621183177 -0.886890278245026 0.980354532874339 0.98393663 2.93484229439752 -0.825345934981827 0.963210946850063 0.9906297 2.87494943255276 -0.782409928762476 0.953935902279522 0.99598416 2.84406755008595 -0.762975365959384 0.950830453922021 0.99866139 2.82808118832664 -0.75467863677531 0.950170409260671 1 -3.38400016073138 -0.96133668617104 1.26210326194669 0.96988195 3.36967345405089 -0.953884514857081 1.2615456789202 0.97071857 3.3419878757359 -0.937582801832791 1.25956431582609 0.97239179 3.28918031222767 -0.901999836532691 1.25313523952073 0.97573824 3.22735005529089 -0.852626796837598 1.24135750096131 0.9799213 3.15737986596749 -0.789258687797774 1.22427301414985 0.98494098 3.08949147274296 -0.725520178170358 1.20707163733282 0.98996065 3.03285576605291 -0.675005774231052 1.19494587675688 0.99414371 2.98643509484805 -0.637853082126394 1.18787487442103 0.99749016 2.96268229971985 -0.620525594343383 1.18536927330202 0.99916339 2.95057059414458 -0.612426941398717 1.18452584126196 1 -3.38400016073138 -0.79695880412351 1.36822398598715 0.98885491 3.37311287721426 -0.790377912850935 1.36800344097667 0.9891645 3.35166190219539 -0.776771988534688 1.36728105894236 0.98978367 3.30991739321263 -0.748013760988746 1.36489278482893 0.99102201 3.25964841682498 -0.7096002127842 1.36048005461933 0.99256994 3.20154854106539 -0.660917248151883 1.35398355331076 0.99442746 3.14489151537432 -0.61100881063136 1.34733454599495 0.99628497 3.09820442915681 -0.569498346739719 1.34253118976681 0.9978329 3.06078422737944 -0.537012049396702 1.33965170163004 0.99907124 3.04198504648653 -0.521119834681863 1.33861888158098 0.99969041 3.03254683503824 -0.513289017939919 1.33822570356231 1 -3.38400016073138 -0.713493162199105 1.41444133318236 1 3.3748717562978 -0.707296392774774 1.41444133418236 1 3.35669134643428 -0.694765211989575 1.41444133518236 1 3.32064414772213 -0.669161381703459 1.41444133818236 1 3.27618824961058 -0.636158400655901 1.41444134218236 1 3.22385431012486 -0.595012308321567 1.41444134618236 1 3.17258169068954 -0.55237829491656 1.41444135118236 1 3.13077909270402 -0.515655511232321 1.41444135518236 1 3.0979158561431 -0.485587917784187 1.41444135918236 1 3.081681199372 -0.470328881729422 1.41444136018236 1 3.07361411498883 -0.462644191244419 1.41444136118236 1 - -0 5 -0.24526078 1 -0.49052156 1 -0.98104311 1 -1.47156467 1 -1.96208622 5 - -0 4 -0.08333333 1 -0.16666667 1 -0.33333333 1 -0.5 1 -0.66666667 1 -0.83333333 1 -0.91666667 1 -1 4 - -9 1 1 0 0 3 4 11 51 9 48 6.35000030160882 -1.3468533929721 1.41444126218235 1 6.35000030660882 -1.40890616991945 1.36006180859947 1 6.35000029960882 -1.48956503675054 1.28150641286829 1 6.35000030260882 -1.58549732230708 1.17314407372135 1 6.35000030060882 -1.69023573928189 1.02869898086058 1 6.35000030260882 -1.75530927037271 0.926891169014966 1 6.35000030060882 -1.8150406642098 0.819896683623001 1 6.35000030260882 -1.86887279776669 0.70812623748419 1 6.35000030060882 -1.91628365701859 0.5920591599213 1 6.35000030260882 -1.96694090842468 0.442302179138225 1 6.35000030060882 -2.00159832407081 0.302834670053874 1 6.35000030460882 -2.02333409810321 0.176402059638648 1 6.35000030160882 -2.03537264767501 0.0647431624351351 1 6.35000030160882 -2.04024739590655 0.000738103995058057 1 6.35000030160882 -2.04310867804245 -0.063373067760059 1 6.35000030160882 -2.04395595008269 -0.127494595025668 1 6.35000030160882 -2.04279320202747 -0.191532650437312 1 6.35000030160882 -2.0396317388773 -0.255392437090489 1 6.35000030160882 -2.03448725163295 -0.318982007460832 1 6.35000030160882 -2.0273825162955 -0.382209341503969 1 6.35000030160882 -2.01834437986621 -0.444986134795706 1 6.35000030160882 -2.00740638434668 -0.507224837511886 1 6.35000030160882 -1.99460568073868 -0.568842395628563 1 6.35000030160882 -1.97998559004426 -0.629757236271862 1 6.35000030160882 -1.96359245826563 -0.689892949298155 1 6.35000030160882 -1.94547816440525 -0.749175207583911 1 6.35000030160882 -1.92569673646568 -0.807535389635871 1 6.35000030160882 -1.90698155157676 -0.857735863910265 1 6.35000030160882 -1.88997241576887 -0.900109907012924 1 6.35000030360882 -1.86629662664433 -0.955879660721845 1 6.35000030060882 -1.84586494567388 -1.0002873635111 1 6.35000030260882 -1.82605691673305 -1.04046361441937 1 6.35000030060882 -1.8054316117534 -1.0798727922912 1 6.35000030160882 -1.79670454133888 -1.09616322806496 1 6.35000030060882 -1.78784490891807 -1.11232406783256 1 6.35000031260882 -1.75055322114681 -1.17883401099161 1 6.35000030160882 -1.71413296241694 -1.23737758477228 1 6.35000030160882 -1.67483234755026 -1.29497145550784 1 6.35000030160882 -1.6348793416526 -1.34854786705258 1 6.35000030160882 -1.62906811837658 -1.35625731041876 1 6.35000030160882 -1.62269449707385 -1.36461311081564 1 6.35000030160882 -1.614170805669 -1.37570875534266 1 6.35000030160882 -1.60558024126097 -1.38670781986508 1 6.35000030160882 -1.59693715585044 -1.3975950763822 1 6.35000030160882 -1.58822788543677 -1.40838893289488 1 6.35000030160882 -1.58386336222947 -1.41376084415003 1 6.35000030160882 -1.57948445502148 -1.41911327440426 1 6.35000030160882 -1.57399923876095 -1.42577197372053 1 6.35000030160882 -1.56959008055152 -1.43107552097244 1 6.35000030160882 -1.56628089639435 -1.43502879216021 1 6.35000030160882 -1.56406656428917 -1.43766213928528 1 -6.0964431935655 -1.34222038475204 1.41444126318235 1 6.1014624688039 -1.40475526972229 1.3616162896733 0.99822755 6.10768342309938 -1.48594810957874 1.2849890340337 0.99604608 6.11466209743085 -1.58235887715801 1.17882474699117 0.99362222 6.12182155177091 -1.6874127101478 1.03668747924001 0.99116807 6.12610866997453 -1.75266186624697 0.936161497985283 0.98971375 6.1299018251547 -1.8124593470872 0.830277739456075 0.98844123 6.13319716231122 -1.8662328416413 0.719455500502301 0.98735049 6.13599134344394 -1.91344657288383 0.60418529087726 0.98644154 6.13885467257994 -1.96367759726968 0.455223436701952 0.9855326 6.14067148466623 -1.99769226988529 0.316325942574675 0.98498723 6.14169320971476 -2.01865634888103 0.190285430388073 0.98471454 6.14214157073606 -2.02986413941337 0.0788852126068464 0.98463501 6.14227038574218 -2.03421836262018 0.0150086388728721 0.98463501 6.14227179474224 -2.03651299772917 -0.0489888066868434 0.98468046 6.14214583573626 -2.0367473657403 -0.113009097067644 0.98477135 6.14189257572423 -2.03492557365377 -0.17695602219496 0.98490769 6.14151212370616 -2.03105910647013 -0.240732534784181 0.98508948 6.14100461868205 -2.02516408219013 -0.30424434741083 0.98531672 6.14037023765192 -2.01726375381488 -0.367397256730433 0.9855894 6.13960918961577 -2.0073856913457 -0.430100707768686 0.98590754 6.13872172257362 -1.99556419878421 -0.492265079461336 0.98627111 6.13770811552548 -1.98183742313222 -0.553805199064334 0.98668014 6.13656868247136 -1.96624970239185 -0.614637574553717 0.98713461 6.13530377241128 -1.94884861956534 -0.674683845635762 0.98763453 6.13391377034526 -1.92968729765522 -0.733867951946856 0.9881799 6.13239908827331 -1.90882122266414 -0.792119519633656 0.98877072 6.13096492020519 -1.88912374772856 -0.842218522673231 0.98932745 6.12965821714313 -1.87125015487961 -0.884498732041433 0.98983305 6.1278342440565 -1.84640583369957 -0.940117682893192 0.99053748 6.12625213498135 -1.82499717368271 -0.98439540119627 0.99114676 6.12470722390797 -1.80426182069783 -1.02444925565873 0.99174042 6.12308587683096 -1.7826872556731 -1.06373107252451 0.99236248 6.12239789279828 -1.77356457223979 -1.0799611572954 0.9926264 6.121697241765 -1.76430625280005 -1.09606022006006 0.99289507 6.11873979162453 -1.72537885095109 -1.16225114120396 0.99402965 6.11580653848521 -1.68740276514733 -1.22049662197048 0.99515287 6.11257586233176 -1.64644099420175 -1.27778386869147 0.99638874 6.10920888217184 -1.6047978002238 -1.33106339922212 0.99767612 6.10871831114854 -1.59874762293643 -1.33872088358583 0.99786392 6.1081785181229 -1.59211223162127 -1.34701968598 0.99807056 6.10745528208855 -1.58324066319989 -1.35803649650327 0.9983475 6.10672343405378 -1.57430060877526 -1.3689557110219 0.99862776 6.10598298901862 -1.56530537534801 -1.37976333353524 0.99891133 6.10523396598304 -1.55624253691755 -1.39047622604407 0.99919822 6.10485768796517 -1.55170143170186 -1.39580679129726 0.99934237 6.10447959094721 -1.54714588348548 -1.4011173215495 0.99948724 6.10400471492465 -1.54143948721444 -1.40772333386327 0.9996692 6.10362237090649 -1.53685322299661 -1.41298409311314 0.99981573 6.10333424189281 -1.53341037283308 -1.41690581529941 0.99992615 6.10314154888365 -1.53110727872369 -1.41951769042347 1 -5.71012113421619 -1.32720369003879 1.41444126418235 1 5.72114553573982 -1.39071551205544 1.36349287576243 0.99557289 5.73490556939339 -1.47311298496911 1.28916996123228 0.99012415 5.75047673113298 -1.57084330561105 1.18558917931246 0.98406999 5.7666149078995 -1.67722291566381 1.04607286268579 0.97794015 5.77635050736191 -1.74337060580566 0.946911033475859 0.97430766 5.78502188077378 -1.80394961568301 0.842130894729069 0.97112922 5.79260753913408 -1.85835861626729 0.732161307165794 0.96840485 5.79908878444192 -1.9060350755318 0.617507194240017 0.96613454 5.80579327676037 -1.95661183393407 0.468999011396257 0.96386423 5.81012311596603 -1.99058203954757 0.330275710137254 0.96250204 5.8126342820853 -2.01122724252816 0.204205471929239 0.96182095 5.81382452514183 -2.02193419403672 0.0926433658703236 0.9616223 5.81421668716046 -2.0259360752268 0.0286429730604682 0.9616223 5.8143207511654 -2.02781158831588 -0.0355023781062724 0.96173581 5.81413693015667 -2.02755960230391 -0.0996910155950689 0.96196284 5.81366564113429 -2.02518421919108 -0.16382289581117 0.96230339 5.81290750709828 -2.02069705197796 -0.227797336539792 0.96275745 5.81186334904868 -2.01411478666531 -0.291516273076279 0.96332503 5.81053418898555 -2.0054613702543 -0.354881969575988 0.96400612 5.80892124890894 -1.99476548674627 -0.417800239404446 0.96480073 5.80702594681892 -1.98206266014292 -0.480178117507236 0.96570886 5.80484989271556 -1.96739265544613 -0.541927026320151 0.9667305 5.80239489059896 -1.9508015066581 -0.602960394789081 0.96786565 5.79966293046919 -1.93233886278117 -0.663196754750154 0.96911432 5.79665618932638 -1.91205995381797 -0.722557295709628 0.97047651 5.79337702017063 -1.89002273277126 -0.78096888855403 0.97195221 5.79027072302309 -1.86925358878478 -0.831197742409772 0.97334277 5.78744069988867 -1.8504299048907 -0.873578468692749 0.97460563 5.78349433370123 -1.82429684864945 -0.929291635918982 0.97636512 5.78007292553872 -1.80180318858106 -0.973634235275142 0.97788694 5.77673375838012 -1.78003132554695 -1.01374407115026 0.97936974 5.77323229621381 -1.75739051947157 -1.05307404201833 0.98092348 5.77174835814332 -1.74782377801717 -1.06931301378964 0.9815827 5.77023780007158 -1.73811733355614 -1.08541876055462 0.98225374 5.76387666376944 -1.69735882162021 -1.15154195069531 0.98508764 5.75757905147032 -1.65762979473319 -1.20971638045844 0.98789316 5.75065814614159 -1.61478456669815 -1.26692959617592 0.99098002 5.74346331179986 -1.5712128586286 -1.32013961870326 0.99419556 5.7424178137502 -1.56489199532838 -1.32777352806586 0.99466462 5.74126793869558 -1.55795995999912 -1.33604614445878 0.99518076 5.73972841962246 -1.54869482255905 -1.34702380098019 0.9958725 5.73817159754851 -1.53935929011564 -1.3579023644969 0.99657251 5.73659755047375 -1.52996511366944 -1.36866968800832 0.9972808 5.73500644939818 -1.52050156321995 -1.37934030851515 0.99799737 5.73420762336023 -1.51576058099476 -1.38464846076727 0.99835742 5.73340523832212 -1.51100518176889 -1.3899357550184 0.99871926 5.73239791427428 -1.50504856248597 -1.39651226733077 0.99917376 5.73158720623577 -1.50026200825862 -1.40174848357948 0.99953973 5.73097645620676 -1.4966677890879 -1.40565261576491 0.99981554 5.73056810418737 -1.49426433297374 -1.40825210888838 1 -5.19407969370554 -1.27869059673454 1.41444127018235 1 5.21012167746749 -1.34386529783017 1.3655932408622 0.99204003 5.23032429242706 -1.42846529984846 1.29384455345432 0.98224314 5.25344150952507 -1.52887885861785 1.1931293976706 0.9713577 5.27771454467798 -1.63837764681876 1.05644642017851 0.9603362 5.29250296738039 -1.70673648406563 0.95866579902418 0.95380494 5.30578770401138 -1.76945955204481 0.854912449066161 0.94809009 5.31751119756822 -1.82589693172545 0.7456210863351 0.94319164 5.32762272604849 -1.87544014507862 0.631310767235651 0.93910961 5.33820234955099 -1.92811588758059 0.482779432760792 0.93502757 5.34517421188214 -1.9635686822645 0.34369151960447 0.93257835 5.34935494208071 -1.98520165429201 0.217024751468122 0.93135374 5.35149017718213 -1.99650172882874 0.104739860464876 0.93099656 5.35227443121938 -2.00076024403101 0.040279805563188 0.93099656 5.35262243123591 -2.0028086251283 -0.0243614152071051 0.93120066 5.35253477723175 -2.00264462312051 -0.089076763480919 0.93160886 5.35201263720695 -2.00027193400781 -0.153760537333233 0.93222117 5.35105775116159 -1.99570204179076 -0.218306658569009 0.93303758 5.34967241709579 -1.98895220847016 -0.282611458983323 0.93405809 5.34785949000968 -1.98004721104719 -0.346571945141283 0.9352827 5.34562236790343 -1.9690172405233 -0.41008854454816 0.93671141 5.34296498777721 -1.95589954790024 -0.473063329339301 0.93834422 5.33989180163124 -1.94073625418002 -0.535402701310262 0.94018114 5.33640777546576 -1.92357592336495 -0.597015559126716 0.94222216 5.33251836228102 -1.90447130445753 -0.657815905154577 0.94446728 5.32822949507731 -1.88348083546054 -0.717720944829914 0.9469165 5.32354755785493 -1.8606662223769 -0.776653609089065 0.94956983 5.31911058364418 -1.83915952235539 -0.827323765635768 0.95207008 5.31506929545223 -1.81966567842948 -0.870067329945979 0.95434071 5.30944184418494 -1.79261488514463 -0.92620826441253 0.95750429 5.30456715995341 -1.76933093303871 -0.970881878524413 0.96024053 5.29981414872765 -1.74678809796798 -1.01129154803377 0.96290661 5.29483666349123 -1.72334173685434 -1.05091019891555 0.96570025 5.29273068239121 -1.71344074438406 -1.06725392169184 0.96688553 5.29058840228945 -1.70339554390694 -1.08346134946165 0.96809207 5.28159466986227 -1.66127514390633 -1.14987502661613 0.97318744 5.27271535644053 -1.62021395495603 -1.20830349939133 0.97823179 5.26298933597857 -1.57590644185154 -1.26577623112114 0.98378201 5.25291602250011 -1.5308043057093 -1.31924293366067 0.98956356 5.25145727643083 -1.52427387239912 -1.32689569302416 0.99040695 5.24985393235467 -1.51711184505894 -1.33518827141804 0.99133497 5.24770937825281 -1.50754312160445 -1.34618685694044 0.99257872 5.2455427391499 -1.49790224314654 -1.35708440145805 0.99383735 5.24335420104595 -1.48819889268565 -1.36787123797039 0.99511086 5.24114421194098 -1.47842454522139 -1.37855880347803 0.99639925 5.24003556688832 -1.47352904298887 -1.38387372573047 0.99704664 5.23892255883546 -1.46861934075567 -1.38916670698187 0.99769721 5.23752610776913 -1.46246954546357 -1.39574973929455 0.99851441 5.23640287171578 -1.45752852122889 -1.40098993654345 0.99917243 5.2355570416756 -1.4538170510526 -1.40489815772908 0.99966833 5.23499170464875 -1.45133621893477 -1.40749950885264 1 -4.93755719352137 -1.24296438103764 1.41444127418235 1 4.95475587233827 -1.30899047317371 1.36659835290994 0.9902756 4.97650882237147 -1.39476358724771 1.29609309056112 0.97830711 5.0015338795601 -1.49668095308853 1.1967759468438 0.96500879 5.02797569381602 -1.6080358703776 1.06148391441778 0.95154424 5.04416398258492 -1.67774345268853 0.96437874678553 0.94356525 5.05876598527848 -1.74182056673203 0.861120858761044 0.93658363 5.07170541889307 -1.79958955047591 0.752144589424949 0.93059939 5.08291460342548 -1.85041506989 0.637973539242116 0.92561252 5.09470346898542 -1.90461232046423 0.489375527454089 0.92062565 5.10254012535764 -1.94126355620507 0.350040847336047 0.91763352 5.10730434758393 -1.96381715027631 0.223005990042216 0.91613746 5.10980754470282 -1.97579954984544 0.110289214018456 0.91570111 5.11076099374811 -1.98040988806442 0.045556699423827 0.91570111 5.11123697477072 -1.98277090117656 -0.0193770502903605 0.91595045 5.11123629677069 -1.98287952718172 -0.084402070348883 0.91644914 5.11076054474809 -1.98073905508005 -0.149409565626573 0.91719717 5.10981207470304 -1.97636074487209 -0.214290493488252 0.91819455 5.10839400063568 -1.96976203355867 -0.278938108578849 0.91944126 5.10651018554621 -1.96096804714098 -0.343246522153334 0.92093733 5.10416522443483 -1.95000970862049 -0.407113204556839 0.92268273 5.1013644263018 -1.936925143999 -0.470437501334581 0.92467748 5.0981137931474 -1.92175771227859 -0.533123070931986 0.92692157 5.09441999697195 -1.90455732146161 -0.595076341214608 0.929415 5.09029035177581 -1.88537839155066 -0.656208864168247 0.93215778 5.08573278655933 -1.8642811015486 -0.716435700888868 0.93514991 5.08075581732294 -1.84132919245844 -0.775677685482711 0.93839137 5.0760388970989 -1.81967587642996 -0.826610644901897 0.94144583 5.07174367489489 -1.80003906549726 -0.869571245322416 0.94421978 5.06576737961103 -1.7727879092029 -0.925972142881315 0.9480846 5.06059338536528 -1.7493212240883 -0.970848213042814 0.95142736 5.0555515041258 -1.72659094400867 -1.0114416440409 0.95468441 5.0502755238752 -1.70294176588539 -1.05123812293113 0.9580973 5.04804518876927 -1.69295749541116 -1.06764787271055 0.95954531 5.04577728266155 -1.68282711693 -1.08391972748342 0.9610193 5.03627105421003 -1.64037830791379 -1.15053302664738 0.96724412 5.02690026276494 -1.59897987394747 -1.20913827743098 0.9734066 5.01665441127829 -1.55428472682456 -1.26679187216938 0.98018709 5.00606418177528 -1.50875820966217 -1.32043677871738 0.9872502 5.00453322370256 -1.50217270534937 -1.32810603708165 0.98828053 5.00285108262266 -1.49495005800631 -1.33641631947637 0.98941426 5.00060225151585 -1.48530221754807 -1.34743564299976 0.9909337 4.99833137240799 -1.47558161908636 -1.3583529685183 0.99247132 4.99603868129909 -1.46579690362161 -1.3691598760316 0.99402712 4.99372474918919 -1.45594068115347 -1.37986624954013 0.9956011 4.99256444113408 -1.45100475091902 -1.38518972179298 0.99639199 4.99139988107876 -1.44605479268391 -1.39049071604476 0.99718677 4.98993919700938 -1.43985460938942 -1.3970834743579 0.99818512 4.9887646459536 -1.43487339215283 -1.40233084460714 0.99898899 4.98788037491159 -1.43113112097508 -1.40624500079305 0.99959482 4.98728944588353 -1.42863017185629 -1.40884987791678 1 -4.68255544940944 -1.20045432001852 1.41444127818235 1 4.69999955923799 -1.26728057219259 1.36762374395864 0.98851117 4.72215832529047 -1.35418579132037 1.29839987767068 0.97437108 4.74778861150785 -1.45760112323234 1.20054175002267 0.95865987 4.77504472680244 -1.57087148861239 1.06672530266673 0.94275226 4.79181575759903 -1.64199644699064 0.97035399519934 0.93332553 4.80700844932064 -1.70752262810297 0.86764827249108 0.92507715 4.8205304789629 -1.76674285191578 0.759039660942448 0.9180071 4.83229936652189 -1.81899269639751 0.645054390738438 0.91211539 4.84474624711309 -1.87491501505368 0.496437647089522 0.90622369 4.85309924150983 -1.91297179186128 0.35688841869129 0.90268866 4.85825338875464 -1.93664531098571 0.229504898400897 0.90092115 4.86104270888713 -1.94949388859599 0.116366332727104 0.90040563 4.86214359293942 -1.95456349783678 0.0513653940697252 0.90040563 4.86275079696826 -1.95734667596897 -0.0138583065882342 0.90070021 4.8628653219737 -1.95783934999238 -0.0791916973514036 0.90128938 4.86248912995583 -1.95604424490711 -0.144522692994459 0.90217314 4.86162513591479 -1.9519722647137 -0.209739086912072 0.90335148 4.86027719585077 -1.94564092741298 -0.274730850109015 0.90482441 4.85845008776398 -1.93707563600615 -0.339388998440112 0.90659192 4.85614948565471 -1.92630800749472 -0.403607846870343 0.90865402 4.85338193552326 -1.91337703188053 -0.46728383057479 0.9110107 4.85015482236998 -1.89832731916571 -0.530317690328738 0.91366197 4.84647633819526 -1.88121015735268 -0.592613229867617 0.91660782 4.84235544099953 -1.86208169044413 -0.654079412837104 0.91984826 4.83780181778325 -1.84100390344299 -0.714629043453057 0.92338328 4.8328258355469 -1.81804265435239 -0.774180765781612 0.92721289 4.82810830532283 -1.79635610132233 -0.825376473253277 0.93082156 4.82381285911881 -1.77667459038751 -0.868553670314084 0.93409882 4.81784042083513 -1.74935569008993 -0.925212942505255 0.93866489 4.81267188858964 -1.72581550697183 -0.97028979140629 0.94261417 4.80763776635053 -1.70299977888815 -1.01106520702302 0.9464622 4.80237352310049 -1.67925091476013 -1.0510374459216 0.95049433 4.80015004899488 -1.66922669628401 -1.0675121547041 0.95220507 4.79788993388753 -1.65905468080087 -1.08384731647998 0.9539465 4.78843119943827 -1.61646038477774 -1.15065425965314 0.96130078 4.77912066199604 -1.57489561180352 -1.20943067144487 0.96858141 4.76895841451336 -1.52999143767069 -1.26725924619158 0.97659217 4.75847544201544 -1.48421762849655 -1.32107647874776 0.98493683 4.75696262494359 -1.47760295918237 -1.32876130211277 0.98615411 4.75530097386467 -1.47034802783778 -1.33708826950828 0.98749355 4.75308063975921 -1.46065894937757 -1.34812695703259 0.98928868 4.75083962065276 -1.45089665391389 -1.35906269655201 0.99110529 4.74857818854535 -1.44106874344709 -1.3698883160662 0.99294338 4.746297010437 -1.43116899297688 -1.38061215057556 0.99480295 4.74515360038269 -1.42621183874142 -1.38594349582878 0.99573734 4.7440063043282 -1.42124086150532 -1.39125183008091 0.99667633 4.74256771425987 -1.41501437720957 -1.39785347439447 0.99785582 4.74141127220494 -1.41001228197199 -1.40310735064402 0.99880555 4.7405408291636 -1.40625371779346 -1.40702694283019 0.9995213 4.73995924213597 -1.40374233467418 -1.40963501395407 1 -4.42851606234322 -1.1510048706698 1.41444128418235 1 4.44528673013978 -1.2185813188795 1.36867207500843 0.98674274 4.4666840091561 -1.30657662705906 1.30077112078331 0.97042611 4.49157290233825 -1.41147985404169 1.20443765820772 0.95229652 4.51822253560405 -1.52671827851522 1.07218729592616 0.93394032 4.5347087123871 -1.59932525996387 0.976612153496586 0.92306256 4.54971419209982 -1.66639227614938 0.874519004537422 0.91354453 4.56313595373732 -1.7271812330367 0.766333922068906 0.90538622 4.57488129729519 -1.7809966285928 0.652583653876059 0.89858762 4.58738588288913 -1.83884865134062 0.503998469358642 0.89178903 4.59587550029236 -1.87852094822495 0.364267820831792 0.88770987 4.60120988154573 -1.90351779041224 0.236554828105751 0.88567029 4.6041987426877 -1.91742107107261 0.123003570292356 0.88507541 4.60542532574596 -1.92306033634046 0.0577374724123827 0.88507541 4.60616976478131 -1.92637836649806 -0.00777454124927088 0.88541534 4.60643319679383 -1.92736986254515 -0.0734160890270769 0.8860952 4.6062178657836 -1.92603679848183 -0.139071574155545 0.88711499 4.60552710475079 -1.9223895623086 -0.204625401389185 0.88847471 4.60436531669561 -1.91644563402628 -0.269964025352603 0.89017436 4.60273795261831 -1.90823059763609 -0.334975140890465 0.89221394 4.60065147951921 -1.89777670713955 -0.399549684117591 0.89459345 4.59811334439865 -1.88512378253857 -0.463580972698914 0.89731288 4.59513193225705 -1.87031767383532 -0.526966633599571 0.90037225 4.59171652109482 -1.8534110620323 -0.58960767382486 0.90377155 4.58787723291247 -1.83446184913226 -0.651410313840328 0.90751078 4.58362497971049 -1.81353387113823 -0.712284974611719 0.91158993 4.57897140548946 -1.79069516105345 -0.77214800564506 0.91600902 4.5745551722797 -1.76909213302736 -0.823607349979248 0.92017316 4.57053258908864 -1.74946703009522 -0.867001455310357 0.92395488 4.5649419598231 -1.7222166138009 -0.923918385833767 0.92922379 4.5601038885933 -1.69871501568463 -0.969194982214289 0.93378097 4.55539244236952 -1.67591840360185 -1.0101511619796 0.93822131 4.55046786213562 -1.65217546447412 -1.05029759888646 0.9428741 4.5483895310369 -1.6421556029982 -1.06683638167201 0.94484817 4.54627754693659 -1.63198644551519 -1.08323390445085 0.94685765 4.53745264651743 -1.58943306649402 -1.15022904863295 0.95534394 4.52877560210529 -1.54787576452015 -1.20917141443256 0.96374525 4.51931897865612 -1.502943814386 -1.26716942518732 0.97298908 4.50958135719361 -1.45710204020863 -1.32115336075141 0.98261821 4.50817862812699 -1.45048435589431 -1.32885282811712 0.98402286 4.50663838305383 -1.44322573054954 -1.33719547751337 0.98556848 4.50458129495612 -1.43353359908919 -1.34825217003854 0.98763992 4.50250598985755 -1.42376791762534 -1.35920496555877 0.98973616 4.50041275775813 -1.41393523815832 -1.37004794607378 0.99185718 4.49830232765789 -1.40403054568787 -1.3807878925839 0.99400298 4.49724493160766 -1.39907147645233 -1.38612643483747 0.9950812 4.49618421755728 -1.39409881621614 -1.39144143108992 0.99616472 4.49485458849413 -1.3878702289203 -1.39805111540386 0.99752577 4.49378604144337 -1.38286665368264 -1.40331082165368 0.99862169 4.49298192740518 -1.37910635850403 -1.40723534684009 0.99944761 4.49244474837966 -1.37659426138472 -1.4098462769641 1 -4.05926400180469 -1.04819425778655 1.41444129618235 1 4.07304843745941 -1.11721201606472 1.37027526008458 0.98409609 4.09074662930003 -1.20730415534387 1.30442085995666 0.96452205 4.1114987382857 -1.31508945246339 1.2104798314947 0.94277311 4.13393725835147 -1.43417631911972 1.08073100533197 0.92075231 4.14792702801595 -1.50965545170478 0.986458826064278 0.90770295 4.16074605862482 -1.57973388703333 0.885391702393847 0.89628476 4.17229183817322 -1.64362590206804 0.777942178050269 0.88649774 4.18247109165671 -1.70058674877353 0.664633341228388 0.87834189 4.19340524217605 -1.76238833370895 0.516186617837548 0.87018604 4.20093972753392 -1.80548632275599 0.376243051600585 0.86529253 4.20578066876385 -1.83339447308156 0.248069035942646 0.86284577 4.20860410089796 -1.84971423785671 0.133913116120531 0.86213213 4.20981206795533 -1.85669099818809 0.0682537742318802 0.86213213 4.21061371499341 -1.86129959840698 0.00231063799974941 0.86253993 4.21101021501224 -1.86353243851304 -0.0637945574500787 0.86335551 4.21100388101194 -1.86338997050627 -0.129940520481843 0.86457889 4.21059815499267 -1.86088146238712 -0.196006135779791 0.86621006 4.20979757895465 -1.85602405115641 -0.261872130378258 0.86824902 4.20860777089813 -1.84884336181534 -0.327420776941652 0.87069578 4.20703537582345 -1.8393724273655 -0.39253750827453 0.87355033 4.20508803173095 -1.82765217980882 -0.457110562691586 0.87681267 4.20277430662106 -1.81373025414756 -0.521032517297715 0.8804828 4.20010365249421 -1.79766137338433 -0.584199852058003 0.88456072 4.19708633535089 -1.779506063522 -0.646514378247784 0.88904644 4.19373337619164 -1.75933094656373 -0.707882704402623 0.89393995 4.19005647801699 -1.73720734951292 -0.768217546228374 0.89924126 4.18656265385105 -1.71619716351499 -0.8200756282015 0.90423672 4.18337909169984 -1.69705938760599 -0.863797044508156 0.90877341 4.17895811448985 -1.67045131934218 -0.921101075919952 0.91509419 4.17513310730817 -1.64744858224961 -0.966676920134688 0.92056116 4.17140990813133 -1.62508964018761 -1.00790332887284 0.92588795 4.16752164394665 -1.60176637607982 -1.04830947279203 0.93146961 4.16588278986881 -1.59192474361236 -1.06494332058209 0.93383778 4.16421821778974 -1.58193188813773 -1.08143322636532 0.93624843 4.15727980546019 -1.54015681415352 -1.14870359856049 0.94642891 4.15047089313678 -1.49927220421161 -1.20788785037159 0.95650744 4.14306902678521 -1.45498177510792 -1.26613218713805 0.96759669 4.13546992842427 -1.40970748095751 -1.32035783271363 0.97914815 4.13437825437242 -1.40318248064759 -1.32807795508032 0.98083322 4.13318016731551 -1.3960244423076 -1.33644269147762 0.9826874 4.13158128023957 -1.38646926085375 -1.34752446400397 0.98517239 4.12996941416301 -1.3768402203964 -1.35850091652533 0.98768711 4.12834484308585 -1.36714229893577 -1.36936801904149 0.99023156 4.12670825900812 -1.35737246047173 -1.38013022255267 0.99280575 4.12588879296919 -1.35248160623943 -1.3854786048067 0.99409922 4.12506709093016 -1.3475775450065 -1.39080264005958 0.99539906 4.12403754888126 -1.34143472271473 -1.39742319837404 0.99703182 4.12321054184198 -1.33650013648035 -1.40269070562423 0.99834653 4.12258840581243 -1.33279067030416 -1.40662192381095 0.99933734 4.1221729047927 -1.33031313618648 -1.40923667193515 1 -3.70730817208768 -0.908164617365503 1.41444131118235 1 3.71562704148281 -0.979147440957006 1.3718862401611 0.98144944 3.72637415499327 -1.07207267092072 1.30811477813212 0.95861798 3.73907751659664 -1.1837350512244 1.2166464117876 0.9332497 3.75295209525565 -1.30799431712639 1.08952866274983 0.90756431 3.76167288466987 -1.38729240489285 0.99665479046856 0.89234334 3.76972098205213 -1.4613922194124 0.896707239121306 0.87902499 3.77702407239901 -1.52946051764547 0.790077942726687 0.86760926 3.78351557870734 -1.59070137055426 0.677280305059087 0.85809615 3.79055753904181 -1.65794993174839 0.529032479267693 0.84858305 3.79549088527614 -1.70589103302547 0.388899747761746 0.84287518 3.7987387354304 -1.73801890055146 0.260259371011656 0.84002125 3.80071318052418 -1.75793406249738 0.145474057349647 0.83918885 3.80159212656593 -1.7669307739247 0.0794022457014041 0.83918885 3.8022210425958 -1.77351979623767 0.0130044533176784 0.83966451 3.80260078361384 -1.77769057143577 -0.0535916965854689 0.84061582 3.80273304462012 -1.77944144751893 -0.120258627321978 0.84204279 3.80262035061477 -1.77878004548751 -0.186869098405805 0.84394541 3.80226602959794 -1.7757227103423 -0.253297481320984 0.84632368 3.80167419056983 -1.77029471408448 -0.319420015491636 0.84917762 3.80084968553066 -1.76252955171566 -0.385116027532029 0.8525072 3.79979807348072 -1.75246900123781 -0.450268118436587 0.85631245 3.79852557342028 -1.74016228065327 -0.514763291839943 0.86059334 3.79703901734967 -1.72566598996473 -0.578493043346944 0.8653499 3.79534579526924 -1.70904316317519 -0.641354370982697 0.87058211 3.79345380417938 -1.69036311228794 -0.703249746072569 0.87628997 3.79137138608047 -1.66970038730651 -0.76408798928223 0.88247349 3.78938763098625 -1.64993866736788 -0.816371106085545 0.88830027 3.78757792090029 -1.63185232550882 -0.86044116622876 0.89359193 3.78506572078097 -1.60664086031134 -0.91815794519016 0.90096459 3.78289117667768 -1.58475261627171 -0.964052657240042 0.90734135 3.78077440857714 -1.5634018682576 -1.00556662276185 0.91355459 3.7785649394722 -1.54107076419693 -1.04624887269415 0.92006513 3.77763484442802 -1.53164617874929 -1.06298406648903 0.9228274 3.77669051738317 -1.52206876229438 -1.07957248027694 0.92563921 3.77276422119668 -1.48206497739431 -1.14714010248623 0.93751388 3.76891685201394 -1.44276785152779 -1.20658558330974 0.94926962 3.76474386581573 -1.4000625984994 -1.2650952810888 0.96220429 3.76047176361282 -1.35627975741983 -1.3195802786767 0.97567809 3.75985982258375 -1.34998105112066 -1.32732340404448 0.97764358 3.75918856455187 -1.34306943279237 -1.33571278044295 0.97980632 3.75829345350935 -1.33384548135426 -1.34682299297066 0.98270485 3.75739172846652 -1.32454755491263 -1.35782645549329 0.98563806 3.75648356842339 -1.31517904546765 -1.36872103501076 0.98860595 3.75556944937997 -1.30573914301928 -1.37950885552315 0.99160852 3.75511202535824 -1.30101390479484 -1.38486874677773 0.99311724 3.75465354033647 -1.2962758575698 -1.39020349203112 0.99463339 3.75407935930919 -1.29034054328788 -1.39683700834619 0.99653787 3.7536183432873 -1.28557242506141 -1.40211399059684 0.99807137 3.75327165127083 -1.28198690289111 -1.40605315778394 0.99922706 3.75304017125983 -1.27959269377739 -1.40867256290835 1 -3.48843621269182 -0.784389029886478 1.41444132518235 1 3.49152880483871 -0.85725510046743 1.37294927221159 0.97968501 3.4955392700292 -0.95284821791786 1.31056668024857 0.95468194 3.50030282525546 -1.06810277273216 1.22076750698334 0.92690076 3.50553653050404 -1.19708506985849 1.09544913603104 0.89877231 3.50884235966106 -1.27981521578796 1.00354365866576 0.8821036 3.51190558180656 -1.35751790847864 0.904378223255659 0.86751847 3.51469658093912 -1.4293293938895 0.798326705398482 0.85501694 3.51718787105745 -1.49441944598111 0.685892268638133 0.844599 3.51990347418644 -1.56659460640925 0.537789175473614 0.83418105 3.52181965627745 -1.61897218089705 0.397522763111317 0.82793029 3.52309365133796 -1.6550173366091 0.268548565145372 0.8248049 3.52388041637533 -1.67831851071585 0.153311232851892 0.82389333 3.5242356423922 -1.68923300223426 0.0869427620495594 0.82389333 3.52449620140458 -1.69771833163729 0.0202175193602806 0.82441423 3.52466244941248 -1.70376154292433 -0.04673261514968 0.82545602 3.52473510241593 -1.70735918709521 -0.113775507074046 0.82701872 3.52471522141498 -1.70851742415022 -0.180779453796563 0.82910231 3.52460420540971 -1.7072517430901 -0.247614196481043 0.83170679 3.52440378140019 -1.70358689091603 -0.314151569051398 0.83483217 3.52411598438652 -1.6975564186296 -0.380266449991686 0.83847846 3.52374314136881 -1.68920244223281 -0.445837333076136 0.84264563 3.52328784934719 -1.67857505172803 -0.510747180339188 0.84733371 3.52275295532178 -1.66573192711802 -0.574883880715518 0.85254268 3.52214152729274 -1.65073763840583 -0.638140974530068 0.85827255 3.52145683626022 -1.63366316059483 -0.700417976338067 0.86452332 3.52070232322438 -1.61458508468867 -0.761620952325052 0.87129498 3.51998310019022 -1.59619173981504 -0.814212067112996 0.87767597 3.51932696315905 -1.57926692101115 -0.858534922708219 0.88347095 3.51841682411582 -1.55560112588709 -0.916552300923896 0.89154486 3.51762934707842 -1.53495665890653 -0.96267949514482 0.89852814 3.51686322804203 -1.51474151794636 -1.00440304470658 0.90533236 3.51606422800408 -1.49353631693917 -1.04528666964845 0.91246214 3.51572821698812 -1.48458322751392 -1.06209630244687 0.91548714 3.51538721197192 -1.47547637308136 -1.07875716223821 0.9185664 3.5139719419047 -1.43745530727546 -1.14654899345815 0.93157052 3.51258749183895 -1.39995357849422 -1.20619192529104 0.94444441 3.51108905776777 -1.35906407255208 -1.26490191507961 0.95860936 3.50955879769509 -1.31701759555498 -1.31958203467678 0.97336472 3.5093400266847 -1.31097678526805 -1.32734357804543 0.97551715 3.50910014667331 -1.30434623895312 -1.33575273744485 0.97788561 3.50878044865812 -1.29549859353288 -1.34688635297367 0.98105982 3.50845857264283 -1.28657699410913 -1.35791225949737 0.98427202 3.50813458762744 -1.27758376968197 -1.36882959301591 0.98752221 3.50780868361196 -1.26851980225145 -1.37963892852933 0.99081037 3.50764567660422 -1.26398280603596 -1.38500870278438 0.99246259 3.50748234159646 -1.25943326381987 -1.39035279603821 0.99412295 3.50727786158675 -1.25373351854914 -1.39699771035383 0.99620857 3.50711374057896 -1.24915422033164 -1.40228321560488 0.99788792 3.5069903505731 -1.24570970516803 -1.40622933779231 0.99915354 3.50690798156918 -1.2434099750588 -1.40885295291692 1 -3.38400016073138 -0.713493162199105 1.41444133318236 1 3.38400016073138 -0.787478258183208 1.37347363923649 0.97880279 3.38400016073138 -0.88464457074836 1.31178054030623 0.95271392 3.38400016073138 -1.00200193759254 1.22281625408065 0.92372629 3.38400016073138 -1.13373159184936 1.09840456017141 0.89437631 3.38400016073138 -1.2184464518731 1.00698990682945 0.87698373 3.38400016073138 -1.29823026166263 0.908222147198235 0.86176522 3.38400016073138 -1.37220464217622 0.802464740075028 0.84872078 3.38400016073138 -1.43952240337364 0.690214486283427 0.83785042 3.38400016073138 -1.51455640193757 0.542181971062261 0.82698006 3.38400016073138 -1.56952182754828 0.401841201056432 0.82045784 3.38400016073138 -1.60786451636946 0.272688170201992 0.81719673 3.38400016073138 -1.63316315157108 0.157210365147091 0.81624557 3.38400016073138 -1.6452125561434 0.0906842718472716 0.81624557 3.38400016073138 -1.65482373459991 0.0237851409297335 0.81678909 3.38400016073138 -1.66198238493992 -0.0433529107991527 0.81787613 3.38400016073138 -1.66668402416324 -0.110595349502997 0.81950668 3.38400016073138 -1.66893394927011 -0.177808116905432 0.82168075 3.38400016073138 -1.66874710626123 -0.244858509520155 0.82439834 3.38400016073138 -1.66614786813777 -0.311616032220967 0.82765945 3.38400016073138 -1.66116971590132 -0.377953215241814 0.83146408 3.38400016073138 -1.65385484755389 -0.443746384066821 0.83581223 3.38400016073138 -1.64425370809786 -0.50887637308033 0.84070389 3.38400016073138 -1.632424451536 -0.573229175216924 0.84613907 3.38400016073138 -1.61843234787141 -0.636696521061461 0.85211777 3.38400016073138 -1.6023491481075 -0.699176382609095 0.85863999 3.38400016073138 -1.58425240824795 -0.760573398285296 0.86570572 3.38400016073138 -1.56670913441469 -0.813328447431027 0.87236382 3.38400016073138 -1.55050755864515 -0.857785969572645 0.87841046 3.38400016073138 -1.52780447556682 -0.915964104105958 0.88683499 3.38400016073138 -1.50793657162314 -0.962215787722795 0.89412153 3.38400016073138 -1.48843240169674 -1.00405158568989 0.90122124 3.38400016073138 -1.4679336097231 -1.04504317063688 0.90866064 3.38400016073138 -1.45927594131188 -1.06189294143721 0.91181701 3.38400016073138 -1.45046407489334 -1.07859291123041 0.91503 3.38400016073138 -1.41368092814624 -1.14650811645621 0.92859884 3.38400016073138 -1.37730356441841 -1.20625992529427 0.94203181 3.38400016073138 -1.33755542153047 -1.26508032208809 0.95681189 3.38400016073138 -1.29660562458546 -1.31986784669036 0.97220803 3.38400016073138 -1.29072660530622 -1.32763997305951 0.97445394 3.38400016073138 -1.28427243299966 -1.33606052045947 0.97692525 3.38400016073138 -1.27566061559062 -1.34720782098893 0.98023731 3.38400016073138 -1.26697488117808 -1.35824693051326 0.98358901 3.38400016073138 -1.2582170277621 -1.36917762203244 0.98698033 3.38400016073138 -1.24938884934278 -1.37999969754647 0.99041129 3.38400016073138 -1.24496982213289 -1.3853753988018 0.99213526 3.38400016073138 -1.24053837692241 -1.3907251520559 0.99386773 3.38400016073138 -1.23498619765869 -1.39737699637184 0.99604392 3.38400016073138 -1.23052515244681 -1.40266774962314 0.9977962 3.38400016073138 -1.2271690202874 -1.40661808881077 0.99911678 3.38400016073138 -1.22492845218098 -1.40924430093551 1 - -0 4 -0.25085093 1 -0.37570871 1 -0.50000003 1 -0.50056649 1 -0.62542486 1 -0.75028323 1 -0.87514161 1 -1 4 - -0 5 -0.11538462 1 -0.15384615 1 -0.19230769 1 -0.23076923 1 -0.26923077 1 -0.30769231 1 -0.34615385 1 -0.38461538 1 -0.46153846 1 -0.48076923 1 -0.5 1 -0.51923077 1 -0.53846154 1 -0.55769231 1 -0.57692308 1 -0.59615385 1 -0.61538462 1 -0.63461538 1 -0.65384615 1 -0.67307692 1 -0.69230769 1 -0.71153846 1 -0.73076923 1 -0.75 1 -0.76923077 1 -0.78846154 1 -0.79807692 1 -0.80769231 1 -0.84615385 1 -0.85096154 1 -0.85576923 1 -0.86538462 1 -0.87019231 1 -0.875 1 -0.95552885 1 -0.95673077 1 -0.96394231 1 -0.96634615 1 -0.96875 1 -0.97115385 1 -0.98317308 1 -0.98557692 1 -0.98798077 1 -0.99038462 1 -0.99278846 1 -0.99519231 1 -1 5 - -9 1 1 0 0 3 2 4 4 2 3 2.8066391593082 -0.164126217435577 1.41444139518236 1 2.8066391643082 -0.0877860847096151 1.45778391524102 0.93480793 2.8066391753082 0.0877860075896114 1.45778393424102 0.93480793 2.8066391803082 0.164126150055573 1.41444143218236 1 -2.9678394079648 -0.376407354178389 1.41444137118236 1 2.96457251080963 -0.203037540443765 1.51656393003292 0.92694051 2.96457253380963 0.203037363253757 1.51656397603292 0.92694051 2.9678394499648 0.376407198668382 1.41444145618236 1 -3.16491845932555 -0.564770695925167 1.41444135018236 1 3.15608173590583 -0.311965934527586 1.59196289061418 0.91907308 3.15608175590583 0.311965655927573 1.59196295561418 0.91907308 3.16491849232555 0.564770457305156 1.41444147718236 1 -3.38400016073138 -0.713493162199105 1.41444133318236 1 3.38400016073138 -0.391510587305754 1.63716903376135 0.91120566 3.38400016073138 0.391510247845738 1.63716912176136 0.91120566 3.38400016073138 0.713492872779091 1.41444149318236 1 - -0 4 -1 4 - -0 3 -0.83039848 1 -1.66079697 3 - -9 1 1 0 0 3 3 8 7 4 5 2.42419264614297 1.16954252255029 0.134080451298479 1 2.39440716772823 1.13307915281837 0.200627508239295 1 2.33691369499744 1.05368493204735 0.326976423470546 1 2.23023667693055 0.869026571046545 0.552693459381529 1 2.11247152233701 0.589697519729128 0.784250764499911 1 2.03487925665157 0.314494438727684 0.915535019515578 1 2.00023808900621 0.163957938237584 0.967686749742652 1 -2.39137571758425 1.16117648415292 0.143847579992393 1 2.362632197219 1.1244056484064 0.208382305257628 0.99998147 2.30707680458026 1.04492423163124 0.331118886747302 0.99995058 2.20402069668536 0.860774663704601 0.550343860959929 0.99991351 2.09020096527921 0.583816953169816 0.775404684559744 0.99991351 2.01502798070869 0.312315915684209 0.903275538513284 0.99996293 1.98138389911068 0.164009708860043 0.954164541080382 1 -2.35893674104348 1.15211690472261 0.153141533493832 1 2.33128359173002 1.11490987995538 0.215538829667545 0.99996293 2.27765880618298 1.03527498417292 0.334626152813889 0.99990115 2.17792600944593 0.852129688423987 0.547892770913509 0.99982702 2.06751081420149 0.578612322102609 0.767505451784551 0.99982702 1.99489823375258 0.310746458799664 0.891664792141803 0.99992586 1.96265346522103 0.164065779442706 0.940474811450154 1 -2.13069026720235 1.08268322442469 0.215937764566493 1 2.11088363626159 1.04356036356646 0.263737495466858 0.99983099 2.0713555313841 0.9639780893465 0.357091959490957 0.9995493 1.9960271868062 0.788046253840187 0.526665184275253 0.99921127 1.91023285973119 0.537019318997048 0.704831242847686 0.99921127 1.85416461506809 0.296612250308325 0.80450909163213 0.99966197 1.83019018192936 0.16449556496312 0.841823300294459 1 -1.94865672055622 0.99703396760657 0.252195786988657 1 1.93516982091563 0.958729570227209 0.288670095331093 0.99971757 1.90713580358409 0.882309640247457 0.361184548155345 0.99924687 1.85084826491057 0.718961191648823 0.495904472044197 0.99868201 1.78311984069364 0.493733176421066 0.641232867536925 0.99868201 1.73885954459139 0.28171007658051 0.722056485405841 0.99943515 1.72099233874275 0.165025241888278 0.750811636301638 1 -1.61289343060832 0.773798061943434 0.289276971169918 1 1.60926817743613 0.743218084900963 0.307140681738399 0.99949075 1.59992533399237 0.682674126445279 0.343852614872122 0.998642 1.57632217387128 0.558174349971858 0.415623300931047 0.9976235 1.54208662124518 0.394124630659915 0.497230575347184 0.9976235 1.51952443417353 0.246401605973448 0.542042907525655 0.9989815 1.51191417481207 0.166405119633819 0.556353501425372 1 -1.45916368930655 0.636211413348419 0.290100132939016 1 1.45837822226925 0.611995772288238 0.300875806260833 0.99937734 1.45532690712432 0.563445012512201 0.322941777508911 0.99833957 1.44506266063679 0.464854358879396 0.367008382541962 0.99709425 1.42777067981547 0.337082388840554 0.417907376789534 0.99709425 1.41631445427132 0.225986991713806 0.445699399369585 0.99875468 1.41295836711192 0.167240043453475 0.454273699506842 1 -1.31958584867696 0.472656068989958 0.273205864366582 1 1.31958584767696 0.456316271853859 0.279245331643441 0.99926393 1.31958584567696 0.423380923289514 0.290706520087818 0.99803714 1.31958584167696 0.356597205797458 0.311109890506926 0.99656499 1.31958583767696 0.271740133306963 0.331774567888446 0.99656499 1.31958583567696 0.202819644513416 0.343041058973575 0.99852785 1.31958583467696 0.168219952200019 0.347343163127914 1 - -0 4 -0.08801032 2 -0.62655652 2 -1.16510272 4 - -0 4 -0.16666667 1 -0.33333333 1 -0.66666667 1 -1 4 - -9 0 0 0 0 3 3 6 7 4 4 2.42419264614297 1.16954252255029 0.134080451298479 2.45715001570836 1.13855318407837 0.202974587470775 2.55620528041323 1.04312784054591 0.408207383838809 2.6558100141442 0.940330514783301 0.609091343720285 2.83876589983414 0.743208037040486 0.971420971340018 2.95581815539382 0.607915193964421 1.19587440380098 3.07361414598883 0.46264399884441 1.41444146518236 -2.3646216903135 1.09661578208645 0.26717456517011 2.39925954795871 1.06574094261998 0.328248236720954 2.5037619269223 0.969977747781469 0.509161756533885 2.60845088989476 0.87092846667688 0.687457565192481 2.8000283239942 0.68520205208535 1.01081447201111 2.92144350176111 0.562010166684049 1.2137367306494 3.04134581145617 0.431905249624398 1.41444146218236 -2.25378970704926 0.924892381310029 0.506381998361853 2.29085611680982 0.897547764761229 0.5546487330244 2.40261884511827 0.812655904219082 0.697120418171442 2.51421737241891 0.728509136512326 0.838617183662177 2.72026519720566 0.572009581078996 1.09318660692358 2.85080311140588 0.471443480812363 1.25349298753772 2.97841695946721 0.368662233590516 1.41444145518236 -2.11247152233701 0.589697519729128 0.784250764499911 2.15142654818727 0.572896908651142 0.818721994037206 2.26795240072195 0.523260141993522 0.922316014887658 2.38460040626244 0.476872713840237 1.02573989572003 2.60470216471671 0.3868123460026 1.20430061420121 2.74653018845318 0.328695847952214 1.31192884231327 2.88923258023118 0.268937908253865 1.41444144418236 -2.03487925665157 0.314494438727684 0.915535019515578 2.07374991449783 0.30836161229639 0.944773654634338 2.19074575405483 0.291127093867794 1.03210832002251 2.31024353373067 0.275452141023274 1.11608873601137 2.53605382545609 0.243239750533268 1.25913146880553 2.68305514043827 0.221835933136641 1.3412131157042 2.8335058915843 0.199506324826042 1.41444143618236 -2.00023808900621 0.163957938237584 0.967686749742652 2.03869514383282 0.163852341262568 0.995268115342697 2.15561093238602 0.163589219210071 1.07592134410352 2.27716060215932 0.16348710374522 1.15030196763641 2.5052608889935 0.163496660975674 1.27877215673842 2.6540562100609 0.163708515905737 1.35121889217945 2.8066391803082 0.164126150055573 1.41444143218236 - -0 4 -0.33333333 1 -0.66666667 1 -1 4 - -0 4 -0.20169638 1 -0.60508915 2 -1.3090632 4 - -9 1 1 0 0 3 3 9 11 7 9 2.42419264614297 1.16954252255029 0.134080451298479 1 2.45304868251355 1.17484671580222 0.129592238825301 1 2.50979212820872 1.18865716645818 0.122371261762323 1 2.62000735344367 1.22717357928761 0.113896599719798 1 2.75277233674966 1.29216176737439 0.112514758254164 1 2.90770088310837 1.38561935781338 0.119267929254922 1 3.0618570414304 1.48307220044215 0.128105484034684 1 3.19269105364468 1.55804852000333 0.131934602026557 1 3.30058911276956 1.60855069040205 0.129713091341041 1 3.35591651339747 1.62968577140592 0.126313484549568 1 3.38400016073138 1.63898521684762 0.123909655855393 1 -2.44201782098962 1.15278176875419 0.171342224368319 1 2.47017210232687 1.15850596802608 0.167150602059227 0.99985106 2.52544453995217 1.17340579173378 0.160652740670595 0.99955319 2.63301057706129 1.21327000862723 0.153171215085242 0.99895744 2.76293640923243 1.27920018175875 0.152599805308101 0.99821276 2.91503987445696 1.3733496122306 0.160078945003342 0.99731913 3.06666735165888 1.47159192489686 0.16962659060683 0.99642551 3.19544768177561 1.54761137350759 0.174219059904961 0.99568083 3.30172693282361 1.59938420296667 0.172743652284883 0.99508508 3.35620916541137 1.6214996340171 0.169788979024543 0.99478721 3.38400016073138 1.63108074947217 0.167550811238236 0.99463827 -2.47770388868461 1.11878104013925 0.245583072274569 1 2.50460743996246 1.12489275842954 0.241757385452859 0.99957801 2.55719824346039 1.14116148220226 0.23629921962361 0.99873404 2.65967155732761 1.18296549718784 0.230447917435688 0.99704608 2.78371115221918 1.25095056441696 0.23166107051331 0.99493614 2.92954952014613 1.3474724030015 0.241264817559463 0.99240421 3.07555654008109 1.44813925178292 0.252955231824728 0.98987229 3.20013548599827 1.52609300848552 0.259360789758976 0.98776235 3.30349605990764 1.57932049901369 0.25922423625249 0.98607439 3.35662054043091 1.60240449311013 0.256915844072847 0.98523042 3.38400016073138 1.6120148985666 0.254860654175231 0.98480843 -2.54921889908139 1.0488627058183 0.392933975203361 1 2.57373914124604 1.05587893915156 0.390011798254566 0.9991312 2.62133387550667 1.07453675403775 0.386708913177687 0.9973936 2.71418980891709 1.11943199417016 0.384399157157979 0.99391841 2.82688292526973 1.18981399451313 0.389410462636004 0.98957441 2.96025512260457 1.28824088618816 0.403213774111626 0.98436162 3.09478151499423 1.39077939605847 0.418939525228559 0.97914882 3.21057171549397 1.47069101585407 0.428695680291951 0.97480483 3.30760334110272 1.52602661948237 0.431116543996936 0.97132963 3.35774255948421 1.55076732565749 0.430071773287312 0.96959204 3.38400016073138 1.56068114412837 0.428466449881063 0.96872324 -2.63888055134009 0.957870644016412 0.575002367181146 1 2.66058765737113 0.96572955308969 0.573211488546084 0.99875886 2.7024756133607 0.98605401159505 0.572239190279902 0.99627658 2.78411085423816 1.03280111105542 0.574057660476274 0.99131201 2.88316305294289 1.10363511841985 0.583598682789449 0.9851063 3.00092660253636 1.20095852904247 0.602228292054308 0.97765945 3.12068385322452 1.30194741583918 0.622406131232704 0.97021261 3.2249668381777 1.38100742359433 0.635710196184613 0.9640069 3.31347033838139 1.43642603522657 0.640861284029276 0.95904233 3.35956840957093 1.46169544842681 0.64115821536338 0.95656005 3.38400016073138 1.4717316539035 0.640145033235256 0.95531891 -2.74690315647089 0.842929538817003 0.790092058877357 1 2.76530159934477 0.851328018045909 0.78950240932935 0.99860992 2.80077120302949 0.871888161392464 0.790550180919117 0.99582976 2.86975437730601 0.917903336908067 0.795990721547529 0.99026945 2.95332321927532 0.985391975693605 0.809117865971035 0.98331906 3.05292725200626 1.07606898211053 0.830899400925602 0.97497859 3.15498362385367 1.16928847753822 0.853662880016809 0.96663812 3.2448774021234 1.24229089800565 0.869112553330629 0.95968773 3.3220078717869 1.29389208645657 0.876299048441969 0.95412741 3.36249739871005 1.31755327958042 0.877748565640818 0.95134726 3.38400016073138 1.32719939403859 0.877435319965939 0.94995718 -2.8915047933391 0.682007223913603 1.07235514293413 1 2.90548586700317 0.690575739830586 1.07287849795899 0.9988085 2.93265203929349 0.709714299869619 1.07524771407152 0.99642551 2.9854612928018 0.751360428217704 1.08263592442244 0.99165953 3.04946842384197 0.809542189831189 1.09638490307549 0.98570205 3.12594505847442 0.884696430270824 1.11676749904361 0.97855308 3.20483791722163 0.96041893799745 1.13732113701985 0.9714041 3.27493895655125 1.0195748614272 1.15139523968834 0.96544662 3.33538718842238 1.06189653743738 1.15864461003266 0.96068064 3.36727654093705 1.08128005235804 1.16060272312567 0.95829765 3.38400016073138 1.08978505076201 1.16091398514045 0.95710615 -3.0005989555208 0.552689541261343 1.27896388774752 1 3.01109917801953 0.560832904608132 1.27949441177272 0.99940425 3.03187295800623 0.577635969416235 1.28099172084384 0.99821276 3.07276393094845 0.612913712841838 1.28543220905475 0.99582976 3.12311577434003 0.659409197110255 1.29313543942063 0.99285103 3.1838046392226 0.716612076557246 1.30399829093659 0.98927654 3.24630866519138 0.772866502369187 1.31468619944424 0.98570205 3.30115338479636 0.816907342621015 1.32192124878789 0.98272331 3.34751012699819 0.849187251484228 1.32572670696864 0.98034032 3.37165328114493 0.864127310453843 1.32680122401967 0.97914882 3.38400016073138 0.871243803631858 1.32708980603338 0.97855308 -3.07361414598883 0.46264399884441 1.41444146518236 1 3.081681229372 0.470328686149413 1.41444146618236 1 3.0979158851431 0.485587715914178 1.41444146818236 1 3.13077912070402 0.515655297052311 1.41444147118236 1 3.17258171568954 0.552378065896549 1.41444147518236 1 3.22385433012486 0.595012062451555 1.41444148018236 1 3.27618826361058 0.636158139015889 1.41444148518236 1 3.32064415672213 0.669161107873446 1.41444148818236 1 3.35669135043428 0.694764929029562 1.41444149118236 1 3.3748717582978 0.707296105464761 1.41444149318236 1 3.38400016073138 0.713492872779091 1.41444149318236 1 - -0 4 -0.1623709 1 -0.32474179 1 -0.64948358 1 -0.97422537 1 -1.29896717 1 -1.94845075 4 - -0 4 -0.08333333 1 -0.16666667 1 -0.33333333 1 -0.5 1 -0.66666667 1 -0.83333333 1 -0.91666667 1 -1 4 - -9 1 1 0 0 3 2 5 4 3 3 3.38400016073138 -0.713493162199105 1.41444133318236 1 3.38400016073138 -0.391510587305754 1.63716903376135 0.91120566 3.38400016073138 0.391510247845738 1.63716912176136 0.91120566 3.38400016073138 0.713492872779091 1.41444149318236 1 -3.80221815059566 -0.997398256103873 1.41444130118235 1 3.7881361569268 -0.555027453182388 1.7151552854655 0.89851271 3.7881361709268 0.555027057862369 1.71515541046551 0.89851271 3.80221817559566 0.997397928223857 1.41444152518236 1 -4.31570353198491 -1.14106831119783 1.41444128518235 1 4.30098725628592 -0.644354361975188 1.79784072039285 0.88543554 4.30098725728592 0.64435396878517 1.79784086539285 0.88543554 4.31570353398491 1.14106800419782 1.41444154118237 1 -4.84213726998917 -1.22700175927945 1.41444127518235 1 4.84126886794792 -0.703853656261253 1.88448450850821 0.87235837 4.84126886694792 0.703853249831234 1.88448466750821 0.87235837 4.84213726798917 1.22700145827944 1.41444155118237 1 -4.85761506672432 -1.22947768939705 1.41444127518235 1 4.85761510272433 -0.704996763805548 1.88554606055863 0.87197414 4.85761510272433 0.704996357555529 1.88554621955864 0.87197414 4.85761506672432 1.22947738839704 1.41444155118237 1 - -0 4 -0.97061845 1 -1 4 - -0 3 -0.77893996 1 -1.55787992 3 - -9 1 1 0 0 3 2 4 4 2 3 6.35000030160882 1.34685307097209 1.41444156518237 1 6.35000030160882 0.790078313186704 1.97500018280747 0.85235402 6.35000030160882 -0.790078761286726 1.97500000480746 0.85235402 6.35000030160882 -1.3468533929721 1.41444126218235 1 -5.85990504933054 1.33789804554674 1.41444156418237 1 5.85232922597071 0.778849161293348 1.94472809936962 0.85889406 5.85232922397071 -0.778849583033368 1.94472792436962 0.85889406 5.85990504633054 -1.33789834854676 1.41444126318235 1 -5.35344570327501 1.30879371316436 1.41444156018237 1 5.3459271439179 0.756148567085128 1.91491354395351 0.8654341 5.3459271469179 -0.756148974995147 1.9149133739535 0.8654341 5.35344570927501 -1.30879400916438 1.41444126618235 1 -4.85761506672432 1.22947738839704 1.41444155118237 1 4.85761510272433 0.704996357555529 1.88554621955864 0.87197414 4.85761510272433 -0.704996763805548 1.88554606055863 0.87197414 4.85761506672432 -1.22947768939705 1.41444127518235 1 - -0 4 -1 4 - -0 3 -1.01514221 1 -2.03028442 3 - -9 1 1 0 0 4 3 19 11 16 9 6.35000030160882 1.34685307097209 1.41444156518237 1 6.0964431785655 1.34222007275203 1.41444156418237 1 5.71012109321619 1.32720338603878 1.41444156218237 1 5.19407965870553 1.27869029573453 1.41444155718237 1 4.93755715652137 1.24296407903762 1.41444155318237 1 4.68255541440944 1.2004540150185 1.41444154818237 1 4.42851600934321 1.15100455266978 1.41444154318237 1 4.05926397180468 1.04819393178654 1.41444153118236 1 3.70730816508768 0.908164296745487 1.41444151518236 1 3.48843621369182 0.784388726686464 1.41444150118236 1 3.38400016073138 0.713492872779091 1.41444149318236 1 -6.35000030160882 1.39020921303139 1.3764466293777 1 6.09998311873364 1.38592824882806 1.37753207542926 0.99874932 5.71789054858522 1.37161625114827 1.37883753249127 0.99687613 5.20537455924201 1.32429350290056 1.38029172056034 0.99438325 4.94966089909627 1.28917550223255 1.3809857345933 0.99313823 4.69482641799228 1.24723709324058 1.3816931866269 0.99189321 4.44030830890332 1.19832384091733 1.38241590866123 0.99064536 4.06895061626477 1.09654057008288 1.38352003371367 0.98877782 3.71315083436519 0.957908578908214 1.38462763376628 0.98691028 3.49060746279495 0.835469997342694 1.38535716280093 0.98566526 3.38400016073138 0.765368177103036 1.385716494818 0.98504274 -6.35000030060882 1.4747759580481 1.29657054758379 1 6.10671687405347 1.47124053888017 1.29960790472806 0.99638373 5.73275609129129 1.45846423827333 1.30321412989935 0.99096751 5.22715088227633 1.41379236215153 1.30719704808853 0.9837595 4.9730838862088 1.38006296554947 1.3091039311791 0.9801596 4.71866203012441 1.33946108962098 1.31106105627206 0.97655969 4.46330092899541 1.29183261635875 1.31307375836765 0.9729516 4.0879415701668 1.19245047363836 1.31617292951486 0.96755172 3.72466758091221 1.05698785720423 1.31930621866368 0.96215184 3.49490190099892 0.937484221888109 1.32138186176227 0.95855192 3.38400016073138 0.869103762020212 1.32240742681098 0.95675196 -6.35000030360882 1.59428476072446 1.16524941034637 1 6.11575258748265 1.59175530360432 1.17069915960522 0.99324266 5.75290182924816 1.58126533010607 1.17700921090494 0.98312194 5.25704075369602 1.54081654618486 1.18384123722944 0.96965311 5.00543358274533 1.5094011336927 1.18711906838513 0.96292635 4.75178770369779 1.47110187487359 1.19051843554659 0.95619958 4.49546120952294 1.42576107972001 1.19404964271431 0.94945754 4.1147514474402 1.33062638720136 1.1995508179756 0.93936736 3.7410767236916 1.20067257402888 1.20517376924268 0.92927718 3.5010554032912 1.08612425858813 1.20892721342096 0.92255039 3.38400016073138 1.02061429147658 1.2107891765094 0.91918699 -6.35000029960882 1.73527748542125 0.968329296123171 1 6.12562385895151 1.73361052634208 0.976072885470972 0.9898692 5.77520738330762 1.72569627796617 0.984607769706357 0.97469592 5.29070755429511 1.69071209530451 0.993412163544544 0.95450305 5.04217417949041 1.6624955999643 0.997612476144048 0.9444181 4.78972995849996 1.62750913630253 1.0020348765941 0.93433313 4.5326307142884 1.58558760031137 1.00669531081546 0.92422526 4.146138430931 1.49689806409884 1.0140734391659 0.90909776 3.76054263161618 1.37532820432458 1.02171192052871 0.89397027 3.50841265364065 1.26821074523678 1.02684773277265 0.88388527 3.38400016073138 1.20697562832826 1.029402672894 0.87884277 -6.35000030360882 1.85426945907307 0.751455380122214 1 6.13328560331542 1.85286845300652 0.760503806031991 0.98731037 5.79276666514164 1.8468507267207 0.769744044910878 0.96830463 5.31769536157696 1.81683113329484 0.778425326963217 0.94301146 5.07188373790154 1.7917403531031 0.782469885385324 0.93037926 4.82069154897055 1.76011327960089 0.786816058841756 0.91774703 4.5632660907435 1.72178007678016 0.791482908883419 0.90508612 4.17237710217727 1.64002013989677 0.799018560901343 0.88613773 3.77706124240077 1.5276020785572 0.806906582196004 0.86718934 3.51470969393974 1.42858730885425 0.812221892778468 0.85455708 3.38400016073138 1.37201163016705 0.814860777993808 0.84824095 -6.35000029960882 1.94779785051543 0.517164088903975 1 6.13870295157273 1.94582691442181 0.526724904628089 0.98556616 5.80538534374099 1.94059787317345 0.53542559558135 0.96394808 5.33748208351678 1.91435406492693 0.542210772593628 0.93517833 5.09386908094579 1.8919268808617 0.545161020953758 0.92080983 4.84383199806966 1.86329091750157 0.548455111360219 0.90644129 4.58642762284361 1.82827659383847 0.552111253743876 0.89204012 4.19252939913445 1.75324061527446 0.558205532533339 0.87048726 3.78996847101383 1.65002488537197 0.564646577479272 0.84893439 3.51967388117553 1.55929993506277 0.568952823573808 0.83456582 3.38400016073138 1.50752617060365 0.571063283324049 0.82738153 -6.35000030360882 2.01269872159806 0.268693744052267 1 6.1418518977223 2.00916011242998 0.278236686685533 0.98463659 5.81292749409923 2.00330843015204 0.285551660152975 0.96162625 5.34969375909681 1.97913592600391 0.289208089496647 0.93100367 5.10762751159928 1.95860573902878 0.290398516793189 0.9157098 4.85853396876797 1.93225770977731 0.291939073416361 0.90041589 4.60141597055552 1.89992746324171 0.293843121066799 0.88508726 4.20588286476871 1.83081039495882 0.297309413751439 0.86214634 3.79874910343089 1.73618975246458 0.301016116347498 0.83920543 3.52309055433781 1.65347444153582 0.30339398294044 0.82391148 3.38400016073138 1.60640377030008 0.304496756282819 0.81626451 -6.35000030060882 2.04208931299403 0.0422534092469292 1 6.14261107975836 2.03624770971657 0.0515923275005039 0.98453602 5.81502081719866 2.02849239634821 0.0573895526058573 0.96137505 5.353571734281 2.00440584020416 0.0578540209379184 0.930552 5.11222483381764 1.98471620826896 0.0572548371794587 0.91515801 4.863713808014 1.95958485207528 0.0569945688370966 0.89976399 4.60703552582244 1.9288551936157 0.057080412361174 0.884335 4.21126309802425 1.86388241852966 0.057783777664582 0.86124391 3.80256084361194 1.77586860834923 0.0585857072926716 0.83815282 3.52461642241029 1.69963195972818 0.0589047120778236 0.82275875 3.38400016073138 1.65643869467661 0.0589302309490356 0.81506172 -6.35000030260882 2.04712503723322 -0.188466825981693 1 6.14170538271534 2.03823987281119 -0.179292494845936 0.98502945 5.81334966111928 2.02749289030074 -0.174952057749776 0.9626075 5.35175101119452 2.00209078309421 -0.177595565945336 0.93276796 5.11058629573981 1.98256647916685 -0.179941190576748 0.91786517 4.86244752195385 1.95799655699984 -0.181958165812549 0.90296234 4.6063611407904 1.92823435758621 -0.183645305792684 0.88802567 4.21134153702798 1.86651018865447 -0.185635112127194 0.86567137 3.80311175063811 1.78428447074896 -0.187665755363645 0.84331707 3.52490810642414 1.71403282841219 -0.189356129243933 0.8284142 3.38400016073138 1.67448842853393 -0.190382752802695 0.82096277 -6.35000029960882 2.02707971328112 -0.420798429896852 1 6.13913979459348 2.01448902968309 -0.411512329925786 0.98611688 5.8079455238626 1.99977942598442 -0.408191503658055 0.96532361 5.34431877884151 1.9718194896564 -0.413313425371333 0.93765155 5.10282898737136 1.95186653970868 -0.417068678799698 0.92383126 4.85487872159436 1.92728507754112 -0.420489401042174 0.91001095 4.59955543446715 1.8979397591473 -0.423578511248899 0.89615924 4.20628362178774 1.83869140133315 -0.427671492643305 0.87542871 3.80052129551507 1.76155183166922 -0.431899154394108 0.85469818 3.52401538638174 1.69686255459664 -0.435147494918396 0.84087783 3.38400016073138 1.66077069188237 -0.436991634375988 0.83396765 -6.35000030660882 1.9879657644233 -0.618945184968317 1 6.13552639442185 1.97175708565343 -0.609181874564585 0.9875581 5.80016247549292 1.95301791476337 -0.606134504409843 0.96892341 5.3332737083169 1.92208682329422 -0.612522079073236 0.94412403 5.09111774181511 1.90140879731207 -0.617029058297306 0.93173844 4.84321406104031 1.87648307412816 -0.621176686614308 0.91935283 4.58872255595262 1.84718503273658 -0.624969110474438 0.90693909 4.19780817338518 1.78964629000363 -0.630077038107052 0.88836063 3.79579944729079 1.71652073053036 -0.635345643457297 0.86978216 3.52231502630098 1.65640912567521 -0.639335121516787 0.85739651 3.38400016073138 1.62319422509759 -0.641572380553051 0.85120369 -6.35000029760882 1.926903483523 -0.812790331575467 1 6.13051062518362 1.90679220856777 -0.802143589619774 0.98950847 5.7892918989766 1.88364722346844 -0.798734635927858 0.97379492 5.31772947557859 1.84933498583869 -0.805491387768786 0.95288305 5.07458157702968 1.82776690081427 -0.810278974406184 0.942439 4.82666539825429 1.80235924260747 -0.814665658244541 0.93199494 4.57322422021648 1.77299932221295 -0.818654823584016 0.92152715 4.18553608380229 1.71706206455607 -0.823984549667164 0.90586101 3.78882694495961 1.64791453327174 -0.82945654859707 0.89019488 3.51978462418079 1.59239996063494 -0.833602636473999 0.87975078 3.38400016073138 1.56208582419509 -0.835932597874666 0.87452874 -6.35000030160882 1.8616705484246 -0.969794349982758 1 6.12540831394127 1.83825939531263 -0.958021442083575 0.99147321 5.77824701845199 1.81141209603745 -0.953711255388852 0.97870232 5.30197079683009 1.77431868827561 -0.959946544295012 0.96170659 5.05784234523461 1.75206052721841 -0.964540257023202 0.95321839 4.80993046645943 1.72632517099604 -0.968689100240261 0.94473017 4.55754644847183 1.69700986060364 -0.972394591766263 0.93622268 4.17312429821276 1.64259180701892 -0.977220887605499 0.92349032 3.78176015062396 1.57699058990303 -0.982151453959689 0.91075796 3.5172225640591 1.52548536145666 -0.985941141809689 0.90226973 3.38400016073138 1.49768452413619 -0.988100923762273 0.89802561 -6.35000030160882 1.80105181754537 -1.09202145586823 1 6.12078076272147 1.77506410731102 -1.07904775025202 0.99324866 5.76826501197787 1.74537529090087 -1.0735628979915 0.98313692 5.28780054315704 1.70626863304341 -1.07876793423873 0.96968004 5.04283235152167 1.68358619596605 -1.08289646043482 0.96295925 4.79496332074853 1.65773082773799 -1.086542596608 0.95623845 4.54355324080719 1.62860705135468 -1.08970578375824 0.94950239 4.16208514968843 1.5756613878399 -1.09365363994576 0.93942116 3.77549182932623 1.51317727287206 -1.09767111513658 0.92933993 3.51495694795149 1.46507555958735 -1.10085353628773 0.92261911 3.38400016073138 1.43938500836712 -1.10271545137617 0.9192587 -6.35000030260882 1.72252371981548 -1.22690484527485 1 6.11488404844139 1.69374008844833 -1.212233447578 0.99550701 5.75559930537628 1.66105837189604 -1.20492180423071 0.98877768 5.26992987030823 1.62004410694796 -1.20831140639171 0.97982218 5.02396484862551 1.5970942108579 -1.21159319354759 0.97534952 4.77620925285776 1.57133161963424 -1.21435264067865 0.97087685 4.52606790797668 1.5426680752728 -1.21658640678475 0.96639402 4.14835427303625 1.49178031785576 -1.21907363390289 0.959685 3.76772685995741 1.43324206407534 -1.22159956902286 0.95297598 3.51216088281868 1.38928343898742 -1.22379450212712 0.9485033 3.38400016073138 1.36612925188765 -1.22517089419249 0.94626696 -6.35000030060882 1.65282992950521 -1.32731866804425 1 6.10970973719563 1.62200433904107 -1.31112769627522 0.9974862 5.7445358868508 1.58722249838902 -1.30210935384687 0.99372118 5.25442189457164 1.5450766993872 -1.30372935492382 0.98871064 5.00764937585057 1.52211286429648 -1.30618356804039 0.98620821 4.76004735609011 1.49662678408595 -1.30809064213097 0.98370578 4.51104567926316 1.46853523775168 -1.30944488519529 0.98119767 4.13661746847878 1.41958691542676 -1.31057410624893 0.97744402 3.76112100764365 1.36447773280921 -1.31173387130401 0.97369036 3.50979202770617 1.32399512288639 -1.31303273236571 0.97118793 3.38400016073138 1.30294446488654 -1.31397043841024 0.96993671 -6.35000030160882 1.59860071892946 -1.39659336333462 1 6.105696403005 1.56641528840073 -1.37921463750918 0.99902173 5.73598998544489 1.53030001468535 -1.36883585001621 0.99755653 5.24251255700597 1.48759484865696 -1.36902375902514 0.99560662 4.99515856225729 1.46475364757206 -1.37081078711002 0.99463278 4.7477118805042 1.43960138537739 -1.3720378951683 0.99365893 4.49961306472014 1.41205797606915 -1.37269759819963 0.99268287 4.12772674305649 1.36470961382023 -1.37276694120293 0.9912221 3.75613992640707 1.31227027432949 -1.37287266320795 0.98976132 3.50801234662164 1.27442142053177 -1.37348602623708 0.98878747 3.38400016073138 1.25494977860691 -1.37408973626576 0.98830055 -6.35000030160882 1.56406643828917 -1.43766224628529 1 6.10314155088365 1.53110718072369 -1.41951781642348 1 5.73056810618737 1.49426423997374 -1.40825221788839 1 5.23499173464875 1.45133614793476 -1.40749959485264 1 4.98728947588353 1.42863011185629 -1.40884995191678 1 4.73995927213597 1.40374228467418 -1.40963507695407 1 4.49244475037967 1.37659421838471 -1.4098463289641 1 4.1221729057927 1.33031310618648 -1.40923670693515 1 3.75304017225983 1.27959268077739 -1.40867257790835 1 3.50690798256918 1.2434099760588 -1.40885295191692 1 3.38400016073138 1.2249309651811 -1.40924642893561 1 - -0 5 -0.08141869 1 -0.16283738 1 -0.24425607 1 -0.32567476 1 -0.40709345 1 -0.48851214 1 -0.56993083 1 -0.61064017 1 -0.69205886 1 -0.77347755 1 -0.81418689 1 -0.85489624 1 -0.89560558 1 -0.93631493 1 -1 5 - -0 4 -0.25085094 1 -0.37570871 1 -0.5 1 -0.50056649 1 -0.62542486 1 -0.75028323 1 -0.87514161 1 -1 4 - -9 1 1 0 0 2 2 4 4 3 3 7.21279194058922 1.34821630603684 1.41444156518237 1 7.21279194058922 0.79526291551296 1.98600616733023 0.84765429 7.21279194058922 -0.795263472082986 1.98600598933022 0.84765429 7.21279194058922 -1.34821673503686 1.41444126218235 1 -6.99709403034412 1.34787549802065 1.41444156518237 1 6.99616834030015 0.79523954900185 1.98613718533645 0.84882922 6.99616834030015 -0.795240078991875 1.98613700633644 0.84882922 6.99709403034412 -1.34787589902067 1.41444126218235 1 -6.56569821085392 1.34719387998827 1.41444156518237 1 6.56480499081149 0.791369096308013 1.97774028493762 0.85117909 6.56480499081149 -0.791369571418036 1.97774010693761 0.85117909 6.56569821085392 -1.34719422898829 1.41444126218235 1 -6.35000030160882 1.34685307097209 1.41444156518237 1 6.35000030160882 0.790078313186704 1.97500018280747 0.85235402 6.35000030160882 -0.790078761286726 1.97500000480746 0.85235402 6.35000030160882 -1.3468533929721 1.41444126218235 1 - -0 3 -0.5 1 -1 3 - -0 3 -1.83863013 1 -3.67726025 3 - -9 1 1 0 0 3 4 10 36 8 33 6.35000030160882 -1.56406656428917 -1.43766213928528 1 6.35000030160882 -1.56087668413766 -1.44145561046546 1 6.35000030160882 -1.55156186169523 -1.45246056498817 1 6.35000030160882 -1.5373982540225 -1.46887876476799 1 6.35000030160882 -1.51815295810839 -1.49055888279774 1 6.35000030160882 -1.49696523310203 -1.51368582889622 1 6.35000030160882 -1.475700256092 -1.53624261796761 1 6.35000030160882 -1.43743485327449 -1.57559388383669 1 6.35000030160882 -1.39903314145051 -1.61271153559968 1 6.35000030160882 -1.3606583726278 -1.64762826925814 1 6.35000030760882 -1.30840676714598 -1.69256358039245 1 6.35000029960882 -1.27654247863251 -1.71864403563121 1 6.35000030360882 -1.24245652801352 -1.74524789089482 1 6.35000029860882 -1.19998609099628 -1.77673806039053 1 6.35000030560882 -1.16608700238616 -1.80098233854207 1 6.35000029960882 -1.12829044859092 -1.8266202997598 1 6.35000030360882 -1.08970144575804 -1.85141809693764 1 6.35000025760881 -0.939382638728279 -1.94379931232551 1 6.35000030460882 -0.783807161088841 -2.01855482587621 1 6.35000030160882 -0.618231422944416 -2.0769283926488 1 6.35000030160882 -0.445655486767499 -2.11692251654842 1 6.35000030960882 -0.382553708270325 -2.1304975311932 1 6.35000029660882 -0.31068994845698 -2.14322195679758 1 6.35000031460882 -0.14911305225249 -2.16479364782218 1 6.35000029360882 0.0737504559729585 -2.17192667516098 1 6.35000030360882 0.290588303112203 -2.15304765926427 1 6.35000030060882 0.521041608308147 -2.10183263283169 1 6.35000030160882 0.682523250928113 -2.05064460740039 1 6.35000030160882 0.809166112923326 -2.00103335504398 1 6.35000030160882 0.932604324226326 -1.9429211842838 1 6.35000030160882 1.05218995497634 -1.87653050613041 1 6.35000030160882 1.16729123144336 -1.80213953659703 1 6.35000030060882 1.31678681654401 -1.69063672330093 1 6.35000030260882 1.4294894888971 -1.58772208741275 1 6.35000029960882 1.51030049273542 -1.50160309932232 1 6.35000030160882 1.56406643828917 -1.43766224628529 1 -6.10314154888365 -1.53110727872369 -1.41951769042347 1 6.10344724489817 -1.52805006957848 -1.42326077860126 0.99988754 6.10433321694026 -1.51911811515424 -1.4341232431172 0.99956176 6.10564702300266 -1.50552466450858 -1.45033405488717 0.99907904 6.10736822908441 -1.48703084963017 -1.47175044890439 0.99844734 6.10918759117083 -1.46664183466175 -1.49460881799011 0.99778049 6.11094833225446 -1.44614988268843 -1.51691852604976 0.99713597 6.11399471939915 -1.4092083889338 -1.55587963690031 0.9960228 6.11681747153323 -1.37205425216908 -1.59265616564711 0.99499356 6.11942884565726 -1.33485347740214 -1.62727503129141 0.99404329 6.1227415248146 -1.28409365099117 -1.67187154840963 0.99284043 6.12463956690476 -1.25308395551829 -1.69777760664011 0.99215255 6.12655166599558 -1.21987031394073 -1.72421450689579 0.99146053 6.12878671010173 -1.17843050097244 -1.75552354538289 0.99065286 6.13049234118275 -1.14531077839934 -1.77964565652863 0.99003739 6.13227266126731 -1.10834397164351 -1.80516135374056 0.98939577 6.13397242434804 -1.07056221584897 -1.8298477049131 0.98878397 6.14025232464632 -0.922986541169506 -1.92200940129054 0.98653015 6.14499905287178 -0.769855101256153 -1.99651596882942 0.98483341 6.14847174903672 -0.606588336361399 -2.05460735858861 0.98359576 6.1506607841407 -0.436174667077184 -2.09427767347285 0.9828172 6.15139052017536 -0.373806288914845 -2.10774151811235 0.98255793 6.152035571206 -0.302767448980681 -2.12032459871001 0.98232886 6.15302192125285 -0.143006802522458 -2.14154956071814 0.98197881 6.15291706724786 0.0772315452783014 -2.14808877402874 0.982016 6.15121518016703 0.291207545701616 -2.12857777410201 0.98262022 6.14750871499098 0.518139561260307 -2.07675478264055 0.98393867 6.14397659082321 0.676731464023018 -2.0252728801953 0.98519841 6.14062431666399 0.800794694435705 -1.97556856383447 0.98639699 6.1367486094799 0.921403896104335 -1.91754311307841 0.98778635 6.13235391427117 1.03790351829777 -1.85147115894016 0.98936651 6.12744525303802 1.14966162160599 -1.77768657343558 0.99113746 6.12008921668863 1.29417243146989 -1.66755515920462 0.99380328 6.1132588363642 1.40253270161673 -1.56635938039807 0.99629147 6.10747995008972 1.47986014128958 -1.48198655239058 0.99840636 6.10314155088365 1.53110718072369 -1.41951781642348 1 -5.73056810418737 -1.49426433297374 -1.40825210888838 1 5.73122741521868 -1.49135472683555 -1.41191871606254 0.99971911 5.7331394903095 -1.48284824043151 -1.42256457056819 0.99890538 5.73597834644434 -1.46988882381597 -1.43845939832315 0.99769968 5.73970374162129 -1.45223106997727 -1.45947266332123 0.99612186 5.74364929480869 -1.43273084305106 -1.48191887538737 0.99445624 5.74747528499041 -1.41309806811855 -1.50384777442893 0.99284639 5.75411255130567 -1.37762201743353 -1.54220360925074 0.99006599 5.76028261859873 -1.34184843373438 -1.57844721497222 0.98749524 5.76600789487067 -1.30594536702907 -1.61259754659427 0.98512172 5.77329469921677 -1.25682527169599 -1.65665607268694 0.98211729 5.77748191541565 -1.22674856126743 -1.68228254990413 0.98039913 5.78170909861643 -1.19448393973494 -1.70845018914703 0.97867066 5.78666169885167 -1.15415914781962 -1.73946481162014 0.9766533 5.79044949803158 -1.12187414628616 -1.76338611175634 0.97511601 5.79441090321974 -1.08579181457234 -1.78869962795867 0.97351344 5.79820042439973 -1.04886512781842 -1.8132004871224 0.97198531 5.81226401606771 -0.90406266656067 -1.90496987148121 0.96635586 5.82296013957575 -0.753357870342577 -1.97904779199972 0.96211786 5.83082179994916 -0.592349947955111 -2.03666702973649 0.95902653 5.8357933191853 -0.42400044462894 -2.07580982259567 0.95708188 5.83745335226414 -0.36230408059852 -2.08909229122655 0.95643431 5.8389219073339 -0.292024171010403 -2.10144735081339 0.95586215 5.84116950844065 -0.133931871271422 -2.12211829579521 0.95498781 5.8409304824293 0.083769278148827 -2.12772744306163 0.95508071 5.83705436124519 0.294776395751127 -2.10724690408885 0.95658987 5.82863854784546 0.517838628286014 -2.05452202458455 0.95988302 5.82065130946609 0.673108022090914 -2.00263053311984 0.96302951 5.81310013610743 0.794121096738726 -1.95282821375436 0.96602325 5.80440532769445 0.911322758965506 -1.89499054500722 0.96949353 5.79459188422833 1.02405517564001 -1.82946916989512 0.97344035 5.78368769771041 1.1316966327527 -1.75667800843772 0.97786371 5.76745835293956 1.27002429532291 -1.64872284131013 0.98452221 5.75250720322942 1.3730191002149 -1.55019531463032 0.99073706 5.73994579663278 1.446077682685 -1.46849307774968 0.99601952 5.73056810618737 1.49426423997374 -1.40825221788839 1 -5.23443025562208 -1.45128758493246 -1.4074986558526 1 5.23536636766655 -1.44853333980164 -1.41106146202182 0.9994947 5.23808357779561 -1.44047466841887 -1.42141275351348 0.99803087 5.24212435398753 -1.42818494383514 -1.43687652024797 0.99586192 5.24743890023996 -1.41141435703858 -1.45733736121981 0.99302357 5.25308228550801 -1.39286188215739 -1.47921571525897 0.99002725 5.25856922076862 -1.37414831426854 -1.50061681527547 0.98713129 5.26812205022236 -1.34024235165809 -1.53812615105707 0.98212959 5.27704157164601 -1.30596111402982 -1.5736172427428 0.97750503 5.28535202804074 -1.27147177839167 -1.60709976033314 0.97323527 5.29597664654538 -1.22414449514374 -1.65038155438891 0.96783056 5.30210611383652 -1.19508978876372 -1.67559920858669 0.96473974 5.30831212313128 -1.1638687262808 -1.70136993681073 0.96163037 5.31560630247774 -1.12477322642386 -1.73194605426302 0.95800133 5.32120190674352 -1.093406151934 -1.75556391738481 0.95523588 5.32706976102222 -1.05829962326653 -1.78056951057251 0.95235298 5.33269817128956 -1.02231822455751 -1.80478547372271 0.94960403 5.35371683628789 -0.880492719981158 -1.89590087205046 0.93947714 5.36984175505379 -0.732438314758952 -1.9692910425363 0.93185333 5.3817711366204 -0.573937009690544 -2.02617716523825 0.9262923 5.38934916698034 -0.407886517873569 -2.06452803005981 0.92279405 5.3918854591008 -0.346920643977846 -2.07753760367774 0.92162912 5.39413169520749 -0.277473716389294 -2.08955474524852 0.92059985 5.397574023371 -0.121223284637797 -2.10941548919185 0.91902699 5.3972076923536 0.0935528608835222 -2.11370320039551 0.91919411 5.39127558907184 0.300987754366151 -2.09188784735934 0.92190896 5.37845161746273 0.519287967424854 -2.03798643479916 0.92783306 5.36635082488797 0.670419514693217 -1.98561734031176 0.93349332 5.35497294934756 0.787618622419875 -1.93577290094427 0.93887879 5.34194621272882 0.900564461404515 -1.87830626521476 0.94512151 5.32733822503498 1.00861374590658 -1.81366836914462 0.9522215 5.31122319426955 1.11117780077811 -1.74237231575824 0.96017875 5.28746263014099 1.24195950798991 -1.63755798077983 0.97215681 5.26580752811242 1.33854437557744 -1.5427670402775 0.98333678 5.24778467825639 1.40661282781052 -1.46472811757085 0.99283946 5.23443025762208 1.45128751093245 -1.4074987418526 1 -4.86287561097419 -1.41722414131453 -1.40953009994908 1 4.86387354502159 -1.41457555118873 -1.41301380711455 0.99932677 4.86677210315926 -1.40682183182045 -1.42314020559553 0.99737648 4.87108779636424 -1.39499037925848 -1.43827383631434 0.99448673 4.8767734766343 -1.37883103349096 -1.45830971226599 0.99070512 4.88282287292163 -1.36093650964101 -1.4797488982843 0.98671304 4.88871636420156 -1.34286537478268 -1.50073942228129 0.98285467 4.89900487769023 -1.31006481822474 -1.53758445403134 0.97619078 4.90864340514804 -1.27684913864708 -1.57247941368876 0.97002935 4.91765179757592 -1.2433825750575 -1.60542805225374 0.96434064 4.92920827712482 -1.19736816887193 -1.64808117927965 0.95713981 4.93589564144245 -1.16907001052784 -1.67296391646152 0.95302182 4.94268170376477 -1.13862896408197 -1.69840699467 0.94887913 4.95067725814454 -1.10046181626913 -1.72861759110493 0.94404405 4.95682532043656 -1.06979366781247 -1.75197917421454 0.94035958 4.96328600574342 -1.03543768718065 -1.7767227833898 0.93651861 4.96949606903839 -1.00019083050651 -1.80069446152839 0.93285611 4.99280019914527 -0.860715793571805 -1.89121037682767 0.91936378 5.01080059900025 -0.71484850151348 -1.96398676428436 0.90920638 5.02418636063604 -0.558495316557103 -2.02023531995602 0.90179727 5.03272016404137 -0.394483524886961 -2.05791761574584 0.89713646 5.03558167917728 -0.334179641272681 -2.07069624635279 0.89558439 5.03811818729776 -0.265492298740207 -2.08243148391018 0.89421308 5.04200943448259 -0.110936432329198 -2.10162503782183 0.89211751 5.04159509746291 0.101172874695453 -2.10485643097531 0.89234017 5.03489336214459 0.305428276357064 -2.08201017789017 0.89595724 5.02045567445884 0.519607296730021 -2.02725601828949 0.90385007 5.00689458881472 0.667253568572842 -1.97459121978805 0.91139138 4.99419857821169 0.781305205520004 -1.92479212742272 0.91856658 4.97972760552436 0.890802924790867 -1.86770554671125 0.92688394 4.96358192375748 0.995127907736037 -1.80385320867843 0.93634344 4.94587014491622 1.09373052394941 -1.73381565535182 0.94694509 4.91994397468479 1.21875506488776 -1.63154399549418 0.96290378 4.89650885257168 1.31058378324939 -1.53969068113138 0.97779915 4.87714377765189 1.37504058631092 -1.46447348455875 0.99045982 4.86287561297419 1.41722408331453 -1.40953016794909 1 -4.49244474837966 -1.37659426138472 -1.4098462769641 1 4.49338004442409 -1.37405770526424 -1.41324966612575 0.99915885 4.49609845355321 -1.36662804091135 -1.42314733159587 0.99672209 4.50015084374569 -1.35528528137259 -1.43794430229869 0.99311154 4.50549864899969 -1.33978111563619 -1.45754518222968 0.98838666 4.51119983627048 -1.32259610081994 -1.47853279822654 0.98339883 4.51676531253483 -1.30522220099473 -1.49909906220338 0.97857805 4.52650783199758 -1.2736325114943 -1.53525254992058 0.97025196 4.53566572243255 -1.24159676197268 -1.56952197154829 0.96255366 4.54425202484038 -1.20927477343747 -1.60190606108645 0.95544599 4.5553055963654 -1.1647488953226 -1.64388751008046 0.94644903 4.56172183967015 -1.13731930601977 -1.66840882324516 0.94130388 4.56824775198012 -1.10778185861681 -1.69349605643674 0.93612786 4.57595621334625 -1.0707017288556 -1.72330649685266 0.93008676 4.58189786362846 -1.04086209343829 -1.74638453794881 0.92548325 4.58815512592567 -1.00740426784913 -1.77083654311022 0.92068422 4.59418272321196 -0.973045591827183 -1.79453458423582 0.91610816 4.61691706129178 -0.836532227533147 -1.88434518550159 0.8992504 4.6346025901318 -0.693512018110052 -1.95641115592454 0.8865594 4.64782565275986 -0.54003131094011 -2.01193481956177 0.87730221 4.65628776216179 -0.378830346473475 -2.0488741413163 0.87147884 4.65913084329683 -0.319470188204019 -2.06139553691103 0.86953963 4.66165337441664 -0.251865778402982 -2.07282046845368 0.86782626 4.66552749360065 -0.0997372415372646 -2.09128764433083 0.86520799 4.66511473458105 0.108667241491417 -2.09339915043112 0.86548619 4.65844670326434 0.308700816942501 -2.06949506729574 0.87000547 4.64413415758453 0.517624201085829 -2.01392117965612 0.87986704 4.63075556994908 0.660987618415226 -1.96102439814366 0.88928941 4.61828704635685 0.771273374263518 -1.91134711478411 0.89825435 4.60414168068498 0.876734682232661 -1.85474003109542 0.90864633 4.58844205793929 0.976789118794991 -1.79179164810553 0.92046535 4.571319183126 1.07093803186682 -1.7231430048449 0.93371141 4.54644099894435 1.18963819650478 -1.62358975611637 0.95365074 4.52414114688516 1.27635807562375 -1.53480044789911 0.97226151 4.50584730101625 1.33700406650428 -1.46247548246385 0.98808018 4.49244475037967 1.37659421838471 -1.4098463289641 1 -4.1221729047927 -1.33031313618648 -1.40923667193515 1 4.12292104182823 -1.32789211907149 -1.41255852409293 0.99899092 4.12509690593158 -1.3207971797345 -1.42222360755199 0.99606769 4.12834446508583 -1.30996066421979 -1.43667735423851 0.99173634 4.13263741828974 -1.29513806851575 -1.45583310014836 0.9860682 4.13722316750755 -1.27869474973474 -1.47635655412317 0.98008461 4.14170885872061 -1.26205340494432 -1.4964845930792 0.97430142 4.1495829190946 -1.23174495450474 -1.53191853976222 0.96431313 4.15700980644736 -1.20096861204295 -1.56553194935877 0.95507796 4.16399555777917 -1.16987866356625 -1.5973194638686 0.94655133 4.17302076220784 -1.12697086452824 -1.63858393082856 0.93575824 4.17827625645746 -1.10049431227067 -1.66271567697475 0.92958592 4.18363418171195 -1.07195516591514 -1.687416965148 0.92337658 4.18997944401334 -1.03608556721142 -1.71679003354315 0.91612944 4.19488253724622 -1.00717646483831 -1.73955505162443 0.9106069 4.20005759349202 -0.974734470557401 -1.76368325077046 0.9048498 4.20505391472933 -0.941387895743524 -1.78707557088153 0.89936019 4.22399820762914 -0.808334968443849 -1.87606324610822 0.87913698 4.23884521933434 -0.668719583732474 -1.94730996749226 0.86391238 4.25000941586461 -0.51874112156888 -2.00200970509035 0.8528071 4.25718263720532 -0.361036617548318 -2.03812176480558 0.84582117 4.25959772632003 -0.302871154515607 -2.05035603238668 0.84349482 4.2617426534219 -0.23663945100977 -2.06143850491307 0.8414394 4.26504075057856 -0.0875990598707319 -2.07911269675255 0.83829842 4.26468913856186 0.116152986896971 -2.08003483979635 0.83863216 4.25901634329241 0.311005105781949 -2.05504693360949 0.84405367 4.24688720871631 0.513628569546047 -1.99869665193299 0.85588397 4.23560740718055 0.651980626187417 -1.94564324041309 0.86718741 4.2251448586836 0.75794154832029 -1.89617535606349 0.87794208 4.21333317112258 0.858842028362806 -1.84015928840287 0.89040869 4.20029518350331 0.954148119969602 -1.77824519846211 0.90458723 4.18616031083194 1.04342359955996 -1.71112656227415 0.92047771 4.16577997386392 1.15533630887553 -1.61447813168359 0.94439768 4.14766757700363 1.23667888073909 -1.5288841286181 0.96672386 4.13291758630304 1.29337722843212 -1.45952338932364 0.98570054 4.1221729057927 1.33031310618648 -1.40923670693515 1 -3.75304017125983 -1.27959269377739 -1.40867256290835 1 3.75347656328056 -1.27728691866787 -1.4119116560622 0.998823 3.75474659134088 -1.27052622834675 -1.42134030051004 0.9954133 3.75664446943103 -1.26019657285612 -1.43544422117994 0.99036114 3.75915753755039 -1.24605897518462 -1.45414459306816 0.98374974 3.76184737967815 -1.23036433543917 -1.47419109502032 0.97677039 3.76448391780338 -1.21446559268402 -1.49386665395486 0.97002479 3.76912495702382 -1.18546325730648 -1.52855228360233 0.9583743 3.77351759723246 -1.15598087990614 -1.56147810116623 0.94760226 3.77766283342935 -1.12616641649003 -1.59263559264613 0.93765667 3.78303773768464 -1.08494715153222 -1.63313534056976 0.92506745 3.78617778583379 -1.05947272532225 -1.65684763069604 0.91786797 3.78938677498621 -1.03198950401687 -1.68113082384943 0.91062529 3.79319725116719 -0.997408763834372 -1.7100265112219 0.90217212 3.79614923630741 -0.969496638518617 -1.73244660328679 0.89573055 3.79927214245574 -0.938149498469708 -1.75621595641578 0.88901538 3.80229421159928 -0.905900512377963 -1.77926745451067 0.88261221 3.81381591714653 -0.776658783389311 -1.86730135969205 0.85902356 3.82291610257876 -0.640871732849773 -1.93760604703134 0.84126535 3.82980015490574 -0.494900423746508 -1.99136926758496 0.828312 3.83424209111672 -0.341262224639085 -2.02655828125635 0.8201635 3.83574093218791 -0.284500837923064 -2.03847131182219 0.81745001 3.8370735152512 -0.219886104524029 -2.04917479933058 0.81505254 3.83912511734865 -0.0744966154083992 -2.06598077212882 0.81138885 3.83890624633825 0.123779212809197 -2.06563741211251 0.81177813 3.83537996417076 0.312604177777901 -2.03954121787301 0.81810186 3.82787136481413 0.508008633469114 -1.98247036616229 0.8319009 3.82092623748425 0.640715701032361 -1.92934932863917 0.8450854 3.8145165191798 0.741873368217092 -1.88019123830429 0.85762982 3.80731724383786 0.837774063202131 -1.82489136367768 0.87217106 3.79941569546255 0.927944421554993 -1.76415518679287 0.88870912 3.7909024530582 1.01202140806844 -1.69871932668483 0.907244 3.77872378547974 1.11681708604596 -1.60517353424165 0.93514462 3.76799451797013 1.19262221964651 -1.5229112733344 0.96118621 3.75932171555819 1.24531728514939 -1.45658827818423 0.9833209 3.75304017225983 1.27959268077739 -1.40867257790835 1 -3.50690798156918 -1.2434099750588 -1.40885295291692 1 3.50706729957675 -1.24118055395291 -1.41203619606812 0.99871105 3.50753116359878 -1.23464148664232 -1.42130506550837 0.99497703 3.50822490763173 -1.22464855916768 -1.43517208316701 0.98944435 3.50914456867542 -1.21096733051786 -1.45356312904054 0.9822041 3.51013023872223 -1.19577309279617 -1.47328446097725 0.97456091 3.51109770176818 -1.18037221006467 -1.49265029989708 0.96717371 3.51280390184922 -1.15224898972889 -1.52682067052009 0.95441508 3.51442254792611 -1.12364273037016 -1.55926998006135 0.94261846 3.51595339999882 -1.09469688899531 -1.58998813952038 0.9317269 3.51794326309333 -1.05463410609243 -1.62995028641848 0.91794025 3.51910831614867 -1.02984992691524 -1.65336541653064 0.91005599 3.52030090820531 -1.00309727964456 -1.67735093366989 0.90212443 3.5217196182727 -0.96941268698463 -1.70590465402612 0.89286724 3.52282062632499 -0.942196816091945 -1.72807577407919 0.88581298 3.5239872223804 -0.911617783759519 -1.75158490219581 0.8784591 3.52511795343411 -0.88014243328452 -1.77438805027891 0.8714469 3.52944525163965 -0.753613188164704 -1.86170613542629 0.84561461 3.53288151280286 -0.620596354906744 -1.93130677773215 0.82616734 3.53549184092684 -0.477565352673136 -1.98437542525277 0.81198193 3.53718115900708 -0.326947922419192 -2.01888931689209 0.80305838 3.5377520740342 -0.271236597383046 -2.03056683244674 0.8000868 3.53826003805833 -0.207833714371571 -2.04099487394205 0.7974613 3.5390427780955 -0.0651884594262855 -2.05717531971058 0.79344914 3.53895923309154 0.128976772006068 -2.05594230665201 0.79387545 3.53761453902767 0.313308541611356 -2.02909475637682 0.80080065 3.53475952389206 0.50338619493956 -1.97158189264511 0.81591219 3.5321287357671 0.631978485167366 -1.91847303412258 0.83035073 3.52970922065218 0.729671116827517 -1.86958445280049 0.84408831 3.52700129952356 0.822000366382921 -1.81483914820023 0.86001263 3.52404089338295 0.908539919543329 -1.75497527435685 0.87812371 3.5208648872321 0.988981063374078 -1.69075239630643 0.89842154 3.51634574101745 1.08886560971834 -1.59939092996699 0.92897591 3.51238793882947 1.16090303713993 -1.51942827416897 0.95749444 3.50920469167827 1.21090699951499 -1.45517205711696 0.98173447 3.50690798256918 1.2434099760588 -1.40885295191692 1 -3.38400016073138 -1.22492845218098 -1.40924430093551 1 3.38400016073138 -1.22273605707684 -1.41239941808537 0.99865507 3.38400016073138 -1.21630449177136 -1.42158776552179 0.9947589 3.38400016073138 -1.20647513230449 -1.43533523617476 0.98898595 3.38400016073138 -1.19301603766522 -1.45356990304086 0.98143128 3.38400016073138 -1.17806590695513 -1.47312648796975 0.97345617 3.38400016073138 -1.16290835223518 -1.49233503488211 0.96574816 3.38400016073138 -1.13521568791985 -1.52624280649264 0.95243547 3.38400016073138 -1.10704030758159 -1.55844833202232 0.94012656 3.38400016073138 -1.07852336522711 -1.58894089247064 0.92876201 3.38400016073138 -1.03903351835144 -1.62862564935556 0.91437666 3.38400016073138 -1.01459240619055 -1.65188675346041 0.90615001 3.38400016073138 -0.988203922457165 -1.67571751859231 0.897874 3.38400016073138 -0.954967367148514 -1.70409281894006 0.8882148 3.38400016073138 -0.928100336062398 -1.72613346198694 0.88085419 3.38400016073138 -0.897907275468305 -1.74950583909706 0.87318096 3.38400016073138 -0.866821797431824 -1.77217810317394 0.86586424 3.38400016073138 -0.741663184697109 -1.85911261130311 0.83891014 3.38400016073138 -0.610062640166419 -1.92833658259107 0.81861833 3.38400016073138 -0.468549687754915 -1.98103504609411 0.80381689 3.38400016073138 -0.319504073825628 -2.01519189971647 0.79450583 3.38400016073138 -0.264340523295501 -2.0267446762652 0.7914052 3.38400016073138 -0.20157103521411 -2.03702756675361 0.78866568 3.38400016073138 -0.0603632220870991 -2.05288008850657 0.78447928 3.38400016073138 0.131644860142795 -2.05118767442618 0.7849241 3.38400016073138 0.313621417856217 -2.02396114413299 0.79215005 3.38400016073138 0.500918594732355 -1.96624083439142 0.80791783 3.38400016073138 0.627375390128731 -1.91315732987009 0.82298339 3.38400016073138 0.723279112373913 -1.8644242805554 0.83731755 3.38400016073138 0.813774288512203 -1.8099813409695 0.85393342 3.38400016073138 0.898460097664563 -1.75058157114816 0.872831 3.38400016073138 0.977056523967692 -1.68699410812792 0.8940103 3.38400016073138 1.07446881103453 -1.59676110184208 0.92589156 3.38400016073138 1.14462675836685 -1.51797248209982 0.95564856 3.38400016073138 1.19329932567867 -1.4547623830975 0.98094125 3.38400016073138 1.2249309651811 -1.40924642893561 1 - -0 4 -0.25085093 1 -0.37570871 1 -0.50056649 1 -0.62542486 1 -0.75028323 1 -0.87514161 1 -1 4 - -0 5 -0.00695228 1 -0.02022482 1 -0.03033722 1 -0.04044963 1 -0.05056204 1 -0.06320255 1 -0.10618028 1 -0.11376458 1 -0.12134889 1 -0.15674232 1 -0.16179852 1 -0.17191093 1 -0.19213574 1 -0.21236056 1 -0.22247297 1 -0.23258537 1 -0.42472112 1 -0.43483352 1 -0.44494593 1 -0.45505834 1 -0.50562038 1 -0.52584519 1 -0.64719408 1 -0.72809334 1 -0.76854297 1 -0.8089926 1 -0.84944223 1 -0.88989186 1 -0.93034149 1 -0.97079112 1 -1.01124075 1 -1.10976049 5 - -9 1 1 0 0 4 2 106 4 103 3 7.21279194058922 1.34821630603684 1.41444156518237 1 6.99709403034412 1.34787549802065 1.41444156518237 1 6.56569821085392 1.34719387998827 1.41444156518237 1 6.35000030160882 1.34685307097209 1.41444156518237 1 -7.21279194058922 1.38651705285602 1.3810068325943 0.98310562 6.99432584721264 1.38747810690167 1.37988059454081 0.98732921 6.56295355672355 1.38929791798811 1.37757217343116 0.9957764 6.35000030160882 1.39020921303139 1.3764466293777 1 -7.21279194058922 1.4621606594489 1.31043436724229 0.95028396 6.9887395629473 1.46553907960937 1.30693455907606 0.96271297 6.5575542554671 1.47174120990395 1.2999056407422 0.98757099 6.35000030060882 1.4747759580481 1.29657054758379 1 -7.21279194058922 1.57010560557601 1.19522065276993 0.90386361 6.98033234454798 1.57691368189938 1.18739086739804 0.92789771 6.54976290809703 1.58868654845856 1.17218866767597 0.9759659 6.35000030360882 1.59428476072446 1.16524941034637 1 -7.21279194058922 1.69968679573079 1.02487540767897 0.84725591 6.96918417001847 1.7104518022421 1.00938649694328 0.88544193 6.54000723763366 1.72743958204897 0.980782074934647 0.96181398 6.35000029960882 1.73527748542125 0.968329296123171 1 -7.21279194058922 1.81413242216666 0.835852788420875 0.79561473 6.958036861489 1.82731389579275 0.811617913939781 0.84671105 6.53085367919889 1.84585616567346 0.769146275042486 0.94890368 6.35000030360882 1.85426945907307 0.751455380122214 1 -7.21279194058922 1.91021170273018 0.629178767264386 0.74863908 6.94696960396333 1.92392159838137 0.595470073343309 0.81147931 6.52230804379299 1.9402915371589 0.539534491666512 0.93715977 6.35000029960882 1.94779785051543 0.517164088903975 1 -7.21279194058922 1.98464404526553 0.40646120293587 0.70604653 6.93606687244548 1.99672452083932 0.363035859753277 0.7795349 6.51437250941608 2.00735396834419 0.294940105498903 0.92651163 6.35000030360882 2.01269872159806 0.268693744052267 1 -7.21279194058922 2.02770075531061 0.200988942886462 0.6723824 6.92679320000501 2.03646231372676 0.148917998223225 0.7542868 6.50797021011198 2.0394548888689 0.0713165534773544 0.9180956 6.35000030060882 2.04208931299403 0.0422534092469292 1 -7.21279194058922 2.05092144241354 -0.0134662888396144 0.64154305 6.91773289357467 2.05454071458544 -0.0731756501856567 0.73115729 6.50200124682847 2.04779386326498 -0.157636384837326 0.91038576 6.35000030260882 2.04712503723322 -0.188466825981693 1 -7.21279194058922 2.05234961848137 -0.234903884957335 0.61340451 6.90894861615743 2.04925056733417 -0.300847193809474 0.71005339 6.49646612856557 2.03136948348487 -0.38924133395797 0.90335113 6.35000029960882 2.02707971328112 -0.420798429896852 1 -7.21279194058922 2.03350610158635 -0.427442342502421 0.59149884 6.90173842881497 2.02355368011364 -0.497647960837009 0.69362413 6.49209703935805 1.99546599177954 -0.587405787570276 0.89787471 6.35000030660882 1.9879657644233 -0.618945184968317 1 -7.21279194058922 1.99408569071398 -0.619120805066659 0.57168198 6.89491417049083 1.97631469386991 -0.692448670159545 0.67876148 6.48809837916812 1.93765664103375 -0.78179166530311 0.89292049 6.35000029760882 1.926903483523 -0.812790331575467 1 -7.21279194058922 1.94691251047338 -0.778047304585262 0.55650414 6.8894815112328 1.9222549063022 -0.852622767907407 0.6673781 6.48500566002123 1.87500878805813 -0.939790722907662 0.88912603 6.35000030160882 1.8616705484246 -0.969794349982758 1 -7.21279194058922 1.90021685525545 -0.904443886598777 0.54514222 6.88529174703379 1.870016302821 -0.979003015470146 0.65885667 6.48267315891044 1.81630058526964 -1.06317735149821 0.88628556 6.35000030160882 1.80105181754537 -1.09202145586823 1 -7.21279194058922 1.84472828261989 -1.02872931186202 0.53454046 6.88128349384341 1.8090087309233 -1.10247453236473 0.65090534 6.48048318780642 1.74924662808475 -1.18277812017894 0.88363511 6.35000030160882 1.73223369227668 -1.21022656048267 1 -7.21279194058922 1.78047102656783 -1.15019805363147 0.5246798 6.87746684366213 1.73937452361585 -1.22232404505727 0.64350985 6.47843447570911 1.67411130451602 -1.29794609264913 0.88116995 6.35000030160882 1.65550970563249 -1.32378622987647 1 -7.21279194058922 1.70753418710352 -1.26813303223308 0.51554235 6.87385144449041 1.66132463390868 -1.3378444895442 0.63665676 6.47652576661845 1.59121634157872 -1.40805473587901 0.87888559 6.35000030160882 1.57122741662929 -1.43209992302109 1 -7.21279194058922 1.62607441423439 -1.38181234463256 0.5071114 6.87044650232868 1.57513806481504 -1.44834366979263 0.63033355 6.47475581153438 1.50094210429092 -1.51250891584032 0.87677785 6.35000030160882 1.47979009728625 -1.53460148988966 1 -7.21279194058922 1.53631782497118 -1.49051648679573 0.49937137 6.86726068517736 1.48116099135137 -1.55315122277072 0.62452853 6.47312339945685 1.40372063667315 -1.61074604850633 0.87484284 6.35000030160882 1.3816488896248 -1.6307591154569 1 -7.21279194058922 1.43856104932798 -1.59353597968889 0.49230787 6.86430214203684 1.37980411553718 -1.65162671944806 0.6192309 6.47162735338579 1.30003552674837 -1.70224637785236 0.87307697 6.35000030160882 1.27730312466864 -1.7200860396997 1 -7.21279194058922 1.33317134232224 -1.6901792832792 0.48590765 6.86157841390747 1.27153974539489 -1.74316656479597 0.61443074 6.47026655632116 1.19041359254161 -1.78653317285577 0.87147691 6.35000030160882 1.16729123144336 -1.80213953659703 1 -7.21279194058922 1.22058567797471 -1.77978086653505 0.48015863 6.85909645878958 1.15689731894967 -1.82721090978786 0.61011897 6.4690399472629 1.07542356807988 -1.86318192649639 0.87003966 6.35000030160882 1.05218995497634 -1.87653050613041 1 -7.21279194058922 1.10130881630936 -1.86170929042644 0.4750499 6.85686256368348 1.03645858122914 -1.90324998539952 0.60628742 6.46794654421096 0.955666741621732 -1.93181927075649 0.86876247 6.35000030160882 0.932604324226326 -1.9429211842838 1 -7.21279194058922 0.975910287743249 -1.93537515592538 0.47057168 6.85488239558943 0.910851604783128 -1.97082914560936 0.60292876 6.46698544116531 0.831774805197181 -1.99213081962113 0.86764292 6.35000030160882 0.809166112923326 -2.00103335504398 1 -7.21279194058922 0.84502033459631 -2.00023875300624 0.4667154 6.85316090350766 0.780744474453371 -2.02955436439866 0.60003655 6.46615582612591 0.704399835187195 -2.04385859107807 0.86667885 6.35000030160882 0.682523250928113 -2.05064460740039 1 -7.21279194058922 0.675103814045709 -2.06983358631182 0.46266316 6.85133585342098 0.613196446955267 -2.09154058734284 0.59699737 6.46528206208441 0.541626604205882 -2.09755708562861 0.86566579 6.35000030060882 0.521041608308147 -2.10183263283169 1 -7.21279194058922 0.427527016726443 -2.14456254086125 0.45840919 6.8494035823292 0.371371627979205 -2.15623631541572 0.59380689 6.46436260004073 0.308739412964335 -2.15192296421085 0.8646023 6.35000030360882 0.290588303112203 -2.15304765926427 1 -7.21279194058922 0.189458714538806 -2.18034729656093 0.45641085 6.84849509128605 0.141161505074811 -2.18448420275743 0.59230814 6.46392988402018 0.0890294569586721 -2.17303859821379 0.86410271 6.35000029360882 0.0737504559729585 -2.17192667516098 1 -7.21279194058922 -0.060550282445984 -2.18463207376445 0.456172 6.84839638328136 -0.0982741943877735 -2.18340898570636 0.592129 6.46387814701772 -0.137423861007283 -2.16741207494654 0.864043 6.35000031460882 -0.14911305225249 -2.16479364782218 1 -7.21279194058922 -0.244794796437128 -2.16668735791212 0.45717223 6.84886542130364 -0.27347680082945 -2.16351558076147 0.59287917 6.46409480802801 -0.301976054163092 -2.14632499194496 0.86429306 6.35000029660882 -0.31068994845698 -2.14322195679758 1 -7.21279194058922 -0.327096319206241 -2.15465597334066 0.45784579 6.84917848031851 -0.351590272749641 -2.15101174816757 0.59338434 6.46424066003494 -0.375210716831552 -2.13369629834513 0.86446145 6.35000030960882 -0.382553708270325 -2.1304975311932 1 -7.21279194058922 -0.399690782584293 -2.14090490968752 0.45861891 6.8495361873355 -0.420363437616191 -2.13717660851044 0.59396418 6.46440798004289 -0.439560486708002 -2.12010262369947 0.86465473 6.35000030160882 -0.445655486767499 -2.11692251654842 1 -7.21279194058922 -0.597534685641373 -2.09972672873166 0.46095078 6.85060932038647 -0.608047238430693 -2.09607908055841 0.59571309 6.46491221606684 -0.615474903743488 -2.07996481579302 0.8652377 6.35000030160882 -0.618231422944416 -2.0769283926488 1 -7.21279194058922 -0.788894907920496 -2.0341008796146 0.46472524 6.85232729746807 -0.789053732298039 -2.03312078656805 0.59854393 6.46572695510554 -0.784489582981254 -2.02064002497525 0.86618131 6.35000030460882 -0.783807161088841 -2.01855482587621 1 -7.21279194058922 -0.970432022773046 -1.94523159539354 0.46996388 6.85468022057982 -0.960296250601622 -1.94984545161268 0.60247291 6.4668547681591 -0.943587895508018 -1.94399329733472 0.86749097 6.35000025760881 -0.939382638728279 -1.94379931232551 1 -7.21279194058922 -1.14654987245819 -1.82979608791065 0.4770287 6.85780123172806 -1.12645758050386 -1.84369360857074 0.60777152 6.46837044323109 -1.09750072912849 -1.84845167979674 0.86925717 6.35000030360882 -1.08970144575804 -1.85141809693764 1 -7.21279194058922 -1.19115892357701 -1.79903332144949 0.4789509 6.85864063176793 -1.16880048951504 -1.81530950222257 0.60921317 6.46878174925063 -1.13694561900202 -1.82282237157941 0.86973772 6.35000029960882 -1.12829044859092 -1.8266202997598 1 -7.21279194058922 -1.23478719364924 -1.76701821192886 0.48097267 6.85951903880966 -1.2102607794843 -1.78583387182255 0.6107295 6.46921388027116 -1.17557943983702 -1.79628945031917 0.87024317 6.35000030560882 -1.16608700238616 -1.80098233854207 1 -7.21279194058922 -1.2738600865051 -1.73654513248146 0.48291796 6.86035988184959 -1.24743792525012 -1.75783864149285 0.61218847 6.46962918129088 -1.21022896248279 -1.77116517912583 0.87072949 6.35000029860882 -1.19998609099628 -1.77673806039053 1 -7.21279194058922 -1.32258304281932 -1.69691518559914 0.48547629 6.86145943490182 -1.29390762345731 -1.72143178276362 0.61410722 6.47017466331679 -1.25361698954361 -1.73851584657507 0.87136907 6.35000030360882 -1.24245652801352 -1.74524789089482 1 -7.21279194058922 -1.36156047667065 -1.66327911600152 0.48767488 6.86239866394643 -1.33115839422663 -1.69057118229782 0.61575616 6.47064279833903 -1.28843038219716 -1.7109024652635 0.87191872 6.35000029960882 -1.27654247863251 -1.71864403563121 1 -7.21279194058922 -1.39788942539618 -1.6301338504272 0.4898669 6.86332991799066 -1.36594352887883 -1.66020390185545 0.61740018 6.47110895636117 -1.32096730174258 -1.68380042197622 0.87246673 6.35000030760882 -1.30840676714598 -1.69256358039245 1 -7.21279194058922 -1.43640313222548 -1.59288801365812 0.49236143 6.8643833990407 -1.40290073063421 -1.62613122423709 0.61927108 6.47163872238633 -1.35556668838596 -1.65347225453571 0.87309036 6.35000030160882 -1.34229977275582 -1.66341536900799 1 -7.21279194058922 -1.47258275594392 -1.55687143994742 0.49480167 6.86540765508935 -1.43773316028866 -1.59313436766982 0.62110125 6.47215623041091 -1.38826972393927 -1.62407402313937 0.87370042 6.35000030160882 -1.37436364727877 -1.63515800666583 1 -7.21279194058922 -1.51069777575429 -1.51667349203812 0.49756248 6.86655895414403 -1.47453081803645 -1.5563404129222 0.62317186 6.47274085343868 -1.42286924658266 -1.59136431758575 0.87439062 6.35000030160882 -1.40830251989078 -1.60375210217413 1 -7.21279194058922 -1.54893282057036 -1.47370134799705 0.50055899 6.86779962320296 -1.51156425379545 -1.51705050505603 0.62541924 6.47337434346877 -1.45775088623945 -1.55652729193108 0.87513975 6.35000030160882 -1.44253690651682 -1.57034704858748 1 -7.21279194058922 -1.58571909731761 -1.42962715190364 0.50368224 6.86908299826392 -1.54733140149429 -1.47678756914364 0.62776168 6.47403347350008 -1.49151634084322 -1.52091579523962 0.87592056 6.35000030160882 -1.475700256092 -1.53624261796761 1 -7.21279194058922 -1.60913523842982 -1.40048629751953 0.50577362 6.86993686330448 -1.57018219857965 -1.45014558787822 0.62933021 6.47447418252101 -1.51314786087066 -1.49735467312053 0.8764434 6.35000030160882 -1.49696523310203 -1.51368582889622 1 -7.21279194058922 -1.63232690253136 -1.3705894570995 0.50794213 6.87081759834631 -1.5928833556579 -1.42280348357954 0.6309566 6.47493059054269 -1.53468508889363 -1.47318757997265 0.87698553 6.35000030160882 -1.51815295810839 -1.49055888279774 1 -7.21279194058922 -1.65327528952636 -1.34250516676557 0.51000127 6.87164958038583 -1.61345013063477 -1.39712308735978 0.63250095 6.47536345556325 -1.5542351238222 -1.45051674989585 0.87750032 6.35000030160882 -1.5373982540225 -1.46887876476799 1 -7.21279194058922 -1.66967245930518 -1.31972095268338 0.51168799 6.87232797241805 -1.62959583440165 -1.37629006137027 0.63376599 6.47571765358007 -1.56961360355264 -1.43214322202315 0.877922 6.35000030160882 -1.55254729874204 -1.45131826293392 1 -7.21279194058922 -1.68209263089511 -1.30199776284157 0.51301006 6.87285776844321 -1.64185193298378 -1.36008714160067 0.63475755 6.47599504259324 -1.58130299210786 -1.41786650934504 0.87825252 6.35000030160882 -1.56406762528922 -1.43768045428615 1 -7.21279194058922 -1.68905019022558 -1.29192861736331 0.51376492 6.87315959245755 -1.6487327983106 -1.35087229316299 0.63532369 6.47615332860076 -1.58788041142027 -1.40973964595904 0.87844123 6.35000030160882 -1.57055458359734 -1.42991536991733 1 -7.21279194058922 -1.69374917444877 -1.28506879603749 0.51428075 6.87336556046733 -1.65338963153179 -1.34458564086439 0.63571056 6.4762614526059 -1.59234291463223 -1.40418668869529 0.87857019 6.35000030160882 -1.57495915180654 -1.42460670166518 1 -7.21279194058922 -1.6985628086774 -1.27797754470067 0.51481539 6.87357876847746 -1.65816616375866 -1.33808353655555 0.63611154 6.47637348661122 -1.59692587484991 -1.39844110842239 0.87870385 6.35000030160882 -1.57948445502148 -1.41911327440426 1 -7.21279194058922 -1.70320018089766 -1.27108601537334 0.51533634 6.87378627548731 -1.66277581597761 -1.3317578832551 0.63650225 6.4764826176164 -1.60135773306041 -1.39284520015659 0.87883408 6.35000030160882 -1.58386336222947 -1.41376084415003 1 -7.21279194058922 -1.70780726511649 -1.26417925904529 0.51585979 6.87399452449721 -1.66736164519542 -1.32541411095379 0.63689484 6.47659224262161 -1.60577300927012 -1.38722996288988 0.87896495 6.35000030160882 -1.58822788543677 -1.40838893289488 1 -7.21279194058922 -1.71238402033387 -1.25725742671652 0.51638576 6.87420352950713 -1.67192475241216 -1.31905051565153 0.63728932 6.47670236162684 -1.61017466547919 -1.38159172562208 0.87909644 6.35000030160882 -1.59258151264356 -1.4029932126386 1 -7.21279194058922 -1.71693040754981 -1.25032067338704 0.51691425 6.87441327751709 -1.67646424362778 -1.3126683893484 0.63768569 6.47681297363209 -1.61456050968751 -1.37593300035331 0.87922856 6.35000030160882 -1.59692168984971 -1.39757660138132 1 -7.21279194058922 -1.7237009018714 -1.23989873889203 0.51771077 6.87472892453209 -1.68323658794944 -1.30306933189247 0.63828307 6.47697962164001 -1.62111680599891 -1.36741256194861 0.87942769 6.35000030160882 -1.60341384315807 -1.38941765499379 1 -7.21279194058922 -1.73039762918947 -1.22943681339511 0.51851359 6.87504649854717 -1.68995122426837 -1.29342190043424 0.63888519 6.47714751264798 -1.62763449530849 -1.3588392055414 0.8796284 6.35000030160882 -1.60987313446487 -1.38120483860371 1 -7.21279194058922 -1.73702035950404 -1.21893549589633 0.51932274 6.87536598956235 -1.69660858858458 -1.28372498597366 0.63949206 6.47731665065602 -1.63411536361631 -1.35021019813154 0.87983069 6.35000030160882 -1.61630172777021 -1.3729348442109 1 -7.21279194058922 -1.74356886781507 -1.2083953863957 0.52013824 6.87568738657761 -1.70320675089798 -1.27398127051086 0.64010368 6.47748703566411 -1.64055498392218 -1.34153026371927 0.88003456 6.35000030160882 -1.62269449707385 -1.36461311081564 1 -7.21279194058922 -1.7500646101236 -1.19784555089461 0.52095756 6.87600969659292 -1.70976512620948 -1.26421567304702 0.64071817 6.47765813867224 -1.6469706452269 -1.3328188553055 0.88023939 6.35000030160882 -1.62906811837658 -1.35625731041876 1 -7.21279194058922 -1.75595167940323 -1.18813892243357 0.52171443 6.87630691060704 -1.71572344549249 -1.25521974461974 0.64128582 6.47781613067974 -1.65281526050451 -1.32478453792389 0.88042861 6.35000030160882 -1.6348793416526 -1.34854786705258 1 -7.21279194058922 -1.79585494529853 -1.12144109426559 0.5269801 6.87836036270457 -1.75634201242177 -1.19311739567003 0.64523508 6.47891342573186 -1.69291481440914 -1.26904359527633 0.88174503 6.35000030160882 -1.67483234755026 -1.29497145550784 1 -7.21279194058922 -1.83337161008047 -1.05109704792443 0.53269208 6.88056086180909 -1.7952353142691 -1.12708305853357 0.64951906 6.48010002778822 -1.73211287127094 -1.20928847743812 0.88317302 6.35000030160882 -1.71413296241694 -1.23737758477228 1 -7.21279194058922 -1.86656446965705 -0.98098678697437 0.53855636 6.88279150591504 -1.83028678593395 -1.06071362538119 0.65391727 6.4813142918459 -1.76820974198545 -1.14872232956138 0.88463909 6.35000031260882 -1.75055322114681 -1.17883401099161 1 -7.21279194058922 -1.89891027019339 -0.902836150332414 0.5453101 6.88532523203538 -1.86512566858871 -0.986131093578711 0.65898257 6.48270773091208 -1.80492805872948 -1.08010237930211 0.88632752 6.35000030060882 -1.78784490891807 -1.11232406783256 1 -7.21279194058922 -1.90642570455036 -0.884124621733664 0.54695552 6.88593677706443 -1.87329119197655 -0.968169070265561 0.66021664 6.48304641592817 -1.81362400814251 -1.06346597951192 0.88673888 6.35000030160882 -1.79670454133888 -1.09616322806496 1 -7.21279194058922 -1.91373568989756 -0.8653580443223 0.54861903 6.88655279909369 -1.8812737323557 -0.950116826968126 0.66146428 6.48338850394441 -1.82217549954869 -1.04670865971599 0.88715476 6.35000030060882 -1.8054316117534 -1.0798727922912 1 -7.21279194058922 -1.93071353370397 -0.82038468641618 0.55265511 6.88803805716424 -1.89994085324234 -0.906693060915608 0.66449133 6.48421716098377 -1.84233742050633 -1.00622788379326 0.88816378 6.35000030260882 -1.82605691673305 -1.04046361441937 1 -7.21279194058922 -1.94647757645272 -0.775094034394989 0.55680061 6.88955008523605 -1.91750861407677 -0.862745514928211 0.66760046 6.48506632302411 -1.86161538542198 -0.965034393986672 0.88920015 6.35000030060882 -1.84586494567388 -1.0002873635111 1 -7.21279194058922 -1.96211743819557 -0.725654608756743 0.56142381 6.89122045431539 -1.93521102491759 -0.814529736028085 0.67106786 6.48601101106898 -1.88140184536179 -0.919586921338033 0.89035595 6.35000030360882 -1.86629662664433 -0.955879660721845 1 -7.21279194058922 -1.97940782101682 -0.664438587379138 0.56729435 6.893317542415 -1.95515730886498 -0.754491761226434 0.67547076 6.48720704012579 -1.90419501544441 -0.862631920822816 0.89182359 6.35000030160882 -1.88997241576887 -0.900109907012924 1 -7.21279194058922 -1.99133452258331 -0.618629322603315 0.57178807 6.89490485449039 -1.96914275752926 -0.709300353779957 0.67884105 6.48811990816914 -1.92048515821815 -0.819458602092193 0.89294702 6.35000030160882 -1.90698155157676 -0.857735863910265 1 -7.21279194058922 -2.00382574917661 -0.565059282488874 0.57716446 6.89678389257964 -1.98409092023926 -0.656188045687258 0.68287335 6.48920907422088 -1.93830261206443 -0.768412616827639 0.89429112 6.35000030160882 -1.92569673646568 -0.807535389635871 1 -7.21279194058922 -2.01617025276294 -0.503677672923405 0.58349476 6.89896874568342 -1.99928745796105 -0.594994305740712 0.68762107 6.49048729328159 -1.95698884495198 -0.709201234015249 0.89587369 6.35000030160882 -1.94547816440525 -0.749175207583911 1 -7.21279194058922 -2.0265826262575 -0.442287516507529 0.59001339 6.90118789078882 -2.01257027259195 -0.533436166546857 0.69251004 6.49179883034388 -1.97394479875734 -0.649199362855314 0.89750335 6.35000030160882 -1.96359245826563 -0.689892949298155 1 -7.21279194058922 -2.03508360666128 -0.380954928294387 0.59672291 6.90344006189579 -2.02393154713159 -0.471591357339387 0.69754218 6.49314380940777 -1.98912675847845 -0.588479094961256 0.89918073 6.35000030160882 -1.97998559004426 -0.629757236271862 1 -7.21279194058922 -2.04169628297536 -0.319744240667036 0.60362593 6.90572396000427 -2.03336748957977 -0.409538590432038 0.70271945 6.49452235147324 -2.00249359911334 -0.527117169666721 0.90090648 6.35000030160882 -1.99460568073868 -0.568842395628563 1 -7.21279194058922 -2.04644597220096 -0.258717925178441 0.61072515 6.9080382811142 -2.04087854393652 -0.34735591380852 0.70804386 6.49593457454032 -2.01400961666032 -0.465191890105428 0.90268129 6.35000030160882 -2.00740638434668 -0.507224837511886 1 -7.21279194058922 -2.04936009633938 -0.19793652266148 0.61802328 6.9103817022255 -2.04646921020207 -0.285121749692556 0.71351746 6.497380590609 -2.02364242011785 -0.40278562933129 0.90450582 6.35000030160882 -2.01834437986621 -0.444986134795706 1 -7.21279194058922 -2.050468052392 -0.137458581608932 0.62552313 6.91275290333813 -2.05014811337681 -0.222913307217813 0.71914235 6.4988605096793 -2.03136553848468 -0.339981708208264 0.90638078 6.35000030160882 -2.0273825162955 -0.382209341503969 1 -7.21279194058922 -2.04980108436032 -0.0773406045034814 0.63322756 6.91515055045201 -2.05192785246134 -0.160807571267949 0.72492067 6.5003744337512 -2.03715626675973 -0.276866837790469 0.90830689 6.35000030160882 -2.03448725163295 -0.318982007460832 1 -7.21279194058922 -2.0473921572459 -0.0176370020477126 0.64113948 6.91757331756709 -2.05182495345645 -0.0988797975065381 0.73085461 6.50192246282473 -2.04099820994221 -0.213527961462033 0.91028487 6.35000030160882 -2.0396317388773 -0.255392437090489 1 -7.21279194058922 -2.04327582705039 0.0415999448658913 0.64926186 6.92001987168329 -2.04985974736311 -0.0372044473271163 0.7369464 6.50350468889988 -2.04287906803154 -0.150054644967213 0.91231547 6.35000030160882 -2.04279320202747 -0.191532650437312 1 -7.21279194058922 -2.03748811777549 0.10032011582495 0.65759776 6.92248889280056 -2.04605621418245 0.0241462190368838 0.74319832 6.50512119997666 -2.04279310202746 -0.0865358964902343 0.91439944 6.35000030160882 -2.04395595008269 -0.127494595025668 1 -7.21279194058922 -2.03006639242298 0.158475574327186 0.66615027 6.92497905891884 -2.04044188291578 0.0851012601720928 0.7496127 6.50677207505507 -2.04073885592989 -0.0230625182154108 0.91653757 6.35000030160882 -2.04310867804245 -0.063373067760059 1 -7.21279194058922 -2.02104923199468 0.216020584270427 0.67492253 6.92748906403806 -2.03304759056457 0.145592350945265 0.7561919 6.50845738813512 -2.03672153273908 0.040276079453011 0.91873063 6.35000030160882 -2.04024739590655 0.000738103995058057 1 -7.21279194058922 -2.0104763134925 0.272911619802606 0.68391778 6.93001760615816 -2.02390738413044 0.205552948613241 0.76293834 6.51017720521681 -2.03075065445548 0.10338954874074 0.92097945 6.35000030160882 -2.03537264767501 0.0647431624351351 1 -7.21279194058922 -1.99838829191835 0.32910736884176 0.69313929 6.93256340227908 -2.01305824661513 0.264919477312999 0.76985447 6.51193158530014 -2.02284233607985 0.166189778463591 0.92328482 6.35000030160882 -2.02849235534821 0.128548250745714 1 -7.21279194058922 -1.9848266812742 0.384568730516034 0.7025904 6.93512517340075 -2.00053993402054 0.323630528681625 0.7769428 6.51372057738511 -2.01301688861317 0.228588570687374 0.9256476 6.35000030160882 -2.01961894492675 0.19205851643229 1 -7.21279194058922 -1.96614899338706 0.452699748122083 0.71469553 6.93833829755337 -1.9829001001827 0.39595706262695 0.78602165 6.51599865149331 -1.99838156791803 0.305928396030818 0.92867388 6.35000030160882 -2.00606039428275 0.270962786250041 1 -7.21279194058922 -1.94101673819334 0.53275471061449 0.7296946 6.94221722373761 -1.95861032702899 0.481140171552931 0.79727095 6.51880082462641 -1.97711183690777 0.397570998303608 0.93242365 6.35000030060882 -1.98589130332477 0.364690056691847 1 -7.21279194058922 -1.9078436066177 0.623775000747721 0.74789857 6.94677921995429 -1.92587265047404 0.578129982129699 0.81092393 6.52217161978651 -1.94703825147935 0.502489894536988 0.93697464 6.35000030260882 -1.95680945794346 0.47225357529084 1 -7.21279194058922 -1.86485454657583 0.724528900333275 0.76969916 6.9520428432043 -1.88271813542431 0.685494116539222 0.82727437 6.52616555297622 -1.90578283451982 0.619106901355999 0.94242479 6.35000030060882 -1.91628365701859 0.5920591599213 1 -7.21279194058922 -1.81728047431619 0.821448151516692 0.79252588 6.95733426445563 -1.83433903312642 0.788784017855229 0.84439441 6.53029826817251 -1.85809152625461 0.731807170038974 0.94813147 6.35000030260882 -1.86887279776669 0.70812623748419 1 -7.21279194058922 -1.7654778748557 0.914371303470304 0.81640976 6.96264450170785 -1.7811713746011 0.887733515735077 0.86230732 6.53456945337538 -1.80443814870621 0.840106778102929 0.95410244 6.35000030060882 -1.8150406642098 0.819896683623001 1 -7.21279194058922 -1.70980088021118 1.00316732164789 0.84138281 6.96796488496056 -1.72365747486933 0.982129213448632 0.88103711 6.5389786175848 -1.74534151189927 0.943598028648499 0.9603457 6.35000030260882 -1.75530927037271 0.926891169014966 1 -7.21279194058922 -1.65059899139924 1.08773399866459 0.86747799 6.97328703021335 -1.66223963695214 1.07180589690805 0.90060849 6.54352506280075 -1.68134518885961 1.04194057648952 0.9668695 6.35000030060882 -1.69023573928189 1.02869898086058 1 -7.21279194058922 -1.5584267750213 1.20632143929719 0.90835484 6.98117315858792 -1.56598743038041 1.19766339688596 0.93126613 6.55052481813322 -1.57920575900825 1.1808549450876 0.97708871 6.35000030260882 -1.58549732230708 1.17314407372135 1 -7.21279194058922 -1.47453201303651 1.29793958164882 0.94490001 6.98779579890248 -1.47857271022843 1.29377007045078 0.95867501 6.55665999442462 -1.48596425957951 1.28544255805524 0.986225 6.35000029960882 -1.48956503675054 1.28150641286829 1 -7.21279194058922 -1.40344449766003 1.36623002689244 0.97581968 6.99310997815488 -1.40487304372789 1.36469978381976 0.98186476 6.56176269166699 -1.40756566485578 1.36157572767137 0.99395492 6.35000030660882 -1.40890616991945 1.36006180859947 1 -7.21279194058922 -1.34821673503686 1.41444126218235 1 6.99709403034412 -1.34787589902067 1.41444126218235 1 6.56569821085392 -1.34719422898829 1.41444126218235 1 6.35000030160882 -1.3468533929721 1.41444126218235 1 - -0 5 -0.29796632 1 -0.59593265 1 -0.89389897 1 -1.19186529 1 -1.48983162 1 -1.78779794 1 -2.08576426 1 -2.23474742 1 -2.53271375 1 -2.83068007 1 -2.97966323 1 -3.12864639 1 -3.27762955 1 -3.42661271 1 -3.57559588 1 -3.72457904 1 -3.8735622 1 -4.02254536 1 -4.17152852 1 -4.32051168 1 -4.46949485 1 -4.61847801 1 -4.76746117 1 -4.91644433 1 -5.06542749 1 -5.36339381 1 -5.8103433 1 -5.88483488 1 -6.07106383 1 -6.10830962 1 -6.14555541 1 -6.1828012 1 -6.89047122 1 -6.92771701 1 -6.9649628 1 -7.03945438 1 -7.11394596 1 -7.15119175 1 -7.16981465 1 -7.30017491 1 -7.32810926 1 -7.3560436 1 -7.39328939 1 -7.51433821 1 -7.56089545 1 -7.59814124 1 -7.63538703 1 -7.67263282 1 -7.72151792 1 -7.7471244 1 -7.75489856 1 -7.76489392 1 -7.77377867 1 -7.78266343 1 -7.79154819 1 -7.80043295 1 -7.80931771 1 -7.81820247 1 -7.82708723 1 -7.8537415 1 -7.86262626 1 -7.87151102 1 -7.88039578 1 -7.90705006 1 -7.91149244 1 -8.20913186 1 -8.22690137 1 -8.24467089 1 -8.28020993 1 -8.29797944 1 -8.31574896 1 -8.4579051 1 -8.49344414 1 -8.52898317 1 -8.60006124 1 -8.67113931 1 -8.74221738 1 -8.81329545 1 -8.88437353 1 -8.9554516 1 -9.02652967 1 -9.09760774 1 -9.16868581 1 -9.23976388 1 -9.31084195 1 -9.38192002 1 -9.45299809 1 -9.52407616 1 -9.59515423 1 -9.6662323 1 -9.73731037 1 -9.80838844 1 -9.87946651 1 -10.02162265 1 -10.16377879 1 -10.30593493 1 -10.44809107 1 -10.59024722 1 -10.73240336 1 -10.8745595 1 -11.01671564 1 -11.44318406 5 - -0 3 -0.5 1 -1 3 - -9 0 0 0 0 3 2 13 4 10 3 18.7445520703184 -16.2691444627429 0.30242823434457 17.4971732610711 -13.7852654247649 0.0998317797017549 15.0024156525765 -8.81750736180911 -0.305361129593875 13.7550368433292 -6.33362832883119 -0.507957584226689 -18.7583363009731 -16.2691455127429 0.304311143584003 17.5153967719367 -13.785266824765 0.102321118299992 15.0295177038638 -8.81750943980921 -0.30165893222803 13.7865781648273 -6.3336307468313 -0.503648957492041 -18.7992809629179 -16.269148442743 0.309662271148168 17.5695280345078 -13.7852706947652 0.109396452826052 15.1100221676875 -8.81751518880948 -0.291135183808179 13.8802692292774 -6.33363743883162 -0.491401002120294 -18.84185401494 -16.2691508227432 0.314492708177601 17.6258116971811 -13.7852738347653 0.115779607059236 15.1937270716633 -8.8175198628097 -0.281646595197495 13.9776847539044 -6.33364287683188 -0.48035969631586 -18.8877347071192 -16.2691528827433 0.319133360768021 17.6864690000622 -13.7852765547655 0.121916604180728 15.283937585948 -8.81752391580989 -0.272516908983858 14.082671878891 -6.3336475948321 -0.469733665581151 -18.944933569836 -16.2691550427434 0.324472404451612 17.7620872836538 -13.7852794247656 0.12897472174597 15.3963947012895 -8.81752817481009 -0.262020643675312 14.2135484051073 -6.33365255083234 -0.457518326380953 -19.047023094685 -16.2691567627434 0.331604279550357 17.8970587600646 -13.7852816947657 0.138403684163822 15.5971300908239 -8.81753154981025 -0.247997506619249 14.4471657562035 -6.33365647883253 -0.441198102015784 -19.1322040487309 -16.2691554627434 0.334513926468558 18.0096681254133 -13.7852799747656 0.14225101627656 15.7645962587781 -8.81752900281013 -0.242274804087435 14.6420603254605 -6.33365351483238 -0.434537714289433 -19.1980011118561 -16.2691533227433 0.335486525904754 18.0966609195452 -13.7852771447655 0.143536433647614 15.8939805249235 -8.81752478380993 -0.240363750856665 14.7926403326127 -6.33364860383215 -0.432313843113805 -19.2413995939174 -16.2691515927432 0.335780929208738 18.1540290222701 -13.7852748647654 0.143926154446125 15.9792878889754 -8.81752139180977 -0.2397833950791 14.8919173173281 -6.33364465683196 -0.431638169831712 -19.3040323068923 -16.269148102743 0.33508453020566 18.2368391662033 -13.7852702347652 0.143005031422374 16.1024528648254 -8.81751451380945 -0.241153966144198 15.0352597141365 -6.33363665183158 -0.433233464937484 -19.3473811189512 -16.2691449827429 0.333823109855746 18.2941463689253 -13.785266114765 0.141337528893172 16.1876768588734 -8.81750837980915 -0.243633633051976 15.1344420988474 -6.33362951383125 -0.43611921401455 -19.3666489898664 -16.2691434527428 0.333108428571801 18.3196195401352 -13.7852640947649 0.140392680868294 16.2255606506727 -8.81750538180901 -0.245038814538719 15.1785312109415 -6.33362602483108 -0.437754562232225 - -0 4 -0.06695952 1 -0.19874124 1 -0.20615931 1 -0.28878375 1 -0.47512806 1 -0.69874124 2 -0.79146093 1 -0.90736053 1 -1.00016043 4 - -0 3 -5.35089702 1 -10.70179404 3 - -9 0 0 0 0 3 2 14 4 11 3 13.7551732833356 -6.33367429383337 -0.507938351705776 13.2172205577843 -5.13568794493208 -0.626233644924501 12.1413151166815 -2.73971524812949 -0.86282423137195 11.6033624011301 -1.54172890022819 -0.981119524590675 -13.8487526177804 -6.33368146883371 -0.49515648972867 13.3251534529108 -5.13408364685588 -0.611552162677168 12.2779551131715 -2.7348880029002 -0.844343508574163 11.7543559483019 -1.53529018092237 -0.96073918152266 -13.946053502402 -6.33368741083399 -0.483559831317858 13.4373873882416 -5.13245597177857 -0.598255595735615 12.4200551699209 -2.72999309466771 -0.827647124571127 11.9113890557606 -1.52876165561228 -0.942342888988883 -14.0871638491043 -6.3336937518343 -0.46927762028949 13.6001138359707 -5.13016742766987 -0.581923291859872 12.6260138297034 -2.72311477934101 -0.807214635000636 12.1389638165698 -1.51958845517658 -0.919860306581018 -14.1814603935832 -6.33369725283446 -0.460554341775156 13.7088657111362 -5.12866043159829 -0.571959959706639 12.7636763562421 -2.71858678912594 -0.794771195569604 12.291081673795 -1.51354996788976 -0.906176813501087 -14.3197623001522 -6.33370031183461 -0.45007511454742 13.8684021487137 -5.12651688149647 -0.56002712134986 12.9656818358368 -2.71215002082021 -0.779931134954739 12.5143216743984 -1.50496659148207 -0.889883141757179 -14.461997306908 -6.33370123583465 -0.441773539863116 14.0324498765056 -5.12439065839548 -0.550625048003285 13.1733550257008 -2.70576950351715 -0.768328064293623 12.7438075952984 -1.49645892507798 -0.877179572443792 -14.6049677636987 -6.33369993283459 -0.435917894104988 14.1973643243386 -5.12233486229784 -0.544049363630957 13.3821574356183 -2.69960472122434 -0.760312302662895 12.9745539962582 -1.48823965068759 -0.868443772188864 -14.7005230482373 -6.33369756583448 -0.433671045288268 14.3075330395713 -5.12102093223543 -0.541580913203712 13.5215530222393 -2.69566766403734 -0.757400649044599 13.1285630035733 -1.48299103043829 -0.865310516960042 -14.7960859627763 -6.33369444883433 -0.432259705141233 14.4177110148045 -5.11973741717447 -0.540073261732102 13.6609611088608 -2.69182335285474 -0.75570037491384 13.282586160889 -1.47786632019488 -0.863513931494709 -14.891557237311 -6.33369059983415 -0.431668949883174 14.5278180000343 -5.11848420411494 -0.539511857455437 13.8003395354809 -2.68807141267654 -0.755197672619963 13.4366003082042 -1.47286501695733 -0.863040580202226 -15.0348614941176 -6.33368260583377 -0.433253927668456 14.693063507883 -5.1166999900302 -0.541519173950779 14.009467525414 -2.68273475942306 -0.758049666505425 13.6676695291794 -1.46575214461949 -0.866314912787748 -15.1305883186643 -6.33367577683344 -0.435972591527586 14.8035063031288 -5.11557325697668 -0.544764356224917 14.1493422820577 -2.67936821926316 -0.76234788560958 13.8222602665221 -1.46126570040639 -0.871139650306911 -15.178436250937 -6.33367198983326 -0.437746756651854 14.8586968057502 -5.11502808695079 -0.546862668744582 14.2192179353766 -2.67774027918583 -0.765094492920037 13.8994785001898 -1.45909637530336 -0.874210405012764 - -0 4 -0.19866102 1 -0.20607909 1 -0.29814751 1 -0.39778789 1 -0.49780437 1 -0.59782084 1 -0.69866102 2 -0.79857637 1 -0.89928819 1 -1 4 - -0 3 -1.38127666 1 -2.76255331 3 - -9 0 0 0 0 3 2 31 4 29 3 18.6177012342933 -16.2691402927427 0.240318612104521 17.329478313106 -13.7852610447647 0.017715015531418 14.7530324907314 -8.81750256380888 -0.427492177594788 13.4648095695441 -6.33362332183095 -0.650095774167891 -18.6202984044167 -16.2691398727426 0.243840170321786 17.3321907732348 -13.7852614447648 0.0227678249014136 14.7559755208712 -8.81750458180897 -0.419376865929331 13.4678678896894 -6.33362614983109 -0.640449211339704 -18.6258652646811 -16.2691391127426 0.25080230947247 17.3386552235419 -13.7852616047648 0.0327259340443984 14.7642351512635 -8.81750659680907 -0.403426816831745 13.4770251201243 -6.33362909183123 -0.621503192259816 -18.6325841650002 -16.2691384527426 0.257960568982469 17.3474217539583 -13.7852607747647 0.0425289345700159 14.7770969518744 -8.81750543480901 -0.38833433426489 13.4919345408325 -6.33362776283116 -0.603765968687343 -18.6373554452268 -16.2691380727426 0.262590128862361 17.3538282942626 -13.7852599947647 0.0485226308647012 14.786773982334 -8.81750382280894 -0.379612365130619 13.5032468213698 -6.33362573883107 -0.593679863128279 -18.6404890053757 -16.2691378527425 0.265511554271122 17.3580750844643 -13.7852594347647 0.052225352240571 14.7932472526415 -8.81750260880888 -0.37434705183053 13.5108333417301 -6.33362419383099 -0.587633253851081 -18.6435006555187 -16.2691376827425 0.268120105295021 17.3622120646608 -13.7852588947646 0.0554546675039552 14.7996348729449 -8.81750132080882 -0.369876208068176 13.518346272087 -6.33362253383091 -0.582541645859242 -18.6468942456799 -16.2691375227425 0.270891997776679 17.3668998048834 -13.7852583347646 0.0588556948354954 14.8069109032905 -8.81749994780876 -0.365216911076872 13.526916452494 -6.33362075583083 -0.577253214018055 -18.6487194357666 -16.2691374527425 0.272314874894262 17.3694300450036 -13.7852580547646 0.0605979250182469 14.8108512534777 -8.81749926580872 -0.362835974753783 13.5315618627147 -6.33361986983079 -0.574552924629798 -18.6505503258536 -16.2691373927425 0.273687459689456 17.3719704751243 -13.7852578147646 0.062279827898133 14.8148107736657 -8.81749865580869 -0.360535435664514 13.5362309229364 -6.33361907683075 -0.571943067455837 -18.6521133059278 -16.2691373427425 0.274840819244238 17.3741395952273 -13.7852576147646 0.0636910559151627 14.8181921838263 -8.81749815780867 -0.358608470762988 13.5402184731258 -6.33361842883072 -0.569758234102063 -18.6552853560785 -16.2691372727425 0.277089220751031 17.3785405154363 -13.7852572747646 0.0664332813954114 14.8250508341521 -8.81749727980863 -0.354878597275828 13.54830599351 -6.33361728283066 -0.565534536611448 -18.6587524162431 -16.2691372227425 0.279366649359203 17.3833310056639 -13.7852570247645 0.0691723280955091 14.8324881945054 -8.8174966218086 -0.351216314461879 13.5570667839261 -6.33361642083062 -0.561410635735573 -18.6637665864813 -16.2691372027425 0.282433546044873 17.3902079759905 -13.7852568447645 0.0727863671571668 14.8430907550089 -8.81749612380857 -0.346507990598246 13.5695321445182 -6.33361576283059 -0.556155169465952 -18.6687341567173 -16.2691372427425 0.285192079515896 17.3969642563114 -13.7852569047645 0.0759679023282816 14.8534244454998 -8.81749620980858 -0.342480452056948 13.5816545450939 -6.3336158638306 -0.551704629264562 -18.6744881669906 -16.2691373727425 0.287987551998674 17.4047306766803 -13.7852573247646 0.0792113110423352 14.8652156960598 -8.81749722480862 -0.338341170890342 13.5954582057496 -6.33361717383066 -0.547117411856681 -18.6782605771697 -16.2691375027425 0.289648343587557 17.4098026369212 -13.7852577747646 0.0811867241661623 14.8728867764242 -8.81749832880868 -0.335736514666628 13.6044288461757 -6.33361860583073 -0.544198134078023 -18.681949687345 -16.2691376427425 0.291166970869688 17.4147527371563 -13.7852583147646 0.0830406451342188 14.8803588467791 -8.81749967980874 -0.33321200633672 13.6131618965905 -6.33362035983081 -0.54133833208219 -18.686287057551 -16.2691378327425 0.292818185188117 17.4205580774321 -13.7852590747646 0.0851174225328604 14.8891001371943 -8.81750156980883 -0.330284102807652 13.6233711670754 -6.33362281583093 -0.537984865472909 -18.6925943678506 -16.2691381727426 0.294920136737954 17.4289467678305 -13.7852603247647 0.0878494822426263 14.9016515777904 -8.81750461980898 -0.326291826758029 13.6380039777704 -6.33362676783111 -0.533362481263357 -18.6974175980796 -16.2691384927426 0.296262409461709 17.435294278132 -13.7852612847647 0.0896311377172504 14.9110476282367 -8.81750685380908 -0.323631405791666 13.6489243082891 -6.33362963983125 -0.530262677546124 -18.701068188253 -16.2691387627426 0.297169175854778 17.4400602883584 -13.7852619347648 0.0908208745937599 14.9180444985691 -8.81750829580915 -0.321875727918276 13.6570365986744 -6.33363147483134 -0.528224029169294 -18.7033320583606 -16.2691389327426 0.297712498160584 17.4430146584987 -13.7852623347648 0.0915303367674575 14.922379848775 -8.81750914280919 -0.320833986028796 13.6620624489131 -6.33363254783139 -0.527016147431923 -18.7071015885396 -16.2691392227426 0.298548915300312 17.4479303587322 -13.7852629347648 0.0926127374988688 14.9295878991173 -8.81751035980925 -0.319259618094017 13.6704166693099 -6.33363407283146 -0.525195795895461 -18.7117872887622 -16.2691396127426 0.299476601924375 17.4540422790225 -13.7852636047649 0.0938254498764695 14.9385522695431 -8.81751157980931 -0.317476854239341 13.6808072598034 -6.33363556983153 -0.523128006287246 -18.7172175590201 -16.2691400927427 0.300395867938037 17.4611353193594 -13.7852642547649 0.09508068571609 14.948970830038 -8.81751257180935 -0.315549678737805 13.6928885903773 -6.33363673083159 -0.520864860959752 -18.7218854292418 -16.2691405427427 0.301035421558415 17.46725491965 -13.7852647047649 0.0960665943929182 14.9579939004666 -8.81751304380938 -0.313871059958075 13.7033633908748 -6.33363721083161 -0.518839887123571 -18.7248479293825 -16.2691408427427 0.301370188724315 17.4711538198352 -13.7852649447649 0.0966679633014817 14.9637656007407 -8.81751315480938 -0.312736487524185 13.7100714911934 -6.33363725983161 -0.517438712957019 -18.732058989725 -16.2691415727427 0.302126715100248 17.4806542102865 -13.7852654647649 0.0981055252097622 14.9778446414094 -8.81751323080939 -0.30993685456121 13.7264398519709 -6.33363711583161 -0.513958044451696 -18.7384215700272 -16.2691423027428 0.302450094075608 17.4890912006872 -13.7852655647649 0.0992046250919666 14.9904304720072 -8.81751208480933 -0.307286312875316 13.7411001026672 -6.33363534583152 -0.510531781868957 -18.7446509103231 -16.2691430827428 0.30243477163488 17.4973043310773 -13.7852647247649 0.099845824882422 15.0026111725858 -8.81750803280914 -0.305332068632494 13.75526459334 -6.33362968383125 -0.507921015384952 - -0 4 -0.09024672 1 -0.18349731 1 -0.20068779 1 -0.22510119 1 -0.2705385 1 -0.28222558 1 -0.31500417 1 -0.31810221 1 -0.3293363 1 -0.3550207 1 -0.3982536 1 -0.41483775 1 -0.47629892 1 -0.51546084 1 -0.54650093 1 -0.56081663 1 -0.59701884 1 -0.64099837 1 -0.69513353 1 -0.69696796 1 -0.71554896 1 -0.74137678 1 -0.77402315 1 -0.81142183 1 -0.8526086 1 -0.86975827 1 -0.87223775 1 -1.0006874 4 - -0 3 -23.12299448 1 -46.24598896 3 - -9 0 0 0 0 3 3 19 33 17 31 19.4649687145364 -16.2690729827395 0.155572182299282 19.4383240532708 -16.2690729127395 0.155925567686067 19.3783694704231 -16.2690723727394 0.15621997389005 19.3050875669424 -16.2690712227394 0.156128143365689 19.2451328240947 -16.2690704527393 0.156501618733428 19.1960397617629 -16.2690699827393 0.157155131684468 19.152039759673 -16.2690698827393 0.158326525030106 19.0958831370057 -16.2690702727393 0.16077116238622 19.0512026348835 -16.2690711127394 0.163627565061892 19.0116798130063 -16.2690724827394 0.16726097540447 18.9968209923005 -16.2690731027395 0.16880633010787 18.9541744602749 -16.2690749627396 0.173376626924947 18.9143585983838 -16.2690775927397 0.179170758230154 18.8725101763961 -16.2690781327397 0.182217963684888 18.8556045855931 -16.2690783027397 0.183388212280472 18.8326370245022 -16.2690781327397 0.184446664990746 18.8112069034843 -16.2690775827397 0.184985178986324 18.7990130629052 -16.2690772027397 0.185225269537728 18.7909728725233 -16.2690769127396 0.185346944143507 18.7816649620812 -16.2690765427396 0.185434786117679 18.7698980415223 -16.2690760327396 0.185534242252403 18.7561294408683 -16.2690754127396 0.185658239418293 18.7417047001832 -16.2690749727396 0.186282049827922 18.732057689725 -16.2690748227396 0.186999616222005 18.7190712991081 -16.2690748027396 0.188340101045674 18.7006776382345 -16.2690753027396 0.191324906077445 18.6851232574957 -16.2690766327396 0.195669437073799 18.6691777067383 -16.2690786327397 0.201363302914243 18.6606987863356 -16.2690800827398 0.205167473044932 18.6507599658635 -16.2690825227399 0.211047813654233 18.6374974252336 -16.2690861027401 0.219520027926641 18.6257833946772 -16.2690910827403 0.230482785097344 18.6177078042936 -16.2690957227405 0.240354853816242 -19.4620202243963 -16.2690737127395 0.160892476841982 19.4355596131395 -16.2690736827395 0.161307570771698 19.3760187603115 -16.2690732127395 0.161745475152497 19.3032420168548 -16.2690721427394 0.161814046885754 19.2436993340266 -16.2690714127394 0.162287220178229 19.1949433717108 -16.2690709827394 0.163003467872249 19.1512459396353 -16.2690708727394 0.164203269379236 19.0954761769864 -16.2690712527394 0.166644454165186 19.0511035248788 -16.2690720427394 0.169460988038965 19.0118509230144 -16.2690733527395 0.173016635837849 18.9970932923135 -16.2690739427395 0.17452601363954 18.9547367403016 -16.2690757127396 0.17898791994147 18.9151874284231 -16.2690782327397 0.184624793339207 18.8736292164492 -16.2690787027397 0.1875869242099 18.8568410156518 -16.2690788527397 0.188724298963923 18.8340344245686 -16.2690786527397 0.189751554312715 18.8127547935579 -16.2690780927397 0.190271561467414 18.8006465229827 -16.2690777027397 0.190502522768384 18.7926627126035 -16.2690774127397 0.190618983243915 18.7834199021645 -16.2690770327397 0.190701944347856 18.7717351916095 -16.2690765327396 0.190795230142287 18.7580626109601 -16.2690759027396 0.190910932257782 18.7437390602798 -16.2690754527396 0.191510163486244 18.7341600998248 -16.2690752827396 0.192201845289097 18.7212658892124 -16.2690752427396 0.193495836030559 18.7030021783449 -16.2690757027396 0.196381012377597 18.6875466676108 -16.2690769627397 0.200584823007267 18.6716901468576 -16.2690788627397 0.206096011329035 18.6632514564568 -16.2690802527398 0.209779028963969 18.6533477559864 -16.2690826027399 0.21547368350445 18.6401270253585 -16.2690860427401 0.223678914114178 18.6284214448025 -16.2690908427403 0.234299087538609 18.6202961544166 -16.2690953127405 0.243862286492837 -19.456013454111 -16.2690752127396 0.171731171386793 19.4299365928724 -16.2690752427396 0.17226588859219 19.3712583800854 -16.2690749327396 0.172982426556224 19.2995349266787 -16.2690740427395 0.173361023724206 19.2408515238914 -16.2690734127395 0.174023599155677 19.192798481609 -16.2690730227395 0.174856428765234 19.1497319595634 -16.2690729327395 0.176104044864493 19.0947688869528 -16.2690732627395 0.178525357359499 19.0510381448757 -16.2690739727395 0.181250448508934 19.0123491230381 -16.2690751627396 0.184638607609863 18.9978025423472 -16.2690756927396 0.186071277747911 18.9560509203641 -16.2690772927397 0.190302562958886 18.917057928512 -16.2690795827398 0.195609862830969 18.8761047465668 -16.2690799227398 0.198389097702976 18.8595612757811 -16.2690800227398 0.199455632383634 18.8370901847137 -16.2690797727398 0.200414089249158 18.8161241837179 -16.2690791827398 0.200891503401834 18.8041942831513 -16.2690787827397 0.201101082821788 18.7963279627776 -16.2690784927397 0.201205084856728 18.7872208623451 -16.2690781127397 0.201275975070095 18.7757075217982 -16.2690775927397 0.201353999823801 18.7622350911583 -16.2690769627397 0.201449651708345 18.748122460488 -16.2690764927396 0.201995512494272 18.7386853100398 -16.2690763027396 0.202632259564515 18.7259831494364 -16.2690762227396 0.203828572091337 18.7079902285818 -16.2690765827396 0.206506582828536 18.6927414278575 -16.2690777027397 0.210420050454416 18.6770718971133 -16.2690794127398 0.215555202978322 18.6687182267165 -16.2690806727398 0.218989270191432 18.6588898662497 -16.2690828227399 0.224303015863821 18.645759455626 -16.2690859827401 0.231960787337546 18.6340760250711 -16.2690904127403 0.241879614608665 18.6258536746805 -16.2690945427405 0.250810657642866 -19.4494429037989 -16.2690768527396 0.183587167219922 19.4238052125812 -16.2690769627397 0.184238688690868 19.366114299841 -16.2690768427396 0.185228407397877 19.2955964064916 -16.2690761427396 0.185907500190132 19.237896603751 -16.2690756327396 0.186745649799942 19.1906482515068 -16.2690753127396 0.187680122914327 19.1483039394956 -16.2690752427396 0.188956844974968 19.0942641669288 -16.2690755427396 0.191326815377536 19.0512681748866 -16.2690761727396 0.1939283133411 19.0132245430797 -16.2690772227397 0.197112353402334 18.9989197124002 -16.2690777027397 0.198453243316023 18.95786104045 -16.2690791227398 0.202409654393942 18.9195059086283 -16.2690811627399 0.207335228287894 18.879245076716 -16.2690813727399 0.209892312519349 18.8629816459435 -16.2690814227399 0.210872438205903 18.8408942448944 -16.2690811227399 0.211743551417279 18.8202869239156 -16.2690805127398 0.212163098567206 18.8085609733587 -16.2690801027398 0.212342870765745 18.8008290529914 -16.2690798127398 0.212429011379836 18.7918771625662 -16.2690794227398 0.212481792082343 18.7805598620287 -16.2690789027397 0.212536919134962 18.7673164013997 -16.2690782627397 0.212603372378118 18.7534449907408 -16.2690777727397 0.213083251240911 18.7441699903003 -16.2690775627397 0.213654830488059 18.7316873397074 -16.2690774327397 0.214737474109482 18.7140040088675 -16.2690776927397 0.217179193715458 18.6989929881545 -16.2690786627397 0.220766622005851 18.6835403574205 -16.2690801727398 0.225481500889796 18.6752864970285 -16.2690813027399 0.228638330329737 18.665548906566 -16.26908324274 0.233529368222049 18.6525286059475 -16.2690860927401 0.240580109966942 18.6408803153943 -16.2690901227403 0.249723872481247 18.6325611049991 -16.2690938827405 0.257956703852285 -19.4450201635889 -16.2690779527397 0.191567609028973 19.4196860223855 -16.2690781227397 0.192292173823388 19.3626775096778 -16.2690781227397 0.193453220928535 19.2929928863679 -16.2690775727397 0.194319238519668 19.2359730036596 -16.2690771527397 0.195263016154495 19.1892808914419 -16.2690768827397 0.196255627201642 19.1474357894544 -16.2690768227396 0.197542727272776 19.0940342269179 -16.2690771127397 0.199866379603143 19.0515460948998 -16.2690776927397 0.202375324082312 19.0139486831141 -16.2690786527397 0.205413663146625 18.9998110124426 -16.2690790927398 0.206689647347231 18.9592315305151 -16.2690804027398 0.210452057045936 18.9213177387143 -16.2690822727399 0.215112257377283 18.8815354068248 -16.2690824027399 0.217511035311219 18.8654655060615 -16.2690824127399 0.218429454844842 18.843643195025 -16.2690820827399 0.219236974473197 18.823283654058 -16.2690814627399 0.219613091551062 18.8116986235077 -16.2690810527399 0.219770250678526 18.8040595431449 -16.2690807427398 0.219842686891967 18.7952149127248 -16.2690803527398 0.219881329293802 18.7840330621937 -16.2690798427398 0.219918579225572 18.7709478315721 -16.2690792027398 0.219962492177657 18.7572430809212 -16.2690787027397 0.220394938038197 18.748080080486 -16.2690784727397 0.220920635303167 18.7357490399003 -16.2690783127397 0.221924056730827 18.7182795590705 -16.2690785027397 0.224202879949065 18.7034333583654 -16.2690793727398 0.227567492008875 18.6881317776386 -16.2690807527398 0.231995926159215 18.6799478672499 -16.2690817927399 0.2349641881402 18.6702747967904 -16.26908358274 0.239568293278883 18.6573332261757 -16.2690862327401 0.246207182654213 18.6457130456238 -16.2690899927403 0.25482610341359 18.6373324252257 -16.2690935127404 0.262586288212179 -19.4421655334533 -16.2690786627397 0.196718548053629 19.4170289822593 -16.2690788727397 0.197488196720186 19.3604646695727 -16.2690789627397 0.198755188350364 19.2913224562886 -16.2690785027397 0.199736186276959 19.2347451736013 -16.2690781327397 0.200743502424804 19.1884151714008 -16.2690778927397 0.201769839893553 19.1468950394287 -16.2690778527397 0.203060233904843 19.093908906912 -16.2690781327397 0.205349645433584 19.0517513649096 -16.2690786827397 0.207795392689751 19.0144444531376 -16.2690795927398 0.210736620789452 19.0004156124713 -16.2690800027398 0.211969556398013 18.9601481105587 -16.2690812327399 0.215603430770613 18.9225216787715 -16.2690830027399 0.220089232663677 18.8830508168967 -16.2690830727399 0.222382590672606 18.8671068861395 -16.2690830627399 0.223259873084274 18.8454571151111 -16.2690827227399 0.224024572420596 18.8252588441518 -16.2690820827399 0.22437100275705 18.8137655336059 -16.2690816727399 0.224512624353777 18.8061868832459 -16.2690813727399 0.224575593766768 18.7974120528291 -16.2690809727398 0.224604390668136 18.7863183723022 -16.2690804627398 0.224629191299314 18.7733361316856 -16.2690798227398 0.224657489240658 18.7597398510398 -16.2690793127398 0.225058203919691 18.750649750608 -16.2690790727398 0.225553541723218 18.738417360027 -16.2690788927397 0.226504828208402 18.7210870692039 -16.2690790427398 0.228677089801578 18.7063482485038 -16.2690798527398 0.231896646664499 18.6911452177817 -16.2690811427399 0.236138883735995 18.6830070473952 -16.2690821227399 0.238984713421164 18.6733763369377 -16.26908382274 0.243402731581009 18.6604865563255 -16.2690863427401 0.249774591173656 18.6488854557745 -16.2690899327403 0.258053597046888 18.6404659953746 -16.2690932927404 0.26550772764094 -19.4379463232529 -16.2690797127398 0.204331732465236 19.413105532073 -16.2690799827398 0.205161766284661 19.3572061294179 -16.2690802027398 0.206571284211609 19.2888758461724 -16.2690798827398 0.207705038715459 19.2329610935166 -16.2690796027398 0.208792204287097 19.1871731213418 -16.2690794127398 0.209856875207666 19.1461394393928 -16.2690793927398 0.211141817138698 19.0937751769056 -16.2690796627398 0.21336744839441 19.0521124949267 -16.2690801627398 0.215709303175642 19.0152404731754 -16.2690809927398 0.218497696068083 19.0013745725168 -16.2690813727399 0.219663502233456 18.9615741506264 -16.2690825027399 0.223097340506555 18.9243780788597 -16.26908411274 0.227315937346927 18.8853734170071 -16.26908411274 0.229443655147988 18.8696180362587 -16.26908407274 0.230256167446581 18.8482264752427 -16.26908370274 0.23095219943964 18.8282695542948 -16.2690830627399 0.231249735143773 18.8169134937554 -16.2690826427399 0.231365536279273 18.8094252733997 -16.2690823327399 0.23141262993151 18.8007549229879 -16.2690819427399 0.231424692372083 18.7897931924672 -16.2690814227399 0.231428332282255 18.7769651018579 -16.2690807827398 0.23143031790235 18.7635311512199 -16.2690802627398 0.231780750918994 18.7545501307933 -16.2690800127398 0.232228958010283 18.7424653802193 -16.2690798127398 0.233100152451663 18.725343359406 -16.2690798927398 0.235110606537154 18.7107654887136 -16.2690806027398 0.238112011639713 18.6957104879986 -16.2690817727399 0.242075066677948 18.6876412176153 -16.2690826627399 0.244737749564419 18.6780747171609 -16.26908423274 0.248878037031072 18.6652636565524 -16.2690865627401 0.2548515790148 18.6536928360028 -16.2690898927403 0.262624673244002 18.6452177456003 -16.2690930127404 0.269623458936426 -19.4336854430505 -16.2690807827398 0.212020132330415 19.4091492718851 -16.2690811027399 0.212902649512333 19.3539347292625 -16.2690814527399 0.21443698046521 19.2864407360567 -16.2690812927399 0.215701630165277 19.2312084434333 -16.2690811027399 0.216850312669837 19.1859788212851 -16.2690809827398 0.217938037711501 19.1454462193599 -16.2690809827398 0.219203439561604 19.0937224869031 -16.2690812427399 0.221346749263406 19.0525695349485 -16.2690817027399 0.223569426338977 19.0161455432184 -16.2690824627399 0.226190823193487 19.0024475225678 -16.2690828027399 0.227284073495414 18.9631283807002 -16.26908382274 0.230502221658268 18.9263759089546 -16.2690852927401 0.234438135645213 18.8878513971248 -16.26908521274 0.236385213077695 18.8722901963856 -16.26908515274 0.237126918652924 18.8511645253822 -16.26908475274 0.237746291582342 18.8314560944461 -16.26908410274 0.237987627293805 18.8202413639135 -16.26908367274 0.238073469627882 18.8128462735622 -16.26908337274 0.238101969249236 18.8042835031555 -16.2690829827399 0.238094163928865 18.7934576526413 -16.2690824627399 0.238072680377845 18.7807883020395 -16.2690818327399 0.238043697376468 18.7675215114094 -16.2690813027399 0.238338752530483 18.7586528109882 -16.2690810327398 0.238736291609365 18.7467200304214 -16.2690808027398 0.239522474886707 18.7298124396183 -16.2690808327398 0.241363665544158 18.7154006889338 -16.2690814427399 0.244139654166011 18.700498968226 -16.2690824827399 0.247815357840597 18.6925013678461 -16.26908329274 0.250290107068142 18.683002257395 -16.26908473274 0.254146261181299 18.6702741567904 -16.2690868627401 0.259712597075686 18.6587372562424 -16.2690899427403 0.266970007030394 18.6502088458373 -16.2690928227404 0.273504881890784 -19.4294968528515 -16.2690818227399 0.219578079239399 19.4052646917006 -16.2690822027399 0.220504926053421 19.3507336091105 -16.2690827027399 0.22214561005135 19.2840742359443 -16.2690826927399 0.22351896014658 19.2295230633533 -16.2690825927399 0.224711773583236 19.1848507012315 -16.2690825327399 0.225808779265341 19.14481817933 -16.2690825627399 0.227042978223962 19.0937337069036 -16.2690828227399 0.229090055231193 19.0530894649731 -16.26908325274 0.231183390370621 19.0171126732643 -16.26908394274 0.23362981248682 19.0035822426217 -16.26908425274 0.234647667105166 18.9647435207769 -16.26908517274 0.237642095137393 18.9284339890523 -16.2690864927401 0.241289150680619 18.8903886372453 -16.2690863427401 0.243047231344123 18.8750212265154 -16.2690862527401 0.243714719275827 18.8541608355245 -16.2690858427401 0.24425248349137 18.8347003446002 -16.26908517274 0.244432742039932 18.8236266240742 -16.26908475274 0.244485815052453 18.8163244437274 -16.26908444274 0.244493847002834 18.8078690133258 -16.26908405274 0.244463974411415 18.797178752818 -16.26908354274 0.244414585589069 18.7846678022238 -16.2690829027399 0.244351402066068 18.7715677916016 -16.2690823727399 0.24458808802731 18.7628111411857 -16.2690820927399 0.244933193603702 18.7510299806261 -16.2690818427399 0.245632280216907 18.7343363098332 -16.2690818027399 0.247302073436218 18.7200905991565 -16.2690823327399 0.249852103467338 18.7053424484561 -16.26908325274 0.253240706798288 18.6974168880796 -16.26908397274 0.255528166446936 18.6879859976317 -16.2690852827401 0.259101881236678 18.6753420970311 -16.2690872227401 0.264263686971851 18.6638411064848 -16.2690900527403 0.271010082012288 18.6552624460774 -16.2690927027404 0.277085441310852 -19.4266927127183 -16.2690825227399 0.224637899259727 19.4026666715772 -16.2690829427399 0.225590725744984 19.3485989890091 -16.26908353274 0.227294290145899 19.2825054858698 -16.26908363274 0.228730243274103 19.2284161333007 -16.26908360274 0.229944281241767 19.1841216111968 -16.26908358274 0.231040687153843 19.1444281593115 -16.26908363274 0.232247890381182 19.0937771069057 -16.26908390274 0.234222749254983 19.0534777849916 -16.26908430274 0.236223289750004 19.0178042532972 -16.26908494274 0.238547067040377 19.0043874526599 -16.26908523274 0.239512374006227 18.9658745408307 -16.2690860927401 0.242351076831058 18.9298654491203 -16.2690873227401 0.245799164434833 18.8921449673287 -16.2690871327401 0.247424902782052 18.876908926605 -16.2690870227401 0.248040356101284 18.8562283656227 -16.2690865927401 0.24852030365408 18.8369359447064 -16.2690859227401 0.248656704450559 18.825957804185 -16.2690854927401 0.248686149771958 18.8187186138411 -16.26908519274 0.248679364741635 18.810335953443 -16.26908480274 0.248633427379454 18.7997376029396 -16.26908429274 0.248563723566143 18.7873340423504 -16.26908366274 0.248475730941963 18.7743470917336 -16.2690831127399 0.248671339231254 18.7656663913213 -16.2690828327399 0.248980005655915 18.7539879807666 -16.2690825627399 0.249618987606265 18.7374393099806 -16.2690824927399 0.251171486810005 18.7233063193093 -16.2690829527399 0.253568021143834 18.7086626286137 -16.26908379274 0.256762064965543 18.7007862182396 -16.26908446274 0.258922844318175 18.6914021077939 -16.2690856827401 0.26230588245886 18.6788160871961 -16.2690874927402 0.267194712141067 18.6673405966511 -16.2690901627403 0.273596920555156 18.6587295362421 -16.2690926627404 0.279362878199024 -19.4227152325294 -16.26908351274 0.231814923330618 19.3989845214023 -16.26908399274 0.232799547417385 19.3455808288657 -16.26908472274 0.234580934561996 19.280298185765 -16.26908497274 0.236091790593758 19.2268705932273 -16.26908504274 0.237324565202311 19.1831175011491 -16.26908509274 0.238410810563905 19.1439099192869 -16.26908517274 0.239571377849029 19.0938799269106 -16.2690854427401 0.241433150577459 19.0540748450199 -16.2690858227401 0.243293590085825 19.0188358833462 -16.2690864027401 0.245435881877578 19.0055819527167 -16.2690866527401 0.246323821359753 18.9675359609096 -16.2690874327402 0.248933505823707 18.9319575392197 -16.2690885227402 0.252091737363714 18.8947025274502 -16.2690882727402 0.253521811131639 18.8796547267354 -16.2690881327402 0.254060248027214 18.8592318057654 -16.2690876927402 0.254453838165908 18.8401801748605 -16.2690870227401 0.254523973259239 18.8293389743456 -16.2690865927401 0.254517595388937 18.822190014006 -16.2690862827401 0.254488270497544 18.8139116136128 -16.2690859027401 0.254417781644196 18.8034449531157 -16.2690853927401 0.25431703051941 18.7911952625338 -16.26908476274 0.254191233893435 18.7783702819247 -16.26908421274 0.254325841489829 18.7697983915175 -16.26908392274 0.254580995041948 18.7582671809698 -16.26908363274 0.255132268168132 18.7419262401937 -16.26908350274 0.256514910873804 18.7279549095301 -16.26908388274 0.258690683667148 18.7134612988417 -16.26908460274 0.261605540275596 18.7056556284709 -16.26908520274 0.263584861619609 18.6963391580284 -16.2690862927401 0.266695261977345 18.6838369874346 -16.2690879327402 0.271193947911021 18.6723993168913 -16.2690903627403 0.277105111371786 18.6637437364802 -16.2690926427404 0.282429784694694 -19.4188712623469 -16.26908447274 0.238751034230065 19.3954297412334 -16.26908501274 0.23976003979799 19.3426762187278 -16.2690858827401 0.241602352695495 19.2781875556647 -16.2690862927401 0.243168138249866 19.2254079631578 -16.2690864527401 0.244404735868601 19.1821850711049 -16.2690865627401 0.245469464319173 19.1434532492652 -16.2690866827401 0.246574476851659 19.0940314069178 -16.2690869627401 0.248313578804262 19.0547102850501 -16.2690873127401 0.250027968045691 19.0198969033966 -16.2690878327402 0.251985415398664 19.0068024827746 -16.2690880627402 0.252795026047119 18.9692138009893 -16.2690887527402 0.255173161670074 18.9340572693194 -16.2690897227403 0.258041676216321 18.8972580275716 -16.2690894127402 0.25927266992479 18.8823945368656 -16.2690892527402 0.259732643996638 18.8622238459075 -16.2690887927402 0.260037312071109 18.8434079350138 -16.2690881227402 0.260038309191156 18.8327007945052 -16.2690876927402 0.259994409609071 18.8256401841699 -16.2690873927402 0.259941387946553 18.8174638537815 -16.2690870027401 0.259844954481972 18.8071261232905 -16.2690865027401 0.259711394025629 18.7950270727158 -16.2690858727401 0.259545778067762 18.7823606721142 -16.2690853227401 0.259617996571193 18.7738953017121 -16.26908502274 0.259819138840746 18.7625081711713 -16.26908471274 0.260282563542758 18.7463705904048 -16.26908453274 0.261496675650425 18.7325577597487 -16.26908483274 0.263455280213454 18.7182115690673 -16.2690854427401 0.266096278768894 18.7104755886999 -16.2690859627401 0.267898008854472 18.7012261082605 -16.2690869427401 0.270742189829563 18.6888071476707 -16.2690884027402 0.274860127735155 18.6774081671292 -16.2690906127403 0.28029316253321 18.6687113467162 -16.2690926827404 0.285188325765718 -19.4128963820631 -16.2690859627401 0.249532179182142 19.3899117909713 -16.2690866027401 0.250566111891251 19.3381855785145 -16.2690876927402 0.252473941761868 19.274951475511 -16.2690883527402 0.2540894389486 19.2231958330528 -16.2690886827402 0.255302795886232 19.1808107210396 -16.2690888927402 0.25631018221408 19.1428306992356 -16.2690890727402 0.257307424361446 19.0943697769339 -16.2690893627402 0.258828517023694 19.0558133651025 -16.2690896927403 0.260294131263307 19.0216725534809 -16.2690901227403 0.261944957871717 19.0088302228709 -16.2690903127403 0.262625548494044 18.9719643111199 -16.2690908827403 0.264622901248913 18.9374747794817 -16.2690916627404 0.26702150097284 18.9013956377681 -16.2690912727403 0.267922658875643 18.8868233470759 -16.2690910827403 0.268252437831306 18.8670511061368 -16.2690906027403 0.268407728328682 18.8486075452608 -16.2690899227403 0.268290848643131 18.8381121947623 -16.2690894927403 0.268182700597994 18.8311911244335 -16.2690891927402 0.268088936623541 18.8231760440528 -16.2690888127402 0.26794764642683 18.8130420035715 -16.2690883227402 0.267757359927792 18.8011809630081 -16.2690877027402 0.267523141096667 18.7887650624184 -16.2690871527401 0.267491365455158 18.7804679420243 -16.2690868327401 0.267603867340501 18.7693083814943 -16.2690864927401 0.267924444905728 18.753491990743 -16.2690862427401 0.268867662030528 18.7399299900989 -16.2690864227401 0.270480913047153 18.7258176994286 -16.2690868627401 0.272687981921984 18.7181926390664 -16.2690872627401 0.274209128844234 18.7090504886322 -16.2690880627402 0.276633927669406 18.6967652080486 -16.2690892627402 0.280152490176529 18.6854305075103 -16.2690911127403 0.284835058898939 18.6766731570943 -16.2690928627404 0.289056405569442 -19.4057194117222 -16.2690877427402 0.262482412657245 19.383294520657 -16.2690885127402 0.263527890966903 19.3328266882599 -16.2690898827403 0.265473026729292 19.2711293553295 -16.2690908527403 0.267097646206457 19.2206280729308 -16.2690913927403 0.268241693980796 19.1792692809664 -16.2690917427404 0.269146305863763 19.1422101992062 -16.2690920027404 0.269983714893538 19.0949263869603 -16.2690923327404 0.271204163531506 19.0573067251735 -16.2690926227404 0.272340084565459 19.023989933591 -16.2690929627404 0.273595214775075 19.0114564929957 -16.2690931127404 0.27411051639955 18.9754762212867 -16.2690935327404 0.275620866971288 18.9418042396874 -16.2690941027405 0.277427217777085 18.9066071380156 -16.2690936127404 0.277903250449695 18.8923915273404 -16.2690933927404 0.278064957577376 18.8731072164244 -16.2690928927404 0.278024985465478 18.8551196355701 -16.2690922127404 0.277751744552499 18.8448836250839 -16.2690917927404 0.277558015563298 18.8381334547633 -16.2690915027403 0.277409767426256 18.830315854392 -16.2690911227403 0.277208170756681 18.8204312739225 -16.2690906427403 0.27694161965402 18.808861713373 -16.2690900427403 0.27661547867853 18.7967525827978 -16.2690894827402 0.276448829450614 18.7886614824135 -16.2690891527402 0.276448207850585 18.7777805418967 -16.2690887827402 0.276588262757237 18.7623574411641 -16.2690884427402 0.27719340327598 18.7491032605346 -16.2690884727402 0.278380757482376 18.735278809878 -16.2690887227402 0.280054879591892 18.7277907895223 -16.2690889827402 0.281232546687829 18.7187822290944 -16.2690895627403 0.283145666428697 18.7066638385188 -16.2690904527403 0.285933541061114 18.6954124579844 -16.2690918827404 0.289704320010216 18.6865875775652 -16.2690932427404 0.293107478511858 -19.3997666414394 -16.2690892327402 0.273223673297428 19.377819230397 -16.2690901027403 0.274255714046447 19.3284249580509 -16.2690917227404 0.276180011327846 19.2680387051827 -16.2690929727404 0.277748909202365 19.2186076428348 -16.2690936927404 0.278783689181514 19.178124520912 -16.2690941727405 0.279560654978418 19.1418511691891 -16.2690945027405 0.280227489620091 19.0955716169909 -16.2690948827405 0.281150072553911 19.0587511552421 -16.2690951627405 0.281973924413042 19.026137563693 -16.2690954327405 0.282866594895442 19.0138677431102 -16.2690955427405 0.283231902692793 18.9786433714371 -16.2690958627406 0.284301281493586 18.945669529871 -16.2690962527406 0.285581640384399 18.9112248382349 -16.2690957027405 0.285668873968543 18.8973134775742 -16.2690954627405 0.285676563598908 18.878445286678 -16.2690949427405 0.285454831058376 18.8608465458421 -16.2690942727405 0.285033425158361 18.8508316853664 -16.2690938627405 0.284758197225288 18.8442272550527 -16.2690935727404 0.284557822145771 18.8365780846894 -16.2690932127404 0.284298168363438 18.82690625423 -16.2690927327404 0.28395819640729 18.8155853236923 -16.2690921527404 0.283543907457612 18.8037378131296 -16.2690915927403 0.283252935203792 18.7958223727536 -16.2690912627403 0.283150167958911 18.7851789622481 -16.2690908627403 0.28312931437792 18.7700912115315 -16.2690904527403 0.283438183642591 18.7571003109144 -16.2690903627403 0.284258451411551 18.7435230502695 -16.2690904527403 0.285475880279376 18.7361533299195 -16.2690906127403 0.286360593321398 18.7272612694971 -16.2690910127403 0.287839405061637 18.7152890289285 -16.2690916427404 0.290007814694631 18.7041141983977 -16.2690927327404 0.293009402247199 18.6952396579762 -16.2690937727405 0.295722919916084 -19.3958792812548 -16.2690902027403 0.280238069820593 19.3742485002274 -16.2690911427403 0.281253132318806 19.3255661379151 -16.2690929227404 0.283145364458683 19.2660493150882 -16.2690943627405 0.284655315830401 19.2173279627741 -16.2690952127405 0.285600283415285 19.1774255608788 -16.2690957827405 0.286278778147512 19.1416732791807 -16.2690961627406 0.28682067563325 19.0960596870141 -16.2690965727406 0.287531453687011 19.0597692052904 -16.2690968527406 0.288137750775808 19.0276219837635 -16.2690970827406 0.288781511846385 19.015527033189 -16.2690971727406 0.289044271038866 18.9808040315398 -16.2690974327406 0.289812478335353 18.9482933599956 -16.2690977127406 0.290736955399264 18.9143475983833 -16.2690971227406 0.290557391040735 18.9006379877321 -16.2690968627406 0.290459293006075 18.882045676849 -16.2690963427406 0.290111805739571 18.8647047260254 -16.2690956827405 0.289587057994647 18.8548364955566 -16.2690952727405 0.289254860248868 18.8483286852475 -16.2690949827405 0.289017972147616 18.8407911848895 -16.2690946327405 0.288717540323347 18.8312604144368 -16.2690941627405 0.288325998894749 18.8201043339069 -16.2690935927404 0.287849902842136 18.8084302733525 -16.2690930327404 0.287473303944249 18.800631292982 -16.2690926927404 0.287300867326058 18.790145342484 -16.2690922827404 0.287170950769888 18.7752798917779 -16.2690918327404 0.2872806913851 18.7624638211692 -16.2690916727404 0.28785630770244 18.7490510405321 -16.2690916527404 0.288770277795852 18.7417602701858 -16.2690917427404 0.28946080823865 18.7329463697672 -16.2690920227404 0.290652470925251 18.7210723692032 -16.2690924827404 0.292411568388804 18.7099502386749 -16.2690933627404 0.294906240137294 18.701045568252 -16.2690941927405 0.297165473694602 -19.3858695007793 -16.2690926927404 0.298299853918482 19.3650537597907 -16.2690938227405 0.29926722620443 19.3182039575654 -16.2690960427406 0.30106795505996 19.2609251748448 -16.2690979627407 0.302415198783951 19.2140307626174 -16.2690991427407 0.303119966287425 19.1756232207932 -16.2690999327407 0.303537583867261 19.1412122491588 -16.2691004527408 0.303751214097408 19.0973129470737 -16.2691009527408 0.303908232024866 19.0623867354147 -16.2691012227408 0.303947670286739 19.0314400439449 -16.2691013427408 0.303944587076593 19.0197951933918 -16.2691013827408 0.303941061606425 18.9863628218038 -16.2691014727408 0.303927371995775 18.9550444303163 -16.2691014727408 0.303929467775874 18.9223829887649 -16.2691007927408 0.303056663784418 18.9091926981384 -16.2691004927408 0.302683644566701 18.8913105472891 -16.2690999527407 0.302008925984654 18.8746331964969 -16.2690993127407 0.301214888616939 18.8651423960461 -16.2690989127407 0.300734181044106 18.8588833257489 -16.2690986427407 0.300402076268332 18.8516332754045 -16.2690983027407 0.299995255469009 18.8424656349691 -16.2690978627406 0.299469170384022 18.8317339044593 -16.2690973227406 0.298831868833751 18.820506333926 -16.2690967627406 0.298232635175289 18.8130071335698 -16.2690964127406 0.29787936713851 18.802926503091 -16.2690959627406 0.297466688658909 18.7886333124122 -16.2690954027405 0.297060943569637 18.7762672618248 -16.2690950527405 0.297004204386942 18.7632778712078 -16.2690947727405 0.297134251543119 18.7561902908712 -16.2690946727405 0.297323378122102 18.7475775304621 -16.2690946627405 0.297773933723502 18.7359563599101 -16.2690946927405 0.298476754076884 18.7249697793883 -16.2690949927405 0.299663906933271 18.7159874089617 -16.2690953027405 0.300751476534928 -19.3759198803068 -16.2690951727405 0.316253079791215 19.3559120093564 -16.2690965027406 0.317115755702189 19.3108785972175 -16.2690991727407 0.318696622467277 19.2558181046022 -16.2691016127408 0.319724581296102 19.2107344924609 -16.2691031427409 0.320061683642114 19.173808610707 -16.2691041827409 0.320114431464619 19.1407270991357 -16.269104862741 0.319907154864774 19.0985269571313 -16.269105472741 0.319392990910352 19.0649529655366 -16.269105742741 0.318772850130897 19.0351961841233 -16.269105782741 0.318041523036161 19.0239974535913 -16.269105772741 0.317741201701897 18.9918442620642 -16.269105712741 0.316858104869952 18.9617075206327 -16.269105462741 0.315856815092393 18.9303190891419 -16.269104692741 0.314204845153929 18.9176435385398 -16.269104372741 0.313522174711504 18.9004653177239 -16.2691038327409 0.312472888161665 18.884445736963 -16.2691032127409 0.311365186369052 18.87532905653 -16.2691028327409 0.310710682277965 18.8693165262444 -16.2691025727409 0.310266665026875 18.8623513959136 -16.2691022527409 0.309734085721579 18.8535436954952 -16.2691018427408 0.309048959829037 18.8432325950055 -16.2691013327408 0.308221783309748 18.8324475844932 -16.2691007927408 0.307370245349303 18.8252455441511 -16.2691004327408 0.306816524893002 18.8155666736914 -16.2690999527407 0.30609495558873 18.8018407230395 -16.2690992927407 0.305137335323245 18.7899206124733 -16.2690987527407 0.304417595259059 18.7773506018763 -16.2690982127407 0.303731951696493 18.7704641915492 -16.2690979427407 0.30340261532085 18.7620503711495 -16.2690976427406 0.30309185207609 18.7506791906094 -16.2690972627406 0.302711351078017 18.7398260500939 -16.2690970027406 0.302566656401144 18.7307653496636 -16.2690967827406 0.302462184136182 -19.3665796498631 -16.2690975027406 0.333106715941719 19.3473283089487 -16.2690990227407 0.333820518075623 19.3039958968906 -16.2691021427408 0.3350811617055 19.251012764374 -16.269105102741 0.335670269103482 19.2076248923132 -16.2691069827411 0.335548397807693 19.1720865206252 -16.2691082727411 0.335165412789502 19.1402500091131 -16.2691091127412 0.334479465476921 19.0996410771842 -16.2691098527412 0.333228604997509 19.0673333956497 -16.2691101427412 0.331904401934612 19.0386908942893 -16.2691101227412 0.330414124903828 19.0279099237772 -16.2691100727412 0.329806830924983 18.9969546023069 -16.2691098927412 0.328026154210406 18.967924360928 -16.2691094127412 0.326006511304478 18.9377280594938 -16.2691085927412 0.323543544877493 18.9255345589146 -16.2691082427411 0.322538062719735 18.90901555813 -16.2691077127411 0.321093614371128 18.8936119873984 -16.2691071227411 0.3196508470026 18.884845676982 -16.2691067727411 0.318810074552665 18.8790640267074 -16.2691065327411 0.318245751395861 18.8723657263892 -16.269106232741 0.317577447944119 18.8638951059869 -16.269105852741 0.316720676963424 18.8539778955159 -16.269105382741 0.315689084004426 18.8436073650233 -16.269104862741 0.31457331485143 18.8366835946944 -16.269104492741 0.313813134045323 18.8273809942526 -16.2691039927409 0.312777020076111 18.8141862736259 -16.2691032427409 0.311266457754363 18.8026836730795 -16.2691025427409 0.30989390789917 18.7905061925011 -16.2691017627408 0.308410321068703 18.783807992183 -16.2691013227408 0.307576551969102 18.7755801317922 -16.2691007627408 0.306529318489361 18.7644425412632 -16.2690999927407 0.305102360751584 18.7537136507536 -16.2690992127407 0.303678969303976 18.7445785303197 -16.2690985127407 0.302431252674713 - -0 4 -0.08990298 1 -0.18315357 1 -0.20034405 1 -0.22475745 1 -0.27019476 1 -0.32899256 1 -0.35467696 1 -0.39790986 1 -0.41449401 1 -0.47595518 1 -0.5151171 1 -0.5966751 1 -0.69478979 1 -0.69662422 1 -0.71520522 1 -1 4 - -0 4 -0.41310065 1 -0.92947641 1 -1.13602676 1 -1.34257706 1 -1.69060417 1 -1.81821598 1 -2.21322631 1 -2.38371453 1 -2.43316723 1 -2.44476256 1 -3.04857872 1 -3.057209 1 -3.0943635 1 -3.31090845 1 -3.41270371 1 -3.42599114 1 -3.49967011 1 -3.53721249 1 -3.57026275 1 -3.6821336 1 -3.7509154 1 -3.79383849 1 -3.83144441 1 -3.95156777 1 -4.0785586 1 -4.07981239 1 -4.21459722 1 -4.22328983 1 -4.25766328 1 -4.45537137 4 - -9 0 0 0 0 3 2 19 4 15 3 17.2206187079355 -6.33363828283166 -0.716492118871548 17.9802354340153 -8.81751651680954 -0.484544512034628 19.499468896175 -13.7852729847653 -0.020649298340789 20.2590856322549 -16.2691512227432 0.211298308496131 -17.1721309556324 -6.33363988383174 -0.704372038225875 17.9384846320323 -8.81751664280955 -0.474547546629798 19.471191994832 -13.7852701647652 -0.0148985634276438 20.2375456712318 -16.269146922743 0.214925928168433 -17.0895647317107 -6.33364236683186 -0.684425253888454 17.8674083186563 -8.81751707480957 -0.457975197992654 19.4230954925475 -13.785266494765 -0.00507508619105365 20.2009390794931 -16.2691412027427 0.221374969714746 -16.9823669166191 -6.33364505883198 -0.660045740160489 17.7751849142759 -8.81751799180961 -0.437491011279707 19.3608209195896 -13.7852638547649 0.00761844648185677 20.1536389172464 -16.2691367927425 0.230173175362639 -16.8419037299475 -6.33364809483213 -0.629496169529462 17.6544121885395 -8.81751944080968 -0.411626241831196 19.2794290957237 -13.7852621347648 0.0241136135953351 20.0919375543158 -16.2691334727423 0.241983541303601 -16.7351638648776 -6.3336497318322 -0.608192009867569 17.5627347741851 -8.81752080080975 -0.393335378232427 19.2178765928001 -13.7852629347648 0.0363778850578567 20.0454475121076 -16.2691340027424 0.251234516692999 -16.6334793300478 -6.33365080283226 -0.589288586159705 17.4754149600376 -8.8175220708098 -0.376976088225403 19.1592862100172 -13.7852646047649 0.0476489076232016 20.001221840007 -16.2691358727425 0.259961405557504 -16.590659598014 -6.33365120583228 -0.581465978298151 17.4386438282911 -8.81752260180983 -0.370192174573184 19.1346122888453 -13.7852653947649 0.0523554328767495 19.9825965191224 -16.2691367927425 0.263629236591716 -16.5272334850014 -6.3336516418323 -0.570333143869369 17.3841733457039 -8.81752336380987 -0.360495401912612 19.0980530571088 -13.785266804765 0.0591800820009029 19.9549929178113 -16.2691385227426 0.26901782395766 -16.4397496208462 -6.33365201783231 -0.555622904270671 17.3090402221353 -8.81752435280992 -0.347628900381486 19.0476214147134 -13.7852690247651 0.0683591074268832 19.9169120160025 -16.2691413527427 0.276353111326068 -16.3531706767339 -6.33365206783232 -0.541983860102851 17.2346895586038 -8.81752521580995 -0.335629656641552 18.9977273323436 -13.7852715147652 0.077078750291044 19.8792462142135 -16.2691446627429 0.283432953762342 -16.2664776526162 -6.3336517848323 -0.529274443989186 17.1602585850685 -8.81752589380999 -0.324394372377905 18.9478204499731 -13.7852741147654 0.0853657708546564 19.8416013724254 -16.269148222743 0.290245842475937 -16.2003690894762 -6.33365140283228 -0.520055764141322 17.1035018523727 -8.81752629681001 -0.316223171499794 18.9097673881657 -13.7852760847654 0.0914420137732624 19.8129001610622 -16.2691509827432 0.295274606404791 -16.0924612543509 -6.33365050883224 -0.505779505633236 17.0108601779725 -8.81752674181003 -0.30354134982744 18.8476580352157 -13.7852792047656 0.100934961794153 19.7660569588373 -16.2691554427434 0.30317311760995 -15.9016762752891 -6.33364796983212 -0.483268705304031 16.8470032601897 -8.81752664581002 -0.2834846969048 18.7376572199909 -13.7852839947658 0.116083319913662 19.6829842048915 -16.2691626727437 0.315867328312892 -15.7331203472831 -6.33364410883194 -0.4679893382883 16.7021583433099 -8.81752456180992 -0.26993491969122 18.6402343353636 -13.7852854647659 0.126173917472939 19.6092723313904 -16.2691659227439 0.324228336060019 -15.4789707052116 -6.33363679283159 -0.449205883866134 16.4837602729366 -8.81751883180965 -0.25361340772599 18.4933394183864 -13.7852829047658 0.137571544554297 19.4981289961114 -16.2691649527438 0.333164020704441 -15.3286827680733 -6.33363120783133 -0.44168625086897 16.3545756868006 -8.81751324780939 -0.247431688882374 18.4063615242552 -13.7852773247655 0.141077435090818 19.4322544429825 -16.2691593627436 0.335331997077414 -15.1783018009306 -6.333624360831 -0.437747455361887 16.2253637906634 -8.81750454880897 -0.245033411298462 18.3194877701289 -13.7852649247649 0.140394676838389 19.3665497498617 -16.2691451127429 0.333108720911814 - -0 4 -0.07264197 1 -0.12345255 1 -0.15974582 1 -0.28146727 2 -0.30978555 1 -0.34462514 1 -0.3749384 1 -0.43859614 1 -0.47194039 1 -0.5022533 1 -0.5355975 1 -0.63013701 1 -0.78146727 2 -1.00011086 4 - -0 3 -3.57247416 1 -7.14494832 3 - -9 0 0 0 0 3 2 53 4 51 3 19.4650375445396 -16.2691190627417 0.155576155089471 18.4496948263134 -13.7852317447633 -0.0943131308496331 16.4190093898611 -8.81745711380672 -0.59409170274784 15.4036666716349 -6.33356979682841 -0.843980988696944 -19.3917485210586 -16.2691188827416 0.156548989795678 18.3524343516938 -13.7852338547634 -0.0953887367507217 16.2738060029643 -8.81746380680704 -0.59926418986352 15.2344918235995 -6.33357878282884 -0.85120191641992 -19.3055471769642 -16.2691171027416 0.155712119985928 18.2380193062594 -13.7852300747633 -0.0946000924532631 16.1029635548497 -8.81745600080667 -0.595224517331646 15.0354356841448 -6.33356896582837 -0.845536729780838 -19.2131746725768 -16.2691162327415 0.156931259153834 18.1152564504285 -13.7852266347631 -0.0912212524827768 15.9194199961318 -8.81744744580626 -0.587526275755999 14.8215017639835 -6.33355785082784 -0.835678787392611 -19.1909721515222 -16.2691161027415 0.157380531115174 18.0857409090266 -13.7852259247631 -0.0902733884977557 15.8752784140352 -8.81744557080617 -0.585581227753615 14.7700471715396 -6.33355539382772 -0.833235147366544 -19.1795595209802 -16.2691160627415 0.157655882208252 18.070570168306 -13.7852256147631 -0.0897473595027706 15.8525914529577 -8.81744471280613 -0.584553842924816 14.7436021002835 -6.33355426382767 -0.831957084635839 -19.1628715801875 -16.2691160227415 0.158097160289212 18.0483869772523 -13.785225194763 -0.0889472710747685 15.819417791382 -8.81744354480607 -0.583036133802729 14.7049331984468 -6.3335527208276 -0.830080565156709 -19.1410738191522 -16.2691160427415 0.158809263593035 18.0194152058763 -13.785224824763 -0.0877932267399543 15.7760979993244 -8.81744239480602 -0.580998207395933 14.6544393960485 -6.33355117982753 -0.827600697728922 -19.0959042170067 -16.2691163627415 0.160775722776437 17.9594140830264 -13.785224814763 -0.0850308464587483 15.6864338250656 -8.81744173580599 -0.576643984939118 14.5499436910852 -6.33355019482748 -0.822450554174303 -19.0512239848845 -16.2691171927416 0.163632115532108 17.9001355802108 -13.7852264047631 -0.0816390062376445 15.5979587608633 -8.81744482080614 -0.57218124974715 14.4468703561895 -6.33355402982766 -0.817452371496902 -19.0117014030073 -16.2691185627416 0.167265524224686 17.847800457725 -13.7852302347633 -0.0779169515608564 15.5199985471603 -8.81745356180655 -0.568281903131941 14.356097591878 -6.33356522682819 -0.813464378917483 -18.9968426823016 -16.2691191927417 0.168810879388086 17.8281378867911 -13.7852320347634 -0.0763965982486435 15.4907282957701 -8.81745772080675 -0.566811553552103 14.3220235002596 -6.33357056582845 -0.812019031188833 -18.9914575420458 -16.2691194227417 0.16938636702542 17.8210103964525 -13.7852326847634 -0.0758309585617771 15.480116085266 -8.81745922380682 -0.566265609726172 14.3096689396728 -6.33357249082854 -0.811482935303369 -18.9829114016399 -16.2691198027417 0.170320273859779 17.8096999859153 -13.7852337647634 -0.0749197797684984 15.4632771644662 -8.81746169480694 -0.565399887045052 14.2900657487417 -6.33357565782869 -0.810639940673329 -18.9442289198025 -16.2691216927418 0.174810373063047 17.7585004434835 -13.7852389147637 -0.0705832547425245 15.3870434908453 -8.81747336980749 -0.561370510353667 14.2013150145262 -6.3335905968294 -0.806764138159239 -18.9065420280125 -16.2691237827419 0.179746097707481 17.7085887511128 -13.7852440947639 -0.0657701253239132 15.3126821973133 -8.81748471480803 -0.556802571376702 14.1147289204136 -6.33360502583008 -0.802318794408096 -18.8725326063972 -16.2691242227419 0.182222502175104 17.6634857889705 -13.785244794764 -0.0624033647140006 15.2453921441172 -8.81748594680809 -0.55165509850221 14.0363453266906 -6.33360652283015 -0.796280965401315 -18.8604734858244 -16.2691243427419 0.183056530634718 17.6474883982107 -13.785244924764 -0.0612256910580641 15.2215182129833 -8.8174860898081 -0.549790134433629 14.0085331253696 -6.33360667283016 -0.794072356126411 -18.8440949350464 -16.2691243027419 0.18392419299593 17.6257367671775 -13.7852443947639 -0.0597295891170031 15.1890204314397 -8.81748458180802 -0.547037153322869 13.9706622635708 -6.33360467683007 -0.790690935435802 -18.8237810040816 -16.2691239827419 0.184671308211416 17.5986877058928 -13.7852424647639 -0.0579437300421794 15.1485011195152 -8.81747944680778 -0.54317380653937 13.9234078213264 -6.33359793582975 -0.785788844792966 -18.8123433735383 -16.2691236927419 0.184961682095208 17.5834216651677 -13.7852408147638 -0.0569536007751507 15.1255782584264 -8.81747506180757 -0.540784166515868 13.8966565600557 -6.33359218482947 -0.782699449386227 -18.8049087531852 -16.2691234627419 0.185114503282467 17.5734857846957 -13.7852395547637 -0.0563081147744918 15.1106398577168 -8.81747173480741 -0.539153350888409 13.8792168892274 -6.33358782382926 -0.780575968945367 -18.7990359529063 -16.2691232827419 0.18522974134794 17.565637834323 -13.7852385647637 -0.0558017902804427 15.0988416071565 -8.81746913180729 -0.537864853517208 13.8654434885732 -6.3335844148291 -0.778896385145591 -18.7879574223801 -16.2691228927418 0.185397382585903 17.5508265336195 -13.7852365947636 -0.054860903275753 15.0765647360984 -8.81746398980705 -0.535377474999064 13.8394338373378 -6.33357768882878 -0.77563576086072 -18.774840341757 -16.2691223327418 0.185489506820278 17.5332844627863 -13.7852341947635 -0.0537942470450895 15.0501726848448 -8.81745791780676 -0.532361754775825 13.8086167958741 -6.33356977982841 -0.771645508651193 -18.7630801311984 -16.2691218127418 0.18561039728602 17.5175775820403 -13.7852323047634 -0.0528135746885101 15.0265724837239 -8.81745328480654 -0.529661518617571 13.7810699345657 -6.33356377482812 -0.768085490592101 -18.7523382006882 -16.2691213827418 0.185827606396337 17.5032526013598 -13.7852308447633 -0.0518467564525887 15.0050814027031 -8.81744978380637 -0.527195482150441 13.7559957933747 -6.33355925282791 -0.764869844999367 -18.7417279401843 -16.2691210527417 0.186286447218131 17.4891460006898 -13.7852299147633 -0.0507340368797373 14.9839821317009 -8.81744763480627 -0.524775005105474 13.7314002022065 -6.33355649482778 -0.761795489213342 -18.7320809897261 -16.2691209027417 0.187004004592213 17.4763681300829 -13.7852296447632 -0.0495304511925701 14.9649424307966 -8.81744711980625 -0.522599362772137 13.7092295811534 -6.33355585882775 -0.75913381855692 -18.7194963591283 -16.2691208827417 0.188303017563913 17.4597553692938 -13.7852299347633 -0.0477281560969657 14.9402734096249 -8.81744803880629 -0.519790503408723 13.6805324297904 -6.3335570908278 -0.755821677059602 -18.7095691186568 -16.2691211427418 0.189889789669281 17.4467134586744 -13.7852312347633 -0.0459508497625481 14.9210021387095 -8.81745140780645 -0.517632128616206 13.6581464787271 -6.33356149682801 -0.753472768048034 -18.7019146582932 -16.2691215527418 0.19152417919691 17.4366545781966 -13.7852330747634 -0.0443230798052332 14.9061344180034 -8.81745612680667 -0.51601759779952 13.6408743379067 -6.33356765282831 -0.751864856791663 -18.701110318255 -16.2691215927418 0.191698214395176 17.4355972181464 -13.7852332647634 -0.0441494119569844 14.9045710279291 -8.8174566168067 -0.515844664681306 13.6390579278205 -6.33356829082834 -0.751692291033466 -18.6927758578592 -16.2691220627418 0.193542919832795 17.4246379176259 -13.7852352947635 -0.0423141851798159 14.8883620271592 -8.81746176180694 -0.514028395175038 13.6202240869259 -6.33357499382866 -0.749885500187648 -18.6847572874783 -16.2691227727418 0.195812915910614 17.4140598571234 -13.7852378347636 -0.0401523646871349 14.8726650064136 -8.81746797180724 -0.512082925922633 13.6019675860588 -6.33358303982904 -0.748048206520382 -18.6771181471155 -16.2691237227419 0.19853949667012 17.403818896637 -13.7852395647637 -0.0373585030044336 14.8572204056801 -8.81747125280739 -0.50915450235354 13.5839211552016 -6.33358709582923 -0.745052502028093 -18.6742190969778 -16.2691240927419 0.199585351299795 17.3999299564523 -13.7852402147637 -0.0362856558634761 14.8513516954013 -8.81747246580745 -0.508027670180018 13.5770625548758 -6.3335885908293 -0.74389867734329 -18.6661537665947 -16.2691252427419 0.202745941129915 17.3890436059352 -13.7852417347638 -0.0329801636364736 14.8348232646163 -8.81747471380756 -0.504432373179251 13.5577131039568 -6.33359120582943 -0.74015847794564 -18.6581166962129 -16.269126802742 0.206713597068369 17.3779554854086 -13.7852418847638 -0.0285683014769214 14.8176330737998 -8.81747203680743 -0.499132098567501 13.5374718629954 -6.33358711382923 -0.734413997122791 -18.6519158659184 -16.2691283227421 0.210382358612625 17.3692016049928 -13.7852405547638 -0.0242586850222257 14.8037730831415 -8.8174650108071 -0.493540772291928 13.5210588322158 -6.33357723782876 -0.728181815926779 -18.6505896458554 -16.2691286727421 0.211200001881461 17.3673212949035 -13.7852402047637 -0.0232873717160908 14.8007845929995 -8.81746327380701 -0.492262118911195 13.5175162420475 -6.33357480782865 -0.726749492498747 -18.6487409557676 -16.2691291627421 0.212371439397102 17.3646966147788 -13.7852396747637 -0.0218840782894379 14.7966079328011 -8.81746068280689 -0.490395113672517 13.5125636018123 -6.33357118982847 -0.724650631369057 -18.6476308057149 -16.2691294727421 0.213099528761684 17.3631237347041 -13.7852393447637 -0.0210016018275225 14.7941095926825 -8.81745908380681 -0.489203862985936 13.5096025116717 -6.33356895382837 -0.723304993575142 -18.6456845256225 -16.2691300427422 0.214420726334438 17.3603730945734 -13.7852387647637 -0.0193812261305588 14.7897502324754 -8.81745620680668 -0.486985131070551 13.5044388014264 -6.33356492882818 -0.720787083545548 -18.643021405496 -16.2691308427422 0.216284205892948 17.3566263243955 -13.7852379947636 -0.0170697123707678 14.7838361621945 -8.81745230080649 -0.4837775488882 13.497441081094 -6.33355945382792 -0.717131467161915 -18.6381059152625 -16.2691324827423 0.220011042899963 17.3498609940741 -13.7852370247636 -0.0122805840032964 14.7733711516974 -8.8174461228062 -0.476863837799816 13.4851262305091 -6.3335506718275 -0.709155464693076 -18.6338965550626 -16.2691340827424 0.223599862510423 17.3444646538178 -13.7852376947636 -0.00735304102925069 14.7656008613284 -8.81744490180614 -0.469258848098598 13.4761689600836 -6.3335485078274 -0.700211751628272 -18.6307730949142 -16.2691353827424 0.226464182376471 17.340805863644 -13.7852396147637 -0.00319583246179389 14.7608713911037 -8.81744807680629 -0.462515862148324 13.4709041498336 -6.33355230782758 -0.692175876986588 -18.6282268947933 -16.2691364727425 0.228863274100422 17.3379384535078 -13.7852416547638 0.000352200096728606 14.757361570937 -8.81745201980648 -0.456669947890658 13.4670731296516 -6.33355720182781 -0.685181021884351 -18.6254983646637 -16.2691377327425 0.231606058570697 17.3351919333774 -13.785245104764 0.00453681382548708 14.7545790608049 -8.81745984880685 -0.449601675654933 13.4642726195186 -6.33356722182829 -0.676670920400143 -18.6216163744793 -16.2691396527426 0.235763588408169 17.3318398732182 -13.7852518747643 0.0108996631977062 14.752286870696 -8.81747633180763 -0.438828187223219 13.4625103694349 -6.3335885578293 -0.663692112433682 -18.619356844372 -16.2691408727427 0.238370956152012 17.3303145131457 -13.7852571847646 0.0148572386456809 14.7522298606933 -8.81748981280827 -0.432170196366982 13.4631875294671 -6.33360612683013 -0.655683913873313 -18.6177000542933 -16.2691418227427 0.240397685668277 17.3294940131068 -13.7852619047648 0.0178295854368598 14.7530819307338 -8.81750206180885 -0.427306615035974 13.4648758895473 -6.33362214083089 -0.649874715287391 - -0 4 -0.25503713 1 -0.29991391 1 -0.32143898 1 -0.332299 1 -0.33962848 1 -0.37951102 1 -0.40815326 1 -0.49681261 1 -0.53507838 1 -0.54617795 1 -0.5487805 1 -0.55392134 1 -0.57609122 1 -0.68430594 1 -0.68624299 1 -0.69458225 1 -0.72630646 1 -0.74318537 1 -0.76514738 1 -0.76603313 1 -0.76901547 1 -0.78555258 1 -0.80453964 1 -0.81466664 1 -0.82650618 1 -0.84194413 1 -0.85157814 1 -0.86001872 1 -0.88558718 1 -0.88606558 1 -0.88698019 1 -0.88842245 1 -0.91548305 1 -0.91576446 1 -0.91670721 1 -0.92623059 1 -0.94601667 1 -0.94796771 1 -0.95113582 1 -0.95138384 1 -0.95548881 1 -0.95568277 1 -0.95941041 1 -0.9665435 1 -0.97650544 1 -0.97795662 1 -0.98077976 1 -0.98826655 1 -0.99100587 1 -1.00011599 4 - -0 3 -3.85256324 1 -7.70512649 3 - -9 0 0 0 0 3 2 16 4 14 3 19.4649687145364 -16.2690729827395 0.155572182299282 19.4403714433681 -16.2690791127398 0.199955815707391 19.3911769110314 -16.2690913727403 0.28872308253361 19.3665796498631 -16.2690975027406 0.333106715941719 -19.4899993457253 -16.2690743727395 0.156277522982784 19.4662337345964 -16.2690801127398 0.2007244604139 19.4187025223388 -16.2690878627402 0.289618336366132 19.39493691121 -16.2691036527409 0.334065271447248 -19.5415420481734 -16.2690760527396 0.158350777271258 19.5195026871266 -16.2690852827401 0.202351811361195 19.475423975033 -16.2691037527409 0.290353879541069 19.4533846139861 -16.2691129827414 0.334354913631006 -19.6395146428268 -16.2690758227396 0.164269566092385 19.6208095119384 -16.2690868927401 0.205485906880056 19.5833992601615 -16.2691090327412 0.287918588455398 19.5646941292731 -16.2691201027417 0.32913492925307 -19.7374214374772 -16.2690725827394 0.172290977743382 19.7219992767447 -16.26908336274 0.208460434201339 19.6911549452796 -16.269104902741 0.280799347137253 19.6757327745471 -16.2691156827415 0.31696880359521 -19.8176526712879 -16.2690701027393 0.179573937789304 19.8047493406751 -16.2690795327398 0.210472763346919 19.7789426794493 -16.2690983827407 0.27227041445215 19.7660393488364 -16.2691078127411 0.303169240009766 -19.8616899533796 -16.2690691427393 0.183618111001392 19.8501142228298 -16.2690776327397 0.211425696062181 19.8269627717302 -16.2690946227405 0.26704086618376 19.8153870411803 -16.2691031127409 0.294848451244549 -19.8873123545966 -16.2690687527393 0.185971022983149 19.8765056540833 -16.2690766527396 0.211927018415993 19.8548922630567 -16.2690924527404 0.26383900928168 19.8440855725434 -16.2691003527408 0.289795004714523 -19.9381619670118 -16.2690683827392 0.190605745053287 19.9288705565705 -16.2690750327396 0.212819375728377 19.9102877456879 -16.2690883527402 0.257246637098559 19.9009963452466 -16.2690950027405 0.27946026777365 -19.9862721192969 -16.2690690527393 0.194863973665542 19.978420788924 -16.2690744227395 0.213418559436837 19.9627181381782 -16.26908516274 0.250527730959428 19.9548668078053 -16.2690905327403 0.269082316720724 -20.0600434928009 -16.2690727127395 0.200807221567831 20.0543077125285 -16.2690761527396 0.213827504046261 20.0428361619836 -16.2690830327399 0.239868069003121 20.0371003817112 -16.2690864827401 0.252888351481552 -20.109374795144 -16.2690769727397 0.20435392471629 20.1050115149368 -16.2690791927398 0.213760274473068 20.0962849345223 -16.26908363274 0.232572973966623 20.091921644315 -16.2690858527401 0.241979323713401 -20.1647097877723 -16.26908461274 0.207553057978241 20.1619382676406 -16.2690857527401 0.21320702053679 20.1563952273774 -16.2690880327402 0.224514945663887 20.1536237172457 -16.2690891627402 0.230168908222436 -20.2070404997829 -16.2690917427404 0.209637834957262 20.2055073097101 -16.2690922027404 0.212571796366618 20.2024409395644 -16.2690931127404 0.218439719175329 20.2009077494916 -16.2690935727404 0.221373680584685 -20.2397666613373 -16.2690988227407 0.210800005022462 20.2391995213103 -16.2690989327407 0.211831831911472 20.2380652512565 -16.2690991727407 0.21389548569949 20.2374981112295 -16.2690992927407 0.214927312588499 -20.2590217622519 -16.2691035827409 0.211302165326314 20.2590217622519 -16.2691035827409 0.211302165326314 20.2590217622519 -16.2691035827409 0.211302165326314 20.2590217622519 -16.2691035827409 0.211302165326314 - -0 4 -0.66201458 1 -1.36297112 1 -2.59520727 1 -3.2584606 1 -3.49239086 1 -3.7643859 1 -3.93898534 1 -4.84267156 1 -5.04134187 1 -5.89529337 1 -6.14991318 1 -6.50638093 1 -7.01562055 4 - -0 3 -0.5 1 -1 3 - -9 0 0 0 0 3 2 13 4 11 3 20.2590863022549 -16.2691512227432 0.211307915576587 19.4994702561751 -13.7852729947653 -0.0206344007100814 17.9802381440154 -8.81751653780954 -0.484519033263418 17.2206220879356 -6.33363830883166 -0.716461349540086 -20.2041929296476 -16.2691376327425 0.209877228618633 19.4268990927281 -13.7852565247645 -0.0225382524905095 17.8723114188892 -8.81749431380849 -0.487369214688794 17.0950175819697 -6.33361320783047 -0.719784695797937 -20.1071168550368 -16.2691223127418 0.204735217664401 19.298573386633 -13.7852376947636 -0.0293474409539286 17.6814864398255 -8.81746847180726 -0.497512758200587 16.8729429614217 -6.33358385982908 -0.731595416808916 -19.9844946092125 -16.2691162027415 0.194784500991767 19.1364461989324 -13.7852296147632 -0.0425025292187617 17.4403493783721 -8.81745644480669 -0.517076589639819 16.592300968092 -6.33356985682841 -0.754363619850348 -19.9056561654679 -16.2691160827415 0.187659676683356 19.0322023139811 -13.7852289647632 -0.0519179189559687 17.2852946110074 -8.81745471880661 -0.531073110204618 16.4118407595206 -6.3335675968283 -0.770650705833943 -19.8545000030381 -16.2691168727415 0.182960492870157 18.9645625507683 -13.7852295847632 -0.0581270123608848 17.1846876462288 -8.81745500180662 -0.540302022822968 16.2947501939591 -6.33356771082831 -0.781389528054009 -19.8111440809788 -16.2691179327416 0.17898056258112 18.9072504280462 -13.7852305847633 -0.0633851893006348 17.0994631221809 -8.81745588180666 -0.548116693044145 16.1955694592482 -6.33356853282835 -0.7904824449259 -19.7486877580123 -16.2691198627417 0.173358349914079 18.824694204125 -13.7852325447634 -0.0708125995934178 16.9767071063503 -8.81745788680676 -0.559154498588412 16.0527135624629 -6.33357056082845 -0.80332544808591 -19.6836414949228 -16.2691219927418 0.167882093923971 18.7387034000406 -13.7852347547635 -0.0780474183370533 16.8488272002763 -8.81746028680687 -0.569906442889102 15.9038890953942 -6.33357304982856 -0.815835955160127 -19.6100248914262 -16.2691235127419 0.162491637477938 18.6413704054175 -13.7852362747636 -0.0851700966853623 16.7040614334003 -8.81746180480694 -0.580493564981964 15.7354069473917 -6.33357456782864 -0.828155299145264 -19.5415444081735 -16.2691236827419 0.158354546391437 18.5508233011168 -13.7852362647636 -0.0906381768850822 16.5693810770033 -8.81746145080693 -0.58862362343812 15.5786599699466 -6.33357404082861 -0.83761634671464 -19.4899853257246 -16.2691219927418 0.156280969472947 18.48267634788 -13.7852341947635 -0.0933813481653758 16.4680583721908 -8.81745858080679 -0.592705983452022 15.4607493943462 -6.33357077582846 -0.842368301090345 -19.4649382045349 -16.2691206027417 0.155575565579443 18.4495627163072 -13.7852325147634 -0.0943156516497529 16.4188117498517 -8.81745634380668 -0.594098086088144 15.4034362716239 -6.33356825682834 -0.843989303317339 - -0 4 -0.20693445 1 -0.36619212 1 -0.46349076 1 -0.50529197 1 -0.5598552 1 -0.6275512 1 -0.74155994 1 -0.80578618 1 -0.90569987 1 -1.00012561 4 - -0 3 -4.04682293 1 -8.09364585 3 - -9 0 0 0 0 3 2 16 4 12 3 17.2473973492074 -1.41640362527556 -1.33650391948053 17.2406785888883 -2.64572419666515 -1.1814929221179 17.22724104825 -5.10436533944433 -0.871470926792646 17.2205222879309 -6.33368591083392 -0.716459929370019 -17.137530413989 -1.41592883425301 -1.30912358718003 17.1415396441794 -2.64536865664826 -1.15677384494381 17.1495581045603 -5.10424829943877 -0.852074361541359 17.1535673347507 -6.33368812083403 -0.699724619815135 -16.9169794735134 -1.41537999122694 -1.25664080168723 16.9425575547283 -2.64495799562876 -1.10940924169411 16.993713717158 -5.10411400443239 -0.814946120317862 17.0192917983729 -6.33369200883421 -0.667714559704738 -16.6067141887766 -1.4157096902426 -1.18966791150619 16.6625140514269 -2.64520625964055 -1.04897858082381 16.7741137867276 -5.10419939943645 -0.767599920069038 16.829913649378 -6.3336959688344 -0.626910589626654 -16.4059482492407 -1.41656426828319 -1.15038628664041 16.4813219428207 -2.64584761367101 -1.01354760414093 16.6320693299809 -5.10441430344666 -0.739870240201949 16.7074430135609 -6.33369764883448 -0.603031558132461 -16.2946583339547 -1.41719324131306 -1.12960483665335 16.3808670180494 -2.64631952169343 -0.994803496910628 16.5532844062388 -5.10457208345415 -0.725200817325189 16.6394931003335 -6.33369836383452 -0.590399477542469 -16.1617181976404 -1.41798919235087 -1.10506608148782 16.2608705223499 -2.64691668372179 -0.972672066709442 16.4591751617688 -5.10477166546363 -0.707884038062686 16.5583274764783 -6.33369915583455 -0.575490023734308 -15.9172742760299 -1.41995483644423 -1.06316716049773 16.0402202918695 -2.64839110279182 -0.93489947020534 16.2861123135488 -5.105263634487 -0.678364089730564 16.4090583293884 -6.33369990083459 -0.550096399498176 -15.5816144000869 -1.42379991362686 -1.01310229511977 15.7373309774831 -2.65127475992879 -0.889806581563543 16.0487641322754 -5.10622445153264 -0.643215153581079 16.2044807096715 -6.33369929783456 -0.519919439584847 -15.2457588741347 -1.42875396986217 -0.970415175032245 15.4342277530864 -2.65498974710524 -0.851388108688763 15.81116549099 -5.10746130059138 -0.613333975991799 15.9996343699418 -6.33369707783445 -0.494306909638317 -14.9311581591919 -1.4344033771305 -0.937369952442682 15.1503306396021 -2.65922590730645 -0.821678175867617 15.5886756004223 -5.10887096865834 -0.590294622717489 15.8078480808325 -6.33369349883428 -0.474602846142425 -14.7286913395753 -1.43859883232977 -0.920095350052182 14.9675911209224 -2.66237170645586 -0.806165336100797 15.4453906936167 -5.10991745370804 -0.578305308208027 15.6842904749638 -6.33369032683413 -0.464375294256642 -14.6163502942394 -1.4410606404467 -0.911494905993683 14.8661892261061 -2.66421756854354 -0.798447783934233 15.3658670898395 -5.11053142473721 -0.572353539815333 15.6157060217062 -6.33368835283404 -0.459306417755883 -14.3703538225551 -1.44652299470615 -0.893189140394206 14.6441506755598 -2.66831322473807 -0.782024369474163 15.1917443815691 -5.11189368680191 -0.559694827614077 15.4655412445738 -6.33368391783383 -0.448530056684034 -14.1238896008487 -1.45278784900372 -0.880716685731796 14.4217380749958 -2.67301044196118 -0.770870692144391 15.0174350132899 -5.1134556278761 -0.551178704969583 15.3152834874369 -6.33367822083356 -0.441332711392178 -13.8994785001898 -1.45909637530336 -0.874210405012764 14.2192179353766 -2.67774027918583 -0.765094492920037 14.8586968057502 -5.11502808695079 -0.546862668744582 15.178436250937 -6.33367198983326 -0.437746756651854 - -0 4 -0.10030859 1 -0.20061717 1 -0.28141184 2 -0.30088038 1 -0.40114358 1 -0.50124738 1 -0.60135117 1 -0.70119205 1 -0.78141184 2 -0.80103292 1 -1 4 - -0 3 -0.91224293 1 -1.82448587 3 - -9 0 0 0 0 2 3 4 16 3 14 17.2473973492074 -1.41640362527556 -1.33650391948053 17.0477295997237 -1.41631531527136 -1.34180090173212 16.7484773155099 -1.41716046831151 -1.35733415746991 16.3850088282461 -1.41984437143899 -1.38451633176099 16.1860966287983 -1.42179260553152 -1.40105602854659 16.0248114411377 -1.42360192061746 -1.41501822720976 15.89095889478 -1.42528607869745 -1.42693525177578 15.6925325153553 -1.4280514418288 -1.4447808486234 15.5298260276271 -1.43061554895059 -1.45939596731759 15.3315693082104 -1.4340538381139 -1.47654188413197 15.1923963016001 -1.43663829023665 -1.48811481068166 15.0202900134255 -1.44006233039929 -1.50139483831242 14.8222596140195 -1.44422563559703 -1.51543068297909 14.5654421318213 -1.45006790587453 -1.53044032969201 14.3672709024087 -1.45496721210723 -1.5379204770473 14.2682020677032 -1.45750682722786 -1.54038318716427 -17.2406785888883 -2.64572419666515 -1.1814929221179 17.0604865203296 -2.64565188166172 -1.18627159134487 16.7904364375029 -2.64627962669153 -1.20031058601169 16.4623958019218 -2.64828891078697 -1.22490020417964 16.2828806833953 -2.64974898885632 -1.23986698489052 16.1373244864817 -2.65110544292075 -1.25250357449072 16.016524210744 -2.65236837498073 -1.2632909710031 15.8374538122387 -2.65444241507924 -1.27944825577053 15.6906305952649 -2.6563657761706 -1.29268488639923 15.5117148367669 -2.6589449392931 -1.30822120913717 15.3861126008011 -2.66088362138518 -1.31871249363548 15.2307920834238 -2.66345200750718 -1.3307598272077 15.0520739649351 -2.6665747646555 -1.34350356781299 14.8202855139258 -2.67095637386361 -1.35716058746167 14.6414537054317 -2.6746300440381 -1.36400813178691 14.552044071185 -2.67653409212854 -1.36628270989494 -17.22724104825 -5.10436533944433 -0.871470926792646 17.0860003415414 -5.10432501544242 -0.875212971080383 16.8743546814888 -5.10451794145158 -0.886263443825253 16.6171697692732 -5.10517799148293 -0.905667950246917 16.4764488025893 -5.10566175450591 -0.917488899378382 16.3623505771699 -5.10611248752732 -0.927474269992662 16.2676548326721 -5.10653296754729 -0.936002410877727 16.1272964160054 -5.10722436058013 -0.948783072244776 16.0122397305405 -5.10786623061062 -0.959262724382532 15.8720058838798 -5.10872714165151 -0.971579859107565 15.7735451992032 -5.10937428368224 -0.979907858963124 15.6517962434204 -5.11023135972295 -0.989489802848242 15.5117026667663 -5.11127302077243 -0.999649335490793 15.3299722681346 -5.11273330984179 -1.01060110300097 15.1898192914777 -5.11395570889985 -1.01618344226612 15.1197280881485 -5.11458862192991 -1.01808175435629 -17.2205222879309 -6.33368591083392 -0.716459929370019 17.0987572621474 -6.33366158183277 -0.719683661003138 16.9163138034818 -6.33363709883161 -0.729239872757034 16.6945567529489 -6.33362253083091 -0.746051823065559 16.5732328571863 -6.33361813683071 -0.756299856392314 16.474863622514 -6.3336160108306 -0.76495961765363 16.3932201486361 -6.33361526483057 -0.772358130595041 16.2722177228888 -6.33361533383057 -0.783450480251899 16.1730442881783 -6.33361645683063 -0.792551643564181 16.0521514024362 -6.33361824283071 -0.803259183972762 15.9672614984042 -6.33361961483077 -0.810505541566946 15.8622983234187 -6.33362103683084 -0.818854790863514 15.7415170076819 -6.3336221498309 -0.827722219524694 15.584815650239 -6.33362177783088 -0.837321360190629 15.4640020845007 -6.33361854083072 -0.842271097025728 15.4035701016303 -6.3336158858306 -0.843981276536958 - -0 3 -1.03589701 1 -2.07179401 3 - -0 4 -0.20060953 1 -0.30083473 1 -0.36612931 1 -0.40105994 1 -0.46342795 1 -0.50112525 1 -0.60119055 1 -0.62748839 1 -0.70103075 1 -0.74149713 1 -0.80087096 1 -0.90043548 1 -1 4 - -9 0 0 0 0 2 3 4 56 3 54 14.2682020677032 -1.45750682722786 -1.54038318716427 13.994730494714 -1.46457374056352 -1.54748268250148 13.6727119494189 -1.47356179299043 -1.53994658014353 13.3284045130652 -1.4841682214942 -1.52382488437779 13.2456510791346 -1.48677157661786 -1.51964050717905 13.2031165771144 -1.48812337568206 -1.51742649907389 13.1431408742657 -1.49004037377312 -1.5142602899235 13.0925789718641 -1.49167934585096 -1.5115063997927 12.9242246638677 -1.49720484811341 -1.50221147735121 12.7898721974863 -1.5017775593306 -1.49450940498538 12.6232441795719 -1.50766974861047 -1.48567868256595 12.5703738570607 -1.5095611367003 -1.4829532994365 12.5211765347239 -1.51134104078484 -1.48040870331564 12.5009980337655 -1.51207351981964 -1.47935993326582 12.468965062244 -1.51323848187497 -1.47768962218649 12.3846822082408 -1.51632319802148 -1.47322926197463 12.2340792610876 -1.52191828828724 -1.46462452056593 12.0732668334494 -1.5279915515757 -1.45307263001724 11.9496402775774 -1.53270059679937 -1.44181113848235 11.8882187446601 -1.53504734391083 -1.43553216018412 11.846804302693 -1.53663172698609 -1.43103364397045 11.8224610115367 -1.53756391503036 -1.42825178983832 11.804486090683 -1.53825326606311 -1.42615261173861 11.7827537096507 -1.53908707810271 -1.42359988861736 11.7417575077035 -1.5406638771776 -1.41865824238265 11.6931599653953 -1.54254681226704 -1.41269780209954 11.6495445233236 -1.544251380348 -1.40741637084869 11.6163239217458 -1.54555950841013 -1.40347658466156 11.5872365303642 -1.54671446046499 -1.40013948150305 11.5604829390934 -1.54778391051579 -1.39716845936194 11.507248516565 -1.54992442761746 -1.39135200708567 11.4601754543291 -1.55183974770843 -1.38604343383353 11.4225753425432 -1.55336627178094 -1.38080863058489 11.4195645924002 -1.55348849278674 -1.38038619256482 11.3880377309027 -1.55476809184752 -1.3759032733519 11.35660935941 -1.55604029490794 -1.37068160410388 11.3241922878702 -1.55733886496962 -1.36400811378691 11.3098733671901 -1.55791167799683 -1.36098789464345 11.2860035460564 -1.55886155604195 -1.35549999738279 11.2584815847492 -1.55992948709267 -1.34733494999497 11.2379230737727 -1.56071473812997 -1.3403540666634 11.2263446732227 -1.56114875715058 -1.33573039044379 11.2210482529712 -1.5613448321599 -1.33340035333312 11.2153324926997 -1.5615555281699 -1.3308040252098 11.2109207624901 -1.56171635317754 -1.32863594010682 11.2029006021092 -1.56200535919127 -1.32435818690364 11.1894552114706 -1.562483970214 -1.3165949295349 11.1717455806294 -1.56308520124256 -1.30319488589843 11.1582739999896 -1.56349704326212 -1.28815726618418 11.1519630196898 -1.56367260227046 -1.27914475575611 11.1495295895742 -1.56373632227349 -1.2752157535695 11.1432976192782 -1.56388869728072 -1.26390727903237 11.1396882991068 -1.56393752528304 -1.25281743950563 11.1375131190035 -1.56383690027826 -1.23125440648144 11.1385054890506 -1.56369168027137 -1.2192108309094 11.141208589179 -1.56350206126236 -1.20988124246627 -14.552044071185 -2.67653409212854 -1.36628270989494 14.3046563994347 -2.68183652038039 -1.37341077523351 14.0133881856002 -2.68857510670046 -1.36634251189778 13.701683920795 -2.69652714907816 -1.35178720920644 13.6267552272361 -2.69847905217087 -1.34803801902837 13.5882431054069 -2.69949261821901 -1.34605799793432 13.5339389428276 -2.70092999428728 -1.34323094680004 13.4881605406532 -2.70215898034566 -1.34077985568362 13.3357556234144 -2.70630261454247 -1.33252240929142 13.2141850576401 -2.70973252070538 -1.32571572496812 13.0635881804871 -2.7141542599154 -1.31793700959865 13.0158220982183 -2.71557383498283 -1.3155380184847 12.9713936961081 -2.71690994204629 -1.31331014837888 12.9531711852426 -2.71745978407241 -1.31238954633516 12.9242456738687 -2.71833429611394 -1.31092606426564 12.8481475502542 -2.72065000222393 -1.30701805208002 12.712176943796 -2.72485017342343 -1.29945968672102 12.5668574968937 -2.72940736463989 -1.28919333423339 12.454901421576 -2.73293813680759 -1.27902995775066 12.3991993689303 -2.73469682289112 -1.2733211144795 12.361611967145 -2.7358838649475 -1.26921908328467 12.339504196095 -2.73658212498067 -1.266678552164 12.3231745053194 -2.73709842600519 -1.26475733107275 12.3034318743816 -2.73772293303486 -1.26242289496187 12.2661823326124 -2.73890385109095 -1.25790150774711 12.2220299305152 -2.74031407515793 -1.2524336194874 12.1824316486344 -2.74159100021858 -1.24758254525699 12.1522913972028 -2.74257115326513 -1.24395764908482 12.1259256059505 -2.74343678630625 -1.24088266693876 12.1016948147996 -2.74423853334433 -1.23814124480855 12.0535208325115 -2.74584368542057 -1.23278868255432 12.0110258504931 -2.74728122348885 -1.22802524632807 11.9771559588844 -2.74842813754333 -1.22357159311653 11.9744437987555 -2.74851996354769 -1.22321162309943 11.9460451574067 -2.74948135459335 -1.21939341491808 11.9177607160632 -2.75043758763877 -1.21500261870953 11.8885226046745 -2.75141257568508 -1.20916586543229 11.8756044540609 -2.7518425997055 -1.20651569130642 11.8540454130369 -2.75255528873935 -1.20163337807452 11.8290802118511 -2.75335545777736 -1.19431270572681 11.8103463909613 -2.75394290880526 -1.18794040042414 11.7997480304579 -2.75426721282067 -1.18373155722423 11.7948910002272 -2.75441364182762 -1.18161780512383 11.7896462199781 -2.75457096383509 -1.17926459001206 11.7855971597858 -2.7546910238408 -1.17730211691885 11.7782270794357 -2.75490672285104 -1.17343310273508 11.7658670088487 -2.75526389886801 -1.16641347940167 11.7495882680755 -2.75571279188933 -1.15427240682499 11.7374438674986 -2.756021653904 -1.14069687318019 11.7317780972295 -2.75615399691028 -1.13251413979153 11.7295961571259 -2.75620220091257 -1.12893790162167 11.7240056568604 -2.75631794591807 -1.11862894313202 11.7207592467062 -2.75635684791992 -1.10848724665032 11.7187944566128 -2.7562869689166 -1.08907632972835 11.7196803366549 -2.7561817699116 -1.07834766121876 11.722123366771 -2.75604352490504 -1.06990632381782 -15.1197280881485 -5.11458862192991 -1.01808175435629 14.9245082188761 -5.11636208101415 -1.02526695869757 14.6947406479627 -5.11860173312053 -1.01913437540628 14.4482427262547 -5.12124500524607 -1.00771185886374 14.3889635234391 -5.1218940012769 -1.00483304172701 14.3584961519919 -5.12223110429291 -1.00332099565519 14.3155350799514 -5.12270923731562 -1.00117225855313 14.2793236682314 -5.12311825133505 -0.999326768425472 14.1588175225077 -5.12449814640059 -0.99314427323182 14.0628107879476 -5.12564244445494 -0.988128364973577 13.9442761923175 -5.12712328352528 -0.982453663604043 13.9067185705337 -5.12759923154788 -0.980707458541103 13.8718280188764 -5.12804774656919 -0.979113037345372 13.8575174981967 -5.12823231057795 -0.978448772613821 13.834806907118 -5.1285259265919 -0.977398948543957 13.7750782242811 -5.12930361262884 -0.974595634110807 13.6683722992128 -5.13071394369582 -0.969130018571204 13.5540388137823 -5.13223899076826 -0.961434743995698 13.4654237195733 -5.13341321882403 -0.953467595787279 13.4211606174709 -5.1339957818517 -0.948899020950283 13.3912273060491 -5.13438814087034 -0.945589961793111 13.3735905452114 -5.13461854588128 -0.943532075435367 13.3605513245921 -5.13478874688937 -0.941966770431019 13.3447882138434 -5.13499464289915 -0.940068907130875 13.3150319724301 -5.13538379791763 -0.936388038206043 13.2797698707552 -5.13584859993971 -0.931905252563122 13.248205909256 -5.13627023895973 -0.92791489319359 13.224226358117 -5.13659444397513 -0.92491977749133 13.2033037471232 -5.13688143798876 -0.922369037550176 13.184118556212 -5.13714778000142 -0.920086816621777 13.1460654744046 -5.1376822000268 -0.915662034361611 13.1127266528211 -5.13816417404969 -0.911988872707145 13.0863171915667 -5.13855187006811 -0.909097518619813 13.0842022014662 -5.13858290406958 -0.90886248472865 13.0620600204145 -5.13890787808502 -0.906373698730438 13.0400634393697 -5.13923217310042 -0.903644647350816 13.017183238283 -5.13955999811599 -0.89948136723307 13.0070666278025 -5.13970444312285 -0.897571284272346 12.990129146998 -5.13994275513417 -0.893900138327976 12.9702774460551 -5.14020739814674 -0.888268218330474 12.9551930153386 -5.14039925215585 -0.883113066115618 12.9465547349283 -5.14050412416083 -0.879733890305116 12.9425764947394 -5.14055126216307 -0.878052709095264 12.938273684535 -5.14060183616547 -0.876185720276587 12.9349499543771 -5.1406403661673 -0.874634472672906 12.9288800340888 -5.14070944917059 -0.871582935347966 12.9186906236048 -5.14082375617601 -0.866050578185193 12.9052736329676 -5.14096797318286 -0.856427449078119 12.8957835925168 -5.14107087518775 -0.845776088812207 12.891408272309 -5.14111678418993 -0.839252907002372 12.8897292922293 -5.14113395919075 -0.836382197566021 12.8854217120247 -5.14117644219277 -0.828072271551321 12.8829011319049 -5.14119549319367 -0.819826862189685 12.8813571518316 -5.14118710519327 -0.804720176462156 12.8820300118636 -5.14116194819208 -0.796621321647481 12.8839529119549 -5.14112645419039 -0.789956486170918 -15.4035701016303 -6.3336158858306 -0.843981276536958 15.2344341335968 -6.33362486183102 -0.851195051269594 15.0354168841439 -6.33361504683056 -0.845530307270533 14.8215221339845 -6.33360393383003 -0.835674183472392 14.7700676815405 -6.33360147682991 -0.833230552696326 14.7436226802845 -6.33360034682986 -0.831952494615621 14.7063331485133 -6.33359885882979 -0.830142915079671 14.6749052370206 -6.33359788682974 -0.828600224766397 14.5703484720544 -6.33359591282965 -0.823455205322022 14.4871236581014 -6.33359740582972 -0.819334684846307 14.3846201932328 -6.33360779483021 -0.814711990536741 14.3521668116913 -6.33361192983041 -0.813292178379304 14.3220451802606 -6.33361664883063 -0.812014481908616 14.3096906496738 -6.33361857383073 -0.811478385843153 14.2900875187427 -6.33362174083088 -0.810635390793113 14.2385435562945 -6.33363041683129 -0.808384424966198 14.1464699719212 -6.33364582783202 -0.803965184556295 14.0476294772266 -6.33365480383245 -0.797555448771849 13.9706848635719 -6.33365075983225 -0.790686414975588 13.9321412517412 -6.33364526083199 -0.786687974405672 13.9060349705012 -6.33364027883176 -0.783775400987332 13.8906337297697 -6.33363675583159 -0.78195883725105 13.8792397392285 -6.33363390683145 -0.780571489885155 13.8654663785743 -6.33363049783129 -0.778891913335379 13.8394567973389 -6.33362377183097 -0.775631303400508 13.8086398358752 -6.3336158628306 -0.771641069270982 13.7810930445668 -6.33360985783031 -0.768081067161891 13.7601938335741 -6.33360608883013 -0.765400841664587 13.7419928227096 -6.33360376383002 -0.763112222825884 13.7253304319182 -6.33360240382996 -0.76105960242839 13.6923378003511 -6.33360145682991 -0.757098710070257 13.6635770489851 -6.33360564883011 -0.753970685711684 13.6408978079079 -6.3336137358305 -0.751860481171455 13.6390814078216 -6.33361437383053 -0.751687915403259 13.6200674469185 -6.33362114083085 -0.749863840466619 13.601214806023 -6.33362946583124 -0.747965661626461 13.5815135550872 -6.33363370883144 -0.744639118308459 13.5727977146733 -6.33363536483152 -0.743099080675311 13.5581710139785 -6.33363648783158 -0.740033518609704 13.5408760631571 -6.33363336783143 -0.735245974412308 13.5276163325273 -6.33362742383115 -0.730699399186358 13.5199580821635 -6.33362258083092 -0.727735057005559 13.5164192419954 -6.3336200718308 -0.72627016110598 13.5125874218134 -6.33361727283066 -0.72464628526885 13.5096263516728 -6.33361503683056 -0.723300650344936 13.5042065114154 -6.33361081283036 -0.72065785146941 13.4951024209829 -6.33360368583002 -0.715869127731957 13.4831163104136 -6.33359556382963 -0.707504970144681 13.4749534600259 -6.33359548582963 -0.698315696448214 13.4712233498487 -6.33359817782976 -0.692622290827792 13.4697958597809 -6.33359983782984 -0.690104345558196 13.4661297496068 -6.33360569083011 -0.68279393577097 13.4639720795043 -6.33361481583055 -0.675496669804369 13.462638499441 -6.33363717283161 -0.66254209963906 13.4632048594679 -6.33365203783231 -0.655758151886839 13.4648676895469 -6.33366791783307 -0.649981567562466 - -0 3 -0.99202736 1 -1.98405473 3 - -0 4 -0.25497914 1 -0.29985592 1 -0.32138099 1 -0.33224101 1 -0.33957049 1 -0.37738166 1 -0.37945303 1 -0.49675462 1 -0.50278258 1 -0.53502039 1 -0.54611996 1 -0.54872251 1 -0.55386335 1 -0.57603323 1 -0.62743212 1 -0.69452426 1 -0.72624847 1 -0.74312738 1 -0.75208166 1 -0.76508939 1 -0.76597514 1 -0.76895748 1 -0.78549459 1 -0.80448165 1 -0.81460865 1 -0.82644819 1 -0.83565825 1 -0.84188614 1 -0.85152015 1 -0.88552919 1 -0.88600759 1 -0.8869222 1 -0.88836446 1 -0.91570647 1 -0.91664922 1 -0.91923484 1 -0.92935392 1 -0.939473 1 -0.94595868 1 -0.94961178 1 -0.95107783 1 -0.95132585 1 -0.95543082 1 -0.95562478 1 -0.95975056 1 -0.96983696 1 -0.97644745 1 -0.97789863 1 -0.97992336 1 -0.98072177 1 -0.98996168 1 -0.99094788 1 -1 4 - -9 0 0 0 0 3 2 34 4 32 3 13.4648676895469 -6.33366791783307 -0.649981567562466 12.8839529119549 -5.14112645419039 -0.789956486170918 11.722123366771 -2.75604352490504 -1.06990632381782 11.141208589179 -1.56350206126236 -1.20988124246627 -13.4716468998689 -6.33367414083336 -0.628680811970735 12.8916087923185 -5.14093460818128 -0.765426632795812 11.7315325772179 -2.75545554187711 -1.03891827434597 11.1514944696675 -1.56271600922502 -1.17566409484105 -13.4855407005288 -6.33367363283334 -0.608888978590673 12.907513343074 -5.14061773816623 -0.742612153532183 11.7514586181643 -2.75450594883201 -1.0100585029752 11.1734312607095 -1.56145005416489 -1.14378167832671 -13.5046796014378 -6.33367001583317 -0.592552423694729 12.9294448941156 -5.14022329814749 -0.723735697635599 11.7789754694713 -2.75332986177614 -0.986102245507341 11.2037407621491 -1.55988314409047 -1.11728551906821 -13.5108563417312 -6.33366875783311 -0.587629427220899 12.9365234344519 -5.14009737714151 -0.718046955865399 11.7878575998932 -2.75295461375832 -0.978882013144398 11.2135246826138 -1.55938323306673 -1.1092995416889 -13.5183692620881 -6.33366709783303 -0.582537830359061 12.9451351348609 -5.13994794613442 -0.712171157406313 11.7986668804066 -2.75250964273719 -0.971437811500818 11.2254327531794 -1.55879049103857 -1.10107113829807 -13.5254668624252 -6.33366562583296 -0.578158086271034 12.9532749452475 -5.1398085831278 -0.707116241276218 11.8088911308922 -2.75209449771747 -0.965032551276584 11.2366992137145 -1.5582374550123 -1.09399070596177 -13.5297735326297 -6.33366477983292 -0.575601990599626 12.9582150254822 -5.1397245111238 -0.704169366616249 11.815098021187 -2.75184397470557 -0.961304118649493 11.2435395240394 -1.55790370699645 -1.08987149476612 -13.5333024627973 -6.33366414283289 -0.573589012404015 12.9622645056745 -5.13965595812055 -0.701846172555903 11.8201885914288 -2.75163958869586 -0.958360492859679 11.249150634306 -1.55763140398352 -1.08661765261157 -13.5362538629375 -6.33366364183287 -0.571939274515657 12.9656517858354 -5.13959880211783 -0.69994347922553 11.8244476416311 -2.75146912268776 -0.955951888655276 11.253845564529 -1.55740428297273 -1.08395609348515 -13.5402414031269 -6.33366299283284 -0.569754445801883 12.9702290560528 -5.13952174911417 -0.697421283755732 11.8302043719045 -2.75123926267685 -0.95275495965343 11.2601920248304 -1.55709801895818 -1.08042179731728 -13.5484487935168 -6.33366182983278 -0.565468143308294 12.9796530865004 -5.13936416710669 -0.692472292090668 11.8420616524677 -2.7507688416545 -0.946480589645414 11.2732659454514 -1.55647117892841 -1.07348473798779 -13.557211853933 -6.33366097483274 -0.561350832012733 12.9897214069786 -5.1391981090988 -0.68771420443467 11.8547405130699 -2.75027237863092 -0.940440949268546 11.2872500661156 -1.55580951389698 -1.06680432167048 -13.5696778845251 -6.33366032783271 -0.55610629040363 13.0040475376591 -5.13896522508774 -0.681659025867065 11.8727868439271 -2.7495750195978 -0.932764496803934 11.3071564970611 -1.55487991685283 -1.05831723226737 -13.5800292350167 -6.33366041483271 -0.552305959443124 13.0159468182243 -5.1387750140787 -0.677277945958975 11.8877819846393 -2.74900421257069 -0.927221919000676 11.3236995678468 -1.55411881181668 -1.05219390597653 -13.5905560755167 -6.33366127083275 -0.54875030884424 13.0280765588004 -5.13858222806955 -0.673130577151985 11.9031175253677 -2.74842414354314 -0.921891113777476 11.3406380086514 -1.55334510177993 -1.04627138169522 -13.5979462458678 -6.33366213183279 -0.546311407568398 13.0366036992054 -5.13844677606311 -0.670264654105861 11.9139185858807 -2.74801606452375 -0.918171147170787 11.3525760392184 -1.55280070875407 -1.04212439349825 -13.6044516061767 -6.33366316983284 -0.544194393997845 13.0441130795621 -5.13832793705747 -0.667779838317839 11.9234360163328 -2.74765747150672 -0.914950726957826 11.3630974897181 -1.55232223773135 -1.03853617132782 -13.6134620266047 -6.33366497983293 -0.541243759777698 13.0544972000553 -5.13816506704973 -0.664377033096214 11.9365675369565 -2.74716524048334 -0.910643579713247 11.3776027104071 -1.55166532770014 -1.03377685310176 -13.6236759270899 -6.33366745683305 -0.53788825228832 13.066238850613 -5.13798313904109 -0.660597993826719 11.9513647176593 -2.74661450145718 -0.906017476903519 11.3939276411825 -1.55093018266523 -1.02872721886192 -13.6385095577944 -6.33367145983324 -0.533215463316374 13.0832003514186 -5.1377264990289 -0.655545921806759 11.9725819486671 -2.74583657642023 -0.900206838787528 11.4172727422913 -1.5498916156159 -1.02253729756791 -13.6494461783139 -6.33367433483337 -0.530117558859232 13.0957042120125 -5.13753880301999 -0.652190486167384 11.9882202794099 -2.74526773939321 -0.89633634076369 11.4344783131086 -1.54913220757983 -1.01840926837184 -13.6575557886991 -6.33367614483346 -0.52810098438345 13.1050253724553 -5.13739704501325 -0.649873876857351 11.9999645399677 -2.74483884637284 -0.893419661815155 11.4474341237239 -1.54855974755264 -1.01519255421906 -13.6623815389283 -6.33367716583351 -0.526947847068678 13.1105810027192 -5.13731221700923 -0.648522522513166 12.0069799503009 -2.74458231836066 -0.891671873402139 11.4551794140918 -1.54821736953638 -1.01324654912663 -13.670439259311 -6.33367863683358 -0.525192101125285 13.119883853161 -5.13716921900243 -0.646378003251306 12.0187730508611 -2.74415038234014 -0.888749807503349 11.4682176547111 -1.547640964509 -1.00993570996937 -13.6795697897447 -6.33367995183364 -0.523375070778981 13.1304388536624 -5.13700661699471 -0.644093025892776 12.0321769714977 -2.74365994731685 -0.885528936110366 11.4830460354154 -1.54698661147792 -1.00624689079416 -13.6871749101059 -6.33368074383368 -0.521935718370615 13.1392160640792 -5.13687217298832 -0.642299532647589 12.043298362026 -2.74325503129762 -0.883027161201538 11.4953395059993 -1.54644646045226 -1.00339097565851 -13.6957310005123 -6.33368142383371 -0.520316044103685 13.149064144547 -5.13672254598122 -0.640344004554707 12.0557304426164 -2.74280479027623 -0.880399925446751 11.5090635966512 -1.54584591142374 -1.00042788551777 -13.7033859008759 -6.33368177483373 -0.518836209713397 13.157844034964 -5.13659046897494 -0.638635827243573 12.0667602931403 -2.74240785725738 -0.878235062313925 11.5212184272285 -1.54531655039859 -0.998034679844101 -13.7100939911945 -6.33368182383373 -0.517435040326845 13.1655204453286 -5.13647539996948 -0.637074062029393 12.0763733535969 -2.74206255224098 -0.876352105424489 11.5317998077311 -1.54485612837673 -0.995991127127038 -13.7153402314437 -6.33368177783373 -0.516319447243857 13.1715226856137 -5.1363853729652 -0.635835662410572 12.0838875939538 -2.74179256222815 -0.874868092744003 11.5400700481239 -1.54449615735963 -0.994384307900718 -13.7298181921313 -6.3336812708337 -0.51316946300424 13.1880844164004 -5.13613659895339 -0.632351818805098 12.1046168749384 -2.74104725319275 -0.870716530416814 11.5628830992075 -1.54350258031244 -0.989898886217672 -13.7441149028104 -6.33367869683358 -0.509979563562728 13.2045219571811 -5.13588354994137 -0.628637679878686 12.1253360459225 -2.74029325515694 -0.865953912500602 11.5857430902932 -1.54249810826473 -0.98461202881656 -13.7551732833356 -6.33367429383337 -0.507938351705776 13.2172205577843 -5.13568794493208 -0.626233644924501 12.1413151166815 -2.73971524812949 -0.86282423137195 11.6033624011301 -1.54172890022819 -0.981119524590675 - -0 4 -0.19932786 1 -0.20034405 1 -0.22475745 1 -0.27019476 1 -0.28188184 1 -0.29921296 1 -0.31466043 1 -0.31775847 1 -0.32899256 1 -0.35467696 1 -0.39909806 1 -0.41449401 1 -0.47595518 1 -0.49918188 1 -0.5151171 1 -0.54615719 1 -0.56047289 1 -0.5992657 1 -0.64065463 1 -0.69662422 1 -0.69935878 1 -0.71520522 1 -0.74103304 1 -0.77367941 1 -0.79945187 1 -0.81107809 1 -0.85226486 1 -0.86941453 1 -0.87189401 1 -0.89972593 1 -1 4 - -0 3 -6.03441167 1 -12.06882334 3 - -9 1 1 0 0 2 2 4 4 3 3 20.1549001573063 -1.3686672230082 1.41444126018235 1 16.9193731036271 -1.36355460076537 1.41444126018235 1 10.4483189962685 -1.35332935627969 1.41444126118235 1 7.21279194058922 -1.34821673503686 1.41444126218235 1 -20.1549001573063 -0.799126971766493 1.97500000380746 0.85635206 16.9440827048007 -0.798168473190966 1.97773048693715 0.85417761 10.4731550374481 -0.796236761099215 1.98323337219853 0.84982873 7.21279194058922 -0.795263472082986 1.98600598933022 0.84765429 -20.1549001573063 0.799124827656391 1.97500018380747 0.85635206 16.9440827048007 0.798166722940883 1.97773066693716 0.85417761 10.4731550374481 0.79623580459917 1.98323355119853 0.84982873 7.21279194058922 0.79526291551296 1.98600616733023 0.84765429 -20.1549001573063 1.36866520500811 1.41444156718237 1 16.9193731036271 1.36355297976529 1.41444156618237 1 10.4483189962685 1.35332853127965 1.41444156518237 1 7.21279194058922 1.34821630603684 1.41444156518237 1 - -0 3 -0.5 1 -1 3 - -0 3 -2.02854902 1 -4.05709804 3 - -9 0 0 0 0 2 3 4 56 3 54 15.4035701016303 6.3336158858306 -0.843981276536958 15.2344341335968 6.33362486183102 -0.851195051269594 15.0354168841439 6.33361504683056 -0.845530307270533 14.8215221339845 6.33360393383003 -0.835674183472392 14.7700676815405 6.33360147682991 -0.833230552696326 14.7436226802845 6.33360034682986 -0.831952494615621 14.7063331485133 6.33359885882979 -0.830142915079671 14.6749052370206 6.33359788682974 -0.828600224726397 14.5703484720544 6.33359591282965 -0.823455205262022 14.4871236581014 6.33359740582972 -0.819334685036307 14.3846201932328 6.33360779483021 -0.814711990606741 14.3521668116913 6.33361192983041 -0.813292178379304 14.3220451802606 6.33361664883063 -0.812014481908616 14.3096906496738 6.33361857383073 -0.811478385843153 14.2900875187427 6.33362174083088 -0.810635390793113 14.2385435562945 6.33363041683129 -0.808384424966198 14.1464699719212 6.33364582783202 -0.803965184556295 14.0476293172266 6.33365480183245 -0.797555207601838 13.9706848635719 6.33365075983225 -0.790686414975588 13.9321412517412 6.33364526083199 -0.786687974405672 13.9060349705012 6.33364027883176 -0.783775400987332 13.8906337297697 6.33363675583159 -0.78195883725105 13.8792397392285 6.33363390683145 -0.780571489885155 13.8654663785743 6.33363049783129 -0.778891913335379 13.8394567973389 6.33362377183097 -0.775631303400508 13.8086398358752 6.3336158628306 -0.771641069270982 13.7810930445668 6.33360985783031 -0.768081067161891 13.7601938335741 6.33360608883013 -0.765400841664587 13.7419928227096 6.33360376383002 -0.763112222825884 13.7253304319182 6.33360240382996 -0.76105960242839 13.6923378003511 6.33360145682991 -0.757098710070257 13.6635770489851 6.33360564883011 -0.753970685711684 13.6408978079079 6.3336137358305 -0.751860481171455 13.6390814078216 6.33361437383053 -0.751687915403259 13.6200674469185 6.33362114083085 -0.749863840466619 13.601214806023 6.33362946583124 -0.747965661626461 13.5815135550872 6.33363370883144 -0.744639118308459 13.5727977146733 6.33363536483152 -0.743099080675311 13.5581710139785 6.33363648783158 -0.740033518609704 13.5408760631571 6.33363336783143 -0.735245974412308 13.5276163325273 6.33362742383115 -0.730699399186358 13.5199580821635 6.33362258083092 -0.727735057005559 13.5164192419954 6.3336200718308 -0.72627016110598 13.5125874218134 6.33361727283066 -0.72464628526885 13.5096263516728 6.33361503683056 -0.723300650344936 13.5042065114154 6.33361081283036 -0.72065785146941 13.4951024209829 6.33360368583002 -0.715869127731957 13.4831163104136 6.33359556382963 -0.707504970144681 13.4749534600259 6.33359548582963 -0.698315696448214 13.4712233498487 6.33359817782976 -0.692622290827792 13.4697958597809 6.33359983782984 -0.690104345558196 13.4661297496068 6.33360569083011 -0.68279393577097 13.4639720795043 6.33361481583055 -0.675496669804369 13.462638499441 6.33363717283161 -0.66254209963906 13.4632048594679 6.33365203783231 -0.655758151886839 13.4648676895469 6.33366791783307 -0.649981567562466 -15.1197280881485 5.11458862192991 -1.01808175435629 14.9245082188761 5.11636208101415 -1.02526695869757 14.6947406479627 5.11860173312053 -1.01913437540628 14.4482427262547 5.12124500524607 -1.00771185886374 14.3889635234391 5.1218940012769 -1.00483304172701 14.3584961519919 5.12223110429291 -1.00332099565519 14.3155350799514 5.12270923731562 -1.00117225855313 14.2793236682314 5.12311825133505 -0.999326768395472 14.1588175225077 5.12449814640059 -0.99314427318182 14.0628107979476 5.12564244445494 -0.988128365113577 13.9442761923175 5.12712328352528 -0.982453663654043 13.9067185705337 5.12759923154788 -0.980707458541103 13.8718280188764 5.12804774656919 -0.979113037345372 13.8575174981967 5.12823231057795 -0.978448772613821 13.834806907118 5.1285259265919 -0.977398948543957 13.7750782242811 5.12930361262884 -0.974595634110807 13.6683722992128 5.13071394369582 -0.969130018571204 13.5540386937823 5.13223898876826 -0.961434563125689 13.4654237195733 5.13341321882403 -0.953467595787279 13.4211606174709 5.1339957818517 -0.948899020950283 13.3912273060491 5.13438814087034 -0.945589961793111 13.3735905452114 5.13461854588128 -0.943532075435367 13.3605513245921 5.13478874688937 -0.941966770431019 13.3447882138434 5.13499464289915 -0.940068907130875 13.3150319724301 5.13538379791763 -0.936388038206043 13.2797698707552 5.13584859993971 -0.931905252563122 13.248205909256 5.13627023895973 -0.92791489319359 13.224226358117 5.13659444397513 -0.92491977749133 13.2033037471232 5.13688143798876 -0.922369037550176 13.184118556212 5.13714778000142 -0.920086816621777 13.1460654744046 5.1376822000268 -0.915662034361611 13.1127266528211 5.13816417404969 -0.911988872707145 13.0863171915667 5.13855187006811 -0.909097518619813 13.0842022014662 5.13858290406958 -0.90886248472865 13.0620600204145 5.13890787808502 -0.906373698730438 13.0400634393697 5.13923217310042 -0.903644647350816 13.017183238283 5.13955999811599 -0.89948136723307 13.0070666278025 5.13970444312285 -0.897571284272346 12.990129146998 5.13994275513417 -0.893900138327976 12.9702774460551 5.14020739814674 -0.888268218330474 12.9551930153386 5.14039925215585 -0.883113066115618 12.9465547349283 5.14050412416083 -0.879733890305116 12.9425764947394 5.14055126216307 -0.878052709095264 12.938273684535 5.14060183616547 -0.876185720276587 12.9349499543771 5.1406403661673 -0.874634472672906 12.9288800340888 5.14070944917059 -0.871582935347966 12.9186906236048 5.14082375617601 -0.866050578185193 12.9052736329676 5.14096797318286 -0.856427449078119 12.8957835925168 5.14107087518775 -0.845776088812207 12.891408272309 5.14111678418993 -0.839252907002372 12.8897292922293 5.14113395919075 -0.836382197566021 12.8854217120247 5.14117644219277 -0.828072271551321 12.8829011319049 5.14119549319367 -0.819826862189685 12.8813571518316 5.14118710519327 -0.804720176462156 12.8820300118636 5.14116194819208 -0.796621321647481 12.8839529119549 5.14112645419039 -0.789956486170918 -14.552044071185 2.67653409212854 -1.36628270989494 14.3046563994347 2.68183652038039 -1.37341077523351 14.0133881856002 2.68857510670046 -1.36634251189778 13.701683920795 2.69652714907816 -1.35178720920644 13.6267552272361 2.69847905217087 -1.34803801902837 13.5882431054069 2.69949261821901 -1.34605799793432 13.5339389428276 2.70092999428728 -1.34323094680004 13.4881605406532 2.70215898034566 -1.34077985568362 13.3357556234144 2.70630261454247 -1.33252240929142 13.2141850576401 2.70973252070538 -1.32571572496812 13.0635881804871 2.7141542599154 -1.31793700959865 13.0158220982183 2.71557383498283 -1.3155380184847 12.9713936961081 2.71690994204629 -1.31331014837888 12.9531711852426 2.71745978407241 -1.31238954633516 12.9242456738687 2.71833429611394 -1.31092606426564 12.8481475502542 2.72065000222393 -1.30701805208002 12.712176943796 2.72485017342343 -1.29945968672102 12.5668574568937 2.72940736463989 -1.28919327423339 12.454901421576 2.73293813680759 -1.27902995775066 12.3991993689303 2.73469682289112 -1.2733211144795 12.361611967145 2.7358838649475 -1.26921908328467 12.339504196095 2.73658212498067 -1.266678552164 12.3231745053194 2.73709842600519 -1.26475733107275 12.3034318743816 2.73772293303486 -1.26242289496187 12.2661823326124 2.73890385109095 -1.25790150774711 12.2220299305152 2.74031407515793 -1.2524336194874 12.1824316486344 2.74159100021858 -1.24758254525699 12.1522913972028 2.74257115326513 -1.24395764908482 12.1259256059505 2.74343678630625 -1.24088266693876 12.1016948147996 2.74423853334433 -1.23814124480855 12.0535208325115 2.74584368542057 -1.23278868255432 12.0110258504931 2.74728122348885 -1.22802524632807 11.9771559588844 2.74842813754333 -1.22357159311653 11.9744437987555 2.74851996354769 -1.22321162309943 11.9460451574067 2.74948135459335 -1.21939341491808 11.9177607160632 2.75043758763877 -1.21500261870953 11.8885226046745 2.75141257568508 -1.20916586543229 11.8756044540609 2.7518425997055 -1.20651569130642 11.8540454130369 2.75255528873935 -1.20163337807452 11.8290802118511 2.75335545777736 -1.19431270572681 11.8103463909613 2.75394290880526 -1.18794040042414 11.7997480304579 2.75426721282067 -1.18373155722423 11.7948910002272 2.75441364182762 -1.18161780512383 11.7896462199781 2.75457096383509 -1.17926459001206 11.7855971597858 2.7546910238408 -1.17730211691885 11.7782270794357 2.75490672285104 -1.17343310273508 11.7658670088487 2.75526389886801 -1.16641347940167 11.7495882680755 2.75571279188933 -1.15427240682499 11.7374438674986 2.756021653904 -1.14069687318019 11.7317780972295 2.75615399691028 -1.13251413979153 11.7295961571259 2.75620220091257 -1.12893790162167 11.7240056568604 2.75631794591807 -1.11862894313202 11.7207592467062 2.75635684791992 -1.10848724665032 11.7187944566128 2.7562869689166 -1.08907632972835 11.7196803366549 2.7561817699116 -1.07834766121876 11.722123366771 2.75604352490504 -1.06990632381782 -14.2682020677032 1.45750682722786 -1.54038318716427 13.994730494714 1.46457374056352 -1.54748268250148 13.6727119494189 1.47356179299043 -1.53994658014353 13.3284045130652 1.4841682214942 -1.52382488437779 13.2456510791346 1.48677157661786 -1.51964050717905 13.2031165771144 1.48812337568206 -1.51742649907389 13.1431408742657 1.49004037377312 -1.5142602899235 13.0925789718641 1.49167934585096 -1.5115063997927 12.9242246638677 1.49720484811341 -1.50221147735121 12.7898721974863 1.5017775593306 -1.49450940498538 12.6232441795719 1.50766974861047 -1.48567868256595 12.5703738570607 1.5095611367003 -1.4829532994365 12.5211765347239 1.51134104078484 -1.48040870331564 12.5009980337655 1.51207351981964 -1.47935993326582 12.468965062244 1.51323848187497 -1.47768962218649 12.3846822082408 1.51632319802148 -1.47322926197463 12.2340792610876 1.52191828828724 -1.46462452056593 12.0732668334494 1.5279915515757 -1.45307263001724 11.9496402775774 1.53270059679937 -1.44181113848235 11.8882187446601 1.53504734391083 -1.43553216018412 11.846804302693 1.53663172698609 -1.43103364397045 11.8224610115367 1.53756391503036 -1.42825178983832 11.804486090683 1.53825326606311 -1.42615261173861 11.7827537096507 1.53908707810271 -1.42359988861736 11.7417575077035 1.5406638771776 -1.41865824238265 11.6931599653953 1.54254681226704 -1.41269780209954 11.6495445233236 1.544251380348 -1.40741637084869 11.6163239217458 1.54555950841013 -1.40347658466156 11.5872365303642 1.54671446046499 -1.40013948150305 11.5604829390934 1.54778391051579 -1.39716845936194 11.507248516565 1.54992442761746 -1.39135200708567 11.4601754543291 1.55183974770843 -1.38604343383353 11.4225753425432 1.55336627178094 -1.38080863058489 11.4195645924002 1.55348849278674 -1.38038619256482 11.3880377309027 1.55476809184752 -1.3759032733519 11.35660935941 1.55604029490794 -1.37068160410388 11.3241922878702 1.55733886496962 -1.36400811378691 11.3098733671901 1.55791167799683 -1.36098789464345 11.2860035460564 1.55886155604195 -1.35549999738279 11.2584815847492 1.55992948709267 -1.34733494999497 11.2379230737727 1.56071473812997 -1.3403540666634 11.2263446732227 1.56114875715058 -1.33573039044379 11.2210482529712 1.5613448321599 -1.33340035333312 11.2153324926997 1.5615555281699 -1.3308040252098 11.2109207624901 1.56171635317754 -1.32863594010682 11.2029006021092 1.56200535919127 -1.32435818690364 11.1894552114706 1.562483970214 -1.3165949295349 11.1717455806294 1.56308520124256 -1.30319488589843 11.1582739999896 1.56349704326212 -1.28815726618418 11.1519630196898 1.56367260227046 -1.27914475575611 11.1495295895742 1.56373632227349 -1.2752157535695 11.1432976192782 1.56388869728072 -1.26390727903237 11.1396882991068 1.56393752528304 -1.25281743950563 11.1375131190035 1.56383690027826 -1.23125440648144 11.1385054890506 1.56369168027137 -1.2192108309094 11.141208589179 1.56350206126236 -1.20988124246627 - -0 3 -0.99202737 1 -1.98405473 3 - -0 4 -0.25497914 1 -0.29985592 1 -0.32138099 1 -0.33224101 1 -0.33957049 1 -0.37738166 1 -0.37945303 1 -0.49675462 1 -0.50278258 1 -0.53502039 1 -0.54611996 1 -0.54872251 1 -0.55386335 1 -0.57603323 1 -0.62743212 1 -0.69452426 1 -0.72624847 1 -0.74312738 1 -0.75208166 1 -0.76508939 1 -0.76597514 1 -0.76895748 1 -0.78549459 1 -0.80448165 1 -0.81460865 1 -0.82644819 1 -0.83565825 1 -0.84188614 1 -0.85152015 1 -0.88552919 1 -0.88600759 1 -0.8869222 1 -0.88836446 1 -0.91570647 1 -0.91664922 1 -0.91923484 1 -0.92935392 1 -0.939473 1 -0.94595868 1 -0.94961178 1 -0.95107783 1 -0.95132585 1 -0.95543082 1 -0.95562478 1 -0.95975056 1 -0.96983696 1 -0.97644745 1 -0.97789863 1 -0.97992336 1 -0.98072177 1 -0.98996168 1 -0.99094788 1 -1 4 - -9 0 0 0 0 2 3 4 16 3 14 14.2682020677032 1.45750682722786 -1.54038318716427 14.3672709024087 1.45496721210723 -1.5379204770473 14.5654421318213 1.45006790587453 -1.53044032969201 14.8222596140195 1.44422563559703 -1.51543068297909 15.0202900134255 1.44006233039929 -1.50139483831242 15.1923963016001 1.43663829023665 -1.48811481068166 15.3315693082104 1.4340538381139 -1.47654188413197 15.5298260276271 1.43061554895059 -1.45939596731759 15.6925325153553 1.4280514418288 -1.4447808486234 15.89095889478 1.42528607869745 -1.42693525177578 16.0248114411377 1.42360192061746 -1.41501822720976 16.1860966287983 1.42179260553152 -1.40105602854659 16.3850088282461 1.41984437143899 -1.38451633176099 16.7484773155099 1.41716046831151 -1.35733415746991 17.0477295997237 1.41631531527136 -1.34180090173212 17.2473973492074 1.41640362527556 -1.33650391948053 -14.552044071185 2.67653409212854 -1.36628270989494 14.6414537054317 2.6746300440381 -1.36400813178691 14.8202855139258 2.67095637386361 -1.35716058746167 15.0520739649351 2.6665747646555 -1.34350356781299 15.2307920834238 2.66345200750718 -1.3307598272077 15.3861126008011 2.66088362138518 -1.31871249363548 15.5117148367669 2.6589449392931 -1.30822120913717 15.6906305952649 2.6563657761706 -1.29268488639923 15.8374538122387 2.65444241507924 -1.27944825577053 16.016524210744 2.65236837498073 -1.2632909710031 16.1373244864817 2.65110544292075 -1.25250357449072 16.2828806833953 2.64974898885632 -1.23986698489052 16.4623958019218 2.64828891078697 -1.22490020417964 16.7904364375029 2.64627962669153 -1.20031058601169 17.0604865203296 2.64565188166172 -1.18627159134487 17.2406785888883 2.64572419666515 -1.1814929221179 -15.1197280881485 5.11458862192991 -1.01808175435629 15.1898192914777 5.11395570889985 -1.01618344226612 15.3299722681346 5.11273330984179 -1.01060110300097 15.5117026667663 5.11127302077243 -0.999649335490793 15.6517962434204 5.11023135972295 -0.989489802848242 15.7735451992032 5.10937428368224 -0.979907858963124 15.8720058838798 5.10872714165151 -0.971579859107565 16.0122397305405 5.10786623061062 -0.959262724382532 16.1272964160054 5.10722436058013 -0.948783072244776 16.2676548326721 5.10653296754729 -0.936002410877727 16.3623505771699 5.10611248752732 -0.927474269992662 16.4764488025893 5.10566175450591 -0.917488899378382 16.6171697692732 5.10517799148293 -0.905667950246917 16.8743546814888 5.10451794145158 -0.886263443825253 17.0860003415414 5.10432501544242 -0.875212971080383 17.22724104825 5.10436533944433 -0.871470926792646 -15.4035701016303 6.3336158858306 -0.843981276536958 15.4640020845007 6.33361854083072 -0.842271097025728 15.584815650239 6.33362177783088 -0.837321360190629 15.7415170076819 6.3336221498309 -0.827722219524694 15.8622983234187 6.33362103683084 -0.818854790863514 15.9672614984042 6.33361961483077 -0.810505541566946 16.0521514024362 6.33361824283071 -0.803259183972762 16.1730442881783 6.33361645683063 -0.792551643564181 16.2722177228888 6.33361533383057 -0.783450480251899 16.3932201486361 6.33361526483057 -0.772358130595041 16.474863622514 6.3336160108306 -0.76495961765363 16.5732328571863 6.33361813683071 -0.756299856392314 16.6945567529489 6.33362253083091 -0.746051823065559 16.9163138034818 6.33363709883161 -0.729239872757034 17.0987572621474 6.33366158183277 -0.719683661003138 17.2205222879309 6.33368591083392 -0.716459929370019 - -0 3 -1.03589701 1 -2.07179401 3 - -0 4 -0.09956452 1 -0.19912904 1 -0.25850287 1 -0.29896925 1 -0.37251161 1 -0.39880945 1 -0.49887475 1 -0.53657205 1 -0.59894006 1 -0.63387069 1 -0.69916527 1 -0.79939047 1 -1 4 - -9 0 0 0 0 3 2 15 4 11 3 13.8994785001898 1.45909637530336 -0.874210405012764 14.2192179353766 2.67774027918583 -0.765094492920037 14.8586968057502 5.11502808695079 -0.546862668744582 15.178436250937 6.33367198983326 -0.437746756651854 -14.1460198318999 1.45216573597417 -0.881358300612271 14.4417095359444 2.67254401093902 -0.771440310271447 15.0330889340334 5.11330055986873 -0.551604329569799 15.3287786380779 6.33367883483359 -0.441686339218974 -14.3924764536059 1.44596653667972 -0.894355835049621 14.664114346508 2.66789600771825 -0.783068113233738 15.2073901423122 5.11175494779532 -0.560492669611972 15.4790280452143 6.33368441883385 -0.449204947796089 -14.7286913395753 1.43859883232977 -0.920095350052182 14.9675911209224 2.66237170645586 -0.806165336100797 15.4453906936167 5.10991745370804 -0.578305308208027 15.6842904749638 6.33369032683413 -0.464375294256642 -14.9311581591919 1.4344033771305 -0.937369952442682 15.1503306896021 2.65922590730645 -0.821678109987614 15.5886757304223 5.10887096865834 -0.590294425067479 15.8078482608325 6.33369349883428 -0.474602582602412 -15.2457588741347 1.42875396986217 -0.970415175032245 15.4342277130864 2.65498974710524 -0.851388164778766 15.81116538099 5.10746130059138 -0.613334144261807 15.9996342199418 6.33369707783445 -0.494307134008328 -15.5816144000869 1.42379991362686 -1.01310229511977 15.7373309774831 2.65127475992879 -0.889806584283543 16.0487641322754 5.10622445153264 -0.643215161741079 16.2044807096715 6.33369929783456 -0.519919450474848 -15.9172742760299 1.41995483644423 -1.06316716049773 16.0402203218695 2.64839110279182 -0.934899413825337 16.2861124235488 5.105263634487 -0.678363920610556 16.4090584793884 6.33369990083459 -0.550096173998165 -16.1617181976404 1.41798919235087 -1.10506608148782 16.2608705223499 2.64691668372179 -0.972672066709442 16.4591751617688 5.10477166546363 -0.707884038062686 16.5583274764783 6.33369915583455 -0.575490023734308 -16.2946583339547 1.41719324131306 -1.12960483665335 16.3808670180494 2.64631952169343 -0.994803496910628 16.5532844062388 5.10457208345415 -0.725200817325189 16.6394931003335 6.33369836383452 -0.590399477542469 -16.4059482492407 1.41656426828319 -1.15038628664041 16.4813219428207 2.64584761367101 -1.01354760414093 16.6320693299809 5.10441430344666 -0.739870240201949 16.7074430135609 6.33369764883448 -0.603031558132461 -16.6067141887766 1.4157096902426 -1.18966791150619 16.6625140514269 2.64520625964055 -1.04897858082381 16.7741137867276 5.10419939943645 -0.767599920069038 16.829913649378 6.3336959688344 -0.626910589626654 -16.9169794735134 1.41537999122694 -1.25664080168723 16.9425575547283 2.64495799562876 -1.10940924169411 16.993713717158 5.10411400443239 -0.814946120317862 17.0192917983729 6.33369200883421 -0.667714559704738 -17.137530413989 1.41592883425301 -1.30912358718003 17.1415396441794 2.64536865664826 -1.15677384494381 17.1495581045603 5.10424829943877 -0.852074361541359 17.1535673347507 6.33368812083403 -0.699724619815135 -17.2473973492074 1.41640362527556 -1.33650391948053 17.2406785888883 2.64572419666515 -1.1814929221179 17.22724104825 5.10436533944433 -0.871470926792646 17.2205222879309 6.33368591083392 -0.716459929370019 - -0 4 -0.21858816 2 -0.29880795 1 -0.39864883 1 -0.49875262 1 -0.59885642 1 -0.69911962 1 -0.71858816 2 -0.79938283 1 -0.89969141 1 -1 4 - -0 3 -0.91223985 1 -1.82447971 3 - -9 0 0 0 0 3 2 14 4 12 3 15.178436250937 6.33367198983326 -0.437746756651854 14.8586968057502 5.11502808695079 -0.546862668744582 14.2192179353766 2.67774027918583 -0.765094492920037 13.8994785001898 1.45909637530336 -0.874210405012764 -15.1305883186643 6.33367577683344 -0.435972591527586 14.8035063031288 5.11557325697668 -0.544764356224917 14.1493422820577 2.67936821926316 -0.76234788560958 13.8222602665221 1.46126570040639 -0.871139650306911 -15.0348614941176 6.33368260583377 -0.433253927668456 14.693063507883 5.1166999900302 -0.541519173950779 14.009467525414 2.68273475942306 -0.758049666505425 13.6676695291794 1.46575214461949 -0.866314912787748 -14.891557237311 6.33369059983415 -0.431668949883174 14.5278180000343 5.11848420411494 -0.539511857455437 13.8003395354809 2.68807141267654 -0.755197672619963 13.4366003082042 1.47286501695733 -0.863040580202226 -14.7958659227659 6.33369445783433 -0.432261066741298 14.4174572347924 5.1197403051746 -0.540074555682164 13.6606398688455 2.69183199985515 -0.755701533563895 13.2822311808721 1.47787784819543 -0.863515022504761 -14.7003030582269 6.33369757083448 -0.433676218018514 14.3072794095593 5.12102395623557 -0.541586596103982 13.521232102224 2.69567672803777 -0.757407352294917 13.1282084435564 1.48300311343886 -0.865317730380385 -14.6047480336883 6.33369993483459 -0.435926893705415 14.1971108643266 5.12233802129799 -0.544059469861437 13.3818365256031 2.69961419622479 -0.76032462217348 12.9741993562414 1.48825228368819 -0.868457198319502 -14.461997306908 6.33370123583465 -0.441773569883118 14.0324498865056 5.12439065839548 -0.550625070523286 13.1733550257008 2.70576950351715 -0.768328071803624 12.7438075952984 1.49645892507798 -0.877179572443792 -14.3152798699393 6.33370028283461 -0.450336686769844 13.8632322984682 5.12658388749966 -0.560323386333932 12.959137165526 2.71235109882976 -0.780296785462107 12.5070896040549 1.50523470349481 -0.890283485036194 -14.1734691532036 6.33369704183445 -0.461198698415762 13.6996470506983 5.12878552060423 -0.572694512001528 12.7520028356876 2.71896247914378 -0.795686139173062 12.2781807231823 1.51405095791356 -0.907181952768829 -14.0791087387218 6.33369341283428 -0.470066980366982 13.5908245255295 5.13029736267604 -0.582825570782728 12.614256089145 2.72350526335955 -0.808342751624219 12.1259718659527 1.52010921320131 -0.921101342049964 -13.9424783522322 6.33368719183398 -0.483985931298097 13.4332635480458 5.13251577778141 -0.59874415595882 12.4148339296729 2.73017294967625 -0.828260605280266 11.9056191254865 1.52900153562367 -0.943018829940989 -13.848680137777 6.33368146383371 -0.49516639001914 13.3250698529068 5.13408488985594 -0.611563534367708 12.2778492831665 2.73489174190038 -0.844357823074843 11.7542389982964 1.5352951679226 -0.96075496743341 -13.7551732833356 6.33367429383337 -0.507938351705776 13.2172205577843 5.13568794493208 -0.626233644924501 12.1413151166815 2.73971524812949 -0.86282423137195 11.6033624011301 1.54172890022819 -0.981119524590675 - -0 4 -0.10071181 1 -0.20142363 1 -0.30133898 1 -0.30180139 1 -0.40217916 1 -0.50219563 1 -0.60221211 1 -0.71129647 1 -0.80133898 1 -0.80149288 1 -1 4 - -0 3 -1.38127605 1 -2.76255209 3 - -9 0 0 0 0 3 2 33 4 31 3 13.7551732833356 6.33367429383337 -0.507938351705776 13.2172205577843 5.13568794493208 -0.626233644924501 12.1413151166815 2.73971524812949 -0.86282423137195 11.6033624011301 1.54172890022819 -0.981119524590675 -13.7441149028104 6.33367869683358 -0.509979563562728 13.2045219571811 5.13588354994137 -0.628637679878686 12.1253360459225 2.74029325515694 -0.865953912500602 11.5857430902932 1.54249810826473 -0.98461202881656 -13.7295414821182 6.33368132083371 -0.513231203227173 13.1877662663853 5.13614149595362 -0.632423705638513 12.1042158549194 2.74106184619345 -0.870808710461192 11.5624406491864 1.54352202131336 -0.990001212872532 -13.7131642413403 6.33368184783373 -0.516792646076332 13.1690337554955 5.13642274096698 -0.636358462405404 12.0807727838059 2.74190452723347 -0.875490095063546 11.5366422979611 1.54464542036672 -0.995055911392618 -13.7033859008759 6.33368177483373 -0.518836209713397 13.157844034964 5.13659046897494 -0.638635827243573 12.0667602931403 2.74240785725738 -0.878235062313925 11.5212184272285 1.54531655039859 -0.998034679844101 -13.6957310005123 6.33368142383371 -0.520316044103685 13.149064144547 5.13672254598122 -0.640344004554707 12.0557304426164 2.74280479027623 -0.880399925446751 11.5090635966512 1.54584591142374 -1.00042788551777 -13.6871749101059 6.33368074383368 -0.521935718370615 13.1392160640792 5.13687217298832 -0.642299532647589 12.043298362026 2.74325503129762 -0.883027161201538 11.4953395059993 1.54644646045226 -1.00339097565851 -13.6795697897447 6.33367995183364 -0.523375070778981 13.1304388536624 5.13700661699471 -0.644093025892776 12.0321769714977 2.74365994731685 -0.885528936110366 11.4830460354154 1.54698661147792 -1.00624689079416 -13.6687218392294 6.33367838883357 -0.525533876791519 13.1178985030667 5.13719980300389 -0.64680779776172 12.0162518307413 2.74424263134453 -0.889355639692124 11.4654285045786 1.54776404451484 -1.01062956100233 -13.6603668188326 6.33367677683349 -0.52739715611002 13.1082557726087 5.13734793801092 -0.649067400529046 12.004033670161 2.74469025936579 -0.892407889387098 11.4519226239371 1.54836142054322 -1.01407813416612 -13.6553348785936 6.33367564883344 -0.5286536599997 13.102472712334 5.1374358650151 -0.650508605157499 11.9967483798149 2.74495629737842 -0.894218495463097 11.4438862135554 1.54871651356008 -1.0160734402609 -13.6489469482902 6.33367420383337 -0.530258970305948 13.0951334419854 5.13754737102039 -0.652343653244659 11.987506429376 2.74529370539445 -0.896513019132081 11.4336929230712 1.54916687258147 -1.01859770238079 -13.6383096977849 6.33367140583324 -0.533278421969365 13.0829718214078 5.13772995702907 -0.655613990719992 11.9722960786535 2.74584705742073 -0.900285128201247 11.4169582022764 1.54990560861656 -1.02262069657187 -13.6276200472772 6.3336685208331 -0.536646125879322 13.0707488008272 5.13791489903785 -0.659254928882927 11.9570062879273 2.74640765344736 -0.904472534890138 11.4001350314773 1.55065403065211 -1.02708133778374 -13.6189223268641 6.33366630383299 -0.539449920442495 13.0607742303535 5.13806780904511 -0.662356775550257 11.9444780473322 2.74687081746936 -0.908170485785781 11.3863299508216 1.55127232268148 -1.03107734097354 -13.6131846365915 6.33366492383293 -0.541334598022012 13.0541775100401 5.13817008104997 -0.66448179187119 11.9361632769373 2.74718039448406 -0.910776179569545 11.3771561503859 1.55168555070111 -1.03392337310872 -13.6044516061767 6.33366316983284 -0.544194393997845 13.0441130795621 5.13832793705747 -0.667779838317839 11.9234360163328 2.74765747150672 -0.914950726957826 11.3630974897181 1.55232223773135 -1.03853617132782 -13.5979462458678 6.33366213183279 -0.546311407568398 13.0366036992054 5.13844677606311 -0.670264654105861 11.9139185858807 2.74801606452375 -0.918171147170787 11.3525760392184 1.55280070875407 -1.04212439349825 -13.5905560755167 6.33366127083275 -0.54875030884424 13.0280765588004 5.13858222806955 -0.673130577151985 11.9031175253677 2.74842414354314 -0.921891113777476 11.3406380086514 1.55334510177993 -1.04627138169522 -13.5784185649402 6.33366028383271 -0.552849995788964 13.0140908881361 5.13880451108011 -0.677912518819115 11.8854355545279 2.7490929665749 -0.928037564889417 11.3211078777237 1.5542371938223 -1.05310008801957 -13.5679662244438 6.33366033683271 -0.556743959983918 13.0020807775657 5.13899669808923 -0.682392692151912 11.8703098838094 2.74966941860228 -0.933690156497901 11.3044244369313 1.55500577985881 -1.05933888831589 -13.5555121438522 6.33366114083275 -0.562149439620664 12.9877685268859 5.13923031810033 -0.688637099178506 11.8522812829531 2.7503686746355 -0.941612418314188 11.2845376559868 1.55593785290308 -1.06810007773203 -13.5468603834413 6.33366199183279 -0.566222022224102 12.9778281764137 5.13939430310812 -0.693343419842044 11.8397637723586 2.75085892665878 -0.947586215077928 11.270731565331 1.55659123893411 -1.07470761304587 -13.5369336129698 6.33366348883286 -0.571514627595487 12.9664313858724 5.1395854151172 -0.699453300592248 11.8254269216776 2.75142926768587 -0.955330646575769 11.2549246945802 1.55735119397021 -1.08326931945253 -13.5297735326297 6.33366477983292 -0.575601990599626 12.9582150254822 5.1397245111238 -0.704169366616249 11.815098021187 2.75184397470557 -0.961304118649493 11.2435395240394 1.55790370699645 -1.08987149476612 -13.5254668624252 6.33366562583296 -0.578158086271034 12.9532749452475 5.1398085831278 -0.707116241276218 11.8088911308922 2.75209449771747 -0.965032551276584 11.2366992137145 1.5582374550123 -1.09399070596177 -13.5183692620881 6.33366709783303 -0.582537830359061 12.9451351348609 5.13994794613442 -0.712171157406313 11.7986668804066 2.75250964273719 -0.971437811500818 11.2254327531794 1.55879049103857 -1.10107113829807 -13.5108563417312 6.33366875783311 -0.587629427220899 12.9365234344519 5.14009737714151 -0.718046955865399 11.7878575998932 2.75295461375832 -0.978882013144398 11.2135246826138 1.55938323306673 -1.1092995416889 -13.5046796014378 6.33367001583317 -0.592552423694729 12.9294448941156 5.14022329814749 -0.723735697635599 11.7789754694713 2.75332986177614 -0.986102245507341 11.2037407621491 1.55988314409047 -1.11728551906821 -13.5011366912696 6.3336706848332 -0.595577961158434 12.9253850939228 5.14029631015096 -0.727230998091617 11.7738818992294 2.75354756178649 -0.990537071947984 11.1981303018826 1.56017318810425 -1.12219010930117 -13.4843485404722 6.33367367583334 -0.610587212781335 12.9061486530091 5.14064492716752 -0.744569745235164 11.7497488680831 2.75458742883588 -1.01253481009282 11.1715489706201 1.56155867917005 -1.14651734245665 -13.4710968098427 6.33367363583334 -0.630409243532831 12.890987562289 5.14095017518202 -0.767417086740354 11.7307690671816 2.75550325387938 -1.0414327734654 11.1506598296279 1.56277979222805 -1.17844061597292 -13.4648676895469 6.33366791783307 -0.649981567562466 12.8839529119549 5.14112645419039 -0.789956486170918 11.722123366771 2.75604352490504 -1.06990632381782 11.141208589179 1.56350206126236 -1.20988124246627 - -0 4 -0.10027407 1 -0.13058547 1 -0.14773514 1 -0.18892191 1 -0.20054813 1 -0.22632059 1 -0.25896696 1 -0.30064122 1 -0.30337578 1 -0.30521021 1 -0.35934537 1 -0.4007343 1 -0.4033249 1 -0.43952711 1 -0.45384281 1 -0.4848829 1 -0.50081812 1 -0.52404482 1 -0.60090194 1 -0.60209014 1 -0.64532304 1 -0.68533957 1 -0.70078704 1 -0.71811816 1 -0.72980524 1 -0.77524255 1 -0.79965595 1 -0.80067214 1 -0.81684643 1 -1 4 - -0 3 -6.03682127 1 -12.07364253 3 - -9 0 0 0 0 3 2 19 4 15 3 20.2590856322549 16.2691512227432 0.211298308496131 19.499468896175 13.7852729847653 -0.020649298340789 17.9802354340153 8.81751651680954 -0.484544512034628 17.2206187079355 6.33363828283166 -0.716492118871548 -20.2375456712318 16.269146922743 0.214925928168433 19.471191994832 13.7852701647652 -0.0148985634276438 17.9384846320323 8.81751664280955 -0.474547546629798 17.1721309556324 6.33363988383174 -0.704372038225875 -20.2009390794931 16.2691412027427 0.221374969714746 19.4230954925475 13.785266494765 -0.00507508619105365 17.8674083186563 8.81751707480957 -0.457975197992654 17.0895647317107 6.33364236683186 -0.684425253888454 -20.1536389172464 16.2691367927425 0.230173175362639 19.3608209195896 13.7852638547649 0.00761844648185677 17.7751849142759 8.81751799180961 -0.437491011279707 16.9823669166191 6.33364505883198 -0.660045740160489 -20.0919375543158 16.2691334727423 0.241983541303601 19.2794290957237 13.7852621347648 0.0241136135953351 17.6544121885395 8.81751944080968 -0.411626241831196 16.8419037299475 6.33364809483213 -0.629496169529462 -20.0454475121076 16.2691340027424 0.251234516692999 19.2178765928001 13.7852629347648 0.0363778850578567 17.5627347741851 8.81752080080975 -0.393335378232427 16.7351638648776 6.3336497318322 -0.608192009867569 -20.001221840007 16.2691358727425 0.259961405557504 19.1592862100172 13.7852646047649 0.0476489076232016 17.4754149600376 8.8175220708098 -0.376976088225403 16.6334793300478 6.33365080283226 -0.589288586159705 -19.9825965191224 16.2691367927425 0.263629236591716 19.1346122888453 13.7852653947649 0.0523554328767495 17.4386438282911 8.81752260180983 -0.370192174573184 16.590659598014 6.33365120583228 -0.581465978298151 -19.9549929178113 16.2691385227426 0.26901782395766 19.0980530571088 13.785266804765 0.0591800820009029 17.3841733457039 8.81752336380987 -0.360495401912612 16.5272334850014 6.3336516418323 -0.570333143869369 -19.9169120160025 16.2691413527427 0.276353111326068 19.0476214147134 13.7852690247651 0.0683591074268832 17.3090402221353 8.81752435280992 -0.347628900381486 16.4397496208462 6.33365201783231 -0.555622904270671 -19.8792462142135 16.2691446627429 0.283432953762342 18.9977273323436 13.7852715147652 0.077078750291044 17.2346895586038 8.81752521580995 -0.335629656641552 16.3531706767339 6.33365206783232 -0.541983860102851 -19.8416013724254 16.269148222743 0.290245842475937 18.9478204499731 13.7852741147654 0.0853657708546564 17.1602585850685 8.81752589380999 -0.324394372377905 16.2664776526162 6.3336517848323 -0.529274443989186 -19.8129001610622 16.2691509827432 0.295274606404791 18.9097673881657 13.7852760847654 0.0914420137732624 17.1035018523727 8.81752629681001 -0.316223171499794 16.2003690894762 6.33365140283228 -0.520055764141322 -19.7660569588373 16.2691554427434 0.30317311760995 18.8476580352157 13.7852792047656 0.100934961794153 17.0108601779725 8.81752674181003 -0.30354134982744 16.0924612543509 6.33365050883224 -0.505779505633236 -19.6829842048915 16.2691626727437 0.315867328312892 18.7376572199909 13.7852839947658 0.116083319913662 16.8470032601897 8.81752664581002 -0.2834846969048 15.9016762752891 6.33364796983212 -0.483268705304031 -19.6092723313904 16.2691659227439 0.324228336060019 18.6402343353636 13.7852854647659 0.126173917472939 16.7021583433099 8.81752456180992 -0.26993491969122 15.7331203472831 6.33364410883194 -0.4679893382883 -19.4981289961114 16.2691649527438 0.333164020704441 18.4933394183864 13.7852829047658 0.137571544554297 16.4837602729366 8.81751883180965 -0.25361340772599 15.4789707052116 6.33363679283159 -0.449205883866134 -19.4322544429825 16.2691593627436 0.335331997077414 18.4063615242552 13.7852773247655 0.141077435090818 16.3545756868006 8.81751324780939 -0.247431688882374 15.3286827680733 6.33363120783133 -0.44168625086897 -19.3665497498617 16.2691451127429 0.333108720911814 18.3194877701289 13.7852649247649 0.140394676838389 16.2253637906634 8.81750454880897 -0.245033411298462 15.1783018009306 6.333624360831 -0.437747455361887 - -0 4 -0.07264197 1 -0.12345255 1 -0.15974582 1 -0.28146727 2 -0.30978555 1 -0.34462514 1 -0.3749384 1 -0.43859614 1 -0.47194039 1 -0.5022533 1 -0.5355975 1 -0.63013701 1 -0.78146727 2 -1.00011086 4 - -0 3 -3.57247416 1 -7.14494832 3 - -9 0 0 0 0 3 2 13 4 11 3 17.2206220879356 6.33363830883166 -0.716461349540086 17.9802381440154 8.81751653780954 -0.484519033263418 19.4994702561751 13.7852729947653 -0.0206344007100814 20.2590863022549 16.2691512227432 0.211307915576587 -17.0950175819697 6.33361320783047 -0.719784695797937 17.8723114188892 8.81749431380849 -0.487369214688794 19.4268990927281 13.7852565247645 -0.0225382524905095 20.2041929296476 16.2691376327425 0.209877228618633 -16.8729429614217 6.33358385982908 -0.731595416808916 17.6814864398255 8.81746847180726 -0.497512758200587 19.298573386633 13.7852376947636 -0.0293474409539286 20.1071168550368 16.2691223127418 0.204735217664401 -16.592300968092 6.33356985682841 -0.754363619850348 17.4403493783721 8.81745644480669 -0.517076589639819 19.1364461989324 13.7852296147632 -0.0425025292187617 19.9844946092125 16.2691162027415 0.194784500991767 -16.4118407595206 6.3335675968283 -0.770650705833943 17.2852946110074 8.81745471880661 -0.531073110204618 19.0322023139811 13.7852289647632 -0.0519179189559687 19.9056561654679 16.2691160827415 0.187659676683356 -16.2947501939591 6.33356771082831 -0.781389528054009 17.1846876462288 8.81745500180662 -0.540302022822968 18.9645625507683 13.7852295847632 -0.0581270123608848 19.8545000030381 16.2691168727415 0.182960492870157 -16.1955694592482 6.33356853282835 -0.7904824449259 17.0994631221809 8.81745588180666 -0.548116693044145 18.9072504280462 13.7852305847633 -0.0633851893006348 19.8111440809788 16.2691179327416 0.17898056258112 -16.0527135624629 6.33357056082845 -0.80332544808591 16.9767071063503 8.81745788680676 -0.559154498588412 18.824694204125 13.7852325447634 -0.0708125995934178 19.7486877580123 16.2691198627417 0.173358349914079 -15.9038890953942 6.33357304982856 -0.815835955160127 16.8488272002763 8.81746028680687 -0.569906442889102 18.7387034000406 13.7852347547635 -0.0780474183370533 19.6836414949228 16.2691219927418 0.167882093923971 -15.7354069473917 6.33357456782864 -0.828155299145264 16.7040614334003 8.81746180480694 -0.580493564981964 18.6413704054175 13.7852362747636 -0.0851700966853623 19.6100248914262 16.2691235127419 0.162491637477938 -15.5786599699466 6.33357404082861 -0.83761634671464 16.5693810770033 8.81746145080693 -0.58862362343812 18.5508233011168 13.7852362647636 -0.0906381768850822 19.5415444081735 16.2691236827419 0.158354546391437 -15.4607493943462 6.33357077582846 -0.842368301090345 16.4680583721908 8.81745858080679 -0.592705983452022 18.48267634788 13.7852341947635 -0.0933813481653758 19.4899853257246 16.2691219927418 0.156280969472947 -15.4034362716239 6.33356825682834 -0.843989303317339 16.4188117498517 8.81745634380668 -0.594098086088144 18.4495627163072 13.7852325147634 -0.0943156516497529 19.4649382045349 16.2691206027417 0.155575565579443 - -0 4 -0.20693445 1 -0.36619212 1 -0.46349076 1 -0.50529197 1 -0.5598552 1 -0.6275512 1 -0.74155994 1 -0.80578618 1 -0.90569987 1 -1.00012561 4 - -0 3 -4.04682293 1 -8.09364585 3 - -9 0 0 0 0 3 2 53 4 51 3 15.4036666716349 6.33356979682841 -0.843980988696944 16.4190093898611 8.81745711380672 -0.59409170274784 18.4496948263134 13.7852317447633 -0.0943131308496331 19.4650375445396 16.2691190627417 0.155576155089471 -15.2344918235995 6.33357878282884 -0.85120191641992 16.2738060029643 8.81746380680704 -0.59926418986352 18.3524343516938 13.7852338547634 -0.0953887367507217 19.3917485210586 16.2691188827416 0.156548989795678 -15.0354356841448 6.33356896582837 -0.845536729780838 16.1029635548497 8.81745600080667 -0.595224517331646 18.2380193062594 13.7852300747633 -0.0946000924532631 19.3055471769642 16.2691171027416 0.155712119985928 -14.8215017639835 6.33355785082784 -0.835678787392611 15.9194199961318 8.81744744580626 -0.587526275755999 18.1152564504285 13.7852266347631 -0.0912212524827768 19.2131746725768 16.2691162327415 0.156931259153834 -14.7700471715396 6.33355539382772 -0.833235147366544 15.8752784140352 8.81744557080617 -0.585581227753615 18.0857409090266 13.7852259247631 -0.0902733884977557 19.1909721515222 16.2691161027415 0.157380531115174 -14.7436021002835 6.33355426382767 -0.831957084635839 15.8525914529577 8.81744471280613 -0.584553842924816 18.070570168306 13.7852256147631 -0.0897473595027706 19.1795595209802 16.2691160627415 0.157655882208252 -14.7049331984468 6.3335527208276 -0.830080565156709 15.819417791382 8.81744354480607 -0.583036133802729 18.0483869772523 13.785225194763 -0.0889472710747685 19.1628715801875 16.2691160227415 0.158097160289212 -14.6544393960485 6.33355117982753 -0.827600697728922 15.7760979993244 8.81744239480602 -0.580998207395933 18.0194152058763 13.785224824763 -0.0877932267399543 19.1410738191522 16.2691160427415 0.158809263593035 -14.5499436910852 6.33355019482748 -0.822450554174303 15.6864338250656 8.81744173580599 -0.576643984939118 17.9594140830264 13.785224814763 -0.0850308464587483 19.0959042170067 16.2691163627415 0.160775722776437 -14.4468703561895 6.33355402982766 -0.817452371496902 15.5979587608633 8.81744482080614 -0.57218124974715 17.9001355802108 13.7852264047631 -0.0816390062376445 19.0512239848845 16.2691171927416 0.163632115532108 -14.356097591878 6.33356522682819 -0.813464378917483 15.5199985471603 8.81745356180655 -0.568281903131941 17.847800457725 13.7852302347633 -0.0779169515608564 19.0117014030073 16.2691185627416 0.167265524224686 -14.3220235002596 6.33357056582845 -0.812019031188833 15.4907282957701 8.81745772080675 -0.566811553552103 17.8281378867911 13.7852320347634 -0.0763965982486435 18.9968426823016 16.2691191927417 0.168810879388086 -14.3096689396728 6.33357249082854 -0.811482935303369 15.480116085266 8.81745922380682 -0.566265609726172 17.8210103964525 13.7852326847634 -0.0758309585617771 18.9914575420458 16.2691194227417 0.16938636702542 -14.2900657487417 6.33357565782869 -0.810639940673329 15.4632771644662 8.81746169480694 -0.565399887045052 17.8096999859153 13.7852337647634 -0.0749197797684984 18.9829114016399 16.2691198027417 0.170320273859779 -14.2013150145262 6.3335905968294 -0.806764138159239 15.3870434908453 8.81747336980749 -0.561370510353667 17.7585004434835 13.7852389147637 -0.0705832547425245 18.9442289198025 16.2691216927418 0.174810373063047 -14.1147289204136 6.33360502583008 -0.802318794408096 15.3126821973133 8.81748471480803 -0.556802571376702 17.7085887511128 13.7852440947639 -0.0657701253239132 18.9065420280125 16.2691237827419 0.179746097707481 -14.0363453266906 6.33360652283015 -0.796280965401315 15.2453921441172 8.81748594680809 -0.55165509850221 17.6634857889705 13.785244794764 -0.0624033647140006 18.8725326063972 16.2691242227419 0.182222502175104 -14.0085331253696 6.33360667283016 -0.794072356126411 15.2215182129833 8.8174860898081 -0.549790134433629 17.6474883982107 13.785244924764 -0.0612256910580641 18.8604734858244 16.2691243427419 0.183056530634718 -13.9706622635708 6.33360467683007 -0.790690935435802 15.1890204314397 8.81748458180802 -0.547037153322869 17.6257367671775 13.7852443947639 -0.0597295891170031 18.8440949350464 16.2691243027419 0.18392419299593 -13.9234078213264 6.33359793582975 -0.785788844792966 15.1485011195152 8.81747944680778 -0.54317380653937 17.5986877058928 13.7852424647639 -0.0579437300421794 18.8237810040816 16.2691239827419 0.184671308211416 -13.8966565600557 6.33359218482947 -0.782699449386227 15.1255782584264 8.81747506180757 -0.540784166515868 17.5834216651677 13.7852408147638 -0.0569536007751507 18.8123433735383 16.2691236927419 0.184961682095208 -13.8792168892274 6.33358782382926 -0.780575968945367 15.1106398577168 8.81747173480741 -0.539153350888409 17.5734857846957 13.7852395547637 -0.0563081147744918 18.8049087531852 16.2691234627419 0.185114503282467 -13.8654434885732 6.3335844148291 -0.778896385145591 15.0988416071565 8.81746913180729 -0.537864853517208 17.565637834323 13.7852385647637 -0.0558017902804427 18.7990359529063 16.2691232827419 0.18522974134794 -13.8394338373378 6.33357768882878 -0.77563576086072 15.0765647360984 8.81746398980705 -0.535377474999064 17.5508265336195 13.7852365947636 -0.054860903275753 18.7879574223801 16.2691228927418 0.185397382585903 -13.8086167958741 6.33356977982841 -0.771645508651193 15.0501726848448 8.81745791780676 -0.532361754775825 17.5332844627863 13.7852341947635 -0.0537942470450895 18.774840341757 16.2691223327418 0.185489506820278 -13.7810699345657 6.33356377482812 -0.768085490592101 15.0265724837239 8.81745328480654 -0.529661518617571 17.5175775820403 13.7852323047634 -0.0528135746885101 18.7630801311984 16.2691218127418 0.18561039728602 -13.7559957933747 6.33355925282791 -0.764869844999367 15.0050814027031 8.81744978380637 -0.527195482150441 17.5032526013598 13.7852308447633 -0.0518467564525887 18.7523382006882 16.2691213827418 0.185827606396337 -13.7314002022065 6.33355649482778 -0.761795489213342 14.9839821317009 8.81744763480627 -0.524775005105474 17.4891460006898 13.7852299147633 -0.0507340368797373 18.7417279401843 16.2691210527417 0.186286447218131 -13.7092295811534 6.33355585882775 -0.75913381855692 14.9649424307966 8.81744711980625 -0.522599362772137 17.4763681300829 13.7852296447632 -0.0495304511925701 18.7320809897261 16.2691209027417 0.187004004592213 -13.6805324297904 6.3335570908278 -0.755821677059602 14.9402734096249 8.81744803880629 -0.519790503408723 17.4597553692938 13.7852299347633 -0.0477281560969657 18.7194963591283 16.2691208827417 0.188303017563913 -13.6581464787271 6.33356149682801 -0.753472768048034 14.9210021387095 8.81745140780645 -0.517632128616206 17.4467134586744 13.7852312347633 -0.0459508497625481 18.7095691186568 16.2691211427418 0.189889789669281 -13.6408743379067 6.33356765282831 -0.751864856791663 14.9061344180034 8.81745612680667 -0.51601759779952 17.4366545781966 13.7852330747634 -0.0443230798052332 18.7019146582932 16.2691215527418 0.19152417919691 -13.6390579278205 6.33356829082834 -0.751692291033466 14.9045710279291 8.8174566168067 -0.515844664681306 17.4355972181464 13.7852332647634 -0.0441494119569844 18.701110318255 16.2691215927418 0.191698214395176 -13.6202240869259 6.33357499382866 -0.749885500187648 14.8883620271592 8.81746176180694 -0.514028395175038 17.4246379176259 13.7852352947635 -0.0423141851798159 18.6927758578592 16.2691220627418 0.193542919832795 -13.6019675860588 6.33358303982904 -0.748048206520382 14.8726650064136 8.81746797180724 -0.512082925922633 17.4140598571234 13.7852378347636 -0.0401523646871349 18.6847572874783 16.2691227727418 0.195812915910614 -13.5839211552016 6.33358709582923 -0.745052502028093 14.8572204056801 8.81747125280739 -0.50915450235354 17.403818896637 13.7852395647637 -0.0373585030044336 18.6771181471155 16.2691237227419 0.19853949667012 -13.5770625548758 6.3335885908293 -0.74389867734329 14.8513516954013 8.81747246580745 -0.508027670180018 17.3999299564523 13.7852402147637 -0.0362856558634761 18.6742190969778 16.2691240927419 0.199585351299795 -13.5577131039568 6.33359120582943 -0.74015847794564 14.8348232646163 8.81747471380756 -0.504432373179251 17.3890436059352 13.7852417347638 -0.0329801636364736 18.6661537665947 16.2691252427419 0.202745941129915 -13.5374718629954 6.33358711382923 -0.734413997122791 14.8176330737998 8.81747203680743 -0.499132098567501 17.3779554854086 13.7852418847638 -0.0285683014769214 18.6581166962129 16.269126802742 0.206713597068369 -13.5210588322158 6.33357723782876 -0.728181815926779 14.8037730831415 8.8174650108071 -0.493540772291928 17.3692016049928 13.7852405547638 -0.0242586850222257 18.6519158659184 16.2691283227421 0.210382358612625 -13.5175162420475 6.33357480782865 -0.726749492498747 14.8007845929995 8.81746327380701 -0.492262118911195 17.3673212949035 13.7852402047637 -0.0232873717160908 18.6505896458554 16.2691286727421 0.211200001881461 -13.5125636018123 6.33357118982847 -0.724650631369057 14.7966079328011 8.81746068280689 -0.490395113672517 17.3646966147788 13.7852396747637 -0.0218840782894379 18.6487409557676 16.2691291627421 0.212371439397102 -13.5096025116717 6.33356895382837 -0.723304993575142 14.7941095926825 8.81745908380681 -0.489203862985936 17.3631237347041 13.7852393447637 -0.0210016018275225 18.6476308057149 16.2691294727421 0.213099528761684 -13.5044388014264 6.33356492882818 -0.720787083545548 14.7897502324754 8.81745620680668 -0.486985131070551 17.3603730945734 13.7852387647637 -0.0193812261305588 18.6456845256225 16.2691300427422 0.214420726334438 -13.497441081094 6.33355945382792 -0.717131467161915 14.7838361621945 8.81745230080649 -0.4837775488882 17.3566263243955 13.7852379947636 -0.0170697123707678 18.643021405496 16.2691308427422 0.216284205892948 -13.4851262305091 6.3335506718275 -0.709155464693076 14.7733711516974 8.8174461228062 -0.476863837799816 17.3498609940741 13.7852370247636 -0.0122805840032964 18.6381059152625 16.2691324827423 0.220011042899963 -13.4761689600836 6.3335485078274 -0.700211751628272 14.7656008613284 8.81744490180614 -0.469258848098598 17.3444646538178 13.7852376947636 -0.00735304102925069 18.6338965550626 16.2691340827424 0.223599862510423 -13.4709041498336 6.33355230782758 -0.692175876986588 14.7608713911037 8.81744807680629 -0.462515862148324 17.340805863644 13.7852396147637 -0.00319583246179389 18.6307730949142 16.2691353827424 0.226464182376471 -13.4670731296516 6.33355720182781 -0.685181021884351 14.757361570937 8.81745201980648 -0.456669947890658 17.3379384535078 13.7852416547638 0.000352200096728606 18.6282268947933 16.2691364727425 0.228863274100422 -13.4642726195186 6.33356722182829 -0.676670920400143 14.7545790608049 8.81745984880685 -0.449601675654933 17.3351919333774 13.785245104764 0.00453681382548708 18.6254983646637 16.2691377327425 0.231606058570697 -13.4625103694349 6.3335885578293 -0.663692112433682 14.752286870696 8.81747633180763 -0.438828187223219 17.3318398732182 13.7852518747643 0.0108996631977062 18.6216163744793 16.2691396527426 0.235763588408169 -13.4631875294671 6.33360612683013 -0.655683913873313 14.7522298606933 8.81748981280827 -0.432170196366982 17.3303145131457 13.7852571847646 0.0148572386456809 18.619356844372 16.2691408727427 0.238370956152012 -13.4648758895473 6.33362214083089 -0.649874715287391 14.7530819307338 8.81750206180885 -0.427306615035974 17.3294940131068 13.7852619047648 0.0178295854368598 18.6177000542933 16.2691418227427 0.240397685668277 - -0 4 -0.25503713 1 -0.29991391 1 -0.32143898 1 -0.332299 1 -0.33962848 1 -0.37951102 1 -0.40815326 1 -0.49681261 1 -0.53507838 1 -0.54617795 1 -0.5487805 1 -0.55392134 1 -0.57609122 1 -0.68430594 1 -0.68624299 1 -0.69458225 1 -0.72630646 1 -0.74318537 1 -0.76514738 1 -0.76603313 1 -0.76901547 1 -0.78555258 1 -0.80453964 1 -0.81466664 1 -0.82650618 1 -0.84194413 1 -0.85157814 1 -0.86001872 1 -0.88558718 1 -0.88606558 1 -0.88698019 1 -0.88842245 1 -0.91548305 1 -0.91576446 1 -0.91670721 1 -0.92623059 1 -0.94601667 1 -0.94796771 1 -0.95113582 1 -0.95138384 1 -0.95548881 1 -0.95568277 1 -0.95941041 1 -0.9665435 1 -0.97650544 1 -0.97795662 1 -0.98077976 1 -0.98826655 1 -0.99100587 1 -1.00011599 4 - -0 3 -3.85256325 1 -7.70512649 3 - -9 0 0 0 0 3 2 16 4 14 3 19.3665796498631 16.2690975027406 0.333106715941719 19.3911769110314 16.2690913727403 0.28872308253361 19.4403714433681 16.2690791127398 0.199955815707391 19.4649687145364 16.2690729827395 0.155572182299282 -19.39493691121 16.2691036527409 0.334065271447248 19.4187025223388 16.2690878627402 0.289618336366132 19.4662337345964 16.2690801127398 0.2007244604139 19.4899993457253 16.2690743727395 0.156277522982784 -19.4533846139861 16.2691129827414 0.334354913631006 19.475423975033 16.2691037527409 0.290353879541069 19.5195026871266 16.2690852827401 0.202351811361195 19.5415420481734 16.2690760527396 0.158350777271258 -19.5646941292731 16.2691201027417 0.32913492925307 19.5833992601615 16.2691090327412 0.287918588455398 19.6208095119384 16.2690868927401 0.205485906880056 19.6395146428268 16.2690758227396 0.164269566092385 -19.6757327745471 16.2691156827415 0.31696880359521 19.6911549452796 16.269104902741 0.280799347137253 19.7219992767447 16.26908336274 0.208460434201339 19.7374214374772 16.2690725827394 0.172290977743382 -19.7660393488364 16.2691078127411 0.303169240009766 19.7789426794493 16.2690983827407 0.27227041445215 19.8047493406751 16.2690795327398 0.210472763346919 19.8176526712879 16.2690701027393 0.179573937789304 -19.8153870411803 16.2691031127409 0.294848451244549 19.8269627717302 16.2690946227405 0.26704086618376 19.8501142228298 16.2690776327397 0.211425696062181 19.8616899533796 16.2690691427393 0.183618111001392 -19.8440855725434 16.2691003527408 0.289795004714523 19.8548922630567 16.2690924527404 0.26383900928168 19.8765056540833 16.2690766527396 0.211927018415993 19.8873123545966 16.2690687527393 0.185971022983149 -19.9009963452466 16.2690950027405 0.27946026777365 19.9102877456879 16.2690883527402 0.257246637098559 19.9288705565705 16.2690750327396 0.212819375728377 19.9381619670118 16.2690683827392 0.190605745053287 -19.9548668078053 16.2690905327403 0.269082316720724 19.9627181381782 16.26908516274 0.250527730959428 19.978420788924 16.2690744227395 0.213418559436837 19.9862721192969 16.2690690527393 0.194863973665542 -20.0371003817112 16.2690864827401 0.252888351481552 20.0428361619836 16.2690830327399 0.239868069003121 20.0543077125285 16.2690761527396 0.213827504046261 20.0600434928009 16.2690727127395 0.200807221567831 -20.091921644315 16.2690858527401 0.241979323713401 20.0962849345223 16.26908363274 0.232572973966623 20.1050115149368 16.2690791927398 0.213760274473068 20.109374795144 16.2690769727397 0.20435392471629 -20.1536237172457 16.2690891627402 0.230168908222436 20.1563952273774 16.2690880327402 0.224514945663887 20.1619382676406 16.2690857527401 0.21320702053679 20.1647097877723 16.26908461274 0.207553057978241 -20.2009077494916 16.2690935727404 0.221373680584685 20.2024409395644 16.2690931127404 0.218439719175329 20.2055073097101 16.2690922027404 0.212571796366618 20.2070404997829 16.2690917427404 0.209637834957262 -20.2374981112295 16.2690992927407 0.214927312588499 20.2380652512565 16.2690991727407 0.21389548569949 20.2391995213103 16.2690989327407 0.211831831911472 20.2397666613373 16.2690988227407 0.210800005022462 -20.2590217622519 16.2691035827409 0.211302165326314 20.2590217622519 16.2691035827409 0.211302165326314 20.2590217622519 16.2691035827409 0.211302165326314 20.2590217622519 16.2691035827409 0.211302165326314 - -0 4 -0.66201458 1 -1.36297112 1 -2.59520727 1 -3.2584606 1 -3.49239086 1 -3.7643859 1 -3.93898534 1 -4.84267156 1 -5.04134187 1 -5.89529337 1 -6.14991318 1 -6.50638093 1 -7.01562055 4 - -0 3 -0.5 1 -1 3 - -9 0 0 0 0 3 3 19 33 17 31 18.6177078042936 16.2690957227405 0.240354853816242 18.6257833946772 16.2690910827403 0.230482785097344 18.6374974252336 16.2690861027401 0.219520027926641 18.6507599658635 16.2690825227399 0.211047813654233 18.6606987863356 16.2690800827398 0.205167473044932 18.6691777067383 16.2690786327397 0.201363302914243 18.6851232574957 16.2690766327396 0.195669437073799 18.7006776382345 16.2690753027396 0.191324906077445 18.7190712991081 16.2690748027396 0.188340101045674 18.732057689725 16.2690748227396 0.186999616222005 18.7417047001832 16.2690749727396 0.186282049827922 18.7561294408683 16.2690754127396 0.185658239418293 18.7698980415223 16.2690760327396 0.185534242252403 18.7816649620812 16.2690765427396 0.185434786117679 18.7909728725233 16.2690769127396 0.185346944143507 18.7990130629052 16.2690772027397 0.185225269537728 18.8112069034843 16.2690775827397 0.184985178986324 18.8326370245022 16.2690781327397 0.184446664990746 18.8556045855931 16.2690783027397 0.183388212280472 18.8725101763961 16.2690781327397 0.182217963684888 18.9143585983838 16.2690775927397 0.179170758230154 18.9541744602749 16.2690749627396 0.173376626924947 18.9968209923005 16.2690731027395 0.16880633010787 19.0116798130063 16.2690724827394 0.16726097540447 19.0512026348835 16.2690711127394 0.163627565061892 19.0958831370057 16.2690702727393 0.16077116238622 19.152039759673 16.2690698827393 0.158326525030106 19.1960397617629 16.2690699827393 0.157155131684468 19.2451328240947 16.2690704527393 0.156501618733428 19.3050875669424 16.2690712227394 0.156128143365689 19.3783694704231 16.2690723727394 0.15621997389005 19.4383240532708 16.2690729127395 0.155925567686067 19.4649687145364 16.2690729827395 0.155572182299282 -18.6202961544166 16.2690953127405 0.243862286492837 18.6284214448025 16.2690908427403 0.234299087538609 18.6401270253585 16.2690860427401 0.223678914114178 18.6533477559864 16.2690826027399 0.21547368350445 18.6632514564568 16.2690802527398 0.209779028963969 18.6716901468576 16.2690788627397 0.206096011329035 18.6875466676108 16.2690769627397 0.200584823007267 18.7030021783449 16.2690757027396 0.196381012377597 18.7212658892124 16.2690752427396 0.193495836030559 18.7341600998248 16.2690752827396 0.192201845289097 18.7437390602798 16.2690754527396 0.191510163486244 18.7580626109601 16.2690759027396 0.190910932257782 18.7717351916095 16.2690765327396 0.190795230142287 18.7834199021645 16.2690770327397 0.190701944347856 18.7926627126035 16.2690774127397 0.190618983243915 18.8006465229827 16.2690777027397 0.190502522768384 18.8127547935579 16.2690780927397 0.190271561467414 18.8340344245686 16.2690786527397 0.189751554312715 18.8568410156518 16.2690788527397 0.188724298963923 18.8736292164492 16.2690787027397 0.1875869242099 18.9151874284231 16.2690782327397 0.184624793339207 18.9547367403016 16.2690757127396 0.17898791994147 18.9970932923135 16.2690739427395 0.17452601363954 19.0118509230144 16.2690733527395 0.173016635837849 19.0511035248788 16.2690720427394 0.169460988038965 19.0954761769864 16.2690712527394 0.166644454165186 19.1512459396353 16.2690708727394 0.164203269379236 19.1949433717108 16.2690709827394 0.163003467872249 19.2436993340266 16.2690714127394 0.162287220178229 19.3032420168548 16.2690721427394 0.161814046885754 19.3760187603115 16.2690732127395 0.161745475152497 19.4355596131395 16.2690736827395 0.161307570771698 19.4620202243963 16.2690737127395 0.160892476841982 -18.6258536746805 16.2690945427405 0.250810657642866 18.6340760250711 16.2690904127403 0.241879614608665 18.645759455626 16.2690859827401 0.231960787337546 18.6588898662497 16.2690828227399 0.224303015863821 18.6687182267165 16.2690806727398 0.218989270191432 18.6770718971133 16.2690794127398 0.215555202978322 18.6927414278575 16.2690777027397 0.210420050454416 18.7079902285818 16.2690765827396 0.206506582828536 18.7259831494364 16.2690762227396 0.203828572091337 18.7386853100398 16.2690763027396 0.202632259564515 18.748122460488 16.2690764927396 0.201995512494272 18.7622350911583 16.2690769627397 0.201449651708345 18.7757075217982 16.2690775927397 0.201353999823801 18.7872208623451 16.2690781127397 0.201275975070095 18.7963279627776 16.2690784927397 0.201205084856728 18.8041942831513 16.2690787827397 0.201101082821788 18.8161241837179 16.2690791827398 0.200891503401834 18.8370901847137 16.2690797727398 0.200414089249158 18.8595612757811 16.2690800227398 0.199455632383634 18.8761047465668 16.2690799227398 0.198389097702976 18.917057928512 16.2690795827398 0.195609862830969 18.9560509203641 16.2690772927397 0.190302562958886 18.9978025423472 16.2690756927396 0.186071277747911 19.0123491230381 16.2690751627396 0.184638607609863 19.0510381448757 16.2690739727395 0.181250448508934 19.0947688869528 16.2690732627395 0.178525357359499 19.1497319595634 16.2690729327395 0.176104044864493 19.192798481609 16.2690730227395 0.174856428765234 19.2408515238914 16.2690734127395 0.174023599155677 19.2995349266787 16.2690740427395 0.173361023724206 19.3712583800854 16.2690749327396 0.172982426556224 19.4299365928724 16.2690752427396 0.17226588859219 19.456013454111 16.2690752127396 0.171731171386793 -18.6325611049991 16.2690938827405 0.257956703852285 18.6408803153943 16.2690901227403 0.249723872481247 18.6525286059475 16.2690860927401 0.240580109966942 18.665548906566 16.26908324274 0.233529368222049 18.6752864970285 16.2690813027399 0.228638330329737 18.6835403574205 16.2690801727398 0.225481500889796 18.6989929881545 16.2690786627397 0.220766622005851 18.7140040088675 16.2690776927397 0.217179193715458 18.7316873397074 16.2690774327397 0.214737474109482 18.7441699903003 16.2690775627397 0.213654830488059 18.7534449907408 16.2690777727397 0.213083251240911 18.7673164013997 16.2690782627397 0.212603372378118 18.7805598620287 16.2690789027397 0.212536919134962 18.7918771625662 16.2690794227398 0.212481792082343 18.8008290529914 16.2690798127398 0.212429011379836 18.8085609733587 16.2690801027398 0.212342870765745 18.8202869239156 16.2690805127398 0.212163098567206 18.8408942448944 16.2690811227399 0.211743551417279 18.8629816459435 16.2690814227399 0.210872438205903 18.879245076716 16.2690813727399 0.209892312519349 18.9195059086283 16.2690811627399 0.207335228287894 18.95786104045 16.2690791227398 0.202409654393942 18.9989197124002 16.2690777027397 0.198453243316023 19.0132245430797 16.2690772227397 0.197112353402334 19.0512681748866 16.2690761727396 0.1939283133411 19.0942641669288 16.2690755427396 0.191326815377536 19.1483039394956 16.2690752427396 0.188956844974968 19.1906482515068 16.2690753127396 0.187680122914327 19.237896603751 16.2690756327396 0.186745649799942 19.2955964064916 16.2690761427396 0.185907500190132 19.366114299841 16.2690768427396 0.185228407397877 19.4238052125812 16.2690769627397 0.184238688690868 19.4494429037989 16.2690768527396 0.183587167219922 -18.6373324252257 16.2690935127404 0.262586288212179 18.6457130456238 16.2690899927403 0.25482610341359 18.6573332261757 16.2690862327401 0.246207182654213 18.6702747967904 16.26908358274 0.239568293278883 18.6799478672499 16.2690817927399 0.2349641881402 18.6881317776386 16.2690807527398 0.231995926159215 18.7034333583654 16.2690793727398 0.227567492008875 18.7182795590705 16.2690785027397 0.224202879949065 18.7357490399003 16.2690783127397 0.221924056730827 18.748080080486 16.2690784727397 0.220920635303167 18.7572430809212 16.2690787027397 0.220394938038197 18.7709478315721 16.2690792027398 0.219962492177657 18.7840330621937 16.2690798427398 0.219918579225572 18.7952149127248 16.2690803527398 0.219881329293802 18.8040595431449 16.2690807427398 0.219842686891967 18.8116986235077 16.2690810527399 0.219770250678526 18.823283654058 16.2690814627399 0.219613091551062 18.843643195025 16.2690820827399 0.219236974473197 18.8654655060615 16.2690824127399 0.218429454844842 18.8815354068248 16.2690824027399 0.217511035311219 18.9213177387143 16.2690822727399 0.215112257377283 18.9592315305151 16.2690804027398 0.210452057045936 18.9998110124426 16.2690790927398 0.206689647347231 19.0139486831141 16.2690786527397 0.205413663146625 19.0515460948998 16.2690776927397 0.202375324082312 19.0940342269179 16.2690771127397 0.199866379603143 19.1474357894544 16.2690768227396 0.197542727272776 19.1892808914419 16.2690768827397 0.196255627201642 19.2359730036596 16.2690771527397 0.195263016154495 19.2929928863679 16.2690775727397 0.194319238519668 19.3626775096778 16.2690781227397 0.193453220928535 19.4196860223855 16.2690781227397 0.192292173823388 19.4450201635889 16.2690779527397 0.191567609028973 -18.6404659953746 16.2690932927404 0.26550772764094 18.6488854557745 16.2690899327403 0.258053597046888 18.6604865563255 16.2690863427401 0.249774591173656 18.6733763369377 16.26908382274 0.243402731581009 18.6830070473952 16.2690821227399 0.238984713421164 18.6911452177817 16.2690811427399 0.236138883735995 18.7063482485038 16.2690798527398 0.231896646664499 18.7210870692039 16.2690790427398 0.228677089801578 18.738417360027 16.2690788927397 0.226504828208402 18.750649750608 16.2690790727398 0.225553541723218 18.7597398510398 16.2690793127398 0.225058203919691 18.7733361316856 16.2690798227398 0.224657489240658 18.7863183723022 16.2690804627398 0.224629191299314 18.7974120528291 16.2690809727398 0.224604390668136 18.8061868832459 16.2690813727399 0.224575593766768 18.8137655336059 16.2690816727399 0.224512624353777 18.8252588441518 16.2690820827399 0.22437100275705 18.8454571151111 16.2690827227399 0.224024572420596 18.8671068861395 16.2690830627399 0.223259873084274 18.8830508168967 16.2690830727399 0.222382590672606 18.9225216787715 16.2690830027399 0.220089232663677 18.9601481105587 16.2690812327399 0.215603430770613 19.0004156124713 16.2690800027398 0.211969556398013 19.0144444531376 16.2690795927398 0.210736620789452 19.0517513649096 16.2690786827397 0.207795392689751 19.093908906912 16.2690781327397 0.205349645433584 19.1468950394287 16.2690778527397 0.203060233904843 19.1884151714008 16.2690778927397 0.201769839893553 19.2347451736013 16.2690781327397 0.200743502424804 19.2913224562886 16.2690785027397 0.199736186276959 19.3604646695727 16.2690789627397 0.198755188350364 19.4170289822593 16.2690788727397 0.197488196720186 19.4421655334533 16.2690786627397 0.196718548053629 -18.6452177456003 16.2690930127404 0.269623458936426 18.6536928360028 16.2690898927403 0.262624673244002 18.6652636565524 16.2690865627401 0.2548515790148 18.6780747171609 16.26908423274 0.248878037031072 18.6876412176153 16.2690826627399 0.244737749564419 18.6957104879986 16.2690817727399 0.242075066677948 18.7107654887136 16.2690806027398 0.238112011639713 18.725343359406 16.2690798927398 0.235110606537154 18.7424653802193 16.2690798127398 0.233100152451663 18.7545501307933 16.2690800127398 0.232228958010283 18.7635311512199 16.2690802627398 0.231780750918994 18.7769651018579 16.2690807827398 0.23143031790235 18.7897931924672 16.2690814227399 0.231428332282255 18.8007549229879 16.2690819427399 0.231424692372083 18.8094252733997 16.2690823327399 0.23141262993151 18.8169134937554 16.2690826427399 0.231365536279273 18.8282695542948 16.2690830627399 0.231249735143773 18.8482264752427 16.26908370274 0.23095219943964 18.8696180362587 16.26908407274 0.230256167446581 18.8853734170071 16.26908411274 0.229443655147988 18.9243780788597 16.26908411274 0.227315937346927 18.9615741506264 16.2690825027399 0.223097340506555 19.0013745725168 16.2690813727399 0.219663502233456 19.0152404731754 16.2690809927398 0.218497696068083 19.0521124949267 16.2690801627398 0.215709303175642 19.0937751769056 16.2690796627398 0.21336744839441 19.1461394393928 16.2690793927398 0.211141817138698 19.1871731213418 16.2690794127398 0.209856875207666 19.2329610935166 16.2690796027398 0.208792204287097 19.2888758461724 16.2690798827398 0.207705038715459 19.3572061294179 16.2690802027398 0.206571284211609 19.413105532073 16.2690799827398 0.205161766284661 19.4379463232529 16.2690797127398 0.204331732465236 -18.6502088458373 16.2690928227404 0.273504881890784 18.6587372562424 16.2690899427403 0.266970007030394 18.6702741567904 16.2690868627401 0.259712597075686 18.683002257395 16.26908473274 0.254146261181299 18.6925013678461 16.26908329274 0.250290107068142 18.700498968226 16.2690824827399 0.247815357840597 18.7154006889338 16.2690814427399 0.244139654166011 18.7298124396183 16.2690808327398 0.241363665544158 18.7467200304214 16.2690808027398 0.239522474886707 18.7586528109882 16.2690810327398 0.238736291609365 18.7675215114094 16.2690813027399 0.238338752530483 18.7807883020395 16.2690818327399 0.238043697376468 18.7934576526413 16.2690824627399 0.238072680377845 18.8042835031555 16.2690829827399 0.238094163928865 18.8128462735622 16.26908337274 0.238101969249236 18.8202413639135 16.26908367274 0.238073469627882 18.8314560944461 16.26908410274 0.237987627293805 18.8511645253822 16.26908475274 0.237746291582342 18.8722901963856 16.26908515274 0.237126918652924 18.8878513971248 16.26908521274 0.236385213077695 18.9263759089546 16.2690852927401 0.234438135645213 18.9631283807002 16.26908382274 0.230502221658268 19.0024475225678 16.2690828027399 0.227284073495414 19.0161455432184 16.2690824627399 0.226190823193487 19.0525695349485 16.2690817027399 0.223569426338977 19.0937224869031 16.2690812427399 0.221346749263406 19.1454462193599 16.2690809827398 0.219203439561604 19.1859788212851 16.2690809827398 0.217938037711501 19.2312084434333 16.2690811027399 0.216850312669837 19.2864407360567 16.2690812927399 0.215701630165277 19.3539347292625 16.2690814527399 0.21443698046521 19.4091492718851 16.2690811027399 0.212902649512333 19.4336854430505 16.2690807827398 0.212020132330415 -18.6552624460774 16.2690927027404 0.277085441310852 18.6638411064848 16.2690900527403 0.271010082012288 18.6753420970311 16.2690872227401 0.264263686971851 18.6879859976317 16.2690852827401 0.259101881236678 18.6974168880796 16.26908397274 0.255528166446936 18.7053424484561 16.26908325274 0.253240706798288 18.7200905991565 16.2690823327399 0.249852103467338 18.7343363098332 16.2690818027399 0.247302073436218 18.7510299806261 16.2690818427399 0.245632280216907 18.7628111411857 16.2690820927399 0.244933193603702 18.7715677916016 16.2690823727399 0.24458808802731 18.7846678022238 16.2690829027399 0.244351402066068 18.797178752818 16.26908354274 0.244414585589069 18.8078690133258 16.26908405274 0.244463974411415 18.8163244437274 16.26908444274 0.244493847002834 18.8236266240742 16.26908475274 0.244485815052453 18.8347003446002 16.26908517274 0.244432742039932 18.8541608355245 16.2690858427401 0.24425248349137 18.8750212265154 16.2690862527401 0.243714719275827 18.8903886372453 16.2690863427401 0.243047231344123 18.9284339890523 16.2690864927401 0.241289150680619 18.9647435207769 16.26908517274 0.237642095137393 19.0035822426217 16.26908425274 0.234647667105166 19.0171126732643 16.26908394274 0.23362981248682 19.0530894649731 16.26908325274 0.231183390370621 19.0937337069036 16.2690828227399 0.229090055231193 19.14481817933 16.2690825627399 0.227042978223962 19.1848507012315 16.2690825327399 0.225808779265341 19.2295230633533 16.2690825927399 0.224711773583236 19.2840742359443 16.2690826927399 0.22351896014658 19.3507336091105 16.2690827027399 0.22214561005135 19.4052646917006 16.2690822027399 0.220504926053421 19.4294968528515 16.2690818227399 0.219578079239399 -18.6587295362421 16.2690926627404 0.279362878199024 18.6673405966511 16.2690901627403 0.273596920555156 18.6788160871961 16.2690874927402 0.267194712141067 18.6914021077939 16.2690856827401 0.26230588245886 18.7007862182396 16.26908446274 0.258922844318175 18.7086626286137 16.26908379274 0.256762064965543 18.7233063193093 16.2690829527399 0.253568021143834 18.7374393099806 16.2690824927399 0.251171486810005 18.7539879807666 16.2690825627399 0.249618987606265 18.7656663913213 16.2690828327399 0.248980005655915 18.7743470917336 16.2690831127399 0.248671339231254 18.7873340423504 16.26908366274 0.248475730941963 18.7997376029396 16.26908429274 0.248563723566143 18.810335953443 16.26908480274 0.248633427379454 18.8187186138411 16.26908519274 0.248679364741635 18.825957804185 16.2690854927401 0.248686149771958 18.8369359447064 16.2690859227401 0.248656704450559 18.8562283656227 16.2690865927401 0.24852030365408 18.876908926605 16.2690870227401 0.248040356101284 18.8921449673287 16.2690871327401 0.247424902782052 18.9298654491203 16.2690873227401 0.245799164434833 18.9658745408307 16.2690860927401 0.242351076831058 19.0043874526599 16.26908523274 0.239512374006227 19.0178042532972 16.26908494274 0.238547067040377 19.0534777849916 16.26908430274 0.236223289750004 19.0937771069057 16.26908390274 0.234222749254983 19.1444281593115 16.26908363274 0.232247890381182 19.1841216111968 16.26908358274 0.231040687153843 19.2284161333007 16.26908360274 0.229944281241767 19.2825054858698 16.26908363274 0.228730243274103 19.3485989890091 16.26908353274 0.227294290145899 19.4026666715772 16.2690829427399 0.225590725744984 19.4266927127183 16.2690825227399 0.224637899259727 -18.6637437364802 16.2690926427404 0.282429784694694 18.6723993168913 16.2690903627403 0.277105111371786 18.6838369874346 16.2690879327402 0.271193947911021 18.6963391580284 16.2690862927401 0.266695261977345 18.7056556284709 16.26908520274 0.263584861619609 18.7134612988417 16.26908460274 0.261605540275596 18.7279549095301 16.26908388274 0.258690683667148 18.7419262401937 16.26908350274 0.256514910873804 18.7582671809698 16.26908363274 0.255132268168132 18.7697983915175 16.26908392274 0.254580995041948 18.7783702819247 16.26908421274 0.254325841489829 18.7911952625338 16.26908476274 0.254191233893435 18.8034449531157 16.2690853927401 0.25431703051941 18.8139116136128 16.2690859027401 0.254417781644196 18.822190014006 16.2690862827401 0.254488270497544 18.8293389743456 16.2690865927401 0.254517595388937 18.8401801748605 16.2690870227401 0.254523973259239 18.8592318057654 16.2690876927402 0.254453838165908 18.8796547267354 16.2690881327402 0.254060248027214 18.8947025274502 16.2690882727402 0.253521811131639 18.9319575392197 16.2690885227402 0.252091737363714 18.9675359609096 16.2690874327402 0.248933505823707 19.0055819527167 16.2690866527401 0.246323821359753 19.0188358833462 16.2690864027401 0.245435881877578 19.0540748450199 16.2690858227401 0.243293590085825 19.0938799269106 16.2690854427401 0.241433150577459 19.1439099192869 16.26908517274 0.239571377849029 19.1831175011491 16.26908509274 0.238410810563905 19.2268705932273 16.26908504274 0.237324565202311 19.280298185765 16.26908497274 0.236091790593758 19.3455808288657 16.26908472274 0.234580934561996 19.3989845214023 16.26908399274 0.232799547417385 19.4227152325294 16.26908351274 0.231814923330618 -18.6687113467162 16.2690926827404 0.285188325765718 18.6774081671292 16.2690906127403 0.28029316253321 18.6888071476707 16.2690884027402 0.274860127735155 18.7012261082605 16.2690869427401 0.270742189829563 18.7104755886999 16.2690859627401 0.267898008854472 18.7182115690673 16.2690854427401 0.266096278768894 18.7325577597487 16.26908483274 0.263455280213454 18.7463705904048 16.26908453274 0.261496675650425 18.7625081711713 16.26908471274 0.260282563542758 18.7738953017121 16.26908502274 0.259819138840746 18.7823606721142 16.2690853227401 0.259617996571193 18.7950270727158 16.2690858727401 0.259545778067762 18.8071261232905 16.2690865027401 0.259711394025629 18.8174638537815 16.2690870027401 0.259844954481972 18.8256401841699 16.2690873927402 0.259941387946553 18.8327007945052 16.2690876927402 0.259994409609071 18.8434079350138 16.2690881227402 0.260038309191156 18.8622238459075 16.2690887927402 0.260037312071109 18.8823945368656 16.2690892527402 0.259732643996638 18.8972580275716 16.2690894127402 0.25927266992479 18.9340572693194 16.2690897227403 0.258041676216321 18.9692138009893 16.2690887527402 0.255173161670074 19.0068024827746 16.2690880627402 0.252795026047119 19.0198969033966 16.2690878327402 0.251985415398664 19.0547102850501 16.2690873127401 0.250027968045691 19.0940314069178 16.2690869627401 0.248313578804262 19.1434532492652 16.2690866827401 0.246574476851659 19.1821850711049 16.2690865627401 0.245469464319173 19.2254079631578 16.2690864527401 0.244404735868601 19.2781875556647 16.2690862927401 0.243168138249866 19.3426762187278 16.2690858827401 0.241602352695495 19.3954297412334 16.26908501274 0.23976003979799 19.4188712623469 16.26908447274 0.238751034230065 -18.6766731570943 16.2690928627404 0.289056405569442 18.6854305075103 16.2690911127403 0.284835058898939 18.6967652080486 16.2690892627402 0.280152490176529 18.7090504886322 16.2690880627402 0.276633927669406 18.7181926390664 16.2690872627401 0.274209128844234 18.7258176994286 16.2690868627401 0.272687981921984 18.7399299900989 16.2690864227401 0.270480913047153 18.753491990743 16.2690862427401 0.268867662030528 18.7693083814943 16.2690864927401 0.267924444905728 18.7804679420243 16.2690868327401 0.267603867340501 18.7887650624184 16.2690871527401 0.267491365455158 18.8011809630081 16.2690877027402 0.267523141096667 18.8130420035715 16.2690883227402 0.267757359927792 18.8231760440528 16.2690888127402 0.26794764642683 18.8311911244335 16.2690891927402 0.268088936623541 18.8381121947623 16.2690894927403 0.268182700597994 18.8486075452608 16.2690899227403 0.268290848643131 18.8670511061368 16.2690906027403 0.268407728328682 18.8868233470759 16.2690910827403 0.268252437831306 18.9013956377681 16.2690912727403 0.267922658875643 18.9374747794817 16.2690916627404 0.26702150097284 18.9719643111199 16.2690908827403 0.264622901248913 19.0088302228709 16.2690903127403 0.262625548494044 19.0216725534809 16.2690901227403 0.261944957871717 19.0558133651025 16.2690896927403 0.260294131263307 19.0943697769339 16.2690893627402 0.258828517023694 19.1428306992356 16.2690890727402 0.257307424361446 19.1808107210396 16.2690888927402 0.25631018221408 19.2231958330528 16.2690886827402 0.255302795886232 19.274951475511 16.2690883527402 0.2540894389486 19.3381855785145 16.2690876927402 0.252473941761868 19.3899117909713 16.2690866027401 0.250566111891251 19.4128963820631 16.2690859627401 0.249532179182142 -18.6865875775652 16.2690932427404 0.293107478511858 18.6954124579844 16.2690918827404 0.289704320010216 18.7066638385188 16.2690904527403 0.285933541061114 18.7187822290944 16.2690895627403 0.283145666428697 18.7277907895223 16.2690889827402 0.281232546687829 18.735278809878 16.2690887227402 0.280054879591892 18.7491032605346 16.2690884727402 0.278380757482376 18.7623574411641 16.2690884427402 0.27719340327598 18.7777805418967 16.2690887827402 0.276588262757237 18.7886614824135 16.2690891527402 0.276448207850585 18.7967525827978 16.2690894827402 0.276448829450614 18.808861713373 16.2690900427403 0.27661547867853 18.8204312739225 16.2690906427403 0.27694161965402 18.830315854392 16.2690911227403 0.277208170756681 18.8381334547633 16.2690915027403 0.277409767426256 18.8448836250839 16.2690917927404 0.277558015563298 18.8551196355701 16.2690922127404 0.277751744552499 18.8731072164244 16.2690928927404 0.278024985465478 18.8923915273404 16.2690933927404 0.278064957577376 18.9066071380156 16.2690936127404 0.277903250449695 18.9418042396874 16.2690941027405 0.277427217777085 18.9754762212867 16.2690935327404 0.275620866971288 19.0114564929957 16.2690931127404 0.27411051639955 19.023989933591 16.2690929627404 0.273595214775075 19.0573067251735 16.2690926227404 0.272340084565459 19.0949263869603 16.2690923327404 0.271204163531506 19.1422101992062 16.2690920027404 0.269983714893538 19.1792692809664 16.2690917427404 0.269146305863763 19.2206280729308 16.2690913927403 0.268241693980796 19.2711293553295 16.2690908527403 0.267097646206457 19.3328266882599 16.2690898827403 0.265473026729292 19.383294520657 16.2690885127402 0.263527890966903 19.4057194117222 16.2690877427402 0.262482412657245 -18.6952396579762 16.2690937727405 0.295722919916084 18.7041141983977 16.2690927327404 0.293009402247199 18.7152890289285 16.2690916427404 0.290007814694631 18.7272612694971 16.2690910127403 0.287839405061637 18.7361533299195 16.2690906127403 0.286360593321398 18.7435230502695 16.2690904527403 0.285475880279376 18.7571003109144 16.2690903627403 0.284258451411551 18.7700912115315 16.2690904527403 0.283438183642591 18.7851789622481 16.2690908627403 0.28312931437792 18.7958223727536 16.2690912627403 0.283150167958911 18.8037378131296 16.2690915927403 0.283252935203792 18.8155853236923 16.2690921527404 0.283543907457612 18.82690625423 16.2690927327404 0.28395819640729 18.8365780846894 16.2690932127404 0.284298168363438 18.8442272550527 16.2690935727404 0.284557822145771 18.8508316853664 16.2690938627405 0.284758197225288 18.8608465458421 16.2690942727405 0.285033425158361 18.878445286678 16.2690949427405 0.285454831058376 18.8973134775742 16.2690954627405 0.285676563598908 18.9112248382349 16.2690957027405 0.285668873968543 18.945669529871 16.2690962527406 0.285581640384399 18.9786433714371 16.2690958627406 0.284301281493586 19.0138677431102 16.2690955427405 0.283231902692793 19.026137563693 16.2690954327405 0.282866594895442 19.0587511552421 16.2690951627405 0.281973924413042 19.0955716169909 16.2690948827405 0.281150072553911 19.1418511691891 16.2690945027405 0.280227489620091 19.178124520912 16.2690941727405 0.279560654978418 19.2186076428348 16.2690936927404 0.278783689181514 19.2680387051827 16.2690929727404 0.277748909202365 19.3284249580509 16.2690917227404 0.276180011327846 19.377819230397 16.2690901027403 0.274255714046447 19.3997666414394 16.2690892327402 0.273223673297428 -18.701045568252 16.2690941927405 0.297165473694602 18.7099502386749 16.2690933627404 0.294906240137294 18.7210723692032 16.2690924827404 0.292411568388804 18.7329463697672 16.2690920227404 0.290652470925251 18.7417602701858 16.2690917427404 0.28946080823865 18.7490510405321 16.2690916527404 0.288770277795852 18.7624638211692 16.2690916727404 0.28785630770244 18.7752798917779 16.2690918327404 0.2872806913851 18.790145342484 16.2690922827404 0.287170950769888 18.800631292982 16.2690926927404 0.287300867326058 18.8084302733525 16.2690930327404 0.287473303944249 18.8201043339069 16.2690935927404 0.287849902842136 18.8312604144368 16.2690941627405 0.288325998894749 18.8407911848895 16.2690946327405 0.288717540323347 18.8483286852475 16.2690949827405 0.289017972147616 18.8548364955566 16.2690952727405 0.289254860248868 18.8647047260254 16.2690956827405 0.289587057994647 18.882045676849 16.2690963427406 0.290111805739571 18.9006379877321 16.2690968627406 0.290459293006075 18.9143475983833 16.2690971227406 0.290557391040735 18.9482933599956 16.2690977127406 0.290736955399264 18.9808040315398 16.2690974327406 0.289812478335353 19.015527033189 16.2690971727406 0.289044271038866 19.0276219837635 16.2690970827406 0.288781511846385 19.0597692052904 16.2690968527406 0.288137750775808 19.0960596870141 16.2690965727406 0.287531453687011 19.1416732791807 16.2690961627406 0.28682067563325 19.1774255608788 16.2690957827405 0.286278778147512 19.2173279627741 16.2690952127405 0.285600283415285 19.2660493150882 16.2690943627405 0.284655315830401 19.3255661379151 16.2690929227404 0.283145364458683 19.3742485002274 16.2690911427403 0.281253132318806 19.3958792812548 16.2690902027403 0.280238069820593 -18.7159874089617 16.2690953027405 0.300751476534928 18.7249697793883 16.2690949927405 0.299663906933271 18.7359563599101 16.2690946927405 0.298476754076884 18.7475775304621 16.2690946627405 0.297773933723502 18.7561902908712 16.2690946727405 0.297323378122102 18.7632778712078 16.2690947727405 0.297134251543119 18.7762672618248 16.2690950527405 0.297004204386942 18.7886333124122 16.2690954027405 0.297060943569637 18.802926503091 16.2690959627406 0.297466688658909 18.8130071335698 16.2690964127406 0.29787936713851 18.820506333926 16.2690967627406 0.298232635175289 18.8317339044593 16.2690973227406 0.298831868833751 18.8424656349691 16.2690978627406 0.299469170384022 18.8516332754045 16.2690983027407 0.299995255469009 18.8588833257489 16.2690986427407 0.300402076268332 18.8651423960461 16.2690989127407 0.300734181044106 18.8746331964969 16.2690993127407 0.301214888616939 18.8913105472891 16.2690999527407 0.302008925984654 18.9091926981384 16.2691004927408 0.302683644566701 18.9223829887649 16.2691007927408 0.303056663784418 18.9550444303163 16.2691014727408 0.303929467775874 18.9863628218038 16.2691014727408 0.303927371995775 19.0197951933918 16.2691013827408 0.303941061606425 19.0314400439449 16.2691013427408 0.303944587076593 19.0623867354147 16.2691012227408 0.303947670286739 19.0973129470737 16.2691009527408 0.303908232024866 19.1412122491588 16.2691004527408 0.303751214097408 19.1756232207932 16.2690999327407 0.303537583867261 19.2140307626174 16.2690991427407 0.303119966287425 19.2609251748448 16.2690979627407 0.302415198783951 19.3182039575654 16.2690960427406 0.30106795505996 19.3650537597907 16.2690938227405 0.29926722620443 19.3858695007793 16.2690926927404 0.298299853918482 -18.7307653496636 16.2690967827406 0.302462184136182 18.7398260500939 16.2690970027406 0.302566656401144 18.7506791906094 16.2690972627406 0.302711351078017 18.7620503711495 16.2690976427406 0.30309185207609 18.7704641915492 16.2690979427407 0.30340261532085 18.7773506018763 16.2690982127407 0.303731951696493 18.7899206124733 16.2690987527407 0.304417595259059 18.8018407230395 16.2690992927407 0.305137335323245 18.8155666736914 16.2690999527407 0.30609495558873 18.8252455441511 16.2691004327408 0.306816524893002 18.8324475844932 16.2691007927408 0.307370245349303 18.8432325950055 16.2691013327408 0.308221783309748 18.8535436954952 16.2691018427408 0.309048959829037 18.8623513959136 16.2691022527409 0.309734085721579 18.8693165262444 16.2691025727409 0.310266665026875 18.87532905653 16.2691028327409 0.310710682277965 18.884445736963 16.2691032127409 0.311365186369052 18.9004653177239 16.2691038327409 0.312472888161665 18.9176435385398 16.269104372741 0.313522174711504 18.9303190891419 16.269104692741 0.314204845153929 18.9617075206327 16.269105462741 0.315856815092393 18.9918442620642 16.269105712741 0.316858104869952 19.0239974535913 16.269105772741 0.317741201701897 19.0351961841233 16.269105782741 0.318041523036161 19.0649529655366 16.269105742741 0.318772850130897 19.0985269571313 16.269105472741 0.319392990910352 19.1407270991357 16.269104862741 0.319907154864774 19.173808610707 16.2691041827409 0.320114431464619 19.2107344924609 16.2691031427409 0.320061683642114 19.2558181046022 16.2691016127408 0.319724581296102 19.3108785972175 16.2690991727407 0.318696622467277 19.3559120093564 16.2690965027406 0.317115755702189 19.3759198803068 16.2690951727405 0.316253079791215 -18.7445785303197 16.2690985127407 0.302431252674713 18.7537136507536 16.2690992127407 0.303678969303976 18.7644425412632 16.2690999927407 0.305102360751584 18.7755801317922 16.2691007627408 0.306529318489361 18.783807992183 16.2691013227408 0.307576551969102 18.7905061925011 16.2691017627408 0.308410321068703 18.8026836730795 16.2691025427409 0.30989390789917 18.8141862736259 16.2691032427409 0.311266457754363 18.8273809942526 16.2691039927409 0.312777020076111 18.8366835946944 16.269104492741 0.313813134045323 18.8436073650233 16.269104862741 0.31457331485143 18.8539778955159 16.269105382741 0.315689084004426 18.8638951059869 16.269105852741 0.316720676963424 18.8723657263892 16.269106232741 0.317577447944119 18.8790640267074 16.2691065327411 0.318245751395861 18.884845676982 16.2691067727411 0.318810074552665 18.8936119873984 16.2691071227411 0.3196508470026 18.90901555813 16.2691077127411 0.321093614371128 18.9255345589146 16.2691082427411 0.322538062719735 18.9377280594938 16.2691085927412 0.323543544877493 18.967924360928 16.2691094127412 0.326006511304478 18.9969546023069 16.2691098927412 0.328026154210406 19.0279099237772 16.2691100727412 0.329806830924983 19.0386908942893 16.2691101227412 0.330414124903828 19.0673333956497 16.2691101427412 0.331904401934612 19.0996410771842 16.2691098527412 0.333228604997509 19.1402500091131 16.2691091127412 0.334479465476921 19.1720865206252 16.2691082727411 0.335165412789502 19.2076248923132 16.2691069827411 0.335548397807693 19.251012764374 16.269105102741 0.335670269103482 19.3039958968906 16.2691021427408 0.3350811617055 19.3473283089487 16.2690990227407 0.333820518075623 19.3665796498631 16.2690975027406 0.333106715941719 - -0 4 -0.08990298 1 -0.18315357 1 -0.20034405 1 -0.22475745 1 -0.27019476 1 -0.32899256 1 -0.35467696 1 -0.39790986 1 -0.41449401 1 -0.47595518 1 -0.5151171 1 -0.5966751 1 -0.69478979 1 -0.69662422 1 -0.71520522 1 -1 4 - -0 4 -0.19770808 1 -0.23208154 1 -0.24077415 1 -0.37555898 1 -0.37681277 1 -0.50380359 1 -0.62392695 1 -0.66153287 1 -0.70445596 1 -0.77323777 1 -0.88510862 1 -0.91815888 1 -0.95570126 1 -1.02938023 1 -1.04266766 1 -1.14446292 1 -1.36100787 1 -1.39816237 1 -1.40679264 1 -2.01060881 1 -2.02220413 1 -2.07165684 1 -2.24214506 1 -2.63715539 1 -2.7647672 1 -3.1127943 1 -3.31934461 1 -3.52589496 1 -4.04227072 1 -4.45537137 4 - -9 0 0 0 0 3 2 31 4 29 3 13.4648095695441 6.33362332183095 -0.650095774167891 14.7530324907314 8.81750256380888 -0.427492177594788 17.329478313106 13.7852610447647 0.017715015531418 18.6177012342933 16.2691402927427 0.240318612104521 -13.4678678896894 6.33362614983109 -0.640449211339704 14.7559755208712 8.81750458180897 -0.419376865929331 17.3321907732348 13.7852614447648 0.0227678249014136 18.6202984044167 16.2691398727426 0.243840170321786 -13.4770251201243 6.33362909183123 -0.621503192259816 14.7642351512635 8.81750659680907 -0.403426816831745 17.3386552235419 13.7852616047648 0.0327259340443984 18.6258652646811 16.2691391127426 0.25080230947247 -13.4919345408325 6.33362776283116 -0.603765968687343 14.7770969518744 8.81750543480901 -0.38833433426489 17.3474217539583 13.7852607747647 0.0425289345700159 18.6325841650002 16.2691384527426 0.257960568982469 -13.5032468213698 6.33362573883107 -0.593679863128279 14.786773982334 8.81750382280894 -0.379612365130619 17.3538282942626 13.7852599947647 0.0485226308647012 18.6373554452268 16.2691380727426 0.262590128862361 -13.5108333417301 6.33362419383099 -0.587633253851081 14.7932472526415 8.81750260880888 -0.37434705183053 17.3580750844643 13.7852594347647 0.052225352240571 18.6404890053757 16.2691378527425 0.265511554271122 -13.518346272087 6.33362253383091 -0.582541645859242 14.7996348729449 8.81750132080882 -0.369876208068176 17.3622120646608 13.7852588947646 0.0554546675039552 18.6435006555187 16.2691376827425 0.268120105295021 -13.526916452494 6.33362075583083 -0.577253214018055 14.8069109032905 8.81749994780876 -0.365216911076872 17.3668998048834 13.7852583347646 0.0588556948354954 18.6468942456799 16.2691375227425 0.270891997776679 -13.5315618627147 6.33361986983079 -0.574552924629798 14.8108512534777 8.81749926580872 -0.362835974753783 17.3694300450036 13.7852580547646 0.0605979250182469 18.6487194357666 16.2691374527425 0.272314874894262 -13.5362309229364 6.33361907683075 -0.571943067455837 14.8148107736657 8.81749865580869 -0.360535435664514 17.3719704751243 13.7852578147646 0.062279827898133 18.6505503258536 16.2691373927425 0.273687459689456 -13.5402184731258 6.33361842883072 -0.569758234102063 14.8181921838263 8.81749815780867 -0.358608470762988 17.3741395952273 13.7852576147646 0.0636910559151627 18.6521133059278 16.2691373427425 0.274840819244238 -13.54830599351 6.33361728283066 -0.565534536611448 14.8250508341521 8.81749727980863 -0.354878597275828 17.3785405154363 13.7852572747646 0.0664332813954114 18.6552853560785 16.2691372727425 0.277089220751031 -13.5570667839261 6.33361642083062 -0.561410635735573 14.8324881945054 8.8174966218086 -0.351216314461879 17.3833310056639 13.7852570247645 0.0691723280955091 18.6587524162431 16.2691372227425 0.279366649359203 -13.5695321445182 6.33361576283059 -0.556155169465952 14.8430907550089 8.81749612380857 -0.346507990598246 17.3902079759905 13.7852568447645 0.0727863671571668 18.6637665864813 16.2691372027425 0.282433546044873 -13.5816545450939 6.3336158638306 -0.551704629264562 14.8534244454998 8.81749620980858 -0.342480452056948 17.3969642563114 13.7852569047645 0.0759679023282816 18.6687341567173 16.2691372427425 0.285192079515896 -13.5954582057496 6.33361717383066 -0.547117411856681 14.8652156960598 8.81749722480862 -0.338341170890342 17.4047306766803 13.7852573247646 0.0792113110423352 18.6744881669906 16.2691373727425 0.287987551998674 -13.6044288461757 6.33361860583073 -0.544198134078023 14.8728867764242 8.81749832880868 -0.335736514666628 17.4098026369212 13.7852577747646 0.0811867241661623 18.6782605771697 16.2691375027425 0.289648343587557 -13.6131618965905 6.33362035983081 -0.54133833208219 14.8803588467791 8.81749967980874 -0.33321200633672 17.4147527371563 13.7852583147646 0.0830406451342188 18.681949687345 16.2691376427425 0.291166970869688 -13.6233711670754 6.33362281583093 -0.537984865472909 14.8891001371943 8.81750156980883 -0.330284102807652 17.4205580774321 13.7852590747646 0.0851174225328604 18.686287057551 16.2691378327425 0.292818185188117 -13.6380039777704 6.33362676783111 -0.533362481263357 14.9016515777904 8.81750461980898 -0.326291826758029 17.4289467678305 13.7852603247647 0.0878494822426263 18.6925943678506 16.2691381727426 0.294920136737954 -13.6489243082891 6.33362963983125 -0.530262677546124 14.9110476282367 8.81750685380908 -0.323631405791666 17.435294278132 13.7852612847647 0.0896311377172504 18.6974175980796 16.2691384927426 0.296262409461709 -13.6570365986744 6.33363147483134 -0.528224029169294 14.9180444985691 8.81750829580915 -0.321875727918276 17.4400602883584 13.7852619347648 0.0908208745937599 18.701068188253 16.2691387627426 0.297169175854778 -13.6620624489131 6.33363254783139 -0.527016147431923 14.922379848775 8.81750914280919 -0.320833986028796 17.4430146584987 13.7852623347648 0.0915303367674575 18.7033320583606 16.2691389327426 0.297712498160584 -13.6704166693099 6.33363407283146 -0.525195795895461 14.9295878991173 8.81751035980925 -0.319259618094017 17.4479303587322 13.7852629347648 0.0926127374988688 18.7071015885396 16.2691392227426 0.298548915300312 -13.6808072598034 6.33363556983153 -0.523128006287246 14.9385522695431 8.81751157980931 -0.317476854239341 17.4540422790225 13.7852636047649 0.0938254498764695 18.7117872887622 16.2691396127426 0.299476601924375 -13.6928885903773 6.33363673083159 -0.520864860959752 14.948970830038 8.81751257180935 -0.315549678737805 17.4611353193594 13.7852642547649 0.09508068571609 18.7172175590201 16.2691400927427 0.300395867938037 -13.7033633908748 6.33363721083161 -0.518839887123571 14.9579939004666 8.81751304380938 -0.313871059958075 17.46725491965 13.7852647047649 0.0960665943929182 18.7218854292418 16.2691405427427 0.301035421558415 -13.7100714911934 6.33363725983161 -0.517438712957019 14.9637656007407 8.81751315480938 -0.312736487524185 17.4711538198352 13.7852649447649 0.0966679633014817 18.7248479293825 16.2691408427427 0.301370188724315 -13.7264398519709 6.33363711583161 -0.513958044451696 14.9778446414094 8.81751323080939 -0.30993685456121 17.4806542102865 13.7852654647649 0.0981055252097622 18.732058989725 16.2691415727427 0.302126715100248 -13.7411001026672 6.33363534583152 -0.510531781868957 14.9904304720072 8.81751208480933 -0.307286312875316 17.4890912006872 13.7852655647649 0.0992046250919666 18.7384215700272 16.2691423027428 0.302450094075608 -13.75526459334 6.33362968383125 -0.507921015384952 15.0026111725858 8.81750803280914 -0.305332068632494 17.4973043310773 13.7852647247649 0.099845824882422 18.7446509103231 16.2691430827428 0.30243477163488 - -0 4 -0.09024672 1 -0.18349731 1 -0.20068779 1 -0.22510119 1 -0.2705385 1 -0.28222558 1 -0.31500417 1 -0.31810221 1 -0.3293363 1 -0.3550207 1 -0.3982536 1 -0.41483775 1 -0.47629892 1 -0.51546084 1 -0.54650093 1 -0.56081663 1 -0.59701884 1 -0.64099837 1 -0.69513353 1 -0.69696796 1 -0.71554896 1 -0.74137678 1 -0.77402315 1 -0.81142183 1 -0.8526086 1 -0.86975827 1 -0.87223775 1 -1.0006874 4 - -0 3 -23.12299448 1 -46.24598896 3 - -9 0 0 0 0 3 2 13 4 10 3 13.7550368433292 6.33362832883119 -0.507957584226689 15.0024156525765 8.81750736180911 -0.305361129593875 17.4971732610711 13.7852654247649 0.0998317797017549 18.7445520703184 16.2691444627429 0.30242823434457 -13.7865781648273 6.3336307468313 -0.503648957492041 15.0295177038638 8.81750943980921 -0.30165893222803 17.5153967719367 13.785266824765 0.102321118299992 18.7583363009731 16.2691455127429 0.304311143584003 -13.8802692292774 6.33363743883162 -0.491401002120294 15.1100221676875 8.81751518880948 -0.291135183808179 17.5695280345078 13.7852706947652 0.109396452826052 18.7992809629179 16.269148442743 0.309662271148168 -13.9776847539044 6.33364287683188 -0.48035969631586 15.1937270716633 8.8175198628097 -0.281646595197495 17.6258116971811 13.7852738347653 0.115779607059236 18.84185401494 16.2691508227432 0.314492708177601 -14.082671878891 6.3336475948321 -0.469733665581151 15.283937585948 8.81752391580989 -0.272516908983858 17.6864690000622 13.7852765547655 0.121916604180728 18.8877347071192 16.2691528827433 0.319133360768021 -14.2135484051073 6.33365255083234 -0.457518326380953 15.3963947012895 8.81752817481009 -0.262020643675312 17.7620872836538 13.7852794247656 0.12897472174597 18.944933569836 16.2691550427434 0.324472404451612 -14.4471657562035 6.33365647883253 -0.441198102015784 15.5971300908239 8.81753154981025 -0.247997506619249 17.8970587600646 13.7852816947657 0.138403684163822 19.047023094685 16.2691567627434 0.331604279550357 -14.6420603254605 6.33365351483238 -0.434537714289433 15.7645962587781 8.81752900281013 -0.242274804087435 18.0096681254133 13.7852799747656 0.14225101627656 19.1322040487309 16.2691554627434 0.334513926468558 -14.7926403326127 6.33364860383215 -0.432313843113805 15.8939805249235 8.81752478380993 -0.240363750856665 18.0966609195452 13.7852771447655 0.143536433647614 19.1980011118561 16.2691533227433 0.335486525904754 -14.8919173173281 6.33364465683196 -0.431638169831712 15.9792878889754 8.81752139180977 -0.2397833950791 18.1540290222701 13.7852748647654 0.143926154446125 19.2413995939174 16.2691515927432 0.335780929208738 -15.0352597141365 6.33363665183158 -0.433233464937484 16.1024528648254 8.81751451380945 -0.241153966144198 18.2368391662033 13.7852702347652 0.143005031422374 19.3040323068923 16.269148102743 0.33508453020566 -15.1344420988474 6.33362951383125 -0.43611921401455 16.1876768588734 8.81750837980915 -0.243633633051976 18.2941463689253 13.785266114765 0.141337528893172 19.3473811189512 16.2691449827429 0.333823109855746 -15.1785312109415 6.33362602483108 -0.437754562232225 16.2255606506727 8.81750538180901 -0.245038814538719 18.3196195401352 13.7852640947649 0.140392680868294 19.3666489898664 16.2691434527428 0.333108428571801 - -0 4 -0.06695952 1 -0.19874124 1 -0.20615931 1 -0.28878375 1 -0.47512806 1 -0.69874124 2 -0.79146093 1 -0.90736053 1 -1.00016043 4 - -0 3 -5.35089702 1 -10.70179404 3 - -9 1 1 0 0 3 3 6 4 3 2 33.8393156872812 0 0.672364923065619 1 33.5433570032239 -1.26790006022202e-007 0.574930771547745 1 33.2466357191304 -2.06840009824373e-007 0.479447801742548 1 32.9492818450068 -2.51270011934685e-007 0.385932318830801 1 -33.8393022372805 -0.114189570453713 0.703923794334585 0.75546209 33.5572067838817 -0.15472852625921 0.611405002870178 0.73855771 33.2607390398003 -0.197166652174913 0.51472364858806 0.72165333 32.9492810950068 -0.241640622937313 0.413720980140691 0.70474895 -33.8392936572801 -0.20435919185654 0.799517628455048 0.63319313 33.5686503844253 -0.282006476214588 0.737801073373669 0.60783657 33.2728759903767 -0.366414023293731 0.668950497763442 0.58248 32.9492808650068 -0.458504891927813 0.592502587422362 0.55712343 -33.8393018472805 -0.20435919169654 1.08221130540228 0.63319313 33.569213074452 -0.282006415874585 1.12562234946419 0.60783657 33.2732989003968 -0.366413914323726 1.1671699674376 0.58248 32.9492825850069 -0.458504741647806 1.20787136837081 0.55712343 -33.8393159672812 -0.114189570183713 1.17780513894274 0.75546209 33.5583299739351 -0.154728421859205 1.25099723241918 0.73855771 33.2615833098404 -0.197166471214904 1.32030618071118 0.72165333 32.9492838150069 -0.241640385337302 1.38665286986247 0.70474895 -33.8393312472819 3.1000001472421e-010 1.20936400844171 1 33.5450377833037 1.00000004749745e-010 1.28623003409265 1 33.2478993791904 -3.00000014249235e-011 1.35431147932634 1 32.949284715007 -9.00000042747706e-011 1.41444141318236 1 - -0 4 -0.65174824 2 -1.30349648 4 - -0 4 -1 4 - -9 1 1 0 0 3 3 6 4 3 2 33.8393312472819 3.1000001472421e-010 1.20936400844171 1 33.5450377833037 1.00000004749745e-010 1.28623003409265 1 33.2478993791904 -3.00000014249235e-011 1.35431147932634 1 32.949284715007 -9.00000042747706e-011 1.41444141318236 1 -33.8393159672812 0.114189570683713 1.17780513794274 0.75546209 33.5583300239351 0.154728420599205 1.25099722241918 0.73855765 33.2615833598404 0.197166491524905 1.32030617171118 0.72165321 32.9492838150069 0.241640447887305 1.38665287586247 0.70474877 -33.8393018472805 0.20435919194654 1.08221130440228 0.63319313 33.569213164452 0.282006406494585 1.12562231346419 0.60783648 33.2732990003968 0.366413954223728 1.16716990543759 0.58247982 32.9492825850069 0.458504889747813 1.20787129337081 0.55712316 -33.8392936572801 0.20435919177654 0.799517628335048 0.63319313 33.5686504744253 0.282006346154582 0.737800980803665 0.60783648 33.2728760903767 0.366413845253723 0.668950283543432 0.58247982 32.9492808650068 0.458504739467806 0.592502215362344 0.55712316 -33.8393022372805 0.114189570413713 0.703923794314585 0.75546209 33.5572068338817 0.1547283161992 0.611404942060175 0.73855765 33.2607390998003 0.197166310574897 0.514723508148054 0.72165321 32.9492810950068 0.241640210287294 0.41372073870068 0.70474877 -33.8393156872812 0 0.672364923065619 1 33.5433570032239 -1.26790006022202e-007 0.574930771547745 1 33.2466357191304 -2.06840009824373e-007 0.479447801742548 1 32.9492818450068 -2.51270011934685e-007 0.385932318830801 1 - -0 4 -0.65174836 2 -1.30349672 4 - -0 4 -1 4 - -9 0 0 0 0 1 1 2 2 2 2 33.8393312472819 3.00003114249383e-005 1.20939400844313 33.8393156872812 3.00000014249235e-005 0.672334923064194 -33.8393055372807 -0.204389191617965 1.20939400944313 33.83928996728 -0.204389191927965 0.672334923924194 - -0 2 -1 2 - -0 2 -2.62724393 2 - -9 0 0 0 0 1 1 2 2 2 2 33.8393156872812 -3.00000014249235e-005 0.672334923064194 33.8393312472819 -2.99996914249088e-005 1.20939400844313 -33.83928996728 0.204389191707965 0.672334923694194 33.8393055372807 0.204389192017965 1.20939400944313 - -0 2 -1 2 - -0 2 -2.62724394 2 - -9 0 0 0 0 1 1 2 2 2 2 33.0891625616508 6.53812123854408 1.23839850182077 33.0960615419785 6.52583967396074 1.36114491465091 -31.9739084286791 6.53189275424824 1.30045833476845 31.9808074090068 6.5196111906649 1.42320474759859 - -0 2 -9.04069719 2 - -0 2 -1 2 - -Triangulations 83 -63 61 1 0.162462815626906 -28.764323322482 -1.33232061253183 0.776095392149801 28.771246413521 -1.32785526804699 0.800754676743324 28.7647518939096 -1.33049802823561 0.78861301695957 28.7671935280293 -1.32922079859461 0.795145813867469 28.7814886770473 -1.32550508695811 0.807583974655179 28.7759052777932 -1.32669062831001 0.804490070234939 28.7793432169484 -1.32593924147655 0.806534109453135 28.809786707555 -1.32057331451879 0.816323984307388 28.7961287741668 -1.3227570910966 0.813350832173902 28.7901513979736 -1.32385482469374 0.811151120238901 28.8200576329791 -1.3189588914812 0.818374892280472 28.8142972944434 -1.31983032999771 0.817430022187815 28.8171657521131 -1.31938853644123 0.81794787891641 28.8370977396886 -1.31653513753206 0.820227543550216 28.8275526322306 -1.31782232397244 0.819630990352347 28.8239665194135 -1.31834937108397 0.819129036648763 28.8511763753573 -1.31448655943476 0.822002803405536 28.840268560109 -1.31607821058169 0.82060327838988 28.8448192352265 -1.31541562559694 0.82118059096769 28.8605162208009 -1.31320612987394 0.822703057182297 28.8554367670391 -1.31388481052566 0.822438155600938 28.8527844805522 -1.31425436449764 0.822198487068965 28.8815857768016 -1.3100262339729 0.825953902237579 28.8670711732323 -1.31226279935428 0.823451464634033 28.8736558835302 -1.3112646407755 0.824494598572598 29.1024809571707 -1.27829995923427 0.847101069546861 29.0048394519693 -1.29247211079396 0.83768456326348 28.9434114525562 -1.3012701563751 0.831794681536804 29.7795234590196 -1.17556150430168 0.898660712825603 29.4755737759417 -1.22239578196778 0.880352047865206 29.2889790862114 -1.25065619957236 0.864616156910779 30.1859472023218 -1.1125524406374 0.900485451578671 29.9570643393511 -1.14800974696984 0.903376192068975 30.0676697062507 -1.13088625996692 0.90324593917547 30.232174242697 -1.10535644116363 0.898715988384917 30.2066798236802 -1.10932781523584 0.899740371062368 30.2194812508588 -1.10733425044616 0.89924249782551 30.9823506165827 -0.978516058763017 0.823513645257798 30.681673812607 -1.03277078310091 0.862662839769228 30.4705413596741 -1.0676710124906 0.883607871684779 31.5238734767954 -0.859672023594499 0.747163193682461 31.3531320179453 -0.900485597976529 0.769984123312257 31.4187887121461 -0.885155857957496 0.760731083342226 31.5669420071188 -0.848883086687299 0.741836439348443 31.5477811566628 -0.853707083796027 0.74417931239417 31.5358216048987 -0.856698341040634 0.745663949767286 31.8489252871177 -0.773601860023678 0.713410577422495 31.720486219248 -0.808850817579908 0.724788794456338 31.6428602347965 -0.829388768932885 0.73299379839346 32.4183769697902 -0.614560682900065 0.818500392946681 32.1138109643915 -0.705093402711811 0.761730948186576 32.2697141202137 -0.660539893705968 0.790597711934467 32.4183772197902 -0.208516963644024 1.41444139018236 32.4183769697902 -0.455025183735348 1.24952501328132 32.4183769697902 -0.57236273395312 1.0605563138653 25.9893209044264 -1.2407928679345 1.41444127418235 28.8885020234294 -1.01981169350125 1.41444129879513 30.6741663525248 -0.716118495520971 1.41444133271498 25.9893210144265 -1.67578856559568 0.495540494136909 25.9893209495827 -1.49355647716755 1.05892484948541 25.9893209799464 -1.607448781941 0.791612249723409 27.3120373212419 -1.51930898229549 0.629284013050131 28.064321904604 -1.42558527408699 0.705260957258751 0.41008236 0.84752031 0.413656240738291 0.852060415202764 0.411395911474825 0.849883113739138 0.41244018863653 0.851079570503182 0.4163331 0.85329902 0.41477461541274 0.852700452908718 0.415531563631693 0.853027719732995 0.421419233714204 0.854378375383088 0.419164067051061 0.854004808272436 0.417748195142285 0.853684455288915 0.423270503694597 0.854556268081525 0.422245189217353 0.854472352765953 0.422758937591365 0.854518976600264 0.42617692 0.85458915 0.42458347298495 0.854609432693009 0.423969016598856 0.854593155918606 0.42866501 0.85467034 0.426744809041472 0.85460190850844 0.427536806846595 0.854628834899521 0.43002793 0.85464274 0.429349229075139 0.854656484126973 0.428929756983876 0.854664978704576 0.43396218 0.85486888 0.431356971810944 0.854653459005184 0.432528477432094 0.854733110817713 0.4722801 0.85484443 0.455230042560552 0.85484885866696 0.444593870752803 0.854854698575322 0.593687291780516 0.851774647070098 0.538691693494868 0.854179421776752 0.505260399024782 0.85469966234179 0.66699988 0.84277681 0.625815690078976 0.84884784741201 0.645745460817101 0.846249256025776 0.675303022345725 0.841231514364644 0.670723740951906 0.8420968498809 0.673023092386536 0.841666404061848 0.8127628 0.80236953 0.756678797660603 0.820626798948657 0.718227286337125 0.831517068376111 0.92806391 0.76394457 0.889591731979005 0.776203156089625 0.904071186519103 0.771433855181008 0.938183832958998 0.760874129742791 0.933659568122127 0.762237877120847 0.930853601563256 0.763090956124679 1.00922414 0.74147285 0.975783848175138 0.75011913326488 0.956468739970849 0.755513025650299 1.18410863 0.74147285 1.08695057803366 0.74147285 1.13552960359403 0.74147285 1.18410863 1 1.18410863 0.887327693168885 1.18410863 0.81440027313792 0 1 0.526270502222222 1 0.855189566111111 1 0 0.84752031 0 0.932231245034927 0 0.889875775378741 0.182258826852883 0.84752031 0.29617059439692 0.84752031 59 62 61 62 63 56 1 3 63 4 2 63 3 4 63 2 6 63 6 7 63 57 7 5 63 7 57 56 63 57 8 57 9 10 9 57 57 5 10 57 8 12 57 13 11 15 14 18 62 60 61 16 15 57 60 62 56 11 16 57 15 18 19 57 12 13 21 20 25 25 20 24 17 22 23 23 22 21 21 25 23 17 57 15 17 15 19 23 57 17 43 58 42 58 41 46 43 41 58 58 40 39 42 58 38 58 39 38 46 45 58 54 47 51 52 50 55 51 52 55 58 44 49 49 48 58 47 54 48 45 44 58 51 55 54 31 30 57 29 33 57 30 29 57 28 27 57 26 57 27 57 26 31 28 57 23 33 34 57 32 36 58 37 35 58 36 37 58 32 57 34 32 58 57 54 53 58 40 58 35 48 54 58 -33 31 1 0.214436049999253 -31.9768135388171 -6.52772034505006 1.34215900474913 28.764323322482 -1.33232061253183 0.776095392149801 32.0213115109306 -6.52591981196454 1.3601615736042 31.9777141338021 -6.52713956390073 1.34796364316376 31.9801838030808 -6.5267974488231 1.3513832533026 31.9853169721851 -6.52653976915668 1.35395944627219 31.9935667292365 -6.52630888437399 1.35626836623374 32.0062896473528 -6.52612466140147 1.35811170070655 32.0138321032294 -6.52604139200468 1.35894519714692 28.8815857768016 -1.3100262339729 0.825953902237579 28.8605162208009 -1.31320612987394 0.822703057182297 28.8670711732323 -1.31226279935428 0.823451464634033 28.8736558835302 -1.3112646407755 0.824494598572598 28.8554367670391 -1.31388481052566 0.822438155600938 28.8527844805522 -1.31425436449764 0.822198487068965 28.8511763753573 -1.31448655943476 0.822002803405536 28.8370977396886 -1.31653513753206 0.820227543550216 28.840268560109 -1.31607821058169 0.82060327838988 28.8448192352265 -1.31541562559694 0.82118059096769 28.8275526322306 -1.31782232397244 0.819630990352347 28.8239665194135 -1.31834937108397 0.819129036648763 28.8200576329791 -1.3189588914812 0.818374892280472 28.809786707555 -1.32057331451879 0.816323984307388 28.8142972944434 -1.31983032999771 0.817430022187815 28.8171657521131 -1.31938853644123 0.81794787891641 28.7961287741668 -1.3227570910966 0.813350832173902 28.7901513979736 -1.32385482469374 0.811151120238901 28.7814886770473 -1.32550508695811 0.807583974655179 28.771246413521 -1.32785526804699 0.800754676743324 28.7759052777932 -1.32669062831001 0.804490070234939 28.7793432169484 -1.32593924147655 0.806534109453135 28.7647518939096 -1.33049802823561 0.78861301695957 28.7671935280293 -1.32922079859461 0.795145813867469 0 9.62275446028575e-016 0 55.31736968 1 0 0.109350007551124 0 0.189066133721304 0 0.298416054801673 0 0.462441198012745 0 0.708478619100263 0 0.854239262413985 0 1 55.43536728 0.85471089 55.4176593 0.892664331841993 55.4220909684292 0.941398445964638 55.4280467211175 0.810697953922827 55.4125867619866 0.791655571693265 55.4103800946304 0.77912526 55.40891471 0.678010189999999 55.3970246499999 0.699932290490517 55.3995770753096 0.733069345965337 55.4034798065837 0.609909777837509 55.3891598678 0.583902953457134 55.3860813406207 0.55492435 55.38255655 0.47919147 55.3732371 0.512540331915117 55.3773261495777 0.533658859146729 55.3799330522994 0.379334920255739 55.3608940881844 0.333145042406814 55.3549263561367 0.25286332 55.34428547 0.17703176 55.33417125 0.222040865962385 55.3401760800227 0.245045824559054 55.3432402971826 0.0834791767706452 55.3229067146112 0.129464542217362 55.3280243670037 1 4 2 2 3 32 2 4 5 7 2 6 29 33 3 3 33 32 6 2 5 31 30 24 28 31 23 24 30 17 26 27 23 23 27 28 31 24 23 17 30 29 2 7 8 22 25 20 20 21 22 25 17 20 3 18 29 29 18 17 25 24 17 2 9 3 2 8 9 18 3 19 14 15 16 16 19 14 11 14 19 13 12 3 10 13 3 3 11 19 3 12 11 -29 27 1 0.367725310219895 -32.0213115109306 -6.52591981196454 1.3601615736042 28.8815857768016 -1.3100262339729 0.825953902237579 33.0949317119248 -6.52779751805373 1.34157750972151 32.6183926363032 -6.52324697041489 1.38697601508401 32.3192581063883 -6.52317677906596 1.38762674676116 31.8489252871177 -0.773601860023678 0.713410577422495 31.720486219248 -0.808850817579908 0.724788794456338 31.6428602347965 -0.829388768932885 0.73299379839346 31.5669420071188 -0.848883086687299 0.741836439348443 31.5477811566628 -0.853707083796027 0.74417931239417 31.5358216048987 -0.856698341040634 0.745663949767286 31.5238734767954 -0.859672023594499 0.747163193682461 30.9823506165827 -0.978516058763017 0.823513645257798 31.3531320179453 -0.900485597976529 0.769984123312257 31.4187887121461 -0.885155857957496 0.760731083342226 30.681673812607 -1.03277078310091 0.862662839769228 30.4705413596741 -1.0676710124906 0.883607871684779 30.232174242697 -1.10535644116363 0.898715988384917 30.1859472023218 -1.1125524406374 0.900485451578671 30.2066798236802 -1.10932781523584 0.899740371062368 30.2194812508588 -1.10733425044616 0.89924249782551 29.7795234590196 -1.17556150430168 0.898660712825603 29.9570643393511 -1.14800974696984 0.903376192068975 30.0676697062507 -1.13088625996692 0.90324593917547 29.4755737759417 -1.22239578196778 0.880352047865206 29.2889790862114 -1.25065619957236 0.864616156910779 29.1024809571707 -1.27829995923427 0.847101069546861 29.0048394519693 -1.29247211079396 0.83768456326348 28.9434114525562 -1.3012701563751 0.831794681536804 3.01761452 0 0.49269187 0 3.01761452 1 3.01761452 0.55555555355102 3.01761452 0.277777777806735 0.292660179999999 1 0.308035071740388 0.957851900685702 0.316985119758241 0.932263703686362 0.32546703 0.90714433 0.327563161181346 0.90078909471453 0.328862229317635 0.896819046667684 0.330152927823851 0.89285024119753 0.38054399 0.71278377 0.347780457025919 0.835978553083439 0.341059642644209 0.858234001873833 0.402719888763666 0.610487296176055 0.416068139762002 0.539586290460551 0.42973718 0.45953245 0.432258371063966 0.443982329876691 0.431132009461406 0.45095770916 0.430433017514716 0.455263671302865 0.45321307 0.30680907 0.444294827602871 0.366856267549103 0.438567927306966 0.404130844534367 0.467667260847604 0.20345190987771 0.47600048533653 0.13968953165021 0.483898951543211 0.0757973607092663 0.487860590548541 0.0423037115927426 0.490291966151757 0.0212225529834208 14 13 3 15 14 3 18 21 4 16 17 3 18 4 17 13 16 3 7 8 3 6 7 3 11 12 3 9 10 3 11 3 10 8 9 3 15 3 12 5 26 27 5 25 26 29 2 5 5 28 29 28 5 27 1 5 2 24 23 4 20 19 4 24 4 19 25 4 22 4 25 5 17 4 3 4 23 22 4 21 20 -481 857 1 0.188992707028107 -25.9893210144265 -1.67578856559568 0.495540494136909 27.3120373212419 -1.51930898229549 0.629284013050131 28.064321904604 -1.42558527408699 0.705260957258751 28.764323322482 -1.33232061253183 0.776095392149801 25.9893210144265 1.67578665759559 0.495543775207065 25.9893210595912 -1.68400096620412 0.104293156327886 25.9893210992021 -1.6094660467772 -0.256107775302221 25.9893211339876 -1.47137442990658 -0.56998965304101 25.989321166696 -1.26642731260049 -0.856833198911222 25.9893211945099 -0.999963494727196 -1.09976662738295 25.9893212156238 -0.682349462496128 -1.28323775909663 25.9893212286158 -0.328532648832915 -1.39475407891498 25.9893212325735 0.0430897063710749 -1.42641416112216 25.9893212272109 0.412362807748192 -1.3759327125916 25.9893212129055 0.759366009467135 -1.24694480651844 25.9893211906476 1.06636412102401 -1.04852357180997 25.9893211619129 1.31938917134473 -0.794015118064962 25.9893211284844 1.5092190996943 -0.499431274727858 25.9893210922585 1.63166559831525 -0.181705319982121 25.9893210550655 1.68723041716745 0.142901911316889 25.9893210345193 1.6906630543802 0.321477936167018 28.7643514962333 1.33236617403399 0.776100355658662 27.6194881219554 1.48165200572926 0.660331569942414 26.8339248695205 1.57666155768992 0.580995151391121 28.8042061810958 1.33218910762353 0.734824782868964 28.7750044534097 1.33317663478055 0.759453473175048 28.7875217931438 1.33299393369997 0.747409772071321 28.8475719209584 1.32884532155346 0.708805028085803 28.8222396701385 1.33098445437855 0.722941375478897 28.8346249173958 1.32998993839467 0.715754167430029 28.8635999007014 1.32726816033196 0.701453946616088 28.8562793112056 1.32801381583399 0.704560642423376 28.8518680381687 1.32844198085001 0.706643028489731 28.8725335952688 1.32630037163785 0.698270444283315 28.867993691635 1.32680012581809 0.699792063894168 28.8656204720738 1.32705503534435 0.70066390099062 28.8816743505559 1.32524719569586 0.695787439970753 28.8775904132854 1.32572610977519 0.696793589036043 28.8750545233673 1.32601664766193 0.697501193238321 29.3247602152849 1.2637721186497 0.616147712196046 29.1078512072961 1.29587838748688 0.648447423514704 28.9898581557217 1.31184102501947 0.67130074713442 29.6596005386966 1.20962973326461 0.587203699858479 29.5013742992985 1.23573720671022 0.597938318883715 29.4100709559397 1.25039788769139 0.606435721376138 29.8455269996093 1.17804865362135 0.580310109048595 29.7609436354519 1.19252197459894 0.582724670786081 29.7096530119139 1.20121582260965 0.584772721175931 30.6739009489152 1.02775890829929 0.600825162057539 30.1958373950127 1.11641510086955 0.580547484392847 30.4302918580342 1.07363161088937 0.587995751073576 31.4235408023773 0.87387724296965 0.664016100385336 31.003220177075 0.962859218811492 0.62438783987948 31.2127587094392 0.919511495410958 0.642930651987077 31.8489294108679 0.773620907424083 0.713412657138219 31.6669080706979 0.818055692597143 0.691167117815894 31.547495011969 0.84590928484853 0.677466341041488 32.4183769697902 0.614559651360016 0.818501410646729 32.1770521334931 0.687441378484839 0.77339797995212 32.0167341897921 0.731181747152838 0.743928886938491 32.4183769697902 -8.97180042613466e-007 0.221258007919191 32.4183769697902 0.535430395324304 0.533899595554983 32.4183769697902 0.314983169331282 0.308074857558539 32.4183769697902 0.164087644894648 0.243559405843798 32.4183769697902 -0.614560682900065 0.818500392946681 32.4183769697902 -0.535431204285334 0.533899140425032 32.4183769697902 -0.314984287109013 0.30807488278998 32.4183769697902 -0.164089059494071 0.243559506019427 31.8489252871177 -0.773601860023678 0.713410577422495 32.1138109643915 -0.705093402711811 0.761730948186576 32.2697141202137 -0.660539893705968 0.790597711934467 31.4590683246425 -0.865913067350121 0.667814429589193 31.6382895799891 -0.824784036998286 0.687815045540941 31.7454745135308 -0.799162971634557 0.700569072566715 30.9709464533427 -0.969355678355452 0.622014505277359 31.1963885929912 -0.922923737771986 0.641514500923609 31.3302938052877 -0.89429565565052 0.654444075395654 30.6873283611547 -1.02511979891527 0.601757898703286 30.8419077314078 -0.995055958067164 0.612164223515756 30.763722446922 -1.01035071566988 0.606675771473637 29.851942304157 -1.17686893778625 0.580243846620144 30.2912766998014 -1.09905709004392 0.582893322806325 30.0650539151023 -1.13964784314126 0.57870164365139 29.3706442966486 -1.25655401065864 0.610813509197056 29.5679864962377 -1.22476545280542 0.592818153561267 29.7057272683155 -1.20179571401311 0.584936033622275 28.8816427105544 -1.32519472919337 0.695781195470957 29.0757861391044 -1.30027409409073 0.654261833324734 29.2142048204845 -1.28045247734878 0.631058678601744 28.8725550718222 -1.32623952939231 0.698291248279232 28.8765655301503 -1.3257883217027 0.697057128774382 28.8790979586828 -1.32549492032217 0.696388610115505 28.8636687934679 -1.32720004158036 0.701494707818767 28.8670270103205 -1.32684939888841 0.700123599743314 28.8696043117389 -1.32656942780084 0.699212152495866 28.8043612183713 -1.33211868056499 0.73480034425291 28.8384549080435 -1.32961759235699 0.713509006183649 28.8210379970152 -1.33102641684749 0.723610368263552 28.7690552946818 -1.332935724945 0.766952029562387 28.7813794642941 -1.33308097616103 0.753080300459873 28.7919109335107 -1.33275311521034 0.744056950636266 28.7659487500336 -1.3326411649084 0.772183618542527 28.767353068699 -1.33280374416004 0.769605424578206 26.8550020360215 1.58376932021628 0.483875812276633 27.3421773030757 1.5245273559616 0.538191098054769 27.6543750920024 1.48583858577811 0.572987016441745 28.1045867939184 1.42863895754988 0.62318008896299 28.8086204042342 1.33447002710819 0.701808703847075 26.8939374475405 1.57986504568768 0.297532510967288 27.3975193113875 1.51811176713893 0.363480802407727 27.7181836705205 1.47819674284369 0.405459340908291 28.1778237064869 1.41978503706396 0.465645824736673 28.8901025329354 1.32515228882219 0.559066855376381 28.9417188240051 1.31803719004701 0.565849242997181 29.1408522950232 1.2901713468878 0.592034708498138 26.922583609634 1.5612017674117 0.154742651041713 27.4379599831622 1.49853205185038 0.229632745113127 27.7646093372305 1.45830856142586 0.277080119019113 28.2307786046148 1.39985267190038 0.344807118350272 28.9484527779108 1.30617103151343 0.449237335987291 29.0002385000242 1.29917765746252 0.456786298374242 29.1997458061538 1.27185435660456 0.485890053938863 29.4232557067414 1.24042046228538 0.518536890904325 29.596150492537 1.21540433627386 0.543822861655874 26.9521216655543 1.52579302531058 0.00248962726182031 27.4794166777892 1.46312120844316 0.086902385197155 27.8120254601805 1.42317124647304 0.140126245908661 28.284578207876 1.36550244070162 0.215756290334577 29.0072533759546 1.27404663351154 0.331590059872514 29.0591752091296 1.26726650075125 0.339926823247886 29.2589249164281 1.24083766272931 0.372021969334535 29.4821747872204 1.21055125067674 0.407937963263723 29.6544831461453 1.1865360955194 0.435693422644836 29.9083180216411 1.14994948386518 0.476641070759968 30.1028269413573 1.12077108636878 0.508070669918532 30.3125578019912 1.08800315692508 0.542015061599107 30.4429403084192 1.06685651241458 0.563148052841918 26.9608874180938 1.51175006685678 -0.0436711897822233 27.4916722303534 1.44928114657691 0.0436212304399438 27.8260087768146 1.40953872188257 0.0985824847554773 28.3003893612991 1.35227970959249 0.176577412360143 29.0244430276159 1.26174468388465 0.295797300716104 29.0763980876541 1.25504603367874 0.304366780992822 29.2761932823648 1.22895200011397 0.337344096114675 29.4993390780502 1.19908238990144 0.374221412892569 29.6714550538188 1.17542224007493 0.40270107613066 29.9248281735096 1.13941655990203 0.444687414147708 30.1188390104626 1.11073455169201 0.47689025180462 30.3278920131045 1.07855698810674 0.511646351403134 30.4577791999664 1.05780876105622 0.533272430300336 30.6877275163387 1.01945043061727 0.57162294046393 30.7733638029355 1.00457602361449 0.585927614756974 30.9721724039506 0.968656906167714 0.619186912507377 27.0093326979721 1.39920491690135 -0.306862328996915 27.5590181138189 1.33980199651294 -0.203273636451917 27.9025736212214 1.30240063112449 -0.138560634567839 28.3865240020859 1.24905593732224 -0.0473937657355183 29.1173676331214 1.16601683286601 0.0904693640652779 29.1694509259112 1.15993576238557 0.10031025039369 29.3692941729437 1.13632843053829 0.138095066926735 29.59166012287 1.10946050381198 0.180188998405517 29.7625750205511 1.08829204602732 0.212582764366184 30.0132316091371 1.05626328082994 0.260158404020691 30.2043997070114 1.03090098130394 0.296502719019409 30.4096496865517 1.00259751031719 0.33558782830584 30.5367874544077 0.984426180894379 0.359834083484515 30.7611413175279 0.950982660025069 0.402693240824693 30.8444564835879 0.938063352962057 0.418634676948432 31.0373783601287 0.906969782065067 0.455605566174088 31.2486877870959 0.870770495792596 0.496214852231132 31.3749082991414 0.847916499726025 0.520554786099571 31.496771247294 0.824861130723831 0.544132907006889 31.580713925501 0.808359116576676 0.56042827897556 31.8684955894936 0.747346750516585 0.616729047995061 32.0310126208515 0.709327133554116 0.648910405812566 32.1248541186381 0.685988946825409 0.667656032335419 32.2752793573891 0.646161051273385 0.698005493904403 27.0676499750091 1.15463748463903 -0.641932329760147 27.6392295665095 1.1045988779651 -0.518071312066145 27.9931615747955 1.07346227031764 -0.441413842309401 28.4874863498021 1.02955209706217 -0.334345654744657 29.2247635894829 0.962370560795718 -0.174460662351895 29.2768871244949 0.957506359792164 -0.163139790797237 29.4763724347251 0.938693495249098 -0.119785172476627 29.6973871561079 0.917416007102966 -0.0716958142547991 29.8665831734452 0.900749384851827 -0.034837693262714 30.1136522259522 0.875688157931057 0.0190604589836947 30.3012331907414 0.855969733392988 0.0600481915457685 30.5018130219396 0.834088173054093 0.103947789851382 30.6256328811436 0.820104282765117 0.131087907118913 30.8433383125763 0.794489439588715 0.178889640276269 30.9239264143337 0.784633892060775 0.196613399447489 31.1099960593477 0.760996884741929 0.237601393934623 31.312932279963 0.733611975956976 0.282436587392272 31.433710536154 0.716387799550145 0.309216308136371 31.549999813985 0.699056931626385 0.335091637211604 31.6299174258996 0.686677558074228 0.352936711192253 31.9027114013594 0.641065250971357 0.41435421953485 32.0559154801645 0.61274736784471 0.449295744242783 32.1440851634457 0.595397659745248 0.469594313104548 32.2849467804898 0.565839338361544 0.502372765841477 27.09326499046 0.984644154185898 -0.795487281432492 27.6741687568269 0.941748842671375 -0.662582020932977 28.032417009457 0.915189826725427 -0.580661867795628 28.5309217016815 0.87791206043484 -0.466669017147493 29.2704687208635 0.821285120817921 -0.297360843159358 29.3225742919571 0.817204303361277 -0.285414177120001 29.5217736927545 0.801445372614066 -0.239713450492456 29.7420694890693 0.783667373590315 -0.189115156530522 29.9104292788004 0.76977474300829 -0.150400381969666 30.1558313696279 0.74893695722449 -0.0938905449003673 30.3417926208614 0.732583634527499 -0.0509986476790658 30.5403014051616 0.714477046138745 -0.0051378971067231 30.6626673315116 0.702926742529172 0.0231742524093264 30.8774903250221 0.681809174167321 0.0729653673310399 30.9569056171604 0.67369675723685 0.0914025019868041 31.1400478338243 0.654266916457885 0.13399012756107 31.3394380388657 0.631798644749979 0.180495117806734 31.4579268367971 0.617687338527142 0.208232423370374 31.5718822198138 0.603502715720405 0.235004798230009 31.6501206031752 0.593378552820711 0.25345239966281 31.9167020692387 0.55612404210337 0.316843224899732 32.0660739971984 0.533026912388165 0.352838119516646 32.1519191988228 0.518885732536386 0.373725601587635 32.288876190759 0.494808433039143 0.407419384936916 27.1266813947559 0.636087458960686 -1.00176406803258 27.7194836571041 0.608288313562525 -0.857008521934657 28.0831470263527 0.591184726435076 -0.768255380077123 28.5867732699129 0.567320891060812 -0.645347596154409 29.3288047835218 0.531392264280821 -0.46406128971472 29.3808570070874 0.528818058439765 -0.451326024844204 29.5795762896653 0.51889586294139 -0.402677074654189 29.7988315057482 0.507737371697274 -0.348940926052703 29.9660352394549 0.499042652970248 -0.307914598971691 30.2091920788545 0.486040921273788 -0.248169266937042 30.393008820201 0.475868940465304 -0.20293098383979 30.5888059011876 0.464636840035098 -0.154665518103229 30.7092823575465 0.457487500336234 -0.124922363570919 30.9203847939233 0.444445479393886 -0.0727134763522529 30.9982940781297 0.439444694815779 -0.0534129701380502 31.1776931618804 0.427486804754884 -0.00889679563947394 31.3725748632329 0.413689703659145 0.0396096080934103 31.4881653203907 0.405039183091152 0.0684888237335184 31.5991749744871 0.39635389370056 0.096326758691843 31.6752989847511 0.390160503290517 0.115487689267023 31.9340907205572 0.367405092072191 0.181200073188903 32.0786803312773 0.35332004934827 0.218424071571102 32.1616322655711 0.344703597279583 0.239995272107167 32.2937410891872 0.330043450276513 0.274746377164837 27.1402287043108 0.380209811215361 -1.08733636945521 27.7377697266242 0.363591835756921 -0.937776499913556 28.1035600485717 0.35339405102337 -0.846273665496039 28.6091585446142 0.339199682050099 -0.719803204599106 29.3520499616758 0.317903938397965 -0.533779881384173 29.4040714274595 0.316381552757034 -0.520734979846253 29.6025635298063 0.310517736185906 -0.470931111636114 29.8213660154829 0.303931063658494 -0.415970623214327 29.9880817515993 0.298804248060455 -0.374045777063256 30.2303078942939 0.291146467511248 -0.313047997803081 30.413246638746 0.28516221106881 -0.266905525604053 30.607942579611 0.278560795250378 -0.217717256393936 30.7276560593087 0.274362260916855 -0.187426945285397 30.9372637633072 0.266709317345963 -0.134297244379672 31.0145703745207 0.263776854554825 -0.11466910282595 31.1924763724654 0.256768737042882 -0.0694235018714625 31.3855674278801 0.248689068103442 -0.0201639507833492 31.5000105411223 0.243626383870735 0.00914305388714741 31.6098567713432 0.238545536749062 0.0373788053342299 31.6851472343379 0.234923675448588 0.0568052621892186 31.9408778596876 0.221624262398532 0.123376966986034 32.083595004585 0.213397603293693 0.161052537402223 32.1654163780469 0.20836672135316 0.182873782636343 32.2956343111881 0.199809793285703 0.21800976048498 27.1473675014467 1.14250765778994e-005 -1.13288573746511 27.747385992672 2.41940668405254e-005 -0.980797157970936 28.1142814356397 3.36146832709292e-005 -0.887851888588512 28.6208955182336 4.74340503249213e-005 -0.759518351963054 29.364206911246 6.51258213772116e-005 -0.571029504041368 29.4162101351025 6.60485678256269e-005 -0.557823966472131 29.6145753046783 6.90519315530273e-005 -0.507421568669494 29.8331324292732 7.13401357575275e-005 -0.451827715228732 29.9995868074862 7.22941299840692e-005 -0.40943885647003 30.2413181520115 7.23321763128357e-005 -0.347795515477466 30.4237924963888 7.11918974509662e-005 -0.301187949904211 30.6179080024721 6.87487860079354e-005 -0.251525923221949 30.7372202451595 6.65592461167407e-005 -0.220955177355672 30.9460435842056 6.1338470583157e-005 -0.167354392244171 31.0230344650225 5.89321360021689e-005 -0.147558914082094 31.2001593317751 5.23194168163412e-005 -0.10194134203326 31.39231529532 4.34952506486686e-005 -0.0522986371298075 31.5061600945017 3.76544116293481e-005 -0.0227744593318673 31.6154002181695 3.17812695114173e-005 0.00566292079448253 31.6902567682172 2.76813901607251e-005 0.0252237670449719 31.9443960647684 1.41402266056965e-005 0.092229227810316 32.0861413069755 7.59473760593341e-006 0.130131918337206 32.167376362505 4.47727452297018e-006 0.15207864349456 32.2966144471682 9.14926639215207e-007 0.187407320439445 27.142867093005 -0.30288171956791 -1.10413393928057 27.7413253194064 -0.289621861786117 -0.953639173825192 28.1075253278222 -0.281485679351139 -0.861602661412804 28.6135010551234 -0.270164387311532 -0.734442419759114 29.3565503218562 -0.253195189808028 -0.547505322074169 29.4085652071487 -0.251983204794155 -0.534400842971459 29.6070109700654 -0.247316565089246 -0.484374937692398 29.8257233130952 -0.242077739290483 -0.429179396333695 29.9923427889773 -0.238002339862158 -0.387082281607584 30.2343864078552 -0.231918813288098 -0.325844732132548 30.4171536545818 -0.227167911184273 -0.279529439501514 30.6116350897916 -0.221930172596522 -0.230165055954607 30.7312002132445 -0.218600601961519 -0.199770457722902 30.9405177659871 -0.212534749629549 -0.146465500977361 31.0177075408235 -0.210211470305335 -0.12677508274573 31.1953243946208 -0.204661398977182 -0.0813910000875359 31.3880691785172 -0.198265903719071 -0.0319887288007664 31.5022906642455 -0.194259576999073 -0.00260079185807343 31.611912332854 -0.190239245024148 0.0257101262055652 31.6870420045211 -0.187373406464064 0.045186698764823 31.9421827706585 -0.176848583468866 0.111920254206461 32.0845395383192 -0.170335726512315 0.149680639779573 32.1661434673814 -0.16635155521405 0.171548767416451 32.295997946441 -0.159572211243699 0.206756779419295 27.1271403046945 -0.629354642524258 -1.00464451208015 27.720103865994 -0.601828017528744 -0.859726097985791 28.08383990648 -0.584889921016021 -0.770879543272955 28.5875339036245 -0.561256702528704 -0.647850488329493 29.3295958878961 -0.525683453216196 -0.466402455991964 29.3816471534237 -0.523135473748113 -0.453656598154894 29.580359040402 -0.513315564128662 -0.40496811097723 29.7995992072579 -0.502274460293183 -0.351190001292767 29.9667865914614 -0.49367300519949 -0.310132846357026 30.2099120987822 -0.480813750029591 -0.250344492062739 30.393699183592 -0.470755784982121 -0.205075109258523 30.5894589877158 -0.459652174454179 -0.156777865327551 30.7099095753968 -0.452586015426284 -0.127015848836066 30.920961261413 -0.43969845015483 -0.0747751823694908 30.9988500608454 -0.434757790090009 -0.0554633569254795 31.1781983487085 -0.422945596543383 -0.0109219576159409 31.3730190567411 -0.409319368406525 0.0376105299965368 31.4885703962725 -0.400776816893138 0.0665045808432304 31.5995403585384 -0.392200123292827 0.0943563255950405 31.6756359162738 -0.386084103694773 0.113526481732415 31.9343230670167 -0.363610699343567 0.179268772194014 32.0788486359952 -0.349697146113432 0.216508521457273 32.1617618803233 -0.341184050558685 0.238088455631569 32.2938059579752 -0.326696646557813 0.272853022583412 27.1007538585194 -0.923089512474968 -0.841126740582657 27.6843501309013 -0.882819612533607 -0.705568454880335 28.0438329530151 -0.857917346788322 -0.622112344361957 28.5435175563152 -0.823008787085455 -0.506107992695468 29.2836672906117 -0.770089359046261 -0.334081877811578 29.3357637755232 -0.766281192585009 -0.321955582688904 29.5348658374507 -0.751582250338377 -0.275582471563797 29.7549382318412 -0.735013507343699 -0.22426703314256 29.923045128584 -0.722075663306896 -0.185022899027654 30.1679506931202 -0.702685741143048 -0.127770483921934 30.3534342514235 -0.687481504067729 -0.0843387874294524 30.5513361341163 -0.670659735242207 -0.0379236054783585 30.673277826554 -0.659935585303265 -0.00928089784538889 30.8872630322089 -0.640340896321408 0.0410698633646619 30.9663384510918 -0.632817534190502 0.0597072171433009 31.1486343778015 -0.614806978072197 0.102742847283428 31.3470027686638 -0.593993172827388 0.149713983263516 31.4648334621841 -0.580926893859376 0.177717857641266 31.5781191162792 -0.567796457936068 0.204739412556699 31.6558762895699 -0.558426630878763 0.223354075375762 31.9206817030048 -0.523957986734236 0.287290147689251 32.0689610423103 -0.502593242271107 0.323574786672018 32.1541444943755 -0.489513767312087 0.344623812776656 32.2899914435692 -0.467244991013042 0.378567986277425 27.0676501624421 -1.15464606920305 -0.641934269053216 27.6392297331248 -1.10459603898519 -0.51807306805299 27.9931617002187 -1.07344805774245 -0.441415488626118 28.4874864002596 -1.029518453594 -0.334347152639563 29.2247635554765 -0.962307284272147 -0.174461948657958 29.2768870886201 -0.957441284517683 -0.163141062564188 29.4763723977415 -0.938622124626078 -0.119786389081985 29.6973871284112 -0.917338877720116 -0.0716969706072948 29.8665831595952 -0.900668834374357 -0.0348388040744952 30.113652241228 -0.875604388346107 0.0190594138063623 30.3012332336831 -0.855885133209678 0.0600471955463884 30.5018130978828 -0.834004461232982 0.103946845846813 30.6256329782678 -0.820022147437302 0.131086994919436 30.8433384461826 -0.794412227698654 0.178888783481914 30.9239265605347 -0.784559268190246 0.196612563001302 31.1099962309206 -0.760929999773212 0.237600604149782 31.3129324707128 -0.733556289120066 0.282435848029659 31.4337107330986 -0.716339812898254 0.309215598595409 31.550000012558 -0.69901682086636 0.335090956286657 31.6299176228174 -0.686642995222213 0.35293604989456 31.9027115722975 -0.641049069034626 0.414353625181786 32.0559156197952 -0.612739886635574 0.449295187619258 32.14408527843 -0.595394150234093 0.469593778306825 32.2849468443803 -0.565839877373769 0.502372266183187 27.0205284984519 -1.36323534858658 -0.369636875115264 27.5744894348106 -1.30505786951228 -0.262202542555745 27.9200972709315 -1.2685099828212 -0.195207903124671 28.4061342658776 -1.21649729902552 -0.100983844978606 29.1383553294829 -1.13581243656472 0.0411543108168262 29.1904555843851 -1.12991757067161 0.0512843724553326 29.3902636299306 -1.1070509632058 0.0901597511184334 29.6124031535557 -1.08106023706454 0.133431752512863 29.7830096821604 -1.06060798986426 0.166705690250752 30.0330022847115 -1.02970354756085 0.215532401120764 30.2234942022156 -1.00526485529618 0.252799129114855 30.427853989137 -0.978024940674506 0.292844052851625 30.5543547365483 -0.960553712283093 0.317668991761613 30.7774239645503 -0.928431656696131 0.361519761274617 30.8602096747206 -0.916033596334888 0.377819833257107 31.051796012304 -0.88621727300743 0.415601208001707 31.2614650912094 -0.851541523512297 0.457066549667128 31.3866153128442 -0.829666890848382 0.481902438131912 31.5073791856488 -0.80761140807074 0.505948753828768 31.5905264682096 -0.7918316279979 0.522560673163907 31.8753353843152 -0.733529175716033 0.579910925435225 32.0359974700125 -0.697223630861483 0.612661410913918 32.1287066527717 -0.674945198876314 0.631728255078289 32.2772184775545 -0.636936701400105 0.662581712503822 26.9766516187215 -1.48196785036889 -0.127812305812708 27.5136583718772 -1.42010300349581 -0.0352844940982651 27.8510557458923 -1.38087892788777 0.0228244311281007 28.3286483745728 -1.32455646184628 0.105089804469916 29.0550633167066 -1.23597175920062 0.230394072732265 29.1070702121283 -1.22944049186376 0.239380327083069 29.3069180840557 -1.20402852977431 0.273935823472314 29.5298472802354 -1.17499752196333 0.312529783266405 29.7015973605029 -1.15204437572964 0.342300426884926 29.9541161200779 -1.11718439046158 0.386134870581711 30.147217948582 -1.08947255584482 0.419710737956211 30.3550433064981 -1.05844052151931 0.455905528038241 30.4840376863471 -1.03846114409754 0.478404194958966 30.7121600062331 -1.00158224570101 0.518259545024725 30.7970358309979 -0.987300551247857 0.533111603426431 30.9939098986269 -0.952853188270338 0.567614416899449 31.210098530945 -0.912627158168906 0.605607033400732 31.3395149927154 -0.887170208059831 0.628426088410555 31.4646686861022 -0.861446018055973 0.650564955541952 31.5509979560775 -0.843009334719514 0.665885233736329 26.9711263608056 -1.49308956454569 -0.0981566402943814 27.5059602596085 -1.43096891367588 -0.00747176904637138 27.8422915874018 -1.39153527280707 0.0495307390280336 28.318769331496 -1.33484545991129 0.130297093959377 29.0443737114286 -1.24552071499289 0.253470025556694 29.0963635814827 -1.23892697129638 0.262310488135905 29.2961971876895 -1.21326165764331 0.296314169684751 29.5192065320405 -1.1839214670522 0.334308360949254 29.691087711851 -1.16070928238849 0.363628283295222 29.9439093383227 -1.12543208208049 0.406818005647846 30.137331648608 -1.09736897405708 0.439915289267055 30.3455884874856 -1.06592411248534 0.475608996434533 30.474896056666 -1.04566864906301 0.497803949681069 30.703657852176 -1.00826037193807 0.537135895995259 30.7887996687604 -0.99376718824052 0.551797687755946 30.9863497199546 -0.958795933193895 0.585868514605346 31.203376755379 -0.917935632691369 0.623401668937499 31.3333442940209 -0.892066179772212 0.645952938185599 26.9401168961805 -1.54230660469925 0.0649809985051805 27.4625976191305 -1.47949758911545 0.145488918640992 27.792810071553 -1.43934846925471 0.196349920642993 28.2628105016458 -1.38123544231536 0.268754778263017 28.9835202101939 -1.28869266061746 0.379951239482097 29.0353912897382 -1.28181339745382 0.387968399521936 29.2350593498325 -1.25497405526607 0.418850906200884 29.4584321078211 -1.22417070827913 0.453443403997417 29.6309905726006 -1.19971118462883 0.480200354322882 29.8854416302034 -1.16239108673051 0.519713599341055 30.0806235795434 -1.13258099742107 0.550073550374447 26.9074159241171 -1.57286505778328 0.230945642608467 27.4165763405874 -1.51056245443607 0.301063172688307 27.7400822112164 -1.47042591290578 0.345597125980557 28.2028365712299 -1.41188416407116 0.409314248669256 28.9177226823965 -1.31753603312715 0.507905958992766 28.9694234430067 -1.31046695906424 0.515049126730646 29.1687504657806 -1.28281386759222 0.542608979906973 29.392336729713 -1.25093453236559 0.573562890744597 26.8862547179811 -1.58249069190143 0.335009703299575 27.3866336444556 -1.52111083108953 0.398613259794354 27.7056579274168 -1.48135793562345 0.439150372313581 28.1634888023598 -1.42306995049076 0.497339689120191 28.8742257165276 -1.32835340800811 0.587823226983479 28.9257899808609 -1.32121809315623 0.594400062173603 29.1247986737671 -1.29325478455849 0.619801738468866 0 0.84752031 0.182258826852882 0.84752031 0.296170594396919 0.84752031 0.41008236 0.84752031 0 0.15247929 0 0.79539223232839 0 0.748476964777102 0 0.706253223032634 0 0.664029482467932 0 0.621805741683094 0 0.57958200096946 0 0.537358259102193 0 0.495134515626252 0 0.45291077243678 0 0.410687031031902 0 0.368463291332333 0 0.326239551306692 0 0.284015808894562 0 0.241792065245641 0 0.199568323310342 0 0.176023807414811 0.41008734 0.15247929 0.22782629955653 0.15247929 0.113913149911665 0.15247929 0.412346093699899 0.161030460753262 0.41013953769451 0.155820741993662 0.410949161496455 0.158324316911322 0.41674308 0.16673095 0.414084856911688 0.163585365033647 0.415357014705838 0.165174298053913 0.418581908921481 0.16842585654686 0.417719140345989 0.167696735262885 0.417217993317778 0.167220124718014 0.419693477235591 0.169203422685851 0.419120481024236 0.168824697346605 0.418827837821174 0.168613212412849 0.42090498 0.16985645 0.420353852576495 0.169583662284134 0.420019807353777 0.169398718949887 0.484640253200537 0.194861846390272 0.452505755190907 0.183613428916938 0.435784413792402 0.176722185155952 0.53782595 0.20914955 0.512146077210339 0.202826351875221 0.497776844974663 0.198834588293816 0.569295382630129 0.215719216039619 0.55480683828003 0.212833467425886 0.546160786900052 0.211002088207516 0.726688462077035 0.237910196485819 0.632344767228151 0.226235622207897 0.677363647927261 0.232277984530206 0.897066359789266 0.252115965299792 0.797826755274117 0.244667719093393 0.846017768675159 0.248530804283372 1.00922544 0.25852666 0.959605710894232 0.25591231667288 0.928406822564351 0.254093745407224 1.18410863 0.25852666 1.10638276754092 0.25852666 1.05780410466889 0.25852666 1.18410863 0.49999985 1.18410863 0.339017782681665 1.18410863 0.419508888316875 1.18410863 0.4597544433568 1.18410863 0.74147285 1.18410863 0.660981895742259 1.18410863 0.580490948435048 1.18410863 0.540245474855739 1.00922414 0.74147285 1.08695057803366 0.74147285 1.13552960359403 0.74147285 0.905948157513261 0.747319411003955 0.95203546500172 0.744518997885164 0.980704878162004 0.742936532604807 0.79063868 0.75601331 0.842176603969299 0.751792799347127 0.874155042927462 0.74945567664089 0.729506666565393 0.76184333863788 0.76233820872434 0.758592501933068 0.745589274060614 0.760213082641846 0.570422084485564 0.784099263837749 0.650382694858395 0.771208080336899 0.608221394102937 0.777441636060081 0.491680637984723 0.802993637520819 0.52287170774061 0.794487884925246 0.545537754821333 0.789205943949437 0.42089936 0.83014305 0.447904087284345 0.818186431000241 0.468024758720721 0.810646947799361 0.419704598752334 0.830807056488716 0.420221322643043 0.830492586264612 0.4205553324124 0.830310964141274 0.4186083787104 0.831593543767701 0.419018845616406 0.831280116781812 0.4193363058461 0.831053248791008 0.412383318385601 0.83897467430126 0.415748705235118 0.834330082710806 0.413958815677285 0.836563509032468 0.40993166 0.84570494 0.410549031891745 0.842872955445004 0.411329600414023 0.840970355821339 0.409954411789072 0.846750900863468 0.409923153845364 0.846237825641321 0.113913149911665 0.167220124718014 0.182258826852882 0.167220124718014 0.22782629955653 0.167220124718014 0.296170594396919 0.167220124718014 0.40993166 0.167220124718014 0.113913149911665 0.194861846390272 0.182258826852882 0.194861846390272 0.22782629955653 0.194861846390272 0.296170594396919 0.194861846390272 0.40993166 0.194861846390272 0.418581908921481 0.194861846390272 0.452505755190907 0.194861846390272 0.113913149911665 0.215719216039619 0.182258826852882 0.215719216039619 0.22782629955653 0.215719216039619 0.296170594396919 0.215719216039619 0.40993166 0.215719216039619 0.418581908921481 0.215719216039619 0.452505755190907 0.215719216039619 0.491680637984723 0.215719216039619 0.52287170774061 0.215719216039619 0.113913149911665 0.237910196485819 0.182258826852882 0.237910196485819 0.22782629955653 0.237910196485819 0.296170594396919 0.237910196485819 0.40993166 0.237910196485819 0.418581908921481 0.237910196485819 0.452505755190907 0.237910196485819 0.491680637984723 0.237910196485819 0.52287170774061 0.237910196485819 0.570422084485564 0.237910196485819 0.608221394102937 0.237910196485819 0.650382694858395 0.237910196485819 0.677363647927261 0.237910196485819 0.113913149911665 0.244667719093393 0.182258826852882 0.244667719093393 0.22782629955653 0.244667719093393 0.296170594396919 0.244667719093393 0.40993166 0.244667719093393 0.418581908921481 0.244667719093393 0.452505755190907 0.244667719093393 0.491680637984723 0.244667719093393 0.52287170774061 0.244667719093393 0.570422084485564 0.244667719093393 0.608221394102937 0.244667719093393 0.650382694858395 0.244667719093393 0.677363647927261 0.244667719093393 0.726688462077035 0.244667719093393 0.745589274060614 0.244667719093393 0.79063868 0.244667719093393 0.113913149911665 0.284015808894562 0.182258826852882 0.284015808894562 0.22782629955653 0.284015808894562 0.296170594396919 0.284015808894562 0.40993166 0.284015808894562 0.418581908921481 0.284015808894562 0.452505755190907 0.284015808894562 0.491680637984723 0.284015808894562 0.52287170774061 0.284015808894562 0.570422084485564 0.284015808894562 0.608221394102937 0.284015808894562 0.650382694858395 0.284015808894562 0.677363647927261 0.284015808894562 0.726688462077035 0.284015808894562 0.745589274060614 0.284015808894562 0.79063868 0.284015808894562 0.842176603969299 0.284015808894562 0.874155042927462 0.284015808894562 0.905948157513261 0.284015808894562 0.928406822564351 0.284015808894562 1.00922544 0.284015808894562 1.05780410466889 0.284015808894562 1.08695057803366 0.284015808894562 1.13552960359403 0.284015808894562 0.113913149911665 0.339017782681665 0.182258826852882 0.339017782681665 0.22782629955653 0.339017782681665 0.296170594396919 0.339017782681665 0.40993166 0.339017782681665 0.418581908921481 0.339017782681665 0.452505755190907 0.339017782681665 0.491680637984723 0.339017782681665 0.52287170774061 0.339017782681665 0.570422084485564 0.339017782681665 0.608221394102937 0.339017782681665 0.650382694858395 0.339017782681665 0.677363647927261 0.339017782681665 0.726688462077035 0.339017782681665 0.745589274060614 0.339017782681665 0.79063868 0.339017782681665 0.842176603969299 0.339017782681665 0.874155042927462 0.339017782681665 0.905948157513261 0.339017782681665 0.928406822564351 0.339017782681665 1.00922544 0.339017782681665 1.05780410466889 0.339017782681665 1.08695057803366 0.339017782681665 1.13552960359403 0.339017782681665 0.113913149911665 0.368463291332333 0.182258826852882 0.368463291332333 0.22782629955653 0.368463291332333 0.296170594396919 0.368463291332333 0.40993166 0.368463291332333 0.418581908921481 0.368463291332333 0.452505755190907 0.368463291332333 0.491680637984723 0.368463291332333 0.52287170774061 0.368463291332333 0.570422084485564 0.368463291332333 0.608221394102937 0.368463291332333 0.650382694858395 0.368463291332333 0.677363647927261 0.368463291332333 0.726688462077035 0.368463291332333 0.745589274060614 0.368463291332333 0.79063868 0.368463291332333 0.842176603969299 0.368463291332333 0.874155042927462 0.368463291332333 0.905948157513261 0.368463291332333 0.928406822564351 0.368463291332333 1.00922544 0.368463291332333 1.05780410466889 0.368463291332333 1.08695057803366 0.368463291332333 1.13552960359403 0.368463291332333 0.113913149911665 0.419508888316875 0.182258826852882 0.419508888316875 0.22782629955653 0.419508888316875 0.296170594396919 0.419508888316875 0.40993166 0.419508888316875 0.418581908921481 0.419508888316875 0.452505755190907 0.419508888316875 0.491680637984723 0.419508888316875 0.52287170774061 0.419508888316875 0.570422084485564 0.419508888316875 0.608221394102937 0.419508888316875 0.650382694858395 0.419508888316875 0.677363647927261 0.419508888316875 0.726688462077035 0.419508888316875 0.745589274060614 0.419508888316875 0.79063868 0.419508888316875 0.842176603969299 0.419508888316875 0.874155042927462 0.419508888316875 0.905948157513261 0.419508888316875 0.928406822564351 0.419508888316875 1.00922544 0.419508888316875 1.05780410466889 0.419508888316875 1.08695057803366 0.419508888316875 1.13552960359403 0.419508888316875 0.113913149911665 0.45291077243678 0.182258826852882 0.45291077243678 0.22782629955653 0.45291077243678 0.296170594396919 0.45291077243678 0.40993166 0.45291077243678 0.418581908921481 0.45291077243678 0.452505755190907 0.45291077243678 0.491680637984723 0.45291077243678 0.52287170774061 0.45291077243678 0.570422084485564 0.45291077243678 0.608221394102937 0.45291077243678 0.650382694858395 0.45291077243678 0.677363647927261 0.45291077243678 0.726688462077035 0.45291077243678 0.745589274060614 0.45291077243678 0.79063868 0.45291077243678 0.842176603969299 0.45291077243678 0.874155042927462 0.45291077243678 0.905948157513261 0.45291077243678 0.928406822564351 0.45291077243678 1.00922544 0.45291077243678 1.05780410466889 0.45291077243678 1.08695057803366 0.45291077243678 1.13552960359403 0.45291077243678 0.113913149911665 0.49999985 0.182258826852882 0.49999985 0.22782629955653 0.49999985 0.296170594396919 0.49999985 0.40993166 0.49999985 0.418581908921481 0.49999985 0.452505755190907 0.49999985 0.491680637984723 0.49999985 0.52287170774061 0.49999985 0.570422084485564 0.49999985 0.608221394102937 0.49999985 0.650382694858395 0.49999985 0.677363647927261 0.49999985 0.726688462077035 0.49999985 0.745589274060614 0.49999985 0.79063868 0.49999985 0.842176603969299 0.49999985 0.874155042927462 0.49999985 0.905948157513261 0.49999985 0.928406822564351 0.49999985 1.00922544 0.49999985 1.05780410466889 0.49999985 1.08695057803366 0.49999985 1.13552960359403 0.49999985 0.113913149911665 0.537358259102193 0.182258826852882 0.537358259102193 0.22782629955653 0.537358259102193 0.296170594396919 0.537358259102193 0.40993166 0.537358259102193 0.418581908921481 0.537358259102193 0.452505755190907 0.537358259102193 0.491680637984723 0.537358259102193 0.52287170774061 0.537358259102193 0.570422084485564 0.537358259102193 0.608221394102937 0.537358259102193 0.650382694858395 0.537358259102193 0.677363647927261 0.537358259102193 0.726688462077035 0.537358259102193 0.745589274060614 0.537358259102193 0.79063868 0.537358259102193 0.842176603969299 0.537358259102193 0.874155042927462 0.537358259102193 0.905948157513261 0.537358259102193 0.928406822564351 0.537358259102193 1.00922544 0.537358259102193 1.05780410466889 0.537358259102193 1.08695057803366 0.537358259102193 1.13552960359403 0.537358259102193 0.113913149911665 0.57958200096946 0.182258826852882 0.57958200096946 0.22782629955653 0.57958200096946 0.296170594396919 0.57958200096946 0.40993166 0.57958200096946 0.418581908921481 0.57958200096946 0.452505755190907 0.57958200096946 0.491680637984723 0.57958200096946 0.52287170774061 0.57958200096946 0.570422084485564 0.57958200096946 0.608221394102937 0.57958200096946 0.650382694858395 0.57958200096946 0.677363647927261 0.57958200096946 0.726688462077035 0.57958200096946 0.745589274060614 0.57958200096946 0.79063868 0.57958200096946 0.842176603969299 0.57958200096946 0.874155042927462 0.57958200096946 0.905948157513261 0.57958200096946 0.928406822564351 0.57958200096946 1.00922544 0.57958200096946 1.05780410466889 0.57958200096946 1.08695057803366 0.57958200096946 1.13552960359403 0.57958200096946 0.113913149911665 0.621805741683094 0.182258826852882 0.621805741683094 0.22782629955653 0.621805741683094 0.296170594396919 0.621805741683094 0.40993166 0.621805741683094 0.418581908921481 0.621805741683094 0.452505755190907 0.621805741683094 0.491680637984723 0.621805741683094 0.52287170774061 0.621805741683094 0.570422084485564 0.621805741683094 0.608221394102937 0.621805741683094 0.650382694858395 0.621805741683094 0.677363647927261 0.621805741683094 0.726688462077035 0.621805741683094 0.745589274060614 0.621805741683094 0.79063868 0.621805741683094 0.842176603969299 0.621805741683094 0.874155042927462 0.621805741683094 0.905948157513261 0.621805741683094 0.928406822564351 0.621805741683094 1.00922544 0.621805741683094 1.05780410466889 0.621805741683094 1.08695057803366 0.621805741683094 1.13552960359403 0.621805741683094 0.113913149911665 0.660981895742259 0.182258826852882 0.660981895742259 0.22782629955653 0.660981895742259 0.296170594396919 0.660981895742259 0.40993166 0.660981895742259 0.418581908921481 0.660981895742259 0.452505755190907 0.660981895742259 0.491680637984723 0.660981895742259 0.52287170774061 0.660981895742259 0.570422084485564 0.660981895742259 0.608221394102937 0.660981895742259 0.650382694858395 0.660981895742259 0.677363647927261 0.660981895742259 0.726688462077035 0.660981895742259 0.745589274060614 0.660981895742259 0.79063868 0.660981895742259 0.842176603969299 0.660981895742259 0.874155042927462 0.660981895742259 0.905948157513261 0.660981895742259 0.928406822564351 0.660981895742259 1.00922544 0.660981895742259 1.05780410466889 0.660981895742259 1.08695057803366 0.660981895742259 1.13552960359403 0.660981895742259 0.113913149911665 0.706253223032634 0.182258826852882 0.706253223032634 0.22782629955653 0.706253223032634 0.296170594396919 0.706253223032634 0.40993166 0.706253223032634 0.418581908921481 0.706253223032634 0.452505755190907 0.706253223032634 0.491680637984723 0.706253223032634 0.52287170774061 0.706253223032634 0.570422084485564 0.706253223032634 0.608221394102937 0.706253223032634 0.650382694858395 0.706253223032634 0.677363647927261 0.706253223032634 0.726688462077035 0.706253223032634 0.745589274060614 0.706253223032634 0.79063868 0.706253223032634 0.842176603969299 0.706253223032634 0.874155042927462 0.706253223032634 0.905948157513261 0.706253223032634 0.928406822564351 0.706253223032634 1.00922544 0.706253223032634 1.05780410466889 0.706253223032634 1.08695057803366 0.706253223032634 1.13552960359403 0.706253223032634 0.113913149911665 0.742936532604807 0.182258826852882 0.742936532604807 0.22782629955653 0.742936532604807 0.296170594396919 0.742936532604807 0.40993166 0.742936532604807 0.418581908921481 0.742936532604807 0.452505755190907 0.742936532604807 0.491680637984723 0.742936532604807 0.52287170774061 0.742936532604807 0.570422084485564 0.742936532604807 0.608221394102937 0.742936532604807 0.650382694858395 0.742936532604807 0.677363647927261 0.742936532604807 0.726688462077035 0.742936532604807 0.745589274060614 0.742936532604807 0.79063868 0.742936532604807 0.842176603969299 0.742936532604807 0.874155042927462 0.742936532604807 0.905948157513261 0.742936532604807 0.928406822564351 0.742936532604807 0.113913149911665 0.747319411003955 0.182258826852882 0.747319411003955 0.22782629955653 0.747319411003955 0.296170594396919 0.747319411003955 0.40993166 0.747319411003955 0.418581908921481 0.747319411003955 0.452505755190907 0.747319411003955 0.491680637984723 0.747319411003955 0.52287170774061 0.747319411003955 0.570422084485564 0.747319411003955 0.608221394102937 0.747319411003955 0.650382694858395 0.747319411003955 0.677363647927261 0.747319411003955 0.726688462077035 0.747319411003955 0.745589274060614 0.747319411003955 0.79063868 0.747319411003955 0.842176603969299 0.747319411003955 0.874155042927462 0.747319411003955 0.113913149911665 0.771208080336899 0.182258826852882 0.771208080336899 0.22782629955653 0.771208080336899 0.296170594396919 0.771208080336899 0.40993166 0.771208080336899 0.418581908921481 0.771208080336899 0.452505755190907 0.771208080336899 0.491680637984723 0.771208080336899 0.52287170774061 0.771208080336899 0.570422084485564 0.771208080336899 0.608221394102937 0.771208080336899 0.113913149911665 0.79539223232839 0.182258826852882 0.79539223232839 0.22782629955653 0.79539223232839 0.296170594396919 0.79539223232839 0.40993166 0.79539223232839 0.418581908921481 0.79539223232839 0.452505755190907 0.79539223232839 0.491680637984723 0.79539223232839 0.113913149911665 0.810646947799361 0.182258826852882 0.810646947799361 0.22782629955653 0.810646947799361 0.296170594396919 0.810646947799361 0.40993166 0.810646947799361 0.418581908921481 0.810646947799361 0.452505755190907 0.810646947799361 21 5 104 104 5 24 104 105 110 105 104 24 109 110 117 110 109 104 105 106 110 104 109 21 24 23 105 21 109 20 20 116 19 20 109 116 19 125 138 125 19 116 116 117 125 126 138 125 126 117 118 138 139 155 139 138 126 126 127 139 126 125 117 109 117 116 19 138 18 110 111 117 23 106 105 106 23 107 111 106 107 106 111 110 107 108 113 26 108 107 112 113 120 113 112 107 108 34 113 107 112 111 107 23 22 111 112 119 118 119 127 119 118 111 127 140 139 128 140 127 127 119 128 118 127 126 128 120 129 120 128 119 141 129 142 129 141 128 120 121 129 128 141 140 119 112 120 140 141 157 113 114 120 111 118 117 139 140 156 17 18 154 16 17 178 154 155 179 154 138 155 16 178 202 179 178 154 155 156 179 154 178 17 138 154 18 203 178 179 14 15 226 202 15 16 250 13 14 226 15 202 250 226 227 203 226 202 250 274 13 251 274 250 227 226 203 226 250 14 202 178 203 13 274 12 179 180 203 204 203 180 180 156 157 204 180 181 204 227 203 181 157 158 157 156 140 181 205 204 182 205 181 205 206 229 157 181 180 155 139 156 204 205 229 227 228 251 228 227 204 251 275 274 252 275 251 251 228 252 227 251 250 252 229 253 229 252 228 277 276 253 253 276 252 253 229 230 252 276 275 228 204 229 275 276 300 157 142 158 180 179 156 141 142 157 274 275 299 129 130 142 108 27 25 108 26 27 30 108 29 33 108 28 28 108 30 29 108 25 31 108 32 108 31 36 36 35 108 121 120 114 114 115 121 129 121 130 122 130 121 113 34 39 108 35 34 32 108 33 130 143 142 37 114 113 113 38 37 42 115 114 41 115 42 115 41 40 42 114 37 121 115 122 122 40 123 40 122 115 131 123 132 123 131 122 40 45 123 131 130 122 124 123 44 132 124 133 132 123 124 44 43 124 44 123 45 131 132 145 113 39 38 130 131 144 182 158 159 158 142 143 159 158 143 158 182 181 159 144 160 144 159 143 183 160 184 160 183 159 144 145 160 159 183 182 130 144 143 182 183 207 206 207 230 206 182 207 230 254 253 231 254 230 230 207 231 206 230 229 208 231 207 208 184 185 231 255 254 232 255 231 231 208 232 208 207 184 183 184 207 278 253 254 160 161 184 182 206 205 185 184 161 161 145 146 185 161 162 209 208 185 133 146 145 146 133 134 162 186 185 186 162 163 146 147 162 146 162 161 144 131 145 185 186 210 232 209 233 232 208 209 256 233 257 233 256 232 209 210 233 232 256 255 234 257 233 234 210 211 281 256 257 258 257 234 234 235 258 234 233 210 209 185 210 280 255 256 186 187 210 161 160 145 133 145 132 279 254 255 124 43 133 26 107 22 282 257 258 11 12 298 10 11 322 298 299 323 298 274 299 10 322 346 323 322 298 299 300 323 298 322 11 274 298 12 347 322 323 370 9 10 370 346 347 394 8 9 9 370 394 370 10 346 371 394 370 371 347 348 394 395 419 395 394 371 371 372 395 371 370 347 346 322 347 8 394 418 323 324 347 324 300 301 300 299 275 301 300 277 300 324 323 301 278 302 278 301 277 325 302 326 302 325 301 278 279 302 301 325 324 277 253 278 324 325 349 348 349 372 348 324 349 372 396 395 373 396 372 372 349 373 348 372 371 350 373 349 350 326 327 396 373 397 374 373 350 350 351 374 350 349 326 325 326 349 398 373 374 302 303 326 324 348 347 300 276 277 395 396 420 7 418 438 7 8 418 438 418 419 7 438 456 419 420 439 419 395 420 457 456 439 456 438 439 457 439 440 439 438 419 394 419 418 7 456 6 6 467 475 6 456 467 1 475 2 475 1 6 467 468 475 457 468 467 458 468 457 476 2 475 477 2 476 476 468 469 468 476 475 456 457 467 439 420 440 420 421 440 421 420 397 421 397 398 440 421 441 422 441 421 422 398 399 441 442 459 442 441 422 422 423 442 422 421 398 397 373 398 440 441 459 458 459 469 459 458 440 469 477 476 470 477 469 469 459 470 458 469 468 470 478 477 100 3 478 3 103 102 99 103 3 470 459 460 478 3 477 478 470 471 477 3 2 460 459 442 440 458 457 420 396 397 374 375 398 327 326 303 303 279 280 327 303 304 351 350 327 328 327 304 304 280 281 351 328 352 351 327 328 304 305 328 304 303 280 279 255 280 375 374 351 423 422 399 399 375 376 443 460 442 443 423 424 399 400 423 443 442 423 352 376 375 376 352 353 400 424 423 424 400 401 376 377 400 376 400 399 375 351 352 443 424 444 328 329 352 399 398 375 329 328 305 305 281 282 329 305 306 353 352 329 330 329 306 306 282 283 353 330 354 353 329 330 306 307 330 306 305 282 281 257 282 377 376 353 425 424 401 401 377 378 445 444 425 444 424 425 401 402 425 400 377 401 354 378 377 378 354 355 402 426 425 426 402 403 378 379 402 378 402 401 377 353 354 445 425 426 330 331 354 305 304 281 280 256 281 443 444 462 460 471 470 471 460 461 479 471 472 471 479 478 461 472 471 473 480 472 479 94 93 480 91 479 472 461 462 472 480 479 443 461 460 479 93 97 99 3 100 102 4 3 97 98 479 96 101 479 98 96 479 100 479 101 100 478 479 480 473 481 473 462 463 89 481 473 481 88 480 445 463 462 446 463 445 473 474 89 85 84 474 474 463 85 463 474 473 461 443 462 84 89 474 90 479 91 94 479 95 95 479 90 89 88 481 92 480 87 87 480 88 480 92 91 462 473 472 445 462 444 426 446 445 303 302 279 278 254 279 258 259 282 47 134 133 47 133 48 46 50 135 134 135 148 135 134 46 50 148 135 46 134 47 146 134 147 147 148 163 147 134 148 187 186 163 164 187 163 163 148 164 163 162 147 149 164 148 149 136 137 164 188 187 165 188 164 164 149 165 148 50 149 136 149 50 187 188 212 50 51 136 187 211 210 150 149 137 137 51 49 150 137 49 150 165 149 49 151 150 151 49 152 152 153 169 153 152 49 151 152 168 49 53 153 150 151 167 165 166 190 166 165 150 189 190 214 190 189 165 166 167 190 165 189 188 167 168 191 168 167 151 193 168 169 168 192 191 168 152 169 167 191 190 166 150 167 190 191 215 153 53 169 137 136 51 188 189 213 211 212 235 211 187 212 235 212 236 235 234 211 213 214 237 213 189 214 236 237 261 237 236 213 214 238 237 213 236 212 188 213 212 235 236 260 259 260 284 259 235 260 283 284 308 284 283 259 260 261 284 283 282 259 261 238 262 261 260 236 285 262 286 262 285 261 238 239 262 261 285 284 238 261 237 284 285 309 214 215 238 259 258 235 239 215 216 215 214 190 216 215 192 263 262 239 216 193 217 193 216 192 240 217 241 217 240 216 193 194 217 216 240 239 192 168 193 239 240 264 263 264 287 263 239 264 286 287 311 287 286 263 264 288 287 286 262 263 265 288 264 265 241 242 288 289 313 289 288 265 265 266 289 265 264 241 240 241 264 287 288 312 217 218 241 239 238 215 191 192 215 285 286 310 169 170 193 283 307 306 53 54 170 170 54 171 170 194 193 52 57 172 171 172 196 172 171 52 57 173 172 52 171 54 170 171 195 194 195 219 194 170 195 218 219 243 219 218 194 195 196 219 218 217 194 196 173 197 196 195 171 220 197 221 197 220 196 173 174 197 196 220 219 173 196 172 219 220 244 57 56 173 218 242 241 56 55 174 174 55 60 174 198 197 175 60 176 177 59 58 60 59 176 60 175 174 174 175 199 174 199 198 221 197 198 199 223 198 198 222 221 176 200 199 175 176 199 200 177 201 177 200 176 225 200 201 62 201 177 177 58 62 224 199 200 176 59 177 225 201 62 173 56 174 220 221 245 242 243 266 242 218 243 267 266 243 266 265 242 220 245 244 244 243 219 269 244 245 246 245 222 222 223 246 268 243 244 245 221 222 270 245 246 267 268 291 268 267 243 290 291 315 291 290 267 268 292 291 267 290 266 269 270 293 270 269 245 292 293 317 293 292 269 270 294 293 269 292 268 268 244 269 291 292 316 246 247 270 290 289 266 223 224 247 224 223 199 247 224 248 271 270 247 248 225 249 225 248 224 249 63 273 63 249 225 225 62 63 248 249 273 224 200 225 247 248 272 271 272 295 272 271 247 294 295 319 295 294 271 272 296 295 294 270 271 273 64 297 64 273 63 296 297 321 297 296 273 64 61 297 273 296 272 272 248 273 295 296 320 247 246 223 222 198 223 293 294 318 169 53 170 289 290 314 307 308 331 307 283 308 331 308 332 355 354 331 309 310 333 309 285 310 332 333 357 333 332 309 333 334 357 309 332 308 284 309 308 331 332 356 355 356 379 356 355 331 427 426 403 380 403 379 379 356 380 403 402 379 380 357 381 357 380 356 405 404 381 381 404 380 381 357 358 380 404 403 356 332 357 403 404 428 334 333 310 379 378 355 334 311 335 311 334 310 335 311 312 334 335 359 312 313 337 312 288 313 336 337 361 337 336 312 313 314 337 312 336 335 287 312 311 335 336 360 358 359 383 359 358 334 406 381 382 383 382 358 359 360 383 358 382 381 360 361 385 361 360 336 408 383 384 385 384 360 361 362 385 360 384 383 359 335 360 407 382 383 337 338 361 334 358 357 286 311 310 409 384 385 446 427 447 426 427 446 447 427 428 446 447 465 428 405 429 428 427 403 448 429 449 429 448 428 405 406 429 428 448 447 405 428 404 447 448 466 464 465 86 464 446 465 86 85 464 465 81 86 464 85 463 83 466 82 83 465 466 81 465 83 466 449 82 465 447 466 449 466 448 429 430 449 446 464 463 406 407 430 407 406 382 430 407 431 450 449 430 408 409 432 409 408 384 431 432 452 432 431 408 409 433 432 408 431 407 407 383 408 430 431 451 450 451 78 450 430 451 78 82 450 451 452 78 82 449 450 432 79 452 452 451 431 79 80 452 433 453 79 452 80 78 79 432 433 409 410 433 430 429 406 405 381 406 385 386 409 330 307 331 314 315 338 314 290 315 338 315 339 362 361 338 316 317 340 316 292 317 339 340 364 340 339 316 317 341 340 316 339 315 291 316 315 338 339 363 362 363 387 362 338 363 386 387 411 387 386 362 363 364 387 410 409 386 364 341 365 364 363 339 389 388 365 365 388 364 341 342 365 364 388 387 341 364 340 387 388 412 317 318 341 386 385 362 318 319 342 318 294 319 343 342 319 318 342 341 296 321 320 320 319 295 320 321 345 68 321 61 319 320 344 317 293 318 345 321 68 343 344 367 344 343 319 390 365 366 367 366 343 344 368 367 343 366 342 345 67 369 67 345 68 392 367 368 369 368 345 67 66 369 345 368 344 344 320 345 391 366 367 342 366 365 313 289 314 393 368 369 410 411 434 410 386 411 434 411 435 434 453 433 412 389 413 412 435 411 436 412 413 412 436 435 389 390 413 411 387 412 389 412 388 434 435 455 453 454 76 453 434 454 76 75 453 454 77 76 453 75 79 455 436 72 455 454 434 72 77 455 72 436 437 455 77 454 436 455 435 436 413 437 433 410 434 390 391 415 391 390 366 414 415 69 415 414 390 391 392 415 74 413 414 392 393 416 393 392 368 417 393 66 393 417 416 393 369 66 392 416 415 391 367 392 415 416 70 414 69 74 413 74 73 437 413 73 437 73 72 71 70 416 71 417 65 417 66 65 70 69 415 416 417 71 413 390 414 389 365 390 338 337 314 61 321 297 48 133 43 -41 39 1 0.119318360526317 -32.4183769697902 -8.97180042613466e-007 0.221258007919191 32.9492818450068 -2.51270011936476e-007 0.385932318830801 32.6544897766154 -6.1854046833657e-007 0.29393031968474 32.8019357971818 -4.37667714546673e-007 0.339770170662025 32.949284715007 -9.00000027138652e-011 1.41444141318236 32.949281636949 -0.0723859747720965 0.399530933967947 32.9492814655058 -0.142449920928198 0.42340905710103 32.949281336466 -0.207716338173984 0.456629212869447 32.9492812520345 -0.266178482020004 0.497541003405603 32.9492812108253 -0.31651530357438 0.544042244557282 32.9492812105121 -0.362494816899089 0.599886908849098 32.9492812576811 -0.40178979320139 0.664602951834885 32.9492813567519 -0.432102421706248 0.736978432667788 32.949281491386 -0.450058107631838 0.807055623065036 32.9492816479924 -0.457765634257626 0.872533311662978 32.9492818350163 -0.457071300035649 0.938684194805279 32.9492820478497 -0.448008746367459 1.00389935722537 32.9492822807364 -0.431010966617592 1.06664445241076 32.9492825272681 -0.406859839381012 1.12557586510147 32.9492827809181 -0.3765998336642 1.17962700327792 32.9492830355287 -0.341432829137614 1.2280547268893 32.9492833515667 -0.291713771367234 1.28078831370993 32.9492836702801 -0.235086619683427 1.32608171168288 32.949283935845 -0.182910025195474 1.35775370234894 32.9492842405047 -0.117131977435142 1.38689385173548 32.9492844955534 -0.0566532093327347 1.40471369228586 32.4183772197902 -0.208516963644024 1.41444139018236 32.7146390206246 -0.0957544927099734 1.41444140260348 32.5669008295882 -0.153086954362354 1.41444139622574 32.4183769697902 -0.614560682900065 0.818500392946681 32.4183769697902 -0.350573657355878 1.34113514239231 32.4183769697902 -0.46792121174002 1.23487179666597 32.4183769697902 -0.552640678866218 1.10547972803371 32.4183769697902 -0.601253461084581 0.964474298088134 32.4183769697902 -0.612184554316443 0.892849778102396 32.4183769697902 -0.59315361976337 0.674321889547505 32.4183769697902 -0.535431204285334 0.533899140425032 32.4183769697902 -0.452364187772029 0.419704128146711 32.4183769697902 -0.354589956672272 0.333814986501625 32.4183769697902 -0.238924454056769 0.26958132567036 32.4183769697902 -0.122181301376733 0.233520551715949 3.00864606 0 3.00864606 1 3.00864606 0.444444444444444 3.00864606 0.722222222222222 0 0.999999999999999 2.80556245451594 1 2.62278720847553 1 2.45828948585824 1 2.310241534832 1 2.17699837857068 1 2.04375522206057 1 1.91051206528707 1 1.77726890822465 1 1.65735006664939 1 1.54942310913413 1 1.44149615164394 1 1.33356919431456 1 1.22564223727253 1 1.11771528060127 1 1.00978832431367 1 0.901861368341175 1 0.764926185501422 1 0.619224795143735 1 0.488093543609349 1 0.320908984309016 1 0.160454492706175 1 4.44089209850063e-016 0 4.44089209850063e-016 0.555555555555556 4.44089209850063e-016 0.277777777777778 1.5556334 0 0.378018896081902 0 0.718235941713606 0 1.02443124355224 0 1.30000697429141 0 1.42782015181505 0 1.79780217734394 0 2.03997093899532 0 2.25792284377909 0 2.45407956768299 0 2.65023628582616 0 2.82944117596899 0 27 31 29 28 29 31 28 26 5 28 31 24 24 32 23 34 19 33 32 33 21 17 34 35 32 24 31 25 28 24 22 23 32 25 26 28 22 32 21 19 20 33 17 18 34 16 17 35 19 34 18 21 33 20 35 30 16 14 30 36 10 37 38 9 38 39 12 36 37 40 41 3 1 3 41 3 8 39 3 39 40 4 7 3 15 30 14 13 36 12 12 37 11 36 13 14 38 9 10 10 11 37 4 6 7 7 8 3 2 6 4 9 39 8 30 15 16 -63 61 1 0.18275168035001 -31.5453892345755 -2.84358518024543e-010 1.57010472795097 30.9280263125 -0.0873089211861623 1.60695769477569 31.2974821280361 -0.0350370328811884 1.58556635694182 31.1204332596283 -0.0602117432064407 1.59601490368986 30.0394633975859 -0.200907417501252 1.65446187752303 30.550479791337 -0.138859069750576 1.62752689019242 30.2987102629447 -0.170830825639444 1.64085165237989 29.5198370703048 -0.250491600836839 1.68203176886297 29.7962755978589 -0.226147853981709 1.66725163524541 29.9202605957203 -0.213653509011079 1.66072333797826 29.2028253447147 -0.271838291522898 1.6995424104655 29.3197663146451 -0.264842639626139 1.6929978065375 29.4093488458609 -0.258805174375594 1.68805023500084 29.1292698538506 -0.275729591350411 1.7037141474904 29.1613437747115 -0.274081063433766 1.70188983029626 29.1818358720314 -0.272988601967243 1.70072876380782 27.9580998698248 -0.287213545516178 1.7762104150262 28.6334589290037 -0.292071289867517 1.7329750252157 28.2989317935834 -0.293671638691864 1.75387657490008 27.1183300885413 -0.234506035890649 1.83552196484067 27.567626757566 -0.270034757765977 1.8029936064384 27.3358664899854 -0.253946620484933 1.81956045869635 26.7177243957574 -0.184290307132866 1.86592274115955 26.9078415571464 -0.210778000466012 1.85134784245198 27.0131132467513 -0.223382967335193 1.84337809778228 26.6072787699614 -0.166388614178154 1.87446002380946 26.6586276697487 -0.174959781830892 1.87048742923244 26.6888152939273 -0.17979563280285 1.86815519603804 26.4173907547587 -0.130843791807996 1.88911937635335 26.4796660986241 -0.143183262911529 1.88432580371304 26.5346538840633 -0.153521508196896 1.88007883614836 26.3568970264124 -0.114423615185575 1.89398475508142 26.3888784366182 -0.123358724927798 1.89141279465136 26.3724029063813 -0.118865967617964 1.89273568280923 26.2933957876783 -0.0947700580217579 1.89906779612862 26.3264655611822 -0.105493874271201 1.89641771625628 26.309288792086 -0.100079291294985 1.89779321830789 26.225945537031 -0.0676881079965739 1.90448562176552 26.2531402001709 -0.0800726013455102 1.90228448212112 26.2689057860584 -0.0862035780193151 1.90101845529926 26.2028398511069 -0.0548219693764112 1.90636315498107 26.2150120552164 -0.0619762244923438 1.90537246653922 26.2087177735819 -0.0584142365146393 1.90588381244474 26.1715862117354 -0.0280173105944252 1.90892945299891 26.1863118813827 -0.0433001563473664 1.90770661217708 26.1954881750896 -0.0500150577228376 1.90696336908379 26.1604470425545 1.29120852074267e-009 1.90984293371267 26.16297935419 -0.0119716913282133 1.90964298445692 26.1658087682057 -0.0189680626996516 1.90940581263074 25.9893209344264 3.4350001633999e-008 1.92052189721989 26.0843158085417 1.54258354617712e-008 1.91459250215493 26.0367945483994 2.49376276677681e-008 1.91755824946625 25.9893209044264 -1.2407928679345 1.41444127418235 25.9893209277346 -0.622739697573988 1.80763490020278 25.9893209176324 -0.961751686580763 1.63721701225842 28.8885020234294 -1.01981169350125 1.41444129879513 30.6741663525248 -0.716118495520971 1.41444133271498 32.4183772197902 -0.208516963644024 1.41444139018236 32.4183771497902 -9.50500045162309e-008 1.51294273986092 32.4183771565294 -0.108569249581605 1.49014860106492 32.4183771826061 -0.164996410704963 1.45665088589755 32.0313735286155 -6.26104575395461e-008 1.53844031722881 31.7886258826001 -3.43067884641679e-008 1.55430121306841 2.57033879 0.50000087 2.28861842087227 0.443745222893856 2.45723722667645 0.47375091236629 2.37644718730772 0.458264195126531 1.882021975585 0.398738643647066 2.11609091098828 0.420743844817877 2.00086350250557 0.408726008088426 1.64326070115387 0.38531898163311 1.77035567091248 0.391397692930834 1.82731064520272 0.394902533047328 1.49732765 0.38125063 1.55118174911203 0.382391005520839 1.59241638721006 0.383549430774969 1.46344236641377 0.380743095505887 1.47821947918762 0.380945692622078 1.48765933404334 0.381090230003811 0.922589615817229 0.389797391625992 1.23479023625795 0.380893256426987 1.08026444166622 0.384111939341188 0.532403391212581 0.415012458030018 0.741558873367591 0.399372445534962 0.633805637493195 0.406753984568531 0.34480012 0.43452143 0.433987231850694 0.424459149119472 0.483252368328348 0.419535764600509 0.292853383143588 0.44117714741059 0.317018217862462 0.438005500708143 0.331213421661933 0.436203783560819 0.20327796 0.45411017 0.232693228058303 0.449655614223755 0.258635046302074 0.445896584203952 0.174660872740947 0.459940872596311 0.189799546152085 0.456785656417991 0.182007360584991 0.45838718777952 0.144596468920789 0.466915665859125 0.160266136402741 0.463135772884468 0.152131039777963 0.465051325426928 0.112620972747793 0.476447432665769 0.125561601705397 0.472174774934396 0.133014404949453 0.469994307819016 0.101641597745167 0.480927988727755 0.107424966061805 0.478434999423406 0.10443683784644 0.479679220366518 0.0868737295748928 0.490307523452096 0.0938765760290096 0.485027499775956 0.0981659520907276 0.482618868739349 0.08150659 0.50000033 0.0827596801232439 0.495851003156725 0.084157597442134 0.493452419845314 7.50908543678541e-010 0.50000033 0.0452814375049143 0.50000033 0.0226407187214926 0.50000033 0 0 0 0.277777959779155 0 0.138888980111319 1.32006965960497 6.93889390390723e-018 2.14511320046372 6.93889390390723e-018 2.97015674 6.93889390390723e-018 2.97015674 0.50000087 2.97015674 0.277778261649727 2.97015674 0.138889131367082 2.79245987531436 0.50000087 2.6813993359596 0.50000087 29 54 55 34 54 33 36 37 54 34 32 54 36 54 32 55 53 28 54 37 35 27 26 55 23 28 53 27 55 28 29 33 54 31 30 55 29 55 30 26 31 55 53 24 23 49 48 51 45 44 51 49 51 44 54 45 51 47 51 48 54 51 52 52 50 54 42 54 38 39 54 40 54 39 38 45 54 46 41 54 43 41 46 54 43 54 42 54 35 40 18 56 14 56 18 19 15 14 56 56 16 15 19 17 56 11 16 56 56 12 11 56 17 21 3 57 58 1 58 61 9 57 10 12 56 13 8 56 9 56 8 13 63 61 60 57 9 56 22 53 21 5 10 57 24 53 25 53 20 25 5 57 7 20 53 22 6 57 2 4 57 3 57 4 2 1 3 58 1 61 63 63 60 62 7 57 6 60 59 62 21 53 56 -43 41 1 0.929373364278139 -20.1549001573063 1.36866520500811 1.41444156718237 25.9893209044264 1.24079115393441 1.41444155318237 22.7577054944309 1.328667200288 1.41444156267208 24.3747918622912 1.29342804502507 1.41444155867448 25.9893210144265 1.67578665759559 0.495543775207065 25.9893209612405 1.54395826334188 0.955859696927737 25.9893209328494 1.40739915374098 1.20316394549284 25.9893210144265 -1.67578856559568 0.495540494136909 25.9893210595912 -1.68400096620412 0.104293156327886 25.9893210992021 -1.6094660467772 -0.256107775302221 25.9893211339876 -1.47137442990658 -0.56998965304101 25.989321166696 -1.26642731260049 -0.856833198911222 25.9893211945099 -0.999963494727196 -1.09976662738295 25.9893212156238 -0.682349462496128 -1.28323775909663 25.9893212286158 -0.328532648832915 -1.39475407891498 25.9893212325735 0.0430897063710749 -1.42641416112216 25.9893212272109 0.412362807748192 -1.3759327125916 25.9893212129055 0.759366009467135 -1.24694480651844 25.9893211906476 1.06636412102401 -1.04852357180997 25.9893211619129 1.31938917134473 -0.794015118064962 25.9893211284844 1.5092190996943 -0.499431274727858 25.9893210922585 1.63166559831525 -0.181705319982121 25.9893210550655 1.68723041716745 0.142901911316889 25.9893210345193 1.6906630543802 0.321477936167018 25.9893209044264 -1.2407928679345 1.41444127418235 25.9893209495827 -1.49355647716755 1.05892484948541 25.9893209799464 -1.607448781941 0.791612249723409 20.1549001573063 -1.3686672230082 1.41444126018235 23.406045317914 -1.31522402231752 1.41444127001226 21.7814857070444 -1.34778248565821 1.41444126571733 20.1549001573063 -1.6722750014288 -1.30306872289244 20.1549001573063 -2.03433776185515 -0.381428035158878 20.1549001573063 -1.95022034564482 0.523458796790025 20.1549001573063 -1.70658877755618 1.02489508660368 20.1549001573063 1.67227319742871 -1.30306890389245 20.1549001573063 -1.06025510314924 -1.8708312818635 20.1549001573063 -0.248800274676112 -2.15085975576918 20.1549001573063 0.528196717018899 -2.09684800275857 20.1549001573063 1.15900491493157 -1.80730370736378 20.1549001573063 1.44015007298323 -1.57566051740705 20.1549001573063 1.88246508154141 0.702067315424064 20.1549001573063 2.04543979948981 -0.275796227278505 20.1549001573063 1.93251079173511 -0.803637163891062 0 1 0 0 0 0.555555555555556 0 0.277777777777778 0.52193218 0 0.289962326566546 0 0.144981163803571 0 2.90103732 0 2.72260443603976 0 2.56201484578221 0 2.41748421307472 0 2.27295357648076 0 2.12842293898602 0 1.98389230108423 0 1.83936166286646 0 1.69483102442607 0 1.55030038606231 0 1.40576974800512 0 1.26123911035026 0 1.11670847319352 0 0.972177836306641 0 0.827647199262468 0 0.683116562664398 0 0.602524372732039 0 3.42297087 0 3.1910004006394 0 3.04601885772958 0 3.42297087 1 3.42297087 0.444444444444444 3.42297087 0.722222222222222 2.31521104 1 2.64753898505568 1 2.97986693380408 1 3.20141890120829 1 1.10776006 1 2.05114150881727 1 1.78707197583842 1 1.54940939781961 1 1.33551307887036 1 1.22163656520452 1 0.369253353886606 1 0.73850670239636 1 0.923133375898128 1 2 7 4 6 5 4 5 24 4 7 6 4 23 22 4 21 20 3 20 19 40 22 21 3 24 23 4 42 3 43 41 1 3 42 41 3 4 22 3 35 20 40 35 43 3 39 18 38 19 39 40 18 17 38 3 20 35 19 18 39 16 37 38 15 14 37 14 13 36 16 15 37 12 11 29 11 10 29 9 8 29 8 27 29 10 9 29 13 12 31 32 30 33 29 32 31 36 13 31 36 37 14 26 25 29 30 32 29 34 30 28 34 33 30 12 29 31 26 29 27 16 38 17 -66 64 1 0.161024487725665 -28.7643514962333 1.33236617403399 0.776100355658662 27.6194881219554 1.48165200572926 0.660331569942414 26.8339248695205 1.57666155768992 0.580995151391121 25.9893210144265 1.67578665759559 0.495543775207065 25.9893209044264 1.24079115393441 1.41444155318237 25.9893209612405 1.54395826334188 0.955859696927737 25.9893209328494 1.40739915374098 1.20316394549284 32.4183773097902 0.208515993143978 1.41444143718236 28.8885019102731 1.01980904931 1.41444152811728 30.6741662167748 0.716115970789611 1.41444149374992 32.4183769697902 0.614559651360016 0.818501410646729 32.4183769697902 0.555526101335424 1.09947628289893 32.4183769697902 0.401055729892749 1.30205971097984 32.1770521334931 0.687441378484839 0.77339797995212 32.0167341897921 0.731181747152838 0.743928886938491 31.8489294108679 0.773620907424083 0.713412657138219 31.566908625913 0.848924345841429 0.741817258750537 31.7193577050282 0.809165463987107 0.724738984746363 31.6441503715087 0.829068641206165 0.732676223598864 31.0591047654668 0.963540691337818 0.812517560127936 31.2862471602083 0.915659621508783 0.779518141965687 31.4263928926327 0.88339812558925 0.759926421383552 30.9858099377714 0.977906652997218 0.823001564625002 31.0184934603145 0.971560636306024 0.81836747505304 31.0388308672447 0.967563375295205 0.81544452499999 30.292182671942 1.09603537854599 0.895836056217416 30.6273799791908 1.04199814688872 0.868682706724771 30.8117997461093 1.01015065506177 0.846758910297657 30.2321643814253 1.10541543653031 0.898725539057365 30.2650899957808 1.10027628860674 0.897220254404653 30.2485055338066 1.10286609724819 0.898005754909848 29.7795341835413 1.17563261596748 0.898584238481708 30.02922846873 1.13689975109556 0.903538082386562 29.9069072424127 1.15586846893199 0.90250950825837 29.1372732207767 1.27324971270094 0.850442714275949 29.4200150342725 1.23091670093218 0.875938129190515 29.5981387665588 1.20365059634477 0.889055958426125 28.9242454674154 1.3040453060426 0.829974356619852 29.0193724633663 1.29042794006179 0.839087283506927 29.0784338380473 1.28186157139388 0.84478657121622 28.8816130593029 1.31007156310006 0.825958547744424 28.9053208004599 1.30672523639533 0.828191498524062 28.8934741437243 1.30839887530713 0.827075634695099 28.8623359158873 1.31301195536472 0.822802590013024 28.8683861667669 1.3121746813851 0.823287469606039 28.8724539903008 1.31154876837384 0.823977440281247 28.8499934198436 1.31471501874615 0.821812036463894 28.8586785090749 1.31352018068647 0.822490125557799 28.8544807632298 1.3140984728401 0.822158791757023 28.836792424772 1.31659601257406 0.820380770538668 28.8412037998586 1.31601400415887 0.820572287179439 28.8451346362802 1.31543704139992 0.821102110061665 28.8192381238403 1.31915032565627 0.818128210046003 28.8250979597599 1.31822776397475 0.819316570979007 28.8294260915591 1.31761011142509 0.81980088716013 28.8097933533917 1.3206519092276 0.816139042279523 28.8132975816628 1.32009277097036 0.816891630272316 28.8103912202937 1.32055450698852 0.816279673061782 28.7799729704748 1.32585040949468 0.806905170779541 28.7939464023144 1.32319585274502 0.812605118535826 28.7996852367409 1.32220465499208 0.814334145380745 28.7718042186219 1.32778267744969 0.80108843131585 28.7732356324845 1.32733174014952 0.802827533414292 28.7758361996172 1.32670846334943 0.804734949007174 28.7647189177685 1.33083926062504 0.786642361583877 28.7667858093201 1.32954883005284 0.793611284634292 0.41008734 0.15247929 0.22782629955653 0.15247929 0.113913149911665 0.15247929 0 0.15247929 1.38777878078145e-017 8.67361737988404e-019 1.38777878078145e-017 0.0847107208436243 1.38777878078145e-017 0.0423553611555529 1.18410863 0 0.526270502222222 0 0.855189566111111 0 1.18410863 0.25852666 1.18410863 0.172351109087307 1.18410863 0.0861755605705679 1.10638276754093 0.25852666 1.05780410466889 0.25852666 1.00922544 0.25852666 0.93817111158698 0.239135718447365 0.975485711828586 0.249847357002507 0.956770079733854 0.244624036615868 0.82853129 0.2030414 0.87521692000902 0.21891738929344 0.905824780025457 0.229000040037327 0.814114745698882 0.198106711462962 0.820510972950289 0.200288740602117 0.824517256855192 0.201661577359719 0.68608119 0.16093914 0.74669083885206 0.176354030237648 0.780832854959666 0.187009983349551 0.675302928289615 0.15876523717856 0.681214746096154 0.159936069510221 0.678236779366858 0.159339629304569 0.593669846603879 0.148260418686337 0.638822894971968 0.152782514760359 0.616737343558846 0.15020712284657 0.47839695 0.14515792 0.528703508614626 0.145605463107761 0.560813543547672 0.146505983961002 0.44128756 0.14514773 0.457756625436671 0.145152254769942 0.468064745340429 0.145155084853269 0.43396709 0.14513072 0.438034020045753 0.145140167530397 0.436000556053039 0.145135442994194 0.43089701 0.14540341 0.431679040274108 0.145355229288713 0.432641049683848 0.145265791778333 0.428432698347115 0.145350951568534 0.429904049112587 0.145376228362861 0.429193582179448 0.145361995950283 0.426177215634701 0.14534344097593 0.426922115368865 0.145341304208123 0.427596771570616 0.145343497441929 0.42351021 0.14542923 0.424267323422398 0.145379743146057 0.425100423821651 0.145356489479126 0.42127544 0.14570188 0.422029020208566 0.145613027611212 0.42149974308009 0.145677022493614 0.415669812049734 0.146917127401513 0.418483914032487 0.146077881307278 0.419573732459391 0.145885929294344 0.413786066706607 0.147911857528494 0.414194438816251 0.147655045410341 0.414792128805866 0.14732428047734 0.411165228250851 0.150478928833863 0.412218939194163 0.149200380275819 5 3 7 51 9 52 6 7 3 52 9 41 9 55 54 9 51 50 50 55 9 9 54 53 41 46 49 9 42 43 43 41 9 47 41 49 48 45 44 48 49 46 45 48 46 41 47 52 5 9 2 66 65 2 63 62 2 66 2 62 2 3 5 63 2 64 65 1 2 3 4 6 9 53 57 57 58 56 9 59 64 60 59 9 57 56 9 9 64 2 61 60 9 61 9 56 39 38 9 40 9 35 9 40 39 38 42 9 36 35 9 32 37 9 36 9 37 9 34 32 34 9 33 9 10 29 8 13 10 26 30 10 33 9 29 30 31 10 29 10 31 10 13 18 26 10 27 28 10 23 10 28 27 20 25 10 21 20 10 25 24 10 23 10 24 22 10 17 10 18 19 19 17 10 21 10 22 18 13 16 16 13 15 12 14 15 12 11 14 15 13 12 -20 18 1 0.258266511369956 -28.8816743505559 1.32524719569586 0.695787439970753 28.8775904132854 1.32572610977519 0.696793589036043 28.8750545233673 1.32601664766193 0.697501193238321 28.8725335952688 1.32630037163785 0.698270444283315 28.867993691635 1.32680012581809 0.699792063894168 28.8656204720738 1.32705503534435 0.70066390099062 28.8635999007014 1.32726816033196 0.701453946616088 28.8562793112056 1.32801381583399 0.704560642423376 28.8518680381687 1.32844198085001 0.706643028489731 28.8475719209584 1.32884532155346 0.708805028085803 28.8042061810958 1.33218910762353 0.734824782868964 28.8222396701385 1.33098445437855 0.722941375478897 28.8346249173958 1.32998993839467 0.715754167430029 28.7643514962333 1.33236617403399 0.776100355658662 28.7750044534097 1.33317663478055 0.759453473175048 28.7875217931438 1.33299393369997 0.747409772071321 31.9768135388171 6.52772034505006 1.34215900474913 32.0208866309104 6.53046184918028 1.31476716144809 31.9890588095105 6.52897265450857 1.32964517227622 32.0043572560983 6.5298518644305 1.32086070908223 1 55.19186736 0.970462301423367 55.1879815163868 0.952001269573823 55.1855528680437 0.93354024 55.18312422 0.900048148438663 55.1787195647845 0.882385805313795 55.1764036605187 0.86723898 55.17442391 0.811743060522171 55.1672629129707 0.777681907317113 55.1629477161495 0.744100615116397 55.1587559264802 0.39369133 55.11954557 0.542781297496916 55.1351117823133 0.641894018682712 55.1464185902571 0 55.09513178 0.132282826670888 55.09869040342 0.249880261277429 55.1067427967288 0 0 1 1.77635683940025e-015 0.333333333333333 1.77635683940025e-015 0.666666666666667 1.77635683940025e-015 14 17 19 15 14 18 20 14 19 16 15 18 18 11 16 18 13 12 18 10 13 12 11 18 20 18 14 8 9 18 7 18 6 18 7 8 6 18 5 9 10 18 4 5 18 3 4 18 3 18 2 18 1 2 -23 21 1 0.422146918720553 -32.0208866309104 6.53046184918028 1.31476716144809 28.8816743505559 1.32524719569586 0.695787439970753 33.0949317119248 6.52779751805373 1.34157750972151 32.4984166034279 6.53355304594409 1.28395396493992 32.7973514320859 6.5314100336387 1.30542254960501 31.8489294108679 0.773620907424083 0.713412657138219 31.6669080706979 0.818055692597143 0.691167117815894 31.547495011969 0.84590928484853 0.677466341041488 31.4235408023773 0.87387724296965 0.664016100385336 30.6739009489152 1.02775890829929 0.600825162057539 31.003220177075 0.962859218811492 0.62438783987948 31.2127587094392 0.919511495410958 0.642930651987077 29.8455269996093 1.17804865362135 0.580310109048595 30.1958373950127 1.11641510086955 0.580547484392847 30.4302918580342 1.07363161088937 0.587995751073576 29.7609436354519 1.19252197459894 0.582724670786081 29.7096530119139 1.20121582260965 0.584772721175931 29.6596005386966 1.20962973326461 0.587203699858479 29.5013742992985 1.23573720671022 0.597938318883715 29.4100709559397 1.25039788769139 0.606435721376138 29.3247602152849 1.2637721186497 0.616147712196046 29.1078512072961 1.29587838748688 0.648447423514704 28.9898581557217 1.31184102501947 0.67130074713442 8.9364967910993e-017 1 2.52010372 1 0 0 0 0.55555555662117 0 0.277777777807521 2.72079289 0 2.70343860234772 0.0595719957815567 2.69272145038642 0.0987789478406871 2.6820843 0.13957584 2.62565605 0.38838725 2.64902478331404 0.27864364869806 2.664979254147 0.209175982731479 2.57291933 0.66753805 2.59442060224816 0.548898490388526 2.60940785596814 0.469996345106262 2.56784238128398 0.696329492395816 2.56478578717223 0.71381253709948 2.56182051530947 0.730892495636628 2.552573318782 0.785052108826766 2.54734088892423 0.816449783945029 2.54253999 0.84589577 2.53089618599267 0.921074411539134 2.52504590813139 0.962146294804497 13 4 5 4 18 19 17 18 4 4 19 20 5 3 15 1 23 2 1 4 23 23 4 22 22 4 21 4 20 21 12 11 3 9 12 3 7 8 3 6 7 3 9 3 8 16 17 4 13 16 4 15 14 5 10 15 3 13 5 14 11 10 3 -45 43 1 0.120261755534508 -32.4183769697902 -8.97180042613466e-007 0.221258007919191 32.6544897766154 -6.1854046833657e-007 0.29393031968474 32.8019357971818 -4.37667714546673e-007 0.339770170662025 32.9492818450068 -2.51270011936476e-007 0.385932318830801 32.4183769697902 0.614559651360016 0.818501410646729 32.4183769697902 0.593152759177951 0.674322638555951 32.4183769697902 0.535430395324304 0.533899595554983 32.4183769697902 0.452363310682659 0.419704320281811 32.4183769697902 0.35458892182781 0.333815010820715 32.4183769697902 0.238923180094589 0.269581235514765 32.4183769697902 0.122179798840786 0.233520462318616 32.4183773097902 0.208515993143978 1.41444143718236 32.4183769697902 0.600823111770511 0.966468298788938 32.4183769697902 0.555526101335424 1.09947628289893 32.4183769697902 0.48636342766211 1.21215874237066 32.4183769697902 0.401055729892749 1.30205971097984 32.4183769697902 0.306533928957468 1.36901375945687 32.949284715007 -9.00000027138652e-011 1.41444141318236 32.6556405042146 0.118916540025242 1.41444142684491 32.8028878998831 0.0604304092497776 1.4144414202837 32.9492844622498 0.0648578034843168 1.40276019322203 32.9492841950919 0.127361842821889 1.38306634166443 32.9492839217962 0.185787190591095 1.35622009891945 32.9492836505446 0.238781276649565 1.32350548511105 32.9492833885957 0.28546658567954 1.28645378312565 32.9492831137876 0.329730268134689 1.24185312072483 32.9492828316718 0.369955979006697 1.18972552093879 32.9492825773593 0.40129089899697 1.13674434035753 32.9492823532966 0.424498342755848 1.08471341846466 32.9492821386964 0.442142873236093 1.02930545077855 32.9492819383134 0.453577893685952 0.971436497866518 32.9492817566145 0.458366005935615 0.912173941484262 32.949281597467 0.456319712789437 0.852674394726367 32.9492814638712 0.447519460318144 0.794109899407079 32.9492813577748 0.432305853534723 0.737592052707112 32.9492812799933 0.411247421367001 0.684104170065403 32.9492812302395 0.3850894689738 0.63444980772802 32.9492812072494 0.354692238382686 0.589222522086425 32.9492812089755 0.320967261132669 0.548797697285107 32.9492812419963 0.275402226040944 0.505171313291083 32.9492813097541 0.22393213033468 0.466798061747131 32.949281393256 0.176940001924048 0.439511462777807 32.9492814927281 0.13039910271226 0.418491493481063 32.9492816376445 0.0721246754267516 0.399462416249419 32.9492817399943 0.0352387730996903 0.391219318004573 0 0 0 0.444444444444444 0 0.722222222222222 0 1 1.4508111 0 1.20900927907161 0 0.967207431555324 0 0.749585752822383 0 0.553726241214868 0 0.35786673355648 0 0.178933364870546 0 3.00408138 0 1.70968949491579 0 1.96856787725773 0 2.22744626056553 0 2.48632464158355 0 2.74520301624964 0 3.00408138 1 3.00408138 0.444444444444444 3.00408138 0.722222222222222 2.82158343656439 1 2.6573352868735 1 2.50951195191404 1 2.37647095048844 1 2.25673404935528 1 2.13699714841071 1 2.01726024765133 1 1.9094970370969 1 1.81251014767067 1 1.71552325828468 1 1.61853636891566 1 1.52154947954744 1 1.42456259017172 1 1.32757570078685 1 1.23058881139474 1 1.13360192199646 1 1.03661503258702 1 0.939628143150401 1 0.842641253655787 1 0.721139734606538 1 0.590207433301907 1 0.472368361727951 1 0.354529289732741 1 0.202075588120903 1 0.101037793596893 1 1 11 2 43 3 2 10 2 11 9 2 10 9 8 41 40 8 39 8 40 41 7 39 8 36 7 6 2 9 42 41 42 9 43 44 3 43 2 42 3 45 4 3 44 45 38 39 7 38 7 37 37 7 36 36 6 35 6 34 35 6 5 34 5 13 31 13 30 31 29 30 13 14 29 13 5 31 32 24 15 16 16 17 19 12 19 17 16 19 23 26 14 15 19 20 22 33 5 32 28 14 27 27 14 26 14 28 29 22 23 19 21 20 18 20 21 22 25 15 24 25 26 15 16 23 24 5 33 34 -24 22 1 0.432122442672145 -31.8489252871177 -0.773601860023678 0.713410577422495 33.0949317119248 -6.52779751805373 1.34157750972151 32.0208866309104 -6.53046184918028 1.31476716144809 32.1988014065246 -6.53304116548185 1.28901898561674 32.4384468709181 -6.5337198707506 1.28227649389768 32.7675330815779 -6.53170020137228 1.30251747341929 28.8816427105544 -1.32519472919337 0.695781195470957 29.0757861391044 -1.30027409409073 0.654261833324734 29.2142048204845 -1.28045247734878 0.631058678601744 29.3706442966486 -1.25655401065864 0.610813509197056 29.5679864962377 -1.22476545280542 0.592818153561267 29.7057272683155 -1.20179571401311 0.584936033622275 29.851942304157 -1.17686893778625 0.580243846620144 30.6873283611547 -1.02511979891527 0.601757898703286 30.2912766998014 -1.09905709004392 0.582893322806325 30.0650539151023 -1.13964784314126 0.57870164365139 30.9709464533427 -0.969355678355452 0.622014505277359 30.8419077314078 -0.995055958067164 0.612164223515756 30.763722446922 -1.01035071566988 0.606675771473637 31.1963885929912 -0.922923737771986 0.641514500923609 31.3302938052877 -0.89429565565052 0.654444075395654 31.4590683246425 -0.865913067350121 0.667814429589193 31.6382895799891 -0.824784036998286 0.687815045540941 31.7454745135308 -0.799162971634557 0.700569072566715 0 2.72080189 0 0 1 6.93889390390723e-017 0.83333333364103 6.93889390390723e-017 0.611111110292245 6.93889390390723e-017 0.30555555607873 6.93889390390723e-017 1 2.52012912 0.932207144623762 2.52929614177358 0.884154231832026 2.53651864031074 0.83003831 2.54514399 0.762203760680357 2.55647917711777 0.715138637112892 2.56459152540789 0.665345 2.57334584 0.38388975 2.6266127 0.516726987855095 2.60052496284965 0.593069310165147 2.58635362355957 0.28937250360486 2.64669271659733 0.332314628159079 2.63738618606352 0.358382579540039 2.63188893569816 0.214593021871 2.6637349991949 0.170326907256444 2.67440283244538 0.12786832 2.68510674 0.0689568761522436 2.70084118802841 0.0338284595533889 2.71078079278354 17 2 18 14 2 6 2 17 20 19 18 2 14 19 2 6 15 14 24 1 2 23 24 2 21 22 2 20 21 2 23 2 22 9 5 8 8 5 4 5 9 10 4 7 8 7 4 3 15 6 16 16 6 13 11 12 5 10 11 5 6 12 13 5 12 6 -20 18 1 0.258415863180466 -28.8816427105544 -1.32519472919337 0.695781195470957 32.0208866309104 -6.53046184918028 1.31476716144809 31.9768135388171 -6.52772034505006 1.34215900474913 31.9991551634254 -6.52957614241647 1.32361546480209 31.9866436463719 -6.52880411246834 1.33132921295403 28.764323322482 -1.33232061253183 0.776095392149801 28.7659487500336 -1.3326411649084 0.772183618542527 28.767353068699 -1.33280374416004 0.769605424578206 28.7690552946818 -1.332935724945 0.766952029562387 28.7813794642941 -1.33308097616103 0.753080300459873 28.7919109335107 -1.33275311521034 0.744056950636266 28.8043612183713 -1.33211868056499 0.73480034425291 28.8636687934679 -1.32720004158036 0.701494707818767 28.8384549080435 -1.32961759235699 0.713509006183649 28.8210379970152 -1.33102641684749 0.723610368263552 28.8670270103205 -1.32684939888841 0.700123599743314 28.8696043117389 -1.32656942780084 0.699212152495866 28.8725550718222 -1.32623952939231 0.698291248279232 28.8765655301503 -1.3257883217027 0.697057128774382 28.8790979586828 -1.32549492032217 0.696388610115505 0 55.21292144 0 0 1 7.105427357601e-015 0.444444477069858 7.105427357601e-015 0.722222238958996 7.105427357601e-015 1 55.11607678 0.971665935200521 55.1160281406197 0.952251395154274 55.1163214518069 0.931530229241678 55.1168642957768 0.806559597942512 55.1234608016452 0.711972062954077 55.1308248868579 0.60518057 55.1406414 0.13222607 55.19553183 0.327164443737738 55.171093744452 0.466458282415198 55.155096369448 0.106900048396559 55.1988486094521 0.0877929378392056 55.2013601470237 0.06616403 55.20420903 0.0367577911954624 55.2080812098558 0.0183789103102534 55.2105013221174 2 16 17 16 2 13 2 14 13 15 14 2 8 2 4 1 2 20 2 18 19 19 20 2 18 2 17 8 9 2 4 7 8 7 3 6 3 7 5 15 2 12 11 2 10 10 2 9 2 11 12 5 7 4 -63 61 1 0.19666417253325 -32.4183771497902 -9.50500045162309e-008 1.51294273986092 32.0313735286155 -6.26104575395461e-008 1.53844031722881 31.7886258826001 -3.43067884641679e-008 1.55430121306841 31.5453892345755 -2.84358518024543e-010 1.57010472795097 32.4183773097902 0.208515993143978 1.41444143718236 32.4183772010052 0.108568628672365 1.49014843531453 32.4183772520096 0.16499556886014 1.45665078782161 25.9893209044264 1.24079115393441 1.41444155318237 28.8885019102731 1.01980904931 1.41444152811728 30.6741662167748 0.716115970789611 1.41444149374992 25.9893209344264 3.4350001633999e-008 1.92052189721989 25.9893209277346 0.622738850522369 1.80763468226896 25.9893209176324 0.961750329511054 1.63721696604229 26.1604470425545 1.29120852074267e-009 1.90984293371267 26.0843158085417 1.54258354617712e-008 1.91459250215493 26.0367945483994 2.49376276677681e-008 1.91755824946625 26.1715471689517 0.0279738538942231 1.9089325016117 26.1639709430298 0.0147580028840625 1.90955992124741 26.1618235443497 0.00794164992969804 1.90973844543037 26.2028087589921 0.0548123556327908 1.9063653740577 26.189882469742 0.0460497856865718 1.90741776381651 26.1799182967975 0.0376980116864272 1.90823017260473 26.2326379467513 0.0709475047871804 1.90394341438878 26.2150086249086 0.0619926096048508 1.90537206388674 26.2234921335773 0.0664455195754171 1.90468469504564 26.2947290518789 0.0952205365879649 1.89896106160379 26.2619184493791 0.083561819205891 1.90158050552179 26.2484477512437 0.0781177992130321 1.90266404669542 26.3562983810869 0.114252097615382 1.89403270786429 26.3200376899274 0.103503256588306 1.89693215405746 26.3374739850788 0.108833833019026 1.89553572090951 26.4173906772587 0.130843789250621 1.88911927247835 26.3818007890439 0.12144573198209 1.89198113960143 26.3990505688981 0.126068501792152 1.8905950987804 26.6072800710749 0.166388895327828 1.87445963020711 26.497758156013 0.146642025541961 1.88292900281966 26.452520640201 0.137887662794991 1.88641830850779 26.717724389624 0.184290379536009 1.86592236141589 26.6712115051438 0.176993629410622 1.86951457808231 26.6401456646534 0.171925690138112 1.87191623822949 27.0541544954677 0.227810155714067 1.84031084674953 26.9118186458812 0.211279568586009 1.85104449835924 26.8201524801184 0.199193719955699 1.85804594221987 27.5696395674809 0.269948992087055 1.8028810686892 27.2733749041966 0.248796156392257 1.82410843435988 27.4188170852615 0.260235353486048 1.81357583446897 28.7384764405596 0.28999596408343 1.72661155909216 28.0898407741276 0.29081384122899 1.76743340752449 28.419013365545 0.29396446657624 1.74626305598417 29.2028255741547 0.27183817160682 1.69954302339893 28.9525485344631 0.283498782637376 1.7139142837955 29.080328046327 0.278101314484627 1.70651387526967 29.4547613552504 0.255473155076532 1.68556831110325 29.3327523984168 0.264004103076551 1.6922753174138 29.2651935800711 0.26823134523516 1.69603952443472 29.9096528327914 0.214788315729654 1.66127598524551 29.7570588007104 0.229909783459046 1.6693311118734 29.6488092585267 0.239790153443118 1.67508539259711 30.6808170131304 0.121342621013034 1.6205390678069 30.2606988416976 0.175442989669553 1.6428490049406 30.4743973175524 0.14876224650314 1.63157546501856 31.1086577178288 0.0618835874087544 1.59669559458129 31.3421690339281 0.0286901154478397 1.58285885656689 2.97015674 0.50000087 2.79245987531436 0.50000087 2.6813993359596 0.50000087 2.57033879 0.50000087 2.97015674 1 2.97015674 0.72222270643441 2.97015674 0.861111353081581 0 1 1.32006965960497 1 2.14511320046372 1 0 0.50000033 0 0.722222404293679 0 0.861111201756418 0.0815065892490916 0.50000033 0.0452814375049142 0.50000033 0.0226407187214924 0.50000033 0.086853206421423 0.509679206490503 0.0832574538736015 0.50510887464318 0.0821654365798237 0.502754162152689 0.101624718349277 0.519071755635629 0.0955271292358365 0.51596132326583 0.0909114260315624 0.513009583707017 0.115801209478417 0.524686714691289 0.107423330580455 0.521571366965194 0.111450093768399 0.523128163488185 0.14522680218064 0.533247098871843 0.12972749948954 0.529065522575409 0.123317920800864 0.527151258207763 0.174377338529506 0.539999454303556 0.157222187724502 0.53616019565611 0.1654782073887 0.538048511698592 0.20327792 0.54589052 0.186452479148005 0.542532715033751 0.194609102211554 0.544182555340283 0.292853996512273 0.558823680902877 0.241232225244852 0.551599792654817 0.219875905445374 0.548429369796558 0.34480012 0.56547934 0.322936488223873 0.562751920305746 0.308323491283586 0.560869310772247 0.502430083744267 0.582273314723503 0.435834786812764 0.575732838354294 0.392926448381856 0.571112598159139 0.742486979392384 0.600686126384672 0.604702953868726 0.591014874943199 0.672403137951256 0.596046205859523 1.28325724433633 0.619620986100931 0.983567929817892 0.612688216040706 1.13575756442584 0.617315992944488 1.4973277 0.61875053 1.38199331878948 0.619886540023156 1.44089092591635 0.619513462931 1.61331836212274 0.61576988267499 1.55715843223743 0.617457922745267 1.52605358541502 0.61819490274458 1.82243701492879 0.605418142870447 1.75234072038571 0.609611491146066 1.70256528002334 0.612140891664339 2.17568896064473 0.57204539935976 1.98345128106724 0.592885689398586 2.08128780577852 0.583145334178021 2.37107288856899 0.542690085222416 2.47762542431648 0.521959267729774 16 12 11 15 12 16 14 19 15 18 17 15 19 18 15 17 22 15 15 22 12 20 12 21 21 12 22 12 24 25 12 23 28 12 25 23 12 20 24 12 28 27 26 30 12 31 29 12 30 31 12 37 13 12 33 34 12 13 39 8 12 29 33 26 12 27 34 32 12 37 36 13 32 37 12 35 40 13 39 38 8 40 39 13 36 35 13 8 38 43 41 8 42 46 8 45 45 8 41 46 44 9 56 60 10 46 9 8 63 4 5 2 6 3 7 4 3 10 61 59 10 62 63 10 59 62 61 10 60 6 2 1 48 49 9 50 55 9 47 9 49 9 47 51 51 52 9 9 52 50 55 54 9 48 9 44 58 9 53 58 57 10 58 10 9 63 5 10 4 7 5 57 56 10 6 7 3 53 9 54 42 8 43 -32 30 1 0.345311223608769 -33.0949317119248 6.52779751805373 1.34157750972151 31.8489294108679 0.773620907424083 0.713412657138219 32.0213115109306 6.52591981196454 1.3601615736042 32.4987052702977 6.52272808810944 1.39214154656852 32.7970597574067 6.52497416733426 1.36974426905863 28.8816130593029 1.31007156310006 0.825958547744424 28.9242454674154 1.3040453060426 0.829974356619852 28.9053208004599 1.30672523639533 0.828191498524062 28.8934741437243 1.30839887530713 0.827075634695099 29.0193724633663 1.29042794006179 0.839087283506927 29.0784338380473 1.28186157139388 0.84478657121622 29.1372732207767 1.27324971270094 0.850442714275949 29.4200150342725 1.23091670093218 0.875938129190515 29.5981387665588 1.20365059634477 0.889055958426125 29.7795341835413 1.17563261596748 0.898584238481708 30.2321643814253 1.10541543653031 0.898725539057365 30.02922846873 1.13689975109556 0.903538082386562 29.9069072424127 1.15586846893199 0.90250950825837 30.292182671942 1.09603537854599 0.895836056217416 30.2650899957808 1.10027628860674 0.897220254404653 30.2485055338066 1.10286609724819 0.898005754909848 30.6273799791908 1.04199814688872 0.868682706724771 30.8117997461093 1.01015065506177 0.846758910297657 30.9858099377714 0.977906652997218 0.823001564625002 31.0184934603145 0.971560636306024 0.81836747505304 31.0388308672447 0.967563375295205 0.81544452499999 31.0591047654668 0.963540691337818 0.812517560127936 31.2862471602083 0.915659621508783 0.779518141965687 31.4263928926327 0.88339812558925 0.759926421383552 31.566908625913 0.848924345841429 0.741817258750537 31.7193577050282 0.809165463987107 0.724738984746363 31.6441503715087 0.829068641206165 0.732676223598864 0 1 2.72494532 1 0 0 0 0.444444437831131 0 0.722222222387279 2.52490070971683 0 2.52655024482567 0.0146345759481185 2.52581537000635 0.00813957210136278 2.52535750087977 0.00407275103451864 2.53031214999668 0.0472808441318947 2.53270463243108 0.0675413173755627 2.53513158141862 0.0877166749488884 2.54739637303198 0.18447852860782 2.55562268036927 0.245205988322578 2.56437509 0.30680216 2.58784952 0.4595214 2.57701527564615 0.391185851372213 2.57073658592053 0.349898119138573 2.59117950984538 0.479697286203414 2.58966796545961 0.470591461471659 2.58874954469512 0.465016066716156 2.6112974956462 0.592232596862048 2.62387175776644 0.65424914070945 2.63704064 0.7127592 2.63967302990539 0.723734617040796 2.64133795741275 0.730562631087989 2.6430183054988 0.737367675843688 2.66330154170101 0.813522039586772 2.67718331155926 0.860384355940065 2.69212772 0.90713174 2.70943412763741 0.95747740433802 2.70077156995582 0.932715808833024 3 6 9 9 8 3 3 8 7 7 10 3 4 10 11 3 10 4 4 11 12 5 4 18 13 4 12 5 22 1 14 4 13 14 15 4 18 17 5 15 18 4 16 5 17 16 21 5 20 19 5 21 20 5 22 23 1 24 25 1 23 24 1 19 22 5 26 27 1 28 29 1 27 28 1 30 32 1 31 2 1 32 31 1 29 30 1 25 26 1 -33 31 1 0.22002614328829 -28.7643514962333 1.33236617403399 0.776100355658662 28.7647189177685 1.33083926062504 0.786642361583877 28.7667858093201 1.32954883005284 0.793611284634292 28.7718042186219 1.32778267744969 0.80108843131585 28.7732356324845 1.32733174014952 0.802827533414292 28.7758361996172 1.32670846334943 0.804734949007174 28.7799729704748 1.32585040949468 0.806905170779541 28.7939464023144 1.32319585274502 0.812605118535826 28.7996852367409 1.32220465499208 0.814334145380745 28.8097933533917 1.3206519092276 0.816139042279523 28.8192381238403 1.31915032565627 0.818128210046003 28.8132975816628 1.32009277097036 0.816891630272316 28.8103912202937 1.32055450698852 0.816279673061782 28.8250979597599 1.31822776397475 0.819316570979007 28.8294260915591 1.31761011142509 0.81980088716013 28.836792424772 1.31659601257406 0.820380770538668 28.8412037998586 1.31601400415887 0.820572287179439 28.8451346362802 1.31543704139992 0.821102110061665 28.8499934198436 1.31471501874615 0.821812036463894 28.8623359158873 1.31301195536472 0.822802590013024 28.8586785090749 1.31352018068647 0.822490125557799 28.8544807632298 1.3140984728401 0.822158791757023 28.8683861667669 1.3121746813851 0.823287469606039 28.8724539903008 1.31154876837384 0.823977440281247 28.8816130593029 1.31007156310006 0.825958547744424 32.0213115109306 6.52591981196454 1.3601615736042 31.9768135388171 6.52772034505006 1.34215900474913 31.9777141338021 6.52713956390073 1.34796364316376 31.9801838030808 6.5267974488231 1.3513832533026 31.9853169721851 6.52653976915668 1.35395944627219 31.9935667292365 6.52630888437399 1.35626836623374 32.0062896455014 6.52612466153763 1.35811170086215 32.0138321046462 6.52604139231613 1.35894519719741 1 55.31688457 0.929479298708875 55.3214615366851 0.881372758311661 55.3264493430731 0.81865078 55.33426732 0.802582921532167 55.3364092423319 0.779283329310054 55.3395189212652 0.74578591 55.34399089 0.63759465085887 55.3582676795818 0.594224805776652 55.3637509029348 0.51663621 55.37327277 0.46774262 55.37928407 0.494606067829927 55.375970697009 0.515917250025268 55.3733603516233 0.408012517503883 55.3865658070137 0.376957233266326 55.3902177619842 0.32499996 55.39620377 0.293629416887114 55.3998518907221 0.264831999844551 55.4032399646978 0.22896476 55.40748034 0.1565789 55.41588432 0.16792425592056 55.414581427696 0.191219692948761 55.4118881134894 0.0979674597361697 55.4227301992158 0.0680852803126617 55.4263892737324 0 55.4348855 2.77555756156289e-017 0 1 1.77635683940025e-015 0.890649992448846 1.77635683940025e-015 0.810933866278635 1.77635683940025e-015 0.701583945198312 1.77635683940025e-015 0.537558801987252 1.77635683940025e-015 0.291521416014062 1.77635683940025e-015 0.145760710083872 1.77635683940025e-015 16 17 5 26 4 17 33 1 26 26 17 18 11 14 15 15 16 11 12 11 16 33 32 1 23 26 20 24 25 26 23 24 26 18 19 22 21 20 22 22 20 18 26 18 20 26 2 3 31 30 1 1 30 29 3 4 26 28 27 1 26 1 2 1 29 28 7 9 10 7 10 13 6 13 12 12 16 6 9 7 8 13 6 7 5 6 16 4 5 17 32 31 1 -35 33 1 0.428801359740674 -31.5453892345755 -2.84358518024543e-010 1.57010472795097 33.1092560926052 5.44269516439137e-020 7.84503997861939 31.3042272068709 -0.045332982233201 7.84504008261939 32.3086822088097 -0.0914947505508274 7.84504136143887 31.8051155939439 -0.0970237300769621 7.84503946488651 26.4173907547587 -0.130843791807996 1.88911937635335 26.4796660986241 -0.143183262911529 1.88432580371304 26.5346538840633 -0.153521508196896 1.88007883614836 26.6072787699614 -0.166388614178154 1.87446002380946 26.6586276697487 -0.174959781830892 1.87048742923244 26.6888152939273 -0.17979563280285 1.86815519603804 26.7177243957574 -0.184290307132866 1.86592274115955 26.9078415571464 -0.210778000466012 1.85134784245198 27.0131132467513 -0.223382967335193 1.84337809778228 27.1183300885413 -0.234506035890649 1.83552196484067 27.9580998698248 -0.287213545516178 1.7762104150262 27.567626757566 -0.270034757765977 1.8029936064384 27.3358664899854 -0.253946620484933 1.81956045869635 29.1292698538506 -0.275729591350411 1.7037141474904 28.6334589290037 -0.292071289867517 1.7329750252157 28.2989317935834 -0.293671638691864 1.75387657490008 29.1613437747115 -0.274081063433766 1.70188983029626 29.1818358720314 -0.272988601967243 1.70072876380782 29.2028253447147 -0.271838291522898 1.6995424104655 29.3197663146451 -0.264842639626139 1.6929978065375 29.4093488458609 -0.258805174375594 1.68805023500084 29.5198370703048 -0.250491600836839 1.68203176886297 29.7962755978589 -0.226147853981709 1.66725163524541 29.9202605957203 -0.213653509011079 1.66072333797826 30.0394633975859 -0.200907417501252 1.65446187752303 30.9280263125 -0.0873089211861623 1.60695769477569 30.550479791337 -0.138859069750576 1.62752689019242 30.2987102629447 -0.170830825639444 1.64085165237989 31.2974821280361 -0.0350370328811884 1.58556635694182 31.1204332596283 -0.0602117432064407 1.59601490368986 1 0.06075625 1 2.01729017 0 2.01729017 0.555555553307846 2.01729017 0.277777777027323 2.01729017 6.93889390390723e-018 0.0712102200000001 0.0124251627502104 0.0709402117110324 0.0233702261067932 0.070698659148771 0.03779578 0.07037827 0.0479795544267559 0.0701527836046693 0.0539616716906871 0.0700215440564152 0.0596871747500459 0.0698968908722486 0.0972390059617129 0.0691103080057912 0.117942363339759 0.0687081797021 0.13858066 0.0683359 0.30221679 0.06638239 0.226368184455449 0.0670882531338894 0.181165856777876 0.067666753855789 0.5289847 0.06590575 0.433081830475051 0.0658586126025316 0.368325039801286 0.0660184987155747 0.535192672184978 0.0659173356833845 0.539159298234031 0.0659251977095103 0.543222487858905 0.0659335805384061 0.565865721764792 0.0659849282280304 0.583218299077933 0.0660277700678352 0.6046294 0.06608293 0.658250585771128 0.0662019648164862 0.682333272973572 0.0662288979675802 0.70550968 0.06622642 0.87898407 0.06464678 0.805109854648362 0.0657295067884835 0.75598493234938 0.0660863351751172 0.951382494838612 0.0627020391751489 0.916677350626046 0.0637587032093211 14 15 5 3 13 14 18 5 15 16 21 5 5 17 16 5 18 17 5 21 20 7 8 3 3 6 7 8 9 3 13 3 12 11 3 10 11 12 3 10 3 9 14 5 3 20 4 5 4 19 22 4 22 23 4 23 24 34 1 2 31 35 2 32 31 2 34 2 35 25 26 4 4 27 28 27 4 26 25 4 24 33 4 30 4 33 2 4 29 30 33 32 2 29 4 28 19 4 20 -24 22 1 0.258165537963384 -26.1604470425545 1.29120852074267e-009 1.90984293371267 26.16297935419 -0.0119716913282133 1.90964298445692 26.1658087682057 -0.0189680626996516 1.90940581263074 26.1715862117354 -0.0280173105944252 1.90892945299891 26.1863118813827 -0.0433001563473664 1.90770661217708 26.1954881750896 -0.0500150577228376 1.90696336908379 26.2028398511069 -0.0548219693764112 1.90636315498107 26.225945537031 -0.0676881079965739 1.90448562176552 26.2150120552164 -0.0619762244923438 1.90537246653922 26.2087177735819 -0.0584142365146393 1.90588381244474 26.2531402001709 -0.0800726013455102 1.90228448212112 26.2689057860584 -0.0862035780193151 1.90101845529926 26.2933957876783 -0.0947700580217579 1.89906779612862 26.3568970264124 -0.114423615185575 1.89398475508142 26.3264655611822 -0.105493874271201 1.89641771625628 26.309288792086 -0.100079291294985 1.89779321830789 26.4173907547587 -0.130843791807996 1.88911937635335 26.3888784366182 -0.123358724927798 1.89141279465136 26.3724029063813 -0.118865967617964 1.89273568280923 31.3042272068709 -0.045332982233201 7.84504008261939 31.209191012357 0 7.84504046261941 31.2573212284383 -0.0325549187331713 7.8450404699125 31.214218154715 -0.0108582292801317 7.84504046260651 31.2106814480184 -0.00591115109558985 7.84504046261941 1 36.81695782 0.960718064565496 36.8167447995912 0.936372533292469 36.8167502044199 0.90074562 36.81686472 0.83076599375106 36.8171030290632 0.793182901214103 36.8171748043312 0.76421366 36.81717981 0.67713246 36.81712964 0.717767643374287 36.8171078848962 0.741548849706821 36.8171440270379 0.577952780427867 36.818379372264 0.521384233715112 36.8202736852961 0.43419735 36.82418923 0.21070762 36.8342907 0.317286097727714 36.8296194244656 0.37782891158817 36.8268571226119 0 36.84377716 0.099167988399795 36.8391340294108 0.156538482263433 36.8366170897275 0 3.32701216511258e-015 1 0 0.444444443041851 0 0.88888889594596 0 0.944444432485049 0 13 20 12 11 20 22 20 13 16 11 12 20 8 11 22 22 23 8 18 17 20 18 20 19 20 15 14 14 19 20 15 20 16 23 3 4 3 23 24 23 4 5 24 21 2 2 21 1 24 2 3 9 23 10 7 10 6 5 6 10 10 23 5 23 9 8 -18 16 1 0.583442097712011 -25.9893209344264 3.4350001633999e-008 1.92052189721989 25.9893209277346 0.622738850522369 1.80763468226896 25.9893209176324 0.961750329511054 1.63721696604229 25.9893209044264 1.24079115393441 1.41444155318237 20.1549001573063 1.36866520500811 1.41444156718237 22.7577054944309 1.328667200288 1.41444156267208 24.3747918622912 1.29342804502507 1.41444155867448 20.1549001573063 -1.3686672230082 1.41444126018235 20.1549001573063 -0.991577350396557 1.70425624606726 20.1549001573063 -0.523003820875509 1.90359871190365 20.1549001573063 -1.07200182797921e-006 1.97500009347699 20.1549001573063 0.523001692921592 1.9035988292163 20.1549001573063 0.991575267251248 1.70425646848375 25.9893209044264 -1.2407928679345 1.41444127418235 23.406045317914 -1.31522402231752 1.41444127001226 21.7814857070444 -1.34778248565821 1.41444126571733 25.9893209277346 -0.622739697573988 1.80763490020278 25.9893209176324 -0.961751686580763 1.63721701225842 1.88324107 0.50000033 1.88324107 0.722222404293678 1.88324107 0.861111201756417 1.88324107 1 1.11022302462516e-016 1 0.836996029442632 1 1.36011854903985 1 0 0 0 0.166666666137581 0 0.33333333302908 0 0.500000000017073 0 0.666666667026959 0 0.833333333931665 1.88324107 0 1.04624503722002 0 0.523122517929763 0 1.88324107 0.277777959779155 1.88324107 0.138888980111319 9 8 16 10 16 11 16 10 9 12 11 6 13 6 5 6 13 12 11 16 6 16 15 6 15 14 18 18 17 15 15 17 1 7 2 3 2 7 1 7 3 4 7 15 1 15 7 6 -33 51 1 0.0424735882339974 -32.949284715007 -9.00000027138652e-011 1.41444141318236 32.949284715007 -9.00000027138652e-011 1.41444141318236 32.4183773097902 0.208515993143978 1.41444143718236 32.6556405042146 0.118916540025242 1.41444142684491 32.8028878998831 0.0604304092497776 1.4144414202837 32.4183771497902 -9.50500045162309e-008 1.51294273986092 32.4183771840198 0.0829587675855682 1.49987962592338 32.4183772410521 0.154689444059622 1.46422661035881 32.4183772197902 -0.208516963644024 1.41444139018236 32.4183771503997 -0.0829592820545684 1.49987978489793 32.4183771763235 -0.15469024840092 1.46422673003255 32.7146390206246 -0.0957544927099734 1.41444140260348 32.5669008295882 -0.153086954362354 1.41444139622574 32.5679191103561 -0.115231831608535 1.4546345577777 32.656604658151 -0.089794319640221 1.44611136149147 32.7154102617014 -0.0722958096260339 1.43977737178276 32.8032796167432 -0.0454708200290793 1.42990031483258 32.5686483372017 -0.0626898197218934 1.48341833765921 32.6572950492212 -0.0490003822554707 1.46879137288378 32.7159625708137 -0.0394472010196275 1.45792138090482 32.803560079247 -0.0247287071723173 1.44097099942293 32.5689155188163 -1.68360937886939e-007 1.49396449646919 32.6575479970692 -1.74072356645945e-007 1.47710116406332 32.7161649248671 -1.62617254369245e-007 1.46456921386244 32.803662830844 -1.23163014126692e-007 1.4450272143848 32.568648324002 0.0626892095611296 1.48341829366161 32.6572950228154 0.0489998156003679 1.46879135161249 32.71596254137 0.0394466999697922 1.4579213639354 32.8035600533728 0.0247283531599484 1.4409709826198 32.5679190733953 0.115230965696907 1.4546345384192 32.6566045970337 0.0897935468025445 1.44611135860697 32.7154101973583 0.0722951426519566 1.43977736959282 32.8032795639041 0.0454703652055359 1.42990030768116 1.97290517 0 1.97290517 1 0 1 0.876846742222222 1 1.42487595611111 1 0 0.500000869991061 0 0.666667246674566 0 0.83333362335807 0 0 0 0.333333912887267 0 0.166666957141603 1.09605842777778 0 0.548029213888889 0 0.548029213888889 0.166666957141603 0.876846742222222 0.166666957141603 1.09605842777778 0.166666957141603 1.42487595611111 0.166666957141603 0.548029213888889 0.333333912887267 0.876846742222222 0.333333912887267 1.09605842777778 0.333333912887267 1.42487595611111 0.333333912887267 0.548029213888889 0.500000869991061 0.876846742222222 0.500000869991061 1.09605842777778 0.500000869991061 1.42487595611111 0.500000869991061 0.548029213888889 0.666667246674566 0.876846742222222 0.666667246674566 1.09605842777778 0.666667246674566 1.42487595611111 0.666667246674566 0.548029213888889 0.83333362335807 0.876846742222222 0.83333362335807 1.09605842777778 0.83333362335807 1.42487595611111 0.83333362335807 9 13 11 14 10 11 11 13 14 14 15 19 15 14 13 18 19 23 19 18 14 15 16 19 14 18 10 13 12 15 10 18 22 7 6 22 3 8 30 7 26 8 22 23 26 23 22 18 26 30 8 27 30 26 26 23 27 22 26 7 6 10 22 3 30 4 19 20 23 20 19 16 16 12 17 24 27 23 24 20 21 16 17 20 24 23 20 17 1 21 1 17 12 21 25 24 25 21 1 1 2 25 17 21 20 24 25 29 27 28 31 28 27 24 31 4 30 32 4 31 31 28 32 27 31 30 32 29 33 29 32 28 33 2 5 2 33 29 33 5 32 29 25 2 32 5 4 28 24 29 16 15 12 -24 22 1 0.282461185539926 -26.3562983810869 0.114252097615382 1.89403270786429 26.3818007890439 0.12144573198209 1.89198113960143 26.3990505688981 0.126068501792152 1.8905950987804 26.4173906772587 0.130843789250621 1.88911927247835 26.2947290518789 0.0952205365879649 1.89896106160379 26.3200376899274 0.103503256588306 1.89693215405746 26.3374739850788 0.108833833019026 1.89553572090951 26.2619184493791 0.083561819205891 1.90158050552179 26.2484477512437 0.0781177992130321 1.90266404669542 26.2326379467513 0.0709475047871804 1.90394341438878 26.2028087589921 0.0548123556327908 1.9063653740577 26.2150086249086 0.0619926096048508 1.90537206388674 26.2234921335773 0.0664455195754171 1.90468469504564 26.189882469742 0.0460497856865718 1.90741776381651 26.1799182967975 0.0376980116864272 1.90823017260473 26.1715471689517 0.0279738538942231 1.9089325016117 26.1639709430298 0.0147580028840625 1.90955992124741 26.1618235443497 0.00794164992969804 1.90973844543037 26.1604470425545 1.29120852074267e-009 1.90984293371267 31.209191012357 0 7.84504046261941 31.3042272068709 0.045332982233201 7.84504008261939 31.2573212284383 0.0325549187331713 7.8450404699125 31.214218154715 0.0108582292801317 7.84504046260651 31.2106814480184 0.00591115109558985 7.84504046261941 0.21279921 1.3577497 0.123804803977502 1.35390856755522 0.0637759908304388 1.35120971780753 1.38777878078145e-017 1.34817287 0.42945929 1.36753154 0.339897896744433 1.36334418109214 0.27861683057981 1.36060808124842 0.54640222965543 1.3726200758382 0.594896512964072 1.37397626155616 0.65252552 1.37471381 0.76431717 1.37477091 0.717742763181472 1.37485108901777 0.686193088783939 1.37484764586417 0.815881614311392 1.37481446133752 0.85868632515484 1.37492848979906 0.90093908 1.37508615 0.951275073697386 1.37521518162329 0.974028650815289 1.37516517607642 1 1.37499288 1 38.1919507 0 38.1919507 0.444444443041867 38.1919507 0.888888895945938 38.1919507 0.944444432485034 38.1919507 3 2 21 4 3 21 21 1 7 2 1 21 6 21 7 22 21 9 5 21 6 8 21 5 9 10 22 8 9 21 22 10 13 23 12 11 23 13 12 23 11 14 15 23 14 24 23 17 16 23 15 17 23 16 17 18 20 20 18 19 17 20 24 13 23 22 -35 33 1 0.43937716626736 -26.4173906772587 0.130843789250621 1.88911927247835 31.3042272068709 0.045332982233201 7.84504008261939 33.1092560926052 5.44269516439137e-020 7.84503997861939 32.3086822088097 0.0914947505508274 7.84504136143887 31.8051155939439 0.0970237300769621 7.84503946488651 31.5453892345755 -2.84358518024543e-010 1.57010472795097 30.6808170131304 0.121342621013034 1.6205390678069 31.1086577178288 0.0618835874087544 1.59669559458129 31.3421690339281 0.0286901154478397 1.58285885656689 29.9096528327914 0.214788315729654 1.66127598524551 30.2606988416976 0.175442989669553 1.6428490049406 30.4743973175524 0.14876224650314 1.63157546501856 29.7570588007104 0.229909783459046 1.6693311118734 29.6488092585267 0.239790153443118 1.67508539259711 29.4547613552504 0.255473155076532 1.68556831110325 29.3327523984168 0.264004103076551 1.6922753174138 29.2651935800711 0.26823134523516 1.69603952443472 29.2028255741547 0.27183817160682 1.69954302339893 28.7384764405596 0.28999596408343 1.72661155909216 28.9525485344631 0.283498782637376 1.7139142837955 29.080328046327 0.278101314484627 1.70651387526967 27.5696395674809 0.269948992087055 1.8028810686892 28.0898407741276 0.29081384122899 1.76743340752449 28.419013365545 0.29396446657624 1.74626305598417 27.0541544954677 0.227810155714067 1.84031084674953 27.2733749041966 0.248796156392257 1.82410843435988 27.4188170852615 0.260235353486048 1.81357583446897 26.9118186458812 0.211279568586009 1.85104449835924 26.8201524801184 0.199193719955699 1.85804594221987 26.717724389624 0.184290379536009 1.86592236141589 26.6712115051438 0.176993629410622 1.86951457808231 26.6401456646534 0.171925690138112 1.87191623822949 26.6072800710749 0.166388895327828 1.87445963020711 26.497758156013 0.146642025541961 1.88292900281966 26.452520640201 0.137887662794991 1.88641830850779 0.0712101900000001 0 2.01729017 0 2.01729017 1 2.01729017 0.555555553307846 2.01729017 0.277777777027323 0.06075625 1 0.06544933 0.8306101 0.0638197613882175 0.914368388473605 0.0623943039364484 0.960143533097259 0.06622745 0.68027135 0.0661210279516263 0.748586986986762 0.0658717600010783 0.790272041259764 0.0661903728186969 0.650637477320625 0.0661447059444535 0.629635049047138 0.06604976 0.59201791 0.0659904426791326 0.568380985207597 0.065960085836595 0.555297628433983 0.0659340686464917 0.543222394527479 0.065844 0.45339225 0.0658577212342962 0.494791824517023 0.0658900107303555 0.519512846533598 0.06708392 0.22674332 0.0662153769472633 0.327790201100006 0.0659393436457752 0.391562805597849 0.06855952 0.12599594 0.0678472655831486 0.168949397223577 0.0674462043362039 0.197358939356225 0.0690944012274148 0.0980224390735439 0.0694645704689796 0.079943050921233 0.0698967092057798 0.0596872562155088 0.0700978462752093 0.0504736787144597 0.0702335374529601 0.0443154686115767 0.07037813 0.0377961 0.0708607736659958 0.0160288671615802 0.0710586380566215 0.00701323919245223 4 21 20 21 4 18 19 4 20 18 4 17 4 16 17 16 4 15 24 4 19 8 7 3 6 9 3 8 3 9 4 14 15 12 11 4 13 14 4 7 12 3 23 5 24 2 30 31 2 29 30 31 32 2 1 2 35 34 35 2 33 34 2 2 32 33 29 2 28 22 27 5 10 13 4 23 22 5 5 27 26 28 2 25 24 5 4 12 4 3 2 5 25 26 25 5 4 11 10 -17 15 1 0.112210986329735 -31.9768135388171 -6.52772034505006 1.34215900474913 31.9777141338021 -6.52713956390073 1.34796364316376 31.9801838030808 -6.5267974488231 1.3513832533026 31.9853169721851 -6.52653976915668 1.35395944627219 31.9935667292365 -6.52630888437399 1.35626836623374 32.0062896473528 -6.52612466140147 1.35811170070655 32.0138321032294 -6.52604139200468 1.35894519714692 32.0213115109306 -6.52591981196454 1.3601615736042 32.0208866309104 -6.53046184918028 1.31476716144809 31.9991551634254 -6.52957614241647 1.32361546480209 31.9866436463719 -6.52880411246834 1.33132921295403 33.0949317119248 -6.52779751805373 1.34157750972151 32.1988014065246 -6.53304116548185 1.28901898561674 32.4384468709181 -6.5337198707506 1.28227649389768 32.7675330815779 -6.53170020137228 1.30251747341929 32.6183926363032 -6.52324697041489 1.38697601508401 32.3192581063883 -6.52317677906596 1.38762674676116 9.08430689 0.65378958 9.07954933467699 0.606001069200609 9.06099287611262 0.576997433393715 9.02042579282433 0.553711709827798 8.95442112129845 0.531241049342995 8.85187036120109 0.51060958285297 8.79096146568251 0.500495687363648 8.73073355 0.48728331 8.71417242 0.85810406 8.89462397787365 0.795392599295824 8.99967068129442 0.737900063516617 0.000244080000000035 0.16805904 7.25740712767084 0.990286830738263 5.30750886177164 0.940213781930807 2.64287298665143 0.630592783133551 3.89175366063805 0.00643185648378282 6.3222668120758 0.132338366232751 15 12 16 16 17 14 8 13 17 15 16 14 13 14 17 9 13 8 8 7 9 10 7 6 6 5 10 4 11 5 10 5 11 2 1 4 1 11 4 2 4 3 7 10 9 -14 12 1 0.152501055974048 -31.3042272068709 -0.045332982233201 7.84504008261939 31.2573212284383 -0.0325549187331713 7.8450404699125 31.214218154715 -0.0108582292801317 7.84504046260651 31.2106814480184 -0.00591115109558985 7.84504046261941 31.209191012357 0 7.84504046261941 33.1092560926052 5.44269516439137e-020 7.84503997861939 32.3086822088097 -0.0914947505508274 7.84504136143887 31.8051155939439 -0.0970237300769621 7.84503946488651 31.3042272068709 0.045332982233201 7.84504008261939 32.3086822088097 0.0914947505508274 7.84504136143887 31.8051155939439 0.0970237300769621 7.84503946488651 31.2573212284383 0.0325549187331713 7.8450404699125 31.214218154715 0.0108582292801317 7.84504046260651 31.2106814480184 0.00591115109558985 7.84504046261941 7.60893367 0.43705553 7.80167028258057 0.366543983223373 7.97522430722938 0.259875694414461 7.98833301992329 0.237802844741737 7.99248988 0.21240573 0.000126649999999673 0.89142684 3.40032986333393 0.990190306102346 5.52048459281004 0.833486906479798 7.57653262 0.0556815799999999 3.33493499290033 0.220465268532575 5.45113838929357 0.017253017895388 7.77840211399344 0.0926678878724558 7.96746359357261 0.168528816190735 7.98410811213979 0.188073869795285 7 10 11 8 11 9 6 10 7 8 7 11 1 8 9 9 2 1 3 12 13 4 13 14 2 12 3 4 3 13 5 4 14 12 2 9 -226 378 1 0.410146768523421 -11.2476412635365 -1.7665596569946 -1.16638885628345 11.2414007844316 -1.76114051749876 -1.17553440686911 11.2376303451477 -1.75760057044684 -1.18145221620923 11.2339737223351 -1.75393664780752 -1.18752892052959 11.2776743680257 -1.78752160335813 -1.12995401782801 11.2983350089489 -1.79845944032001 -1.11022545541699 11.3208385076288 -1.80819404686211 -1.09222199876256 11.3456486455678 -1.81702108945771 -1.07551241680733 11.3624960418518 -1.82216862552671 -1.06559130850132 11.3805975561415 -1.82703782145984 -1.05608161268227 11.4383603506965 -1.83998407337006 -1.03017742118867 11.4135027931128 -1.8349587162813 -1.04034317746689 11.3978348159253 -1.83132768664625 -1.04760549729773 11.4896394008981 -1.84878792653291 -1.0120133489902 11.4603506451082 -1.84396087891282 -1.02202301790877 11.4490203116662 -1.84200116627584 -1.02605776551448 11.5049986892907 -1.8511955651312 -1.00696442186449 11.5150255720737 -1.85267801414463 -1.00383769946656 11.5253852575828 -1.85416377756769 -1.00069150837767 11.5686247880199 -1.85961621804369 -0.989014949325949 11.5459554346438 -1.85689489074905 -0.99485901052015 11.5354351965695 -1.85554034269393 -0.997755378621079 11.5734872711878 -1.86021587605612 -0.987719100086025 11.5766044926456 -1.86058016602381 -0.98693061940209 11.579795765572 -1.86090292936362 -0.98623107103987 11.5930647999869 -1.8624660378322 -0.982834541639796 11.601488815112 -1.86340783680259 -0.980779966337796 11.6098700549364 -1.86430064821477 -0.978826260728255 11.6689018442431 -1.87027896633348 -0.965602735826667 11.64397713815 -1.86795639507528 -0.970763765144991 11.630039757643 -1.86650994850731 -0.973966385385513 11.6722502070959 -1.870576961947 -0.964936636947661 11.6752197922217 -1.87084070912355 -0.964346635407782 11.6780822159487 -1.8710899238748 -0.963788802911312 11.7107019725161 -1.87402943667788 -0.957177203399168 11.6980802541729 -1.87285829829361 -0.959824525865733 11.690195586167 -1.87215028398156 -0.961414750965294 11.7230037068433 -1.87519299652087 -0.954539726978555 11.7165880947784 -1.87458745091292 -0.955914467644462 11.713429661304 -1.87428775450117 -0.956594460968703 11.7544106883045 -1.87810382833014 -0.947904141375154 11.7430061454837 -1.87707990578844 -0.950238559987098 11.7341178088253 -1.87625236211661 -0.952126134945495 13.0936999045215 -1.92471414973264 -0.831009732620803 12.3497089052311 -1.90673217518895 -0.878732655559849 12.7217176809472 -1.91796027199715 -0.849418938312193 14.0214149684814 -1.92384089900254 -0.832597729805518 13.5060312273872 -1.92741289910116 -0.823286283837871 13.7637275909558 -1.92659438288622 -0.825317042369079 15.4046111730498 -1.88092150688822 -0.938194333874812 14.8152663860065 -1.90682148376207 -0.87637661922074 14.4245629156867 -1.91747338208482 -0.8492654236681 16.7625925747914 -1.75437077638359 -1.18146657566026 16.0252284332646 -1.83732511149156 -1.03131861114356 16.4001980377112 -1.80023583329231 -1.10214761062571 17.2459916253906 -1.67360683680456 -1.30407191862759 16.9812751557499 -1.72099868072589 -1.23446829000819 17.1148730172093 -1.69810587898019 -1.26885931213382 20.1549001573063 -1.6722750014288 -1.30306872289244 20.1549001573063 -2.03433776185515 -0.381428035158878 20.1549001573063 -1.95022034564482 0.523458796790025 20.1549001573063 -1.70658877755618 1.02489508660368 20.1549001573063 -1.3686672230082 1.41444126018235 7.21279194058922 -1.34821673503686 1.41444126218235 7.21279194058922 -1.75566531738962 -1.18857460045426 7.21279194058922 -1.92602608816082 -0.832403553482803 7.21279194058922 -2.02310091040593 -0.461687436078569 7.21279194058922 -2.04976245518296 -0.0921278061564518 7.21279194058922 -2.01211427083126 0.262890442129314 7.21279194058922 -1.91847084190189 0.592801652915467 7.21279194058922 -1.7783657556307 0.889996626104645 7.21279194058922 -1.57942544328536 1.17705709132012 17.2456992084818 -1.72088168732072 -1.23439046572118 17.245474166801 -1.75420284977649 -1.18127815703735 17.2451345455274 -1.79989382015062 -1.10197660435692 17.2450155207902 -1.8146869475819 -1.07442707312191 17.2446908382941 -1.85205345220569 -0.999916414439188 17.2444178640205 -1.88029610491588 -0.937997464098639 17.2422184302559 -2.02211119435132 -0.463265706955977 17.2418150645178 -2.03447369034649 -0.380866446726228 17.2403570385691 -2.05129064355117 -0.0950732847893486 17.2383979907236 -2.01648066351915 0.259215256645701 17.236790094195 -1.94826227627782 0.524558927831619 17.2363767776504 -1.92579837765545 0.589062817203975 17.2343252035086 -1.78859874045289 0.88683086497216 17.2332683958969 -1.70319057549525 1.02566653907126 17.2320350292738 -1.59265486897854 1.17519218321051 16.4000573859785 -1.81502126437267 -1.07458252556342 16.3996737141812 -1.85236519429687 -1.00003083860249 16.3993511506929 -1.88058721522263 -0.938078972784014 16.3967523480476 -2.02219462603452 -0.463132661180299 16.3962757758483 -2.03451314678262 -0.380703442391287 16.39455322696 -2.05116174417144 -0.0948248401022932 16.3922389869329 -2.01611214098447 0.259525441336532 16.3903397610127 -1.94769430421005 0.52487804169259 16.3898515855789 -1.92517954287153 0.58937857418971 16.3874286081241 -1.78773397461164 0.887098395965617 16.386180595353 -1.70220531271502 1.02589021189281 16.384724175764 -1.59153607826066 1.17534989528336 16.0250582682841 -1.85250339660919 -1.00008156539244 16.0247179929403 -1.88071626951939 -0.938115106974434 16.0219765778541 -2.0222316092876 -0.463073684954289 16.0214738699655 -2.03453063652016 -0.380631187437319 16.0196568981832 -2.05110461036687 -0.0947147187366981 16.0172159082302 -2.0159488093483 0.259662917255133 16.0152127541685 -1.94744259217933 0.525019465573711 16.0146978784787 -1.92490529441052 0.589518507964672 16.0121424595191 -1.78735076998464 0.887216947305278 16.010826282026 -1.701768731435 1.02598932393256 16.0092903599214 -1.5910403547664 1.17541977574702 15.4016831011297 -2.02229282033783 -0.462976072967448 15.4011456590564 -2.0345595833459 -0.380511599394522 15.3992032218804 -2.05101005374565 -0.0945324676914733 15.3965938661655 -2.0156785132877 0.259890424923821 15.3944527079083 -1.94702605908222 0.525253493866802 15.393902384262 -1.92445147442628 0.589750067169292 15.3911711736825 -1.78671669622018 0.887413109641237 15.389764546868 -1.70104636341438 1.0261533149084 15.3881231540672 -1.59022016441074 1.17553539524755 14.8125892558695 -2.02235095242327 -0.462883370564781 14.8120286642897 -2.03458707357953 -0.380398028185638 14.8100026356011 -2.05092025991206 -0.0943593967495121 14.8072811754438 -2.01542185306921 0.260106455334555 14.805048188212 -1.94663056557076 0.525475701154894 14.8044742859226 -1.92402058481739 0.589969926323551 14.8016261979243 -1.7861147117648 0.887599344623405 14.8001594687951 -1.7003605831177 1.02630899984898 14.7984480215398 -1.58944155619574 1.17564515309993 14.4220120504504 -2.02238949469784 -0.462821907550224 14.4214413938824 -2.03460529964442 -0.380322729886949 14.4193790407331 -2.05086072901448 -0.0942446554617218 14.4166089143065 -2.01525170558143 0.260249668148819 14.4143361042004 -1.94636839565198 0.525623000856174 14.4137519827656 -1.92373495503439 0.590115667443438 14.4108532759307 -1.78571569342953 0.887722788330102 14.4093605406991 -1.69990603779717 1.02641219016096 14.4076188015682 -1.58892550448997 1.17571789924588 13.5036167441869 -2.02248012196757 -0.462677384475412 13.5030390199085 -2.03464815501696 -0.380145678002376 13.5009512462024 -2.05072076069735 -0.0939748774238449 13.4981472763038 -2.01485169246352 0.260586358430959 13.4958469563476 -1.94575208426972 0.525969274378377 13.4952558022941 -1.92306350644065 0.590458270697018 13.4923224230202 -1.78477778118064 0.888012948940926 13.4908119800304 -1.69883765718797 1.02665473268818 13.4890497059312 -1.58771262388525 1.1758888751921 13.0912529117666 -2.02252081406714 -0.462612492940897 13.0906795909069 -2.03466739695543 -0.380066182339461 13.0886077846526 -2.0506579196162 -0.0938537560881748 13.085825393867 -2.01467211595065 0.260737507653671 13.0835428917948 -1.94547542594813 0.526124714400697 13.0829563334331 -1.92276210303463 0.590612060267305 13.0800458596387 -1.7843568054241 0.888143185628471 13.0785472766653 -1.69835814459831 1.02676359108218 13.0767988963494 -1.587168287046 1.1759656086389 12.7191900892457 -2.02255752933301 -0.462553943409822 12.7186247711006 -2.03468475823249 -0.379994456743731 12.7165819326284 -2.05060122300499 -0.0937444776523012 12.7138385642705 -2.01451010643168 0.260873870780271 12.7115881759246 -1.94522584232512 0.526264942540161 12.7110098850283 -1.92249019896848 0.590750797937159 12.708140523897 -1.78397705279039 0.888260669158687 12.7066631679139 -1.69792559945334 1.02686178696523 12.704939603036 -1.58667728327911 1.17603482387885 12.3470539856268 -2.02259425190001 -0.462495382389372 12.3465004954607 -2.03470212282036 -0.379922717801477 12.3445004460878 -2.05054451798373 -0.0936351829194463 12.3418146568997 -2.01434808082849 0.26101024745493 12.3396116008084 -1.94497624409237 0.526405178880443 12.3390454876168 -1.92221828183707 0.590889542263246 12.3362366377782 -1.78359730168133 0.888378152201259 12.3347904945437 -1.69749306764621 1.02695997980521 12.333103393257 -1.58618631001928 1.17610403480703 11.7543565825971 -1.88218732868676 -0.938526990921237 11.7514837653232 -2.02265302319655 -0.462401660854069 11.7509571619651 -2.03472991304859 -0.379807907728422 11.7490543408778 -2.05045377245572 -0.0934602774471206 11.7464992936844 -2.01408880641271 0.26122847831056 11.7444036327531 -1.94457685654467 0.526629574075307 11.7438651387501 -1.92178318726636 0.591111547022159 11.7411934593325 -1.78298970310271 0.888566124047469 11.7398180255676 -1.69680104452405 1.0271170820136 11.7382134901256 -1.58540081628297 1.17621476332013 11.7340537106598 -1.88219432265343 -0.938528949173445 11.7311868284443 -2.02265502611599 -0.462398466841206 11.730661313966 -2.03473086013017 -0.37980399505491 11.728762429877 -2.05045067998721 -0.0934543169327487 11.7262126752076 -2.01407997109657 0.261235914982283 11.7241213604039 -1.94456324704027 0.526637220551197 11.7235839839205 -1.92176836114035 0.591119111975966 11.7209178535102 -1.78296899968398 0.888572529031847 11.7195452794409 -1.69677746493204 1.02712243502188 11.7179440825643 -1.58537405252071 1.17621853612068 11.713327870989 -1.88220146232492 -0.938530948221831 11.7104671114892 -2.02265707075594 -0.462395206297986 11.7099427203051 -2.03473182693888 -0.379800000883785 11.7080478976069 -2.0504475231118 -0.0934482322783962 11.7055036025921 -2.01407095179157 0.261243506517178 11.7034167710824 -1.94454935415928 0.526645026241697 11.702880547377 -1.92175322631404 0.591126834442465 11.700220140979 -1.78294786525227 0.888579067357989 11.6988505167502 -1.69675339448517 1.02712789946335 11.6972527636409 -1.58534673166601 1.17622238745271 11.6900510039412 -1.88220948077879 -0.938533193322008 11.6871971978704 -2.02265936705181 -0.462391544445083 11.6866740823688 -2.03473291274267 -0.379795515110289 11.6847838719934 -2.05044397769625 -0.0934413987400236 11.6822457771315 -2.01406082244293 0.261252032374101 11.680164036896 -1.94453375146081 0.526653792590083 11.6796291222834 -1.92173622883273 0.591135507318966 11.676975215982 -1.78292412986239 0.888586410338438 11.6756089414915 -1.6967263617954 1.02713403638929 11.6740150989613 -1.58531604861189 1.17622671274301 11.2982975386124 -1.80230098095006 -1.10318019747816 11.2981500089375 -1.81703988523804 -1.07552115409811 11.2977476054125 -1.85424738322577 -1.00072169015006 11.2974093289753 -1.88234473867492 -0.938571064413854 11.2946851085033 -2.02269810053658 -0.462329777092727 11.2941857640959 -2.03475122779217 -0.37971985047068 11.2923814926145 -2.0503841759842 -0.093326135107396 11.2899589040234 -2.0138899720066 0.261395836925314 11.2879719968928 -1.94427058871602 0.526801650105709 11.2874614640079 -1.9214495426769 0.591281787434019 11.2849286080145 -1.78252381114839 0.888710256303623 11.2836247065115 -1.69627043797818 1.02723753961009 11.2821036725173 -1.5847985680778 1.17629966028344 1.23463578 0.68972095 1.23284658696506 0.690205595970351 1.2316866332483 0.690498528028526 1.23049356 0.69078273 1.24172285999109 0.687391613110743 1.24553423894334 0.685791215189121 1.24899664963209 0.68404912640032 1.25219925600767 0.682130190885972 1.25409497793252 0.680827485678142 1.25592726076431 0.679433059270539 1.26080958600737 0.674960552107723 1.25887113755606 0.676878132489453 1.25752557275861 0.678096952742578 1.26428285310632 0.671006307371842 1.26237370729533 0.673264361378146 1.26158499890934 0.674137601779108 1.2652211519063 0.669817590446744 1.26581110377358 0.669043229113109 1.26640452 0.6682432 1.26861337345316 0.664905705801424 1.26749642006149 0.666653348134003 1.26695189598848 0.667466782827934 1.26884718256723 0.664528998493133 1.26899548224961 0.664288316380886 1.26914508582996 0.664044173172146 1.26976556762107 0.663017420225937 1.27015164061116 0.662367011031586 1.27052968019006 0.661721221283981 1.2729392 0.657288339999999 1.27201078014959 0.659088246296759 1.27143469361755 0.660138391642881 1.27312434197006 0.656903924101066 1.27323489422485 0.656674680810075 1.27334147610436 0.656453911880128 1.27457777 0.65393546 1.27409137720417 0.654910772578937 1.27379419844067 0.655519651599742 1.27506871855941 0.652985405529875 1.27481274113662 0.653480916473531 1.27468673660815 0.653724697576594 1.2763119 0.65056074 1.27586498346279 0.651440213176755 1.2755117859052 0.652126426294766 1.29799451828249 0.547152452135888 1.2891756123624 0.604606993901469 1.29459350069256 0.575881439509494 1.2976885 0.47548071 1.29940756578235 0.515300981350358 1.29903211278306 0.495391669789183 1.27806415187964 0.368547891748681 1.28957986624035 0.414120325180472 1.29460510704401 0.444322870583339 1.23141809167887 0.263458495843353 1.26047906908807 0.320537136456713 1.24689143789924 0.291517174769145 1.20676907 0.22601628 1.2208706104033 0.246523857272522 1.213943629902 0.236174916201214 1.20676907 0 1.37999003591338 0 1.55321100093982 0 1.6686916451083 0 1.78417229 0 1.78417229 1.00000000011581 1.23049356 1 1.29776552241837 1 1.36503748835584 0.999999999999996 1.4323094543971 1 1.49958142057092 0.999999999999999 1.56685338684047 1 1.63412535310954 1 1.70914882161134 1 1.2208706104033 0.22601628 1.23141809167887 0.22601628 1.24689143789924 0.22601628 1.25219925600767 0.22601628 1.26640452 0.22601628 1.27806415187964 0.22601628 1.36503748835584 0.22601628 1.37999003591338 0.22601628 1.4323094543971 0.22601628 1.49958142057092 0.22601628 1.55321100093982 0.22601628 1.56685338684047 0.22601628 1.63412535310954 0.22601628 1.6686916451083 0.22601628 1.70914882161134 0.22601628 1.25219925600767 0.291517174769145 1.26640452 0.291517174769145 1.27806415187964 0.291517174769145 1.36503748835584 0.291517174769145 1.37999003591338 0.291517174769145 1.4323094543971 0.291517174769145 1.49958142057092 0.291517174769145 1.55321100093982 0.291517174769145 1.56685338684047 0.291517174769145 1.63412535310954 0.291517174769145 1.6686916451083 0.291517174769145 1.70914882161134 0.291517174769145 1.26640452 0.320537136456713 1.27806415187964 0.320537136456713 1.36503748835584 0.320537136456713 1.37999003591338 0.320537136456713 1.4323094543971 0.320537136456713 1.49958142057092 0.320537136456713 1.55321100093982 0.320537136456713 1.56685338684047 0.320537136456713 1.63412535310954 0.320537136456713 1.6686916451083 0.320537136456713 1.70914882161134 0.320537136456713 1.36503748835584 0.368547891748681 1.37999003591338 0.368547891748681 1.4323094543971 0.368547891748681 1.49958142057092 0.368547891748681 1.55321100093982 0.368547891748681 1.56685338684047 0.368547891748681 1.63412535310954 0.368547891748681 1.6686916451083 0.368547891748681 1.70914882161134 0.368547891748681 1.36503748835584 0.414120325180472 1.37999003591338 0.414120325180472 1.4323094543971 0.414120325180472 1.49958142057092 0.414120325180472 1.55321100093982 0.414120325180472 1.56685338684047 0.414120325180472 1.63412535310954 0.414120325180472 1.6686916451083 0.414120325180472 1.70914882161134 0.414120325180472 1.36503748835584 0.444322870583339 1.37999003591338 0.444322870583339 1.4323094543971 0.444322870583339 1.49958142057092 0.444322870583339 1.55321100093982 0.444322870583339 1.56685338684047 0.444322870583339 1.63412535310954 0.444322870583339 1.6686916451083 0.444322870583339 1.70914882161134 0.444322870583339 1.36503748835584 0.515300981350358 1.37999003591338 0.515300981350358 1.4323094543971 0.515300981350358 1.49958142057092 0.515300981350358 1.55321100093982 0.515300981350358 1.56685338684047 0.515300981350358 1.63412535310954 0.515300981350358 1.6686916451083 0.515300981350358 1.70914882161134 0.515300981350358 1.36503748835584 0.547152452135888 1.37999003591338 0.547152452135888 1.4323094543971 0.547152452135888 1.49958142057092 0.547152452135888 1.55321100093982 0.547152452135888 1.56685338684047 0.547152452135888 1.63412535310954 0.547152452135888 1.6686916451083 0.547152452135888 1.70914882161134 0.547152452135888 1.36503748835584 0.575881439509494 1.37999003591338 0.575881439509494 1.4323094543971 0.575881439509494 1.49958142057092 0.575881439509494 1.55321100093982 0.575881439509494 1.56685338684047 0.575881439509494 1.63412535310954 0.575881439509494 1.6686916451083 0.575881439509494 1.70914882161134 0.575881439509494 1.36503748835584 0.604606993901469 1.37999003591338 0.604606993901469 1.4323094543971 0.604606993901469 1.49958142057092 0.604606993901469 1.55321100093982 0.604606993901469 1.56685338684047 0.604606993901469 1.63412535310954 0.604606993901469 1.6686916451083 0.604606993901469 1.70914882161134 0.604606993901469 1.27806415187964 0.65056074 1.36503748835584 0.65056074 1.37999003591338 0.65056074 1.4323094543971 0.65056074 1.49958142057092 0.65056074 1.55321100093982 0.65056074 1.56685338684047 0.65056074 1.63412535310954 0.65056074 1.6686916451083 0.65056074 1.70914882161134 0.65056074 1.27806415187964 0.652126426294766 1.36503748835584 0.652126426294766 1.37999003591338 0.652126426294766 1.4323094543971 0.652126426294766 1.49958142057092 0.652126426294766 1.55321100093982 0.652126426294766 1.56685338684047 0.652126426294766 1.63412535310954 0.652126426294766 1.6686916451083 0.652126426294766 1.70914882161134 0.652126426294766 1.27806415187964 0.653724697576594 1.36503748835584 0.653724697576594 1.37999003591338 0.653724697576594 1.4323094543971 0.653724697576594 1.49958142057092 0.653724697576594 1.55321100093982 0.653724697576594 1.56685338684047 0.653724697576594 1.63412535310954 0.653724697576594 1.6686916451083 0.653724697576594 1.70914882161134 0.653724697576594 1.27806415187964 0.655519651599742 1.36503748835584 0.655519651599742 1.37999003591338 0.655519651599742 1.4323094543971 0.655519651599742 1.49958142057092 0.655519651599742 1.55321100093982 0.655519651599742 1.56685338684047 0.655519651599742 1.63412535310954 0.655519651599742 1.6686916451083 0.655519651599742 1.70914882161134 0.655519651599742 1.24689143789924 0.685791215189121 1.25219925600767 0.685791215189121 1.26640452 0.685791215189121 1.27806415187964 0.685791215189121 1.36503748835584 0.685791215189121 1.37999003591338 0.685791215189121 1.4323094543971 0.685791215189121 1.49958142057092 0.685791215189121 1.55321100093982 0.685791215189121 1.56685338684047 0.685791215189121 1.63412535310954 0.685791215189121 1.6686916451083 0.685791215189121 1.70914882161134 0.685791215189121 59 73 56 73 59 74 56 73 58 75 57 58 57 78 53 74 75 58 58 73 74 59 75 74 57 76 77 76 75 59 77 76 59 78 57 77 55 88 54 53 88 55 91 90 53 88 53 89 90 89 53 88 89 54 77 59 78 57 75 76 59 60 78 89 100 54 100 89 90 100 90 101 43 42 184 50 100 101 50 54 100 42 41 174 50 101 102 111 51 50 90 91 101 174 184 42 175 184 174 45 46 165 174 41 45 175 174 45 51 120 52 43 184 38 78 79 53 91 79 80 91 53 79 102 91 92 102 101 91 120 51 111 103 111 102 129 47 52 121 129 120 120 111 112 129 52 120 80 79 60 111 50 102 80 81 92 81 80 60 103 92 93 80 92 91 103 112 111 104 112 103 121 130 129 122 130 121 121 112 113 112 121 120 130 131 139 92 103 102 60 82 81 129 130 47 49 47 138 48 49 138 48 147 44 147 48 138 147 156 44 156 147 148 138 139 147 156 165 46 47 139 138 157 156 148 140 148 139 149 157 148 157 165 156 175 45 165 175 165 166 166 176 175 167 176 166 165 157 166 184 175 185 166 157 158 148 147 139 47 130 139 46 44 156 176 177 186 79 78 60 186 175 176 217 15 14 217 16 15 216 13 217 217 12 11 217 13 12 11 16 217 205 20 23 218 21 20 217 17 18 217 19 22 217 18 19 22 21 217 217 14 17 215 1 5 216 2 1 4 66 65 3 217 4 3 2 217 5 6 214 9 10 216 8 9 216 214 7 215 7 214 6 215 216 1 215 7 8 8 216 215 214 215 5 10 13 216 217 2 216 205 23 24 39 38 194 40 39 194 204 37 36 35 194 36 194 35 40 204 36 194 184 194 38 185 186 195 186 185 175 195 186 196 195 204 194 204 205 26 204 195 205 196 206 205 197 206 196 195 196 205 205 206 219 196 186 187 195 194 185 184 185 194 37 204 34 29 204 30 30 204 31 26 205 25 28 204 27 27 204 26 204 28 31 218 217 21 33 204 32 33 34 204 4 217 218 4 67 66 4 218 67 68 67 219 219 67 218 205 218 20 205 219 218 32 204 29 25 205 24 219 206 207 93 92 81 93 82 94 93 81 82 94 82 83 93 94 105 104 113 112 113 104 105 105 114 113 114 105 106 104 93 105 113 114 123 94 95 105 93 104 103 61 84 83 84 61 85 83 84 96 61 83 82 95 106 105 106 95 96 96 107 106 107 96 97 95 83 96 114 106 115 84 85 96 83 95 94 60 61 82 116 106 107 122 123 131 122 113 123 131 123 132 122 131 130 140 149 148 149 140 141 132 141 140 141 132 133 140 131 132 149 141 150 123 124 132 131 140 139 115 116 124 116 115 106 133 124 125 133 132 124 141 142 150 141 133 142 142 151 150 143 151 142 142 133 134 150 151 160 116 125 124 124 123 115 114 115 123 149 150 159 107 108 116 113 122 121 85 62 86 97 96 85 86 62 87 85 86 98 117 116 108 108 97 98 109 108 98 108 109 117 97 85 98 117 125 116 86 87 98 108 107 97 87 63 99 99 98 87 99 63 110 99 109 98 109 118 117 118 109 110 110 119 118 119 110 63 109 99 110 118 119 128 63 128 119 87 62 63 117 118 127 125 126 134 126 125 117 134 126 135 125 134 133 143 152 151 152 143 144 135 144 143 144 135 136 143 134 135 152 144 153 126 127 135 134 143 142 127 128 136 128 127 118 136 128 137 145 144 136 154 153 145 144 145 153 137 146 145 146 137 63 136 137 145 155 145 146 128 63 137 136 135 127 126 117 127 152 153 162 63 64 146 85 61 62 151 152 161 158 159 167 158 149 159 167 159 168 158 167 166 177 187 186 187 177 178 168 178 177 178 168 169 177 167 168 187 178 188 159 160 168 167 177 176 160 161 169 160 151 161 169 161 170 179 178 169 189 188 179 178 179 188 170 180 179 180 170 171 169 170 179 190 179 180 161 162 170 169 168 160 150 160 159 187 188 198 197 198 207 197 187 198 207 198 208 197 207 206 220 68 219 69 68 220 208 221 220 221 208 209 220 207 208 69 220 221 198 199 208 207 220 219 189 190 199 190 189 179 199 190 200 209 208 199 221 222 69 221 209 222 69 222 70 209 210 222 209 199 200 200 210 209 190 191 200 199 198 189 188 189 198 180 181 190 187 197 196 162 154 163 162 161 152 163 154 155 162 163 172 191 190 181 181 171 172 182 181 172 181 182 191 171 162 172 201 200 191 163 164 172 181 180 171 173 172 164 164 155 64 173 164 64 173 182 172 182 192 191 192 182 183 183 193 192 193 183 64 182 173 183 192 193 203 173 64 183 164 163 155 154 145 155 191 192 202 210 201 211 210 200 201 211 201 202 210 211 224 223 70 222 70 223 71 224 71 223 71 224 225 223 210 224 211 212 224 210 223 222 202 212 211 212 202 203 203 213 212 213 203 64 202 192 203 212 213 226 225 226 72 226 225 212 64 72 226 226 213 64 225 72 71 203 193 64 212 225 224 201 191 202 155 146 64 171 170 162 153 154 162 149 158 157 -666 1091 1 0.1628597020283 -11.2339734254601 1.75393602555749 -1.1875290010296 11.2233176562604 1.73904489821927 -1.21174266791124 11.2283499283601 1.74732305688575 -1.19837574234842 11.2254784762726 1.74319668846012 -1.20506764748478 11.2195102188226 1.72864961215316 -1.22820864056359 11.2210170661959 1.73444221415716 -1.21907662213952 11.2200330526066 1.73155065261827 -1.22364869856392 11.2233146680788 1.70357064691526 -1.26655421965809 11.2187579579431 1.71744695743406 -1.24557151642983 11.2203168811737 1.710475396965 -1.25618412808846 11.243154316743 1.68198845915121 -1.29810493339306 11.2330199022536 1.69067340766125 -1.28556856767287 11.227823785328 1.69665448642256 -1.27680786604315 11.274822965922 1.6653368975719 -1.32159590159368 11.2594973128833 1.67199772405696 -1.31228364617976 11.2508307887262 1.6768072576119 -1.30548627592333 11.3057257984163 1.65529957503836 -1.33541257273752 11.2900741726497 1.65989513283307 -1.329122714693 11.2819860982737 1.66256487295567 -1.32544049019301 11.3654194549661 1.64208465945882 -1.3532208048712 11.3364585984696 1.64770369160567 -1.34570453119451 11.3214898793976 1.65115498888696 -1.3410459180422 11.4940513042487 1.62457606258802 -1.3761571297346 11.4310854543383 1.63195301640233 -1.36658814741296 11.3972655627071 1.63677236757878 -1.36025892428163 11.5380210330651 1.6201411438256 -1.3818514383236 11.5173028438985 1.62216599641362 -1.37925603162901 11.5059558947077 1.62331088856553 -1.37778473223831 11.5701474980193 1.61706632895907 -1.38576981734771 11.5536887722913 1.61864742509292 -1.38375916278693 11.5453364278214 1.61944215758067 -1.3827464367941 11.6467164821864 1.60959413771122 -1.39521556909743 11.6168116552509 1.61264462252329 -1.39137019846653 11.59782558361 1.61447522340865 -1.38905331615527 11.7279810431541 1.60101691469853 -1.40592225547907 11.6879791890818 1.60533464468433 -1.40054957968685 11.6675314916802 1.6074972055598 -1.39784683028508 11.7609747359659 1.59742040519323 -1.41037135508933 11.7448895439158 1.59917170511919 -1.40820760844032 11.7360589271649 1.60013550030746 -1.40701366467467 11.8043180412084 1.59269241380991 -1.41618054122364 11.7877235851982 1.59449365010627 -1.41397425382321 11.7753922597036 1.59583710752752 -1.41232221073241 11.8750928872913 1.58529487719724 -1.4251748313798 11.8452983948709 1.58832468439992 -1.42150208066628 11.8265809096452 1.59030279682563 -1.41909781301404 12.2620489025649 1.55544164364287 -1.46033225805902 12.0784585999608 1.56752665109685 -1.4463274574771 11.9745962160765 1.57593104887717 -1.43640172106746 12.4978731391223 1.54304758553291 -1.47438192864982 12.3752478733188 1.54915010834762 -1.4675065714953 12.3176153777131 1.55221688469296 -1.46401757936941 12.5143853778561 1.54225075040349 -1.47527481543679 12.5052019156317 1.54269254444705 -1.47478005746981 12.5009610278662 1.54289698784182 -1.47455086369703 12.5372927826847 1.54114785217358 -1.47650854790917 12.5260170991434 1.54169121599895 -1.47590103221097 12.5198591320194 1.54198713948748 -1.47557000779162 12.7343557009245 1.53139827017334 -1.48733192218905 12.6575618638079 1.53532613324339 -1.48298586386706 12.6076641882957 1.53776370918687 -1.48027790458241 12.9120964228236 1.52198792279919 -1.49763971953495 12.82847300856 1.52649959711267 -1.49271427253387 12.7814658356866 1.52899226785807 -1.48998019128669 13.0297316574771 1.51557535698256 -1.50458789742418 12.9720618338055 1.51871722126836 -1.50119072402387 12.940715865217 1.52042788356822 -1.49933413531661 13.1505415149467 1.50902129957732 -1.51162015009139 13.1124663081777 1.51107070262435 -1.50943129849638 13.0788185802369 1.51289249567415 -1.50747650391921 13.2067968429158 1.50604612550568 -1.51478693835905 13.1814593172009 1.50737578009611 -1.51337342630281 13.16645930085 1.5081726599836 -1.51252533733249 13.6011839966343 1.48832080334864 -1.53331528929195 13.444497106413 1.49446108102915 -1.52697212221782 13.3358719193724 1.49950553637307 -1.52170061063614 14.1656597628408 1.48194751707815 -1.53942524734664 13.8654284008302 1.48159472568976 -1.54010328081708 14.0166842001824 1.48051674128334 -1.5410726263608 14.2745160980031 1.48462395626585 -1.53651034460532 14.2135489953361 1.48294152282931 -1.53833614618462 14.2438493880019 1.48372260617846 -1.53748696442166 14.8705157989187 1.51573582377946 -1.50252353347842 14.5412076506903 1.49536760071763 -1.52487830931075 14.700719037346 1.50439581019103 -1.51503503647987 15.2409733425777 1.54412476865888 -1.47034875277143 15.0553527988629 1.52932996360414 -1.48727760914968 14.9599739474397 1.52215568017742 -1.49535741294384 15.3885361745655 1.55624636724467 -1.45620806184295 15.306105959492 1.54936436641319 -1.46426868250305 15.268269862375 1.54625850688206 -1.46787806261069 15.6256429585636 1.57605589016733 -1.43254462666716 15.5397452374411 1.56884763155009 -1.44123247462957 15.473271680395 1.56327035395551 -1.44789345121854 15.7556462799591 1.58687434340459 -1.41931422068519 15.6964139203827 1.58196905618953 -1.42534318391927 15.6612810884908 1.57903959522677 -1.42892071410101 15.9164082326414 1.59998586197956 -1.40297488495823 15.8469763130626 1.59437508169675 -1.41000750532606 15.8019951149686 1.59069914836431 -1.41458270121145 16.4125111176284 1.63640196705886 -1.3557196746019 16.2011523152597 1.62185670743699 -1.37494654850437 16.0633593876408 1.61153324571135 -1.38829927614356 17.2459916335156 1.67360538724199 -1.3040721061901 16.8907891564538 1.66246632758017 -1.3199829009968 16.6574934494772 1.65116945250819 -1.33568740284973 20.1549001573063 1.67227319742871 -1.30306890389245 20.1549001573063 -1.6722750014288 -1.30306872289244 20.1549001573063 -1.06025510314924 -1.8708312818635 20.1549001573063 -0.248800274676112 -2.15085975576918 20.1549001573063 0.528196717018899 -2.09684800275857 20.1549001573063 1.15900491493157 -1.80730370736378 20.1549001573063 1.44015007298323 -1.57566051740705 17.2459916253906 -1.67360683680456 -1.30407191862759 16.4125111362741 -1.63640330747186 -1.35571949953735 16.7987051555047 -1.65835168680491 -1.3257456828009 17.0262197165851 -1.66764226153657 -1.31266042384163 15.9164083652715 -1.59998716778997 -1.40297469633251 16.1468680819312 -1.61785758391885 -1.38014834923695 16.2811156081652 -1.62757631676078 -1.36744680070648 15.7556463974262 -1.58687563239034 -1.41931403490338 15.829140031128 -1.59292241583123 -1.41182018706148 15.8733605199442 -1.59651767644435 -1.40732986697314 15.6256430914078 -1.57605716395364 -1.43254444077483 15.6823255517509 -1.58079696028805 -1.42677816535166 15.7178961251149 -1.58375576885616 -1.42315375299189 15.3885363223517 -1.55624760869252 -1.45620788292268 15.5147916959614 -1.56675372657847 -1.44374047981749 15.5740823286723 -1.57173272794924 -1.4377680713505 15.2409735004748 -1.54412598780222 -1.47034857787681 15.2897060809059 -1.54801700456862 -1.4658380710628 15.3338663281407 -1.55165581673741 -1.46159491675586 14.8705159773675 -1.51573699413999 -1.50252336583399 15.0160139974919 -1.52633483598157 -1.49066171417753 15.1186490163256 -1.53424852462356 -1.48169093124383 14.2745163580031 -1.4846250675159 -1.53651017760531 14.6045684494052 -1.49873878227454 -1.5212145208741 14.4452163546622 -1.49085297720757 -1.52977175997997 14.2235895153933 -1.48319986742028 -1.53805637621256 14.2462885162646 -1.48379473659306 -1.5374098935786 14.2604227333025 -1.48419795151019 -1.53697266617358 13.9578228007084 -1.4807103422503 -1.54093210274145 14.077554671172 -1.48084594222114 -1.54066472222945 14.1508498914484 -1.4817132023472 -1.53968486571425 13.6299341892202 -1.48725405550496 -1.53441086611513 13.8085839946898 -1.4824842048175 -1.5392329993698 13.7199357980825 -1.48450811104157 -1.53720429208986 13.2369433548438 -1.50453569894826 -1.51638897342284 13.4301691153108 -1.49509949578239 -1.52631041698181 13.5324637453239 -1.49079423407009 -1.53077243624519 13.0409575546936 -1.51495712080103 -1.50525514791496 13.1525151951007 -1.50891955701304 -1.51173175729266 13.1963478539544 -1.50659140993578 -1.5142092006368 13.0022709656819 -1.51706751062374 -1.50297788728507 13.0187656507354 -1.51616590344978 -1.50395144002088 13.0296278106992 -1.51557263531509 -1.50459165545002 12.7665063849933 -1.52971109318622 -1.48919178752468 12.8583985514616 -1.52489669932445 -1.49446953142127 12.9218550772373 -1.52145695182292 -1.49821690536265 12.5506040056185 -1.54050897098862 -1.47722330575687 12.6566274925079 -1.53537259129797 -1.48293458188731 12.7083047019876 -1.53278255608049 -1.48580505781872 12.5242477717419 -1.54177759031217 -1.47580533019563 12.5359615458236 -1.54121491395628 -1.47643457294945 12.5432828985466 -1.540863736076 -1.47682696845786 12.5015213107503 -1.54287260379372 -1.47457893519828 12.5116216313234 -1.54238455057018 -1.47512625697686 12.5179346215237 -1.54208087242284 -1.4754662742074 12.2568192726063 -1.55566787566868 -1.46007545322656 12.3490542921462 -1.55052098821767 -1.46594768320967 12.4141276715905 -1.54716693433357 -1.46975166527568 11.8715138817384 -1.58570854653159 -1.424674981036 12.0794714292166 -1.56731709017386 -1.44657245533666 11.980670406726 -1.57541197019565 -1.43701954883889 11.7578455409638 -1.59775711123781 -1.40995683754297 11.8213460558702 -1.59086133378869 -1.41841697858755 11.8461381283823 -1.58823624602951 -1.42160882331301 11.7460296980906 -1.59904800056319 -1.4083623372769 11.7511165830346 -1.59849215079999 -1.40904918860201 11.7544268550149 -1.59813003486748 -1.40949649305482 11.6440291192181 -1.60990510560288 -1.39482515131581 11.6829099024594 -1.6058749640548 -1.3998757923657 11.7102014836225 -1.60294631113003 -1.4035244591397 11.5921035220023 -1.61502206570273 -1.38836344529165 11.615814646083 -1.61274364952565 -1.39124674343148 11.6287073966378 -1.61147213517373 -1.39285310343456 11.5677514756082 -1.61732692438244 -1.3854388743982 11.5801261727527 -1.61615351025668 -1.38692852721363 11.5864926425007 -1.61555190322114 -1.38769064838934 11.5173309615065 -1.62216470532931 -1.37925932234333 11.5355773576951 -1.62037943573357 -1.38154981703186 11.5497443399291 -1.6190225053481 -1.38328192338118 11.4919570406201 -1.62478166592107 -1.37589307800223 11.5033413492633 -1.6235805184902 -1.37743938799149 11.5102542370771 -1.62287503577893 -1.37834668221252 11.3639897483438 -1.64238388482431 -1.35282295016919 11.4155806284448 -1.63407270778137 -1.36381156790576 11.4512604360294 -1.62939305680225 -1.36992637915907 11.3046101155787 -1.65560031280696 -1.33500311111335 11.3293114099374 -1.64929549958061 -1.34356286766825 11.3448910892259 -1.64594663168203 -1.34806246486765 11.2810233886257 -1.66292486149133 -1.32494032340658 11.2903753848963 -1.65980149802582 -1.32925253480982 11.2971320486903 -1.65774925803631 -1.33206677658958 11.2578643340571 -1.672842776302 -1.31109607646477 11.2676418333309 -1.6681577094662 -1.31767171375095 11.2741538374915 -1.6654569592556 -1.32143484984067 11.2480738321926 -1.67852313843327 -1.30305412763939 11.2533604297598 -1.67531169905511 -1.30761172563788 11.2506626947788 -1.67689733654243 -1.30536481592506 11.2229519281623 -1.70382745794937 -1.26617213152758 11.234188906666 -1.68916338877675 -1.28775878561204 11.2276055108228 -1.69632379581601 -1.27729312890639 11.2195260373578 -1.72876789393421 -1.22802415636908 11.2189290449075 -1.71475417104491 -1.24968896466858 11.2184017788172 -1.72174664700725 -1.23895432445646 11.2233642208145 -1.73910600437289 -1.21164554112822 11.2206484646032 -1.73339658627751 -1.22073395373012 11.2217925802684 -1.73627142449228 -1.21617123657517 11.2339737223351 -1.75393664780752 -1.18752892052959 11.227244768807 -1.74578973907948 -1.20087006283061 11.2303906236261 -1.74989094726789 -1.19418281974557 7.21279194058922 -1.75566531738962 -1.18857460045426 7.21279194058922 -1.57919479825066 -1.43731795707635 7.21279194058922 -1.36392613472056 -1.66056785629497 7.21279194058922 -1.14020952546803 -1.83377569025907 7.21279194058922 -0.917908263384871 -1.96313160054326 7.21279194058922 -0.679370815703776 -2.06426485250812 7.21279194058922 -0.428619029939489 -2.13479666666457 7.21279194058922 -0.170074809743701 -2.17303641737173 7.21279194058922 0.0915799275259555 -2.17805670026478 7.21279194058922 0.351558443466233 -2.14973519857978 7.21279194058922 0.605130559147911 -2.08876024088359 7.21279194058922 0.847780691135129 -1.99659963429321 7.21279194058922 1.07535331936045 -1.87543509530517 7.21279194058922 1.28417780967587 -1.72806708036795 7.21279194058922 1.47116634812466 -1.55779677571882 7.21279194058922 1.62488786892722 -1.38007064658117 7.21279194058922 1.75566519138962 -1.18857467445427 17.2460161662714 1.66941645461615 -1.30995963881321 17.246086429251 1.65723677825106 -1.32683285721964 17.2462845771619 1.62126764752017 -1.3746534196413 17.2462878942026 1.6206444071404 -1.37545691924869 17.2463048294829 1.61745127472118 -1.37956074342644 17.2463127684334 1.61594794531185 -1.38148541977808 17.2465196161108 1.57528039500775 -1.43183009368638 17.2468396432036 1.50620081939575 -1.51047164315159 17.2471086510596 1.44155585858958 -1.57728103024928 17.2476797986742 1.27947544776947 -1.72126354246098 17.2480242377922 1.1603023089113 -1.80949787638947 17.2482478400191 1.07109106525445 -1.86734300644888 17.2487065570004 0.84421631047709 -1.98740485519065 17.2491297073328 0.52887722221441 -2.09981913109175 17.2492761421823 0.349976214387082 -2.13909247315772 17.2493802857942 0.0911623998018935 -2.16713967115817 17.2493314771647 -0.249128103996875 -2.15398291127979 17.2492210619062 -0.426703513827303 -2.12429781286734 17.2489596030778 -0.676426174791252 -2.05443765962463 17.2485805772226 -0.914110743849048 -1.95424524519394 17.2482703468233 -1.06148185282517 -1.87319033502996 17.2480884102342 -1.13578754664257 -1.82605378070355 17.2474157369387 -1.35912634036966 -1.65433477977005 17.2469556371633 -1.47912009617172 -1.53920065777548 17.2469548000473 -1.47931972897877 -1.53899289707237 17.24695101745 -1.4802210170509 -1.53805418611036 16.7987152179092 1.65744359706719 -1.3269946772842 16.7989336473617 1.62147798771927 -1.37483129293933 16.7989373039313 1.62085480014408 -1.37563506491303 16.7989559726953 1.61766193407307 -1.37974028153652 16.7989647242746 1.61615872764579 -1.38166561171779 16.7991927455758 1.57549394532188 -1.43202756390961 16.7995455345668 1.50641686138008 -1.51069677369519 16.7998420840439 1.44177209188205 -1.57753029218372 16.8004717151264 1.27968501023937 -1.72156674453502 16.8008514289042 1.16050189045991 -1.809835411392 16.8010979328033 1.0712809787044 -1.86770356592543 16.8016036375482 0.844375104811318 -1.98781448548963 16.8020701387511 0.528981919225296 -2.10027624525528 16.8022315769555 0.350046690025596 -2.13956652110717 16.8023463913071 0.0911809966977543 -2.16762592045929 16.802292581613 -0.249178542276301 -2.15446342582162 16.8021708532047 -0.426788836212412 -2.1247654608926 16.801882606942 -0.676557348524436 -2.0548754276298 16.8014647525735 -0.914279931508017 -1.95464115141463 16.8011227448814 -1.06167057193338 -1.87355324442372 16.8009221738102 -1.13598458718286 -1.8263978640352 16.8001806130458 -1.35934026341587 -1.65461258310025 16.7996734039455 -1.47933639410281 -1.53943609444289 16.7996724811242 -1.47953602587452 -1.53922825882428 16.799668311259 -1.48043730904515 -1.53828920944619 16.4126175403507 1.62165962986039 -1.37498489786163 16.4126214535196 1.62103648790256 -1.37578890505564 16.412641432367 1.61784385192838 -1.37989532422023 16.4126507980928 1.61634075174534 -1.38182121906084 16.4128948215982 1.57567836084217 -1.4321980931756 16.413272371442 1.50660343033921 -1.51089119135528 16.4135897370192 1.44195882748786 -1.57774555082837 16.414263572145 1.27986598798668 -1.72182858931021 16.4146699491323 1.16067425040075 -1.8101269088976 16.4149337643294 1.07144499026037 -1.86801494951472 16.4154749882308 0.844512243320982 -1.98816825188641 16.4159742608818 0.52907233911247 -2.10067102461684 16.4161470413325 0.350107555430659 -2.13997592677769 16.4162699226621 0.0911970577227307 -2.16804586492765 16.4162123321996 -0.249222102734636 -2.15487841694184 16.4160820512035 -0.426862523707764 -2.1251693387114 16.4157735543958 -0.676670634054313 -2.05525349715088 16.415326347745 -0.914426045409053 -1.95498306414153 16.4149603189786 -1.06183355214499 -1.87386665763268 16.4147456621007 -1.13615475300315 -1.82669501726829 16.4139520316097 -1.35952500555145 -1.65485249175169 16.4134092162525 -1.47952318470994 -1.53963941291578 16.4134082286549 -1.47972281558308 -1.53943151259672 16.4134037660911 -1.48062409450064 -1.53849217094718 16.2811569649065 1.62172144135412 -1.37503716849786 16.2811609576577 1.62109831492319 -1.37584125573872 16.2811813428176 1.61790575726793 -1.37994808413526 16.2811908990165 1.61640269324779 -1.38187417113289 16.2814398855298 1.57574111635879 -1.43225612328588 16.2818251149863 1.50666691901953 -1.51095735092332 16.2821489368475 1.44202237318118 -1.57781880285258 16.2828364826501 1.27992757491909 -1.72191769539336 16.2832511299927 1.16073290504276 -1.81022610644706 16.2835203148967 1.07150080414185 -1.86812091478431 16.2840725565924 0.844558912562342 -1.98828864120197 16.2845819950524 0.529103109894982 -2.10080537195699 16.2847582939792 0.350128268584292 -2.14011525195857 16.284883677788 0.0912025234728789 -2.1681887768399 16.2848249144807 -0.249236926842725 -2.15501964305055 16.2846919803733 -0.426887600332254 -2.12530678257007 16.2843772017005 -0.676709186124656 -2.0553821575775 16.2839208899776 -0.914475768930472 -1.95509941930537 16.2835474100706 -1.0618890150772 -1.87397331363396 16.2833283839709 -1.13621266104461 -1.82679613959567 16.2825186026888 -1.35958787321417 -1.65493413256299 16.2819647435845 -1.47958674894685 -1.53970860153856 16.281963735896 -1.47978637951327 -1.53950067920112 16.2819591825496 -1.48068765697925 -1.53856123808788 15.9165607377287 1.57591530666239 -1.43241719730445 15.9169652974761 1.5068431453244 -1.51114099085913 15.9173053707831 1.44219875854605 -1.5780221303406 15.9180274296034 1.28009852496556 -1.72216503180104 15.9184628961535 1.16089571673356 -1.81050145588119 15.9187455986867 1.07165573112982 -1.8684150509636 15.9193255771924 0.844688457064178 -1.98862281795796 15.9198606085336 0.529188524062818 -2.10117829609631 15.920045765585 0.350185764723471 -2.14050199465617 15.9201774497054 0.0912176954789088 -2.16858547638938 15.9201157336045 -0.249278076046347 -2.15541166276579 15.9199761199781 -0.426957208647534 -2.12568830268357 15.9196455262086 -0.676816199439962 -2.05573929482953 15.9191662923298 -0.914613791207593 -1.955422397367 15.9187740545836 -1.06204296796589 -1.87426936724561 15.9185440294246 -1.13637340052026 -1.827076832075 15.9176935916099 -1.35976237746454 -1.65516074620587 15.9171119332472 -1.47976318532275 -1.53990064963986 15.9171108749869 -1.47996281503525 -1.53969266618286 15.9171060931271 -1.48086408846071 -1.53875294897412 15.5401102839677 1.50702516522925 -1.51133066814839 15.5404645661856 1.44238094398792 -1.5782321438716 15.5412168021616 1.28027509892673 -1.72242050512115 15.5416704736214 1.1610638860777 -1.8107858663001 15.5419649968445 1.07181575721945 -1.8687188680773 15.5425692314169 0.844822266817667 -1.98896799753948 15.5431266453781 0.529276751441528 -2.10156350297449 15.5433195497501 0.350245154783512 -2.14090147671366 15.5434567442267 0.0912333672920789 -2.16899524436507 15.5433924455536 -0.249320580762571 -2.15581659623705 15.5432469899539 -0.427029109756763 -2.12608238957198 15.5429025645189 -0.676926736878779 -2.05610819326184 15.5424032841731 -0.914756357409007 -1.95575600846564 15.541994642667 -1.06220198798578 -1.87457516507601 15.541754999158 -1.13653942972877 -1.82736676183817 15.5408690106275 -1.35994262134289 -1.65539481344597 15.5402630461589 -1.47994542274155 -1.54009901210923 15.540261943683 -1.48014505156818 -1.53989096551888 15.5402569620307 -1.4810463208027 -1.53895096311776 15.0161112270913 1.50727825521085 -1.51159440539704 15.0164809143868 1.44263426624806 -1.5785241601303 15.017265871309 1.28052062296173 -1.72277573786136 15.017739284466 1.16129772608059 -1.81118133996079 15.018046627122 1.07203827553934 -1.86914132973542 15.0186771693664 0.84500833362586 -1.98944798105744 15.0192588616984 0.529399436081867 -2.10209915276806 15.019460170151 0.350327740045086 -2.14145697938637 15.0196033422928 0.091255159911589 -2.16956505203054 15.0195362420121 -0.249379686091752 -2.15637968037617 15.0193844490871 -0.42712909217331 -2.12663038902031 15.0190250198517 -0.677080443978399 -2.05662116263299 15.0185039959373 -0.914954599568805 -1.95621990382254 15.0180775634468 -1.06242310750485 -1.87500038124322 15.0178274888128 -1.13677029432235 -1.82776991096696 15.0169029494515 -1.36019324630655 -1.65572027861694 15.016270631327 -1.48019881607218 -1.54037482667978 15.0162694809135 -1.4803984436605 -1.54016669229804 15.0162642826504 -1.48129970703807 -1.53922629331681 14.6048932905453 1.44283325007916 -1.57875353801377 14.6056964120934 1.28071348484879 -1.72305477722248 14.6061807867231 1.16148141206055 -1.81149199246124 14.6064952481527 1.0722130693666 -1.86947318423353 14.6071404014389 0.845154496011567 -1.98982502601115 14.6077355802589 0.52949581073089 -2.10251993137511 14.6079415576866 0.350392615020538 -2.14189335543418 14.608088050958 0.0912722791939356 -2.17001266688604 14.6080193941147 -0.249426116452915 -2.15682201284359 14.6078640803137 -0.427207633369819 -2.1270608701366 14.6074963159543 -0.677201187591394 -2.05702412247952 14.6069632143711 -0.915110325514048 -1.95658430945184 14.606526901145 -1.06259680266234 -1.87533439972114 14.6062710338856 -1.13695164343108 -1.82808659335522 14.6053250902815 -1.36039011335924 -1.65597593304438 14.6046781435396 -1.48039785474874 -1.54059147712091 14.6046769665191 -1.48059748135901 -1.54038327377381 14.6046716480297 -1.4814987401118 -1.53944256325533 14.4454949916297 1.44291031186697 -1.57884237071708 14.4463033663099 1.28078817658675 -1.72316284386861 14.446790911621 1.1615525506245 -1.81161230308864 14.4471074324749 1.07228076444241 -1.86960170661097 14.4477568133244 0.845211103060392 -1.98997105130202 14.448355895122 0.529533135858497 -2.10268289557203 14.448563223924 0.350417740649655 -2.14206236088048 14.4487106785086 0.0912789093871478 -2.1701860253992 14.4486415711068 -0.249444098629835 -2.15699332535611 14.4484852381995 -0.427238051798706 -2.12722759233649 14.4481150614716 -0.677247950466896 -2.05718018509248 14.4475784648602 -0.915170636272777 -1.95672543932542 14.447139292807 -1.06266407226883 -1.87546376023342 14.4468817497377 -1.13702187705111 -1.82820923941392 14.4459296150947 -1.36046635582663 -1.65607494263702 14.4452784382272 -1.48047493754523 -1.54067538053086 14.4452772535136 -1.48067456377547 -1.54046715047379 14.4452719002623 -1.48157582073148 -1.53952631929834 14.2465256993823 1.44300650440885 -1.57895325633675 14.2473392354955 1.28088141136381 -1.72329773924899 14.2478298968233 1.16164135048948 -1.8117624827901 14.2481484418705 1.07236526614991 -1.86976213720471 14.2488019786393 0.845281764319137 -1.99015333128163 14.2494048980782 0.529579728187194 -2.10288632105365 14.2496135558127 0.350449104606185 -2.14227332793267 14.2497619558028 0.0912871857713385 -2.17040242659896 14.2496924052924 -0.249466545534244 -2.15720717243125 14.2495350701677 -0.427276022654094 -2.12743570910427 14.2491625212598 -0.677306323655132 -2.05737499503467 14.24862248837 -0.915245920669321 -1.95690160819635 14.2481805060076 -1.06274804289887 -1.87562523709033 14.2479213157626 -1.13710954737408 -1.82836233447658 14.2469630971093 -1.36056152600917 -1.65619853204902 14.2463077643731 -1.48057115612973 -1.5407801129518 14.2463065721023 -1.4807707818846 -1.54057184955293 14.2463011847032 -1.4816720365933 -1.53963086776258 13.8088137548413 1.44321811804592 -1.57919719325279 13.8096331901821 1.28108652078434 -1.72359449886819 13.8101274162514 1.16183670491092 -1.81209286924654 13.8104482783195 1.0725511657888 -1.87011507674302 13.8111065754993 0.845437217203244 -1.99055434243206 13.8117138946859 0.529682231015085 -2.1033338558902 13.8119240768772 0.350518105332672 -2.14273745566449 13.8120735616423 0.0913053938640765 -2.17087851054462 13.812003502673 -0.249515928798873 -2.15767763678557 13.8118450177065 -0.427359558461386 -2.12789356565649 13.8114697482184 -0.677434743821159 -2.05780357414319 13.8109257769066 -0.915411543876373 -1.95728917400189 13.8104805758028 -1.06293277428298 -1.87598047853219 13.81021949993 -1.13730241713958 -1.82869913502815 13.8092543225429 -1.36077089196513 -1.65647041782421 13.8085942418959 -1.4807828263485 -1.54101051269472 13.8085930409954 -1.48098245105373 -1.54080217594336 13.8085876146023 -1.48188370080112 -1.53986086279782 13.6014549229061 1.44331836650681 -1.57931275434368 13.6022745344079 1.28118368920865 -1.72373508562268 13.602768869942 1.16192925271288 -1.81224938755628 13.6030898043729 1.07263923488897 -1.87028228024805 13.6037482532099 0.845510863040891 -1.99074432157493 13.6043557161179 0.529730792206894 -2.10354587762854 13.6045659489001 0.350550794853956 -2.14295733907805 13.6047154699124 0.0913140200805971 -2.17110405880926 13.6046453939276 -0.249539324454825 -2.15790052248675 13.6044868706484 -0.427399134018915 -2.12811047779509 13.6041115114341 -0.677495583243435 -2.05800661475148 13.6035674125374 -0.915490007687841 -1.95747278289691 13.6031221091966 -1.06302028997128 -1.87614877263765 13.6028609742835 -1.13739378798264 -1.8288586921983 13.6018955844932 -1.36087007629823 -1.65659922010294 13.6012353639001 -1.48088310127408 -1.54111966040316 13.6012341627489 -1.48108272548021 -1.54091128890035 13.6012287352233 -1.48198397286886 -1.53996981877215 13.0297786866056 1.50823764721631 -1.51259415849391 13.0301608003811 1.4435945610084 -1.57963113662137 13.0309721888518 1.28145140197779 -1.72412242198069 13.0314615735709 1.16218423735448 -1.81268062155696 13.0317792973491 1.07288188140617 -1.87074295648665 13.0324311677252 0.84571377330715 -1.99126775526422 13.0330325719537 0.529864590338199 -2.10413005003663 13.0332407102503 0.350640862945347 -2.14356317471562 13.0333887423569 0.0913377876016023 -2.17172550430259 13.0333193641021 -0.249603785646654 -2.15851463110953 13.0331624196912 -0.427508174774438 -2.12870812592413 13.0327908017065 -0.677663210197922 -2.05856603938343 13.0322521326372 -0.915706191803206 -1.95797866347445 13.0318112791471 -1.06326141189387 -1.87661245395881 13.0315527562088 -1.13764553034874 -1.82929829951798 13.0305970386252 -1.36114334127056 -1.65695408607065 13.0299434472576 -1.48115936757482 -1.54142037195142 13.0299422581778 -1.4813589903997 -1.54121190469863 13.0299368851985 -1.482260231262 -1.54027000203919 12.5361659434191 1.50847606058861 -1.51284260174131 12.5365398594826 1.44383320417266 -1.57990623166084 12.5373338520444 1.28168272139892 -1.72445710306865 12.5378127519312 1.16240456169877 -1.81305323743226 12.538123671619 1.07309154646791 -1.87114101572769 12.5387615894843 0.845889106155592 -1.99172004927206 12.539350130155 0.529980205824718 -2.10463483557768 12.539553818503 0.350718691547575 -2.14408668233039 12.5396986863319 0.091358325391111 -2.17226250256421 12.5396307910165 -0.249659487234221 -2.15904528855125 12.5394772016594 -0.427602397643092 -2.12922455760711 12.5391135301675 -0.677808056419618 -2.05904943728022 12.5385863854429 -0.915892993616389 -1.95841578799987 12.5381549686535 -1.06346975977588 -1.87701311014881 12.5379019816419 -1.1378630536672 -1.82967815140686 12.5369667430112 -1.36137945586185 -1.65726070790888 12.5363271689464 -1.48139807146185 -1.54168019732698 12.5363260053773 -1.48159769308601 -1.54147164733492 12.5363207476715 -1.48249892827641 -1.54052937091753 12.526224467239 1.50848086229055 -1.51284760544683 12.5265981720446 1.44383801052495 -1.57991177216537 12.527391716238 1.28168738029445 -1.72446384372208 12.5278703458388 1.16240899917398 -1.81306074215684 12.5281810901071 1.07309576927454 -1.87114903292901 12.5288186482101 0.845892637514439 -1.9917291588729 12.5294068571423 0.529982534439986 -2.10464500247857 12.5296104307183 0.350720259099919 -2.14409722633978 12.5297552169311 0.091358739045131 -2.17227331830925 12.5296873598655 -0.249660609125709 -2.15905597657609 12.5295338570435 -0.427604295392061 -2.12923495908971 12.529170390497 -0.677810973763663 -2.05905917338336 12.5286435429575 -0.91589675596231 -1.95842459205481 12.5282123694865 -1.06347395605533 -1.8770211796577 12.5279595252016 -1.13786743473293 -1.82968580187791 12.5270248144732 -1.36138421131316 -1.65726688340616 12.5263856016674 -1.48140287902459 -1.54168543028169 12.5263844387558 -1.4816025006245 -1.54147687862316 12.5263791840206 -1.48250373570035 -1.54053459467785 12.5118334745677 1.50848781309512 -1.51285484866588 12.5122068703343 1.44384496806278 -1.57991979244091 12.5129997586266 1.28169412438132 -1.72447360130341 12.513477992834 1.16241542274084 -1.8130716057893 12.5137884804849 1.07310188209421 -1.87116063841083 12.5144255122973 0.845897749415109 -1.99174234568749 12.5150132359314 0.529985905282388 -2.10465971981765 12.5152166416075 0.350722528247863 -2.14411248957308 12.5153613084239 0.0913593378399627 -2.17228897490136 12.515293507314 -0.249662233146691 -2.15907144828312 12.5151401310844 -0.427607042523928 -2.12925001600424 12.5147769643519 -0.677815196833818 -2.0590732671089 12.5142505515617 -0.915902202233136 -1.958437336568 12.5138197340371 -1.06348003047508 -1.87703286085875 12.5135670985441 -1.13787377664332 -1.82969687648952 12.5126331600677 -1.36139109516996 -1.65727582288129 12.5119944757323 -1.48140983831377 -1.54169300535596 12.5119933137824 -1.48160945987857 -1.5414844512851 12.5119880633927 -1.48251069478858 -1.54054215644255 11.8715854857416 1.57784634260833 -1.43420282960512 11.8720087158146 1.50879684652689 -1.51317688283153 11.8723645124658 1.44415430271837 -1.58027637675203 11.873120043788 1.28199397276438 -1.72490743239349 11.873575755119 1.16270102270876 -1.81355461666033 11.8738716237575 1.0733736672073 -1.87167663542871 11.874478670627 0.846125034506868 -1.99232865714291 11.8750387410801 0.530135780941471 -2.10531408757767 11.8752325786706 0.350823420284199 -2.14479113131146 11.8753704412017 0.0913859618253641 -2.17298510798696 11.8753058289831 -0.249734441311675 -2.15975936014138 11.8751596670122 -0.427729186791713 -2.12991948346473 11.8748135851435 -0.678002963859839 -2.05969990514506 11.8743119440364 -0.916144353403782 -1.95900398084249 11.8739014059271 -1.06375010841912 -1.87755222472892 11.8736606650755 -1.13815574647813 -1.83018926846936 11.8727707151851 -1.36169715605714 -1.65767327786506 11.87216212806 -1.48171924978804 -1.54202979470838 11.8721610208768 -1.48191886978598 -1.54182113337832 11.8721560179563 -1.48282009729667 -1.54087835401406 11.8462457557801 1.57785843958182 -1.43421401569374 11.8466679716449 1.50880908603279 -1.51318963723979 11.8470229158636 1.44416655422948 -1.58029049963146 11.8477766376023 1.28200584871651 -1.72492461493236 11.8482312578145 1.16271233441942 -1.81357374718907 11.8485264181944 1.07338443181011 -1.87169707253817 11.8491320122572 0.846134036689774 -1.99235187944107 11.8496907427576 0.530141717191314 -2.10534000566202 11.8498841166928 0.350827416412234 -2.14481801092504 11.8500216494897 0.0913870163495282 -2.17301268046254 11.8499571918049 -0.249737301333997 -2.15978660695985 11.8498113794317 -0.427734024671777 -2.12994599967061 11.8494661254507 -0.678010400876248 -2.05972472481913 11.8489656846347 -0.916153944367127 -1.95902642410949 11.848556129077 -1.06376080541199 -1.87757279519998 11.8483159644994 -1.13816691442752 -1.83020877058259 11.8474281455883 -1.36170927799259 -1.65768901957847 11.8468210163185 -1.48173150429949 -1.54204313354224 11.8468199117879 -1.48193112423513 -1.54183446796383 11.8468149208538 -1.48283235145171 -1.54089166940853 11.7611043743521 1.57789908536126 -1.43425160090315 11.7615230793134 1.50885021077028 -1.51323249204815 11.7618750726258 1.44420771934631 -1.58033795255079 11.7626225299671 1.28204575204015 -1.72498234844163 11.7630733729052 1.16275034193533 -1.81363802604829 11.7633660813902 1.07342060106611 -1.87176574158599 11.7639666459845 0.846164284236191 -1.99242990690742 11.7645207376459 0.530161663162405 -2.10542709117267 11.7647125064202 0.350840843525366 -2.14490832725168 11.7648488976829 0.0913905595844699 -2.17310532486332 11.7647849749922 -0.249746911099193 -2.15987815712539 11.7646403729183 -0.427750280094489 -2.13003509491766 11.7642979850512 -0.678035389450559 -2.05980811958589 11.7638016995553 -0.916186170214552 -1.95910183397693 11.7633955454859 -1.06379674750072 -1.87764191235098 11.7631573758933 -1.1382044389128 -1.8302742979871 11.7622769340604 -1.36175000778237 -1.65774191184643 11.7616748515489 -1.48177267947389 -1.54208795204012 11.7616737562012 -1.48197229920011 -1.54187927218711 11.761668806761 -1.48287352542788 -1.54093640914923 11.5703952789764 1.57799012828857 -1.43433578842192 11.5708055428436 1.50894232679913 -1.51332848328823 11.5711504412971 1.4442999260557 -1.58044424345017 11.571882836737 1.28213513291141 -1.72511166777074 11.5723245974509 1.1628354765965 -1.81378200700643 11.5726114103932 1.07350161830136 -1.87191955663963 11.5731998814345 0.846232037446335 -1.99260468508355 11.5737428184989 0.530206341462936 -2.10562215975946 11.5739307274147 0.350870919845994 -2.14511063303663 11.5740643736582 0.0913984963291061 -2.17331284566684 11.5740017374569 -0.249768436690283 -2.1600832267787 11.5738600457498 -0.427786691724235 -2.13023466541813 11.5735245498468 -0.678091362923351 -2.05999492073136 11.5730382561754 -0.916258354649926 -1.95927074864282 11.5726402810888 -1.06387725591185 -1.87779673116517 11.5724069084199 -1.13828849166548 -1.83042107570412 11.571544204202 -1.36184123965859 -1.65786038681278 11.5709542557739 -1.4818649085799 -1.54218834189278 11.5709531825045 -1.48206452783629 -1.54197963006503 11.5709483328277 -1.48296575184593 -1.54103662258776 11.365553049389 1.62403270834909 -1.37699168252369 11.365557198034 1.62341016383075 -1.37779876401891 11.3655783791887 1.62022054148006 -1.38192090030229 11.3655883085774 1.61871883285807 -1.38385417522579 11.3658470278999 1.57808777792702 -1.43442608516907 11.3662473513895 1.50904112783837 -1.51343144076108 11.3665838946088 1.44439882471613 -1.5805582484588 11.3672985518324 1.28223100138777 -1.7252503735786 11.3677296161115 1.16292679108224 -1.81393643935856 11.3680094855134 1.0735885167451 -1.87208453743092 11.3685837128317 0.8463047094532 -1.99279215191579 11.3691135115838 0.530254263625451 -2.10583139125739 11.3692968741013 0.350903179917467 -2.14532762761831 11.3694272870444 0.0914070093480283 -2.17353543422749 11.3693661661756 -0.249791525208729 -2.16030318606959 11.3692279025133 -0.427825747065767 -2.13044872595511 11.3689005243476 -0.678151400206735 -2.0601952840707 11.3684259992838 -0.916335779453576 -1.95945192597308 11.3680376573184 -1.06396360862349 -1.87796278863266 11.3678099342999 -1.13837864578892 -1.83057850796512 11.3669681200804 -1.36193909314574 -1.65798746068003 11.3663924615636 -1.48196383106017 -1.54229601736117 11.3663914142947 -1.48216344981152 -1.54208727123695 11.3663866821037 -1.48306467143699 -1.54114410883237 0.55367883 0.69078275 0.558442995958592 0.691630200574814 0.555813423743865 0.69122045829246 0.557133580649734 0.691444411801358 0.561714195240008 0.691930171527613 0.559905384055049 0.691793798680701 0.560812452698011 0.691871446881161 0.5693963 0.6916342 0.565179065157814 0.691978411967244 0.56730349529679 0.691862488277301 0.575760441157504 0.690115264049866 0.573225383842737 0.690897078042944 0.571454677915561 0.691294539002376 0.580535470821911 0.687679143844734 0.57860999375511 0.688846310507519 0.577241576162368 0.689515295735039 0.583403528425449 0.685311831786704 0.582082308864227 0.686509389251865 0.581307185356126 0.687124220847626 0.587084813270479 0.680718288020093 0.585507298846882 0.682943667496911 0.584552166556094 0.684096683288942 0.591872613550153 0.670814033050775 0.589844475881932 0.675660519023188 0.588534011674084 0.678265175679753 0.59307675 0.66742789 0.592526606978707 0.669023460611982 0.592212807606451 0.669896988256572 0.593909167290605 0.664953675963996 0.593482436705868 0.666221371493342 0.593266226331167 0.66686425673789 0.595912292258761 0.659055839824978 0.595123336890474 0.661361925437067 0.594628182264364 0.662822692926227 0.5981687 0.65279432 0.597034280254818 0.655876445543337 0.596471353952953 0.657452544378672 0.599113545079743 0.65025232950052 0.598652929812855 0.651491557932466 0.598400048333989 0.652171904928312 0.60035469 0.64691319 0.59987955819533 0.648191469236762 0.599526574457574 0.649141126291983 0.602272496442653 0.641459358341833 0.601485486250156 0.643754965743803 0.600975668457252 0.645197802248197 0.609875901124084 0.611630757447247 0.606819514865311 0.625785432917038 0.604675714662786 0.633789169014884 0.612983757502479 0.593443878167867 0.611446379364436 0.60290008614865 0.610669089756237 0.60734617784134 0.61318127 0.59217018 0.613071670782899 0.592878560723046 0.613020849485952 0.593205682427002 0.613454602532188 0.590403147144828 0.613319895863081 0.591272934352889 0.613246464488119 0.59174794333772 0.615865270592698 0.575200528183971 0.614912383967096 0.581125055173646 0.614302627841255 0.584975331050007 0.61815104 0.56148505 0.617060341946007 0.567938356600093 0.616459427355585 0.571565785363625 0.619704552199201 0.552406391229385 0.618943502334286 0.556857337842138 0.618529402191359 0.55927620115526 0.62128791 0.54308159 0.620792431409812 0.546020410894564 0.620350871468725 0.548617702010376 0.622000743676933 0.538738887163246 0.621682387316751 0.540694777807649 0.621491779051435 0.541852934759163 0.626196129160615 0.508284020466012 0.624729333092439 0.520385024779948 0.623546105127976 0.528772793347252 0.627670732073834 0.46466228134557 0.627784845904954 0.487869290969052 0.628023143075783 0.476179286563377 0.62701822 0.45624486 0.627425150097098 0.460959442386271 0.627236069057885 0.458616382758946 0.619451240886078 0.410131629580822 0.624420386400193 0.435616083844784 0.62222669098664 0.423273470557356 0.612361326426256 0.381449780130372 0.616049491450027 0.395823981837373 0.617846104306842 0.403207918616152 0.609297860587819 0.370020242130715 0.611021453247147 0.376406237454043 0.611802551980739 0.379336884062241 0.60421347 0.35165085 0.606074116976567 0.358306677920355 0.607500183393113 0.363456023078499 0.601387555006221 0.341577403675895 0.602674098189219 0.346167152104897 0.603438063424707 0.348889534293158 0.59791576 0.32911896 0.599409315139883 0.334499790544364 0.600382461245175 0.337985586036285 0.588030771105816 0.290659941332366 0.592043823226323 0.30704667460556 0.594828717030456 0.317726950277152 0.57740334 0.22601628 0.58064678162108 0.253570238296497 0.583895018494921 0.271662857815048 0.57740334 3.46944695195361e-018 1.20676907 0 1.06912678552742 0 0.93148449709808 0 0.807606438513828 0 0.696116186399071 0 0.636759759624803 0 1.20676907 0.22601628 1.19614163363155 0.290659939797332 1.20233631869069 0.260712051635124 1.20502740558875 0.243065357966323 1.18625665 0.32911895 1.19104550654913 0.311254059646119 1.19368743920317 0.300848007632044 1.18278485474595 0.341577394560763 1.18437753212227 0.335882011615354 1.18533240708125 0.332455127360777 1.17995894 0.35165084 1.18119202618383 0.347258823473431 1.18196513045442 0.344502605167451 1.17487454732213 0.370020230653315 1.17756137743093 0.360240133651077 1.17884001081411 0.355645324962033 1.17181108032962 0.381449767861762 1.17281154248105 0.377676515113628 1.17372822862757 0.374255979429383 1.16472116397153 0.410131615670975 1.16737244955902 0.398869476243073 1.16935510297129 0.390923917709094 1.15715419 0.45624484 1.16056936054226 0.430713752465371 1.15865913128778 0.443042122029285 1.15680965029242 0.460183043874983 1.15695359299662 0.458427766826223 1.15705101525217 0.457334739595041 1.15618823 0.48072882 1.15623556256324 0.471473878747028 1.15644935093751 0.465807427361911 1.15770377174819 0.506063824231818 1.15659188492303 0.492261822880001 1.15706259388425 0.499111040887672 1.16182353748536 0.536411045142013 1.15959214089463 0.521491480012339 1.1585563480727 0.513591749215345 1.16431660337733 0.551540022700136 1.16287631898508 0.54292920737968 1.16232498193709 0.53954445474415 1.16482661 0.55452589 1.1646085884115 0.553252937246128 1.16446547103285 0.55241453980594 1.16788888234853 0.572720066171718 1.16671061443537 0.56562923160541 1.16588523733684 0.560732586218057 1.17055929004495 0.589376325329759 1.16926734873596 0.58119968993881 1.16862343453611 0.577210110792609 1.17087384 0.59140941 1.17073439670438 0.590505828148435 1.17064695340005 0.589941080670891 1.1711451525737 0.593162467933147 1.17102423722575 0.592383359292916 1.1709489373698 0.591896393441238 1.17433224279194 0.612034956614046 1.17305666108522 0.604922012452101 1.17221785429631 0.599902918108248 1.18202013954388 0.641734115061065 1.17727604378246 0.625708233522341 1.1793435178559 0.633323694301595 1.18514547453576 0.650493544781998 1.18336523405895 0.645599892902234 1.18269230952761 0.643687931100477 1.18548451 0.65140388 1.18533829164945 0.651011999529438 1.18524334499539 0.650756946394256 1.18835200447941 0.659262136302128 1.18727811300235 0.656266985281853 1.18650902754193 0.654164626811171 1.18972319 0.66326176 1.18910870292077 0.661435348787335 1.18876609642369 0.660442933053309 1.19034199744208 0.665137556196831 1.19002725904178 0.664184289516297 1.18986563014964 0.663694076061349 1.1916409 0.66902158 1.19116482218481 0.667615621014079 1.19080123766559 0.666524430779458 1.19235074284817 0.670975712718757 1.1920252080757 0.670098909077024 1.1918333118621 0.669566762200115 1.19718068974824 0.680826804111174 1.19490827034251 0.676853589931226 1.19362295772775 0.674109235625966 1.20085071207735 0.685398205381529 1.19912302962319 0.683490809285201 1.19819410521922 0.682292494780706 1.20292701545684 0.687210224474421 1.20203751240446 0.686492306650003 1.2014531526445 0.685973951718384 1.20575727 0.68899085 1.20441867194781 0.688238801738269 1.20365257219344 0.687737044967484 1.2073955008045 0.689743321469603 1.20646871192797 0.689336539606822 1.20692696501578 0.689543535373 1.21485283353482 0.691679414734434 1.21050509294612 0.69080602120797 1.21262179468248 0.691309189418095 1.22249535755445 0.691929773603968 1.21816992655055 0.69196686021519 1.22031439222984 0.692003233947811 1.22574790857607 0.6916254023652 1.2239383199604 0.691822862967471 1.22484276030587 0.691732879768255 1.23049356 0.69078273 1.22786716155931 0.69130662135128 1.22918485192797 0.691061520071871 1.23049356 1 1.17973245039044 1 1.12897134597814 1 1.08328635188956 1 1.04216985720562 1 1.00105336248562 1 0.959936867712224 1 0.918820372869268 1 0.87770387794175 1 0.836587382943535 1 0.79547088791151 1 0.754354392882199 1 0.713237897914398 1 0.672121402995225 1 0.631004908378162 1 0.59234186650704 1 0.55367883 1 0.57860999375511 0.22601628 0.582082308864227 0.22601628 0.592043823226323 0.22601628 0.592212807606451 0.22601628 0.59307675 0.22601628 0.593482436705868 0.22601628 0.60421347 0.22601628 0.621491779051435 0.22601628 0.636759759624803 0.22601628 0.672121402995225 0.22601628 0.696116186399071 0.22601628 0.713237897914398 0.22601628 0.754354392882199 0.22601628 0.807606438513828 0.22601628 0.836587382943535 0.22601628 0.87770387794175 0.22601628 0.93148449709808 0.22601628 0.959936867712224 0.22601628 1.00105336248562 0.22601628 1.04216985720562 0.22601628 1.06912678552742 0.22601628 1.08328635188956 0.22601628 1.12897134597814 0.22601628 1.15618823 0.22601628 1.15623556256324 0.22601628 1.15644935093751 0.22601628 0.582082308864227 0.260712051635124 0.592043823226323 0.260712051635124 0.592212807606451 0.260712051635124 0.59307675 0.260712051635124 0.593482436705868 0.260712051635124 0.60421347 0.260712051635124 0.621491779051435 0.260712051635124 0.636759759624803 0.260712051635124 0.672121402995225 0.260712051635124 0.696116186399071 0.260712051635124 0.713237897914398 0.260712051635124 0.754354392882199 0.260712051635124 0.807606438513828 0.260712051635124 0.836587382943535 0.260712051635124 0.87770387794175 0.260712051635124 0.93148449709808 0.260712051635124 0.959936867712224 0.260712051635124 1.00105336248562 0.260712051635124 1.04216985720562 0.260712051635124 1.06912678552742 0.260712051635124 1.08328635188956 0.260712051635124 1.12897134597814 0.260712051635124 1.15618823 0.260712051635124 1.15623556256324 0.260712051635124 1.15644935093751 0.260712051635124 0.592043823226323 0.290659941332366 0.592212807606451 0.290659941332366 0.59307675 0.290659941332366 0.593482436705868 0.290659941332366 0.60421347 0.290659941332366 0.621491779051435 0.290659941332366 0.636759759624803 0.290659941332366 0.672121402995225 0.290659941332366 0.696116186399071 0.290659941332366 0.713237897914398 0.290659941332366 0.754354392882199 0.290659941332366 0.807606438513828 0.290659941332366 0.836587382943535 0.290659941332366 0.87770387794175 0.290659941332366 0.93148449709808 0.290659941332366 0.959936867712224 0.290659941332366 1.00105336248562 0.290659941332366 1.04216985720562 0.290659941332366 1.06912678552742 0.290659941332366 1.08328635188956 0.290659941332366 1.12897134597814 0.290659941332366 1.15618823 0.290659941332366 1.15623556256324 0.290659941332366 1.15644935093751 0.290659941332366 0.592043823226323 0.300848007632044 0.592212807606451 0.300848007632044 0.59307675 0.300848007632044 0.593482436705868 0.300848007632044 0.60421347 0.300848007632044 0.621491779051435 0.300848007632044 0.636759759624803 0.300848007632044 0.672121402995225 0.300848007632044 0.696116186399071 0.300848007632044 0.713237897914398 0.300848007632044 0.754354392882199 0.300848007632044 0.807606438513828 0.300848007632044 0.836587382943535 0.300848007632044 0.87770387794175 0.300848007632044 0.93148449709808 0.300848007632044 0.959936867712224 0.300848007632044 1.00105336248562 0.300848007632044 1.04216985720562 0.300848007632044 1.06912678552742 0.300848007632044 1.08328635188956 0.300848007632044 1.12897134597814 0.300848007632044 1.15618823 0.300848007632044 1.15623556256324 0.300848007632044 1.15644935093751 0.300848007632044 0.60421347 0.32911895 0.621491779051435 0.32911895 0.636759759624803 0.32911895 0.672121402995225 0.32911895 0.696116186399071 0.32911895 0.713237897914398 0.32911895 0.754354392882199 0.32911895 0.807606438513828 0.32911895 0.836587382943535 0.32911895 0.87770387794175 0.32911895 0.93148449709808 0.32911895 0.959936867712224 0.32911895 1.00105336248562 0.32911895 1.04216985720562 0.32911895 1.06912678552742 0.32911895 1.08328635188956 0.32911895 1.12897134597814 0.32911895 1.15618823 0.32911895 1.15623556256324 0.32911895 1.15644935093751 0.32911895 0.621491779051435 0.358306677920355 0.636759759624803 0.358306677920355 0.672121402995225 0.358306677920355 0.696116186399071 0.358306677920355 0.713237897914398 0.358306677920355 0.754354392882199 0.358306677920355 0.807606438513828 0.358306677920355 0.836587382943535 0.358306677920355 0.87770387794175 0.358306677920355 0.93148449709808 0.358306677920355 0.959936867712224 0.358306677920355 1.00105336248562 0.358306677920355 1.04216985720562 0.358306677920355 1.06912678552742 0.358306677920355 1.08328635188956 0.358306677920355 1.12897134597814 0.358306677920355 1.15618823 0.358306677920355 1.15623556256324 0.358306677920355 1.15644935093751 0.358306677920355 0.621491779051435 0.398869476243073 0.636759759624803 0.398869476243073 0.672121402995225 0.398869476243073 0.696116186399071 0.398869476243073 0.713237897914398 0.398869476243073 0.754354392882199 0.398869476243073 0.807606438513828 0.398869476243073 0.836587382943535 0.398869476243073 0.87770387794175 0.398869476243073 0.93148449709808 0.398869476243073 0.959936867712224 0.398869476243073 1.00105336248562 0.398869476243073 1.04216985720562 0.398869476243073 1.06912678552742 0.398869476243073 1.08328635188956 0.398869476243073 1.12897134597814 0.398869476243073 1.15618823 0.398869476243073 1.15623556256324 0.398869476243073 1.15644935093751 0.398869476243073 0.636759759624803 0.430713752465371 0.672121402995225 0.430713752465371 0.696116186399071 0.430713752465371 0.713237897914398 0.430713752465371 0.754354392882199 0.430713752465371 0.807606438513828 0.430713752465371 0.836587382943535 0.430713752465371 0.87770387794175 0.430713752465371 0.93148449709808 0.430713752465371 0.959936867712224 0.430713752465371 1.00105336248562 0.430713752465371 1.04216985720562 0.430713752465371 1.06912678552742 0.430713752465371 1.08328635188956 0.430713752465371 1.12897134597814 0.430713752465371 1.15618823 0.430713752465371 1.15623556256324 0.430713752465371 1.15644935093751 0.430713752465371 0.636759759624803 0.443042122029285 0.672121402995225 0.443042122029285 0.696116186399071 0.443042122029285 0.713237897914398 0.443042122029285 0.754354392882199 0.443042122029285 0.807606438513828 0.443042122029285 0.836587382943535 0.443042122029285 0.87770387794175 0.443042122029285 0.93148449709808 0.443042122029285 0.959936867712224 0.443042122029285 1.00105336248562 0.443042122029285 1.04216985720562 0.443042122029285 1.06912678552742 0.443042122029285 1.08328635188956 0.443042122029285 1.12897134597814 0.443042122029285 1.15618823 0.443042122029285 1.15623556256324 0.443042122029285 1.15644935093751 0.443042122029285 0.636759759624803 0.458427766826223 0.672121402995225 0.458427766826223 0.696116186399071 0.458427766826223 0.713237897914398 0.458427766826223 0.754354392882199 0.458427766826223 0.807606438513828 0.458427766826223 0.836587382943535 0.458427766826223 0.87770387794175 0.458427766826223 0.93148449709808 0.458427766826223 0.959936867712224 0.458427766826223 1.00105336248562 0.458427766826223 1.04216985720562 0.458427766826223 1.06912678552742 0.458427766826223 1.08328635188956 0.458427766826223 1.12897134597814 0.458427766826223 1.15618823 0.458427766826223 1.15623556256324 0.458427766826223 1.15644935093751 0.458427766826223 0.636759759624803 0.492261822880001 0.672121402995225 0.492261822880001 0.696116186399071 0.492261822880001 0.713237897914398 0.492261822880001 0.754354392882199 0.492261822880001 0.807606438513828 0.492261822880001 0.836587382943535 0.492261822880001 0.87770387794175 0.492261822880001 0.93148449709808 0.492261822880001 0.959936867712224 0.492261822880001 1.00105336248562 0.492261822880001 1.04216985720562 0.492261822880001 1.06912678552742 0.492261822880001 1.08328635188956 0.492261822880001 1.12897134597814 0.492261822880001 1.15618823 0.492261822880001 1.15623556256324 0.492261822880001 1.15644935093751 0.492261822880001 0.636759759624803 0.508284020466012 0.672121402995225 0.508284020466012 0.696116186399071 0.508284020466012 0.713237897914398 0.508284020466012 0.754354392882199 0.508284020466012 0.807606438513828 0.508284020466012 0.836587382943535 0.508284020466012 0.87770387794175 0.508284020466012 0.93148449709808 0.508284020466012 0.959936867712224 0.508284020466012 1.00105336248562 0.508284020466012 1.04216985720562 0.508284020466012 1.06912678552742 0.508284020466012 1.08328635188956 0.508284020466012 1.12897134597814 0.508284020466012 1.15618823 0.508284020466012 1.15623556256324 0.508284020466012 1.15644935093751 0.508284020466012 0.621491779051435 0.552406391229385 0.636759759624803 0.552406391229385 0.672121402995225 0.552406391229385 0.696116186399071 0.552406391229385 0.713237897914398 0.552406391229385 0.754354392882199 0.552406391229385 0.807606438513828 0.552406391229385 0.836587382943535 0.552406391229385 0.87770387794175 0.552406391229385 0.93148449709808 0.552406391229385 0.959936867712224 0.552406391229385 1.00105336248562 0.552406391229385 1.04216985720562 0.552406391229385 1.06912678552742 0.552406391229385 1.08328635188956 0.552406391229385 1.12897134597814 0.552406391229385 1.15618823 0.552406391229385 1.15623556256324 0.552406391229385 1.15644935093751 0.552406391229385 0.621491779051435 0.590505828148435 0.636759759624803 0.590505828148435 0.672121402995225 0.590505828148435 0.696116186399071 0.590505828148435 0.713237897914398 0.590505828148435 0.754354392882199 0.590505828148435 0.807606438513828 0.590505828148435 0.836587382943535 0.590505828148435 0.87770387794175 0.590505828148435 0.93148449709808 0.590505828148435 0.959936867712224 0.590505828148435 1.00105336248562 0.590505828148435 1.04216985720562 0.590505828148435 1.06912678552742 0.590505828148435 1.08328635188956 0.590505828148435 1.12897134597814 0.590505828148435 1.15618823 0.590505828148435 1.15623556256324 0.590505828148435 1.15644935093751 0.590505828148435 0.621491779051435 0.591272934352889 0.636759759624803 0.591272934352889 0.672121402995225 0.591272934352889 0.696116186399071 0.591272934352889 0.713237897914398 0.591272934352889 0.754354392882199 0.591272934352889 0.807606438513828 0.591272934352889 0.836587382943535 0.591272934352889 0.87770387794175 0.591272934352889 0.93148449709808 0.591272934352889 0.959936867712224 0.591272934352889 1.00105336248562 0.591272934352889 1.04216985720562 0.591272934352889 1.06912678552742 0.591272934352889 1.08328635188956 0.591272934352889 1.12897134597814 0.591272934352889 1.15618823 0.591272934352889 1.15623556256324 0.591272934352889 1.15644935093751 0.591272934352889 0.621491779051435 0.592383359292916 0.636759759624803 0.592383359292916 0.672121402995225 0.592383359292916 0.696116186399071 0.592383359292916 0.713237897914398 0.592383359292916 0.754354392882199 0.592383359292916 0.807606438513828 0.592383359292916 0.836587382943535 0.592383359292916 0.87770387794175 0.592383359292916 0.93148449709808 0.592383359292916 0.959936867712224 0.592383359292916 1.00105336248562 0.592383359292916 1.04216985720562 0.592383359292916 1.06912678552742 0.592383359292916 1.08328635188956 0.592383359292916 1.12897134597814 0.592383359292916 1.15618823 0.592383359292916 1.15623556256324 0.592383359292916 1.15644935093751 0.592383359292916 0.60421347 0.641734115061065 0.621491779051435 0.641734115061065 0.636759759624803 0.641734115061065 0.672121402995225 0.641734115061065 0.696116186399071 0.641734115061065 0.713237897914398 0.641734115061065 0.754354392882199 0.641734115061065 0.807606438513828 0.641734115061065 0.836587382943535 0.641734115061065 0.87770387794175 0.641734115061065 0.93148449709808 0.641734115061065 0.959936867712224 0.641734115061065 1.00105336248562 0.641734115061065 1.04216985720562 0.641734115061065 1.06912678552742 0.641734115061065 1.08328635188956 0.641734115061065 1.12897134597814 0.641734115061065 1.15618823 0.641734115061065 1.15623556256324 0.641734115061065 1.15644935093751 0.641734115061065 0.60421347 0.643687931100477 0.621491779051435 0.643687931100477 0.636759759624803 0.643687931100477 0.672121402995225 0.643687931100477 0.696116186399071 0.643687931100477 0.713237897914398 0.643687931100477 0.754354392882199 0.643687931100477 0.807606438513828 0.643687931100477 0.836587382943535 0.643687931100477 0.87770387794175 0.643687931100477 0.93148449709808 0.643687931100477 0.959936867712224 0.643687931100477 1.00105336248562 0.643687931100477 1.04216985720562 0.643687931100477 1.06912678552742 0.643687931100477 1.08328635188956 0.643687931100477 1.12897134597814 0.643687931100477 1.15618823 0.643687931100477 1.15623556256324 0.643687931100477 1.15644935093751 0.643687931100477 0.60421347 0.65025232950052 0.621491779051435 0.65025232950052 0.636759759624803 0.65025232950052 0.672121402995225 0.65025232950052 0.696116186399071 0.65025232950052 0.713237897914398 0.65025232950052 0.754354392882199 0.65025232950052 0.807606438513828 0.65025232950052 0.836587382943535 0.65025232950052 0.87770387794175 0.65025232950052 0.93148449709808 0.65025232950052 0.959936867712224 0.65025232950052 1.00105336248562 0.65025232950052 1.04216985720562 0.65025232950052 1.06912678552742 0.65025232950052 1.08328635188956 0.65025232950052 1.12897134597814 0.65025232950052 1.15618823 0.65025232950052 1.15623556256324 0.65025232950052 1.15644935093751 0.65025232950052 0.60421347 0.664953675963996 0.621491779051435 0.664953675963996 0.636759759624803 0.664953675963996 0.672121402995225 0.664953675963996 0.696116186399071 0.664953675963996 0.713237897914398 0.664953675963996 0.754354392882199 0.664953675963996 0.807606438513828 0.664953675963996 0.836587382943535 0.664953675963996 0.87770387794175 0.664953675963996 0.93148449709808 0.664953675963996 0.959936867712224 0.664953675963996 1.00105336248562 0.664953675963996 1.04216985720562 0.664953675963996 1.06912678552742 0.664953675963996 1.08328635188956 0.664953675963996 1.12897134597814 0.664953675963996 1.15618823 0.664953675963996 1.15623556256324 0.664953675963996 1.15644935093751 0.664953675963996 0.592043823226323 0.680718288020093 0.592212807606451 0.680718288020093 0.59307675 0.680718288020093 0.593482436705868 0.680718288020093 0.60421347 0.680718288020093 0.621491779051435 0.680718288020093 0.636759759624803 0.680718288020093 0.672121402995225 0.680718288020093 0.696116186399071 0.680718288020093 0.713237897914398 0.680718288020093 0.754354392882199 0.680718288020093 0.807606438513828 0.680718288020093 0.836587382943535 0.680718288020093 0.87770387794175 0.680718288020093 0.93148449709808 0.680718288020093 0.959936867712224 0.680718288020093 1.00105336248562 0.680718288020093 1.04216985720562 0.680718288020093 1.06912678552742 0.680718288020093 1.08328635188956 0.680718288020093 1.12897134597814 0.680718288020093 1.15618823 0.680718288020093 1.15623556256324 0.680718288020093 1.15644935093751 0.680718288020093 104 107 240 240 241 105 241 240 107 105 241 242 240 105 104 107 242 241 244 105 243 243 242 107 267 266 105 267 105 268 270 269 105 266 267 106 243 107 244 105 242 243 107 245 244 105 266 106 101 106 291 291 315 101 315 291 292 102 315 316 315 102 101 106 292 291 106 294 293 269 268 105 292 293 316 292 106 293 102 316 317 292 316 315 106 269 270 106 268 269 106 267 268 317 316 293 105 244 245 246 271 105 245 107 246 271 270 105 271 246 247 271 247 272 106 271 272 246 113 247 270 271 106 248 272 247 248 113 249 248 273 272 273 248 249 273 249 274 272 273 297 113 112 249 248 247 113 107 113 246 272 296 106 294 295 319 106 295 294 317 318 102 318 317 294 319 318 294 318 319 102 295 296 319 317 293 294 272 297 296 295 106 296 297 274 298 296 297 321 296 321 320 321 297 298 341 321 322 102 320 103 274 275 298 296 320 319 297 273 274 319 320 102 249 250 274 245 246 105 341 320 321 99 98 339 99 340 100 95 100 340 103 339 98 95 341 96 340 339 103 97 360 359 92 97 359 96 360 97 340 99 339 320 340 103 94 93 359 360 90 89 360 91 90 94 359 89 378 87 379 86 91 361 86 379 87 83 88 379 378 88 87 379 88 378 89 359 360 93 92 359 341 95 340 84 85 397 360 96 341 415 80 84 433 82 80 380 379 86 83 398 85 91 360 361 397 415 84 398 415 397 416 433 415 415 433 80 380 83 379 398 397 85 360 341 342 82 433 81 75 74 469 76 489 71 71 488 72 76 75 470 81 433 77 79 77 434 451 469 74 451 78 79 452 469 451 451 74 78 452 451 79 75 469 470 433 434 77 320 341 340 322 321 298 275 274 250 250 112 251 299 275 276 251 275 250 276 275 251 299 322 298 112 252 251 299 298 275 276 252 277 252 276 251 300 277 301 277 300 276 301 277 278 300 301 325 252 253 277 276 300 299 112 111 252 299 300 324 322 323 343 323 322 299 342 343 361 343 342 322 361 343 362 342 361 360 323 324 343 322 342 341 324 325 344 325 324 300 362 344 363 362 343 344 345 363 344 362 363 382 344 325 345 344 343 324 323 299 324 361 362 381 301 302 325 250 249 112 278 277 253 253 111 254 302 278 279 254 278 253 279 278 254 326 325 302 111 255 254 302 301 278 279 255 280 255 279 254 303 280 304 280 303 279 304 280 281 303 304 328 255 256 280 279 303 302 111 110 255 302 303 327 345 326 346 345 325 326 364 346 365 346 364 345 365 346 347 364 365 384 326 327 346 345 364 363 327 328 347 328 327 303 347 328 348 327 347 346 366 348 367 348 366 347 367 348 349 366 367 386 328 329 348 347 366 365 326 302 327 365 366 385 304 305 328 253 252 111 363 364 383 380 381 399 381 380 361 398 399 416 399 398 380 416 399 417 398 416 415 381 382 399 380 398 83 382 383 401 383 382 363 418 417 400 417 399 400 401 400 382 419 400 401 383 384 401 400 399 382 381 362 382 416 417 435 434 435 453 434 416 435 452 453 470 453 452 434 470 453 471 452 470 469 435 436 453 434 452 79 418 419 436 419 418 400 454 436 437 454 453 436 471 454 472 471 453 454 455 472 454 471 490 470 437 436 419 436 435 418 417 418 435 489 76 470 401 402 419 416 434 433 384 385 402 385 384 365 419 420 437 419 402 420 403 420 402 438 437 420 402 385 403 402 401 384 403 386 404 386 403 385 421 404 422 404 421 403 422 404 405 439 420 421 386 387 404 403 421 420 385 366 386 440 421 422 455 438 456 438 455 437 473 456 474 456 473 455 474 456 457 492 472 473 438 439 456 455 473 472 439 440 457 440 439 421 457 440 458 439 457 456 475 458 476 458 475 457 476 458 459 494 474 475 440 441 458 457 475 474 438 420 439 493 473 474 422 423 440 437 455 454 383 364 384 491 471 472 367 368 386 361 380 86 495 475 476 44 563 45 563 44 49 46 45 583 583 45 563 46 583 41 583 563 564 565 48 47 603 583 584 563 49 564 49 48 564 603 604 36 603 35 40 37 624 623 35 603 36 40 39 603 42 41 603 38 43 603 603 43 42 38 603 39 41 583 603 36 624 37 52 545 47 66 488 67 62 488 63 62 67 488 66 65 487 488 69 68 487 70 488 69 488 70 70 487 65 68 73 488 64 63 489 58 57 525 54 53 544 55 54 544 58 544 53 507 59 64 59 507 60 61 60 507 61 506 56 525 57 56 50 55 544 50 544 51 51 545 52 16 649 11 13 236 8 650 13 12 647 18 17 647 14 19 14 648 15 19 18 647 15 648 16 3 4 239 239 2 6 2 239 4 239 6 7 3 239 1 237 238 10 238 9 10 5 9 239 7 5 239 9 238 239 10 8 237 17 22 646 26 31 623 27 26 623 28 27 623 31 30 623 33 32 623 29 34 623 623 34 33 29 623 30 32 37 623 28 623 23 24 23 647 20 25 643 21 20 643 24 646 25 645 21 644 644 643 25 645 644 25 646 21 645 12 11 649 646 647 17 647 646 24 647 648 14 645 25 646 644 21 643 23 623 647 22 21 646 647 623 624 488 66 487 508 64 489 488 73 72 506 507 525 506 61 507 526 525 507 506 525 56 508 507 64 63 488 489 490 491 510 489 470 490 527 507 508 509 508 490 510 509 490 528 508 509 491 492 510 490 508 489 71 489 488 528 509 510 544 526 545 526 544 525 48 565 564 545 546 47 546 566 47 564 565 585 526 527 545 545 51 544 527 528 546 528 527 508 546 528 547 527 546 545 566 547 567 547 566 546 548 567 547 566 567 587 547 528 529 566 565 47 526 507 527 565 566 586 529 528 510 525 544 58 492 493 511 491 472 492 529 511 530 529 510 511 512 530 511 529 530 549 511 493 512 511 510 492 494 495 514 493 474 494 530 512 531 513 512 494 514 513 494 532 512 513 495 496 514 494 512 493 473 493 492 533 513 514 529 549 548 549 530 531 568 549 569 549 568 548 550 569 549 568 569 589 549 531 550 548 568 567 551 550 532 532 550 531 533 532 513 552 532 533 571 570 551 551 570 550 552 551 532 572 551 552 533 534 552 550 570 569 531 512 532 569 570 590 514 515 533 529 548 547 471 491 490 567 568 588 584 585 605 584 564 585 584 605 604 605 585 586 605 586 606 604 605 625 565 586 585 584 604 603 587 588 608 587 567 588 606 607 627 607 606 587 608 607 587 607 608 628 588 589 608 587 606 586 566 587 586 605 606 626 624 625 649 625 624 604 12 649 650 649 648 624 8 236 237 649 16 648 625 626 649 624 648 647 626 627 651 627 626 606 628 627 607 627 628 651 651 236 13 651 650 626 235 236 651 13 650 651 651 628 652 626 650 649 625 605 626 608 609 628 604 624 36 569 590 589 589 588 568 609 590 610 590 609 589 591 610 590 609 610 630 590 571 591 629 628 609 591 572 592 572 591 571 611 592 612 592 611 591 612 592 593 611 612 631 572 573 592 591 611 610 571 551 572 610 611 631 652 629 653 652 628 629 652 234 235 234 652 653 234 653 233 629 630 653 652 235 651 630 631 654 631 630 610 654 631 655 654 233 653 654 232 233 232 654 655 656 232 655 655 631 632 654 653 630 629 609 630 632 631 612 609 608 589 590 570 571 552 553 572 564 584 583 475 495 494 476 477 495 281 280 256 256 110 257 305 281 282 257 281 256 282 281 257 329 328 305 110 258 257 305 304 281 258 259 283 109 259 258 282 283 306 283 282 258 306 283 307 282 306 305 283 284 307 258 282 257 258 110 109 305 306 330 329 330 350 329 305 330 349 350 368 350 349 329 368 350 369 387 386 368 330 331 350 368 367 349 351 350 331 308 331 307 369 351 370 369 350 351 352 370 351 369 370 389 351 331 332 331 330 307 306 307 330 368 369 388 283 259 284 349 348 329 260 284 259 260 109 261 284 285 308 285 284 260 308 285 309 284 308 307 260 261 285 260 259 109 261 262 287 262 261 109 310 309 286 309 285 286 287 286 261 311 286 287 262 263 287 286 285 261 109 108 262 308 309 333 332 333 353 332 308 333 352 353 371 353 352 332 372 371 353 352 371 370 333 334 353 332 352 351 310 311 334 311 310 286 334 311 335 310 334 333 354 335 355 335 354 334 355 335 336 373 353 354 311 312 335 334 354 353 309 310 333 374 354 355 287 288 311 308 332 331 370 371 390 387 388 405 387 368 388 441 440 423 406 423 405 424 441 423 459 458 441 406 405 388 423 422 405 406 389 407 389 406 388 424 407 425 407 424 406 425 407 408 441 424 442 389 390 407 406 424 423 369 389 388 443 424 425 459 442 460 442 459 441 496 477 478 460 477 459 478 477 460 515 514 496 442 443 460 496 495 477 460 461 478 461 460 443 461 443 444 478 461 479 497 479 498 479 497 478 498 479 480 497 498 517 461 462 479 478 497 496 442 424 443 496 497 516 425 426 443 477 476 459 390 372 391 390 389 370 426 408 409 391 408 390 409 408 391 408 426 425 372 373 391 390 408 407 373 374 392 374 373 354 409 392 410 409 391 392 393 410 392 426 409 427 410 411 428 392 391 373 372 353 373 428 409 410 444 427 445 427 444 426 480 462 463 445 462 444 463 462 445 462 480 479 427 428 445 444 462 461 445 446 463 446 445 428 429 446 428 463 446 464 481 464 482 464 481 463 465 482 464 500 480 481 464 446 447 463 481 480 427 409 428 498 480 499 393 392 374 426 444 443 390 371 372 482 501 481 355 356 374 405 404 387 263 264 288 264 263 108 336 335 312 289 312 288 313 336 312 356 355 336 289 288 264 312 311 288 289 265 290 265 289 264 313 290 314 290 313 289 314 290 115 336 313 337 265 117 290 289 313 312 264 108 265 338 313 314 126 375 356 374 356 375 394 393 135 375 132 374 131 130 374 393 394 133 357 356 337 356 336 337 357 338 358 338 357 337 377 376 125 126 356 357 358 126 357 127 375 376 338 119 358 375 125 376 337 313 338 127 376 377 314 120 338 288 287 263 120 119 338 358 118 123 118 358 119 123 122 358 115 120 314 116 115 290 290 117 116 265 114 117 122 121 358 132 375 127 135 393 130 393 374 130 374 132 131 126 125 375 124 377 125 128 377 129 129 377 124 121 126 358 377 128 127 265 108 114 263 262 108 394 135 395 412 411 133 133 394 395 429 412 430 412 429 411 413 430 412 136 447 429 413 412 133 411 429 428 414 413 133 411 393 133 431 414 432 414 431 413 432 414 138 136 430 431 133 395 396 413 431 430 395 135 396 430 136 429 143 465 447 136 448 447 147 483 465 143 142 465 466 465 142 465 483 482 143 447 144 447 465 464 142 468 467 448 139 447 449 139 448 142 467 466 485 484 145 147 465 466 466 467 147 484 485 150 483 145 484 449 448 141 483 484 150 431 432 136 429 447 446 450 141 140 450 449 141 144 447 139 140 139 450 139 449 450 134 133 396 141 448 136 137 138 414 133 137 414 432 138 136 468 146 147 468 142 146 485 145 486 483 147 145 486 145 150 147 467 468 149 502 483 149 483 150 153 152 502 153 502 148 149 148 502 485 486 150 396 135 134 482 483 502 393 411 410 505 152 151 515 516 535 515 496 516 515 535 534 535 516 517 535 517 536 534 535 554 497 517 516 553 552 534 499 500 519 500 499 480 537 536 518 536 517 518 519 518 499 538 518 519 500 501 519 518 517 499 499 517 498 535 536 555 553 554 574 553 534 554 553 574 573 574 554 555 574 555 575 573 574 594 535 555 554 593 592 573 537 538 556 538 537 518 575 556 576 575 555 556 557 576 556 575 576 596 556 538 557 556 555 537 537 555 536 574 575 595 519 520 538 573 572 553 501 502 521 502 501 482 520 521 539 521 520 501 539 521 540 539 557 538 521 502 157 539 538 520 502 503 159 504 503 152 541 540 522 540 521 522 161 523 522 542 522 523 503 504 154 162 522 521 502 152 503 539 540 559 557 558 578 557 539 558 557 578 577 578 558 559 578 559 579 577 578 598 539 559 558 557 577 576 541 542 560 542 541 522 560 542 561 559 169 579 579 173 580 559 560 170 581 580 173 579 580 600 542 543 561 560 559 541 541 559 540 578 579 599 523 524 542 520 519 501 500 481 501 576 577 597 593 594 613 593 573 594 632 613 633 632 612 613 614 633 613 632 633 657 613 594 614 612 593 613 595 596 616 595 575 596 633 614 634 615 614 595 616 615 595 635 614 615 596 597 616 595 614 594 574 595 594 636 615 616 632 657 656 657 633 634 656 230 231 230 656 657 229 230 657 657 634 658 656 231 232 659 658 635 635 658 634 636 635 615 659 635 636 229 659 228 659 229 658 660 228 659 659 636 660 658 229 657 634 614 635 616 617 636 632 656 655 597 598 618 597 577 598 617 618 637 618 617 597 638 637 618 637 660 636 598 599 618 637 636 617 579 600 599 599 598 578 619 600 620 600 619 599 601 620 600 639 618 619 620 621 640 599 619 618 596 576 597 640 619 620 637 661 660 661 637 638 226 227 661 661 227 660 662 661 638 226 661 662 638 639 662 660 227 228 639 640 663 640 639 619 663 640 664 662 213 226 226 211 225 662 663 213 212 663 664 664 640 641 663 662 639 638 618 639 581 601 600 617 616 597 580 581 600 171 560 561 533 515 534 505 156 155 156 505 151 159 503 154 154 505 155 159 158 502 162 521 157 523 161 524 522 162 161 502 158 157 524 161 160 562 561 543 543 524 164 621 601 602 561 562 171 601 581 582 601 621 620 543 163 562 542 524 543 164 163 543 169 173 579 582 602 601 172 602 582 176 622 602 602 622 621 163 168 562 164 524 165 524 160 165 642 621 622 154 504 505 168 167 562 170 560 171 166 171 562 167 166 562 173 582 581 172 177 602 174 172 582 173 174 582 169 559 170 180 622 175 183 622 178 178 622 179 179 622 180 622 182 642 642 182 181 642 186 185 186 642 181 622 183 182 175 622 176 177 176 602 184 642 185 189 188 642 642 666 641 641 621 642 187 642 188 192 642 187 642 184 189 192 191 642 195 194 642 190 195 642 191 190 642 193 642 194 193 198 666 226 213 211 665 641 666 665 666 208 665 208 664 666 198 197 666 642 193 196 201 666 197 196 666 199 204 666 200 199 666 201 200 666 204 203 666 641 665 664 207 666 202 209 666 205 205 666 206 206 666 207 208 666 210 663 212 213 664 208 212 210 666 209 215 224 211 216 214 223 215 216 223 215 223 224 221 222 223 217 221 223 218 219 223 223 219 217 218 223 214 222 220 223 225 211 224 202 666 203 621 641 640 504 152 505 256 255 110 -267 463 1 0.387398725351434 -7.21279194058922 1.75566519138962 -1.18857467445427 11.2339734254601 1.75393602555749 -1.1875290010296 7.21279194058922 1.34821630603684 1.41444156518237 7.21279194058922 1.62850547425138 1.11537204582619 7.21279194058922 1.83584575592573 0.782494401699211 7.21279194058922 1.97048372236408 0.435829826602684 7.21279194058922 2.04193169573555 0.052968912069587 7.21279194058922 2.03789700608067 -0.353452976169501 7.21279194058922 1.9488382243206 -0.766378563289336 7.21279194058922 1.86504751897336 -0.981200351223331 20.1549001573063 1.36866520500811 1.41444156718237 20.1549001573063 1.88246508154141 0.702067315424064 20.1549001573063 2.04543979948981 -0.275796227278505 20.1549001573063 1.93251079173511 -0.803637163891062 20.1549001573063 1.67227319742871 -1.30306890389245 17.2459916335156 1.67360538724199 -1.3040721061901 16.7625991892966 1.75436858685814 -1.18146817674002 17.0350076836168 1.71202949944338 -1.2481201972249 16.8999718861773 1.73398167120664 -1.21427146112902 15.4046094265513 1.88092055974603 -0.9381939196926 16.1765899134382 1.82347364035735 -1.05856225745182 15.7951136914526 1.85579317663118 -0.993335758020724 14.0214147184814 1.92383994562749 -0.832597821203398 14.6607528960136 1.91159614027097 -0.86435123866858 15.0420292026598 1.89837313306859 -0.89715110812939 13.0936597392712 1.92471312491465 -0.831011182606773 13.6090928440845 1.92731456149223 -0.823468014497094 13.3513800842622 1.92698422073325 -0.824591088364988 11.7544104008045 1.87810315470511 -0.947904219070532 12.4984939249392 1.91178626757936 -0.865711758215816 12.1264748436296 1.89764302507642 -0.901489445835785 11.7218000636523 1.87507838103017 -0.95479830520242 11.7394411343865 1.87674949907579 -0.950990284186286 11.7474116721448 1.8774818451661 -0.94932248306639 11.7106499732683 1.87402286085446 -0.957189877704144 11.7148282055021 1.87441917939667 -0.956293752664951 11.7179957137033 1.8747203774982 -0.955610528418402 11.6720086193906 1.87055058284638 -0.964993759678242 11.6978628252071 1.87285771818337 -0.959816867437028 11.6845587320126 1.87167014152274 -0.962486571141833 11.6087807714995 1.86418755123253 -0.979072878586238 11.6399648907971 1.86755583570796 -0.971662113671306 11.6541275370485 1.86893617226193 -0.968587732885848 11.5825224317067 1.8612208585644 -0.985540024529965 11.5970705547114 1.86293266310175 -0.981816119588881 11.5897426557683 1.86210640995082 -0.983616280235666 11.567654823367 1.85950792170499 -0.989247396559192 11.5757666065409 1.86049537000134 -0.987113000393695 11.5716582419467 1.86001256377532 -0.988157529337878 11.52340267575 1.85388136264107 -1.00128923936046 11.540243037488 1.85616913294944 -0.996410035419285 11.5520301676041 1.85764174710785 -0.993258535161004 11.4889218416215 1.84866451038626 -1.01226962503403 11.5075790195456 1.85157090300864 -1.00617272612909 11.4980915290024 1.85013203174687 -1.00919775247045 11.4377184328134 1.83985132994319 -1.0304467840569 11.4548341856329 1.84301897680234 -1.02396532326718 11.4679208326056 1.84522537563198 -1.01941154995699 11.3800477743783 1.8269038501845 -1.05634369821163 11.4067981820323 1.83344352140854 -1.04338194892659 11.422110330453 1.83681292144816 -1.03660090915193 11.3205173885153 1.80812062662728 -1.09235827710965 11.3517249297822 1.81900320975726 -1.07170700143696 11.3355893765422 1.81372331997687 -1.08179818216978 11.241991866609 1.76167618021327 -1.17463542909946 11.282497515071 1.79042449033645 -1.12476719576071 11.2614584884042 1.77721509519874 -1.14808555516162 11.2374721701397 1.75744672924547 -1.18170739401719 11.2397128243493 1.75958284549763 -1.17814309372062 17.2325603477897 1.64107529150974 1.11315255847559 17.2350980180775 1.84500211288046 0.779042392472175 17.235620875326 1.88001419326301 0.703115340587115 17.237366712839 1.97636457307881 0.432039445477203 17.2395793292164 2.04457218154123 0.0496504705459834 17.2412866774031 2.0453710527204 -0.275113871766205 17.2416893982722 2.03759349130537 -0.355490238396126 17.2436456614529 1.94615865876156 -0.766425291109848 17.2438154039056 1.93334080558262 -0.803684987487064 17.2440888407638 1.91077451624366 -0.864244932340811 17.2444592537183 1.87619031205868 -0.947342886911179 17.2444656752727 1.87554789670174 -0.948794246675495 17.2444932443638 1.87277272519466 -0.955029406792242 17.244616164144 1.86005637599637 -0.982911776488077 17.2452270471649 1.78796950495909 -1.12347368436093 17.0211538275896 1.64081008166956 1.11319938726315 17.0238177102226 1.84480908768206 0.779115164238385 17.0243665841747 1.87983683444132 0.703191181378948 17.0261993223329 1.97624069316508 0.432119289677175 17.0285221400795 2.04451660113677 0.0497203214523086 17.0303145750217 2.04536607554639 -0.275064462973715 17.0307373721761 2.03759987563837 -0.355447385843121 17.0327911932135 1.94621498489244 -0.766424308928689 17.032969403372 1.93340092298706 -0.803688451473368 17.0332564817134 1.91084050840396 -0.86425584103391 17.0336453759964 1.87626376343081 -0.947364442662659 17.0336521179652 1.87562147196511 -0.948815992760008 17.0336810626703 1.87284683015731 -0.95505197225694 17.0338101159146 1.8601327986731 -0.982938039563465 17.0344514842387 1.78805628599477 -1.12351940860789 16.1614671918657 1.63973160325657 1.11338981705925 16.164564556402 1.84402407587573 0.779411118925577 16.1652028035466 1.87911552221288 0.703499623354049 16.1673341085891 1.97573684556758 0.432444034132535 16.1700356448902 2.04429052466034 0.0500044439472722 16.1721205633207 2.0453458291631 -0.274863477326798 16.1726123815656 2.03762584606606 -0.35527306715331 16.1750016517765 1.94644412836508 -0.766420313116388 16.1752089818233 1.93364549148404 -0.803702543467857 16.1755429736744 1.91110897917935 -0.864300219916757 16.1759954284899 1.87656258401268 -0.947452137370662 16.1760032724469 1.87592079664165 -0.948904461817029 16.1760369482549 1.87314831010394 -0.955143774876076 16.1761870963211 1.86044370914159 -0.983044885600681 15.7796143854261 1.63925256819998 1.1134744015882 15.7828632211977 1.8436753543064 0.779542589327464 15.7835327074333 1.87879509044903 0.703636643957615 15.7857683956447 1.9755130024832 0.432588307549915 15.7886023892097 2.04419007675738 0.0501306822084533 15.7907896437851 2.04533683276138 -0.274774171047505 15.7913056166459 2.03763738589214 -0.355195608778437 15.7938123080001 1.94654595633111 -0.766418537361205 15.7940298333577 1.93375417489232 -0.80370880572031 15.7943802510529 1.91122828587805 -0.864319941554811 15.7948549617549 1.87669538007116 -0.947491108916181 15.7948631915903 1.87605381675655 -0.948943777494765 15.7948985240735 1.87328228818005 -0.955184572040395 15.795056058956 1.86058187887793 -0.983092368332858 15.3888205354287 1.63876231656722 1.11356096668251 15.3921982270155 1.84331844351657 0.779677147149285 15.3928942949505 1.87846712927721 0.703776884256759 15.3952188207308 1.9752838890212 0.432735977897832 15.3981655819536 2.04408725776856 0.0502599003190722 15.4004399888182 2.04532762352473 -0.274682752560169 15.4009765360073 2.03764919870432 -0.355116317563913 15.4035832634005 1.94665019902912 -0.766416719448047 15.403809476099 1.93386543610489 -0.803715216461314 15.4041738906331 1.91135042323819 -0.864340131072406 15.0260381901968 1.63830720540236 1.11364132694826 15.0295118116776 1.84298709386675 0.779802068271045 15.0302276758025 1.87816265183508 0.703907082643952 15.0326183783853 1.97507117169528 0.432873080471286 15.0356491795354 2.04399179138152 0.0503798780034477 15.0379885648862 2.04531907241297 -0.274597867689609 15.038540455361 2.0376601673122 -0.355042692468552 15.0412218040879 1.94674699734339 -0.766415031315804 15.041454498589 1.93396875216989 -0.803721169373722 15.0418293569639 1.91146383959192 -0.864358878961268 14.6446067872059 1.63782869893875 1.11372581821052 14.6481566694236 1.8426386884646 0.779933419556478 14.6488882789786 1.87784249758686 0.70404398465632 14.6513316373098 1.97484749211747 0.433017248555402 14.6544293523765 2.04389139950964 0.0505060457865826 14.6568205088209 2.04531007967019 -0.27450859939789 14.6573846282748 2.0376717023859 -0.354965264602769 14.6601254756067 1.94684880027952 -0.766413255859394 14.6603633401516 1.93407741030834 -0.803727430048207 14.0051521862262 1.63702650180932 1.11386746451599 14.0087733357644 1.84205454886459 0.780153644352231 14.0095196829856 1.87730571431877 0.704273520040656 14.0120123843245 1.97447243920211 0.433258981258339 14.0151729304446 2.04372305517337 0.0507176129853245 14.0176127959273 2.04529499896464 -0.274358898959869 14.0181884333404 2.03769104650114 -0.354835418389153 14.0209853865349 1.94701953476417 -0.766410278124039 14.021228131522 1.9342596427959 -0.80373792984431 13.5928499031137 1.63650926770798 1.11395879409487 13.5964794142577 1.84167787773684 0.780295652093047 13.5972275171214 1.87695957349254 0.704421534318459 13.5997261619615 1.97423057381937 0.433414870679979 13.6028944207634 2.04361448402255 0.0508540600430484 13.605340375469 2.04528527221216 -0.274262345980033 13.6059174666909 2.03770352304683 -0.354751669657138 13.6087215771254 1.94712966334829 -0.766408357334034 13.6089649505858 1.93437718864259 -0.803744702493603 13.3351722750375 1.63618601057234 1.11401587257715 13.3387920453272 1.84144245493723 0.780384408190234 13.3395381605412 1.87674322981355 0.704514045661808 13.3420302164813 1.97407939795735 0.433512308012123 13.3451902308391 2.04354661913053 0.050939349416867 13.347629904986 2.04527919205324 -0.274201990957175 13.3482055251026 2.03771132218676 -0.354699318054378 13.3510025455874 1.94719850818854 -0.766407156593062 13.3512453082529 1.93445067053233 -0.803748936310451 12.4825379870664 1.63511637909885 1.11420474056296 12.486043443174 1.8406633851998 0.780678123046364 12.4867660601178 1.87602728321462 0.7048201935846 12.4891797904819 1.97357907826727 0.433834778874478 12.4922408386092 2.04332200008531 0.0512216400553825 12.4946043766624 2.04525906683722 -0.274002215074103 12.4951620674707 2.03773713805467 -0.354526030956852 12.4978721535839 1.94742640628596 -0.766403181894052 12.4981073855339 1.93469392027985 -0.803762951781421 12.4984863462307 1.91225992267019 -0.864490472114568 12.1107082019713 1.63464991789735 1.11428710496858 12.1141243251626 1.84032360055837 0.780806224251465 12.1148285543464 1.87571502236997 0.704953720285196 12.1171809326189 1.97336084740337 0.433975435114776 12.1201643253827 2.043224016086 0.0513447817739818 12.1224680180587 2.04525028721484 -0.27391506198665 12.1230116026009 2.03774840063476 -0.354450432447735 12.1256532190256 1.94752583782613 -0.766401447803168 12.1258825141074 1.93480005046705 -0.80376906680504 12.1262519125456 1.91237643461077 -0.864509731676997 11.7388965480464 1.63418347946032 1.11436946533926 11.7421993629137 1.83998381061441 0.780934327436292 11.742880260216 1.87540275250773 0.705087250823333 11.745154767242 1.97314260056812 0.43411610163898 11.7480395454299 2.04312601943182 0.0514679394223756 11.7502672018384 2.04524150613054 -0.273827893847004 11.7507928588167 2.03775966534031 -0.354374820111386 11.7533474308215 1.94762529262592 -0.766399713345091 11.7535691763648 1.93490620593607 -0.80377518331879 11.7539264143814 1.91249297511262 -0.864528995986792 11.7239472294771 1.63416472551174 1.11437277677735 11.7272449871141 1.83997014832565 0.78093947821428 11.7279248428977 1.87539019666094 0.70509261986166 11.7301958734108 1.97313382502714 0.434121757733834 11.7330762481381 2.04312207894542 0.0514728916434048 11.7353005086104 2.04524115303261 -0.273824388700294 11.7358253648215 2.03776011831285 -0.354371779622761 11.7383760483656 1.94762929196288 -0.766399643598811 11.7385974566185 1.93491047473394 -0.803775429281012 11.7389541513323 1.91249766153755 -0.864529770660009 11.7394374087216 1.87810835693119 -0.947905773101829 11.7394457871654 1.87746917900736 -0.949362103731478 11.6516922097244 1.63407408145243 1.1143887820566 11.6549649775633 1.83990411344982 0.780964373821815 11.6556396866241 1.87532950953234 0.705118570442246 11.6578935373556 1.97309140931754 0.4341490959088 11.6607521507409 2.04310303286903 0.0514968278717562 11.6629596282484 2.04523944635 -0.273807446722528 11.6634805269231 2.03776230774054 -0.354357083532549 11.6660119925191 1.947648622727 -0.766399306481584 11.6662317337443 1.93493110794567 -0.803776618138865 11.6665857432198 1.91252031336583 -0.864533515042503 11.6670653633581 1.87813357261911 -0.947913173119126 11.667073678749 1.87749443728733 -0.949369569107655 11.6671093787126 1.87473328971751 -0.955626410204044 11.5521989745096 1.63394926700133 1.11441082089812 11.5554358498967 1.83981318383506 0.780998654917898 11.5561031663657 1.87524594347619 0.705154304339283 11.5583323395166 1.97303300237153 0.434186740906322 11.5611596918336 2.04307680585205 0.051529788775874 11.5633430580873 2.04523709617672 -0.273784116877581 11.5638582709328 2.03776532268943 -0.354336846325418 11.5663621246588 1.94767524241171 -0.76639884225222 11.5665794706408 1.93495952121125 -0.803778255275001 11.5669296218397 1.91255150644669 -0.864538671308966 11.5674040157392 1.87816829638129 -0.947923363460501 11.5674122405311 1.87752921970306 -0.949379849453148 11.5674475515352 1.87476832291228 -0.955637078020289 11.5676049940806 1.86211443575185 -0.983619038479766 11.2261886303969 1.63354028641965 1.11448303575134 11.2292958639419 1.83951522300548 0.781110988209653 11.2299364752021 1.87497210969169 0.705271399101644 11.2320764936397 1.97284160647062 0.434310101198411 11.2347908872285 2.04299085880864 0.0516378030650303 11.2368871151025 2.0452293943948 -0.273707662083542 11.2373817774075 2.03777520314122 -0.35427052610197 11.2397858221196 1.94776248147489 -0.766397320881032 11.2399945091816 1.93505263849584 -0.803783620590989 11.2403307122553 1.91265373427701 -0.864555569746952 11.2407862121546 1.87828209578336 -0.947956760045008 11.2407941094055 1.87764321133969 -0.949413541009189 11.2408280142106 1.87488313646744 -0.955672039439292 11.2409791871367 1.86223284595045 -0.983659730717933 11.2417305951719 1.79044127486428 -1.12477603986688 0.55367883 1 0.55367883 0.69078275 1.38090458579697e-017 1 0.0922798044186772 1 0.175331628183484 1 0.250078269550654 1 0.324824911044614 1 0.399571552742685 1 0.474318194469285 1 0.513998509899271 1 0 3.85753651244158e-011 0.192467779310672 0 0.384935555819145 0 0.481169443740387 0 0.57740334 0 0.57740334 0.22601628 0.552754573108648 0.263457981879367 0.566042435616543 0.242361765158241 0.559268113432485 0.252821039666374 0.506108075870396 0.368548022642323 0.528895353963062 0.308824060351782 0.51648694369363 0.3383415774385 0.48648389 0.47548073 0.492362037018672 0.426065876532647 0.498451656965976 0.396587304994322 0.486178123570706 0.54715555435555 0.48479880410182 0.507338844338164 0.485004342050222 0.527248023388699 0.50786049 0.65056076 0.492587928292045 0.593118915900012 0.499215833325862 0.62184155428098 0.509151648434261 0.653078376570388 0.508448272491307 0.651715421916794 0.508132849337769 0.651100402182554 0.50959725 0.65393945 0.509430175162258 0.653616739330907 0.509303637243315 0.653372221642785 0.51123714 0.65729624 0.51008903563149 0.654926662742524 0.510589008317525 0.655953734502474 0.513684740124091 0.661805814675191 0.512333019885342 0.659413191066192 0.511755817781901 0.658330366317664 0.514893031318344 0.663834164634536 0.514215410342899 0.662708123331246 0.514553727934317 0.663273905170946 0.515601500758393 0.66498075209519 0.515211184668521 0.664352997443791 0.51540765325811 0.66467020792174 0.5178806 0.6683963 0.516969432060359 0.667094329936982 0.516369480050137 0.666185931507966 0.51994084817201 0.67106126903675 0.518801809108396 0.669618322292053 0.519372806415269 0.670351047515585 0.523417356271674 0.675009456362825 0.5221858438254 0.673687239725133 0.521297744589067 0.672683474766482 0.528291828785647 0.679476362881167 0.525865277092708 0.677398495725594 0.524609861330267 0.676211079266354 0.535190632793723 0.684078163619316 0.531245502316699 0.681660260479951 0.533176244460307 0.682908139092209 0.55114967 0.69015964 0.541445738348176 0.687017778773719 0.545968229252809 0.688648712821563 0.552535808749321 0.690510792555547 0.551836899710968 0.690336683378945 0.0922798044186772 0.22601628 0.175331628183484 0.22601628 0.192467779310672 0.22601628 0.250078269550654 0.22601628 0.324824911044614 0.22601628 0.384935555819145 0.22601628 0.399571552742685 0.22601628 0.474318194469285 0.22601628 0.481169443740387 0.22601628 0.492362037018672 0.22601628 0.50786049 0.22601628 0.508132849337769 0.22601628 0.509303637243315 0.22601628 0.514553727934317 0.22601628 0.541445738348176 0.22601628 0.0922798044186772 0.242361765158241 0.175331628183484 0.242361765158241 0.192467779310672 0.242361765158241 0.250078269550654 0.242361765158241 0.324824911044614 0.242361765158241 0.384935555819145 0.242361765158241 0.399571552742685 0.242361765158241 0.474318194469285 0.242361765158241 0.481169443740387 0.242361765158241 0.492362037018672 0.242361765158241 0.50786049 0.242361765158241 0.508132849337769 0.242361765158241 0.509303637243315 0.242361765158241 0.514553727934317 0.242361765158241 0.541445738348176 0.242361765158241 0.0922798044186772 0.308824060351782 0.175331628183484 0.308824060351782 0.192467779310672 0.308824060351782 0.250078269550654 0.308824060351782 0.324824911044614 0.308824060351782 0.384935555819145 0.308824060351782 0.399571552742685 0.308824060351782 0.474318194469285 0.308824060351782 0.481169443740387 0.308824060351782 0.492362037018672 0.308824060351782 0.50786049 0.308824060351782 0.508132849337769 0.308824060351782 0.509303637243315 0.308824060351782 0.514553727934317 0.308824060351782 0.0922798044186772 0.3383415774385 0.175331628183484 0.3383415774385 0.192467779310672 0.3383415774385 0.250078269550654 0.3383415774385 0.324824911044614 0.3383415774385 0.384935555819145 0.3383415774385 0.399571552742685 0.3383415774385 0.474318194469285 0.3383415774385 0.481169443740387 0.3383415774385 0.492362037018672 0.3383415774385 0.50786049 0.3383415774385 0.508132849337769 0.3383415774385 0.509303637243315 0.3383415774385 0.514553727934317 0.3383415774385 0.0922798044186772 0.368548022642323 0.175331628183484 0.368548022642323 0.192467779310672 0.368548022642323 0.250078269550654 0.368548022642323 0.324824911044614 0.368548022642323 0.384935555819145 0.368548022642323 0.399571552742685 0.368548022642323 0.474318194469285 0.368548022642323 0.481169443740387 0.368548022642323 0.492362037018672 0.368548022642323 0.0922798044186772 0.396587304994322 0.175331628183484 0.396587304994322 0.192467779310672 0.396587304994322 0.250078269550654 0.396587304994322 0.324824911044614 0.396587304994322 0.384935555819145 0.396587304994322 0.399571552742685 0.396587304994322 0.474318194469285 0.396587304994322 0.481169443740387 0.396587304994322 0.492362037018672 0.396587304994322 0.0922798044186772 0.426065876532647 0.175331628183484 0.426065876532647 0.192467779310672 0.426065876532647 0.250078269550654 0.426065876532647 0.324824911044614 0.426065876532647 0.384935555819145 0.426065876532647 0.399571552742685 0.426065876532647 0.474318194469285 0.426065876532647 0.481169443740387 0.426065876532647 0.0922798044186772 0.47548073 0.175331628183484 0.47548073 0.192467779310672 0.47548073 0.250078269550654 0.47548073 0.324824911044614 0.47548073 0.384935555819145 0.47548073 0.399571552742685 0.47548073 0.474318194469285 0.47548073 0.481169443740387 0.47548073 0.0922798044186772 0.507338844338164 0.175331628183484 0.507338844338164 0.192467779310672 0.507338844338164 0.250078269550654 0.507338844338164 0.324824911044614 0.507338844338164 0.384935555819145 0.507338844338164 0.399571552742685 0.507338844338164 0.474318194469285 0.507338844338164 0.481169443740387 0.507338844338164 0.0922798044186772 0.527248023388699 0.175331628183484 0.527248023388699 0.192467779310672 0.527248023388699 0.250078269550654 0.527248023388699 0.324824911044614 0.527248023388699 0.384935555819145 0.527248023388699 0.399571552742685 0.527248023388699 0.474318194469285 0.527248023388699 0.481169443740387 0.527248023388699 0.0922798044186772 0.593118915900012 0.175331628183484 0.593118915900012 0.192467779310672 0.593118915900012 0.250078269550654 0.593118915900012 0.324824911044614 0.593118915900012 0.384935555819145 0.593118915900012 0.399571552742685 0.593118915900012 0.474318194469285 0.593118915900012 0.481169443740387 0.593118915900012 0.492362037018672 0.593118915900012 0.0922798044186772 0.62184155428098 0.175331628183484 0.62184155428098 0.192467779310672 0.62184155428098 0.250078269550654 0.62184155428098 0.324824911044614 0.62184155428098 0.384935555819145 0.62184155428098 0.399571552742685 0.62184155428098 0.474318194469285 0.62184155428098 0.481169443740387 0.62184155428098 0.492362037018672 0.62184155428098 0.0922798044186772 0.65056076 0.175331628183484 0.65056076 0.192467779310672 0.65056076 0.250078269550654 0.65056076 0.324824911044614 0.65056076 0.384935555819145 0.65056076 0.399571552742685 0.65056076 0.474318194469285 0.65056076 0.481169443740387 0.65056076 0.492362037018672 0.65056076 0.0922798044186772 0.651715421916794 0.175331628183484 0.651715421916794 0.192467779310672 0.651715421916794 0.250078269550654 0.651715421916794 0.324824911044614 0.651715421916794 0.384935555819145 0.651715421916794 0.399571552742685 0.651715421916794 0.474318194469285 0.651715421916794 0.481169443740387 0.651715421916794 0.492362037018672 0.651715421916794 0.50786049 0.651715421916794 0.508132849337769 0.651715421916794 0.0922798044186772 0.65729624 0.175331628183484 0.65729624 0.192467779310672 0.65729624 0.250078269550654 0.65729624 0.324824911044614 0.65729624 0.384935555819145 0.65729624 0.399571552742685 0.65729624 0.474318194469285 0.65729624 0.481169443740387 0.65729624 0.492362037018672 0.65729624 0.50786049 0.65729624 0.508132849337769 0.65729624 0.509303637243315 0.65729624 0.0922798044186772 0.66498075209519 0.175331628183484 0.66498075209519 0.192467779310672 0.66498075209519 0.250078269550654 0.66498075209519 0.324824911044614 0.66498075209519 0.384935555819145 0.66498075209519 0.399571552742685 0.66498075209519 0.474318194469285 0.66498075209519 0.481169443740387 0.66498075209519 0.492362037018672 0.66498075209519 0.50786049 0.66498075209519 0.508132849337769 0.66498075209519 0.509303637243315 0.66498075209519 0.514553727934317 0.66498075209519 0.0922798044186772 0.69015964 0.175331628183484 0.69015964 0.192467779310672 0.69015964 0.250078269550654 0.69015964 0.324824911044614 0.69015964 0.384935555819145 0.69015964 0.399571552742685 0.69015964 0.474318194469285 0.69015964 0.481169443740387 0.69015964 0.492362037018672 0.69015964 0.50786049 0.69015964 0.508132849337769 0.69015964 0.509303637243315 0.69015964 0.514553727934317 0.69015964 0.541445738348176 0.69015964 11 70 85 71 70 12 85 71 86 71 85 70 70 11 12 11 85 100 100 114 11 114 100 101 86 101 100 101 86 87 100 85 86 114 101 115 71 72 86 11 114 128 87 86 72 72 12 73 87 73 88 73 87 72 12 74 73 102 101 87 116 115 102 115 101 102 88 103 102 103 88 89 102 87 88 117 102 103 73 74 88 72 71 12 114 115 129 128 138 11 138 128 129 129 139 138 139 129 130 114 129 128 138 139 149 148 157 11 157 148 149 158 157 149 157 158 166 148 138 149 157 166 11 139 140 149 138 148 11 140 139 130 130 116 117 117 131 130 131 117 118 116 102 117 130 131 140 158 167 166 167 158 159 150 158 149 141 150 140 151 159 150 150 159 158 140 150 149 159 168 167 131 141 140 130 129 116 115 116 129 166 167 176 103 104 117 11 166 3 104 103 89 89 74 75 13 75 74 75 13 76 88 74 89 89 75 90 132 131 118 118 104 105 90 105 104 105 90 91 104 89 90 118 105 119 75 76 90 118 117 104 106 105 91 91 76 77 77 92 91 92 77 78 77 76 14 91 92 107 119 106 120 119 105 106 120 107 121 107 120 106 106 91 107 119 120 134 92 17 107 91 90 76 76 13 14 118 119 133 141 132 142 141 131 132 152 142 143 133 142 132 118 133 132 141 142 152 151 160 159 160 151 152 152 161 160 153 161 152 151 141 152 169 159 160 143 142 133 141 151 150 144 143 134 134 143 133 121 135 134 135 121 122 133 119 134 144 134 135 153 162 161 162 153 154 144 154 153 145 154 144 155 163 154 154 163 162 153 143 144 171 161 162 163 164 172 143 153 152 121 134 120 170 160 161 107 108 121 74 12 13 172 162 163 175 184 3 184 175 176 176 185 184 185 176 177 166 176 175 184 185 195 194 204 3 204 194 195 195 205 204 205 195 196 194 184 195 204 205 215 185 186 195 184 194 3 168 177 176 177 168 169 169 178 177 178 169 170 168 159 169 177 178 187 186 196 195 196 186 187 187 197 196 197 187 188 186 177 187 205 196 206 178 179 187 177 186 185 167 168 176 207 196 197 214 226 3 226 214 215 215 227 226 227 215 216 204 215 214 226 227 239 3 239 253 239 3 226 253 4 3 254 4 253 253 239 240 240 239 227 214 3 204 228 227 216 216 206 207 241 228 229 216 217 228 206 196 207 228 240 227 240 254 253 254 240 241 254 255 5 255 254 241 242 255 241 6 5 255 240 228 241 254 5 4 216 207 217 216 215 206 205 206 215 197 198 207 175 3 166 188 187 179 179 170 171 198 188 189 179 180 188 170 161 171 198 197 188 207 208 217 207 198 208 208 218 217 209 218 208 208 198 199 217 218 230 179 171 180 179 178 170 180 189 188 189 180 181 172 181 180 173 181 172 180 171 172 189 181 190 199 209 208 209 199 200 190 200 199 191 200 190 201 210 200 200 210 209 199 189 190 218 209 219 190 181 26 189 199 198 171 162 172 220 209 210 229 242 241 242 229 230 230 243 242 243 230 231 217 230 229 242 243 257 256 6 255 6 256 7 257 7 256 7 257 258 256 242 257 243 244 257 242 256 255 219 231 230 231 219 220 220 232 231 221 232 220 219 209 220 231 232 245 244 258 257 258 244 245 245 259 258 246 259 245 260 8 259 259 8 258 244 231 245 258 8 7 245 232 233 231 244 243 218 219 230 220 210 211 217 229 228 169 160 170 135 145 144 93 92 78 78 14 79 122 121 108 108 107 17 78 79 93 92 93 17 145 155 154 146 155 145 136 145 135 136 122 123 122 136 135 146 145 136 108 109 122 78 77 14 17 109 108 94 79 80 137 136 123 123 109 110 17 93 94 123 122 109 146 156 155 156 146 147 137 147 146 147 137 25 136 137 146 156 147 24 123 20 137 94 93 79 14 80 79 155 156 165 164 173 172 173 164 165 165 174 173 174 165 27 155 165 164 173 174 182 26 181 182 191 190 26 201 211 210 202 211 201 201 191 192 191 201 200 174 183 182 173 182 181 183 27 28 183 174 27 23 165 156 165 23 27 192 202 201 193 202 192 212 202 203 191 26 192 192 26 193 183 28 26 202 212 211 26 182 183 24 23 156 222 211 212 147 25 24 155 164 163 94 95 17 95 80 81 95 81 96 81 14 82 14 81 80 97 81 82 111 110 17 17 110 109 17 96 97 17 95 96 96 81 97 110 111 125 82 83 97 124 123 110 83 84 99 83 14 84 15 16 84 82 14 83 84 16 18 98 99 19 99 98 83 19 17 98 18 19 99 99 84 18 98 17 97 83 98 97 14 15 84 111 17 112 193 26 30 20 25 137 20 123 124 203 213 212 213 203 31 30 31 203 203 193 30 213 31 29 20 124 125 193 203 202 126 125 112 125 124 110 127 112 113 21 113 17 112 17 113 22 113 21 213 29 224 22 20 127 127 126 112 22 127 113 126 127 20 126 20 125 112 125 111 212 213 223 95 94 80 29 34 224 221 222 234 222 221 211 36 235 223 224 223 213 222 212 223 222 223 235 233 234 247 234 233 221 235 236 249 35 236 235 234 222 235 234 235 248 223 224 32 221 233 232 225 33 32 33 225 34 37 223 32 37 36 223 39 236 35 236 39 40 36 35 235 224 225 32 224 34 225 236 40 237 246 247 261 246 233 247 262 248 57 248 235 249 234 248 247 247 248 262 260 9 8 9 260 261 261 262 9 262 261 247 260 246 261 262 10 9 263 262 61 246 260 259 237 238 43 238 237 40 38 43 238 238 40 38 249 41 250 264 263 60 248 249 54 265 264 59 50 249 250 250 251 51 10 263 264 251 250 45 10 262 263 236 43 42 249 236 42 236 237 43 10 264 265 233 246 245 45 250 41 44 251 46 46 251 45 252 44 48 252 251 44 48 49 252 252 49 47 252 52 251 47 52 252 50 250 51 51 251 52 54 55 248 56 262 57 53 58 248 55 53 248 54 249 50 58 57 248 60 263 61 59 266 265 59 264 60 2 10 266 10 265 266 63 64 266 266 59 63 62 266 64 262 56 61 62 66 267 267 67 65 67 267 66 2 266 267 68 267 69 1 10 2 267 68 2 69 267 65 267 266 62 42 41 249 211 221 220 -19 17 1 0.154332494323399 -1.31958620130198 0.845840769945279 -1.40924429193551 1.31958609667697 1.13939655511843 -0.618156123250839 1.31958652536321 1.0013660011357 -1.20364018401738 1.31958632184906 1.10324176814581 -0.960904787895701 1.31958620094379 1.13575132095902 -0.789228943531599 2.42419264614297 1.16954252255029 0.134080451298479 1.78023117091645 1.2106347616481 -0.270957372470787 2.09673472811723 1.20921417420321 -0.0611620638376566 2.34964929660235 1.04896390382311 -1.40924429193551 2.39938733138958 1.2588338269875 -0.0818043917009379 2.38099686262971 1.31102178109956 -0.27408955246062 2.36763223550554 1.33516982172417 -0.44551712681458 2.35728667710112 1.33769785577462 -0.615401371383758 2.34996018741644 1.31860588327447 -0.78374228616941 2.34565276645149 1.27789390424723 -0.95053987117279 2.34436441420629 1.21556191871646 -1.11579412639516 2.34578512630292 1.14101189763448 -1.26314374973682 1.89120041368591 0.961879671281453 -1.40924429193551 1.60514237273177 0.904869605284252 -1.40924429193551 1.15245074 1 0 1 0.806715517797249 1 0.460980296071128 1 0.230490147755867 1 0 0 0 0.567886159789523 0 0.283943079894761 1.15245074 0 0.1555808499 0 0.29560361481 0 0.421624103229 0 0.547644591648 0 0.673665080067 0 0.799685568486 0 0.925706056905 0 1.0390783984525 0 1.15245074 0.444444494741094 1.15245074 0.722222437949496 6 10 8 11 12 8 10 11 8 8 12 7 7 5 2 5 7 4 7 13 4 7 12 13 13 14 18 15 16 18 16 17 18 14 15 18 18 3 4 18 17 9 3 19 1 19 3 18 18 4 13 -93 161 1 0.123261438949803 -1.31958620130198 0.845840769945279 -1.40924429193551 -5.85000029206485e-009 -1.82839863052382e-018 -0.750000037063089 1.04505127110111 0.769490847623905 -1.36994443435246 0.80570334261814 0.674324420043621 -1.30758774266111 0.603081247779959 0.568523730663875 -1.23001095844614 0.417972521916837 0.445863721536962 -1.13359753180561 0.254782695706834 0.309361152739707 -1.02073782954214 0.116788245118802 0.162628105438979 -0.894553750598137 0.0544921626563866 0.0819109435035577 -0.82337048100968 -5.85000029206485e-009 -1.82839863052382e-018 -0.750000037063089 1.31958587667696 0.752125697664052 0.131521655936943 0.151266061798848 0.164255971859559 -0.556378505144092 0.335679173224413 0.317677615538639 -0.375876893134938 0.550015572147189 0.456203942848229 -0.213286381852839 0.789522345850416 0.576355066821864 -0.072696473287119 1.04826063984805 0.675516877079453 0.0428399235492931 1.31958609667697 1.13939655511843 -0.618156123250839 1.31958597366016 1.09208903978182 -0.364733263729941 1.31958589609775 0.981205906623317 -0.125978001628723 1.31958587419308 0.876159820413039 0.0136457294938847 1.31958652536321 1.0013660011357 -1.20364018401738 1.31958632184906 1.10324176814581 -0.960904787895701 1.31958620094379 1.13575132095902 -0.789228943531599 1.04905460546209 0.78025090920334 -0.063696738726309 1.04962678731004 0.869793346725999 -0.190688122305768 1.0499952861361 0.965815645466083 -0.409189768237455 1.04975681666309 1.00873756271912 -0.642282124245091 1.04927586685963 1.00765956113009 -0.799980250184128 1.04853352844498 0.982121263040277 -0.958284223422742 1.04698223869671 0.898631155273553 -1.18172775159965 0.814969987262922 0.673173331352651 -0.1534138204262 0.815005111687858 0.747111491351476 -0.265148152207488 0.814466766154939 0.827295075188919 -0.458004824138537 0.813276163919218 0.864351486030998 -0.664253632334976 0.812158377880702 0.864777210709149 -0.803927396934725 0.810783131951994 0.845148878933088 -0.944128145115205 0.808352925169791 0.778540466746258 -1.1417503177809 0.616614909677731 0.561327351990735 -0.249414291564451 0.615808066874103 0.620298519782274 -0.344332090707127 0.614091319961579 0.684729870588398 -0.508277442916262 0.611922438336933 0.715204954534156 -0.683687196610031 0.610285277718306 0.716337636854353 -0.8024735472995 0.608505520469759 0.701602715170294 -0.921663308096899 0.60573318200207 0.650015799921836 -1.08949413657661 0.549193303022777 0.518052889071518 -0.287020199259923 0.548087677451102 0.57154457572633 -0.375228186164364 0.545977387555978 0.630108533281793 -0.527545144166367 0.543513368855044 0.657996739676549 -0.690470663664218 0.54174023725838 0.659246822498242 -0.800778089475821 0.539876080947582 0.646149731897259 -0.911437079661299 0.5370861028513 0.59982253094406 -1.06720480657003 0.433780553791778 0.436632264137473 -0.358342643168164 0.43222736720626 0.480251441157028 -0.433642114915311 0.429559735430212 0.528141462542203 -0.563522305807769 0.426720958645442 0.551180129945233 -0.702305128991837 0.424806247102635 0.552485269244204 -0.796202586675222 0.422891175562221 0.542163301847087 -0.89035505121868 0.420206266692151 0.505028532489344 -1.02281838939917 0.334084457543078 0.357569752911125 -0.428212885046421 0.33228590693678 0.392130816343647 -0.490634558190638 0.329360117076712 0.430137998778038 -0.598109947402882 0.32641464538413 0.448554466060045 -0.7127705443291 0.324513058837703 0.449760532155603 -0.790273724389301 0.322680137948819 0.441810717124902 -0.86794537147871 0.32024403058023 0.412818595142433 -0.977177347381555 0.269652182376898 0.301319114272892 -0.478245663120781 0.267811363291809 0.329747006258615 -0.531302766961004 0.264893008102429 0.361027971850871 -0.622505187575655 0.262037259294344 0.376242254391793 -0.719665833208335 0.260237254699241 0.377314162142836 -0.785285999611 0.258538984599476 0.370888618472229 -0.851020605935373 0.256355229094788 0.347266229112373 -0.943443224356454 0.149822554173462 0.183191358990089 -0.58408316844819 0.148282147268634 0.199579338636508 -0.616926963426746 0.145928108106755 0.217609869998448 -0.673141893936637 0.143720758171262 0.226420665844943 -0.732806981420397 0.142381162840592 0.227106568426337 -0.773019595662365 0.141161299339714 0.223511548255517 -0.813261911915363 0.139681736573825 0.210127435947123 -0.869821219396314 0.126716003165558 0.157955471705185 -0.606817049818238 0.125310173583225 0.171919612627378 -0.63524568818156 0.123174522014327 0.18727958920213 -0.683852466479376 0.121186134846682 0.194789066836096 -0.735395596346794 0.119987238581283 0.195381918613206 -0.770116841162003 0.118902310935493 0.19233454216549 -0.804855710112681 0.117600547102725 0.180967082206343 -0.853677134402516 0.0600540930971153 0.0795166942827506 -0.677734763421753 0.0592257905835659 0.0862842213843725 -0.692218773260489 0.0579871621444802 0.0937191179712325 -0.716895434614476 0.0568556903257684 0.0973556962012447 -0.742982945169115 0.0561853523896871 0.0976516113961071 -0.760527074288946 0.0555890389286567 0.0961946844011982 -0.778066935613845 0.0548948799387766 0.0907358191487609 -0.802713499093087 1 0 1 1.61807213 1 0.269679028172627 1 0.512389717765439 1 0.730829358432717 1 0.949269053158205 1 1.16770874855557 1 1.38614846456471 1 1.50211029557922 0 1.61807213 0 0 0 1.34839344111366 0 1.0787147516049 0 0.809036062436998 0 0.539357373824105 0 0.269678686013333 0.5 0 0.359193480662347 0 0.210790777574803 0 0.107325723308095 0 0.840472273664598 0 0.689400219979374 0 0.593056271704741 0 0.107325723308095 0.269679028172627 0.210790777574803 0.269679028172627 0.359193480662347 0.269679028172627 0.5 0.269679028172627 0.593056271704741 0.269679028172627 0.689400219979374 0.269679028172627 0.840472273664598 0.269679028172627 0.107325723308095 0.512389717765439 0.210790777574803 0.512389717765439 0.359193480662347 0.512389717765439 0.5 0.512389717765439 0.593056271704741 0.512389717765439 0.689400219979374 0.512389717765439 0.840472273664598 0.512389717765439 0.107325723308095 0.730829358432717 0.210790777574803 0.730829358432717 0.359193480662347 0.730829358432717 0.5 0.730829358432717 0.593056271704741 0.730829358432717 0.689400219979374 0.730829358432717 0.840472273664598 0.730829358432717 0.107325723308095 0.809036062436998 0.210790777574803 0.809036062436998 0.359193480662347 0.809036062436998 0.5 0.809036062436998 0.593056271704741 0.809036062436998 0.689400219979374 0.809036062436998 0.840472273664598 0.809036062436998 0.107325723308095 0.949269053158205 0.210790777574803 0.949269053158205 0.359193480662347 0.949269053158205 0.5 0.949269053158205 0.593056271704741 0.949269053158205 0.689400219979374 0.949269053158205 0.840472273664598 0.949269053158205 0.107325723308095 1.0787147516049 0.210790777574803 1.0787147516049 0.359193480662347 1.0787147516049 0.5 1.0787147516049 0.593056271704741 1.0787147516049 0.689400219979374 1.0787147516049 0.840472273664598 1.0787147516049 0.107325723308095 1.16770874855557 0.210790777574803 1.16770874855557 0.359193480662347 1.16770874855557 0.5 1.16770874855557 0.593056271704741 1.16770874855557 0.689400219979374 1.16770874855557 0.840472273664598 1.16770874855557 0.107325723308095 1.34839344111366 0.210790777574803 1.34839344111366 0.359193480662347 1.34839344111366 0.5 1.34839344111366 0.593056271704741 1.34839344111366 0.689400219979374 1.34839344111366 0.840472273664598 1.34839344111366 0.107325723308095 1.38614846456471 0.210790777574803 1.38614846456471 0.359193480662347 1.38614846456471 0.5 1.38614846456471 0.593056271704741 1.38614846456471 0.689400219979374 1.38614846456471 0.840472273664598 1.38614846456471 0.107325723308095 1.50211029557922 0.210790777574803 1.50211029557922 0.359193480662347 1.50211029557922 0.5 1.50211029557922 0.593056271704741 1.50211029557922 0.689400219979374 1.50211029557922 0.840472273664598 1.50211029557922 16 11 20 20 19 24 24 19 25 20 24 16 16 24 31 14 15 38 15 16 31 38 15 31 45 38 39 31 32 38 25 32 31 38 45 14 24 25 31 14 45 52 19 18 25 25 26 32 26 25 18 26 18 17 32 26 33 26 27 33 27 26 17 27 17 23 33 27 34 32 33 40 39 40 46 39 32 40 46 40 47 39 46 45 40 41 47 41 40 34 41 34 35 47 41 48 33 34 40 46 47 54 27 28 34 32 39 38 45 46 53 13 52 59 52 13 14 59 53 60 53 59 52 60 53 54 59 60 66 45 53 52 13 59 66 10 12 87 66 12 13 73 12 66 73 80 12 74 80 73 81 87 80 80 87 12 73 66 67 10 87 88 60 67 66 60 61 67 61 60 54 61 54 55 67 61 68 68 61 62 55 54 48 55 48 49 75 68 69 53 46 54 67 68 75 74 81 80 81 74 75 88 81 82 81 88 87 75 82 81 76 82 75 83 89 82 82 89 88 74 67 75 88 89 10 61 55 62 67 74 73 48 54 47 10 89 90 41 42 48 35 34 28 28 23 22 28 29 35 29 28 22 29 22 21 35 29 36 42 41 35 56 55 49 49 42 43 56 49 50 56 62 55 36 43 42 43 36 37 50 43 44 43 50 49 42 35 36 56 50 57 29 30 36 49 48 42 37 36 30 30 21 1 37 30 4 44 43 37 30 3 4 3 30 1 37 4 44 50 51 57 50 44 51 51 44 5 57 51 58 51 6 58 6 51 5 58 6 65 44 4 5 57 58 65 30 29 21 56 57 64 62 63 69 63 62 56 69 63 70 62 69 68 70 64 71 64 70 63 71 64 65 70 71 77 63 56 64 69 70 77 76 83 82 83 76 77 90 83 84 83 90 89 77 84 83 78 84 77 85 91 84 84 91 90 76 69 77 90 91 2 78 77 71 69 76 75 85 78 79 72 71 65 78 71 72 78 85 84 72 7 79 7 72 65 79 7 8 72 79 78 65 6 7 85 79 86 92 86 93 86 92 85 93 86 8 92 93 2 9 2 93 8 9 93 86 79 8 92 2 91 85 92 91 64 57 65 90 2 10 28 27 23 -17 15 1 0.11817731326277 -1.31958609667697 1.13939655511843 -0.618156123250839 1.31958587667696 0.752125697664052 0.131521655936943 1.31958600308152 1.11130094424451 -0.432986199876055 1.31958593175788 1.04889797810298 -0.252097819285189 1.31958588748215 0.953992066079026 -0.0848750601132637 1.3195858730804 0.859769981938915 0.0315799929613392 1.31958586280832 0.63245819749806 0.202183125492365 1.31958585527314 0.553779485081677 0.240222730160343 1.31958584867696 0.472656070609958 0.273205863752832 2.42419264614297 1.16954252255029 0.134080451298479 1.47608844351784 0.639447040978585 0.284570199928766 1.64363045366085 0.785980721063931 0.282113773728944 1.82221187905042 0.912257109254886 0.26583658576656 2.011832719631 1.01827620556034 0.235738636041058 2.21249297534703 1.10403800998917 0.191819924551883 1.78023117091645 1.2106347616481 -0.270957372470787 2.09673472811723 1.20921417420321 -0.0611620638376566 1 1.11022302462516e-016 1 1.34292634 1 0.293697990302276 1 0.587395981434234 1 0.881093971618111 1 1.11201015593917 0.557196101023788 1.34292634 0.279113185612358 1.34292634 0 1.34292634 0 0 0 1.11910528424426 0 0.895284227220395 0 0.67146317005737 0 0.447642112995864 0 0.223821056105154 0.567886158959788 1.11022302462516e-016 0.28394307878513 1.11022302462516e-016 17 14 15 5 12 13 13 14 4 11 12 8 8 9 11 8 12 7 15 10 17 14 16 4 1 3 16 4 16 3 7 5 6 7 12 5 7 6 2 4 5 13 14 17 16 -25 23 1 0.162049114039569 -2.34964929660235 1.04896390382311 -1.40924429193551 3.38400016073138 1.22492955611853 -1.40924522574805 2.80876202400574 1.13089221148953 -1.40924429143071 3.09615094336071 1.17916774664601 -1.40924429074741 2.42419264614297 1.16954252255029 0.134080451298479 2.39938733138958 1.2588338269875 -0.0818043917009379 2.38099686262971 1.31102178109956 -0.27408955246062 2.36763223550554 1.33516982172417 -0.44551712681458 2.35728667710112 1.33769785577462 -0.615401371383758 2.34996018741644 1.31860588327447 -0.78374228616941 2.34565276645149 1.27789390424723 -0.95053987117279 2.34436441420629 1.21556191871646 -1.11579412639516 2.34578512630292 1.14101189763448 -1.26314374973682 3.38400016073138 1.63898521684762 0.123909655855393 2.5757471870778 1.21235280617867 0.117606850552993 2.76773174672007 1.30338801190261 0.114212405510755 3.04678692295223 1.47241860933113 0.126706598452133 3.21193122438043 1.56583606288447 0.130960236906589 3.38400016073138 1.35811682367428 -1.23297844343444 3.38400016073138 1.4743773515163 -1.03213508322534 3.38400016073137 1.56791797828258 -0.80881763149339 3.38400016073138 1.62810190119317 -0.591724152235714 3.38400016073138 1.65984497390542 -0.386627021176281 3.38400016073138 1.66839778951478 -0.175978368750238 3.38400016073137 1.65982320119437 -0.025684529769309 0 1.52068147 1 1.52068147 0.444444443887087 1.52068147 0.72222222264237 1.52068147 0 1.11022302462516e-016 0 0.205291998547827 0 0.390054795417421 0 0.556341313274754 0 0.722627832549246 0 0.88891435213119 0 1.05520087149315 0 1.22148739095935 0 1.37108443076287 1 0 0.149999999222667 0 0.349999999193885 0 0.649999999756947 0 0.825000000689919 0 1 1.31156553414784 1 1.09621490255447 1 0.87434745311254 1 0.668846160334609 1 0.478980878628448 1 0.284275069081031 1 0.143431262923061 6 5 15 7 6 16 7 16 8 16 6 15 9 8 22 21 10 9 21 11 10 3 13 12 3 1 13 12 11 3 16 23 8 24 17 18 25 18 14 24 18 25 24 23 17 23 22 8 4 3 20 9 22 21 11 21 20 19 4 20 2 4 19 3 11 20 16 17 23 -38 36 1 0.255772268758467 -3.38400016073138 1.22492955611853 -1.40924522574805 3.38400016073137 1.09243528555817 -1.57371534462723 3.38400016073138 0.92720598825082 -1.72650574115408 3.38400016073138 0.73000467281345 -1.85885766434139 3.38400016073138 0.504603192989606 -1.9617554382431 3.38400016073138 0.283358134934521 -2.02253796998391 3.38400016073138 0.075341806282424 -2.04779558773226 3.38400016073138 -0.134904888580723 -2.04358651303702 3.38400016073138 -0.341170930077966 -2.01015830423817 3.38400016073138 -0.537628875760522 -1.94944060577972 3.38400016073138 -0.71935906766228 -1.8647750172514 3.38400016073138 -0.882704838912726 -1.76047832934829 3.38400016073137 -1.05828443149857 -1.60925267042274 3.38400016073137 -1.14768590783751 -1.51083768321651 3.38400016073138 -1.22492845218098 -1.40924430093551 2.34964929660235 -1.04896389482311 -1.40924429993551 2.80876202400574 -1.13089220298884 -1.4092443000233 3.09615094336071 -1.1791677381899 -1.40924430031222 1.31958590267696 -0.845840762795279 -1.40924429893551 1.77672435938302 -0.93931616725257 -1.40924429935252 2.06302814687661 -0.995127887888773 -1.40924429974689 1.31958561248689 -0.731575326667585 -1.49624976738979 1.31958569203588 -0.60398475981268 -1.57249716107525 1.31958576955824 -0.464548295771913 -1.63525978695648 1.3195858431688 -0.315448773561937 -1.6820878214999 1.31958591098873 -0.159501176721162 -1.71102868336595 1.31958597128785 4.877945479436e-009 -1.7208210825009 1.31958602262287 0.159501186395154 -1.71102868204595 1.31958606394994 0.31544878299388 -1.68208781888931 1.31958609469344 0.464548304812208 -1.63525978311198 1.31958611476201 0.603984768328055 -1.5724971560768 1.31958612451307 0.731575334545261 -1.49624976133543 1.31958620130198 0.845840769945279 -1.40924429193551 2.34964929660235 1.04896390382311 -1.40924429193551 1.89120041368591 0.961879671281453 -1.40924429193551 1.60514237273177 0.904869605284252 -1.40924429193551 2.80876202400574 1.13089221148953 -1.40924429143071 3.09615094336071 1.17916774664601 -1.40924429074741 1.12886001 1 1.03478822926628 1 0.940716840150248 1 0.846644954708953 1 0.752573253541151 1 0.667908875791629 1 0.591710867464177 1 0.515512750342539 1 0.439314625303446 1 0.363116594711223 1 0.286918631445766 1 0.210720598626508 1 0.115143651799373 1 0.0575717848216864 0.999999999999999 2.77555756156289e-017 1 0 0.5 0 0.722222222117046 0 0.861111111078005 0 0 0 0.222222257574812 0 0.361111105842325 0.0940716666274409 0 0.188143332953756 0 0.282215000097614 0 0.376286668483059 0 0.470358336059419 0 0.564430003416034 0 0.65850166947743 0 0.752573336616085 0 0.846645004446642 0 0.940716673055344 0 1.03478834219243 0 1.12886001 0 1.12886001 0.5 1.12886001 0.277777777772138 1.12886001 0.138888888877011 1.12886001 0.722222282036668 1.12886001 0.861111190150607 20 19 22 16 21 26 20 24 21 22 23 20 24 25 21 25 26 21 23 24 20 16 26 8 13 18 12 14 15 18 13 14 18 18 17 12 10 16 9 17 11 12 17 10 11 17 16 10 16 8 9 26 27 8 7 27 28 29 30 35 34 28 29 31 32 36 33 36 32 36 35 31 31 35 30 35 34 29 6 7 34 4 5 37 3 4 37 6 34 5 38 3 37 2 38 1 2 3 38 37 5 34 7 28 34 27 7 8 -137 245 1 0.12687630755555 -1.31958590267696 -0.845840762795279 -1.40924429893551 -5.85000029206485e-009 -1.82839863052382e-018 -0.750000037063089 1.04505127091171 -0.769490843409475 -1.36994443808077 0.77991113727823 -0.662257516256438 -1.29908862917696 0.534545151823389 -0.526404819684729 -1.19755121164405 0.318382987057389 -0.366422849914202 -1.06851649925909 0.138735727237096 -0.188552158877519 -0.917163594306161 -5.85000029206485e-009 -1.82839863052382e-018 -0.750000037063089 1.31958620130198 0.845840769945279 -1.40924429193551 1.04505127110111 0.769490847623905 -1.36994443435246 0.80570334261814 0.674324420043621 -1.30758774266111 0.603081247779959 0.568523730663875 -1.23001095844614 0.417972521916837 0.445863721536962 -1.13359753180561 0.254782695706834 0.309361152739707 -1.02073782954214 0.116788245118802 0.162628105438979 -0.894553750598137 0.0544921626563866 0.0819109435035577 -0.82337048100968 1.31958561248689 -0.731575326667585 -1.49624976738979 1.31958569203588 -0.60398475981268 -1.57249716107525 1.31958576955824 -0.464548295771913 -1.63525978695648 1.3195858431688 -0.315448773561937 -1.6820878214999 1.31958591098873 -0.159501176721162 -1.71102868336595 1.31958597128785 4.877945479436e-009 -1.7208210825009 1.31958602262287 0.159501186395154 -1.71102868204595 1.31958606394994 0.31544878299388 -1.68208781888931 1.31958609469344 0.464548304812208 -1.63525978311198 1.31958611476201 0.603984768328055 -1.5724971560768 1.31958612451307 0.731575334545261 -1.49624976133543 1.04579721859851 0.666302731372922 -1.44304289877009 1.04645233209674 0.550649374735685 -1.50724082909051 1.04699256628539 0.423876928360668 -1.56018199375948 1.04739621450517 0.288009194134571 -1.59973929471584 1.04764591267785 0.145682536499461 -1.62421114848527 1.04773041671214 3.21302843140105e-009 -1.63249565876394 1.04764583248845 -0.145682530143561 -1.62421114924266 1.04739605596551 -0.288009187985725 -1.59973929621842 1.04699233294308 -0.423876922545947 -1.56018199597844 1.04645202895133 -0.550649369367091 -1.50724083198304 1.04579685176452 -0.666302726543825 -1.44304290228275 0.806451045604088 0.584289798387496 -1.36721988372383 0.807108531096368 0.483156510616097 -1.41965719693209 0.807651307649924 0.372103426584719 -1.4629464483783 0.808057203875786 0.252922881282971 -1.49531940158322 0.808308445614263 0.127963750589316 -1.51535849699734 0.808393506236241 1.93884376948315e-009 -1.52214441891028 0.808308390609232 -0.127963746769181 -1.5153584973424 0.808057095154995 -0.252922877632628 -1.49531940227184 0.80765114769516 -0.372103423208174 -1.46294644940102 0.807108323399298 -0.483156507604757 -1.41965719827259 0.806450794427098 -0.584289795817233 -1.36721988536061 0.603518479476637 0.492752080443737 -1.27708757731226 0.603903155283024 0.40756224583103 -1.31850582224018 0.604220859288717 0.31394766958143 -1.35271359262607 0.604458526152653 0.213425913567161 -1.3783041608809 0.604605672431058 0.107990735063855 -1.39414877497959 0.60465549544945 1.02244372814724e-009 -1.39951497224575 0.604605636703351 -0.107990733064533 -1.39414877505239 0.604458455542835 -0.213425911702241 -1.37830416102731 0.604220755422452 -0.31394766793316 -1.35271359284503 0.603903020445583 -0.407562244471588 -1.31850582252918 0.60351831645535 -0.492752079432904 -1.27708757766779 0.534841740032472 0.45625626635059 -1.24010372424613 0.535102604825786 0.377382970752348 -1.27754306532843 0.535318059865648 0.290704800764896 -1.30846565358455 0.535479240189825 0.197627336583243 -1.33159921595438 0.535579032220434 0.0999975632261048 -1.34592281751541 0.53561281979474 7.54027116625733e-010 -1.35077392930126 0.535579002484796 -0.0999975617592916 -1.34592281751566 0.535479181422914 -0.197627335238072 -1.33159921595469 0.535317973421409 -0.290704799615795 -1.30846565358464 0.535102492607367 -0.377382969864615 -1.27754306532813 0.534841604360955 -0.456256265778288 -1.24010372424561 0.418020636944152 0.386422100166579 -1.16808515436553 0.418062963561066 0.319602227759054 -1.19842490441294 0.418097916787403 0.246183276327634 -1.22348096950303 0.418124060626573 0.167354554016889 -1.24222411880172 0.418140243085308 0.0846779108629132 -1.25382862474704 0.418145716794807 3.57234526670545e-010 -1.2577587155545 0.418140222785339 -0.0846779101819768 -1.25382862465 0.418124020506625 -0.167354553434858 -1.24222411860526 0.418097857770153 -0.246183275905019 -1.22348096920709 0.418062886943595 -0.319602227548942 -1.19842490401978 0.418020544308628 -0.386422100212918 -1.16808515387963 0.318240687418309 0.317515062303823 -1.09569507307616 0.318115515968992 0.26256903478504 -1.11959674600004 0.318012171619081 0.202225332183109 -1.13933023162905 0.317934880827005 0.137458669450479 -1.15408846559102 0.317887032466742 0.0695470127230667 -1.16322433361499 0.31787082460242 9.04283285362862e-011 -1.16631812194876 0.317887019315758 -0.069547012568751 -1.1632243334651 0.317934854834452 -0.137458669374449 -1.15408846528769 0.318012133379828 -0.202225332233272 -1.13933023117231 0.31811546631955 -0.262569035003439 -1.11959674539343 0.318240627379477 -0.317515062725284 -1.09569507232642 0.254547707325672 0.268019275726802 -1.04301357786018 0.254341123327337 0.221601932084493 -1.06259666461597 0.254170615676605 0.170650056403619 -1.07875980831845 0.25404312587129 0.115984185777455 -1.09084498568643 0.253964216366252 0.0586783293765397 -1.09832490368218 0.253937493494995 -3.69147978789223e-011 -1.10085770405114 0.253964207234793 -0.0586783294722129 -1.09832490351657 0.254043107822102 -0.115984185937563 -1.09084498535129 0.254170589120659 -0.170650056667604 -1.07875980781384 0.254341088842726 -0.221601932486985 -1.06259666394577 0.254547665618161 -0.26801927629651 -1.04301357703174 0.138442461132286 0.163267467494528 -0.929917443411782 0.138184898330382 0.134928350953515 -0.941118366815664 0.137972497447083 0.103864668615354 -0.950355267842449 0.137813792403099 0.0705723227110229 -0.957257021403453 0.137715609965267 0.035697314717758 -0.961526743999336 0.137682370966092 -1.55853236533501e-010 -0.962972182453397 0.137715606724824 -0.0356973150421284 -0.961526743852457 0.137813785996946 -0.0705723230727564 -0.957257021106196 0.137972488018969 -0.103864669037344 -0.950355267394804 0.138184886082689 -0.134928351455893 -0.941118366220964 0.138442446312398 -0.163267468094022 -0.929917442676341 0.116507742196418 0.140800591117082 -0.905406584579512 0.116261456509651 0.116347216439931 -0.914935525485111 0.116058399847452 0.0895525004899276 -0.922791899519122 0.115906703053002 0.060843225665397 -0.928661118910288 0.115812867602406 0.0307746793105159 -0.932291637513605 0.11578110242374 -1.57500387995152e-010 -0.933520609732173 0.115812865210376 -0.0307746796363303 -0.932291637378978 0.115906698323903 -0.0608432260231169 -0.928661118637817 0.116058392887006 -0.0895525008991075 -0.922791899108781 0.116261447466734 -0.116347216917773 -0.914935524939923 0.116507731253069 -0.14080059167789 -0.905406583905225 0.054308414427868 0.0708838024585166 -0.828609423063894 0.0541472229459016 0.0585490250783998 -0.83320523674509 0.0540144243291839 0.0450499152724077 -0.836991524917368 0.0539152738961427 0.0305997868316162 -0.839818450375343 0.053853967524576 0.0154750343264528 -0.841566382253037 0.0538332187673485 -1.14021693586325e-010 -0.842157953106393 0.0538539669261092 -0.0154750345597831 -0.841566382173295 0.0539152727127923 -0.0305997870805484 -0.839818450213935 0.0540144225870743 -0.0450499155465129 -0.836991524674236 0.0541472206818428 -0.0585490253861099 -0.833205236421963 0.0543084116869134 -0.070883802806858 -0.828609422664089 1 5.55111512312578e-017 1 1.48870447 1 0.248117092925059 1 0.496234621487568 1 0.744352132111432 1 0.992469606211233 1 1.24058704963655 0 1.48870447 0 0 0 0.248117409331943 0 0.471423079216953 0 0.672398182864729 0 0.873373286966317 0 1.07434839130385 0 1.27532349559868 0 1.3820139829082 0.916666666173647 1.11022302462516e-016 0.83333333264414 1.11022302462516e-016 0.749999999323996 1.11022302462516e-016 0.666666666144544 1.11022302462516e-016 0.583333333051197 1.11022302462516e-016 0.499999999998733 1.11022302462516e-016 0.416666666946574 1.11022302462516e-016 0.333333333854059 1.11022302462516e-016 0.250000000675728 1.11022302462516e-016 0.166666667356592 1.11022302462516e-016 0.0833333338274175 1.11022302462516e-016 0.0833333338274175 0.248117409331943 0.166666667356592 0.248117409331943 0.250000000675728 0.248117409331943 0.333333333854059 0.248117409331943 0.416666666946574 0.248117409331943 0.499999999998733 0.248117409331943 0.583333333051197 0.248117409331943 0.666666666144544 0.248117409331943 0.749999999323996 0.248117409331943 0.83333333264414 0.248117409331943 0.916666666173647 0.248117409331943 0.0833333338274175 0.471423079216953 0.166666667356592 0.471423079216953 0.250000000675728 0.471423079216953 0.333333333854059 0.471423079216953 0.416666666946574 0.471423079216953 0.499999999998733 0.471423079216953 0.583333333051197 0.471423079216953 0.666666666144544 0.471423079216953 0.749999999323996 0.471423079216953 0.83333333264414 0.471423079216953 0.916666666173647 0.471423079216953 0.0833333338274175 0.672398182864729 0.166666667356592 0.672398182864729 0.250000000675728 0.672398182864729 0.333333333854059 0.672398182864729 0.416666666946574 0.672398182864729 0.499999999998733 0.672398182864729 0.583333333051197 0.672398182864729 0.666666666144544 0.672398182864729 0.749999999323996 0.672398182864729 0.83333333264414 0.672398182864729 0.916666666173647 0.672398182864729 0.0833333338274175 0.744352132111432 0.166666667356592 0.744352132111432 0.250000000675728 0.744352132111432 0.333333333854059 0.744352132111432 0.416666666946574 0.744352132111432 0.499999999998733 0.744352132111432 0.583333333051197 0.744352132111432 0.666666666144544 0.744352132111432 0.749999999323996 0.744352132111432 0.83333333264414 0.744352132111432 0.916666666173647 0.744352132111432 0.0833333338274175 0.873373286966316 0.166666667356592 0.873373286966316 0.250000000675728 0.873373286966316 0.333333333854059 0.873373286966316 0.416666666946574 0.873373286966316 0.499999999998733 0.873373286966316 0.583333333051197 0.873373286966316 0.666666666144544 0.873373286966316 0.749999999323996 0.873373286966316 0.83333333264414 0.873373286966316 0.916666666173647 0.873373286966316 0.0833333338274175 0.992469606211233 0.166666667356592 0.992469606211233 0.250000000675728 0.992469606211233 0.333333333854059 0.992469606211233 0.416666666946574 0.992469606211233 0.499999999998733 0.992469606211233 0.583333333051197 0.992469606211233 0.666666666144544 0.992469606211233 0.749999999323996 0.992469606211233 0.83333333264414 0.992469606211233 0.916666666173647 0.992469606211233 0.0833333338274175 1.07434839130385 0.166666667356592 1.07434839130385 0.250000000675728 1.07434839130385 0.333333333854059 1.07434839130385 0.416666666946574 1.07434839130385 0.499999999998733 1.07434839130385 0.583333333051197 1.07434839130385 0.666666666144544 1.07434839130385 0.749999999323996 1.07434839130385 0.83333333264414 1.07434839130385 0.916666666173647 1.07434839130385 0.0833333338274175 1.24058704963655 0.166666667356592 1.24058704963655 0.250000000675728 1.24058704963655 0.333333333854059 1.24058704963655 0.416666666946574 1.24058704963655 0.499999999998733 1.24058704963655 0.583333333051197 1.24058704963655 0.666666666144544 1.24058704963655 0.749999999323996 1.24058704963655 0.83333333264414 1.24058704963655 0.916666666173647 1.24058704963655 0.0833333338274175 1.27532349559868 0.166666667356592 1.27532349559868 0.250000000675728 1.27532349559868 0.333333333854059 1.27532349559868 0.416666666946574 1.27532349559868 0.499999999998733 1.27532349559868 0.583333333051197 1.27532349559868 0.666666666144544 1.27532349559868 0.749999999323996 1.27532349559868 0.83333333264414 1.27532349559868 0.916666666173647 1.27532349559868 0.0833333338274175 1.3820139829082 0.166666667356592 1.3820139829082 0.250000000675728 1.3820139829082 0.333333333854059 1.3820139829082 0.416666666946574 1.3820139829082 0.499999999998733 1.3820139829082 0.583333333051197 1.3820139829082 0.666666666144544 1.3820139829082 0.749999999323996 1.3820139829082 0.83333333264414 1.3820139829082 0.916666666173647 1.3820139829082 9 27 10 39 10 28 28 10 27 27 26 28 26 25 30 40 28 29 30 29 26 25 24 30 26 29 28 40 29 30 11 39 50 39 11 10 12 50 61 50 12 11 39 40 50 51 61 50 41 51 40 61 62 72 62 61 51 73 72 62 12 61 13 62 51 52 51 50 40 39 28 40 13 61 72 41 40 30 31 41 30 31 24 23 41 42 53 42 41 31 31 32 42 31 30 24 23 22 33 42 32 43 33 32 23 22 21 33 23 32 31 44 32 33 52 53 64 52 41 53 74 62 63 64 63 52 53 54 64 52 63 62 43 44 55 44 43 32 54 55 65 55 54 43 76 65 66 54 65 64 44 45 55 43 54 53 42 43 53 75 63 64 33 34 44 41 52 51 76 64 65 13 83 14 13 72 83 14 94 105 94 14 83 83 84 94 73 74 84 74 73 62 84 95 94 85 95 84 95 96 106 73 84 83 72 73 83 94 95 106 16 15 116 105 15 14 127 8 16 116 15 105 116 106 117 106 116 105 127 117 128 117 127 116 118 128 117 127 128 8 117 106 107 116 127 16 105 94 106 8 128 129 84 74 85 85 75 86 75 85 74 96 86 97 86 96 85 75 76 86 85 96 95 87 97 86 77 87 76 97 98 109 98 97 87 98 87 88 87 86 76 75 64 76 96 97 108 107 108 118 108 107 96 118 129 128 119 129 118 118 108 119 107 118 117 119 109 120 109 119 108 130 120 131 120 130 119 121 131 120 130 131 8 120 109 110 119 130 129 108 97 109 129 130 8 109 98 99 96 107 106 74 63 75 8 131 132 55 66 65 21 20 34 56 55 45 35 45 34 34 20 35 45 44 34 35 19 36 19 35 20 46 36 47 36 46 35 19 18 36 35 46 45 45 46 57 66 56 67 55 56 66 77 67 78 67 77 66 56 57 67 66 77 76 68 57 58 57 56 45 78 68 79 78 67 68 69 79 68 78 79 90 58 57 47 68 67 57 47 57 46 77 78 89 36 37 47 34 33 21 18 17 37 48 58 47 38 48 37 37 17 38 48 47 37 3 38 17 38 49 48 49 38 3 3 4 49 3 17 1 48 49 60 58 59 69 58 48 59 69 80 79 70 80 69 69 59 70 58 69 68 60 4 5 60 70 59 82 70 71 71 70 60 5 71 60 70 81 80 59 48 60 4 60 49 82 71 5 37 36 18 79 80 91 88 89 100 88 77 89 99 100 111 100 99 88 89 90 100 88 99 98 90 91 102 90 79 91 101 102 112 102 101 90 91 92 102 90 101 100 78 90 89 100 101 112 110 111 121 111 110 99 121 132 131 122 132 121 121 111 122 110 121 120 122 112 123 112 122 111 133 123 134 123 133 122 124 134 123 133 134 2 123 112 113 122 133 132 111 100 112 132 133 2 113 112 102 99 110 109 103 102 92 92 81 82 113 103 114 113 102 103 92 93 103 92 91 81 104 103 93 93 82 6 115 114 104 114 103 104 6 104 93 7 104 6 82 5 6 93 92 82 81 70 82 113 114 125 124 125 136 124 113 125 135 136 2 136 135 124 125 126 136 124 135 134 115 7 126 7 115 104 7 137 126 137 7 2 137 2 136 126 137 136 115 126 125 114 115 125 135 2 134 113 124 123 91 80 81 132 2 8 77 88 87 -98 166 1 0.122792657413379 -1.31958584867696 0.472656070609958 0.273205863752832 1.31958583467696 0.168219953165144 0.347343163005289 1.31958584095666 0.339017247825535 0.314937123311732 1.31958583734353 0.253907973795285 0.333908491051905 1.31958587667696 0.752125697664052 0.131521655936943 1.31958586280832 0.63245819749806 0.202183125492365 1.31958585527314 0.553779485081677 0.240222730160343 -5.85000029206485e-009 -1.82839863052382e-018 -0.750000037063089 0.151266061798848 0.164255971859559 -0.556378505144092 0.335679173224413 0.317677615538639 -0.375876893134938 0.550015572147189 0.456203942848229 -0.213286381852839 0.789522345850416 0.576355066821864 -0.072696473287119 1.04826063984805 0.675516877079453 0.0428399235492931 -5.85000029206485e-009 -1.82839863052382e-018 -0.750000037063089 1.31958587667696 -0.752125697664052 0.131521655936943 1.04826063984805 -0.675516877079453 0.0428399235492932 0.789522345850416 -0.576355066821864 -0.0726964732871188 0.55001557214719 -0.456203942848229 -0.213286381852839 0.335679173224413 -0.31767761553864 -0.375876893134938 0.151266061798848 -0.164255971859559 -0.556378505144092 1.31958586442696 -0.472656103864459 0.273205851457581 1.31958587599974 -0.601310436237392 0.217989091902671 1.31958587733594 -0.678298737118356 0.177046435929486 1.31958584100404 -0.340556421039179 0.314541009917949 1.3195858372145 -0.255178382576979 0.333667050842138 1.31958583467696 -0.168220024938772 0.347343154078914 1.31958584303943 -0.0187619474826189 0.357632127049396 1.31958584146664 0.0749943425811947 0.355697014648514 1.04860268240661 0.568353461750273 0.102166764815971 0.789843715183631 0.485089296091142 -0.0253616810628677 0.550135358177971 0.384008796645164 -0.178277058418742 0.335592514177151 0.267373394957878 -0.353139047952394 0.15111018841514 0.13819854602832 -0.545443468949956 1.04878697312893 0.497798257760935 0.134131747892453 0.790016958946558 0.424949186112318 0.000155544060757681 0.550199944059345 0.336421499924058 -0.159400861052202 0.33554579813143 0.234225136467937 -0.340881537438254 0.15102620472038 0.121042625881488 -0.539551730258574 1.04894685585687 0.424985792030571 0.161863196489919 0.790167309813906 0.362850599876026 0.0223008546038748 0.550256001961162 0.287275272459833 -0.143017094257455 0.335505255269311 0.199997397456947 -0.330243767245527 0.150953344068188 0.103337839031203 -0.534440310418968 1.04914926364953 0.304925148602989 0.196970561556652 0.790357719838448 0.260396453946561 0.0503465133908146 0.550327004574358 0.206174727794177 -0.122265510293208 0.335453910255429 0.143526324924317 -0.31677169276284 0.150861104187299 0.0741443749757511 -0.527969372498516 1.04924132360377 0.228408679297276 0.212938239378307 0.790444348564733 0.195071862665006 0.0631061341323766 0.550359311084776 0.154457367337216 -0.112823445651527 0.335430550386828 0.107520463970478 -0.310642453214321 0.150819151260967 0.0555389374847559 -0.525026233595288 1.04930653292498 0.151342130550803 0.224248710262515 0.790505720461016 0.129261846006792 0.07214565432789 0.550382199775749 0.102351452398057 -0.106133880702183 0.33541400114855 0.0712470443790891 -0.306300209365215 0.150789434519618 0.0367997448847277 -0.522941504228567 1.04934708793103 0.0674744507244631 0.231282922650193 0.790543892954524 0.0576325164200735 0.0777681142302862 0.550396436747046 0.0456349150383581 -0.101972911239626 0.335403707745071 0.0317661133732177 -0.303599392131558 0.150770953072447 0.0164068165546539 -0.521644968541727 1.04935648297931 -0.0168808915163463 0.232912481401441 0.790552736509789 -0.0144187531790023 0.0790706892077392 0.550399735132246 -0.0114171777655704 -0.101008908446522 0.335401323036236 -0.00794738416153344 -0.30297368434381 0.150766671625952 -0.00410468981098321 -0.521344610668186 1.04930653288583 -0.151342188897367 0.224248703471833 0.790505720424166 -0.129261895835708 0.0721456489003064 0.550382199762005 -0.102351491851967 -0.106133884718876 0.335414001158487 -0.0712470718439835 -0.306300211972421 0.150789434537459 -0.0367997590720439 -0.522941505480216 1.04924015173247 -0.229551158403492 0.21273497984514 0.790443245729109 -0.196047363046289 0.0629436965103184 0.550358899790782 -0.15522970383509 -0.112943652520786 0.335430847771961 -0.108058144044705 -0.310720482108554 0.150819685298059 -0.0558167381175957 -0.525063698093645 1.04914734158083 -0.306308723791799 0.196637181271776 0.790355911336274 -0.261577477911966 0.0500801375264981 0.550326330150014 -0.207109694258699 -0.122462620973817 0.33545439792707 -0.144177286282774 -0.31689964966026 0.150861980099168 -0.0744807995641132 -0.528030820662547 1.04894685580343 -0.42498581880502 0.161863187220895 0.790167309763645 -0.362850622716413 0.022300847200785 0.550256001942421 -0.287275290537741 -0.143017099734782 0.335505255282864 -0.1999974100462 -0.330243770801692 0.150953344092541 -0.10333784554157 -0.534440312127421 1.04867924435522 -0.540429871188883 0.115446333970847 0.789915679977581 -0.461292025859878 -0.0147619237200648 0.550162185920664 -0.365179804629008 -0.170436246228867 0.335573108511125 -0.254256723484289 -0.348047325147611 0.151075298132865 -0.131408757851236 -0.542995798284608 1.04848096272699 -0.60942740778482 0.0810546466896372 0.789729326947367 -0.520082257919094 -0.0422100242698292 0.550092718286696 -0.411693037238558 -0.190739209376069 0.335623359536229 -0.286660951039788 -0.361232355238144 0.151165657666609 -0.148185921847811 -0.549334823527693 1.92365834798148e-017 0.2026364 1.92365834798148e-017 0.39705586 1.92365834798148e-017 0.290029540860793 1.92365834798148e-017 0.343845808127345 1.92365834798148e-017 1.47493128821452e-013 1.92365834798148e-017 0.0911082093214561 1.92365834798148e-017 0.147194736764759 1.82687438 0 1.52239531761853 0 1.21791625389971 0 0.913437189931685 0 0.608958125973597 0 0.304479062294029 0 1.82687438 1 0 1 0.304479062294029 1 0.608958125973596 1 0.913437189931685 1 1.21791625389971 1 1.52239531761853 1 1.92365834798148e-017 0.797363620000357 1.92365834798148e-017 0.886379077805558 1.92365834798148e-017 0.942857989322004 1.92365834798148e-017 0.710954979931639 1.92365834798148e-017 0.656949580030102 1.92365834798148e-017 0.60294418 1.92365834798148e-017 0.511438262102016 1.92365834798148e-017 0.454247063131791 0.304479062294029 0.0911082093214561 0.608958125973597 0.0911082093214561 0.913437189931685 0.0911082093214561 1.21791625389971 0.0911082093214561 1.52239531761853 0.0911082093214561 0.304479062294029 0.147194736764759 0.608958125973597 0.147194736764759 0.913437189931685 0.147194736764759 1.21791625389971 0.147194736764759 1.52239531761853 0.147194736764759 0.304479062294029 0.2026364 0.608958125973597 0.2026364 0.913437189931685 0.2026364 1.21791625389971 0.2026364 1.52239531761853 0.2026364 0.304479062294029 0.290029540860793 0.608958125973597 0.290029540860793 0.913437189931685 0.290029540860793 1.21791625389971 0.290029540860793 1.52239531761853 0.290029540860793 0.304479062294029 0.343845808127345 0.608958125973597 0.343845808127345 0.913437189931685 0.343845808127345 1.21791625389971 0.343845808127345 1.52239531761853 0.343845808127345 0.304479062294029 0.39705586 0.608958125973597 0.39705586 0.913437189931685 0.39705586 1.21791625389971 0.39705586 1.52239531761853 0.39705586 0.304479062294029 0.454247063131791 0.608958125973597 0.454247063131791 0.913437189931685 0.454247063131791 1.21791625389971 0.454247063131791 1.52239531761853 0.454247063131791 0.304479062294029 0.511438262102016 0.608958125973597 0.511438262102016 0.913437189931685 0.511438262102016 1.21791625389971 0.511438262102016 1.52239531761853 0.511438262102016 0.304479062294029 0.60294418 0.608958125973597 0.60294418 0.913437189931685 0.60294418 1.21791625389971 0.60294418 1.52239531761853 0.60294418 0.304479062294029 0.656949580030102 0.608958125973597 0.656949580030102 0.913437189931685 0.656949580030102 1.21791625389971 0.656949580030102 1.52239531761853 0.656949580030102 0.304479062294029 0.710954979931639 0.608958125973597 0.710954979931639 0.913437189931685 0.710954979931639 1.21791625389971 0.710954979931639 1.52239531761853 0.710954979931639 0.304479062294029 0.797363620000357 0.608958125973597 0.797363620000357 0.913437189931685 0.797363620000357 1.21791625389971 0.797363620000357 1.52239531761853 0.797363620000357 0.304479062294029 0.886379077805558 0.608958125973597 0.886379077805558 0.913437189931685 0.886379077805558 1.21791625389971 0.886379077805558 1.52239531761853 0.886379077805558 0.304479062294029 0.942857989322004 0.608958125973597 0.942857989322004 0.913437189931685 0.942857989322004 1.21791625389971 0.942857989322004 1.52239531761853 0.942857989322004 6 5 29 7 6 29 7 34 1 34 7 29 34 29 30 1 34 39 5 13 29 4 3 44 49 2 4 28 2 54 44 3 39 44 39 40 44 49 4 3 1 39 34 35 39 13 12 30 31 35 30 30 35 34 40 39 35 41 45 40 46 50 45 40 45 44 40 35 36 44 45 49 49 54 2 54 49 50 59 54 55 54 59 28 50 55 54 56 60 55 61 65 60 55 60 59 49 45 50 59 60 65 55 50 51 29 13 30 28 59 64 26 27 64 25 26 69 64 69 26 69 64 65 74 69 70 69 74 25 27 28 64 25 74 79 21 24 79 23 22 89 21 84 22 15 23 16 24 25 79 21 79 84 74 75 79 70 75 74 70 69 65 71 75 70 75 80 79 80 84 79 81 85 80 86 90 85 80 85 84 80 75 76 84 85 90 89 94 23 94 89 90 16 94 17 94 16 23 95 17 94 18 95 96 18 17 95 91 95 90 95 94 90 89 84 90 66 70 65 84 89 22 64 59 65 30 12 11 11 31 30 31 11 10 36 31 32 31 36 35 10 32 31 32 10 9 37 32 33 32 37 36 36 37 42 41 46 45 46 41 42 47 51 46 46 51 50 61 56 57 51 52 56 46 42 47 56 61 60 41 36 42 51 56 55 37 38 42 36 41 40 33 38 37 33 32 9 33 9 8 38 43 42 38 8 43 8 38 33 43 8 48 43 47 42 47 43 48 52 57 56 57 52 53 62 57 58 57 62 61 48 53 52 53 48 8 58 53 8 53 58 57 52 47 48 62 58 63 8 63 58 47 52 51 61 62 67 66 71 70 71 66 67 76 71 72 71 76 75 67 72 71 72 67 68 77 72 73 72 77 76 61 67 66 76 77 82 81 86 85 86 81 82 91 86 87 86 91 90 96 91 92 87 86 82 87 82 83 92 91 87 81 76 82 91 96 95 77 78 82 76 81 80 73 72 68 63 8 68 73 68 14 78 77 73 88 87 83 83 78 14 88 83 14 88 92 87 73 14 78 83 82 78 92 97 96 97 92 93 19 97 98 97 19 96 93 98 97 98 93 14 14 20 98 93 88 14 98 20 19 92 88 93 8 14 68 68 67 63 62 63 67 96 19 18 61 66 65 -56 89 1 0.123913107565126 --5.85000029206485e-009 -1.82839863052382e-018 -0.750000037063089 -5.85000029206485e-009 -1.82839863052382e-018 -0.750000037063089 1.31958590267696 -0.845840762795279 -1.40924429893551 1.04505127091171 -0.769490843409475 -1.36994443808077 0.77991113727823 -0.662257516256438 -1.29908862917696 0.534545151823389 -0.526404819684729 -1.19755121164405 0.318382987057389 -0.366422849914202 -1.06851649925909 0.138735727237096 -0.188552158877519 -0.917163594306161 1.31958607367697 -1.13939655511843 -0.618156128230839 1.3195861075372 -1.1231523766753 -0.875444436818631 1.31958612628234 -1.0420235461543 -1.12587857714587 1.31958612916396 -0.954674090681376 -1.27720451558429 1.31958587667696 -0.752125697664052 0.131521655936943 1.31958594368195 -0.93142344636607 -0.0537172834933423 1.31958600635893 -1.06196749730692 -0.282316050137134 1.31958604295557 -1.11504433835108 -0.448786215423208 1.04826063984805 -0.675516877079453 0.0428399235492932 0.789522345850416 -0.576355066821864 -0.0726964732871188 0.55001557214719 -0.456203942848229 -0.213286381852839 0.335679173224413 -0.31767761553864 -0.375876893134938 0.151266061798848 -0.164255971859559 -0.556378505144092 0.139303400400268 -0.203728510474111 -0.886840117264318 0.319551529290323 -0.399030312318697 -1.01003290768702 0.536199186732705 -0.577951792894182 -1.11408338396382 0.78170397886757 -0.733381414099753 -1.19467313719957 1.04637087727449 -0.859960042434694 -1.24923384053896 0.140120295956538 -0.21560456287898 -0.851760043559058 0.321001479036396 -0.424647947789642 -0.942297633212775 0.53800115854571 -0.618643848939175 -1.01744996103807 0.783455817015757 -0.789829393030758 -1.07402570078983 1.04755109715238 -0.932165883452412 -1.11023768321723 0.141752372179432 -0.225854906869005 -0.793247241098179 0.323582586117566 -0.446952859892405 -0.829304896606469 0.540814757639054 -0.654525794325643 -0.856373470641994 0.78583224509664 -0.840391950230772 -0.873248114145036 1.04893685552228 -0.997995741744246 -0.879487661503209 0.143720793431613 -0.226420667977117 -0.73280698109905 0.326414700363121 -0.448554468167678 -0.712770544224553 0.543513427473185 -0.657996741406606 -0.690470664203727 0.787711248752547 -0.846860957584742 -0.666680985770182 1.04975717284895 -1.00873774920314 -0.642282096478188 0.145165649609427 -0.221602963718998 -0.692936765561525 0.328366194871222 -0.438526069403118 -0.63609577455688 0.545183099883214 -0.642925382010201 -0.581479683409524 0.788651419467755 -0.827465002460752 -0.53102913853697 1.04998179862439 -0.986168516943974 -0.486399635989523 0.146707298614938 -0.21257706307737 -0.65373236203053 0.330352096250521 -0.419540250203846 -0.560927898434477 0.546732064900371 -0.613831520928224 -0.474798040267293 0.789328488245252 -0.788912119910704 -0.398258662222592 1.04994118002902 -0.93947542469118 -0.333610525358086 0.149060810335884 -0.191761179241335 -0.599925221851149 0.333206877502865 -0.375640213374186 -0.458279237978226 0.548674483380148 -0.546036607635928 -0.329477446126169 0.789772813578748 -0.697905199852665 -0.217371236450203 1.04937154609682 -0.827241411093449 -0.124874319420605 0 1 9.59518922649671e-017 0 1.61807207 0 1.34839339403736 0 1.07871471623327 0 0.80903603738972 0 0.539357358020103 0 0.269678678630335 0 1.61807207 0.5 1.61807206999999 0.359193481371667 1.61807207 0.210790778106227 1.61807207000001 0.107325723618553 1.61807207 1 1.61807207 0.840472273109893 1.61807207 0.689400219097534 1.61807207 0.593056271087731 1.34839339398667 1 1.0787147161759 1 0.809036037563002 1 0.539357358395096 1 0.269678678886338 1 0.269678678886338 0.107325723618553 0.539357358395096 0.107325723618553 0.809036037563002 0.107325723618553 1.07871471623327 0.107325723618553 1.34839339398667 0.107325723618553 0.269678678886338 0.210790778106227 0.539357358395096 0.210790778106227 0.809036037563002 0.210790778106227 1.07871471623327 0.210790778106227 1.34839339398667 0.210790778106227 0.269678678886338 0.359193481371667 0.539357358395096 0.359193481371667 0.809036037563002 0.359193481371667 1.07871471623327 0.359193481371667 1.34839339398667 0.359193481371667 0.269678678886338 0.5 0.539357358395096 0.5 0.809036037563002 0.5 1.07871471623327 0.5 1.34839339398667 0.5 0.269678678886338 0.593056271087731 0.539357358395096 0.593056271087731 0.809036037563002 0.593056271087731 1.07871471623327 0.593056271087731 1.34839339398667 0.593056271087731 0.269678678886338 0.689400219097534 0.539357358395096 0.689400219097534 0.809036037563002 0.689400219097534 1.07871471623327 0.689400219097534 1.34839339398667 0.689400219097534 0.269678678886338 0.840472273109893 0.539357358395096 0.840472273109893 0.809036037563002 0.840472273109893 1.07871471623327 0.840472273109893 1.34839339398667 0.840472273109893 2 8 22 8 7 22 22 27 2 23 27 22 32 37 2 33 37 32 32 27 28 27 32 2 7 23 22 2 37 1 23 6 24 6 23 7 24 6 5 23 24 29 28 33 32 33 28 29 29 34 33 34 29 30 28 23 29 37 33 38 24 25 29 23 28 27 39 33 34 42 38 43 38 42 37 43 38 39 42 43 47 1 47 52 47 1 42 52 21 1 48 52 47 52 53 21 48 47 43 42 1 37 43 44 48 44 43 39 44 39 40 48 44 49 53 20 21 20 53 54 49 54 53 54 49 50 53 48 49 20 54 19 44 45 49 48 53 52 38 33 39 34 35 39 5 26 25 26 5 4 25 26 31 30 29 25 40 39 35 35 30 31 36 35 31 35 36 40 30 25 31 45 44 40 26 11 31 35 34 30 4 3 12 12 11 26 36 41 40 41 36 10 10 36 31 11 10 31 41 10 9 26 4 12 40 41 46 45 46 50 45 40 46 50 46 51 55 54 50 19 54 18 18 55 17 51 55 50 55 18 54 56 55 51 46 15 51 49 45 50 16 15 46 15 14 51 56 17 55 17 56 14 14 13 17 51 14 56 16 46 9 41 9 46 25 24 5 -20 18 1 0.154334512315495 -1.31958607367697 -1.13939655511843 -0.618156128230839 1.67261825148214 -1.20244723918725 -0.34728852178606 2.00330169521576 -1.21391484036593 -0.120706305331322 2.21142765988434 -1.19980631810208 0.00973960653396305 2.42413693614032 -1.16967838155674 0.134100623219438 1.3195861075372 -1.1231523766753 -0.875444436818631 1.31958612628234 -1.0420235461543 -1.12587857714587 1.31958612916396 -0.954674090681376 -1.27720451558429 1.31958590267696 -0.845840762795279 -1.40924429893551 2.34964929660235 -1.04896389482311 -1.40924429993551 1.77672435938302 -0.93931616725257 -1.40924429935252 2.06302814687661 -0.995127887888773 -1.40924429974689 2.39944598160556 -1.25898971999654 -0.0818048294905593 2.38112992396957 -1.31118546302101 -0.274103765755437 2.36780917124018 -1.33533221786101 -0.445539871743439 2.35748560714816 -1.33785110690989 -0.615428985115851 2.35015923166997 -1.31874213015983 -0.783771105873222 2.34583004478209 -1.27800528760296 -0.950566234016104 2.34449804646097 -1.21564057923144 -1.11581436954504 2.34586079670843 -1.14105440385019 -1.26315535755402 0 0 0 0.333333333333333 0 0.633333333333333 0 0.816666666666667 0 1 0.345724034919898 0 0.691448069666138 0 0.921930759989458 0 1.15241345 0 1.15241345 1 1.15241345 0.444444444444444 1.15241345 0.722222222222222 0.15557581575 1 0.295594049925 1 0.4216104606825 1 0.54762687144 1 0.6736432821975 1 0.799659692955 1 0.9256761037125 1 1.03904477685625 1 2 1 6 4 3 14 2 7 3 7 16 3 13 5 4 15 14 3 16 15 3 13 4 14 7 2 6 7 8 11 9 11 8 7 11 17 17 11 12 18 17 12 20 19 12 10 20 12 18 12 19 7 17 16 -18 16 1 0.115977878284903 -1.31958586442696 -0.472656103864459 0.273205851457581 1.31958587667696 -0.752125697664052 0.131521655936943 1.31958587599974 -0.601310436237392 0.217989091902671 1.31958587733594 -0.678298737118356 0.177046435929486 1.31958607367697 -1.13939655511843 -0.618156128230839 1.31958592572079 -0.886878936675764 0.00144925799815643 1.31958597327689 -0.998286462812395 -0.154124197584785 1.31958601712872 -1.0797394651438 -0.328296503736456 1.31958604766054 -1.12018540074105 -0.472531406448406 2.42413693614032 -1.16967838155674 0.134100623219438 1.67261825148214 -1.20244723918725 -0.34728852178606 2.00330169521576 -1.21391484036593 -0.120706305331322 2.21142765988434 -1.19980631810208 0.00973960653396305 1.47599680594405 -0.639610810287289 0.284692024664738 1.64348010543148 -0.786251786284213 0.282310046579748 1.82203576816705 -0.912579031395176 0.266059917392167 2.01166379417853 -1.01859254563462 0.235941637102552 2.21236418349369 -1.10429232901699 0.191955205711457 0 0 1 0 0.44608620286198 0 0.72355369185348 0 1 1.34322039 1 0.293762299267564 1 0.587524598593614 1 0.881286897948112 1 1.11225364400261 0 1.34322039 0.666666665534131 1.34322039 0.366666665411105 1.34322039 0.1833333323112 1.34322039 0 0.223870065076119 0 0.447740130184658 0 0.671610195212179 0 0.895480260133625 0 1.11935032501233 3 15 14 8 17 16 16 15 7 18 17 12 13 10 18 12 13 18 12 17 8 14 1 3 3 4 6 2 6 4 3 6 7 11 8 9 11 12 8 9 5 11 7 8 16 7 15 3 -18 16 1 0.110455130146336 -2.00023807100621 -0.163958005517587 0.96768671484265 1.31958583467696 -0.168220024938772 0.347343154078914 1.68034265171493 -0.165316950301304 0.711714177786113 1.49397171628453 -0.166610473052037 0.534867637486045 1.31958586442696 -0.472656103864459 0.273205851457581 1.31958584100404 -0.340556421039179 0.314541009917949 1.3195858372145 -0.255178382576979 0.333667050842138 2.42413693614032 -1.16967838155674 0.134100623219438 1.47599680594405 -0.639610810287289 0.284692024664738 1.64348010543148 -0.786251786284213 0.282310046579748 1.82203576816705 -0.912579031395176 0.266059917392167 2.01166379417853 -1.01859254563462 0.235941637102552 2.21236418349369 -1.10429232901699 0.191955205711457 2.33793659537936 -1.05063076388043 0.323726397104558 2.25795646658051 -0.912154168213515 0.493074267543474 2.18419654974376 -0.754248594549884 0.642144234536463 2.11665684486913 -0.576914042883427 0.770936298083804 2.05533735195661 -0.380150513208031 0.879450458185774 2.77555756156289e-017 0 1.16513326 0 0.517837002689349 0 0.841485131416271 0 1.16513326 1 1.16513326 0.558969518155144 1.16513326 0.28056229271149 0 1 0.970944382811498 1 0.776755505588554 1 0.582566628305837 0.999999999999999 0.388377751039687 1 0.194188874072094 1 2.77555756156289e-017 0.833333333000315 2.77555756156289e-017 0.666666666166804 2.77555756156289e-017 0.499999999480742 2.77555756156289e-017 0.333333332960039 2.77555756156289e-017 0.166666666027314 3 17 18 12 16 3 16 17 3 15 13 14 13 15 12 14 13 8 15 16 12 18 1 3 10 3 4 2 7 4 6 4 7 11 3 10 9 6 5 6 9 10 4 6 10 3 11 12 -18 16 1 0.145804633302013 -2.00023807100621 -0.163958005517587 0.96768671484265 2.8066391593082 -0.164126217435577 1.41444139518236 2.34588580185689 -0.163490764212151 1.18896975682752 2.57322664956205 -0.163643758493824 1.30908770903795 2.8066391803082 0.164126150055573 1.41444143218236 2.80663916833175 -0.0194912673628966 1.457212006057 2.80663917454839 0.0769716794475223 1.44874983455831 2.00023808900621 0.163957938237584 0.967686749742652 2.34588582207574 0.163490697598396 1.18896979337871 2.5732266699423 0.163643691712296 1.30908774575009 1.31958583467696 0.168219953165144 0.347343163005289 1.60441034878631 0.165795469444205 0.642337162554026 1.79727574458254 0.164703076181386 0.811747220656833 1.31958583467696 -0.168220024938772 0.347343154078914 1.31958584303943 -0.0187619474826189 0.357632127049396 1.31958584146664 0.0749943425811947 0.355697014648514 1.68034265171493 -0.165316950301304 0.711714177786113 1.49397171628453 -0.166610473052037 0.534867637486045 2.78088653 1 0 1 1.54493696281289 0.999999999999999 0.77246848098267 1 0 0 0 0.555555555469711 0 0.277777778280213 2.78088653 5.55111512312578e-017 1.54493696633072 5.55111512312578e-017 0.772468483215807 5.55111512312578e-017 5.56177307 5.55111512312578e-017 4.32582349613839 5.55111512312578e-017 3.55335501610199 5.55111512312578e-017 5.56177307 1 5.56177307 0.555555555418298 5.56177307 0.277777778242297 4.0168361034047 1 4.78930458665747 1 5 10 7 3 9 1 10 9 3 7 10 6 6 4 2 10 4 6 10 3 4 9 8 1 17 13 12 11 16 12 18 12 16 1 13 17 18 15 14 18 17 12 15 18 16 13 1 8 -15 13 1 0.132311448354242 -3.07361411498883 -0.462644191244419 1.41444136118236 2.8066391593082 -0.164126217435577 1.41444139518236 2.94898056383997 -0.335153637918271 1.41444137593682 2.87584507215463 -0.251150434400032 1.41444138539241 2.00023807100621 -0.163958005517587 0.96768671484265 2.34588580185689 -0.163490764212151 1.18896975682752 2.57322664956205 -0.163643758493824 1.30908770903795 2.42413693614032 -1.16967838155674 0.134100623219438 2.33793659537936 -1.05063076388043 0.323726397104558 2.25795646658051 -0.912154168213515 0.493074267543474 2.18419654974376 -0.754248594549884 0.642144234536463 2.11665684486913 -0.576914042883427 0.770936298083804 2.05533735195661 -0.380150513208031 0.879450458185774 2.78308122024001 -0.802383593553081 0.860435652197442 2.60302271225439 -0.994000357665173 0.501966456133244 0 0 1 0 0.444444444432978 0 0.72222222296522 0 1 1.3088836 1 0.727157556937249 1 0.363578778845788 0 1.3088836 0.166666666015702 1.3088836 0.333333332894372 1.3088836 0.499999999867063 1.3088836 0.666666666884161 1.3088836 0.833333333873757 1.3088836 0 0.581726046743372 0 0.94530482420102 1 3 14 6 15 14 8 15 9 10 9 15 10 15 11 14 3 7 7 6 14 7 4 2 6 11 15 11 6 12 5 13 6 6 13 12 3 4 7 -25 23 1 0.162058934831635 -2.34964929660235 -1.04896389482311 -1.40924429993551 3.38400016073138 -1.22492845218098 -1.40924430093551 2.80876202400574 -1.13089220298884 -1.4092443000233 3.09615094336071 -1.1791677381899 -1.40924430031222 3.38400016073138 -1.63898554684763 0.123910676095441 3.38400016073138 -1.35811380939064 -1.23297614882469 3.38400016073137 -1.47437500086536 -1.03213339058407 3.38400016073137 -1.5679163295907 -0.808816364942999 3.38400016073138 -1.62810086800836 -0.591723115220114 3.38400016073138 -1.65984444379186 -0.386626076977403 3.38400016073138 -1.66839768529699 -0.175977430683388 3.38400016073138 -1.65982334049852 -0.0256835591777095 2.42413693614032 -1.16967838155674 0.134100623219438 2.54750154854928 -1.20228708803505 0.119632544476074 2.69963735238673 -1.26733920477616 0.113585824353254 2.92704061634566 -1.39859942915921 0.120705522566229 3.15044670410707 -1.53332512656113 0.13044149745616 2.39944598160556 -1.25898971999654 -0.0818048294905593 2.38112992396957 -1.31118546302101 -0.274103765755437 2.36780917124018 -1.33533221786101 -0.445539871743439 2.35748560714816 -1.33785110690989 -0.615428985115851 2.35015923166997 -1.31874213015983 -0.783771105873222 2.34583004478209 -1.27800528760296 -0.950566234016104 2.34449804646097 -1.21564057923144 -1.11581436954504 2.34586079670843 -1.14105440385019 -1.26315535755402 0 0 1 0 0.44444444378134 0 0.72222222263792 0 1 1.52499365 1 0.228749679321774 1 0.457497542519492 1 0.686246945763118 1 0.892122864299127 1 1.07740573437973 1 1.26269589794918 1 1.39384813668604 1.11022302462516e-016 1.52499365 0.121499999618122 1.52499365 0.278092129989235 1.52499365 0.52109212968029 1.52499365 0.760546065231962 1.52499365 5.55111512312578e-017 1.31911950723772 5.55111512312578e-017 1.13383277863375 5.55111512312578e-017 0.967074723023258 5.55111512312578e-017 0.800316667274465 5.55111512312578e-017 0.633558611476845 5.55111512312578e-017 0.466800555459169 5.55111512312578e-017 0.30004249909596 5.55111512312578e-017 0.150021247967618 3 24 25 3 23 24 8 21 22 9 20 21 22 23 7 15 19 16 18 19 15 18 14 13 14 18 15 16 19 20 25 1 3 3 4 7 4 2 6 6 7 4 8 22 7 9 21 8 17 16 11 16 20 10 11 16 10 11 12 17 12 5 17 9 10 20 23 3 7 -19 17 1 0.128681278522781 -3.38400016073138 -1.63898554684763 0.123910676095441 3.38400016073138 -0.713493162199105 1.41444133318236 3.38400016073138 -1.58502647348115 0.344036676197348 3.38400016073138 -1.50403900679337 0.557149584569082 3.38400016073138 -1.39768508387122 0.758378718803258 3.38400016073138 -1.26874995848862 0.943416504686656 3.38400016073138 -1.12090926790525 1.10881833057415 3.38400016073138 -0.958413269653136 1.25219469520757 3.38400016073138 -0.837699505535521 1.33915670950979 3.07361411498883 -0.462644191244419 1.41444136118236 3.24135762144044 -0.608644673147794 1.41444134527015 3.15592258817639 -0.537609889163689 1.41444135305907 2.42413693614032 -1.16967838155674 0.134100623219438 2.78308122024001 -0.802383593553081 0.860435652197442 2.60302271225439 -0.994000357665173 0.501966456133244 2.54750154854928 -1.20228708803505 0.119632544476074 2.69963735238673 -1.26733920477616 0.113585824353254 2.92704061634566 -1.39859942915921 0.120705522566229 3.15044670410707 -1.53332512656113 0.13044149745616 0 0 1.96208622 0 0.264881639665088 0 0.529763279764205 0 0.794644920743931 0 1.0595265562996 0 1.32440820204613 0 1.58928983429931 0 1.77568803250497 0 1.96208622 1 1.96208622 0.444444444440368 1.96208622 0.722222222218934 0 1 1.09004790246371 1 0.545023952326804 1 0 0.878500000416241 0 0.721907870479083 0 0.478907870157007 0 0.239453934624355 19 1 3 19 3 18 18 3 4 17 18 15 16 15 13 15 16 17 18 4 15 4 5 15 5 6 14 7 8 11 8 9 11 6 7 14 7 11 14 11 9 2 12 10 14 11 12 14 5 14 15 -37 35 1 0.296600035187744 -4.85761506672432 -1.22947768939705 1.41444127518235 5.52265133956837 -1.30811678288804 1.41444126638674 5.9383781558584 -1.33408231962202 1.41444126356438 6.35000030160882 -1.3468533929721 1.41444126218235 3.38400016073138 -0.713493162199105 1.41444133318236 3.84049390386003 -0.958528730911081 1.41444130560298 4.33720549009535 -1.12322843109391 1.41444128704962 3.38400016073138 -1.63898554684763 0.123910676095441 3.38400016073138 -1.58502647348115 0.344036676197348 3.38400016073138 -1.50403900679337 0.557149584569082 3.38400016073138 -1.39768508387122 0.758378718803258 3.38400016073138 -1.26874995848862 0.943416504686656 3.38400016073138 -1.12090926790525 1.10881833057415 3.38400016073138 -0.958413269653136 1.25219469520757 3.38400016073138 -0.837699505535521 1.33915670950979 3.38400016073138 -1.22492845218098 -1.40924430093551 3.38400016073138 -1.35811380939064 -1.23297614882469 3.38400016073137 -1.47437500086536 -1.03213339058407 3.38400016073137 -1.5679163295907 -0.808816364942999 3.38400016073138 -1.62810086800836 -0.591723115220114 3.38400016073138 -1.65984444379186 -0.386626076977403 3.38400016073138 -1.66839768529699 -0.175977430683388 3.38400016073138 -1.65982334049852 -0.0256835591777095 6.35000030160882 -1.56406656428917 -1.43766213928528 4.6997690246913 -1.39905808159757 -1.40960607270192 5.5256333558646 -1.47675272828227 -1.40851541239464 6.35000030396484 -1.70953288624009 -1.24208508438565 6.35000030174547 -1.83523503041623 -1.02133487538798 6.35000030160882 -1.93545101474559 -0.778275699319967 6.35000030160882 -2.00501456129326 -0.51740753404603 6.35000030160882 -2.03988311187165 -0.244712320205193 6.35000030160882 -2.03764256303282 0.0327278797382362 6.35000030126082 -1.99784184242751 0.307307522241323 6.35000030142539 -1.92207860878283 0.571577097232108 6.35000030140048 -1.8138117430624 0.818901870474457 6.35000030124436 -1.67794276203627 1.04398108964016 6.35000030173831 -1.52025944526642 1.24314957556407 0.48486454 0 0.269369190211943 0 0.134684594988561 0 2.77555756156289e-017 0 1 0 0.828288182646625 0 0.656576364569744 0 1 0.5 1.00000000000002 0.435408427216651 1.00000000000001 0.369942255880653 0.999999999999999 0.303583621968126 0.999999999999993 0.236314140387526 0.999999999999996 0.168114904979649 1 0.098966488517623 1.00000000000001 0.0497267477893803 1 1 1 0.925000001207136 1 0.850000001481918 1 0.774999999195505 1 0.707499997525576 1 0.646749997339848 1 0.586000002534903 1 0.543000001469943 0 1 0.555555556232173 1 0.27777777786939 1 0 0.916666668681687 0 0.83333333385992 0 0.74999999863242 0 0.666666669801848 0 0.58333334272306 0 0.499999998884735 0 0.416666662494682 0 0.333333337208402 0 0.250000003006112 0 0.166666664156679 0 0.0833333307117692 36 37 3 34 35 2 36 2 35 2 36 3 34 1 33 34 2 1 33 1 32 3 37 4 31 32 25 29 30 26 31 25 30 27 28 26 26 24 27 26 28 29 30 25 26 25 32 23 32 1 8 7 6 12 13 12 6 6 14 13 7 12 11 15 14 6 11 10 7 6 5 15 10 9 1 22 25 23 19 25 20 18 25 19 20 25 21 25 22 21 8 1 9 25 17 16 32 8 23 25 18 17 10 1 7 -26 24 1 0.139607933897686 -3.07361411498883 -0.462644191244419 1.41444136118236 2.94898056383997 -0.335153637918271 1.41444137593682 2.87584507215463 -0.251150434400032 1.41444138539241 2.8066391593082 -0.164126217435577 1.41444139518236 3.38400016073138 -0.713493162199105 1.41444133318236 3.24135762144044 -0.608644673147794 1.41444134527015 3.15592258817639 -0.537609889163689 1.41444135305907 3.38400016073138 0.713492872779091 1.41444149318236 3.38400016073138 -0.577426367343809 1.49633785306883 3.38400016073138 -0.427346679273735 1.56211667300097 3.38400016073138 -0.282719818526706 1.60488793154354 3.38400016073138 -0.147185610854218 1.62850255695094 3.38400016073137 -0.00898600151597089 1.63713688549801 3.38400016073137 0.129377639617865 1.63047809670035 3.38400016073138 0.265394072170377 1.60876772060618 3.38400016073138 0.39669195780135 1.57278005662385 3.38400016073138 0.521172470888611 1.52375463327119 3.38400016073138 0.620872414378582 1.47270644768041 3.07361414598883 0.46264399884441 1.41444146518236 3.24135763930601 0.608644422086465 1.41444148183531 3.15592261383089 0.537609666134023 1.4144414739075 2.8066391803082 0.164126150055573 1.41444143218236 2.91926912460434 0.30193092904243 1.41444144758977 2.99465529612995 0.384000169914816 1.41444145661755 2.80663916833175 -0.0194912673628966 1.457212006057 2.80663917454839 0.0769716794475223 1.44874983455831 0.500000000003734 0 0.277777777501674 0 0.138888888675342 0 3.73387432084371e-012 0 1.00000000000373 0 0.777777778202302 0 0.638888889211014 0 1.00000000000373 1.66079697049607 1.00000000000373 0.181608147332413 1.00000000000373 0.363216295394051 1.00000000000373 0.52666362884887 1.00000000000373 0.673766229119676 1.00000000000373 0.820868829543454 1.00000000000373 0.967971430120202 1.00000000000373 1.11507403084992 1.00000000000373 1.26217663173261 1.00000000000373 1.40927923276827 1.00000000000373 1.53503810157627 0.499999999834495 1.66079697 0.777777777707767 1.66079697 0.638888888771131 1.66079697 0 1.66079697 0.222222222299099 1.66079697 0.361111111236036 1.66079697 3.73390207641933e-012 0.738131984470387 3.73390207641933e-012 1.19946447521918 4 3 25 25 3 2 2 1 25 25 1 12 25 14 26 22 26 23 23 26 24 19 24 26 21 19 15 19 26 14 21 16 20 7 11 1 6 5 9 6 9 10 11 7 10 12 1 11 12 13 25 14 25 13 15 19 14 17 20 16 8 20 18 18 20 17 16 21 15 6 10 7 -18 16 1 0.116369561459739 -1.31958584867696 0.472656070609958 0.273205863752832 1.31958583467696 0.168219953165144 0.347343163005289 1.31958584095666 0.339017247825535 0.314937123311732 1.31958583734353 0.253907973795285 0.333908491051905 2.00023808900621 0.163957938237584 0.967686749742652 1.60441034878631 0.165795469444205 0.642337162554026 1.79727574458254 0.164703076181386 0.811747220656833 2.42419264614297 1.16954252255029 0.134080451298479 2.05531606438616 0.380061468975793 0.879341356442304 2.11662648664547 0.576762559722158 0.770760367232485 2.18416935586747 0.754061210464734 0.641943782113192 2.2579446721355 0.911957421191577 0.492891601084427 2.33795243553289 1.05045119189074 0.323603824146189 1.47608844351784 0.639447040978585 0.284570199928766 1.64363045366085 0.785980721063931 0.282113773728944 1.82221187905042 0.912257109254886 0.26583658576656 2.011832719631 1.01827620556034 0.235738636041058 2.21249297534703 1.10403800998917 0.191819924551883 1.16510272 1.11022302462516e-016 1.16510272 1 1.16510272 0.446086204356617 1.16510272 0.723553692819588 6.24500451351651e-017 1 0.647279291132684 1 0.323639647893713 1 0 0 0 0.833333334022031 0 0.66666666720423 0 0.500000000785645 0 0.333333334122705 0 0.16666666730592 0.970918934226036 0 0.776735148198736 0 0.582551362278438 0 0.388367576268374 0 0.19418378959458 0 13 8 18 11 12 17 18 12 13 10 11 7 9 7 5 7 9 10 7 11 17 17 12 18 16 6 7 15 14 3 16 15 6 15 3 6 3 14 1 4 2 6 4 6 3 16 7 17 -15 13 1 0.125878895920175 -2.8066391803082 0.164126150055573 1.41444143218236 3.07361414598883 0.46264399884441 1.41444146518236 2.91926912460434 0.30193092904243 1.41444144758977 2.99465529612995 0.384000169914816 1.41444145661755 2.42419264614297 1.16954252255029 0.134080451298479 2.78307737781871 0.802379480555354 0.860469364382747 2.60303970246182 0.993947989095634 0.501986544908411 2.00023808900621 0.163957938237584 0.967686749742652 2.05531606438616 0.380061468975793 0.879341356442304 2.11662648664547 0.576762559722158 0.770760367232485 2.18416935586747 0.754061210464734 0.641943782113192 2.2579446721355 0.911957421191577 0.492891601084427 2.33795243553289 1.05045119189074 0.323603824146189 2.34588582207574 0.163490697598396 1.18896979337871 2.5732266699423 0.163643691712296 1.30908774575009 1 1.3090632 0 1.3090632 0.555555555242808 1.3090632 0.277777776715146 1.3090632 5.55111512312578e-017 0 5.55111512312578e-017 0.727257332737147 5.55111512312578e-017 0.363628665580068 1 0 0.833333333983808 0 0.666666666969897 0 0.500000000024943 0 0.333333333063134 0 0.166666666026207 0 1 0.581805865259655 1 0.945434532760471 5 13 7 13 12 7 6 4 2 14 6 7 6 3 4 11 7 12 11 10 14 9 8 14 10 9 14 6 15 3 6 14 15 15 1 3 14 7 11 -19 17 1 0.135947490262721 -3.38400016073138 0.713492872779091 1.41444149318236 3.38400016073138 1.63898521684762 0.123909655855393 3.38400016073138 0.916448136687276 1.28411073468729 3.38400016073138 1.0864416555798 1.14214268785854 3.38400016073138 1.22544553374045 0.996109533704167 3.38400016073138 1.34827926302754 0.835068612870254 3.38400016073138 1.45266834595392 0.661827395118474 3.38400016073138 1.53700356074318 0.479609951488945 3.38400016073138 1.59733990644568 0.302766661244289 2.42419264614297 1.16954252255029 0.134080451298479 2.54755389403387 1.20221227609898 0.11963797711826 2.70001520649328 1.26740663230953 0.113571573709852 2.92743197746725 1.39858402258449 0.12063232527974 3.15068062875737 1.53316965812417 0.130323278877111 3.07361414598883 0.46264399884441 1.41444146518236 2.78307737781871 0.802379480555354 0.860469364382747 2.60303970246182 0.993947989095634 0.501986544908411 3.24135763930601 0.608644422086465 1.41444148183531 3.15592261383089 0.537609666134023 1.4144414739075 1.94845075 1 0 1 1.65618313740504 1 1.39314228609559 1 1.15640551995641 1 0.919668753857221 1 0.682931987788471 1 0.446195221728751 1 0.223097610893827 1 1.11022302462516e-016 0 1.11022302462516e-016 0.121499999686402 1.11022302462516e-016 0.278423389012415 1.11022302462516e-016 0.5214233896998 1.11022302462516e-016 0.760711695469282 1.94845075 0 1.08247263731906 0 0.5412363175168 0 1.94845075 0.555555555402381 1.94845075 0.277777776920824 11 10 17 12 17 13 17 12 11 13 9 14 9 13 8 14 9 2 13 17 8 17 7 8 7 17 6 6 17 16 15 19 16 19 18 16 4 16 18 5 6 16 3 4 18 1 3 18 5 16 4 -29 27 1 0.245895527779409 -3.38400016073138 -0.713493162199105 1.41444133318236 4.85761506672432 -1.22947768939705 1.41444127518235 3.84049390386003 -0.958528730911081 1.41444130560298 4.33720549009535 -1.12322843109391 1.41444128704962 4.85761506672432 1.22947738839704 1.41444155118237 4.85761507666035 -1.06627645676331 1.54507090990327 4.85761508541231 -0.882413973426705 1.66013359454932 4.85761509264786 -0.680035541276079 1.75525988177585 4.85761509806498 -0.46245359299543 1.82647926954618 4.85761510142088 -0.234044524808025 1.87059946883775 4.85761510255776 -2.03294602435776e-007 1.88554614026264 4.85761510142088 0.234044121568828 1.87059952137733 4.85761509806498 0.462453199644933 1.82647937336031 4.85761509264786 0.680035163888051 1.755260034434 4.85761508541231 0.882413617359425 1.66013379263852 4.85761507666035 1.06627612648515 1.54507114926695 3.38400016073138 0.713492872779091 1.41444149318236 4.1681861305127 1.07590337726366 1.41444153397126 3.76117255216661 0.923859123877657 1.41444151686298 3.38400016073138 -0.577426367343809 1.49633785306883 3.38400016073138 -0.427346679273735 1.56211667300097 3.38400016073138 -0.282719818526706 1.60488793154354 3.38400016073138 -0.147185610854218 1.62850255695094 3.38400016073137 -0.00898600151597089 1.63713688549801 3.38400016073137 0.129377639617865 1.63047809670035 3.38400016073138 0.265394072170377 1.60876772060618 3.38400016073138 0.39669195780135 1.57278005662385 3.38400016073138 0.521172470888611 1.52375463327119 3.38400016073138 0.620872414378582 1.47270644768041 0 0 1 0 0.333333333333333 0 0.666666666666667 0 1 1.55787992 1 0.129823326732209 1 0.259646653421427 1 0.389469980072907 1 0.519293306696787 1 0.649116633306166 1 0.778939959915181 1 0.908763286537086 1 1.03858661318233 1 1.16840993985665 1 1.2982332665591 1 1.42805659328022 0 1.55787992 0.555555555555556 1.55787992 0.277777777777778 1.55787992 0 0.170354169122761 0 0.340708338284464 0 0.494027090634047 0 0.632013967784602 0 0.77000084501105 0 0.907987722248202 0 1.04597459941972 0 1.18396147655469 0 1.32194835362032 0 1.43991413679041 20 1 3 21 20 3 23 22 9 3 22 21 10 24 23 25 24 11 19 26 18 27 26 19 29 28 19 19 17 29 28 27 19 13 26 25 3 9 22 4 2 6 4 6 7 9 4 8 23 9 10 8 4 7 10 11 24 13 25 12 18 13 14 18 26 13 25 11 12 14 15 18 5 18 16 16 18 15 4 9 3 -32 30 1 0.275796653129637 -4.85761506672432 1.22947738839704 1.41444155118237 6.35000030160882 1.34685307097208 1.41444156518237 5.52265133808688 1.30811648144358 1.41444156039499 5.93837815615932 1.33408201067756 1.41444156361172 4.85761506672432 -1.22947768939705 1.41444127518235 4.85761507666035 -1.06627645676331 1.54507090990327 4.85761508541231 -0.882413973426705 1.66013359454932 4.85761509264786 -0.680035541276079 1.75525988177585 4.85761509806498 -0.46245359299543 1.82647926954618 4.85761510142088 -0.234044524808025 1.87059946883775 4.85761510255776 -2.03294602435776e-007 1.88554614026264 4.85761510142088 0.234044121568828 1.87059952137733 4.85761509806498 0.462453199644933 1.82647937336031 4.85761509264786 0.680035163888051 1.755260034434 4.85761508541231 0.882413617359425 1.66013379263852 4.85761507666035 1.06627612648515 1.54507114926695 6.35000030160882 -1.3468533929721 1.41444126218235 5.52265133956837 -1.30811678288804 1.41444126638674 5.9383781558584 -1.33408231962202 1.41444126356438 6.35000030160882 -1.17540514948583 1.56733152685004 6.35000030160882 -0.978134333521503 1.70360115675309 6.35000030160881 -0.757284284696307 1.81740965260459 6.35000030160881 -0.541563422010284 1.89611075189102 6.35000030160882 -0.337035297000426 1.94484123549262 6.35000030160881 -0.126272801290277 1.97079572155532 6.35000030160882 0.086862899319232 1.97301172707035 6.35000030160881 0.2983638639979 1.9514061624334 6.35000030160881 0.504323466883452 1.90678300777165 6.35000030160881 0.701171537287055 1.84075983217478 6.35000030160881 0.885867663153515 1.75562540260023 6.35000030160882 1.05603242210979 1.65415098527682 6.35000030160881 1.2100081974529 1.53938275662709 1 0 0 0 0.555555555555556 0 0.277777777777778 0 1 2.03028442 1 1.86109405158125 1 1.69190368321853 1 1.52271331490499 1 1.35352294662741 1 1.18433257836874 1 1.01514221011054 1 0.845951841835542 1 0.676761473530124 1 0.507571105186825 1 0.338380736806847 1 0.169190368402558 0 2.03028442 0.555555555555556 2.03028442 0.277777777777778 2.03028442 0 1.86109405122904 0 1.6919036826155 0 1.52271331420626 0 1.37044198280878 0 1.23339778466314 0 1.09635358658687 0 0.9593093885371 0 0.822265190468568 0 0.685220992338266 0 0.548176794110105 0 0.411132595759571 0 0.274088397278381 0 0.137044198679139 32 2 4 30 31 4 32 4 31 28 29 13 30 3 29 13 27 28 27 12 26 11 25 26 9 23 24 24 25 10 19 21 22 19 17 20 20 21 19 22 23 8 3 30 4 3 1 16 16 15 3 3 15 14 12 27 13 11 26 12 29 14 13 10 25 11 23 9 8 19 22 18 8 18 22 24 10 9 6 18 7 5 18 6 7 18 8 14 29 3 -38 36 1 0.307386365011047 -3.38400016073138 0.713492872779091 1.41444149318236 3.38400016073138 0.916448136687276 1.28411073468729 3.38400016073138 1.0864416555798 1.14214268785854 3.38400016073138 1.22544553374045 0.996109533704167 3.38400016073138 1.34827926302754 0.835068612870254 3.38400016073138 1.45266834595392 0.661827395118474 3.38400016073138 1.53700356074318 0.479609951488945 3.38400016073138 1.59733990644568 0.302766661244289 3.38400016073138 1.63898521684762 0.123909655855393 4.85761506672432 1.22947738839704 1.41444155118237 4.1681861305127 1.07590337726366 1.41444153397126 3.76117255216661 0.923859123877657 1.41444151686298 5.52265133808688 1.30811648144358 1.41444156039499 5.93837815615932 1.33408201067756 1.41444156361172 6.35000030160882 1.34685307097208 1.41444156518237 6.35000030160882 1.56406643828917 -1.43766224628529 6.35000030167802 1.5169639730057 1.24680945910158 6.35000030154638 1.66967994362967 1.05577860053393 6.35000030170198 1.80109046997432 0.843018642029185 6.35000030148551 1.90740783275211 0.61093614574432 6.35000030179863 1.98512138620135 0.362685038563081 6.35000030172621 2.03116412610012 0.102136778489872 6.35000030172513 2.04307544059036 -0.166185263441489 6.35000030182507 2.01915670671668 -0.437219183837491 6.35000030190492 1.95860004378402 -0.705513345079326 6.3500003009329 1.86158398334945 -0.965412603509462 6.35000030160882 1.74407900073263 -1.18747215393678 6.35000030160882 1.65886953082435 -1.31586429582232 3.38400016073138 1.22492955611853 -1.40924522574805 4.69976902696676 1.39905803017261 -1.40960613369794 5.52563336776084 1.47675264450704 -1.40851551193499 3.38400016073138 1.35811682367428 -1.23297844343444 3.38400016073138 1.4743773515163 -1.03213508322534 3.38400016073137 1.56791797828258 -0.80881763149339 3.38400016073138 1.62810190119317 -0.591724152235714 3.38400016073138 1.65984497390542 -0.386627021176281 3.38400016073138 1.66839778951478 -0.175978368750238 3.38400016073137 1.65982320119437 -0.025684529769309 5.55111512312578e-017 1 0.0817027273285483 0.999999999999985 0.153062605150817 0.999999999999985 0.215599683699423 0.999999999999993 0.276599937066966 1 0.336119575441062 1.00000000000001 0.394212074356963 1.00000000000002 0.44769708896049 1.00000000000001 0.5 1 0 0.48486452 0 0.713813622491859 0 0.856906810007868 0 0.26936917802745 0 0.134684589708243 0 2.77555756156289e-017 1 0 0.0833333342506114 0 0.166666667926499 0 0.250000001618555 0 0.333333335522048 0 0.416666669436621 0 0.500000002766295 0 0.583333335089031 0 0.666666667098709 0 0.749999999576482 0 0.833333332672649 0 0.908333333643698 0 0.954166667352221 0 1 1 1 0.555555555686165 1 0.277777777636341 0.925000000323227 1 0.849999999524226 1 0.774999999664832 1 0.707500000373549 1 0.646750001387974 1 0.586000001900808 1 0.543000002791961 1 14 15 17 10 13 20 14 18 13 17 18 14 19 20 13 20 21 10 18 19 13 8 10 22 3 12 4 2 1 12 3 2 12 12 11 4 4 11 5 10 6 11 6 5 11 10 7 6 10 8 7 10 21 22 30 22 23 24 25 31 30 23 24 26 27 31 28 16 31 28 31 27 26 31 25 31 30 24 38 30 37 38 9 22 35 36 30 37 30 36 34 30 33 30 34 35 30 32 33 32 30 29 22 30 38 22 9 8 -31 29 1 0.283364987335613 -7.21279194058922 -1.34821673503686 1.41444126218235 6.35000030160882 -1.3468533929721 1.41444126218235 7.21279194058922 1.34821630603684 1.41444156518237 7.21279194058922 -1.17836706527992 1.56970730697846 7.21279194058922 -0.981917285228737 1.70848917867161 7.21279194058922 -0.784151085313912 1.81424846604148 7.21279194058922 -0.591563674737238 1.89028853266407 7.21279194058922 -0.388086262235879 1.94542303607734 7.21279194058922 -0.17721191057762 1.97761684205229 7.21279194058922 0.0371083726826099 1.98563900726458 7.21279194058922 0.250703487409071 1.96917785934748 7.21279194058922 0.459449006590256 1.9288708047215 7.21279194058922 0.659527747637658 1.86624365592483 7.21279194058922 0.847650417151275 1.78357001599117 7.21279194058922 1.02121123683069 1.68367414406423 7.21279194058922 1.17836660149198 1.56970757180622 7.21279194058922 1.26668721907229 1.49375519312968 6.35000030160882 1.34685307097208 1.41444156518237 6.35000030160882 -1.17540514948583 1.56733152685004 6.35000030160882 -0.978134333521503 1.70360115675309 6.35000030160881 -0.757284284696307 1.81740965260459 6.35000030160881 -0.541563422010284 1.89611075189102 6.35000030160882 -0.337035297000426 1.94484123549262 6.35000030160881 -0.126272801290277 1.97079572155532 6.35000030160882 0.086862899319232 1.97301172707035 6.35000030160881 0.2983638639979 1.9514061624334 6.35000030160881 0.504323466883452 1.90678300777165 6.35000030160881 0.701171537287055 1.84075983217478 6.35000030160881 0.885867663153515 1.75562540260023 6.35000030160882 1.05603242210979 1.65415098527682 6.35000030160881 1.2100081974529 1.53938275662709 0 3.67726025 1.00000000000183 3.67726025 5.80428149987711e-010 0 5.80428149987711e-010 3.37082189451615 5.80428149987711e-010 3.0643835400841 5.80428149987711e-010 2.78858902179313 5.80428149987711e-010 2.54037395574408 5.80428149987711e-010 2.29215888995182 5.80428149987711e-010 2.04394382428684 5.80428149987711e-010 1.79572875861964 5.80428149987711e-010 1.5475136928207 5.80428149987711e-010 1.29929862676052 5.80428149987711e-010 1.05108356030958 5.80428149987711e-010 0.802868493338392 5.80428149987711e-010 0.55465342571743 5.80428149987711e-010 0.306438357317192 5.80428149987711e-010 0.153219178846968 1.00000000000137 0 1.00000000058043 3.37082189580785 1.00000000058043 3.06438354176634 1.00000000058043 2.75794518795757 1.00000000058043 2.48215066971977 1.00000000058043 2.23393560341102 1.00000000058043 1.98572053713458 1.00000000058043 1.73750547081243 1.00000000058043 1.48929040436246 1.00000000058043 1.24107533770698 1.00000000058043 0.992860270781134 1.00000000058043 0.744645203541377 1.00000000058043 0.4964301359739 1.00000000058043 0.248215068103093 17 3 18 16 17 31 14 15 29 12 13 27 14 28 13 16 30 15 10 11 25 10 24 9 7 8 22 5 6 20 7 21 6 9 23 8 12 26 11 31 30 16 30 29 15 14 29 28 28 27 13 25 11 26 26 12 27 25 24 10 20 4 5 4 2 1 19 2 4 4 20 19 6 21 20 7 22 21 8 23 22 24 23 9 31 17 18 -35 33 1 0.323590015199081 -3.38400016073138 -1.22492845218098 -1.40924430093551 4.6997690246913 -1.39905808159757 -1.40960607270192 5.5256333558646 -1.47675272828227 -1.40851541239464 6.35000030160882 -1.56406656428917 -1.43766213928528 3.38400016073138 1.22492955611853 -1.40924522574805 3.38400016073137 1.09243528555817 -1.57371534462723 3.38400016073138 0.92720598825082 -1.72650574115408 3.38400016073138 0.73000467281345 -1.85885766434139 3.38400016073138 0.504603192989606 -1.9617554382431 3.38400016073138 0.283358134934521 -2.02253796998391 3.38400016073138 0.075341806282424 -2.04779558773226 3.38400016073138 -0.134904888580723 -2.04358651303702 3.38400016073138 -0.341170930077966 -2.01015830423817 3.38400016073138 -0.537628875760522 -1.94944060577972 3.38400016073138 -0.71935906766228 -1.8647750172514 3.38400016073138 -0.882704838912726 -1.76047832934829 3.38400016073137 -1.05828443149857 -1.60925267042274 3.38400016073137 -1.14768590783751 -1.51083768321651 6.35000030160882 1.56406643828917 -1.43766224628529 4.69976902696676 1.39905803017261 -1.40960613369794 5.52563336776084 1.47675264450704 -1.40851551193499 6.35000030160882 -1.37918294639605 -1.63041026918977 6.35000030128064 -1.18757311133038 -1.78550785070286 6.35000028394389 -0.996124778782955 -1.90677468679433 6.35000029120144 -0.788500154395926 -2.00775182001858 6.35000030152583 -0.566967805974883 -2.0857746285429 6.3500003028341 -0.334283725055918 -2.13847300052605 6.35000030562478 -0.0936640377750591 -2.16385093589632 6.35000029989905 0.151282169469573 -2.16039311356122 6.35000030146899 0.396635521269916 -2.12713866961077 6.35000030131532 0.638267263095292 -2.0637666867198 6.35000030160882 0.871961000594629 -1.97063246442124 6.35000030160882 1.09354344961234 -1.84879167611667 6.35000030160882 1.29902066042496 -1.69999120546711 6.35000030160882 1.43754376961237 -1.57488142912025 1 0 0.555555555555556 0 0.277777777777778 0 0 0 1 1.10976049 1 1.01728044968929 1 0.924800409238179 1 0.83232036832083 1 0.739840327130716 1 0.656608290318386 0.999999999999999 0.581699457696711 1 0.506790624937133 1 0.431881790737058 1 0.356972957641467 0.999999999999997 0.282064125514265 1 0.207155291957709 1 0.113195568561294 1 0.0565977857970222 0 1.10976049 0.555555555460674 1.10976049 0.277777774449227 1.10976049 0 0.0924799373675001 0 0.175712099841875 0 0.250620918748569 0 0.325529745355074 0 0.400438578308107 0 0.475347411769022 0 0.550256244773144 0 0.625165076178373 0 0.700073911070184 0 0.774982741534219 0 0.849891578171155 0 0.92480040743324 0 0.999709246539618 0 1.05473484904301 3 23 22 3 25 24 24 23 3 2 27 26 11 29 28 28 27 12 26 25 3 21 30 20 32 31 21 30 21 31 34 33 21 35 21 19 21 35 34 33 32 21 20 30 29 22 4 3 2 12 27 15 14 2 2 16 15 13 2 14 18 17 2 16 2 17 18 2 1 12 2 13 20 29 11 20 10 9 10 20 11 28 12 11 8 7 20 6 5 20 7 6 20 8 20 9 2 26 3 -74 72 1 0.394264341426549 -6.35000030160882 1.34685307097208 1.41444156518237 6.35000030167802 1.5169639730057 1.24680945910158 6.35000030154638 1.66967994362967 1.05577860053393 6.35000030170198 1.80109046997432 0.843018642029185 6.35000030148551 1.90740783275211 0.61093614574432 6.35000030179863 1.98512138620135 0.362685038563081 6.35000030172621 2.03116412610012 0.102136778489872 6.35000030172513 2.04307544059036 -0.166185263441489 6.35000030182507 2.01915670671668 -0.437219183837491 6.35000030190492 1.95860004378402 -0.705513345079326 6.3500003009329 1.86158398334945 -0.965412603509462 6.35000030160882 1.74407900073263 -1.18747215393678 6.35000030160882 1.65886953082435 -1.31586429582232 6.35000030160882 1.56406643828917 -1.43766224628529 7.21279194058922 1.34821630603684 1.41444156518237 7.21279194058922 1.75566519138962 -1.18857467445427 7.21279194058922 1.62850547425138 1.11537204582619 7.21279194058922 1.83584575592573 0.782494401699211 7.21279194058922 1.97048372236408 0.435829826602684 7.21279194058922 2.04193169573555 0.052968912069587 7.21279194058922 2.03789700608067 -0.353452976169501 7.21279194058922 1.9488382243206 -0.766378563289336 7.21279194058922 1.86504751897336 -0.981200351223331 7.21279194058922 -1.75566531738962 -1.18857460045426 7.21279194058922 -1.57919479825066 -1.43731795707635 7.21279194058922 -1.36392613472056 -1.66056785629497 7.21279194058922 -1.14020952546803 -1.83377569025907 7.21279194058922 -0.917908263384871 -1.96313160054326 7.21279194058922 -0.679370815703776 -2.06426485250812 7.21279194058922 -0.428619029939489 -2.13479666666457 7.21279194058922 -0.170074809743701 -2.17303641737173 7.21279194058922 0.0915799275259555 -2.17805670026478 7.21279194058922 0.351558443466233 -2.14973519857978 7.21279194058922 0.605130559147911 -2.08876024088359 7.21279194058922 0.847780691135129 -1.99659963429321 7.21279194058922 1.07535331936045 -1.87543509530517 7.21279194058922 1.28417780967587 -1.72806708036795 7.21279194058922 1.47116634812466 -1.55779677571882 7.21279194058922 1.62488786892722 -1.38007064658117 7.21279194058922 -1.34821673503686 1.41444126218235 7.21279194058922 -1.92602608816082 -0.832403553482803 7.21279194058922 -2.02310091040593 -0.461687436078569 7.21279194058922 -2.04976245518296 -0.0921278061564518 7.21279194058922 -2.01211427083126 0.262890442129314 7.21279194058922 -1.91847084190189 0.592801652915467 7.21279194058922 -1.7783657556307 0.889996626104645 7.21279194058922 -1.57942544328536 1.17705709132012 6.35000030160882 -1.3468533929721 1.41444126218235 6.35000030160882 -1.56406656428917 -1.43766213928528 6.35000030396484 -1.70953288624009 -1.24208508438565 6.35000030174547 -1.83523503041623 -1.02133487538798 6.35000030160882 -1.93545101474559 -0.778275699319967 6.35000030160882 -2.00501456129326 -0.51740753404603 6.35000030160882 -2.03988311187165 -0.244712320205193 6.35000030160882 -2.03764256303282 0.0327278797382362 6.35000030126082 -1.99784184242751 0.307307522241323 6.35000030142539 -1.92207860878283 0.571577097232108 6.35000030140048 -1.8138117430624 0.818901870474457 6.35000030124436 -1.67794276203627 1.04398108964016 6.35000030173831 -1.52025944526642 1.24314957556407 6.35000030160882 -1.37918294639605 -1.63041026918977 6.35000030128064 -1.18757311133038 -1.78550785070286 6.35000028394389 -0.996124778782955 -1.90677468679433 6.35000029120144 -0.788500154395926 -2.00775182001858 6.35000030152583 -0.566967805974883 -2.0857746285429 6.3500003028341 -0.334283725055918 -2.13847300052605 6.35000030562478 -0.0936640377750591 -2.16385093589632 6.35000029989905 0.151282169469573 -2.16039311356122 6.35000030146899 0.396635521269916 -2.12713866961077 6.35000030131532 0.638267263095292 -2.0637666867198 6.35000030160882 0.871961000594629 -1.97063246442124 6.35000030160882 1.09354344961234 -1.84879167611667 6.35000030160882 1.29902066042496 -1.69999120546711 6.35000030160882 1.43754376961237 -1.57488142912025 3.54324898762612e-017 1 0.304973306666665 1 0.60994661333333 1 0.914919919999997 1 1.21989322666666 1 1.52486653333333 1 1.82983983999999 1 2.13481314666716 1 2.43978645333431 1 2.74475976000001 0.999999999999997 3.04973306618749 1 3.32420904014142 1 3.49194435859008 1 3.65967968 1 0 0 3.55114176 0 0.591856960759568 0 1.12452822508876 0 1.60393236028344 0 2.08333649749024 0 2.56274063554023 0 3.04214477367887 0 3.2966432648889 0 7.89204289 0 7.56647530807775 0 7.2409077196475 0 6.9478968928909 0 6.68418715021176 0 6.42047740640398 0 6.15676766250632 0 5.89305791992177 0 5.62934817432334 0 5.36563843043389 0 5.10192868603233 0 4.8382189424686 0 4.57450919873931 0 4.31079945195235 0 4.04708970773773 0 3.7991157328073 0 11.44318406 0 8.32350654472448 0 8.75497019337452 0 9.18643385027296 0 9.61789749944671 0 10.0493611492995 0 10.4808248034319 0 10.9620044352654 0 11.44318406 0.999999999421405 7.74712417 1 8.05512938816913 1 8.36313434081925 1 8.6711393106326 1 8.9791442873592 1 9.28714925489536 0.999999999999999 9.5951542300001 1 9.90315920163872 1 10.2111641732976 1 10.5191691449698 1 10.8271741166488 1 11.1351790883277 1 7.40650402486969 1 7.09994564477978 1 6.82404313743245 1 6.54814060875685 1 6.27223809863533 1 5.99633557388028 1 5.72043305803476 1 5.44453053828899 1 5.16862802026628 1 4.89272550295202 1 4.61682298583434 1 4.34092046840137 1 4.06501795014123 1 3.86234881553332 1 1 15 2 4 17 18 2 15 17 5 18 19 20 7 19 21 22 10 11 10 22 20 21 9 21 10 9 11 22 23 14 16 39 13 23 16 73 38 37 71 36 35 70 35 34 72 37 36 74 39 38 69 34 33 2 17 3 5 4 18 17 4 3 6 19 7 20 8 7 8 20 9 5 19 6 11 23 12 13 16 14 14 39 74 72 36 71 23 13 12 73 37 72 71 35 70 74 38 73 69 33 68 70 34 69 33 32 68 67 32 31 65 30 29 66 31 30 63 28 27 61 26 25 49 25 24 62 27 26 64 29 28 52 41 42 54 43 44 53 42 43 57 45 46 60 47 40 46 47 59 44 45 56 24 41 50 60 40 48 66 30 65 28 63 64 64 65 29 24 50 49 62 26 61 61 25 49 27 62 63 66 67 31 50 41 51 53 52 42 44 56 55 54 44 55 52 51 41 46 59 58 59 47 60 45 57 56 46 58 57 54 53 43 32 67 68 -12 10 1 0.701302995610101 -15.178436250937 -6.33367198983326 -0.437746756651854 13.7551732833356 -6.33367429383337 -0.507938351705776 14.5443322303167 -6.33370038605638 -0.438512104782042 14.1489478227719 -6.33369589393791 -0.463731551201274 18.7445785303197 -16.2690985127407 0.302431252674713 15.9726867219952 -10.7494183888045 -0.147774083092719 17.3586326231327 -13.5092584495565 0.0773285847924784 19.3665796498631 -16.2690975027406 0.333106715941719 19.0202757082456 -16.2691100248794 0.329364060800464 19.1933975102018 -16.2691074864275 0.335385358398923 17.5051825836737 -11.8533528305843 -0.00949482743814051 16.3418094173054 -9.09351241028592 -0.223620792046541 1.00008022 10.70174454 8.02199999998532e-005 10.70174454 0.555635777227202 10.70174454 0.277858000962346 10.70174454 8.022e-005 4.95000000011459e-005 8.022e-005 5.945435635595 8.022e-005 2.97274256802788 1.00008022 4.95e-005 0.444524664447337 4.95e-005 0.722302440024712 4.95e-005 1.00008022 4.75635840553018 1.00008022 7.72905147462531 5 9 7 6 7 11 4 2 12 6 12 2 10 7 9 8 11 7 12 6 11 3 12 1 3 4 12 7 10 8 -11 9 1 0.48746050605313 -13.0936999045215 -1.92471414973264 -0.831009732620803 13.5060312273872 -1.92741289910116 -0.823286283837871 13.7637275909558 -1.92659438288622 -0.825317042369079 14.0214149684814 -1.92384089900254 -0.832597729805518 11.7544106883045 -1.87810382833014 -0.947904141375154 12.3497089052311 -1.90673217518895 -0.878732655559849 12.7217176809472 -1.91796027199715 -0.849418938312193 13.7551732833356 -6.33367429383337 -0.507938351705776 15.178436250937 -6.33367198983326 -0.437746756651854 14.5443322303167 -6.33370038605638 -0.438512104782042 14.1489478227719 -6.33369589393791 -0.463731551201274 0.58576992 2.5142589 0.769142706189029 2.50538680110668 0.884347363537856 2.50159227408246 1 2.49917007 0 2.56863339 0.258273096715122 2.5392581810665 0.421450702407373 2.52525805234826 0 0 1 0 0.555555559353735 0 0.277777803531368 0 8 11 6 6 5 8 7 6 11 11 1 7 2 10 9 3 9 4 2 1 10 3 2 9 10 1 11 -12 10 1 0.629656396568888 -13.7551732833356 -6.33367429383337 -0.507938351705776 13.4648676895469 -6.33366791783307 -0.649981567562466 13.6092627480286 -6.33366414186155 -0.542618730393233 13.523757443342 -6.33366598147823 -0.579216433281663 18.6177078042936 -16.2690957227405 0.240354853816242 16.3275566416901 -11.8533500334977 -0.155350222347628 14.8962121671 -9.09350897509132 -0.402665894952023 18.7445785303197 -16.2690985127407 0.302431252674713 18.6802705443525 -16.2690930103612 0.290479512461686 18.6456109863585 -16.2690930185178 0.269857395778124 15.9726867219952 -10.7494183888045 -0.147774083092719 17.3586326231327 -13.5092584495565 0.0773285847924784 1.00034374 46.24578153 0.000343740000000009 46.24578153 0.555899301739747 46.24578153 0.278121513746711 46.24578153 0.00034374 0.000207429999999286 0.00034374 20.5537959040959 0.00034374 33.3997887262625 1.00034374 0.00020743 0.555899276640761 0.00020743 0.278121530471551 0.00020743 1.00034374 25.6921930406685 1.00034374 12.8462002312857 6 5 12 11 7 6 7 4 2 3 4 7 12 5 10 9 8 12 12 11 6 7 1 3 7 11 1 10 9 12 -20 18 1 0.0728037872379722 -18.7445785303197 -16.2690985127407 0.302431252674713 18.6177078042936 -16.2690957227405 0.240354853816242 18.6802705443525 -16.2690930103612 0.290479512461686 18.6456109863585 -16.2690930185178 0.269857395778124 19.4649687145364 -16.2690729827395 0.155572182299282 18.6299027142015 -16.269089666535 0.227260498344494 18.6423905326811 -16.2690849763005 0.216766026059338 18.6544605547061 -16.2690816211184 0.208874061563761 18.6671320251041 -16.2690790884247 0.202500498620742 18.6846261387879 -16.2690767862081 0.196020562419859 18.7054292410992 -16.2690752900111 0.19078938966552 18.7338287275542 -16.2690748591043 0.186886135605574 18.7764386551276 -16.269076312927 0.185478084221787 18.8404298778025 -16.2690781326059 0.184022620004897 18.9360071259079 -16.2690760507146 0.175904166075495 19.0791592696193 -16.2690706505231 0.161951232913265 19.2720497498007 -16.269070796701 0.156344287848877 19.3665796498631 -16.2690975027406 0.333106715941719 19.0202757082456 -16.2691100248794 0.329364060800464 19.1933975102018 -16.2691074864275 0.335385358398923 1 4.45537137 0 4.45537137 0.555554660792755 4.45537137 0.277778057864548 4.45537137 0 2.22044604925031e-016 0 4.36475536883363 0 4.28320444881397 0 4.20980827441253 0 4.13640931165904 0 4.03975968250514 0 3.92966493717863 0 3.78292393693901 0 3.56273110080236 0 3.23244214651285 0 2.737008973091 0 1.99385942255373 0 0.996929694794906 1 0 1 2.47520636547401 1 1.23759670675938 17 5 18 15 16 19 14 15 19 17 20 16 12 13 1 10 11 3 9 10 4 12 3 11 14 19 13 4 7 8 1 13 19 16 20 19 17 18 20 10 3 4 2 6 4 7 4 6 9 4 8 1 3 12 -12 10 1 0.838678848922435 -20.2590217622519 -16.2691035827409 0.211302165326314 19.8650301674403 -16.2690983887088 0.285985354754952 19.6170866779439 -16.2691173430476 0.322931822102796 19.3665796498631 -16.2690975027406 0.333106715941719 17.2205222879309 -6.33368591083392 -0.716459929370019 18.9085775460104 -11.8533623956218 -0.201036543432056 18.0645499169089 -9.09352415367846 -0.458748236404062 15.178436250937 -6.33367198983326 -0.437746756651854 16.3204802357387 -6.33369956825891 -0.537232878767512 15.7510666836442 -6.33369196905639 -0.470107630845391 17.5051825836737 -11.8533528305843 -0.00949482743814051 16.3418094173054 -9.09351241028592 -0.223620792046541 5.54299999999813e-005 7.14491407 0.44449987427185 7.14491407 0.722277652974471 7.14491407 1.00005543 7.14491407 5.543e-005 3.42497050276336e-005 5.543e-005 3.96941192941519 5.543e-005 1.98472309006156 1.00005543 3.425e-005 0.444499873665125 3.425e-005 0.722277653348406 3.425e-005 1.00005543 3.96941192873412 1.00005543 1.98472308876991 5 9 7 6 7 11 1 6 2 11 2 6 12 7 9 10 8 12 12 11 7 3 11 4 3 2 11 9 10 12 -28 26 1 0.830826167402335 -13.4648676895469 -6.33366791783307 -0.649981567562466 15.4035701016303 -6.3336158858306 -0.843981276536958 13.4639365106997 -6.33361893781667 -0.673369252265261 13.4729896817002 -6.33359697801473 -0.695277444186304 13.4969086185137 -6.33360524760734 -0.716579548656003 13.5425829989032 -6.33363312994559 -0.735583849017036 13.6102856298869 -6.3336251452398 -0.748722011987501 13.712881877997 -6.33360215937222 -0.759572386927934 13.872435909273 -6.33363221442692 -0.77973920581501 14.1099553090516 -6.33364843656355 -0.801451178377316 14.4612579990034 -6.33360098255577 -0.818217286410855 14.9326555011664 -6.33360966883766 -0.840574978351562 19.4649687145364 -16.2690729827395 0.155572182299282 18.6177078042936 -16.2690957227405 0.240354853816242 18.6299027142015 -16.269089666535 0.227260498344494 18.6423905326811 -16.2690849763005 0.216766026059338 18.6544605547061 -16.2690816211184 0.208874061563761 18.6671320251041 -16.2690790884247 0.202500498620742 18.6846261387879 -16.2690767862081 0.196020562419859 18.7054292410992 -16.2690752900111 0.19078938966552 18.7338287275542 -16.2690748591043 0.186886135605574 18.7764386551276 -16.269076312927 0.185478084221787 18.8404298778025 -16.2690781326059 0.184022620004897 18.9360071259079 -16.2690760507146 0.175904166075495 19.0791592696193 -16.2690706505231 0.161951232913265 19.2720497498007 -16.269070796701 0.156344287848877 16.3275566416901 -11.8533500334977 -0.155350222347628 14.8962121671 -9.09350897509132 -0.402665894952023 1.00005799 7.70509075 5.79900000000633e-005 7.70509075 0.988315025723189 7.70509074999995 0.976572066745244 7.70509074999996 0.960914789017507 7.70509074999999 0.937428869988888 7.70509075000001 0.902199989898897 7.70509075 0.849356669594417 7.70509075 0.770091685527959 7.70509075 0.651194215522218 7.70509075 0.472848011413031 7.70509074999999 0.236453002086553 7.70509075 5.799e-005 3.57399999999707e-005 1.00005799 3.574e-005 0.979719795831443 3.574e-005 0.961415421484521 3.574e-005 0.944941489174967 3.574e-005 0.928467552326802 3.574e-005 0.906775150198356 3.574e-005 0.882064238508352 3.574e-005 0.849128297607895 3.574e-005 0.799706484522021 3.574e-005 0.725573774441529 3.574e-005 0.614374713494334 3.574e-005 0.447576105128242 3.574e-005 0.223817050070976 3.574e-005 1.00005799 3.42450462974269 1.00005799 5.56479768859412 13 26 27 2 13 27 22 21 27 26 25 27 25 24 27 12 28 11 28 12 2 10 28 9 28 10 11 28 8 9 22 27 23 23 27 24 21 20 27 18 17 27 19 18 27 16 15 27 14 27 15 16 27 17 28 2 27 6 28 5 28 6 7 3 28 1 28 3 4 28 4 5 8 28 7 27 20 19 -8 6 1 0.0669333437192319 -19.4649687145364 -16.2690729827395 0.155572182299282 20.2590217622519 -16.2691035827409 0.211302165326314 19.8179548645828 -16.2690701719765 0.179611696722426 20.0382192497354 -16.2690717066067 0.199031380776679 20.2590217622519 -16.2691035827409 0.211302165326314 19.3665796498631 -16.2690975027406 0.333106715941719 19.8650301674403 -16.2690983887088 0.285985354754952 19.6170866779439 -16.2691173430476 0.322931822102796 2.22139684312905e-016 0 7.01562055 0 3.11805339864599 0 5.06684031122413 0 7.01562055 1 0 1 3.89756289685721 1 1.94878391367122 1 1 3 8 8 6 1 3 7 8 4 2 5 5 7 4 4 7 3 -10 8 1 0.813196192037124 -15.4035701016303 -6.3336158858306 -0.843981276536958 17.2205222879309 -6.33368591083392 -0.716459929370019 16.2112081300592 -6.33361609632978 -0.789025082562419 16.7153074057598 -6.33362440525886 -0.744629567009837 20.2590217622519 -16.2691035827409 0.211302165326314 18.9085775460104 -11.8533623956218 -0.201036543432056 18.0645499169089 -9.09352415367846 -0.458748236404062 19.4649687145364 -16.2690729827395 0.155572182299282 19.8179548645828 -16.2690701719765 0.179611696722426 20.0382192497354 -16.2690717066067 0.199031380776679 1.00006281 8.09360706 6.28099999999965e-005 8.09360706 0.555618361917059 8.09360706 0.277840586164001 8.09360706 6.281e-005 3.88000000000264e-005 6.281e-005 3.59718024860811 6.281e-005 5.84539365117765 1.00006281 3.88e-005 0.555618361400174 3.88e-005 0.277840585550529 3.88e-005 5 10 6 1 7 6 4 2 7 9 6 10 1 6 8 3 4 7 7 1 3 6 9 8 -14 12 1 0.499605877516254 -15.178436250937 -6.33367198983326 -0.437746756651854 14.0214149684814 -1.92384089900254 -0.832597729805518 17.2205222879309 -6.33368591083392 -0.716459929370019 16.3204802357387 -6.33369956825891 -0.537232878767512 15.7510666836442 -6.33369196905639 -0.470107630845391 17.2459916253906 -1.67360683680456 -1.30407191862759 16.7625925747914 -1.75437077638359 -1.18146657566026 16.9812751557499 -1.72099868072589 -1.23446829000819 17.1148730172093 -1.69810587898019 -1.26885931213382 15.4046111730498 -1.88092150688822 -0.938194333874812 16.0252284332646 -1.83732511149156 -1.03131861114356 16.4001980377112 -1.80023583329231 -1.10214761062571 14.8152663860065 -1.90682148376207 -0.87637661922074 14.4245629156867 -1.91747338208482 -0.8492654236681 1 1.82448587 1 0.17394741 2.77555756156289e-017 1.82448587 0.444444462479436 1.82448587 0.7222222022199 1.82448587 0 0.0954315 0.15044892 0.12565888 0.0822899551123485 0.113268325726465 0.0407265660062239 0.10468480269902 0.57369412 0.16862534 0.380544263650549 0.155089880897813 0.263565885921797 0.142254969546214 0.75614471828442 0.174467063718911 0.876457422546268 0.175297591893146 9 8 3 6 9 3 3 7 12 7 3 8 3 12 4 4 12 11 10 13 5 4 10 5 14 1 5 1 14 2 13 14 5 10 4 11 -29 27 1 0.343663221995893 -17.2205222879309 -6.33368591083392 -0.716459929370019 17.2459916253906 -1.67360683680456 -1.30407191862759 15.4035701016303 -6.3336158858306 -0.843981276536958 16.2112081300592 -6.33361609632978 -0.789025082562419 16.7153074057598 -6.33362440525886 -0.744629567009837 14.2745163580031 -1.4846250675159 -1.53651017760531 14.8705159773675 -1.51573699413999 -1.50252336583399 14.6045684494052 -1.49873878227454 -1.5212145208741 14.4452163546622 -1.49085297720757 -1.52977175997997 15.0160139974919 -1.52633483598157 -1.49066171417753 15.1186490163256 -1.53424852462356 -1.48169093124383 15.2409735004748 -1.54412598780222 -1.47034857787681 15.2897060809059 -1.54801700456862 -1.4658380710628 15.3338663281407 -1.55165581673741 -1.46159491675586 15.3885363223517 -1.55624760869252 -1.45620788292268 15.5147916959614 -1.56675372657847 -1.44374047981749 15.5740823286723 -1.57173272794924 -1.4377680713505 15.6256430914078 -1.57605716395364 -1.43254444077483 15.6823255517509 -1.58079696028805 -1.42677816535166 15.7178961251149 -1.58375576885616 -1.42315375299189 15.7556463974262 -1.58687563239034 -1.41931403490338 15.829140031128 -1.59292241583123 -1.41182018706148 15.8733605199442 -1.59651767644435 -1.40732986697314 15.9164083652715 -1.59998716778997 -1.40297469633251 16.1468680819312 -1.61785758391885 -1.38014834923695 16.2811156081652 -1.62757631676078 -1.36744680070648 16.4125111362741 -1.63640330747186 -1.35571949953735 16.7987051555047 -1.65835168680491 -1.3257456828009 17.0262197165851 -1.66764226153657 -1.31266042384163 2.07179401 0 0.10836719 0 2.07179401 1 2.07179401 0.555555522337327 2.07179401 0.277777777378167 0.01152218 1 0.03059144 0.80255628 0.020985861115171 0.890723593066196 0.0160093818323176 0.943470088817476 0.0363494785589008 0.754234679661353 0.0405551600226055 0.720092599626547 0.04567107 0.67931955 0.047730386491835 0.663059758799984 0.0496019999243124 0.648308068007997 0.05192326 0.63002613 0.0572779323769422 0.587751604206869 0.0597808871130647 0.567865883981722 0.0619454509369303 0.550555722766231 0.0643061861910966 0.531506899971015 0.0657753860218549 0.519542631474121 0.06732382 0.50683689 0.0703027900423955 0.48207325017408 0.0720688910469333 0.467157159873782 0.0737673431417201 0.45262530433427 0.0824444100640764 0.374657237507232 0.0871092629204745 0.329117843143544 0.09134529 0.28446737 0.101575014527517 0.152839598872229 0.105785652876326 0.0751292589484769 13 3 12 14 3 13 4 17 18 4 15 16 16 17 4 4 14 15 3 6 9 8 3 9 10 11 3 3 7 10 3 8 7 12 3 11 18 19 4 27 28 5 26 27 5 2 1 29 29 5 28 5 29 1 26 5 4 22 23 4 20 21 4 22 4 21 24 25 4 14 4 3 25 26 4 4 23 24 4 19 20 -100 98 1 0.207538980740442 -11.2233642208145 -1.73910600437289 -1.21164554112822 11.227244768807 -1.74578973907948 -1.20087006283061 11.2303906236261 -1.74989094726789 -1.19418281974557 11.2339737223351 -1.75393664780752 -1.18752892052959 11.2195260373578 -1.72876789393421 -1.22802415636908 11.2206484646032 -1.73339658627751 -1.22073395373012 11.2217925802684 -1.73627142449228 -1.21617123657517 11.2229519281623 -1.70382745794937 -1.26617213152758 11.2189290449075 -1.71475417104491 -1.24968896466858 11.2184017788172 -1.72174664700725 -1.23895432445646 11.2480738321926 -1.67852313843327 -1.30305412763939 11.234188906666 -1.68916338877675 -1.28775878561204 11.2276055108228 -1.69632379581601 -1.27729312890639 11.2578643340571 -1.672842776302 -1.31109607646477 11.2533604297598 -1.67531169905511 -1.30761172563788 11.2506626947788 -1.67689733654243 -1.30536481592506 11.2676418333309 -1.6681577094662 -1.31767171375095 11.2741538374915 -1.6654569592556 -1.32143484984067 11.2810233886257 -1.66292486149133 -1.32494032340658 11.2903753848963 -1.65980149802582 -1.32925253480982 11.2971320486903 -1.65774925803631 -1.33206677658958 11.3046101155787 -1.65560031280696 -1.33500311111335 11.3293114099374 -1.64929549958061 -1.34356286766825 11.3448910892259 -1.64594663168203 -1.34806246486765 11.3639897483438 -1.64238388482431 -1.35282295016919 11.4155806284448 -1.63407270778137 -1.36381156790576 11.4512604360294 -1.62939305680225 -1.36992637915907 11.4919570406201 -1.62478166592107 -1.37589307800223 11.5033413492633 -1.6235805184902 -1.37743938799149 11.5102542370771 -1.62287503577893 -1.37834668221252 11.5173309615065 -1.62216470532931 -1.37925932234333 11.5355773576951 -1.62037943573357 -1.38154981703186 11.5497443399291 -1.6190225053481 -1.38328192338118 11.5677514756082 -1.61732692438244 -1.3854388743982 11.5801261727527 -1.61615351025668 -1.38692852721363 11.5864926425007 -1.61555190322114 -1.38769064838934 11.5921035220023 -1.61502206570273 -1.38836344529165 11.615814646083 -1.61274364952565 -1.39124674343148 11.6287073966378 -1.61147213517373 -1.39285310343456 11.6440291192181 -1.60990510560288 -1.39482515131581 11.6829099024594 -1.6058749640548 -1.3998757923657 11.7102014836225 -1.60294631113003 -1.4035244591397 11.7460296980906 -1.59904800056319 -1.4083623372769 11.7511165830346 -1.59849215079999 -1.40904918860201 11.7544268550149 -1.59813003486748 -1.40949649305482 11.7578455409638 -1.59775711123781 -1.40995683754297 11.8213460558702 -1.59086133378869 -1.41841697858755 11.8461381283823 -1.58823624602951 -1.42160882331301 11.8715138817384 -1.58570854653159 -1.424674981036 12.2568192726063 -1.55566787566868 -1.46007545322656 12.0794714292166 -1.56731709017386 -1.44657245533666 11.980670406726 -1.57541197019565 -1.43701954883889 12.3490542921462 -1.55052098821767 -1.46594768320967 12.4141276715905 -1.54716693433357 -1.46975166527568 12.5015213107503 -1.54287260379372 -1.47457893519828 12.5116216313234 -1.54238455057018 -1.47512625697686 12.5179346215237 -1.54208087242284 -1.4754662742074 12.5242477717419 -1.54177759031217 -1.47580533019563 12.5359615458236 -1.54121491395628 -1.47643457294945 12.5432828985466 -1.540863736076 -1.47682696845786 12.5506040056185 -1.54050897098862 -1.47722330575687 12.6566274925079 -1.53537259129797 -1.48293458188731 12.7083047019876 -1.53278255608049 -1.48580505781872 12.7665063849933 -1.52971109318622 -1.48919178752468 12.8583985514616 -1.52489669932445 -1.49446953142127 12.9218550772373 -1.52145695182292 -1.49821690536265 13.0022709656819 -1.51706751062374 -1.50297788728507 13.0187656507354 -1.51616590344978 -1.50395144002088 13.0296278106992 -1.51557263531509 -1.50459165545002 13.0409575546936 -1.51495712080103 -1.50525514791496 13.1525151951007 -1.50891955701304 -1.51173175729266 13.1963478539544 -1.50659140993578 -1.5142092006368 13.2369433548438 -1.50453569894826 -1.51638897342284 13.4301691153108 -1.49509949578239 -1.52631041698181 13.5324637453239 -1.49079423407009 -1.53077243624519 13.6299341892202 -1.48725405550496 -1.53441086611513 13.9578228007084 -1.4807103422503 -1.54093210274145 13.8085839946898 -1.4824842048175 -1.5392329993698 13.7199357980825 -1.48450811104157 -1.53720429208986 14.077554671172 -1.48084594222114 -1.54066472222945 14.1508498914484 -1.4817132023472 -1.53968486571425 14.2235895153933 -1.48319986742028 -1.53805637621256 14.2462885162646 -1.48379473659306 -1.5374098935786 14.2604227333025 -1.48419795151019 -1.53697266617358 14.2745163580031 -1.4846250675159 -1.53651017760531 15.4035701016303 -6.3336158858306 -0.843981276536958 13.4648676895469 -6.33366791783307 -0.649981567562466 13.4630372153778 -6.33363348142137 -0.664906484472153 13.4655630790502 -6.33360987132225 -0.67995183223256 13.4720109423526 -6.33359763794093 -0.693809337204718 13.481865211362 -6.33359655102978 -0.705455775328054 13.498850144814 -6.33360669450163 -0.717717950742376 13.5281798180479 -6.33362740563884 -0.730827739418199 13.572095439073 -6.33363518544748 -0.74288467585994 13.6369910889792 -6.33361512043099 -0.751487236151594 13.736730197582 -6.33360336596481 -0.762465722742529 13.8907617951635 -6.333636723012 -0.781962857767236 14.1191015746301 -6.3336475145718 -0.802019608563596 14.4573225724275 -6.33360124898954 -0.818033137070813 14.9306750904231 -6.33360956834953 -0.840493691159277 0.07289849 0.9931894 0.0757234967050008 0.996137244152658 0.0774750588121758 0.998030257721008 0.07920744 1 0.06857136 0.9886335 0.0704928278769394 0.990684342361476 0.0716938679120554 0.991939750282198 0.0583457199999999 0.976490549999999 0.0627919176003653 0.982034395989248 0.0656571322090562 0.985387556620347 0.0482958 0.96090743 0.0524866388200713 0.968177111479165 0.0553417072088396 0.972427444429951 0.0461083979788055 0.956415984746819 0.0470544372830388 0.958427883340314 0.047667219296658 0.959672599887471 0.0443362535498325 0.952281824161441 0.0433294202132388 0.949660139546625 0.0423906 0.94698261 0.0412653883446641 0.943422089035277 0.0405314281578346 0.940906684576567 0.03977078 0.93815762 0.0375843164387616 0.929293385661707 0.0364666201637668 0.923860235498933 0.03529606 0.91732193 0.0327706521807621 0.899968165948881 0.0314470781974892 0.888198849658483 0.03023112 0.874933410000001 0.0299325603970396 0.871243889610214 0.0297584203083497 0.869007907062179 0.0295851430584376 0.866721597110353 0.0291562097415277 0.860836687821888 0.0288348324254097 0.856274519556502 0.02843456 0.85048174 0.0281606980287063 0.846501346998933 0.0280189169647472 0.844453684103702 0.0278932350697893 0.842648892677029 0.027348717621698 0.835016305255843 0.0270379329185869 0.83086007728533 0.02665329 0.82591291 0.0256217286413305 0.813342708540271 0.0248598769263402 0.80450405413378 0.0238348542154167 0.792893145357802 0.023687992627066 0.791244453937006 0.0235922960472008 0.790171547585091 0.02349338 0.78906361 0.0216746898639515 0.768498341036341 0.0209904750636423 0.760484833219954 0.02032222 0.75230479 0.01405168 0.62979303 0.0161351603419095 0.68582308531786 0.0178479546162836 0.717281159315844 0.0133498255557598 0.600791213831167 0.0129608130721377 0.580366677419987 0.01251076 0.5529642 0.0124618838776559 0.549798535066042 0.0124313367387952 0.547819994965963 0.0124007899364611 0.545841455231958 0.0123441137041532 0.542170435577224 0.0123086916330937 0.539876048014679 0.01227327 0.537581660000001 0.0117217636097559 0.504352322777753 0.0114080181877463 0.488148171860389 0.01101028 0.46988747 0.0103090598252999 0.441050512052965 0.00978376516009936 0.421129474064403 0.00909064694457245 0.395882219887666 0.00894614347208634 0.390703570984326 0.00885067307120523 0.387293324995563 0.00875086 0.38373641 0.00777365939823364 0.348718213523711 0.00739855978676949 0.334964316308883 0.00706201 0.32223301 0.00569344271413195 0.261712632471206 0.00519840927489957 0.229756055712062 0.00493494 0.19936977 0.00604403560224287 0.0976197411686703 0.00510762309155136 0.143844754190735 0.00490702482833484 0.171356952748486 0.00741249303742366 0.0606418331866811 0.00855196727776675 0.0380493972621068 0.00992432000000001 0.01565901 0.0104035050825022 0.00867783417045524 0.0107144550941584 0.00433216220452942 0.01103422 6.50521303491303e-019 1.98405473 0 1.98405473 1 1.98405473 0.992462250491785 1.98405473 0.984924263257178 1.98405473 0.977386087530344 1.98405473 0.969848035505376 1.98405473 0.959797459685819 1.98405473 0.944721407279668 1.98405473 0.922107533907358 1.98405473 0.888186572632102 1.98405473 0.837305148334538 1.98405473 0.760983075457475 1.98405473 0.646499975219437 1.98405473 0.474775219244402 1.98405473 0.237387612139141 79 100 76 79 78 100 80 86 77 100 78 77 100 75 76 74 75 100 73 74 100 73 100 72 71 72 100 70 71 100 86 80 81 99 68 69 82 86 81 99 69 70 86 83 84 82 83 86 67 68 99 99 66 67 99 65 66 62 63 99 60 61 99 61 62 99 64 65 99 99 63 64 99 56 57 55 56 99 55 99 54 53 54 98 99 57 58 98 52 51 98 51 50 49 4 48 4 49 52 53 98 50 99 58 59 48 4 47 47 4 46 45 46 4 44 45 4 4 43 44 4 41 42 60 99 59 39 40 4 37 38 4 39 4 38 41 4 40 43 4 42 37 4 36 85 86 84 31 4 30 4 31 32 4 28 29 4 29 30 33 4 32 2 25 26 26 27 4 6 23 24 24 25 1 28 4 27 4 33 34 34 35 4 4 52 98 54 99 98 98 97 4 35 36 4 21 8 20 10 22 23 4 96 95 4 94 93 95 94 4 21 22 8 4 97 96 70 100 99 77 86 100 18 14 17 14 18 19 19 15 14 16 15 12 15 19 12 16 12 11 19 13 12 13 19 20 8 13 20 9 8 22 10 9 22 90 4 91 5 10 23 4 90 89 4 92 91 7 24 1 26 4 3 6 5 23 7 6 24 2 26 3 25 2 1 87 4 88 89 88 4 93 92 4 -47 45 1 0.097694282417667 -11.2339737223351 -1.75393664780752 -1.18752892052959 13.4648676895469 -6.33366791783307 -0.649981567562466 13.7551732833356 -6.33367429383337 -0.507938351705776 13.6092627480286 -6.33366414186155 -0.542618730393233 13.523757443342 -6.33366598147823 -0.579216433281663 11.7544106883045 -1.87810382833014 -0.947904141375154 11.7230037068433 -1.87519299652087 -0.954539726978555 11.7430061454837 -1.87707990578844 -0.950238559987098 11.7341178088253 -1.87625236211661 -0.952126134945495 11.7107019725161 -1.87402943667788 -0.957177203399168 11.7165880947784 -1.87458745091292 -0.955914467644462 11.713429661304 -1.87428775450117 -0.956594460968703 11.6780822159487 -1.8710899238748 -0.963788802911312 11.6980802541729 -1.87285829829361 -0.959824525865733 11.690195586167 -1.87215028398156 -0.961414750965294 11.6689018442431 -1.87027896633348 -0.965602735826667 11.6722502070959 -1.870576961947 -0.964936636947661 11.6752197922217 -1.87084070912355 -0.964346635407782 11.6098700549364 -1.86430064821477 -0.978826260728255 11.64397713815 -1.86795639507528 -0.970763765144991 11.630039757643 -1.86650994850731 -0.973966385385513 11.579795765572 -1.86090292936362 -0.98623107103987 11.5930647999869 -1.8624660378322 -0.982834541639796 11.601488815112 -1.86340783680259 -0.980779966337796 11.5686247880199 -1.85961621804369 -0.989014949325949 11.5734872711878 -1.86021587605612 -0.987719100086025 11.5766044926456 -1.86058016602381 -0.98693061940209 11.5253852575828 -1.85416377756769 -1.00069150837767 11.5459554346438 -1.85689489074905 -0.99485901052015 11.5354351965695 -1.85554034269393 -0.997755378621079 11.4896394008981 -1.84878792653291 -1.0120133489902 11.5049986892907 -1.8511955651312 -1.00696442186449 11.5150255720737 -1.85267801414463 -1.00383769946656 11.4383603506965 -1.83998407337006 -1.03017742118867 11.4603506451082 -1.84396087891282 -1.02202301790877 11.4490203116662 -1.84200116627584 -1.02605776551448 11.3805975561415 -1.82703782145984 -1.05608161268227 11.4135027931128 -1.8349587162813 -1.04034317746689 11.3978348159253 -1.83132768664625 -1.04760549729773 11.3208385076288 -1.80819404686211 -1.09222199876256 11.3456486455678 -1.81702108945771 -1.07551241680733 11.3624960418518 -1.82216862552671 -1.06559130850132 11.2476412635365 -1.7665596569946 -1.16638885628345 11.2776743680257 -1.78752160335813 -1.12995401782801 11.2983350089489 -1.79845944032001 -1.11022545541699 11.2414007844316 -1.76114051749876 -1.17553440686911 11.2376303451477 -1.75760057044684 -1.18145221620923 0 11.58701171 0 0 1 1.33226762955019e-015 0.555555547257711 1.33226762955019e-015 0.277777787279758 1.33226762955019e-015 1 11.2216414103045 0.942762190000001 11.23207082 0.979132184348537 11.2253500596624 0.962953362261242 11.2283149992705 0.920406957829693 11.2362320010235 0.931114425806087 11.2342449387946 0.92537120910559 11.2353125747573 0.86046065 11.24687623 0.897343755760855 11.2404323045084 0.882840988157512 11.2429954796562 0.84647518 11.24929061 0.852690957129771 11.2482175504586 0.856575807076239 11.2475468897563 0.73560521 11.2708009 0.797501334403902 11.2581348591497 0.772108871584604 11.2631627800717 0.68082736 11.28239685 0.705169348342463 11.2772729154118 0.720473162196775 11.2740224476138 0.66023824 11.28670238 0.669251285658709 11.2848137944846 0.675002100983963 11.2836126369895 0.580931908751862 11.3046987228826 0.618454107130148 11.2957591987837 0.599198636019418 11.3002240763401 0.51639486 11.32193444 0.544158397781138 11.3143191380247 0.56221330694496 11.3095085081739 0.42197703 11.34908406 0.462720624066706 11.3369652404615 0.441781464540553 11.3430521006814 0.31622551 11.38786254 0.376404419262942 11.3644135200217 0.34776559624968 11.3751655146815 0.2017635 11.44137215 0.250437036668781 11.4167392071723 0.282618492706501 11.4021534208108 0.0393362703298748 11.5538234236251 0.112079791930395 11.4980250729793 0.156230527629121 11.4682920729724 0.022126014392564 11.5681095535287 0.0111530344009114 11.5774109686123 35 2 31 36 34 2 35 36 2 30 2 29 2 34 38 30 28 2 6 5 4 28 33 2 31 2 32 32 2 33 5 6 2 44 43 2 45 44 2 47 1 2 46 47 2 43 46 2 39 37 2 38 39 2 41 40 2 42 41 2 37 42 2 45 2 40 10 15 12 15 10 14 11 12 13 13 12 15 13 18 2 2 6 8 8 9 2 11 13 7 7 2 9 13 2 7 17 2 18 22 27 2 2 23 22 29 2 25 26 2 27 25 2 26 20 2 16 16 2 17 24 23 2 19 2 21 21 2 20 24 2 19 4 3 6 -21 19 1 1.28426865874916 -7.21279194058922 -1.34821673503686 1.41444126218235 7.21279194058922 -1.17836706527992 1.56970730697846 7.21279194058922 -0.981917285228737 1.70848917867161 7.21279194058922 -0.784151085313912 1.81424846604148 7.21279194058922 -0.591563674737238 1.89028853266407 7.21279194058922 -0.388086262235879 1.94542303607734 7.21279194058922 -0.17721191057762 1.97761684205229 7.21279194058922 0.0371083726826099 1.98563900726458 7.21279194058922 0.250703487409071 1.96917785934748 7.21279194058922 0.459449006590256 1.9288708047215 7.21279194058922 0.659527747637658 1.86624365592483 7.21279194058922 0.847650417151275 1.78357001599117 7.21279194058922 1.02121123683069 1.68367414406423 7.21279194058922 1.17836660149198 1.56970757180622 7.21279194058922 1.26668721907229 1.49375519312968 7.21279194058922 1.34821630603684 1.41444156518237 20.1549001573063 -1.3686672230082 1.41444126018235 20.1549001573063 1.36866520500811 1.41444156718237 20.1549001573063 -0.523003820875509 1.90359871190365 20.1549001573063 0.421175424604663 1.92900029344899 20.1549001573063 0.948412073296903 1.72898981898171 0 4.05709804 0.0833333338930631 4.05709804 0.166666667461643 4.05709804 0.241666667459402 4.05709804 0.309166667327433 4.05709804 0.376666667107608 4.05709804 0.444166666832094 4.05709804 0.511666666532067 4.05709804 0.579166666238493 4.05709804 0.646666665982895 4.05709804 0.714166665798138 4.05709804 0.781666665719194 4.05709804 0.849166665783926 4.05709804 0.916666666033856 4.05709804 0.958333332967052 4.05709804 1 4.05709804 0 1.56619606173081e-010 1 0 0.333333333026269 0 0.633333333612658 0 0.816666667263602 0 1 17 2 17 3 2 3 17 19 3 19 4 5 4 19 7 6 19 8 7 19 5 19 6 19 20 8 11 20 21 21 14 13 14 21 18 14 18 15 12 21 13 10 9 20 11 10 20 16 15 18 11 21 12 20 9 8 -97 95 1 0.210112682690577 -11.2339734254601 1.75393602555749 -1.1875290010296 13.4648676895469 6.33366791783307 -0.649981567562466 15.4035701016303 6.3336158858306 -0.843981276536958 13.4630372153778 6.33363348142137 -0.664906484472153 13.4655630790502 6.33360987132225 -0.67995183223256 13.4720109423526 6.33359763794093 -0.693809337204718 13.481865211362 6.33359655102978 -0.705455775328054 13.498850144814 6.33360669450163 -0.717717950742376 13.5281798180479 6.33362740563884 -0.730827739418199 13.572095439073 6.33363518544748 -0.74288467585994 13.6369910889792 6.33361512043099 -0.751487236151594 13.736730197582 6.33360336596481 -0.762465722742529 13.8907617951635 6.333636723012 -0.781962857767236 14.1191015746301 6.3336475145718 -0.802019608563596 14.4573225724275 6.33360124898954 -0.818033137070813 14.9306750904231 6.33360956834953 -0.840493691159277 14.2745160980031 1.48462395626585 -1.53651034460532 14.1656597628408 1.48194751707815 -1.53942524734664 14.2135489953361 1.48294152282931 -1.53833614618462 14.2438493880019 1.48372260617846 -1.53748696442166 13.6011839966343 1.48832080334864 -1.53331528929195 13.8654284008302 1.48159472568976 -1.54010328081708 14.0166842001824 1.48051674128334 -1.5410726263608 13.444497106413 1.49446108102915 -1.52697212221782 13.3358719193724 1.49950553637307 -1.52170061063614 13.2067968429158 1.50604612550568 -1.51478693835905 13.1814593172009 1.50737578009611 -1.51337342630281 13.16645930085 1.5081726599836 -1.51252533733249 13.1505415149467 1.50902129957732 -1.51162015009139 13.1124663081777 1.51107070262435 -1.50943129849638 13.0788185802369 1.51289249567415 -1.50747650391921 13.0297316574771 1.51557535698256 -1.50458789742418 12.9720618338055 1.51871722126836 -1.50119072402387 12.940715865217 1.52042788356822 -1.49933413531661 12.9120964228236 1.52198792279919 -1.49763971953495 12.82847300856 1.52649959711267 -1.49271427253387 12.7814658356866 1.52899226785807 -1.48998019128669 12.7343557009245 1.53139827017334 -1.48733192218905 12.6575618638079 1.53532613324339 -1.48298586386706 12.6076641882957 1.53776370918687 -1.48027790458241 12.5372927826847 1.54114785217358 -1.47650854790917 12.5260170991434 1.54169121599895 -1.47590103221097 12.5198591320194 1.54198713948748 -1.47557000779162 12.5143853778561 1.54225075040349 -1.47527481543679 12.5052019156317 1.54269254444705 -1.47478005746981 12.5009610278662 1.54289698784182 -1.47455086369703 12.4978731391223 1.54304758553291 -1.47438192864982 12.3752478733188 1.54915010834762 -1.4675065714953 12.3176153777131 1.55221688469296 -1.46401757936941 12.2620489025649 1.55544164364287 -1.46033225805902 12.0784585999608 1.56752665109685 -1.4463274574771 11.9745962160765 1.57593104887717 -1.43640172106746 11.8750928872913 1.58529487719724 -1.4251748313798 11.8452983948709 1.58832468439992 -1.42150208066628 11.8265809096452 1.59030279682563 -1.41909781301404 11.8043180412084 1.59269241380991 -1.41618054122364 11.7877235851982 1.59449365010627 -1.41397425382321 11.7753922597036 1.59583710752752 -1.41232221073241 11.7609747359659 1.59742040519323 -1.41037135508933 11.7448895439158 1.59917170511919 -1.40820760844032 11.7360589271649 1.60013550030746 -1.40701366467467 11.7279810431541 1.60101691469853 -1.40592225547907 11.6879791890818 1.60533464468433 -1.40054957968685 11.6675314916802 1.6074972055598 -1.39784683028508 11.6467164821864 1.60959413771122 -1.39521556909743 11.6168116552509 1.61264462252329 -1.39137019846653 11.59782558361 1.61447522340865 -1.38905331615527 11.5701474980193 1.61706632895907 -1.38576981734771 11.5536887722913 1.61864742509292 -1.38375916278693 11.5453364278214 1.61944215758067 -1.3827464367941 11.5380210330651 1.6201411438256 -1.3818514383236 11.5173028438985 1.62216599641362 -1.37925603162901 11.5059558947077 1.62331088856553 -1.37778473223831 11.4940513042487 1.62457606258802 -1.3761571297346 11.4310854543383 1.63195301640233 -1.36658814741296 11.3972655627071 1.63677236757878 -1.36025892428163 11.3654194549661 1.64208465945882 -1.3532208048712 11.3364585984696 1.64770369160567 -1.34570453119451 11.3214898793976 1.65115498888696 -1.3410459180422 11.3057257984163 1.65529957503836 -1.33541257273752 11.2900741726497 1.65989513283307 -1.329122714693 11.2819860982737 1.66256487295567 -1.32544049019301 11.274822965922 1.6653368975719 -1.32159590159368 11.2594973128833 1.67199772405696 -1.31228364617976 11.2508307887262 1.6768072576119 -1.30548627592333 11.243154316743 1.68198845915121 -1.29810493339306 11.2330199022536 1.69067340766125 -1.28556856767287 11.227823785328 1.69665448642256 -1.27680786604315 11.2233146680788 1.70357064691526 -1.26655421965809 11.2195102188226 1.72864961215316 -1.22820864056359 11.2187579579431 1.71744695743406 -1.24557151642983 11.2203168811737 1.710475396965 -1.25618412808846 11.2233176562604 1.73904489821927 -1.21174266791124 11.2210170661959 1.73444221415716 -1.21907662213952 11.2200330526066 1.73155065261827 -1.22364869856392 11.2283499283601 1.74732305688575 -1.19837574234842 11.2254784762726 1.74319668846012 -1.20506764748478 1.90484754 1 2.77555756156289e-017 1 0 5.55111512312578e-017 0 0.992462250491784 0 0.984924263257178 0 0.977386087530344 0 0.969848035505376 0 0.959797459685818 0 0.944721407279669 0 0.922107533907359 0 0.888186572632102 0 0.837305148394501 0 0.760983075360609 0 0.646499944155074 0 0.474775219247842 0 0.237387612143429 1.97302096 0 1.97524312 0.0334885 1.97433512987806 0.0187484800487512 1.97370448548503 0.00942816084727074 1.97906567 0.20832799 1.97868359901492 0.126212442556883 1.97741309366246 0.0794451729100739 1.97844344981302 0.257232385725159 1.977750135254 0.29122514316164 1.97674449 0.33168639 1.97653082949776 0.339635325801323 1.9764024177686 0.34434208340825 1.97626491246814 0.349337349659825 1.97593282858454 0.361287879319933 1.97563749152419 0.371850191956024 1.97520533 0.38726097 1.97470133489328 0.405366646537823 1.97443181923245 0.415207939731969 1.97418937676635 0.424193023169849 1.97350939656201 0.450443444208637 1.97315321391789 0.465195814822171 1.97282039 0.47997479 1.97233842438876 0.504059367036457 1.97206777597265 0.519699581210374 1.97171749 0.54175305 1.97166297888768 0.545286806735937 1.9716331924698 0.547216708231768 1.97160670068336 0.548932228154997 1.97156220309492 0.551810445215761 1.97154161030708 0.553139642486259 1.97152657 0.55410754 1.97086907898704 0.592567113762554 1.97048876076474 0.610668797531511 1.9700491 0.628149990000001 1.96790545112604 0.686151168747841 1.96608557332711 0.719222143906412 1.96382484 0.75114736 1.96304126640316 0.76075611638333 1.96252619967191 0.766805332176731 1.96189831621882 0.774008721238536 1.96142373948696 0.779382371604281 1.96106882114682 0.783377177229997 1.96065211 0.7880499 1.96018744852872 0.793262573408673 1.95993330187647 0.796124625741833 1.95970161035693 0.798742628519546 1.95857284484117 0.811701558430154 1.95801617100819 0.818318650502779 1.95747084 0.82504194 1.95673030491593 0.834694842191733 1.95629089686098 0.840807744630617 1.95567354 0.84970832 1.9553083434884 0.855005019931033 1.95512089677134 0.85769341633253 1.95495491240121 0.86004919638079 1.95446971766709 0.866730411569927 1.95418917090758 0.870397701589349 1.95387979 0.87425567 1.95189466912428 0.894834822409066 1.95048213687851 0.906075034735289 1.94884185 0.91682829 1.94700619966115 0.92678765857607 1.94583522305067 0.932064861206055 1.94439319 0.93775271 1.94275572460697 0.943534951342703 1.94178876120311 0.946604979766533 1.94080727 0.94944064 1.93826797942366 0.955704796926537 1.93642544162818 0.959600068076267 1.93442335 0.96340193 1.93099348473799 0.96910063895646 1.92860882545596 0.972590641589152 1.92581296 0.976356 1.915532 0.988580949999999 1.92016065814189 0.983337929426773 1.92302843592387 0.979880444581712 1.91118283 0.993162 1.91312662518433 0.991141022456955 1.91433066894701 0.989871699170403 1.90767762487209 0.996833346618624 1.90943626110579 0.994974448939811 15 48 14 14 52 1 1 65 66 1 12 13 14 1 13 10 11 1 1 11 12 81 89 80 79 90 78 80 91 79 78 93 77 32 15 16 71 1 70 69 70 1 1 68 69 67 68 1 72 1 71 77 96 76 76 96 75 1 74 75 74 1 73 1 72 73 66 67 1 16 3 23 1 8 9 1 7 8 5 6 1 7 1 6 93 78 94 9 10 1 4 1 2 4 5 1 1 75 96 96 77 97 77 93 97 86 88 85 82 85 88 84 82 83 82 84 85 88 86 87 90 95 78 91 90 79 89 92 80 91 80 92 81 88 89 95 94 78 82 88 81 20 19 3 16 31 32 34 15 33 33 15 32 19 18 3 34 35 15 39 40 15 38 39 15 37 15 36 36 15 35 15 37 38 41 15 40 24 25 16 23 22 16 26 16 25 24 16 21 22 21 16 30 16 29 16 30 31 28 16 27 16 28 29 27 16 26 3 18 23 57 1 56 1 57 58 1 54 55 1 55 56 58 59 1 1 64 65 64 1 63 60 61 1 59 60 1 1 62 63 61 62 1 46 47 15 15 45 46 44 45 15 43 44 15 47 48 15 1 53 54 53 1 52 50 51 14 52 14 51 50 14 49 48 49 14 15 42 43 42 15 41 3 17 20 -29 27 1 0.343521901895452 -17.2459916335156 1.67360538724199 -1.3040721061901 16.8907891564538 1.66246632758017 -1.3199829009968 16.6574934494772 1.65116945250819 -1.33568740284973 16.4125111176284 1.63640196705886 -1.3557196746019 16.2011523152597 1.62185670743699 -1.37494654850437 16.0633593876408 1.61153324571135 -1.38829927614356 15.9164082326414 1.59998586197956 -1.40297488495823 15.8469763130626 1.59437508169675 -1.41000750532606 15.8019951149686 1.59069914836431 -1.41458270121145 15.7556462799591 1.58687434340459 -1.41931422068519 15.6964139203827 1.58196905618953 -1.42534318391927 15.6612810884908 1.57903959522677 -1.42892071410101 15.6256429585636 1.57605589016733 -1.43254462666716 15.5397452374411 1.56884763155009 -1.44123247462957 15.473271680395 1.56327035395551 -1.44789345121854 15.3885361745655 1.55624636724467 -1.45620806184295 15.306105959492 1.54936436641319 -1.46426868250305 15.268269862375 1.54625850688206 -1.46787806261069 15.2409733425777 1.54412476865888 -1.47034875277143 15.0553527988629 1.52932996360414 -1.48727760914968 14.9599739474397 1.52215568017742 -1.49535741294384 14.8705157989187 1.51573582377946 -1.50252353347842 14.2745160980031 1.48462395626585 -1.53651034460532 14.5412076506903 1.49536760071763 -1.52487830931075 14.700719037346 1.50439581019103 -1.51503503647987 15.4035701016303 6.3336158858306 -0.843981276536958 17.2205222879309 6.33368591083392 -0.716459929370019 16.2112081300592 6.33361609632978 -0.789025082562419 16.7153074057598 6.33362440525886 -0.744629567009837 0.10836658 1 0.103455800729111 0.878601683213829 0.0982521433238413 0.798981529741936 0.09134473 0.71553265 0.084368659530589 0.643746575947816 0.0793885252674269 0.597059232976251 0.0737667969251898 0.547374694350679 0.0710171119668794 0.52394174472731 0.0692080766735167 0.508776495738302 0.06732328 0.49316312 0.0648887433027859 0.473230851159796 0.0634318509113031 0.461418574346159 0.0619449186344799 0.449444284630742 0.0583322380574679 0.42061520889476 0.0555189443069517 0.398334975276379 0.05192274 0.36997388 0.0484245612823333 0.342417308524584 0.0468227381122968 0.329783763907954 0.04567056 0.32068046 0.0379494998139669 0.258845434827464 0.0340983936224757 0.227144200165303 0.03059095 0.19744373 0.01152171 0 0.0189254378509215 0.0882980110083935 0.024293201926527 0.141132579471773 2.07179400988383 0 2.07179401 1 2.07179401 0.444444477662673 2.07179401 0.722222222621833 24 26 25 22 25 26 21 22 26 20 21 26 20 26 19 19 26 18 18 26 17 16 17 28 28 14 15 28 12 13 13 14 28 15 16 28 23 26 24 10 11 28 9 10 28 28 8 9 7 8 28 28 6 7 11 12 28 17 26 28 6 28 5 3 4 29 28 4 5 2 29 27 29 2 3 27 1 2 29 4 28 -14 12 1 0.491832010960765 -17.2459916335156 1.67360538724199 -1.3040721061901 17.2205222879309 6.33368591083392 -0.716459929370019 15.178436250937 6.33367198983326 -0.437746756651854 16.3204802357387 6.33369956825891 -0.537232878767512 15.7510666836442 6.33369196905639 -0.470107630845391 14.0214147184814 1.92383994562749 -0.832597821203398 15.4046094265513 1.88092055974603 -0.9381939196926 14.6607528960136 1.91159614027097 -0.86435123866858 15.0420292026598 1.89837313306859 -0.89715110812939 16.7625991892966 1.75436858685814 -1.18146817674002 16.1765899134382 1.82347364035735 -1.05856225745182 15.7951136914526 1.85579317663118 -0.993335758020724 17.0350076836168 1.71202949944338 -1.2481201972249 16.8999718861773 1.73398167120664 -1.21427146112902 1 0.09543064 1 1.82447971 0 1.82447971 0.555555522666088 1.82447971 0.277777772255733 1.82447971 0 0.17394647 0.42630538 0.16862434 0.196206836605745 0.175060958462688 0.313927871956255 0.172919813219483 0.84955315 0.12565764 0.666660002194579 0.150384988613236 0.547751696643457 0.161122210821031 0.934434368037772 0.109913057610335 0.892385485400386 0.118104251237743 5 7 4 9 7 5 3 6 8 8 5 3 5 8 9 7 12 4 13 1 2 14 13 2 4 11 2 11 4 12 10 2 11 2 10 14 -11 9 1 0.503705044220552 -15.178436250937 6.33367198983326 -0.437746756651854 14.0214147184814 1.92383994562749 -0.832597821203398 13.7551732833356 6.33367429383337 -0.507938351705776 14.5443322303167 6.33370038605638 -0.438512104782042 14.1489478227719 6.33369589393791 -0.463731551201274 11.7544104008045 1.87810315470511 -0.947904219070532 13.0936597392712 1.92471312491465 -0.831011182606773 12.4984939249392 1.91178626757936 -0.865711758215816 12.1264748436296 1.89764302507642 -0.901489445835785 13.6090928440845 1.92731456149223 -0.823468014497094 13.3513800842622 1.92698422073325 -0.824591088364988 0 0 0 2.49916951 1 5.87469061401301e-017 0.444444442267688 5.87469061401301e-017 0.722222206176791 5.87469061401301e-017 1 2.56863264 0.41424785 2.51425894 0.676611408880311 2.53328433836189 0.839023039740135 2.54920900708148 0.184836669097487 2.50370613534587 0.299777456415894 2.50831051724584 2 1 10 4 11 10 4 7 11 4 10 1 5 8 7 5 3 8 9 8 3 6 9 3 5 7 4 -44 42 1 0.356184912089085 -11.2339734254601 1.75393602555749 -1.1875290010296 11.2374721701397 1.75744672924547 -1.18170739401719 11.2397128243493 1.75958284549763 -1.17814309372062 11.241991866609 1.76167618021327 -1.17463542909946 11.3205173885153 1.80812062662728 -1.09235827710965 11.282497515071 1.79042449033645 -1.12476719576071 11.2614584884042 1.77721509519874 -1.14808555516162 11.3800477743783 1.8269038501845 -1.05634369821163 11.3517249297822 1.81900320975726 -1.07170700143696 11.3355893765422 1.81372331997687 -1.08179818216978 11.4067981820323 1.83344352140854 -1.04338194892659 11.422110330453 1.83681292144816 -1.03660090915193 11.4377184328134 1.83985132994319 -1.0304467840569 11.4548341856329 1.84301897680234 -1.02396532326718 11.4679208326056 1.84522537563198 -1.01941154995699 11.4889218416215 1.84866451038626 -1.01226962503403 11.52340267575 1.85388136264107 -1.00128923936046 11.5075790195456 1.85157090300864 -1.00617272612909 11.4980915290024 1.85013203174687 -1.00919775247045 11.540243037488 1.85616913294944 -0.996410035419285 11.5520301676041 1.85764174710785 -0.993258535161004 11.567654823367 1.85950792170499 -0.989247396559192 11.5825224317067 1.8612208585644 -0.985540024529965 11.5757666065409 1.86049537000134 -0.987113000393695 11.5716582419467 1.86001256377532 -0.988157529337878 11.6087807714995 1.86418755123253 -0.979072878586238 11.5970705547114 1.86293266310175 -0.981816119588881 11.5897426557683 1.86210640995082 -0.983616280235666 11.6399648907971 1.86755583570796 -0.971662113671306 11.6541275370485 1.86893617226193 -0.968587732885848 11.6720086193906 1.87055058284638 -0.964993759678242 11.7106499732683 1.87402286085446 -0.957189877704144 11.6978628252071 1.87285771818337 -0.959816867437028 11.6845587320126 1.87167014152274 -0.962486571141833 11.7148282055021 1.87441917939667 -0.956293752664951 11.7179957137033 1.8747203774982 -0.955610528418402 11.7218000636523 1.87507838103017 -0.95479830520242 11.7394411343865 1.87674949907579 -0.950990284186286 11.7474116721448 1.8774818451661 -0.94932248306639 11.7544104008045 1.87810315470511 -0.947904219070532 13.7551732833356 6.33367429383337 -0.507938351705776 13.6092627480286 6.33366414186155 -0.542618730393233 13.523757443342 6.33366598147823 -0.579216433281663 13.4648676895469 6.33366791783307 -0.649981567562466 1 11.59164008 0.989317412232611 11.5824376883958 0.982725436615189 11.5768263878913 0.976195632636491 11.5713201237537 0.79876482 11.44623253 0.876989973215987 11.4946126194421 0.925237736289643 11.530066853737 0.68476969 11.39282464 0.737752866589985 11.4158222830256 0.768950424269574 11.4306785242876 0.635848946625701 11.3734564700078 0.607834792512608 11.3633982747663 0.57922482 11.35399331 0.547468912482555 11.344425816734 0.523329455197387 11.3375380263006 0.48491685 11.32682113 0.422657966469266 11.3101236360822 0.451208391013271 11.3175927725389 0.46829786888873 11.3222341637045 0.392016810517089 11.3026701574382 0.370377793005853 11.2977804502245 0.34154549 11.29158637 0.31415251 11.28585527 0.326526319796521 11.2884396363434 0.334111106669424 11.2900255878527 0.26635512 11.27572027 0.287518715696528 11.280230501028 0.300861730818249 11.2830604635596 0.209834788916189 11.2640383762317 0.183852475327649 11.2591543755941 0.1418269 11.25176309 0.0796872526852901 11.2407395912722 0.101619775354772 11.2447457062967 0.12917444496091 11.2495746343973 0.0720840769782195 11.2393291801865 0.066326727664233 11.2382564272824 0.05942176 11.23696609 0.0273626775770691 11.2310182662012 0.0128250311866025 11.2283830759655 2.60208521396521e-018 11.22612399 0 0 0.444444418360722 0 0.722221788105504 0 1 0 39 40 44 44 38 39 44 37 38 37 44 31 35 34 32 34 35 36 32 34 33 36 37 34 37 31 34 31 44 30 44 29 30 27 44 28 44 27 26 26 29 44 23 28 44 23 44 24 44 21 22 44 20 21 24 44 25 25 44 22 41 42 40 18 17 44 43 40 42 44 19 18 44 16 19 44 40 43 16 44 15 17 20 44 15 44 14 13 14 44 12 13 44 44 11 12 8 11 44 10 9 44 5 10 44 8 44 9 7 6 44 4 7 44 2 3 44 1 2 44 4 44 3 5 44 6 -12 10 1 0.888110689380213 -20.2590217622519 16.2691035827409 0.211302165326314 19.8650301674403 16.2690983887088 0.285985354754952 19.6170866779439 16.2691173430476 0.322931822102796 19.3665796498631 16.2690975027406 0.333106715941719 15.178436250937 6.33367198983326 -0.437746756651854 17.5051825836737 11.8533528305843 -0.00949482743814051 16.3418094173054 9.09351241028592 -0.223620792046541 17.2205222879309 6.33368591083392 -0.716459929370019 16.3204802357387 6.33369956825891 -0.537232878767512 15.7510666836442 6.33369196905639 -0.470107630845391 18.9085775460104 11.8533623956218 -0.201036543432056 18.0645499169089 9.09352415367846 -0.458748236404062 5.54300000000369e-005 3.425e-005 0.444499874271849 3.425e-005 0.722277652974469 3.425e-005 1.00005543 3.425e-005 1.00005543 7.14491407 1.00005543 3.17553639126588 1.00005543 5.16022523123009 5.54299999999119e-005 7.14491407 0.444499873665125 7.14491407 0.722277653348409 7.14491407 5.543e-005 3.17553639058481 5.543e-005 5.16022522993844 11 1 2 6 12 11 8 12 9 7 9 12 11 2 6 3 4 6 7 12 6 10 7 5 10 9 7 6 2 3 -10 8 1 0.824574111715165 -15.4035701016303 6.3336158858306 -0.843981276536958 16.2112081300592 6.33361609632978 -0.789025082562419 16.7153074057598 6.33362440525886 -0.744629567009837 17.2205222879309 6.33368591083392 -0.716459929370019 19.4649687145364 16.2690729827395 0.155572182299282 20.2590217622519 16.2691035827409 0.211302165326314 19.8179548645828 16.2690701719765 0.179611696722426 20.0382192497354 16.2690717066067 0.199031380776679 18.9085775460104 11.8533623956218 -0.201036543432056 18.0645499169089 9.09352415367846 -0.458748236404062 1.00006281 3.88e-005 0.555618365404341 3.88e-005 0.277840589297946 3.88e-005 6.28099999999687e-005 3.88e-005 1.00006281 8.09360706 6.28100000000797e-005 8.09360706 0.555618368499071 8.09360706 0.277840590639537 8.09360706 6.281e-005 4.49646560710763 6.281e-005 2.24825220278838 4 3 10 9 10 1 6 9 8 2 10 3 5 9 1 8 9 7 7 9 5 10 2 1 -28 26 1 0.861665817365813 -13.4648676895469 6.33366791783307 -0.649981567562466 15.4035701016303 6.3336158858306 -0.843981276536958 13.4639365106997 6.33361893781667 -0.673369252265261 13.4729896817002 6.33359697801473 -0.695277444186304 13.4969086185137 6.33360524760734 -0.716579548656003 13.5425829989032 6.33363312994559 -0.735583849017036 13.6102856298869 6.3336251452398 -0.748722011987501 13.712881877997 6.33360215937222 -0.759572386927934 13.872435909273 6.33363221442692 -0.77973920581501 14.1099553090516 6.33364843656355 -0.801451178377316 14.4612579990034 6.33360098255577 -0.818217286410855 14.9326555011664 6.33360966883766 -0.840574978351562 18.6177078042936 16.2690957227405 0.240354853816242 16.3275566416901 11.8533500334977 -0.155350222347628 14.8962121671 9.09350897509132 -0.402665894952023 18.6299027142018 16.269089666535 0.227260498344197 18.6423905326818 16.2690849763005 0.216766026058852 18.6544605547071 16.2690816211184 0.208874061563196 18.6671320251054 16.2690790884247 0.202500498620152 18.6846261387898 16.2690767862081 0.196020562419276 18.7054292411016 16.2690752900111 0.190789389665035 18.7338287275574 16.2690748591043 0.186886135605315 18.7764386551318 16.269076312927 0.185478084221752 18.8404298778082 16.2690781326059 0.184022620004652 18.9360071259158 16.2690760507146 0.175904166074557 19.0791592696307 16.2690706505231 0.161951232912547 19.2720497498064 16.269070796701 0.156344287848845 19.4649687145364 16.2690729827395 0.155572182299282 1.00005799 3.574e-005 5.79899999998967e-005 3.574e-005 0.988315024381976 3.574e-005 0.976572063856532 3.574e-005 0.960914786034716 3.574e-005 0.937428869409664 3.574e-005 0.902199990677587 3.574e-005 0.849356668523189 3.574e-005 0.7700916861898 3.574e-005 0.651194216331677 3.574e-005 0.472848011153589 3.574e-005 0.236453001876137 3.574e-005 1.00005799 7.70509074925026 1.00005799 4.28062185908072 1.00005799 2.14032880069565 0.979719795830966 7.70509075 0.961415421483598 7.70509075 0.944941489173656 7.70509075 0.928467552325098 7.70509074999999 0.906775150196071 7.70509075 0.882064238505484 7.70509075 0.849128297604241 7.70509075 0.7997064845172 7.70509075 0.725573774434937 7.70509075 0.614374713485101 7.70509075 0.447576105115031 7.70509075 0.223817050064385 7.70509075 5.79900000000008e-005 7.70509075 2 14 28 2 12 15 11 10 15 22 23 14 15 10 9 11 15 12 23 24 14 28 14 27 27 14 26 25 14 24 14 25 26 21 22 14 8 15 9 15 7 6 15 6 5 3 15 4 15 3 1 4 15 5 15 14 2 19 20 14 18 19 14 14 13 16 16 17 14 14 17 18 21 14 20 8 7 15 -8 6 1 0.0623762133112777 -20.2590217622519 16.2691035827409 0.211302165326314 20.2590217622519 16.2691035827409 0.211302165326314 19.4649687145364 16.2690729827395 0.155572182299282 19.8179548645828 16.2690701719765 0.179611696722426 20.0382192497354 16.2690717066067 0.199031380776679 19.3665796498631 16.2690975027406 0.333106715941719 19.8650301674403 16.2690983887088 0.285985354754952 19.6170866779439 16.2691173430476 0.322931822102796 7.01562055 0 7.01562055 1 9.9050420844917e-022 1 3.118053398646 1 5.06684031122416 1 0 1.0773715253265e-011 3.89756289685725 0 1.94878391367125 0 6 8 3 4 3 8 8 7 4 7 1 5 2 5 1 7 5 4 -20 18 1 0.0762318416308065 -18.7445785303197 16.2690985127407 0.302431252674713 18.6177078042936 16.2690957227405 0.240354853816242 18.6802705443525 16.2690930103612 0.290479512461686 18.6456109863585 16.2690930185178 0.269857395778124 19.3665796498631 16.2690975027406 0.333106715941719 19.0202757082456 16.2691100248794 0.329364060800464 19.1933975102018 16.2691074864275 0.335385358398923 19.4649687145364 16.2690729827395 0.155572182299282 18.6299027142018 16.269089666535 0.227260498344197 18.6423905326818 16.2690849763005 0.216766026058852 18.6544605547071 16.2690816211184 0.208874061563196 18.6671320251054 16.2690790884247 0.202500498620152 18.6846261387898 16.2690767862081 0.196020562419276 18.7054292411016 16.2690752900111 0.190789389665035 18.7338287275574 16.2690748591043 0.186886135605315 18.7764386551318 16.269076312927 0.185478084221752 18.8404298778082 16.2690781326059 0.184022620004652 18.9360071259158 16.2690760507146 0.175904166074557 19.0791592696307 16.2690706505231 0.161951232912547 19.2720497498064 16.269070796701 0.156344287848845 1 0 2.77555756156289e-017 0 0.555554660792764 0 0.277778057864552 0 1 4.45537137 1 1.98016500068961 1 3.21777465995574 5.55111512312578e-017 4.45537137 0 0.0906159982349975 0 0.172166917775719 0 0.245563093572022 0 0.318962057436955 0 0.415611684710348 0 0.525706424990429 0 0.672447424582865 0 0.892640269046457 0 1.22292922343618 0 1.71836239428466 0 2.46151194819445 0 3.45844167756327 10 9 4 12 11 4 13 12 4 10 4 11 15 14 3 17 16 6 18 17 6 15 1 16 13 3 14 3 13 4 1 6 16 15 3 1 6 19 18 20 19 7 20 5 8 5 20 7 19 6 7 9 2 4 -12 10 1 0.591785717024134 -13.7551732833356 6.33367429383337 -0.507938351705776 13.4648676895469 6.33366791783307 -0.649981567562466 13.6092627480286 6.33366414186155 -0.542618730393233 13.523757443342 6.33366598147823 -0.579216433281663 18.7445785303197 16.2690985127407 0.302431252674713 16.5270650817836 11.8533544128313 -0.0577330159383438 15.1411191824979 9.09351435300515 -0.282835683823541 18.6802705443525 16.2690930103612 0.290479512461686 18.6456109863585 16.2690930185178 0.269857395778124 18.6177078042936 16.2690957227405 0.240354853816242 16.3275566416901 11.8533500334977 -0.155350222347628 14.8962121671 9.09350897509132 -0.402665894952023 1.00034374 0.00020743 0.000343739999999981 0.00020743 0.555899305287052 0.00020743 0.278121510159856 0.00020743 1.00034374 46.24578153 1.00034374 25.6921930438122 1.00034374 12.8462002380214 0.555899276640718 46.24578153 0.278121530471549 46.24578153 0.000343739999999995 46.24578153 0.00034374 25.6921930559041 0.00034374 12.8462002337375 2 4 12 11 12 6 10 11 9 8 9 11 3 12 4 3 1 7 7 6 12 8 6 5 8 11 6 12 3 7 -12 10 1 0.760952242780141 -15.178436250937 6.33367198983326 -0.437746756651854 13.7551732833356 6.33367429383337 -0.507938351705776 14.5443322303167 6.33370038605638 -0.438512104782042 14.1489478227719 6.33369589393791 -0.463731551201274 19.3665796498631 16.2690975027406 0.333106715941719 17.5051825836737 11.8533528305843 -0.00949482743814051 16.3418094173054 9.09351241028592 -0.223620792046541 18.7445785303197 16.2690985127407 0.302431252674713 19.0202757082456 16.2691100248794 0.329364060800464 19.1933975102018 16.2691074864275 0.335385358398923 16.5270650817836 11.8533544128313 -0.0577330159383438 15.1411191824979 9.09351435300515 -0.282835683823541 1.00008022 4.95e-005 8.02200000000752e-005 4.95e-005 0.555635777227203 4.95e-005 0.277858000962346 4.95e-005 1.00008022 10.70174454 1.00008022 5.94543563446982 1.00008022 2.97274256537468 8.0219999999992e-005 10.70174454 0.444524665429504 10.70174454 0.722302439473474 10.70174454 8.022e-005 5.94543563130618 8.022e-005 2.97274256454321 12 2 4 11 12 7 8 11 9 6 9 11 3 12 4 3 1 7 7 6 11 10 6 5 10 9 6 12 3 7 -34 32 1 0.107623659856209 -33.8393312472819 3.79883272998346e-010 1.20936400844171 32.949284715007 -9.00000027138652e-011 1.41444141318236 33.4453742299966 7.65294960903743e-011 1.30671950173525 33.1977592060613 -2.35819627113039e-011 1.3624746517746 32.9492818450068 -2.51270011936476e-007 0.385932318830801 32.949281636949 -0.0723859747720965 0.399530933967947 32.9492814655058 -0.142449920928198 0.42340905710103 32.949281336466 -0.207716338173984 0.456629212869447 32.9492812520345 -0.266178482020004 0.497541003405603 32.9492812108253 -0.31651530357438 0.544042244557282 32.9492812105121 -0.362494816899089 0.599886908849098 32.9492812576811 -0.40178979320139 0.664602951834885 32.9492813567519 -0.432102421706248 0.736978432667788 32.949281491386 -0.450058107631838 0.807055623065036 32.9492816479924 -0.457765634257626 0.872533311662978 32.9492818350163 -0.457071300035649 0.938684194805279 32.9492820478497 -0.448008746367459 1.00389935722537 32.9492822807364 -0.431010966617592 1.06664445241076 32.9492825272681 -0.406859839381012 1.12557586510147 32.9492827809181 -0.3765998336642 1.17962700327792 32.9492830355287 -0.341432829137614 1.2280547268893 32.9492833515667 -0.291713771367234 1.28078831370993 32.9492836702801 -0.235086619683427 1.32608171168288 32.949283935845 -0.182910025195474 1.35775370234894 32.9492842405047 -0.117131977435142 1.38689385173548 32.9492844955534 -0.0566532093327347 1.40471369228586 33.8393156872812 6.98962595001871e-011 0.672364923019744 33.3453673952328 -1.69945618497223e-007 0.511784116082679 33.5925097093462 -9.50772335968589e-008 0.591621808710825 33.8392977566475 -0.204359191850061 0.94086446581668 33.8392975579796 -0.179385374407658 0.825582301042679 33.8393041323705 -0.104463917266386 0.727145930103484 33.8393165171092 -0.104463917019766 1.15458300056345 33.8393042389757 -0.179385374274888 1.05614663036206 1.30349648 0 1.30349648 1 1.30349648 0.444444444444444 1.30349648 0.722222222222222 0 1 0.0879860117472334 1 0.167173422339729 1 0.238442092022798 1 0.302583894912977 1 0.360311517671391 1 0.418039140575604 1 0.475766763610128 1 0.533494386749875 1 0.58544924763906 1 0.63220862246773 1 0.678967997301754 1 0.725727372120068 1 0.772486746902202 1 0.819246121629127 1 0.866005496284103 1 0.912764870853523 1 0.972092065293539 1 1.03521722063896 1 1.09202986030131 1 1.16446260221246 1 1.23397954108952 1 9.70839405195408e-017 0 9.70839405195408e-017 0.555555555555556 9.70839405195408e-017 0.277777777777778 0.651748238245532 0 0.466244880058292 0 0.251497711188275 0 1.05199876592715 0 0.837251596810711 0 29 27 32 5 28 6 29 31 28 31 13 28 30 13 31 7 6 28 31 29 32 8 7 28 10 9 28 8 28 9 12 11 28 14 13 30 15 14 30 12 28 13 10 28 11 30 16 15 30 17 16 17 30 34 18 17 34 34 3 18 33 1 3 3 19 18 3 34 33 20 3 4 20 19 3 22 21 4 20 4 21 24 23 4 26 25 4 2 26 4 24 4 25 22 4 23 -44 42 1 0.105922057940576 -33.8393312472819 3.79883272998346e-010 1.20936400844171 33.4453742299966 7.65294960903743e-011 1.30671950173525 33.1977592060613 -2.35819627113039e-011 1.3624746517746 32.949284715007 -9.00000027138652e-011 1.41444141318236 33.8392977566475 0.204359191626203 0.94086446660868 33.8393001833268 0.198341074341278 0.998454886130732 33.8393042389757 0.179385374524446 1.05614663066089 33.8393098038141 0.147457903822274 1.10957626463709 33.8393165171092 0.104463917463902 1.15458300062059 33.8393238526587 0.0539063245387078 1.18822205072272 33.8393156872812 6.98962595001871e-011 0.672364923019744 33.8393095180284 0.0539063242533537 0.693506881444928 33.8393041323705 0.104463917217347 0.727145931821624 33.8393000271144 0.147457903627728 0.772152668133509 33.8392975579796 0.179385374391689 0.825582302301417 33.8392968443119 0.198341074275034 0.883274046947544 32.9492818450068 -2.51270011936476e-007 0.385932318830801 33.3453673952328 -1.69945618497223e-007 0.511784116082679 33.5925097093462 -9.50772335968589e-008 0.591621808710825 32.9492844622498 0.0648578034843168 1.40276019322203 32.9492841950919 0.127361842821889 1.38306634166443 32.9492839217962 0.185787190591095 1.35622009891945 32.9492836505446 0.238781276649565 1.32350548511105 32.9492833885957 0.28546658567954 1.28645378312565 32.9492831137876 0.329730268134689 1.24185312072483 32.9492828316718 0.369955979006697 1.18972552093879 32.9492825773593 0.40129089899697 1.13674434035753 32.9492823532966 0.424498342755848 1.08471341846466 32.9492821386964 0.442142873236093 1.02930545077855 32.9492819383134 0.453577893685952 0.971436497866518 32.9492817566145 0.458366005935615 0.912173941484262 32.949281597467 0.456319712789437 0.852674394726367 32.9492814638712 0.447519460318144 0.794109899407079 32.9492813577748 0.432305853534723 0.737592052707112 32.9492812799933 0.411247421367001 0.684104170065403 32.9492812302395 0.3850894689738 0.63444980772802 32.9492812072494 0.354692238382686 0.589222522086425 32.9492812089755 0.320967261132669 0.548797697285107 32.9492812419963 0.275402226040944 0.505171313291083 32.9492813097541 0.22393213033468 0.466798061747131 32.949281393256 0.176940001924048 0.439511462777807 32.9492814927281 0.13039910271226 0.418491493481063 32.9492816376445 0.0721246754267516 0.399462416249419 32.9492817399943 0.0352387730996903 0.391219318004573 0 0 0 0.444444444444444 0 0.722222222222222 0 1 0.651748359641201 0 0.562266216520123 0 0.466244967444793 0 0.362941956686923 0 0.251497759411408 0 0.130908804937503 0 1.30349672 0 1.17258791490658 0 1.05199896016699 0 0.940554762816851 0 0.837251752067256 0 0.741230502896388 0 1.30349672 1 1.30349672 0.555555555555556 1.30349672 0.277777777777778 0.0791874266049983 1 0.150456110206358 1 0.214597925236668 1 0.272325558632678 1 0.324280428606307 1 0.376235298518554 1 0.428190168382975 1 0.474949551229388 1 0.517032995771549 1 0.559116440299661 1 0.601199884817611 1 0.643283329328989 1 0.68536677383724 1 0.727450218345833 1 0.769533662858416 1 0.811617107378979 1 0.853700551912017 1 0.895783996462688 1 0.937867441036973 1 0.990587993959286 1 1.04740064425469 1 1.09853202960482 1 1.1496634150571 1 1.21581438562707 1 1.25965555274106 1 2 26 3 3 20 4 3 21 20 2 1 10 10 9 2 9 8 2 7 6 2 2 6 29 8 7 2 6 5 30 22 21 3 24 23 3 25 24 3 22 3 23 27 26 2 28 27 2 30 29 6 31 30 5 28 2 29 25 3 26 5 32 31 34 16 18 33 32 16 34 33 16 16 15 18 16 32 5 14 13 19 13 12 19 11 19 12 18 15 19 19 15 14 34 18 35 36 35 18 38 37 18 39 38 18 36 18 37 41 40 18 42 41 18 44 43 18 17 44 18 42 18 43 39 18 40 -13 11 1 0.0537059286378936 -33.8393156872812 6.98962595001871e-011 0.672364923019744 33.8393312472819 3.79883272998346e-010 1.20936400844171 33.8392977566475 -0.204359191850061 0.94086446581668 33.8393238526587 -0.0539063240014759 1.18822205072055 33.8393165171092 -0.104463917019766 1.15458300056345 33.8393098038141 -0.147457903476468 1.10957626442476 33.8393042389757 -0.179385374274888 1.05614663036206 33.8393001833268 -0.198341074178591 0.998454885734397 33.8392968443119 -0.198341074244835 0.883274045929723 33.8392975579796 -0.179385374407658 0.825582301042679 33.8393000271144 -0.147457903671087 0.772152666635343 33.8393041323705 -0.104463917266386 0.727145930103484 33.8393095180284 -0.0539063242866943 0.69350687954168 0.00014676 2.62709718 0.00014676 0.000146760000000024 0.99985324 1.31362197 0.263851570643256 0.103571280385875 0.511174686859194 0.268130444291005 0.721497346012561 0.488299275920663 0.87768360619277 0.749672165640972 0.970413165325946 1.03189489931904 0.970413165691212 1.5953490387829 0.877683606776187 1.87757177305044 0.72149734659937 2.13894466337607 0.511174687476309 2.35911349510005 0.263851571354874 2.52367265936146 1 2 4 4 9 13 4 13 1 12 13 10 4 5 7 8 4 7 4 8 9 12 10 11 13 9 10 8 3 9 5 6 7 -13 11 1 0.0572843171818542 -33.8393156872812 6.98962595001871e-011 0.672364923019744 33.8392977566475 0.204359191626203 0.94086446660868 33.8393095180284 0.0539063242533537 0.693506881444928 33.8393041323705 0.104463917217347 0.727145931821624 33.8393000271144 0.147457903627728 0.772152668133509 33.8392975579796 0.179385374391689 0.825582302301417 33.8392968443119 0.198341074275034 0.883274046947544 33.8393312472819 3.79883272998346e-010 1.20936400844171 33.8393001833268 0.198341074341278 0.998454886130732 33.8393042389757 0.179385374524446 1.05614663066089 33.8393098038141 0.147457903822274 1.10957626463709 33.8393165171092 0.104463917463902 1.15458300062059 33.8393238526587 0.0539063245387078 1.18822205072272 0.000146760000000024 0.000146759999999968 0.99985324 1.31362197 0.263851571352804 0.103571280669522 0.511174687447312 0.268130444847644 0.721497346527227 0.488299276552286 0.877683606669353 0.749672166699558 0.970413165602793 1.03189490076842 0.000146760000000024 2.62709718 0.970413165644987 1.59534903914953 0.877683606610059 1.87757177342621 0.721497346333694 2.13894466367848 0.511174687196543 2.35911349540201 0.263851570791156 2.52367265956562 13 1 3 7 13 3 1 13 8 12 13 10 6 3 4 7 3 6 7 9 13 12 10 11 13 9 10 7 2 9 6 4 5 -17 15 1 0.0886463017104726 -31.9768135388171 6.52772034505006 1.34215900474913 32.0213115109306 6.52591981196454 1.3601615736042 31.9777141338021 6.52713956390073 1.34796364316376 31.9801838030808 6.5267974488231 1.3513832533026 31.9853169721851 6.52653976915668 1.35395944627219 31.9935667292365 6.52630888437399 1.35626836623374 32.0062896455014 6.52612466153763 1.35811170086215 32.0138321046462 6.52604139231613 1.35894519719741 33.0949317119248 6.52779751805373 1.34157750972151 32.4987052702977 6.52272808810944 1.39214154656852 32.7970597574067 6.52497416733426 1.36974426905863 32.0208866309104 6.53046184918028 1.31476716144809 32.1988014065246 6.53304116548185 1.28901898561674 32.4384468709181 6.5337198707506 1.28227649389768 32.7675330815779 6.53170020137228 1.30251747341929 31.9890588095105 6.52897265450857 1.32964517227622 32.0043572560983 6.5298518644305 1.32086070908223 9.03616111 0.33998394 8.68474412 0.50630138 9.03151973080234 0.387533162698493 9.0131152270464 0.416421561578885 8.97280355698986 0.439663890948202 8.90718494690627 0.462144064852484 8.80520669358997 0.482864527740603 8.74463370631334 0.493042427678402 0.00024281000000001 0.84057317 4.84139019691145 0.981774826707296 2.42017701361166 0.934711392963648 8.66755946 0.13743969 7.21811284720031 0.00873161816517202 5.27844512739079 0.0622757526538095 2.62825136142552 0.375386534235768 8.93152172462077 0.243887162803693 8.80390313861735 0.179458181169857 10 15 14 14 13 10 12 2 13 9 15 11 10 11 15 2 10 13 12 8 2 7 17 16 16 1 5 3 5 1 8 17 7 16 5 6 6 7 16 5 3 4 17 8 12 - -TShapes 826 -Ve -0.000573568990437319 -28.764323322482 -1.33232061253183 0.776095392149801 -0 0 - -0101101 -* -Ve -0.00572885119877706 -28.771246413521 -1.32785526804699 0.800754676743324 -0 0 - -0101101 -* -Ed - 0.000573568990437319 1 1 0 -1 1 0 0 0.132495842436784 -2 1 1 0 0 0.132495842436784 -2 2 2 0 0 0.132495842436784 -6 1 1 0 -6 2 2 0 -0 - -0101000 -+826 0 -825 0 * -Ve -0.00572885869567544 -28.7814886770473 -1.32550508695811 0.807583974655179 -0 0 - -0101101 -* -Ed - 0.00572885119877706 1 1 0 -1 1 0 0.132495842436784 0.2 -2 3 1 0 0.132495842436784 0.2 -2 4 2 0 0.132495842436784 0.2 -6 3 1 0 -6 4 2 0 -0 - -0101000 -+825 0 -823 0 * -Ve -0.00572885869567544 -28.809786707555 -1.32057331451879 0.816323984307388 -0 0 - -0101101 -* -Ed - 0.00572885869567544 1 1 0 -1 2 0 0.625 0.75 -2 5 2 0 0.625 0.75 -2 6 1 0 0.625 0.75 -6 5 1 0 -6 6 2 0 -0 - -0101000 -+821 0 -823 0 * -Ve -0.000673785022620933 -28.8200576329791 -1.3189588914812 0.818374892280472 -0 0 - -0101101 -* -Ed - 0.000673785022620933 1 1 0 -1 3 0 0.301909390322789 0.339524884162641 -2 7 1 0 0.301909390322789 0.339524884162641 -2 8 2 0 0.301909390322789 0.339524884162641 -6 7 1 0 -6 8 2 0 -0 - -0101000 -+821 0 -819 0 * -Ve -0.000346509450286499 -28.8370977396886 -1.31653513753206 0.820227543550216 -0 0 - -0101101 -* -Ed - 0.000346509450286499 1 1 0 -1 4 0 0.375 0.5 -2 9 2 0 0.375 0.5 -2 10 1 0 0.375 0.5 -6 9 1 0 -6 10 2 0 -0 - -0101000 -+817 0 -819 0 * -Ve -0.00355541354656278 -28.8511763753573 -1.31448655943476 0.822002803405536 -0 0 - -0101101 -* -Ed - 0.000346504358099087 1 1 0 -1 5 0 0.4 0.6 -2 11 1 0 0.4 0.6 -2 12 2 0 0.4 0.6 -6 11 1 0 -6 12 2 0 -0 - -0101000 -+817 0 -815 0 * -Ve -0.00355541425614066 -28.8605162208009 -1.31320612987394 0.822703057182297 -0 0 - -0101101 -* -Ed - 0.00355541354656278 1 1 0 -1 6 0 0.125 0.25 -2 13 2 0 0.125 0.25 -2 14 1 0 0.125 0.25 -6 13 1 0 -6 14 2 0 -0 - -0101000 -+813 0 -815 0 * -Ve -0.00355541425614066 -28.8815857768016 -1.3100262339729 0.825953902237579 -0 0 - -0101101 -* -Ed - 0.00355541425614066 1 1 0 -1 7 0 0.8 1 -2 15 1 0 0.8 1 -2 16 2 0 0.8 1 -6 15 1 0 -6 16 2 0 -0 - -0101000 -+813 0 -811 0 * -Ve -0.000575025384893924 -29.1024809571707 -1.27829995923427 0.847101069546861 -0 0 - -0101101 -* -Ed - 5.96799346941318e-005 1 1 0 -1 8 0 0.950938201119073 1 -2 17 3 0 0.950938201119073 1 -2 18 1 0 0.950938201119073 1 -6 17 1 0 -6 18 3 0 -0 - -0101000 -+809 0 -811 0 * -Ve -0.000575025384893924 -29.7795234590196 -1.17556150430168 0.898660712825603 -0 0 - -0101101 -* -Ed - 0.000575025384893924 1 1 0 -1 8 0 0.8 0.950938201119073 -2 19 3 0 0.8 0.950938201119073 -2 20 1 0 0.8 0.950938201119073 -6 19 1 0 -6 20 3 0 -0 - -0101000 -+807 0 -809 0 * -Ve -0.000280849970502426 -30.1859472023218 -1.1125524406374 0.900485451578671 -0 0 - -0101101 -* -Ed - 0.000280849970502426 1 1 0 -1 9 0 0.30821290778553 0.4 -2 21 1 0 0.30821290778553 0.4 -2 22 3 0 0.30821290778553 0.4 -6 21 1 0 -6 22 3 0 -0 - -0101000 -+807 0 -805 0 * -Ve -0.0108556958753512 -30.232174242697 -1.10535644116363 0.898715988384917 -0 0 - -0101101 -* -Ed - 1.16534685833145e-005 1 1 0 -1 10 0 0.4 0.412299566132293 -2 23 1 0 0.4 0.412299566132293 -2 24 3 0 0.4 0.412299566132293 -6 23 1 0 -6 24 3 0 -0 - -0101000 -+805 0 -803 0 * -Ve -0.0108557001248812 -30.9823506165827 -0.978516058763017 0.823513645257798 -0 0 - -0101101 -* -Ed - 0.0108556958753512 1 1 0 -1 11 0 0.4 0.6 -2 25 3 0 0.4 0.6 -2 26 1 0 0.4 0.6 -6 25 1 0 -6 26 3 0 -0 - -0101000 -+801 0 -803 0 * -Ve -0.0108557001248812 -31.5238734767954 -0.859672023594499 0.747163193682461 -0 0 - -0101101 -* -Ed - 0.0108557001248812 1 1 0 -1 12 0 0.6 0.8 -2 27 1 0 0.6 0.8 -2 28 3 0 0.6 0.8 -6 27 1 0 -6 28 3 0 -0 - -0101000 -+801 0 -799 0 * -Ve -2.54443050818658e-005 -31.5669420071188 -0.848883086687299 0.741836439348443 -0 0 - -0101101 -* -Ed - 4.79318633838478e-006 1 1 0 -1 13 0 0.2 0.214883998084454 -2 29 3 0 0.2 0.214883998084454 -2 30 1 0 0.2 0.214883998084454 -6 29 1 0 -6 30 3 0 -0 - -0101000 -+797 0 -799 0 * -Ve -7.16334450356134e-005 -31.8489252871177 -0.773601860023678 0.713410577422495 -0 0 - -0101101 -* -Ed - 2.54443050818658e-005 1 1 0 -1 14 0 0 0.2 -2 31 3 0 0 0.2 -2 32 1 0 0 0.2 -6 31 1 0 -6 32 3 0 -0 - -0101000 -+795 0 -797 0 * -Ve -2.41354164104893e-006 -32.4183769697902 -0.614560682900065 0.818500392946681 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 15 0 1.00922414 1.18410863 -2 33 1 0 1.00922414 1.18410863 -2 34 4 0 1.00922414 1.18410863 -6 33 1 0 -6 34 4 0 -0 - -0101000 -+795 0 -793 0 * -Ve -2.41354164104893e-006 -32.4183772197902 -0.208516963644024 1.41444139018236 -0 0 - -0101101 -* -Ed - 2.41354164097025e-006 1 1 0 -1 16 0 0 0.25852715 -2 35 5 0 0 0.25852715 -2 36 1 0 0 0.25852715 -6 35 5 0 -0 - -0101000 -+791 0 -793 0 * -Ve -1e-007 -25.9893209044264 -1.2407928679345 1.41444127418235 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 17 0 0 1.18410863 -2 37 6 0 0 1.18410863 -2 38 1 0 0 1.18410863 -6 36 1 0 -6 37 6 0 -0 - -0101000 -+789 0 -791 0 * -Ve -1e-007 -25.9893210144265 -1.67578856559568 0.495540494136909 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 18 0 0.84752031 1 -2 39 1 0 0.84752031 1 -2 40 7 0 0.84752031 1 -6 38 1 0 -6 39 7 0 -0 - -0101000 -+789 0 -787 0 * -Ed - 1e-007 1 1 0 -1 19 0 0 0.41008236 -2 41 1 0 0 0.41008236 -2 42 4 0 0 0.41008236 -6 40 1 0 -6 41 4 0 -0 - -0101000 -+787 0 -826 0 * -Wi - -0101000 -+824 0 +822 0 -820 0 +818 0 -816 0 +814 0 -812 0 +810 0 -808 0 -806 0 -+804 0 +802 0 -800 0 +798 0 -796 0 -794 0 +792 0 -790 0 -788 0 +786 0 -+785 0 * -Fa -0 1.00000004749745e-010 1 0 -2 1 -0111000 -+784 0 * -Ve -1e-007 -25.9893210144265 1.67578665759559 0.495543775207065 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 20 0 0.15247929 0.84752031 -2 43 4 0 0.15247929 0.84752031 -2 44 7 0 0.15247929 0.84752031 -6 42 4 0 -6 43 7 0 -0 - -0101000 -+787 0 -782 0 * -Ve -0.00078269690770633 -28.7643514962333 1.33236617403399 0.776100355658662 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 21 0 0 0.41008734 -2 45 8 0 0 0.41008734 -2 46 4 0 0 0.41008734 -6 44 4 0 -6 45 8 0 -0 - -0101000 -+780 0 -782 0 * -Ve -0.000557288290538131 -28.8042061810958 1.33218910762353 0.734824782868964 -0 0 - -0101101 -* -Ed - 0.000485810828914709 1 1 0 -1 22 0 0 0.317890101713215 -2 47 4 0 0 0.317890101713215 -2 48 9 0 0 0.317890101713215 -6 46 4 0 -6 47 9 0 -0 - -0101000 -+780 0 -778 0 * -Ve -0.000557288290538131 -28.8475719209584 1.32884532155346 0.708805028085803 -0 0 - -0101101 -* -Ed - 0.000557288290538131 1 1 0 -1 22 0 0.317890101713215 0.5 -2 49 4 0 0.317890101713215 0.5 -2 50 9 0 0.317890101713215 0.5 -6 48 4 0 -6 49 9 0 -0 - -0101000 -+778 0 -776 0 * -Ve -2.52112976098701e-005 -28.8635999007014 1.32726816033196 0.701453946616088 -0 0 - -0101101 -* -Ed - 2.52112976098701e-005 1 1 0 -1 23 0 0.5 0.559785527676533 -2 51 9 0 0.5 0.559785527676533 -2 52 4 0 0.5 0.559785527676533 -6 50 4 0 -6 51 9 0 -0 - -0101000 -+774 0 -776 0 * -Ve -2.50882075695827e-005 -28.8725335952688 1.32630037163785 0.698270444283315 -0 0 - -0101101 -* -Ed - 2.50882075695827e-005 1 1 0 -1 24 0 0.25 0.5 -2 53 9 0 0.25 0.5 -2 54 4 0 0.25 0.5 -6 52 4 0 -6 53 9 0 -0 - -0101000 -+772 0 -774 0 * -Ve -0.000310858529441591 -28.8816743505559 1.32524719569586 0.695787439970753 -0 0 - -0101101 -* -Ed - 1.33352690463454e-005 1 1 0 -1 25 0 0 0.25 -2 55 9 0 0 0.25 -2 56 4 0 0 0.25 -6 54 4 0 -6 55 9 0 -0 - -0101000 -+770 0 -772 0 * -Ve -0.000310858529441591 -29.3247602152849 1.2637721186497 0.616147712196046 -0 0 - -0101101 -* -Ed - 0.000310858529441591 1 1 0 -1 26 0 0.8 1 -2 57 10 0 0.8 1 -2 58 4 0 0.8 1 -6 56 4 0 -6 57 10 0 -0 - -0101000 -+768 0 -770 0 * -Ve -0.00030359846857054 -29.6596005386966 1.20962973326461 0.587203699858479 -0 0 - -0101101 -* -Ed - 0.00030359846857054 1 1 0 -1 27 0 0.664667925968128 0.8 -2 59 10 0 0.664667925968128 0.8 -2 60 4 0 0.664667925968128 0.8 -6 58 4 0 -6 59 10 0 -0 - -0101000 -+766 0 -768 0 * -Ve -0.000543660545171738 -29.8455269996093 1.17804865362135 0.580310109048595 -0 0 - -0101101 -* -Ed - 0.000113457989473861 1 1 0 -1 27 0 0.6 0.664667925968128 -2 61 10 0 0.6 0.664667925968128 -2 62 4 0 0.6 0.664667925968128 -6 60 4 0 -6 61 10 0 -0 - -0101000 -+764 0 -766 0 * -Ve -0.000549145049207165 -30.6739009489152 1.02775890829929 0.600825162057539 -0 0 - -0101101 -* -Ed - 0.000543660545171738 1 1 0 -1 28 0 0.550748293513788 0.747780415043284 -2 63 4 0 0.550748293513788 0.747780415043284 -2 64 10 0 0.550748293513788 0.747780415043284 -6 62 4 0 -6 63 10 0 -0 - -0101000 -+764 0 -762 0 * -Ve -0.000549145049207165 -31.4235408023773 0.87387724296965 0.664016100385336 -0 0 - -0101101 -* -Ed - 0.000549145049207165 1 1 0 -1 28 0 0.747780415043284 0.909162471422618 -2 65 4 0 0.747780415043284 0.909162471422618 -2 66 10 0 0.747780415043284 0.909162471422618 -6 64 4 0 -6 65 10 0 -0 - -0101000 -+762 0 -760 0 * -Ve -0.000295252964663728 -31.8489294108679 0.773620907424083 0.713412657138219 -0 0 - -0101101 -* -Ed - 2.52013602035976e-005 1 1 0 -1 29 0 0 0.2 -2 67 10 0 0 0.2 -2 68 4 0 0 0.2 -6 66 4 0 -6 67 10 0 -0 - -0101000 -+758 0 -760 0 * -Ve -9.30047077468168e-007 -32.4183769697902 0.614559651360016 0.818501410646729 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 30 0 1.00922544 1.18410863 -2 69 8 0 1.00922544 1.18410863 -2 70 4 0 1.00922544 1.18410863 -6 68 4 0 -6 69 8 0 -0 - -0101000 -+756 0 -758 0 * -Ve -9.30047077468168e-007 -32.4183769697902 -8.97180042613466e-007 0.221258007919191 -0 0 - -0101101 -* -Ed - 9.30047077444848e-007 1 1 0 -1 31 0 0.5 0.74147334 -2 71 4 0 0.5 0.74147334 -2 72 11 0 0.5 0.74147334 -6 70 11 0 -0 - -0101000 -+756 0 -754 0 * -Ed - 9.30047077054535e-007 1 1 0 -1 32 0 0.25852715 0.5 -2 73 5 0 0.25852715 0.5 -2 74 4 0 0.25852715 0.5 -6 71 5 0 -0 - -0101000 -+793 0 -754 0 * -Ve -7.1676953994016e-005 -31.4590683246425 -0.865913067350121 0.667814429589193 -0 0 - -0101101 -* -Ed - 7.16334450356134e-005 1 1 0 -1 33 0 0.8 1 -2 75 12 0 0.8 1 -2 76 4 0 0.8 1 -6 72 4 0 -6 73 12 0 -0 - -0101000 -+751 0 -795 0 * -Ve -0.000203118230450804 -30.9709464533427 -0.969355678355452 0.622014505277359 -0 0 - -0101101 -* -Ed - 7.1676953994016e-005 1 1 0 -1 34 0 0.668616376685245 0.8 -2 77 12 0 0.668616376685245 0.8 -2 78 4 0 0.668616376685245 0.8 -6 74 4 0 -6 75 12 0 -0 - -0101000 -+749 0 -751 0 * -Ve -0.000372660996934856 -30.6873283611547 -1.02511979891527 0.601757898703286 -0 0 - -0101101 -* -Ed - 0.000203118230450804 1 1 0 -1 35 0 0.5 0.553192694020208 -2 79 4 0 0.5 0.553192694020208 -2 80 12 0 0.5 0.553192694020208 -6 76 4 0 -6 77 12 0 -0 - -0101000 -+749 0 -747 0 * -Ve -0.000587211675335753 -29.851942304157 -1.17686893778625 0.580243846620144 -0 0 - -0101101 -* -Ed - 0.000372660996934856 1 1 0 -1 35 0 0.553192694020208 0.738235102006945 -2 81 4 0 0.553192694020208 0.738235102006945 -2 82 12 0 0.553192694020208 0.738235102006945 -6 78 4 0 -6 79 12 0 -0 - -0101000 -+747 0 -745 0 * -Ve -0.000587211675335753 -29.3706442966486 -1.25655401065864 0.610813509197056 -0 0 - -0101101 -* -Ed - 0.000587211675335753 1 1 0 -1 36 0 0.2 0.4 -2 83 12 0 0.2 0.4 -2 84 4 0 0.2 0.4 -6 80 4 0 -6 81 12 0 -0 - -0101000 -+743 0 -745 0 * -Ve -0.00046636636213224 -28.8816427105544 -1.32519472919337 0.695781195470957 -0 0 - -0101101 -* -Ed - 0.00046636636213224 1 1 0 -1 37 0 0 0.2 -2 85 12 0 0 0.2 -2 86 4 0 0 0.2 -6 82 4 0 -6 83 12 0 -0 - -0101000 -+741 0 -743 0 * -Ve -0.000267837885381065 -28.8725550718222 -1.32623952939231 0.698291248279232 -0 0 - -0101101 -* -Ed - 0.000138881721459616 1 1 0 -1 38 0 0.75 1 -2 87 13 0 0.75 1 -2 88 4 0 0.75 1 -6 84 4 0 -6 85 13 0 -0 - -0101000 -+739 0 -741 0 * -Ve -0.000570159245050719 -28.8636687934679 -1.32720004158036 0.701494707818767 -0 0 - -0101101 -* -Ed - 0.000267837885381065 1 1 0 -1 39 0 0.5 0.75 -2 89 13 0 0.5 0.75 -2 90 4 0 0.5 0.75 -6 86 4 0 -6 87 13 0 -0 - -0101000 -+737 0 -739 0 * -Ve -0.000570159245050719 -28.8043612183713 -1.33211868056499 0.73480034425291 -0 0 - -0101101 -* -Ed - 0.000570159245050719 1 1 0 -1 40 0 0.0901996913858489 0.300346391715297 -2 91 4 0 0.0901996913858489 0.300346391715297 -2 92 13 0 0.0901996913858489 0.300346391715297 -6 88 4 0 -6 89 13 0 -0 - -0101000 -+737 0 -735 0 * -Ve -0.000214422594304552 -28.7690552946818 -1.332935724945 0.766952029562387 -0 0 - -0101101 -* -Ed - 0.000214422594304552 1 1 0 -1 41 0 0.0599516605892503 0.25 -2 93 13 0 0.0599516605892503 0.25 -2 94 4 0 0.0599516605892503 0.25 -6 90 4 0 -6 91 13 0 -0 - -0101000 -+733 0 -735 0 * -Ed - 1.34602676431166e-005 1 1 0 -1 41 0 0 0.0599516605892503 -2 95 13 0 0 0.0599516605892503 -2 96 4 0 0 0.0599516605892503 -6 92 4 0 -6 93 13 0 -0 - -0101000 -+826 0 -733 0 * -Wi - -0101000 --785 0 +781 0 -779 0 +777 0 +775 0 -773 0 -771 0 -769 0 -767 0 -765 0 --763 0 +761 0 +759 0 -757 0 -755 0 +753 0 -752 0 -792 0 -750 0 -748 0 -+746 0 +744 0 -742 0 -740 0 -738 0 -736 0 +734 0 -732 0 -731 0 * -Fa -0 1.00000004749745e-010 4 0 -2 4 -0101000 -+730 0 * -Ve -1e-007 -25.9893209044264 1.24079115393441 1.41444155318237 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 42 0 0 0.15247929 -2 97 8 0 0 0.15247929 -2 98 7 0 0 0.15247929 -6 94 8 0 -6 95 7 0 -0 - -0101000 -+782 0 -728 0 * -Ve -1e-007 -32.4183773097902 0.208515993143978 1.41444143718236 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 43 0 0 1.18410863 -2 99 8 0 0 1.18410863 -2 100 14 0 0 1.18410863 -6 96 8 0 -6 97 14 0 -0 - -0101000 -+728 0 -726 0 * -Ed - 1e-007 1 1 0 -1 44 0 0.74147334 1 -2 101 11 0 0.74147334 1 -2 102 8 0 0.74147334 1 -6 98 11 0 -0 - -0101000 -+756 0 -726 0 * -Ve -0.00047812981544787 -31.566908625913 0.848924345841429 0.741817258750537 -0 0 - -0101101 -* -Ed - 0.000295252964663728 1 1 0 -1 45 0 0 0.0918409922080835 -2 103 8 0 0 0.0918409922080835 -2 104 15 0 0 0.0918409922080835 -6 99 8 0 -6 100 15 0 -0 - -0101000 -+758 0 -723 0 * -Ve -0.00047812981544787 -31.0591047654668 0.963540691337818 0.812517560127936 -0 0 - -0101101 -* -Ed - 0.00047812981544787 1 1 0 -1 46 0 0.624657200339206 0.8 -2 105 15 0 0.624657200339206 0.8 -2 106 8 0 0.624657200339206 0.8 -6 101 8 0 -6 102 15 0 -0 - -0101000 -+721 0 -723 0 * -Ve -0.000532548037574597 -30.9858099377714 0.977906652997218 0.823001564625002 -0 0 - -0101101 -* -Ed - 8.64474463953074e-005 1 1 0 -1 46 0 0.6 0.624657200339206 -2 107 15 0 0.6 0.624657200339206 -2 108 8 0 0.6 0.624657200339206 -6 103 8 0 -6 104 15 0 -0 - -0101000 -+719 0 -721 0 * -Ve -0.000532548037574597 -30.292182671942 1.09603537854599 0.895836056217416 -0 0 - -0101101 -* -Ed - 0.000532548037574597 1 1 0 -1 47 0 0.413275132100674 0.6 -2 109 15 0 0.413275132100674 0.6 -2 110 8 0 0.413275132100674 0.6 -6 105 8 0 -6 106 15 0 -0 - -0101000 -+717 0 -719 0 * -Ve -0.000168928092025017 -30.2321643814253 1.10541543653031 0.898725539057365 -0 0 - -0101101 -* -Ed - 2.13941574955878e-005 1 1 0 -1 48 0 0.4 0.411315319709357 -2 111 8 0 0.4 0.411315319709357 -2 112 15 0 0.4 0.411315319709357 -6 107 8 0 -6 108 15 0 -0 - -0101000 -+717 0 -715 0 * -Ve -0.000576789278795162 -29.7795341835413 1.17563261596748 0.898584238481708 -0 0 - -0101101 -* -Ed - 0.000168928092025017 1 1 0 -1 48 0 0.411315319709357 0.505596080964352 -2 113 8 0 0.411315319709357 0.505596080964352 -2 114 15 0 0.411315319709357 0.505596080964352 -6 109 8 0 -6 110 15 0 -0 - -0101000 -+715 0 -713 0 * -Ve -0.000576789278795162 -29.1372732207767 1.27324971270094 0.850442714275949 -0 0 - -0101101 -* -Ed - 0.000576789278795162 1 1 0 -1 49 0 0.0568724255241282 0.2 -2 115 15 0 0.0568724255241282 0.2 -2 116 8 0 0.0568724255241282 0.2 -6 111 8 0 -6 112 15 0 -0 - -0101000 -+711 0 -713 0 * -Ve -4.62193081652849e-005 -28.9242454674154 1.3040453060426 0.829974356619852 -0 0 - -0101101 -* -Ed - 4.62193081652849e-005 1 1 0 -1 49 0 0.00938904044701609 0.0568724255241282 -2 117 15 0 0.00938904044701609 0.0568724255241282 -2 118 8 0 0.00938904044701609 0.0568724255241282 -6 113 8 0 -6 114 15 0 -0 - -0101000 -+709 0 -711 0 * -Ve -0.00675683423442464 -28.8816130593029 1.31007156310006 0.825958547744424 -0 0 - -0101101 -* -Ed - 1.11798023171323e-005 1 1 0 -1 50 0 0.8 1 -2 119 8 0 0.8 1 -2 120 15 0 0.8 1 -6 115 8 0 -6 116 15 0 -0 - -0101000 -+709 0 -707 0 * -Ve -0.00675683423442464 -28.8623359158873 1.31301195536472 0.822802590013024 -0 0 - -0101101 -* -Ed - 0.00675683423442464 1 1 0 -1 51 0 0.875 1 -2 121 16 0 0.875 1 -2 122 8 0 0.875 1 -6 117 8 0 -6 118 16 0 -0 - -0101000 -+705 0 -707 0 * -Ve -0.00675682563658273 -28.8499934198436 1.31471501874615 0.821812036463894 -0 0 - -0101101 -* -Ed - 0.00675682563658273 1 1 0 -1 52 0 0.25 0.323304246662853 -2 123 8 0 0.25 0.323304246662853 -2 124 16 0 0.25 0.323304246662853 -6 119 8 0 -6 120 16 0 -0 - -0101000 -+705 0 -703 0 * -Ve -0.00676763946071311 -28.836792424772 1.31659601257406 0.820380770538668 -0 0 - -0101101 -* -Ed - 0.000638531039111068 1 1 0 -1 53 0 0.625 0.75 -2 125 16 0 0.625 0.75 -2 126 8 0 0.625 0.75 -6 121 8 0 -6 122 16 0 -0 - -0101000 -+701 0 -703 0 * -Ve -0.00676763946071311 -28.8192381238403 1.31915032565627 0.818128210046003 -0 0 - -0101101 -* -Ed - 0.00676763946071311 1 1 0 -1 54 0 0.5 0.625 -2 127 16 0 0.5 0.625 -2 128 8 0 0.5 0.625 -6 123 8 0 -6 124 16 0 -0 - -0101000 -+699 0 -701 0 * -Ve -0.00676763755754844 -28.8097933533917 1.3206519092276 0.816139042279523 -0 0 - -0101101 -* -Ed - 0.00676763755754844 1 1 0 -1 55 0 0.5 0.75 -2 129 8 0 0.5 0.75 -2 130 16 0 0.5 0.75 -6 125 8 0 -6 126 16 0 -0 - -0101000 -+699 0 -697 0 * -Ve -0.00197261574848222 -28.7799729704748 1.32585040949468 0.806905170779541 -0 0 - -0101101 -* -Ed - 0.00197261574848222 1 1 0 -1 56 0 0.25 0.375 -2 131 16 0 0.25 0.375 -2 132 8 0 0.25 0.375 -6 127 8 0 -6 128 16 0 -0 - -0101000 -+695 0 -697 0 * -Ve -0.000833228963806015 -28.7718042186219 1.32778267744969 0.80108843131585 -0 0 - -0101101 -* -Ed - 0.000833228963806015 1 1 0 -1 57 0 0.125 0.25 -2 133 16 0 0.125 0.25 -2 134 8 0 0.125 0.25 -6 129 8 0 -6 130 16 0 -0 - -0101000 -+693 0 -695 0 * -Ed - 0.00078269690770633 1 1 0 -1 58 0 0 0.125 -2 135 16 0 0 0.125 -2 136 8 0 0 0.125 -6 131 8 0 -6 132 16 0 -0 - -0101000 -+780 0 -693 0 * -Wi - -0101000 -+779 0 +727 0 +725 0 -724 0 +755 0 +722 0 -720 0 -718 0 -716 0 +714 0 -+712 0 -710 0 -708 0 +706 0 -704 0 +702 0 -700 0 -698 0 +696 0 -694 0 --692 0 -691 0 * -Fa -0 1.00000004749745e-010 8 0 -2 8 -0101000 -+690 0 * -Ve -0.000406322736235147 -31.5453892345755 -2.84358518024543e-010 1.57010472795097 -0 0 - -0101101 -* -Ve -0.000493639131465062 -30.9280263125 -0.0873089211861623 1.60695769477569 -0 0 - -0101101 -* -Ed - 0.000234850809489711 1 1 0 -1 59 0 0 0.106752595681131 -2 137 6 0 0 0.106752595681131 -2 138 17 0 0 0.106752595681131 -6 133 6 0 -6 134 17 0 -0 - -0101000 -+688 0 -687 0 * -Ve -0.000493639131465062 -30.0394633975859 -0.200907417501252 1.65446187752303 -0 0 - -0101101 -* -Ed - 0.000493639131465062 1 1 0 -1 59 0 0.106752595681131 0.226515723937158 -2 139 6 0 0.106752595681131 0.226515723937158 -2 140 17 0 0.106752595681131 0.226515723937158 -6 135 6 0 -6 136 17 0 -0 - -0101000 -+687 0 -685 0 * -Ve -0.000218973494925436 -29.5198370703048 -0.250491600836839 1.68203176886297 -0 0 - -0101101 -* -Ed - 0.000218973494925436 1 1 0 -1 60 0 0.625 0.75 -2 141 17 0 0.625 0.75 -2 142 6 0 0.625 0.75 -6 137 6 0 -6 138 17 0 -0 - -0101000 -+683 0 -685 0 * -Ve -0.000147829458379564 -29.2028253447147 -0.271838291522898 1.6995424104655 -0 0 - -0101101 -* -Ed - 0.000147829458379564 1 1 0 -1 61 0 0.530339034103805 0.625 -2 143 17 0 0.530339034103805 0.625 -2 144 6 0 0.530339034103805 0.625 -6 139 6 0 -6 140 17 0 -0 - -0101000 -+681 0 -683 0 * -Ve -0.0007348089232453 -29.1292698538506 -0.275729591350411 1.7037141474904 -0 0 - -0101101 -* -Ed - 2.06300213821169e-006 1 1 0 -1 61 0 0.5 0.530339034103805 -2 145 17 0 0.5 0.530339034103805 -2 146 6 0 0.5 0.530339034103805 -6 141 6 0 -6 142 17 0 -0 - -0101000 -+679 0 -681 0 * -Ve -0.000779181429392282 -27.9580998698248 -0.287213545516178 1.7762104150262 -0 0 - -0101101 -* -Ed - 0.0007348089232453 1 1 0 -1 62 0 0.344046308627282 0.493365173226304 -2 147 6 0 0.344046308627282 0.493365173226304 -2 148 17 0 0.344046308627282 0.493365173226304 -6 143 6 0 -6 144 17 0 -0 - -0101000 -+679 0 -677 0 * -Ve -0.000779181429392282 -27.1183300885413 -0.234506035890649 1.83552196484067 -0 0 - -0101101 -* -Ed - 0.000779181429392282 1 1 0 -1 62 0 0.493365173226304 0.602475089373382 -2 149 6 0 0.493365173226304 0.602475089373382 -2 150 17 0 0.493365173226304 0.602475089373382 -6 145 6 0 -6 146 17 0 -0 - -0101000 -+677 0 -675 0 * -Ve -0.00036176301951472 -26.7177243957574 -0.184290307132866 1.86592274115955 -0 0 - -0101101 -* -Ed - 0.00036176301951472 1 1 0 -1 63 0 0.146801354201132 0.25 -2 151 17 0 0.146801354201132 0.25 -2 152 6 0 0.146801354201132 0.25 -6 147 6 0 -6 148 17 0 -0 - -0101000 -+673 0 -675 0 * -Ve -6.16484513862197e-006 -26.6072787699614 -0.166388614178154 1.87446002380946 -0 0 - -0101101 -* -Ed - 6.16484513862197e-006 1 1 0 -1 63 0 0.125 0.146801354201132 -2 153 17 0 0.125 0.146801354201132 -2 154 6 0 0.125 0.146801354201132 -6 149 6 0 -6 150 17 0 -0 - -0101000 -+671 0 -673 0 * -Ve -0.000235623710880232 -26.4173907547587 -0.130843791807996 1.88911937635335 -0 0 - -0101101 -* -Ed - 6.1399234104887e-006 1 1 0 -1 64 0 0 0.125 -2 155 17 0 0 0.125 -2 156 6 0 0 0.125 -6 151 6 0 -6 152 17 0 -0 - -0101000 -+669 0 -671 0 * -Ve -0.000338638483403141 -26.3568970264124 -0.114423615185575 1.89398475508142 -0 0 - -0101101 -* -Ed - 0.000235623710880232 1 1 0 -1 65 0 0 0.11097547291231 -2 157 6 0 0 0.11097547291231 -2 158 18 0 0 0.11097547291231 -6 153 6 0 -6 154 18 0 -0 - -0101000 -+669 0 -667 0 * -Ve -0.000360836450683039 -26.2933957876783 -0.0947700580217579 1.89906779612862 -0 0 - -0101101 -* -Ed - 0.000338638483403141 1 1 0 -1 65 0 0.11097547291231 0.25981235625939 -2 159 6 0 0.11097547291231 0.25981235625939 -2 160 18 0 0.11097547291231 0.25981235625939 -6 155 6 0 -6 156 18 0 -0 - -0101000 -+667 0 -665 0 * -Ve -0.000360836450683039 -26.225945537031 -0.0676881079965739 1.90448562176552 -0 0 - -0101101 -* -Ed - 0.000360836450683039 1 1 0 -1 66 0 0.5 0.66666667 -2 161 18 0 0.5 0.66666667 -2 162 6 0 0.5 0.66666667 -6 157 6 0 -6 158 18 0 -0 - -0101000 -+663 0 -665 0 * -Ve -0.000620680879286653 -26.2028398511069 -0.0548219693764112 1.90636315498107 -0 0 - -0101101 -* -Ed - 9.24987301557052e-005 1 1 0 -1 65 0 0.483275274148006 0.590805291191008 -2 163 6 0 0.483275274148006 0.590805291191008 -2 164 18 0 0.483275274148006 0.590805291191008 -6 159 6 0 -6 160 18 0 -0 - -0101000 -+663 0 -661 0 * -Ve -0.000620680879286653 -26.1715862117354 -0.0280173105944252 1.90892945299891 -0 0 - -0101101 -* -Ed - 0.000620680879286653 1 1 0 -1 67 0 0.16666667 0.33333333 -2 165 18 0 0.16666667 0.33333333 -2 166 6 0 0.16666667 0.33333333 -6 161 6 0 -6 162 18 0 -0 - -0101000 -+659 0 -661 0 * -Ve -0.000579984833656586 -26.1604470425545 1.29120852074267e-009 1.90984293371267 -0 0 - -0101101 -* -Ed - 0.000579984833656586 1 1 0 -1 68 0 0 0.16666667 -2 167 18 0 0 0.16666667 -2 168 6 0 0 0.16666667 -6 163 6 0 -6 164 18 0 -0 - -0101000 -+657 0 -659 0 * -Ve -1e-007 -25.9893209344264 3.4350001633999e-008 1.92052189721989 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 69 0 0 0.08150659 -2 169 6 0 0 0.08150659 -2 170 14 0 0 0.08150659 -6 165 6 0 -6 166 14 0 -0 - -0101000 -+657 0 -655 0 * -Ed - 1e-007 1 1 0 -1 70 0 0.49999967 1 -2 171 6 0 0.49999967 1 -2 172 19 0 0.49999967 1 -6 167 6 0 -6 168 19 0 -0 - -0101000 -+655 0 -789 0 * -Ve -1e-007 -32.4183771497902 -9.50500045162309e-008 1.51294273986092 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 71 0 0 0.50000087 -2 173 20 0 0 0.50000087 -2 174 6 0 0 0.50000087 -6 169 20 0 -0 - -0101000 -+652 0 -791 0 * -Ed - 1e-007 1 1 0 -1 72 0 2.57033879 2.97015674 -2 175 6 0 2.57033879 2.97015674 -2 176 14 0 2.57033879 2.97015674 -6 170 6 0 -6 171 14 0 -0 - -0101000 -+652 0 -688 0 * -Wi - -0101000 -+686 0 +684 0 -682 0 -680 0 -678 0 +676 0 +674 0 -672 0 -670 0 -668 0 -+666 0 +664 0 -662 0 +660 0 -658 0 -656 0 +654 0 +653 0 +788 0 -651 0 -+650 0 * -Fa -0 1.00000004749745e-010 6 0 -2 6 -0101000 -+649 0 * -Ed - 1e-007 1 1 0 -1 73 0 0.50000087 1 -2 177 14 0 0.50000087 1 -2 178 20 0 0.50000087 1 -6 172 20 0 -0 - -0101000 -+652 0 -726 0 * -Ed - 1e-007 1 1 0 -1 74 0 0 0.49999967 -2 179 19 0 0 0.49999967 -2 180 14 0 0 0.49999967 -6 173 14 0 -6 174 19 0 -0 - -0101000 -+655 0 -728 0 * -Ve -0.000639223826761284 -26.1715471689517 0.0279738538942231 1.9089325016117 -0 0 - -0101101 -* -Ed - 0.000563886030302768 1 1 0 -1 75 0 0.83333333 1 -2 181 21 0 0.83333333 1 -2 182 14 0 0.83333333 1 -6 175 14 0 -6 176 21 0 -0 - -0101000 -+645 0 -657 0 * -Ve -0.000639223826761284 -26.2028087589921 0.0548123556327908 1.9063653740577 -0 0 - -0101101 -* -Ed - 0.000639223826761284 1 1 0 -1 76 0 0.66666667 0.83333333 -2 183 21 0 0.66666667 0.83333333 -2 184 14 0 0.66666667 0.83333333 -6 177 14 0 -6 178 21 0 -0 - -0101000 -+643 0 -645 0 * -Ve -0.000329412730386217 -26.2326379467513 0.0709475047871804 1.90394341438878 -0 0 - -0101101 -* -Ed - 0.000161555653969616 1 1 0 -1 77 0 0.409120244843595 0.543968604417467 -2 185 14 0 0.409120244843595 0.543968604417467 -2 186 21 0 0.409120244843595 0.543968604417467 -6 179 14 0 -6 180 21 0 -0 - -0101000 -+643 0 -641 0 * -Ve -0.000343259380517848 -26.2947290518789 0.0952205365879649 1.89896106160379 -0 0 - -0101101 -* -Ed - 0.000329412730386217 1 1 0 -1 78 0 0.33333333 0.5 -2 187 21 0 0.33333333 0.5 -2 188 14 0 0.33333333 0.5 -6 181 14 0 -6 182 21 0 -0 - -0101000 -+639 0 -641 0 * -Ve -0.000343259380517848 -26.3562983810869 0.114252097615382 1.89403270786429 -0 0 - -0101101 -* -Ed - 0.000343259380517848 1 1 0 -1 77 0 0.743934327122079 0.887898366733494 -2 189 14 0 0.743934327122079 0.887898366733494 -2 190 21 0 0.743934327122079 0.887898366733494 -6 183 14 0 -6 184 21 0 -0 - -0101000 -+639 0 -637 0 * -Ve -0.00024102979908179 -26.4173906772587 0.130843789250621 1.88911927247835 -0 0 - -0101101 -* -Ed - 0.00024102979908179 1 1 0 -1 77 0 0.887898366733494 1 -2 191 14 0 0.887898366733494 1 -2 192 21 0 0.887898366733494 1 -6 185 14 0 -6 186 21 0 -0 - -0101000 -+637 0 -635 0 * -Ve -6.2050020514863e-006 -26.6072800710749 0.166388895327828 1.87445963020711 -0 0 - -0101101 -* -Ed - 6.2050020514863e-006 1 1 0 -1 79 0 0.875 1 -2 193 22 0 0.875 1 -2 194 14 0 0.875 1 -6 187 14 0 -6 188 22 0 -0 - -0101000 -+633 0 -635 0 * -Ve -0.00034962808757274 -26.717724389624 0.184290379536009 1.86592236141589 -0 0 - -0101101 -* -Ed - 6.18003433079044e-006 1 1 0 -1 80 0 0.849766973181494 0.875 -2 195 22 0 0.849766973181494 0.875 -2 196 14 0 0.849766973181494 0.875 -6 189 14 0 -6 190 22 0 -0 - -0101000 -+631 0 -633 0 * -Ve -0.000620620776339937 -27.0541544954677 0.227810155714067 1.84031084674953 -0 0 - -0101101 -* -Ed - 0.00034962808757274 1 1 0 -1 80 0 0.75 0.849766973181494 -2 197 22 0 0.75 0.849766973181494 -2 198 14 0 0.75 0.849766973181494 -6 191 14 0 -6 192 22 0 -0 - -0101000 -+629 0 -631 0 * -Ve -0.000796063359140315 -27.5696395674809 0.269948992087055 1.8028810686892 -0 0 - -0101101 -* -Ed - 0.000620620776339937 1 1 0 -1 81 0 0.388108130442962 0.458397371248378 -2 199 14 0 0.388108130442962 0.458397371248378 -2 200 22 0 0.388108130442962 0.458397371248378 -6 193 14 0 -6 194 22 0 -0 - -0101000 -+629 0 -627 0 * -Ve -0.000796063359140315 -28.7384764405596 0.28999596408343 1.72661155909216 -0 0 - -0101101 -* -Ed - 0.000796063359140315 1 1 0 -1 81 0 0.458397371248378 0.603008108383431 -2 201 14 0 0.458397371248378 0.603008108383431 -2 202 22 0 0.458397371248378 0.603008108383431 -6 195 14 0 -6 196 22 0 -0 - -0101000 -+627 0 -625 0 * -Ve -0.000133863283787955 -29.2028255741547 0.27183817160682 1.69954302339893 -0 0 - -0101101 -* -Ed - 5.22026838853199e-005 1 1 0 -1 81 0 0.603008108383431 0.66666667 -2 203 14 0 0.603008108383431 0.66666667 -2 204 22 0 0.603008108383431 0.66666667 -6 197 14 0 -6 198 22 0 -0 - -0101000 -+625 0 -623 0 * -Ve -0.000155093741312122 -29.4547613552504 0.255473155076532 1.68556831110325 -0 0 - -0101101 -* -Ed - 0.000133863283787955 1 1 0 -1 82 0 0.375 0.41045693926711 -2 205 22 0 0.375 0.41045693926711 -2 206 14 0 0.375 0.41045693926711 -6 199 14 0 -6 200 22 0 -0 - -0101000 -+621 0 -623 0 * -Ve -0.000455119030061277 -29.9096528327914 0.214788315729654 1.66127598524551 -0 0 - -0101101 -* -Ed - 0.000155093741312122 1 1 0 -1 83 0 0.25 0.375 -2 207 22 0 0.25 0.375 -2 208 14 0 0.25 0.375 -6 201 14 0 -6 202 22 0 -0 - -0101000 -+619 0 -621 0 * -Ve -0.000455119030061277 -30.6808170131304 0.121342621013034 1.6205390678069 -0 0 - -0101101 -* -Ed - 0.000455119030061277 1 1 0 -1 84 0 0.757022074411284 0.857833183419821 -2 209 14 0 0.757022074411284 0.857833183419821 -2 210 22 0 0.757022074411284 0.857833183419821 -6 203 14 0 -6 204 22 0 -0 - -0101000 -+619 0 -617 0 * -Ed - 0.000406322736235147 1 1 0 -1 84 0 0.857833183419821 1 -2 211 14 0 0.857833183419821 1 -2 212 22 0 0.857833183419821 1 -6 205 14 0 -6 206 22 0 -0 - -0101000 -+617 0 -688 0 * -Wi - -0101000 --650 0 +647 0 -725 0 -646 0 -654 0 -644 0 -642 0 +640 0 -638 0 +636 0 -+634 0 -632 0 -630 0 -628 0 +626 0 +624 0 +622 0 -620 0 -618 0 +616 0 -+615 0 * -Fa -0 1.00000004749745e-010 14 0 -2 14 -0101000 -+614 0 * -Ve -1e-007 -32.0208866309104 -6.53046184918028 1.31476716144809 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 85 0 0 55.21292144 -2 213 13 0 0 55.21292144 -2 214 12 0 0 55.21292144 -6 207 13 0 -6 208 12 0 -0 - -0101000 -+741 0 -612 0 * -Ve -1e-007 -31.9768135388171 -6.52772034505006 1.34215900474913 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 86 0 0 1 -2 215 13 0 0 1 -2 216 23 0 0 1 -6 209 13 0 -6 210 23 0 -0 - -0101000 -+612 0 -610 0 * -Ed - 1e-007 1 1 0 -1 87 0 0 55.31736968 -2 217 13 0 0 55.31736968 -2 218 2 0 0 55.31736968 -6 211 13 0 -6 212 2 0 -0 - -0101000 -+610 0 -826 0 * -Wi - -0101000 -+611 0 +609 0 +608 0 +731 0 +732 0 -734 0 +736 0 +738 0 * -Fa -0 1.00000004749745e-010 13 0 -2 13 -0101000 -+607 0 * -Ve -1e-007 -32.0213115109306 -6.52591981196454 1.3601615736042 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 88 0 0 1 -2 219 2 0 0 1 -2 220 23 0 0 1 -6 213 2 0 -6 214 23 0 -0 - -0101000 -+610 0 -605 0 * -Ed - 1e-007 1 1 0 -1 89 0 0 2.52492265 -2 221 2 0 0 2.52492265 -2 222 3 0 0 2.52492265 -6 215 2 0 -6 216 3 0 -0 - -0101000 -+605 0 -811 0 * -Wi - -0101000 --608 0 +604 0 +603 0 -810 0 +812 0 -814 0 +816 0 -818 0 +820 0 -822 0 --824 0 * -Fa -0 1.00000004749745e-010 2 0 -2 2 -0101000 -+602 0 * -Ve -1e-007 -33.0949317119248 -6.52779751805373 1.34157750972151 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 90 0 0 1 -2 223 23 0 0 1 -2 224 12 0 0 1 -6 217 23 0 -6 218 12 0 -0 - -0101000 -+612 0 -600 0 * -Ed - 1e-007 1 1 0 -1 91 0 0 1 -2 225 23 0 0 1 -2 226 3 0 0 1 -6 219 23 0 -6 220 3 0 -0 - -0101000 -+600 0 -605 0 * -Wi - -0101000 --604 0 -609 0 +599 0 +598 0 * -Fa -0 1.00000004749745e-010 23 0 -2 23 -0101000 -+597 0 * -Ed - 1e-007 1 1 0 -1 92 0 0.29266018 3.01761452 -2 227 12 0 0.29266018 3.01761452 -2 228 3 0 0.29266018 3.01761452 -6 221 12 0 -6 222 3 0 -0 - -0101000 -+795 0 -600 0 * -Wi - -0101000 -+595 0 -599 0 -611 0 +740 0 +742 0 -744 0 -746 0 +748 0 +750 0 * -Fa -0 1.00000004749745e-010 12 0 -2 12 -0101000 -+594 0 * -Wi - -0101000 --603 0 -598 0 -595 0 +794 0 +796 0 -798 0 +800 0 -802 0 -804 0 +806 0 -+808 0 * -Fa -0 1.00000004749745e-010 3 0 -2 3 -0101000 -+592 0 * -Ve -5.11283104458342e-006 -33.1092560926052 5.44269516439137e-020 7.84503997861939 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 93 0 0 1.95653393 -2 229 17 0 0 1.95653393 -2 230 22 0 0 1.95653393 -6 223 17 0 -6 224 22 0 -0 - -0101000 -+688 0 -590 0 * -Ve -5.11283104458342e-006 -31.3042272068709 -0.045332982233201 7.84504008261939 -0 0 - -0101101 -* -Ed - 5.11283104226281e-006 1 1 0 -1 94 0 0 1 -2 231 17 0 0 1 -2 232 24 0 0 1 -6 225 24 0 -0 - -0101000 -+590 0 -588 0 * -Ed - 1e-007 1 1 0 -1 95 0 0.07121022 2.01729017 -2 233 17 0 0.07121022 2.01729017 -2 234 18 0 0.07121022 2.01729017 -6 226 17 0 -6 227 18 0 -0 - -0101000 -+588 0 -669 0 * -Wi - -0101000 -+589 0 +587 0 +586 0 +668 0 +670 0 +672 0 -674 0 -676 0 +678 0 +680 0 -+682 0 -684 0 -686 0 * -Fa -0 1.00000004749745e-010 17 0 -2 17 -0101000 -+585 0 * -Ve -6.28653214944452e-007 -31.209191012357 0 7.84504046261941 -0 0 - -0101101 -* -Ed - 5.04402815964653e-007 1 1 0 -1 96 0 0 1 -2 235 18 0 0 1 -2 236 24 0 0 1 -6 228 18 0 -6 229 24 0 -0 - -0101000 -+588 0 -583 0 * -Ed - 1e-007 1 1 0 -1 97 0 1.37499288 38.1919507 -2 237 18 0 1.37499288 38.1919507 -2 238 21 0 1.37499288 38.1919507 -6 230 18 0 -6 231 21 0 -0 - -0101000 -+583 0 -657 0 * -Wi - -0101000 -+656 0 +658 0 -660 0 +662 0 -664 0 -666 0 -586 0 +582 0 +581 0 * -Fa -0 1.00000004749745e-010 18 0 -2 18 -0101000 -+580 0 * -Ve -4.99120321925908e-006 -31.3042272068709 0.045332982233201 7.84504008261939 -0 0 - -0101101 -* -Ed - 4.99120321727719e-006 1 1 0 -1 98 0 0 1 -2 239 24 0 0 1 -2 240 22 0 0 1 -6 232 24 0 -6 233 22 0 -0 - -0101000 -+590 0 -578 0 * -Ed - 6.28653213983484e-007 1 1 0 -1 99 0 0 1 -2 241 24 0 0 1 -2 242 21 0 0 1 -6 234 24 0 -6 235 21 0 -0 - -0101000 -+578 0 -583 0 * -Wi - -0101000 --582 0 -587 0 +577 0 +576 0 * -Fa -0 1.00000004749745e-010 24 0 -2 24 -0101000 -+575 0 * -Ed - 1e-007 1 1 0 -1 100 0 1.34817287 38.1919507 -2 243 22 0 1.34817287 38.1919507 -2 244 21 0 1.34817287 38.1919507 -6 236 22 0 -6 237 21 0 -0 - -0101000 -+635 0 -578 0 * -Wi - -0101000 -+573 0 -577 0 -589 0 -615 0 -616 0 +618 0 +620 0 -622 0 -624 0 -626 0 -+628 0 +630 0 +632 0 * -Fa -0 1.00000004749745e-010 22 0 -2 22 -0101000 -+572 0 * -Wi - -0101000 --634 0 -636 0 +638 0 -640 0 +642 0 +644 0 -581 0 -576 0 -573 0 * -Fa -0 1.00000004749745e-010 21 0 -2 21 -0101000 -+570 0 * -Ve -1e-007 -20.1549001573063 1.36866520500811 1.41444156718237 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 101 0 0 1 -2 245 7 0 0 1 -2 246 19 0 0 1 -6 238 19 0 -0 - -0101000 -+568 0 -728 0 * -Ve -1e-007 -20.1549001573063 -1.3686672230082 1.41444126018235 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 102 0 0 1 -2 247 7 0 0 1 -2 248 19 0 0 1 -6 239 19 0 -0 - -0101000 -+789 0 -566 0 * -Ve -1e-007 -20.1549001573063 -1.6722750014288 -1.30306872289244 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 103 0 1.20676907 1.78417229 -2 249 25 0 1.20676907 1.78417229 -2 250 7 0 1.20676907 1.78417229 -6 240 7 0 -6 241 25 0 -0 - -0101000 -+564 0 -566 0 * -Ve -1e-007 -20.1549001573063 1.67227319742871 -1.30306890389245 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 104 0 0.57740334 1.20676907 -2 251 7 0 0.57740334 1.20676907 -2 252 26 0 0.57740334 1.20676907 -6 242 7 0 -6 243 26 0 -0 - -0101000 -+564 0 -562 0 * -Ed - 1e-007 1 1 0 -1 105 0 0 0.57740334 -2 253 27 0 0 0.57740334 -2 254 7 0 0 0.57740334 -6 244 7 0 -6 245 27 0 -0 - -0101000 -+568 0 -562 0 * -Wi - -0101000 -+567 0 -727 0 -781 0 -786 0 +565 0 -563 0 +561 0 -560 0 * -Fa -0 1.00000004749745e-010 7 0 -2 7 -0101000 -+559 0 * -Ve -9.19500043569285e-007 -1.31958620130198 0.845840769945279 -1.40924429193551 -0 0 - -0101101 -* -Ve -7.63760340204839e-007 -1.31958609667697 1.13939655511843 -0.618156123250839 -0 0 - -0101101 -* -Ed - 7.63760340204839e-007 1 1 0 -1 106 0 0 1 -2 255 28 0 0 1 -2 256 29 0 0 1 -6 246 28 0 -6 247 29 0 -0 - -0101000 -+557 0 -556 0 * -Ve -1e-007 -2.42419264614297 1.16954252255029 0.134080451298479 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 107 0 0 1 -2 257 28 0 0 1 -2 258 30 0 0 1 -6 248 28 0 -6 249 30 0 -0 - -0101000 -+556 0 -554 0 * -Ve -4.94097974318148e-006 -2.34964929660235 1.04896390382311 -1.40924429193551 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 108 0 0 1 -2 259 28 0 0 1 -2 260 31 0 0 1 -6 250 28 0 -6 251 31 0 -0 - -0101000 -+554 0 -552 0 * -Ed - 9.19500043439214e-007 1 1 0 -1 109 0 0 0.5 -2 261 28 0 0 0.5 -2 262 32 0 0 0.5 -6 252 28 0 -6 253 32 0 -0 - -0101000 -+552 0 -557 0 * -Wi - -0101000 -+555 0 +553 0 +551 0 +550 0 * -Fa -0 1.00000004749745e-010 28 0 -2 28 -0101000 -+549 0 * -Ve -9.19500043569285e-007 --5.85000029206485e-009 -1.82839863052382e-018 -0.750000037063089 -0 0 - -0101101 -* -Ed - 9.19500043439214e-007 1 1 0 -1 110 0 0 1.48870447 -2 263 29 0 0 1.48870447 -2 264 33 0 0 1.48870447 -6 254 29 0 -6 255 33 0 -0 - -0101000 -+557 0 -547 0 * -Ed - 9.19500043569285e-007 0 0 1 -2 265 29 0 0 1 -6 256 29 0 -0 - -0101000 -+547 0 -547 0 * -Ve -7.63736802976027e-007 -1.31958587667696 0.752125697664052 0.131521655936943 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 111 0 0 1.82687438 -2 266 29 0 0 1.82687438 -2 267 34 0 0 1.82687438 -6 257 29 0 -6 258 34 0 -0 - -0101000 -+547 0 -544 0 * -Ed - 7.63736802976027e-007 1 1 0 -1 112 0 0 1 -2 268 30 0 0 1 -2 269 29 0 0 1 -6 259 30 0 -0 - -0101000 -+556 0 -544 0 * -Wi - -0101000 -+546 0 +545 0 +543 0 -542 0 -555 0 * -Fa -0 1.00000004749745e-010 29 0 -2 29 -0101000 -+541 0 * -Ve -8.88000042498227e-007 -1.31958590267696 -0.845840762795279 -1.40924429893551 -0 0 - -0101101 -* -Ed - 8.88000042498227e-007 1 1 0 -1 113 0 0 1.61807207 -2 270 33 0 0 1.61807207 -2 271 35 0 0 1.61807207 -6 260 33 0 -6 261 35 0 -0 - -0101000 -+539 0 -547 0 * -Ed - 8.88000042323176e-007 0 0 1 -2 272 33 0 0 1 -6 262 33 0 -0 - -0101000 -+547 0 -547 0 * -Ed - 1e-007 1 1 0 -1 114 0 0 1 -2 273 32 0 0 1 -2 274 33 0 0 1 -6 263 33 0 -6 264 32 0 -0 - -0101000 -+539 0 -557 0 * -Wi - -0101000 -+538 0 +537 0 -546 0 -536 0 * -Fa -0 1.00000004749745e-010 33 0 -2 33 -0101000 -+535 0 * -Ed - 1.45544116318782e-009 0 0 1 -2 275 35 0 0 1 -6 265 35 0 -0 - -0101000 -+547 0 -547 0 * -Ve -7.63687361372285e-007 -1.31958607367697 -1.13939655511843 -0.618156128230839 -0 0 - -0101101 -* -Ed - 7.63687361372285e-007 1 1 0 -1 115 0 0 1 -2 276 36 0 0 1 -2 277 35 0 0 1 -6 266 35 0 -6 267 36 0 -0 - -0101000 -+532 0 -539 0 * -Ve -7.63268920665479e-007 -1.31958587667696 -0.752125697664052 0.131521655936943 -0 0 - -0101101 -* -Ed - 7.63268920665479e-007 1 1 0 -1 116 0 0 1 -2 278 37 0 0 1 -2 279 35 0 0 1 -6 268 37 0 -0 - -0101000 -+530 0 -532 0 * -Ed - 1e-007 1 1 0 -1 117 0 0 1.82687438 -2 280 35 0 0 1.82687438 -2 281 34 0 0 1.82687438 -6 269 35 0 -6 270 34 0 -0 - -0101000 -+530 0 -547 0 * -Wi - -0101000 -+533 0 -538 0 -531 0 -529 0 +528 0 * -Fa -0 1.00000004749745e-010 35 0 -2 35 -0101000 -+527 0 * -Ve -1e-007 -2.00023807100621 -0.163958005517587 0.96768671484265 -0 0 - -0101101 -* -Ve -1e-007 -1.31958583467696 -0.168220024938772 0.347343154078914 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 118 0 2.78088653 5.56177307 -2 282 38 0 2.78088653 5.56177307 -2 283 39 0 2.78088653 5.56177307 -6 271 38 0 -6 272 39 0 -0 - -0101000 -+525 0 -524 0 * -Ve -2.68980978600398e-007 -1.31958586442696 -0.472656103864459 0.273205851457581 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 119 0 0.60294418 0.79736362 -2 284 34 0 0.60294418 0.79736362 -2 285 38 0 0.60294418 0.79736362 -6 273 38 0 -6 274 34 0 -0 - -0101000 -+522 0 -524 0 * -Ve -1e-007 -2.42413693614032 -1.16967838155674 0.134100623219438 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 120 0 0 1 -2 286 38 0 0 1 -2 287 37 0 0 1 -6 275 38 0 -6 276 37 0 -0 - -0101000 -+522 0 -520 0 * -Ed - 1e-007 1 1 0 -1 121 0 0 1 -2 288 38 0 0 1 -2 289 40 0 0 1 -6 277 38 0 -6 278 40 0 -0 - -0101000 -+520 0 -525 0 * -Wi - -0101000 -+523 0 -521 0 +519 0 +518 0 * -Fa -0 1.00000004749745e-010 38 0 -2 38 -0101000 -+517 0 * -Ed - 2.68980978600398e-007 1 1 0 -1 122 0 0.5 1 -2 290 37 0 0.5 1 -2 291 34 0 0.5 1 -6 279 37 0 -6 280 34 0 -0 - -0101000 -+522 0 -530 0 * -Ed - 1e-007 1 1 0 -1 123 0 0 1 -2 292 37 0 0 1 -2 293 36 0 0 1 -6 281 37 0 -6 282 36 0 -0 - -0101000 -+532 0 -520 0 * -Wi - -0101000 -+515 0 +529 0 +514 0 -519 0 * -Fa -0 1.00000004749745e-010 37 0 -2 37 -0101000 -+513 0 * -Ve -8.88000042498227e-007 -2.34964929660235 -1.04896389482311 -1.40924429993551 -0 0 - -0101101 -* -Ed - 8.88000042498227e-007 1 1 0 -1 124 0 0 0.5 -2 294 36 0 0 0.5 -2 295 32 0 0 0.5 -6 283 36 0 -6 284 32 0 -0 - -0101000 -+539 0 -511 0 * -Ed - 1e-007 1 1 0 -1 125 0 0 1 -2 296 41 0 0 1 -2 297 36 0 0 1 -6 285 36 0 -6 286 41 0 -0 - -0101000 -+520 0 -511 0 * -Wi - -0101000 --514 0 +531 0 +510 0 -509 0 * -Fa -0 1.00000004749745e-010 36 0 -2 36 -0101000 -+508 0 * -Ve -2.25704336145478e-006 -3.38400016073138 -1.63898554684763 0.123910676095441 -0 0 - -0101101 -* -Ve -1.61924769677972e-007 -3.38400016073138 -0.713493162199105 1.41444133318236 -0 0 - -0101101 -* -Ed - 1.61924769677972e-007 1 1 0 -1 126 0 0 1 -2 298 42 0 0 1 -2 299 43 0 0 1 -6 287 42 0 -6 288 43 0 -0 - -0101000 -+506 0 -505 0 * -Ve -1e-007 -3.07361411498883 -0.462644191244419 1.41444136118236 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 127 0 0.5 1 -2 300 42 0 0.5 1 -2 301 44 0 0.5 1 -6 289 42 0 -6 290 44 0 -0 - -0101000 -+505 0 -503 0 * -Ed - 1e-007 1 1 0 -1 128 0 0 1 -2 302 42 0 0 1 -2 303 40 0 0 1 -6 291 42 0 -6 292 40 0 -0 - -0101000 -+503 0 -520 0 * -Ed - 1e-007 1 1 0 -1 129 0 0 1 -2 304 42 0 0 1 -2 305 41 0 0 1 -6 293 42 0 -6 294 41 0 -0 - -0101000 -+520 0 -506 0 * -Wi - -0101000 -+504 0 +502 0 +501 0 +500 0 * -Fa -0 1.00000004749745e-010 42 0 -2 42 -0101000 -+499 0 * -Ve -5.95967384397283e-006 -3.38400016073138 -1.22492845218098 -1.40924430093551 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 130 0 0.5 1 -2 306 41 0 0.5 1 -2 307 32 0 0.5 1 -6 295 41 0 -6 296 32 0 -0 - -0101000 -+511 0 -497 0 * -Ed - 2.25704336086686e-006 1 1 0 -1 131 0 0.5 1 -2 308 41 0 0.5 1 -2 309 43 0 0.5 1 -6 297 41 0 -6 298 43 0 -0 - -0101000 -+497 0 -506 0 * -Wi - -0101000 -+496 0 +495 0 -500 0 +509 0 * -Fa -0 1.00000004749745e-010 41 0 -2 41 -0101000 -+494 0 * -Ve -2.64421383329246e-007 -1.31958584867696 0.472656070609958 0.273205863752832 -0 0 - -0101101 -* -Ve -2.42292873002268e-007 -1.31958583467696 0.168219953165144 0.347343163005289 -0 0 - -0101101 -* -Ed - 2.42292873002268e-007 1 1 0 -1 132 0 0 0.5 -2 310 45 0 0 0.5 -2 311 34 0 0 0.5 -6 299 45 0 -0 - -0101000 -+492 0 -491 0 * -Ed - 2.64421383329246e-007 1 1 0 -1 133 0 0.5 1 -2 312 30 0 0.5 1 -2 313 34 0 0.5 1 -6 300 34 0 -6 301 30 0 -0 - -0101000 -+544 0 -492 0 * -Ed - 4.11593625770002e-010 0 0 1 -2 314 34 0 0 1 -6 302 34 0 -0 - -0101000 -+547 0 -547 0 * -Ed - 1e-007 1 1 0 -1 134 0 0 1 -2 315 34 0 0 1 -2 316 39 0 0 1 -6 303 34 0 -6 304 39 0 -0 - -0101000 -+524 0 -491 0 * -Wi - -0101000 --490 0 -489 0 -543 0 +488 0 -528 0 -515 0 +521 0 +487 0 * -Fa -0 1.00000004749745e-010 34 0 -2 34 -0101000 -+486 0 * -Ed - 1e-007 1 1 0 -1 135 0 0 1 -2 317 30 0 0 1 -2 318 45 0 0 1 -6 305 30 0 -6 306 45 0 -0 - -0101000 -+492 0 -554 0 * -Wi - -0101000 -+542 0 +489 0 +484 0 -553 0 * -Fa -0 1.00000004749745e-010 30 0 -2 30 -0101000 -+483 0 * -Ve -1e-007 -2.00023808900621 0.163957938237584 0.967686749742652 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 136 0 0 2.78088653 -2 319 45 0 0 2.78088653 -2 320 39 0 0 2.78088653 -6 307 45 0 -6 308 39 0 -0 - -0101000 -+491 0 -481 0 * -Ed - 1e-007 1 1 0 -1 137 0 0 1 -2 321 45 0 0 1 -2 322 46 0 0 1 -6 309 45 0 -6 310 46 0 -0 - -0101000 -+481 0 -554 0 * -Wi - -0101000 -+490 0 +480 0 +479 0 -484 0 * -Fa -0 1.00000004749745e-010 45 0 -2 45 -0101000 -+478 0 * -Ve -1e-007 -2.8066391803082 0.164126150055573 1.41444143218236 -0 0 - -0101101 -* -Ve -1e-007 -3.07361414598883 0.46264399884441 1.41444146518236 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 138 0 0.5 1 -2 323 46 0 0.5 1 -2 324 44 0 0.5 1 -6 311 46 0 -6 312 44 0 -0 - -0101000 -+476 0 -475 0 * -Ed - 1e-007 1 1 0 -1 139 0 0 1 -2 325 46 0 0 1 -2 326 47 0 0 1 -6 313 46 0 -6 314 47 0 -0 - -0101000 -+475 0 -554 0 * -Ed - 1e-007 1 1 0 -1 140 0 2.78088653 5.56177307 -2 327 46 0 2.78088653 5.56177307 -2 328 39 0 2.78088653 5.56177307 -6 315 46 0 -6 316 39 0 -0 - -0101000 -+481 0 -476 0 * -Wi - -0101000 -+474 0 +473 0 -479 0 +472 0 * -Fa -0 1.00000004749745e-010 46 0 -2 46 -0101000 -+471 0 * -Ve -1e-007 -2.8066391593082 -0.164126217435577 1.41444139518236 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 141 0 0 2.78088653 -2 329 39 0 0 2.78088653 -2 330 40 0 0 2.78088653 -6 317 40 0 -0 - -0101000 -+525 0 -469 0 * -Ed - 1e-007 1 1 0 -1 142 0 0 1.66079697 -2 331 39 0 0 1.66079697 -2 332 44 0 0 1.66079697 -6 318 39 0 -6 319 44 0 -0 - -0101000 -+469 0 -476 0 * -Wi - -0101000 -+468 0 +467 0 -472 0 -480 0 -487 0 -523 0 * -Fa -0 1.00000004749745e-010 39 0 -2 39 -0101000 -+466 0 * -Ed - 1e-007 1 1 0 -1 143 0 0 0.5 -2 333 40 0 0 0.5 -2 334 44 0 0 0.5 -6 320 40 0 -6 321 44 0 -0 - -0101000 -+503 0 -469 0 * -Wi - -0101000 -+464 0 -468 0 -518 0 -501 0 * -Fa -0 1.00000004749745e-010 40 0 -2 40 -0101000 -+463 0 * -Ve -2.43678460712111e-006 -3.38400016073138 0.713492872779091 1.41444149318236 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 144 0 0 1.55787992 -2 335 44 0 0 1.55787992 -2 336 48 0 0 1.55787992 -6 322 44 0 -6 323 48 0 -0 - -0101000 -+505 0 -461 0 * -Ed - 1e-007 1 1 0 -1 145 0 0 0.5 -2 337 44 0 0 0.5 -2 338 47 0 0 0.5 -6 324 44 0 -6 325 47 0 -0 - -0101000 -+461 0 -475 0 * -Wi - -0101000 --464 0 -502 0 +460 0 +459 0 -474 0 -467 0 * -Fa -0 1.00000004749745e-010 44 0 -2 44 -0101000 -+458 0 * -Ve -1e-007 -4.85761506672432 -1.22947768939705 1.41444127518235 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 146 0 0 1 -2 339 48 0 0 1 -2 340 43 0 0 1 -6 326 48 0 -6 327 43 0 -0 - -0101000 -+505 0 -456 0 * -Ve -1e-007 -4.85761506672432 1.22947738839704 1.41444155118237 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 147 0 0 2.03028442 -2 341 48 0 0 2.03028442 -2 342 49 0 0 2.03028442 -6 328 48 0 -6 329 49 0 -0 - -0101000 -+456 0 -454 0 * -Ed - 1e-007 1 1 0 -1 148 0 0 1 -2 343 48 0 0 1 -2 344 50 0 0 1 -6 330 48 0 -6 331 50 0 -0 - -0101000 -+454 0 -461 0 * -Wi - -0101000 -+455 0 +453 0 +452 0 -460 0 * -Fa -0 1.00000004749745e-010 48 0 -2 48 -0101000 -+451 0 * -Ve -1e-007 -6.35000030160882 1.34685307097208 1.41444156518237 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 149 0 0 1 -2 345 50 0 0 1 -2 346 49 0 0 1 -6 332 49 0 -6 333 50 0 -0 - -0101000 -+454 0 -449 0 * -Ve -1.42854274204421e-006 -6.35000030160882 -1.3468533929721 1.41444126218235 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 150 0 0 1 -2 347 49 0 0 1 -2 348 43 0 0 1 -6 334 49 0 -6 335 43 0 -0 - -0101000 -+456 0 -447 0 * -Ed - 1e-007 1 1 0 -1 151 0 0 3.67726025 -2 349 49 0 0 3.67726025 -2 350 51 0 0 3.67726025 -6 336 49 0 -6 337 51 0 -0 - -0101000 -+447 0 -449 0 * -Wi - -0101000 --448 0 -453 0 +446 0 +445 0 * -Fa -0 1.00000004749745e-010 49 0 -2 49 -0101000 -+444 0 * -Ve -1.42854274204421e-006 -6.35000030160882 -1.56406656428917 -1.43766213928528 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 152 0 0 1 -2 351 43 0 0 1 -2 352 52 0 0 1 -6 338 43 0 -6 339 52 0 -0 - -0101000 -+497 0 -442 0 * -Ed - 1.42854274077344e-006 1 1 0 -1 153 0 7.7471244 11.44318406 -2 353 43 0 7.7471244 11.44318406 -2 354 53 0 7.7471244 11.44318406 -6 340 43 0 -6 341 53 0 -0 - -0101000 -+442 0 -447 0 * -Wi - -0101000 --446 0 -455 0 -504 0 -495 0 +441 0 +440 0 * -Fa -0 1.00000004749745e-010 43 0 -2 43 -0101000 -+439 0 * -Ve -5.95967384397283e-006 -3.38400016073138 1.22492955611853 -1.40924522574805 -0 0 - -0101101 -* -Ed - 5.95967384334809e-006 1 1 0 -1 154 0 0 1.10976049 -2 355 32 0 0 1.10976049 -2 356 52 0 0 1.10976049 -6 342 52 0 -6 343 32 0 -0 - -0101000 -+437 0 -497 0 * -Ve -4.94572537741857e-007 -6.35000030160882 1.56406643828917 -1.43766224628529 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 155 0 0 1 -2 357 52 0 0 1 -2 358 50 0 0 1 -6 344 52 0 -6 345 50 0 -0 - -0101000 -+437 0 -435 0 * -Ed - 4.94487658742421e-007 1 1 0 -1 156 0 3.65967968 7.7471244 -2 359 53 0 3.65967968 7.7471244 -2 360 52 0 3.65967968 7.7471244 -6 346 52 0 -6 347 53 0 -0 - -0101000 -+442 0 -435 0 * -Wi - -0101000 --441 0 -436 0 +434 0 -433 0 * -Fa -0 1.00000004749745e-010 52 0 -2 52 -0101000 -+432 0 * -Ed - 4.94097974284382e-006 1 1 0 -1 157 0 0.5 1 -2 361 32 0 0.5 1 -2 362 31 0 0.5 1 -6 348 31 0 -0 - -0101000 -+552 0 -437 0 * -Wi - -0101000 -+436 0 -496 0 -510 0 +536 0 -550 0 +430 0 * -Fa -0 1.00000004749745e-010 32 0 -2 32 -0101000 -+429 0 * -Ve -4.94097974194168e-006 -3.38400016073138 1.63898521684762 0.123909655855393 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 158 0 0 1 -2 363 31 0 0 1 -2 364 47 0 0 1 -6 349 47 0 -0 - -0101000 -+554 0 -427 0 * -Ed - 4.94097974194168e-006 1 1 0 -1 159 0 0.5 1 -2 365 50 0 0.5 1 -2 366 31 0 0.5 1 -6 350 31 0 -6 351 50 0 -0 - -0101000 -+437 0 -427 0 * -Wi - -0101000 --430 0 -551 0 +426 0 -425 0 * -Fa -0 1.00000004749745e-010 31 0 -2 31 -0101000 -+424 0 * -Ed - 2.43678460712111e-006 1 1 0 -1 160 0 0 1 -2 367 47 0 0 1 -2 368 50 0 0 1 -6 352 47 0 -6 353 50 0 -0 - -0101000 -+461 0 -427 0 * -Wi - -0101000 -+422 0 -426 0 -473 0 -459 0 * -Fa -0 1.00000004749745e-010 47 0 -2 47 -0101000 -+421 0 * -Ed - 1e-007 1 1 0 -1 161 0 0 3.65967968 -2 369 50 0 0 3.65967968 -2 370 53 0 0 3.65967968 -6 354 50 0 -6 355 53 0 -0 - -0101000 -+449 0 -435 0 * -Wi - -0101000 --422 0 -452 0 +448 0 +419 0 -434 0 +425 0 * -Fa -0 1.00000004749745e-010 50 0 -2 50 -0101000 -+418 0 * -Ve -1e-007 -7.21279194058922 1.34821630603684 1.41444156518237 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 162 0 0 1 -2 371 53 0 0 1 -2 372 51 0 0 1 -6 356 51 0 -0 - -0101000 -+449 0 -416 0 * -Ve -1e-007 -7.21279194058922 1.75566519138962 -1.18857467445427 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 163 0 1.23049347 1.78417229 -2 373 53 0 1.23049347 1.78417229 -2 374 27 0 1.23049347 1.78417229 -6 357 53 0 -6 358 27 0 -0 - -0101000 -+416 0 -414 0 * -Ve -1e-007 -7.21279194058922 -1.75566531738962 -1.18857460045426 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 164 0 0.55367874 1.23049347 -2 375 26 0 0.55367874 1.23049347 -2 376 53 0 0.55367874 1.23049347 -6 359 53 0 -6 360 26 0 -0 - -0101000 -+412 0 -414 0 * -Ve -1e-007 -7.21279194058922 -1.34821673503686 1.41444126218235 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 165 0 0 0.55367874 -2 377 53 0 0 0.55367874 -2 378 25 0 0 0.55367874 -6 361 53 0 -6 362 25 0 -0 - -0101000 -+412 0 -410 0 * -Ed - 1e-007 1 1 0 -1 166 0 0 1 -2 379 53 0 0 1 -2 380 51 0 0 1 -6 363 51 0 -0 - -0101000 -+410 0 -447 0 * -Wi - -0101000 --419 0 +415 0 +413 0 -411 0 +409 0 +408 0 -440 0 +433 0 * -Fa -0 1.00000004749745e-010 53 0 -2 53 -0101000 -+407 0 * -Ve -1.67946554004704e-007 -15.178436250937 -6.33367198983326 -0.437746756651854 -0 0 - -0101101 -* -Ve -1.24196907781472e-006 -13.7551732833356 -6.33367429383337 -0.507938351705776 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 167 0 8.022e-005 1.00008022 -2 381 54 0 8.022e-005 1.00008022 -2 382 55 0 8.022e-005 1.00008022 -6 364 55 0 -0 - -0101000 -+405 0 -404 0 * -Ve -6.5666520181121e-007 -18.7445785303197 -16.2690985127407 0.302431252674713 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 168 0 0.00020743 46.24578153 -2 383 54 0 0.00020743 46.24578153 -2 384 56 0 0.00020743 46.24578153 -6 365 54 0 -6 366 56 0 -0 - -0101000 -+404 0 -402 0 * -Ve -7.01160310719151e-007 -19.3665796498631 -16.2690975027406 0.333106715941719 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 169 0 8.022e-005 1.00008022 -2 385 54 0 8.022e-005 1.00008022 -2 386 57 0 8.022e-005 1.00008022 -6 367 57 0 -0 - -0101000 -+402 0 -400 0 * -Ed - 1e-007 1 1 0 -1 170 0 4.95e-005 10.70174454 -2 387 54 0 4.95e-005 10.70174454 -2 388 58 0 4.95e-005 10.70174454 -6 368 54 0 -6 369 58 0 -0 - -0101000 -+400 0 -405 0 * -Wi - -0101000 -+403 0 +401 0 +399 0 +398 0 * -Fa -0 1.00000004749745e-010 54 0 -2 54 -0101000 -+397 0 * -Ve -1.18851896927156e-006 -18.6177078042936 -16.2690957227405 0.240354853816242 -0 0 - -0101101 -* -Ed - 6.56665201578765e-007 1 1 0 -1 171 0 0.00034374 1.00034374 -2 389 57 0 0.00034374 1.00034374 -2 390 56 0 0.00034374 1.00034374 -6 370 57 0 -6 371 56 0 -0 - -0101000 -+402 0 -395 0 * -Ve -1.18851896927156e-006 -19.4649687145364 -16.2690729827395 0.155572182299282 -0 0 - -0101101 -* -Ed - 1.18851896927156e-006 1 1 0 -1 172 0 5.799e-005 1.00005799 -2 391 57 0 5.799e-005 1.00005799 -2 392 59 0 5.799e-005 1.00005799 -6 372 57 0 -6 373 59 0 -0 - -0101000 -+395 0 -393 0 * -Ed - 1e-007 1 1 0 -1 173 0 0 1 -2 393 57 0 0 1 -2 394 60 0 0 1 -6 374 57 0 -6 375 60 0 -0 - -0101000 -+393 0 -400 0 * -Wi - -0101000 -+394 0 +392 0 +391 0 -399 0 * -Fa -0 1.00000004749745e-010 57 0 -2 57 -0101000 -+390 0 * -Ve -7.01160310719151e-007 -20.2590217622519 -16.2691035827409 0.211302165326314 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 174 0 6.281e-005 1.00006281 -2 395 60 0 6.281e-005 1.00006281 -2 396 61 0 6.281e-005 1.00006281 -6 376 60 0 -6 377 61 0 -0 - -0101000 -+393 0 -388 0 * -Ed - 7.01160310719151e-007 0 0 1 -2 397 60 0 0 1 -6 378 60 0 -0 - -0101000 -+388 0 -388 0 * -Ed - 7.01160310456898e-007 1 1 0 -1 175 0 5.543e-005 1.00005543 -2 398 60 0 5.543e-005 1.00005543 -2 399 58 0 5.543e-005 1.00005543 -6 379 60 0 -6 380 58 0 -0 - -0101000 -+388 0 -400 0 * -Wi - -0101000 -+387 0 +386 0 +385 0 -391 0 * -Fa -0 1.00000004749745e-010 60 0 -2 60 -0101000 -+384 0 * -Ve -1.67946554004704e-007 -17.2205222879309 -6.33368591083392 -0.716459929370019 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 176 0 3.88e-005 8.09360706 -2 400 58 0 3.88e-005 8.09360706 -2 401 61 0 3.88e-005 8.09360706 -6 381 58 0 -6 382 61 0 -0 - -0101000 -+388 0 -382 0 * -Ed - 1.67946554004704e-007 1 1 0 -1 177 0 5.543e-005 1.00005543 -2 402 58 0 5.543e-005 1.00005543 -2 403 62 0 5.543e-005 1.00005543 -6 383 62 0 -0 - -0101000 -+382 0 -405 0 * -Wi - -0101000 --385 0 +381 0 +380 0 -398 0 * -Fa -0 1.00000004749745e-010 58 0 -2 58 -0101000 -+379 0 * -Ve -9.64067992192019e-007 -15.4035701016303 -6.3336158858306 -0.843981276536958 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 178 0 6.281e-005 1.00006281 -2 404 61 0 6.281e-005 1.00006281 -2 405 63 0 6.281e-005 1.00006281 -6 384 63 0 -0 - -0101000 -+377 0 -382 0 * -Ed - 1e-007 1 1 0 -1 179 0 3.88e-005 8.09360706 -2 406 61 0 3.88e-005 8.09360706 -2 407 59 0 3.88e-005 8.09360706 -6 385 61 0 -6 386 59 0 -0 - -0101000 -+393 0 -377 0 * -Wi - -0101000 -+376 0 -381 0 -387 0 +375 0 * -Fa -0 1.00000004749745e-010 61 0 -2 61 -0101000 -+374 0 * -Ve -1.24196907781472e-006 -13.4648676895469 -6.33366791783307 -0.649981567562466 -0 0 - -0101101 -* -Ed - 9.64067992047893e-007 1 1 0 -1 180 0 5.799e-005 1.00005799 -2 408 59 0 5.799e-005 1.00005799 -2 409 64 0 5.799e-005 1.00005799 -6 387 64 0 -0 - -0101000 -+372 0 -377 0 * -Ed - 1e-007 1 1 0 -1 181 0 0.00020743 46.24578153 -2 410 59 0 0.00020743 46.24578153 -2 411 56 0 0.00020743 46.24578153 -6 388 59 0 -6 389 56 0 -0 - -0101000 -+395 0 -372 0 * -Wi - -0101000 -+371 0 -375 0 -392 0 +370 0 * -Fa -0 1.00000004749745e-010 59 0 -2 59 -0101000 -+369 0 * -Ed - 1.24196907662032e-006 1 1 0 -1 182 0 0.00034374 1.00034374 -2 412 56 0 0.00034374 1.00034374 -2 413 65 0 0.00034374 1.00034374 -6 390 56 0 -6 391 65 0 -0 - -0101000 -+404 0 -372 0 * -Wi - -0101000 -+367 0 -370 0 -394 0 -401 0 * -Fa -0 1.00000004749745e-010 56 0 -2 56 -0101000 -+366 0 * -Ve -0.000624086605695706 -11.2339737223351 -1.75393664780752 -1.18752892052959 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 183 0 0.48181163 12.06882334 -2 414 65 0 0.48181163 12.06882334 -2 415 64 0 0.48181163 12.06882334 -6 392 65 0 -6 393 64 0 -0 - -0101000 -+364 0 -372 0 * -Ve -0.000140263357290589 -11.7544106883045 -1.87810382833014 -0.947904141375154 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 184 0 0.19391992 2.76255331 -2 416 65 0 0.19391992 2.76255331 -2 417 55 0 0.19391992 2.76255331 -6 394 65 0 -6 395 55 0 -0 - -0101000 -+404 0 -362 0 * -Ve -0.000101407302309408 -11.7230037068433 -1.87519299652087 -0.954539726978555 -0 0 - -0101101 -* -Ed - 0.000101407302309408 1 1 0 -1 185 0 0 0.09090909 -2 418 65 0 0 0.09090909 -2 419 25 0 0 0.09090909 -6 396 65 0 -6 397 25 0 -0 - -0101000 -+362 0 -360 0 * -Ve -9.27684451264632e-005 -11.7107019725161 -1.87402943667788 -0.957177203399168 -0 0 - -0101101 -* -Ed - 4.17981543071232e-005 1 1 0 -1 186 0 0.09090909 0.109634221545924 -2 420 65 0 0.09090909 0.109634221545924 -2 421 25 0 0.09090909 0.109634221545924 -6 398 65 0 -6 399 25 0 -0 - -0101000 -+360 0 -358 0 * -Ve -0.00500706970905351 -11.6780822159487 -1.8710899238748 -0.963788802911312 -0 0 - -0101101 -* -Ed - 9.27684451264632e-005 1 1 0 -1 186 0 0.109634221545924 0.18181818 -2 422 65 0 0.109634221545924 0.18181818 -2 423 25 0 0.109634221545924 0.18181818 -6 400 65 0 -6 401 25 0 -0 - -0101000 -+358 0 -356 0 * -Ve -0.00500707186928732 -11.6689018442431 -1.87027896633348 -0.965602735826667 -0 0 - -0101101 -* -Ed - 0.00500706970905351 1 1 0 -1 187 0 0.6 0.633484377590191 -2 424 25 0 0.6 0.633484377590191 -2 425 65 0 0.6 0.633484377590191 -6 402 65 0 -6 403 25 0 -0 - -0101000 -+354 0 -356 0 * -Ve -0.00500707186928732 -11.6098700549364 -1.86430064821477 -0.978826260728255 -0 0 - -0101101 -* -Ed - 0.00500707186928732 1 1 0 -1 188 0 0.27272727 0.36363636 -2 426 65 0 0.27272727 0.36363636 -2 427 25 0 0.27272727 0.36363636 -6 404 65 0 -6 405 25 0 -0 - -0101000 -+354 0 -352 0 * -Ve -0.000385603613661858 -11.579795765572 -1.86090292936362 -0.98623107103987 -0 0 - -0101101 -* -Ed - 0.000385603613661858 1 1 0 -1 189 0 0.48389543156306 0.517146533720261 -2 428 25 0 0.48389543156306 0.517146533720261 -2 429 65 0 0.48389543156306 0.517146533720261 -6 406 65 0 -6 407 25 0 -0 - -0101000 -+350 0 -352 0 * -Ve -0.000329071709881571 -11.5686247880199 -1.85961621804369 -0.989014949325949 -0 0 - -0101101 -* -Ed - 0.000329071709881571 1 1 0 -1 189 0 0.470926189373896 0.48389543156306 -2 430 25 0 0.470926189373896 0.48389543156306 -2 431 65 0 0.470926189373896 0.48389543156306 -6 408 65 0 -6 409 25 0 -0 - -0101000 -+348 0 -350 0 * -Ve -0.000281828856701735 -11.5253852575828 -1.85416377756769 -1.00069150837767 -0 0 - -0101101 -* -Ed - 0.000181954506420099 1 1 0 -1 190 0 0.54545455 0.598276846616651 -2 432 65 0 0.54545455 0.598276846616651 -2 433 25 0 0.54545455 0.598276846616651 -6 410 65 0 -6 411 25 0 -0 - -0101000 -+348 0 -346 0 * -Ve -0.000408127210198134 -11.4896394008981 -1.84878792653291 -1.0120133489902 -0 0 - -0101101 -* -Ed - 0.000281828856701735 1 1 0 -1 191 0 0.384100626478303 0.4 -2 434 25 0 0.384100626478303 0.4 -2 435 65 0 0.384100626478303 0.4 -6 412 65 0 -6 413 25 0 -0 - -0101000 -+344 0 -346 0 * -Ve -0.00045740479481812 -11.4383603506965 -1.83998407337006 -1.03017742118867 -0 0 - -0101101 -* -Ed - 0.000408127210198134 1 1 0 -1 192 0 0.63636364 0.72727273 -2 436 65 0 0.63636364 0.72727273 -2 437 25 0 0.63636364 0.72727273 -6 414 65 0 -6 415 25 0 -0 - -0101000 -+344 0 -342 0 * -Ve -0.000471205402521396 -11.3805975561415 -1.82703782145984 -1.05608161268227 -0 0 - -0101101 -* -Ed - 0.00045740479481812 1 1 0 -1 193 0 0.72727273 0.81818182 -2 438 65 0 0.72727273 0.81818182 -2 439 25 0 0.72727273 0.81818182 -6 416 65 0 -6 417 25 0 -0 - -0101000 -+342 0 -340 0 * -Ve -0.000471205402521396 -11.3208385076288 -1.80819404686211 -1.09222199876256 -0 0 - -0101101 -* -Ed - 0.000471205402521396 1 1 0 -1 191 0 0.274729071771431 0.321555342341725 -2 440 25 0 0.274729071771431 0.321555342341725 -2 441 65 0 0.274729071771431 0.321555342341725 -6 418 65 0 -6 419 25 0 -0 - -0101000 -+338 0 -340 0 * -Ve -0.000217287485690353 -11.2476412635365 -1.7665596569946 -1.16638885628345 -0 0 - -0101101 -* -Ed - 0.000217287485690353 1 1 0 -1 191 0 0.2 0.274729071771431 -2 442 25 0 0.2 0.274729071771431 -2 443 65 0 0.2 0.274729071771431 -6 420 65 0 -6 421 25 0 -0 - -0101000 -+336 0 -338 0 * -Ed - 4.40501992575535e-006 1 1 0 -1 194 0 0.983770113025408 1 -2 444 65 0 0.983770113025408 1 -2 445 25 0 0.983770113025408 1 -6 422 65 0 -6 423 25 0 -0 - -0101000 -+336 0 -364 0 * -Wi - -0101000 -+363 0 -367 0 +361 0 +359 0 +357 0 +355 0 -353 0 +351 0 -349 0 -347 0 -+345 0 -343 0 +341 0 +339 0 -337 0 -335 0 +334 0 * -Fa -0 1.00000004749745e-010 65 0 -2 65 -0101000 -+333 0 * -Ve -0.000140263357290589 -13.0936999045215 -1.92471414973264 -0.831009732620803 -0 0 - -0101101 -* -Ed - 0.000140263357290589 1 1 0 -1 195 0 0 0.590722431411216 -2 446 25 0 0 0.590722431411216 -2 447 55 0 0 0.590722431411216 -6 424 25 0 -6 425 55 0 -0 - -0101000 -+362 0 -331 0 * -Ve -0.000133247962740653 -14.0214149684814 -1.92384089900254 -0.832597729805518 -0 0 - -0101101 -* -Ed - 0.000133247962740653 1 1 0 -1 195 0 0.590722431411216 1 -2 448 25 0 0.590722431411216 1 -2 449 55 0 0.590722431411216 1 -6 426 25 0 -6 427 55 0 -0 - -0101000 -+331 0 -329 0 * -Ve -0.000375590509557574 -15.4046111730498 -1.88092150688822 -0.938194333874812 -0 0 - -0101101 -* -Ed - 6.40464187607385e-005 1 1 0 -1 196 0 0.66666667 1 -2 450 62 0 0.66666667 1 -2 451 25 0 0.66666667 1 -6 428 62 0 -0 - -0101000 -+327 0 -329 0 * -Ve -0.000375590509557574 -16.7625925747914 -1.75437077638359 -1.18146657566026 -0 0 - -0101101 -* -Ed - 0.000375590509557574 1 1 0 -1 197 0 0.408181166309187 0.834081581640313 -2 452 25 0 0.408181166309187 0.834081581640313 -2 453 62 0 0.408181166309187 0.834081581640313 -6 429 62 0 -0 - -0101000 -+327 0 -325 0 * -Ve -0.000359481754341642 -17.2459916253906 -1.67360683680456 -1.30407191862759 -0 0 - -0101101 -* -Ed - 0.000234300896294736 1 1 0 -1 197 0 0.834081581640313 1 -2 454 25 0 0.834081581640313 1 -2 455 62 0 0.834081581640313 1 -6 430 25 0 -6 431 62 0 -0 - -0101000 -+325 0 -323 0 * -Ed - 1e-007 1 1 0 -1 198 0 0 0.22601628 -2 456 25 0 0 0.22601628 -2 457 26 0 0 0.22601628 -6 432 25 0 -6 433 26 0 -0 - -0101000 -+323 0 -564 0 * -Ed - 1e-007 1 1 0 -1 199 0 0 1 -2 458 25 0 0 1 -2 459 66 0 0 1 -6 434 25 0 -6 435 66 0 -0 - -0101000 -+566 0 -410 0 * -Ed - 1e-007 1 1 0 -1 200 0 0.69078273 1 -2 460 25 0 0.69078273 1 -2 461 26 0 0.69078273 1 -6 436 25 0 -6 437 26 0 -0 - -0101000 -+412 0 -364 0 * -Wi - -0101000 --334 0 +335 0 +337 0 -339 0 -341 0 +343 0 -345 0 +347 0 +349 0 -351 0 -+353 0 -355 0 -357 0 -359 0 +330 0 +328 0 -326 0 +324 0 +322 0 +321 0 -+563 0 +320 0 -409 0 +319 0 * -Fa -0 1.00000004749745e-010 25 0 -2 25 -0101000 -+318 0 * -Ve -0.000671251581973616 -11.2339734254601 1.75393602555749 -1.1875290010296 -0 0 - -0101101 -* -Ve -0.00074309734964126 -11.2233176562604 1.73904489821927 -1.21174266791124 -0 0 - -0101101 -* -Ed - 0.000671251581973616 1 1 0 -1 201 0 0 0.0365494431488469 -2 462 26 0 0 0.0365494431488469 -2 463 67 0 0 0.0365494431488469 -6 438 26 0 -6 439 67 0 -0 - -0101000 -+316 0 -315 0 * -Ve -0.00074309734964126 -11.2195102188226 1.72864961215316 -1.22820864056359 -0 0 - -0101101 -* -Ed - 0.00074309734964126 1 1 0 -1 201 0 0.0365494431488469 0.0622860270214097 -2 464 26 0 0.0365494431488469 0.0622860270214097 -2 465 67 0 0.0365494431488469 0.0622860270214097 -6 440 26 0 -6 441 67 0 -0 - -0101000 -+315 0 -313 0 * -Ve -0.000651668334170702 -11.2233146680788 1.70357064691526 -1.26655421965809 -0 0 - -0101101 -* -Ed - 0.000651668334170702 1 1 0 -1 201 0 0.0622860270214097 0.125 -2 466 26 0 0.0622860270214097 0.125 -2 467 67 0 0.0622860270214097 0.125 -6 442 26 0 -6 443 67 0 -0 - -0101000 -+313 0 -311 0 * -Ve -0.000654369090545537 -11.243154316743 1.68198845915121 -1.29810493339306 -0 0 - -0101101 -* -Ed - 0.000197711893495428 1 1 0 -1 202 0 0.80952381 0.85714286 -2 468 67 0 0.80952381 0.85714286 -2 469 26 0 0.80952381 0.85714286 -6 444 26 0 -6 445 67 0 -0 - -0101000 -+309 0 -311 0 * -Ve -0.000654369090545537 -11.274822965922 1.6653368975719 -1.32159590159368 -0 0 - -0101101 -* -Ed - 0.000654369090545537 1 1 0 -1 203 0 0.76190476 0.80952381 -2 470 67 0 0.76190476 0.80952381 -2 471 26 0 0.76190476 0.80952381 -6 446 26 0 -6 447 67 0 -0 - -0101000 -+307 0 -309 0 * -Ve -0.000625455865781104 -11.3057257984163 1.65529957503836 -1.33541257273752 -0 0 - -0101101 -* -Ed - 0.000625455865781104 1 1 0 -1 204 0 0.71428571 0.76190476 -2 472 67 0 0.71428571 0.76190476 -2 473 26 0 0.71428571 0.76190476 -6 448 26 0 -6 449 67 0 -0 - -0101000 -+305 0 -307 0 * -Ve -0.000289457499681577 -11.3654194549661 1.64208465945882 -1.3532208048712 -0 0 - -0101101 -* -Ed - 0.000237886977448535 1 1 0 -1 205 0 0.66666667 0.71428571 -2 474 67 0 0.66666667 0.71428571 -2 475 26 0 0.66666667 0.71428571 -6 450 26 0 -6 451 67 0 -0 - -0101000 -+303 0 -305 0 * -Ve -0.000289457499681577 -11.4940513042487 1.62457606258802 -1.3761571297346 -0 0 - -0101101 -* -Ed - 0.000289457499681577 1 1 0 -1 206 0 0.61904762 0.66666667 -2 476 67 0 0.61904762 0.66666667 -2 477 26 0 0.61904762 0.66666667 -6 452 26 0 -6 453 67 0 -0 - -0101000 -+301 0 -303 0 * -Ve -0.000132421291554071 -11.5380210330651 1.6201411438256 -1.3818514383236 -0 0 - -0101101 -* -Ed - 0.000132421291554071 1 1 0 -1 207 0 0.586390813604534 0.61904762 -2 478 67 0 0.586390813604534 0.61904762 -2 479 26 0 0.586390813604534 0.61904762 -6 454 26 0 -6 455 67 0 -0 - -0101000 -+299 0 -301 0 * -Ve -0.000359009815624528 -11.5701474980193 1.61706632895907 -1.38576981734771 -0 0 - -0101101 -* -Ed - 0.000129387579192774 1 1 0 -1 207 0 0.57142857 0.586390813604534 -2 480 67 0 0.57142857 0.586390813604534 -2 481 26 0 0.57142857 0.586390813604534 -6 456 26 0 -6 457 67 0 -0 - -0101000 -+297 0 -299 0 * -Ve -0.000359009815624528 -11.6467164821864 1.60959413771122 -1.39521556909743 -0 0 - -0101101 -* -Ed - 0.000359009815624528 1 1 0 -1 208 0 0.52380952 0.57142857 -2 482 67 0 0.52380952 0.57142857 -2 483 26 0 0.52380952 0.57142857 -6 458 26 0 -6 459 67 0 -0 - -0101000 -+295 0 -297 0 * -Ve -0.000271315011288352 -11.7279810431541 1.60101691469853 -1.40592225547907 -0 0 - -0101101 -* -Ed - 0.000271315011288352 1 1 0 -1 209 0 0.485827660893864 0.52380952 -2 484 67 0 0.485827660893864 0.52380952 -2 485 26 0 0.485827660893864 0.52380952 -6 460 26 0 -6 461 67 0 -0 - -0101000 -+293 0 -295 0 * -Ve -4.31644510999595e-005 -11.7609747359659 1.59742040519323 -1.41037135508933 -0 0 - -0101101 -* -Ed - 3.56630000502031e-005 1 1 0 -1 209 0 0.47619048 0.485827660893864 -2 486 67 0 0.47619048 0.485827660893864 -2 487 26 0 0.47619048 0.485827660893864 -6 462 26 0 -6 463 67 0 -0 - -0101000 -+291 0 -293 0 * -Ve -0.00013685359452256 -11.8043180412084 1.59269241380991 -1.41618054122364 -0 0 - -0101101 -* -Ed - 4.31644510999595e-005 1 1 0 -1 210 0 0.463237442359126 0.47619048 -2 488 67 0 0.463237442359126 0.47619048 -2 489 26 0 0.463237442359126 0.47619048 -6 464 26 0 -6 465 67 0 -0 - -0101000 -+289 0 -291 0 * -Ve -0.000356385759575974 -11.8750928872913 1.58529487719724 -1.4251748313798 -0 0 - -0101101 -* -Ed - 0.00013685359452256 1 1 0 -1 210 0 0.42857143 0.463237442359126 -2 490 67 0 0.42857143 0.463237442359126 -2 491 26 0 0.42857143 0.463237442359126 -6 466 26 0 -6 467 67 0 -0 - -0101000 -+287 0 -289 0 * -Ve -0.000356385759575974 -12.2620489025649 1.55544164364287 -1.46033225805902 -0 0 - -0101101 -* -Ed - 0.000356385759575974 1 1 0 -1 211 0 0.38095238 0.42857143 -2 492 67 0 0.38095238 0.42857143 -2 493 26 0 0.38095238 0.42857143 -6 468 26 0 -6 469 67 0 -0 - -0101000 -+285 0 -287 0 * -Ve -0.00035414380980724 -12.4978731391223 1.54304758553291 -1.47438192864982 -0 0 - -0101101 -* -Ed - 0.00035414380980724 1 1 0 -1 212 0 0.33333333 0.38095238 -2 494 67 0 0.33333333 0.38095238 -2 495 26 0 0.33333333 0.38095238 -6 470 26 0 -6 471 67 0 -0 - -0101000 -+283 0 -285 0 * -Ve -9.648333032716e-006 -12.5143853778561 1.54225075040349 -1.47527481543679 -0 0 - -0101101 -* -Ed - 7.23937869604308e-006 1 1 0 -1 213 0 0.306434487924756 0.33333333 -2 496 67 0 0.306434487924756 0.33333333 -2 497 26 0 0.306434487924756 0.33333333 -6 472 26 0 -6 473 67 0 -0 - -0101000 -+281 0 -283 0 * -Ve -0.000235164344341272 -12.5372927826847 1.54114785217358 -1.47650854790917 -0 0 - -0101101 -* -Ed - 9.648333032716e-006 1 1 0 -1 213 0 0.28571429 0.306434487924756 -2 498 67 0 0.28571429 0.306434487924756 -2 499 26 0 0.28571429 0.306434487924756 -6 474 26 0 -6 475 67 0 -0 - -0101000 -+279 0 -281 0 * -Ve -0.000235164344341272 -12.7343557009245 1.53139827017334 -1.48733192218905 -0 0 - -0101101 -* -Ed - 0.000235164344341272 1 1 0 -1 214 0 0.23809524 0.28571429 -2 500 67 0 0.23809524 0.28571429 -2 501 26 0 0.23809524 0.28571429 -6 476 26 0 -6 477 67 0 -0 - -0101000 -+277 0 -279 0 * -Ve -0.000212456327581831 -12.9120964228236 1.52198792279919 -1.49763971953495 -0 0 - -0101101 -* -Ed - 0.000212456327581831 1 1 0 -1 215 0 0.205761069651825 0.23809524 -2 502 67 0 0.205761069651825 0.23809524 -2 503 26 0 0.205761069651825 0.23809524 -6 478 26 0 -6 479 67 0 -0 - -0101000 -+275 0 -277 0 * -Ve -4.44257898034483e-005 -13.0297316574771 1.51557535698256 -1.50458789742418 -0 0 - -0101101 -* -Ed - 4.08726030426305e-005 1 1 0 -1 215 0 0.19047619 0.205761069651825 -2 504 67 0 0.19047619 0.205761069651825 -2 505 26 0 0.19047619 0.205761069651825 -6 480 26 0 -6 481 67 0 -0 - -0101000 -+273 0 -275 0 * -Ve -4.44257898034483e-005 -13.1505415149467 1.50902129957732 -1.51162015009139 -0 0 - -0101101 -* -Ed - 4.44257898034483e-005 1 1 0 -1 216 0 0.16442722501096 0.19047619 -2 506 67 0 0.16442722501096 0.19047619 -2 507 26 0 0.16442722501096 0.19047619 -6 482 26 0 -6 483 67 0 -0 - -0101000 -+271 0 -273 0 * -Ve -0.000370128948419076 -13.2067968429158 1.50604612550568 -1.51478693835905 -0 0 - -0101101 -* -Ed - 2.32185668293449e-005 1 1 0 -1 216 0 0.14285714 0.16442722501096 -2 508 67 0 0.14285714 0.16442722501096 -2 509 26 0 0.14285714 0.16442722501096 -6 484 26 0 -6 485 67 0 -0 - -0101000 -+269 0 -271 0 * -Ve -0.000370128948419076 -13.6011839966343 1.48832080334864 -1.53331528929195 -0 0 - -0101101 -* -Ed - 0.000370128948419076 1 1 0 -1 217 0 0.0952381 0.14285714 -2 510 67 0 0.0952381 0.14285714 -2 511 26 0 0.0952381 0.14285714 -6 486 26 0 -6 487 67 0 -0 - -0101000 -+267 0 -269 0 * -Ve -0.00034899808757336 -14.1656597628408 1.48194751707815 -1.53942524734664 -0 0 - -0101101 -* -Ed - 0.00034899808757336 1 1 0 -1 218 0 0.916393161028006 0.986178862274954 -2 512 26 0 0.916393161028006 0.986178862274954 -2 513 67 0 0.916393161028006 0.986178862274954 -6 488 26 0 -6 489 67 0 -0 - -0101000 -+267 0 -265 0 * -Ve -0.00047521807689407 -14.2745160980031 1.48462395626585 -1.53651034460532 -0 0 - -0101101 -* -Ed - 7.40685212965215e-005 1 1 0 -1 218 0 0.986178862274954 1 -2 514 26 0 0.986178862274954 1 -2 515 67 0 0.986178862274954 1 -6 490 26 0 -6 491 67 0 -0 - -0101000 -+265 0 -263 0 * -Ve -0.00047521807689407 -14.8705157989187 1.51573582377946 -1.50252353347842 -0 0 - -0101101 -* -Ed - 0.00047521807689407 1 1 0 -1 219 0 0 0.180106373495116 -2 516 26 0 0 0.180106373495116 -2 517 68 0 0 0.180106373495116 -6 492 26 0 -6 493 68 0 -0 - -0101000 -+263 0 -261 0 * -Ve -0.000440814061142981 -15.2409733425777 1.54412476865888 -1.47034875277143 -0 0 - -0101101 -* -Ed - 0.000440814061142981 1 1 0 -1 220 0 0.66666667 0.83333333 -2 518 68 0 0.66666667 0.83333333 -2 519 26 0 0.66666667 0.83333333 -6 494 26 0 -6 495 68 0 -0 - -0101000 -+259 0 -261 0 * -Ve -0.000421613594391704 -15.3885361745655 1.55624636724467 -1.45620806184295 -0 0 - -0101101 -* -Ed - 0.000421613594391704 1 1 0 -1 221 0 0.5 0.66666667 -2 520 68 0 0.5 0.66666667 -2 521 26 0 0.5 0.66666667 -6 496 26 0 -6 497 68 0 -0 - -0101000 -+257 0 -259 0 * -Ve -0.000253012788190999 -15.6256429585636 1.57605589016733 -1.43254462666716 -0 0 - -0101101 -* -Ed - 0.000253012788190999 1 1 0 -1 222 0 0.404244838774849 0.5 -2 522 68 0 0.404244838774849 0.5 -2 523 26 0 0.404244838774849 0.5 -6 498 26 0 -6 499 68 0 -0 - -0101000 -+255 0 -257 0 * -Ve -3.67902719550172e-005 -15.7556462799591 1.58687434340459 -1.41931422068519 -0 0 - -0101101 -* -Ed - 3.34990082536399e-005 1 1 0 -1 222 0 0.33333333 0.404244838774849 -2 524 68 0 0.33333333 0.404244838774849 -2 525 26 0 0.33333333 0.404244838774849 -6 500 26 0 -6 501 68 0 -0 - -0101000 -+253 0 -255 0 * -Ve -0.000359520315373071 -15.9164082326414 1.59998586197956 -1.40297488495823 -0 0 - -0101101 -* -Ed - 3.67902719550172e-005 1 1 0 -1 223 0 0.297103147762731 0.33333333 -2 526 68 0 0.297103147762731 0.33333333 -2 527 26 0 0.297103147762731 0.33333333 -6 502 26 0 -6 503 68 0 -0 - -0101000 -+251 0 -253 0 * -Ve -0.000359520315382276 -16.4125111176284 1.63640196705886 -1.3557196746019 -0 0 - -0101101 -* -Ed - 0.000359520315373071 1 1 0 -1 223 0 0.16666667 0.297103147762731 -2 528 68 0 0.16666667 0.297103147762731 -2 529 26 0 0.16666667 0.297103147762731 -6 504 26 0 -6 505 68 0 -0 - -0101000 -+249 0 -251 0 * -Ve -0.000359520315382276 -17.2459916335156 1.67360538724199 -1.3040721061901 -0 0 - -0101101 -* -Ed - 0.000359520315382276 1 1 0 -1 224 0 0 0.16666667 -2 530 68 0 0 0.16666667 -2 531 26 0 0 0.16666667 -6 506 26 0 -6 507 68 0 -0 - -0101000 -+247 0 -249 0 * -Ed - 1e-007 1 1 0 -1 225 0 0 0.22601628 -2 532 26 0 0 0.22601628 -2 533 27 0 0 0.22601628 -6 508 26 0 -6 509 27 0 -0 - -0101000 -+247 0 -562 0 * -Ve -0.000359481754343562 -16.4125111362741 -1.63640330747186 -1.35571949953735 -0 0 - -0101101 -* -Ed - 0.000359481754341642 1 1 0 -1 226 0 0.83333333 1 -2 534 63 0 0.83333333 1 -2 535 26 0 0.83333333 1 -6 510 26 0 -6 511 63 0 -0 - -0101000 -+244 0 -323 0 * -Ve -0.000359481754343562 -15.9164083652715 -1.59998716778997 -1.40297469633251 -0 0 - -0101101 -* -Ed - 0.000359481754343562 1 1 0 -1 227 0 0.702896862227506 0.83333333 -2 536 63 0 0.702896862227506 0.83333333 -2 537 26 0 0.702896862227506 0.83333333 -6 512 26 0 -6 513 63 0 -0 - -0101000 -+242 0 -244 0 * -Ve -3.6730125388627e-005 -15.7556463974262 -1.58687563239034 -1.41931403490338 -0 0 - -0101101 -* -Ed - 3.6730125388627e-005 1 1 0 -1 227 0 0.66666667 0.702896862227506 -2 538 63 0 0.66666667 0.702896862227506 -2 539 26 0 0.66666667 0.702896862227506 -6 514 26 0 -6 515 63 0 -0 - -0101000 -+240 0 -242 0 * -Ve -0.000253065444603851 -15.6256430914078 -1.57605716395364 -1.43254444077483 -0 0 - -0101101 -* -Ed - 3.34395273489325e-005 1 1 0 -1 228 0 0.59575517380927 0.66666667 -2 540 63 0 0.59575517380927 0.66666667 -2 541 26 0 0.59575517380927 0.66666667 -6 516 26 0 -6 517 63 0 -0 - -0101000 -+238 0 -240 0 * -Ve -0.000421664860833308 -15.3885363223517 -1.55624760869252 -1.45620788292268 -0 0 - -0101101 -* -Ed - 0.000253065444603851 1 1 0 -1 228 0 0.5 0.59575517380927 -2 542 63 0 0.5 0.59575517380927 -2 543 26 0 0.5 0.59575517380927 -6 518 26 0 -6 519 63 0 -0 - -0101000 -+236 0 -238 0 * -Ve -0.000440860963554178 -15.2409735004748 -1.54412598780222 -1.47034857787681 -0 0 - -0101101 -* -Ed - 0.000421664860833308 1 1 0 -1 229 0 0.33333333 0.5 -2 544 63 0 0.33333333 0.5 -2 545 26 0 0.33333333 0.5 -6 520 26 0 -6 521 63 0 -0 - -0101000 -+234 0 -236 0 * -Ve -0.000475178437454844 -14.8705159773675 -1.51573699413999 -1.50252336583399 -0 0 - -0101101 -* -Ed - 0.000440860963554178 1 1 0 -1 230 0 0.16666667 0.33333333 -2 546 63 0 0.16666667 0.33333333 -2 547 26 0 0.16666667 0.33333333 -6 522 26 0 -6 523 63 0 -0 - -0101000 -+232 0 -234 0 * -Ve -0.000475178437454844 -14.2745163580031 -1.4846250675159 -1.53651017760531 -0 0 - -0101101 -* -Ed - 0.000475178437454844 1 1 0 -1 231 0 0.819893620897672 1 -2 548 26 0 0.819893620897672 1 -2 549 63 0 0.819893620897672 1 -6 524 26 0 -6 525 63 0 -0 - -0101000 -+232 0 -230 0 * -Ve -1.2904095006635e-005 -14.2235895153933 -1.48319986742028 -1.53805637621256 -0 0 - -0101101 -* -Ed - 1.2904095006635e-005 1 1 0 -1 232 0 0.95238095 1 -2 550 64 0 0.95238095 1 -2 551 26 0 0.95238095 1 -6 526 26 0 -6 527 64 0 -0 - -0101000 -+228 0 -230 0 * -Ve -0.000173983333479764 -13.9578228007084 -1.4807103422503 -1.54093210274145 -0 0 - -0101101 -* -Ed - 1.17788422361118e-005 1 1 0 -1 233 0 0.929879242695092 0.95238095 -2 552 64 0 0.929879242695092 0.95238095 -2 553 26 0 0.929879242695092 0.95238095 -6 528 26 0 -6 529 64 0 -0 - -0101000 -+226 0 -228 0 * -Ve -0.000350170796573355 -13.6299341892202 -1.48725405550496 -1.53441086611513 -0 0 - -0101101 -* -Ed - 0.000173983333479764 1 1 0 -1 234 0 0.125 0.177182002986322 -2 554 26 0 0.125 0.177182002986322 -2 555 64 0 0.125 0.177182002986322 -6 530 26 0 -6 531 64 0 -0 - -0101000 -+226 0 -224 0 * -Ve -0.000350170796573355 -13.2369433548438 -1.50453569894826 -1.51638897342284 -0 0 - -0101101 -* -Ed - 0.000350170796573355 1 1 0 -1 235 0 0.85714286 0.9047619 -2 556 64 0 0.85714286 0.9047619 -2 557 26 0 0.85714286 0.9047619 -6 532 26 0 -6 533 64 0 -0 - -0101000 -+222 0 -224 0 * -Ve -0.000278611689141754 -13.0409575546936 -1.51495712080103 -1.50525514791496 -0 0 - -0101101 -* -Ed - 0.000278611689141754 1 1 0 -1 236 0 0.80952381 0.85714286 -2 558 64 0 0.80952381 0.85714286 -2 559 26 0 0.80952381 0.85714286 -6 534 26 0 -6 535 64 0 -0 - -0101000 -+220 0 -222 0 * -Ve -0.000297645042226027 -13.0022709656819 -1.51706751062374 -1.50297788728507 -0 0 - -0101101 -* -Ed - 1.34055409172826e-005 1 1 0 -1 237 0 0.804942507297722 0.80952381 -2 560 64 0 0.804942507297722 0.80952381 -2 561 26 0 0.804942507297722 0.80952381 -6 536 26 0 -6 537 64 0 -0 - -0101000 -+218 0 -220 0 * -Ve -0.000317283770468062 -12.7665063849933 -1.52971109318622 -1.48919178752468 -0 0 - -0101101 -* -Ed - 0.000297645042226027 1 1 0 -1 237 0 0.76190476 0.804942507297722 -2 562 64 0 0.76190476 0.804942507297722 -2 563 26 0 0.76190476 0.804942507297722 -6 538 26 0 -6 539 64 0 -0 - -0101000 -+216 0 -218 0 * -Ve -0.000317283770468062 -12.5506040056185 -1.54050897098862 -1.47722330575687 -0 0 - -0101101 -* -Ed - 0.000317283770468062 1 1 0 -1 238 0 0.71428571 0.76190476 -2 564 64 0 0.71428571 0.76190476 -2 565 26 0 0.71428571 0.76190476 -6 540 26 0 -6 541 64 0 -0 - -0101000 -+214 0 -216 0 * -Ve -1.73848319992385e-005 -12.5242477717419 -1.54177759031217 -1.47580533019563 -0 0 - -0101101 -* -Ed - 1.73848319992385e-005 1 1 0 -1 239 0 0.688716234519205 0.71428571 -2 566 64 0 0.688716234519205 0.71428571 -2 567 26 0 0.688716234519205 0.71428571 -6 542 26 0 -6 543 64 0 -0 - -0101000 -+212 0 -214 0 * -Ve -0.000100025625696305 -12.5015213107503 -1.54287260379372 -1.47457893519828 -0 0 - -0101101 -* -Ed - 8.14215225946442e-006 1 1 0 -1 239 0 0.66666667 0.688716234519205 -2 568 64 0 0.66666667 0.688716234519205 -2 569 26 0 0.66666667 0.688716234519205 -6 544 26 0 -6 545 64 0 -0 - -0101000 -+210 0 -212 0 * -Ve -0.00037758137410975 -12.2568192726063 -1.55566787566868 -1.46007545322656 -0 0 - -0101101 -* -Ed - 0.000100025625696305 1 1 0 -1 240 0 0.61904762 0.66666667 -2 570 64 0 0.61904762 0.66666667 -2 571 26 0 0.61904762 0.66666667 -6 546 26 0 -6 547 64 0 -0 - -0101000 -+208 0 -210 0 * -Ve -0.00037758137410975 -11.8715138817384 -1.58570854653159 -1.424674981036 -0 0 - -0101101 -* -Ed - 0.00037758137410975 1 1 0 -1 241 0 0.406675816552983 0.4815205691812 -2 572 26 0 0.406675816552983 0.4815205691812 -2 573 64 0 0.406675816552983 0.4815205691812 -6 548 26 0 -6 549 64 0 -0 - -0101000 -+208 0 -206 0 * -Ve -0.000377580903653318 -11.7578455409638 -1.59775711123781 -1.40995683754297 -0 0 - -0101101 -* -Ed - 0.000377580903653318 1 1 0 -1 242 0 0.52380952 0.57142857 -2 574 64 0 0.52380952 0.57142857 -2 575 26 0 0.52380952 0.57142857 -6 550 26 0 -6 551 64 0 -0 - -0101000 -+204 0 -206 0 * -Ve -0.000105494087003171 -11.7460296980906 -1.59904800056319 -1.4083623372769 -0 0 - -0101101 -* -Ed - 5.50937276609768e-006 1 1 0 -1 243 0 0.520588390320385 0.52380952 -2 576 64 0 0.520588390320385 0.52380952 -2 577 26 0 0.520588390320385 0.52380952 -6 552 26 0 -6 553 64 0 -0 - -0101000 -+202 0 -204 0 * -Ve -0.000105494087003171 -11.6440291192181 -1.60990510560288 -1.39482515131581 -0 0 - -0101101 -* -Ed - 0.000105494087003171 1 1 0 -1 243 0 0.47619048 0.520588390320385 -2 578 64 0 0.47619048 0.520588390320385 -2 579 26 0 0.47619048 0.520588390320385 -6 554 26 0 -6 555 64 0 -0 - -0101000 -+200 0 -202 0 * -Ve -0.000100192013810918 -11.5921035220023 -1.61502206570273 -1.38836344529165 -0 0 - -0101101 -* -Ed - 0.000100192013810918 1 1 0 -1 244 0 0.439226064907278 0.47619048 -2 580 64 0 0.439226064907278 0.47619048 -2 581 26 0 0.439226064907278 0.47619048 -6 556 26 0 -6 557 64 0 -0 - -0101000 -+198 0 -200 0 * -Ve -5.98280818217765e-005 -11.5677514756082 -1.61732692438244 -1.3854388743982 -0 0 - -0101101 -* -Ed - 3.64807638922953e-005 1 1 0 -1 244 0 0.42857143 0.439226064907278 -2 582 64 0 0.42857143 0.439226064907278 -2 583 26 0 0.42857143 0.439226064907278 -6 558 26 0 -6 559 64 0 -0 - -0101000 -+196 0 -198 0 * -Ve -5.98280818217765e-005 -11.5173309615065 -1.62216470532931 -1.37925932234333 -0 0 - -0101101 -* -Ed - 5.98280818217765e-005 1 1 0 -1 245 0 0.400518874948611 0.42857143 -2 584 64 0 0.400518874948611 0.42857143 -2 585 26 0 0.400518874948611 0.42857143 -6 560 26 0 -6 561 64 0 -0 - -0101000 -+194 0 -196 0 * -Ve -0.000314030203343478 -11.4919570406201 -1.62478166592107 -1.37589307800223 -0 0 - -0101101 -* -Ed - 5.07286817038082e-005 1 1 0 -1 245 0 0.38095238 0.400518874948611 -2 586 64 0 0.38095238 0.400518874948611 -2 587 26 0 0.38095238 0.400518874948611 -6 562 26 0 -6 563 64 0 -0 - -0101000 -+192 0 -194 0 * -Ve -0.000419642959222465 -11.3639897483438 -1.64238388482431 -1.35282295016919 -0 0 - -0101101 -* -Ed - 0.000314030203343478 1 1 0 -1 246 0 0.33333333 0.38095238 -2 588 64 0 0.33333333 0.38095238 -2 589 26 0 0.33333333 0.38095238 -6 564 26 0 -6 565 64 0 -0 - -0101000 -+190 0 -192 0 * -Ve -0.000419642959222465 -11.3046101155787 -1.65560031280696 -1.33500311111335 -0 0 - -0101101 -* -Ed - 0.000419642959222465 1 1 0 -1 247 0 0.28571429 0.33333333 -2 590 64 0 0.28571429 0.33333333 -2 591 26 0 0.28571429 0.33333333 -6 566 26 0 -6 567 64 0 -0 - -0101000 -+188 0 -190 0 * -Ve -0.000121143108219521 -11.2810233886257 -1.66292486149133 -1.32494032340658 -0 0 - -0101101 -* -Ed - 0.000110327981790704 1 1 0 -1 248 0 0.23809524 0.28571429 -2 592 64 0 0.23809524 0.28571429 -2 593 26 0 0.23809524 0.28571429 -6 568 26 0 -6 569 64 0 -0 - -0101000 -+186 0 -188 0 * -Ve -0.000121143108219521 -11.2578643340571 -1.672842776302 -1.31109607646477 -0 0 - -0101101 -* -Ed - 0.000121143108219521 1 1 0 -1 249 0 0.205967571246725 0.23809524 -2 594 64 0 0.205967571246725 0.23809524 -2 595 26 0 0.205967571246725 0.23809524 -6 570 26 0 -6 571 64 0 -0 - -0101000 -+184 0 -186 0 * -Ve -0.000698186302660722 -11.2480738321926 -1.67852313843327 -1.30305412763939 -0 0 - -0101101 -* -Ed - 6.28838705958967e-005 1 1 0 -1 250 0 0.875 0.885661287061455 -2 596 26 0 0.875 0.885661287061455 -2 597 64 0 0.875 0.885661287061455 -6 572 26 0 -6 573 64 0 -0 - -0101000 -+184 0 -182 0 * -Ve -0.000698186302660722 -11.2229519281623 -1.70382745794937 -1.26617213152758 -0 0 - -0101101 -* -Ed - 0.000698186302660722 1 1 0 -1 250 0 0.885661287061455 0.926804154260539 -2 598 26 0 0.885661287061455 0.926804154260539 -2 599 64 0 0.885661287061455 0.926804154260539 -6 574 26 0 -6 575 64 0 -0 - -0101000 -+182 0 -180 0 * -Ve -0.000717346361611613 -11.2195260373578 -1.72876789393421 -1.22802415636908 -0 0 - -0101101 -* -Ed - 0.000687364310020024 1 1 0 -1 250 0 0.926804154260539 0.963204869208055 -2 600 26 0 0.926804154260539 0.963204869208055 -2 601 64 0 0.926804154260539 0.963204869208055 -6 576 26 0 -6 577 64 0 -0 - -0101000 -+180 0 -178 0 * -Ve -0.000717346361611613 -11.2233642208145 -1.73910600437289 -1.21164554112822 -0 0 - -0101101 -* -Ed - 0.000717346361611613 1 1 0 -1 250 0 0.963204869208055 0.978128680339632 -2 602 26 0 0.963204869208055 0.978128680339632 -2 603 64 0 0.963204869208055 0.978128680339632 -6 578 26 0 -6 579 64 0 -0 - -0101000 -+178 0 -176 0 * -Ed - 0.000624086605695706 1 1 0 -1 250 0 0.978128680339632 1 -2 604 26 0 0.978128680339632 1 -2 605 64 0 0.978128680339632 1 -6 580 26 0 -6 581 64 0 -0 - -0101000 -+176 0 -364 0 * -Ed - 1e-007 1 1 0 -1 251 0 0.69078275 1 -2 606 26 0 0.69078275 1 -2 607 27 0 0.69078275 1 -6 582 26 0 -6 583 27 0 -0 - -0101000 -+414 0 -316 0 * -Wi - -0101000 -+314 0 +312 0 +310 0 -308 0 -306 0 -304 0 -302 0 -300 0 -298 0 -296 0 --294 0 -292 0 -290 0 -288 0 -286 0 -284 0 -282 0 -280 0 -278 0 -276 0 --274 0 -272 0 -270 0 -268 0 -266 0 +264 0 +262 0 +260 0 -258 0 -256 0 --254 0 -252 0 -250 0 -248 0 -246 0 +245 0 -561 0 -321 0 -243 0 -241 0 --239 0 -237 0 -235 0 -233 0 -231 0 +229 0 -227 0 -225 0 +223 0 -221 0 --219 0 -217 0 -215 0 -213 0 -211 0 -209 0 -207 0 +205 0 -203 0 -201 0 --199 0 -197 0 -195 0 -193 0 -191 0 -189 0 -187 0 -185 0 -183 0 +181 0 -+179 0 +177 0 +175 0 +174 0 -319 0 +411 0 +173 0 * -Fa -0 1.00000004749745e-010 26 0 -2 26 -0101000 -+172 0 * -Ed - 1e-007 1 1 0 -1 252 0 0 1 -2 608 27 0 0 1 -2 609 66 0 0 1 -6 584 27 0 -6 585 66 0 -0 - -0101000 -+416 0 -568 0 * -Ve -0.000376478541963114 -16.7625991892966 1.75436858685814 -1.18146817674002 -0 0 - -0101101 -* -Ed - 0.000234577959041615 1 1 0 -1 253 0 0 0.165915009955367 -2 610 27 0 0 0.165915009955367 -2 611 69 0 0 0.165915009955367 -6 586 27 0 -6 587 69 0 -0 - -0101000 -+247 0 -169 0 * -Ve -0.000376478541963114 -15.4046094265513 1.88092055974603 -0.9381939196926 -0 0 - -0101101 -* -Ed - 0.000376478541963114 1 1 0 -1 253 0 0.165915009955367 0.59182005246956 -2 612 27 0 0.165915009955367 0.59182005246956 -2 613 69 0 0.165915009955367 0.59182005246956 -6 588 69 0 -0 - -0101000 -+169 0 -167 0 * -Ve -0.000132847958045501 -14.0214147184814 1.92383994562749 -0.832597821203398 -0 0 - -0101101 -* -Ed - 6.52183068219504e-005 1 1 0 -1 254 0 0 0.33333333 -2 614 69 0 0 0.33333333 -2 615 27 0 0 0.33333333 -6 589 69 0 -0 - -0101000 -+165 0 -167 0 * -Ve -0.000139898563757361 -13.0936597392712 1.92471312491465 -0.831011182606773 -0 0 - -0101101 -* -Ed - 0.000132847958045501 1 1 0 -1 255 0 0 0.409295174620928 -2 616 27 0 0 0.409295174620928 -2 617 70 0 0 0.409295174620928 -6 590 27 0 -6 591 70 0 -0 - -0101000 -+165 0 -163 0 * -Ve -0.000139898563757361 -11.7544104008045 1.87810315470511 -0.947904219070532 -0 0 - -0101101 -* -Ed - 0.000139898563757361 1 1 0 -1 255 0 0.409295174620928 1 -2 618 27 0 0.409295174620928 1 -2 619 70 0 0.409295174620928 1 -6 592 27 0 -6 593 70 0 -0 - -0101000 -+163 0 -161 0 * -Ve -9.6220078586371e-005 -11.7218000636523 1.87507838103017 -0.95479830520242 -0 0 - -0101101 -* -Ed - 9.6220078586371e-005 1 1 0 -1 256 0 0.9 1 -2 620 71 0 0.9 1 -2 621 27 0 0.9 1 -6 594 27 0 -6 595 71 0 -0 - -0101000 -+159 0 -161 0 * -Ve -0.0148545908347499 -11.7106499732683 1.87402286085446 -0.957189877704144 -0 0 - -0101101 -* -Ed - 3.49631542220774e-005 1 1 0 -1 257 0 0.880853970078994 0.9 -2 622 71 0 0.880853970078994 0.9 -2 623 27 0 0.880853970078994 0.9 -6 596 27 0 -6 597 71 0 -0 - -0101000 -+157 0 -159 0 * -Ve -0.0148545908347499 -11.6720086193906 1.87055058284638 -0.964993759678242 -0 0 - -0101101 -* -Ed - 0.0148545908347499 1 1 0 -1 258 0 0.2 0.4 -2 624 27 0 0.2 0.4 -2 625 71 0 0.2 0.4 -6 598 27 0 -6 599 71 0 -0 - -0101000 -+157 0 -155 0 * -Ve -0.0148545841937048 -11.6087807714995 1.86418755123253 -0.979072878586238 -0 0 - -0101101 -* -Ed - 0.0148545841937048 1 1 0 -1 259 0 0.7 0.8 -2 626 71 0 0.7 0.8 -2 627 27 0 0.7 0.8 -6 600 27 0 -6 601 71 0 -0 - -0101000 -+153 0 -155 0 * -Ve -0.000444715675540264 -11.5825224317067 1.8612208585644 -0.985540024529965 -0 0 - -0101101 -* -Ed - 0.000444715675540264 1 1 0 -1 260 0 0.482462206547696 0.511540248577535 -2 628 27 0 0.482462206547696 0.511540248577535 -2 629 71 0 0.482462206547696 0.511540248577535 -6 602 27 0 -6 603 71 0 -0 - -0101000 -+153 0 -151 0 * -Ve -0.000407622420261026 -11.567654823367 1.85950792170499 -0.989247396559192 -0 0 - -0101101 -* -Ed - 0.000407622420261026 1 1 0 -1 260 0 0.511540248577535 0.528699558598993 -2 630 27 0 0.511540248577535 0.528699558598993 -2 631 71 0 0.511540248577535 0.528699558598993 -6 604 27 0 -6 605 71 0 -0 - -0101000 -+151 0 -149 0 * -Ve -0.000227377531925042 -11.52340267575 1.85388136264107 -1.00128923936046 -0 0 - -0101101 -* -Ed - 0.000204463498965979 1 1 0 -1 261 0 0.439635627177706 0.5 -2 632 71 0 0.439635627177706 0.5 -2 633 27 0 0.439635627177706 0.5 -6 606 27 0 -6 607 71 0 -0 - -0101000 -+147 0 -149 0 * -Ve -0.000476015327233677 -11.4889218416215 1.84866451038626 -1.01226962503403 -0 0 - -0101101 -* -Ed - 0.000227377531925042 1 1 0 -1 262 0 0.6 0.614734712035438 -2 634 27 0 0.6 0.614734712035438 -2 635 71 0 0.6 0.614734712035438 -6 608 27 0 -6 609 71 0 -0 - -0101000 -+147 0 -145 0 * -Ve -0.000514785925463472 -11.4377184328134 1.83985132994319 -1.0304467840569 -0 0 - -0101101 -* -Ed - 0.000476015327233677 1 1 0 -1 263 0 0.3 0.4 -2 636 71 0 0.3 0.4 -2 637 27 0 0.3 0.4 -6 610 27 0 -6 611 71 0 -0 - -0101000 -+143 0 -145 0 * -Ve -0.000569926311740821 -11.3800477743783 1.8269038501845 -1.05634369821163 -0 0 - -0101101 -* -Ed - 0.000514785925463472 1 1 0 -1 264 0 0.2 0.3 -2 638 71 0 0.2 0.3 -2 639 27 0 0.2 0.3 -6 612 27 0 -6 613 71 0 -0 - -0101000 -+141 0 -143 0 * -Ve -0.000569926311740821 -11.3205173885153 1.80812062662728 -1.09235827710965 -0 0 - -0101101 -* -Ed - 0.000569926311740821 1 1 0 -1 262 0 0.674965095271805 0.720359481525137 -2 640 27 0 0.674965095271805 0.720359481525137 -2 641 71 0 0.674965095271805 0.720359481525137 -6 614 27 0 -6 615 71 0 -0 - -0101000 -+141 0 -139 0 * -Ve -0.000547504614707718 -11.241991866609 1.76167618021327 -1.17463542909946 -0 0 - -0101101 -* -Ed - 0.000547504614707718 1 1 0 -1 262 0 0.720359481525137 0.8 -2 642 27 0 0.720359481525137 0.8 -2 643 71 0 0.720359481525137 0.8 -6 616 27 0 -6 617 71 0 -0 - -0101000 -+139 0 -137 0 * -Ed - 2.27103906963197e-006 1 1 0 -1 265 0 0 0.0107143665106604 -2 644 71 0 0 0.0107143665106604 -2 645 27 0 0 0.0107143665106604 -6 618 27 0 -6 619 71 0 -0 - -0101000 -+316 0 -137 0 * -Wi - -0101000 --173 0 -413 0 +170 0 +560 0 -245 0 +168 0 +166 0 -164 0 +162 0 +160 0 --158 0 -156 0 +154 0 -152 0 +150 0 +148 0 -146 0 +144 0 -142 0 -140 0 -+138 0 +136 0 -135 0 * -Fa -0 1.00000004749745e-010 27 0 -2 27 -0101000 -+134 0 * -Ed - 1e-007 1 1 0 -1 266 0 0 2.49917007 -2 646 55 0 0 2.49917007 -2 647 62 0 0 2.49917007 -6 620 55 0 -6 621 62 0 -0 - -0101000 -+405 0 -329 0 * -Wi - -0101000 --328 0 -330 0 -361 0 -403 0 +132 0 * -Fa -0 1.00000004749745e-010 55 0 -2 55 -0101000 -+131 0 * -Ed - 1e-007 1 1 0 -1 267 0 0 1.72905437 -2 648 62 0 0 1.72905437 -2 649 63 0 0 1.72905437 -6 622 62 0 -6 623 63 0 -0 - -0101000 -+382 0 -323 0 * -Wi - -0101000 --132 0 -380 0 +129 0 -322 0 -324 0 +326 0 * -Fa -0 1.00000004749745e-010 62 0 -2 62 -0101000 -+128 0 * -Ed - 1e-007 1 1 0 -1 268 0 0.01103422 1.98405473 -2 650 63 0 0.01103422 1.98405473 -2 651 64 0 0.01103422 1.98405473 -6 624 63 0 -6 625 64 0 -0 - -0101000 -+377 0 -230 0 * -Wi - -0101000 --129 0 -376 0 +126 0 -229 0 +231 0 +233 0 +235 0 +237 0 +239 0 +241 0 -+243 0 * -Fa -0 1.00000004749745e-010 63 0 -2 63 -0101000 -+125 0 * -Wi - -0101000 --174 0 -175 0 -177 0 -179 0 -181 0 +183 0 +185 0 +187 0 +189 0 +191 0 -+193 0 +195 0 +197 0 +199 0 +201 0 +203 0 -205 0 +207 0 +209 0 +211 0 -+213 0 +215 0 +217 0 +219 0 +221 0 -223 0 +225 0 +227 0 -126 0 -371 0 --363 0 * -Fa -0 1.00000004749745e-010 64 0 -2 64 -0101000 -+123 0 * -Ve -2.67872541616364e-007 -17.2205222879309 6.33368591083392 -0.716459929370019 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 269 0 0 1.72904906 -2 652 69 0 0 1.72904906 -2 653 68 0 0 1.72904906 -6 626 69 0 -6 627 68 0 -0 - -0101000 -+247 0 -121 0 * -Ve -2.67872541616364e-007 -15.178436250937 6.33367198983326 -0.437746756651854 -0 0 - -0101101 -* -Ed - 2.67872541616364e-007 1 1 0 -1 270 0 5.543e-005 1.00005543 -2 654 69 0 5.543e-005 1.00005543 -2 655 72 0 5.543e-005 1.00005543 -6 628 69 0 -6 629 72 0 -0 - -0101000 -+121 0 -119 0 * -Ed - 1e-007 1 1 0 -1 271 0 0.17394647 1.82447971 -2 656 69 0 0.17394647 1.82447971 -2 657 70 0 0.17394647 1.82447971 -6 630 69 0 -6 631 70 0 -0 - -0101000 -+119 0 -165 0 * -Wi - -0101000 -+120 0 +118 0 +117 0 +164 0 -166 0 -168 0 * -Fa -0 1.00000004749745e-010 69 0 -2 69 -0101000 -+116 0 * -Ve -9.64067992174276e-007 -15.4035701016303 6.3336158858306 -0.843981276536958 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 272 0 0.01152171 2.07179401 -2 658 68 0 0.01152171 2.07179401 -2 659 67 0 0.01152171 2.07179401 -6 632 68 0 -6 633 67 0 -0 - -0101000 -+263 0 -114 0 * -Ed - 1e-007 1 1 0 -1 273 0 6.281e-005 1.00006281 -2 660 68 0 6.281e-005 1.00006281 -2 661 73 0 6.281e-005 1.00006281 -6 634 68 0 -6 635 73 0 -0 - -0101000 -+114 0 -121 0 * -Wi - -0101000 -+246 0 +248 0 +250 0 +252 0 +254 0 +256 0 +258 0 -260 0 +113 0 +112 0 --120 0 * -Fa -0 1.00000004749745e-010 68 0 -2 68 -0101000 -+111 0 * -Ve -1.18853916454287e-006 -19.4649687145364 16.2690729827395 0.155572182299282 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 274 0 3.88e-005 8.09360706 -2 662 73 0 3.88e-005 8.09360706 -2 663 74 0 3.88e-005 8.09360706 -6 636 73 0 -6 637 74 0 -0 - -0101000 -+114 0 -109 0 * -Ve -7.01160311096019e-007 -20.2590217622519 16.2691035827409 0.211302165326314 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 275 0 6.281e-005 1.00006281 -2 664 73 0 6.281e-005 1.00006281 -2 665 75 0 6.281e-005 1.00006281 -6 638 75 0 -0 - -0101000 -+109 0 -107 0 * -Ed - 1e-007 1 1 0 -1 276 0 3.88e-005 8.09360706 -2 666 73 0 3.88e-005 8.09360706 -2 667 72 0 3.88e-005 8.09360706 -6 639 73 0 -6 640 72 0 -0 - -0101000 -+107 0 -121 0 * -Wi - -0101000 --112 0 +108 0 +106 0 +105 0 * -Fa -0 1.00000004749745e-010 73 0 -2 73 -0101000 -+104 0 * -Ed - 7.01160311059545e-007 0 0 1 -2 668 75 0 0 1 -6 641 75 0 -0 - -0101000 -+107 0 -107 0 * -Ve -7.01160311096019e-007 -19.3665796498631 16.2690975027406 0.333106715941719 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 277 0 0 1 -2 669 76 0 0 1 -2 670 75 0 0 1 -6 642 75 0 -6 643 76 0 -0 - -0101000 -+101 0 -109 0 * -Ed - 7.01160311096019e-007 1 1 0 -1 278 0 5.543e-005 1.00005543 -2 671 72 0 5.543e-005 1.00005543 -2 672 75 0 5.543e-005 1.00005543 -6 644 75 0 -6 645 72 0 -0 - -0101000 -+107 0 -101 0 * -Wi - -0101000 -+102 0 -106 0 -100 0 -99 0 * -Fa -0 1.00000004749745e-010 75 0 -2 75 -0101000 -+98 0 * -Ve -6.56665201913112e-007 -18.7445785303197 16.2690985127407 0.302431252674713 -0 0 - -0101101 -* -Ve -1.18853916454287e-006 -18.6177078042936 16.2690957227405 0.240354853816242 -0 0 - -0101101 -* -Ed - 6.56665201913112e-007 1 1 0 -1 279 0 0.00034374 1.00034374 -2 673 77 0 0.00034374 1.00034374 -2 674 76 0 0.00034374 1.00034374 -6 646 76 0 -6 647 77 0 -0 - -0101000 -+96 0 -95 0 * -Ed - 1e-007 1 1 0 -1 280 0 8.022e-005 1.00008022 -2 675 76 0 8.022e-005 1.00008022 -2 676 78 0 8.022e-005 1.00008022 -6 648 76 0 -6 649 78 0 -0 - -0101000 -+96 0 -101 0 * -Ed - 1.18853916454287e-006 1 1 0 -1 281 0 5.799e-005 1.00005799 -2 677 74 0 5.799e-005 1.00005799 -2 678 76 0 5.799e-005 1.00005799 -6 650 76 0 -6 651 74 0 -0 - -0101000 -+95 0 -109 0 * -Wi - -0101000 --94 0 +93 0 +100 0 -92 0 * -Fa -0 1.00000004749745e-010 76 0 -2 76 -0101000 -+91 0 * -Ed - 1e-007 1 1 0 -1 282 0 4.95e-005 10.70174454 -2 679 72 0 4.95e-005 10.70174454 -2 680 78 0 4.95e-005 10.70174454 -6 652 72 0 -6 653 78 0 -0 - -0101000 -+101 0 -119 0 * -Wi - -0101000 -+99 0 +89 0 -118 0 -105 0 * -Fa -0 1.00000004749745e-010 72 0 -2 72 -0101000 -+88 0 * -Ve -1.55553495045156e-006 -13.7551732833356 6.33367429383337 -0.507938351705776 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 283 0 8.022e-005 1.00008022 -2 681 70 0 8.022e-005 1.00008022 -2 682 78 0 8.022e-005 1.00008022 -6 654 70 0 -0 - -0101000 -+119 0 -86 0 * -Ed - 1e-007 1 1 0 -1 284 0 0.00020743 46.24578153 -2 683 78 0 0.00020743 46.24578153 -2 684 77 0 0.00020743 46.24578153 -6 655 78 0 -6 656 77 0 -0 - -0101000 -+96 0 -86 0 * -Wi - -0101000 --85 0 -89 0 -93 0 +84 0 * -Fa -0 1.00000004749745e-010 78 0 -2 78 -0101000 -+83 0 * -Ve -1.55553495045156e-006 -13.4648676895469 6.33366791783307 -0.649981567562466 -0 0 - -0101101 -* -Ed - 1.55553495045156e-006 1 1 0 -1 285 0 0.00034374 1.00034374 -2 685 71 0 0.00034374 1.00034374 -2 686 77 0 0.00034374 1.00034374 -6 657 77 0 -6 658 71 0 -0 - -0101000 -+86 0 -81 0 * -Ed - 1e-007 1 1 0 -1 286 0 0.00020743 46.24578153 -2 687 77 0 0.00020743 46.24578153 -2 688 74 0 0.00020743 46.24578153 -6 659 77 0 -6 660 74 0 -0 - -0101000 -+95 0 -81 0 * -Wi - -0101000 --80 0 -84 0 +94 0 +79 0 * -Fa -0 1.00000004749745e-010 77 0 -2 77 -0101000 -+78 0 * -Ed - 9.64067991690433e-007 1 1 0 -1 287 0 5.799e-005 1.00005799 -2 689 67 0 5.799e-005 1.00005799 -2 690 74 0 5.799e-005 1.00005799 -6 661 67 0 -0 - -0101000 -+81 0 -114 0 * -Wi - -0101000 --76 0 -79 0 +92 0 -108 0 * -Fa -0 1.00000004749745e-010 74 0 -2 74 -0101000 -+75 0 * -Ed - 1e-007 1 1 0 -1 288 0 0.48200245 12.07364253 -2 691 67 0 0.48200245 12.07364253 -2 692 71 0 0.48200245 12.07364253 -6 662 67 0 -6 663 71 0 -0 - -0101000 -+316 0 -81 0 * -Wi - -0101000 -+73 0 +76 0 -113 0 -262 0 -264 0 +266 0 +268 0 +270 0 +272 0 +274 0 -+276 0 +278 0 +280 0 +282 0 +284 0 +286 0 +288 0 +290 0 +292 0 +294 0 -+296 0 +298 0 +300 0 +302 0 +304 0 +306 0 +308 0 -310 0 -312 0 -314 0 -* -Fa -0 1.00000004749745e-010 67 0 -2 67 -0101000 -+72 0 * -Ed - 1e-007 1 1 0 -1 289 0 0.19391945 2.76255209 -2 693 71 0 0.19391945 2.76255209 -2 694 70 0 0.19391945 2.76255209 -6 664 71 0 -6 665 70 0 -0 - -0101000 -+161 0 -86 0 * -Wi - -0101000 -+135 0 -136 0 -138 0 +140 0 +142 0 -144 0 +146 0 -148 0 -150 0 +152 0 --154 0 +156 0 +158 0 +70 0 +80 0 -73 0 * -Fa -0 1.00000004749745e-010 71 0 -2 71 -0101000 -+69 0 * -Wi - -0101000 --117 0 +85 0 -70 0 -160 0 -162 0 * -Fa -0 1.00000004749745e-010 70 0 -2 70 -0101000 -+67 0 * -Ed - 1e-007 1 1 0 -1 290 0 0 1 -2 695 51 0 0 1 -2 696 66 0 0 1 -6 666 51 0 -6 667 66 0 -0 - -0101000 -+410 0 -416 0 * -Wi - -0101000 --408 0 +65 0 -415 0 -445 0 * -Fa -0 1.00000004749745e-010 51 0 -2 51 -0101000 -+64 0 * -Ed - 1e-007 1 1 0 -1 291 0 0 1 -2 697 66 0 0 1 -2 698 19 0 0 1 -6 668 19 0 -0 - -0101000 -+566 0 -568 0 * -Wi - -0101000 --65 0 -320 0 +62 0 -170 0 * -Fa -0 1.00000004749745e-010 66 0 -2 66 -0101000 -+61 0 * -Wi - -0101000 -+646 0 -567 0 -62 0 -565 0 -653 0 * -Fa -0 1.00000004749745e-010 19 0 -2 19 -0101000 -+59 0 * -Ve -1e-007 -32.9492818450068 -2.51270011936476e-007 0.385932318830801 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 292 0 0 1 -2 699 5 0 0 1 -2 700 11 0 0 1 -6 669 5 0 -6 670 11 0 -0 - -0101000 -+754 0 -57 0 * -Ve -1e-007 -32.949284715007 -9.00000027138652e-011 1.41444141318236 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 293 0 0 3.00864606 -2 701 5 0 0 3.00864606 -2 702 79 0 0 3.00864606 -6 671 5 0 -6 672 79 0 -0 - -0101000 -+57 0 -55 0 * -Ed - 1e-007 1 1 0 -1 294 0 0 1 -2 703 5 0 0 1 -2 704 20 0 0 1 -6 673 20 0 -0 - -0101000 -+55 0 -791 0 * -Wi - -0101000 -+56 0 +54 0 +53 0 +790 0 +752 0 * -Fa -0 1.00000004749745e-010 5 0 -2 5 -0101000 -+52 0 * -Ve -6.5586010698853e-007 -33.8393312472819 3.79883272998346e-010 1.20936400844171 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 295 0 0 1 -2 705 79 0 0 1 -2 706 80 0 0 1 -6 674 79 0 -6 675 80 0 -0 - -0101000 -+50 0 -55 0 * -Ve -6.55925500567648e-007 -33.8393156872812 6.98962595001871e-011 0.672364923019744 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 296 0 0 1 -2 707 79 0 0 1 -2 708 80 0 0 1 -6 676 79 0 -6 677 80 0 -0 - -0101000 -+57 0 -48 0 * -Ve -6.55925500567648e-007 -33.8392977566475 -0.204359191850061 0.94086446581668 -0 0 - -0101101 -* -Ed - 6.55925500567648e-007 1 1 0 -1 297 0 0.5 1 -2 709 81 0 0.5 1 -2 710 79 0 0.5 1 -6 678 81 0 -0 - -0101000 -+46 0 -48 0 * -Ed - 6.5586010698853e-007 1 1 0 -1 298 0 0 0.5 -2 711 81 0 0 0.5 -2 712 79 0 0 0.5 -6 679 81 0 -0 - -0101000 -+50 0 -46 0 * -Wi - -0101000 -+49 0 -54 0 +47 0 -45 0 -44 0 * -Fa -0 1.00000004749745e-010 79 0 -2 79 -0101000 -+43 0 * -Ed - 1e-007 1 1 0 -1 299 0 0 1 -2 713 81 0 0 1 -2 714 82 0 0 1 -6 680 81 0 -6 681 82 0 -0 - -0101000 -+48 0 -50 0 * -Wi - -0101000 -+41 0 +44 0 +45 0 * -Fa -0 1.00000004749745e-010 81 0 -2 81 -0101000 -+40 0 * -Ve -6.55672648756828e-007 -33.8392977566475 0.204359191626203 0.94086446660868 -0 0 - -0101101 -* -Ed - 6.55659727053423e-007 1 1 0 -1 300 0 0 0.5 -2 715 82 0 0 0.5 -2 716 80 0 0 0.5 -6 682 82 0 -6 683 80 0 -0 - -0101000 -+48 0 -38 0 * -Ed - 6.55672648756828e-007 1 1 0 -1 301 0 0.5 1 -2 717 82 0 0.5 1 -2 718 80 0 0.5 1 -6 684 82 0 -6 685 80 0 -0 - -0101000 -+38 0 -50 0 * -Wi - -0101000 -+37 0 +36 0 -41 0 * -Fa -0 1.00000004749745e-010 82 0 -2 82 -0101000 -+35 0 * -Ed - 1e-007 1 1 0 -1 302 0 0 3.00408138 -2 719 11 0 0 3.00408138 -2 720 80 0 0 3.00408138 -6 686 80 0 -6 687 11 0 -0 - -0101000 -+55 0 -57 0 * -Wi - -0101000 --49 0 -36 0 -37 0 -47 0 -33 0 * -Fa -0 1.00000004749745e-010 80 0 -2 80 -0101000 -+32 0 * -Ed - 1e-007 1 1 0 -1 303 0 0 1 -2 721 11 0 0 1 -2 722 20 0 0 1 -6 688 20 0 -0 - -0101000 -+726 0 -55 0 * -Wi - -0101000 --56 0 -753 0 +724 0 +30 0 +33 0 * -Fa -0 1.00000004749745e-010 11 0 -2 11 -0101000 -+29 0 * -Ed - 1.0001000492084e-010 0 0 1 -2 723 20 0 0 1 -6 689 20 0 -0 - -0101000 -+55 0 -55 0 * -Wi - -0101000 -+27 0 -30 0 -647 0 +651 0 -53 0 * -Fa -0 1.00000004749745e-010 20 0 -2 20 -0101000 -+26 0 * -Ve -1e-007 -31.9768135388171 6.52772034505006 1.34215900474913 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 304 0 0 55.31688457 -2 724 9 0 0 55.31688457 -2 725 16 0 0 55.31688457 -6 690 9 0 -6 691 16 0 -0 - -0101000 -+780 0 -24 0 * -Ve -1e-007 -32.0208866309104 6.53046184918028 1.31476716144809 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 305 0 0 1 -2 726 9 0 0 1 -2 727 83 0 0 1 -6 692 9 0 -6 693 83 0 -0 - -0101000 -+24 0 -22 0 * -Ed - 1e-007 1 1 0 -1 306 0 10.79509318 65.98696054 -2 728 9 0 10.79509318 65.98696054 -2 729 10 0 10.79509318 65.98696054 -6 694 9 0 -6 695 10 0 -0 - -0101000 -+22 0 -770 0 * -Wi - -0101000 -+769 0 +771 0 +773 0 -775 0 -777 0 +23 0 +21 0 +20 0 * -Fa -0 1.00000004749745e-010 9 0 -2 9 -0101000 -+19 0 * -Ve -1e-007 -33.0949317119248 6.52779751805373 1.34157750972151 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 307 0 0 1 -2 730 10 0 0 1 -2 731 83 0 0 1 -6 696 83 0 -0 - -0101000 -+22 0 -17 0 * -Ed - 1e-007 1 1 0 -1 308 0 0 2.72494532 -2 732 10 0 0 2.72494532 -2 733 15 0 0 2.72494532 -6 697 10 0 -6 698 15 0 -0 - -0101000 -+17 0 -758 0 * -Wi - -0101000 --20 0 +16 0 +15 0 +757 0 -759 0 -761 0 +763 0 +765 0 +767 0 * -Fa -0 1.00000004749745e-010 10 0 -2 10 -0101000 -+14 0 * -Ve -1e-007 -32.0213115109306 6.52591981196454 1.3601615736042 -0 0 - -0101101 -* -Ed - 1e-007 1 1 0 -1 309 0 0 1 -2 734 83 0 0 1 -2 735 16 0 0 1 -6 699 83 0 -6 700 16 0 -0 - -0101000 -+24 0 -12 0 * -Ed - 1e-007 1 1 0 -1 310 0 0 1 -2 736 83 0 0 1 -2 737 15 0 0 1 -6 701 83 0 -6 702 15 0 -0 - -0101000 -+12 0 -17 0 * -Wi - -0101000 -+11 0 +10 0 -16 0 -21 0 * -Fa -0 1.00000004749745e-010 83 0 -2 83 -0101000 -+9 0 * -Ed - 1e-007 1 1 0 -1 311 0 0.49271381 3.01761452 -2 738 16 0 0.49271381 3.01761452 -2 739 15 0 0.49271381 3.01761452 -6 703 16 0 -6 704 15 0 -0 - -0101000 -+707 0 -12 0 * -Wi - -0101000 -+691 0 +692 0 +694 0 -696 0 +698 0 +700 0 -702 0 +704 0 +7 0 -11 0 --23 0 * -Fa -0 1.00000004749745e-010 16 0 -2 16 -0101000 -+6 0 * -Wi - -0101000 --15 0 -10 0 -7 0 -706 0 +708 0 +710 0 -712 0 -714 0 +716 0 +718 0 -+720 0 -722 0 * -Fa -0 1.00000004749745e-010 15 0 -2 15 -0101000 -+4 0 * -Sh - -0101000 -+783 0 +729 0 +689 0 +648 0 +613 0 +606 0 +601 0 +596 0 +593 0 +591 0 -+584 0 +579 0 +574 0 +571 0 +569 0 +558 0 +548 0 +540 0 +534 0 +526 0 -+516 0 +512 0 +507 0 +498 0 +493 0 +485 0 +482 0 +477 0 +470 0 +465 0 -+462 0 +457 0 +450 0 +443 0 +438 0 +431 0 +428 0 +423 0 +420 0 +417 0 -+406 0 +396 0 +389 0 +383 0 +378 0 +373 0 +368 0 +365 0 +332 0 +317 0 -+171 0 +133 0 +130 0 +127 0 +124 0 +122 0 +115 0 +110 0 +103 0 +97 0 -+90 0 +87 0 +82 0 +77 0 +74 0 +71 0 +68 0 +66 0 +63 0 +60 0 -+58 0 +51 0 +42 0 +39 0 +34 0 +31 0 +28 0 +25 0 +18 0 +13 0 -+8 0 +5 0 +3 0 * -So - -1100000 -+2 0 * - -+1 0 \ No newline at end of file diff --git a/resources/mesh.png b/resources/mesh.png deleted file mode 100644 index f8147b3f816c16894c554918d12c9f09147c4449..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 319 zcmV-F0l@x=P)0a!^y zK~#90<&!aM!ax{?pGbzdDRg)5-w;Yup@aDg2jbxF)Ip>;NEZiD@)vXv(uk1y8(iEw zxd>(uydjVdZH~0L#1y*qg>d;k?jGK}_XTp~4fdbw%EMcE1e+jl>o=K2Fn}-&!Gs#M zQou?P4B&7)a5-O)kt_u)gaNVUDd#W^^9FlWHzqdgXh&mW10aNmi!!a`I8&N+M|7rr zX5EqMh360{^%0mlSnKIly(h5Fw6A*Gw=MRAt#^=o-WNEN**emOB`o_xUQSI zWg$dSWSCCdQH8hiXg#)!)S);%hxa`{=^MGgbYWQ*i{*mT@kDqI0sR~%?ymxycTM$6 zRjn!j?>#^5?5ecZgH3>x5*bPSS6?@0MxMies1F#4Ayb&N*@^%F002ovPDHLkV1lA2 B!RY`1 diff --git a/resources/mesh_add_sub.png b/resources/mesh_add_sub.png deleted file mode 100644 index 20d8d8f62d3ff63bd2799c28160dd6b405d5d456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 408 zcmV;J0cZY+P)G8k#GTtHpbp#SuqDliaWVHkP3jlf;sGOLVN>2!I22Kh&hA{8KnfZ@e3 z@#ipLlS7&s-Haf6%Xa3p*9Ieq3sUj;W8G0E@i|RnFam_`T|Jz`+`uS@dkOnt+-9+c z5%iiv(elC_q%ONo8wg@c-gKQ#@>62=n&IqahSTS%2W*33V;OCmLObB34};TzH!t&s z%~)>whVrXKsxp7iHvy5w?b+lDJ+=?%1ED9}CXJ(l+=%E;iT)_6Qm|UCfU?#aCU+CR z%j?cImNP`l((lV}H;gKnJDj+-~4|m+K$5!AQqRCd%yq0000ZrE5Jevrh3R~RTp$OX(E>?a{(7A)5T>9ODVw>OJ{e`O$r>c z81UjaUm9tE*}tEiKM*xRBl z=BTcrP((EOv}#l9(a;lzEOa-FCa~K#MXctV-qX5$yzUfzoDC*f%{SGxQa3B~EjkyS zgy+7dixC{UE8-<{pSyLnJAhDP(b@e25nzltN!EwE>8wg(Gz2J9$oCyS8wk4vC;N`WI8dF>52M6nn`WF2a|4w+(q@kdH&la03PxwcYDdn*1_ zTS=v+2_G;zKd8JL-%#Rws~oEo{u(8=>etHuYP*=a%6rH17T$#bWGP$@AsB|342ZD7 zZHUp3tz6~8F-074=@5Z&oA%nN)N6Fgw z_%7HtB5V(!*g$G>vJ|d{#}_x1&Bh6N3VI7r0MJvh5=76Lyc~un$rj^;0?1RCB%^v> z#Y*(529&wXj+4#C35B;8lolJB>!Ee^RIJ3~(~r*9n#%CNDZrE5Jevrh3R~RTp$OX(E>?a{(7A)5T>9ODVw>OJ{e`O$r>c z81UjaUm9tE*}tEiKM*xRBl z=BTcrP((EOv}#l9(a;lzEOa-FCa~K#MXctV-qX5$yzUfzoDC*f%{SGxQa3B~EjkyS zgy+7dixC{UE8-<{pSyLnJAhDP(b@e25nzltN!EwE>8wg(Gz2J9$oCyS8wk4vC;N`WI8dF>52M6nn`WF2a|4w+(qixy^ur{z|2h0AFaoSh^Wn+E*DNkMEl|gZ6%eO zeMG><76gdzP0^?Vsj)rfa|J3t$*Dpb-leHskP#-2}qfIzGm7qh` z!T^pPa6d$(Q5{1`L?>5ec1JHp|E;dV`-=(0+eLy70E!HK ziUJ@a-{eFw)z_M|QP>;T zRQ1c2hyD8bC1DuXYcn&!v)fqDx%7Bx^}cq`GdExK_npxH&8i+;GLQ?pM&8;wq8I*{OkJZkuXdJ4NPNm$>j=(r!&t znBm>^nkKJbzxRDFsRI&@MmPyoR`e1%$Ft?%R~Uve%b84;Ow#yR{z;oj&88V1UM1t5 z%Z8y5JQs6S z$vQYDmD@wM^0is+=wZBPNX^XgBg3F?fUahldY#thS-hVogN#NY;L$AtdRPwE&XV|U zj|9W-?6@+C;tN6ZZEiX3v=0XbdKakH5LMp^p@E6HK;Xfx2Bj8jw~fWH-T`JaSMDpB zJm9GJaMX|i``7BjCRmC);Qb>8wnavz2BM2J%eM*4lekIB@W9y11jaVSL6?c<@1Ng; zi%s`g8KBmp-%irj+1EbvqUozd1LR_wS!-SS2E*_x8*p=`6_b=cF;%9p& Ta?$HR00000NkvXXu0mjfQ_m8? diff --git a/resources/mesh_algo_tetra.png b/resources/mesh_algo_tetra.png deleted file mode 100644 index 3fb67d507bc568b7a406c497e52e76a68b61262b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)gk0*WI5 zYK&P=DhHv(ok~os#Qtm3x^86>yemH)59hsgylw%-5w$PvREIIfYF)Q-`fH7We5-B-}HkHZ%;m1IbZ_q{%pYlPG9F?n-(n>+z0&(EC&>c_wn@oZe_JbH65Rw zS9n*crw5Y(iX$o#pYX0S_t~=-@pm}yX>vn~;)vESZJs|7=D9u}E-L)$PGAMbK??wt za*0y8^e9MDc4CVqgi{EoO8^Rwc}@pa)+^iv9qxiIrfIC)J^UX_pJp>T<@kMCfK_W$ zb7gI-I<%g2zv*ZY>djVZ`}|Zq}6ox-n49}7Wk6a?Bh&rXYQmf`DmFPw@G*hLVf=gsTf&nQEmD~YvOn?U3{1cYU z=l}ih*$T&9^>AMtME*+!ULETHz(DCfbrK08!uoN&2!8RUCemE!wvSP`&)3W^w=b*3 z@X?Yxb?~R>6-o_`A3bE?Fa&k5!!8T|={Zk7Qo_9Z4jpPT%Lx^Efi@b81#Xmlte)^suUd5#d4M@DCjZjhTXp5v;MJw`kHKK=PjWQs%(M9R@mAXZUV+MKn$L1$Gk{ zhCi0qJfK6R`_vVAJ7dz!*k-$#^+=35lt|D<6BGAl?C-#KU`52=)4BQq8Hae6>&y1& P00000NkvXXu0mjf{RyUe diff --git a/resources/mesh_area.png b/resources/mesh_area.png deleted file mode 100644 index 9c51c32edb3aed73cf343b8a982b29e7d20a56b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340 zcmV-a0jvIrP)9XJ*-sXHKP6xOjMn#C|VE^4)2Fu@P{w8P|clg#~4M7$+McGHo&uyhy7D{F2&@K znZqe4r__1%Rgu@cDhYq_ANZZOv1aKMwuYtG8glEyb&>njBXBC-#7hh4regb?uF zBO*8)#u`NL0H!eCdO`>Q7;Cz?)~!2K>d}}PtnFZE22eWub70b#C74*jS(m*<^PVPe z%2PQ+*#cXPeAlhL!B78{rfb3q>?trUey(2IfDu)ltJu{2j7c|R$B*NtpG4N7Xu()R mK{1-KzXSV$6_MedZq+Zv18T2Uwb_&a0000D3J^mDFUR3#3?ukE-cwaq)D+}v%7u~ zDI<+!?XJK1=ii4y_}3WpEfCz23e=y0HpB;X&FL|}WqU-r)d+|WeQ2wGPbg4zOT?>I z*W9btR$BK^H1x2(R73N((cM-&v`siQL}yh*A$BSYuS(-wb4xXc^@Z7L#BrlR_IIV+ zD*AOewJ0oG@&U(vVw~A45Jw-s1NM{YnVWw zvm;<1I-80HV6wamJ*dZ)?Y3d&JA}k!`CV`?XB1RX$4yO^E1;^Knk;Ya1Fcu{sd53% z`@CI0?pB=lUAEiTm7AAd%_Uf}Hk(bB_cn=G`rOT<&(0n;F>FVk0q_^*zw)5LE zJXdePgF!}N8hCALf&$bJg$uTediAU4D+C^H8XvI9L%Es@MOjdl6;T|K#0i`2W^!78 Y0KaU~v8xS1CIA2c07*qoM6N<$g6?q3EdT%j diff --git a/resources/mesh_compute.png b/resources/mesh_compute.png deleted file mode 100644 index c06dc7ba98b17b00abb9cb1f5894a07260dfccbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmV-A1I7G_P)=f&=30>y5~zqs;{*Kz?i{&^MT)S#KsYN++ysSy z;8Fy1g~B?JW357AuMnI93L8UUS75^$Vz?<5_7w}0V)pj#YzJpxnwdA>``-J$Hw`Rr zUyUlt(s*0wJO2l4a++}TRSXSm@JnFBQTU%UmH`{sn$5yeO~}p#0Ama$H-w|mzA1hV z*uaK|G4VL5naqNvg!I$_c6Yi+F06mDPBcsy+*@YeTtxTYS7d(+(c^^9##ILnWEa9l zPqVEP(lepE^8wK?Asq|Rx29&UTIvj=P-f|Cvn9Q3hYFciJ-?;kci6qVTUXee z`Ak*vWEWMLC7fSQc)=6=o)5s@7ag|O65^4|sIP#3V}gDcXu{^!O~)|(P00Qf(o?5q zEx^K3N&%p~xj0h7^iqibC=kp-u?rvr>%=K4IYcI?ftFMbN1-*jL2{wH z(CnH3e{XNb~p;{Y@D*Q1v3MM2#8A{#(B`Yj%&yB zxouWjD+}FgV56ZMt?#~e6L3dGc()YVb2iFOg~$YqdBFW^6WSh3PNw|CI)lRjT5G^o z8|>g-Z0|H93)udCe|BRxIIy3uMi!I>tl#r3U~d!JPdT!HJ^22>9u1G|Ym)-h$YdbpQYW diff --git a/resources/mesh_connectivity.png b/resources/mesh_connectivity.png deleted file mode 100644 index 9ce3e445574d18cd40e1e36f6dec7732252c3cf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmV-g0j2(lP)O1$YXrAtXhJWTUunj0_QY1to>SG=|pj3@!|KgmWQ_I#Z+-M){RU z2=CtANeYaAjRpWHfn}&Uz=zR|0=u2#cHjQVy>n9&jb~U7sOu9m@biA~FW6O;Rloz? z&ar*9;OkjJWugT{ArEZ#E!R&q-1>m$x9To5RiOE5g6S!+TX&Fq(3Iu&b2|nCfP|{V zv^F1`=)Jx<>&kwGLx_*l`1SPbl0cz{o-U3d6?2|WvFAEuAkx0yqh0*P zg^k}Q#vQ%L+>x-SX>mD+?2(h)r5YuIw;U_@wjLGJmfHQZS%>rIr%zA&9cP*fGN>`E zo{_0g5EE~gww6!Q?z`4R1tp!$sr>!-d~2q!TC-uJs-olf`P*ME{^gfNwbE8uK5u*6aDMMR|8(9m3%}0u_eDA|(I-0WL{I zK~#90t&+cP!Y~lVKUW^k5(8sLUVyPrfEe=-EW8HFE1>M1=$0~gqw*6l<^>oTkj$8& z(sgLk+Kz1?;-o0CbN9RN{s=IhYA?^l0djPtaB5=+05D&M#psfq$ojJeNgAOrk=|Y` z)I@=Z0C47s-0HI7^K8btY#0Dn+sgYdbD04^myLIRdoR56ud1*J2N(iku;WUj*vz9o z4^R2H(tqD>@?tYbwXM26?8bgeoePT@5&4UqDkJP$?-#xmsehn3m@Mp;I&(09bb7d0 zE(G9DJA|bw0D!h_0fY-9z9P00000 LNkvXXu0mjfZAz}I diff --git a/resources/mesh_deleteGroups.png b/resources/mesh_deleteGroups.png deleted file mode 100644 index b7126e002d7aa7ab3a7c9a9265a9f283f1ecfa20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!9%)r1XI!iqT$l(m|32{Ae-~f>MpMk-+o$V%& z#aI&L7tG-B>_!@hljQC0!qCAg>jC75mAFQf1m~xflqVLYGNfmw85QKED;Vh+=o#9^ z?aKhF@bYwV45^rtoRAQZz`&@=rl@d};fZB~%MKBV8!Qqm2Z9)7c$k=Yboh9Bcz9&^ zc(@NN(ot|a%eZ2eW+U$rp9Y~h!WNPeDv}GT7{z>>C BH68!} diff --git a/resources/mesh_diagonal.png b/resources/mesh_diagonal.png deleted file mode 100644 index c997cefc7ff7850fc336e8fe812d54fe2edae0c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 435 zcmV;k0ZjghP)15QV=DDrP~21SxchoI*H_<1+1TTb+cu!bN#tSBDq1~h4JQK(6L5D{>V__ zMh~!A?(pBMw-x)tp88lLk#q{L81EZd_$Sfa@9GTkZpn-eVEFSCh1`R;$r*FeqC-$ zthH2Cg{chHu|h) dcHi26@C)O{mNcsSmRkS-002ovPDHLkV1o0=#l-*s diff --git a/resources/mesh_edit.png b/resources/mesh_edit.png deleted file mode 100644 index 5ad2f1504ea84cae3b94a6c6f2cb4b42130f167a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547 zcmV+;0^I$HP)1j~v(fnhHJ zRy(^3Qi*jK2;B0W>bj?H!0qDvqGJ@7*}x@gdv(-r?qT)|W!FswH^=zl?1iTZRCr0N2Gf7!orM^*ox>0k}k{4i~`M0PWG zH9PYe#yOP)i$-P10$L9QrS^QNlyS4S7dvxIU1{-{*%*U0GfAL(0##uj)KR_4sdvlk zg|4|Kd1&zI=R?cqOiBrR-TvX7cS{S;+wgn>BZtOg6_w4(kHyVsZy-Z|K&H1+h834S zl@*cG&QU-ig!-L0b2!Hi@`Z07D+^m4Z$l8z6{bKslUBJ4I5j%i#C;~T}N9c;cd!I`~{!Ul&1RgQ}>e!HR=mT z>`ZZmrCejut#+~TEG)9c!Yvl}EOvJ?SwkKSyf-ud|7QO8o^n?vLS|bJPs?`zZo}*W z@bI*(3g27xWyB4)=R<~n?!jG|2m)k~Bj6+Cv9_J=ZX~+980yo97lOq#@u#sdYkDnOl*U7uzo^^Fwbdw3aecplQ~d<9_i zICwRmHhsWUJU~3h7tis<->ezmt`7M-t9F;ov*-95$DJMkY0_i+pb5|{>NWkX%B9O} z3*ioh=x$`la_}y~uW1TlelL_7Dqo+=EnW(&OS30C?|_o&S9Kc`v2?HsXf@Z&Y|fgp h#+kC9i^jS*djn1T4eyPjt^NQ2002ovPDHLkV1fx@@FV~L diff --git a/resources/mesh_extrusion.png b/resources/mesh_extrusion.png deleted file mode 100644 index 76909c0e119d8f8c0495d7a197023d670343e339..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 427 zcmV;c0aX5pP)xd0XRuS zK~#90rIW#NgD?<9-)h{1ThJ{fI7eKQHJD6Ff@8{{g>>PcgAhm{?2zn?1|+S%-u?wc z91nxO8v(cmKfgD@>$J|5EmxQ@6^0?k2>Ehu*vUQ~Mr$qMBvnOHzsoN(E z(fwVlx%pWPrjoD0|C zK~#90rIgW?gdhw>Z{}DHr9e&cfi*!Xw3Gc1b`X(aXWtiUyva*)5EiAN^(-Jyaj#Y2 z4Dyv~g>9w(hIP*xLsq);)J6rhb`>;*e2cZaAsu<#ml0?Nt8(64hoYc*mMyC=yPM1N zwz3W-39(cG5JSd!L*$(#hRh})qshgPvEC>^3Yl2p3hBt${R*p=rCKbO1h{}&Yw5TH zViV)M;Z<#>ki~kV&KphPoL05x{2kV-^irg?H(Q5Ka^47>R^h{L_10R8svz>fq}8a)5S5QVouVZ|Nrfo zO&J{+3}WL4Gx*1v=*7#zp&(YmnA4V(@h4sFnnMFak_(^ngv431czmK~ zuRC~jiqqDA6O({i6HNt3Jn{iIFcS4 zi)3)L-8eOscdJp5(Rl_Yj>8TDy?HOTd8$i_#GVc0iP*i5b#*r*Q-`2!qVjH`v=?7r z-{5`t;6cKJgog~54HyI*Bu=u)9^g5g#-Yxx&dkj1Y(L?zq#D0~0}HQ9x#S50N5+Gm zGBz^u4R78n9G(+1ciEvQj7%J>8yC!Q{${r6G>a>XBufR$yy~A-r3sh0fyS{lEs_(n zJh73p7^pi%e-U#7gVKxC8RZA{SgM4lpH2Y!=EGF8s|D8`l^I0RT4aDuh=}Dl=e4lI ziRnq~mm5b|8JId&d=hvQy9LbVSl_td&6nrb<&)mD0L?m-sc_=xrGF^0{P4g Yt=b*-KOWv&4vZ@XPgg&ebxsLQ0EKg`2mk;8 diff --git a/resources/mesh_free_edges_2d.png b/resources/mesh_free_edges_2d.png deleted file mode 100644 index cc6cdb8ad77fe61557ad792ebad4b2b9d767be02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 501 zcmVOUI+jH0fI?H zK~#90t&=}X!%!5(Pnsa7kRhQ?C5ujJp>E=!Q=m&la4DVoK}2e+IJgM~KS8Gq#Ysm8 z!9jFVu=xaaDik^tq-h*#!pol~RePq#<-OlK=iU1x&-1WO<YvkW9UG)+%NU2=N>`e=X(W8M6f!>C9i+RZ-!ZM)N& rea%+6GaG1{o@^A2p|X+Lw~)R8ACZmLC~+Ym00000NkvXXu0mjf{aVfp diff --git a/resources/mesh_hexa.png b/resources/mesh_hexa.png deleted file mode 100644 index b4b64b2e48d4b6d68209a11929fdd1a21e5b2882..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmV+@0oVSCP)Z!zVVVbLE z-PlHj5U~&jKeIGE6FAxt*%PLj>u;TurHy5u-nSB2H?(y$2lh<{d0NuV#hs1uc9qp2 z7xl_J`pw0%z6osuL>6nQnrEZka5wAc8l4-Q9f%OCovIFhkw0}0000nxgt=Dtl>lcdu%%+L`v@bfcjuPj)yOpvie^^5l3eWD%9@`0Vz<4P-~$euEK-JbCy zgh0m9z|-j()h`fvK-tY~%js;bBOMyDM%7O30C0tC)B%V*K=lihQV8I+e60x^ozsf6 zF(-fl0j0=Vb>F2aMw+j+@A;@sb>qxGJ1R<@E45X|;`6^}2Ah~e5`btD5)qOuRBK=J{M7R&?=uaSS&RO+u1oViPvKbvOl0j$|x3 z|9H;u>(DBS>$!}6RF-8dPZcK11WBu^ApByXP1{pwy6u_^N)dZB=aV3 z7HtuZwVoH(=RA?lO6M{Ur^A3`@51w6OqMg*^U9^Xxz8>iA3}hJ1JH3?hz@kZ1JZe- zV@$uTWzP+X6hlvuzX;O6<5M47uv+`D+D{a+)Wp)~S9e25+N&#;vw-+C%=tLblcX}r zMnnNU2cFNj1ehf|Ps}+`9eAEBQD-=9{t6Q)0V9fs^Ur`chQ(PvZUMq5=4>{dB(?W% zH}Kuv6#56+XGTFFrhD*?qwu*3XUIFT+i;RnxdgVPKx{h$n*>8~K*F{{3S&^0Ln*v* z65_}Ew8*qhyDBlFWKuBJPe=N)DQKA~fXYdPEy5fpVZzaZLqyBl257fBplVrYBLib{ zy1lDON@2-|G-n}Ykg22Ha=|iVz~K=V`;kzKq-6$%*9TeC2vHUzFijhNQUciK>cA#V zcr3_N0IFmzx}z#I$MNpm-nZZtyeri){b- a1^fXkxYyqogPPR<0000z diff --git a/resources/mesh_hypo_edit.png b/resources/mesh_hypo_edit.png deleted file mode 100644 index 8f61dea7c650b28364e75b572070759930f4a1fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 914 zcmV;D18w|?P)gBwsc3c860&0M<4sgngI6SqQUZDdBF`#fY56OyeSeDGu7 z$D7aZ&HKIYcQk~54P`0;u=19+Urs8S&e@di1mU(zDJ4$Bm0HCWrId`zNlm6dV=^M; zFKf%8|5Aw#v|N9*EDf28&tOMOls~Fc{h=P77=&fc8yH!m4;HQ45FhYc!-pzU$yEFV zPV`z2M)sX^2Zk!tW6<^>bIAY`X*CS;$plyyNg!#vcx}+$&}93%;6yhEVJzhe;n9B8 zU8&iQ)NEHA+m)K_ihu}6t>Va!rR(zYlUdp8nJnfCA|Q*og3LZV_xadM=)#;ntoQtB zqbbjwoZk;7smb*BBQUoy3|n7uq_9wyU2Q_L@tNDfHdB-7%b~$W_aZ=NI+dWb;!yW0 zY&C7}m0ilwIAWLJm#gr|S(b7IR<9HYIv#f)y6ebS8=qbdDN{)%YoPDJ+8#`&64Wa$ zUZufS)5gkMTJXt?q%S1FbAbr6`Vz*KHUMW%o#E{BFLKnpPbTt~MbLnT?NcrKeOR~B zZk%}Fq-;dvx88d-4V?yf4Y;vN(D4X59<#@u#oY>equHG|Qz`P6McsBG@Btmq^?B^2 z2icWdJoU^ezIZ|o_Btq%k+mEvOB0Np3>b&j7- zu=#b9SLWvdNW@C~`uh`v!(o2*s=RA_$hFqDL&_Q&?7U@R0vFF^IDR@owdC+88i(&c zjQ@vE`(~Qg-@3p<2anSBpjcZTk*PN5Hp*0zw=6WEy5{VuxT|3i;b!MA4%`vL_k8pi z_+y~|00+>k3+vd;B9BjHI2Z#W-F?3Wt)PM3Eb{ab13lv7wgM{6l|D2y&fDx}v72Ca z51BnQMY65QV?X1W3$fb)i|pQkJrowJ>EVYncOe{uR1$Nyjj(uwk`PTxKze*-SFZnMLf5 zZGmLPvXo}JGdH>!t={c>Z*Qd#UJO0a0$^gJUe1<(FRiuYg_U(;MQbh3=7Jz_a$L#2 zn!^Zz(z#EpmwacY- zyt^8qwFV%%iFho*7YEA*s(DvAe}!oapS%R2yvw& z9DwTqeF8jy-rs=tqcN`rHN{%9ov&zqJdX$ihuwLShua49l%8mGnN){dzPTm{2K=cF zFtJguzYpY$>z=O<=h@LkN5D*f$m%Ya`)T)9Xs!Ei%HcfgMnEtKd89iJ`zCnHl;`4q begS_0=KjG&L)HZ%00000NkvXXu0mjfhteo# diff --git a/resources/mesh_hypo_segment.png b/resources/mesh_hypo_segment.png deleted file mode 100644 index 2d924502382b82403079930585fac2d70928e0d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmV-o0-gPdP)Y65QRTw3{FgCZCTBne_$9`T9~k!$?#6U!fHY~fnlYEG0K$1EMhj3j4Ux7yJJ@% z=`7iDGu@e;lQetp-tN9V1vuU{l_&?0uF~NBX!mbdO1Zo!-F8ztrIfoE3l0ZYr%XCF zeG36ynsYJ%&buRk9-vB;i|-_IDSe9FY5-FW(;qt+U@~A5L9HQPNJwyUDFLV}_%erh zF3~lR;NpcOP18}*gOuZi#99M{2*3ig?+w>xy`E3`b^k(kSf4a&qzT)sba|G$ZC1MN z=D0fW{`#DcHffNuN|cjJiO~j22-Z;UKC20z5dSK%l-MNDW%T7 wO?;0pdGEvDIyxhR(ETwBBE{hL0O4RL!a!q{9xXSL;Yt9oH9<6Lzpj(e{T-9mxj_)&C! zPzUU4^P|@GZ$m_+)vjy%^bcq;UpeoyQ+M0QP9!e*Y7yyb5vhpi03eSc-eiT1hsWE- z(ZvDS1ZSCA*x|7j9Prwgt Wqu1owqKOUw0000+LB49>33jMxnX8U`{5 zqyeT886aEo{>^&^P99DM0U*TgLa57-4Z-Ki7jIrLNB|+og*d&8&j4Zo)-Xi(CMlM( zkg9n04Dn#F zhJvb7qeikV%Pl$iI3ekt-<@<9fPkY)cwD%?fPsu7=ogD0Py(^rPc>z)OrT~TnG-zf z3x-k@h4P?s{GDM93}usVpeifiU%Z2bXi-pL!m)eMmepp+HD+~|TF!4yAbm~+i3kuv zV0=0bnmKFmuujjCOSXpPnzF?Z6 zW~cY3m(yPN?7d}CKeL~OSXAtV!TNCx%ljoP?iLMJqQ$;RduB$mFU`Zl#tIlvNJfbT zh)&wsWo=OTW$&4gEJga1{;C<>&kwGLx_)4uVdow13;mRo-U3d6?2|W*~@v@K)}tORaCuT z;icaa>mM00v-m$WvgY8Q&>F&Vh2@P>fo9L7h>g6KyHAI6-F^J-rF&yxh6#fM=LVjw ze0OeakYFv_n|z5y$tg5^ebnC2?NcR`d=e89(_gD=USRKkXqQmav-#`Ec}(Zs?ma9i zee(L}wy4`Brk~g*1#diTb8_X4#CcD?7$lsMXS%<9&fUGsR+lqKp8DFC-0|Vy;=Nn; z?|r+J&r{eZF<_BM={H`LrdC!#S>``~nhbb#epOAMANQ=pUchMiGJ^`HuN-cckuP+Z QfSzOUboFyt=akR{0G&B~TmS$7 diff --git a/resources/mesh_length.png b/resources/mesh_length.png deleted file mode 100644 index 64ddd510453fd574330cef3122cfff7430e73842..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmV-c0jd6pP)<672Ey8s{HaQ!RV0dJ)d5!8A%knHu)p={kqf|LM%|u&;PXX2e5j z*=eoT{g_}G=`ocC@DyFFAk+EiH7|?u>0#AsdPt3guCZRNAzsFi7y0{8xXU5gCqF^2 zx2t-KfgnK6)dw3W&B2Cz;hRU0oim9$hO_XiuLxX33pF1GL+}IN{13;IF~d&L)9q&4 zsasU%aZh#G_+x7*?wIVFEvU-{_W^FbDH07*qoM6N<$g3)f42LJ#7 diff --git a/resources/mesh_length_2d.png b/resources/mesh_length_2d.png deleted file mode 100644 index 0009dc0cc68f474ce91668346413291b1eb6315b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmV;;0W$uHP)tmr{qmLbu{pyVNdrkq*UIu+Smx)Ty|L zqnqH^p_7PU2KRJ`HzqNbL_9;tNzVEB|8vh(_?$Hg(ZnY|KG{<^_TyBj+GS@ku0Sb+ zGEfET6m_OAw44`|RA$}_{}rAF_rqrpeom!{UMsDjKCNY9%^LGq?tZ%d0r0E8fJsJm zeP}&Y!*sLW>}Ker+z%Ik$IF|Hw0#U;hYVf@EZ58Zp@=1n-bT5h^=S=n>j9ukIsz0y zmo%N<`^?a2jaY)M?bsOsF#aC<-qz#!q8EO9n!FzcUQGgMrCh--+lPDTG##Z&n(nH{ z?cy$zS`ncrMZ}Wy#Wqm8Y}5HkA3@SCRscSFQw&t=^tsL&^U$t{AR;(TCuOk{PzdJQ zUG->Rw`oz0)kN(=#=C6Pnq7?nBX%JP|xOOp>{c7j^3AbSCvi&>`Cu2cLua-1=2eg*K M)78&qol`;+0Cx&G=l}o! diff --git a/resources/mesh_line_n.png b/resources/mesh_line_n.png deleted file mode 100644 index ce082c63c4af3e040cdc5101ca48cabb1103d518..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmV-x0hIoUP)5@9qo@C&Y z_3l0E-6=f(iYWM{x@qlEW6xe@wVxpBaj!5?ML6LN%+`2`1Q8+2GxgAL1f!Paw8qtr zrfJ%OM_tbZ9(tOs@l{#zTD$|`R!7oh`m1uTLWzVpiTO^y0MM5=TL0_CrV~zu6wFceO)KYXF+f8J*}!`;$4$@=WPO(`?ScN}mRME@{xD%pnaP zy>L=L@7TTd=EK}o?cVzS_I%s)Ip`)N%QH1pRg?w0&z%>M078!%hO3LswN{lC02)1G zAO6v(AJd{N5NQ`lxMhVOE{1+gQ&Qq2Mxs#5BM=cZx>eV$x*xSyp-29(WtRW|002ov JPDHLkV1mNqpiuw- diff --git a/resources/mesh_make_group.png b/resources/mesh_make_group.png deleted file mode 100644 index 19ba2e66eaaf380a718f336b6145601380036e2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432 zcmV;h0Z;ykP)((cdl$S3t@!YVSZgvg3x<#>KVd+Xa#4z9|d96>j-?T%} z?c*ZXF_wUZs(a}nPYT$MO8fRM3GFv+grDdDH=*hpLe+ir$hPZNyShvwm3Y#&!Vn6`Pf5z&kV+f{WmAO_o1tQ?<6YicC0Ee0000W&%gZGFm^rBZ>HYX+MjYV0PWCv zei@(k=lAEeet#PNjR`jC_m=zw&occ;>0LGGX7U_cK-9)uj*$DL|~=lJ08&((`m-R44=q*NbNm zw`r|;ni_uJ8MM~!Jgfl3sw)BKlUgccDPWE~vY8rtHYztdt%7(k1w_g|Lo+ob-x8#> zU7byWAP!EpR3|Dxxn#<53~+z|A`8&kZZC-S`F6(PV6PtMk|{gF$cf&XuwmQ#iDSPU z+>lGAa>;@}M!w9&}diuNcd^uQ~d4Oq!;Fw?4E@ zKX#6ak3K8|yiWhS{zI8R0I!9I>3ItMaMAXD(&$-}{qFAtP(95>Vn?IlMDE8%q_}Vq zko&Qzn{Rh6rsOo9TiZpn*=^a0-2vvK;Y8MUdvl=Ex{D&gH-Gk4*Ef=^_7Ka%Satu! zsw;u=N~ly^a~EQ|CdNLa}7YdH9p>fq^mG)5S5QVouVZ|Nrfo zO&J{+3}c%i>G|(CBZ!%ise?6^VfMlU35hD#92yvsT=<+PBwk-{Y;Y&K zmRIjt?DE!yoby>37+bD72soIDND6FXP-rmVxpS+e*HJTsd;P*4It-FL0uB+pEQ~d6 zNyVwo&dz&#rkpWuU^rwT;Ide{s{Xqt+j^T~5$32{Q5$wiC^Q5lNxn&062Z2UFGb^w zL5Z`4g@uGggv9|99tIWxw@r@hvu3TRNpZHYw2+jDkoeX3=Da~=1A|hA!miT}ZJb;j zevckJ{K1e?&o24w$tx34HGZ(|tX4WQ7h}~llujrdQ2ub|^!3%uv*W;yu#}mYEd0!9 zLgI-y7j_0lmkXy2-Z#Z^d{NVzevrX|K``{z0VM{Jw3aJOECPPa7x#9{&E5eNPc#*< z{oK5_TMW#5_|-_m`tQ%L?Gq$5fFV#I#ZjcHk-uq!;M9zopr0Q|C}Q~&?~ diff --git a/resources/mesh_multi_edges_2d.png b/resources/mesh_multi_edges_2d.png deleted file mode 100644 index 627ceebbf9fb3be4b3f4a169b20ebf085a38b728..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmV6ze7k{sm6bzd#fR zse@P?EVNr4gt`_w6r^wt<-#S`HZA&1xkv7I-+SL3Nh$H4+WJ?T4kRK;M1Qs`k_94? zrA{$cdprD~b%CVMkci}901Vsxs1|s2W7DbwV!-{EJ$bv+0}zMmN*>TH_aLQ=4lr6C zw)?2GeB|Kcv2kwz&!6sM>lzABvzJnm;ZSX;w0r?133&`i^-_46=>|bUE3kEYsHDiWJDcB-NhBJV` z6*EuP29`R-SbHoOj_q8t#bXvcW#)-@}@?xBW4v}VCZnj1OP-==by yOmickQW%E8>}Qt7SPv+rBsc4h#CB?KG5rF%dx(+h`(^DB{sA1@a_>bEaPj~E002ovPDHLkV1mE-m#_c; diff --git a/resources/mesh_pattern.png b/resources/mesh_pattern.png deleted file mode 100755 index 9440269b7d8d7f02fc9df2acf592d574927e29c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W?!3HGtkJx+wQfx`y?k)`fL2$v|<&%LToCO|{ z#S9GG0wBz|R(WqJP>{XE)7O>#3MV745#Oid(kp;M8$DedLn`KMonp(^Y{1hxUwPT8 z33C?)E$^GtX#AaFP9taOt7CF2uIRpF=v*TdRB+wodZ#fnEAd5bUz4$;|C|>neU!eFzZEw>2!MZ&pG3&;r zLLCTMmfde=elxRzeU zsUUKCVfnJ`jj#pQUeh$~Mo~rYfKjY*FHnMut#yIE978iTS$~ASxeh#(BST>Oww3T| z7wEjdaH8W;j(W$;%%Sd#QIL#(?6@-qK73!xmnHM3d2==fzTiZP8|kz_px0ut7M@>s6fXvaH;fu8BUri6!c!T(!^f5RT6#Wozv_&oJ3cqCC&DSYygv=}W;m;BBB+ zRg~w}Nl_NxstSN6I*@}nRmDsV=TdG9(oPZ9TGu!!%0d7%(nwYJ{zP>n3|mIvb@K`! zauD);P7Nc3!SAn4H5tNawO*0u6(oQW!Ycpg20f_sU2-RyXfLQg!eBCp`lI?ASX)zs p`{e#27@Th#pn4DMrCb7P><1vgh>SvKf2{xj002ovPDHLkV1iRA*X;lR diff --git a/resources/mesh_polygon.png b/resources/mesh_polygon.png deleted file mode 100644 index a1f671b1fe3749d4cfeec9203f3ed8fb520627b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmVsAP>5iu*J?<2W9}|sfVR0##m|% zfdBPwGuW}8MXu#DGw|5Yl5*%Ar5rfrz#5db8IE989+Dm_v=Fz7|}Sa zi$g0+(=_F~YN1%?CMEZ6^5v?-23(!p1?VNyUDni&&67$!Hr-9R^Aphe)ldEnNUKL$ haySKg$US9u;1@4XY4z{U4m|(>002ovPDHLkV1igzUx@$! diff --git a/resources/mesh_polyhedron.png b/resources/mesh_polyhedron.png deleted file mode 100644 index f475dec62ef6f8bc1f4be34ce5d3c84011c050a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 400 zcmV;B0dM|^P)8IfhnAyGrNoRoA$x*{YZFDOt_pQb5^NT@_ayr7(HX_&RFq~80Yq|RUfaAt;? zB@yw$1qCHko?6PIHltwLy;jrLZldBI6%}TdvgK5{qW@{+O=!iI=! usLxj397c9v~WI*8IwfF&7uF*znbxXE^STd7rDjyTpp#jP?OJBJ` z@BwdnX#~I6N_j+|s-QbP_TXw+VSR##5L`fT0nsIFtJ{$4a$ad@tYKqKw}^Y?Gp%$% z99=pL&`!DhZWeZ{&ZJNNH`IDsCi_k~c^PP((*(?VN~@$0Bu+8ZQe2+%HmLyru`a_4 c?D7lt1ENHgXR*1d3jhEB07*qoM6N<$f+GrWOaK4? diff --git a/resources/mesh_pyramid_n.png b/resources/mesh_pyramid_n.png deleted file mode 100644 index edde6a59fd181d4ab3807cdd3e5f5e063f1d1b43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 621 zcmV-z0+RiSP)BjU6oo$r4Nsuq88Rqa3|?X~#9QcU+C>m(JO(<2{(zD(^^oRQ1Wy5FlQR@&30^}t zcL?zkus3%o_zec#!JrPZWIfs1dM91Ich5cd+#}UU_^;vQPqhMcLap*$IZAh&VzPCi z5Yc0lC`X}`qVus+tEzLXstPaw^?C$=oJ@DKTmx?)O4Nrx-Vy*go}gZj7&`;ntMg5R z(|O9YRJW5;1_of7WAu9)fVuwyz`>sn>EX$AOM<;BFm*ZyAYR56kceOo#{dLp0i91B zYdWV2Onw~zAR^Rt9dkHF&)O)Zn9invt!1{fy|4dZ28vQ0uQ8btK(`nfjQmLXk0_>ktNIYy2rR=HW4ZHCHGxSorTpT4M^ zVZ&UO!on24ltPT2M~R3aE1`Sdwb%oe&e0%BnTx;*Vu|?&uY&(8vX-^B00000NkvXX Hu0mjf;KLfY diff --git a/resources/mesh_quad.png b/resources/mesh_quad.png deleted file mode 100644 index 1eba33ebb2e0e191c7184c441c21f29da75480a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqEPDf}2yM0f@6sa}7d-Quh?D*Ez!W8Vg%_1S}y-HX#qip|wE1&Fj>uh4md2L${ zF^Y=Fe0=}sZ^?-bnrVUti=t01ZkSj7AX#JY;qnB=r88##*qSBdm3qfTqpt9-hxUiu z&#Eh*1)T@mo_+MSc3EIn_<8=}$FbK=+*xQ@z?^f@Wd1daGigAF OGI+ZBxvX3=k1C8YPXxbm+i6`_WtX03zX8|9%O85`_{4DJ-v- z$p~m_6AEHL4DALWi#^o+%R+3*P38AjUpdqVbf%fh6x=6?VG61`FRHhh@s!_SA{4h$!8aP7N z{=}<Q)y)c>=}{Kr z_a+@mDyU46lLMf&2AIy|Kx1J0vv+wc-V~Q`g8l$Q=Df!&8x-pR0000AaDtHDIh18vwp_ zf{?i~RIcFj+dIvrC(9AQoS`ByBv8b+PJHX6{K%4Jsn>4PYhR{}A=P$^MH9m~=;`~k zdOX#X<5#K{Y5W;yb${t;KAI)0R(Mb4Fb;ENTLauhxY&YCjKb@N?kc7QZk>4CCT`bF zDd##({!XkC+QA$lTP3uON6BDzKUTgh_V*!$&&Hn<)|Q`)|8MyhFP+`Lk&L1M00000 LNkvXXu0mjf!pMl; diff --git a/resources/mesh_rem_node.png b/resources/mesh_rem_node.png deleted file mode 100644 index c4f2834fc20166fb68db404c3f2f56fadcd07d9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmV<703QE|P)Q4BzZPkv#-2FuEmj`v6DN?F@OM`9F7!YvB* z);OIcg%~ux$Hio&zXKRz=!0223^BA}TD+=l|2FF@3u|3>aNUqv_Mg(w{*@2t^a=mK bUjTjp#0znXlzZ1(8SER7>-bDzcjSrA!pTpu1D@k+hHnBg8gKYx7hOb~_afqOW zuqialvUjuV)fre8hMA9l{uvO$l>7VN7))c>{p_St7fLBRj==!hwuLd|(^b diff --git a/resources/mesh_renumbering_elements.png b/resources/mesh_renumbering_elements.png deleted file mode 100644 index b7bcc1cc6389d119738cc54cd2a7d2218cb985b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VTavfC3&Vd9T(EcfWS|IVfk$L9 z0|U1Z2s2)~TlWVj$X?><>&kwGO^BCCds*eQJwT!7o-U3d6?3*u3FJCtz|$7|k;kg4 zrP05t`=MtU8~ZxHmreEv9;_*5;*7i~1F?;g}+8zy^_XT2C0RS@4L5_*(v(^20V*BWP350nfmq zzmJl>p3HRdzy0*|QHPbXi|j?z0=Qo=)YyB+N$t!_gX7F_Nb6Mw<&;$T-*o8j; diff --git a/resources/mesh_renumbering_nodes.png b/resources/mesh_renumbering_nodes.png deleted file mode 100644 index dc1cb3dc8cc98f5e8a2908e13976f2f35d6fa991..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VTavfC3&Vd9T(EcfWS|IVfk$L9 z0|U1Z2s2)~TlWVj$X?><>&kwGO^BC~LGgu+Jp%)ypr?ytNX4ADQyjex2Z*?y&u;eC zQ1lQNII%`y-2$f*W+HE-COO_|UT~X(wKdOS_2LF^jofJolWo}9{(7!b6DWBkeZSn| zfAN3uDURtTI`8CvR696M%&Yyu?ELe@NrMC5U&hpPD{PhxJw568=hSS&1FL7M7IH0c zd?IVIjX~{pZ_2jC3~2_P!KQa7S!`|i+ut_-!p?Vj%WY!sFa`vfeEzNQNu~3${`v)F z?flcfd(327J-_pWdG+(h=qtAYN1FQjg|+wr7wy?%t$)_?>tmwTHfPvy8@@18m(YD@L4 g7szopr0E0E4dH?_b diff --git a/resources/mesh_revolution.png b/resources/mesh_revolution.png deleted file mode 100644 index 3190e5f1bc4434007c99a2a6083db131ec0dc9bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450 zcmV;z0X_bSP)wZbWk;%5dP zn;$~0Ga!gPi6xs-%}c4ig(kqhdC=mot>PokCCY6)T%BR&X%9;tDzH3j4lwsHjdb*u zXB&ajBQqK=0bfzr00ll~$7ZH5`B%O&fbs{(8T3qH|Cazxosz>% diff --git a/resources/mesh_rotation.png b/resources/mesh_rotation.png deleted file mode 100644 index b971d45542382a0e4bb2d955d9e69519fbac7a72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmV;10(t$3P)CnniXCM-q_&s05=u`H0y7n@fp3{#oF z?`hLwiKgiQgc-i35twoPZ-g(0gvTF_=bDQoMxS=!@FaT)0FLVjWvh2VGk8)KXmwt9 z*4Q1QD_ea89s&4iL-f28llD{Lxt`IvMqB#nGQtYb8-+cG%bDwWC&o`3!gDXch4FJN&VYd)VK-`Y+0S_(UyOa`uXggXt+}ZdUwrXZ74B%p1EZ8Wd zlsQnd0P5>?vOFVh$7|uM+UYoK{GdyYQhn80Q;D`Bf@XlSRi%2rdYbGdLQ0905@oCD zIV}y0wxe58%I>5gXa*O`R(BoOF}~~LyZ#NwbxeJ|PP7%xympZ~yPa=Z>y?>J37Wx~ zvK2}xlu~b$tq7XIkYE^EMtBG4j#m9IPq}+DZpWWWmTs{Q-XEAje?Zz#=e(tVn<7a| gvTCp5;mvt}0OSC_EBH$9Gynhq07*qoM6N<$fujP) zp||BgVu5+N76M_mPB4k!9w_nhF2^8EMf1vOghqBzZWrOr2X^>-_yIwuh)W(R(|!N| N002ovPDHLkV1ls-Zdm{T diff --git a/resources/mesh_set_hypo.png b/resources/mesh_set_hypo.png deleted file mode 100644 index 68949b83e43af5e07537bcf67b56da58daf332be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235 zcmV->9>~2hL}9CA09I6C*!$_8L#f_a0&`*t%N+uKd|;=)hc{n!PD)E13-bT~002ovPDHLkV1i;^VZ;Cc diff --git a/resources/mesh_sew_bordertoside.png b/resources/mesh_sew_bordertoside.png deleted file mode 100644 index 48a3ba1d3a286b00bafb85afc19c026fc48be400..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VTavfC3&Vd9T(EcfWS|IVfk$L9 z0|U1Z2s2)~TlWVj$X?><>&kwGU5r~wQ|7Tf2>C;W@ddx~I9WO?!3g z>vD(Shd#l{?<;y`S4MELnQTpqUz_G867@OBM6`QW=`77F6J-ti(>UHx3vIVCg!0EmT) AF#rGn diff --git a/resources/mesh_sew_conform_freeborders.png b/resources/mesh_sew_conform_freeborders.png deleted file mode 100644 index fff04a28e3a6b4eebd1d2cf012362e10a367ee0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmV;U0bKrxP)~!!Qs#T}B(XIle;09k{}^p~6nD{f=i?e}iAt^t%X*uI2Qk3VX}#6$v_95Re%#od&B{Yb zh&$TY^|9vCTyTwxa-&l&52XTbn{8el#dHy&BB?k}K{o9^-GAB(^R{5&ehVOv&LIlb~$$7D)KGvhJfG;lvBG}UGcP;<` N002ovPDHLkV1ij{uonOT diff --git a/resources/mesh_sew_freeborders.png b/resources/mesh_sew_freeborders.png deleted file mode 100644 index 4b0f694dc365d7adf407cca2e7acc7f81595a509..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmV;N0b~A&P)~!!Qsc!iH(3~>-E`49 z*iIycw)BJWjQJzaXTBxyKm-stt+Jb^h_4Ei(H4MWpVP;Ej;~O0!|ij0zYG!hc+N)e zp5EV3%HJVITLHvqEB9i)rC(QoYqXVF;9Eb!|4TO7PNy1_Jda7(>~fmYV)R#D?DHT$ zC>cNm)s!QP1o^YxKSo>b#Y6Pn`M5?~qLQ1^vf1U~K};}p+Gq_sZI5k~A2;@3v#PEL zaUV8zdu%y(XI$r^+~}06x>CS(v+c|FcT;wq!#M|YSR{)e*Jw*r^2J>MNRyN_Nn`ZC z|CfUY?BVsmGFg%)DeGcAYQuNHdLaT;U2$4vw8!@0E8r7v-XYjVJ8+T!0000<>&kwGU5s0fB{sn1El_BSr;B4q#hkN~4ssqg;BlQF#D5`L zp`^9%(#$S)Fa3R@My=aVtYsGYI$@WIqFCogMfsNfIupJ=~>-ie+?Q>%WV} l+hh+HC*)WMEW3Pw{e$$%+5dP#4guZI;OXk;vd$@?2>_^fZ_EGy diff --git a/resources/mesh_shading.png b/resources/mesh_shading.png deleted file mode 100644 index a2535afaa1a7cfc71815ce1066cb54714c51d715..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352 zcmV-m0iXVfP)Zq}6ox-n3=heJE%g*!!%7$KlmSIONF};55t7eHGPOzAo#NnaR;YT=aW_Lnx6VtCF5PwS9$f%)VNTHj@@w0*5?qS+vF?S{5*vS2+>gvpD~B)pGmUa=YHR|J*k%<^cmr yz9d*<0X8jWE0jV&gDvc)#eCq2&67==Ft7c#iez@Ea_76Y_X&YQw8KUkf0`uui-1C3B-j# zE&|$O##&jUA&}&OjU~aS_kR7B!11Lz`C42I6gb4^JfCdt>xqI3Z5Q_J%E zQlx7b$qp9XXsUI2ux9EGQ+F(XEJ@Y*0BGut^PlJN#!+ZE7lZ#diNMXGtxNQsh78V5 z&t|~Q)dm15B{GvN)B-Y4g*p!O(0x7aVCjdRaU5A)t`1!5MxzR~KNOf9Oej0pT?wMH zgweORTkK!~0$`+SU9!2_&=36#60UD=w|<<<94X~-;G~OR7fIO7pBulK%p|$Yk2{>) zrRD+eTuO;56nT-O3YBoUuj4daU9M*Jy8eC5IF374d)VUJ0#zvAPqj7*gMLXDCTO=aJ Z`UmoH?>WBknMVKs002ovPDHLkV1oI}+pqut diff --git a/resources/mesh_skew.png b/resources/mesh_skew.png deleted file mode 100644 index 45cca1b3ebddfd5c6526bc5745e65af7170f547c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmV-l0igbgP)15Juky6|+)^93Z#~zJih}Rq!=(1{DIi2zUy?rqKVN71_=Q zf-QF6yqR4YJU7kVZE^nv^wf=4YlE-8bLs3e1)+DynE7_mdqhwd!jy)^x+?Pd{5=YJ z+}u~|G)Ze<7d!=OX7{>7GbK*qkxQAHTgUGBa|FPJZv2-2YPWsa0w95~aEk%pOgjLP z9Om4J;U#tiIk*kH#x8WM9#*Djc#Rzte@gSI%t_Y{DBj@(tq$4Mz%z%Y3`L}}8w8fG zUR8U5_0xK?NDlOv=p*uJk`gB|B7zHDs}+F#+a6UNE!Z-YK(L`@$r3BJH=8o53K^XA xgbi&z$3dV7j@(Lu{%pz|z7Aehk*wa=%r8fkYkv-HcUk}d002ovPDHLkV1mX)mb(A| diff --git a/resources/mesh_smoothing.png b/resources/mesh_smoothing.png deleted file mode 100644 index 0da777dfa6c5639ae62b80fb4de1328aed58d323..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 416 zcmV;R0bl-!P)H zK~#90wUoh1!$1&*ziEoFJrrs{N}fQ3oO}%Fi+J%|DHNgDcknf&kKswEZ=h0$fgHM* z*74A6YU3ttX&eX%JO6&W^Un}TjG@VBHA(~8Rf%=Cr&YNiOXVnF4hw=T{r2SA>uyhj zEEV^z1?I38K)AG?sw9KY+ZiZKdXfmB_!S`D*9+yQGl}d|26}~z~0M3_oueL1$&kwIViNQE7)4g#cPt@?ad3n2m>_wL5Lt9PGK_F;Vuc?CC+kVt8vh z?4t3epo&8Eql(TR=b(pa<&^(nXe~eou)t+v%-cyoUo`Gv%1C5T4*N!%s?0000< KMNUMnLSTYIDzGO2 diff --git a/resources/mesh_symmetry_axis.png b/resources/mesh_symmetry_axis.png deleted file mode 100644 index dd5e19bcfd80083e8b90672b1e7ceaf6d9db00bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430 zcmV;f0a5;mP)>dr1qj^5h`Zd1uFcoLkTG@H+i4#}qhy+^2S!+h`k7gFM z05KBl2Rg6;v{PXhJP!20##ZVoxD^IqzUyY4gK)34R8CaycO%T0(gS0awHyOeafYwd zLQ0!#D7S42Der)96QKY7Uef%9l#Be@LzNs7w~)YFqDSgek)G0KbGJ`h3$=-UfZxT7 z0;1Q5s;*c8gki}3ZI9iDxjuyciLom4avcEdUUsCX)Xodzd=m_ys;j!~r=?IA)~)7p zx%3-!4mt(9%D>e%S^qwqP;y9S@564|z@|EW94YgXbABF#OlEBR-$938A#yF*uo;B> Y0k`SNFI^A_zW@LL07*qoM6N<$g1;#!!Qs=pG*oCZDD5I=2wfR^pc1+;Cbvl!E!qTp4WA(k8++k}H?6v` z&_$#&H7tXE~7iQlyu(J>32C-a>7lAK-U&Qb6<; zQPmY2fG`X>z8^7JdHWECH^!>W%WVK~cs-C_QoAmU@m(;0s;=s;pVmUhuzod7(+nHb z2VH{Qfa60~Z3o UFVZ+5f&c&j07*qoM6N<$f`VM9<^TWy diff --git a/resources/mesh_symmetry_point.png b/resources/mesh_symmetry_point.png deleted file mode 100644 index 81a29a73cf673cf5f75b162e9e2a3db8e824c79d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430 zcmV;f0a5;mP)GOoj%Grl7zA;*5UT%GW!|_0RP4&8`j30slRCQH%{j?T3g$=7| znr7UfE~pLG%Y4*2*!VrPC_cx|_iz~2*P$-o7s|ZkmfvPB)`;{MZiEhg1H@LaV>fg8 Y2MuY%E|Wy$cK`qY07*qoM6N<$g2zL*1poj5 diff --git a/resources/mesh_taper.png b/resources/mesh_taper.png deleted file mode 100644 index 68dbc66e6d8b02d6bc439066f7004534d4dd1dd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmV;40e1e0P)b;z6hL1f!;h4~Y@7k9r$Ak(dZ7whiJ~5$Vyd`8#6r7NoC2w5$Pg(EmGD684yi*z z?0{7Iw>aO=@BeQH7%m!}%i{h47<&H%m1Y=%bMyQ_-=>yGmWeqFXnt|4>87^c3A)_e z56bU6%UenYUZ)=bygkBbGN2Q5oq6-;IeM>2v(z&bPl=<+!RFh1m3G_DEdVN3{wZ5K z8@AlhWKaXoo@M|@DD+g%0c;t-YPu=Gw+~n4x<~<2%42wJ=K>$w5f3tu^dnr*}kgRP@ma6hTo~ nN!aX-jrIH5Xswa`A+H)g;gEB`b!?|z00000NkvXXu0mjflJu}g diff --git a/resources/mesh_tetra.png b/resources/mesh_tetra.png deleted file mode 100644 index 6812d5b68623ae785eeb1875885a7defa2297e86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmV+m0rdWfP)tt3Wm2L-P25{Q|9WsISv+ R@8JLd002ovPDHLkV1nJSaO400 diff --git a/resources/mesh_tetra_n.png b/resources/mesh_tetra_n.png deleted file mode 100644 index fa4d0fae9cf96049c3acb676ff2b347fed6d5df9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmV-P0=E5$P)Pp zhzR{bKOn$h2*SP5N|s$s4ZsN>{oQK0B8npt5*)0GaJyFu9ZY(2^!O0%`S}U(|Cky#w?)P1~wXpu69{^2$9z~kPr z-}{1<{`uHl7*>)9oCztu7Q5En6kOz)G!Zz8-M%zTMGct zTU!vVb^Z8qu#<~o7^I^VwJiEgVxbu}0T_NA0&xBPy8fr+az`$AUhO^;5t29|yUhS- zwwfh{h9Lc!n$>c}V!0rR6MG+40hJk8HFNsqG^os(>{n*gTCrJgh$Le8ZCG-D-{AcV XvqBA?DVDM%00000NkvXXu0mjf)!YSG diff --git a/resources/mesh_translation_points.png b/resources/mesh_translation_points.png deleted file mode 100644 index 1805c97fbc0ec9f3c6bbde3ec3826597d17d201f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmV;`0V@89P)3shDU(N?G@aGS>MrAtY;Dj-Oi9rAW!ZR2*+Q%x%UaGv1 z7Lbn;q;G14RX#Du$aYsrrjGN&V1ZEwOzY4vZ8FLM;Jxi!E0EZ5sktYk9AU7q*4C+z zI(|nR)C#O%29#`hHfW>Ex(TFVL|itZTHByrFn3kDFypE}nVk$gk zawA<;sE=K-JDBlC$>#GoWkLus!9)om>f`uTD1k8mYO|j%6V7Yszk%gkegb+D2rM@e z={6m#b_BxND#;o_8RhVn9;-rex=jZwJlHm5l*7OGSrrOHpsk~4LihW9Z=j>0UtLgd zIq%(l=NRTa%oDw*a2vb&T0`cHvIlOaIP)?W6D;7u1}tmJT4*00000 LNkvXXu0mjfbz8x) diff --git a/resources/mesh_translation_vector.png b/resources/mesh_translation_vector.png deleted file mode 100644 index dc4f08af10fa367e9ad0f474bc80ec41055e87cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458 zcmV;*0X6=KP))KAQq#fmdZ`iP|=)Zycz5IY|69lc6if9!zR@*{o&lc+= zrwU@cv8R(X(a|butZ-KrP(h4;=j$X*XacQVJrla!Zmofx4Ej|E^~OW%?stkX?|xXG zX*p72e7o7b3)}#Y;XGu}ADp{=_rkyRUu+b91FE#0s;GcV#{d8T07*qoM6N<$g1wr+ AO#lD@ diff --git a/resources/mesh_tree_algo.png b/resources/mesh_tree_algo.png deleted file mode 100644 index 61b11bbdd529e9db5f988fd3efeb3c7b1a0eb565..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0y_0#6smkcv5LCtc)iP~dS{-&QJf zbS96nAs6#i`QGph*B;*=FAnZzTI+DJeZne%=PY9WHB2_|S9%1Cm2@AeI%%4+t@dq9 z!L=ZUsG`uIw~x-K@ybNIJmR*vCvo6^$e%CAPR8%Ot#=_&K9hk*A}IXAAGuEcrdvO^ SI!*xE&EV9Th$SfbOEWWb zhXuOXy!*jF<>)HG6`944Q+X2aSH;@+9bL>BJBKw=*le;R!|X(z7Lf#Fj>{`m7;a^= vSW8NYx@5atXJP7Cp{8_cWA>8p2Mi3y9?M94f1vRWXbpp>tDnm{r-UW|uA44F diff --git a/resources/mesh_tree_algo_mefisto.png b/resources/mesh_tree_algo_mefisto.png deleted file mode 100644 index 5375071b54a0235db4aab0908907fcd9bfc27927..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0y_T2B|pkcv5T18?&lP~foXd2P{U zYUf9R^(awR5ir8s`esn^`O#AiAxFUk;( z5T1QNFeO0gU+L!NsfQw2gtxz5uDsyUJC|N}3A+m>t6W!o3u1U4l5+U&&Q;IDub(WL g=^Cq$*`GV7C)Swb*7-7PphFluUHx3vIVCg!0R8qsGynhq diff --git a/resources/mesh_tree_algo_netgen.png b/resources/mesh_tree_algo_netgen.png deleted file mode 100644 index cb75b7e9d2c0c540feae86ebd25376f3cda5267d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0y_Xipc%kcwN$DL>9Th$SfbOEWWb zhXuOXy!*jF<>)HG6`944Q+X2aSH;@+9bL>BJBKw=*le;R!|X(z7Lf#Fj>{`m7;a^= vSW8NYx@5atXJP7Cp{8_cWA>8p2Mi3y9?M94f1vRWXbpp>tDnm{r-UW|uA44F diff --git a/resources/mesh_tree_algo_quad.png b/resources/mesh_tree_algo_quad.png deleted file mode 100644 index fe6ce0285194cbf77f4e60f5037107ed61e71fca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0y_3{Mxwkcv55Ctl=jP~dTi?|p5+ zWh|IpB*MPRUd*E*!0_Jpy?4H9X?WkdW^m)K-^yK@mzpl=*UO1B7`AF{G@6~bY|abD zB(4P_jbwRycV^>rv&$d)l@mD5HROfzUue=VWtLeWE6ihdX9mzt22WQ% Jmvv4FO#qEwH{<{S diff --git a/resources/mesh_tree_algo_regular.png b/resources/mesh_tree_algo_regular.png deleted file mode 100644 index ecd1f73513bff745ff9c2792adedbb267c7c1243..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xaUr!gukcv6UDL>9Th$SfbOHVp> z)_1z+mf!YF`FVT($j|H-U(7AAR&usN;H*MVfh#@!LhI9<{0^<0Iiumgs+l()9KYaG ivS(pt+LG!hR)*b7Q_fFo`TP%PFoUP7pUXO@geCxkJ}^W8 diff --git a/resources/mesh_tree_algo_tetra.png b/resources/mesh_tree_algo_tetra.png deleted file mode 100644 index 9c21a58c198111012112d2fe5aafe20404d7c597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xawj^(N7l!{JxM1({$v_d#0*}aI z1_o{+5N5n|x9$&6kiEpy*OmPW2QN3f>7-+~8h}E}JY5_^D(1|c- z6>DpE@|k!jg->`pf9aPL2Hi|np>sk%uUb6aF=O?#KE?y3OsUt`=9W%A(Jy$VFSv2P z!?K;sm2Rw@8^xyQd89ZLTFY=AoTbqDNASmme=5h>7x=9{yE2H!E+o{)_O8sFBhp@3 WcGB}_hgkz%%;4$j=d#Wzp$Pzwg=QlF diff --git a/resources/mesh_tree_group.png b/resources/mesh_tree_group.png deleted file mode 100644 index cfcfc687f397eebeaea38b740f9eef8ba18c79f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 411 zcmV;M0c8G(P)h*kgq0VqjC zK~#90g_Au_!$1&)zlkCg(WPWlrCYg8atca%sNHY?8oC@HC2~cdGRJUhWf+F|N70b=!HX%C&%=IjH~u002ovPDHLk FV1j0Ws9OL4 diff --git a/resources/mesh_tree_hypo.png b/resources/mesh_tree_hypo.png deleted file mode 100644 index 3ab76a6e821acf3a04e4deea24d30022fb5d624c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0y_1Wy;okcv4|1097J6giq?|Nl?@ zcEv9{<)p5#t3r$DoK;M|>~i62IP%K4FG?A%?5MBpUt|4gxzA+zC11ZzmdKI;Vst08QsI AhX4Qo diff --git a/resources/mesh_tree_hypo_area.png b/resources/mesh_tree_hypo_area.png deleted file mode 100644 index 22c8bd0ae432ef2c82e1f1ff986fd1504916df88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0y_EKe85kcv5TCtl<|pupiGpZCtE z?~%jx{%cvLY&xAEL+&{q5!kQ9n80DZ*~52A%x=dMPy8l2s9rCxk8=sXfAuI=w%`3m z<1MD0Au+e?SH9S`t98$LPG|XohP#0snOEMboRO}N%450^@z_G|PU$YuKhvB-fwnSu My85}Sb4q9e0QO=%PXGV_ diff --git a/resources/mesh_tree_hypo_length.png b/resources/mesh_tree_hypo_length.png deleted file mode 100644 index abe34f5b471fc0d2a5cc125876e71850fcc22753..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0y_1Wy;okcv5LCk65yP~dQme*AZR zjJ?^MgAb>yiC23X=)$SEbkboNjblIWX;1vfDtxQiEil2IXW4?&t;ucLK6V% Ct~ww9 diff --git a/resources/mesh_tree_hypo_segment.png b/resources/mesh_tree_hypo_segment.png deleted file mode 100644 index 1957e6d8fcc13868f52bcef9e4ff24dec42702a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0y_P)`@fkcwN$DL>9Th$S#i?(w+w zpSjY7LG9C<#SxF|HzXgdD88J!sOD^kZoxn0PNPR3K0Evry!+ST`9Xs``~T`a=H^VM qi#rX4<`!KL;{40pUa@=;BSZIAb@@e)6y1RqFnGH9xvX5*q7TeYt*E~)vzopr04Xy)_W%F@ diff --git a/resources/mesh_tree_importedmesh.png b/resources/mesh_tree_importedmesh.png deleted file mode 100644 index 0c37d0a7ec42c925da869172f040469d614828e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 912 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F?i!z|0Wf6XFWwGW=)Q+H&nbkRAo2 zAuz&1Ann3uKVTMMDhcun{?G7qyMY&wXY1+W7*cU7^&B@Bg8~Qhg_+;?7q5HTE+if7h4GYUBMsV)2mXWa7TNhg2k%WJkJ<2&o{64m|)+;x2Bzmso}^@VGEV-OG5mV zSv}|6)(SE>(lCWhrSPBH*R&|#;A3eUH@%LF`kHknoI~yCkCu7O2}N0KAK16l{mWdC0kclv8BYj8T}CeSeqp00i_>zopr0H_~FqyPW_ diff --git a/resources/mesh_tree_mesh_warn.png b/resources/mesh_tree_mesh_warn.png deleted file mode 100644 index d61b873c365922b18529c5db8154dccb4beeff01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0y_Tu&Frkcv5TCk1jHFyL^We6J?` zR$$qJH_5VF1yV21*HU?+soE0OJMXNdq{NKRKU|y?RGvQD*vaUS;F&1g?7(#5d9TQ| z3c2u|;Y&7JdwrcF73{nq^6i^N6}Jn|>A&+bxn9zd`DnS&5BGhczt`U@J+3XVWO7X= P&|(HpS3j3^P6drMSwiW1k^7*G(8iQkKvmRf9kG1n2r5WoF$jb_`%1@3qzp1wU z%R+$~7p?^fnsZ7|FgEp9#63u>mOb@JPo`^*jmU?vDcAN`*xFf!pDI}!ugB)~Sm5hI zi`!BYws~{+uol(c2-7(u_Vd;>+3x@Pr$rvGF7{Z#-+n1^`4!n!%>1pFg8MIDm@5l( ODTAl0pUXO@geCw$PfFgClC?li}`uD1?!+u zAbmXm01N;uuFADnD6&;yx5+2Us)UjX_xicFc=V2r1ki z^)owy-=;@cpf`6D?J4Sa28?q601?3$0|3yIJepjn_sGF4m@A1lkCF<>T>>Q)h$srI zs~UQz-ND?|-$MPx#uzMLmToRv6*iQntV$$E+<|<^bLL>&xP#Htw#h~}k|-z$DL}jf zMj|ZFhxz3RDIlciNpjMM=J7iY+qGG@8i(d*vCAP_6;@AjXO$2}lAxrDcF}*JH?#g& zyHYNJoh-SF{caB&;A})R3~PV`w~Q}-Os~@!dbb5ESh`7VU9}#g#$&!8&jW)X-t=*T or022Afx)lo3`<1l`t;KH16dNM0za#rVE_OC07*qoM6N<$fEjJRz7-+4bw1VDg5D{qKSoSwCu#XmE_NE_1Yqc^JL?jSLF|t|4 zf(lo!D^S!_Ez08XLc1yy5r|Valps)Pg#^jL4Wb^<_I+5#i5e__&udkxPE`^oo{D3T uFc8gxib!CDk=L73kki2SXLqgrC;kA{ag{=r^`v?L0000 diff --git a/resources/mesh_unionGroups.png b/resources/mesh_unionGroups.png deleted file mode 100644 index c3412bb09b2de82799924eaba0f741d1b5b37be8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 425 zcmV;a0apHrP)rNG_V-f4e*WAMSp~orUJCWdmSUU^SK*1m2$BPquoKF8)&3{6$qT2m@Bj74as{%;)ZKcJpx*96S&9hdRyFc;xot(TEL)!_4}A zrj;{1tTfZg86H-eX)f5B-&KZl!Qacz^MZd)RNS<#mjjQLx4bv5?QXd@>C&vXxvsU? z>V$sZC8@zHP83keYC_8s4$*n)CnT)ASt zo|RK_K@l7rM5HnXrk}9F|2TRX;klmS>7|*55kVM~f{kxkY(X^?9^T2AYAF5z;a*{X TI1=ln00000NkvXXu0mjfR))N= diff --git a/resources/mesh_uniontri.png b/resources/mesh_uniontri.png deleted file mode 100644 index 229cb6aa834bbbf42dfe448b0a6577fca39dbfc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417 zcmV;S0bc%zP)90WL{I zK~#90t&%-z!$1&)--az_!G)^?atGHwfC;X2jTE|s@fD2l4V+F%;Yv1p0M))jz{apC zRRlIgw9fw95q=<+l{DYXn;8a;yXxV-IDik1WR^D#1^{v|H5+W%imcyj5T^kZCeo|3 zf*1)95dfWeB5$|LgL77^%K6T7nE_zCJUI7aF>&s{Rrw|?pbwa?=V;630y{lDqb-{N zY;?7UZP{F)1{O~{sqYci7>|a*7!g_=&O$Y*~rh%00000 LNkvXXu0mjfhfu2< diff --git a/resources/mesh_update.png b/resources/mesh_update.png deleted file mode 100644 index 8757e30635a49a83f408d7f618a528dd025818c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmV+_0@eMAP)CrBx8JevJnL-~ULohd)8xBt;Q^47LLyDI>GzIbq zd4>#uXgD|x26a%a^WU~ZejpIC{Lxq6uOtt{yVi&I#ex6N8Q#Di4BpuEafKcR4^!Se zQ#V(i>^HfSy~T#srv^1EzMgUW^A>=sA6IU?d?*n@F#kOF{;seCOIIl`uP>;*B3ow; zu9QOU6}8$vu%j-%o{=mQwAKhA2qz)YG$NP;G6rf;o#H>AsSmYc=7dY6qc17n%qiLYzhOI^5)q9CRrvXStgBH!>!m9MsAxP z)+%?>sJ-Ii+Xd+=ZKWGb0v6xfDwAc>3ap*7hY2170E$h)+v^+Jx4>u`A$&3DaR<>K zky~lcR;61Cn}O8o0IM#H2*Ysr9M(UU4<+HW4{DYW!olLNvDdpPaw}awK95IX=_<8A zUx0r+HiM5t`KvT)uX+IhWb3SD#p(3ase_TLCxk#$g8VM$pbr4fQ?*yeRKo}{5l-Ex sLa@h2YYU*lfdK*$fN#TSK3xF60l(h+Ph!VND*ylh07*qoM6N<$f^!J;;s5{u diff --git a/resources/mesh_vertex.png b/resources/mesh_vertex.png deleted file mode 100644 index b85d63a13b0d7ace6de162c8ed8427ab33ef18e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=zNd?0NX4Awlpp6ELJzpaK6c}k zk!0H>5OT0%O3;5}1ECje-zQuBm0Z=Q0r>mdKI;Vst03&1_ AbN~PV diff --git a/resources/mesh_vertex_n.png b/resources/mesh_vertex_n.png deleted file mode 100644 index dfbafc9459f0a87e916f7d5a8f5b2c961729cc2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqEBOF-JySSM+m8hcsRX_|rBEZb z;eD0H+JuBf^PU8)+9i-zeemkM3uU@(w;9UI1OK}V2MKv;M?`3>bvWsxz{$)!sUl4x j_*i4h*T3f<@;CCYIjGRoEhoAI=z0cES3j3^P6&Cb(<`H~x$+?AejeA{7pY3ahXEU#?pHwTI$@yK0{uam!wA z`km&M9aUfrTDT$xmpvq@r4~eWb26ae&>s*Hbhfz!EnH&GhWR!#{Z5F;l1O7Hm5%LT z0qCSdMChce3L<+li9`>JL-f+&@%yNB_O}AIgGICeaDUu0kUy47_C6LQwqRw+N!6Uq z0uU)mOpjJ2+rctjC+6E6Oy2_eC{KCyE=*7FgKc&wTA=6Y(Y9dQ!1bZhvkTpF diff --git a/resources/mesh_wrap.png b/resources/mesh_wrap.png deleted file mode 100644 index c919168bc71dd3bf5ed3a72e199dab1a1590a3e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmV;%0XhDOP)8Y~A}B-Aucf^Z{zbcqj&-1i)%jT~xQ*E714z>}G{?p(DIZJB%1}O)m{&uVW)$;6O)4}igQV@L`@=r| z|7s{7O8~Mo^G%rq+S)Q>7G;PClE_Jii+SPef12)4>-V*@2kTYMvKf-L5D^)gH!-u3 wLP-RjYOc9Pr`p$M%E@J5ciDSueQkal-z+|vCd{+j5dZ)H07*qoM6N<$f)9|(iU0rr diff --git a/resources/pattern_sample_2d.png b/resources/pattern_sample_2d.png deleted file mode 100755 index 290872b5105974f199c563435cfaf842f135a1ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1180 zcmeAS@N?(olHy`uVBq!ia0vp^mwFdgVg_Dt6UpPx4{XPQ&i>9ZGV@SoEw|7r(x@9Hc5co6X z-~Z`T9lbic3*=^OyE5sT)ZN*ROxw(Kr8WAZvKjAvHvGkSfUAXt5f$}m!X{sW)aaEq8?D4?tweIWd`QyHxlX@#QsUu?MY~Fx-_YFBYnK(M%Zk?TQ zyzt8B`u(5E|Ll6)c+f{~drA1VN;M%C0U?_mMVB9b;Ek-9-wCrVkNahfzg*Spz5fp7 zo7H@KPmVnx%=t5$1*`}?)$g4 zeu}nu9^RB*&n75$J?#C~vfD0I-&nHNy086eFt_8%wgb;ium3(;b>jQPbA~hhVy0&D z^8QY`U&)egA#g@H*x~Gl{1dbM_9(sPe*a;Dmt=Y437bvpdqosYw^iF1AFlEc4NBha zuK9EMg~(GAybR}-ncuGTmkvs{dYgK!c&^=&AfM&2XKLz}bF4I+du_`h%eh)0p{r|( z3AEGvSl{vLmlLFJ@3kwlI~Ls%()F@r``!N6W{RfEf_096>VFGVU()sH$KTDV z9=$J1dXvBHU+WAMs+#)v%bjmPRhO^J%wEs=@<>V5xsN~QO_*me_g?`|ou9}28qn+$6Y=tBIWKe_m1UU7L$1sth(p@BeJ8(*j<{at$F7H8W;rEBqB z6B5cax0Ove_|q!$RQ3}0b^Q_#_dHv+$IVJu(AZ0KQpb$YSrc52X!O5VjGg#MYNf4U z{wX7;wO=D1@kSmrxV1am;OsTNG&L0t1u!az_7L1I@^IC?*ZP0f-F+;a@&Elf8QY$y z`fX(b3MNa|A6vOru3UQOzg_zjwU=GDOe?m?>b3QsKeyt##}|XFzdPNU7#<40d>{WN sPnP*>T>bV|7VC{$n;D#%aH9Q;38vqY10B;Xf#nE;r>mdKI;Vst0NdXA$p8QV diff --git a/resources/pattern_sample_3D.png b/resources/pattern_sample_3D.png deleted file mode 100755 index b3066858ea5779f2aa45a82f28466f78b4fbb22b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2160 zcmds(|3A}fAIG-}$($tjr&+#^CC-{<9Gv-9A&eYSwxpPEAyHyqIJmiwXe3LcgPfx; z>O>it3gI?eYtwFvNwQVG=j)K{Xxtw^-v7e=xE}BK`+B_I*W-OX9@q80o{ua4mt#k@ zcOZ5^AP{YDFZVz&ia=}Jt`7R{lS|`ZP$v_PxfoSP&8dNfz z@f{R3E_?fVX!L19wXhCayz5X&>y* zgJj1wB$Ux&A+y8?SWzTRH6zexW@cKux};;dTde)rUO5^^&hq6rpDs4Bzwxe?W6|td? zMh(pS`V(MD!%B(hqEJ?pN~wH^D6L6=adm}efaOJOFOI+>Zb#h?Mh8mld=t>9QX+RT z)G4C)E@}vmk&Dp&Rq>&XCAlYdo3OcQyM+@=f{n%X$>DlQL`byh{H^L#Gi02n%y`I# zBlF)b!wL8KVM&~8A^b~Dn(@|q>gF}9ls`8YCGt51brWKo6=3O&l>a!}7T{_9uP9YdcXMyU*w>{fDtxK7kkR z%u^`zQ{iHFF}nOhr#m+=*>~DIk|uqc`}uhnWkqS%lEFWC)2L=_Mgs09K-@2#B+@I0 zG5p2?k1y?AQN1?6!{bLR8tjVumDvre$K2fGM-k94*bZvkMm{S z^7um8ePQFs;9Imk7{7XLxyfU-cbLY zWoWs&*AAE(tIViAR2UFZjL9BscbNC#35}&Em4)l(_SjxDn)>!pNUmj`u1dJpH&=se>TPk71)YT~N?{jUN7T7JN` ztR)y$Kn>2|9_$K!vEeFmsefc&JKW|!G35|!p*jxZZm}d``8O87>{)7~i3ZE%K4cTX zOIwN!#vK+6Rf=7{#RB^s->i#82KDfa-kncN=9snp7gyW1J?J$rQweAkCcUy1#kbVo znN+gQtR1V}>J$t33T6Tu92b@;B?c4c2Sh9VA4Be)>Z+KHzL_plxQK=?&ZYJ~v+cTZ zzq6#`x|Bkf^%$^5LSh;ud@^Qg0PD7I+g7*^EX)m?)fv=T4?p_!VK%hd?;kLGlU)ga zg=L-lpLAWpx#MbE-OH`uoSXkY>4wKq)1y%&sc483qqUyUnvS05XJlrgysN|$tAEZJ zr#P$;8fYeOe%_wmK zFU zUIqDL04oh&&@*J1tMZ*z4M8looIUkvvp@GsQ$jr%<5Z=CrYIFpMJkHdYo4p#k(&rjq#+pjtT?6JJvt-I6$f10HrF?k^9vE;md}m7lm&p{k0H zFl|_&^O1h_lYGi69fls&`{WXArYR5O_@+D|A-a^)z(uO5B|H7OViCjWZi;G)bXMly ztMg@hK}#cL7C}N%%_#g<2DMQLF!XeMXDd~YX35j`wWAI(Ez$mb6pLfSL#Cu37`)Xu zT+0;WWmlf#-wb2k_sg5*0r9vwIm=JQgMQslT+mf{@LnDP4WuJV9!qInI$ z<_vPn&Owk%*`MAU8F}V;Si#2Q)WHLWqkyS!?WJWTKj5X;s9hjh(gRCw#(>wiNgc&0 zo69z2H1lcg^o9jPq94h%hW}dGMu|0lGS`(9n~S&u;z)#*B*V-yd)*F5!N(SbZ4KJC z+AbtCv>Vy39@bt6)PrSh)aOEB+tslq@Q$o7NKPiSioQQz#eBB_{tY1B9>?4t9}dg@ EFVL*@A^-pY diff --git a/resources/select1.png b/resources/select1.png deleted file mode 100644 index 99ebde65e86ffe25badbb1507f0286abbabd99ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 976 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc3?z4jzqMyzU}gyL32{Ag(ZBjoa^c8=d#Wzp$P!dS9t;e diff --git a/resources/standard_mesh_info.png b/resources/standard_mesh_info.png deleted file mode 100644 index 060008742e9813ab3d8d54be66de7937f353d382..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VTavfC3&Vd9T(EcfWS|IVfk$L9 z0|U1p2s75F#7_hYvX^-Jy0Ty4mgA7unl-=p3Q*{Sr;B4q#hkrU_VP9x2(->u7EkXy zr0QM4HAQcY2+MB;t{X?Z10p_gOlNcdBk9xf$t!tZb-BMC4!^CGqq=ywKBS3j3^P6 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "SMDS_Mesh.hxx" -#include "SMDS_Iterator.hxx" -#include "SMDS_MeshElement.hxx" -#include "SMDS_MeshNode.hxx" -#include "SMDS_VolumeTool.hxx" - - -/* - AUXILIARY METHODS -*/ - -namespace{ - inline double getAngle( const gp_XYZ& P1, const gp_XYZ& P2, const gp_XYZ& P3 ) - { - gp_Vec v1( P1 - P2 ), v2( P3 - P2 ); - - return v1.Magnitude() < gp::Resolution() || - v2.Magnitude() < gp::Resolution() ? 0 : v1.Angle( v2 ); - } - - inline double getArea( const gp_XYZ& P1, const gp_XYZ& P2, const gp_XYZ& P3 ) - { - gp_Vec aVec1( P2 - P1 ); - gp_Vec aVec2( P3 - P1 ); - return ( aVec1 ^ aVec2 ).Magnitude() * 0.5; - } - - inline double getArea( const gp_Pnt& P1, const gp_Pnt& P2, const gp_Pnt& P3 ) - { - return getArea( P1.XYZ(), P2.XYZ(), P3.XYZ() ); - } - - - - inline double getDistance( const gp_XYZ& P1, const gp_XYZ& P2 ) - { - double aDist = gp_Pnt( P1 ).Distance( gp_Pnt( P2 ) ); - return aDist; - } - - int getNbMultiConnection( const SMDS_Mesh* theMesh, const int theId ) - { - if ( theMesh == 0 ) - return 0; - - const SMDS_MeshElement* anEdge = theMesh->FindElement( theId ); - if ( anEdge == 0 || anEdge->GetType() != SMDSAbs_Edge || anEdge->NbNodes() != 2 ) - return 0; - - TColStd_MapOfInteger aMap; - - int aResult = 0; - SMDS_ElemIteratorPtr anIter = anEdge->nodesIterator(); - if ( anIter != 0 ) { - while( anIter->more() ) { - const SMDS_MeshNode* aNode = (SMDS_MeshNode*)anIter->next(); - if ( aNode == 0 ) - return 0; - SMDS_ElemIteratorPtr anElemIter = aNode->GetInverseElementIterator(); - while( anElemIter->more() ) { - const SMDS_MeshElement* anElem = anElemIter->next(); - if ( anElem != 0 && anElem->GetType() != SMDSAbs_Edge ) { - int anId = anElem->GetID(); - - if ( anIter->more() ) // i.e. first node - aMap.Add( anId ); - else if ( aMap.Contains( anId ) ) - aResult++; - } - } - } - } - - return aResult; - } - -} - - - -using namespace SMESH::Controls; - -/* - FUNCTORS -*/ - -/* - Class : NumericalFunctor - Description : Base class for numerical functors -*/ -NumericalFunctor::NumericalFunctor(): - myMesh(NULL) -{ - myPrecision = -1; -} - -void NumericalFunctor::SetMesh( const SMDS_Mesh* theMesh ) -{ - myMesh = theMesh; -} - -bool NumericalFunctor::GetPoints(const int theId, - TSequenceOfXYZ& theRes ) const -{ - theRes.clear(); - - if ( myMesh == 0 ) - return false; - - return GetPoints( myMesh->FindElement( theId ), theRes ); -} - -bool NumericalFunctor::GetPoints(const SMDS_MeshElement* anElem, - TSequenceOfXYZ& theRes ) -{ - theRes.clear(); - - if ( anElem == 0) - return false; - - // Get nodes of the element - SMDS_ElemIteratorPtr anIter = anElem->nodesIterator(); - if ( anIter != 0 ) - { - while( anIter->more() ) - { - const SMDS_MeshNode* aNode = (SMDS_MeshNode*)anIter->next(); - if ( aNode != 0 ){ - theRes.push_back( gp_XYZ( aNode->X(), aNode->Y(), aNode->Z() ) ); - } - } - } - - return true; -} - -long NumericalFunctor::GetPrecision() const -{ - return myPrecision; -} - -void NumericalFunctor::SetPrecision( const long thePrecision ) -{ - myPrecision = thePrecision; -} - -double NumericalFunctor::GetValue( long theId ) -{ - TSequenceOfXYZ P; - if ( GetPoints( theId, P )) - { - double aVal = GetValue( P ); - if ( myPrecision >= 0 ) - { - double prec = pow( 10., (double)( myPrecision ) ); - aVal = floor( aVal * prec + 0.5 ) / prec; - } - return aVal; - } - - return 0.; -} - -/* - Class : MinimumAngle - Description : Functor for calculation of minimum angle -*/ - -double MinimumAngle::GetValue( const TSequenceOfXYZ& P ) -{ - double aMin; - - if (P.size() <3) - return 0.; - - aMin = getAngle(P( P.size() ), P( 1 ), P( 2 )); - aMin = Min(aMin,getAngle(P( P.size()-1 ), P( P.size() ), P( 1 ))); - - for (int i=2; i 3) - aArea = getArea( P( 1 ), P( 2 ), P( 3 ) ); - else - return 0; - - for (int i=4; i<=P.size(); i++) - aArea += getArea(P(1),P(i-1),P(i)); - return aArea; -} - -double Area::GetBadRate( double Value, int /*nbNodes*/ ) const -{ - return Value; -} - -SMDSAbs_ElementType Area::GetType() const -{ - return SMDSAbs_Face; -} - - -/* - Class : Length - Description : Functor for calculating length off edge -*/ -double Length::GetValue( const TSequenceOfXYZ& P ) -{ - return ( P.size() == 2 ? getDistance( P( 1 ), P( 2 ) ) : 0 ); -} - -double Length::GetBadRate( double Value, int /*nbNodes*/ ) const -{ - return Value; -} - -SMDSAbs_ElementType Length::GetType() const -{ - return SMDSAbs_Edge; -} - -/* - Class : Length2D - Description : Functor for calculating length of edge -*/ - -double Length2D::GetValue( long theElementId) -{ - TSequenceOfXYZ P; - - if (GetPoints(theElementId,P)){ - - double aVal;// = GetValue( P ); - const SMDS_MeshElement* aElem = myMesh->FindElement( theElementId ); - SMDSAbs_ElementType aType = aElem->GetType(); - - int len = P.size(); - - switch (aType){ - case SMDSAbs_All: - case SMDSAbs_Node: - case SMDSAbs_Edge: - if (len == 2){ - aVal = getDistance( P( 1 ), P( 2 ) ); - break; - } - case SMDSAbs_Face: - if (len == 3){ // triangles - double L1 = getDistance(P( 1 ),P( 2 )); - double L2 = getDistance(P( 2 ),P( 3 )); - double L3 = getDistance(P( 3 ),P( 1 )); - aVal = Max(L1,Max(L2,L3)); - break; - } - else if (len == 4){ // quadrangles - double L1 = getDistance(P( 1 ),P( 2 )); - double L2 = getDistance(P( 2 ),P( 3 )); - double L3 = getDistance(P( 3 ),P( 4 )); - double L4 = getDistance(P( 4 ),P( 1 )); - aVal = Max(Max(L1,L2),Max(L3,L4)); - break; - } - case SMDSAbs_Volume: - if (len == 4){ // tetraidrs - double L1 = getDistance(P( 1 ),P( 2 )); - double L2 = getDistance(P( 2 ),P( 3 )); - double L3 = getDistance(P( 3 ),P( 1 )); - double L4 = getDistance(P( 1 ),P( 4 )); - double L5 = getDistance(P( 2 ),P( 4 )); - double L6 = getDistance(P( 3 ),P( 4 )); - aVal = Max(Max(Max(L1,L2),Max(L3,L4)),Max(L5,L6)); - break; - } - else if (len == 5){ // piramids - double L1 = getDistance(P( 1 ),P( 2 )); - double L2 = getDistance(P( 2 ),P( 3 )); - double L3 = getDistance(P( 3 ),P( 1 )); - double L4 = getDistance(P( 4 ),P( 1 )); - double L5 = getDistance(P( 1 ),P( 5 )); - double L6 = getDistance(P( 2 ),P( 5 )); - double L7 = getDistance(P( 3 ),P( 5 )); - double L8 = getDistance(P( 4 ),P( 5 )); - - aVal = Max(Max(Max(L1,L2),Max(L3,L4)),Max(L5,L6)); - aVal = Max(aVal,Max(L7,L8)); - break; - } - else if (len == 6){ // pentaidres - double L1 = getDistance(P( 1 ),P( 2 )); - double L2 = getDistance(P( 2 ),P( 3 )); - double L3 = getDistance(P( 3 ),P( 1 )); - double L4 = getDistance(P( 4 ),P( 5 )); - double L5 = getDistance(P( 5 ),P( 6 )); - double L6 = getDistance(P( 6 ),P( 4 )); - double L7 = getDistance(P( 1 ),P( 4 )); - double L8 = getDistance(P( 2 ),P( 5 )); - double L9 = getDistance(P( 3 ),P( 6 )); - - aVal = Max(Max(Max(L1,L2),Max(L3,L4)),Max(L5,L6)); - aVal = Max(aVal,Max(Max(L7,L8),L9)); - break; - } - else if (len == 8){ // hexaider - double L1 = getDistance(P( 1 ),P( 2 )); - double L2 = getDistance(P( 2 ),P( 3 )); - double L3 = getDistance(P( 3 ),P( 4 )); - double L4 = getDistance(P( 4 ),P( 1 )); - double L5 = getDistance(P( 5 ),P( 6 )); - double L6 = getDistance(P( 6 ),P( 7 )); - double L7 = getDistance(P( 7 ),P( 8 )); - double L8 = getDistance(P( 8 ),P( 5 )); - double L9 = getDistance(P( 1 ),P( 5 )); - double L10= getDistance(P( 2 ),P( 6 )); - double L11= getDistance(P( 3 ),P( 7 )); - double L12= getDistance(P( 4 ),P( 8 )); - - aVal = Max(Max(Max(L1,L2),Max(L3,L4)),Max(L5,L6)); - aVal = Max(aVal,Max(Max(L7,L8),Max(L9,L10))); - aVal = Max(aVal,Max(L11,L12)); - break; - - } - - default: aVal=-1; - } - - if (aVal <0){ - return 0.; - } - - if ( myPrecision >= 0 ) - { - double prec = pow( 10., (double)( myPrecision ) ); - aVal = floor( aVal * prec + 0.5 ) / prec; - } - - return aVal; - - } - return 0.; -} - -double Length2D::GetBadRate( double Value, int /*nbNodes*/ ) const -{ - return Value; -} - -SMDSAbs_ElementType Length2D::GetType() const -{ - return SMDSAbs_Face; -} - -Length2D::Value::Value(double theLength,long thePntId1, long thePntId2): - myLength(theLength) -{ - myPntId[0] = thePntId1; myPntId[1] = thePntId2; - if(thePntId1 > thePntId2){ - myPntId[1] = thePntId1; myPntId[0] = thePntId2; - } -} - -bool Length2D::Value::operator<(const Length2D::Value& x) const{ - if(myPntId[0] < x.myPntId[0]) return true; - if(myPntId[0] == x.myPntId[0]) - if(myPntId[1] < x.myPntId[1]) return true; - return false; -} - -void Length2D::GetValues(TValues& theValues){ - TValues aValues; - SMDS_FaceIteratorPtr anIter = myMesh->facesIterator(); - for(; anIter->more(); ){ - const SMDS_MeshFace* anElem = anIter->next(); - SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator(); - long aNodeId[2]; - gp_Pnt P[3]; - - double aLength; - const SMDS_MeshElement* aNode; - if(aNodesIter->more()){ - aNode = aNodesIter->next(); - const SMDS_MeshNode* aNodes = (SMDS_MeshNode*) aNode; - P[0] = P[1] = gp_Pnt(aNodes->X(),aNodes->Y(),aNodes->Z()); - aNodeId[0] = aNodeId[1] = aNode->GetID(); - aLength = 0; - } - for(; aNodesIter->more(); ){ - aNode = aNodesIter->next(); - const SMDS_MeshNode* aNodes = (SMDS_MeshNode*) aNode; - long anId = aNode->GetID(); - - P[2] = gp_Pnt(aNodes->X(),aNodes->Y(),aNodes->Z()); - - aLength = P[1].Distance(P[2]); - - Value aValue(aLength,aNodeId[1],anId); - aNodeId[1] = anId; - P[1] = P[2]; - theValues.insert(aValue); - } - - aLength = P[0].Distance(P[1]); - - Value aValue(aLength,aNodeId[0],aNodeId[1]); - theValues.insert(aValue); - } -} - -/* - Class : MultiConnection - Description : Functor for calculating number of faces conneted to the edge -*/ -double MultiConnection::GetValue( const TSequenceOfXYZ& P ) -{ - return 0; -} -double MultiConnection::GetValue( long theId ) -{ - return getNbMultiConnection( myMesh, theId ); -} - -double MultiConnection::GetBadRate( double Value, int /*nbNodes*/ ) const -{ - return Value; -} - -SMDSAbs_ElementType MultiConnection::GetType() const -{ - return SMDSAbs_Edge; -} - -/* - Class : MultiConnection2D - Description : Functor for calculating number of faces conneted to the edge -*/ -double MultiConnection2D::GetValue( const TSequenceOfXYZ& P ) -{ - return 0; -} - -double MultiConnection2D::GetValue( long theElementId ) -{ - TSequenceOfXYZ P; - int aResult = 0; - - if (GetPoints(theElementId,P)){ - const SMDS_MeshElement* anFaceElem = myMesh->FindElement( theElementId ); - SMDSAbs_ElementType aType = anFaceElem->GetType(); - - int len = P.size(); - - TColStd_MapOfInteger aMap; - int aResult = 0; - - switch (aType){ - case SMDSAbs_All: - case SMDSAbs_Node: - case SMDSAbs_Edge: - case SMDSAbs_Face: - if (len == 3){ // triangles - int Nb[3] = {0,0,0}; - - int i=0; - SMDS_ElemIteratorPtr anIter = anFaceElem->nodesIterator(); - if ( anIter != 0 ) { - while( anIter->more() ) { - const SMDS_MeshNode* aNode = (SMDS_MeshNode*)anIter->next(); - if ( aNode == 0 ){ - break; - } - SMDS_ElemIteratorPtr anElemIter = aNode->GetInverseElementIterator(); - while( anElemIter->more() ) { - const SMDS_MeshElement* anElem = anElemIter->next(); - if ( anElem != 0 && anElem->GetType() != SMDSAbs_Edge ) { - int anId = anElem->GetID(); - - if ( anIter->more() ) // i.e. first node - aMap.Add( anId ); - else if ( aMap.Contains( anId ) ){ - Nb[i]++; - } - } - else if ( anElem != 0 && anElem->GetType() == SMDSAbs_Edge ) i++; - } - } - } - - aResult = Max(Max(Nb[0],Nb[1]),Nb[2]); - } - break; - case SMDSAbs_Volume: - default: aResult=0; - } - - } - return aResult;//getNbMultiConnection( myMesh, theId ); -} - -double MultiConnection2D::GetBadRate( double Value, int /*nbNodes*/ ) const -{ - return Value; -} - -SMDSAbs_ElementType MultiConnection2D::GetType() const -{ - return SMDSAbs_Face; -} - -MultiConnection2D::Value::Value(long thePntId1, long thePntId2) -{ - myPntId[0] = thePntId1; myPntId[1] = thePntId2; - if(thePntId1 > thePntId2){ - myPntId[1] = thePntId1; myPntId[0] = thePntId2; - } -} - -bool MultiConnection2D::Value::operator<(const MultiConnection2D::Value& x) const{ - if(myPntId[0] < x.myPntId[0]) return true; - if(myPntId[0] == x.myPntId[0]) - if(myPntId[1] < x.myPntId[1]) return true; - return false; -} - -void MultiConnection2D::GetValues(MValues& theValues){ - SMDS_FaceIteratorPtr anIter = myMesh->facesIterator(); - for(; anIter->more(); ){ - const SMDS_MeshFace* anElem = anIter->next(); - SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator(); - long aNodeId[3]; - - //int aNbConnects=0; - const SMDS_MeshNode* aNode0; - const SMDS_MeshNode* aNode1; - const SMDS_MeshNode* aNode2; - if(aNodesIter->more()){ - aNode0 = (SMDS_MeshNode*) aNodesIter->next(); - aNode1 = aNode0; - const SMDS_MeshNode* aNodes = (SMDS_MeshNode*) aNode1; - aNodeId[0] = aNodeId[1] = aNodes->GetID(); - } - for(; aNodesIter->more(); ){ - aNode2 = (SMDS_MeshNode*) aNodesIter->next(); - long anId = aNode2->GetID(); - aNodeId[2] = anId; - - Value aValue(aNodeId[1],aNodeId[2]); - MValues::iterator aItr = theValues.find(aValue); - if (aItr != theValues.end()){ - aItr->second += 1; - //aNbConnects = nb; - } else { - theValues[aValue] = 1; - //aNbConnects = 1; - } - //cout << "NodeIds: "< anIntSeq.Last() ) - { - anIntSeq.Append( aMinId ); - aStrSeq.Append( aStr ); - } - else - for ( int j = 1, k = anIntSeq.Length(); j <= k; j++ ) - if ( aMinId < anIntSeq( j ) ) - { - anIntSeq.InsertBefore( j, aMinId ); - aStrSeq.InsertBefore( j, aStr ); - break; - } - } - } - - if ( aStrSeq.Length() == 0 ) - return; - - theResStr = aStrSeq( 1 ); - for ( int j = 2, k = aStrSeq.Length(); j <= k; j++ ) - { - theResStr += ","; - theResStr += aStrSeq( j ); - } -} - -//======================================================================= -// name : SetRangeStr -// Purpose : Define range with string -// Example of entry string: "1,2,3,50-60,63,67,70-" -//======================================================================= -bool RangeOfIds::SetRangeStr( const TCollection_AsciiString& theStr ) -{ - myMin.Clear(); - myMax.Clear(); - myIds.Clear(); - - TCollection_AsciiString aStr = theStr; - aStr.RemoveAll( ' ' ); - aStr.RemoveAll( '\t' ); - - for ( int aPos = aStr.Search( ",," ); aPos != -1; aPos = aStr.Search( ",," ) ) - aStr.Remove( aPos, 2 ); - - TCollection_AsciiString tmpStr = aStr.Token( ",", 1 ); - int i = 1; - while ( tmpStr != "" ) - { - tmpStr = aStr.Token( ",", i++ ); - int aPos = tmpStr.Search( '-' ); - - if ( aPos == -1 ) - { - if ( tmpStr.IsIntegerValue() ) - myIds.Add( tmpStr.IntegerValue() ); - else - return false; - } - else - { - TCollection_AsciiString aMaxStr = tmpStr.Split( aPos ); - TCollection_AsciiString aMinStr = tmpStr; - - while ( aMinStr.Search( "-" ) != -1 ) aMinStr.RemoveAll( '-' ); - while ( aMaxStr.Search( "-" ) != -1 ) aMaxStr.RemoveAll( '-' ); - - if ( !aMinStr.IsEmpty() && !aMinStr.IsIntegerValue() || - !aMaxStr.IsEmpty() && !aMaxStr.IsIntegerValue() ) - return false; - - myMin.Append( aMinStr.IsEmpty() ? IntegerFirst() : aMinStr.IntegerValue() ); - myMax.Append( aMaxStr.IsEmpty() ? IntegerLast() : aMaxStr.IntegerValue() ); - } - } - - return true; -} - -//======================================================================= -// name : GetType -// Purpose : Get type of supported entities -//======================================================================= -SMDSAbs_ElementType RangeOfIds::GetType() const -{ - return myType; -} - -//======================================================================= -// name : SetType -// Purpose : Set type of supported entities -//======================================================================= -void RangeOfIds::SetType( SMDSAbs_ElementType theType ) -{ - myType = theType; -} - -//======================================================================= -// name : IsSatisfy -// Purpose : Verify whether entity satisfies to this rpedicate -//======================================================================= -bool RangeOfIds::IsSatisfy( long theId ) -{ - if ( !myMesh ) - return false; - - if ( myType == SMDSAbs_Node ) - { - if ( myMesh->FindNode( theId ) == 0 ) - return false; - } - else - { - const SMDS_MeshElement* anElem = myMesh->FindElement( theId ); - if ( anElem == 0 || myType != anElem->GetType() && myType != SMDSAbs_All ) - return false; - } - - if ( myIds.Contains( theId ) ) - return true; - - for ( int i = 1, n = myMin.Length(); i <= n; i++ ) - if ( theId >= myMin( i ) && theId <= myMax( i ) ) - return true; - - return false; -} - -/* - Class : Comparator - Description : Base class for comparators -*/ -Comparator::Comparator(): - myMargin(0) -{} - -Comparator::~Comparator() -{} - -void Comparator::SetMesh( const SMDS_Mesh* theMesh ) -{ - if ( myFunctor ) - myFunctor->SetMesh( theMesh ); -} - -void Comparator::SetMargin( double theValue ) -{ - myMargin = theValue; -} - -void Comparator::SetNumFunctor( NumericalFunctorPtr theFunct ) -{ - myFunctor = theFunct; -} - -SMDSAbs_ElementType Comparator::GetType() const -{ - return myFunctor ? myFunctor->GetType() : SMDSAbs_All; -} - -double Comparator::GetMargin() -{ - return myMargin; -} - - -/* - Class : LessThan - Description : Comparator "<" -*/ -bool LessThan::IsSatisfy( long theId ) -{ - return myFunctor && myFunctor->GetValue( theId ) < myMargin; -} - - -/* - Class : MoreThan - Description : Comparator ">" -*/ -bool MoreThan::IsSatisfy( long theId ) -{ - return myFunctor && myFunctor->GetValue( theId ) > myMargin; -} - - -/* - Class : EqualTo - Description : Comparator "=" -*/ -EqualTo::EqualTo(): - myToler(Precision::Confusion()) -{} - -bool EqualTo::IsSatisfy( long theId ) -{ - return myFunctor && fabs( myFunctor->GetValue( theId ) - myMargin ) < myToler; -} - -void EqualTo::SetTolerance( double theToler ) -{ - myToler = theToler; -} - -double EqualTo::GetTolerance() -{ - return myToler; -} - -/* - Class : LogicalNOT - Description : Logical NOT predicate -*/ -LogicalNOT::LogicalNOT() -{} - -LogicalNOT::~LogicalNOT() -{} - -bool LogicalNOT::IsSatisfy( long theId ) -{ - return myPredicate && !myPredicate->IsSatisfy( theId ); -} - -void LogicalNOT::SetMesh( const SMDS_Mesh* theMesh ) -{ - if ( myPredicate ) - myPredicate->SetMesh( theMesh ); -} - -void LogicalNOT::SetPredicate( PredicatePtr thePred ) -{ - myPredicate = thePred; -} - -SMDSAbs_ElementType LogicalNOT::GetType() const -{ - return myPredicate ? myPredicate->GetType() : SMDSAbs_All; -} - - -/* - Class : LogicalBinary - Description : Base class for binary logical predicate -*/ -LogicalBinary::LogicalBinary() -{} - -LogicalBinary::~LogicalBinary() -{} - -void LogicalBinary::SetMesh( const SMDS_Mesh* theMesh ) -{ - if ( myPredicate1 ) - myPredicate1->SetMesh( theMesh ); - - if ( myPredicate2 ) - myPredicate2->SetMesh( theMesh ); -} - -void LogicalBinary::SetPredicate1( PredicatePtr thePredicate ) -{ - myPredicate1 = thePredicate; -} - -void LogicalBinary::SetPredicate2( PredicatePtr thePredicate ) -{ - myPredicate2 = thePredicate; -} - -SMDSAbs_ElementType LogicalBinary::GetType() const -{ - if ( !myPredicate1 || !myPredicate2 ) - return SMDSAbs_All; - - SMDSAbs_ElementType aType1 = myPredicate1->GetType(); - SMDSAbs_ElementType aType2 = myPredicate2->GetType(); - - return aType1 == aType2 ? aType1 : SMDSAbs_All; -} - - -/* - Class : LogicalAND - Description : Logical AND -*/ -bool LogicalAND::IsSatisfy( long theId ) -{ - return - myPredicate1 && - myPredicate2 && - myPredicate1->IsSatisfy( theId ) && - myPredicate2->IsSatisfy( theId ); -} - - -/* - Class : LogicalOR - Description : Logical OR -*/ -bool LogicalOR::IsSatisfy( long theId ) -{ - return - myPredicate1 && - myPredicate2 && - myPredicate1->IsSatisfy( theId ) || - myPredicate2->IsSatisfy( theId ); -} - - -/* - FILTER -*/ - -Filter::Filter() -{} - -Filter::~Filter() -{} - -void Filter::SetPredicate( PredicatePtr thePredicate ) -{ - myPredicate = thePredicate; -} - -template -inline void FillSequence(const TIterator& theIterator, - TPredicate& thePredicate, - Filter::TIdSequence& theSequence) -{ - if ( theIterator ) { - while( theIterator->more() ) { - TElement anElem = theIterator->next(); - long anId = anElem->GetID(); - if ( thePredicate->IsSatisfy( anId ) ) - theSequence.push_back( anId ); - } - } -} - -void -Filter:: -GetElementsId( const SMDS_Mesh* theMesh, - PredicatePtr thePredicate, - TIdSequence& theSequence ) -{ - theSequence.clear(); - - if ( !theMesh || !thePredicate ) - return; - - thePredicate->SetMesh( theMesh ); - - SMDSAbs_ElementType aType = thePredicate->GetType(); - switch(aType){ - case SMDSAbs_Node: - FillSequence(theMesh->nodesIterator(),thePredicate,theSequence); - break; - case SMDSAbs_Edge: - FillSequence(theMesh->edgesIterator(),thePredicate,theSequence); - break; - case SMDSAbs_Face: - FillSequence(theMesh->facesIterator(),thePredicate,theSequence); - break; - case SMDSAbs_Volume: - FillSequence(theMesh->volumesIterator(),thePredicate,theSequence); - break; - case SMDSAbs_All: - FillSequence(theMesh->edgesIterator(),thePredicate,theSequence); - FillSequence(theMesh->facesIterator(),thePredicate,theSequence); - FillSequence(theMesh->volumesIterator(),thePredicate,theSequence); - break; - } -} - -void -Filter::GetElementsId( const SMDS_Mesh* theMesh, - Filter::TIdSequence& theSequence ) -{ - GetElementsId(theMesh,myPredicate,theSequence); -} - -/* - ManifoldPart -*/ - -typedef std::set TMapOfFacePtr; - -/* - Internal class Link -*/ - -ManifoldPart::Link::Link( SMDS_MeshNode* theNode1, - SMDS_MeshNode* theNode2 ) -{ - myNode1 = theNode1; - myNode2 = theNode2; -} - -ManifoldPart::Link::~Link() -{ - myNode1 = 0; - myNode2 = 0; -} - -bool ManifoldPart::Link::IsEqual( const ManifoldPart::Link& theLink ) const -{ - if ( myNode1 == theLink.myNode1 && - myNode2 == theLink.myNode2 ) - return true; - else if ( myNode1 == theLink.myNode2 && - myNode2 == theLink.myNode1 ) - return true; - else - return false; -} - -bool ManifoldPart::Link::operator<( const ManifoldPart::Link& x ) const -{ - if(myNode1 < x.myNode1) return true; - if(myNode1 == x.myNode1) - if(myNode2 < x.myNode2) return true; - return false; -} - -bool ManifoldPart::IsEqual( const ManifoldPart::Link& theLink1, - const ManifoldPart::Link& theLink2 ) -{ - return theLink1.IsEqual( theLink2 ); -} - -ManifoldPart::ManifoldPart() -{ - myMesh = 0; - myAngToler = Precision::Angular(); - myIsOnlyManifold = true; -} - -ManifoldPart::~ManifoldPart() -{ - myMesh = 0; -} - -void ManifoldPart::SetMesh( const SMDS_Mesh* theMesh ) -{ - myMesh = theMesh; - process(); -} - -SMDSAbs_ElementType ManifoldPart::GetType() const -{ return SMDSAbs_Face; } - -bool ManifoldPart::IsSatisfy( long theElementId ) -{ - return myMapIds.Contains( theElementId ); -} - -void ManifoldPart::SetAngleTolerance( const double theAngToler ) -{ myAngToler = theAngToler; } - -double ManifoldPart::GetAngleTolerance() const -{ return myAngToler; } - -void ManifoldPart::SetIsOnlyManifold( const bool theIsOnly ) -{ myIsOnlyManifold = theIsOnly; } - -void ManifoldPart::SetStartElem( const long theStartId ) -{ myStartElemId = theStartId; } - -bool ManifoldPart::process() -{ - myMapIds.Clear(); - myMapBadGeomIds.Clear(); - - myAllFacePtr.clear(); - myAllFacePtrIntDMap.clear(); - if ( !myMesh ) - return false; - - // collect all faces into own map - SMDS_FaceIteratorPtr anFaceItr = myMesh->facesIterator(); - for (; anFaceItr->more(); ) - { - SMDS_MeshFace* aFacePtr = (SMDS_MeshFace*)anFaceItr->next(); - myAllFacePtr.push_back( aFacePtr ); - myAllFacePtrIntDMap[aFacePtr] = myAllFacePtr.size()-1; - } - - SMDS_MeshFace* aStartFace = (SMDS_MeshFace*)myMesh->FindElement( myStartElemId ); - if ( !aStartFace ) - return false; - - // the map of non manifold links and bad geometry - TMapOfLink aMapOfNonManifold; - TColStd_MapOfInteger aMapOfTreated; - - // begin cycle on faces from start index and run on vector till the end - // and from begin to start index to cover whole vector - const int aStartIndx = myAllFacePtrIntDMap[aStartFace]; - bool isStartTreat = false; - for ( int fi = aStartIndx; !isStartTreat || fi != aStartIndx ; fi++ ) - { - if ( fi == aStartIndx ) - isStartTreat = true; - // as result next time when fi will be equal to aStartIndx - - SMDS_MeshFace* aFacePtr = myAllFacePtr[ fi ]; - if ( aMapOfTreated.Contains( aFacePtr->GetID() ) ) - continue; - - aMapOfTreated.Add( aFacePtr->GetID() ); - TColStd_MapOfInteger aResFaces; - if ( !findConnected( myAllFacePtrIntDMap, aFacePtr, - aMapOfNonManifold, aResFaces ) ) - continue; - TColStd_MapIteratorOfMapOfInteger anItr( aResFaces ); - for ( ; anItr.More(); anItr.Next() ) - { - int aFaceId = anItr.Key(); - aMapOfTreated.Add( aFaceId ); - myMapIds.Add( aFaceId ); - } - - if ( fi == ( myAllFacePtr.size() - 1 ) ) - fi = 0; - } // end run on vector of faces - return !myMapIds.IsEmpty(); -} - -static void getLinks( const SMDS_MeshFace* theFace, - ManifoldPart::TVectorOfLink& theLinks ) -{ - int aNbNode = theFace->NbNodes(); - SMDS_ElemIteratorPtr aNodeItr = theFace->nodesIterator(); - int i = 1; - SMDS_MeshNode* aNode = 0; - for ( ; aNodeItr->more() && i <= aNbNode; ) - { - - SMDS_MeshNode* aN1 = (SMDS_MeshNode*)aNodeItr->next(); - if ( i == 1 ) - aNode = aN1; - i++; - SMDS_MeshNode* aN2 = ( i >= aNbNode ) ? aNode : (SMDS_MeshNode*)aNodeItr->next(); - i++; - ManifoldPart::Link aLink( aN1, aN2 ); - theLinks.push_back( aLink ); - } -} - -static gp_XYZ getNormale( const SMDS_MeshFace* theFace ) -{ - gp_XYZ n; - int aNbNode = theFace->NbNodes(); - TColgp_Array1OfXYZ anArrOfXYZ(1,4); - SMDS_ElemIteratorPtr aNodeItr = theFace->nodesIterator(); - int i = 1; - for ( ; aNodeItr->more() && i <= 4; i++ ) - { - SMDS_MeshNode* aNode = (SMDS_MeshNode*)aNodeItr->next(); - anArrOfXYZ.SetValue(i, gp_XYZ( aNode->X(), aNode->Y(), aNode->Z() ) ); - } - - gp_XYZ q1 = anArrOfXYZ.Value(2) - anArrOfXYZ.Value(1); - gp_XYZ q2 = anArrOfXYZ.Value(3) - anArrOfXYZ.Value(1); - n = q1 ^ q2; - if ( aNbNode > 3 ) - { - gp_XYZ q3 = anArrOfXYZ.Value(4) - anArrOfXYZ.Value(1); - n += q2 ^ q3; - } - double len = n.Modulus(); - if ( len > 0 ) - n /= len; - - return n; -} - -bool ManifoldPart::findConnected - ( const ManifoldPart::TDataMapFacePtrInt& theAllFacePtrInt, - SMDS_MeshFace* theStartFace, - ManifoldPart::TMapOfLink& theNonManifold, - TColStd_MapOfInteger& theResFaces ) -{ - theResFaces.Clear(); - if ( !theAllFacePtrInt.size() ) - return false; - - if ( getNormale( theStartFace ).SquareModulus() <= gp::Resolution() ) - { - myMapBadGeomIds.Add( theStartFace->GetID() ); - return false; - } - - ManifoldPart::TMapOfLink aMapOfBoundary, aMapToSkip; - ManifoldPart::TVectorOfLink aSeqOfBoundary; - theResFaces.Add( theStartFace->GetID() ); - ManifoldPart::TDataMapOfLinkFacePtr aDMapLinkFace; - - expandBoundary( aMapOfBoundary, aSeqOfBoundary, - aDMapLinkFace, theNonManifold, theStartFace ); - - bool isDone = false; - while ( !isDone && aMapOfBoundary.size() != 0 ) - { - bool isToReset = false; - ManifoldPart::TVectorOfLink::iterator pLink = aSeqOfBoundary.begin(); - for ( ; !isToReset && pLink != aSeqOfBoundary.end(); ++pLink ) - { - ManifoldPart::Link aLink = *pLink; - if ( aMapToSkip.find( aLink ) != aMapToSkip.end() ) - continue; - // each link could be treated only once - aMapToSkip.insert( aLink ); - - ManifoldPart::TVectorOfFacePtr aFaces; - // find next - if ( myIsOnlyManifold && - (theNonManifold.find( aLink ) != theNonManifold.end()) ) - continue; - else - { - getFacesByLink( aLink, aFaces ); - // filter the element to keep only indicated elements - ManifoldPart::TVectorOfFacePtr aFiltered; - ManifoldPart::TVectorOfFacePtr::iterator pFace = aFaces.begin(); - for ( ; pFace != aFaces.end(); ++pFace ) - { - SMDS_MeshFace* aFace = *pFace; - if ( myAllFacePtrIntDMap.find( aFace ) != myAllFacePtrIntDMap.end() ) - aFiltered.push_back( aFace ); - } - aFaces = aFiltered; - if ( aFaces.size() < 2 ) // no neihgbour faces - continue; - else if ( myIsOnlyManifold && aFaces.size() > 2 ) // non manifold case - { - theNonManifold.insert( aLink ); - continue; - } - } - - // compare normal with normals of neighbor element - SMDS_MeshFace* aPrevFace = aDMapLinkFace[ aLink ]; - ManifoldPart::TVectorOfFacePtr::iterator pFace = aFaces.begin(); - for ( ; pFace != aFaces.end(); ++pFace ) - { - SMDS_MeshFace* aNextFace = *pFace; - if ( aPrevFace == aNextFace ) - continue; - int anNextFaceID = aNextFace->GetID(); - if ( myIsOnlyManifold && theResFaces.Contains( anNextFaceID ) ) - // should not be with non manifold restriction. probably bad topology - continue; - // check if face was treated and skipped - if ( myMapBadGeomIds.Contains( anNextFaceID ) || - !isInPlane( aPrevFace, aNextFace ) ) - continue; - // add new element to connected and extend the boundaries. - theResFaces.Add( anNextFaceID ); - expandBoundary( aMapOfBoundary, aSeqOfBoundary, - aDMapLinkFace, theNonManifold, aNextFace ); - isToReset = true; - } - } - isDone = !isToReset; - } - - return !theResFaces.IsEmpty(); -} - -bool ManifoldPart::isInPlane( const SMDS_MeshFace* theFace1, - const SMDS_MeshFace* theFace2 ) -{ - gp_Dir aNorm1 = gp_Dir( getNormale( theFace1 ) ); - gp_XYZ aNorm2XYZ = getNormale( theFace2 ); - if ( aNorm2XYZ.SquareModulus() <= gp::Resolution() ) - { - myMapBadGeomIds.Add( theFace2->GetID() ); - return false; - } - if ( aNorm1.IsParallel( gp_Dir( aNorm2XYZ ), myAngToler ) ) - return true; - - return false; -} - -void ManifoldPart::expandBoundary - ( ManifoldPart::TMapOfLink& theMapOfBoundary, - ManifoldPart::TVectorOfLink& theSeqOfBoundary, - ManifoldPart::TDataMapOfLinkFacePtr& theDMapLinkFacePtr, - ManifoldPart::TMapOfLink& theNonManifold, - SMDS_MeshFace* theNextFace ) const -{ - ManifoldPart::TVectorOfLink aLinks; - getLinks( theNextFace, aLinks ); - int aNbLink = aLinks.size(); - for ( int i = 0; i < aNbLink; i++ ) - { - ManifoldPart::Link aLink = aLinks[ i ]; - if ( myIsOnlyManifold && (theNonManifold.find( aLink ) != theNonManifold.end()) ) - continue; - if ( theMapOfBoundary.find( aLink ) != theMapOfBoundary.end() ) - { - if ( myIsOnlyManifold ) - { - // remove from boundary - theMapOfBoundary.erase( aLink ); - ManifoldPart::TVectorOfLink::iterator pLink = theSeqOfBoundary.begin(); - for ( ; pLink != theSeqOfBoundary.end(); ++pLink ) - { - ManifoldPart::Link aBoundLink = *pLink; - if ( aBoundLink.IsEqual( aLink ) ) - { - theSeqOfBoundary.erase( pLink ); - break; - } - } - } - } - else - { - theMapOfBoundary.insert( aLink ); - theSeqOfBoundary.push_back( aLink ); - theDMapLinkFacePtr[ aLink ] = theNextFace; - } - } -} - -void ManifoldPart::getFacesByLink( const ManifoldPart::Link& theLink, - ManifoldPart::TVectorOfFacePtr& theFaces ) const -{ - SMDS_Mesh::SetOfFaces aSetOfFaces; - // take all faces that shared first node - SMDS_ElemIteratorPtr anItr = theLink.myNode1->facesIterator(); - for ( ; anItr->more(); ) - { - SMDS_MeshFace* aFace = (SMDS_MeshFace*)anItr->next(); - if ( !aFace ) - continue; - aSetOfFaces.Add( aFace ); - } - // take all faces that shared second node - anItr = theLink.myNode2->facesIterator(); - // find the common part of two sets - for ( ; anItr->more(); ) - { - SMDS_MeshFace* aFace = (SMDS_MeshFace*)anItr->next(); - if ( aSetOfFaces.Contains( aFace ) ) - theFaces.push_back( aFace ); - } -} - - -/* - ElementsOnSurface -*/ - -ElementsOnSurface::ElementsOnSurface() -{ - myMesh = 0; - myIds.Clear(); - myType = SMDSAbs_All; - mySurf.Nullify(); - myToler = Precision::Confusion(); -} - -ElementsOnSurface::~ElementsOnSurface() -{ - myMesh = 0; -} - -void ElementsOnSurface::SetMesh( const SMDS_Mesh* theMesh ) -{ - if ( myMesh == theMesh ) - return; - myMesh = theMesh; - myIds.Clear(); - process(); -} - -bool ElementsOnSurface::IsSatisfy( long theElementId ) -{ - return myIds.Contains( theElementId ); -} - -SMDSAbs_ElementType ElementsOnSurface::GetType() const -{ return myType; } - -void ElementsOnSurface::SetTolerance( const double theToler ) -{ myToler = theToler; } - -double ElementsOnSurface::GetTolerance() const -{ - return myToler; -} - -void ElementsOnSurface::SetSurface( const TopoDS_Shape& theShape, - const SMDSAbs_ElementType theType ) -{ - myType = theType; - mySurf.Nullify(); - if ( theShape.IsNull() || theShape.ShapeType() != TopAbs_FACE ) - { - mySurf.Nullify(); - return; - } - TopoDS_Face aFace = TopoDS::Face( theShape ); - mySurf = BRep_Tool::Surface( aFace ); -} - -void ElementsOnSurface::process() -{ - myIds.Clear(); - if ( mySurf.IsNull() ) - return; - - if ( myMesh == 0 ) - return; - - if ( myType == SMDSAbs_Face || myType == SMDSAbs_All ) - { - SMDS_FaceIteratorPtr anIter = myMesh->facesIterator(); - for(; anIter->more(); ) - process( anIter->next() ); - } - - if ( myType == SMDSAbs_Edge || myType == SMDSAbs_All ) - { - SMDS_EdgeIteratorPtr anIter = myMesh->edgesIterator(); - for(; anIter->more(); ) - process( anIter->next() ); - } - - if ( myType == SMDSAbs_Node ) - { - SMDS_NodeIteratorPtr anIter = myMesh->nodesIterator(); - for(; anIter->more(); ) - process( anIter->next() ); - } -} - -void ElementsOnSurface::process( const SMDS_MeshElement* theElemPtr ) -{ - SMDS_ElemIteratorPtr aNodeItr = theElemPtr->nodesIterator(); - bool isSatisfy = true; - for ( ; aNodeItr->more(); ) - { - SMDS_MeshNode* aNode = (SMDS_MeshNode*)aNodeItr->next(); - if ( !isOnSurface( aNode ) ) - { - isSatisfy = false; - break; - } - } - if ( isSatisfy ) - myIds.Add( theElemPtr->GetID() ); -} - -bool ElementsOnSurface::isOnSurface( const SMDS_MeshNode* theNode ) const -{ - if ( mySurf.IsNull() ) - return false; - - gp_Pnt aPnt( theNode->X(), theNode->Y(), theNode->Z() ); - double aToler2 = myToler * myToler; - if ( mySurf->IsKind(STANDARD_TYPE(Geom_Plane))) - { - gp_Pln aPln = Handle(Geom_Plane)::DownCast(mySurf)->Pln(); - if ( aPln.SquareDistance( aPnt ) > aToler2 ) - return false; - } - else if ( mySurf->IsKind(STANDARD_TYPE(Geom_CylindricalSurface))) - { - gp_Cylinder aCyl = Handle(Geom_CylindricalSurface)::DownCast(mySurf)->Cylinder(); - double aRad = aCyl.Radius(); - gp_Ax3 anAxis = aCyl.Position(); - gp_XYZ aLoc = aCyl.Location().XYZ(); - double aXDist = anAxis.XDirection().XYZ() * ( aPnt.XYZ() - aLoc ); - double aYDist = anAxis.YDirection().XYZ() * ( aPnt.XYZ() - aLoc ); - if ( fabs(aXDist*aXDist + aYDist*aYDist - aRad*aRad) > aToler2 ) - return false; - } - else - return false; - - return true; -} diff --git a/src/Controls/SMESH_Controls.hxx b/src/Controls/SMESH_Controls.hxx deleted file mode 100644 index fa4558db5..000000000 --- a/src/Controls/SMESH_Controls.hxx +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _SMESH_CONTROLS_HXX_ -#define _SMESH_CONTROLS_HXX_ - -#include - -namespace SMESH{ - namespace Controls{ - - class Functor; - typedef boost::shared_ptr FunctorPtr; - - - class NumericalFunctor; - typedef boost::shared_ptr NumericalFunctorPtr; - - - class Predicate; - typedef boost::shared_ptr PredicatePtr; - - } -} - - -#endif diff --git a/src/Controls/SMESH_ControlsDef.hxx b/src/Controls/SMESH_ControlsDef.hxx deleted file mode 100644 index 02336ebbc..000000000 --- a/src/Controls/SMESH_ControlsDef.hxx +++ /dev/null @@ -1,639 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _SMESH_CONTROLSDEF_HXX_ -#define _SMESH_CONTROLSDEF_HXX_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "SMDSAbs_ElementType.hxx" -#include "SMDS_MeshNode.hxx" - -#include "SMESH_Controls.hxx" - -class SMDS_MeshElement; -class SMDS_MeshFace; -class SMDS_MeshNode; -class SMDS_Mesh; - -class SMESHDS_Mesh; -class SMESHDS_SubMesh; - -class gp_Pnt; -class TopoDS_Shape; - - -namespace SMESH{ - namespace Controls{ - - class TSequenceOfXYZ: public std::vector - { - public: - typedef std::vector TSuperClass; - TSequenceOfXYZ() - {} - - TSequenceOfXYZ(size_type n): - TSuperClass(n) - {} - - TSequenceOfXYZ(size_type n, const value_type& t): - TSuperClass(n,t) - {} - - TSequenceOfXYZ(const TSequenceOfXYZ& theSequenceOfXYZ): - TSuperClass(theSequenceOfXYZ) - {} - - template - TSequenceOfXYZ(InputIterator theBegin, InputIterator theEnd): - TSuperClass(theBegin,theEnd) - {} - - TSequenceOfXYZ& operator=(const TSequenceOfXYZ& theSequenceOfXYZ){ - TSuperClass::operator=(theSequenceOfXYZ); - return *this; - } - - reference operator()(size_type n){ - return TSuperClass::operator[](n-1); - } - - const_reference operator()(size_type n) const{ - return TSuperClass::operator[](n-1); - } - - private: - reference operator[](size_type n); - - const_reference operator[](size_type n) const; - }; - - class Functor - { - public: - ~Functor(){} - virtual void SetMesh( const SMDS_Mesh* theMesh ) = 0; - virtual SMDSAbs_ElementType GetType() const = 0; - }; - - class NumericalFunctor: public virtual Functor{ - public: - NumericalFunctor(); - virtual void SetMesh( const SMDS_Mesh* theMesh ); - virtual double GetValue( long theElementId ); - virtual double GetValue(const TSequenceOfXYZ& thePoints) { return -1.0;}; - virtual SMDSAbs_ElementType GetType() const = 0; - virtual double GetBadRate( double Value, int nbNodes ) const = 0; - long GetPrecision() const; - void SetPrecision( const long thePrecision ); - - bool GetPoints(const int theId, - TSequenceOfXYZ& theRes) const; - static bool GetPoints(const SMDS_MeshElement* theElem, - TSequenceOfXYZ& theRes); - protected: - const SMDS_Mesh* myMesh; - long myPrecision; - }; - - - /* - Class : SMESH_MinimumAngle - Description : Functor for calculation of minimum angle - */ - class MinimumAngle: public virtual NumericalFunctor{ - public: - virtual double GetValue( const TSequenceOfXYZ& thePoints ); - virtual double GetBadRate( double Value, int nbNodes ) const; - virtual SMDSAbs_ElementType GetType() const; - }; - - - /* - Class : AspectRatio - Description : Functor for calculating aspect ratio - */ - class AspectRatio: public virtual NumericalFunctor{ - public: - virtual double GetValue( const TSequenceOfXYZ& thePoints ); - virtual double GetBadRate( double Value, int nbNodes ) const; - virtual SMDSAbs_ElementType GetType() const; - }; - - - /* - Class : AspectRatio3D - Description : Functor for calculating aspect ratio of 3D elems. - */ - class AspectRatio3D: public virtual NumericalFunctor{ - public: - virtual double GetValue( const TSequenceOfXYZ& thePoints ); - virtual double GetBadRate( double Value, int nbNodes ) const; - virtual SMDSAbs_ElementType GetType() const; - }; - - - /* - Class : Warping - Description : Functor for calculating warping - */ - class Warping: public virtual NumericalFunctor{ - public: - virtual double GetValue( const TSequenceOfXYZ& thePoints ); - virtual double GetBadRate( double Value, int nbNodes ) const; - virtual SMDSAbs_ElementType GetType() const; - - private: - double ComputeA( const gp_XYZ&, const gp_XYZ&, const gp_XYZ&, const gp_XYZ& ) const; - }; - - - /* - Class : Taper - Description : Functor for calculating taper - */ - class Taper: public virtual NumericalFunctor{ - public: - virtual double GetValue( const TSequenceOfXYZ& thePoints ); - virtual double GetBadRate( double Value, int nbNodes ) const; - virtual SMDSAbs_ElementType GetType() const; - }; - - - /* - Class : Skew - Description : Functor for calculating skew in degrees - */ - class Skew: public virtual NumericalFunctor{ - public: - virtual double GetValue( const TSequenceOfXYZ& thePoints ); - virtual double GetBadRate( double Value, int nbNodes ) const; - virtual SMDSAbs_ElementType GetType() const; - }; - - - /* - Class : Area - Description : Functor for calculating area - */ - class Area: public virtual NumericalFunctor{ - public: - virtual double GetValue( const TSequenceOfXYZ& thePoints ); - virtual double GetBadRate( double Value, int nbNodes ) const; - virtual SMDSAbs_ElementType GetType() const; - }; - - - /* - Class : Length - Description : Functor for calculating length of edge - */ - class Length: public virtual NumericalFunctor{ - public: - virtual double GetValue( const TSequenceOfXYZ& thePoints ); - virtual double GetBadRate( double Value, int nbNodes ) const; - virtual SMDSAbs_ElementType GetType() const; - }; - - /* - Class : Length2D - Description : Functor for calculating length of edge - */ - class Length2D: public virtual NumericalFunctor{ - public: - virtual double GetValue( long theElementId ); - virtual double GetBadRate( double Value, int nbNodes ) const; - virtual SMDSAbs_ElementType GetType() const; - struct Value{ - double myLength; - long myPntId[2]; - Value(double theLength, long thePntId1, long thePntId2); - bool operator<(const Value& x) const; - }; - typedef std::set TValues; - void GetValues(TValues& theValues); - - }; - typedef boost::shared_ptr Length2DPtr; - - /* - Class : MultiConnection - Description : Functor for calculating number of faces conneted to the edge - */ - class MultiConnection: public virtual NumericalFunctor{ - public: - virtual double GetValue( long theElementId ); - virtual double GetValue( const TSequenceOfXYZ& thePoints ); - virtual double GetBadRate( double Value, int nbNodes ) const; - virtual SMDSAbs_ElementType GetType() const; - }; - - /* - Class : MultiConnection2D - Description : Functor for calculating number of faces conneted to the edge - */ - class MultiConnection2D: public virtual NumericalFunctor{ - public: - virtual double GetValue( long theElementId ); - virtual double GetValue( const TSequenceOfXYZ& thePoints ); - virtual double GetBadRate( double Value, int nbNodes ) const; - virtual SMDSAbs_ElementType GetType() const; - struct Value{ - long myPntId[2]; - Value(long thePntId1, long thePntId2); - bool operator<(const Value& x) const; - }; - typedef std::map MValues; - - void GetValues(MValues& theValues); - }; - typedef boost::shared_ptr MultiConnection2DPtr; - /* - PREDICATES - */ - /* - Class : Predicate - Description : Base class for all predicates - */ - class Predicate: public virtual Functor{ - public: - virtual bool IsSatisfy( long theElementId ) = 0; - virtual SMDSAbs_ElementType GetType() const = 0; - }; - - - - /* - Class : FreeBorders - Description : Predicate for free borders - */ - class FreeBorders: public virtual Predicate{ - public: - FreeBorders(); - virtual void SetMesh( const SMDS_Mesh* theMesh ); - virtual bool IsSatisfy( long theElementId ); - virtual SMDSAbs_ElementType GetType() const; - - protected: - const SMDS_Mesh* myMesh; - }; - - - /* - Class : BadOrientedVolume - Description : Predicate bad oriented volumes - */ - class BadOrientedVolume: public virtual Predicate{ - public: - BadOrientedVolume(); - virtual void SetMesh( const SMDS_Mesh* theMesh ); - virtual bool IsSatisfy( long theElementId ); - virtual SMDSAbs_ElementType GetType() const; - - protected: - const SMDS_Mesh* myMesh; - }; - - - /* - Class : FreeEdges - Description : Predicate for free Edges - */ - class FreeEdges: public virtual Predicate{ - public: - FreeEdges(); - virtual void SetMesh( const SMDS_Mesh* theMesh ); - virtual bool IsSatisfy( long theElementId ); - virtual SMDSAbs_ElementType GetType() const; - static bool IsFreeEdge( const SMDS_MeshNode** theNodes, const int theFaceId ); - typedef long TElemId; - struct Border{ - TElemId myElemId; - TElemId myPntId[2]; - Border(long theElemId, long thePntId1, long thePntId2); - bool operator<(const Border& x) const; - }; - typedef std::set TBorders; - void GetBoreders(TBorders& theBorders); - - protected: - const SMDS_Mesh* myMesh; - }; - typedef boost::shared_ptr FreeEdgesPtr; - - - /* - Class : RangeOfIds - Description : Predicate for Range of Ids. - Range may be specified with two ways. - 1. Using AddToRange method - 2. With SetRangeStr method. Parameter of this method is a string - like as "1,2,3,50-60,63,67,70-" - */ - class RangeOfIds: public virtual Predicate - { - public: - RangeOfIds(); - virtual void SetMesh( const SMDS_Mesh* theMesh ); - virtual bool IsSatisfy( long theNodeId ); - virtual SMDSAbs_ElementType GetType() const; - virtual void SetType( SMDSAbs_ElementType theType ); - - bool AddToRange( long theEntityId ); - void GetRangeStr( TCollection_AsciiString& ); - bool SetRangeStr( const TCollection_AsciiString& ); - - protected: - const SMDS_Mesh* myMesh; - - TColStd_SequenceOfInteger myMin; - TColStd_SequenceOfInteger myMax; - TColStd_MapOfInteger myIds; - - SMDSAbs_ElementType myType; - }; - - typedef boost::shared_ptr RangeOfIdsPtr; - - - /* - Class : Comparator - Description : Base class for comparators - */ - class Comparator: public virtual Predicate{ - public: - Comparator(); - virtual ~Comparator(); - virtual void SetMesh( const SMDS_Mesh* theMesh ); - virtual void SetMargin(double theValue); - virtual void SetNumFunctor(NumericalFunctorPtr theFunct); - virtual bool IsSatisfy( long theElementId ) = 0; - virtual SMDSAbs_ElementType GetType() const; - double GetMargin(); - - protected: - double myMargin; - NumericalFunctorPtr myFunctor; - }; - typedef boost::shared_ptr ComparatorPtr; - - - /* - Class : LessThan - Description : Comparator "<" - */ - class LessThan: public virtual Comparator{ - public: - virtual bool IsSatisfy( long theElementId ); - }; - - - /* - Class : MoreThan - Description : Comparator ">" - */ - class MoreThan: public virtual Comparator{ - public: - virtual bool IsSatisfy( long theElementId ); - }; - - - /* - Class : EqualTo - Description : Comparator "=" - */ - class EqualTo: public virtual Comparator{ - public: - EqualTo(); - virtual bool IsSatisfy( long theElementId ); - virtual void SetTolerance( double theTol ); - virtual double GetTolerance(); - - private: - double myToler; - }; - typedef boost::shared_ptr EqualToPtr; - - - /* - Class : LogicalNOT - Description : Logical NOT predicate - */ - class LogicalNOT: public virtual Predicate{ - public: - LogicalNOT(); - virtual ~LogicalNOT(); - virtual bool IsSatisfy( long theElementId ); - virtual void SetMesh( const SMDS_Mesh* theMesh ); - virtual void SetPredicate(PredicatePtr thePred); - virtual SMDSAbs_ElementType GetType() const; - - private: - PredicatePtr myPredicate; - }; - typedef boost::shared_ptr LogicalNOTPtr; - - - /* - Class : LogicalBinary - Description : Base class for binary logical predicate - */ - class LogicalBinary: public virtual Predicate{ - public: - LogicalBinary(); - virtual ~LogicalBinary(); - virtual void SetMesh( const SMDS_Mesh* theMesh ); - virtual void SetPredicate1(PredicatePtr thePred); - virtual void SetPredicate2(PredicatePtr thePred); - virtual SMDSAbs_ElementType GetType() const; - - protected: - PredicatePtr myPredicate1; - PredicatePtr myPredicate2; - }; - typedef boost::shared_ptr LogicalBinaryPtr; - - - /* - Class : LogicalAND - Description : Logical AND - */ - class LogicalAND: public virtual LogicalBinary{ - public: - virtual bool IsSatisfy( long theElementId ); - }; - - - /* - Class : LogicalOR - Description : Logical OR - */ - class LogicalOR: public virtual LogicalBinary{ - public: - virtual bool IsSatisfy( long theElementId ); - }; - - - /* - Class : ManifoldPart - Description : Predicate for manifold part of mesh - */ - class ManifoldPart: public virtual Predicate{ - public: - - /* internal class for algorithm uses */ - class Link - { - public: - Link( SMDS_MeshNode* theNode1, - SMDS_MeshNode* theNode2 ); - ~Link(); - - bool IsEqual( const ManifoldPart::Link& theLink ) const; - bool operator<(const ManifoldPart::Link& x) const; - - SMDS_MeshNode* myNode1; - SMDS_MeshNode* myNode2; - }; - - bool IsEqual( const ManifoldPart::Link& theLink1, - const ManifoldPart::Link& theLink2 ); - - typedef std::set TMapOfLink; - typedef std::vector TVectorOfFacePtr; - typedef std::vector TVectorOfLink; - typedef std::map TDataMapFacePtrInt; - typedef std::map TDataMapOfLinkFacePtr; - - ManifoldPart(); - ~ManifoldPart(); - virtual void SetMesh( const SMDS_Mesh* theMesh ); - // inoke when all parameters already set - virtual bool IsSatisfy( long theElementId ); - virtual SMDSAbs_ElementType GetType() const; - - void SetAngleTolerance( const double theAngToler ); - double GetAngleTolerance() const; - void SetIsOnlyManifold( const bool theIsOnly ); - void SetStartElem( const long theStartElemId ); - - private: - bool process(); - bool findConnected( const TDataMapFacePtrInt& theAllFacePtrInt, - SMDS_MeshFace* theStartFace, - TMapOfLink& theNonManifold, - TColStd_MapOfInteger& theResFaces ); - bool isInPlane( const SMDS_MeshFace* theFace1, - const SMDS_MeshFace* theFace2 ); - void expandBoundary( TMapOfLink& theMapOfBoundary, - TVectorOfLink& theSeqOfBoundary, - TDataMapOfLinkFacePtr& theDMapLinkFacePtr, - TMapOfLink& theNonManifold, - SMDS_MeshFace* theNextFace ) const; - - void getFacesByLink( const Link& theLink, - TVectorOfFacePtr& theFaces ) const; - - private: - const SMDS_Mesh* myMesh; - TColStd_MapOfInteger myMapIds; - TColStd_MapOfInteger myMapBadGeomIds; - TVectorOfFacePtr myAllFacePtr; - TDataMapFacePtrInt myAllFacePtrIntDMap; - double myAngToler; - bool myIsOnlyManifold; - long myStartElemId; - - }; - typedef boost::shared_ptr ManifoldPartPtr; - - - /* - Class : ElementsOnSurface - Description : Predicate elements that lying on indicated surface - (plane or cylinder) - */ - class ElementsOnSurface : public virtual Predicate { - public: - ElementsOnSurface(); - ~ElementsOnSurface(); - virtual void SetMesh( const SMDS_Mesh* theMesh ); - virtual bool IsSatisfy( long theElementId ); - virtual SMDSAbs_ElementType GetType() const; - - void SetTolerance( const double theToler ); - double GetTolerance() const; - void SetSurface( const TopoDS_Shape& theShape, - const SMDSAbs_ElementType theType ); - - private: - void process(); - void process( const SMDS_MeshElement* theElem ); - bool isOnSurface( const SMDS_MeshNode* theNode ) const; - - private: - const SMDS_Mesh* myMesh; - TColStd_MapOfInteger myIds; - SMDSAbs_ElementType myType; - Handle(Geom_Surface) mySurf; - double myToler; - }; - - typedef boost::shared_ptr ElementsOnSurfacePtr; - - - /* - FILTER - */ - class Filter{ - public: - Filter(); - virtual ~Filter(); - virtual void SetPredicate(PredicatePtr thePred); - - typedef std::vector TIdSequence; - - virtual - void - GetElementsId( const SMDS_Mesh* theMesh, - TIdSequence& theSequence ); - - static - void - GetElementsId( const SMDS_Mesh* theMesh, - PredicatePtr thePredicate, - TIdSequence& theSequence ); - - protected: - PredicatePtr myPredicate; - }; - }; -}; - - -#endif diff --git a/src/Driver/Driver_Document.cxx b/src/Driver/Driver_Document.cxx deleted file mode 100644 index 159c1a85a..000000000 --- a/src/Driver/Driver_Document.cxx +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "Driver_Document.h" - -Driver_Document::Driver_Document(): - myDocument(NULL) -{} - - -void Driver_Document::SetFile(const std::string& theFileName) -{ - myFile = theFileName; -} - - -void Driver_Document::SetDocument(SMESHDS_Document * theDocument) -{ - myDocument = theDocument; -} diff --git a/src/Driver/Driver_Document.h b/src/Driver/Driver_Document.h deleted file mode 100644 index 8d4ff5a68..000000000 --- a/src/Driver/Driver_Document.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _INCLUDE_DRIVER_DOCUMENT -#define _INCLUDE_DRIVER_DOCUMENT - -#include - -class SMESHDS_Document; - -class Driver_Document -{ - public: - Driver_Document(); - virtual ~Driver_Document(){} - - virtual void Perform() = 0; - void SetFile(const std::string& theFileName); - void SetDocument(SMESHDS_Document *theDocument); - - protected: - SMESHDS_Document * myDocument; - std::string myFile; - -}; - - -#endif diff --git a/src/Driver/Driver_Mesh.cxx b/src/Driver/Driver_Mesh.cxx deleted file mode 100644 index f656bdd5d..000000000 --- a/src/Driver/Driver_Mesh.cxx +++ /dev/null @@ -1,46 +0,0 @@ -// SMESH Driver : implementaion of driver for reading and writing -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : Mesh_Reader.cxx -// Module : SMESH - -#include "Driver_Mesh.h" - -using namespace std; - -Driver_Mesh::Driver_Mesh(): - myFile(""), - myMeshId(-1) -{} - - -void Driver_Mesh::SetMeshId(int theMeshId) -{ - myMeshId = theMeshId; -} - - -void Driver_Mesh::SetFile(const std::string& theFileName) -{ - myFile = theFileName; -} diff --git a/src/Driver/Driver_Mesh.h b/src/Driver/Driver_Mesh.h deleted file mode 100644 index 0bfac0cd8..000000000 --- a/src/Driver/Driver_Mesh.h +++ /dev/null @@ -1,57 +0,0 @@ -// SMESH Driver : implementaion of driver for reading and writing -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : Mesh_Reader.h -// Module : SMESH - -#ifndef _INCLUDE_DRIVER_MESH -#define _INCLUDE_DRIVER_MESH - -#include - -class Driver_Mesh -{ - public: - Driver_Mesh(); - virtual ~Driver_Mesh(){} - - enum Status { - DRS_OK, - DRS_EMPTY, // a file contains no mesh with the given name - DRS_WARN_RENUMBER, // a file has overlapped ranges of element numbers, - // so the numbers from the file are ignored - DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data - DRS_FAIL // general failure (exception etc.) - }; - - virtual Status Perform() = 0; - void SetMeshId(int theMeshId); - void SetFile(const std::string& theFileName); - - protected: - std::string myFile; - int myMeshId; - -}; - -#endif diff --git a/src/Driver/Driver_SMDS_Mesh.cxx b/src/Driver/Driver_SMDS_Mesh.cxx deleted file mode 100644 index dae030df0..000000000 --- a/src/Driver/Driver_SMDS_Mesh.cxx +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "Driver_SMDS_Mesh.h" - -using namespace std; - -Driver_SMDS_Mesh::Driver_SMDS_Mesh(): - myMesh(NULL) -{} - -void Driver_SMDS_Mesh::SetMesh(SMDS_Mesh *theMesh) -{ - myMesh = theMesh; -} diff --git a/src/Driver/Driver_SMDS_Mesh.h b/src/Driver/Driver_SMDS_Mesh.h deleted file mode 100644 index 1ea37562d..000000000 --- a/src/Driver/Driver_SMDS_Mesh.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _INCLUDE_DRIVER_SMDS_MESH -#define _INCLUDE_DRIVER_SMDS_MESH - -#include "Driver_Mesh.h" - -class SMDS_Mesh; - -class Driver_SMDS_Mesh: public Driver_Mesh -{ - public: - Driver_SMDS_Mesh(); - void SetMesh(SMDS_Mesh *theMesh); - - protected: - SMDS_Mesh *myMesh; - -}; - -#endif diff --git a/src/Driver/Driver_SMESHDS_Mesh.cxx b/src/Driver/Driver_SMESHDS_Mesh.cxx deleted file mode 100644 index 2bf88277d..000000000 --- a/src/Driver/Driver_SMESHDS_Mesh.cxx +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "Driver_SMESHDS_Mesh.h" - -using namespace std; - -Driver_SMESHDS_Mesh::Driver_SMESHDS_Mesh(): - myMesh(NULL) -{} - -void Driver_SMESHDS_Mesh::SetMesh(SMESHDS_Mesh *theMesh) -{ - myMesh = theMesh; -} diff --git a/src/Driver/Driver_SMESHDS_Mesh.h b/src/Driver/Driver_SMESHDS_Mesh.h deleted file mode 100644 index b401dbd1c..000000000 --- a/src/Driver/Driver_SMESHDS_Mesh.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _INCLUDE_DRIVER_SMESHDS_MESH -#define _INCLUDE_DRIVER_SMESHDS_MESH - -#include "Driver_Mesh.h" - -class SMESHDS_Mesh; - -class Driver_SMESHDS_Mesh: public Driver_Mesh -{ - public: - Driver_SMESHDS_Mesh(); - void SetMesh(SMESHDS_Mesh *theMesh); - - protected: - SMESHDS_Mesh *myMesh; - -}; - -#endif diff --git a/src/Driver/Makefile.in b/src/Driver/Makefile.in deleted file mode 100644 index d1c71416d..000000000 --- a/src/Driver/Makefile.in +++ /dev/null @@ -1,60 +0,0 @@ -# SMESH Driver : implementaion of driver for reading and writing -# -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : Makefile.in -# Author : Marc Tajchman (CEA) -# Module : SMESH -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= Driver_Document.h Driver_Mesh.h \ - Driver_SMDS_Mesh.h Driver_SMESHDS_Mesh.h - -# Libraries targets -LIB = libMeshDriver.la -LIB_SRC = Driver_Document.cxx Driver_Mesh.cxx \ - Driver_SMDS_Mesh.cxx Driver_SMESHDS_Mesh.cxx - -LIB_CLIENT_IDL = - -LIB_SERVER_IDL = - -# additionnal information to compil and link file -CPPFLAGS += -CXXFLAGS += - -LDFLAGS += $(OCC_KERNEL_LIBS) -lTKTopAlgo -lSMESHDS -L${KERNEL_ROOT_DIR}/lib/salome -lOpUtil - - -@CONCLUDE@ - - - diff --git a/src/DriverDAT/DAT_Test.cxx b/src/DriverDAT/DAT_Test.cxx deleted file mode 100644 index a36b4dd10..000000000 --- a/src/DriverDAT/DAT_Test.cxx +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "DriverDAT_R_SMDS_Mesh.h" -#include "DriverDAT_W_SMDS_Mesh.h" - -int main(int argc, char** argv) -{ - DriverDAT_R_SMDS_Mesh aR; - DriverDAT_W_SMDS_Mesh aW; - return 1; -} diff --git a/src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx b/src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx deleted file mode 100644 index a49d7dbf3..000000000 --- a/src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include - -#include "DriverDAT_R_SMDS_Mesh.h" -#include "SMDS_Mesh.hxx" - -#include "utilities.h" - -using namespace std; - -Driver_Mesh::Status DriverDAT_R_SMDS_Mesh::Perform() -{ - Status aResult = DRS_OK; - - int i, j; - int nbNodes, nbCells; - int intNumPoint; - float coordX, coordY, coordZ; - int nbNoeuds; - - int intNumMaille, Degre; - int ValElement; - int ValDegre; - int NoeudsMaille[20]; - int NoeudMaille; - - bool ok; - - MESSAGE("in DriverDAT_R_SMDS_Mesh::Read()"); - /**************************************************************************** - * OUVERTURE DU FICHIER EN LECTURE * - ****************************************************************************/ - char *file2Read = (char *)myFile.c_str(); - FILE* aFileId = fopen(file2Read, "r"); - if (aFileId < 0) { - fprintf(stderr, ">> ERREUR : ouverture du fichier %s \n", file2Read); - return DRS_FAIL; - } - - fscanf(aFileId, "%d %d\n", &nbNodes, &nbCells); - - /**************************************************************************** - * LECTURE DES NOEUDS * - ****************************************************************************/ - fprintf(stdout, "\n(************************)\n"); - fprintf(stdout, "(* NOEUDS DU MAILLAGE : *)\n"); - fprintf(stdout, "(************************)\n"); - - for (i = 0; i < nbNodes; i++){ - fscanf(aFileId, "%d %e %e %e\n", &intNumPoint, &coordX, &coordY, &coordZ); - ok = myMesh->AddNodeWithID(coordX, coordY, coordZ, intNumPoint); - } - - fprintf(stdout, "%d noeuds\n", myMesh->NbNodes()); - /**************************************************************************** - * LECTURE DES ELEMENTS * - ****************************************************************************/ - fprintf(stdout, "\n(**************************)\n"); - fprintf(stdout, "(* ELEMENTS DU MAILLAGE : *)\n"); - fprintf(stdout, "(**************************)"); - - fprintf(stdout, "%d elements\n", nbCells); - - for (i = 0; i < nbCells; i++) { - fscanf(aFileId, "%d %d", &intNumMaille, &ValElement); - Degre = abs(ValElement / 100); - nbNoeuds = ValElement - (Degre * 100); - - // Recuperation des noeuds de la maille - for (j = 0; j < nbNoeuds; j++) { - fscanf(aFileId, "%d", &NoeudMaille); - NoeudsMaille[j] = NoeudMaille; - } - - // Analyse des cas de cellules - switch (ValElement) { - case 102: - case 103: - ValDegre = 3; - nbNoeuds = 2; - ok = myMesh->AddEdgeWithID(NoeudsMaille[0], NoeudsMaille[1], - intNumMaille); - break; - case 204: - case 208: - ValDegre = 9; - nbNoeuds = 4; - ok = myMesh->AddFaceWithID(NoeudsMaille[0], NoeudsMaille[1], - NoeudsMaille[2], NoeudsMaille[3], - intNumMaille); - break; - case 203: - case 206: - ValDegre = 5; - nbNoeuds = 3; - ok = myMesh->AddFaceWithID(NoeudsMaille[0], NoeudsMaille[1], - NoeudsMaille[2], intNumMaille); - break; - case 308: - case 320: - ValDegre = 12; - nbNoeuds = 8; - if (ValElement == 320){ - //A voir, correspondance VTK - NoeudsMaille[4] = NoeudsMaille[8]; - NoeudsMaille[5] = NoeudsMaille[9]; - NoeudsMaille[6] = NoeudsMaille[10]; - NoeudsMaille[7] = NoeudsMaille[11]; - } - ok = myMesh->AddVolumeWithID(NoeudsMaille[0], NoeudsMaille[1], - NoeudsMaille[2], NoeudsMaille[3], - NoeudsMaille[4], NoeudsMaille[5], - NoeudsMaille[6], NoeudsMaille[7], - intNumMaille); - break; - case 304: - case 310: - ValDegre = 10; - nbNoeuds = 4; - if (ValElement == 310) - NoeudsMaille[3] = NoeudsMaille[6]; - ok = myMesh->AddVolumeWithID(NoeudsMaille[0], NoeudsMaille[1], - NoeudsMaille[2], NoeudsMaille[3], - intNumMaille); - break; - case 306: - case 315: - ValDegre = 12; - nbNoeuds = 8; - if (ValElement == 315) { - NoeudsMaille[3] = NoeudsMaille[6]; - NoeudsMaille[4] = NoeudsMaille[7]; - NoeudsMaille[5] = NoeudsMaille[8]; - } - NoeudsMaille[7] = NoeudsMaille[5]; - NoeudsMaille[6] = NoeudsMaille[5]; - NoeudsMaille[5] = NoeudsMaille[4]; - NoeudsMaille[4] = NoeudsMaille[3]; - NoeudsMaille[3] = NoeudsMaille[2]; - ok = myMesh->AddVolumeWithID(NoeudsMaille[0], NoeudsMaille[1], - NoeudsMaille[2], NoeudsMaille[3], - NoeudsMaille[4], NoeudsMaille[5], - intNumMaille); - break; - } - } - /**************************************************************************** - * FERMETURE DU FICHIER * - ****************************************************************************/ - fclose(aFileId); - return aResult; -} diff --git a/src/DriverDAT/DriverDAT_R_SMDS_Mesh.h b/src/DriverDAT/DriverDAT_R_SMDS_Mesh.h deleted file mode 100644 index d955cf7b7..000000000 --- a/src/DriverDAT/DriverDAT_R_SMDS_Mesh.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _INCLUDE_DRIVERDAT_R_SMDS_MESH -#define _INCLUDE_DRIVERDAT_R_SMDS_MESH - -#include "Driver_SMDS_Mesh.h" - -class DriverDAT_R_SMDS_Mesh: public Driver_SMDS_Mesh -{ - public: - virtual Status Perform(); -}; - -#endif diff --git a/src/DriverDAT/DriverDAT_R_SMESHDS_Document.cxx b/src/DriverDAT/DriverDAT_R_SMESHDS_Document.cxx deleted file mode 100644 index c7d9b2230..000000000 --- a/src/DriverDAT/DriverDAT_R_SMESHDS_Document.cxx +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "DriverDAT_R_SMESHDS_Document.h" diff --git a/src/DriverDAT/DriverDAT_R_SMESHDS_Document.h b/src/DriverDAT/DriverDAT_R_SMESHDS_Document.h deleted file mode 100644 index 3d63ced6a..000000000 --- a/src/DriverDAT/DriverDAT_R_SMESHDS_Document.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _INCLUDE_DRIVERDAT_R_SMESHDS_DOCUMENT -#define _INCLUDE_DRIVERDAT_R_SMESHDS_DOCUMENT - -#include "Driver_Document.h" - -class DriverDAT_R_SMESHDS_Document : public Driver_Document -{}; - -#endif diff --git a/src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.cxx b/src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.cxx deleted file mode 100644 index a7e974f52..000000000 --- a/src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.cxx +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "DriverDAT_R_SMESHDS_Mesh.h" diff --git a/src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.h b/src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.h deleted file mode 100644 index e74967581..000000000 --- a/src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _INCLUDE_DRIVERDAT_R_SMESHDS_MESH -#define _INCLUDE_DRIVERDAT_R_SMESHDS_MESH - -#include "Driver_SMESHDS_Mesh.h" - -class DriverDAT_R_SMESHDS_Mesh: public Driver_SMESHDS_Mesh -{}; - -#endif diff --git a/src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx b/src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx deleted file mode 100644 index 1f8d5ab61..000000000 --- a/src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include - -#include "DriverDAT_W_SMDS_Mesh.h" - -#include "SMDS_Mesh.hxx" - -#include "utilities.h" - -using namespace std; - -Driver_Mesh::Status DriverDAT_W_SMDS_Mesh::Perform() -{ - Status aResult = DRS_OK; - - int nbNodes, nbCells; - int i; - - char *file2Read = (char *)myFile.c_str(); - FILE* aFileId = fopen(file2Read, "w+"); - if (aFileId < 0) { - fprintf(stderr, ">> ERREUR : ouverture du fichier %s \n", file2Read); - return DRS_FAIL; - } - SCRUTE(myMesh); - /**************************************************************************** - * NOMBRES D'OBJETS * - ****************************************************************************/ - fprintf(stdout, "\n(****************************)\n"); - fprintf(stdout, "(* INFORMATIONS GENERALES : *)\n"); - fprintf(stdout, "(****************************)\n"); - - /* Combien de noeuds ? */ - nbNodes = myMesh->NbNodes(); - - /* Combien de mailles, faces ou aretes ? */ - int nb_of_nodes, nb_of_edges, nb_of_faces, nb_of_volumes; - nb_of_edges = myMesh->NbEdges(); - nb_of_faces = myMesh->NbFaces(); - nb_of_volumes = myMesh->NbVolumes(); - nbCells = nb_of_edges + nb_of_faces + nb_of_volumes; - SCRUTE(nb_of_edges); - SCRUTE(nb_of_faces); - SCRUTE(nb_of_volumes); - - fprintf(stdout, "%d %d\n", nbNodes, nbCells); - fprintf(aFileId, "%d %d\n", nbNodes, nbCells); - - /**************************************************************************** - * ECRITURE DES NOEUDS * - ****************************************************************************/ - fprintf(stdout, "\n(************************)\n"); - fprintf(stdout, "(* NOEUDS DU MAILLAGE : *)\n"); - fprintf(stdout, "(************************)\n"); - - SMDS_NodeIteratorPtr itNodes=myMesh->nodesIterator(); - while(itNodes->more()){ - const SMDS_MeshNode * node = itNodes->next(); - fprintf(aFileId, "%d %e %e %e\n", node->GetID(), node->X(), node->Y(), node->Z()); - } - - /**************************************************************************** - * ECRITURE DES ELEMENTS * - ****************************************************************************/ - fprintf(stdout, "\n(**************************)\n"); - fprintf(stdout, "(* ELEMENTS DU MAILLAGE : *)\n"); - fprintf(stdout, "(**************************)"); - /* Ecriture des connectivites, noms, numeros des mailles */ - - SMDS_EdgeIteratorPtr itEdges=myMesh->edgesIterator(); - while(itEdges->more()){ - const SMDS_MeshElement * elem = itEdges->next(); - switch (elem->NbNodes()) { - case 2: - fprintf(aFileId, "%d %d ", elem->GetID(), 102); - break; - case 3: - fprintf(aFileId, "%d %d ", elem->GetID(), 103); - break; - } - SMDS_ElemIteratorPtr it=elem->nodesIterator(); - while(it->more()) - fprintf(aFileId, "%d ", it->next()->GetID()); - fprintf(aFileId, "\n"); - } - - SMDS_FaceIteratorPtr itFaces=myMesh->facesIterator(); - while(itFaces->more()){ - const SMDS_MeshElement * elem = itFaces->next(); - switch (elem->NbNodes()) { - case 3: - fprintf(aFileId, "%d %d ", elem->GetID(), 203); - break; - case 4: - fprintf(aFileId, "%d %d ", elem->GetID(), 204); - break; - case 6: - fprintf(aFileId, "%d %d ", elem->GetID(), 206); - break; - } - SMDS_ElemIteratorPtr it=elem->nodesIterator(); - while(it->more()) - fprintf(aFileId, "%d ", it->next()->GetID()); - fprintf(aFileId, "\n"); - } - - SMDS_VolumeIteratorPtr itVolumes=myMesh->volumesIterator(); - while(itVolumes->more()){ - const SMDS_MeshElement * elem = itVolumes->next(); - switch (elem->NbNodes()) { - case 8: - fprintf(aFileId, "%d %d ", elem->GetID(), 308); - break; - } - - SMDS_ElemIteratorPtr it=elem->nodesIterator(); - while(it->more()) - fprintf(aFileId, "%d ", it->next()->GetID()); - - fprintf(aFileId, "\n"); - } - - fclose(aFileId); - - return aResult; -} diff --git a/src/DriverDAT/DriverDAT_W_SMDS_Mesh.h b/src/DriverDAT/DriverDAT_W_SMDS_Mesh.h deleted file mode 100644 index ebd3d642e..000000000 --- a/src/DriverDAT/DriverDAT_W_SMDS_Mesh.h +++ /dev/null @@ -1,38 +0,0 @@ -// SMESH DriverDAT : driver to read and write 'dat' files -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : DriverDAT_W_SMDS_Mesh.h -// Module : SMESH - -#ifndef _INCLUDE_DRIVERDAT_W_SMDS_MESH -#define _INCLUDE_DRIVERDAT_W_SMDS_MESH - -#include "Driver_SMDS_Mesh.h" - -class DriverDAT_W_SMDS_Mesh: public Driver_SMDS_Mesh -{ - public: - virtual Status Perform(); -}; - -#endif diff --git a/src/DriverDAT/DriverDAT_W_SMESHDS_Document.cxx b/src/DriverDAT/DriverDAT_W_SMESHDS_Document.cxx deleted file mode 100644 index 1cd9699af..000000000 --- a/src/DriverDAT/DriverDAT_W_SMESHDS_Document.cxx +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "DriverDAT_W_SMESHDS_Document.h" diff --git a/src/DriverDAT/DriverDAT_W_SMESHDS_Document.h b/src/DriverDAT/DriverDAT_W_SMESHDS_Document.h deleted file mode 100644 index 6b2bad5a0..000000000 --- a/src/DriverDAT/DriverDAT_W_SMESHDS_Document.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _INCLUDE_DRIVERDAT_W_SMESHDS_DOCUMENT -#define _INCLUDE_DRIVERDAT_W_SMESHDS_DOCUMENT - -#include "Driver_Document.h" - -class DriverDAT_W_SMESHDS_Document: public Driver_Document -{}; - -#endif diff --git a/src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.cxx b/src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.cxx deleted file mode 100644 index e17c6cdd2..000000000 --- a/src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.cxx +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "DriverDAT_W_SMESHDS_Mesh.h" diff --git a/src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.h b/src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.h deleted file mode 100644 index b9b9130c2..000000000 --- a/src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.h +++ /dev/null @@ -1,35 +0,0 @@ -// SMESH DriverDAT : driver to read and write 'dat' files -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : DriverDAT_W_SMESHDS_Mesh.h -// Module : SMESH - -#ifndef _INCLUDE_DRIVERDAT_W_SMESHDS_MESH -#define _INCLUDE_DRIVERDAT_W_SMESHDS_MESH - -#include "Driver_SMESHDS_Mesh.h" - -class DriverDAT_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh -{}; - -#endif diff --git a/src/DriverDAT/Makefile.in b/src/DriverDAT/Makefile.in deleted file mode 100644 index 23fcb3ae7..000000000 --- a/src/DriverDAT/Makefile.in +++ /dev/null @@ -1,61 +0,0 @@ -# SMESH DriverDAT : driver to read and write 'dat' files -# -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : Makefile.in -# Author : Marc Tajchman (CEA) -# Module : SMESH -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= DriverDAT_R_SMDS_Mesh.h DriverDAT_R_SMESHDS_Mesh.h DriverDAT_R_SMESHDS_Document.h DriverDAT_W_SMDS_Mesh.h DriverDAT_W_SMESHDS_Mesh.h DriverDAT_W_SMESHDS_Document.h - -# Libraries targets -LIB = libMeshDriverDAT.la -LIB_SRC = DriverDAT_R_SMDS_Mesh.cxx DriverDAT_R_SMESHDS_Mesh.cxx DriverDAT_R_SMESHDS_Document.cxx DriverDAT_W_SMDS_Mesh.cxx DriverDAT_W_SMESHDS_Mesh.cxx DriverDAT_W_SMESHDS_Document.cxx - -# Executables targets -BIN = DAT_Test - -LIB_CLIENT_IDL = - -LIB_SERVER_IDL = - -# additionnal information to compil and link file -CPPFLAGS += -I${KERNEL_ROOT_DIR}/include/salome $(OCC_INCLUDES) $(BOOST_CPPFLAGS) -CXXFLAGS += -I${KERNEL_ROOT_DIR}/include/salome -LDFLAGS += -lMeshDriver $(OCC_KERNEL_LIBS) - -LDFLAGSFORBIN += -lMeshDriver -lSMDS -L${KERNEL_ROOT_DIR}/lib/salome -lOpUtil -lSALOMELocalTrace - -@CONCLUDE@ - - - diff --git a/src/DriverMED/DriverMED_Family.cxx b/src/DriverMED/DriverMED_Family.cxx deleted file mode 100644 index 80b343e22..000000000 --- a/src/DriverMED/DriverMED_Family.cxx +++ /dev/null @@ -1,390 +0,0 @@ -// SMESH DriverMED : tool to split groups on families -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : DriverMED_Family.cxx -// Author : Julia DOROVSKIKH -// Module : SMESH -// $Header$ - -#include "DriverMED_Family.h" -#include "MED_Factory.hxx" - -#include - -using namespace std; - -//============================================================================= -/*! - * Split each group from list on some parts (families) - * on the basis of the elements membership in other groups from this list. - * Resulting families have no common elements. - */ -//============================================================================= -list DriverMED_Family::MakeFamilies - (const map & theSubMeshes, - const list& theGroups, - const bool doGroupOfNodes, - const bool doGroupOfEdges, - const bool doGroupOfFaces, - const bool doGroupOfVolumes) -{ - list aFamilies; - - string anAllNodesGroupName = "Group_Of_All_Nodes"; - string anAllEdgesGroupName = "Group_Of_All_Edges"; - string anAllFacesGroupName = "Group_Of_All_Faces"; - string anAllVolumesGroupName = "Group_Of_All_Volumes"; - - // Reserve four ids for families of free elements - // (1 - nodes, -1 - edges, -2 - faces, -3 - volumes). - // 'Free' means here not belonging to any group. - int aNodeFamId = FIRST_NODE_FAMILY; - int aElemFamId = FIRST_ELEM_FAMILY; - - // Process sub-meshes - map::const_iterator aSMIter = theSubMeshes.begin(); - for (; aSMIter != theSubMeshes.end(); aSMIter++) - { - if ( aSMIter->second->IsComplexSubmesh() ) - continue; // submesh containing other submeshs - list aSMFams = SplitByType((*aSMIter).second, (*aSMIter).first); - list::iterator aSMFamsIter = aSMFams.begin(); - for (; aSMFamsIter != aSMFams.end(); aSMFamsIter++) - { - DriverMED_FamilyPtr aFam2 = (*aSMFamsIter); - - list::iterator aFamsIter = aFamilies.begin(); - while (aFamsIter != aFamilies.end()) - { - DriverMED_FamilyPtr aFam1 = *aFamsIter; - list::iterator aCurrIter = aFamsIter++; - if (aFam1->myType == aFam2->myType) - { - DriverMED_FamilyPtr aCommon (new DriverMED_Family); - aFam1->Split(aFam2, aCommon); - if (!aCommon->IsEmpty()) - { - aFamilies.push_back(aCommon); - } - if (aFam1->IsEmpty()) - { - aFamilies.erase(aCurrIter); - } - if (aFam2->IsEmpty()) break; - } - } - // The rest elements of family - if (!aFam2->IsEmpty()) - { - aFamilies.push_back(aFam2); - } - } - } - - // Process groups - list::const_iterator aGroupsIter = theGroups.begin(); - for (; aGroupsIter != theGroups.end(); aGroupsIter++) - { - DriverMED_FamilyPtr aFam2 (new DriverMED_Family); - aFam2->Init(*aGroupsIter); - - list::iterator aFamsIter = aFamilies.begin(); - while (aFamsIter != aFamilies.end()) - { - DriverMED_FamilyPtr aFam1 = *aFamsIter; - list::iterator aCurrIter = aFamsIter++; - if (aFam1->myType == aFam2->myType) - { - DriverMED_FamilyPtr aCommon (new DriverMED_Family); - aFam1->Split(aFam2, aCommon); - if (!aCommon->IsEmpty()) - { - aFamilies.push_back(aCommon); - } - if (aFam1->IsEmpty()) - { - aFamilies.erase(aCurrIter); - } - if (aFam2->IsEmpty()) break; - } - } - // The rest elements of group - if (!aFam2->IsEmpty()) - { - aFamilies.push_back(aFam2); - } - } - - list::iterator aFamsIter = aFamilies.begin(); - for (; aFamsIter != aFamilies.end(); aFamsIter++) - { - DriverMED_FamilyPtr aFam = *aFamsIter; - if (aFam->myType == SMDSAbs_Node) { - aFam->SetId(aNodeFamId++); - if (doGroupOfNodes) aFam->myGroupNames.insert(anAllNodesGroupName); - } - else { - aFam->SetId(aElemFamId--); - if (aFam->myType == SMDSAbs_Edge) { - if (doGroupOfEdges) aFam->myGroupNames.insert(anAllEdgesGroupName); - } - else if (aFam->myType == SMDSAbs_Face) { - if (doGroupOfFaces) aFam->myGroupNames.insert(anAllFacesGroupName); - } - else if (aFam->myType == SMDSAbs_Volume) { - if (doGroupOfVolumes) aFam->myGroupNames.insert(anAllVolumesGroupName); - } - } - } - - // Create families for elements, not belonging to any group - if (doGroupOfNodes) - { - DriverMED_FamilyPtr aFreeNodesFam (new DriverMED_Family); - aFreeNodesFam->SetId(REST_NODES_FAMILY); - aFreeNodesFam->myType = SMDSAbs_Node; - aFreeNodesFam->myGroupNames.insert(anAllNodesGroupName); - aFamilies.push_back(aFreeNodesFam); - } - - if (doGroupOfEdges) - { - DriverMED_FamilyPtr aFreeEdgesFam (new DriverMED_Family); - aFreeEdgesFam->SetId(REST_EDGES_FAMILY); - aFreeEdgesFam->myType = SMDSAbs_Edge; - aFreeEdgesFam->myGroupNames.insert(anAllEdgesGroupName); - aFamilies.push_back(aFreeEdgesFam); - } - - if (doGroupOfFaces) - { - DriverMED_FamilyPtr aFreeFacesFam (new DriverMED_Family); - aFreeFacesFam->SetId(REST_FACES_FAMILY); - aFreeFacesFam->myType = SMDSAbs_Face; - aFreeFacesFam->myGroupNames.insert(anAllFacesGroupName); - aFamilies.push_back(aFreeFacesFam); - } - - if (doGroupOfVolumes) - { - DriverMED_FamilyPtr aFreeVolumesFam (new DriverMED_Family); - aFreeVolumesFam->SetId(REST_VOLUMES_FAMILY); - aFreeVolumesFam->myType = SMDSAbs_Volume; - aFreeVolumesFam->myGroupNames.insert(anAllVolumesGroupName); - aFamilies.push_back(aFreeVolumesFam); - } - - DriverMED_FamilyPtr aNullFam (new DriverMED_Family); - aNullFam->SetId(0); - aNullFam->myType = SMDSAbs_All; - aFamilies.push_back(aNullFam); - - return aFamilies; -} - -//============================================================================= -/*! - * Create TFamilyInfo for this family - */ -//============================================================================= -MED::PFamilyInfo -DriverMED_Family::GetFamilyInfo(const MED::PWrapper& theWrapper, - const MED::PMeshInfo& theMeshInfo) const -{ - string aValue; - - ostringstream aStr; - - aStr << "FAM_" << myId; - set::iterator aGrIter = myGroupNames.begin(); - for (; aGrIter != myGroupNames.end(); aGrIter++) - { - aStr << "_" << *aGrIter; - } - - aValue = aStr.str(); - /* - MED::TStringVector anAttrDescs (1, ""); // 1 attribute with empty description, - MED::TIntVector anAttrIds (1, myId); // Id=0, - MED::TIntVector anAttrVals (1, myId); // Value=0 - */ - - MED::PFamilyInfo anInfo = theWrapper->CrFamilyInfo(theMeshInfo, - aValue, - myId, - myGroupNames); -/* - anAttrDescs, - anAttrIds, - anAttrVals); -*/ - -// cout << endl; -// cout << "Groups: "; -// set::iterator aGrIter = myGroupNames.begin(); -// for (; aGrIter != myGroupNames.end(); aGrIter++) -// { -// cout << " " << *aGrIter; -// } -// cout << endl; -// -// cout << "Elements: "; -// set::iterator anIter = myElements.begin(); -// for (; anIter != myElements.end(); anIter++) -// { -// cout << " " << (*anIter)->GetID(); -// } -// cout << endl; - - return anInfo; -} - -//============================================================================= -/*! - * Initialize the tool by SMESHDS_GroupBase - */ -//============================================================================= -void DriverMED_Family::Init (SMESHDS_GroupBase* theGroup) -{ - // Elements - myElements.clear(); - SMDS_ElemIteratorPtr elemIt = theGroup->GetElements(); - while (elemIt->more()) - { - myElements.insert(elemIt->next()); - } - - // Type - myType = theGroup->GetType(); - - // Groups list - myGroupNames.clear(); - myGroupNames.insert(string(theGroup->GetStoreName())); -} - -//============================================================================= -/*! - * Split on some parts (families) - * on the basis of the elements type. - */ -//============================================================================= -list DriverMED_Family::SplitByType (SMESHDS_SubMesh* theSubMesh, - const int theId) -{ - list aFamilies; - DriverMED_FamilyPtr aNodesFamily (new DriverMED_Family); - DriverMED_FamilyPtr anEdgesFamily (new DriverMED_Family); - DriverMED_FamilyPtr aFacesFamily (new DriverMED_Family); - DriverMED_FamilyPtr aVolumesFamily (new DriverMED_Family); - - char submeshGrpName[ 30 ]; - sprintf( submeshGrpName, "SubMesh %d", theId ); - - SMDS_NodeIteratorPtr aNodesIter = theSubMesh->GetNodes(); - while (aNodesIter->more()) - { - const SMDS_MeshNode* aNode = aNodesIter->next(); - aNodesFamily->AddElement(aNode); - } - - SMDS_ElemIteratorPtr anElemsIter = theSubMesh->GetElements(); - while (anElemsIter->more()) - { - const SMDS_MeshElement* anElem = anElemsIter->next(); - switch (anElem->GetType()) - { - case SMDSAbs_Edge: - anEdgesFamily->AddElement(anElem); - break; - case SMDSAbs_Face: - aFacesFamily->AddElement(anElem); - break; - case SMDSAbs_Volume: - aVolumesFamily->AddElement(anElem); - break; - default: - break; - } - } - - if (!aNodesFamily->IsEmpty()) { - aNodesFamily->SetType(SMDSAbs_Node); - aNodesFamily->AddGroupName(submeshGrpName); - aFamilies.push_back(aNodesFamily); - } - if (!anEdgesFamily->IsEmpty()) { - anEdgesFamily->SetType(SMDSAbs_Edge); - anEdgesFamily->AddGroupName(submeshGrpName); - aFamilies.push_back(anEdgesFamily); - } - if (!aFacesFamily->IsEmpty()) { - aFacesFamily->SetType(SMDSAbs_Face); - aFacesFamily->AddGroupName(submeshGrpName); - aFamilies.push_back(aFacesFamily); - } - if (!aVolumesFamily->IsEmpty()) { - aVolumesFamily->SetType(SMDSAbs_Volume); - aVolumesFamily->AddGroupName(submeshGrpName); - aFamilies.push_back(aVolumesFamily); - } - - return aFamilies; -} - -//============================================================================= -/*! - * Remove from elements, common with , - * Remove from elements, common with , - * Create family from common elements, with combined groups list. - */ -//============================================================================= -void DriverMED_Family::Split (DriverMED_FamilyPtr by, - DriverMED_FamilyPtr common) -{ - // Elements - set::iterator anIter = by->myElements.begin(); - while ( anIter != by->myElements.end()) - { - if (myElements.find(*anIter) != myElements.end()) - { - common->myElements.insert(*anIter); - myElements.erase(*anIter); - by->myElements.erase(anIter++); - } - else - anIter++; - } - - if (!common->IsEmpty()) - { - // Groups list - common->myGroupNames = myGroupNames; - set::iterator aGrNamesIter = by->myGroupNames.begin(); - for (; aGrNamesIter != by->myGroupNames.end(); aGrNamesIter++) - { - common->myGroupNames.insert(*aGrNamesIter); - } - - // Type - common->myType = myType; - } -} diff --git a/src/DriverMED/DriverMED_Family.h b/src/DriverMED/DriverMED_Family.h deleted file mode 100644 index 944b9bc82..000000000 --- a/src/DriverMED/DriverMED_Family.h +++ /dev/null @@ -1,120 +0,0 @@ -// SMESH DriverMED : tool to split groups on families -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : DriverMED_Family.hxx -// Author : Julia DOROVSKIKH -// Module : SMESH -// $Header$ - -#ifndef _INCLUDE_DRIVERMED_FAMILY -#define _INCLUDE_DRIVERMED_FAMILY - -#include "SMDS_Mesh.hxx" -#include "SMESHDS_GroupBase.hxx" -#include "SMESHDS_SubMesh.hxx" -#include "MED_Common.hxx" - -#include -#include - -#define REST_NODES_FAMILY 1 -#define REST_EDGES_FAMILY -1 -#define REST_FACES_FAMILY -2 -#define REST_VOLUMES_FAMILY -3 -#define FIRST_NODE_FAMILY 2 -#define FIRST_ELEM_FAMILY -4 - -class DriverMED_Family; -typedef boost::shared_ptr DriverMED_FamilyPtr; - -class DriverMED_Family -{ - public: - - // Methods for groups storing to MED - - static std::list MakeFamilies (const std::map & theSubMeshes, - const std::list& theGroups, - const bool doGroupOfNodes, - const bool doGroupOfEdges, - const bool doGroupOfFaces, - const bool doGroupOfVolumes); - // Split each group from list and each sub-mesh from list - // on some parts (families) on the basis of the elements membership in other groups - // from and other sub-meshes from . - // Resulting families have no common elements. - - MED::PFamilyInfo GetFamilyInfo (const MED::PWrapper& theWrapper, - const MED::PMeshInfo& theMeshInfo) const; - // Create TFamilyInfo for this family - - const std::set& GetElements () const { return myElements; } - // Returns elements of this family - - int GetId () const { return myId; } - // Returns a family ID - - public: - - // Methods for groups reading from MED - - void AddElement (const SMDS_MeshElement* theElement) { myElements.insert(theElement); } - - void AddGroupName (std::string theGroupName) { myGroupNames.insert(theGroupName); } - - void SetType (const SMDSAbs_ElementType theType) { myType = theType; } - SMDSAbs_ElementType GetType () { return myType; } - - bool MemberOf (std::string theGroupName) const - { return (myGroupNames.find(theGroupName) != myGroupNames.end()); } - - const MED::TStringSet& GetGroupNames () const { return myGroupNames; } - - private: - void Init (SMESHDS_GroupBase* group); - // Initialize the tool by SMESHDS_GroupBase - - static std::list SplitByType (SMESHDS_SubMesh* theSubMesh, - const int theId); - // Split on some parts (families) - // on the basis of the elements type. - - void Split (DriverMED_FamilyPtr by, - DriverMED_FamilyPtr common); - // Remove from elements, common with , - // Remove from elements, common with , - // Create family from common elements, with combined groups list. - - void SetId (const int theId) { myId = theId; } - // Sets a family ID - - bool IsEmpty () const { return myElements.empty(); } - // Check, if this family has empty list of elements - - private: - int myId; - SMDSAbs_ElementType myType; - std::set myElements; - MED::TStringSet myGroupNames; -}; - -#endif diff --git a/src/DriverMED/DriverMED_R_SMDS_Mesh.cxx b/src/DriverMED/DriverMED_R_SMDS_Mesh.cxx deleted file mode 100644 index cac48ff45..000000000 --- a/src/DriverMED/DriverMED_R_SMDS_Mesh.cxx +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "DriverMED_R_SMDS_Mesh.h" diff --git a/src/DriverMED/DriverMED_R_SMDS_Mesh.h b/src/DriverMED/DriverMED_R_SMDS_Mesh.h deleted file mode 100644 index a6ece3039..000000000 --- a/src/DriverMED/DriverMED_R_SMDS_Mesh.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _INCLUDE_DRIVERMED_R_SMDS_MESH -#define _INCLUDE_DRIVERMED_R_SMDS_MESH - -#include "Driver_SMDS_Mesh.h" - -class DriverMED_R_SMDS_Mesh: public Driver_SMDS_Mesh -{}; - -#endif diff --git a/src/DriverMED/DriverMED_R_SMESHDS_Document.cxx b/src/DriverMED/DriverMED_R_SMESHDS_Document.cxx deleted file mode 100644 index 9527382ad..000000000 --- a/src/DriverMED/DriverMED_R_SMESHDS_Document.cxx +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "DriverMED_R_SMESHDS_Document.h" diff --git a/src/DriverMED/DriverMED_R_SMESHDS_Document.h b/src/DriverMED/DriverMED_R_SMESHDS_Document.h deleted file mode 100644 index c933e0c4a..000000000 --- a/src/DriverMED/DriverMED_R_SMESHDS_Document.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _INCLUDE_DRIVERMED_R_SMESHDS_DOCUMENT -#define _INCLUDE_DRIVERMED_R_SMESHDS_DOCUMENT - -#include "Driver_Document.h" - -class DriverMED_R_SMESHDS_Document : public Driver_Document -{}; - -#endif diff --git a/src/DriverMED/DriverMED_R_SMESHDS_Mesh.h b/src/DriverMED/DriverMED_R_SMESHDS_Mesh.h deleted file mode 100644 index fe1322b12..000000000 --- a/src/DriverMED/DriverMED_R_SMESHDS_Mesh.h +++ /dev/null @@ -1,58 +0,0 @@ -// SMESH DriverMED : driver to read and write 'med' files -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : DriverMED_R_SMESHDS_Mesh.h -// Module : SMESH - -#ifndef _INCLUDE_DRIVERMED_R_SMESHDS_MESH -#define _INCLUDE_DRIVERMED_R_SMESHDS_MESH - -#include "Driver_SMESHDS_Mesh.h" -#include "DriverMED_Family.h" - -#include - -class SMESHDS_Mesh; -class SMESHDS_Group; -class SMESHDS_SubMesh; - -class DriverMED_R_SMESHDS_Mesh: public Driver_SMESHDS_Mesh -{ - public: - virtual Status Perform(); - - std::list GetGroupNames(); - void GetGroup(SMESHDS_Group* theGroup); - void CreateAllSubMeshes(); - void GetSubMesh(SMESHDS_SubMesh* theSubMesh, const int theId); - - std::list GetMeshNames(Status& theStatus); - void SetMeshName(std::string theMeshName); - - private: - std::string myMeshName; - std::map myFamilies; - -}; - -#endif diff --git a/src/DriverMED/DriverMED_W_SMDS_Mesh.cxx b/src/DriverMED/DriverMED_W_SMDS_Mesh.cxx deleted file mode 100644 index d48e08547..000000000 --- a/src/DriverMED/DriverMED_W_SMDS_Mesh.cxx +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "DriverMED_W_SMDS_Mesh.h" diff --git a/src/DriverMED/DriverMED_W_SMDS_Mesh.h b/src/DriverMED/DriverMED_W_SMDS_Mesh.h deleted file mode 100644 index 2151ae672..000000000 --- a/src/DriverMED/DriverMED_W_SMDS_Mesh.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _INCLUDE_DRIVERMED_W_SMDS_MESH -#define _INCLUDE_DRIVERMED_W_SMDS_MESH - -#include "Driver_SMDS_Mesh.h" - -class DriverMED_W_SMDS_Mesh: public Driver_SMDS_Mesh -{}; - -#endif diff --git a/src/DriverMED/DriverMED_W_SMESHDS_Document.cxx b/src/DriverMED/DriverMED_W_SMESHDS_Document.cxx deleted file mode 100644 index d0537c23a..000000000 --- a/src/DriverMED/DriverMED_W_SMESHDS_Document.cxx +++ /dev/null @@ -1,27 +0,0 @@ -// SMESH DriverMED : driver to read and write 'med' files -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : DriverMED_W_SMESHDS_Document.cxx -// Module : SMESH - -#include "DriverMED_W_SMESHDS_Document.h" diff --git a/src/DriverMED/DriverMED_W_SMESHDS_Document.h b/src/DriverMED/DriverMED_W_SMESHDS_Document.h deleted file mode 100644 index 2f0cce3bc..000000000 --- a/src/DriverMED/DriverMED_W_SMESHDS_Document.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _INCLUDE_DRIVERMED_W_SMESHDS_DOCUMENT -#define _INCLUDE_DRIVERMED_W_SMESHDS_DOCUMENT - -#include "Driver_Document.h" - -class DriverMED_W_SMESHDS_Document : public Driver_Document -{}; - -#endif diff --git a/src/DriverMED/DriverMED_W_SMESHDS_Mesh.h b/src/DriverMED/DriverMED_W_SMESHDS_Mesh.h deleted file mode 100644 index 1cc864944..000000000 --- a/src/DriverMED/DriverMED_W_SMESHDS_Mesh.h +++ /dev/null @@ -1,83 +0,0 @@ -// SMESH DriverMED : driver to read and write 'med' files -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : DriverMED_W_SMESHDS_Mesh.h -// Module : SMESH - -#ifndef _INCLUDE_DRIVERMED_W_SMESHDS_MESH -#define _INCLUDE_DRIVERMED_W_SMESHDS_MESH - -#include "Driver_SMESHDS_Mesh.h" -#include "MED_Factory.hxx" - -#include -#include -#include - -class SMESHDS_Mesh; -class SMESHDS_GroupBase; -class SMESHDS_SubMesh; - -class DriverMED_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh -{ - public: - - DriverMED_W_SMESHDS_Mesh(); - - virtual void SetFile(const std::string& theFileName); - void SetFile(const std::string& theFileName, MED::EVersion theId); - - /*! sets file name; only for usage with Add(), not Write() - */ - void AddGroupOfNodes(); - void AddGroupOfEdges(); - void AddGroupOfFaces(); - void AddGroupOfVolumes(); - - /*! functions to prepare adding one mesh - */ - void SetMeshName(const std::string& theMeshName); - void AddGroup(SMESHDS_GroupBase * theGroup); - void AddAllSubMeshes(); - void AddSubMesh(SMESHDS_SubMesh* theSubMesh, int theID); - - /*! add one mesh - */ - virtual Status Perform(); - - private: - - MED::PWrapper myMed; - std::string myMeshName; - std::list myGroups; - bool myAllSubMeshes; - std::map mySubMeshes; - bool myDoGroupOfNodes; - bool myDoGroupOfEdges; - bool myDoGroupOfFaces; - bool myDoGroupOfVolumes; -}; - - -#endif - diff --git a/src/DriverMED/MED_Test.cxx b/src/DriverMED/MED_Test.cxx deleted file mode 100644 index 7d6c3cd21..000000000 --- a/src/DriverMED/MED_Test.cxx +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "DriverMED_R_SMESHDS_Mesh.h" -#include "DriverMED_W_SMESHDS_Mesh.h" - -int main(int argc, char** argv) -{ - DriverMED_R_SMESHDS_Mesh aR; - DriverMED_W_SMESHDS_Mesh aW; - return 1; -} diff --git a/src/DriverMED/Makefile.in b/src/DriverMED/Makefile.in deleted file mode 100644 index 87c2b237e..000000000 --- a/src/DriverMED/Makefile.in +++ /dev/null @@ -1,71 +0,0 @@ -# SMESH DriverMED : driver to read and write 'med' files -# -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : Makefile.in -# Author : Marc Tajchman (CEA) -# Module : SMESH -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - - -@COMMENCE@ - -# header files -EXPORT_HEADERS = \ - DriverMED_R_SMDS_Mesh.h DriverMED_R_SMESHDS_Mesh.h DriverMED_R_SMESHDS_Document.h \ - DriverMED_W_SMDS_Mesh.h DriverMED_W_SMESHDS_Mesh.h DriverMED_W_SMESHDS_Document.h \ - DriverMED_Family.h - -# Libraries targets -LIB = libMeshDriverMED.la -LIB_SRC = \ - DriverMED_R_SMDS_Mesh.cxx \ - DriverMED_R_SMESHDS_Mesh.cxx \ - DriverMED_R_SMESHDS_Document.cxx \ - DriverMED_W_SMDS_Mesh.cxx \ - DriverMED_W_SMESHDS_Document.cxx \ - DriverMED_W_SMESHDS_Mesh.cxx \ - DriverMED_Family.cxx - -# Executables targets -BIN = MED_Test - -LIB_CLIENT_IDL = - -LIB_SERVER_IDL = - -# additionnal information to compil and link file -CPPFLAGS += $(OCC_INCLUDES) -I${MED_ROOT_DIR}/include/salome $(BOOST_CPPFLAGS) -CXXFLAGS += $(OCC_CXXFLAGS) $(HDF5_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome -LDFLAGS += -lMeshDriver -L${MED_ROOT_DIR}/lib/salome -lMEDWrapper - -LDFLAGSFORBIN += -lMeshDriver -lSMDS -lSMESHDS -L${KERNEL_ROOT_DIR}/lib/salome -L${MED_ROOT_DIR}/lib/salome -lMEDWrapper -lMEDWrapperBase -lMEDWrapper_V2_1 -lMEDWrapper_V2_2 -lOpUtil -lSALOMELocalTrace - -@CONCLUDE@ - - - diff --git a/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cxx b/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cxx deleted file mode 100644 index 2064453af..000000000 --- a/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cxx +++ /dev/null @@ -1,343 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include -#include -//======================================================================= -//function : HashCode -//purpose : -//======================================================================= -inline Standard_Integer HashCode - (const gp_Pnt& point, Standard_Integer Upper) -{ - union - { - Standard_Real R[3]; - Standard_Integer I[6]; - } U; - - point.Coord(U.R[0],U.R[1],U.R[2]); - - return ::HashCode(U.I[0]/23+U.I[1]/19+U.I[2]/17+U.I[3]/13+U.I[4]/11+U.I[5]/7,Upper); -} -static Standard_Real tab1[3]; -static Standard_Real tab2[3]; -//======================================================================= -//function : IsEqual -//purpose : -//======================================================================= -inline Standard_Boolean IsEqual - (const gp_Pnt& point1, const gp_Pnt& point2) -{ - point1.Coord(tab1[0],tab1[1],tab1[2]); - point2.Coord(tab2[0],tab2[1],tab2[2]); - return (memcmp(tab1,tab2,sizeof(tab1)) == 0); -} -#include "DriverSTL_R_SMDS_Mesh.h" - -#include "SMDS_Mesh.hxx" -#include "SMDS_MeshElement.hxx" -#include "SMDS_MeshNode.hxx" - -#include -#include -#include -#include -#include -#include - -#include "utilities.h" - -static const int HEADER_SIZE = 84; -static const int SIZEOF_STL_FACET = 50; -//static const int STL_MIN_FILE_SIZE = 284; -static const int ASCII_LINES_PER_FACET = 7; - - -//typedef NCollection_BaseCollection DriverSTL_ColOfNodePtr; - - -#include -typedef NCollection_DataMap DriverSTL_DataMapOfPntNodePtr; -//======================================================================= -//function : DriverSTL_R_SMDS_Mesh -//purpose : -//======================================================================= - -DriverSTL_R_SMDS_Mesh::DriverSTL_R_SMDS_Mesh() -{ - myIsCreateFaces = true; - myIsAscii = Standard_True; -} - -//======================================================================= -//function : SetIsCreateFaces -//purpose : -//======================================================================= - -void DriverSTL_R_SMDS_Mesh::SetIsCreateFaces( const bool theIsCreate ) -{ myIsCreateFaces = theIsCreate; } - -//======================================================================= -//function : Perform -//purpose : -//======================================================================= - -Driver_Mesh::Status DriverSTL_R_SMDS_Mesh::Perform() -{ - Status aResult = DRS_OK; - - TCollection_AsciiString aFileName( (char *)myFile.c_str() ); - if ( aFileName.IsEmpty() ) { - fprintf(stderr, ">> ERREOR : invalid file name \n"); - return DRS_FAIL; - } - - filebuf fic; - Standard_IStream is(&fic); - if (!fic.open(aFileName.ToCString(),ios::in)) { - fprintf(stderr, ">> ERROR : cannot open file %s \n", aFileName.ToCString()); - return DRS_FAIL; - } - - - OSD_Path aPath( aFileName ); - OSD_File file = OSD_File( aPath ); - file.Open(OSD_ReadOnly,OSD_Protection(OSD_RWD,OSD_RWD,OSD_RWD,OSD_RWD)); - unsigned char str[128]; - Standard_Integer lread,i; - Standard_Address ach; - ach = (Standard_Address)str; - // we skip the header which is in Ascii for both modes - file.Read(ach,HEADER_SIZE,lread); - - // we read 128 characters to detect if we have a non-ascii char - file.Read(ach,sizeof(str),lread); - - myIsAscii = Standard_True; - for (i = 0; i < lread; ++i) { - if (str[i] > '~') { - myIsAscii = Standard_False; - break; - } - } - - file.Close(); - - if ( !myMesh ) { - fprintf(stderr, ">> ERREOR : cannot create mesh \n"); - return DRS_FAIL; - } - - if ( myIsAscii ) - aResult = readAscii(); - else - aResult = readBinary(); - - return aResult; -} - -// static methods - -static Standard_Real readFloat(OSD_File& theFile) -{ - union { - Standard_Boolean i; - Standard_ShortReal f; - }u; - - char c[4]; - Standard_Address adr; - adr = (Standard_Address)c; - Standard_Integer lread; - theFile.Read(adr,4,lread); - u.i = c[0] & 0xFF; - u.i |= (c[1] & 0xFF) << 0x08; - u.i |= (c[2] & 0xFF) << 0x10; - u.i |= (c[3] & 0xFF) << 0x18; - - return u.f; -} - -static SMDS_MeshNode* addNode(const gp_Pnt& P, - DriverSTL_DataMapOfPntNodePtr& uniqnodes, - SMDS_Mesh* theMesh) -{ - SMDS_MeshNode* node = 0; - if ( uniqnodes.IsBound(P) ) { - node = uniqnodes.Find(P); - } else { - node = theMesh->AddNode(P.X(), P.Y(), P.Z() ); - uniqnodes.Bind(P,node); - } - - return node; -} - -static SMDS_MeshNode* readNode(FILE* file, - DriverSTL_DataMapOfPntNodePtr& uniqnodes, - SMDS_Mesh* theMesh) -{ - Standard_ShortReal coord[3]; - // reading vertex - fscanf(file,"%*s %f %f %f\n",&coord[0],&coord[1],&coord[2]); - - gp_Pnt P(coord[0],coord[1],coord[2]); - return addNode( P, uniqnodes, theMesh ); -} - -static SMDS_MeshNode* readNode(OSD_File& theFile, - DriverSTL_DataMapOfPntNodePtr& uniqnodes, - SMDS_Mesh* theMesh) -{ - Standard_ShortReal coord[3]; - coord[0] = readFloat(theFile); - coord[1] = readFloat(theFile); - coord[2] = readFloat(theFile); - - gp_Pnt P(coord[0],coord[1],coord[2]); - return addNode( P, uniqnodes, theMesh ); -} - -//======================================================================= -//function : readAscii -//purpose : -//======================================================================= - -Driver_Mesh::Status DriverSTL_R_SMDS_Mesh::readAscii() const -{ - Status aResult = DRS_OK; - long ipos; - Standard_Integer nbLines = 0; - - // Open the file - TCollection_AsciiString aFileName( (char *)myFile.c_str() ); - FILE* file = fopen(aFileName.ToCString(),"r"); - fseek(file,0L,SEEK_END); - // get the file size - long filesize = ftell(file); - fclose(file); - file = fopen(aFileName.ToCString(),"r"); - - // count the number of lines - for (ipos = 0; ipos < filesize; ++ipos) { - if (getc(file) == '\n') - nbLines++; - } - - // go back to the beginning of the file -// fclose(file); -// file = fopen(aFileName.ToCString(),"r"); - rewind(file); - - Standard_Integer nbTri = (nbLines / ASCII_LINES_PER_FACET); - - DriverSTL_DataMapOfPntNodePtr uniqnodes; - // skip header - while (getc(file) != '\n'); - - // main reading - for (Standard_Integer iTri = 0; iTri < nbTri; ++iTri) { - - // skipping the facet normal - Standard_ShortReal normal[3]; - fscanf(file,"%*s %*s %f %f %f\n",&normal[0],&normal[1],&normal[2]); - - // skip the keywords "outer loop" - fscanf(file,"%*s %*s"); - - // reading nodes - SMDS_MeshNode* node1 = readNode( file, uniqnodes, myMesh ); - SMDS_MeshNode* node2 = readNode( file, uniqnodes, myMesh ); - SMDS_MeshNode* node3 = readNode( file, uniqnodes, myMesh ); - - if (myIsCreateFaces) - myMesh->AddFace(node1,node2,node3); - - // skip the keywords "endloop" - fscanf(file,"%*s"); - - // skip the keywords "endfacet" - fscanf(file,"%*s"); - } - - fclose(file); - return aResult; -} - -//======================================================================= -//function : readBinary -//purpose : -//======================================================================= - -Driver_Mesh::Status DriverSTL_R_SMDS_Mesh::readBinary() const -{ - Status aResult = DRS_OK; - - char buftest[5]; - Standard_Address adr; - adr = (Standard_Address)buftest; - - TCollection_AsciiString aFileName( (char *)myFile.c_str() ); - OSD_File aFile = OSD_File(OSD_Path( aFileName )); - aFile.Open(OSD_ReadOnly,OSD_Protection(OSD_RWD,OSD_RWD,OSD_RWD,OSD_RWD)); - - // the size of the file (minus the header size) - // must be a multiple of SIZEOF_STL_FACET - - // compute file size - Standard_Integer filesize = aFile.Size(); - - if ( (filesize - HEADER_SIZE) % SIZEOF_STL_FACET !=0 - // Commented to allow reading small files (ex: 1 face) - /*|| (filesize < STL_MIN_FILE_SIZE)*/) { - Standard_NoMoreObject::Raise("DriverSTL_R_SMDS_MESH::readBinary (wrong file size)"); - } - - // don't trust the number of triangles which is coded in the file - // sometimes it is wrong, and with this technique we don't need to swap endians for integer - Standard_Integer nbTri = ((filesize - HEADER_SIZE) / SIZEOF_STL_FACET); - - // skip the header - aFile.Seek(HEADER_SIZE,OSD_FromBeginning); - - DriverSTL_DataMapOfPntNodePtr uniqnodes; - Standard_Integer lread; - - for (Standard_Integer iTri = 0; iTri < nbTri; ++iTri) { - - // ignore normals - readFloat(aFile); - readFloat(aFile); - readFloat(aFile); - - // read vertices - SMDS_MeshNode* node1 = readNode( aFile, uniqnodes, myMesh ); - SMDS_MeshNode* node2 = readNode( aFile, uniqnodes, myMesh ); - SMDS_MeshNode* node3 = readNode( aFile, uniqnodes, myMesh ); - - if (myIsCreateFaces) - myMesh->AddFace(node1,node2,node3); - - // skip extra bytes - aFile.Read(adr,2,lread); - } - aFile.Close(); - return aResult; -} diff --git a/src/DriverSTL/DriverSTL_R_SMDS_Mesh.h b/src/DriverSTL/DriverSTL_R_SMDS_Mesh.h deleted file mode 100644 index 14afd3c21..000000000 --- a/src/DriverSTL/DriverSTL_R_SMDS_Mesh.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _INCLUDE_DRIVERSTL_R_SMDS_MESH -#define _INCLUDE_DRIVERSTL_R_SMDS_MESH - -#include "Driver_SMDS_Mesh.h" - -#include - -class DriverSTL_R_SMDS_Mesh: public Driver_SMDS_Mesh -{ - public: - DriverSTL_R_SMDS_Mesh(); - virtual Status Perform(); - void SetIsCreateFaces( const bool theIsCreate = true ); - - private: - // PRIVATE METHODS - Status readAscii() const; - Status readBinary() const; - - private: - // PRIVATE FIELDS - bool myIsCreateFaces; - bool myIsAscii; -}; - -#endif diff --git a/src/DriverSTL/DriverSTL_W_SMDS_Mesh.cxx b/src/DriverSTL/DriverSTL_W_SMDS_Mesh.cxx deleted file mode 100644 index 04ce4058a..000000000 --- a/src/DriverSTL/DriverSTL_W_SMDS_Mesh.cxx +++ /dev/null @@ -1,261 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include - -#include "DriverSTL_W_SMDS_Mesh.h" - -#include "SMDS_Mesh.hxx" -#include "SMDS_MeshElement.hxx" -#include "SMDS_MeshNode.hxx" -#include -#include -#include -#include -#include -#include -#include -#include - -#include "utilities.h" - -//using namespace std; - -// definition des constantes -static const int LABEL_SIZE = 80; - -DriverSTL_W_SMDS_Mesh::DriverSTL_W_SMDS_Mesh() -{ - myIsAscii = false; -} - -void DriverSTL_W_SMDS_Mesh::SetIsAscii( const bool theIsAscii ) -{ - myIsAscii = theIsAscii; -} - -Driver_Mesh::Status DriverSTL_W_SMDS_Mesh::Perform() -{ - Status aResult = DRS_OK; - - if ( !myMesh ) { - fprintf(stderr, ">> ERROR : Mesh is null \n"); - return DRS_FAIL; - } - if ( myIsAscii ) - aResult = writeAscii(); - else - aResult = writeBinary(); - - return aResult; -} - -// static methods - -static void writeInteger( const Standard_Integer& theVal, - OSD_File& ofile ) -{ - union { - Standard_Integer i; - char c[4]; - }u; - - u.i = theVal; - - Standard_Integer entier; - entier = u.c[0] & 0xFF; - entier |= (u.c[1] & 0xFF) << 0x08; - entier |= (u.c[2] & 0xFF) << 0x10; - entier |= (u.c[3] & 0xFF) << 0x18; - - ofile.Write((char *)&entier,sizeof(u.c)); -} - -static void writeFloat ( const Standard_ShortReal& theVal, - OSD_File& ofile) -{ - union { - Standard_ShortReal f; - char c[4]; - }u; - - u.f = theVal; - - Standard_Integer entier; - - entier = u.c[0] & 0xFF; - entier |= (u.c[1] & 0xFF) << 0x08; - entier |= (u.c[2] & 0xFF) << 0x10; - entier |= (u.c[3] & 0xFF) << 0x18; - - ofile.Write((char *)&entier,sizeof(u.c)); -} - -static gp_XYZ getNormale( const SMDS_MeshFace* theFace ) -{ - gp_XYZ n; - int aNbNode = theFace->NbNodes(); - TColgp_Array1OfXYZ anArrOfXYZ(1,4); - gp_XYZ p1, p2, p3, p4; - SMDS_ElemIteratorPtr aNodeItr = theFace->nodesIterator(); - int i = 1; - for ( ; aNodeItr->more() && i <= 4; i++ ) - { - SMDS_MeshNode* aNode = (SMDS_MeshNode*)aNodeItr->next(); - anArrOfXYZ.SetValue(i, gp_XYZ( aNode->X(), aNode->Y(), aNode->Z() ) ); - } - - gp_XYZ q1 = anArrOfXYZ.Value(2) - anArrOfXYZ.Value(1); - gp_XYZ q2 = anArrOfXYZ.Value(3) - anArrOfXYZ.Value(1); - n = q1 ^ q2; - if ( aNbNode > 3 ) - { - gp_XYZ q3 = anArrOfXYZ.Value(4) - anArrOfXYZ.Value(1); - n += q2 ^ q3; - } - double len = n.Modulus(); - if ( len > 0 ) - n /= len; - - return n; -} - -// private methods - -Driver_Mesh::Status DriverSTL_W_SMDS_Mesh::writeAscii() const -{ - Status aResult = DRS_OK; - TCollection_AsciiString aFileName( (char *)myFile.c_str() ); - if ( aFileName.IsEmpty() ) { - fprintf(stderr, ">> ERREOR : invalid file name \n"); - return DRS_FAIL; - } - - OSD_File aFile = OSD_File(OSD_Path(aFileName)); - aFile.Build(OSD_WriteOnly,OSD_Protection()); - TCollection_AsciiString buf = TCollection_AsciiString ("solid\n"); - aFile.Write (buf,buf.Length());buf.Clear(); - char sval[16]; - - SMDS_FaceIteratorPtr itFaces = myMesh->facesIterator(); - - for (; itFaces->more() ;) { - SMDS_MeshFace* aFace = (SMDS_MeshFace*)itFaces->next(); - - if (aFace->NbNodes() == 3) { - gp_XYZ normale = getNormale( aFace ); - - buf += " facet normal "; - sprintf (sval,"% 12e",normale.X()); - buf += sval; - buf += " "; - sprintf (sval,"% 12e",normale.Y()); - buf += sval; - buf += " "; - sprintf (sval,"% 12e",normale.Z()); - buf += sval; - buf += '\n'; - aFile.Write (buf,buf.Length());buf.Clear(); - buf += " outer loop\n"; - aFile.Write (buf,buf.Length());buf.Clear(); - - SMDS_ElemIteratorPtr aNodeIter = aFace->nodesIterator(); - for (; aNodeIter->more(); ) { - SMDS_MeshNode* node = (SMDS_MeshNode*)aNodeIter->next(); - buf += " vertex "; - sprintf (sval,"% 12e",node->X()); - buf += sval; - buf += " "; - sprintf (sval,"% 12e",node->Y()); - buf += sval; - buf += " "; - sprintf (sval,"% 12e",node->Z()); - buf += sval; - buf += '\n'; - aFile.Write (buf,buf.Length());buf.Clear(); - } - buf += " endloop\n"; - aFile.Write (buf,buf.Length());buf.Clear(); - buf += " endfacet\n"; - aFile.Write (buf,buf.Length());buf.Clear(); - } - } - buf += "endsolid\n"; - aFile.Write (buf,buf.Length());buf.Clear(); - - aFile.Close (); - - return aResult; -} - -Driver_Mesh::Status DriverSTL_W_SMDS_Mesh::writeBinary() const -{ - Status aResult = DRS_OK; - TCollection_AsciiString aFileName( (char *)myFile.c_str() ); - if ( aFileName.IsEmpty() ) { - fprintf(stderr, ">> ERREOR : invalid filename \n"); - return DRS_FAIL; - } - - OSD_File aFile = OSD_File(OSD_Path(aFileName)); - aFile.Build(OSD_WriteOnly,OSD_Protection()); - - char sval[80]; - Standard_Integer nbTri = 0; - SMDS_FaceIteratorPtr itFaces = myMesh->facesIterator(); - - // we first count the number of triangles - for (;itFaces->more();) { - SMDS_MeshFace* aFace = (SMDS_MeshFace*)itFaces->next(); - if (aFace->NbNodes() == 3) - nbTri++; - } - - // write number of triangles - unsigned int NBT = nbTri; - aFile.Write((Standard_Address)sval,LABEL_SIZE); - writeInteger(nbTri,aFile); - - // loop writing nodes. take face iterator again - int dum=0; - itFaces = myMesh->facesIterator(); - - for (;itFaces->more();) { - SMDS_MeshFace* aFace = (SMDS_MeshFace*)itFaces->next(); - - if (aFace->NbNodes() == 3) { - gp_XYZ aNorm = getNormale( aFace ); - writeFloat(aNorm.X(),aFile); - writeFloat(aNorm.Y(),aFile); - writeFloat(aNorm.Z(),aFile); - - SMDS_ElemIteratorPtr aNodeIter = aFace->nodesIterator(); - for (; aNodeIter->more(); ) { - SMDS_MeshNode* node = (SMDS_MeshNode*)aNodeIter->next(); - writeFloat(node->X(),aFile); - writeFloat(node->Y(),aFile); - writeFloat(node->Z(),aFile); - } - aFile.Write (&dum,2); - } - } - aFile.Close (); - - return aResult; -} diff --git a/src/DriverSTL/DriverSTL_W_SMDS_Mesh.h b/src/DriverSTL/DriverSTL_W_SMDS_Mesh.h deleted file mode 100644 index 49d752083..000000000 --- a/src/DriverSTL/DriverSTL_W_SMDS_Mesh.h +++ /dev/null @@ -1,51 +0,0 @@ -// SMESH DriverSTL : driver to read and write 'stl' files -// -// Copyright (C) 2004 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : DriverSTL_W_SMDS_Mesh.h -// Module : SMESH - -#ifndef _INCLUDE_DRIVERSTL_W_SMDS_MESH -#define _INCLUDE_DRIVERSTL_W_SMDS_MESH - -#include "Driver_SMDS_Mesh.h" -#include - -class DriverSTL_W_SMDS_Mesh: public Driver_SMDS_Mesh -{ - public: - - DriverSTL_W_SMDS_Mesh(); - virtual Status Perform(); - void SetIsAscii( const bool theIsAscii = false ); - - private: - // PRIVATE METHODS - Status writeAscii () const; - Status writeBinary () const; - - private: - // PRIVATE FIELDS - bool myIsAscii; -}; - -#endif diff --git a/src/DriverSTL/Makefile.in b/src/DriverSTL/Makefile.in deleted file mode 100644 index 8c4c83ddf..000000000 --- a/src/DriverSTL/Makefile.in +++ /dev/null @@ -1,61 +0,0 @@ -# SMESH DriverSTL : driver to read and write 'stl' files -# -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : Makefile.in -# Author : Marc Tajchman (CEA) -# Module : SMESH -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= DriverSTL_R_SMDS_Mesh.h DriverSTL_W_SMDS_Mesh.h - -# Libraries targets -LIB = libMeshDriverSTL.la -LIB_SRC = DriverSTL_R_SMDS_Mesh.cxx DriverSTL_W_SMDS_Mesh.cxx - -# Executables targets -BIN = STL_Test - -LIB_CLIENT_IDL = - -LIB_SERVER_IDL = - -# additionnal information to compil and link file -CPPFLAGS += $(OCC_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome $(BOOST_CPPFLAGS) -CXXFLAGS += $(OCC_CXXFLAGS) -I${KERNEL_ROOT_DIR}/include/salome -LDFLAGS += $(OCC_KERNEL_LIBS) -lMeshDriver -lTKSTL -lTKTopAlgo -lTKMesh - -LDFLAGSFORBIN += -lMeshDriver -lSMDS -L${KERNEL_ROOT_DIR}/lib/salome -lOpUtil -lSALOMELocalTrace $(OCC_KERNEL_LIBS) -lTKSTL -lTKTopAlgo -lTKMesh -lTKBO - -@CONCLUDE@ - - - diff --git a/src/DriverSTL/STL_Test.cxx b/src/DriverSTL/STL_Test.cxx deleted file mode 100644 index 78dc0df71..000000000 --- a/src/DriverSTL/STL_Test.cxx +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -//#include "DriverSTL_R_SMDS_Mesh.h" -#include "DriverSTL_W_SMDS_Mesh.h" - -int main(int argc, char** argv) -{ -// DriverSTL_R_SMDS_Mesh aR; - DriverSTL_W_SMDS_Mesh aW; - return 1; -} diff --git a/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx b/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx deleted file mode 100644 index 45dd99edf..000000000 --- a/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx +++ /dev/null @@ -1,153 +0,0 @@ -#include "DriverUNV_R_SMDS_Mesh.h" -#include "SMDS_Mesh.hxx" - -#include "utilities.h" - -#include "UNV2411_Structure.hxx" -#include "UNV2412_Structure.hxx" -#include "UNV_Utilities.hxx" - -using namespace std; - - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - - -Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() -{ - Status aResult = DRS_OK; - std::ifstream in_stream(myFile.c_str()); - try{ - { - using namespace UNV2411; - TDataSet aDataSet2411; - UNV2411::Read(in_stream,aDataSet2411); - if(MYDEBUG) MESSAGE("Perform - aDataSet2411.size() = "<first; - const TRecord& aRec = anIter->second; - myMesh->AddNodeWithID(aRec.coord[0],aRec.coord[1],aRec.coord[2],aLabel); - } - } - { - using namespace UNV2412; - in_stream.seekg(0); - TDataSet aDataSet2412; - UNV2412::Read(in_stream,aDataSet2412); - TDataSet::const_iterator anIter = aDataSet2412.begin(); - if(MYDEBUG) MESSAGE("Perform - aDataSet2412.size() = "<first; - const TRecord& aRec = anIter->second; - if(IsBeam(aRec.fe_descriptor_id)){ - anElement = myMesh->AddEdgeWithID(aRec.node_labels[0], - aRec.node_labels[1], - aLabel); - }else if(IsFace(aRec.fe_descriptor_id)){ - switch(aRec.fe_descriptor_id){ - case 71: // TRI3 - case 72: - case 74: - - case 41: // Plane Stress Linear Triangle - TRI3 - case 91: // Thin Shell Linear Triangle - TRI3 - - case 42: // Plane Stress Quadratic Triangle - TRI6 - case 92: // Thin Shell Quadratic Triangle - TRI6 - - anElement = myMesh->AddFaceWithID(aRec.node_labels[0], - aRec.node_labels[1], - aRec.node_labels[2], - aLabel); - break; - - case 44: // Plane Stress Linear Quadrilateral - QUAD4 - case 94: // Thin Shell Linear Quadrilateral - QUAD4 - - case 45: // Plane Stress Quadratic Quadrilateral - QUAD8 - case 95: // Thin Shell Quadratic Quadrilateral - QUAD8 - anElement = myMesh->AddFaceWithID(aRec.node_labels[0], - aRec.node_labels[1], - aRec.node_labels[2], - aRec.node_labels[3], - aLabel); - break; - } - }else if(IsVolume(aRec.fe_descriptor_id)){ - switch(aRec.fe_descriptor_id){ - - case 111: // Solid Linear Tetrahedron - TET4 - case 118: // Solid Quadratic Tetrahedron - TET10 - - anElement = myMesh->AddVolumeWithID(aRec.node_labels[0], - aRec.node_labels[2], - aRec.node_labels[1], - aRec.node_labels[3], - aLabel); - break; - - case 112: // Solid Linear Prism - PRISM6 - - anElement = myMesh->AddVolumeWithID(aRec.node_labels[0], - aRec.node_labels[2], - aRec.node_labels[1], - aRec.node_labels[3], - aRec.node_labels[5], - aRec.node_labels[4], - aLabel); - break; - - case 113: // Solid Quadratic Prism - PRISM15 - - anElement = myMesh->AddVolumeWithID(aRec.node_labels[0], - aRec.node_labels[4], - aRec.node_labels[2], - aRec.node_labels[9], - aRec.node_labels[13], - aRec.node_labels[11], - aLabel); - break; - - case 115: // Solid Linear Brick - HEX8 - anElement = myMesh->AddVolumeWithID(aRec.node_labels[0], - aRec.node_labels[3], - aRec.node_labels[2], - aRec.node_labels[1], - aRec.node_labels[4], - aRec.node_labels[7], - aRec.node_labels[6], - aRec.node_labels[5], - aLabel); - break; - - case 116: // Solid Quadratic Brick - HEX20 - - anElement = myMesh->AddVolumeWithID(aRec.node_labels[0], - aRec.node_labels[6], - aRec.node_labels[4], - aRec.node_labels[2], - aRec.node_labels[12], - aRec.node_labels[18], - aRec.node_labels[16], - aRec.node_labels[14], - aLabel); - break; - } - } - if(!anElement) - MESSAGE("DriverUNV_R_SMDS_Mesh::Perform - can not add element with ID = "< - -#include "DriverUNV_W_SMDS_Mesh.h" - -#include "SMDS_Mesh.hxx" - -#include "utilities.h" - -#include "UNV2411_Structure.hxx" -#include "UNV2412_Structure.hxx" -#include "UNV_Utilities.hxx" - -using namespace std; - -namespace{ - typedef std::vector TConnect; - - int GetConnect(const SMDS_ElemIteratorPtr& theNodesIter, - TConnect& theConnect) - { - theConnect.clear(); - for(; theNodesIter->more();){ - const SMDS_MeshElement* anElem = theNodesIter->next(); - theConnect.push_back(anElem->GetID()); - } - return theConnect.size(); - } - -} - -Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform() -{ - Status aResult = DRS_OK; - std::ofstream out_stream(myFile.c_str()); - try{ - { - using namespace UNV2411; - TDataSet aDataSet2411; - // Storing SMDS nodes to the UNV file - //----------------------------------- - MESSAGE("Perform - myMesh->NbNodes() = "<NbNodes()); - SMDS_NodeIteratorPtr aNodesIter = myMesh->nodesIterator(); - for(; aNodesIter->more();){ - const SMDS_MeshNode* aNode = aNodesIter->next(); - TRecord aRec; - aRec.coord[0] = aNode->X(); - aRec.coord[1] = aNode->Y(); - aRec.coord[2] = aNode->Z(); - const TNodeLab& aLabel = aNode->GetID(); - aDataSet2411.insert(TDataSet::value_type(aLabel,aRec)); - } - MESSAGE("Perform - aDataSet2411.size() = "<NbEdges() = "<NbEdges()); - if(myMesh->NbEdges()){ - SMDS_EdgeIteratorPtr anIter = myMesh->edgesIterator(); - for(; anIter->more();){ - const SMDS_MeshEdge* anElem = anIter->next(); - TElementLab aLabel = anElem->GetID(); - int aNbNodes = anElem->NbNodes(); - TRecord aRec; - aRec.node_labels.reserve(aNbNodes); - SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator(); - for(; aNodesIter->more();){ - const SMDS_MeshElement* aNode = aNodesIter->next(); - aRec.node_labels.push_back(aNode->GetID()); - } - aRec.fe_descriptor_id = 11; - aDataSet2412.insert(TDataSet::value_type(aLabel,aRec)); - } - MESSAGE("Perform - aDataSet2412.size() = "<NbFaces() = "<NbFaces()); - if(myMesh->NbFaces()){ - SMDS_FaceIteratorPtr anIter = myMesh->facesIterator(); - for(; anIter->more();){ - const SMDS_MeshFace* anElem = anIter->next(); - TElementLab aLabel = anElem->GetID(); - int aNbNodes = anElem->NbNodes(); - TRecord aRec; - aRec.node_labels.reserve(aNbNodes); - SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator(); - for(; aNodesIter->more();){ - const SMDS_MeshElement* aNode = aNodesIter->next(); - aRec.node_labels.push_back(aNode->GetID()); - } - switch(aNbNodes){ - case 3: - aRec.fe_descriptor_id = 41; - break; - case 4: - aRec.fe_descriptor_id = 44; - break; - default: - continue; - } - aDataSet2412.insert(TDataSet::value_type(aLabel,aRec)); - } - MESSAGE("Perform - aDataSet2412.size() = "<NbVolumes() = "<NbVolumes()); - if(myMesh->NbVolumes()){ - SMDS_VolumeIteratorPtr anIter = myMesh->volumesIterator(); - for(; anIter->more();){ - const SMDS_MeshVolume* anElem = anIter->next(); - TElementLab aLabel = anElem->GetID(); - - int aNbNodes = anElem->NbNodes(); - aConnect.resize(aNbNodes); - - SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator(); - GetConnect(aNodesIter,aConnect); - - int anId = -1; - int* aConn = NULL; - switch(aNbNodes){ - case 4: { - static int anIds[] = {0,2,1,3}; - aConn = anIds; - anId = 111; - break; - } - case 6: { - static int anIds[] = {0,2,1,3,5,4}; - aConn = anIds; - anId = 112; - break; - } - case 8: { - static int anIds[] = {0,3,2,1,4,7,6,5}; - aConn = anIds; - anId = 115; - break; - } - default: - continue; - } - if(aConn){ - TRecord aRec; - aRec.fe_descriptor_id = anId; - aRec.node_labels.resize(aNbNodes); - for(int aNodeId = 0; aNodeId < aNbNodes; aNodeId++){ - aRec.node_labels[aConn[aNodeId]] = aConnect[aNodeId]; - } - aDataSet2412.insert(TDataSet::value_type(aLabel,aRec)); - } - } - MESSAGE("Perform - aDataSet2412.size() = "< -#include - -#include "UNV2411_Structure.hxx" -#include "UNV_Utilities.hxx" - -using namespace std; -using namespace UNV; -using namespace UNV2411; - -#ifdef _DEBUG_ -static int MYDEBUG = 1; -#else -static int MYDEBUG = 0; -#endif - -static string _label_dataset = "2411"; - -UNV2411::TRecord::TRecord(): - exp_coord_sys_num(0), - disp_coord_sys_num(0), - color(0) -{} - -void UNV2411::Read(std::ifstream& in_stream, TDataSet& theDataSet) -{ - if(!in_stream.good()) - EXCEPTION(runtime_error,"ERROR: Input file not good."); - - /* - * adjust the \p istream to our - * position - */ - if(!beginning_of_dataset(in_stream,_label_dataset)) - EXCEPTION(runtime_error,"ERROR: Could not find "<<_label_dataset<<" dataset!"); - - /** - * always 3 coordinates in the UNV file, no matter - * which dimensionality libMesh is in - */ - TNodeLab aLabel; - std::string num_buf; - for(; !in_stream.eof();){ - in_stream >> aLabel ; - if(aLabel == -1){ - // end of dataset is reached - break; - } - - TRecord aRec; - in_stream>>aRec.exp_coord_sys_num; - in_stream>>aRec.disp_coord_sys_num; - in_stream>>aRec.color; - - /* - * take care of the - * floating-point data - */ - for(int d = 0; d < 3; d++){ - in_stream>>num_buf; - aRec.coord[d] = D_to_e(num_buf); - } - - theDataSet.insert(TDataSet::value_type(aLabel,aRec)); - } -} - - -void UNV2411::Write(std::ofstream& out_stream, const TDataSet& theDataSet) -{ - if(!out_stream.good()) - EXCEPTION(runtime_error,"ERROR: Output file not good."); - - /* - * Write beginning of dataset - */ - out_stream<<" -1\n"; - out_stream<<" "<<_label_dataset<<"\n"; - - TDataSet::const_iterator anIter = theDataSet.begin(); - for(; anIter != theDataSet.end(); anIter++){ - const TNodeLab& aLabel = anIter->first; - const TRecord& aRec = anIter->second; - char buf[78]; - sprintf(buf, "%10d%10d%10d%10d\n", - aLabel, - aRec.exp_coord_sys_num, - aRec.disp_coord_sys_num, - aRec.color); - out_stream< -#include - -namespace UNV2411{ - - struct TRecord{ - TRecord(); - int exp_coord_sys_num; // export coordinate system number - int disp_coord_sys_num; // displacement coordinate system number - int color; // color - double coord[3]; // node coordinates in the part coordinate system - }; - - typedef int TNodeLab; // type of node label - typedef std::map TDataSet; - - void Read(std::ifstream& in_stream, TDataSet& theDataSet); - - void Write(std::ofstream& out_stream, const TDataSet& theDataSet); - -}; - - -#endif diff --git a/src/DriverUNV/UNV2412_Structure.cxx b/src/DriverUNV/UNV2412_Structure.cxx deleted file mode 100644 index 0160d7b68..000000000 --- a/src/DriverUNV/UNV2412_Structure.cxx +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include -#include - -#include "UNV2412_Structure.hxx" -#include "UNV_Utilities.hxx" - -using namespace std; -using namespace UNV; -using namespace UNV2412; - -#ifdef _DEBUG_ -static int MYDEBUG = 1; -#else -static int MYDEBUG = 0; -#endif - -static string _label_dataset = "2412"; - -UNV2412::TRecord::TRecord(): - phys_prop_tab_num(2), - mat_prop_tab_num(1), - color(7), - beam_orientation(0), - beam_fore_end(0), - beam_aft_end(0) -{} - -void UNV2412::Read(std::ifstream& in_stream, TDataSet& theDataSet) -{ - if(!in_stream.good()) - EXCEPTION(runtime_error,"ERROR: Input file not good."); - - /* - * adjust the \p istream to our - * position - */ - if(!beginning_of_dataset(in_stream,_label_dataset)) - EXCEPTION(runtime_error,"ERROR: Could not find "<<_label_dataset<<" dataset!"); - - TElementLab aLabel; - for(; !in_stream.eof();){ - in_stream >> aLabel ; - if(aLabel == -1){ - // end of dataset is reached - break; - } - - int n_nodes; - TRecord aRec; - in_stream>>aRec.fe_descriptor_id; - in_stream>>aRec.phys_prop_tab_num; - in_stream>>aRec.mat_prop_tab_num; - in_stream>>aRec.color; - in_stream>>n_nodes; - - if(IsBeam(aRec.fe_descriptor_id)){ - in_stream>>aRec.beam_orientation; - in_stream>>aRec.beam_fore_end; - in_stream>>aRec.beam_aft_end; - } - - aRec.node_labels.resize(n_nodes); - for(int j=0; j < n_nodes; j++){ - // read node labels - in_stream>>aRec.node_labels[j]; - } - - theDataSet.insert(TDataSet::value_type(aLabel,aRec)); - } - -} - - -void UNV2412::Write(std::ofstream& out_stream, const TDataSet& theDataSet) -{ - if(!out_stream.good()) - EXCEPTION(runtime_error,"ERROR: Output file not good."); - - /* - * Write beginning of dataset - */ - out_stream<<" -1\n"; - out_stream<<" "<<_label_dataset<<"\n"; - - TDataSet::const_iterator anIter = theDataSet.begin(); - for(; anIter != theDataSet.end(); anIter++){ - const TElementLab& aLabel = anIter->first; - const TRecord& aRec = anIter->second; - out_stream< -#include -#include - - -namespace UNV2412{ - - typedef std::vector TNodeLabels; // Nodal connectivities - - struct TRecord{ - TRecord(); - - int fe_descriptor_id; // FE descriptor id - int phys_prop_tab_num; // physical property table number - int mat_prop_tab_num; // material property table number - int color; // color - TNodeLabels node_labels; // node labels defining element - - //FOR BEAM ELEMENTS ONLY - int beam_orientation; // beam orientation node number - int beam_fore_end; // beam fore-end cross section number - int beam_aft_end; // beam aft-end cross section number - }; - - typedef int TElementLab; // type of element label - typedef std::map TDataSet; - - void Read(std::ifstream& in_stream, TDataSet& theDataSet); - - void Write(std::ofstream& out_stream, const TDataSet& theDataSet); - - bool IsBeam(int theFeDescriptorId); - bool IsFace(int theFeDescriptorId); - bool IsVolume(int theFeDescriptorId); - -}; - - -#endif diff --git a/src/DriverUNV/UNV_Test.cxx b/src/DriverUNV/UNV_Test.cxx deleted file mode 100644 index 0156b5051..000000000 --- a/src/DriverUNV/UNV_Test.cxx +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "UNV2411_Structure.hxx" -#include "UNV2412_Structure.hxx" -#include "UNV_Utilities.hxx" - -#include "DriverUNV_R_SMDS_Mesh.h" -#include "DriverUNV_W_SMDS_Mesh.h" - -using namespace std; - -#ifdef DEBUG -static int MYDEBUG = 1; -#else -static int MYDEBUG = 0; -#endif - - -void ReadMed(const char* theFileName){ - std::ifstream in_stream(theFileName); - - UNV2411::TDataSet aDataSet2411; - UNV2411::Read(in_stream,aDataSet2411); - - in_stream.seekg(0); - UNV2412::TDataSet aDataSet2412; - UNV2412::Read(in_stream,aDataSet2412); - - string aFileName(theFileName); - aFileName += "-"; - std::ofstream out_stream(aFileName.c_str()); - - UNV2411::Write(out_stream,aDataSet2411); - UNV2412::Write(out_stream,aDataSet2412); -} - - -int main(int argc, char** argv){ - DriverUNV_R_SMDS_Mesh aR; - DriverUNV_W_SMDS_Mesh aW; - try{ - if(argc > 1){ - ReadMed(argv[1]); - } - return 0; - }catch(std::exception& exc){ - MESSAGE("Follow exception was accured :\n"< -#include -#include -#include -#include - -namespace UNV{ - using namespace std; - - class PrefixPrinter{ - static int myCounter; - public: - PrefixPrinter(); - ~PrefixPrinter(); - - static string GetPrefix(); - }; - - /** - * @returns \p false when error occured, \p true otherwise. - * Adjusts the \p in_stream to the beginning of the - * dataset \p ds_name. - */ - inline bool beginning_of_dataset(std::istream& in_file, const std::string& ds_name) - { - assert (in_file.good()); - assert (!ds_name.empty()); - - std::string olds, news; - - while(true){ - in_file >> olds >> news; - /* - * a "-1" followed by a number means the beginning of a dataset - * stop combing at the end of the file - */ - while( ((olds != "-1") || (news == "-1") ) && !in_file.eof() ){ - olds = news; - in_file >> news; - } - if(in_file.eof()) - return false; - if (news == ds_name) - return true; - } - // should never end up here - return false; - } - - /** - * Method for converting exponential notation - * from "D" to "e", for example - * \p 3.141592654D+00 \p --> \p 3.141592654e+00 - * in order to make it readable for C++. - */ - inline double D_to_e(std::string& number) - { - /* find "D" in string, start looking at - * 6th element, to improve speed. - * We dont expect a "D" earlier - */ - const int position = number.find("D",6); - if(position != std::string::npos){ - number.replace(position, 1, "e"); - } - return atof (number.c_str()); - } - -}; - - -#ifndef MESSAGE - -#define MESSAGE(msg) std::cout<<__FILE__<<"["<<__LINE__<<"]::"< //Dans OpenCascade -#include //Dans OpenCascade -#include //Dans OpenCascade - -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// BUT: Definir les espaces affines R R2 R3 R4 soit Rn pour n=1,2,3,4 -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// AUTEUR : Frederic HECHT ANALYSE NUMERIQUE UPMC PARIS OCTOBRE 2000 -// MODIFS : Alain PERRONNET ANALYSE NUMERIQUE UPMC PARIS NOVEMBRE 2000 -//............................................................................... -#include -#include - - -template inline T Abs (const T &a){return a <0 ? -a : a;} -template inline void Echange (T& a,T& b) {T c=a;a=b;b=c;} - -template inline T Min (const T &a,const T &b) {return a < b ? a : b;} -template inline T Max (const T &a,const T & b) {return a > b ? a : b;} - -template inline T Max (const T &a,const T & b,const T & c){return Max(Max(a,b),c);} -template inline T Min (const T &a,const T & b,const T & c){return Min(Min(a,b),c);} - -template inline T Max (const T &a,const T & b,const T & c,const T & d) - {return Max(Max(a,b),Max(c,d));} -template inline T Min (const T &a,const T & b,const T & c,const T & d) - {return Min(Min(a,b),Min(c,d));} - -//le type Nom des entites geometriques P L S V O -//=========== -typedef char Nom[1+24]; - -//le type N des nombres entiers positifs -//========= -typedef unsigned long int N; - -//le type Z des nombres entiers relatifs -//========= -typedef long int Z; - -//le type R des nombres "reels" -//========= -typedef double R; - -//le type XPoint des coordonnees d'un pixel dans une fenetre -//============== -//typedef struct { short int x,y } XPoint; //en fait ce type est defini dans X11-Window - // #include -//la classe R2 -//============ -class R2 -{ - friend std::ostream& operator << (std::ostream& f, const R2 & P) - { f << P.x << ' ' << P.y ; return f; } - friend std::istream& operator >> (std::istream& f, R2 & P) - { f >> P.x >> P.y ; return f; } - - friend std::ostream& operator << (std::ostream& f, const R2 * P) - { f << P->x << ' ' << P->y ; return f; } - friend std::istream& operator >> (std::istream& f, R2 * P) - { f >> P->x >> P->y ; return f; } - -public: - R x,y; //les donnees - - R2 () :x(0),y(0) {} //les constructeurs - R2 (R a,R b) :x(a),y(b) {} - R2 (R2 A,R2 B) :x(B.x-A.x),y(B.y-A.y) {} //vecteur defini par 2 points - - R2 operator+(R2 P) const {return R2(x+P.x,y+P.y);} // Q+P possible - R2 operator+=(R2 P) {x += P.x;y += P.y; return *this;}// Q+=P; - R2 operator-(R2 P) const {return R2(x-P.x,y-P.y);} // Q-P - R2 operator-=(R2 P) {x -= P.x;y -= P.y; return *this;} // Q-=P; - R2 operator-()const {return R2(-x,-y);} // -Q - R2 operator+()const {return *this;} // +Q - R operator,(R2 P)const {return x*P.x+y*P.y;} // produit scalaire (Q,P) - R operator^(R2 P)const {return x*P.y-y*P.x;} // produit vectoriel Q^P - R2 operator*(R c)const {return R2(x*c,y*c);} // produit a droite P*c - R2 operator*=(R c) {x *= c; y *= c; return *this;} - R2 operator/(R c)const {return R2(x/c,y/c);} // division par un reel - R2 operator/=(R c) {x /= c; y /= c; return *this;} - R & operator[](int i) {return (&x)[i];} // la coordonnee i - R2 orthogonal() {return R2(-y,x);} //le vecteur orthogonal dans R2 - friend R2 operator*(R c,R2 P) {return P*c;} // produit a gauche c*P -}; - - -//la classe R3 -//============ -class R3 -{ - friend std::ostream& operator << (std::ostream& f, const R3 & P) - { f << P.x << ' ' << P.y << ' ' << P.z ; return f; } - friend std::istream& operator >> (std::istream& f, R3 & P) - { f >> P.x >> P.y >> P.z ; return f; } - - friend std::ostream& operator << (std::ostream& f, const R3 * P) - { f << P->x << ' ' << P->y << ' ' << P->z ; return f; } - friend std::istream& operator >> (std::istream& f, R3 * P) - { f >> P->x >> P->y >> P->z ; return f; } - -public: - R x,y,z; //les 3 coordonnees - - R3 () :x(0),y(0),z(0) {} //les constructeurs - R3 (R a,R b,R c):x(a),y(b),z(c) {} //Point ou Vecteur (a,b,c) - R3 (R3 A,R3 B):x(B.x-A.x),y(B.y-A.y),z(B.z-A.z) {} //Vecteur AB - - R3 (gp_Pnt P) : x(P.X()), y(P.Y()), z(P.Z()) {} //Point d'OpenCascade - R3 (gp_Vec V) : x(V.X()), y(V.Y()), z(V.Z()) {} //Vecteur d'OpenCascade - R3 (gp_Dir P) : x(P.X()), y(P.Y()), z(P.Z()) {} //Direction d'OpenCascade - - R3 operator+(R3 P)const {return R3(x+P.x,y+P.y,z+P.z);} - R3 operator+=(R3 P) {x += P.x; y += P.y; z += P.z; return *this;} - R3 operator-(R3 P)const {return R3(x-P.x,y-P.y,z-P.z);} - R3 operator-=(R3 P) {x -= P.x; y -= P.y; z -= P.z; return *this;} - R3 operator-()const {return R3(-x,-y,-z);} - R3 operator+()const {return *this;} - R operator,(R3 P)const {return x*P.x+y*P.y+z*P.z;} // produit scalaire - R3 operator^(R3 P)const {return R3(y*P.z-z*P.y ,P.x*z-x*P.z, x*P.y-y*P.x);} // produit vectoriel - R3 operator*(R c)const {return R3(x*c,y*c,z*c);} - R3 operator*=(R c) {x *= c; y *= c; z *= c; return *this;} - R3 operator/(R c)const {return R3(x/c,y/c,z/c);} - R3 operator/=(R c) {x /= c; y /= c; z /= c; return *this;} - R & operator[](int i) {return (&x)[i];} - friend R3 operator*(R c,R3 P) {return P*c;} - - R3 operator=(gp_Pnt P) {return R3(P.X(),P.Y(),P.Z());} - R3 operator=(gp_Dir P) {return R3(P.X(),P.Y(),P.Z());} - - friend gp_Pnt gp_pnt(R3 xyz) { return gp_Pnt(xyz.x,xyz.y,xyz.z); } - //friend gp_Pnt operator=() { return gp_Pnt(x,y,z); } - friend gp_Dir gp_dir(R3 xyz) { return gp_Dir(xyz.x,xyz.y,xyz.z); } - - bool DansPave( R3 & xyzMin, R3 & xyzMax ) - { return xyzMin.x<=x && x<=xyzMax.x && - xyzMin.y<=y && y<=xyzMax.y && - xyzMin.z<=z && z<=xyzMax.z; } -}; - -//la classe R4 -//============ -class R4: public R3 -{ - friend std::ostream& operator <<(std::ostream& f, const R4 & P ) - { f << P.x << ' ' << P.y << ' ' << P.z << ' ' << P.omega; return f; } - friend istream& operator >>(istream& f, R4 & P) - { f >> P.x >> P.y >> P.z >> P.omega ; return f; } - - friend std::ostream& operator <<(std::ostream& f, const R4 * P ) - { f << P->x << ' ' << P->y << ' ' << P->z << ' ' << P->omega; return f; } - friend istream& operator >>(istream& f, R4 * P) - { f >> P->x >> P->y >> P->z >> P->omega ; return f; } - -public: - R omega; //la donnee du poids supplementaire - - R4 () :omega(1.0) {} //les constructeurs - R4 (R a,R b,R c,R d):R3(a,b,c),omega(d) {} - R4 (R4 A,R4 B) :R3(B.x-A.x,B.y-A.y,B.z-A.z),omega(B.omega-A.omega) {} - - R4 operator+(R4 P)const {return R4(x+P.x,y+P.y,z+P.z,omega+P.omega);} - R4 operator+=(R4 P) {x += P.x;y += P.y;z += P.z;omega += P.omega;return *this;} - R4 operator-(R4 P)const {return R4(x-P.x,y-P.y,z-P.z,omega-P.omega);} - R4 operator-=(R4 P) {x -= P.x;y -= P.y;z -= P.z;omega -= P.omega;return *this;} - R4 operator-()const {return R4(-x,-y,-z,-omega);} - R4 operator+()const {return *this;} - R operator,(R4 P)const {return x*P.x+y*P.y+z*P.z+omega*P.omega;} // produit scalaire - R4 operator*(R c)const {return R4(x*c,y*c,z*c,omega*c);} - R4 operator*=(R c) {x *= c; y *= c; z *= c; omega *= c; return *this;} - R4 operator/(R c)const {return R4(x/c,y/c,z/c,omega/c);} - R4 operator/=(R c) {x /= c; y /= c; z /= c; omega /= c; return *this;} - R & operator[](int i) {return (&x)[i];} - friend R4 operator*(R c,R4 P) {return P*c;} -}; - -//quelques fonctions supplementaires sur ces classes -//================================================== -inline R Aire2d(const R2 A,const R2 B,const R2 C){return (B-A)^(C-A);} -inline R Angle2d(R2 P){ return atan2(P.y,P.x);} - -inline R Norme2_2(const R2 & A){ return (A,A);} -inline R Norme2(const R2 & A){ return sqrt((A,A));} -inline R NormeInfinie(const R2 & A){return Max(Abs(A.x),Abs(A.y));} - -inline R Norme2_2(const R3 & A){ return (A,A);} -inline R Norme2(const R3 & A){ return sqrt((A,A));} -inline R NormeInfinie(const R3 & A){return Max(Abs(A.x),Abs(A.y),Abs(A.z));} - -inline R Norme2_2(const R4 & A){ return (A,A);} -inline R Norme2(const R4 & A){ return sqrt((A,A));} -inline R NormeInfinie(const R4 & A){return Max(Abs(A.x),Abs(A.y),Abs(A.z),Abs(A.omega));} - -inline R2 XY(R3 P) {return R2(P.x, P.y);} //restriction a R2 d'un R3 par perte de z -inline R3 Min(R3 P, R3 Q) -{return R3(P.xQ.x ? P.x : Q.x, P.y>Q.y ? P.y : Q.y, P.z>Q.z ? P.z : Q.z);} //Pt de xyz Max - -#endif diff --git a/src/MEFISTO2/aptrte.cxx b/src/MEFISTO2/aptrte.cxx deleted file mode 100755 index 40c090523..000000000 --- a/src/MEFISTO2/aptrte.cxx +++ /dev/null @@ -1,786 +0,0 @@ -// MEFISTO : library to compute 2D triangulation from segmented boundaries -// -// Copyright (C) 2003 Laboratoire J.-L. Lions UPMC Paris -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// 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.ann.jussieu.fr/~perronne or email Perronnet@ann.jussieu.fr -// -// -// File : aptrte.cxx -// Module : SMESH -// Author: Alain PERRONNET - -#include "Rn.h" -#include "aptrte.h" -#include "utilities.h" - -using namespace std; - -extern "C" -{ - R aretemaxface_; - R areteideale_( R3 xyz, R3 direction ) - { - return aretemaxface_; - } -} -//calcul de la longueur ideale de l'arete au sommet xyz (z ici inactif) -//dans la direction donnee -//a ajuster pour chaque surface plane et selon l'entier notysu (voir plus bas) - - -static double cpunew, cpuold=0; - -void tempscpu_( double & tempsec ) -//Retourne le temps CPU utilise en secondes -{ - tempsec = ( (double) clock() ) / CLOCKS_PER_SEC; - //MESSAGE( "temps cpu=" << tempsec ); -} - - -void deltacpu_( R & dtcpu ) -//Retourne le temps CPU utilise en secondes depuis le precedent appel -{ - tempscpu_( cpunew ); - dtcpu = R( cpunew - cpuold ); - cpuold = cpunew; - //MESSAGE( "delta temps cpu=" << dtcpu ); - return; -} - - -void aptrte( Z nutysu, R aretmx, - Z nblf, Z * nudslf, R2 * uvslf, - Z nbpti, R2 *uvpti, - Z & nbst, R2 * & uvst, Z & nbt, Z * & nust, - Z & ierr ) -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// but : appel de la triangulation par un arbre-4 recouvrant -// ----- de triangles equilateraux -// le contour du domaine plan est defini par des lignes fermees -// la premiere ligne etant l'enveloppe de toutes les autres -// la fonction areteideale(s,d) donne la taille d'arete -// au point s dans la direction (actuellement inactive) d -// des lors toute arete issue d'un sommet s devrait avoir une longueur -// comprise entre 0.65 areteideale_(s,d) et 1.3 areteideale_(s,d) -// -//Attention: -// Les tableaux uvslf et uvpti sont supposes ne pas avoir de sommets identiques! -// De meme, un sommet d'une ligne fermee ne peut appartenir a une autre ligne fermee -// -// entrees: -// -------- -// nutysu : numero de traitement de areteideale_(s,d) selon le type de surface -// 0 pas d'emploi de la fonction areteideale_() et aretmx est active -// 1 il existe une fonction areteideale_(s,d) -// dont seules les 2 premieres composantes de uv sont actives -// ... autres options a definir ... -// aretmx : longueur maximale des aretes de la future triangulation -// nblf : nombre de lignes fermees de la surface -// nudslf : numero du dernier sommet de chacune des nblf lignes fermees -// nudslf(0)=0 pour permettre la difference sans test -// Attention le dernier sommet de chaque ligne est raccorde au premier -// tous les sommets et les points internes ont des coordonnees -// UV differentes <=> Pas de point double! -// uvslf : uv des nudslf(nblf) sommets des lignes fermees -// nbpti : nombre de points internes futurs sommets de la triangulation -// uvpti : uv des points internes futurs sommets de la triangulation -// -// sorties: -// -------- -// nbst : nombre de sommets de la triangulation finale -// uvst : coordonnees uv des nbst sommets de la triangulation -// nbt : nombre de triangles de la triangulation finale -// nust : 4 numeros dans uvst des sommets des nbt triangles -// s1, s2, s3, 0: no dans uvst des 3 sommets et 0 car quadrangle! -// ierr : 0 si pas d'erreur -// > 0 sinon -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// auteur : Alain Perronnet Analyse Numerique Paris UPMC decembre 2001 -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -{ - R d, tcpu=0; - R3 direction=R3(0,0,0); //direction pour areteideale() inactive ici! - Z nbarfr=nudslf[nblf]; //nombre total d'aretes des lignes fermees - Z mxtrou = Max( 1024, nblf ); //nombre maximal de trous dans la surface - - R3 *mnpxyd=NULL; - Z *mnsoar=NULL, mosoar=7, mxsoar, n1soar; //le hachage des aretes - Z *mnartr=NULL, moartr=3, mxartr, n1artr; //le no des 3 aretes des triangles - Z *mntree=NULL, motree=9, mxtree; //L'arbre 4 de TE et nombre d'entiers par TE - Z *mnqueu=NULL, mxqueu; - Z *mn1arcf=NULL; - Z *mnarcf=NULL, mxarcf; - Z *mnarcf1=NULL; - Z *mnarcf2=NULL; - Z *mnarcf3=NULL; - Z *mntrsu=NULL; - Z *mndalf=NULL; - Z *mnslig=NULL; - Z *mnarst=NULL; - Z *mnlftr=NULL; - - R3 comxmi[2]; //coordonnees UV Min et Maximales - R aremin, aremax; //longueur minimale et maximale des aretes - R quamoy, quamin; - - Z noar0, noar, na; - Z i, l, n, ns, ns0, ns1, ns2, nosotr[3], nt; - Z mxsomm, nbsomm, nbarpi, nbarli, ndtri0, mn; - Z moins1=-1; - - aretemaxface_ = aretmx; - - // initialisation du temps cpu - deltacpu_( d ); - ierr = 0; - - // quelques reservations de tableaux pour faire les calculs - // ======================================================== - // le tableau pointeur sur la premiere arete de chaque ligne fermee - if( mndalf!=NULL ) delete [] mndalf; - mndalf = new Z[1+nblf]; - if( mndalf==NULL ) goto ERREUR; - mndalf[0]=0; - - // declaration du tableau des coordonnees des sommets de la frontiere - // puis des sommets internes ajoutes - // majoration empirique du nombre de sommets de la triangulation - i = 4*nbarfr/10; - mxsomm = Max( 20000, 64*nbpti+i*i ); - MESSAGE( "APTRTE: Depart de la triangulation avec " ); - MESSAGE( "nutysu=" << nutysu << " aretmx=" << aretmx << " mxsomm=" << mxsomm ); - - NEWDEPART: - //mnpxyd( 3, mxsomm ) les coordonnees UV des sommets et la taille d'arete aux sommets - if( mnpxyd!=NULL ) delete [] mnpxyd; - mnpxyd = new R3[mxsomm]; - if( mnpxyd==NULL ) goto ERREUR; - - // le tableau mnsoar des aretes des triangles - // 1: sommet 1 dans pxyd, - // 2: sommet 2 dans pxyd, - // 3: numero de 1 a nblf de la ligne qui supporte l'arete - // 4: numero dans mnartr du triangle 1 partageant cette arete, - // 5: numero dans mnartr du triangle 2 partageant cette arete, - // 6: chainage des aretes frontalieres ou internes ou - // des aretes simples des etoiles de triangles, - // 7: chainage du hachage des aretes - // nombre d'aretes = 3 ( nombre de sommets - 1 + nombre de trous ) - // pour le hachage des aretes mxsoar doit etre > 3*mxsomm! - // h(ns1,ns2) = min( ns1, ns2 ) - if( mnsoar!=NULL ) delete [] mnsoar; - mxsoar = 3 * ( mxsomm + mxtrou ); - mnsoar = new Z[mosoar*mxsoar]; - if( mnsoar==NULL ) goto ERREUR; - //initialiser le tableau mnsoar pour le hachage des aretes - insoar_( mxsomm, mosoar, mxsoar, n1soar, mnsoar ); - - // mnarst( mxsomm ) numero mnsoar d'une arete pour chacun des sommets - if( mnarst!=NULL ) delete [] mnarst; - mnarst = new Z[1+mxsomm]; - if( mnarst==NULL ) goto ERREUR; - n = 1+mxsomm; - azeroi_( n, mnarst ); - - // mnslig( mxsomm ) no de sommet dans sa ligne pour chaque sommet frontalier - // ou no du point si interne forc'e par l'utilisateur - // ou 0 si interne cree par le module - if( mnslig!=NULL ) delete [] mnslig; - mnslig = new Z[mxsomm]; - if( mnslig==NULL ) goto ERREUR; - azeroi_( mxsomm, mnslig ); - - // initialisation des aretes frontalieres de la triangulation future - // renumerotation des sommets des aretes des lignes pour la triangulation - // mise a l'echelle des coordonnees des sommets pour obtenir une - // meilleure precision lors des calculs + quelques verifications - // boucle sur les lignes fermees qui forment la frontiere - // ====================================================================== - noar = 0; - aremin = 1e100; - aremax = 0; - - for (n=1; n<=nblf; n++) - { - //l'initialisation de la premiere arete de la ligne n dans la triangulation - //------------------------------------------------------------------------- - //le sommet ns0 est le numero de l'origine de la ligne - ns0 = nudslf[n-1]; - mnpxyd[ns0].x = uvslf[ns0].x; - mnpxyd[ns0].y = uvslf[ns0].y; - mnpxyd[ns0].z = areteideale_( mnpxyd[ns0], direction ); -// MESSAGE("Sommet " << ns0 << ": " << mnpxyd[ns0].x -// << " " << mnpxyd[ns0].y << " longueur arete=" << mnpxyd[ns0].z); - - //carre de la longueur de l'arete 1 de la ligne fermee n - d = pow( uvslf[ns0+1].x - uvslf[ns0].x, 2 ) - + pow( uvslf[ns0+1].y - uvslf[ns0].y, 2 ) ; - aremin = Min( aremin, d ); - aremax = Max( aremax, d ); - - //le numero des 2 sommets (ns1,ns2) de la premiere arete de la ligne - //initialisation de la 1-ere arete ns1-ns1+1 de cette ligne fermee n - //le numero des 2 sommets ns1 ns2 de la 1-ere arete - //Attention: les numeros ns debutent a 1 (ils ont >0) - // les tableaux c++ demarrent a zero! - // les tableaux fortran demarrent ou l'on veut! - ns0++; - ns1 = ns0; - ns2 = ns1+1; - - //le numero n de la ligne du sommet et son numero ns1 dans la ligne - mnslig[ns0-1] = 1000000 * n + ns1-nudslf[n-1]; - fasoar_( ns1, ns2, moins1, moins1, n, - mosoar, mxsoar, n1soar, mnsoar, mnarst, - noar0, ierr ); - //pas de test sur ierr car pas de saturation possible a ce niveau - - //le pointeur dans le hachage sur la premiere arete de la ligne fermee n - mndalf[n] = noar0; - - //la nouvelle arete est la suivante de l'arete definie juste avant - if( noar > 0 ) - mnsoar[mosoar * noar - mosoar + 5] = noar0; - - //l'initialisation des aretes suivantes de la ligne dans la triangulation - //----------------------------------------------------------------------- - nbarli = nudslf[n] - nudslf[n-1]; //nombre d'aretes=sommets de la ligne n - for (i=2; i<=nbarli; i++) - { - ns1 = ns2; //le numero de l'arete et le numero du premier sommet de l'arete - if( i < nbarli ) - //nbs+1 est le 2-eme sommet de l'arete i de la ligne fermee n - ns2 = ns1+1; - else - //le 2-eme sommet de la derniere arete est le premier sommet de la ligne - ns2 = ns0; - - //l'arete precedente est dotee de sa suivante:celle cree ensuite - //les 2 coordonnees du sommet ns2 de la ligne - ns = ns1 - 1; - mnpxyd[ns].x = uvslf[ns].x; - mnpxyd[ns].y = uvslf[ns].y; - mnpxyd[ns].z = areteideale_( mnpxyd[ns], direction ); -// MESSAGE("Sommet " << ns << ": " << mnpxyd[ns].x -// << " " << mnpxyd[ns].y << " longueur arete=" << mnpxyd[ns].z); - - //carre de la longueur de l'arete - d = pow( uvslf[ns2-1].x - uvslf[ns1-1].x, 2) - + pow( uvslf[ns2-1].y - uvslf[ns1-1].y, 2); - aremin = Min( aremin, d ); - aremax = Max( aremax, d ); - - //le numero n de la ligne du sommet et son numero ns1 dans la ligne - mnslig[ns] = 1000000 * n + ns1-nudslf[n-1]; - - //ajout de l'arete dans la liste - fasoar_( ns1, ns2, moins1, moins1, n, - mosoar, mxsoar, n1soar, mnsoar, - mnarst, noar, ierr ); - //pas de test sur ierr car pas de saturation possible a ce niveau - - //chainage des aretes frontalieres en position 6 du tableau mnsoar - //la nouvelle arete est la suivante de l'arete definie juste avant - mnsoar[ mosoar * noar0 - mosoar + 5 ] = noar; - noar0 = noar; - } - //attention: la derniere arete de la ligne fermee enveloppe - // devient en fait la premiere arete de cette ligne - // dans le chainage des aretes de la frontiere! - } - if( ierr != 0 ) goto ERREUR; - - aremin = sqrt( aremin ); //longueur minimale d'une arete des lignes fermees - aremax = sqrt( aremax ); //longueur maximale d'une arete - - aretmx = Min( aretmx, aremax ); //pour homogeneiser - MESSAGE("nutysu=" << nutysu << " aretmx=" << aretmx - << " arete min=" << aremin << " arete max=" << aremax); - - //chainage des aretes frontalieres : la derniere arete frontaliere - mnsoar[ mosoar * noar - mosoar + 5 ] = 0; - - //tous les sommets et aretes frontaliers sont numerotes de 1 a nbarfr - //reservation du tableau des numeros des 3 aretes de chaque triangle - //mnartr( moartr, mxartr ) - //En nombre: Triangles = Aretes Internes + Aretes Frontalieres - Sommets + 1-Trous - // 3Triangles = 2 Aretes internes + Aretes frontalieres - // d'ou 3T/2 < AI + AF => T < 3T/2 - Sommets + 1-Trous - //nombre de triangles < 2 ( nombre de sommets - 1 + nombre de trous ) - if( mnartr!=NULL ) delete [] mnartr; - mxartr = 2 * ( mxsomm + mxtrou ); - mnartr = new Z[moartr*mxartr]; - if( mnartr==NULL ) goto ERREUR; - - //Ajout des points internes - ns1 = nudslf[ nblf ]; - for (i=0; i redepart avec 2 fois plus de sommets - mxsomm = 2 * mxsomm; - ierr = 0; - goto NEWDEPART; - } - else - { - MESSAGE( "Triangulation non realisee " << ierr ); - if( ierr == 0 ) ierr=1; - goto NETTOYAGE; - } -} - - -void qualitetrte( R3 *mnpxyd, - Z & mosoar, Z & mxsoar, Z *mnsoar, - Z & moartr, Z & mxartr, Z *mnartr, - Z & nbtria, R & quamoy, R & quamin ) -// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// but : calculer la qualite moyenne et minimale de la triangulation -// ----- actuelle definie par les tableaux mnsoar et mnartr -// entrees: -// -------- -// mnpxyd : tableau des coordonnees 2d des points -// par point : x y distance_souhaitee -// mosoar : nombre maximal d'entiers par arete et -// indice dans mnsoar de l'arete suivante dans le hachage -// mxsoar : nombre maximal d'aretes stockables dans le tableau mnsoar -// attention: mxsoar>3*mxsomm obligatoire! -// mnsoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -// chainage des aretes frontalieres, chainage du hachage des aretes -// hachage des aretes = mnsoar(1)+mnsoar(2)*2 -// avec mxsoar>=3*mxsomm -// une arete i de mnsoar est vide <=> mnsoar(1,i)=0 et -// mnsoar(2,arete vide)=l'arete vide qui precede -// mnsoar(3,arete vide)=l'arete vide qui suit -// moartr : nombre maximal d'entiers par arete du tableau mnartr -// mxartr : nombre maximal de triangles declarables -// mnartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -// arete1 = 0 si triangle vide => arete2 = triangle vide suivant -// sorties: -// -------- -// nbtria : nombre de triangles internes au domaine -// quamoy : qualite moyenne des triangles actuels -// quamin : qualite minimale des triangles actuels -// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -{ - R d, aire, qualite; - Z nosotr[3], mn, nbtrianeg, nt; - - aire = 0; - quamoy = 0; - quamin = 2.0; - nbtria = 0; - nbtrianeg = 0; - - mn = -moartr; - for ( nt=1; nt<=mxartr; nt++ ) - { - mn += moartr; - if( mnartr[mn]!=0 ) - { - //un triangle occupe de plus - nbtria++; - - //le numero des 3 sommets du triangle nt - nusotr_( nt, mosoar, mnsoar, moartr, mnartr, nosotr ); - - //la qualite du triangle ns1 ns2 ns3 - qutr2d_( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1], - qualite ); - - //la qualite moyenne - quamoy += qualite; - - //la qualite minimale - quamin = Min( quamin, qualite ); - - //aire signee du triangle nt - d = surtd2_( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1] ); - if( d<0 ) - { - //un triangle d'aire negative de plus - nbtrianeg++; - MESSAGE("ATTENTION: le triangle " << nt << " de sommets:" - << nosotr[0] << " " << nosotr[1] << " " << nosotr[2] - << " a une aire " << d <<"<=0"); - } - - //aire des triangles actuels - aire += Abs(d); - } - } - - //les affichages - quamoy /= nbtria; - MESSAGE("Qualite moyenne=" << quamoy - << " Qualite minimale=" << quamin - << " des " << nbtria << " triangles de surface totale=" - << aire); - - if( nbtrianeg>0 ) - MESSAGE( "ATTENTION: nombre de triangles d'aire negative=" << nbtrianeg ); - return; -} diff --git a/src/MEFISTO2/aptrte.h b/src/MEFISTO2/aptrte.h deleted file mode 100755 index 531087700..000000000 --- a/src/MEFISTO2/aptrte.h +++ /dev/null @@ -1,255 +0,0 @@ -// SMESH MEFISTO2 : algorithm for meshing -// -// Copyright (C) 2003 Laboratoire J.-L. Lions UPMC Paris -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// 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.ann.jussieu.fr/~perronne or email Perronnet@ann.jussieu.fr -// -// -// -// File : aptrte.h -// Author: Alain PERRONNET -// Module : SMESH - -#ifndef aptrte__h -#define aptrte__h - -#include // limites min max int long real ... -#include // gethostname, ... -#include -#include // pour cout cin ... -#include // pour le format des io setw, stx, setfill, ... -#include // pour les fonctions sur les chaines de caracteres -#include -#include -#include // pour les fonctions mathematiques -#include - -#include -#include - -void qualitetrte( R3 *mnpxyd, - Z & mosoar, Z & mxsoar, Z *mnsoar, - Z & moartr, Z & mxartr, Z *mnartr, - Z & nbtria, R & quamoy, R & quamin ); -// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// but : calculer la qualite moyenne et minimale de la triangulation -// ----- actuelle definie par les tableaux nosoar et noartr -// entrees: -// -------- -// mnpxyd : tableau des coordonnees 2d des points -// par point : x y distance_souhaitee -// mosoar : nombre maximal d'entiers par arete et -// indice dans nosoar de l'arete suivante dans le hachage -// mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -// attention: mxsoar>3*mxsomm obligatoire! -// nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -// chainage des aretes frontalieres, chainage du hachage des aretes -// hachage des aretes = nosoar(1)+nosoar(2)*2 -// avec mxsoar>=3*mxsomm -// une arete i de nosoar est vide <=> nosoar(1,i)=0 et -// nosoar(2,arete vide)=l'arete vide qui precede -// nosoar(3,arete vide)=l'arete vide qui suit -// moartr : nombre maximal d'entiers par arete du tableau noartr -// mxartr : nombre maximal de triangles declarables -// noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -// arete1 = 0 si triangle vide => arete2 = triangle vide suivant -// sorties: -// -------- -// nbtria : nombre de triangles internes au domaine -// quamoy : qualite moyenne des triangles actuels -// quamin : qualite minimale des triangles actuels -// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - - -void aptrte( Z nutysu, R aretmx, - Z nblf, Z *nudslf, R2 *uvslf, - Z nbpti, R2 *uvpti, - Z & nbst, R2 * & uvst, Z & nbt, Z * & nust, - Z & ierr ); -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// but : appel de la triangulation par un arbre-4 recouvrant -// ----- de triangles equilateraux -// le contour du domaine plan est defini par des lignes fermees -// la premiere ligne etant l'enveloppe de toutes les autres -// la fonction areteideale_(s,d) donne la taille d'arete -// au point s dans la direction d (direction inactive pour l'instant) -// des lors toute arete issue d'un sommet s devrait avoir une longueur -// comprise entre 0.65 areteideale_(s,d) et 1.3 areteideale_(s,d) -// -//Attention: -// Les tableaux uvslf et uvpti sont supposes ne pas avoir de sommets identiques! -// De meme, un sommet d'une ligne fermee ne peut appartenir a une autre ligne fermee -// -// entrees: -// -------- -// nutysu : numero de traitement de areteideale_() selon le type de surface -// 0 pas d'emploi de la fonction areteideale_() et aretmx est active -// 1 il existe une fonction areteideale_(s,d) -// dont seules les 2 premieres composantes de uv sont actives -// ... autres options a definir ... -// aretmx : longueur maximale des aretes de la future triangulation -// nblf : nombre de lignes fermees de la surface -// nudslf : numero du dernier sommet de chacune des nblf lignes fermees -// nudslf(0)=0 pour permettre la difference sans test -// Attention le dernier sommet de chaque ligne est raccorde au premier -// tous les sommets et les points internes ont des coordonnees -// UV differentes <=> Pas de point double! -// uvslf : uv des nudslf(nblf) sommets des lignes fermees -// nbpti : nombre de points internes futurs sommets de la triangulation -// uvpti : uv des points internes futurs sommets de la triangulation -// -// sorties: -// -------- -// nbst : nombre de sommets de la triangulation finale -// uvst : coordonnees uv des nbst sommets de la triangulation -// nbt : nombre de triangles de la triangulation finale -// nust : 3 numeros dans uvst des sommets des nbt triangles -// ierr : 0 si pas d'erreur -// > 0 sinon -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// auteur : Alain Perronnet Analyse Numerique Paris UPMC decembre 2001 -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -extern "C" { void tempscpu_( double & tempsec ); } -//Retourne le temps CPU utilise en secondes - -extern "C" { void deltacpu_( R & dtcpu ); } -//Retourne le temps CPU utilise en secondes depuis le precedent appel - -//initialiser le tableau mnsoar pour le hachage des aretes -extern "C" {void insoar_( Z & mxsomm, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar );} - -//mettre a zero les nb entiers de tab -extern "C" {void azeroi_( Z & nb, Z * tab );} - -extern "C" {void fasoar_( Z & ns1, Z & ns2, Z & nt1, Z & nt2, Z & nolign, - Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, Z * mnarst, - Z & noar, Z & ierr );} -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// but : former l'arete de sommet ns1-ns2 dans le hachage du tableau -// ----- nosoar des aretes de la triangulation -// entrees: -// -------- -// ns1 ns2: numero pxyd des 2 sommets de l'arete -// nt1 : numero du triangle auquel appartient l'arete -// nt1=-1 si numero inconnu -// nt2 : numero de l'eventuel second triangle de l'arete si connu -// nt2=-1 si numero inconnu -// nolign : numero de la ligne fermee de l'arete -// =0 si l'arete n'est une arete de ligne -// ce numero est ajoute seulement si l'arete est creee -// mosoar : nombre maximal d'entiers par arete du tableau nosoar -// mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -// modifies: -// --------- -// n1soar : numero de la premiere arete vide dans le tableau nosoar -// une arete i de nosoar est vide <=> nosoar(1,i)=0 -// chainage des aretes vides amont et aval -// l'arete vide qui precede=nosoar(4,i) -// l'arete vide qui suit =nosoar(5,i) -// nosoar : numero des 2 sommets, no ligne, 2 triangles de l'arete, -// chainage momentan'e d'aretes, chainage du hachage des aretes -// hachage des aretes = min( nosoar(1), nosoar(2) ) -// noarst : noarst(np) numero d'une arete du sommet np - -// ierr : si < 0 en entree pas d'affichage en cas d'erreur du type -// "arete appartenant a plus de 2 triangles et a creer!" -// si >=0 en entree affichage de ce type d'erreur -// sorties: -// -------- -// noar : >0 numero de l'arete retrouvee ou ajoutee -// ierr : =0 si pas d'erreur -// =1 si le tableau nosoar est sature -// =2 si arete a creer et appartenant a 2 triangles distincts -// des triangles nt1 et nt2 -// =3 si arete appartenant a 2 triangles distincts -// differents des triangles nt1 et nt2 -// =4 si arete appartenant a 2 triangles distincts -// dont le second n'est pas le triangle nt2 -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -//initialisation du tableau letree et ajout dans letree des sommets 1 a nbsomm -extern "C" {void teajte_( Z & mxsomm, Z & nbsomm, R3 * mnpxyd, R3 * comxmi, - R & aretmx, Z & mxtree, Z * letree, - Z & ierr );} - - -extern "C" {void tehote_( Z & nutysu, Z & nbarpi, Z & mxsomm, Z & nbsomm, R3 * mnpxyd, - R3 * comxmi, R & aretmx, - Z * letree, Z & mxqueu, Z * mnqueu, - Z & ierr );} -// homogeneisation de l'arbre des te a un saut de taille au plus -// prise en compte des tailles d'aretes souhaitees autour des sommets initiaux - -extern "C" {void tetrte_( R3 * comxmi, R & aretmx, Z & nbarpi, Z & mxsomm, R3 * mnpxyd, - Z & mxqueu, Z * mnqueu, Z * mntree, - Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, - Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z * mnarst, - Z & ierr );} -// trianguler les triangles equilateraux feuilles a partir de leurs 3 sommets -// et des points de la frontiere, des points internes imposes interieurs - -extern "C" {void aisoar_( Z & mosoar, Z & mxsoar, Z * mnsoar, Z & na );} - // formation du chainage 6 des aretes internes a echanger eventuellement - -extern "C" {void tedela_( R3 * mnpxyd, Z * mnarst, - Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, Z & na, - Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z & n );} - // boucle sur les aretes internes (non sur une ligne de la frontiere) - // avec echange des 2 diagonales afin de rendre la triangulation delaunay - -extern "C" {void terefr_( Z & nbarpi, R3 * mnpxyd, - Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, - Z & moartr, Z & n1artr, Z * mnartr, Z * mnarst, - Z & mxarcf, Z * mnarc1, Z * mnarc2, - Z * mnarc3, Z * mnarc4, - Z & n, Z & ierr );} -// detection des aretes frontalieres initiales perdues -// triangulation frontale pour les restaurer - -extern "C" {void tesuex_( Z & nblf, Z * nulftr, - Z & ndtri0, Z & nbsomm, R3 * mnpxyd, Z * mnslig, - Z & mosoar, Z & mxsoar, Z * mnsoar, - Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z * mnarst, - Z & nbtria, Z * mntrsu, Z & ierr );} -// suppression des triangles externes a la surface - -extern "C" {void teamqt_( Z & nutysu, - Z * mnarst, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, - Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, - Z & mxarcf, Z * mntrcf, Z * mnstbo, - Z * n1arcf, Z * mnarcf, Z * mnarc1, - R3 * comxmi, Z & nbarpi, Z & nbsomm, Z & mxsomm, - R3 * mnpxyd, Z * mnslig, - Z & ierr );} -// amelioration de la qualite de la triangulation par -// barycentrage des sommets internes a la triangulation -// suppression des aretes trop longues ou trop courtes -// modification de la topologie des groupes de triangles -// mise en delaunay de la triangulation - -extern "C" {void nusotr_( Z & nt, Z & mosoar, Z * mnsoar, Z & moartr, Z * mnartr, - Z * nosotr );} -//retrouver les numero des 3 sommets du triangle nt - -extern "C" {void qutr2d_( R3 & p1, R3 & p2, R3 & p3, R & qualite );} -//calculer la qualite d'un triangle de R2 de sommets p1, p2, p3 - -extern "C" { R surtd2_( R3 & p1, R3 & p2, R3 & p3 ); } -//calcul de la surface d'un triangle defini par 3 points de r**2 - -#endif diff --git a/src/MEFISTO2/areteideale.f b/src/MEFISTO2/areteideale.f deleted file mode 100755 index f0c8744ca..000000000 --- a/src/MEFISTO2/areteideale.f +++ /dev/null @@ -1,30 +0,0 @@ -c MEFISTO : library to compute 2D triangulation from segmented boundaries -c -c Copyright (C) 2003 Laboratoire J.-L. Lions UPMC Paris -c -c This library is free software; you can redistribute it and/or -c modify it under the terms of the GNU Lesser General Public -c License as published by the Free Software Foundation; either -c version 2.1 of the License. -c -c This library is distributed in the hope that it will be useful, -c but WITHOUT ANY WARRANTY; without even the implied warranty of -c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -c Lesser General Public License for more details. -c -c You should have received a copy of the GNU Lesser General Public -c License along with this library; if not, write to the Free Software -c Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -c -c See http://www.ann.jussieu.fr/~perronne or email Perronnet@ann.jussieu.fr -c -c -c File : areteideale.f -c Module : SMESH -c Author: Alain PERRONNET - - double precision function areteideale( xyz, direction ) - double precision xyz(3), direction(3) - areteideale = 10 - return - end diff --git a/src/MEFISTO2/trte.f b/src/MEFISTO2/trte.f deleted file mode 100755 index 8e0388b88..000000000 --- a/src/MEFISTO2/trte.f +++ /dev/null @@ -1,8332 +0,0 @@ -c MEFISTO : library to compute 2D triangulation from segmented boundaries -c -c Copyright (C) 2003 Laboratoire J.-L. Lions UPMC Paris -c -c This library is free software; you can redistribute it and/or -c modify it under the terms of the GNU Lesser General Public -c License as published by the Free Software Foundation; either -c version 2.1 of the License. -c -c This library is distributed in the hope that it will be useful, -c but WITHOUT ANY WARRANTY; without even the implied warranty of -c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -c Lesser General Public License for more details. -c -c You should have received a copy of the GNU Lesser General Public -c License along with this library; if not, write to the Free Software -c Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -c -c See http://www.ann.jussieu.fr/~perronne or email Perronnet@ann.jussieu.fr -c -c -c File : trte.f -c Module : SMESH -c Author: Alain PERRONNET - - subroutine qutr2d( p1, p2, p3, qualite ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : calculer la qualite d'un triangle de r**2 -c ----- 2 coordonnees des 3 sommets en double precision -c -c entrees : -c --------- -c p1,p2,p3 : les 3 coordonnees des 3 sommets du triangle -c sens direct pour une surface et qualite >0 -c sorties : -c --------- -c qualite: valeur de la qualite du triangle entre 0 et 1 (equilateral) -c 1 etant la qualite optimale -c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique upmc paris janvier 1995 -c2345x7..............................................................012 - parameter ( d2uxr3 = 3.4641016151377544d0 ) -c d2uxr3 = 2 * sqrt(3) - double precision p1(2), p2(2), p3(2), qualite, a, b, c, p -c -c la longueur des 3 cotes - a = sqrt( (p2(1)-p1(1))**2 + (p2(2)-p1(2))**2 ) - b = sqrt( (p3(1)-p2(1))**2 + (p3(2)-p2(2))**2 ) - c = sqrt( (p1(1)-p3(1))**2 + (p1(2)-p3(2))**2 ) -c -c demi perimetre - p = (a+b+c) * 0.5d0 -c - if ( (a*b*c) .ne. 0d0 ) then -c critere : 2 racine(3) * rayon_inscrit / plus longue arete - qualite = d2uxr3 * sqrt( abs( (p-a) / p * (p-b) * (p-c) ) ) - % / max(a,b,c) - else - qualite = 0d0 - endif -c -c -c autres criteres possibles: -c critere : 2 * rayon_inscrit / rayon_circonscrit -c qualite = 8d0 * (p-a) * (p-b) * (p-c) / (a * b * c) -c -c critere : 3*sqrt(3.) * ray_inscrit / demi perimetre -c qualite = 3*sqrt(3.) * sqrt ((p-a)*(p-b)*(p-c) / p**3) -c -c critere : 2*sqrt(3.) * ray_inscrit / max( des aretes ) -c qualite = 2*sqrt(3.) * sqrt( (p-a)*(p-b)*(p-c) / p ) / max(a,b,c) - end - - - double precision function surtd2( p1 , p2 , p3 ) -c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : calcul de la surface d'un triangle defini par 3 points de R**2 -c ----- -c parametres d entree : -c --------------------- -c p1 p2 p3 : les 3 fois 2 coordonnees des sommets du triangle -c -c parametre resultat : -c -------------------- -c surtd2 : surface du triangle -c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique upmc paris fevrier 1992 -c2345x7..............................................................012 - double precision p1(2), p2(2), p3(2) -c -c la surface du triangle - surtd2 = ( ( p2(1)-p1(1) ) * ( p3(2)-p1(2) ) - % - ( p2(2)-p1(2) ) * ( p3(1)-p1(1) ) ) * 0.5d0 - end - - integer function nopre3( i ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : numero precedent i dans le sens circulaire 1 2 3 1 ... -c ----- -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc fevrier 1992 -c2345x7..............................................................012 - if( i .eq. 1 ) then - nopre3 = 3 - else - nopre3 = i - 1 - endif - end - - integer function nosui3( i ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : numero suivant i dans le sens circulaire 1 2 3 1 ... -c ----- -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc fevrier 1992 -c2345x7..............................................................012 - if( i .eq. 3 ) then - nosui3 = 1 - else - nosui3 = i + 1 - endif - end - - subroutine provec( v1 , v2 , v3 ) -c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : v3 vecteur = produit vectoriel de 2 vecteurs de r ** 3 -c ----- -c entrees: -c -------- -c v1, v2 : les 2 vecteurs de 3 composantes -c -c sortie : -c -------- -c v3 : vecteur = v1 produit vectoriel v2 -cc++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : perronnet alain upmc analyse numerique paris mars 1987 -c2345x7..............................................................012 - double precision v1(3), v2(3), v3(3) -c - v3( 1 ) = v1( 2 ) * v2( 3 ) - v1( 3 ) * v2( 2 ) - v3( 2 ) = v1( 3 ) * v2( 1 ) - v1( 1 ) * v2( 3 ) - v3( 3 ) = v1( 1 ) * v2( 2 ) - v1( 2 ) * v2( 1 ) -c - return - end - - subroutine norme1( n, v, ierr ) -c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : normalisation euclidienne a 1 d un vecteur v de n composantes -c ----- -c entrees : -c --------- -c n : nombre de composantes du vecteur -c -c modifie : -c --------- -c v : le vecteur a normaliser a 1 -c -c sortie : -c --------- -c ierr : 1 si la norme de v est egale a 0 -c 0 si pas d'erreur -c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris mars 1987 -c ...................................................................... - double precision v( n ), s, sqrt -c - s = 0.0d0 - do 10 i=1,n - s = s + v( i ) * v( i ) - 10 continue -c -c test de nullite de la norme du vecteur -c -------------------------------------- - if( s .le. 0.0d0 ) then -c norme nulle du vecteur non normalisable a 1 - ierr = 1 - return - endif -c - s = 1.0d0 / sqrt( s ) - do 20 i=1,n - v( i ) = v ( i ) * s - 20 continue -c - ierr = 0 - end - - - subroutine insoar( mxsomm, mosoar, mxsoar, n1soar, nosoar ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : initialiser le tableau nosoar pour le hachage des aretes -c ----- -c -c entrees: -c -------- -c mxsomm : plus grand numero de sommet d'une arete au cours du calcul -c mosoar : nombre maximal d'entiers par arete du tableau nosoar -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c avec mxsoar>=3*mxsomm -c -c sorties: -c -------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c chainage des aretes vides amont et aval -c l'arete vide qui precede=nosoar(4,i) -c l'arete vide qui suit =nosoar(5,i) -c nosoar : numero des 2 sommets, no ligne, 2 triangles de l'arete, -c chainage momentan'e d'aretes, chainage du hachage des aretes -c hachage des aretes = min( nosoar(1), nosoar(2) ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c2345x7..............................................................012 - integer nosoar(mosoar,mxsoar) -c -c initialisation des aretes 1 a mxsomm - do 10 i=1,mxsomm -c -c sommet 1 = 0 <=> temoin d'arete vide pour le hachage - nosoar( 1, i ) = 0 -c -c arete sur aucune ligne - nosoar( 3, i ) = 0 -c -c la position de l'arete interne ou frontaliere est inconnue - nosoar( 6, i ) = -2 -c -c fin de chainage du hachage pas d'arete suivante - nosoar( mosoar, i ) = 0 -c - 10 continue -c -c la premiere arete vide chainee est la mxsomm+1 du tableau -c car ces aretes ne sont pas atteignables par le hachage direct - n1soar = mxsomm + 1 -c -c initialisation des aretes vides et des chainages - do 20 i = n1soar, mxsoar -c -c sommet 1 = 0 <=> temoin d'arete vide pour le hachage - nosoar( 1, i ) = 0 -c -c arete sur aucune ligne - nosoar( 3, i ) = 0 -c -c chainage sur l'arete vide qui precede -c (si arete occupee cela deviendra le no du triangle 1 de l'arete) - nosoar( 4, i ) = i-1 -c -c chainage sur l'arete vide qui suit -c (si arete occupee cela deviendra le no du triangle 2 de l'arete) - nosoar( 5, i ) = i+1 -c -c chainages des aretes frontalieres ou internes ou ... - nosoar( 6, i ) = -2 -c -c fin de chainage du hachage - nosoar( mosoar, i ) = 0 -c - 20 continue -c -c la premiere arete vide n'a pas de precedent - nosoar( 4, n1soar ) = 0 -c -c la derniere arete vide est mxsoar sans arete vide suivante - nosoar( 5, mxsoar ) = 0 - end - - - subroutine azeroi ( l , ntab ) -c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : initialisation a zero d un tableau ntab de l variables entieres -c ----- -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique upmc paris septembre 1988 -c23456---------------------------------------------------------------012 - integer ntab(l) - do 1 i = 1 , l - ntab( i ) = 0 - 1 continue - end - - - subroutine fasoar( ns1, ns2, nt1, nt2, nolign, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % noar, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : former l'arete de sommet ns1-ns2 dans le hachage du tableau -c ----- nosoar des aretes de la triangulation -c -c entrees: -c -------- -c ns1 ns2: numero pxyd des 2 sommets de l'arete -c nt1 : numero du triangle auquel appartient l'arete -c nt1=-1 si numero inconnu -c nt2 : numero de l'eventuel second triangle de l'arete si connu -c nt2=-1 si numero inconnu -c nolign : numero de la ligne de l'arete dans ladefi(wulftr-1+nolign) -c =0 si l'arete n'est une arete de ligne -c ce numero est ajoute seulement si l'arete est creee -c mosoar : nombre maximal d'entiers par arete du tableau nosoar -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c -c modifies: -c --------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c chainage des aretes vides amont et aval -c l'arete vide qui precede=nosoar(4,i) -c l'arete vide qui suit =nosoar(5,i) -c nosoar : numero des 2 sommets, no ligne, 2 triangles de l'arete, -c chainage momentan'e d'aretes, chainage du hachage des aretes -c hachage des aretes = min( nosoar(1), nosoar(2) ) -c noarst : noarst(np) numero d'une arete du sommet np -c -c ierr : si < 0 en entree pas d'affichage en cas d'erreur du type -c "arete appartenant a plus de 2 triangles et a creer!" -c si >=0 en entree affichage de ce type d'erreur -c -c sorties: -c -------- -c noar : >0 numero de l'arete retrouvee ou ajoutee -c ierr : =0 si pas d'erreur -c =1 si le tableau nosoar est sature -c =2 si arete a creer et appartenant a 2 triangles distincts -c des triangles nt1 et nt2 -c =3 si arete appartenant a 2 triangles distincts -c differents des triangles nt1 et nt2 -c =4 si arete appartenant a 2 triangles distincts -c dont le second n'est pas le triangle nt2 -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c2345x7..............................................................012 - common / unites / lecteu, imprim, nunite(30) - integer nosoar(mosoar,mxsoar), noarst(*) - integer nu2sar(2) -c -c ajout eventuel de l'arete s1 s2 dans nosoar - nu2sar(1) = ns1 - nu2sar(2) = ns2 -c -c hachage de l'arete de sommets nu2sar - call hasoar( mosoar, mxsoar, n1soar, nosoar, nu2sar, noar ) -c en sortie: noar>0 => no arete retrouvee -c <0 => no arete ajoutee -c =0 => saturation du tableau nosoar -c - if( noar .eq. 0 ) then -c -c saturation du tableau nosoar - write(imprim,*) 'fasoar: tableau nosoar sature' - ierr = 1 - return -c - else if( noar .lt. 0 ) then -c -c l'arete a ete ajoutee. initialisation des autres informations - noar = -noar -c le numero de la ligne de l'arete - nosoar(3,noar) = nolign -c le triangle 1 de l'arete => le triangle nt1 - nosoar(4,noar) = nt1 -c le triangle 2 de l'arete => le triangle nt2 - nosoar(5,noar) = nt2 -c -c le sommet appartient a l'arete noar - noarst( nu2sar(1) ) = noar - noarst( nu2sar(2) ) = noar -c - else -c -c l'arete a ete retrouvee. -c si elle appartient a 2 triangles differents de nt1 et nt2 -c alors il y a une erreur - if( nosoar(4,noar) .gt. 0 .and. - % nosoar(5,noar) .gt. 0 ) then - if( nosoar(4,noar) .ne. nt1 .and. - % nosoar(4,noar) .ne. nt2 .or. - % nosoar(5,noar) .ne. nt1 .and. - % nosoar(5,noar) .ne. nt2 ) then -c arete appartenant a plus de 2 triangles => erreur - if( ierr .ge. 0 ) then - write(imprim,*) 'erreur fasoar: arete ',noar, - % ' dans 2 triangles et a creer!' - endif - ierr = 2 - return - endif - endif -c -c mise a jour du numero des triangles de l'arete noar -c le triangle 2 de l'arete => le triangle nt1 - if( nosoar(4,noar) .lt. 0 ) then -c pas de triangle connu pour cette arete - n = 4 - else -c deja un triangle connu. ce nouveau est le second - if( nosoar(5,noar) .gt. 0 .and. nt1 .gt. 0 .and. - % nosoar(5,noar) .ne. nt1 ) then -c arete appartenant a plus de 2 triangles => erreur - write(imprim,*) 'erreur fasoar: arete ',noar, - % ' dans plus de 2 triangles' - ierr = 3 - return - endif - n = 5 - endif - nosoar(n,noar) = nt1 -c -c cas de l'arete frontaliere retrouvee comme diagonale d'un quadrangle - if( nt2 .gt. 0 ) then -c l'arete appartient a 2 triangles - if( nosoar(5,noar) .gt. 0 .and. - % nosoar(5,noar) .ne. nt2 ) then -c arete appartenant a plus de 2 triangles => erreur - write(imprim,*) 'erreur fasoar: arete ',noar, - % ' dans plus de 2 triangles' - ierr = 4 - return - endif - nosoar(5,noar) = nt2 - endif -c - endif -c -c pas d'erreur - ierr = 0 - end - - subroutine fq1inv( x, y, s, xc, yc, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : calcul des 2 coordonnees (xc,yc) dans le carre (0,1) -c ----- image par f:carre unite-->quadrangle appartenant a q1**2 -c par une resolution directe due a nicolas thenault -c -c entrees: -c -------- -c x,y : coordonnees du point image dans le quadrangle de sommets s -c s : les 2 coordonnees des 4 sommets du quadrangle -c -c sorties: -c -------- -c xc,yc : coordonnees dans le carre dont l'image par f vaut (x,y) -c ierr : 0 si calcul sans erreur, 1 si quadrangle degenere -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteurs: thenault tulenew analyse numerique paris janvier 1998 -c modifs : perronnet alain analyse numerique paris janvier 1998 -c234567..............................................................012 - real s(1:2,1:4), dist(2) - double precision a,b,c,d,alpha,beta,gamma,delta,x0,y0,t(2),u,v,w -c - a = s(1,1) - b = s(1,2) - s(1,1) - c = s(1,4) - s(1,1) - d = s(1,1) - s(1,2) + s(1,3) - s(1,4) -c - alpha = s(2,1) - beta = s(2,2) - s(2,1) - gamma = s(2,4) - s(2,1) - delta = s(2,1) - s(2,2) + s(2,3) - s(2,4) -c - u = beta * c - b * gamma - if( u .eq. 0 ) then -c quadrangle degenere - ierr = 1 - return - endif - v = delta * c - d * gamma - w = b * delta - beta * d -c - x0 = c * (y-alpha) - gamma * (x-a) - y0 = b * (y-alpha) - beta * (x-a) -c - a = v * w - b = u * u - w * x0 - v * y0 - c = x0 * y0 -c - if( a .ne. 0 ) then -c - delta = sqrt( b*b-4*a*c ) - if( b .ge. 0.0 ) then - t(2) = -b - delta - else - t(2) = -b + delta - endif -c la racine de plus grande valeur absolue -c (elle donne le plus souvent le point exterieur au carre unite -c donc a tester en second pour reduire les calculs) - t(2) = t(2) / ( 2 * a ) -c calcul de la seconde racine a partir de la somme => plus stable - t(1) = - b/a - t(2) -c - do 10 i=1,2 -c -c la solution i donne t elle un point interne au carre unite? - xc = ( x0 - v * t(i) ) / u - yc = ( w * t(i) - y0 ) / u - if( 0.0 .le. xc .and. xc .le. 1.0 ) then - if( 0.0 .le. yc .and. yc .le. 1.0 ) goto 9000 - endif -c -c le point (xc,yc) n'est pas dans le carre unite -c cela peut etre du aux erreurs d'arrondi -c => choix par le minimum de la distance aux bords du carre - dist(i) = max( 0.0, -xc, xc-1.0, -yc, yc-1.0 ) -c - 10 continue -c - if( dist(1) .gt. dist(2) ) then -c f(xc,yc) pour la racine 2 est plus proche de x,y -c xc yc sont deja calcules - goto 9000 - endif -c - else if ( b .ne. 0 ) then - t(1) = - c / b - else - t(1) = 0 - endif -c -c les 2 coordonnees du point dans le carre unite - xc = ( x0 - v * t(1) ) / u - yc = ( w * t(1) - y0 ) / u -c - 9000 ierr = 0 - return - end - - - subroutine ptdatr( point, pxyd, nosotr, nsigne ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : le point est il dans le triangle de sommets nosotr -c ----- -c -c entrees: -c -------- -c point : les 2 coordonnees du point -c pxyd : les 2 coordonnees et distance souhaitee des points du maillage -c nosotr : le numero des 3 sommets du triangle -c -c sorties: -c -------- -c nsigne : >0 si le point est dans le triangle ou sur une des 3 aretes -c =0 si le triangle est degenere ou indirect ou ne contient pas le poin -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - integer nosotr(3) - double precision point(2), pxyd(3,*) - double precision xp,yp, x1,x2,x3, y1,y2,y3, d,dd, cb1,cb2,cb3 -c - xp = point( 1 ) - yp = point( 2 ) -c - n1 = nosotr( 1 ) - x1 = pxyd( 1 , n1 ) - y1 = pxyd( 2 , n1 ) -c - n2 = nosotr( 2 ) - x2 = pxyd( 1 , n2 ) - y2 = pxyd( 2 , n2 ) -c - n3 = nosotr( 3 ) - x3 = pxyd( 1 , n3 ) - y3 = pxyd( 2 , n3 ) -c -c 2 fois la surface du triangle = determinant de la matrice -c de calcul des coordonnees barycentriques du point p - d = ( x2 - x1 ) * ( y3 - y1 ) - ( x3 - x1 ) * ( y2 - y1 ) -c - if( d .gt. 0 ) then -c -c triangle non degenere -c ===================== -c calcul des 3 coordonnees barycentriques du -c point xp yp dans le triangle - cb1 = ( ( x2-xp ) * ( y3-yp ) - ( x3-xp ) * ( y2-yp ) ) / d - cb2 = ( ( x3-xp ) * ( y1-yp ) - ( x1-xp ) * ( y3-yp ) ) / d - cb3 = 1d0 - cb1 -cb2 -ccc cb3 = ( ( x1-xp ) * ( y2-yp ) - ( x2-xp ) * ( y1-yp ) ) / d -c -ccc if( cb1 .ge. -0.00005d0 .and. cb1 .le. 1.00005d0 .and. - if( cb1 .ge. 0d0 .and. cb1 .le. 1d0 .and. - % cb2 .ge. 0d0 .and. cb2 .le. 1d0 .and. - % cb3 .ge. 0d0 .and. cb3 .le. 1d0 ) then -c -c le triangle nosotr contient le point - nsigne = 1 - else - nsigne = 0 - endif -c - else -c -c triangle degenere -c ================= -c le point est il du meme cote que le sommet oppose de chaque arete? - nsigne = 0 - do 10 i=1,3 -c le sinus de l'angle p1 p2-p1 point - x1 = pxyd(1,n1) - y1 = pxyd(2,n1) - d = ( pxyd(1,n2) - x1 ) * ( point(2) - y1 ) - % - ( pxyd(2,n2) - y1 ) * ( point(1) - x1 ) - dd = ( pxyd(1,n2) - x1 ) * ( pxyd(2,n3) - y1 ) - % - ( pxyd(2,n2) - y1 ) * ( pxyd(1,n3) - x1 ) - cb1 = ( pxyd(1,n2) - x1 ) ** 2 - % + ( pxyd(2,n2) - y1 ) ** 2 - cb2 = ( point(1) - x1 ) ** 2 - % + ( point(2) - y1 ) ** 2 - cb3 = ( pxyd(1,n3) - x1 ) ** 2 - % + ( pxyd(2,n3) - y1 ) ** 2 - if( abs( dd ) .le. 1e-4 * sqrt( cb1 * cb3 ) ) then -c le point 3 est sur l'arete 1-2 -c le point doit y etre aussi - if( abs( d ) .le. 1e-4 * sqrt( cb1 * cb2 ) ) then -c point sur l'arete - nsigne = nsigne + 1 - endif - else -c le point 3 n'est pas sur l'arete . test des signes - if( d * dd .ge. 0 ) then - nsigne = nsigne + 1 - endif - endif -c permutation circulaire des 3 sommets et aretes - n = n1 - n1 = n2 - n2 = n3 - n3 = n - 10 continue - if( nsigne .ne. 3 ) nsigne = 0 - endif - end - - integer function nosstr( p, pxyd, nt, letree ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : calculer le numero 0 a 3 du sous-triangle te contenant -c ----- le point p -c -c entrees: -c -------- -c p : point de r**2 contenu dans le te nt de letree -c pxyd : x y distance des points -c nt : numero letree du te de te voisin a calculer -c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation -c letree(0,0) no du 1-er te vide dans letree -c letree(0,1) : maximum du 1-er indice de letree (ici 8) -c letree(0,2) : maximum declare du 2-eme indice de letree (ici mxtree) -c letree(0:8,1) : racine de l'arbre (triangle sans sur triangle) -c si letree(0,.)>0 alors -c letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j -c sinon -c letree(0:3,j) :-no pxyd des 1 …a 4 points internes au triangle j -c 0 si pas de point -c ( j est alors une feuille de l'arbre ) -c letree(4,j) : no letree du sur-triangle du triangle j -c letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle -c letree(6:8,j) : no pxyd des 3 sommets du triangle j -c -c sorties : -c --------- -c nosstr : 0 si le sous-triangle central contient p -c i =1,2,3 numero du sous-triangle contenant p -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc fevrier 1992 -c2345x7..............................................................012 - integer letree(0:8,0:*) - double precision pxyd(3,*), p(2), - % x1, y1, x21, y21, x31, y31, d, xe, ye -c -c le numero des 3 sommets du triangle - ns1 = letree( 6, nt ) - ns2 = letree( 7, nt ) - ns3 = letree( 8, nt ) -c -c les coordonnees entre 0 et 1 du point p - x1 = pxyd(1,ns1) - y1 = pxyd(2,ns1) -c - x21 = pxyd(1,ns2) - x1 - y21 = pxyd(2,ns2) - y1 -c - x31 = pxyd(1,ns3) - x1 - y31 = pxyd(2,ns3) - y1 -c - d = 1.0 / ( x21 * y31 - x31 * y21 ) -c - xe = ( ( p(1) - x1 ) * y31 - ( p(2) - y1 ) * x31 ) * d - ye = ( ( p(2) - y1 ) * x21 - ( p(1) - x1 ) * y21 ) * d -c - if( xe .gt. 0.5d0 ) then -c sous-triangle droit - nosstr = 2 - else if( ye .gt. 0.5d0 ) then -c sous-triangle haut - nosstr = 3 - else if( xe+ye .lt. 0.5d0 ) then -c sous-triangle gauche - nosstr = 1 - else -c sous-triangle central - nosstr = 0 - endif - end - - - integer function notrpt( p, pxyd, notrde, letree ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : calculer le numero letree du sous-triangle feuille contenant -c ----- le point p a partir du te notrde de letree -c -c entrees: -c -------- -c p : point de r**2 contenu dans le te nt de letree -c pxyd : x y distance des points -c notrde : numero letree du triangle depart de recherche (1=>racine) -c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation -c letree(0,0) no du 1-er te vide dans letree -c letree(0,1) : maximum du 1-er indice de letree (ici 8) -c letree(0,2) : maximum declare du 2-eme indice de letree (ici mxtree) -c letree(0:8,1) : racine de l'arbre (triangle sans sur triangle) -c si letree(0,.)>0 alors -c letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j -c sinon -c letree(0:3,j) :-no pxyd des 1 … 4 points internes au triangle j -c 0 si pas de point -c ( j est alors une feuille de l'arbre ) -c letree(4,j) : no letree du sur-triangle du triangle j -c letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle -c letree(6:8,j) : no pxyd des 3 sommets du triangle j -c -c sorties : -c --------- -c notrpt : numero letree du triangle contenant le point p -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc fevrier 1992 -c2345x7..............................................................012 - integer letree(0:8,0:*) - double precision pxyd(1:3,*), p(2) -c -c la racine depart de la recherche - notrpt = notrde -c -c tant que la feuille n'est pas atteinte descendre l'arbre - 10 if( letree(0,notrpt) .gt. 0 ) then -c -c recherche du sous-triangle contenant p - nsot = nosstr( p, pxyd, notrpt, letree ) -c -c le numero letree du sous-triangle - notrpt = letree( nsot, notrpt ) - goto 10 -c - endif - end - - - subroutine teajpt( ns, nbsomm, mxsomm, pxyd, letree, - & ntrp, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : ajout du point ns de pxyd dans letree -c ----- -c -c entrees: -c -------- -c ns : numero du point a ajouter dans letree -c mxsomm : nombre maximal de points declarables dans pxyd -c pxyd : tableau des coordonnees des points -c par point : x y distance_souhaitee -c -c modifies : -c ---------- -c nbsomm : nombre actuel de points dans pxyd -c -c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation -c letree(0,0) : no du 1-er te vide dans letree -c letree(0,1) : maximum du 1-er indice de letree (ici 8) -c letree(0,2) : maximum declare du 2-eme indice de letree (ici mxtree) -c letree(0:8,1) : racine de l'arbre (triangle sans sur triangle) -c si letree(0,.)>0 alors -c letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j -c sinon -c letree(0:3,j) :-no pxyd des 1 …a 4 points internes au triangle j -c 0 si pas de point -c ( j est alors une feuille de l'arbre ) -c letree(4,j) : no letree du sur-triangle du triangle j -c letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle -c letree(6:8,j) : no pxyd des 3 sommets du triangle j -c -c sorties : -c --------- -c ntrp : numero letree du triangle te ou a ete ajoute le point -c ierr : 0 si pas d'erreur, 51 saturation letree, 52 saturation pxyd -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc fevrier 1992 -c2345x7..............................................................012 - integer letree(0:8,0:*) - double precision pxyd(3,mxsomm) -c -c depart de la racine - ntrp = 1 -c -c recherche du triangle contenant le point pxyd(ns) - 1 ntrp = notrpt( pxyd(1,ns), pxyd, ntrp, letree ) -c -c existe t il un point libre - do 10 i=0,3 - if( letree(i,ntrp) .eq. 0 ) then -c la place i est libre - letree(i,ntrp) = -ns - return - endif - 10 continue -c -c pas de place libre => 4 sous-triangles sont crees -c a partir des 3 milieux des aretes - call te4ste( nbsomm, mxsomm, pxyd, ntrp, letree, ierr ) - if( ierr .ne. 0 ) return -c -c ajout du point ns - goto 1 - end - - subroutine n1trva( nt, lar, letree, notrva, lhpile ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : calculer le numero letree du triangle voisin du te nt -c ----- par l'arete lar (1 a 3 ) de nt -c attention : notrva n'est pas forcement minimal -c -c entrees: -c -------- -c nt : numero letree du te de te voisin a calculer -c lar : numero 1 a 3 de l'arete du triangle nt -c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation -c letree(0,0) no du 1-er te vide dans letree -c letree(0,1) : maximum du 1-er indice de letree (ici 8) -c letree(0,2) : maximum declare du 2-eme indice de letree (ici mxtree) -c letree(0:8,1) : racine de l'arbre (triangle sans sur-triangle) -c si letree(0,.)>0 alors -c letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j -c sinon -c letree(0:3,j) :-no pxyd des 1 a 4 points internes au triangle j -c 0 si pas de point -c ( j est alors une feuille de l'arbre ) -c letree(4,j) : no letree du sur-triangle du triangle j -c letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle -c letree(6:8,j) : no pxyd des 3 sommets du triangle j -c -c sorties : -c --------- -c notrva : >0 numero letree du te voisin par l'arete lar -c =0 si pas de te voisin (racine , ... ) -c lhpile : =0 si nt et notrva ont meme taille -c >0 nt est 4**lhpile fois plus petit que notrva -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc fevrier 1992 -c2345x7..............................................................012 - integer letree(0:8,0:*) - integer lapile(1:64) -c -c initialisation de la pile -c le triangle est empile - lapile(1) = nt - lhpile = 1 -c -c tant qu'il existe un sur-triangle - 10 ntr = lapile( lhpile ) - if( ntr .eq. 1 ) then -c racine atteinte => pas de triangle voisin - notrva = 0 - lhpile = lhpile - 1 - return - endif -c -c le type du triangle ntr - nty = letree( 5, ntr ) -c l'eventuel sur-triangle - nsut = letree( 4, ntr ) -c - if( nty .eq. 0 ) then -c -c triangle de type 0 => triangle voisin de type precedent(lar) -c dans le sur-triangle de ntr -c ce triangle remplace ntr dans lapile - lapile( lhpile ) = letree( nopre3(lar), nsut ) - goto 20 - endif -c -c triangle ntr de type nty>0 - if( nosui3(nty) .eq. lar ) then -c -c le triangle voisin par lar est le triangle 0 - lapile( lhpile ) = letree( 0, nsut ) - goto 20 - endif -c -c triangle sans voisin direct => passage par le sur-triangle - if( nsut .eq. 0 ) then -c -c ntr est la racine => pas de triangle voisin par cette arete - notrva = 0 - return - else -c -c le sur-triangle est empile - lhpile = lhpile + 1 - lapile(lhpile) = nsut - goto 10 - endif -c -c descente aux sous-triangles selon la meme arete - 20 notrva = lapile( lhpile ) -c - 30 lhpile = lhpile - 1 - if( letree(0,notrva) .le. 0 ) then -c le triangle est une feuille de l'arbre 0 sous-triangle -c lhpile = nombre de differences de niveaux dans l'arbre - return - else -c le triangle a 4 sous-triangles - if( lhpile .gt. 0 ) then -c -c bas de pile non atteint - nty = letree( 5, lapile(lhpile) ) - if( nty .eq. lar ) then -c l'oppose est suivant(nty) de notrva - notrva = letree( nosui3(nty) , notrva ) - else -c l'oppose est precedent(nty) de notrva - notrva = letree( nopre3(nty) , notrva ) - endif - goto 30 - endif - endif -c -c meme niveau dans l'arbre lhpile = 0 - end - - - subroutine cenced( xy1, xy2, xy3, cetria, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : calcul des coordonnees du centre du cercle circonscrit -c ----- du triangle defini par ses 3 sommets de coordonnees -c xy1 xy2 xy3 ainsi que le carre du rayon de ce cercle -c -c entrees : -c --------- -c xy1 xy2 xy3 : les 2 coordonnees des 3 sommets du triangle -c ierr : <0 => pas d'affichage si triangle degenere -c >=0 => affichage si triangle degenere -c -c sortie : -c -------- -c cetria : cetria(1)=abcisse du centre -c cetria(2)=ordonnee du centre -c cetria(3)=carre du rayon 1d28 si triangle degenere -c ierr : 0 si triangle non degenere -c 1 si triangle degenere -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : perronnet alain upmc analyse numerique paris juin 1995 -c2345x7..............................................................012 - parameter (epsurf=1d-7) - common / unites / lecteu,imprim,nunite(30) - double precision x1,y1,x21,y21,x31,y31, - % aire2,xc,yc,rot, - % xy1(2),xy2(2),xy3(2),cetria(3) -c -c le calcul de 2 fois l'aire du triangle -c attention l'ordre des 3 sommets est direct ou non - x1 = xy1(1) - x21 = xy2(1) - x1 - x31 = xy3(1) - x1 -c - y1 = xy1(2) - y21 = xy2(2) - y1 - y31 = xy3(2) - y1 -c - aire2 = x21 * y31 - x31 * y21 -c -c recherche d'un test relatif peu couteux -c pour reperer la degenerescence du triangle - if( abs(aire2) .le. - % epsurf*(abs(x21)+abs(x31))*(abs(y21)+abs(y31)) ) then -c triangle de qualite trop faible - if( ierr .ge. 0 ) then -c nblgrc(nrerr) = 1 -c kerr(1) = 'erreur cenced: triangle degenere' -c call lereur - write(imprim,*) 'erreur cenced: triangle degenere' - write(imprim,10000) xy1,xy2,xy3,aire2 - endif -10000 format( 3(' x=',g24.16,' y=',g24.16/),' aire*2=',g24.16) - cetria(1) = 0d0 - cetria(2) = 0d0 - cetria(3) = 1d28 - ierr = 1 - return - endif -c -c les 2 coordonnees du centre intersection des 2 mediatrices -c x = (x1+x2)/2 + lambda * (y2-y1) -c y = (y1+y2)/2 - lambda * (x2-x1) -c x = (x1+x3)/2 + rot * (y3-y1) -c y = (y1+y3)/2 - rot * (x3-x1) -c ========================================================== - rot = ((xy2(1)-xy3(1))*x21 + (xy2(2)-xy3(2))*y21) / (2 * aire2) -c - xc = ( x1 + xy3(1) ) * 0.5d0 + rot * y31 - yc = ( y1 + xy3(2) ) * 0.5d0 - rot * x31 -c - cetria(1) = xc - cetria(2) = yc -c -c le carre du rayon - cetria(3) = (x1-xc) ** 2 + (y1-yc) ** 2 -c -c pas d'erreur rencontree - ierr = 0 - end - - - double precision function angled( p1, p2, p3 ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : calculer l'angle (p1p2,p1p3) en radians -c ----- -c -c entrees : -c --------- -c p1,p2,p3 : les 2 coordonnees des 3 sommets de l'angle -c sens direct pour une surface >0 -c sorties : -c --------- -c angled : angle (p1p2,p1p3) en radians entre [0 et 2pi] -c 0 si p1=p2 ou p1=p3 -c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique upmc paris fevrier 1992 -c2345x7..............................................................012 - double precision p1(2),p2(2),p3(2),x21,y21,x31,y31,a1,a2,d,c -c -c les cotes - x21 = p2(1) - p1(1) - y21 = p2(2) - p1(2) - x31 = p3(1) - p1(1) - y31 = p3(2) - p1(2) -c -c longueur des cotes - a1 = x21 * x21 + y21 * y21 - a2 = x31 * x31 + y31 * y31 - d = sqrt( a1 * a2 ) - if( d .eq. 0 ) then - angled = 0 - return - endif -c -c cosinus de l'angle - c = ( x21 * x31 + y21 * y31 ) / d - if( c .le. -1.d0 ) then -c tilt sur apollo si acos( -1 -eps ) - angled = atan( 1.d0 ) * 4.d0 - return - else if( c .ge. 1.d0 ) then -c tilt sur apollo si acos( 1 + eps ) - angled = 0 - return - endif -c - angled = acos( c ) - if( x21 * y31 - x31 * y21 .lt. 0 ) then -c demi plan inferieur - angled = 8.d0 * atan( 1.d0 ) - angled - endif - end - - - subroutine teajte( mxsomm, nbsomm, pxyd, comxmi, - % aretmx, mxtree, letree, - % ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : initialisation des tableaux letree -c ----- ajout des sommets 1 a nbsomm (valeur en entree) dans letree -c -c entrees: -c -------- -c mxsomm : nombre maximal de sommets permis pour la triangulation -c mxtree : nombre maximal de triangles equilateraux (te) declarables -c aretmx : longueur maximale des aretes des triangles equilateraux -c -c entrees et sorties : -c -------------------- -c nbsomm : nombre de sommets apres identification -c pxyd : tableau des coordonnees 2d des points -c par point : x y distance_souhaitee -c tableau reel(3,mxsomm) -c -c sorties: -c -------- -c comxmi : coordonnees minimales et maximales des points frontaliers -c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation -c letree(0,0) : no du 1-er te vide dans letree -c letree(0,1) : maximum du 1-er indice de letree (ici 8) -c letree(0,2) : maximum declare du 2-eme indice de letree (ici mxtree) -c letree(0:8,1) : racine de l'arbre (triangle sans sur triangle) -c si letree(0,.)>0 alors -c letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j -c sinon -c letree(0:3,j) :-no pxyd des 1 a 4 points internes au triangle j -c 0 si pas de point -c ( j est alors une feuille de l'arbre ) -c letree(4,j) : no letree du sur-triangle du triangle j -c letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle -c letree(6:8,j) : no pxyd des 3 sommets du triangle j -c -c ierr : 0 si pas d'erreur -c 51 saturation letree -c 52 saturation pxyd -c 7 tous les points sont alignes -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc juillet 1994 -c....................................................................012 - integer letree(0:8,0:mxtree) - double precision pxyd(3,mxsomm) - double precision comxmi(3,2) - double precision a(2),s,aretmx,rac3 -c -c protection du nombre de sommets avant d'ajouter ceux de tetree - nbsofr = nbsomm - do 1 i = 1, nbsomm - comxmi(1,1) = min( comxmi(1,1), pxyd(1,i) ) - comxmi(1,2) = max( comxmi(1,2), pxyd(1,i) ) - comxmi(2,1) = min( comxmi(2,1), pxyd(2,i) ) - comxmi(2,2) = max( comxmi(2,2), pxyd(2,i) ) - 1 continue -c -c creation de l'arbre tee -c ======================= -c la premiere colonne vide de letree - letree(0,0) = 2 -c chainage des te vides - do 4 i = 2 , mxtree - letree(0,i) = i+1 - 4 continue - letree(0,mxtree) = 0 -c les maxima des 2 indices de letree - letree(1,0) = 8 - letree(2,0) = mxtree -c -c la racine -c aucun point interne au triangle equilateral (te) 1 - letree(0,1) = 0 - letree(1,1) = 0 - letree(2,1) = 0 - letree(3,1) = 0 -c pas de sur-triangle - letree(4,1) = 0 - letree(5,1) = 0 -c le numero pxyd des 3 sommets du te 1 - letree(6,1) = nbsomm + 1 - letree(7,1) = nbsomm + 2 - letree(8,1) = nbsomm + 3 -c -c calcul de la largeur et hauteur du rectangle englobant -c ====================================================== - a(1) = comxmi(1,2) - comxmi(1,1) - a(2) = comxmi(2,2) - comxmi(2,1) -c la longueur de la diagonale - s = sqrt( a(1)**2 + a(2)**2 ) - do 60 k=1,2 - if( a(k) .lt. 1e-4 * s ) then -c nblgrc(nrerr) = 1 - write(imprim,*) 'tous les points sont alignes' -c call lereur - ierr = 7 - return - endif - 60 continue -c -c le maximum des ecarts - s = s + s -c -c le triangle equilateral englobant -c ================================= -c ecart du rectangle au triangle equilateral - rac3 = sqrt( 3.0d0 ) - arete = a(1) + 2 * aretmx + 2 * ( a(2) + aretmx ) / rac3 -c -c le point nbsomm + 1 en bas a gauche - nbsomm = nbsomm + 1 - pxyd(1,nbsomm) = (comxmi(1,1)+comxmi(1,2))*0.5d0 - arete*0.5d0 - pxyd(2,nbsomm) = comxmi(2,1) - aretmx - pxyd(3,nbsomm) = s -c -c le point nbsomm + 2 en bas a droite - nbsomm = nbsomm + 1 - pxyd(1,nbsomm) = pxyd(1,nbsomm-1) + arete - pxyd(2,nbsomm) = pxyd(2,nbsomm-1) - pxyd(3,nbsomm) = s -c -c le point nbsomm + 3 sommet au dessus - nbsomm = nbsomm + 1 - pxyd(1,nbsomm) = pxyd(1,nbsomm-2) + arete * 0.5d0 - pxyd(2,nbsomm) = pxyd(2,nbsomm-2) + arete * 0.5d0 * rac3 - pxyd(3,nbsomm) = s -c -c ajout des sommets des lignes pour former letree -c =============================================== - do 150 i=1,nbsofr -c ajout du point i de pxyd a letree - call teajpt( i, nbsomm, mxsomm, pxyd, letree, - & nt, ierr ) - if( ierr .ne. 0 ) return - 150 continue -c - return - end - - - subroutine tetaid( nutysu, dx, dy, longai, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : calculer la longueur de l'arete ideale en dx,dy -c ----- -c -c entrees: -c -------- -c nutysu : numero de traitement de areteideale() selon le type de surface -c 0 pas d'emploi de la fonction areteideale() => aretmx active -c 1 il existe une fonction areteideale(xyz,xyzdir) -c ... autres options a definir ... -c dx, dy : abscisse et ordonnee dans le plan du point (reel2!) -c -c sorties: -c -------- -c longai : longueur de l'areteideale(xyz,xyzdir) autour du point xyz -c ierr : 0 si pas d'erreur, <>0 sinon -c 1 calcul incorrect de areteideale(xyz,xyzdir) -c 2 longueur calculee nulle -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c2345x7..............................................................012 - common / unites / lecteu, imprim, nunite(30) -c - double precision areteideale - double precision dx, dy, longai - double precision xyz(3), xyzd(3), d0 -c - ierr = 0 - if( nutysu .gt. 0 ) then - d0 = longai -c le point ou se calcule la longueur - xyz(1) = dx - xyz(2) = dy -c z pour le calcul de la longueur (inactif ici!) - xyz(3) = 0d0 -c la direction pour le calcul de la longueur (inactif ici!) - xyzd(1) = 0d0 - xyzd(2) = 0d0 - xyzd(3) = 0d0 - - longai = areteideale(xyz,xyzd) - if( longai .lt. 0d0 ) then - write(imprim,10000) xyz -10000 format('attention: longueur de areteideale(', - % g14.6,',',g14.6,',',g14.6,')<=0! => rendue >0' ) - longai = -longai - endif - if( longai .eq. 0d0 ) then - write(imprim,10001) xyz -10001 format('erreur: longueur de areteideale(', - % g14.6,',',g14.6,',',g14.6,')=0!' ) - ierr = 2 - longai = d0 - endif - endif - end - - - subroutine tehote( nutysu, - % nbarpi, mxsomm, nbsomm, pxyd, - % comxmi, aretmx, - % letree, mxqueu, laqueu, - % ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : homogeneisation de l'arbre des te a un saut de taille au plus -c ----- prise en compte des distances souhaitees autour des sommets initiaux -c -c entrees: -c -------- -c nutysu : numero de traitement de areteideale() selon le type de surface -c 0 pas d'emploi de la fonction areteideale() => aretmx active -c 1 il existe une fonction areteideale() -c dont seules les 2 premieres composantes de uv sont actives -c autres options a definir... -c nbarpi : nombre de sommets de la frontiere + nombre de points internes -c imposes par l'utilisateur -c mxsomm : nombre maximal de sommets permis pour la triangulation et te -c mxqueu : nombre d'entiers utilisables dans laqueu -c comxmi : minimum et maximum des coordonnees de l'objet -c aretmx : longueur maximale des aretes des triangles equilateraux -c permtr : perimetre de la ligne enveloppe dans le plan -c avant mise a l'echelle a 2**20 -c -c modifies : -c ---------- -c nbsomm : nombre de sommets apres identification -c pxyd : tableau des coordonnees 2d des points -c par point : x y distance_souhaitee -c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation -c letree(0,0) : no du 1-er te vide dans letree -c letree(1,0) : maximum du 1-er indice de letree (ici 8) -c letree(2,0) : maximum declare du 2-eme indice de letree (ici mxtree) -c letree(0:8,1) : racine de l'arbre (triangle sans sur triangle) -c si letree(0,.)>0 alors -c letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j -c sinon -c letree(0:3,j) :-no pxyd des 1 a 4 points internes au triangle j -c 0 si pas de point -c ( j est alors une feuille de l'arbre ) -c letree(4,j) : no letree du sur-triangle du triangle j -c letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle -c letree(6:8,j) : no pxyd des 3 sommets du triangle j -c -c auxiliaire : -c ------------ -c laqueu : mxqueu entiers servant de queue pour le parcours de letree -c -c sorties: -c -------- -c ierr : 0 si pas d'erreur -c 51 si saturation letree dans te4ste -c 52 si saturation pxyd dans te4ste -c >0 si autre erreur -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc avril 1997 -c2345x7..............................................................012 - double precision ampli - parameter (ampli=1.34d0) - common / unites / lecteu, imprim, intera, nunite(29) -c - double precision pxyd(3,mxsomm), d2, aretm2 - double precision comxmi(3,2),aretmx,a,s,xrmin,xrmax,yrmin,yrmax - double precision dmin, dmax - integer letree(0:8,0:*) -c - integer laqueu(1:mxqueu),lequeu -c lequeu : entree dans la queue -c lhqueu : longueur de la queue -c gestion circulaire -c - integer nuste(3) - equivalence (nuste(1),ns1),(nuste(2),ns2),(nuste(3),ns3) -c -c existence ou non de la fonction 'taille_ideale' des aretes -c autour du point. ici la carte est supposee isotrope -c ========================================================== -c attention: si la fonction taille_ideale existe -c alors pxyd(3,*) est la taille_ideale dans l'espace initial -c sinon pxyd(3,*) est la distance calculee dans le plan par -c propagation a partir des tailles des aretes de la frontiere -c - if( nutysu .gt. 0 ) then -c -c la fonction taille_ideale(x,y,z) existe -c --------------------------------------- -c initialisation de la distance souhaitee autour des points 1 a nbsomm - do 1 i=1,nbsomm -c calcul de pxyzd(3,i) - call tetaid( nutysu, pxyd(1,i), pxyd(2,i), - % pxyd(3,i), ierr ) - if( ierr .ne. 0 ) goto 9999 - 1 continue -c - else -c -c la fonction taille_ideale(x,y,z) n'existe pas -c --------------------------------------------- -c prise en compte des distances souhaitees dans le plan -c autour des points frontaliers et des points internes imposes -c toutes les autres distances souhaitees ont ete mis a aretmx -c lors de l'execution du sp teqini - do 3 i=1,nbarpi -c le sommet i n'est pas un sommet de letree => sommet frontalier -c recherche du sous-triangle minimal feuille contenant le point i - nte = 1 - 2 nte = notrpt( pxyd(1,i), pxyd, nte, letree ) -c la distance au sommet le plus eloigne est elle inferieure -c a la distance souhaitee? - ns1 = letree(6,nte) - ns2 = letree(7,nte) - ns3 = letree(8,nte) - d2 = max( ( pxyd(1,i)-pxyd(1,ns1) )**2 + - % ( pxyd(2,i)-pxyd(2,ns1) )**2 - % , ( pxyd(1,i)-pxyd(1,ns2) )**2 + - % ( pxyd(2,i)-pxyd(2,ns2) )**2 - % , ( pxyd(1,i)-pxyd(1,ns3) )**2 + - % ( pxyd(2,i)-pxyd(2,ns3) )**2 ) - if( d2 .gt. pxyd(3,i)**2 ) then -c le triangle nte trop grand doit etre subdivise en 4 sous-triangle - call te4ste( nbsomm, mxsomm, pxyd, nte, letree, - & ierr ) - if( ierr .ne. 0 ) return - goto 2 - endif - 3 continue - endif -c -c le sous-triangle central de la racine est decoupe systematiquement -c ================================================================== - nte = 2 - if( letree(0,2) .le. 0 ) then -c le sous-triangle central de la racine n'est pas subdivise -c il est donc decoupe en 4 soustriangles - nbsom0 = nbsomm - call te4ste( nbsomm, mxsomm, pxyd, nte, letree, - % ierr ) - if( ierr .ne. 0 ) return - do 4 i=nbsom0+1,nbsomm -c mise a jour de taille_ideale des nouveaux sommets de te - call tetaid( nutysu, pxyd(1,i), pxyd(2,i), pxyd(3,i), ierr ) - if( ierr .ne. 0 ) goto 9999 - 4 continue - endif -c -c le carre de la longueur de l'arete de triangles equilateraux -c souhaitee pour le fond de la triangulation - aretm2 = (aretmx*ampli) ** 2 -c -c tout te contenu dans le rectangle englobant doit avoir un -c cote < aretmx et etre de meme taille que les te voisins -c s'il contient un point; sinon un seul saut de taille est permis -c =============================================================== -c le rectangle englobant pour selectionner les te "internes" -c le numero des 3 sommets du te englobant racine de l'arbre des te - ns1 = letree(6,1) - ns2 = letree(7,1) - ns3 = letree(8,1) - a = aretmx * 0.01d0 -c abscisse du milieu de l'arete gauche du te 1 - s = ( pxyd(1,ns1) + pxyd(1,ns3) ) / 2 - xrmin = min( s, comxmi(1,1) - aretmx ) - a -c abscisse du milieu de l'arete droite du te 1 - s = ( pxyd(1,ns2) + pxyd(1,ns3) ) / 2 - xrmax = max( s, comxmi(1,2) + aretmx ) + a - yrmin = comxmi(2,1) - aretmx -c ordonnee de la droite passant par les milieus des 2 aretes -c droite gauche du te 1 - s = ( pxyd(2,ns1) + pxyd(2,ns3) ) / 2 - yrmax = max( s, comxmi(2,2) + aretmx ) + a -c -c cas particulier de 3 ou 4 ou peu d'aretes frontalieres - if( nbarpi .le. 8 ) then -c tout le triangle englobant (racine) est a prendre en compte - xrmin = pxyd(1,ns1) - a - xrmax = pxyd(1,ns2) + a - yrmin = pxyd(2,ns1) - a - yrmax = pxyd(2,ns3) + a - endif -c - nbs0 = nbsomm - nbiter = -1 -c -c initialisation de la queue - 5 nbiter = nbiter + 1 - lequeu = 1 - lhqueu = 0 -c la racine de letree initialise la queue - laqueu(1) = 1 -c -c tant que la longueur de la queue est >=0 traiter le debut de queue - 10 if( lhqueu .ge. 0 ) then -c -c le triangle te a traiter - i = lequeu - lhqueu - if( i .le. 0 ) i = mxqueu + i - nte = laqueu( i ) -c la longueur de la queue est reduite - lhqueu = lhqueu - 1 -c -c nte est il un sous-triangle feuille minimal ? - 15 if( letree(0,nte) .gt. 0 ) then -c -c non les 4 sous-triangles sont mis dans la queue - if( lhqueu + 4 .ge. mxqueu ) then - write(imprim,*) 'tehote: saturation de la queue' - ierr = 7 - return - endif - do 20 i=3,0,-1 -c ajout du sous-triangle i - lhqueu = lhqueu + 1 - lequeu = lequeu + 1 - if( lequeu .gt. mxqueu ) lequeu = lequeu - mxqueu - laqueu( lequeu ) = letree( i, nte ) - 20 continue - goto 10 -c - endif -c -c ici nte est un triangle minimal non subdivise -c --------------------------------------------- -c le te est il dans le cadre englobant de l'objet ? - ns1 = letree(6,nte) - ns2 = letree(7,nte) - ns3 = letree(8,nte) - if( pxyd(1,ns1) .gt. pxyd(1,ns2) ) then - dmin = pxyd(1,ns2) - dmax = pxyd(1,ns1) - else - dmin = pxyd(1,ns1) - dmax = pxyd(1,ns2) - endif - if( (xrmin .le. dmin .and. dmin .le. xrmax) .or. - % (xrmin .le. dmax .and. dmax .le. xrmax) ) then - if( pxyd(2,ns1) .gt. pxyd(2,ns3) ) then - dmin = pxyd(2,ns3) - dmax = pxyd(2,ns1) - else - dmin = pxyd(2,ns1) - dmax = pxyd(2,ns3) - endif - if( (yrmin .le. dmin .and. dmin .le. yrmax) .or. - % (yrmin .le. dmax .and. dmax .le. yrmax) ) then -c -c nte est un te feuille et interne au rectangle englobant -c ======================================================= -c le carre de la longueur de l'arete du te de numero nte - d2 = (pxyd(1,ns1)-pxyd(1,ns2)) ** 2 + - % (pxyd(2,ns1)-pxyd(2,ns2)) ** 2 -c - if( nutysu .eq. 0 ) then -c -c il n'existe pas de fonction 'taille_ideale' -c ------------------------------------------- -c si la taille effective de l'arete du te est superieure a aretmx -c alors le te est decoupe - if( d2 .gt. aretm2 ) then -c le triangle nte trop grand doit etre subdivise -c en 4 sous-triangles - call te4ste( nbsomm,mxsomm, pxyd, - % nte, letree, ierr ) - if( ierr .ne. 0 ) return - goto 15 - endif -c - else -c -c il existe ici une fonction 'taille_ideale' -c ------------------------------------------ -c si la taille effective de l'arete du te est superieure au mini -c des 3 tailles_ideales aux sommets alors le te est decoupe - do 28 i=1,3 - if( d2 .gt. (pxyd(3,nuste(i))*ampli)**2 ) then -c le triangle nte trop grand doit etre subdivise -c en 4 sous-triangles - nbsom0 = nbsomm - call te4ste( nbsomm, mxsomm, pxyd, - & nte, letree, ierr ) - if( ierr .ne. 0 ) return - do 27 j=nbsom0+1,nbsomm -c mise a jour de taille_ideale des nouveaux sommets de - call tetaid( nutysu, pxyd(1,j), pxyd(2,j), - % pxyd(3,j), ierr ) - if( ierr .ne. 0 ) goto 9999 - 27 continue - goto 15 - endif - 28 continue - endif -c -c recherche du nombre de niveaux entre nte et les te voisins par se -c si la difference de subdivisions excede 1 alors le plus grand des -c ================================================================= - 29 do 30 i=1,3 -c -c noteva triangle voisin de nte par l'arete i - call n1trva( nte, i, letree, noteva, niveau ) - if( noteva .le. 0 ) goto 30 -c il existe un te voisin - if( niveau .gt. 0 ) goto 30 -c nte a un te voisin plus petit ou egal - if( letree(0,noteva) .le. 0 ) goto 30 -c nte a un te voisin noteva subdivise au moins une fois -c - if( nbiter .gt. 0 ) then -c les 2 sous triangles voisins sont-ils subdivises? - ns2 = letree(i,noteva) - if( letree(0,ns2) .le. 0 ) then -c ns2 n'est pas subdivise - ns2 = letree(nosui3(i),noteva) - if( letree(0,ns2) .le. 0 ) then -c les 2 sous-triangles ne sont pas subdivises - goto 30 - endif - endif - endif -c -c saut>1 => le triangle nte doit etre subdivise en 4 sous-triang -c -------------------------------------------------------------- - nbsom0 = nbsomm - call te4ste( nbsomm,mxsomm, pxyd, nte, letree, - & ierr ) - if( ierr .ne. 0 ) return - if( nutysu .gt. 0 ) then - do 32 j=nbsom0+1,nbsomm -c mise a jour de taille_ideale des nouveaux sommets de te - call tetaid( nutysu, pxyd(1,j), pxyd(2,j), - % pxyd(3,j), ierr ) - if( ierr .ne. 0 ) goto 9999 - 32 continue - endif - goto 15 -c - 30 continue - endif - endif - goto 10 - endif - if( nbs0 .lt. nbsomm ) then - nbs0 = nbsomm - goto 5 - endif - return -c -c pb dans le calcul de la fonction taille_ideale - - 9999 write(imprim,*) 'pb dans le calcul de taille_ideale' -c nblgrc(nrerr) = 1 -c kerr(1) = 'pb dans le calcul de taille_ideale' -c call lereur - return - end - - - subroutine tetrte( comxmi, aretmx, nbarpi, mxsomm, pxyd, - % mxqueu, laqueu, letree, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, noarst, - % ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : trianguler les triangles equilateraux feuilles et -c ----- les points de la frontiere et les points internes imposes -c -c attention: la triangulation finale n'est pas de type delaunay! -c -c entrees: -c -------- -c comxmi : minimum et maximum des coordonnees de l'objet -c aretmx : longueur maximale des aretes des triangles equilateraux -c nbarpi : nombre de sommets de la frontiere + nombre de points internes -c imposes par l'utilisateur -c mxsomm : nombre maximal de sommets declarables dans pxyd -c pxyd : tableau des coordonnees 2d des points -c par point : x y distance_souhaitee -c -c mxqueu : nombre d'entiers utilisables dans laqueu -c mosoar : nombre maximal d'entiers par arete du tableau nosoar -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxartr : nombre maximal de triangles stockables dans le tableau noartr -c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation -c letree(0,0) : no du 1-er te vide dans letree -c letree(0,1) : maximum du 1-er indice de letree (ici 8) -c letree(0,2) : maximum declare du 2-eme indice de letree (ici mxtree) -c letree(0:8,1) : racine de l'arbre (triangle sans sur triangle) -c si letree(0,.)>0 alors -c letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j -c sinon -c letree(0:3,j) :-no pxyd des 1 a 4 points internes au triangle j -c 0 si pas de point -c ( j est alors une feuille de l'arbre ) -c letree(4,j) : no letree du sur-triangle du triangle j -c letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle -c letree(6:8,j) : no pxyd des 3 sommets du triangle j -c -c modifies: -c --------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = nosoar(1)+nosoar(2)*2 -c noarst : noarst(i) numero d'une arete de sommet i -c -c auxiliaire : -c ------------ -c laqueu : mxqueu entiers servant de queue pour le parcours de letree -c -c sorties: -c -------- -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c ierr : =0 si pas d'erreur -c =1 si le tableau nosoar est sature -c =2 si le tableau noartr est sature -c =3 si aucun des triangles ne contient l'un des points internes d'un t -c =5 si saturation de la queue de parcours de l'arbre des te -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c2345x7..............................................................012 - common / unites / lecteu, imprim, intera, nunite(29) -c - double precision pxyd(3,mxsomm) - double precision comxmi(3,2),aretmx,a,s,xrmin,xrmax,yrmin,yrmax - double precision dmin, dmax -c - integer nosoar(mosoar,mxsoar), - % noartr(moartr,mxartr), - % noarst(mxsomm) -c - integer letree(0:8,0:*) - integer laqueu(1:mxqueu) -c lequeu:entree dans la queue en gestion circulaire -c lhqueu:longueur de la queue en gestion circulaire -c - integer milieu(3), nutr(1:13) -c -c le rectangle englobant pour selectionner les te "internes" -c le numero des 3 sommets du te englobant racine de l'arbre des te - ns1 = letree(6,1) - ns2 = letree(7,1) - ns3 = letree(8,1) - a = aretmx * 0.01d0 -c abscisse du milieu de l'arete gauche du te 1 - s = ( pxyd(1,ns1) + pxyd(1,ns3) ) / 2 - xrmin = min( s, comxmi(1,1) - aretmx ) - a -c abscisse du milieu de l'arete droite du te 1 - s = ( pxyd(1,ns2) + pxyd(1,ns3) ) / 2 - xrmax = max( s, comxmi(1,2) + aretmx ) + a - yrmin = comxmi(2,1) - aretmx -c ordonnee de la droite passant par les milieus des 2 aretes -c droite gauche du te 1 - s = ( pxyd(2,ns1) + pxyd(2,ns3) ) / 2 - yrmax = max( s, comxmi(2,2) + aretmx ) + a -c -c cas particulier de 3 ou 4 ou peu d'aretes frontalieres - if( nbarpi .le. 8 ) then -c tout le triangle englobant (racine) est a prendre en compte - xrmin = pxyd(1,ns1) - a - xrmax = pxyd(1,ns2) + a - yrmin = pxyd(2,ns1) - a - yrmax = pxyd(2,ns3) + a - endif -c -c initialisation du tableau noartr - do 5 i=1,mxartr -c le numero de l'arete est inconnu - noartr(1,i) = 0 -c le chainage sur le triangle vide suivant - noartr(2,i) = i+1 - 5 continue - noartr(2,mxartr) = 0 - n1artr = 1 -c -c parcours des te jusqu'a trianguler toutes les feuilles (triangles eq) -c ===================================================================== -c initialisation de la queue sur les te - ierr = 0 - lequeu = 1 - lhqueu = 0 -c la racine de letree initialise la queue - laqueu(1) = 1 -c -c tant que la longueur de la queue est >=0 traiter le debut de queue - 10 if( lhqueu .ge. 0 ) then -c -c le triangle te a traiter - i = lequeu - lhqueu - if( i .le. 0 ) i = mxqueu + i - nte = laqueu( i ) -c la longueur est reduite - lhqueu = lhqueu - 1 -c -c nte est il un sous-triangle feuille (minimal) ? - 15 if( letree(0,nte) .gt. 0 ) then -c non les 4 sous-triangles sont mis dans la queue - if( lhqueu + 4 .ge. mxqueu ) then - write(imprim,*) 'tetrte: saturation de la queue' - ierr = 5 - return - endif - do 20 i=3,0,-1 -c ajout du sous-triangle i - lhqueu = lhqueu + 1 - lequeu = lequeu + 1 - if( lequeu .gt. mxqueu ) lequeu = lequeu - mxqueu - laqueu( lequeu ) = letree( i, nte ) - 20 continue - goto 10 - endif -c -c ici nte est un triangle minimal non subdivise -c --------------------------------------------- -c le te est il dans le cadre englobant de l'objet ? - ns1 = letree(6,nte) - ns2 = letree(7,nte) - ns3 = letree(8,nte) - if( pxyd(1,ns1) .gt. pxyd(1,ns2) ) then - dmin = pxyd(1,ns2) - dmax = pxyd(1,ns1) - else - dmin = pxyd(1,ns1) - dmax = pxyd(1,ns2) - endif - if( (xrmin .le. dmin .and. dmin .le. xrmax) .or. - % (xrmin .le. dmax .and. dmax .le. xrmax) ) then - if( pxyd(2,ns1) .gt. pxyd(2,ns3) ) then - dmin = pxyd(2,ns3) - dmax = pxyd(2,ns1) - else - dmin = pxyd(2,ns1) - dmax = pxyd(2,ns3) - endif - if( (yrmin .le. dmin .and. dmin .le. yrmax) .or. - % (yrmin .le. dmax .and. dmax .le. yrmax) ) then -c -c te minimal et interne au rectangle englobant -c -------------------------------------------- -c recherche du nombre de niveaux entre nte et les te voisins -c par ses aretes - nbmili = 0 - do 30 i=1,3 -c -c a priori pas de milieu de l'arete i du te nte - milieu(i) = 0 -c -c recherche de noteva te voisin de nte par l'arete i - call n1trva( nte, i, letree, noteva, niveau ) -c noteva : >0 numero letree du te voisin par l'arete i -c =0 si pas de te voisin (racine , ... ) -c niveau : =0 si nte et noteva ont meme taille -c >0 nte est 4**niveau fois plus petit que noteva - if( noteva .gt. 0 ) then -c il existe un te voisin - if( letree(0,noteva) .gt. 0 ) then -c noteva est plus petit que nte -c => recherche du numero du milieu du cote=sommet du te no -c le sous-te 0 du te noteva - nsot = letree(0,noteva) -c le numero dans pxyd du milieu de l'arete i de nte - milieu( i ) = letree( 5+nopre3(i), nsot ) - nbmili = nbmili + 1 - endif - endif -c - 30 continue -c -c triangulation du te nte en fonction du nombre de ses milieux - goto( 50, 100, 200, 300 ) , nbmili + 1 -c -c 0 milieu => 1 triangle = le te nte -c ---------------------------------- - 50 call f0trte( letree(0,nte), pxyd, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % noarst, - % nbtr, nutr, ierr ) - if( ierr .ne. 0 ) return - goto 10 -c -c 1 milieu => 2 triangles = 2 demi te -c ----------------------------------- - 100 call f1trte( letree(0,nte), pxyd, milieu, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % noarst, - % nbtr, nutr, ierr ) - if( ierr .ne. 0 ) return - goto 10 -c -c 2 milieux => 3 triangles -c ----------------------------------- - 200 call f2trte( letree(0,nte), pxyd, milieu, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % noarst, - % nbtr, nutr, ierr ) - if( ierr .ne. 0 ) return - goto 10 -c -c 3 milieux => 4 triangles = 4 quart te -c ------------------------------------- - 300 call f3trte( letree(0,nte), pxyd, milieu, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % noarst, - % nbtr, nutr, ierr ) - if( ierr .ne. 0 ) return - goto 10 - endif - endif - goto 10 - endif - end - - - subroutine aisoar( mosoar, mxsoar, nosoar, na1 ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : chainer en colonne lchain les aretes non vides et -c ----- non frontalieres du tableau nosoar -c -c entrees: -c -------- -c mosoar : nombre maximal d'entiers par arete dans le tableau nosoar -c mxsoar : nombre maximal d'aretes frontalieres declarables -c -c modifies : -c ---------- -c nosoar : numero des 2 sommets , no ligne, 2 triangles, chainages en + -c nosoar(lchain,i)=arete interne suivante -c -c sortie : -c -------- -c na1 : numero dans nosoar de la premiere arete interne -c les suivantes sont nosoar(lchain,na1), ... -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - parameter (lchain=6) - integer nosoar(mosoar,mxsoar) -c -c formation du chainage des aretes internes a echanger eventuellement -c recherche de la premiere arete non vide et non frontaliere - do 10 na1=1,mxsoar - if( nosoar(1,na1) .gt. 0 .and. nosoar(3,na1) .le. 0 ) goto 15 - 10 continue -c -c protection de la premiere arete non vide et non frontaliere - 15 na0 = na1 - do 20 na=na1+1,mxsoar - if( nosoar(1,na) .gt. 0 .and. nosoar(3,na) .le. 0 ) then -c arete interne => elle est chainee a partir de la precedente - nosoar(lchain,na0) = na - na0 = na - endif - 20 continue -c -c la derniere arete interne n'a pas de suivante - nosoar(lchain,na0) = 0 - end - - - subroutine tedela( pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, n1ardv, - % moartr, mxartr, n1artr, noartr, modifs ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : pour toutes les aretes chainees dans nosoar(lchain,*) -c ----- du tableau nosoar -c echanger la diagonale des 2 triangles si le sommet oppose -c a un triangle ayant en commun une arete appartient au cercle -c circonscrit de l'autre (violation boule vide delaunay) -c -c entrees: -c -------- -c pxyd : tableau des x y distance_souhaitee de chaque sommet -c -c modifies : -c ---------- -c noarst : noarst(i) numero d'une arete de sommet i -c mosoar : nombre maximal d'entiers par arete dans le tableau nosoar -c mxsoar : nombre maximal d'aretes frontalieres declarables -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c nosoar : numero des 2 sommets , no ligne, 2 triangles, chainages en + -c n1ardv : numero dans nosoar de la premiere arete du chainage -c des aretes a rendre delaunay -c -c moartr : nombre d'entiers par triangle dans le tableau noartr -c mxartr : nombre maximal de triangles declarables dans noartr -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c modifs : nombre d'echanges de diagonales pour maximiser la qualite -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - parameter (lchain=6) - common / unites / lecteu, imprim, nunite(30) - double precision pxyd(3,*), surtd2, s123, s142, s143, s234, - % s12, s34, a12, cetria(3), r0 - integer nosoar(mosoar,mxsoar), - % noartr(moartr,mxartr), - % noarst(*) -c -c le nombre d'echanges de diagonales pour minimiser l'aire - modifs = 0 - r0 = 0 -c -c la premiere arete du chainage des aretes a rendre delaunay - na0 = n1ardv -c -c tant que la pile des aretes a echanger eventuellement est non vide -c ================================================================== - 20 if( na0 .gt. 0 ) then -c -c l'arete a traiter - na = na0 -c la prochaine arete a traiter - na0 = nosoar(lchain,na0) -c -c l'arete est marquee traitee avec le numero -1 - nosoar(lchain,na) = -1 -c -c l'arete est elle active? - if( nosoar(1,na) .eq. 0 ) goto 20 -c -c si arete frontaliere pas d'echange possible - if( nosoar(3,na) .gt. 0 ) goto 20 -c -c existe-t-il 2 triangles ayant cette arete commune? - if( nosoar(4,na) .le. 0 .or. nosoar(5,na) .le. 0 ) goto 20 -c -c aucun des 2 triangles est-il desactive? - if( noartr(1,nosoar(4,na)) .eq. 0 .or. - % noartr(1,nosoar(5,na)) .eq. 0 ) goto 20 -c -c l'arete appartient a deux triangles actifs -c le numero des 4 sommets du quadrangle des 2 triangles - call mt4sqa( na, moartr, noartr, mosoar, nosoar, - % ns1, ns2, ns3, ns4 ) - if( ns4 .eq. 0 ) goto 20 -c -c carre de la longueur de l'arete ns1 ns2 - a12 = (pxyd(1,ns2)-pxyd(1,ns1))**2+(pxyd(2,ns2)-pxyd(2,ns1))**2 -c -c comparaison de la somme des aires des 2 triangles -c ------------------------------------------------- -c calcul des surfaces des triangles 123 et 142 de cette arete - s123=surtd2( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3) ) - s142=surtd2( pxyd(1,ns1), pxyd(1,ns4), pxyd(1,ns2) ) - s12 = abs( s123 ) + abs( s142 ) - if( s12 .le. 0.001*a12 ) goto 20 -c -c calcul des surfaces des triangles 143 et 234 de cette arete - s143=surtd2( pxyd(1,ns1), pxyd(1,ns4), pxyd(1,ns3) ) - s234=surtd2( pxyd(1,ns2), pxyd(1,ns3), pxyd(1,ns4) ) - s34 = abs( s234 ) + abs( s143 ) -c - if( abs(s34-s12) .gt. 1d-15*s34 ) goto 20 -c -c quadrangle convexe : le critere de delaunay intervient -c ------------------ --------------------------------- -c calcul du centre et rayon de la boule circonscrite a 123 -c pas d'affichage si le triangle est degenere - ierr = -1 - call cenced( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3), cetria, - % ierr ) - if( ierr .gt. 0 ) then -c ierr=1 si triangle degenere => abandon - goto 20 - endif -c - if( (cetria(1)-pxyd(1,ns4))**2+(cetria(2)-pxyd(2,ns4))**2 - % .lt. cetria(3) ) then -c -c protection contre une boucle infinie sur le meme cercle - if( r0 .eq. cetria(3) ) goto 20 -c -c oui: ns4 est dans le cercle circonscrit a ns1 ns2 ns3 -c => ns3 est aussi dans le cercle circonscrit de ns1 ns2 ns4 -c -cccc les 2 triangles d'arete na sont effaces -ccc do 25 j=4,5 -ccc nt = nosoar(j,na) -cccc trace du triangle nt -ccc call mttrtr( pxyd, nt, moartr, noartr, mosoar, nosoar, -ccc % ncnoir, ncjaun ) -ccc 25 continue -c -c echange de la diagonale 12 par 34 des 2 triangles - call te2t2t( na, mosoar, n1soar, nosoar, noarst, - % moartr, noartr, na34 ) - if( na34 .eq. 0 ) goto 20 - r0 = cetria(3) -c -c l'arete na34 est marquee traitee - nosoar(lchain,na34) = -1 - modifs = modifs + 1 -c -c les aretes internes peripheriques des 2 triangles sont enchainees - do 60 j=4,5 - nt = nosoar(j,na34) -cccc trace du triangle nt -ccc call mttrtr( pxyd, nt, moartr, noartr, mosoar, nosoar, -ccc % ncoran, ncgric ) - do 50 i=1,3 - n = abs( noartr(i,nt) ) - if( n .ne. na34 ) then - if( nosoar(3,n) .eq. 0 .and. - % nosoar(lchain,n) .eq. -1 ) then -c cette arete marquee est chainee pour etre traitee - nosoar(lchain,n) = na0 - na0 = n - endif - endif - 50 continue - 60 continue - goto 20 - endif -c -c retour en haut de la pile des aretes a traiter - goto 20 - endif - end - - - subroutine terefr( nbarpi, pxyd, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, noarst, - % mxarcf, n1arcf, noarcf, larmin, notrcf, - % nbarpe, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : recherche des aretes de la frontiere non dans la triangulation -c ----- triangulation frontale pour les reobtenir -c -c attention: le chainage lchain de nosoar devient celui des cf -c -c entrees: -c -------- -c le tableau nosoar -c nbarpi : numero du dernier point interne impose par l'utilisateur -c pxyd : tableau des coordonnees 2d des points -c par point : x y distance_souhaitee -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxarcf : nombre de variables des tableaux n1arcf, noarcf, larmin, notrcf -c -c modifies: -c --------- -c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar -c chainage des vides suivant en 3 et precedant en 2 de nosoar -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = nosoar(1)+nosoar(2)*2 -c avec mxsoar>=3*mxsomm -c une arete i de nosoar est vide <=> nosoar(1,i)=0 et -c nosoar(2,arete vide)=l'arete vide qui precede -c nosoar(3,arete vide)=l'arete vide qui suit -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c noarst : noarst(i) numero d'une arete de sommet i -c -c -c auxiliaires : -c ------------- -c n1arcf : tableau (0:mxarcf) auxiliaire d'entiers -c noarcf : tableau (3,mxarcf) auxiliaire d'entiers -c larmin : tableau (mxarcf) auxiliaire d'entiers -c notrcf : tableau (mxarcf) auxiliaire d'entiers -c -c sortie : -c -------- -c nbarpe : nombre d'aretes perdues puis retrouvees -c ierr : =0 si pas d'erreur -c >0 si une erreur est survenue -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - parameter (lchain=6) - common / unites / lecteu,imprim,intera,nunite(29) - double precision pxyd(3,*) - integer nosoar(mosoar,mxsoar), - % noartr(moartr,*), - % noarst(*), - % n1arcf(0:mxarcf), - % noarcf(3,mxarcf), - % larmin(mxarcf), - % notrcf(mxarcf) -c -c le nombre d'aretes de la frontiere non arete de la triangulation - nbarpe = 0 -c -c initialisation du chainage des aretes des cf => 0 arete de cf - do 10 narete=1,mxsoar - nosoar( lchain, narete) = -1 - 10 continue -c -c boucle sur l'ensemble des aretes actuelles -c ========================================== - do 30 narete=1,mxsoar -c - if( nosoar(3,narete) .gt. 0 ) then -c arete appartenant a une ligne => frontaliere -c - if(nosoar(4,narete) .le. 0 .or. nosoar(5,narete) .le. 0)then -c l'arete narete frontaliere n'appartient pas a 2 triangles -c => elle est perdue - nbarpe = nbarpe + 1 -c -c le numero des 2 sommets de l'arete frontaliere perdue - ns1 = nosoar( 1, narete ) - ns2 = nosoar( 2, narete ) -c write(imprim,10000) ns1,(pxyd(j,ns1),j=1,2), -c % ns2,(pxyd(j,ns2),j=1,2) -10000 format(' arete perdue a forcer', - % (t24,'sommet=',i6,' x=',g13.5,' y=',g13.5)) -c -c traitement de cette arete perdue ns1-ns2 - call tefoar( narete, nbarpi, pxyd, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, noarst, - % mxarcf, n1arcf, noarcf, larmin, notrcf, - % ierr ) - if( ierr .ne. 0 ) return -c -c fin du traitement de cette arete perdue et retrouvee - endif - endif -c - 30 continue - end - - - subroutine tesuex( nblftr, nulftr, - % ndtri0, nbsomm, pxyd, nslign, - % mosoar, mxsoar, nosoar, - % moartr, mxartr, n1artr, noartr, noarst, - % nbtria, letrsu, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : supprimer du tableau noartr les triangles externes au domaine -c ----- en annulant le numero de leur 1-ere arete dans noartr -c et en les chainant comme triangles vides -c -c entrees: -c -------- -c nblftr : nombre de lignes fermees definissant la surface -c nulftr : numero des lignes fermees definissant la surface -c ndtri0 : plus grand numero dans noartr d'un triangle -c pxyd : tableau des coordonnees 2d des points -c par point : x y distance_souhaitee -c nslign : tableau du numero de sommet dans sa ligne pour chaque -c sommet frontalier -c numero du point dans le lexique point si interne impose -c 0 si le point est interne non impose par l'utilisateur -c -1 si le sommet est externe au domaine -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = nosoar(1)+nosoar(2)*2 -c avec mxsoar>=3*mxsomm -c une arete i de nosoar est vide <=> nosoar(1,i)=0 et -c nosoar(2,arete vide)=l'arete vide qui precede -c nosoar(3,arete vide)=l'arete vide qui suit -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxartr : nombre maximal de triangles declarables -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c noarst : noarst(i) numero nosoar d'une arete de sommet i -c -c sorties: -c -------- -c nbtria : nombre de triangles internes au domaine -c letrsu : letrsu(nt)=numero du triangle interne, 0 sinon -c noarst : noarst(i) numero nosoar d'une arete du sommet i (modifi'e) -c ierr : 0 si pas d'erreur, >0 sinon -cc++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mai 1999 -c2345x7..............................................................012 - double precision pxyd(3,*) - integer nulftr(nblftr),nslign(nbsomm), - % nosoar(mosoar,mxsoar), - % noartr(moartr,mxartr), - % noarst(*) - integer letrsu(1:ndtri0) - double precision dmin -c -c les triangles sont a priori non marques - do 5 nt=1,ndtri0 - letrsu(nt) = 0 - 5 continue -c -c les aretes sont marquees non chainees - do 10 noar1=1,mxsoar - nosoar(6,noar1) = -2 - 10 continue -c -c recherche du sommet de la triangulation de plus petite abscisse -c =============================================================== - ntmin = 0 - dmin = 1d38 - do 20 i=1,nbsomm - if( pxyd(1,i) .lt. dmin ) then -c le nouveau minimum - noar1 = noarst(i) - if( noar1 .gt. 0 ) then -c le sommet appartient a une arete de triangle - if( nosoar(4,noar1) .gt. 0 ) then -c le nouveau minimum - dmin = pxyd(1,i) - ntmin = i - endif - endif - endif - 20 continue -c -c une arete de sommet ntmin - noar1 = noarst( ntmin ) -c un triangle d'arete noar1 - ntmin = nosoar( 4, noar1 ) - if( ntmin .le. 0 ) then -c nblgrc(nrerr) = 1 -c kerr(1) = 'pas de triangle d''abscisse minimale' -c call lereur - write(imprim,*) 'pas de triangle d''abscisse minimale' - ierr = 2 - goto 9990 - endif -c -c chainage des 3 aretes du triangle ntmin -c ======================================= -c la premiere arete du chainage des aretes traitees - noar1 = abs( noartr(1,ntmin) ) - na0 = abs( noartr(2,ntmin) ) -c elle est chainee sur la seconde arete du triangle ntmin - nosoar(6,noar1) = na0 -c les 2 autres aretes du triangle ntmin sont chainees - na1 = abs( noartr(3,ntmin) ) -c la seconde est chainee sur la troisieme arete - nosoar(6,na0) = na1 -c la troisieme n'a pas de suivante - nosoar(6,na1) = 0 -c -c le triangle ntmin est a l'exterieur du domaine -c tous les triangles externes sont marques -123 456 789 -c les triangles de l'autre cote d'une arete sur une ligne -c sont marques: no de la ligne de l'arete * signe oppose -c ======================================================= - ligne0 = 0 - ligne = -123 456 789 -c - 40 if( noar1 .ne. 0 ) then -c -c l'arete noar1 du tableau nosoar est a traiter -c --------------------------------------------- - noar = noar1 -c l'arete suivante devient la premiere a traiter ensuite - noar1 = nosoar(6,noar1) -c l'arete noar est traitee - nosoar(6,noar) = -3 -c - do 60 i=4,5 -c -c l'un des 2 triangles de l'arete - nt = nosoar(i,noar) - if( nt .gt. 0 ) then -c -c triangle deja traite pour une ligne anterieure? - if( letrsu(nt) .ne. 0 .and. - % abs(letrsu(nt)) .ne. ligne ) goto 60 -c -cccc trace du triangle nt en couleur ligne0 -ccc call mttrtr( pxyd, nt, moartr, noartr, mosoar, nosoar, -ccc % ligne0, ncnoir ) -c -c le triangle est marque avec la valeur de ligne - letrsu(nt) = ligne -c -c chainage eventuel des autres aretes de ce triangle -c si ce n'est pas encore fait - do 50 j=1,3 -c -c le numero na de l'arete j du triangle nt dans nosoar - na = abs( noartr(j,nt) ) - if( nosoar(6,na) .ne. -2 ) goto 50 -c -c le numero de 1 a nblftr dans nulftr de la ligne de l'arete - nl = nosoar(3,na) -c -c si l'arete est sur une ligne fermee differente de celle envelo -c et non marquee alors examen du triangle oppose - if( nl .gt. 0 ) then -c - if( nl .eq. ligne0 ) goto 50 -c -c arete frontaliere de ligne non traitee -c => passage de l'autre cote de la ligne -c le triangle de l'autre cote de la ligne est recherche - if( nt .eq. abs( nosoar(4,na) ) ) then - nt2 = 5 - else - nt2 = 4 - endif - nt2 = abs( nosoar(nt2,na) ) - if( nt2 .gt. 0 ) then -c -c le triangle nt2 de l'autre cote est marque avec le -c avec le signe oppose de celui de ligne - if( ligne .ge. 0 ) then - lsigne = -1 - else - lsigne = 1 - endif - letrsu(nt2) = lsigne * nl -c -c temoin de ligne a traiter ensuite dans nulftr - nulftr(nl) = -abs( nulftr(nl) ) -c -cccc trace du triangle nt2 en jaune borde de magenta -ccc call mttrtr( pxyd,nt2, -ccc % moartr,noartr,mosoar,nosoar, -ccc % ncjaun, ncmage ) -c -c l'arete est traitee - nosoar(6,na) = -3 -c - endif -c -c l'arete est traitee - goto 50 -c - endif -c -c arete non traitee => elle est chainee - nosoar(6,na) = noar1 - noar1 = na -c - 50 continue -c - endif - 60 continue -c - goto 40 - endif -c les triangles de la ligne fermee ont tous ete marques -c plus d'arete chainee -c -c recherche d'une nouvelle ligne fermee a traiter -c =============================================== - 65 do 70 nl=1,nblftr - if( nulftr(nl) .lt. 0 ) goto 80 - 70 continue -c plus de ligne fermee a traiter - goto 110 -c -c tous les triangles de cette composante connexe -c entre ligne et ligne0 vont etre marques -c ============================================== -c remise en etat du numero de ligne -c nl est le numero de la ligne dans nulftr a traiter - 80 nulftr(nl) = -nulftr(nl) - do 90 nt2=1,ndtri0 - if( abs(letrsu(nt2)) .eq. nl ) goto 92 - 90 continue -c -c recherche de l'arete j du triangle nt2 avec ce numero de ligne nl - 92 do 95 j=1,3 -c -c le numero de l'arete j du triangle dans nosoar - noar1 = 0 - na0 = abs( noartr(j,nt2) ) - if( nl .eq. nosoar(3,na0) ) then -c -c na0 est l'arete de ligne nl -c l'arete suivante du triangle nt2 - i = mod(j,3) + 1 -c le numero dans nosoar de l'arete i de nt2 - na1 = abs( noartr(i,nt2) ) - if( nosoar(6,na1) .eq. -2 ) then -c arete non traitee => elle est la premiere du chainage - noar1 = na1 -c pas de suivante dans ce chainage - nosoar(6,na1) = 0 - else - na1 = 0 - endif -c -c l'eventuelle seconde arete suivante - i = mod(i,3) + 1 - na = abs( noartr(i,nt2) ) - if( nosoar(6,na) .eq. -2 ) then - if( na1 .eq. 0 ) then -c 1 arete non traitee et seule a chainer - noar1 = na - nosoar(6,na) = 0 - else -c 2 aretes a chainer - noar1 = na - nosoar(6,na) = na1 - endif - endif -c - if( noar1 .gt. 0 ) then -c -c il existe au moins une arete a visiter pour ligne -c marquage des triangles internes a la ligne nl - ligne = letrsu(nt2) - ligne0 = nl - goto 40 -c - else -c -c nt2 est le seul triangle de la ligne fermee - goto 65 -c - endif - endif - 95 continue -c -c reperage des sommets internes ou externes dans nslign -c nslign(sommet externe au domaine)=-1 -c nslign(sommet interne au domaine)= 0 -c ===================================================== - 110 do 170 ns1=1,nbsomm -c tout sommet non sur la frontiere ou interne impose -c est suppose externe - if( nslign(ns1) .eq. 0 ) nslign(ns1) = -1 - 170 continue -c -c les triangles externes sont marques vides dans le tableau noartr -c ================================================================ - nbtria = 0 - do 200 nt=1,ndtri0 -c - if( letrsu(nt) .le. 0 ) then -c -c triangle nt externe - if( noartr(1,nt) .ne. 0 ) then -c la premiere arete est annulee - noartr(1,nt) = 0 -c le triangle nt est considere comme etant vide - noartr(2,nt) = n1artr - n1artr = nt - endif -c - else -c -c triangle nt interne - nbtria = nbtria + 1 - letrsu(nt) = nbtria -c -c marquage des 3 sommets du triangle nt - do 190 i=1,3 -c le numero nosoar de l'arete i du triangle nt - noar = abs( noartr(i,nt) ) -c le numero des 2 sommets - ns1 = nosoar(1,noar) - ns2 = nosoar(2,noar) -c mise a jour du numero d'une arete des 2 sommets de l'arete - noarst( ns1 ) = noar - noarst( ns2 ) = noar -c ns1 et ns2 sont des sommets de la triangulation du domaine - if( nslign(ns1) .lt. 0 ) nslign(ns1)=0 - if( nslign(ns2) .lt. 0 ) nslign(ns2)=0 - 190 continue -c - endif -c - 200 continue -c ici tout sommet externe ns verifie nslign(ns)=-1 -c -c les triangles externes sont mis a zero dans nosoar -c ================================================== - do 300 noar=1,mxsoar -c - if( nosoar(1,noar) .gt. 0 ) then -c -c le second triangle de l'arete noar - nt = nosoar(5,noar) - if( nt .gt. 0 ) then -c si le triangle nt est externe -c alors il est supprime pour l'arete noar - if( letrsu(nt) .le. 0 ) nosoar(5,noar)=0 - endif -c -c le premier triangle de l'arete noar - nt = nosoar(4,noar) - if( nt .gt. 0 ) then - if( letrsu(nt) .le. 0 ) then -c si le triangle nt est externe -c alors il est supprime pour l'arete noar -c et l'eventuel triangle oppose prend sa place -c en position 4 de nosoar - if( nosoar(5,noar) .gt. 0 ) then - nosoar(4,noar)=nosoar(5,noar) - nosoar(5,noar)=0 - else - nosoar(4,noar)=0 - endif - endif - endif - endif -c - 300 continue -c -c remise en etat pour eviter les modifications de ladefi - 9990 do 9991 nl=1,nblftr - if( nulftr(nl) .lt. 0 ) nulftr(nl)=-nulftr(nl) - 9991 continue - return - end - - - - subroutine trp1st( ns, noarst, mosoar, nosoar, moartr, noartr, - % mxpile, lhpile, lapile ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : recherche des triangles de noartr partageant le sommet ns -c ----- -c limite: un camembert de centre ns entame 2 fois -c ne donne que l'une des parties -c -c entrees: -c -------- -c ns : numero du sommet -c noarst : noarst(i) numero d'une arete de sommet i -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c moartr : nombre maximal d'entiers par arete du tableau noartr -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c mxpile : nombre maximal de triangles empilables -c -c sorties : -c -------- -c lhpile : >0 nombre de triangles empiles -c =0 si impossible de tourner autour du point -c =-lhpile si apres butee sur la frontiere il y a a nouveau -c butee sur la frontiere . a ce stade on ne peut dire si tous -c les triangles ayant ce sommet ont ete recenses -c ce cas arrive seulement si le sommet est sur la frontiere -c lapile : numero dans noartr des triangles de sommet ns -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - common / unites / lecteu, imprim, nunite(30) - integer noartr(moartr,*), - % nosoar(mosoar,*), - % noarst(*) - integer lapile(1:mxpile) - integer nosotr(3) -c -c la premiere arete de sommet ns - nar = noarst( ns ) - if( nar .le. 0 ) then - write(imprim,*) 'trp1st: sommet',ns,' sans arete' - goto 9999 - endif -c -c l'arete nar est elle active? - if( nosoar(1,nar) .le. 0 ) then -ccc write(imprim,*) 'trp1st: arete vide',nar, -ccc % ' st1:', nosoar(1,nar),' st2:',nosoar(2,nar) - goto 9999 - endif -c -c le premier triangle de sommet ns - nt0 = abs( nosoar(4,nar) ) - if( nt0 .le. 0 ) then - write(imprim,*) 'trp1st: sommet',ns,' dans aucun triangle' - goto 9999 - endif -c -c le triangle est il interne? - if( noartr(1,nt0) .eq. 0 ) goto 9999 -c -c le numero des 3 sommets du triangle nt0 dans le sens direct - call nusotr( nt0, mosoar, nosoar, moartr, noartr, nosotr ) -c -c reperage du sommet ns dans le triangle nt0 - do 5 nar=1,3 - if( nosotr(nar) .eq. ns ) goto 10 - 5 continue - nta = nt0 - goto 9995 -c -c ns retrouve : le triangle nt0 est empile - 10 lhpile = 1 - lapile(1) = nt0 - nta = nt0 -c -c recherche dans le sens des aiguilles d'une montre -c (sens indirect) du triangle nt1 de l'autre cote de l'arete -c nar du triangle et en tournant autour du sommet ns -c ========================================================== - noar = abs( noartr(nar,nt0) ) -c le triangle nt1 oppose du triangle nt0 par l'arete noar - if( nosoar(4,noar) .eq. nt0 ) then - nt1 = nosoar(5,noar) - else - nt1 = nosoar(4,noar) - endif -c -c la boucle sur les triangles nt1 de sommet ns dans le sens indirect -c ================================================================== - if( nt1 .gt. 0 ) then -c - if( noartr(1,nt1) .eq. 0 ) goto 30 -c -c le triangle nt1 n'a pas ete detruit. il est actif -c le triangle oppose par l'arete noar existe -c le numero des 3 sommets du triangle nt1 dans le sens direct - 15 call nusotr( nt1, mosoar, nosoar, moartr, noartr, nosotr ) -c -c reperage du sommet ns dans nt1 - do 20 nar=1,3 - if( nosotr(nar) .eq. ns ) goto 25 - 20 continue - nta = nt1 - goto 9995 -c -c nt1 est empile - 25 if( lhpile .ge. mxpile ) goto 9990 - lhpile = lhpile + 1 - lapile(lhpile) = nt1 -c -c le triangle nt1 de l'autre cote de l'arete de sommet ns -c sauvegarde du precedent triangle dans nta - nta = nt1 - noar = abs( noartr(nar,nt1) ) - if( nosoar(4,noar) .eq. nt1 ) then - nt1 = nosoar(5,noar) - else - nt1 = nosoar(4,noar) - endif - if( nt1 .le. 0 ) goto 30 -c le triangle suivant est a l'exterieur - if( nt1 .ne. nt0 ) goto 15 -c -c recherche terminee par arrivee sur nt0 -c les triangles forment un "cercle" de "centre" ns - return -c - endif -c -c pas de triangle voisin a nt1 -c ============================ -c le parcours passe par 1 des triangles exterieurs -c le parcours est inverse par l'arete de gauche -c le triangle nta est le premier triangle empile - 30 lhpile = 1 - lapile(lhpile) = nta -c -c le numero des 3 sommets du triangle nta dans le sens direct - call nusotr( nta, mosoar, nosoar, moartr, noartr, nosotr ) - do 32 nar=1,3 - if( nosotr(nar) .eq. ns ) goto 33 - 32 continue - goto 9995 -c -c l'arete qui precede (rotation / ns dans le sens direct) - 33 if( nar .eq. 1 ) then - nar = 3 - else - nar = nar - 1 - endif -c -c le triangle voisin de nta dans le sens direct - noar = abs( noartr(nar,nta) ) - if( nosoar(4,noar) .eq. nta ) then - nt1 = nosoar(5,noar) - else - nt1 = nosoar(4,noar) - endif - if( nt1 .le. 0 ) then -c un seul triangle contient ns - goto 70 - endif -c -c boucle sur les triangles de sommet ns dans le sens direct -c ========================================================== - 40 if( noartr(1,nt1) .eq. 0 ) goto 70 -c -c le triangle nt1 n'a pas ete detruit. il est actif -c le numero des 3 sommets du triangle nt1 dans le sens direct - call nusotr( nt1, mosoar, nosoar, moartr, noartr, nosotr ) -c -c reperage du sommet ns dans nt1 - do 50 nar=1,3 - if( nosotr(nar) .eq. ns ) goto 60 - 50 continue - nta = nt1 - goto 9995 -c -c nt1 est empile - 60 if( lhpile .ge. mxpile ) goto 9990 - lhpile = lhpile + 1 - lapile(lhpile) = nt1 -c -c l'arete qui precede dans le sens direct - if( nar .eq. 1 ) then - nar = 3 - else - nar = nar - 1 - endif -c -c l'arete de sommet ns dans nosoar - noar = abs( noartr(nar,nt1) ) -c -c le triangle voisin de nta dans le sens direct - nta = nt1 - if( nosoar(4,noar) .eq. nt1 ) then - nt1 = nosoar(5,noar) - else - nt1 = nosoar(4,noar) - endif - nta = nt1 - if( nt1 .gt. 0 ) goto 40 -c -c butee sur le trou => fin des triangles de sommet ns -c ---------------------------------------------------- - 70 lhpile = -lhpile -c impossible ici de trouver les autres triangles de sommet ns -c les triangles de sommet ns ne forment pas une boule de centre ns - return -c -c saturation de la pile des triangles -c ----------------------------------- - 9990 write(imprim,*) 'trp1st:saturation pile des triangles autour ', - %'sommet',ns - goto 9999 -c -c erreur triangle ne contenant pas le sommet ns -c ---------------------------------------------- - 9995 write(imprim,*) 'trp1st:triangle ',nta,' st=', - % (nosotr(nar),nar=1,3),' sans le sommet' ,ns -c - 9999 lhpile = 0 - return - end - - - - subroutine nusotr( nt, mosoar, nosoar, moartr, noartr, nosotr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : calcul du numero des 3 sommets du triangle nt de noartr -c ----- dans le sens direct (aire>0 si non degenere) -c -c entrees: -c -------- -c nt : numero du triangle dans le tableau noartr -c mosoar : nombre maximal d'entiers par arete -c nosoar : numero des 2 sommets , no ligne, 2 triangles, chainages en + -c sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante -c moartr : nombre maximal d'entiers par arete du tableau noartr -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1=0 si triangle vide => arete2=triangle vide suivant -c -c sorties: -c -------- -c nosotr : numero (dans le tableau pxyd) des 3 sommets du triangle -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c2345x7..............................................................012 - integer nosoar(mosoar,*), noartr(moartr,*), nosotr(3) -c -c les 2 sommets de l'arete 1 du triangle nt dans le sens direct - na = noartr( 1, nt ) - if( na .gt. 0 ) then - nosotr(1) = 1 - nosotr(2) = 2 - else - nosotr(1) = 2 - nosotr(2) = 1 - na = -na - endif - nosotr(1) = nosoar( nosotr(1), na ) - nosotr(2) = nosoar( nosotr(2), na ) -c -c l'arete suivante - na = abs( noartr(2,nt) ) -c -c le sommet nosotr(3 du triangle 123 - nosotr(3) = nosoar( 1, na ) - if( nosotr(3) .eq. nosotr(1) .or. nosotr(3) .eq. nosotr(2) ) then - nosotr(3) = nosoar(2,na) - endif - end - - - subroutine tesusp( nbarpi, pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % mxarcf, n1arcf, noarcf, larmin, notrcf, liarcf, - % nbstsu, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : supprimer de la triangulation les sommets de te trop proches -c ----- soit d'un sommet frontalier ou point interne impose -c soit d'une arete frontaliere -c -c attention: le chainage lchain de nosoar devient celui des cf -c -c entrees: -c -------- -c nbarpi : numero du dernier point interne impose par l'utilisateur -c pxyd : tableau des coordonnees 2d des points -c par point : x y distance_souhaitee -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxarcf : nombre de variables des tableaux n1arcf, noarcf, larmin, notrcf -c -c modifies: -c --------- -c noarst : noarst(i) numero d'une arete de sommet i -c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar -c chainage des vides suivant en 3 et precedant en 2 de nosoar -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = nosoar(1)+nosoar(2)*2 -c avec mxsoar>=3*mxsomm -c une arete i de nosoar est vide <=> nosoar(1,i)=0 et -c nosoar(2,arete vide)=l'arete vide qui precede -c nosoar(3,arete vide)=l'arete vide qui suit -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c -c -c auxiliaires : -c ------------- -c n1arcf : tableau (0:mxarcf) auxiliaire d'entiers -c noarcf : tableau (3,mxarcf) auxiliaire d'entiers -c larmin : tableau ( mxarcf ) auxiliaire d'entiers -c notrcf : tableau ( mxarcf ) auxiliaire d'entiers -c liarcf : tableau ( mxarcf ) auxiliaire d'entiers -c -c sortie : -c -------- -c nbstsu : nombre de sommets de te supprimes -c ierr : =0 si pas d'erreur -c >0 si une erreur est survenue -c 11 algorithme defaillant -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 -c parameter ( quamal=0.3 ) => ok -c parameter ( quamal=0.4 ) => pb pour le test ocean -c parameter ( quamal=0.5 ) => pb pour le test ocean -c - parameter ( quamal=0.333, lchain=6 ) - common / unites / lecteu,imprim,intera,nunite(29) - double precision pxyd(3,*), qualit - integer nosoar(mosoar,mxsoar), - % noartr(moartr,*), - % noarst(*), - % n1arcf(0:mxarcf), - % noarcf(3,mxarcf), - % larmin(mxarcf), - % notrcf(mxarcf), - % liarcf(mxarcf) -c - integer nosotr(3) - equivalence (nosotr(1),ns1), (nosotr(2),ns2), - % (nosotr(3),ns3) -c -c le nombre de sommets de te supprimes - nbstsu = 0 -c -c initialisation du chainage des aretes des cf => 0 arete de cf - do 10 narete=1,mxsoar - nosoar( lchain, narete ) = -1 - 10 continue -c -c boucle sur l'ensemble des sommets frontaliers ou points internes -c ================================================================ - do 100 ns = 1, nbarpi -c -cccc le nombre de sommets supprimes pour ce sommet ns -ccc nbsuns = 0 -c -c la qualite minimale au dessous de laquelle le point proche -c interne est supprime - quaopt = quamal -c -c une arete de sommet ns - 15 narete = noarst( ns ) - if( narete .le. 0 ) then -c erreur: le point appartient a aucune arete - write(imprim,*) 'sommet ',ns,' dans aucune arete' - ierr = 11 - return - endif -c -c recherche des triangles de sommet ns -c ils doivent former un contour ferme de type etoile - call trp1st( ns, noarst, mosoar, nosoar, moartr, noartr, - % mxarcf, nbtrcf, notrcf ) - if( nbtrcf .le. 0 ) then -c erreur: impossible de trouver tous les triangles de sommet ns -c seule une partie est a priori retrouvee - nbtrcf = -nbtrcf - endif -c -c boucle sur les triangles de l'etoile du sommet ns - quamin = 2.0 - do 20 i=1,nbtrcf -c -c le numero des 3 sommets du triangle nt - nt = notrcf(i) - call nusotr( nt, mosoar, nosoar, moartr, noartr, - % nosotr ) -c nosotr(1:3) est en equivalence avec ns1, ns2, ns3 -c -c la qualite du triangle ns1 ns2 ns3 - call qutr2d( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3), qualit ) - if( qualit .lt. quamin ) then - quamin = qualit - ntqmin = nt - endif - 20 continue -c -c bilan sur la qualite des triangles de sommet ns - if( quamin .lt. quaopt ) then -c -c recherche du sommet de ntqmin le plus proche et non frontalier -c ============================================================== -c le numero des 3 sommets du triangle nt - call nusotr( ntqmin, mosoar, nosoar, moartr, noartr, - % nosotr ) - nste = 0 - quamin = 1e28 - do 30 j=1,3 - if( nosotr(j) .ne. ns .and. nosotr(j) .gt. nbarpi ) then - d = (pxyd(1,nosotr(j))-pxyd(1,ns))**2 - % + (pxyd(2,nosotr(j))-pxyd(2,ns))**2 - if( d .lt. quamin ) then - quamin = d - nste = j - endif - endif - 30 continue -c - if( nste .gt. 0 ) then -c -c nste est le sommet le plus proche de ns de ce -c triangle de mauvaise qualite et sommet non encore traite - nste = nosotr( nste ) -c -c nste est un sommet de triangle equilateral -c => le sommet nste va etre supprime -c ========================================== - call te1stm( nste, pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % mxarcf, n1arcf, noarcf, - % larmin, notrcf, liarcf, ierr ) - if( ierr .eq. 0 ) then -c un sommet de te supprime de plus - nbstsu = nbstsu + 1 - else if( ierr .lt. 0 ) then -c le sommet nste est externe donc non supprime -c ou bien le sommet nste est le centre d'un cf dont toutes -c les aretes simples sont frontalieres -c dans les 2 cas le sommet n'est pas supprime - ierr = 0 - goto 100 - else -c erreur motivant un arret de la triangulation - return - endif -c -c boucle jusqu'a obtenir une qualite suffisante -c si triangulation tres irreguliere => -c destruction de beaucoup de points internes -c les 2 variables suivantes brident ces destructions massives -ccc nbsuns = nbsuns + 1 - quaopt = quaopt * 0.8 -ccc if( nbsuns .le. 5 ) goto 15 - goto 15 - endif - endif -c - 100 continue - end - - - subroutine teamqa( nutysu, - % noarst, mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % mxtrcf, notrcf, nostbo, - % n1arcf, noarcf, larmin, - % comxmi, nbarpi, nbsomm, mxsomm, pxyd, nslign, - % ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but: si la taille de l'arete moyenne est >ampli*taille souhaitee -c ---- alors ajout d'un sommet barycentre du plus grand triangle -c de sommet ns -c si la taille de l'arete moyenne est aretmx active -c 1 il existe une fonction areteideale() -c dont seules les 2 premieres composantes de uv sont actives -c autres options a definir... -c noarst : noarst(i) numero d'une arete de sommet i -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes frontalieres declarables -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxartr : nombre maximal de triangles declarables dans noartr -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c mxtrcf : nombre maximal de triangles empilables -c nbarpi : numero du dernier sommet frontalier ou interne impose -c nslign : tableau du numero de sommet dans sa ligne pour chaque -c sommet frontalier -c numero du point dans le lexique point si interne impose -c 0 si le point est interne non impose par l'utilisateur -c -1 si le sommet est externe au domaine -c comxmi : min et max des coordonneees des sommets du maillage -c -c modifies : -c ---------- -c nbsomm : nombre actuel de sommets de la triangulation -c (certains sommets internes ont ete desactives ou ajoutes) -c pxyd : tableau des coordonnees 2d des points -c -c auxiliaires: -c ------------ -c notrcf : tableau ( mxtrcf ) auxiliaire d'entiers -c numero dans noartr des triangles de sommet ns -c nostbo : tableau ( mxtrcf ) auxiliaire d'entiers -c numero dans pxyd des sommets des aretes simples de la boule -c n1arcf : tableau (0:mxtrcf) auxiliaire d'entiers -c noarcf : tableau (3,mxtrcf) auxiliaire d'entiers -c larmin : tableau ( mxtrcf ) auxiliaire d'entiers -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc juin 1997 -c....................................................................012 - double precision ampli,ampli2 - parameter (ampli=1.34d0,ampli2=ampli/2d0) - parameter (lchain=6) - common / unites / lecteu, imprim, nunite(30) - double precision pxyd(3,*) - double precision ponder, ponde1, xbar, ybar, x, y, surtd2 - double precision d, dmoy - double precision d2d3(3,3) - real origin(3), xyz(3) - integer noartr(moartr,*), - % nosoar(mosoar,*), - % noarst(*), - % notrcf(mxtrcf), - % nslign(*), - % nostbo(*), - % n1arcf(0:mxtrcf), - % noarcf(3,mxtrcf), - % larmin(mxtrcf) - double precision comxmi(3,2) - integer nosotr(3) -c -c le nombre d'iterations pour ameliorer la qualite - nbitaq = 4 - ier = 0 -c -c initialisation du parcours - nbs1 = nbsomm - nbs2 = nbarpi + 1 - nbs3 = -1 -c - do 5000 iter=1,nbitaq -c -c le nombre de sommets supprimes - nbstsu = 0 - nbbaaj = 0 -c -c coefficient de ponderation croissant avec les iterations - ponder = min( 1d0, ( 50 + (50*iter)/nbitaq ) * 0.01d0 ) - ponde1 = 1d0 - ponder -c -c l'ordre du parcours dans le sens croissant ou decroissant - nt = nbs1 - nbs1 = nbs2 - nbs2 = nt -c alternance du parcours - nbs3 = -nbs3 -c - do 1000 ns = nbs1, nbs2, nbs3 -c -c le sommet est il interne au domaine? - if( nslign(ns) .ne. 0 ) goto 1000 -c -c existe-t-il une arete de sommet ns ? - 10 noar = noarst( ns ) - if( noar .le. 0 ) goto 1000 -c -c le 1-er triangle de l'arete noar - nt = nosoar( 4, noar ) - if( nt .le. 0 ) goto 1000 -c -c recherche des triangles de sommet ns -c ils doivent former un contour ferme de type etoile - call trp1st( ns, noarst, mosoar, nosoar, moartr, noartr, - % mxtrcf, nbtrcf, notrcf ) - if( nbtrcf .le. 0 ) goto 1000 -c -c mise a jour de la distance souhaitee - if( nutysu .gt. 0 ) then -c la fonction taille_ideale(x,y,z) existe -c calcul de pxyzd(3,ns) dans le repere initial => xyz(1:3) - call tetaid( nutysu, pxyd(1,ns), pxyd(2,ns), - % pxyd(3,ns), ier ) - endif -c -c boucle sur les triangles qui forment une boule autour du sommet ns - nbstbo = 0 -c chainage des aretes simples de la boule a rendre delaunay - noar0 = 0 - do 40 i=1,nbtrcf -c -c le numero de l'arete du triangle nt ne contenant pas le sommet ns - nt = notrcf(i) - do 20 na=1,3 -c le numero de l'arete na dans le tableau nosoar - noar = abs( noartr(na,nt) ) - if( nosoar(1,noar) .ne. ns .and. - % nosoar(2,noar) .ne. ns ) goto 25 - 20 continue -c -c construction de la liste des sommets des aretes simples -c de la boule des triangles de sommet ns -c ------------------------------------------------------- - 25 do 35 na=1,2 - ns1 = nosoar(na,noar) - do 30 j=nbstbo,1,-1 - if( ns1 .eq. nostbo(j) ) goto 35 - 30 continue -c ns1 est un nouveau sommet a ajouter - nbstbo = nbstbo + 1 - nostbo(nbstbo) = ns1 - 35 continue -c -c noar est une arete potentielle a rendre delaunay - if( nosoar(3,noar) .eq. 0 ) then -c arete non frontaliere - nosoar(lchain,noar) = noar0 - noar0 = noar - endif -c - 40 continue -c -c calcul des 2 coordonnees du barycentre de la boule du sommet ns -c calcul de la longueur moyenne des aretes issues du sommet ns -c --------------------------------------------------------------- - xbar = 0d0 - ybar = 0d0 - dmoy = 0d0 - do 50 i=1,nbstbo - x = pxyd(1,nostbo(i)) - y = pxyd(2,nostbo(i)) - xbar = xbar + x - ybar = ybar + y - dmoy = dmoy + sqrt( (x-pxyd(1,ns))**2+(y-pxyd(2,ns))**2 ) - 50 continue - dmoy = dmoy / nbstbo -c -c pas de modification de la topologie lors de la derniere iteration -c ================================================================= - if( iter .eq. nbitaq ) goto 200 -c -c si la taille de l'arete moyenne est >ampli*taille souhaitee -c alors ajout d'un sommet barycentre du plus grand triangle -c de sommet ns -c =========================================================== - if( dmoy .gt. ampli*pxyd(3,ns) ) then -c - dmoy = 0d0 - do 150 i=1,nbtrcf -c recherche du plus grand triangle en surface - call nusotr( notrcf(i), mosoar, nosoar, - % moartr, noartr, nosotr ) - d = surtd2( pxyd(1,nosotr(1)), - % pxyd(1,nosotr(2)), - % pxyd(1,nosotr(3)) ) - if( d .gt. dmoy ) then - dmoy = d - imax = i - endif - 150 continue -c -c ajout du barycentre du triangle notrcf(imax) - nt = notrcf( imax ) - call nusotr( nt, mosoar, nosoar, - % moartr, noartr, nosotr ) - if( nbsomm .ge. mxsomm ) then - write(imprim,*) 'saturation du tableau pxyd' -c abandon de l'amelioration du sommet ns - goto 9999 - endif - nbsomm = nbsomm + 1 - do 160 i=1,3 - pxyd(i,nbsomm) = ( pxyd(i,nosotr(1)) - % + pxyd(i,nosotr(2)) - % + pxyd(i,nosotr(3)) ) / 3d0 - 160 continue -c - if( nutysu .gt. 0 ) then -c la fonction taille_ideale(x,y,z) existe -c calcul de pxyzd(3,nbsomm) dans le repere initial => xyz(1:3) - call tetaid( nutysu, pxyd(1,nbsomm), pxyd(2,nbsomm), - % pxyd(3,nbsomm), ier ) - endif -c -c sommet interne a la triangulation - nslign(nbsomm) = 0 -c -c les 3 aretes du triangle nt sont a rendre delaunay - do 170 i=1,3 - noar = abs( noartr(i,nt) ) - if( nosoar(3,noar) .eq. 0 ) then -c arete non frontaliere - if( nosoar(lchain,noar) .lt. 0 ) then -c arete non encore chainee - nosoar(lchain,noar) = noar0 - noar0 = noar - endif - endif - 170 continue -c -c triangulation du triangle de barycentre nbsomm -c protection a ne pas modifier sinon erreur! - call tr3str( nbsomm, nt, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % noarst, - % nosotr, ierr ) - if( ierr .ne. 0 ) goto 9999 -c -c un barycentre ajoute de plus - nbbaaj = nbbaaj + 1 -c -c les aretes chainees de la boule sont rendues delaunay - goto 900 -c - endif -c -c si la taille de l'arete moyenne est xyz(1:3) - call tetaid( nutysu, pxyd(1,ns), pxyd(2,ns), - % pxyd(3,ns), ier ) - endif -c -c les aretes chainees de la boule sont rendues delaunay - 900 call tedela( pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, noar0, - % moartr, mxartr, n1artr, noartr, modifs ) -c - 1000 continue -c -ccc write(imprim,11000) nbstsu, nbbaaj -ccc11000 format( i6,' sommets supprimes ' , -ccc % i6,' barycentres ajoutes' ) -c -c mise a jour pour ne pas oublier les nouveaux sommets - if( nbs1 .gt. nbs2 ) then - nbs1 = nbsomm - else - nbs2 = nbsomm - endif -c - 5000 continue -c - 9999 return - end - - - subroutine teamsf( nutysu, - % noarst, mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % mxtrcf, notrcf, nostbo, - % n1arcf, noarcf, larmin, - % comxmi, nbarpi, nbsomm, mxsomm, pxyd, nslign, - % ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : modification de la topologie des triangles autour des -c ----- sommets frontaliers et mise en triangulation delaunay locale -c -c entrees: -c -------- -c nutysu : numero de traitement de areteideale() selon le type de surface -c 0 pas d'emploi de la fonction areteideale() => aretmx active -c 1 il existe une fonction areteideale() -c dont seules les 2 premieres composantes de uv sont actives -c autres options a definir... -c noarst : noarst(i) numero d'une arete de sommet i -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes frontalieres declarables -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxartr : nombre maximal de triangles declarables dans noartr -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c mxtrcf : nombre maximal de triangles empilables -c nbarpi : numero du dernier sommet frontalier ou interne impose -c nslign : >0 => ns numero du point dans le lexique point si interne impose -c ou => 1 000 000 * n + ns1 -c ou n est le numero (1 a nblftr) de la ligne de ce point -c ns1 est le numero du point dans sa ligne -c = 0 si le point est interne non impose par l'utilisateur -c =-1 si le sommet est externe au domaine -c comxmi : min et max des coordonneees des sommets du maillage -c -c modifies : -c ---------- -c nbsomm : nombre actuel de sommets de la triangulation -c (certains sommets internes ont ete desactives ou ajoutes) -c pxyd : tableau des coordonnees 2d des points -c -c auxiliaires: -c ------------ -c notrcf : tableau ( mxtrcf ) auxiliaire d'entiers -c numero dans noartr des triangles de sommet ns -c nostbo : tableau ( mxtrcf ) auxiliaire d'entiers -c numero dans pxyd des sommets des aretes simples de la boule -c n1arcf : tableau (0:mxtrcf) auxiliaire d'entiers -c noarcf : tableau (3,mxtrcf) auxiliaire d'entiers -c larmin : tableau ( mxtrcf ) auxiliaire d'entiers -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc janvier 1998 -c....................................................................012 - parameter (lchain=6) - common / unites / lecteu, imprim, nunite(30) - double precision pxyd(3,*) - double precision a, angle, angled, pi, deuxpi, pis3 - double precision d2d3(3,3) - real origin(3), xyz(3) - integer noartr(moartr,*), - % nosoar(mosoar,*), - % noarst(*), - % notrcf(mxtrcf), - % nslign(*), - % nostbo(*), - % n1arcf(0:mxtrcf), - % noarcf(3,mxtrcf), - % larmin(mxtrcf), - % nosotr(3) - double precision comxmi(3,2) -c -c le nombre d'iterations pour ameliorer la qualite - nbitaq = 2 - ier = 0 -c -c pi / 3 - pi = atan(1d0) * 4d0 - pis3 = pi / 3d0 - deuxpi = 2d0 * pi -c -c initialisation du parcours - modifs = 0 - nbs1 = nbarpi - nbs2 = 1 -c => pas de traitement sur les points des lignes de la frontiere - nbs3 = -1 -c - do 5000 iter=1,nbitaq -c -c le nombre de sommets supprimes - nbstsu = 0 -c -c l'ordre du parcours dans le sens croissant ou decroissant - nt = nbs1 - nbs1 = nbs2 - nbs2 = nt -c alternance du parcours - nbs3 = -nbs3 -c - do 1000 ns = nbs1, nbs2, nbs3 -c -c le sommet est il sur une ligne de la frontiere? -c if( nslign(ns) .lt. 1 000 000 ) goto 1000 -c -c traitement d'un sommet d'une ligne de la frontiere -c ================================================== -c existe-t-il une arete de sommet ns ? - noar = noarst( ns ) - if( noar .le. 0 ) goto 1000 -c -c le 1-er triangle de l'arete noar - nt = nosoar( 4, noar ) - if( nt .le. 0 ) goto 1000 -c -c recherche des triangles de sommet ns -c ils doivent former un contour ferme de type camembert - call trp1st( ns, noarst, mosoar, nosoar, moartr, noartr, - % mxtrcf, nbtrcf, notrcf ) - if( nbtrcf .ge. -1 ) goto 1000 -c -c boucle sur les triangles qui forment un camembert autour du sommet n - nbtrcf = -nbtrcf -c -c angle interne au camembert autour du sommet ns - angle = 0d0 - do 540 i=1,nbtrcf -c -c le numero de l'arete du triangle nt ne contenant pas le sommet ns - nt = notrcf(i) - do 520 na=1,3 -c le numero de l'arete na dans le tableau nosoar - noar = abs( noartr(na,nt) ) - if( nosoar(1,noar) .ne. ns .and. - % nosoar(2,noar) .ne. ns ) goto 525 - 520 continue -c -c calcul de l'angle (ns-st1 arete, ns-st2 arete) - 525 ns1 = nosoar(1,noar) - ns2 = nosoar(2,noar) - a = angled( pxyd(1,ns), pxyd(1,ns1), pxyd(1,ns2) ) - if( a .gt. pi ) a = deuxpi - a - angle = angle + a -c - 540 continue -c -c nombre ideal de triangles autour du sommet ns - n = nint( angle / pis3 ) - if( n .le. 1 ) goto 1000 - i = 1 - if( nbtrcf .gt. n ) then -c -c ajout du barycentre du triangle "milieu" - nt = notrcf( (n+1)/2 ) - call nusotr( nt, mosoar, nosoar, - % moartr, noartr, nosotr ) - if( nbsomm .ge. mxsomm ) then - write(imprim,*) 'saturation du tableau pxyd' -c abandon de l'amelioration du sommet ns - goto 1000 - endif - nbsomm = nbsomm + 1 - do 560 i=1,3 - pxyd(i,nbsomm) = ( pxyd(i,nosotr(1)) - % + pxyd(i,nosotr(2)) - % + pxyd(i,nosotr(3)) ) / 3d0 - 560 continue -c - if( nutysu .gt. 0 ) then -c la fonction taille_ideale(x,y,z) existe -c calcul de pxyzd(3,nbsomm) dans le repere initial => xyz(1:3) - call tetaid( nutysu, pxyd(1,nbsomm), pxyd(2,nbsomm), - % pxyd(3,nbsomm), ier ) - endif -c -c sommet interne a la triangulation - nslign(nbsomm) = 0 -c -c les 3 aretes du triangle nt sont a rendre delaunay - noar0 = 0 - do 570 i=1,3 - noar = abs( noartr(i,nt) ) - if( nosoar(3,noar) .eq. 0 ) then -c arete non frontaliere - if( nosoar(lchain,noar) .lt. 0 ) then -c arete non encore chainee - nosoar(lchain,noar) = noar0 - noar0 = noar - endif - endif - 570 continue -c -c triangulation du triangle de barycentre nbsomm -c protection a ne pas modifier sinon erreur! - call tr3str( nbsomm, nt, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % noarst, - % nosotr, ierr ) - if( ierr .ne. 0 ) goto 9999 -c -c les aretes chainees de la boule sont rendues delaunay - call tedela( pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, noar0, - % moartr, mxartr, n1artr, noartr, modifs ) - endif -c - 1000 continue -c - 5000 continue -c - 9999 return - end - - - subroutine teamqs( nutysu, - % noarst, mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % mxtrcf, notrcf, nostbo, - % n1arcf, noarcf, larmin, - % comxmi, nbarpi, nbsomm, mxsomm, pxyd, nslign, - % ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : une iteration de barycentrage des points internes -c ----- modification de la topologie pour avoir 4 ou 5 ou 6 triangles -c pour chaque sommet de la triangulation -c mise en triangulation delaunay -c -c entrees: -c -------- -c nutysu : numero de traitement de areteideale() selon le type de surface -c 0 pas d'emploi de la fonction areteideale() => aretmx active -c 1 il existe une fonction areteideale() -c dont seules les 2 premieres composantes de uv sont actives -c autres options a definir... -c noarst : noarst(i) numero d'une arete de sommet i -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes frontalieres declarables -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxartr : nombre maximal de triangles declarables dans noartr -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c mxtrcf : nombre maximal de triangles empilables -c nbarpi : numero du dernier sommet frontalier ou interne impose -c nslign : >0 => ns numero du point dans le lexique point si interne impose -c ou => 1 000 000 * n + ns1 -c ou n est le numero (1 a nblftr) de la ligne de ce point -c ns1 est le numero du point dans sa ligne -c = 0 si le point est interne non impose par l'utilisateur -c =-1 si le sommet est externe au domaine -c comxmi : min et max des coordonneees des sommets du maillage -c -c modifies : -c ---------- -c nbsomm : nombre actuel de sommets de la triangulation -c (certains sommets internes ont ete desactives ou ajoutes) -c pxyd : tableau des coordonnees 2d des points -c -c auxiliaires: -c ------------ -c notrcf : tableau ( mxtrcf ) auxiliaire d'entiers -c numero dans noartr des triangles de sommet ns -c nostbo : tableau ( mxtrcf ) auxiliaire d'entiers -c numero dans pxyd des sommets des aretes simples de la boule -c n1arcf : tableau (0:mxtrcf) auxiliaire d'entiers -c noarcf : tableau (3,mxtrcf) auxiliaire d'entiers -c larmin : tableau ( mxtrcf ) auxiliaire d'entiers -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mai 1997 -c....................................................................012 - parameter (lchain=6) - common / unites / lecteu, imprim, nunite(30) - double precision pxyd(3,*) - double precision ponder, ponde1, xbar, ybar, x, y, d, dmin, dmax - double precision d2d3(3,3) - real origin(3), xyz(3) - integer noartr(moartr,*), - % nosoar(mosoar,*), - % noarst(*), - % notrcf(mxtrcf), - % nslign(*), - % nostbo(*), - % n1arcf(0:mxtrcf), - % noarcf(3,mxtrcf), - % larmin(mxtrcf) - integer nosotr(3,2) - double precision comxmi(3,2) -c -c le nombre d'iterations pour ameliorer la qualite - nbitaq = 6 - ier = 0 -c -c initialisation du parcours - nbs1 = nbsomm - nbs2 = nbarpi + 1 -c => pas de traitement sur les points des lignes de la frontiere - nbs3 = -1 -c - do 5000 iter=1,nbitaq -c -c le nombre de sommets supprimes - nbstsu = 0 -c -c les compteurs de passage sur les differents cas - nbst4 = 0 - nbst5 = 0 - nbst8 = 0 -c -c coefficient de ponderation croissant avec les iterations - ponder = min( 1d0, ( 50 + (50*iter)/nbitaq ) * 0.01d0 ) - ponde1 = 1d0 - ponder -c -c l'ordre du parcours dans le sens croissant ou decroissant - nt = nbs1 - nbs1 = nbs2 - nbs2 = nt -c alternance du parcours - nbs3 = -nbs3 -c - do 1000 ns = nbs1, nbs2, nbs3 -c -c le sommet est il interne au domaine? - if( nslign(ns) .ne. 0 ) goto 1000 -c -c traitement d'un sommet interne non impose par l'utilisateur -c =========================================================== -c existe-t-il une arete de sommet ns ? - 10 noar = noarst( ns ) - if( noar .le. 0 ) goto 1000 -c -c le 1-er triangle de l'arete noar - nt = nosoar( 4, noar ) - if( nt .le. 0 ) goto 1000 -c -c recherche des triangles de sommet ns -c ils doivent former un contour ferme de type etoile - call trp1st( ns, noarst, mosoar, nosoar, moartr, noartr, - % mxtrcf, nbtrcf, notrcf ) - if( nbtrcf .le. 0 ) goto 1000 -c -c boucle sur les triangles qui forment une boule autour du sommet ns - nbstbo = 0 -c chainage des aretes simples de la boule a rendre delaunay - noar0 = 0 - do 40 i=1,nbtrcf -c -c le numero de l'arete du triangle nt ne contenant pas le sommet ns - nt = notrcf(i) - do 20 na=1,3 -c le numero de l'arete na dans le tableau nosoar - noar = abs( noartr(na,nt) ) - if( nosoar(1,noar) .ne. ns .and. - % nosoar(2,noar) .ne. ns ) goto 25 - 20 continue -c -c construction de la liste des sommets des aretes simples -c de la boule des triangles de sommet ns -c ------------------------------------------------------- - 25 do 35 na=1,2 - ns1 = nosoar(na,noar) - do 30 j=nbstbo,1,-1 - if( ns1 .eq. nostbo(j) ) goto 35 - 30 continue -c ns1 est un nouveau sommet a ajouter - nbstbo = nbstbo + 1 - nostbo(nbstbo) = ns1 - 35 continue -c -c noar est une arete potentielle a rendre delaunay - if( nosoar(3,noar) .eq. 0 ) then -c arete non frontaliere - nosoar(lchain,noar) = noar0 - noar0 = noar - endif -c - 40 continue -c -c calcul des 2 coordonnees du barycentre de la boule du sommet ns -c calcul de l'arete de taille maximale et minimale issue de ns -c --------------------------------------------------------------- - xbar = 0d0 - ybar = 0d0 - dmin = 1d28 - dmax = 0d0 - do 50 i=1,nbstbo - x = pxyd(1,nostbo(i)) - y = pxyd(2,nostbo(i)) - xbar = xbar + x - ybar = ybar + y - d = (x-pxyd(1,ns)) ** 2 + (y-pxyd(2,ns)) ** 2 - if( d .gt. dmax ) then - dmax = d - imax = i - endif - if( d .lt. dmin ) then - dmin = d - imin = i - endif - 50 continue -c -c pas de modification de la topologie lors de la derniere iteration -c ================================================================= - if( iter .ge. nbitaq ) goto 200 -c -c si la boule de ns contient 3 ou 4 triangles le sommet ns est detruit -c ==================================================================== - if( nbtrcf .le. 4 ) then -c -c remise a -1 du chainage des aretes peripheriques de la boule ns - noar = noar0 - 60 if( noar .gt. 0 ) then -c protection du no de l'arete suivante - na = nosoar(lchain,noar) -c l'arete interne est remise a -1 - nosoar(lchain,noar) = -1 -c l'arete suivante - noar = na - goto 60 - endif - call te1stm( ns, pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % mxtrcf, n1arcf, noarcf, - % larmin, notrcf, nostbo, - % ierr ) - if( ierr .lt. 0 ) then -c le sommet ns est externe donc non supprime -c ou bien le sommet ns est le centre d'un cf dont toutes -c les aretes simples sont frontalieres -c dans les 2 cas le sommet ns n'est pas supprime - ierr = 0 - goto 200 - else if( ierr .eq. 0 ) then - nbst4 = nbst4 + 1 - nbstsu = nbstsu + 1 - else -c erreur irrecuperable - goto 9999 - endif - goto 1000 -c - endif -c -c si la boule de ns contient 5 triangles et a un sommet voisin -c sommet de 5 triangles alors l'arete joignant ces 2 sommets -c est transformee en un seul sommet de 6 triangles -c ============================================================ - if( nbtrcf .eq. 5 ) then -c - do 80 i=1,5 -c le numero du sommet de l'arete i et different de ns - ns1 = nostbo(i) -c la liste des triangles de sommet ns1 - call trp1st( ns1, noarst, - % mosoar, nosoar, moartr, noartr, - % mxtrcf-5, nbtrc1, notrcf(6) ) - if( nbtrc1 .eq. 5 ) then -c -c l'arete de sommets ns-ns1 devient un point -c par suppression du sommet ns -c -c remise a -1 du chainage des aretes peripheriques de la boul - noar = noar0 - 70 if( noar .gt. 0 ) then -c protection du no de l'arete suivante - na = nosoar(lchain,noar) -c l'arete interne est remise a -1 - nosoar(lchain,noar) = -1 -c l'arete suivante - noar = na - goto 70 - endif -c -c le point ns1 devient le milieu de l'arete ns-ns1 - do 75 j=1,3 - pxyd(j,ns1) = (pxyd(j,ns) + pxyd(j,ns1)) * 0.5d0 - 75 continue -c - if( nutysu .gt. 0 ) then -c la fonction taille_ideale(x,y,z) existe -c calcul de pxyzd(3,ns1) dans le repere initial => xyz(1:3 - call tetaid( nutysu,pxyd(1,ns1),pxyd(2,ns1), - % pxyd(3,ns1), ier ) - endif -c -c suppression du point ns et mise en delaunay - call te1stm( ns, pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % mxtrcf, n1arcf, noarcf, - % larmin, notrcf, nostbo, - % ierr ) - if( ierr .lt. 0 ) then -c le sommet ns est externe donc non supprime -c ou bien le sommet ns est le centre d'un cf dont toutes -c les aretes simples sont frontalieres -c dans les 2 cas le sommet ns n'est pas supprime - ierr = 0 - goto 200 - else if( ierr .eq. 0 ) then - nbstsu = nbstsu + 1 - nbst5 = nbst5 + 1 - goto 1000 - else -c erreur irrecuperable - goto 9999 - endif - endif - 80 continue - endif -c -c si la boule de ns contient au moins 8 triangles -c alors un triangle interne est ajoute + 3 triangles (1 par arete) -c ================================================================ - if( nbtrcf .ge. 8 ) then -c -c modification des coordonnees du sommet ns -c il devient le barycentre du triangle notrcf(1) - call nusotr( notrcf(1), mosoar, nosoar, - % moartr, noartr, nosotr ) - do 110 i=1,3 - pxyd(i,ns) = ( pxyd(i,nosotr(1,1)) - % + pxyd(i,nosotr(2,1)) - % + pxyd(i,nosotr(3,1)) ) / 3d0 - 110 continue -c - if( nutysu .gt. 0 ) then -c la fonction taille_ideale(x,y,z) existe -c calcul de pxyzd(3,nbsomm) dans le repere initial => xyz(1:3) - call tetaid( nutysu, pxyd(1,ns), pxyd(2,ns), - % pxyd(3,ns), ier ) - endif -c -c ajout des 2 autres sommets comme barycentres des triangles -c notrcf(1+nbtrcf/3) et notrcf(1+2*nbtrcf/3) - nbt1 = ( nbtrcf + 1 ) / 3 - do 140 n=1,2 -c -c le triangle traite - nt = notrcf(1 + n * nbt1 ) -c -c le numero pxyd de ses 3 sommets - call nusotr( nt, mosoar, nosoar, - % moartr, noartr, nosotr ) -c -c ajout du nouveau barycentre - if( nbsomm .ge. mxsomm ) then - write(imprim,*) 'saturation du tableau pxyd' -c abandon de l'amelioration - goto 1100 - endif - nbsomm = nbsomm + 1 - do 120 i=1,3 - pxyd(i,nbsomm) = ( pxyd(i,nosotr(1,1)) - % + pxyd(i,nosotr(2,1)) - % + pxyd(i,nosotr(3,1)) ) / 3d0 - 120 continue -c - if( nutysu .gt. 0 ) then -c la fonction taille_ideale(x,y,z) existe -c calcul de pxyzd(3,nbsomm) dans le repere initial => xyz(1:3 - call tetaid( nutysu, pxyd(1,nbsomm),pxyd(2,nbsomm), - % pxyd(3,nbsomm), ier ) - endif -c -c sommet interne a la triangulation - nslign(nbsomm) = 0 -c -c les 3 aretes du triangle nt sont a rendre delaunay - do 130 i=1,3 - noar = abs( noartr(i,nt) ) - if( nosoar(3,noar) .eq. 0 ) then -c arete non frontaliere - if( nosoar(lchain,noar) .lt. 0 ) then -c arete non encore chainee - nosoar(lchain,noar) = noar0 - noar0 = noar - endif - endif - 130 continue -c -c triangulation du triangle de barycentre nbsomm -c protection a ne pas modifier sinon erreur! - call tr3str( nbsomm, nt, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % noarst, - % nosotr, ierr ) - if( ierr .ne. 0 ) goto 9999 - 140 continue -c - nbst8 = nbst8 + 1 -c -c les aretes chainees de la boule sont rendues delaunay - goto 300 -c - endif -c -c nbtrcf est compris entre 5 et 7 => barycentrage simple -c ====================================================== -c les 2 coordonnees du barycentre des sommets des aretes -c simples de la boule du sommet ns - 200 xbar = xbar / nbstbo - ybar = ybar / nbstbo -c -c ponderation pour eviter les degenerescenses - pxyd(1,ns) = ponde1 * pxyd(1,ns) + ponder * xbar - pxyd(2,ns) = ponde1 * pxyd(2,ns) + ponder * ybar -c -c les aretes chainees de la boule sont rendues delaunay - 300 call tedela( pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, noar0, - % moartr, mxartr, n1artr, noartr, modifs ) -c - 1000 continue -c -c trace de la triangulation actuelle et calcul de la qualite - 1100 continue -c -ccc write(imprim,11000) nbst4, nbst5, nbst8 -ccc11000 format( i7,' sommets de 4t', -ccc % i7,' sommets 5t+5t', -ccc % i7,' sommets >7t' ) -c -c mise a jour pour ne pas oublier les nouveaux sommets - if( nbs1 .gt. nbs2 ) then - nbs1 = nbsomm - nbs2 = nbarpi + 1 - else - nbs1 = nbarpi + 1 - nbs2 = nbsomm - endif -c - 5000 continue -c - 9999 return - end - - - subroutine teamqt( nutysu, - % noarst, mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % mxarcf, notrcf, nostbo, - % n1arcf, noarcf, larmin, - % comxmi, nbarpi, nbsomm, mxsomm, pxyd, nslign, - % ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : amelioration de la qualite de la triangulation issue de teabr4 -c ----- -c -c entrees: -c -------- -c nutysu : numero de traitement de areteideale() selon le type de surface -c 0 pas d'emploi de la fonction areteideale() => aretmx active -c 1 il existe une fonction areteideale() -c dont seules les 2 premieres composantes de uv sont actives -c autres options a definir... -c noarst : noarst(i) numero d'une arete de sommet i -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes frontalieres declarables -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxartr : nombre maximal de triangles declarables dans noartr -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c mxarcf : nombre maximal de triangles empilables -c nbarpi : numero du dernier sommet frontalier ou interne impose -c nslign : tableau du numero de sommet dans sa ligne pour chaque -c sommet frontalier -c numero du point dans le lexique point si interne impose -c 0 si le point est interne non impose par l'utilisateur -c -1 si le sommet est externe au domaine -c comxmi : min et max des coordonneees des sommets du maillage -c -c modifies : -c ---------- -c nbsomm : nombre actuel de sommets de la triangulation -c (certains sommets internes ont ete desactives ou ajoutes) -c pxyd : tableau des coordonnees 2d des points -c -c auxiliaires: -c ------------ -c notrcf : tableau ( mxarcf ) auxiliaire d'entiers -c numero dans noartr des triangles de sommet ns -c nostbo : tableau ( mxarcf ) auxiliaire d'entiers -c numero dans pxyd des sommets des aretes simples de la boule -c n1arcf : tableau (0:mxarcf) auxiliaire d'entiers -c noarcf : tableau (3,mxarcf) auxiliaire d'entiers -c larmin : tableau ( mxarcf ) auxiliaire d'entiers -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc juin 1997 -c....................................................................012 - common / unites / lecteu, imprim, nunite(30) - double precision pxyd(3,*), d2d3(3,3) - integer noartr(moartr,*), - % nosoar(mosoar,*), - % noarst(*), - % notrcf(mxarcf), - % nslign(*), - % nostbo(mxarcf), - % n1arcf(0:mxarcf), - % noarcf(3,mxarcf), - % larmin(mxarcf) - double precision comxmi(3,2) -c -c suppression des sommets de triangles equilateraux trop proches -c d'un sommet frontalier ou d'un point interne impose par -c triangulation frontale de l'etoile et mise en delaunay -c ============================================================== - call tesusp( nbarpi, pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % mxarcf, n1arcf, noarcf, larmin, notrcf, nostbo, - % nbstsu, ierr ) - if( ierr .ne. 0 ) goto 9999 -c write(imprim,*) 'retrait de',nbstsu, -c % ' sommets de te trop proches de la frontiere' -c -c ajustage des tailles moyennes des aretes avec ampli=1.34d0 entre -c ampli/2 x taille_souhaitee et ampli x taille_souhaitee -c + barycentrage des sommets et mise en triangulation delaunay -c ================================================================ - call teamqa( nutysu, - % noarst, mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % mxarcf, notrcf, nostbo, - % n1arcf, noarcf, larmin, - % comxmi, nbarpi, nbsomm, mxsomm, pxyd, nslign, - % ierr ) - if( ierr .ne. 0 ) goto 9999 -c -c modification de la topologie autour des sommets frontaliers -c pour avoir un nombre de triangles egal a l'angle/60 degres -c et mise en triangulation delaunay locale -c =========================================================== - call teamsf( nutysu, - % noarst, mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % mxarcf, notrcf, nostbo, - % n1arcf, noarcf, larmin, - % comxmi, nbarpi, nbsomm, mxsomm, pxyd, nslign, - % ierr ) - if( ierr .ne. 0 ) goto 9999 -c -c quelques iterations de barycentrage des points internes -c modification de la topologie pour avoir 4 ou 5 ou 6 triangles -c pour chaque sommet de la triangulation -c et mise en triangulation delaunay -c ============================================================= - call teamqs( nutysu, - % noarst, mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % mxarcf, notrcf, nostbo, - % n1arcf, noarcf, larmin, - % comxmi, nbarpi, nbsomm, mxsomm, pxyd, nslign, - % ierr ) -c - 9999 return - end - - subroutine trfrcf( nscent, mosoar, nosoar, moartr, noartr, - % nbtrcf, notrcf, nbarfr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : calculer le nombre d'aretes simples du contour ferme des -c ----- nbtrcf triangles de numeros stockes dans le tableau notrcf -c ayant tous le sommet nscent -c -c entrees: -c -------- -c nscent : numero du sommet appartenant a tous les triangles notrcf -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c moartr : nombre maximal d'entiers par arete du tableau noartr -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c nbtrcf : >0 nombre de triangles empiles -c =0 si impossible de tourner autour du point -c =-nbtrcf si apres butee sur la frontiere il y a a nouveau -c butee sur la frontiere . a ce stade on ne peut dire si tous -c les triangles ayant ce sommet ont ete recenses -c ce cas arrive seulement si le sommet est sur la frontiere -c notrcf : numero dans noartr des triangles de sommet ns -c -c sortie : -c -------- -c nbarfr : nombre d'aretes simples frontalieres -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc juin 1997 -c....................................................................012 - integer noartr(moartr,*), - % nosoar(mosoar,*), - % notrcf(1:nbtrcf) -c - nbarfr = 0 - do 50 n=1,nbtrcf -c le numero du triangle n dans le tableau noartr - nt = notrcf( n ) -c parcours des 3 aretes du triangle nt - do 40 i=1,3 -c le numero de l'arete i dans le tableau nosoar - noar = abs( noartr( i, nt ) ) - do 30 j=1,2 -c le numero du sommet j de l'arete noar - ns = nosoar( j, noar ) - if( ns .eq. nscent ) goto 40 - 30 continue -c l'arete noar (sans sommet nscent) est elle frontaliere? - if( nosoar( 5, noar ) .le. 0 ) then -c l'arete appartient au plus a un triangle -c une arete simple frontaliere de plus - nbarfr = nbarfr + 1 - endif -c le triangle a au plus une arete sans sommet nscent - goto 50 - 40 continue - 50 continue - end - - subroutine int2ar( p1, p2, p3, p4, oui ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : les 2 aretes de r**2 p1-p2 p3-p4 s'intersectent elles -c ----- entre leurs sommets? -c -c entrees: -c -------- -c p1,p2,p3,p4 : les 2 coordonnees reelles des sommets des 2 aretes -c -c sortie : -c -------- -c oui : .true. si intersection, .false. sinon -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc octobre 1991 -c2345x7..............................................................012 - double precision p1(2),p2(2),p3(2),p4(2) - double precision x21,y21,d21,x43,y43,d43,d,x,y,xx - logical oui -c -c longueur des aretes - x21 = p2(1)-p1(1) - y21 = p2(2)-p1(2) - d21 = x21**2 + y21**2 -c - x43 = p4(1)-p3(1) - y43 = p4(2)-p3(2) - d43 = x43**2 + y43**2 -c -c les 2 aretes sont-elles jugees paralleles ? - d = x43 * y21 - y43 * x21 - if( abs(d) .le. 0.001 * sqrt(d21 * d43) ) then -c aretes paralleles . pas d'intersection - oui = .false. - return - endif -c -c les 2 coordonnees du point d'intersection - x = ( p1(1)*x43*y21 - p3(1)*x21*y43 - (p1(2)-p3(2))*x21*x43 ) / d - y =-( p1(2)*y43*x21 - p3(2)*y21*x43 - (p1(1)-p3(1))*y21*y43 ) / d -c -c coordonnees de x,y dans le repere ns1-ns2 - xx = ( x - p1(1) ) * x21 + ( y - p1(2) ) * y21 -c le point est il entre p1 et p2 ? - oui = -0.00001d0*d21 .le. xx .and. xx .le. 1.00001d0*d21 -c -c coordonnees de x,y dans le repere ns3-ns4 - xx = ( x - p3(1) ) * x43 + ( y - p3(2) ) * y43 -c le point est il entre p3 et p4 ? - oui = oui .and. -0.00001d0*d43 .le. xx .and. xx .le. 1.00001d0*d43 - end - - - subroutine trchtd( pxyd, nar00, nar0, noarcf, - % namin0, namin, larmin ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : recherche dans le contour ferme du sommet qui joint a la plus -c ----- courte arete nar00 donne le triangle sans intersection -c avec le contour ferme de meilleure qualite -c -c entrees: -c -------- -c pxyd : tableau des coordonnees des sommets et distance_souhaitee -c -c entrees et sorties: -c ------------------- -c nar00 : numero dans noarcf de l'arete avant nar0 -c nar0 : numero dans noarcf de la plus petite arete du contour ferme -c a joindre a noarcf(1,namin) pour former le triangle ideal -c noarcf : numero du sommet , numero de l'arete suivante -c numero du triangle exterieur a l'etoile -c -c sortie : -c -------- -c namin0 : numero dans noarcf de l'arete avant namin -c namin : numero dans noarcf du sommet choisi -c 0 si contour ferme reduit a moins de 3 aretes -c larmin : tableau auxiliaire pour stocker la liste des numeros des -c aretes de meilleure qualite pour faire le choix final -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc fevrier 1992 -c2345x7..............................................................012 - double precision dmaxim, precision - parameter (dmaxim=1.7d+308, precision=1d-16) -c ATTENTION:variables a ajuster selon la machine! -c ATTENTION:dmaxim : le plus grand reel machine -c ATTENTION:sur dec-alpha la precision est de 10**-14 seulement - - common / unites / lecteu,imprim,nunite(30) - double precision pxyd(1:3,1:*) - integer noarcf(1:3,1:*), - % larmin(1:*) - double precision q, dd, dmima, - % unpeps, rayon, surtd2 - logical oui - double precision centre(3) -c -c initialisations -c dmaxim : le plus grand reel machine - unpeps = 1d0 + 100d0 * precision -c -c recherche de la plus courte arete du contour ferme - nbmin = 0 - na00 = nar00 - dmima = dmaxim - nbar = 0 -c - 2 na0 = noarcf( 2, na00 ) - na1 = noarcf( 2, na0 ) - nbar = nbar + 1 -c les 2 sommets de l'arete na0 du cf - ns1 = noarcf( 1, na0 ) - ns2 = noarcf( 1, na1 ) - dd = (pxyd(1,ns2)-pxyd(1,ns1))**2 + (pxyd(2,ns2)-pxyd(2,ns1))**2 - if( dd .lt. dmima ) then - dmima = dd - larmin(1) = na00 - endif - na00 = na0 - if( na00 .ne. nar00 ) then -c derniere arete non atteinte - goto 2 - endif -c - if( nbar .eq. 3 ) then -c -c contour ferme reduit a un triangle -c ---------------------------------- - namin = nar00 - nar0 = noarcf( 2, nar00 ) - namin0 = noarcf( 2, nar0 ) - return -c - else if( nbar .le. 2 ) then - write(imprim,*) 'erreur trchtd: cf<3 aretes' - namin = 0 - namin0 = 0 - return - endif -c -c cf non reduit a un triangle -c la plus petite arete est nar0 dans noarcf - nar00 = larmin( 1 ) - nar0 = noarcf( 2, nar00 ) - nar = noarcf( 2, nar0 ) -c - ns1 = noarcf( 1, nar0 ) - ns2 = noarcf( 1, nar ) -c -c recherche dans cette etoile du sommet offrant la meilleure qualite -c du triangle ns1-ns2 ns3 sans intersection avec le contour ferme -c ================================================================== - nar3 = nar - qmima = -1 -c -c parcours des sommets possibles ns3 - 10 nar3 = noarcf( 2, nar3 ) - if( nar3 .ne. nar0 ) then -c -c il existe un sommet ns3 different de ns1 et ns2 - ns3 = noarcf( 1, nar3 ) -c -c les aretes ns1-ns3 et ns2-ns3 intersectent-elles une arete -c du contour ferme ? -c ---------------------------------------------------------- -c intersection de l'arete ns2-ns3 et des aretes du cf -c jusqu'au sommet ns3 - nar1 = noarcf( 2, nar ) -c - 15 if( nar1 .ne. nar3 .and. noarcf( 2, nar1 ) .ne. nar3 ) then -c l'arete suivante - nar2 = noarcf( 2, nar1 ) -c le numero des 2 sommets de l'arete - np1 = noarcf( 1, nar1 ) - np2 = noarcf( 1, nar2 ) - call int2ar( pxyd(1,ns2), pxyd(1,ns3), - % pxyd(1,np1), pxyd(1,np2), oui ) - if( oui ) goto 10 -c les 2 aretes ne s'intersectent pas entre leurs sommets - nar1 = nar2 - goto 15 - endif -c -c intersection de l'arete ns3-ns1 et des aretes du cf -c jusqu'au sommet de l'arete nar0 - nar1 = noarcf( 2, nar3 ) -c - 18 if( nar1 .ne. nar0 .and. noarcf( 2, nar1 ) .ne. nar0 ) then -c l'arete suivante - nar2 = noarcf( 2, nar1 ) -c le numero des 2 sommets de l'arete - np1 = noarcf( 1, nar1 ) - np2 = noarcf( 1, nar2 ) - call int2ar( pxyd(1,ns1), pxyd(1,ns3), - % pxyd(1,np1), pxyd(1,np2), oui ) - if( oui ) goto 10 -c les 2 aretes ne s'intersectent pas entre leurs sommets - nar1 = nar2 - goto 18 - endif -c -c le triangle ns1-ns2-ns3 n'intersecte pas une arete du contour ferme -c le calcul de la surface du triangle - dd = surtd2( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3) ) - if( dd .le. 0d0 ) then -c surface negative => triangle a rejeter - q = 0 - else -c calcul de la qualite du triangle ns1-ns2-ns3 - call qutr2d( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3), q ) - endif -c - if( q .ge. qmima*1.00001 ) then -c q est un vrai maximum de la qualite - qmima = q - nbmin = 1 - larmin(1) = nar3 - else if( q .ge. qmima*0.999998 ) then -c q est voisin de qmima -c il est empile - nbmin = nbmin + 1 - larmin( nbmin ) = nar3 - endif - goto 10 - endif -c -c bilan : existe t il plusieurs sommets de meme qualite? -c ====================================================== - if( nbmin .gt. 1 ) then -c -c oui:recherche de ceux de cercle ne contenant pas d'autres sommets - do 80 i=1,nbmin -c le sommet - nar = larmin( i ) - if( nar .le. 0 ) goto 80 - ns3 = noarcf(1,nar) -c les coordonnees du centre du cercle circonscrit -c et son rayon - ier = -1 - call cenced( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3), - % centre, ier ) - if( ier .ne. 0 ) then -c le sommet ns3 ne convient pas - larmin( i ) = 0 - goto 80 - endif - rayon = centre(3) * unpeps - do 70 j=1,nbmin - if( j .ne. i ) then -c l'autre sommet - nar1 = larmin(j) - if( nar1 .le. 0 ) goto 70 - ns4 = noarcf(1,nar1) -c appartient t il au cercle ns1 ns2 ns3 ? - dd = (centre(1)-pxyd(1,ns4))**2 + - % (centre(2)-pxyd(2,ns4))**2 - if( dd .le. rayon ) then -c ns4 est dans le cercle circonscrit ns1 ns2 ns3 -c le sommet ns3 ne convient pas - larmin( i ) = 0 - goto 80 - endif - endif - 70 continue - 80 continue -c -c existe t il plusieurs sommets ? - j = 0 - do 90 i=1,nbmin - if( larmin( i ) .gt. 0 ) then -c compactage des min - j = j + 1 - larmin(j) = larmin(i) - endif - 90 continue -c - if( j .gt. 1 ) then -c oui : choix du plus petit rayon de cercle circonscrit - dmima = dmaxim - do 120 i=1,nbmin - ns3 = noarcf(1,larmin(i)) -c -c les coordonnees du centre de cercle circonscrit -c au triangle nt et son rayon - ier = -1 - call cenced( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3), - % centre, ier ) - if( ier .ne. 0 ) then -c le sommet ns3 ne convient pas - goto 120 - endif - rayon = sqrt( centre(3) ) - if( rayon .lt. dmima ) then - dmima = rayon - larmin(1) = larmin(i) - endif - 120 continue - endif - endif -c -c le choix final -c ============== - namin = larmin(1) -c -c recherche de l'arete avant namin ( nar0 <> namin ) -c ================================================== - nar1 = nar0 - 200 if( nar1 .ne. namin ) then - namin0 = nar1 - nar1 = noarcf( 2, nar1 ) - goto 200 - endif - end - - subroutine trcf0a( nbcf, na01, na1, na2, na3, - % noar1, noar2, noar3, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, noarst, - % mxarcf, n1arcf, noarcf, nt ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : modification de la triangulation du contour ferme nbcf -c ----- par ajout d'un triangle ayant 0 arete sur le contour -c creation des 3 aretes dans le tableau nosoar -c modification du contour par ajout de la 3-eme arete -c creation d'un contour ferme a partir de la seconde arete -c -c entrees: -c -------- -c nbcf : numero dans n1arcf du cf traite ici -c na01 : numero noarcf de l'arete precedent l'arete na1 de noarcf -c na1 : numero noarcf du 1-er sommet du triangle -c implicitement l'arete na1 n'est pas une arete du triangle -c na2 : numero noarcf du 2-eme sommet du triangle -c implicitement l'arete na1 n'est pas une arete du triangle -c na3 : numero noarcf du 3-eme sommet du triangle -c implicitement l'arete na1 n'est pas une arete du triangle -c -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c moartr : nombre maximal d'entiers par arete du tableau noartr -c -c entrees et sorties : -c -------------------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = nosoar(1)+nosoar(2)*2 -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c -c noarst : noarst(i) numero d'une arete de sommet i -c n1arcf : numero d'une arete de chaque contour -c noarcf : numero des aretes de la ligne du contour ferme -c attention : chainage circulaire des aretes -c -c sortie : -c -------- -c noar1 : numero dans le tableau nosoar de l'arete 1 du triangle -c noar2 : numero dans le tableau nosoar de l'arete 2 du triangle -c noar3 : numero dans le tableau nosoar de l'arete 3 du triangle -c nt : numero du triangle ajoute dans noartr -c 0 si saturation du tableau noartr ou noarcf ou n1arcf -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c2345x7..............................................................012 - common / unites / lecteu, imprim, nunite(30) - integer nosoar(mosoar,*), - % noartr(moartr,*), - % noarst(*), - % n1arcf(0:*), - % noarcf(3,*) -c - ierr = 0 -c -c 2 contours fermes peuvent ils etre ajoutes ? - if( nbcf+2 .gt. mxarcf ) goto 9100 -c -c creation des 3 aretes du triangle dans le tableau nosoar -c ======================================================== -c la formation de l'arete sommet1-sommet2 dans le tableau nosoar - call fasoar( noarcf(1,na1), noarcf(1,na2), -1, -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % noar1, ierr ) - if( ierr .ne. 0 ) goto 9900 -c -c la formation de l'arete sommet2-sommet3 dans le tableau nosoar - call fasoar( noarcf(1,na2), noarcf(1,na3), -1, -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % noar2, ierr ) - if( ierr .ne. 0 ) goto 9900 -c -c la formation de l'arete sommet3-sommet1 dans le tableau nosoar - call fasoar( noarcf(1,na3), noarcf(1,na1), -1, -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % noar3, ierr ) - if( ierr .ne. 0 ) goto 9900 -c -c ajout dans noartr de ce triangle nt -c =================================== - call trcf3a( noarcf(1,na1), noarcf(1,na2), noarcf(1,na3), - % noar1, noar2, noar3, - % mosoar, nosoar, - % moartr, n1artr, noartr, - % nt ) - if( nt .le. 0 ) return -c -c modification du contour nbcf existant -c chainage de l'arete na2 vers l'arete na1 -c ======================================== -c modification du cf en pointant na2 sur na1 - na2s = noarcf( 2, na2 ) - noarcf( 2, na2 ) = na1 -c le numero de l'arete dans le tableau nosoar - noar2s = noarcf( 3, na2 ) -c le numero de l'arete dans le tableau nosoar - noarcf( 3, na2 ) = noar1 -c debut du cf - n1arcf( nbcf ) = na2 -c -c creation d'un nouveau contour ferme na2 - na3 -c ============================================= - nbcf = nbcf + 1 -c recherche d'une arete de cf vide - nav = n1arcf(0) - if( nav .le. 0 ) goto 9100 -c la 1-ere arete vide est mise a jour - n1arcf(0) = noarcf( 2, nav ) -c -c ajout de l'arete nav pointant sur na2s -c le numero du sommet - noarcf( 1, nav ) = noarcf( 1, na2 ) -c l'arete suivante - noarcf( 2, nav ) = na2s -c le numero nosoar de cette arete - noarcf( 3, nav ) = noar2s -c -c l'arete na3 se referme sur nav - na3s = noarcf( 2, na3 ) - noarcf( 2, na3 ) = nav -c le numero de l'arete dans le tableau nosoar - noar3s = noarcf( 3, na3 ) - noarcf( 3, na3 ) = noar2 -c debut du cf+1 - n1arcf( nbcf ) = na3 -c -c creation d'un nouveau contour ferme na3 - na1 -c ============================================= - nbcf = nbcf + 1 -c recherche d'une arete de cf vide - nav = n1arcf(0) - if( nav .le. 0 ) goto 9100 -c la 1-ere arete vide est mise a jour - n1arcf(0) = noarcf( 2, nav ) -c -c ajout de l'arete nav pointant sur na3s -c le numero du sommet - noarcf( 1, nav ) = noarcf( 1, na3 ) -c l'arete suivante - noarcf( 2, nav ) = na3s -c le numero de l'arete dans le tableau nosoar - noarcf( 3, nav ) = noar3s -c -c recherche d'une arete de cf vide - nav1 = n1arcf(0) - if( nav1 .le. 0 ) goto 9100 -c la 1-ere arete vide est mise a jour - n1arcf(0) = noarcf( 2, nav1 ) -c -c l'arete precedente na01 de na1 pointe sur la nouvelle nav1 - noarcf( 2, na01 ) = nav1 -c -c ajout de l'arete nav1 pointant sur nav -c le numero du sommet - noarcf( 1, nav1 ) = noarcf( 1, na1 ) -c l'arete suivante - noarcf( 2, nav1 ) = nav -c le numero de l'arete dans le tableau nosoar - noarcf( 3, nav1 ) = noar3 -c -c debut du cf+2 - n1arcf( nbcf ) = nav1 - return -c -c erreur - 9100 write(imprim,*) 'saturation du tableau mxarcf' - nt = 0 - return -c -c erreur tableau nosoar sature - 9900 write(imprim,*) 'saturation du tableau nosoar' - nt = 0 - return - end - - - subroutine trcf1a( nbcf, na01, na1, na2, noar1, noar3, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, noarst, - % mxarcf, n1arcf, noarcf, nt ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : modification de la triangulation du contour ferme nbcf -c ----- par ajout d'un triangle ayant 1 arete sur le contour -c modification du contour par ajout de la 3-eme arete -c creation d'un contour ferme a partir de la seconde arete -c -c entrees: -c -------- -c nbcf : numero dans n1arcf du cf traite ici -c na01 : numero noarcf de l'arete precedant l'arete na1 de noarcf -c na1 : numero noarcf du 1-er sommet du triangle -c implicitement l'arete na1 n'est pas une arete du triangle -c na2 : numero noarcf du 2-eme sommet du triangle -c cette arete est l'arete 2 du triangle a ajouter -c son arete suivante dans noarcf n'est pas sur le contour -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c moartr : nombre maximal d'entiers par arete du tableau noartr -c -c entrees et sorties : -c -------------------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = nosoar(1)+nosoar(2)*2 -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c -c noarst : noarst(i) numero d'une arete de sommet i -c n1arcf : numero d'une arete de chaque contour -c noarcf : numero des aretes de la ligne du contour ferme -c attention : chainage circulaire des aretes -c -c sortie : -c -------- -c noar1 : numero nosoar de l'arete 1 du triangle cree -c noar3 : numero nosoar de l'arete 3 du triangle cree -c nt : numero du triangle ajoute dans notria -c 0 si saturation du tableau notria ou noarcf ou n1arcf -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c2345x7..............................................................012 - common / unites / lecteu, imprim, nunite(30) - integer nosoar(mosoar,mxsoar), - % noartr(moartr,*), - % noarst(*), - % n1arcf(0:*), - % noarcf(3,*) -c -c un cf supplementaire peut il etre ajoute ? - if( nbcf .ge. mxarcf ) then - write(imprim,*) 'saturation du tableau noarcf' - nt = 0 - return - endif -c - ierr = 0 -c -c l' arete suivante du triangle non sur le cf - na3 = noarcf( 2, na2 ) -c -c creation des 2 nouvelles aretes du triangle dans le tableau nosoar -c ================================================================== -c la formation de l'arete sommet1-sommet2 dans le tableau nosoar - call fasoar( noarcf(1,na1), noarcf(1,na2), -1, -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % noar1, ierr ) - if( ierr .ne. 0 ) goto 9900 -c -c la formation de l'arete sommet1-sommet3 dans le tableau nosoar - call fasoar( noarcf(1,na3), noarcf(1,na1), -1, -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % noar3, ierr ) - if( ierr .ne. 0 ) goto 9900 -c -c le triangle nt de noartr a l'arete 2 comme arete du contour na2 -c =============================================================== - call trcf3a( noarcf(1,na1), noarcf(1,na2), noarcf(1,na3), - % noar1, noarcf(3,na2), noar3, - % mosoar, nosoar, - % moartr, n1artr, noartr, - % nt ) - if( nt .le. 0 ) return -c -c modification du contour ferme existant -c suppression de l'arete na2 du cf -c ====================================== -c modification du cf en pointant na2 sur na1 - noarcf( 2, na2 ) = na1 - noarcf( 3, na2 ) = noar1 -c debut du cf - n1arcf( nbcf ) = na2 -c -c creation d'un nouveau contour ferme na3 - na1 -c ============================================= - nbcf = nbcf + 1 -c -c recherche d'une arete de cf vide - nav = n1arcf(0) - if( nav .le. 0 ) then - write(imprim,*) 'saturation du tableau noarcf' - nt = 0 - return - endif -c -c la 1-ere arete vide est mise a jour - n1arcf(0) = noarcf( 2, nav ) -c -c ajout de l'arete nav pointant sur na3 -c le numero du sommet - noarcf( 1, nav ) = noarcf( 1, na1 ) -c l'arete suivante - noarcf( 2, nav ) = na3 -c le numero de l'arete dans le tableau nosoar - noarcf( 3, nav ) = noar3 -c -c l'arete precedente na01 de na1 pointe sur la nouvelle nav - noarcf( 2, na01 ) = nav -c -c debut du cf - n1arcf( nbcf ) = nav - return -c -c erreur tableau nosoar sature - 9900 write(imprim,*) 'saturation du tableau nosoar' - nt = 0 - return - end - - - subroutine trcf2a( nbcf, na1, noar3, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, noarst, - % n1arcf, noarcf, nt ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : modification de la triangulation du contour ferme nbcf -c ----- par ajout d'un triangle ayant 2 aretes sur le contour -c creation d'une arete dans nosoar (sommet3-sommet1) -c et modification du contour par ajout de la 3-eme arete -c -c entrees: -c -------- -c nbcf : numero dans n1arcf du cf traite ici -c na1 : numero noarcf de la premiere arete sur le contour -c implicitement sa suivante est sur le contour -c la suivante de la suivante n'est pas sur le contour -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c moartr : nombre maximal d'entiers par arete du tableau noartr -c -c entrees et sorties : -c -------------------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = nosoar(1)+nosoar(2)*2 -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c -c noarst : noarst(i) numero d'une arete de sommet i -c n1arcf : numero d'une arete de chaque contour -c noarcf : numero des aretes de la ligne du contour ferme -c attention : chainage circulaire des aretes -c -c sortie : -c -------- -c noar3 : numero de l'arete 3 dans le tableau nosoar -c nt : numero du triangle ajoute dans noartr -c 0 si saturation du tableau noartr ou nosoar -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c2345x7..............................................................012 - common / unites / lecteu, imprim, nunite(30) - integer nosoar(mosoar,*), - % noartr(moartr,*), - % noarst(*) - integer n1arcf(0:*), - % noarcf(3,*) -c - ierr = 0 -c -c l'arete suivante de l'arete na1 dans noarcf - na2 = noarcf( 2, na1 ) -c l'arete suivante de l'arete na2 dans noarcf - na3 = noarcf( 2, na2 ) -c -c la formation de l'arete sommet3-sommet1 dans le tableau nosoar - call fasoar( noarcf(1,na3), noarcf(1,na1), -1, -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % noar3, ierr ) - if( ierr .ne. 0 ) then - if( ierr .eq. 1 ) then - write(imprim,*) 'saturation des aretes (tableau nosoar)' - endif - nt = 0 - return - endif -c -c le triangle a ses 2 aretes na1 na2 sur le contour ferme -c ajout dans noartr de ce triangle nt - call trcf3a( noarcf(1,na1), noarcf(1,na2), noarcf(1,na3), - % noarcf(3,na1), noarcf(3,na2), noar3, - % mosoar, nosoar, - % moartr, n1artr, noartr, - % nt ) - if( nt .le. 0 ) return -c -c suppression des 2 aretes (na1 na2) du cf -c ces 2 aretes se suivent dans le chainage du cf -c ajout de la 3-eme arete (noar3) dans le cf -c l'arete suivante de na1 devient la suivante de na2 - noarcf(2,na1) = na3 - noarcf(3,na1) = noar3 -c -c l'arete na2 devient vide dans noarcf - noarcf(2,na2) = n1arcf( 0 ) - n1arcf( 0 ) = na2 -c -c la premiere pointee dans noarcf est na1 -c chainage circulaire => ce peut etre n'importe laquelle - n1arcf(nbcf) = na1 - end - - - subroutine trcf3a( ns1, ns2, ns3, - % noar1, noar2, noar3, - % mosoar, nosoar, - % moartr, n1artr, noartr, - % nt ) -c++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : ajouter dans le tableau noartr le triangle -c ----- de sommets ns1 ns2 ns3 -c d'aretes noar1 noar2 noar3 deja existantes -c dans le tableau nosoar des aretes -c -c entrees: -c -------- -c ns1, ns2, ns3 : le numero dans pxyd des 3 sommets du triangle -c noar1,noar2,noar3 : le numero dans nosoar des 3 aretes du triangle -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxartr : nombre maximal de triangles stockables dans le tableau noartr -c -c modifies : -c ---------- -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = nosoar(1)+nosoar(2)*2 -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c -c sorties: -c -------- -c nt : numero dans noartr du triangle ajoute -c =0 si le tableau noartr est sature -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - common / unites / lecteu,imprim,nunite(30) - integer nosoar(mosoar,*), - % noartr(moartr,*) -c -c recherche d'un triangle libre dans le tableau noartr - if( n1artr .le. 0 ) then - write(imprim,*) 'saturation du tableau noartr des aretes' - nt = 0 - return - endif -c -c le numero dans noartr du nouveau triangle - nt = n1artr -c -c le nouveau premier triangle vide dans le tableau noartr - n1artr = noartr(2,n1artr) -c -c arete 1 du triangle nt -c ====================== -c orientation des 3 aretes du triangle pour qu'il soit direct - if( ns1 .eq. nosoar(1,noar1) ) then - n = 1 - else - n = -1 - endif -c le numero de l'arete 1 du triangle nt - noartr(1,nt) = n * noar1 -c -c le numero du triangle nt pour l'arete - if( nosoar(4,noar1) .le. 0 ) then - n = 4 - else - n = 5 - endif - nosoar(n,noar1) = nt -c -c arete 2 du triangle nt -c ====================== -c orientation des 3 aretes du triangle pour qu'il soit direct - if( ns2 .eq. nosoar(1,noar2) ) then - n = 1 - else - n = -1 - endif -c le numero de l'arete 2 du triangle nt - noartr(2,nt) = n * noar2 -c -c le numero du triangle nt pour l'arete - if( nosoar(4,noar2) .le. 0 ) then - n = 4 - else - n = 5 - endif - nosoar(n,noar2) = nt -c -c arete 3 du triangle nt -c ====================== -c orientation des 3 aretes du triangle pour qu'il soit direct - if( ns3 .eq. nosoar(1,noar3) ) then - n = 1 - else - n = -1 - endif -c le numero de l'arete 3 du triangle nt - noartr(3,nt) = n * noar3 -c -c le numero du triangle nt pour l'arete - if( nosoar(4,noar3) .le. 0 ) then - n = 4 - else - n = 5 - endif - nosoar(n,noar3) = nt - end - - - - subroutine trcf3s( nbcf, na01, na1, na02, na2, na03, na3, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, noarst, - % mxarcf, n1arcf, noarcf, nt ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : ajout d'un triangle d'aretes na1 2 3 du tableau noarcf -c ----- a la triangulation d'un contour ferme (cf) -c -c entrees: -c -------- -c nbcf : numero dans n1arcf du cf traite ici -c mais aussi nombre actuel de cf avant ajout du triangle -c na01 : numero noarcf de l'arete precedent l'arete na1 de noarcf -c na1 : numero noarcf du 1-er sommet du triangle -c na02 : numero noarcf de l'arete precedent l'arete na2 de noarcf -c na2 : numero noarcf du 2-eme sommet du triangle -c na03 : numero noarcf de l'arete precedent l'arete na3 de noarcf -c na3 : numero noarcf du 3-eme sommet du triangle -c -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxarcf : nombre maximal d'aretes declarables dans noarcf, n1arcf -c -c modifies: -c --------- -c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar -c chainage des vides suivant en 3 et precedant en 2 de nosoar -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = nosoar(1)+nosoar(2)*2 -c avec mxsoar>=3*mxsomm -c une arete i de nosoar est vide <=> nosoar(1,i)=0 et -c nosoar(2,arete vide)=l'arete vide qui precede -c nosoar(3,arete vide)=l'arete vide qui suit -c -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c noarst : noarst(i) numero d'une arete de sommet i -c -c n1arcf : numero d'une arete de chaque contour ferme -c noarcf : numero du sommet , numero de l'arete suivante -c numero de l'arete dans le tableau nosoar -c attention : chainage circulaire des aretes -c -c sortie : -c -------- -c nbcf : nombre actuel de cf apres ajout du triangle -c nt : numero du triangle ajoute dans noartr -c 0 si saturation du tableau nosoar ou noartr ou noarcf ou n1arcf -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c2345x7..............................................................012 - integer nosoar(mosoar,*), - % noartr(moartr,*), - % noarst(*), - % n1arcf(0:mxarcf), - % noarcf(3,mxarcf) -c -c combien y a t il d'aretes nbascf sur le cf ? -c ============================================ -c la premiere arete est elle sur le cf? - if( noarcf(2,na1) .eq. na2 ) then -c la 1-ere arete est sur le cf - na1cf = 1 - else -c la 1-ere arete n'est pas sur le cf - na1cf = 0 - endif -c -c la seconde arete est elle sur le cf? - if( noarcf(2,na2) .eq. na3 ) then -c la 2-eme arete est sur le cf - na2cf = 1 - else - na2cf = 0 - endif -c -c la troisieme arete est elle sur le cf? - if( noarcf(2,na3) .eq. na1 ) then -c la 3-eme arete est sur le cf - na3cf = 1 - else - na3cf = 0 - endif -c -c le nombre d'aretes sur le cf - nbascf = na1cf + na2cf + na3cf -c -c traitement selon le nombre d'aretes sur le cf -c ============================================= - if( nbascf .eq. 3 ) then -c -c le contour ferme se reduit a un triangle avec 3 aretes sur le cf -c ---------------------------------------------------------------- -c ajout dans noartr de ce nouveau triangle - call trcf3a( noarcf(1,na1), noarcf(1,na2), noarcf(1,na3), - % noarcf(3,na1), noarcf(3,na2), noarcf(3,na3), - % mosoar, nosoar, - % moartr, n1artr, noartr, - % nt ) - if( nt .le. 0 ) return -c -c le cf est supprime et chaine vide - noarcf(2,na3) = n1arcf(0) - n1arcf( 0 ) = na1 -c -c ce cf a ete traite => un cf de moins a traiter - nbcf = nbcf - 1 -c - else if( nbascf .eq. 2 ) then -c -c le triangle a 2 aretes sur le contour -c ------------------------------------- -c les 2 aretes sont la 1-ere et 2-eme du triangle - if( na1cf .eq. 0 ) then -c l'arete 1 n'est pas sur le cf - naa1 = na2 - else if( na2cf .eq. 0 ) then -c l'arete 2 n'est pas sur le cf - naa1 = na3 - else -c l'arete 3 n'est pas sur le cf - naa1 = na1 - endif -c le triangle oppose a l'arete 3 est inconnu -c modification du contour apres integration du -c triangle ayant ses 2-eres aretes sur le cf - call trcf2a( nbcf, naa1, naor3, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, noarst, - % n1arcf, noarcf, nt ) -c - else if( nbascf .eq. 1 ) then -c -c le triangle a 1 arete sur le contour -c ------------------------------------ -c cette arete est la seconde du triangle - if( na3cf .ne. 0 ) then -c l'arete 3 est sur le cf - naa01 = na02 - naa1 = na2 - naa2 = na3 - else if( na1cf .ne. 0 ) then -c l'arete 1 est sur le cf - naa01 = na03 - naa1 = na3 - naa2 = na1 - else -c l'arete 2 est sur le cf - naa01 = na01 - naa1 = na1 - naa2 = na2 - endif -c le triangle oppose a l'arete 1 et 3 est inconnu -c modification du contour apres integration du -c triangle ayant 1 arete sur le cf avec creation -c d'un nouveau contour ferme - call trcf1a( nbcf, naa01, naa1, naa2, naor1, naor3, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, noarst, - % mxarcf, n1arcf, noarcf, nt ) -c - else -c -c le triangle a 0 arete sur le contour -c ------------------------------------ -c modification du contour apres integration du -c triangle ayant 0 arete sur le cf avec creation -c de 2 nouveaux contours fermes - call trcf0a( nbcf, na01, na1, na2, na3, - % naa1, naa2, naa01, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, noarst, - % mxarcf, n1arcf, noarcf, nt ) - endif - end - - - subroutine tridcf( nbcf0, pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, - % mxarcf, n1arcf, noarcf, larmin, - % nbtrcf, notrcf, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : triangulation directe de nbcf0 contours fermes (cf) -c ----- definis par la liste circulaire de leurs aretes peripheriques -c -c entrees: -c -------- -c nbcf0 : nombre initial de cf a trianguler -c pxyd : tableau des coordonnees 2d des points -c par point : x y distance_souhaitee -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxarcf : nombre maximal d'aretes declarables dans noarcf, n1arcf, larmin, not -c -c modifies: -c --------- -c noarst : noarst(i) numero d'une arete de sommet i -c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar -c chainage des vides suivant en 3 et precedant en 2 de nosoar -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = nosoar(1)+nosoar(2)*2 -c avec mxsoar>=3*mxsomm -c une arete i de nosoar est vide <=> nosoar(1,i)=0 et -c nosoar(2,arete vide)=l'arete vide qui precede -c nosoar(3,arete vide)=l'arete vide qui suit -c -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c -c n1arcf : numero de la premiere arete de chacun des nbcf0 cf -c n1arcf(0) no de la premiere arete vide du tableau noarcf -c noarcf(2,i) no de l'arete suivante -c noarcf : numero du sommet , numero de l'arete suivante du cf -c numero de l'arete dans le tableau nosoar -c -c auxiliaires : -c ------------- -c larmin : tableau (mxarcf) auxiliaire -c stocker la liste des numeros des meilleures aretes -c lors de la selection du meilleur sommet du cf a trianguler -c cf le sp trchtd -c -c sortie : -c -------- -c nbtrcf : nombre de triangles des nbcf0 cf -c notrcf : numero des triangles des nbcf0 cf dans le tableau noartr -c ierr : 0 si pas d'erreur -c 2 saturation de l'un des des tableaux nosoar, noartr, ... -c 3 si contour ferme reduit a moins de 3 aretes -c 4 saturation du tableau notrcf -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - common / unites / lecteu, imprim, nunite(30) - double precision pxyd(3,*) - integer noartr(moartr,*), - % nosoar(mosoar,mxsoar), - % noarst(*), - % n1arcf(0:mxarcf), - % noarcf(3,mxarcf), - % larmin(mxarcf), - % notrcf(mxarcf) -c -ccc integer nosotr(3) -ccc double precision d, surtd2 -c -c depart avec nbcf0 cf a trianguler - nbcf = nbcf0 -c -c le nombre de triangles formes dans l'ensemble des cf - nbtrcf = 0 -c -c tant qu'il existe un cf a trianguler faire -c la triangulation directe du cf -c ========================================== - 10 if( nbcf .gt. 0 ) then -c -c le cf en haut de pile a pour premiere arete - na01 = n1arcf( nbcf ) - na1 = noarcf( 2, na01 ) -c -c choix du sommet du cf a relier a l'arete na1 -c -------------------------------------------- - call trchtd( pxyd, na01, na1, noarcf, - % na03, na3, larmin ) - if( na3 .eq. 0 ) then - ierr = 3 - return - endif -c -c l'arete suivante de na1 - na02 = na1 - na2 = noarcf( 2, na1 ) -c -c formation du triangle arete na1 - sommet noarcf(1,na3) -c ------------------------------------------------------ - call trcf3s( nbcf, na01, na1, na02, na2, na03, na3, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, noarst, - % mxarcf, n1arcf, noarcf, nt ) - if( nt .le. 0 ) then -c saturation du tableau noartr ou noarcf ou n1arcf - ierr = 2 - return - endif -c -c ajout du triangle cree a sa pile - if( nbtrcf .ge. mxarcf ) then - write(imprim,*) 'saturation du tableau notrcf' - ierr = 4 - return - endif - nbtrcf = nbtrcf + 1 - notrcf( nbtrcf ) = nt - goto 10 - endif -c -c mise a jour du chainage des triangles des aretes -c ================================================ - do 30 ntp0 = 1, nbtrcf -c -c le numero du triangle ajoute dans le tableau noartr - nt0 = notrcf( ntp0 ) -c -cccc aire signee du triangle nt0 -cccc le numero des 3 sommets du triangle nt -ccc call nusotr( nt0, mosoar, nosoar, moartr, noartr, -ccc % nosotr ) -ccc d = surtd2( pxyd(1,nosotr(1)), pxyd(1,nosotr(2)), -ccc % pxyd(1,nosotr(3)) ) -ccc if( d .le. 0 ) then -cccc -cccc un triangle d'aire negative de plus -ccc write(imprim,*) 'triangle ',nt0,' st:',nosotr, -ccc % ' d aire ',d,'<=0' -ccc pause -ccc endif -c -cccc trace du triangle nt0 -ccc call mttrtr( pxyd, nt0, moartr, noartr, mosoar, nosoar, -ccc % ncturq, ncblan ) -c -c boucle sur les 3 aretes du triangle - do 20 i=1,3 -c -c le numero de l'arete i du triangle dans le tableau nosoar - noar = abs( noartr(i,nt0) ) -c -c ce triangle est il deja chaine dans cette arete? - nt1 = nosoar(4,noar) - nt2 = nosoar(5,noar) - if( nt1 .eq. nt0 .or. nt2 .eq. nt0 ) goto 20 -c -c ajout de ce triangle nt0 a l'arete noar - if( nt1 .le. 0 ) then -c le triangle est ajoute a l'arete - nosoar( 4, noar ) = nt0 - else if( nt2 .le. 0 ) then -c le triangle est ajoute a l'arete - nosoar( 5, noar ) = nt0 - else -c l'arete appartient a 2 triangles differents de nt0 -c anomalie. chainage des triangles des aretes defectueux -c a corriger - write(imprim,*) 'pause dans tridcf' - ierr = 5 - return - endif -c - 20 continue -c - 30 continue - end - - - subroutine te1stm( nsasup, pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % mxarcf, n1arcf, noarcf, larmin, notrcf, liarcf, - % ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : supprimer de la triangulation le sommet nsasup qui doit -c ----- etre un sommet interne ("centre" d'une boule de triangles) -c -c attention: le chainage lchain de nosoar devient celui des cf -c -c entrees: -c -------- -c nsasup : numero dans le tableau pxyd du sommet a supprimer -c pxyd : tableau des coordonnees 2d des points -c par point : x y distance_souhaitee -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxarcf : nombre de variables des tableaux n1arcf, noarcf, larmin, notrcf -c -c modifies: -c --------- -c noarst : noarst(i) numero d'une arete de sommet i -c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar -c chainage des vides suivant en 3 et precedant en 2 de nosoar -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = nosoar(1)+nosoar(2)*2 -c avec mxsoar>=3*mxsomm -c une arete i de nosoar est vide <=> nosoar(1,i)=0 et -c nosoar(2,arete vide)=l'arete vide qui precede -c nosoar(3,arete vide)=l'arete vide qui suit -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c -c -c auxiliaires : -c ------------- -c n1arcf : tableau (0:mxarcf) auxiliaire d'entiers -c noarcf : tableau (3,mxarcf) auxiliaire d'entiers -c larmin : tableau ( mxarcf ) auxiliaire d'entiers -c notrcf : tableau ( mxarcf ) auxiliaire d'entiers -c liarcf : tableau ( mxarcf ) auxiliaire d'entiers -c -c sortie : -c -------- -c ierr : =0 si pas d'erreur -c -1 le sommet a supprimer n'est pas le centre d'une boule -c de triangles. il est suppose externe -c ou bien le sommet est centre d'un cf dont toutes les -c aretes sont frontalieres -c dans les 2 cas => retour sans modifs -c >0 si une erreur est survenue -c =11 algorithme defaillant -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - parameter ( lchain=6, quamal=0.3) - common / unites / lecteu,imprim,intera,nunite(29) - double precision pxyd(3,*) - integer nosoar(mosoar,mxsoar), - % noartr(moartr,*), - % noarst(*), - % n1arcf(0:mxarcf), - % noarcf(3,mxarcf), - % larmin(mxarcf), - % notrcf(mxarcf), - % liarcf(mxarcf) -c -c nsasup est il un sommet interne, "centre" d'une boule de triangles? -c => le sommet nsasup peut etre supprime -c =================================================================== -c formation du cf de ''centre'' le sommet nsasup - call trp1st( nsasup, noarst, mosoar, nosoar, - % moartr, noartr, - % mxarcf, nbtrcf, notrcf ) - if( nbtrcf .le. 0 ) then -c erreur: impossible de trouver tous les triangles de sommet nsasup -c le sommet nsasup n'est pas supprime de la triangulation - ierr = -1 - return - else if( nbtrcf .le. 2 ) then -c le sommet nsasup n'est pas supprime - ierr = -1 - return - endif - if( nbtrcf*3 .gt. mxarcf ) then - write(imprim,*) 'saturation du tableau noarcf' - ierr = 10 - return - endif -c -ccc trace des triangles de l'etoile du sommet nsasup -ccc call trpltr( nbtrcf, notrcf, pxyd, -ccc % moartr, noartr, mosoar, nosoar, -ccc % ncroug, ncblan ) -c -c si toutes les aretes du cf sont frontalieres, alors il est -c interdit de detruire le sommet "centre" du cf -c calcul du nombre nbarfr des aretes simples des nbtrcf triangles - call trfrcf( nsasup, mosoar, nosoar, moartr, noartr, - % nbtrcf, notrcf, nbarfr ) - if( nbarfr .ge. nbtrcf ) then -c toutes les aretes simples sont frontalieres -c le sommet nsasup ("centre" de la cavite) n'est pas supprime - ierr = -1 - return - endif -c -c formation du contour ferme (liste chainee des aretes simples) -c forme a partir des aretes des triangles de l'etoile du sommet nsasup - call focftr( nbtrcf, notrcf, pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, - % nbarcf, n1arcf, noarcf, - % ierr ) - if( ierr .ne. 0 ) return -c -c ici le sommet nsasup appartient a aucune arete - noarst( nsasup ) = 0 -c -c chainage des aretes vides dans le tableau noarcf - n1arcf(0) = nbarcf+1 - mmarcf = min(8*nbarcf,mxarcf) - do 40 i=nbarcf+1,mmarcf - noarcf(2,i) = i+1 - 40 continue - noarcf(2,mmarcf) = 0 -c -c sauvegarde du chainage des aretes peripheriques -c pour la mise en delaunay du maillage - nbcf = n1arcf(1) - do 50 i=1,nbarcf -c le numero de l'arete dans le tableau nosoar - liarcf( i ) = noarcf( 3, nbcf ) -c l'arete suivante dans le cf - nbcf = noarcf( 2, nbcf ) - 50 continue -c -c triangulation directe du contour ferme sans le sommet nsasup -c ============================================================ - nbcf = 1 - call tridcf( nbcf, pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, - % mxarcf, n1arcf, noarcf, larmin, - % nbtrcf, notrcf, ierr ) - if( ierr .ne. 0 ) return -c -c transformation des triangles du cf en triangles delaunay -c ======================================================== -c construction du chainage lchain dans nosoar -c des aretes peripheriques du cf a partir de la sauvegarde liarcf - noar0 = liarcf(1) - do 60 i=2,nbarcf -c le numero de l'arete peripherique du cf dans nosoar - noar = liarcf( i ) - if( nosoar(3,noar) .le. 0 ) then -c arete interne => elle est chainee a partir de la precedente - nosoar( lchain, noar0 ) = noar - noar0 = noar - endif - 60 continue -c la derniere arete peripherique n'a pas de suivante - nosoar(lchain,noar0) = 0 -c -c mise en delaunay des aretes chainees - call tedela( pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, liarcf(1), - % moartr, mxartr, n1artr, noartr, modifs ) -ccc write(imprim,*) 'nombre echanges diagonales =',modifs - return - end - - - subroutine tr3str( np, nt, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % noarst, - % nutr, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : former les 3 sous-triangles du triangle nt a partir -c ----- du point interne np -c -c entrees: -c -------- -c np : numero dans le tableau pxyd du point -c nt : numero dans le tableau noartr du triangle a trianguler -c mosoar : nombre maximal d'entiers par arete du tableau nosoar -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxartr : nombre maximal de triangles stockables dans le tableau noartr -c -c modifies: -c --------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c nosoar : numero des 2 sommets , no ligne, 2 triangles, chainages -c sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante -c hachage des aretes = (nosoar(1)+nosoar(2)) modulo mxsoar -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c noarst : noarst(i) numero d'une arete de sommet i -c -c sorties: -c -------- -c nutr : le numero des 3 sous-triangles du triangle nt -c nt : en sortie le triangle initial n'est plus actif dans noartr -c c'est en fait le premier triangle vide de noartr -c ierr : =0 si pas d'erreur -c =1 si le tableau nosoar est sature -c =2 si le tableau noartr est sature -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - integer nosoar(mosoar,mxsoar), - % noartr(moartr,mxartr), - % noarst(*), - % nutr(3) -c - integer nosotr(3), nu2sar(2), nuarco(3) -c -c reservation des 3 nouveaux triangles dans le tableau noartr -c =========================================================== - do 10 i=1,3 -c le numero du sous-triangle i dans le tableau noartr - if( n1artr .le. 0 ) then -c tableau noartr sature - ierr = 2 - return - endif - nutr(i) = n1artr -c le nouveau premier triangle libre dans noartr - n1artr = noartr(2,n1artr) - 10 continue -c -c les numeros des 3 sommets du triangle nt - call nusotr( nt, mosoar, nosoar, moartr, noartr, nosotr ) -c -c formation des 3 aretes nosotr(i)-np dans le tableau nosoar -c ========================================================== - nt0 = nutr(3) - do 20 i=1,3 -c -c le triangle a creer - nti = nutr(i) -c -c les 2 sommets du cote i du triangle nosotr - nu2sar(1) = nosotr(i) - nu2sar(2) = np - call hasoar( mosoar, mxsoar, n1soar, nosoar, nu2sar, noar ) -c en sortie: noar>0 => no arete retrouvee -c <0 => no arete ajoutee -c =0 => saturation du tableau nosoar -c - if( noar .eq. 0 ) then -c saturation du tableau nosoar - ierr = 1 - return - else if( noar .lt. 0 ) then -c l'arete a ete ajoutee. initialisation des autres informations - noar = -noar -c le numero des 2 sommets a ete initialise par hasoar -c et (nosoar(1,noar) le triangle nt0 - nosoar(4,noar) = nt0 -c le triangle 2 de l'arete noar => le triangle nti - nosoar(5,noar) = nti -c -c le sommet nosotr(i) appartient a l'arete noar - noarst( nosotr(i) ) = noar -c -c le numero d'arete nosotr(i)-np - nuarco(i) = noar -c -c le triangle qui precede le suivant - nt0 = nti - 20 continue -c -c le numero d'une arete du point np - noarst( np ) = noar -c -c les 3 sous-triangles du triangle nt sont formes dans le tableau noartr -c ====================================================================== - do 30 i=1,3 -c -c le numero suivant i => i mod 3 + 1 - if( i .ne. 3 ) then - i1 = i + 1 - else - i1 = 1 - endif -c -c le numero dans noartr du sous-triangle a ajouter - nti = nutr( i ) -c -c le numero de l'arete i du triangle initial nt -c est l'arete 1 du sous-triangle i - noar = noartr(i,nt) - noartr( 1, nti ) = noar -c -c mise a jour du numero de triangle de cette arete - noar = abs( noar ) - if( nosoar(4,noar) .eq. nt ) then -c le sous-triangle nti remplace le triangle nt - nosoar(4,noar) = nti - else -c le sous-triangle nti remplace le triangle nt - nosoar(5,noar) = nti - endif -c -c l'arete 2 du sous-triangle i est l'arete i1 ajoutee - if( nosotr(i1) .eq. nosoar(1,nuarco(i1)) ) then -c l'arete ns i1-np dans nosoar est dans le sens direct - noartr( 2, nti ) = nuarco(i1) - else -c l'arete ns i1-np dans nosoar est dans le sens indirect - noartr( 2, nti ) = -nuarco(i1) - endif -c -c l'arete 3 du sous-triangle i est l'arete i ajoutee - if( nosotr(i) .eq. nosoar(1,nuarco(i)) ) then -c l'arete ns i1-np dans nosoar est dans le sens indirect - noartr( 3, nti ) = -nuarco(i) - else -c l'arete ns i1-np dans nosoar est dans le sens direct - noartr( 3, nti ) = nuarco(i) - endif - 30 continue -c -c le triangle nt est rendu libre -c ============================== -c il devient n1artr le premier triangle libre - noartr( 1, nt ) = 0 - noartr( 2, nt ) = n1artr - n1artr = nt - end - - - subroutine mt4sqa( na, moartr, noartr, mosoar, nosoar, - % ns1, ns2, ns3, ns4) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : calcul du numero des 4 sommets de l'arete na de nosoar -c ----- formant un quadrangle -c -c entrees: -c -------- -c na : numero de l'arete dans nosoar a traiter -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1=0 si triangle vide => arete2=triangle vide suivant -c mosoar : nombre maximal d'entiers par arete -c nosoar : numero des 2 sommets , no ligne, 2 triangles, chainages en + -c sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante -c -c sorties: -c -------- -c ns1,ns2,ns3 : les 3 numeros des sommets du triangle t1 en sens direct -c ns1,ns4,ns2 : les 3 numeros des sommets du triangle t2 en sens direct -c -c si erreur rencontree => ns4 = 0 -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c2345x7..............................................................012 - common / unites / lecteu, imprim, nunite(30) - integer noartr(moartr,*), nosoar(mosoar,*) -c -c le numero de triangle est il correct ? -c a supprimer apres mise au point - if( na .le. 0 ) then -c nblgrc(nrerr) = 1 -c write(kerr(mxlger)(1:6),'(i6)') na -c kerr(1) = kerr(mxlger)(1:6) // -c % ' no incorrect arete dans nosoar' -c call lereur - write(imprim,*) na, ' no incorrect arete dans nosoar' - ns4 = 0 - return - endif -c - if( nosoar(1,na) .le. 0 ) then -c nblgrc(nrerr) = 1 -c write(kerr(mxlger)(1:6),'(i6)') na -c kerr(1) = kerr(mxlger)(1:6) // -c % ' arete non active dans nosoar' -c call lereur - write(imprim,*) na, ' arete non active dans nosoar' - ns4 = 0 - return - endif -c -c recherche de l'arete na dans le premier triangle - nt = nosoar(4,na) - if( nt .le. 0 ) then -c nblgrc(nrerr) = 1 -c write(kerr(mxlger)(1:6),'(i6)') na -c kerr(1) = 'triangle 1 incorrect pour l''arete ' // -c % kerr(mxlger)(1:6) -c call lereur - write(imprim,*) 'triangle 1 incorrect pour l''arete ', na - ns4 = 0 - return - endif -c - do 5 i=1,3 - if( abs( noartr(i,nt) ) .eq. na ) goto 8 - 5 continue -c si arrivee ici => bogue avant - write(imprim,*) 'mt4sqa: arete',na,' non dans le triangle',nt - ns4 = 0 - return -c -c les 2 sommets de l'arete na - 8 if( noartr(i,nt) .gt. 0 ) then - ns1 = 1 - ns2 = 2 - else - ns1 = 2 - ns2 = 1 - endif - ns1 = nosoar(ns1,na) - ns2 = nosoar(ns2,na) -c -c l'arete suivante - if( i .lt. 3 ) then - i = i + 1 - else - i = 1 - endif - naa = abs( noartr(i,nt) ) -c -c le sommet ns3 du triangle 123 - ns3 = nosoar(1,naa) - if( ns3 .eq. ns1 .or. ns3 .eq. ns2 ) then - ns3 = nosoar(2,naa) - endif -c -c le triangle de l'autre cote de l'arete na -c ========================================= - nt = nosoar(5,na) - if( nt .le. 0 ) then -c nblgrc(nrerr) = 1 -c write(kerr(mxlger)(1:6),'(i6)') na -c kerr(1) = 'triangle 2 incorrect pour l''arete ' // -c % kerr(mxlger)(1:6) -c call lereur - write(imprim,*) 'triangle 2 incorrect pour l''arete ',na - ns4 = 0 - return - endif -c -c le numero de l'arete naa du triangle nt - naa = abs( noartr(1,nt) ) - if( naa .eq. na ) naa = abs( noartr(2,nt) ) - ns4 = nosoar(1,naa) - if( ns4 .eq. ns1 .or. ns4 .eq. ns2 ) then - ns4 = nosoar(2,naa) - endif - end - - - subroutine te2t2t( noaret, mosoar, n1soar, nosoar, noarst, - % moartr, noartr, noar34 ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : echanger la diagonale des 2 triangles ayant en commun -c ----- l'arete noaret du tableau nosoar si c'est possible -c -c entrees: -c -------- -c noaret : numero de l'arete a echanger entre les 2 triangles -c mosoar : nombre maximal d'entiers par arete -c moartr : nombre maximal d'entiers par triangle -c -c modifies : -c ---------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c nosoar : numero des 2 sommets , no ligne, 2 triangles, chainages en + -c sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante -c noarst : noarst(i) numero d'une arete de sommet i -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c -c sortie : -c -------- -c noar34 : numero nosoar de la nouvelle arete diagonale -c 0 si pas d'echange des aretes diagonales -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc avril 1997 -c....................................................................012 - integer nosoar(mosoar,*), - % noartr(moartr,*), - % noarst(*) -c -c une arete frontaliere ne peut etre echangee - noar34 = 0 - if( nosoar(3,noaret) .gt. 0 ) return -c -c les 4 sommets des 2 triangles ayant l'arete noaret en commun - call mt4sqa( noaret, moartr, noartr, mosoar, nosoar, - % ns1, ns2, ns3, ns4) -c ns1,ns2,ns3 : les 3 numeros des sommets du triangle nt1 en sens direct -c ns1,ns4,ns2 : les 3 numeros des sommets du triangle nt2 en sens direct -c -c recherche du numero de l'arete noaret dans le triangle nt1 - nt1 = nosoar(4,noaret) - do 10 n1 = 1, 3 - if( abs(noartr(n1,nt1)) .eq. noaret ) goto 15 - 10 continue -c impossible d'arriver ici sans bogue! - write(imprim,*) 'pause dans te2t2t 1' -c -c l'arete de sommets 2 et 3 - 15 if( n1 .lt. 3 ) then - n2 = n1 + 1 - else - n2 = 1 - endif - na23 = noartr(n2,nt1) -c -c l'arete de sommets 3 et 1 - if( n2 .lt. 3 ) then - n3 = n2 + 1 - else - n3 = 1 - endif - na31 = noartr(n3,nt1) -c -c recherche du numero de l'arete noaret dans le triangle nt2 - nt2 = nosoar(5,noaret) - do 20 n1 = 1, 3 - if( abs(noartr(n1,nt2)) .eq. noaret ) goto 25 - 20 continue -c impossible d'arriver ici sans bogue! - write(imprim,*) 'pause dans te2t2t 2' -c -c l'arete de sommets 1 et 4 - 25 if( n1 .lt. 3 ) then - n2 = n1 + 1 - else - n2 = 1 - endif - na14 = noartr(n2,nt2) -c -c l'arete de sommets 4 et 2 - if( n2 .lt. 3 ) then - n3 = n2 + 1 - else - n3 = 1 - endif - na42 = noartr(n3,nt2) -c -c les triangles 123 142 deviennent 143 234 -c ======================================== -c ajout de l'arete ns3-ns4 -c on evite l'affichage de l'erreur - ierr = -1 - call fasoar( ns3, ns4, nt1, nt2, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % noar34, ierr ) - if( ierr .gt. 0 ) then -c ierr=1 si le tableau nosoar est sature -c =2 si arete a creer et appartenant a 2 triangles distincts -c des triangles nt1 et nt2 -c =3 si arete appartenant a 2 triangles distincts -c differents des triangles nt1 et nt2 -c =4 si arete appartenant a 2 triangles distincts -c dont le second n'est pas le triangle nt2 -c => pas d'echange - noar34 = 0 - return - endif -c -c suppression de l'arete noaret - call sasoar( noaret, mosoar, mxsoar, n1soar, nosoar ) -c -c nt1 = triangle 143 - noartr(1,nt1) = na14 -c sens de stockage de l'arete ns3-ns4 dans nosoar? - if( nosoar(1,noar34) .eq. ns3 ) then - n1 = -1 - else - n1 = 1 - endif - noartr(2,nt1) = noar34 * n1 - noartr(3,nt1) = na31 -c -c nt2 = triangle 234 - noartr(1,nt2) = na23 - noartr(2,nt2) = -noar34 * n1 - noartr(3,nt2) = na42 -c -c echange nt1 -> nt2 pour l'arete na23 - na23 = abs( na23 ) - if( nosoar(4,na23) .eq. nt1 ) then - n1 = 4 - else - n1 = 5 - endif - nosoar(n1,na23) = nt2 -c -c echange nt2 -> nt1 pour l'arete na14 - na14 = abs( na14 ) - if( nosoar(4,na14) .eq. nt2 ) then - n1 = 4 - else - n1 = 5 - endif - nosoar(n1,na14) = nt1 -c -c numero d'une arete de chacun des 4 sommets - noarst(ns1) = na14 - noarst(ns2) = na23 - noarst(ns3) = noar34 - noarst(ns4) = noar34 - end - - - - subroutine f0trte( letree, pxyd, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % noarst, - % nbtr, nutr, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : former le ou les triangles du triangle equilateral letree -c ----- les points internes au te deviennent des sommets des -c sous-triangles du te -c -c entrees: -c -------- -c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation -c si letree(0)>0 alors -c letree(0:3) : no (>0) letree des 4 sous-triangles du triangle j -c sinon -c letree(0:3) :-no pxyd des 1 a 4 points internes au triangle j -c 0 si pas de point -c ( le te est une feuille de l'arbre ) -c letree(4) : no letree du sur-triangle du triangle j -c letree(5) : 0 1 2 3 no du sous-triangle j pour son sur-triangle -c letree(6:8) : no pxyd des 3 sommets du triangle j -c pxyd : tableau des x y distance_souhaitee de chaque sommet -c mosoar : nombre maximal d'entiers par arete du tableau nosoar -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxartr : nombre maximal de triangles stockables dans le tableau noartr -c -c modifies: -c --------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = (nosoar(1)+nosoar(2)) modulo mxsoar -c sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c noarst : noarst(i) numero d'une arete de sommet i -c -c sorties: -c -------- -c nbtr : nombre de sous-triangles du te, triangulation du te -c nutr : numero des nbtr sous-triangles du te dans le tableau noartr -c ierr : =0 si pas d'erreur -c =1 si le tableau nosoar est sature -c =2 si le tableau noartr est sature -c =3 si aucun des triangles ne contient l'un des points internes au te -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - common / unites / lecteu, imprim, nunite(30) - double precision pxyd(3,*) - integer letree(0:8), - % nosoar(mosoar,mxsoar), - % noartr(moartr,mxartr), - % noarst(*), - % nutr(1:nbtr) - integer nuarco(3) -c -c le numero nt du triangle dans le tableau noartr - if( n1artr .le. 0 ) then -c tableau noartr sature - write(imprim,*) 'f0trte: tableau noartr sature' - ierr = 2 - return - endif - nt = n1artr -c le numero du nouveau premier triangle libre dans noartr - n1artr = noartr( 2, n1artr ) -c -c formation du triangle = le triangle equilateral letree - do 10 i=1,3 - if( i .ne. 3 ) then - i1 = i + 1 - else - i1 = 1 - endif -c ajout eventuel de l'arete si si+1 dans le tableau nosoar - call fasoar( letree(5+i), letree(5+i1), nt, -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(i), ierr ) - if( ierr .ne. 0 ) return - 10 continue -c -c le triangle nt est forme dans le tableau noartr - do 20 i=1,3 -c letree(5+i) est le numero du sommet 1 de l'arete i du te - if( letree(5+i) .eq. nosoar(1,nuarco(i)) ) then - lesign = 1 - else - lesign = -1 - endif -c l'arete ns1-ns2 dans nosoar est celle du cote du te - noartr( i, nt ) = lesign * nuarco(i) - 20 continue -c -c triangulation du te=triangle nt par ajout des points internes du te - nbtr = 1 - nutr(1) = nt - call trpite( letree, pxyd, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, noarst, - % nbtr, nutr, ierr ) - end - - - subroutine f1trte( letree, pxyd, milieu, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % noarst, - % nbtr, nutr, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : former les triangles du triangle equilateral letree -c ----- a partir de l'un des 3 milieux des cotes du te -c et des points internes au te -c ils deviennent tous des sommets des sous-triangles du te -c -c entrees: -c -------- -c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation -c si letree(0)>0 alors -c letree(0:3) : no (>0) letree des 4 sous-triangles du triangle j -c sinon -c letree(0:3) :-no pxyd des 1 a 4 points internes au triangle j -c 0 si pas de point -c ( le te est une feuille de l'arbre ) -c letree(4) : no letree du sur-triangle du triangle j -c letree(5) : 0 1 2 3 no du sous-triangle j pour son sur-triangle -c letree(6:8) : no pxyd des 3 sommets du triangle j -c pxyd : tableau des x y distance_souhaitee de chaque sommet -c milieu : milieu(i) numero dans pxyd du milieu de l'arete i du te -c 0 si pas de milieu du cote i a ajouter -c mosoar : nombre maximal d'entiers par arete du tableau nosoar -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxartr : nombre maximal de triangles stockables dans le tableau noartr -c -c modifies: -c --------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = (nosoar(1)+nosoar(2)) modulo mxsoar -c sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c noarst : noarst(np) numero d'une arete du sommet np -c -c sorties: -c -------- -c nbtr : nombre de sous-triangles du te, triangulation du te -c nutr : numero des nbtr sous-triangles du te dans le tableau noartr -c ierr : =0 si pas d'erreur -c =1 si le tableau nosoar est sature -c =2 si le tableau noartr est sature -c =3 si aucun des triangles ne contient l'un des points internes au te -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - double precision pxyd(3,*) - integer letree(0:8), - % milieu(3), - % nosoar(mosoar,mxsoar), - % noartr(moartr,mxartr), - % noarst(*), - % nutr(1:nbtr) -c - integer nosotr(3), nuarco(5) -c -c le numero des 2 triangles (=2 demi te) a creer dans le tableau noartr - do 5 nbtr=1,2 - if( n1artr .le. 0 ) then -c tableau noartr sature - ierr = 2 - return - endif - nutr(nbtr) = n1artr -c le nouveau premier triangle libre dans noartr - n1artr = noartr(2,n1artr) - 5 continue - nbtr = 2 -c -c recherche du milieu a creer - do 7 i=1,3 - if( milieu(i) .ne. 0 ) goto 9 - 7 continue -c le numero pxyd du point milieu du cote i - 9 nm = milieu( i ) -c -c on se ramene au seul cas i=3 c-a-d le milieu est sur le cote 3 - if( i .eq. 1 ) then -c milieu sur le cote 1 - nosotr(1) = letree(7) - nosotr(2) = letree(8) - nosotr(3) = letree(6) - else if( i .eq. 2 ) then -c milieu sur le cote 2 - nosotr(1) = letree(8) - nosotr(2) = letree(6) - nosotr(3) = letree(7) - else -c milieu sur le cote 3 - nosotr(1) = letree(6) - nosotr(2) = letree(7) - nosotr(3) = letree(8) - endif -c -c formation des 2 aretes s1 s2 et s2 s3 - do 10 i=1,2 - if( i .ne. 3 ) then - i1 = i + 1 - else - i1 = 1 - endif -c ajout eventuel de l'arete dans nosoar - call fasoar( nosotr(i), nosotr(i1), nutr(i), -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(i), ierr ) - if( ierr .ne. 0 ) return - 10 continue -c -c ajout eventuel de l'arete s3 milieu dans nosoar - call fasoar( nosotr(3), nm, nutr(2), -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(3), ierr ) - if( ierr .ne. 0 ) return -c -c ajout eventuel de l'arete milieu s1 dans nosoar - call fasoar( nosotr(1), nm, nutr(1), -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(4), ierr ) - if( ierr .ne. 0 ) return -c -c ajout eventuel de l'arete milieu s2 dans nosoar - call fasoar( nosotr(2), nm, nutr(1), nutr(2), 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(5), ierr ) - if( ierr .ne. 0 ) return -c -c les aretes s1 s2 et s2 s3 dans le tableau noartr - do 20 i=1,2 -c nosotr(i) est le numero du sommet 1 de l'arete i du te - if( nosotr(i) .eq. nosoar(1,nuarco(i)) ) then - lesign = 1 - else - lesign = -1 - endif -c l'arete ns1-ns2 dans nosoar est celle du cote du te - noartr( 1, nutr(i) ) = lesign * nuarco(i) - 20 continue -c -c l'arete mediane s2 milieu - if( nm .eq. nosoar(1,nuarco(5)) ) then - lesign = -1 - else - lesign = 1 - endif - noartr( 2, nutr(1) ) = lesign * nuarco(5) - noartr( 3, nutr(2) ) = -lesign * nuarco(5) -c -c l'arete s1 milieu - if( nm .eq. nosoar(1,nuarco(4)) ) then - lesign = 1 - else - lesign = -1 - endif - noartr( 3, nutr(1) ) = lesign * nuarco(4) -c -c l'arete s3 milieu - if( nm .eq. nosoar(1,nuarco(3)) ) then - lesign = -1 - else - lesign = 1 - endif - noartr( 2, nutr(2) ) = lesign * nuarco(3) -c -c triangulation des 2 demi te par ajout des points internes du te - call trpite( letree, pxyd, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, noarst, - % nbtr, nutr, ierr ) - end - - - subroutine f2trte( letree, pxyd, milieu, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % noarst, - % nbtr, nutr, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : former les triangles du triangle equilateral letree -c ----- a partir de 2 milieux des cotes du te -c et des points internes au te -c ils deviennent tous des sommets des sous-triangles du te -c -c entrees: -c -------- -c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation -c si letree(0)>0 alors -c letree(0:3) : no (>0) letree des 4 sous-triangles du triangle j -c sinon -c letree(0:3) :-no pxyd des 1 a 4 points internes au triangle j -c 0 si pas de point -c ( le te est une feuille de l'arbre ) -c letree(4) : no letree du sur-triangle du triangle j -c letree(5) : 0 1 2 3 no du sous-triangle j pour son sur-triangle -c letree(6:8) : no pxyd des 3 sommets du triangle j -c pxyd : tableau des x y distance_souhaitee de chaque sommet -c milieu : milieu(i) numero dans pxyd du milieu de l'arete i du te -c 0 si pas de milieu du cote i a ajouter -c mosoar : nombre maximal d'entiers par arete du tableau nosoar -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxartr : nombre maximal de triangles stockables dans le tableau noartr -c -c modifies: -c --------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = (nosoar(1)+nosoar(2)) modulo mxsoar -c sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c noarst : noarst(np) numero d'une arete du sommet np -c -c sorties: -c -------- -c nbtr : nombre de sous-triangles du te, triangulation du te -c nutr : numero des nbtr sous-triangles du te dans le tableau noartr -c ierr : =0 si pas d'erreur -c =1 si le tableau nosoar est sature -c =2 si le tableau noartr est sature -c =3 si aucun des triangles ne contient l'un des points internes au te -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - common / unites / lecteu, imprim, nunite(30) - double precision pxyd(3,*) - integer letree(0:8), - % milieu(3), - % nosoar(mosoar,mxsoar), - % noartr(moartr,mxartr), - % noarst(*), - % nutr(1:nbtr) -c - integer nosotr(3), nuarco(7) -c -c le numero des 3 triangles a creer dans le tableau noartr - do 5 nbtr=1,3 - if( n1artr .le. 0 ) then -c tableau noartr sature - ierr = 2 - return - endif - nutr(nbtr) = n1artr -c le nouveau premier triangle libre dans noartr - n1artr = noartr(2,n1artr) - 5 continue - nbtr = 3 -c -c recherche du premier milieu a creer - do 7 i=1,3 - if( milieu(i) .ne. 0 ) goto 9 - 7 continue -c -c on se ramene au seul cas i=2 c-a-d le cote 1 n'a pas de milieu - 9 if( i .eq. 2 ) then -c pas de milieu sur le cote 1 - nosotr(1) = letree(6) - nosotr(2) = letree(7) - nosotr(3) = letree(8) -c le numero pxyd du milieu du cote 2 - nm2 = milieu( 2 ) -c le numero pxyd du milieu du cote 3 - nm3 = milieu( 3 ) - else if( milieu(2) .ne. 0 ) then -c pas de milieu sur le cote 3 - nosotr(1) = letree(8) - nosotr(2) = letree(6) - nosotr(3) = letree(7) -c le numero pxyd du milieu du cote 2 - nm2 = milieu( 1 ) -c le numero pxyd du milieu du cote 3 - nm3 = milieu( 2 ) - else -c pas de milieu sur le cote 2 - nosotr(1) = letree(7) - nosotr(2) = letree(8) - nosotr(3) = letree(6) -c le numero pxyd du milieu du cote 2 - nm2 = milieu( 3 ) -c le numero pxyd du milieu du cote 3 - nm3 = milieu( 1 ) - endif -c -c ici seul le cote 1 n'a pas de milieu -c nm2 est le milieu du cote 2 -c nm3 est le milieu du cote 3 -c -c ajout eventuel de l'arete s1 s2 dans nosoar - call fasoar( nosotr(1), nosotr(2), nutr(1), -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(1), ierr ) - if( ierr .ne. 0 ) return -c -c ajout eventuel de l'arete s1 s2 dans nosoar - call fasoar( nosotr(2), nm2, nutr(1), -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(2), ierr ) - if( ierr .ne. 0 ) return -c -c ajout eventuel de l'arete s1 nm2 dans nosoar - call fasoar( nosotr(1), nm2, nutr(1), nutr(2), 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(3), ierr ) - if( ierr .ne. 0 ) return -c -c ajout eventuel de l'arete nm2 nm3 dans nosoar - call fasoar( nm3, nm2, nutr(2), nutr(3), 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(4), ierr ) - if( ierr .ne. 0 ) return -c -c ajout eventuel de l'arete s1 nm3 dans nosoar - call fasoar( nosotr(1), nm3, nutr(2), -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(5), ierr ) - if( ierr .ne. 0 ) return -c -c ajout eventuel de l'arete nm2 s3 dans nosoar - call fasoar( nm2, nosotr(3), nutr(3), -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(6), ierr ) -c -c ajout eventuel de l'arete nm3 s3 dans nosoar - call fasoar( nosotr(3), nm3, nutr(3), -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(7), ierr ) - if( ierr .ne. 0 ) return -c -c le triangle s1 s2 nm2 ou arete1 arete2 arete3 - do 20 i=1,2 -c nosotr(i) est le numero du sommet 1 de l'arete i du te - if( nosotr(i) .eq. nosoar(1,nuarco(i)) ) then - lesign = 1 - else - lesign = -1 - endif -c l'arete ns1-ns2 dans nosoar est celle du cote du te - noartr( i, nutr(1) ) = lesign * nuarco(i) - 20 continue - if( nm2 .eq. nosoar(1,nuarco(3)) ) then - lesign = 1 - else - lesign = -1 - endif - noartr( 3, nutr(1) ) = lesign * nuarco(3) -c -c le triangle s1 nm2 nm3 - noartr( 1, nutr(2) ) = -lesign * nuarco(3) - if( nm2 .eq. nosoar(1,nuarco(4)) ) then - lesign = 1 - else - lesign = -1 - endif - noartr( 2, nutr(2) ) = lesign * nuarco(4) - noartr( 1, nutr(3) ) = -lesign * nuarco(4) - if( nm3 .eq. nosoar(1,nuarco(5)) ) then - lesign = 1 - else - lesign = -1 - endif - noartr( 3, nutr(2) ) = lesign * nuarco(5) -c -c le triangle nm2 nm3 s3 - if( nm2 .eq. nosoar(1,nuarco(6)) ) then - lesign = 1 - else - lesign = -1 - endif - noartr( 2, nutr(3) ) = lesign * nuarco(6) - if( nm3 .eq. nosoar(1,nuarco(7)) ) then - lesign = -1 - else - lesign = 1 - endif - noartr( 3, nutr(3) ) = lesign * nuarco(7) -c -c triangulation des 3 sous-te par ajout des points internes du te - call trpite( letree, pxyd, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, noarst, - % nbtr, nutr, ierr ) - end - - - subroutine f3trte( letree, pxyd, milieu, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % noarst, - % nbtr, nutr, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : former les triangles du triangle equilateral letree -c ----- a partir de 3 milieux des cotes du te -c et des points internes au te -c ils deviennent tous des sommets des sous-triangles du te -c -c entrees: -c -------- -c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation -c si letree(0)>0 alors -c letree(0:3) : no (>0) letree des 4 sous-triangles du triangle j -c sinon -c letree(0:3) :-no pxyd des 1 a 4 points internes au triangle j -c 0 si pas de point -c ( le te est une feuille de l'arbre ) -c letree(4) : no letree du sur-triangle du triangle j -c letree(5) : 0 1 2 3 no du sous-triangle j pour son sur-triangle -c letree(6:8) : no pxyd des 3 sommets du triangle j -c pxyd : tableau des x y distance_souhaitee de chaque sommet -c milieu : milieu(i) numero dans pxyd du milieu de l'arete i du te -c 0 si pas de milieu du cote i a ajouter -c mosoar : nombre maximal d'entiers par arete du tableau nosoar -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxartr : nombre maximal de triangles stockables dans le tableau noartr -c -c modifies: -c --------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = (nosoar(1)+nosoar(2)) modulo mxsoar -c sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c noarst : noarst(np) numero d'une arete du sommet np -c -c sorties: -c -------- -c nbtr : nombre de sous-triangles du te, triangulation du te -c nutr : numero des nbtr sous-triangles du te dans le tableau noartr -c ierr : =0 si pas d'erreur -c =1 si le tableau nosoar est sature -c =2 si le tableau noartr est sature -c =3 si aucun des triangles ne contient l'un des points internes au te -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - common / unites / lecteu, imprim, nunite(30) - double precision pxyd(3,*) - integer letree(0:8), - % milieu(3), - % nosoar(mosoar,mxsoar), - % noartr(moartr,mxartr), - % noarst(*), - % nutr(1:nbtr) -c - integer nuarco(9) -c -c le numero des 4 triangles a creer dans le tableau noartr - do 5 nbtr=1,4 - if( n1artr .le. 0 ) then -c tableau noartr sature - ierr = 2 - return - endif - nutr(nbtr) = n1artr -c le nouveau premier triangle libre dans noartr - n1artr = noartr(2,n1artr) - 5 continue - nbtr = 4 -c - do 10 i=1,3 -c le sommet suivant - if( i .ne. 3 ) then - i1 = i + 1 - else - i1 = 1 - endif -c le sommet precedant - if( i .ne. 1 ) then - i0 = i - 1 - else - i0 = 3 - endif - i3 = 3 * i -c -c ajout eventuel de l'arete si mi dans nosoar - call fasoar( letree(5+i), milieu(i), nutr(i), -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(i3-2), ierr ) - if( ierr .ne. 0 ) return -c -c ajout eventuel de l'arete mi mi-1 dans nosoar - call fasoar( milieu(i), milieu(i0), nutr(i), nutr(4), 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(i3-1), ierr ) - if( ierr .ne. 0 ) return -c -c ajout eventuel de l'arete m i-1 si dans nosoar - call fasoar( milieu(i0), letree(5+i), nutr(i), -1, 0, - % mosoar, mxsoar, n1soar, nosoar, noarst, - % nuarco(i3), ierr ) - if( ierr .ne. 0 ) return -c - 10 continue -c -c les 3 sous-triangles pres des sommets - do 20 i=1,3 -c le sommet suivant - if( i .ne. 3 ) then - i1 = i + 1 - else - i1 = 1 - endif -c le sommet precedant - if( i .ne. 1 ) then - i0 = i - 1 - else - i0 = 3 - endif - i3 = 3 * i -c -c ajout du triangle arete3i-2 arete3i-1 arete3i - if( letree(5+i) .eq. nosoar(1,nuarco(i3-2)) ) then - lesign = 1 - else - lesign = -1 - endif - noartr( 1, nutr(i) ) = lesign * nuarco(i3-2) -c - if( milieu(i) .eq. nosoar(1,nuarco(i3-1)) ) then - lesign = 1 - else - lesign = -1 - endif - noartr( 2, nutr(i) ) = lesign * nuarco(i3-1) -c - if( milieu(i0) .eq. nosoar(1,nuarco(i3)) ) then - lesign = 1 - else - lesign = -1 - endif - noartr( 3, nutr(i) ) = lesign * nuarco(i3) -c - 20 continue -c -c le sous triangle central - i3 = -1 - do 30 i=1,3 - i3 = i3 + 3 - if( milieu(i) .eq. nosoar(1,nuarco(i3)) ) then - lesign = -1 - else - lesign = 1 - endif - noartr( i, nutr(4) ) = lesign * nuarco(i3) - 30 continue -c -c triangulation des 3 sous-te par ajout des points internes du te - call trpite( letree, pxyd, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, noarst, - % nbtr, nutr, ierr ) - end - - - - subroutine hasoar( mosoar, mxsoar, n1soar, nosoar, nu2sar, - % noar ) -c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : rechercher le numero des 2 sommets d'une arete parmi -c ----- les numeros des 2 sommets des aretes du tableau nosoar -c s ils n y sont pas stockes les y ajouter -c dans tous les cas retourner le numero de l'arete dans nosoar -c -c la methode employee ici est celle du hachage -c avec pour fonction d'adressage h(ns1,ns2)=min(ns1,ns2) -c -c remarque: h(ns1,ns2)=ns1 + 2*ns2 -c ne marche pas si des aretes sont detruites -c et ajoutees aux aretes vides -c le chainage est commun a plusieurs hachages! -c d'ou ce choix du minimum pour le hachage -c -c entrees: -c -------- -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c -c modifies: -c --------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c chainage des aretes vides amont et aval -c l'arete vide qui precede=nosoar(4,i) -c l'arete vide qui suit =nosoar(5,i) -c nosoar : numero des 2 sommets, no ligne, 2 triangles de l'arete, -c chainage momentan'e d'aretes, chainage du hachage des aretes -c hachage des aretes = min( nosoar(1), nosoar(2) ) -c nu2sar : en entree les 2 numeros des sommets de l'arete -c en sortie nu2sar(1)0 si le tableau nu2sar est l'arete noar retrouvee -c dans le tableau nosoar -c <0 si le tableau nu2sar a ete ajoute et forme l'arete -c -noar du tableau nosoar avec nosoar(1,noar) elle devient la nouvelle arete -c retouche des chainages de cette arete noar qui ne sera plus vide - noar = nu2sar(1) -c l'eventuel chainage du hachage n'est pas modifie -c - else -c -c la premiere arete dans l'adressage du hachage n'est pas libre -c => choix quelconque d'une arete vide pour ajouter cette arete - if( n1soar .le. 0 ) then -c -c le tableau nosoar est sature avec pour temoin d'erreur - noar = 0 - return -c - else -c -c l'arete n1soar est vide => c'est la nouvelle arete -c mise a jour du chainage de la derniere arete noar du chainage -c sa suivante est la nouvelle arete n1soar - nosoar( mosoar, noar ) = n1soar -c -c l'arete ajoutee est n1soar - noar = n1soar -c -c la nouvelle premiere arete vide - n1soar = nosoar( 5, n1soar ) -c -c la premiere arete vide n1soar n'a pas d'arete vide precedente - nosoar( 4, n1soar ) = 0 -c -c noar la nouvelle arete est la derniere du chainage du hachage - nosoar( mosoar, noar ) = 0 -c - endif -c - endif -c -c les 2 sommets de la nouvelle arete noar - nosoar( 1, noar ) = nu2sar(1) - nosoar( 2, noar ) = nu2sar(2) -c -c le tableau nu2sar a ete ajoute avec l'indice -noar - noar = - noar - end - - - subroutine mt3str( nt, moartr, noartr, mosoar, nosoar, - % ns1, ns2, ns3 ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : calcul du numero des 3 sommets du triangle nt du tableau noartr -c ----- -c -c entrees: -c -------- -c nt : numero du triangle de noartr a traiter -c moartr : nombre maximal d'entiers par triangle -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1=0 si triangle vide => arete2=triangle vide suivant -c mosoar : nombre maximal d'entiers par arete -c nosoar : numero des 2 sommets , no ligne, 2 triangles, chainages en + -c sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante -c -c sorties: -c -------- -c ns1,ns2,ns3 : les 3 numeros des sommets du triangle en sens direct -c -c si erreur rencontree => ns1 = 0 -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc juillet 1995 -c2345x7..............................................................012 - integer noartr(moartr,*), nosoar(mosoar,*) -c -c le numero de triangle est il correct ? -c a supprimer apres mise au point - if( nt .le. 0 ) then -c nblgrc(nrerr) = 1 -c write(kerr(mxlger)(1:6),'(i6)') nt -c kerr(1) = kerr(mxlger)(1:6) // -c % ' no triangle dans noartr incorrect' -c call lereur - write(imprim,*) nt,' no triangle dans noartr incorrect' - ns1 = 0 - return - endif -c - na = noartr(1,nt) - if( na .gt. 0 ) then -c arete dans le sens direct - ns1 = nosoar(1,na) - ns2 = nosoar(2,na) - else -c arete dans le sens indirect - ns1 = nosoar(2,-na) - ns2 = nosoar(1,-na) - endif -c - na = noartr(2,nt) - if( na .gt. 0 ) then -c arete dans le sens direct => ns3 est le second sommet de l'arete - ns3 = nosoar(2,na) - else -c arete dans le sens indirect => ns3 est le premier sommet de l'arete - ns3 = nosoar(1,-na) - endif - end - subroutine trpite( letree, pxyd, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % noarst, - % nbtr, nutr, ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : former le ou les sous-triangles des nbtr triangles nutr -c ----- qui forment le triangle equilateral letree par ajout -c des points internes au te qui deviennent des sommets des -c sous-triangles des nbtr triangles -c -c entrees: -c -------- -c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation -c letree(0:3):-no pxyd des 1 a 4 points internes au triangle j -c 0 si pas de point -c ( le te est ici une feuille de l'arbre ) -c letree(4) : no letree du sur-triangle du triangle j -c letree(5) : 0 1 2 3 no du sous-triangle j pour son sur-triangle -c letree(6:8) : no pxyd des 3 sommets du triangle j -c pxyd : tableau des x y distance_souhaitee de chaque sommet -c mosoar : nombre maximal d'entiers par arete du tableau nosoar -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c moartr : nombre maximal d'entiers par arete du tableau noartr -c mxartr : nombre maximal de triangles stockables dans le tableau noartr -c -c modifies: -c --------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = (nosoar(1)+nosoar(2)) modulo mxsoar -c sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c noarst : noarst(i) numero d'une arete de sommet i -c -c sorties: -c -------- -c nbtr : nombre de sous-triangles du te -c nutr : numero des nbtr sous-triangles du te dans le tableau noartr -c ierr : =0 si pas d'erreur -c =1 si le tableau nosoar est sature -c =2 si le tableau noartr est sature -c =3 si aucun des triangles ne contient l'un des points internes au te -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - logical tratri - common / dv2dco / tratri -c trace ou non des triangles generes dans la triangulation - common / unites / lecteu, imprim, nunite(30) - double precision pxyd(3,*) - integer letree(0:8), - % nosoar(mosoar,mxsoar), - % noartr(moartr,mxartr), - % noarst(*), - % nutr(1:nbtr) -c - integer nosotr(3) -c -c si pas de point interne alors trace eventuel puis retour - if( letree(0) .eq. 0 ) goto 150 -c -c il existe au moins un point interne a trianguler -c dans les nbtr triangles - do 100 k=0,3 -c -c le numero du point - np = -letree(k) - if( np .eq. 0 ) goto 150 -c -c le point np dans pxyd est a traiter - do 10 n = 1, nbtr -c -c les numeros des 3 sommets du triangle nt=nutr(n) - nt = nutr(n) - call nusotr( nt, mosoar, nosoar, moartr, noartr, nosotr ) -c -c le triangle nt contient il le point np? - call ptdatr( pxyd(1,np), pxyd, nosotr, nsigne ) -c nsigne>0 si le point est dans le triangle ou sur une des 3 aretes -c =0 si triangle degenere ou indirect ou ne contient pas le poin -c - if( nsigne .gt. 0 ) then -c -c le triangle nt est triangule en 3 sous-triangles - call tr3str( np, nt, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, mxartr, n1artr, noartr, - % noarst, - % nutr(nbtr+1), ierr ) - if( ierr .ne. 0 ) return -c -c reamenagement des 3 triangles crees dans nutr -c en supprimant le triangle nt - nutr( n ) = nutr( nbtr + 3 ) - nbtr = nbtr + 2 -c le point np est triangule - goto 100 -c - endif - 10 continue -c -c erreur: le point np n'est pas dans l'un des nbtr triangles - write(imprim,10010) np - ierr = 3 - return -c - 100 continue -10010 format(' erreur trpite: pas de triangle contenant le point',i7) -c - 150 continue - -ccc 150 if( tratri ) then -cccc les traces sont demandes -ccc call efface -cccc le cadre objet global en unites utilisateur -ccc xx1 = min(pxyd(1,nosotr(1)),pxyd(1,nosotr(2)),pxyd(1,nosotr(3))) -ccc xx2 = max(pxyd(1,nosotr(1)),pxyd(1,nosotr(2)),pxyd(1,nosotr(3))) -ccc yy1 = min(pxyd(2,nosotr(1)),pxyd(2,nosotr(2)),pxyd(2,nosotr(3))) -ccc yy2 = max(pxyd(2,nosotr(1)),pxyd(2,nosotr(2)),pxyd(2,nosotr(3))) -ccc if( xx1 .ge. xx2 ) xx2 = xx1 + (yy2-yy1) -ccc if( yy1 .ge. yy2 ) yy2 = yy1 + (xx2-xx1)*0.5 -ccc call isofenetre( xx1-(xx2-xx1), xx2+(xx2-xx1), -ccc % yy1-(yy2-yy1), yy2+(yy2-yy1) ) -ccc do 200 i=1,nbtr -cccc trace du triangle nutr(i) -ccc call mttrtr( pxyd, nutr(i), moartr, noartr, mosoar, nosoar, -ccc % i, ncblan ) -ccc 200 continue -ccc endif - - end - - - subroutine sasoar( noar, mosoar, mxsoar, n1soar, nosoar ) -c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : supprimer l'arete noar du tableau nosoar -c ----- si celle ci n'est pas une arete des lignes de la frontiere -c -c la methode employee ici est celle du hachage -c avec pour fonction d'adressage h = min( nu2sar(1), nu2sar(2) ) -c -c attention: il faut mettre a jour le no d'arete des 2 sommets -c de l'arete supprimee dans le tableau noarst! -c -c entrees: -c -------- -c noar : numero de l'arete de nosoar a supprimer -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage h -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c -c modifies: -c --------- -c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar -c chainage des vides suivant en 3 et precedant en 2 de nosoar -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c une arete i de nosoar est vide <=> nosoar(1,i)=0 et -c nosoar(4,arete vide)=l'arete vide qui precede -c nosoar(5,arete vide)=l'arete vide qui suit -c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique upmc paris mars 1997 -c ...................................................................012 - common / unites / lecteu, imprim, nunite(30) - integer nosoar(mosoar,mxsoar) -c - if( nosoar(3,noar) .le. 0 ) then -c -c l'arete n'est pas frontaliere => elle devient une arete vide -c -c recherche de l'arete qui precede dans le chainage du hachage - noar1 = nosoar(1,noar) -c -c parcours du chainage du hachage jusqu'a retrouver l'arete noar - 10 if( noar1 .ne. noar ) then -c -c l'arete suivante parmi celles ayant meme fonction d'adressage - noar0 = noar1 - noar1 = nosoar( mosoar, noar1 ) - if( noar1 .gt. 0 ) goto 10 -c -c l'arete noar n'a pas ete retrouvee dans le chainage => erreur - write(imprim,*) 'erreur sasoar:arete non dans le chainage ' - % ,noar - write(imprim,*) 'arete de st1=',nosoar(1,noar), - % ' st2=',nosoar(2,noar),' ligne=',nosoar(3,noar), - % ' tr1=',nosoar(4,noar),' tr2=',nosoar(5,noar) - write(imprim,*) 'chainages=',(nosoar(i,noar),i=6,mosoar) -c l'arete n'est pas detruite - return -c - endif -c - if( noar .ne. nosoar(1,noar) ) then -c -c saut de l'arete noar dans le chainage du hachage -c noar0 initialisee est ici l'arete qui precede noar dans ce chainage - nosoar( mosoar, noar0 ) = nosoar( mosoar, noar ) -c -c le chainage du hachage n'existe plus pour noar -c pas utile car mise a zero faite dans le sp hasoar -ccc nosoar( mosoar, noar ) = 0 -c -c noar devient la nouvelle premiere arete du chainage des vides - nosoar( 4, noar ) = 0 - nosoar( 5, noar ) = n1soar -c la nouvelle precede l'ancienne premiere - nosoar( 4, n1soar ) = noar - n1soar = noar -c -ccc else -c -c noar est la premiere arete du chainage du hachage h -c cette arete ne peut etre consideree dans le chainage des vides -c car le chainage du hachage doit etre conserve (sinon perte...) -c - endif -c -c le temoin d'arete vide - nosoar( 1, noar ) = 0 - endif - end - - - subroutine caetoi( noar, mosoar, mxsoar, n1soar, nosoar, - % n1aeoc, nbtrar ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : ajouter (ou retirer) l'arete noar de nosoar de l'etoile -c ----- des aretes simples chainees en position lchain de nosoar -c detruire du tableau nosoar les aretes doubles -c -c attention: le chainage lchain de nosoar devient celui des cf -c -c entree : -c -------- -c noar : numero dans le tableau nosoar de l'arete a traiter -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c -c entrees et sorties: -c ------------------- -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c n1aeoc : numero dans nosoar de la premiere arete simple de l'etoile -c -c sortie : -c -------- -c nbtrar : 1 si arete ajoutee, 2 si arete double supprimee -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c2345x7..............................................................012 - parameter (lchain=6) - integer nosoar(mosoar,mxsoar) -c -c si l'arete n'appartient pas aux aretes de l'etoile naetoi -c alors elle est ajoutee a l'etoile dans naetoi -c sinon elle est empilee dans npile pour etre detruite ensuite -c elle est supprimee de l'etoile naetoi -c - if( nosoar( lchain, noar ) .lt. 0 ) then -c -c arete de l'etoile vue pour la premiere fois -c elle est ajoutee au chainage - nosoar( lchain, noar ) = n1aeoc -c elle devient la premiere du chainage - n1aeoc = noar -c arete simple - nbtrar = 1 -c - else -c -c arete double de l'etoile. elle est supprimee du chainage - na0 = 0 - na = n1aeoc -c parcours des aretes chainees jusqu'a trouver l'arete noar - 10 if( na .ne. noar ) then -c passage a la suivante - na0 = na - na = nosoar( lchain, na ) - goto 10 - endif -c -c suppression de noar du chainage des aretes simples de l'etoile - if( na0 .gt. 0 ) then -c il existe une arete qui precede - nosoar( lchain, na0 ) = nosoar( lchain, noar ) - else -c noar est en fait n1aeoc la premiere du chainage - n1aeoc = nosoar( lchain, noar ) - endif -c noar n'est plus une arete simple de l'etoile - nosoar( lchain, noar ) = -1 -c -c destruction du tableau nosoar de l'arete double noar - call sasoar( noar, mosoar, mxsoar, n1soar, nosoar ) -c -c arete double - nbtrar = 2 - endif - end - - - subroutine focftr( nbtrcf, notrcf, pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, - % nbarcf, n1arcf, noarcf, - % ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : former un contour ferme (cf) avec les aretes simples des -c ----- nbtrcf triangles du tableau notrcf -c destruction des nbtrcf triangles du tableau noartr -c destruction des aretes doubles du tableau nosoar -c -c attention: le chainage lchain de nosoar devient celui des cf -c -c entrees: -c -------- -c nbtrcf : nombre de triangles du cf a former -c notrcf : numero des triangles dans le tableau noartr -c pxyd : tableau des coordonnees 2d des points -c par point : x y distance_souhaitee -c -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c moartr : nombre maximal d'entiers par arete du tableau noartr -c -c entrees et sorties : -c -------------------- -c noarst : noarst(i) numero d'une arete de sommet i -c n1soar : numero de la premiere arete vide dans le tableau nosoar -c une arete i de nosoar est vide <=> nosoar(1,i)=0 -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = nosoar(1)+nosoar(2)*2 -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c -c sorties: -c -------- -c nbarcf : nombre d'aretes du cf -c n1arcf : numero d'une arete de chaque contour -c noarcf : numero des aretes de la ligne du contour ferme -c attention: chainage circulaire des aretes -c les aretes vides pointes par n1arcf(0) ne sont pas chainees -c ierr : 0 si pas d'erreur -c 14 si les lignes fermees se coupent => donnees a revoir -c 15 si une seule arete simple frontaliere -c 16 si boucle infinie car toutes les aretes simples -c de la boule sont frontalieres! -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - parameter (lchain=6) - common / unites / lecteu, imprim, nunite(30) - double precision pxyd(3,*) - integer notrcf(1:nbtrcf) - integer nosoar(mosoar,mxsoar), - % noartr(moartr,*), - % n1arcf(0:*), - % noarcf(3,*), - % noarst(*) -c -c formation des aretes simples du cf autour de l'arete ns1-ns2 -c attention: le chainage lchain du tableau nosoar devient actif -c ============================================================ -c ici toutes les aretes du tableau nosoar verifient nosoar(lchain,i) = -1 -c ce qui equivaut a dire que l'etoile des aretes simples est vide -c (initialisation dans le sp insoar puis remise a -1 dans la suite!) - n1aeoc = 0 -c -c ajout a l'etoile des aretes simples des 3 aretes des triangles a supprimer -c suppression des triangles de l'etoile pour les aretes simples de l'etoile - do 10 i=1,nbtrcf -c ajout ou retrait des 3 aretes du triangle notrcf(i) de l'etoile - nt = notrcf( i ) - do 5 j=1,3 -c l'arete de nosoar a traiter - noar = abs( noartr(j,nt) ) - call caetoi( noar, mosoar, mxsoar, n1soar, nosoar, - % n1aeoc, nbtrar ) -c si arete simple alors suppression du numero de triangle pour cette a - if( nbtrar .eq. 1 ) then - if( nosoar(4,noar) .eq. nt ) then - nosoar(4,noar) = nosoar(5,noar) - endif - nosoar(5,noar) = -1 -c else -c l'arete appartient a aucun triangle => elle est vide -c les positions 4 et 5 servent maintenant aux chainages des vides - endif - 5 continue - 10 continue -c -c les aretes simples de l'etoile sont reordonnees pour former une -c ligne fermee = un contour ferme peripherique de l'etoile encore dit 1 cf -c ======================================================================== - n1ae00 = n1aeoc - 12 na1 = n1aeoc -c la premiere arete du contour ferme - ns0 = nosoar(1,na1) - ns1 = nosoar(2,na1) -c -c l'arete est-elle dans le sens direct? -c recherche de l'arete du triangle exterieur nt d'arete na1 - nt = nosoar(4,na1) - if( nt .le. 0 ) nt = nosoar(5,na1) -c -c attention au cas de l'arete initiale frontaliere de no de triangles 0 et - - if( nt .le. 0 ) then -c permutation circulaire des aretes simples chainees -c la premiere arete doit devenir la derniere du chainage, -c la 2=>1, la 3=>2, ... , la derniere=>l'avant derniere, 1=>derniere - n1aeoc = nosoar( lchain, n1aeoc ) - if( n1aeoc .eq. n1ae00 ) then -c attention: boucle infinie si toutes les aretes simples -c de la boule sont frontalieres!... arretee par ce test - ierr = 16 - return - endif - noar = n1aeoc - na0 = 0 - 14 if( noar .gt. 0 ) then -c la sauvegarde de l'arete et l'arete suivante - na0 = noar - noar = nosoar(lchain,noar) - goto 14 - endif - if( na0 .le. 0 ) then -c une seule arete simple frontaliere - ierr = 15 - return - endif -c le suivant de l'ancien dernier est l'ancien premier - nosoar(lchain,na0) = na1 -c le nouveau dernier est l'ancien premier - nosoar(lchain,na1) = 0 - goto 12 - endif -c -c ici l'arete na1 est l'une des aretes du triangle nt - do 15 i=1,3 - if( abs(noartr(i,nt)) .eq. na1 ) then -c c'est l'arete - if( noartr(i,nt) .gt. 0 ) then -c elle est parcourue dans le sens indirect de l'etoile -c (car c'est en fait le triangle exterieur a la boule) - ns0 = nosoar(2,na1) - ns1 = nosoar(1,na1) - endif - goto 17 - endif - 15 continue -c -c le 1-er sommet ou arete du contour ferme - 17 n1arcf( 1 ) = 1 -c le nombre de sommets du contour ferme de l'etoile - nbarcf = 1 -c le premier sommet de l'etoile - noarcf( 1, nbarcf ) = ns0 -c l'arete suivante du cf - noarcf( 2, nbarcf ) = nbarcf + 1 -c le numero de cette arete dans le tableau nosoar - noarcf( 3, nbarcf ) = na1 -c mise a jour du numero d'arete du sommet ns0 - noarst(ns0) = na1 -c -cccc trace de l'arete -ccc call dvtrar( pxyd, ns0, ns1, ncvert, ncblan ) -c -c l'arete suivante a chainer - n1aeoc = nosoar( lchain, na1 ) -c l'arete na1 n'est plus dans l'etoile - nosoar( lchain, na1 ) = -1 -c -c boucle sur les aretes simples de l'etoile - 20 if( n1aeoc .gt. 0 ) then -c -c recherche de l'arete de 1-er sommet ns1 - na0 = -1 - na1 = n1aeoc - 25 if( na1 .gt. 0 ) then -c -c le numero du dernier sommet de l'arete precedente -c est il l'un des 2 sommets de l'arete na1? - if ( ns1 .eq. nosoar(1,na1) ) then -c l'autre sommet de l'arete na1 - ns2 = nosoar(2,na1) - else if( ns1 .eq. nosoar(2,na1) ) then -c l'autre sommet de l'arete na1 - ns2 = nosoar(1,na1) - else -c non: passage a l'arete suivante - na0 = na1 - na1 = nosoar( lchain, na1 ) - goto 25 - endif -c -c oui: na1 est l'arete peripherique suivante -c na0 est sa precedente dans le chainage -c une arete de plus dans le contour ferme (cf) - nbarcf = nbarcf + 1 -c le premier sommet de l'arete nbarcf peripherique - noarcf( 1, nbarcf ) = ns1 -c l'arete suivante du cf - noarcf( 2, nbarcf ) = nbarcf + 1 -c le numero de cette arete dans le tableau nosoar - noarcf( 3, nbarcf ) = na1 -c mise a jour du numero d'arete du sommet ns1 - noarst(ns1) = na1 -c -cccc trace de l'arete -ccc call dvtrar( pxyd, ns1, ns2, ncvert, ncblan ) -c -c suppression de l'arete des aretes simples de l'etoile - if( n1aeoc .eq. na1 ) then - n1aeoc = nosoar( lchain, na1 ) - else - nosoar( lchain, na0 ) = nosoar( lchain, na1 ) - endif -c l'arete n'est plus une arete simple de l'etoile - nosoar( lchain, na1 ) = -1 -c -c le sommet final de l'arete a rechercher ensuite - ns1 = ns2 - goto 20 - endif - endif -c -c verification - if( ns1 .ne. ns0 ) then -c arete non retrouvee : l'etoile ne se referme pas -c nblgrc(nrerr) = 3 -c kerr(1) = 'focftr: revoyez vos donnees' -c kerr(2) = 'les lignes fermees doivent etre disjointes' -c kerr(3) = 'verifiez si elles ne se coupent pas' -c call lereur - write(imprim,*) 'focftr: revoyez vos donnees' - write(imprim,*)'les lignes fermees doivent etre disjointes' - write(imprim,*)'verifiez si elles ne se coupent pas' - ierr = 14 - return - endif -c -c l'arete suivant la derniere arete du cf est la premiere du cf -c => realisation d'un chainage circulaire des aretes du cf - noarcf( 2, nbarcf ) = 1 -c -c destruction des triangles de l'etoile du tableau noartr -c ------------------------------------------------------- - do 50 i=1,nbtrcf -c le numero du triangle dans noartr - nt0 = notrcf( i ) -c l'arete 1 de nt0 devient nulle - noartr( 1, nt0 ) = 0 -c chainage de nt0 en tete du chainage des triangles vides de noartr - noartr( 2, nt0 ) = n1artr - n1artr = nt0 - 50 continue - end - - - subroutine int1sd( ns1, ns2, ns3, ns4, pxyd, linter, x0, y0 ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : existence ou non d'une intersection a l'interieur -c ----- des 2 aretes ns1-ns2 et ns3-ns4 -c attention les intersections au sommet sont comptees -c -c entrees: -c -------- -c ns1,...ns4 : numero pxyd des 4 sommets -c pxyd : les coordonnees des sommets -c -c sortie : -c -------- -c linter : -1 si ns3-ns4 parallele a ns1 ns2 -c 0 si ns3-ns4 n'intersecte pas ns1-ns2 entre les aretes -c 1 si ns3-ns4 intersecte ns1-ns2 entre les aretes -c 2 si le point d'intersection est ns1 entre ns3-ns4 -c 3 si le point d'intersection est ns3 entre ns1-ns2 -c 4 si le point d'intersection est ns4 entre ns1-ns2 -c x0,y0 : 2 coordonnees du point d'intersection s'il existe(linter>=1) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc fevrier 1992 -c2345x7..............................................................012 - parameter ( epsmoi=-0.000001d0, eps=0.001d0, - % unmeps= 0.999d0, unpeps=1.000001d0 ) - double precision pxyd(3,*), x0, y0 - double precision x1,y1,x21,y21,d21,x43,y43,d43,d,x,y,p21,p43 -c - x1 = pxyd(1,ns1) - y1 = pxyd(2,ns1) - x21 = pxyd(1,ns2) - x1 - y21 = pxyd(2,ns2) - y1 - d21 = x21**2 + y21**2 -c - x43 = pxyd(1,ns4) - pxyd(1,ns3) - y43 = pxyd(2,ns4) - pxyd(2,ns3) - d43 = x43**2 + y43**2 -c -c les 2 aretes sont-elles jugees paralleles ? - d = x43 * y21 - y43 * x21 - if( d*d .le. 0.000001d0 * d21 * d43 ) then -c cote i parallele a ns1-ns2 - linter = -1 - return - endif -c -c les 2 coordonnees du point d'intersection - x =( x1*x43*y21-pxyd(1,ns3)*x21*y43-(y1-pxyd(2,ns3))*x21*x43)/d - y =(-y1*y43*x21+pxyd(2,ns3)*y21*x43+(x1-pxyd(1,ns3))*y21*y43)/d -c -c coordonnee barycentrique de x,y dans le repere ns1-ns2 - p21 = ( ( x - x1 ) * x21 + ( y - y1 ) * y21 ) / d21 -c coordonnee barycentrique de x,y dans le repere ns3-ns4 - p43 = ( (x - pxyd(1,ns3))* x43 + (y - pxyd(2,ns3)) * y43 ) / d43 -c -c - if( epsmoi .le. p21 .and. p21 .le. unpeps ) then -c x,y est entre ns1-ns2 - if( (p21 .le. eps) .and. - % (epsmoi .le. p43 .and. p43 .le. unpeps) ) then -c le point x,y est proche de ns1 et interne a ns3-ns4 - linter = 2 - x0 = pxyd(1,ns1) - y0 = pxyd(2,ns1) - return - else if( epsmoi .le. p43 .and. p43 .le. eps ) then -c le point x,y est proche de ns3 et entre ns1-ns2 - linter = 3 - x0 = pxyd(1,ns3) - y0 = pxyd(2,ns3) - return - else if( unmeps .le. p43 .and. p43 .le. unpeps ) then -c le point x,y est proche de ns4 et entre ns1-ns2 - linter = 4 - x0 = pxyd(1,ns4) - y0 = pxyd(2,ns4) - return - else if( eps .le. p43 .and. p43 .le. unmeps ) then -c le point x,y est entre ns3-ns4 - linter = 1 - x0 = x - y0 = y - return - endif - endif -c -c pas d'intersection a l'interieur des aretes - linter = 0 - end - - - subroutine tefoar( narete, nbarpi, pxyd, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, noarst, - % mxarcf, n1arcf, noarcf, larmin, notrcf, - % ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : forcer l'arete narete de nosoar dans la triangulation actuelle -c ----- triangulation frontale pour la reobtenir -c -c attention: le chainage lchain(=6) de nosoar devient actif -c durant la formation des contours fermes (cf) -c -c entrees: -c -------- -c narete : numero nosoar de l'arete frontaliere a forcer -c nbarpi : numero du dernier point interne impose par l'utilisateur -c pxyd : tableau des coordonnees 2d des points -c par point : x y distance_souhaitee -c -c mosoar : nombre maximal d'entiers par arete et -c indice dans nosoar de l'arete suivante dans le hachage -c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar -c attention: mxsoar>3*mxsomm obligatoire! -c moartr : nombre maximal d'entiers par arete du tableau noartr -c -c modifies: -c --------- -c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar -c chainage des vides suivant en 3 et precedant en 2 de nosoar -c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete, -c chainage des aretes frontalieres, chainage du hachage des aretes -c hachage des aretes = nosoar(1)+nosoar(2)*2 -c avec mxsoar>=3*mxsomm -c une arete i de nosoar est vide <=> nosoar(1,i)=0 et -c nosoar(2,arete vide)=l'arete vide qui precede -c nosoar(3,arete vide)=l'arete vide qui suit -c n1artr : numero du premier triangle vide dans le tableau noartr -c le chainage des triangles vides se fait sur noartr(2,.) -c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3 -c arete1 = 0 si triangle vide => arete2 = triangle vide suivant -c noarst : noarst(i) numero d'une arete de sommet i -c -c mxarcf : nombre de variables des tableaux n1arcf, noarcf, larmin, notrcf -c -c tableaux auxiliaires : -c ---------------------- -c n1arcf : tableau (0:mxarcf) auxiliaire -c noarcf : tableau (3,mxarcf) auxiliaire -c larmin : tableau (mxarcf) auxiliaire -c notrcf : tableau (1:mxarcf) auxiliaire -c -c sortie : -c -------- -c ierr : 0 si pas d'erreur -c 1 saturation des sommets -c 2 ns1 dans aucun triangle -c 9 tableau nosoar de taille insuffisante car trop d'aretes -c a probleme -c 10 un des tableaux n1arcf, noarcf notrcf est sature -c augmenter a l'appel mxarcf -c 11 algorithme defaillant -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc mars 1997 -c....................................................................012 - parameter (mxpitr=32) - common / unites / lecteu,imprim,intera,nunite(29) - logical tratri - common / dv2dco / tratri - double precision pxyd(3,*) - integer noartr(moartr,*), - % nosoar(mosoar,mxsoar), - % noarst(*), - % n1arcf(0:mxarcf), - % noarcf(3,mxarcf), - % larmin(mxarcf), - % notrcf(mxarcf) -c - integer lapitr(mxpitr) - double precision x1,y1,x2,y2,d12,d3,d4,x,y,d,dmin - integer nosotr(3), ns(2) - integer nacf(1:2), nacf1, nacf2 - equivalence (nacf(1),nacf1), (nacf(2),nacf2) -c -c traitement de cette arete perdue - ns1 = nosoar( 1, narete ) - ns2 = nosoar( 2, narete ) -c - if( tratri ) then -c les traces sont demandes -c call efface -c le cadre objet global en unites utilisateur - xx1 = min( pxyd(1,ns1), pxyd(1,ns2) ) - xx2 = max( pxyd(1,ns1), pxyd(1,ns2) ) - yy1 = min( pxyd(2,ns1), pxyd(2,ns2) ) - yy2 = max( pxyd(2,ns1), pxyd(2,ns2) ) - if( xx1 .ge. xx2 ) xx2 = xx1 + (yy2-yy1) - if( yy1 .ge. yy2 ) yy2 = yy1 + (xx2-xx1)*0.5 -c call isofenetre( xx1-(xx2-xx1), xx2+(xx2-xx1), -c % yy1-(yy2-yy1), yy2+(yy2-yy1) ) - endif -c -cccc trace de l'arete perdue -ccc call dvtrar( pxyd, ns1, ns2, ncroug, ncblan ) -c -c le sommet ns2 est il correct? - na = noarst( ns2 ) - if( na .le. 0 ) then - write(imprim,*) 'tefoar: erreur sommet ',ns2,' sans arete' - ierr = 8 - return - endif - if( nosoar(4,na) .le. 0 ) then - write(imprim,*) 'tefoar: erreur sommet ',ns2, - % ' dans aucun triangle' - ierr = 8 - return - endif -c -c recherche du triangle voisin dans le sens indirect de rotation - nsens = -1 -c le premier passage: recherche dans le sens ns1->ns2 - ipas = 0 -c -c recherche des triangles intersectes par le segment ns1-ns2 -c ========================================================== - 3 x1 = pxyd(1,ns1) - y1 = pxyd(2,ns1) - x2 = pxyd(1,ns2) - y2 = pxyd(2,ns2) - d12 = (x2-x1)**2 + (y2-y1)**2 -c -c recherche du no local du sommet ns1 dans l'un de ses triangles - na01 = noarst( ns1 ) - if( na01 .le. 0 ) then - write(imprim,*) 'tefoar: sommet ',ns1,' sans arete' - ierr = 8 - return - endif - nt0 = nosoar(4,na01) - if( nt0 .le. 0 ) then - write(imprim,*) 'tefoar: sommet ',ns1,' dans aucun triangle' - ierr = 8 - return - endif -c -c le numero des 3 sommets du triangle nt0 dans le sens direct - 20 call nusotr( nt0, mosoar, nosoar, moartr, noartr, nosotr ) - do 22 na00=1,3 - if( nosotr(na00) .eq. ns1 ) goto 26 - 22 continue -c - 25 if( ipas .eq. 0 ) then -c le second passage: recherche dans le sens ns2->ns1 -c tentative d'inversion des 2 sommets extremites de l'arete a forcer - na00 = ns1 - ns1 = ns2 - ns2 = na00 - ipas = 1 - goto 3 - else -c les sens ns1->ns2 et ns2->ns1 ne donne pas de solution! - write(imprim,*)'tefoar:arete ',ns1,' - ',ns2,' a imposer' - write(imprim,*)'tefoar:anomalie sommet ',ns1, - % 'non dans le triangle de sommets ',(nosotr(i),i=1,3) - ierr = 11 - return - endif -c -c le numero des aretes suivante et precedente - 26 na0 = nosui3( na00 ) - na1 = nopre3( na00 ) - ns3 = nosotr( na0 ) - ns4 = nosotr( na1 ) -c -cccc trace du triangle nt0 et de l'arete perdue -ccc call mttrtr( pxyd, nt0, moartr, noartr, mosoar, nosoar, -ccc % ncblan, ncjaun ) -ccc call dvtrar( pxyd, ns1, ns2, ncroug, ncblan ) -ccc call dvtrar( pxyd, ns3, ns4, ncbleu, nccyan ) -c -c point d'intersection du segment ns1-ns2 avec l'arete ns3-ns4 -c ------------------------------------------------------------ - call int1sd( ns1, ns2, ns3, ns4, pxyd, linter, x1, y1 ) - if( linter .le. 0 ) then -c -c pas d'intersection: rotation autour du point ns1 -c pour trouver le triangle de l'autre cote de l'arete na01 - if( nsens .lt. 0 ) then -c sens indirect de rotation: l'arete de sommet ns1 - na01 = abs( noartr(na00,nt0) ) - else -c sens direct de rotation: l'arete de sommet ns1 qui precede - na01 = abs( noartr(na1,nt0) ) - endif -c le triangle de l'autre cote de l'arete na01 - if( nosoar(4,na01) .eq. nt0 ) then - nt0 = nosoar(5,na01) - else - nt0 = nosoar(4,na01) - endif - if( nt0 .gt. 0 ) goto 20 -c -c le parcours sort du domaine -c il faut tourner dans l'autre sens autour de ns1 - if( nsens .lt. 0 ) then - nsens = 1 - nt0 = noarst( ns1 ) - goto 20 - endif -c -c dans les 2 sens, pas d'intersection => impossible -c essai avec l'arete inversee ns1 <-> ns2 - if( ipas .eq. 0 ) goto 25 - write(imprim,*) 'tefoar: arete ',ns1,' ',ns2, - % ' sans intersection avec les triangles actuels' - write(imprim,*) 'revoyez les lignes du contour' - ierr = 11 - return - endif -c -c il existe une intersection avec l'arete opposee au sommet ns1 -c ============================================================= -c nbtrcf : nombre de triangles du cf - nbtrcf = 1 - notrcf( 1 ) = nt0 -c -c le triangle oppose a l'arete na0 de nt0 - 30 noar = abs( noartr(na0,nt0) ) - if( nosoar(4,noar) .eq. nt0 ) then - nt1 = nosoar(5,noar) - else - nt1 = nosoar(4,noar) - endif -c -cccc trace du triangle nt1 et de l'arete perdue -ccc call mttrtr( pxyd, nt1, moartr, noartr, mosoar, nosoar, -ccc % ncjaun, ncmage ) -ccc call dvtrar( pxyd, ns1, ns2, ncroug, ncblan ) -c -c le numero des 3 sommets du triangle nt1 dans le sens direct - call nusotr( nt1, mosoar, nosoar, moartr, noartr, nosotr ) -c -c le triangle nt1 contient il ns2 ? - do 32 j=1,3 - if( nosotr(j) .eq. ns2 ) goto 70 - 32 continue -c -c recherche de l'arete noar, na1 dans nt1 qui est l'arete na0 de nt0 - do 34 na1=1,3 - if( abs( noartr(na1,nt1) ) .eq. noar ) goto 35 - 34 continue -c -c trace du triangle nt1 et de l'arete perdue - 35 continue -ccc 35 call mttrtr( pxyd, nt1, moartr, noartr, mosoar, nosoar, -ccc % ncjaun, ncmage ) -ccc call dvtrar( pxyd, ns1, ns2, ncroug, ncblan ) -c -c recherche de l'intersection de ns1-ns2 avec les 2 autres aretes de nt1 -c ====================================================================== - na2 = na1 - do 50 i1 = 1,2 -c l'arete suivante - na2 = nosui3(na2) -c -c les 2 sommets de l'arete na2 de nt1 - noar = abs( noartr(na2,nt1) ) - ns3 = nosoar( 1, noar ) - ns4 = nosoar( 2, noar ) -ccc call dvtrar( pxyd, ns3, ns4, ncbleu, nccyan ) -c -c point d'intersection du segment ns1-ns2 avec l'arete ns3-ns4 -c ------------------------------------------------------------ - call int1sd( ns1, ns2, ns3, ns4, pxyd, linter, x , y ) - if( linter .gt. 0 ) then -c -c les 2 aretes s'intersectent en (x,y) -c distance de (x,y) a ns3 et ns4 - d3 = (pxyd(1,ns3)-x)**2 + (pxyd(2,ns3)-y)**2 - d4 = (pxyd(1,ns4)-x)**2 + (pxyd(2,ns4)-y)**2 -c nsp est le point le plus proche de (x,y) - if( d3 .lt. d4 ) then - nsp = ns3 - d = d3 - else - nsp = ns4 - d = d4 - endif - if( d .gt. 1d-5*d12 ) goto 60 -c -c ici le sommet nsp est trop proche de l'arete perdue ns1-ns2 - if( nsp .le. nbarpi ) then -c point utilisateur ou frontalier non supprimable - ierr = 11 - write(imprim,*) 'pause dans tefoar 1', d, d3, d4, d12 - return - endif -c -c le sommet interne nsp est supprime en mettant tous les triangles -c l'ayant comme sommet dans la pile notrcf des triangles a supprimer -c ------------------------------------------------------------------ -ccc write(imprim,*) 'tefoar: le sommet ',nsp,' est supprime' -c construction de la liste des triangles de sommet nsp - call trp1st( nsp, noarst, mosoar, nosoar, moartr, noartr, - % mxpitr, nbt, lapitr ) - if( nbt .le. 0 ) then -c les triangles de sommet nsp ne forme pas une "boule" -c avec ce sommet nsp pour "centre" - write(imprim,*) - % 'tefoar: pas d''etoile de triangles autour du sommet',nsp -cccc trace des triangles de l'etoile du sommet nsp -ccc tratri = .true. -ccc call trpltr( nbt, lapitr, pxyd, -ccc % moartr, noartr, mosoar, nosoar, -ccc % ncroug, ncblan ) -ccc tratri = .false. - ierr = 11 - write(imprim,*) 'pause dans tefoar 2' - return - endif -c -c ajout des triangles de sommet ns1 a notrcf - nbtrc0 = nbtrcf - do 38 j=1,nbt - nt = lapitr(j) - do 37 k=nbtrcf,1,-1 - if( nt .eq. notrcf(k) ) goto 38 - 37 continue -c triangle ajoute - nbtrcf = nbtrcf + 1 - notrcf( nbtrcf ) = nt -ccc call mttrtr( pxyd, nt, moartr, noartr, mosoar, nosoar, -ccc % ncjaun, ncmage ) -ccc call dvtrar( pxyd, ns1, ns2, ncroug, ncblan ) - 38 continue -c -c ce sommet supprime n'appartient plus a aucun triangle - noarst( nsp ) = 0 -c -c ns2 est-il un sommet des triangles empiles? -c ------------------------------------------- - do 40 nt=nbtrc0+1,nbtrcf -c le triangle a supprimer nt - nt1 = notrcf( nt ) -c le numero des 3 sommets du triangle nt1 dans le sens direct - call nusotr( nt1, mosoar, nosoar, moartr, noartr, nosotr) - do 39 k=1,3 -c le sommet k de nt1 - if( nosotr( k ) .eq. ns2 ) then -c but atteint - goto 80 - endif - 39 continue - 40 continue -c -c recherche du plus proche point d'intersection de ns1-ns2 -c par rapport a ns2 avec les aretes des triangles ajoutes - nt0 = 0 - dmin = d12 * 10000 - do 48 nt=nbtrc0+1,nbtrcf - nt1 = notrcf( nt ) -c le numero des 3 sommets du triangle nt1 dans le sens direct - call nusotr( nt1, mosoar, nosoar, moartr, noartr, nosotr) - do 45 k=1,3 -c les 2 sommets de l'arete k de nt - ns3 = nosotr( k ) - ns4 = nosotr( nosui3(k) ) -c -c point d'intersection du segment ns1-ns2 avec l'arete ns3-ns4 -c ------------------------------------------------------------ - call int1sd( ns1, ns2, ns3, ns4, pxyd, - % linter, x , y ) - if( linter .gt. 0 ) then -c les 2 aretes s'intersectent en (x,y) - d = (x-x2)**2+(y-y2)**2 - if( d .lt. dmin ) then - nt0 = nt1 - na0 = k - dmin = d - endif - endif - 45 continue - 48 continue -c -c redemarrage avec le triangle nt0 et l'arete na0 - if( nt0 .gt. 0 ) goto 30 -c - write(imprim,*) 'tefoar: algorithme defaillant' - ierr = 11 - return - endif - 50 continue -c -c pas d'intersection differente de l'initiale => sommet sur ns1-ns2 -c rotation autour du sommet par l'arete suivant na1 - write(imprim,*) - write(imprim,*) 'tefoar 50: revoyez vos donnees' - write(imprim,*) 'les lignes fermees doivent etre disjointes' - write(imprim,*) 'verifiez si elles ne se coupent pas' - ierr = 13 - return -c -c cas sans probleme : intersection differente de celle initiale -c ================= ========================================= - 60 nbtrcf = nbtrcf + 1 - notrcf( nbtrcf ) = nt1 -c passage au triangle suivant - na0 = na2 - nt0 = nt1 - goto 30 -c -c ---------------------------------------------------------- -c ici toutes les intersections de ns1-ns2 ont ete parcourues -c tous les triangles intersectes ou etendus forment les -c nbtrcf triangles du tableau notrcf -c ---------------------------------------------------------- - 70 nbtrcf = nbtrcf + 1 - notrcf( nbtrcf ) = nt1 -c -c formation du cf des aretes simples des triangles de notrcf -c et destruction des nbtrcf triangles du tableau noartr -c attention: le chainage lchain du tableau nosoar devient actif -c ============================================================= - 80 if( nbtrcf*3 .gt. mxarcf ) then - write(imprim,*) 'saturation du tableau noarcf' - ierr = 10 - return - endif -c - call focftr( nbtrcf, notrcf, pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, - % nbarcf, n1arcf, noarcf, - % ierr ) - if( ierr .ne. 0 ) return -c -c chainage des aretes vides dans le tableau noarcf -c ------------------------------------------------ -c decalage de 2 aretes car 2 aretes sont necessaires ensuite pour -c integrer 2 fois l'arete perdue et former ainsi 2 cf -c comme nbtrcf*3 minore mxarcf il existe au moins 2 places vides -c derriere => pas de test de debordement - n1arcf(0) = nbarcf+3 - mmarcf = min(8*nbarcf,mxarcf) - do 90 i=nbarcf+3,mmarcf - noarcf(2,i) = i+1 - 90 continue - noarcf(2,mmarcf) = 0 -c -c reperage des sommets ns1 ns2 de l'arete perdue dans le cf -c --------------------------------------------------------- - ns1 = nosoar( 1, narete ) - ns2 = nosoar( 2, narete ) - ns(1) = ns1 - ns(2) = ns2 - do 120 i=1,2 -c la premiere arete dans noarcf du cf - na0 = n1arcf(1) - 110 if( noarcf(1,na0) .ne. ns(i) ) then -c passage a l'arete suivante - na0 = noarcf( 2, na0 ) - goto 110 - endif -c position dans noarcf du sommet i de l'arete perdue - nacf(i) = na0 - 120 continue -c -c formation des 2 cf chacun contenant l'arete ns1-ns2 -c --------------------------------------------------- -c sauvegarde de l'arete suivante de celle de sommet ns1 - na0 = noarcf( 2, nacf1 ) - nt1 = noarcf( 3, nacf1 ) -c -c le premier cf - n1arcf( 1 ) = nacf1 -c l'arete suivante dans le premier cf - noarcf( 2, nacf1 ) = nacf2 -c cette arete est celle perdue - noarcf( 3, nacf1 ) = narete -c -c le second cf -c l'arete doublee - n1 = nbarcf + 1 - n2 = nbarcf + 2 -c le premier sommet de la premiere arete du second cf - noarcf( 1, n1 ) = ns2 -c l'arete suivante dans le second cf - noarcf( 2, n1 ) = n2 -c cette arete est celle perdue - noarcf( 3, n1 ) = narete -c la seconde arete du second cf - noarcf( 1, n2 ) = ns1 - noarcf( 2, n2 ) = na0 - noarcf( 3, n2 ) = nt1 - n1arcf( 2 ) = n1 -c -c recherche du precedent de nacf2 - 130 na1 = noarcf( 2, na0 ) - if( na1 .ne. nacf2 ) then -c passage a l'arete suivante - na0 = na1 - goto 130 - endif -c na0 precede nacf2 => il precede n1 - noarcf( 2, na0 ) = n1 -c -c depart avec 2 cf - nbcf = 2 -c -c triangulation directe des 2 contours fermes -c l'arete ns1-ns2 devient une arete de la triangulation des 2 cf -c ============================================================== - call tridcf( nbcf, pxyd, noarst, - % mosoar, mxsoar, n1soar, nosoar, - % moartr, n1artr, noartr, - % mxarcf, n1arcf, noarcf, larmin, - % nbtrcf, notrcf, ierr ) - end - - - subroutine te4ste( nbsomm, mxsomm, pxyd, ntrp, letree, - & ierr ) -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c but : decouper un te ntrp de letree en 4 sous-triangles -c ----- eliminer les sommets de te trop proches des points -c -c entrees: -c -------- -c mxsomm : nombre maximal de points declarables dans pxyd -c ntrp : numero letree du triangle a decouper en 4 sous-triangles -c -c modifies : -c ---------- -c nbsomm : nombre actuel de points dans pxyd -c pxyd : tableau des coordonnees des points -c par point : x y distance_souhaitee -c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation -c letree(0,0) : no du 1-er te vide dans letree -c letree(0,1) : maximum du 1-er indice de letree (ici 8) -c letree(0,2) : maximum declare du 2-eme indice de letree (ici mxtree) -c letree(0:8,1) : racine de l'arbre (triangle sans sur triangle) -c si letree(0,.)>0 alors -c letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j -c sinon -c letree(0:3,j) :-no pxyd des 1 a 4 points internes au triangle j -c 0 si pas de point -c ( j est alors une feuille de l'arbre ) -c letree(4,j) : no letree du sur-triangle du triangle j -c letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle -c letree(6:8,j) : no pxyd des 3 sommets du triangle j -c -c sorties : -c --------- -c ierr : 0 si pas d'erreur, 51 saturation letree, 52 saturation pxyd -c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -c auteur : alain perronnet analyse numerique paris upmc juillet 1994 -c2345x7..............................................................012 - common / unites / lecteu,imprim,nunite(30) - integer letree(0:8,0:*) - double precision pxyd(3,mxsomm) - integer np(0:3),milieu(3) -c -c debut par l'arete 2 du triangle ntrp - i1 = 2 - i2 = 3 - do 30 i=1,3 -c -c le milieu de l'arete i1 existe t il deja ? - call n1trva( ntrp, i1, letree, noteva, niveau ) - if( noteva .gt. 0 ) then -c il existe un te voisin -c s'il existe 4 sous-triangles le milieu existe deja - if( letree(0,noteva) .gt. 0 ) then -c le milieu existe - nsot = letree(0,noteva) - milieu(i) = letree( 5+nopre3(i1), nsot ) - goto 25 - endif - endif -c -c le milieu n'existe pas. il est cree - nbsomm = nbsomm + 1 - if( nbsomm .gt. mxsomm ) then -c plus assez de place dans pxyd - write(imprim,*) 'te4ste: saturation pxyd' - write(imprim,*) - ierr = 52 - return - endif -c le milieu de l'arete i - milieu(i) = nbsomm -c -c ntrp est le triangle de milieux d'arete ces 3 sommets - ns1 = letree( 5+i1, ntrp ) - ns2 = letree( 5+i2, ntrp ) - pxyd(1,nbsomm) = ( pxyd(1,ns1) + pxyd(1,ns2) ) * 0.5 - pxyd(2,nbsomm) = ( pxyd(2,ns1) + pxyd(2,ns2) ) * 0.5 -c -c l'arete et milieu suivant - 25 i1 = i2 - i2 = nosui3( i2 ) - 30 continue -c - do 50 i=0,3 -c -c le premier triangle vide - nsot = letree(0,0) - if( nsot .le. 0 ) then -c manque de place. saturation letree - ierr = 51 - write(imprim,*) 'te4ste: saturation letree' - write(imprim,*) - return - endif -c -c mise a jour du premier te libre - letree(0,0) = letree(0,nsot) -c -c nsot est le i-eme sous triangle - letree(0,nsot) = 0 - letree(1,nsot) = 0 - letree(2,nsot) = 0 - letree(3,nsot) = 0 -c -c le numero des points et sous triangles dans ntrp - np(i) = -letree(i,ntrp) - letree(i,ntrp) = nsot -c -c le sommet commun avec le triangle ntrp - letree(5+i,nsot) = letree(5+i,ntrp) -c -c le sur-triangle et numero de sous-triangle de nsot -c a laisser ici car incorrect sinon pour i=0 - letree(4,nsot) = ntrp - letree(5,nsot) = i -c -c le sous-triangle du triangle - letree(i,ntrp) = nsot - 50 continue -c -c le numero des nouveaux sommets milieux - nsot = letree(0,ntrp) - letree(6,nsot) = milieu(1) - letree(7,nsot) = milieu(2) - letree(8,nsot) = milieu(3) -c - nsot = letree(1,ntrp) - letree(7,nsot) = milieu(3) - letree(8,nsot) = milieu(2) -c - nsot = letree(2,ntrp) - letree(6,nsot) = milieu(3) - letree(8,nsot) = milieu(1) -c - nsot = letree(3,ntrp) - letree(6,nsot) = milieu(2) - letree(7,nsot) = milieu(1) -c -c repartition des eventuels 4 points np dans ces 4 sous-triangles -c il y a obligatoirement suffisamment de place - do 110 i=0,3 - if( np(i) .gt. 0 ) then - nsot = notrpt( pxyd(1,np(i)), pxyd, ntrp, letree ) -c ajout du point - do 100 i1=0,3 - if( letree(i1,nsot) .eq. 0 ) then -c place libre a occuper - letree(i1,nsot) = -np(i) - goto 110 - endif - 100 continue - endif - 110 continue - end diff --git a/src/Makefile.in b/src/Makefile.in deleted file mode 100644 index c4bbfd85f..000000000 --- a/src/Makefile.in +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : Makefile.in -# Author : Patrick GOLDBRONN (CEA) -# Module : SMESH -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - -@COMMENCE@ - -SUBDIRS = \ - SMDS SMESHDS Controls Driver DriverMED DriverDAT DriverUNV DriverSTL \ - SMESH SMESH_I OBJECT SMESHFiltersSelection SMESHGUI SMESH_SWIG \ - MEFISTO2 StdMeshers StdMeshers_I StdMeshersGUI - -@MODULE@ diff --git a/src/NETGEN/Makefile.in b/src/NETGEN/Makefile.in deleted file mode 100644 index fc2e0476a..000000000 --- a/src/NETGEN/Makefile.in +++ /dev/null @@ -1,152 +0,0 @@ -# -* Makefile *- -# -# Author : Nadir Bouhamou (CEA) -# Module : SMESH -# Date : 10/10/2003 -# -# - -# source path -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - -@COMMENCE@ - -# Libraries targets -LIB = libNETGEN.la - -# additionnal information to compil and link file -CPPFLAGS += -DSOLIDGEOM -DLINUX $(OCC_INCLUDES) -CXXFLAGS += -DSOLIDGEOM -DLINUX $(OCC_CXXFLAGS) - -LDFLAGS += $(OCC_KERNEL_LIBS) $(OCC_MODELER_LIBS) -lg2c - -NETGEN_LIBS_DIR=@NETGEN_LIBS_DIR@ - -LIB_OBJ_O = linopt.o \ - bfgs.o \ - linsearch.o \ - global.o \ - bisect.o \ - meshtool.o \ - refine.o \ - ruler3.o \ - improve3.o \ - adfront3.o \ - tetrarls.o \ - prism2rls.o \ - pyramidrls.o \ - pyramid2rls.o \ - netrule3.o \ - ruler2.o \ - meshclass.o \ - improve2.o \ - adfront2.o \ - netrule2.o \ - triarls.o \ - geomsearch.o \ - secondorder.o \ - meshtype.o \ - parser3.o \ - quadrls.o \ - specials.o \ - parser2.o \ - meshing2.o \ - meshing3.o \ - meshfunc.o \ - localh.o \ - improve2gen.o \ - delaunay.o \ - boundarylayer.o \ - msghandler.o \ - meshfunc2d.o \ - smoothing2.o \ - smoothing3.o \ - topology.o \ - curvedelems.o \ - clusters.o \ - zrefine.o \ - ngexception.o \ - geomtest3d.o \ - geom2d.o \ - geom3d.o \ - adtree.o \ - transform3d.o \ - geomfuncs.o \ - polynomial.o \ - densemat.o \ - vector.o \ - basemat.o \ - sparsmat.o \ - algprim.o \ - brick.o \ - manifold.o \ - bspline2d.o \ - meshsurf.o \ - csgeom.o \ - polyhedra.o \ - curve2d.o \ - singularref.o \ - edgeflw.o \ - solid.o \ - explicitcurve2d.o \ - specpoin.o \ - gencyl.o \ - revolution.o \ - genmesh.o \ - spline3d.o \ - surface.o \ - identify.o \ - triapprox.o \ - meshstlsurface.o \ - stlline.o \ - stltopology.o \ - stltool.o \ - stlgeom.o \ - stlgeomchart.o \ - stlgeommesh.o \ - table.o \ - optmem.o \ - spbita2d.o \ - hashtabl.o \ - sort.o \ - flags.o \ - seti.o \ - bitarray.o \ - array.o \ - symbolta.o \ - mystring.o \ - moveablemem.o \ - spline2d.o \ - splinegeometry2.o \ - ngnewdelete.o \ - nglib.o - -$(LIB_OBJ_O): - ar x $(NETGEN_LIBS_DIR)/libnginterface.a - ar x $(NETGEN_LIBS_DIR)/libcsg.a - ar x $(NETGEN_LIBS_DIR)/libgprim.a - ar x $(NETGEN_LIBS_DIR)/libmesh.a - ar x $(NETGEN_LIBS_DIR)/libopti.a - ar x $(NETGEN_LIBS_DIR)/libgen.a - ar x $(NETGEN_LIBS_DIR)/libla.a - ar x $(NETGEN_LIBS_DIR)/libstlgeom.a - ar x $(NETGEN_LIBS_DIR)/libgeom2d.a - rm -rf sgparser.o hprefinement.o parthreads.o writediffpack.o writepermas.o writeuser.o dynamicmem.o importsolution.o readuser.o writefeap.o writetecplot.o wuchemnitz.o extrusion.o writeabaqus.o writefluent.o writetochnog.o csgparser.o geom2dmesh.o - -LIB_OBJ_LO = $(LIB_OBJ_O:%.o=%.lo) - -#implicits rules - -.o.lo: - ln -s $< $@ || true - -@CONCLUDE@ - -$(LIB): $(LIB_OBJ_O) $(LIB_OBJ_LO) - @$(LT) --mode=link $(CXX) -rpath $(libdir) -o $@ $(CXXFLAGS) $(LIB_OBJ_LO) $(LDFLAGS) $(LIBS) - -mostlyclean: cleandep - -$(RM) $(LIB_OBJ_O) $(LIB_OBJ_LO) diff --git a/src/NETGEN/ReadMeForNgUsers b/src/NETGEN/ReadMeForNgUsers deleted file mode 100644 index 555eb9716..000000000 --- a/src/NETGEN/ReadMeForNgUsers +++ /dev/null @@ -1,102 +0,0 @@ -The Netgen 4.3 from the web location : http://www.hpfem.jku.at/netgen/ is used -in the SMESH Module of Salome2 distribution. - -How to build Netgen for Salome ------------------------------- - -Patch the official netgen 4.3 distribution: - -$ cd netgen43 -$ patch -p1 < patch_directory/netgen43ForSalome.patch - -Then run makeForSalome.sh: -$ sh makeForSalome.sh - - -Additional information for maintainers --------------------------------------- - -The SMESH Engine of SALOME2 (particularly the m4 file check_Netgen.m4) assume -that Netgen is installed in the directory as follow: - -prompt> ls - -bin/ cshrc_for_netgen doc/ include/ lib/ tutorials/ - -prompt> ls /bin - -LINUX/ - -prompt> ls /bin/LINUX/ - -demoapp/ ng ng.tcl ngtcltk/ startup.tcl - -prompt> ls /bin/LINUX/demoapp/ - -demoapp.tcl - -prompt> ls /bin/LINUX/ngtcltk/ - -dialog.tcl menustat.tcl ngicon.tcl parameters.tcl -drawing.tcl nghelp.tcl ngvisual.tcl variables.tcl - -prompt> ls /doc/ - -ng4.pdf usenetgen.ps - -prompt> ls /include/ - -nglib.h - -prompt> ls /lib/ - -LINUX/ - -prompt> ls /lib/LINUX/ - -libcsg.a libgeom2d.a libla.a libnginterface.a libstlgeom.a -libgen.a libgprim.a libmesh.a libopti.a libvis.a - -prompt> ls /tutorials/ - -boxcyl.geo cylinder.geo ficherea.geo part1.stl square.in2d -cone.geo cylsphere.geo hinge.stl sculpture.geo trafo.geo -cubeandspheres.geo demo2d.in2d lshape3d.geo shaft.geo twobricks.geo -cube.geo ellipsoid.geo manyholes.geo sphere.geo twocubes.geo -cubemcyl.geo ellipticcyl.geo matrix.geo sphereincube.geo twocyl.geo -cubemsphere.geo - -All *.tcl files are needed to control and initiate the Netgen mesher throughout its -MHI (Machine Human Interface)./bin/LINUX/ng is the Netgen -executable with its embarked MHI. All the libraries *.a should be compiled without -the option -DOPENGL which is only needed for the Netgen MHI. netgen43 is assumed to -be the directory downloaded from the above web location archive of Netgen. The library -/lib/LINUX/libnginterface.a should contain the objects -nglib.o (from netgen43/libsrc/interface/nglib.cpp) and ngnewdelete.o -(from netgen43/ngtcltk/ngnewdelete.cpp). - -To have that kind of distribution from the version in the above web location you -should first compile Netgen as suggested in the netgen43/README.INSTALL file. It will -then produce the executable ng linked statically with the libraries *.a. Then modify -the Makefiles to remove -DOPENGL from compiler flags list, add the objects nglib.o -and ngnewdelete.o to the library libnginterface.a and recompile the libraries only. - -From the above web location perhaps, you will have to alter some Netgen sources to -compile them; if you find any difficulties to do that, just ask me. - -Nadir - -******************************** -* Dr Nadir Bouhamou * -* Ingénieur-chercheur * -* Engineer-Researcher * -* * -* CEA Saclay * -* DEN/DM2S/SFME/LGLS * -* Bat 454 Pièce 5A * -* 91191 Gif-Sur-Yvette cédex * -* * -* Tél: +33 (0)1 69 08 73 07 * -* Fax: +33 (0)1 69 08 96 96 * -* email: nadir.bouhamou@cea.fr * -******************************** diff --git a/src/NETGEN/netgen43ForSalome.patch b/src/NETGEN/netgen43ForSalome.patch deleted file mode 100644 index 5e08d8804..000000000 --- a/src/NETGEN/netgen43ForSalome.patch +++ /dev/null @@ -1,221 +0,0 @@ -diff -N -r -u netgen43/libsrc/include/spline2d.hpp /tmp/netgen43/libsrc/include/spline2d.hpp ---- netgen43/libsrc/include/spline2d.hpp 1970-01-01 01:00:00.000000000 +0100 -+++ /tmp/netgen43/libsrc/include/spline2d.hpp 2003-12-10 16:28:12.000000000 +0100 -@@ -0,0 +1 @@ -+#include "../geom2d/spline2d.hpp" -diff -N -r -u netgen43/libsrc/include/splinegeometry2.hpp /tmp/netgen43/libsrc/include/splinegeometry2.hpp ---- netgen43/libsrc/include/splinegeometry2.hpp 1970-01-01 01:00:00.000000000 +0100 -+++ /tmp/netgen43/libsrc/include/splinegeometry2.hpp 2003-12-10 16:28:23.000000000 +0100 -@@ -0,0 +1 @@ -+#include "../geom2d/splinegeometry2.hpp" -diff -N -r -u netgen43/libsrc/interface/Makefile /tmp/netgen43/libsrc/interface/Makefile ---- netgen43/libsrc/interface/Makefile 2003-05-07 16:01:43.000000000 +0200 -+++ /tmp/netgen43/libsrc/interface/Makefile 2003-12-10 15:59:47.000000000 +0100 -@@ -1,4 +1,4 @@ --src = nginterface.cpp writeuser.cpp writediffpack.cpp writeabaqus.cpp writefluent.cpp writepermas.cpp writetochnog.cpp writetecplot.cpp wuchemnitz.cpp writetochnog.cpp writefeap.cpp readuser.cpp importsolution.cpp -+src = writeuser.cpp writediffpack.cpp writeabaqus.cpp writefluent.cpp writepermas.cpp writetochnog.cpp writetecplot.cpp wuchemnitz.cpp writetochnog.cpp writefeap.cpp readuser.cpp importsolution.cpp nglib.cpp ngnewdelete.cpp - # - lib = nginterface - libpath = libsrc/interface -diff -N -r -u netgen43/libsrc/interface/nglib.cpp /tmp/netgen43/libsrc/interface/nglib.cpp ---- netgen43/libsrc/interface/nglib.cpp 2003-05-07 16:01:43.000000000 +0200 -+++ /tmp/netgen43/libsrc/interface/nglib.cpp 2003-12-10 16:32:54.000000000 +0100 -@@ -23,6 +23,20 @@ - - #include "nglib.h" - -+namespace netgen -+{ -+ char geomfilename [100]; -+ -+ //Destination for messages, errors, ... -+ void Ng_PrintDest(const char * s) -+ { -+ (*mycout) << s << flush; -+ } -+ -+#include -+#include -+} -+ - using namespace netgen; - - // constants and types: -@@ -171,8 +185,6 @@ - // CSG Geometry - - // FlexLexer * lexer; --char geomfilename [100]; -- - - // 2D Meshing Functions: - -@@ -362,7 +374,18 @@ - cout << "e(" << readedges.Get(i) << "," << readedges.Get(i+1) << ")" << endl; - } - */ -- geo->AddEdges(readedges); -+ -+ ARRAY< Point<3> > readedges1; -+ -+ for (i = 1; i <= readedges.Size(); i++) -+ { -+ Point3d readedgesData = readedges.Get(i); -+ Point <3> readedges1Data = Point<3>(readedgesData.X(),readedgesData.Y(),readedgesData.Z()); -+ -+ readedges1.Append(readedges1Data); -+ } -+ -+ geo->AddEdges(readedges1); - } - - if (geo->GetStatus() == STLTopology::STL_GOOD || geo->GetStatus() == STLTopology::STL_WARNING) return NG_OK; -@@ -472,7 +495,14 @@ - n = Vec3d(nv[0],nv[1],nv[2]); - } - -- readtrias.Append(STLReadTriangle(apts,n)); -+ Point<3> apts1[3]; -+ apts1[0] = Point<3>(p1[0],p1[1],p1[2]); -+ apts1[1] = Point<3>(p2[0],p2[1],p2[2]); -+ apts1[2] = Point<3>(p3[0],p3[1],p3[2]); -+ -+ Vec<3> n1 = Vec<3>(n.X(),n.Y(),n.Z()); -+ -+ readtrias.Append(STLReadTriangle(apts1,n1)); - } - - // add (optional) edges: -@@ -487,30 +517,29 @@ - - // compatibility functions: - --void MyError (const char * ch) -+void netgen::MyError (const char * ch) - { - cerr << ch; - } - --//Destination for messages, errors, ... --void Ng_PrintDest(const char * s) --{ -- (*mycout) << s << flush; --} -- -- --double GetTime () -+double netgen::GetTime () - { - return 0; - } - --void ResetTime () -+void netgen::ResetTime () - { - ; - } - --void MyBeep (int i) -+void netgen::MyBeep (int i) - { - ; - } - -+void MeshFromSpline2D (SplineGeometry2d & geometry, -+ Mesh *& mesh, -+ MeshingParameters & mp) -+{ -+ MeshFromSpline2D (geometry, mesh, mp); -+} -diff -N -r -u netgen43/libsrc/makefile.mach.LINUX /tmp/netgen43/libsrc/makefile.mach.LINUX ---- netgen43/libsrc/makefile.mach.LINUX 2003-05-07 16:01:43.000000000 +0200 -+++ /tmp/netgen43/libsrc/makefile.mach.LINUX 2003-12-10 15:12:18.000000000 +0100 -@@ -14,7 +14,8 @@ - # - CFLAGS2 = - # pg stands for profiling - also in linkflags2 --CPLUSPLUSFLAGS2 = -O2 -I/usr/X11R6/include -DLINUX -DOPENGL -+#CPLUSPLUSFLAGS2 = -O2 -I/usr/X11R6/include -DLINUX -DOPENGL -+CPLUSPLUSFLAGS2 = -O2 -I/usr/X11R6/include -DLINUX - # -fomit-frame-pointer - # -ffast-math - # -diff -N -r -u netgen43/libsrc/meshing/improve2.cpp /tmp/netgen43/libsrc/meshing/improve2.cpp ---- netgen43/libsrc/meshing/improve2.cpp 2003-05-07 16:01:43.000000000 +0200 -+++ /tmp/netgen43/libsrc/meshing/improve2.cpp 2003-12-10 15:42:00.000000000 +0100 -@@ -3,7 +3,7 @@ - #include "meshing.hpp" - #include - --#include -+/*#include */ - - - namespace netgen -diff -N -r -u netgen43/libsrc/meshing/meshing2.cpp /tmp/netgen43/libsrc/meshing/meshing2.cpp ---- netgen43/libsrc/meshing/meshing2.cpp 2003-05-07 16:01:43.000000000 +0200 -+++ /tmp/netgen43/libsrc/meshing/meshing2.cpp 2003-12-10 15:34:35.000000000 +0100 -@@ -1785,7 +1785,7 @@ - - - #else --void glrender (int wait) -+void netgen::glrender (int wait) - { - ; - } -diff -N -r -u netgen43/libsrc/visualization/stlmeshing.cpp /tmp/netgen43/libsrc/visualization/stlmeshing.cpp ---- netgen43/libsrc/visualization/stlmeshing.cpp 2003-05-07 16:01:43.000000000 +0200 -+++ /tmp/netgen43/libsrc/visualization/stlmeshing.cpp 2003-12-10 15:52:53.000000000 +0100 -@@ -5,7 +5,7 @@ - #include - - #include --#include -+/*#include */ - - namespace netgen - { -diff -N -r -u netgen43/Makefile /tmp/netgen43/Makefile ---- netgen43/Makefile 2003-05-07 16:01:43.000000000 +0200 -+++ /tmp/netgen43/Makefile 2003-12-10 15:11:41.000000000 +0100 -@@ -35,7 +35,8 @@ - .SUFFIXES: .cpp .o - # - # --CPLUSPLUSFLAGS1 = -c -I$(LIBSRC_DIR)/include -DOPENGL -+#CPLUSPLUSFLAGS1 = -c -I$(LIBSRC_DIR)/include -DOPENGL -+CPLUSPLUSFLAGS1 = -c -I$(LIBSRC_DIR)/include - LINKFLAGS1 = -lGL -lGLU -lX11 -lXext -lXmu - # - CPLUSPLUSFLAGS = $(CPLUSPLUSFLAGS1) $(CPLUSPLUSFLAGS2) $(CPLUSPLUSFLAGS3) -diff -N -r -u netgen43/makeForSalome.sh /tmp/netgen43/makeForSalome.sh ---- netgen43/makeForSalome.sh 1970-01-01 01:00:00.000000000 +0100 -+++ /tmp/netgen43/makeForSalome.sh 2004-01-05 12:33:59.000000000 +0100 -@@ -0,0 +1,26 @@ -+#! /bin/sh -+cp ngtcltk/ngnewdelete.* libsrc/interface/ -+ -+MACHINE=LINUX -+export MACHINE -+make -C libsrc/csg -+make -C libsrc/general -+make -C libsrc/geom2d -+make -C libsrc/gprim -+make -C libsrc/interface -+make -C libsrc/linalg -+make -C libsrc/meshing -+make -C libsrc/opti -+make -C libsrc/stlgeom -+ -+if [ ! -d install ] ; then -+ mkdir install -+fi -+ -+cp -r lib install/ -+ -+if [ ! -d install/include ] ; then -+ mkdir install/include -+fi -+ -+cp libsrc/interface/nglib.h install/include diff --git a/src/NETGENPlugin/Makefile.in b/src/NETGENPlugin/Makefile.in deleted file mode 100644 index 577190928..000000000 --- a/src/NETGENPlugin/Makefile.in +++ /dev/null @@ -1,67 +0,0 @@ -# SMESH NETGENPlugin : implementaion of SMESH idl descriptions -# -# Copyright (C) 2004 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : Makefile.in -# Author : Julia DOROVSKIKH -# Module : SMESH -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl: - - -@COMMENCE@ - -EXPORT_PYSCRIPTS = - -# .po files to transform in .qm -PO_FILES = NETGENPlugin_icons.po - -# Libraries targets -LIB = libNETGENEngine.la -LIB_SRC = \ - NETGENPlugin_NETGEN_3D.cxx \ - NETGENPlugin_NETGEN_3D_i.cxx \ - NETGENPlugin_i.cxx - -LIB_SERVER_IDL = SMESH_NetgenAlgorithm.idl - -LIB_CLIENT_IDL = SMESH_Gen.idl SMESH_Mesh.idl SMESH_Group.idl - -# Executables targets -BIN = -BIN_SRC = - -# additionnal information to compil and link file -NETGEN_INCLUDES=@NETGEN_INCLUDES@ - -CPPFLAGS+= $(OCC_INCLUDES) $(HDF5_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome \ - -I${GEOM_ROOT_DIR}/include/salome $(NETGEN_INCLUDES) $(BOOST_CPPFLAGS) -CXXFLAGS+= $(OCC_CXXFLAGS) $(HDF5_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome \ - -I${GEOM_ROOT_DIR}/include/salome $(NETGEN_INCLUDES) - -LDFLAGS+= $(HDF5_LIBS) -lSMESHimpl -lSMESHEngine -lStdMeshers -lStdMeshersEngine -lNETGEN -L${KERNEL_ROOT_DIR}/lib/salome -L${GEOM_ROOT_DIR}/lib/salome -lSalomeGenericObj - -@CONCLUDE@ diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx deleted file mode 100644 index 98b1e660b..000000000 --- a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx +++ /dev/null @@ -1,1064 +0,0 @@ -//============================================================================= -// File : NETGENPlugin_NETGEN_3D.cxx -// Moved here from SMESH_NETGEN_3D.cxx -// Created : lundi 27 Janvier 2003 -// Author : Nadir BOUHAMOU (CEA) -// Project : SALOME -// Copyright : CEA 2003 -// $Header$ -//============================================================================= -using namespace std; - -#include "NETGENPlugin_NETGEN_3D.hxx" -#include "SMESH_Gen.hxx" -#include "SMESH_Mesh.hxx" - -#include "SMDS_MeshElement.hxx" -#include "SMDS_MeshNode.hxx" -#include "SMDS_FacePosition.hxx" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "utilities.h" - -/* - Netgen include files -*/ - -#include "nglib.h" - -//============================================================================= -/*! - * - */ -//============================================================================= - -NETGENPlugin_NETGEN_3D::NETGENPlugin_NETGEN_3D(int hypId, int studyId, - SMESH_Gen* gen) - : SMESH_3D_Algo(hypId, studyId, gen) -{ - MESSAGE("NETGENPlugin_NETGEN_3D::NETGENPlugin_NETGEN_3D"); - _name = "NETGEN_3D"; -// _shapeType = TopAbs_SOLID; - _shapeType = (1 << TopAbs_SHELL) | (1 << TopAbs_SOLID);// 1 bit /shape type -// MESSAGE("_shapeType octal " << oct << _shapeType); - _compatibleHypothesis.push_back("MaxElementVolume"); - - _maxElementVolume = 0.; - - _hypMaxElementVolume = NULL; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -NETGENPlugin_NETGEN_3D::~NETGENPlugin_NETGEN_3D() -{ - MESSAGE("NETGENPlugin_NETGEN_3D::~NETGENPlugin_NETGEN_3D"); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool NETGENPlugin_NETGEN_3D::CheckHypothesis - (SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - SMESH_Hypothesis::Hypothesis_Status& aStatus) -{ - MESSAGE("NETGENPlugin_NETGEN_3D::CheckHypothesis"); - - _hypMaxElementVolume = NULL; - - list::const_iterator itl; - const SMESHDS_Hypothesis* theHyp; - - const list& hyps = GetUsedHypothesis(aMesh, aShape); - int nbHyp = hyps.size(); - if (!nbHyp) - { - aStatus = SMESH_Hypothesis::HYP_MISSING; - return false; // can't work with no hypothesis - } - - itl = hyps.begin(); - theHyp = (*itl); // use only the first hypothesis - - string hypName = theHyp->GetName(); - int hypId = theHyp->GetID(); - SCRUTE(hypName); - - bool isOk = false; - - if (hypName == "MaxElementVolume") - { - _hypMaxElementVolume = static_cast (theHyp); - ASSERT(_hypMaxElementVolume); - _maxElementVolume = _hypMaxElementVolume->GetMaxVolume(); - isOk =true; - aStatus = SMESH_Hypothesis::HYP_OK; - } - else - aStatus = SMESH_Hypothesis::HYP_INCOMPATIBLE; - - return isOk; -} - -//============================================================================= -/*! - *Here we are going to use the NETGEN mesher - */ -//============================================================================= - -bool NETGENPlugin_NETGEN_3D::Compute(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape) -{ - MESSAGE("NETGENPlugin_NETGEN_3D::Compute with maxElmentsize = " << _maxElementVolume); - - bool isOk = false; - SMESHDS_Mesh* meshDS = aMesh.GetMeshDS(); - SMESH_subMesh* theSubMesh = aMesh.GetSubMesh(aShape); - //const Handle(SMESHDS_SubMesh)& subMeshDS = theSubMesh->GetSubMeshDS(); - - map netgenToDS; - - MESSAGE("NETGENPlugin_NETGEN_3D::Compute Checking the mesh Faces"); - - // check if all faces were meshed by a triangle mesher (here MESFISTO_2D) - - vector meshFaces; - vector shapeFaces; - - for (TopExp_Explorer exp(aShape,TopAbs_FACE);exp.More();exp.Next()) - { - TopoDS_Shape aShapeFace = exp.Current(); - SMESH_subMesh* aSubMesh = aMesh.GetSubMeshContaining(exp.Current()); - ASSERT (aSubMesh); - int internal_size = meshFaces.size(); - int index = 0; - for (int i = 0;iGetSubShape(); - TopoDS_Shape aFace = shapeFaces[i]; - SMESH_Algo* algoFace = _gen->GetAlgo(aMesh, aShapeFace); - string algoFaceName = algoFace->GetName(); - SCRUTE(algoFaceName); - if (algoFaceName != "MEFISTO_2D") - { - SCRUTE(algoFaceName); - ASSERT(0); - return false; - } - - bool orientationMeshFace = (aFace.Orientation() == aShapeFace.Orientation()); - - const SMESHDS_SubMesh* aSubMeshDSFace = meshFaces[i]->GetSubMeshDS(); - SCRUTE(aSubMeshDSFace); - - int nbNodes = aSubMeshDSFace->NbNodes(); - NbTotOfNodesFaces += nbNodes; - int nbTria = aSubMeshDSFace->NbElements(); - NbTotOfTria += nbTria; - int index = 0; - - MESSAGE("NETGENPlugin_NETGEN_3D::Compute The mesh Face " << (i+1) << " has " << nbNodes << " face internal Nodes, " << nbTria << " triangles"); - - SCRUTE(orientationMeshFace); - - if (orientationMeshFace) - { - MESSAGE("The mesh and face have the same orientation"); - } - else - { - MESSAGE("The mesh and face have different orientations"); - } - - SMDS_NodeIteratorPtr iteratorNodes = aSubMeshDSFace->GetNodes(); - SCRUTE(nbNodes); - index = 0; - while(iteratorNodes->more()) - { - index++; - const SMDS_MeshNode * node = iteratorNodes->next(); -// int nodeId = node->GetID(); -// double nodeX = node->X(); -// double nodeY = node->Y(); -// double nodeZ = node->Z(); -// MESSAGE("NODE -> ID = " << nodeId << " X = " << nodeX << " Y = " << nodeY << " Z = " << nodeZ); - } - - SCRUTE(index); - - SMDS_ElemIteratorPtr iteratorTriangle = aSubMeshDSFace->GetElements(); - - SCRUTE(nbTria); - index = 0; - int numberOfDegeneratedTriangle = 0; - while(iteratorTriangle->more()) - { - index++; - const SMDS_MeshElement * triangle = iteratorTriangle->next(); - int triangleId = triangle->GetID(); - - SMDS_ElemIteratorPtr triangleNodesIt = triangle->nodesIterator(); - - const SMDS_MeshNode * node1 = static_cast(triangleNodesIt->next()); - double node1X = node1->X(); - double node1Y = node1->Y(); - double node1Z = node1->Z(); - - const SMDS_MeshNode * node2 = static_cast(triangleNodesIt->next()); - double node2X = node2->X(); - double node2Y = node2->Y(); - double node2Z = node2->Z(); - - const SMDS_MeshNode * node3 = static_cast(triangleNodesIt->next()); - double node3X = node3->X(); - double node3Y = node3->Y(); - double node3Z = node3->Z(); - - int triangleNode1 = node1->GetID(); - int triangleNode2 = node2->GetID(); - int triangleNode3 = node3->GetID(); - - // Compute the triangle surface - - double vect1 = ((node2Y - node1Y)*(node3Z - node1Z) - (node2Z - node1Z)*(node3Y - node1Y)); - double vect2 = - ((node2X - node1X)*(node3Z - node1Z) - (node2Z - node1Z)*(node3X - node1X)); - double vect3 = ((node2X - node1X)*(node3Y - node1Y) - (node2Y - node1Y)*(node3X - node1X)); - double epsilon = 1.0e-6; - - bool triangleIsDegenerated = ((abs(vect1) ID = " << triangleId << " N1 = " << triangleNode1 << " N2 = " << triangleNode2 << " N3 = " << triangleNode3 << " is degenerated"); -// MESSAGE("NODE -> ID = " << triangleNode1 << " X = " << node1X << " Y = " << node1Y << " Z = " << node1Z); -// MESSAGE("NODE -> ID = " << triangleNode2 << " X = " << node2X << " Y = " << node2Y << " Z = " << node2Z); -// MESSAGE("NODE -> ID = " << triangleNode3 << " X = " << node3X << " Y = " << node3Y << " Z = " << node3Z); - numberOfDegeneratedTriangle++; - } - else - { -// MESSAGE("TRIANGLE -> ID = " << triangleId << " N1 = " << triangleNode1 << " N2 = " << triangleNode2 << " N3 = " << triangleNode3 << " is normal"); - } - } - - if (numberOfDegeneratedTriangle > 0) - MESSAGE("WARNING THERE IS(ARE) " << numberOfDegeneratedTriangle << " degenerated triangle on this face"); - - SCRUTE(index); - } - - - - SCRUTE(NbTotOfTria); - SCRUTE(NbTotOfNodesFaces); - - MESSAGE("NETGENPlugin_NETGEN_3D::Compute Checking the mesh Edges"); - - // check if all edges were meshed by a edge mesher (here Regular_1D) - - vector meshEdges; - for (TopExp_Explorer exp(aShape,TopAbs_EDGE);exp.More();exp.Next()) - { - SMESH_subMesh* aSubMesh = aMesh.GetSubMeshContaining(exp.Current()); - ASSERT (aSubMesh); - int internal_size = meshEdges.size(); - int index = 0; - for (int i = 0;iGetSubShape(); - SMESH_Algo* algoEdge = _gen->GetAlgo(aMesh, aShapeEdge); - string algoEdgeName = algoEdge->GetName(); - SCRUTE(algoEdgeName); - if (algoEdgeName != "Regular_1D") - { - SCRUTE(algoEdgeName); - ASSERT(0); - return false; - } - - const SMESHDS_SubMesh* aSubMeshDSEdge = meshEdges[i]->GetSubMeshDS(); - SCRUTE(aSubMeshDSEdge); - - int nbNodes = aSubMeshDSEdge->NbNodes(); - NbTotOfNodesEdges += nbNodes; - int nbSegs = aSubMeshDSEdge->NbElements(); - NbTotOfSegs += nbSegs; - - MESSAGE("NETGENPlugin_NETGEN_3D::Compute The mesh Edge " << (i+1) << " has " << nbNodes << " edge internal Nodes, " << nbSegs << " segments"); - - SMDS_NodeIteratorPtr iteratorNodes = aSubMeshDSEdge->GetNodes(); - SCRUTE(nbNodes); - int index = 0; - while(iteratorNodes->more()) - { - index++; - const SMDS_MeshNode * node = iteratorNodes->next(); -// int nodeId = node->GetID(); -// double nodeX = node->X(); -// double nodeY = node->Y(); -// double nodeZ = node->Z(); -// MESSAGE("NODE -> ID = " << nodeId << " X = " << nodeX << " Y = " << nodeY << " Z = " << nodeZ); - } - - SCRUTE(index); - } - - SCRUTE(NbTotOfNodesEdges); - SCRUTE(NbTotOfSegs); - - MESSAGE("NETGENPlugin_NETGEN_3D::Compute Checking the mesh Vertices"); - - vector meshVertices; - for (TopExp_Explorer exp(aShape,TopAbs_VERTEX);exp.More();exp.Next()) - { - SMESH_subMesh* aSubMesh = aMesh.GetSubMeshContaining(exp.Current()); - ASSERT (aSubMesh); - int internal_size = meshVertices.size(); - int index = 0; - for (int i = 0;iGetSubShape(); - - const SMESHDS_SubMesh * aSubMeshDSVertex = meshVertices[i]->GetSubMeshDS(); - SCRUTE(aSubMeshDSVertex); - - int nbNodes = aSubMeshDSVertex->NbNodes(); - NbTotOfNodesVertices += nbNodes; - - MESSAGE("NETGENPlugin_NETGEN_3D::Compute The mesh Vertex " << (i+1) << " has " << nbNodes << " Nodes"); - - SMDS_NodeIteratorPtr iteratorNodes = aSubMeshDSVertex->GetNodes(); - SCRUTE(nbNodes); - int index = 0; - while(iteratorNodes->more()) - { - index++; - const SMDS_MeshNode * node = iteratorNodes->next(); -// int nodeId = node->GetID(); -// double nodeX = node->X(); -// double nodeY = node->Y(); -// double nodeZ = node->Z(); -// MESSAGE("NODE -> ID = " << nodeId << " X = " << nodeX << " Y = " << nodeY << " Z = " << nodeZ); - } - - SCRUTE(index); - } - - SCRUTE(NbTotOfNodesVertices); - - MESSAGE("NETGENPlugin_NETGEN_3D::Compute --> Analysis of all shell mesh"); - - vector meshShells; - TopoDS_Shell aShell; - - for (TopExp_Explorer exp(aShape,TopAbs_SHELL);exp.More();exp.Next()) - { - SMESH_subMesh* aSubMesh = aMesh.GetSubMesh(exp.Current()); - ASSERT(aSubMesh); - SCRUTE(aSubMesh); - aShell = TopoDS::Shell(exp.Current()); - meshShells.push_back(aSubMesh); - } - - int numberOfShells = meshShells.size(); - SCRUTE(numberOfShells); - - if (numberOfShells == 1) - { - MESSAGE("NETGENPlugin_NETGEN_3D::Compute Only one shell --> generation of the mesh using directly Netgen"); - - /* - Prepare the Netgen surface mesh from the SMESHDS - */ - - MESSAGE("NETGENPlugin_NETGEN_3D::Compute Prepare the Netgen surface mesh from the SMESHDS"); - - int spaceDimension = 3; - int nbNodesByTri = 3; - int nbNodesByTetra = 4; - - int Netgen_NbOfNodes = NbTotOfNodesFaces + - NbTotOfNodesEdges + - NbTotOfNodesVertices; - int Netgen_NbOfTria = NbTotOfTria; - int Netgen_param2ndOrder = 0; - double Netgen_paramFine = 1.; - double Netgen_paramSize = _maxElementVolume; - - SCRUTE(Netgen_NbOfNodes); - SCRUTE(Netgen_NbOfTria); - - double * Netgen_Coordinates = new double [spaceDimension* - Netgen_NbOfNodes]; - int * listNodeCoresNetgenSmesh = new int [Netgen_NbOfNodes]; - int * Netgen_Connectivity = new int [nbNodesByTri*Netgen_NbOfTria]; - double * Netgen_point = new double [spaceDimension]; - int * Netgen_triangle = new int [nbNodesByTri]; - int * Netgen_tetrahedron = new int [nbNodesByTetra]; - - for (int i=0; iGetSubMeshDS(); - - SMDS_NodeIteratorPtr iteratorNodes = aSubMeshDSVertex->GetNodes(); - - while(iteratorNodes->more()) - { - const SMDS_MeshNode * node = iteratorNodes->next(); - int nodeId = node->GetID(); - double nodeX = node->X(); - double nodeY = node->Y(); - double nodeZ = node->Z(); -// MESSAGE("NODE -> ID = " << nodeId << " X = " << nodeX << " Y = " << nodeY << " Z = " << nodeZ); - listNodeCoresNetgenSmesh[indexNodes] = nodeId; - int index = indexNodes*spaceDimension; - Netgen_Coordinates[index] = nodeX; - Netgen_Coordinates[index+1] = nodeY; - Netgen_Coordinates[index+2] = nodeZ; - netgenToDS[indexNodes] = node; - indexNodes++; - } - } - - for (int i=0; iGetSubMeshDS(); - - SMDS_NodeIteratorPtr iteratorNodes = aSubMeshDSEdge->GetNodes(); - - while(iteratorNodes->more()) - { - const SMDS_MeshNode * node = iteratorNodes->next(); - int nodeId = node->GetID(); - double nodeX = node->X(); - double nodeY = node->Y(); - double nodeZ = node->Z(); -// MESSAGE("NODE -> ID = " << nodeId << " X = " << nodeX << " Y = " << nodeY << " Z = " << nodeZ); - listNodeCoresNetgenSmesh[indexNodes] = node->GetID(); - int index = indexNodes*spaceDimension; - Netgen_Coordinates[index] = node->X(); - Netgen_Coordinates[index+1] = node->Y(); - Netgen_Coordinates[index+2] = node->Z(); - netgenToDS[indexNodes] = node; - indexNodes++; - } - } - - for (int i=0; iGetSubMeshDS(); - - SMDS_NodeIteratorPtr iteratorNodes = aSubMeshDSFace->GetNodes(); - - while(iteratorNodes->more()) - { - const SMDS_MeshNode * node = iteratorNodes->next(); - int nodeId = node->GetID(); - double nodeX = node->X(); - double nodeY = node->Y(); - double nodeZ = node->Z(); -// MESSAGE("NODE -> ID = " << nodeId << " X = " << nodeX << " Y = " << nodeY << " Z = " << nodeZ); - listNodeCoresNetgenSmesh[indexNodes] = nodeId; - int index = indexNodes*spaceDimension; - Netgen_Coordinates[index] = nodeX; - Netgen_Coordinates[index+1] = nodeY; - Netgen_Coordinates[index+2] = nodeZ; - netgenToDS[indexNodes] = node; - indexNodes++; - } - } - - SCRUTE(indexNodes); - - for (int i=0; iGetSubMeshDS(); - - TopoDS_Shape aFace = shapeFaces[i]; - - SMDS_ElemIteratorPtr iteratorTriangle = aSubMeshDSFace->GetElements(); - - TopoDS_Shape aShapeFace = meshFaces[i]->GetSubShape(); - - bool orientationMeshFace = (aFace.Orientation() == aShapeFace.Orientation()); - - SCRUTE(orientationMeshFace); - - if (orientationMeshFace) - { - MESSAGE("The mesh and face have the same orientation"); - - while(iteratorTriangle->more()) - { - const SMDS_MeshElement * triangle = iteratorTriangle->next(); - int triangleId = triangle->GetID(); - - SMDS_ElemIteratorPtr triangleNodesIt = triangle->nodesIterator(); - - int triangleNode1 = (triangleNodesIt->next())->GetID(); - int triangleNode2 = (triangleNodesIt->next())->GetID(); - int triangleNode3 = (triangleNodesIt->next())->GetID(); - -// MESSAGE("TRIANGLE -> ID = " << triangleId << " N1 = " << triangleNode1 << " N2 = " << triangleNode2 << " N3 = " << triangleNode3); - - int N1New = 0; - int N2New = 0; - int N3New = 0; - int index = indexTrias*nbNodesByTri; - - for (int j=0; jmore()) - { - const SMDS_MeshElement * triangle = iteratorTriangle->next(); - int triangleId = triangle->GetID(); - - SMDS_ElemIteratorPtr triangleNodesIt = triangle->nodesIterator(); - - int triangleNode1 = (triangleNodesIt->next())->GetID(); - int triangleNode3 = (triangleNodesIt->next())->GetID(); - int triangleNode2 = (triangleNodesIt->next())->GetID(); - -// MESSAGE("TRIANGLE -> ID = " << triangleId << " N1 = " << triangleNode1 << " N2 = " << triangleNode2 << " N3 = " << triangleNode3); - - int N1New = 0; - int N2New = 0; - int N3New = 0; - int index = indexTrias*nbNodesByTri; - - for (int j=0; j=1) && (Nij<=Netgen_NbOfNodes)); - - nodesUsed[Nij-1] = 1; - Netgen_Connectivity[i*nbNodesByTri+j] = Nij; - } - - for (int i=0; i Adding the New Nodes to SMESHDS"); - - for (int i=0; iAddNode(Netgen_CoordinatesNew[index], - Netgen_CoordinatesNew[index+1], - Netgen_CoordinatesNew[index+2]); - - meshDS->SetNodeInVolume(node, aShell); - - index = i+Netgen_NbOfNodes; - netgenToDS[index] = node; - - listNodeShellCoresNetgenSmesh[i] = node->GetID(); - } - - SCRUTE(Netgen_NbOfNodesNew); - - SCRUTE(netgenToDS.size()); - - for (int i=0; i Adding the New elements (Tetrahedrons) to the SMESHDS"); - - for (int i=0; iAddVolume(node1,node2,node3,node4); - - meshDS->SetMeshElementOnShape(elt, aShell); - } - - /* - Free the memory needed by to generate the Netgen Mesh - */ - - MESSAGE("NETGENPlugin_NETGEN_3D::Compute Free the memory needed by to generate the Netgen Mesh"); - - delete [] Netgen_Coordinates; - delete [] Netgen_Connectivity; - delete [] Netgen_CoordinatesNew; - delete [] Netgen_ConnectivityNew; - delete [] Netgen_point; - delete [] Netgen_triangle; - delete [] Netgen_tetrahedron; - - delete [] listNodeCoresNetgenSmesh; - delete [] listNodeShellCoresNetgenSmesh; - - Ng_DeleteMesh(Netgen_mesh); - Ng_Exit(); - - /* - Verification - */ - - { - MESSAGE("NETGENPlugin_NETGEN_3D::Compute Verification of the Shell mesh"); - - TopoDS_Shape aShapeShell = meshShells[0]->GetSubShape(); - SMESH_Algo* algoShell = _gen->GetAlgo(aMesh, aShapeShell); - string algoShellName = algoShell->GetName(); - SCRUTE(algoShellName); - if (algoShellName != "NETGEN_3D") - { - SCRUTE(algoShellName); - ASSERT(0); - return false; - } - - const SMESHDS_SubMesh * aSubMeshDSShell = meshShells[0]->GetSubMeshDS(); - SCRUTE(&aSubMeshDSShell); - - int nbNodes = aSubMeshDSShell->NbNodes(); - int nbTetra = aSubMeshDSShell->NbElements(); - - MESSAGE("NETGENPlugin_NETGEN_3D::Compute The mesh Shell has " << nbNodes << " shell internal Nodes, " << nbTetra << " tetrahedrons"); - - SMDS_NodeIteratorPtr iteratorNodes = aSubMeshDSShell->GetNodes(); - - SCRUTE(nbNodes); - - int index; - - index = 0; - - while(iteratorNodes->more()) - { - index++; - const SMDS_MeshNode * node = iteratorNodes->next(); - int nodeId = node->GetID(); - double nodeX = node->X(); - double nodeY = node->Y(); - double nodeZ = node->Z(); -// MESSAGE("NODE -> ID = " << nodeId << " X = " << nodeX << " Y = " << nodeY << " Z = " << nodeZ); - } - - SCRUTE(index); - - SMDS_ElemIteratorPtr iteratorTetra = aSubMeshDSShell->GetElements(); - - SCRUTE(nbTetra); - - index = 0; - while(iteratorTetra->more()) - { - index++; - const SMDS_MeshElement * tetra = iteratorTetra->next(); - int tetraId = tetra->GetID(); - - SMDS_ElemIteratorPtr tetraNodesIt = tetra->nodesIterator(); - - int tetraNode1 = (tetraNodesIt->next())->GetID(); - int tetraNode2 = (tetraNodesIt->next())->GetID(); - int tetraNode3 = (tetraNodesIt->next())->GetID(); - int tetraNode4 = (tetraNodesIt->next())->GetID(); - -// MESSAGE("TETRAHEDRON -> ID = " << tetraId << " N1 = " << tetraNode1 << " N2 = " << tetraNode2 << " N3 = " << tetraNode3 << " N4 = " << tetraNode4); - - } - - SCRUTE(index); - } - } - else - { - SCRUTE(numberOfShells); - MESSAGE("NETGENPlugin_NETGEN_3D::Compute ERROR More than one shell ????? "); - return false; - } - - return true; -} - - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & NETGENPlugin_NETGEN_3D::SaveTo(ostream & save) -{ - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & NETGENPlugin_NETGEN_3D::LoadFrom(istream & load) -{ - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator << (ostream & save, NETGENPlugin_NETGEN_3D & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >> (istream & load, NETGENPlugin_NETGEN_3D & hyp) -{ - return hyp.LoadFrom( load ); -} diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx deleted file mode 100644 index b0858806d..000000000 --- a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx +++ /dev/null @@ -1,43 +0,0 @@ -//============================================================================= -// File : NETGENPlugin_NETGEN_3D.hxx -// Moved here from SMESH_NETGEN_3D.hxx -// Created : lundi 27 Janvier 2003 -// Author : Nadir BOUHAMOU (CEA) -// Project : SALOME -// Copyright : CEA 2003 -// $Header$ -//============================================================================= - -#ifndef _NETGENPlugin_NETGEN_3D_HXX_ -#define _NETGENPlugin_NETGEN_3D_HXX_ - -#include "SMESH_3D_Algo.hxx" -#include "SMESH_Mesh.hxx" -#include "StdMeshers_MaxElementVolume.hxx" -#include "Utils_SALOME_Exception.hxx" - -class NETGENPlugin_NETGEN_3D: public SMESH_3D_Algo -{ -public: - NETGENPlugin_NETGEN_3D(int hypId, int studyId, SMESH_Gen* gen); - virtual ~NETGENPlugin_NETGEN_3D(); - - virtual bool CheckHypothesis(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - SMESH_Hypothesis::Hypothesis_Status& aStatus); - - virtual bool Compute(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape); - - ostream & SaveTo(ostream & save); - istream & LoadFrom(istream & load); - friend ostream & operator << (ostream & save, NETGENPlugin_NETGEN_3D & hyp); - friend istream & operator >> (istream & load, NETGENPlugin_NETGEN_3D & hyp); - -protected: - double _maxElementVolume; - - const StdMeshers_MaxElementVolume* _hypMaxElementVolume; -}; - -#endif diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.cxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.cxx deleted file mode 100644 index 489d6822e..000000000 --- a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.cxx +++ /dev/null @@ -1,85 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : NETGENPlugin_NETGEN_3D_i.cxx -// Moved here from SMESH_NETGEN_3D_i.cxx -// Author : Nadir Bouhamou CEA -// Module : SMESH -// $Header$ - -using namespace std; -#include "NETGENPlugin_NETGEN_3D_i.hxx" -#include "SMESH_Gen.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * NETGENPlugin_NETGEN_3D_i::NETGENPlugin_NETGEN_3D_i - * - * Constructor - */ -//============================================================================= - -NETGENPlugin_NETGEN_3D_i::NETGENPlugin_NETGEN_3D_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ), - SMESH_Algo_i( thePOA ), - SMESH_3D_Algo_i( thePOA ) -{ - MESSAGE( "NETGENPlugin_NETGEN_3D_i::NETGENPlugin_NETGEN_3D_i" ); - myBaseImpl = new ::NETGENPlugin_NETGEN_3D( theGenImpl->GetANewId(), - theStudyId, - theGenImpl ); -} - -//============================================================================= -/*! - * NETGENPlugin_NETGEN_3D_i::~NETGENPlugin_NETGEN_3D_i - * - * Destructor - */ -//============================================================================= - -NETGENPlugin_NETGEN_3D_i::~NETGENPlugin_NETGEN_3D_i() -{ - MESSAGE( "NETGENPlugin_NETGEN_3D_i::~NETGENPlugin_NETGEN_3D_i" ); -} - -//============================================================================= -/*! - * NETGENPlugin_NETGEN_3D_i::GetImpl - * - * Get implementation - */ -//============================================================================= - -::NETGENPlugin_NETGEN_3D* NETGENPlugin_NETGEN_3D_i::GetImpl() -{ - MESSAGE( "NETGENPlugin_NETGEN_3D_i::GetImpl" ); - return ( ::NETGENPlugin_NETGEN_3D* )myBaseImpl; -} - diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.hxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.hxx deleted file mode 100644 index 724fafa55..000000000 --- a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.hxx +++ /dev/null @@ -1,58 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : NETGENPlugin_NETGEN_3D_i.hxx -// Moved here from SMESH_NETGEN_3D_i.hxx -// Author : Nadir Bouhamou CEA -// Module : SMESH -// $Header$ - -#ifndef _NETGENPlugin_NETGEN_3D_I_HXX_ -#define _NETGENPlugin_NETGEN_3D_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_NetgenAlgorithm) - -#include "SMESH_3D_Algo_i.hxx" -#include "NETGENPlugin_NETGEN_3D.hxx" - -// ====================================================== -// NETGEN 3d algorithm -// ====================================================== -class NETGENPlugin_NETGEN_3D_i: - public virtual POA_NETGENPlugin::NETGENPlugin_NETGEN_3D, - public virtual SMESH_3D_Algo_i -{ -public: - // Constructor - NETGENPlugin_NETGEN_3D_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ); - // Destructor - virtual ~NETGENPlugin_NETGEN_3D_i(); - - // Get implementation - ::NETGENPlugin_NETGEN_3D* GetImpl(); -}; - -#endif diff --git a/src/NETGENPlugin/NETGENPlugin_i.cxx b/src/NETGENPlugin/NETGENPlugin_i.cxx deleted file mode 100644 index 7ec0e06f5..000000000 --- a/src/NETGENPlugin/NETGENPlugin_i.cxx +++ /dev/null @@ -1,60 +0,0 @@ -// SMESH NETGENPlugin : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : NETGENPlugin.cxx -// Author : Julia DOROVSKIKH -// Module : SMESH -// $Header$ - -using namespace std; -#include "SMESH_Hypothesis_i.hxx" -#include "SMESH_Gen_i.hxx" - -#include "utilities.h" - -#include "NETGENPlugin_NETGEN_3D_i.hxx" - -//============================================================================= -/*! - * - */ -//============================================================================= - -extern "C" -{ - GenericHypothesisCreator_i* GetHypothesisCreator (const char* aHypName) - { - MESSAGE("GetHypothesisCreator " << aHypName); - - GenericHypothesisCreator_i* aCreator = 0; - - // Hypotheses - - // Algorithms - if (strcmp(aHypName, "NETGEN_3D") == 0) - aCreator = new HypothesisCreator_i; - else ; - - return aCreator; - } -} diff --git a/src/NETGENPlugin/NETGENPlugin_icons.po b/src/NETGENPlugin/NETGENPlugin_icons.po deleted file mode 100644 index a3f6297d7..000000000 --- a/src/NETGENPlugin/NETGENPlugin_icons.po +++ /dev/null @@ -1,20 +0,0 @@ -# This is a Qt message file in .po format. Each msgid starts with -# a scope. This scope should *NOT* be translated - eg. "Foo::Bar" -# would be translated to "Pub", not "Foo::Pub". -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2002-05-28 10:57:43 AM CEST\n" -"PO-Revision-Date: YYYY-MM-DD\n" -"Last-Translator: FULLNAME \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - - -#----------------------------------------------------------- -# ObjectBrowser -#----------------------------------------------------------- - -#mesh_tree_algo_netgen -msgid "ICON_SMESH_TREE_ALGO_NETGEN_3D" -msgstr "mesh_tree_algo_tetra.png" -#msgstr "mesh_tree_algo_netgen.png" diff --git a/src/OBJECT/Makefile.in b/src/OBJECT/Makefile.in deleted file mode 100644 index 8cf070ccf..000000000 --- a/src/OBJECT/Makefile.in +++ /dev/null @@ -1,58 +0,0 @@ -# SMESH OBJECT : interactive object for SMESH visualization -# -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : Makefile.in -# Module : SMESH - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl - -@COMMENCE@ - -EXPORT_HEADERS = SMESH_Actor.h SMESH_Object.h SMESH_ObjectDef.h SMESH_ActorUtils.h - - -# Libraries targets - -LIB = libSMESHObject.la -LIB_SRC = SMESH_Object.cxx SMESH_DeviceActor.cxx SMESH_Actor.cxx \ - SMESH_ExtractGeometry.cxx SMESH_ActorUtils.cxx - -LIB_CLIENT_IDL = SALOME_Exception.idl \ - SALOME_GenericObj.idl \ - SMESH_Mesh.idl \ - SMESH_Group.idl - - -# Executables targets -BIN = -BIN_SRC = - -CPPFLAGS+=$(OCC_INCLUDES) $(VTK_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome -I${GUI_ROOT_DIR}/include/salome \ - $(BOOST_CPPFLAGS) $(QT_INCLUDES) -LDFLAGS+=$(OCC_KERNEL_LIBS) $(VTK_LIBS) -L${KERNEL_ROOT_DIR}/lib/salome -L${GUI_ROOT_DIR}/lib/salome -lSMDS \ - -lSalomeApp -lSalomeObject -lSMESHControls - -@CONCLUDE@ diff --git a/src/OBJECT/SMESH_Actor.cxx b/src/OBJECT/SMESH_Actor.cxx index bdadcf026..3c5e2e0d0 100644 --- a/src/OBJECT/SMESH_Actor.cxx +++ b/src/OBJECT/SMESH_Actor.cxx @@ -116,7 +116,10 @@ SMESH_ActorDef::SMESH_ActorDef() myIsShrinkable = false; myIsShrunk = false; - myControlsPrecision = (long)SMESH::GetFloat( "SMESH:controls_precision", -1 ); + myControlsPrecision = -1; + SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr(); + if ( mgr && mgr->booleanValue( "SMESH", "use_precision", false ) ) + myControlsPrecision = (long)SMESH::GetFloat( "SMESH", "controls_precision", -1 ); float aPointSize = SMESH::GetFloat("SMESH:node_size",3); float aLineWidth = SMESH::GetFloat("SMESH:element_width",1); @@ -278,7 +281,7 @@ SMESH_ActorDef::SMESH_ActorDef() myScalarBarActor->SetVisibility(false); myScalarBarActor->SetLookupTable(myLookupTable); - SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr(); + mgr = SUIT_Session::session()->resourceMgr(); if( !mgr ) return; @@ -585,6 +588,14 @@ SetControlMode(eControl theMode, myControlActor = my3DActor; break; } + case eVolume3D: + { + SMESH::Controls::Volume* aControl = new SMESH::Controls::Volume(); + aControl->SetPrecision( myControlsPrecision ); + aFunctor.reset( aControl ); + myControlActor = my3DActor; + break; + } case eMinimumAngle: { SMESH::Controls::MinimumAngle* aControl = new SMESH::Controls::MinimumAngle(); @@ -743,18 +754,18 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj, if( !mgr ) return false; - QString aMode = mgr->stringValue( "SMESH", "display_mode" ); + int aMode = mgr->integerValue( "SMESH", "display_mode" ); SetRepresentation(-1); - if(aMode.compare("Wireframe") == 0){ + if(aMode == 0){ SetRepresentation(eEdge); - }else if(aMode.compare("Shading") == 0){ + }else if(aMode == 1){ SetRepresentation(eSurface); - }else if(aMode.compare("Nodes") == 0){ + }else if(aMode == 2){ SetRepresentation(ePoint); } - if(aMode == "Shrink"){ + if(aMode == 3){ SetShrink(); } diff --git a/src/OBJECT/SMESH_Actor.h b/src/OBJECT/SMESH_Actor.h deleted file mode 100644 index 038a9267e..000000000 --- a/src/OBJECT/SMESH_Actor.h +++ /dev/null @@ -1,121 +0,0 @@ -// SMESH OBJECT : interactive object for SMESH visualization -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Actor.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef SMESH_ACTOR_H -#define SMESH_ACTOR_H - -#include -#include "SMESH_Object.h" - -class vtkUnstructuredGrid; - -class vtkScalarBarActor; - -class vtkPlane; -class vtkImplicitBoolean; - -class SMESH_Actor: public SALOME_Actor -{ - static SMESH_Actor* New() { return NULL;} - - public: - vtkTypeMacro(SMESH_Actor,SALOME_Actor); - static SMESH_Actor* New(TVisualObjPtr theVisualObj, - const char* theEntry, - const char* theName, - int theIsClear); - - virtual void SetSufaceColor(float r,float g,float b) = 0; - virtual void GetSufaceColor(float& r,float& g,float& b) = 0; - - virtual void SetBackSufaceColor(float r,float g,float b) = 0; - virtual void GetBackSufaceColor(float& r,float& g,float& b) = 0; - - virtual void SetEdgeColor(float r,float g,float b) = 0; - virtual void GetEdgeColor(float& r,float& g,float& b) = 0; - - virtual void SetNodeColor(float r,float g,float b) = 0; - virtual void GetNodeColor(float& r,float& g,float& b) = 0; - - virtual void SetHighlightColor(float r,float g,float b) = 0; - virtual void GetHighlightColor(float& r,float& g,float& b) = 0; - - virtual void SetPreHighlightColor(float r,float g,float b) = 0; - virtual void GetPreHighlightColor(float& r,float& g,float& b) = 0; - - virtual float GetLineWidth() = 0; - virtual void SetLineWidth(float theVal) = 0; - - virtual void SetNodeSize(float size) = 0; - virtual float GetNodeSize() = 0; - - enum EReperesent { ePoint, eEdge, eSurface}; - - enum EEntityMode { eEdges = 0x01, eFaces = 0x02, eVolumes = 0x04, eAllEntity = 0x07}; - virtual void SetEntityMode(unsigned int theMode) = 0; - virtual unsigned int GetEntityMode() const = 0; - - virtual void SetPointRepresentation(bool theIsPointsVisible) = 0; - virtual bool GetPointRepresentation() = 0; - - virtual vtkUnstructuredGrid* GetUnstructuredGrid() = 0; - - virtual void SetShrinkFactor(float theValue) = 0; - - virtual void SetPointsLabeled(bool theIsPointsLabeled) = 0; - virtual bool GetPointsLabeled() = 0; - - virtual void SetCellsLabeled(bool theIsCellsLabeled) = 0; - virtual bool GetCellsLabeled() = 0; - - enum eControl{eNone, eLength, eLength2D, eFreeBorders, eFreeEdges, eMultiConnection, - eArea, eTaper, eAspectRatio, eMinimumAngle, eWarping, eSkew, - eAspectRatio3D, eMultiConnection2D}; - virtual void SetControlMode(eControl theMode) = 0; - virtual eControl GetControlMode() = 0; - - virtual vtkScalarBarActor* GetScalarBarActor() = 0; - - virtual void SetPlaneParam(float theDir[3], float theDist, vtkPlane* thePlane) = 0; - virtual void GetPlaneParam(float theDir[3], float& theDist, vtkPlane* thePlane) = 0; - - virtual void RemoveAllClippingPlanes() = 0; - virtual vtkIdType GetNumberOfClippingPlanes() = 0; - virtual vtkPlane* GetClippingPlane(vtkIdType theID) = 0; - virtual vtkIdType AddClippingPlane(vtkPlane* thePlane) = 0; - - virtual TVisualObjPtr GetObject() = 0; - - virtual void SetControlsPrecision( const long ) = 0; - virtual long GetControlsPrecision() const = 0; - - virtual void UpdateScalarBar() = 0; -}; - - -#endif //SMESH_ACTOR_H diff --git a/src/OBJECT/SMESH_ActorDef.h b/src/OBJECT/SMESH_ActorDef.h deleted file mode 100644 index 7ed5149f1..000000000 --- a/src/OBJECT/SMESH_ActorDef.h +++ /dev/null @@ -1,277 +0,0 @@ -// SMESH OBJECT : interactive object for SMESH visualization -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_ActorDef.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef SMESH_ACTORDEF_H -#define SMESH_ACTORDEF_H - -#include "SMESH_Actor.h" -#include "SMESH_Object.h" - -#include - -template -class TVTKSmartPtr: public vtkSmartPointer -{ -public: - TVTKSmartPtr() {} - TVTKSmartPtr(T* r, bool theIsOwner = false): vtkSmartPointer(r) { - if(r && theIsOwner) - r->Delete(); - } - TVTKSmartPtr& operator()(T* r, bool theIsOwner = false){ - vtkSmartPointer::operator=(r); - if(r && theIsOwner) - r->Delete(); - return *this; - } - TVTKSmartPtr& operator=(T* r){ vtkSmartPointer::operator=(r); return *this;} - T* Get() const { return this->GetPointer();} -}; - - -class vtkProperty; -class vtkShrinkFilter; -class vtkPolyDataMapper; -class vtkUnstructuredGrid; -class vtkMergeFilter; -class vtkPolyData; - -class vtkMapper; -class vtkActor2D; -class vtkMaskPoints; -class vtkCellCenters; -class vtkLabeledDataMapper; -class vtkSelectVisiblePoints; - -class vtkScalarBarActor; -class vtkLookupTable; - -class vtkPlane; -class vtkImplicitBoolean; - -class vtkTimeStamp; - -class SMESH_DeviceActor; - - -class SMESH_ActorDef : public SMESH_Actor{ - friend class SMESH_VisualObj; - friend class SMESH_Actor; - - public: - vtkTypeMacro(SMESH_ActorDef,SMESH_Actor); - - virtual void ReleaseGraphicsResources(vtkWindow *renWin); - virtual int RenderOpaqueGeometry(vtkViewport *viewport); - virtual int RenderTranslucentGeometry(vtkViewport *viewport); - virtual void Render(vtkRenderer *ren); - - virtual void AddToRender(vtkRenderer* theRenderer); - virtual void RemoveFromRender(vtkRenderer* theRenderer); - - virtual bool hasHighlight() { return true; } - virtual void highlight(bool theHighlight); - virtual void SetPreSelected(bool thePreselect = false); - - virtual bool IsInfinitive(); - - virtual void SetOpacity(float theValue); - virtual float GetOpacity(); - - virtual void SetSufaceColor(float r,float g,float b); - virtual void GetSufaceColor(float& r,float& g,float& b); - - virtual void SetBackSufaceColor(float r,float g,float b); - virtual void GetBackSufaceColor(float& r,float& g,float& b); - - virtual void SetEdgeColor(float r,float g,float b); - virtual void GetEdgeColor(float& r,float& g,float& b); - - virtual void SetNodeColor(float r,float g,float b); - virtual void GetNodeColor(float& r,float& g,float& b); - - virtual void SetHighlightColor(float r,float g,float b); - virtual void GetHighlightColor(float& r,float& g,float& b); - - virtual void SetPreHighlightColor(float r,float g,float b); - virtual void GetPreHighlightColor(float& r,float& g,float& b); - - virtual float GetLineWidth(); - virtual void SetLineWidth(float theVal); - - virtual void SetNodeSize(float size) ; - virtual float GetNodeSize() ; - - virtual int GetNodeObjId(int theVtkID); - virtual float* GetNodeCoord(int theObjID); - - virtual int GetElemObjId(int theVtkID); - virtual vtkCell* GetElemCell(int theObjID); - - virtual int GetObjDimension( const int theObjId ); - - virtual void SetVisibility(int theMode); - void SetVisibility(int theMode, bool theIsUpdateRepersentation); - - virtual void SetRepresentation(int theMode); - - virtual unsigned int GetEntityMode() const { return myEntityMode;} - virtual void SetEntityMode(unsigned int theMode); - - virtual void SetPointRepresentation(bool theIsPointsVisible); - virtual bool GetPointRepresentation(); - - virtual float* GetBounds(); - virtual void SetTransform(VTKViewer_Transform* theTransform); - - virtual vtkUnstructuredGrid* GetUnstructuredGrid(); - virtual vtkDataSet* GetInput(); - virtual vtkMapper* GetMapper(); - - virtual float GetShrinkFactor(); - virtual void SetShrinkFactor(float theValue); - - virtual bool IsShrunkable() { return myIsShrinkable;} - virtual bool IsShrunk() { return myIsShrunk;} - virtual void SetShrink(); - virtual void UnShrink(); - - virtual void SetPointsLabeled(bool theIsPointsLabeled); - virtual bool GetPointsLabeled(){ return myIsPointsLabeled;} - - virtual void SetCellsLabeled(bool theIsCellsLabeled); - virtual bool GetCellsLabeled(){ return myIsCellsLabeled;} - - virtual void SetControlMode(eControl theMode); - virtual eControl GetControlMode(){ return myControlMode;} - - virtual vtkScalarBarActor* GetScalarBarActor(){ return myScalarBarActor;} - - virtual void SetPlaneParam(float theDir[3], float theDist, vtkPlane* thePlane); - virtual void GetPlaneParam(float theDir[3], float& theDist, vtkPlane* thePlane); - - virtual void RemoveAllClippingPlanes(); - virtual vtkIdType GetNumberOfClippingPlanes(); - virtual vtkPlane* GetClippingPlane(vtkIdType theID); - virtual vtkIdType AddClippingPlane(vtkPlane* thePlane); - - virtual TVisualObjPtr GetObject() { return myVisualObj;} - - virtual void SetControlsPrecision( const long p ) { myControlsPrecision = p; } - virtual long GetControlsPrecision() const { return myControlsPrecision; } - - virtual void UpdateScalarBar(); - - protected: - void SetControlMode(eControl theMode, bool theCheckEntityMode); - void SetImplicitFunctionUsed(bool theIsImplicitFunctionUsed); - bool IsImplicitFunctionUsed() const; - - TVisualObjPtr myVisualObj; - vtkTimeStamp* myTimeStamp; - - vtkScalarBarActor* myScalarBarActor; - vtkLookupTable* myLookupTable; - - vtkProperty* mySurfaceProp; - vtkProperty* myBackSurfaceProp; - vtkProperty* myEdgeProp; - vtkProperty* myNodeProp; - - SMESH_DeviceActor* myBaseActor; - SMESH_DeviceActor* myNodeActor; - SMESH_DeviceActor* myPickableActor; - - vtkProperty* myHighlightProp; - vtkProperty* myPreselectProp; - SMESH_DeviceActor* myHighlitableActor; - - eControl myControlMode; - SMESH_DeviceActor* my2DActor; - SMESH_DeviceActor* my3DActor; - SMESH_DeviceActor* myControlActor; - - vtkProperty* my1DProp; - SMESH_DeviceActor* my1DActor; - vtkProperty* my1DExtProp; - SMESH_DeviceActor* my1DExtActor; - - unsigned int myEntityMode; - unsigned int myEntityState; - bool myIsPointsVisible; - - bool myIsShrinkable; - bool myIsShrunk; - - bool myIsPointsLabeled; - vtkUnstructuredGrid* myPointsNumDataSet; - vtkActor2D *myPointLabels; - vtkMaskPoints* myPtsMaskPoints; - vtkLabeledDataMapper* myPtsLabeledDataMapper; - vtkSelectVisiblePoints* myPtsSelectVisiblePoints; - - bool myIsCellsLabeled; - vtkUnstructuredGrid* myCellsNumDataSet; - vtkActor2D *myCellsLabels; - vtkMaskPoints* myClsMaskPoints; - vtkCellCenters* myCellCenters; - vtkLabeledDataMapper* myClsLabeledDataMapper; - vtkSelectVisiblePoints* myClsSelectVisiblePoints; - - vtkImplicitBoolean* myImplicitBoolean; - typedef TVTKSmartPtr TPlanePtr; - typedef std::vector TCippingPlaneCont; - TCippingPlaneCont myCippingPlaneCont; - long myControlsPrecision; - - SMESH_ActorDef(); - ~SMESH_ActorDef(); - - bool Init(TVisualObjPtr theVisualObj, - const char* theEntry, - const char* theName, - int theIsClear); - - void SetIsShrunkable(bool theShrunkable); - void UpdateHighlight(); - void Update(); - - private: - // hide the two parameter Render() method from the user and the compiler. - virtual void Render(vtkRenderer *, vtkMapper *) {}; - virtual void ShallowCopy(vtkProp *prop); - virtual void SetMapper(vtkMapper *); - static SMESH_ActorDef* New(); - - // Not implemented. - SMESH_ActorDef(const SMESH_ActorDef&); - void operator=(const SMESH_ActorDef&); -}; - - -#endif //SMESH_ACTORDEF_H diff --git a/src/OBJECT/SMESH_ActorUtils.cxx b/src/OBJECT/SMESH_ActorUtils.cxx deleted file mode 100644 index feee143db..000000000 --- a/src/OBJECT/SMESH_ActorUtils.cxx +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - - -#include "SMESH_ActorUtils.h" - -#include "SUIT_Tools.h" -#include "SUIT_Session.h" -#include "SUIT_ResourceMgr.h" - -#include "utilities.h" - -#include -#include - -#ifdef _DEBUG_ -static int MYDEBUG = 1; -#else -static int MYDEBUG = 0; -#endif - -namespace SMESH{ - - float GetFloat( const QString& theValue, float theDefault ) - { - int pos = theValue.find( ":" ); - float val = theDefault; - if( pos>=0 ) - { - QString name = theValue.right( theValue.length()-pos-1 ), - sect = theValue.left( pos ); - if( !name.isEmpty() && !sect.isEmpty() ) - val = GetFloat( name, sect, theDefault ); - } - return val; - } - - float GetFloat( const QString& theValue, const QString& theSection, float theDefault ) - { - float val = theDefault; - SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr(); - if( mgr ) - val = (float) mgr->doubleValue( theValue, theSection, theDefault ); - - return val; - } - - void WriteUnstructuredGrid(vtkUnstructuredGrid* theGrid, const char* theFileName){ - vtkUnstructuredGridWriter* aWriter = vtkUnstructuredGridWriter::New(); - aWriter->SetFileName(theFileName); - aWriter->SetInput(theGrid); - if(theGrid->GetNumberOfCells()){ - aWriter->Write(); - } - aWriter->Delete(); - } - - QColor GetColor( const QString& theSect, const QString& theName, const QColor& def ) - { - QColor c = def; - SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr(); - if ( mgr ) - c = mgr->colorValue( theSect, theName, def ); - return c; - } - - void GetColor( const QString& theSect, const QString& theName, int& r, int& g, int& b, const QColor& def ) - { - QColor c = def; - SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr(); - if ( mgr ) - c = mgr->colorValue( theSect, theName, def ); - - SUIT_Tools::rgbSet( SUIT_Tools::rgbSet( c ), r, g, b ); - } - - void GetColor( const QString& theSect, const QString& theName, float& r, float& g, float& b, const QColor& def ) - { - int ir( 0 ), ig( 0 ), ib( 0 ); - GetColor( theSect, theName, ir, ig, ib, def ); - r = ir / 255.; - g = ig / 255.; - b = ib / 255.; - } -} diff --git a/src/OBJECT/SMESH_ActorUtils.h b/src/OBJECT/SMESH_ActorUtils.h deleted file mode 100644 index f28e8d6c9..000000000 --- a/src/OBJECT/SMESH_ActorUtils.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef SMESH_ACTORUTILS_H -#define SMESH_ACTORUTILS_H - -#include -#include - -class vtkUnstructuredGrid; - -namespace SMESH{ - - float GetFloat( const QString& theValue, float theDefault = 0 ); - float GetFloat( const QString& theName, const QString& theSection, float theDefault = 0 ); - - QColor GetColor( const QString& theSect, const QString& theName, const QColor&t = QColor() ); - void GetColor( const QString& theSect, const QString& theName, int&, int&, int&, const QColor&t = QColor() ); - void GetColor( const QString& theSect, const QString& theName, float&, float&, float&, const QColor&t = QColor() ); - - void WriteUnstructuredGrid(vtkUnstructuredGrid* theGrid, const char* theFileName); - -} - -#endif diff --git a/src/OBJECT/SMESH_DeviceActor.cxx b/src/OBJECT/SMESH_DeviceActor.cxx deleted file mode 100644 index 3548aaefe..000000000 --- a/src/OBJECT/SMESH_DeviceActor.cxx +++ /dev/null @@ -1,676 +0,0 @@ -// SMESH OBJECT : interactive object for SMESH visualization -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_DeviceActor.cxx -// Author : -// Module : SMESH -// $Header$ - - -#include "SMESH_DeviceActor.h" -#include "SMESH_ExtractGeometry.h" -#include "SMESH_ControlsDef.hxx" -#include "SMESH_ActorUtils.h" - -#include -#include -#include -#include - -// VTK Includes -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include "utilities.h" - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - -using namespace std; - - -vtkStandardNewMacro(SMESH_DeviceActor); - - -SMESH_DeviceActor::SMESH_DeviceActor() -{ - if(MYDEBUG) MESSAGE("SMESH_DeviceActor - "<UseLookupTableScalarRangeOn(); - myMapper->SetColorModeToMapScalars(); - - myShrinkFilter = vtkShrinkFilter::New(); - - myStoreClippingMapping = false; - - myExtractGeometry = SMESH_ExtractGeometry::New(); - myExtractGeometry->SetReleaseDataFlag(true); - myIsImplicitFunctionUsed = false; - - myExtractUnstructuredGrid = VTKViewer_ExtractUnstructuredGrid::New(); - - myMergeFilter = vtkMergeFilter::New(); - - myGeomFilter = VTKViewer_GeometryFilter::New(); - - myTransformFilter = VTKViewer_TransformFilter::New(); - - for(int i = 0; i < 6; i++) - myPassFilter.push_back(VTKViewer_PassThroughFilter::New()); -} - - -SMESH_DeviceActor::~SMESH_DeviceActor(){ - if(MYDEBUG) MESSAGE("~SMESH_DeviceActor - "<Delete(); - - myMapper->Delete(); - - myShrinkFilter->Delete(); - - myExtractUnstructuredGrid->Delete(); - - myMergeFilter->Delete(); - - myGeomFilter->Delete(); - - myExtractGeometry->Delete(); - - myTransformFilter->Delete(); - - for(int i = 0, iEnd = myPassFilter.size(); i < iEnd; i++){ - myPassFilter[i]->Delete(); - } -} - - -void -SMESH_DeviceActor:: -SetStoreGemetryMapping(bool theStoreMapping) -{ - myGeomFilter->SetStoreMapping(theStoreMapping); - SetStoreClippingMapping(theStoreMapping); -} - - -void -SMESH_DeviceActor:: -SetStoreClippingMapping(bool theStoreMapping) -{ - myStoreClippingMapping = theStoreMapping; - myExtractGeometry->SetStoreMapping(theStoreMapping && myIsImplicitFunctionUsed); - SetStoreIDMapping(theStoreMapping); -} - - -void -SMESH_DeviceActor:: -SetStoreIDMapping(bool theStoreMapping) -{ - myExtractUnstructuredGrid->SetStoreMapping(theStoreMapping); -} - - -void SMESH_DeviceActor::Init(TVisualObjPtr theVisualObj, - vtkImplicitBoolean* theImplicitBoolean) -{ - myVisualObj = theVisualObj; - myExtractGeometry->SetImplicitFunction(theImplicitBoolean); - SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); -} - - -void -SMESH_DeviceActor:: -SetImplicitFunctionUsed(bool theIsImplicitFunctionUsed) -{ - int anId = 0; - if(theIsImplicitFunctionUsed) - myPassFilter[ anId ]->SetInput( myExtractGeometry->GetOutput() ); - else - myPassFilter[ anId ]->SetInput( myMergeFilter->GetOutput() ); - - myIsImplicitFunctionUsed = theIsImplicitFunctionUsed; - SetStoreClippingMapping(myStoreClippingMapping); -} - - -void SMESH_DeviceActor::SetUnstructuredGrid(vtkUnstructuredGrid* theGrid){ - if(theGrid){ - //myIsShrinkable = theGrid->GetNumberOfCells() > 10; - myIsShrinkable = true; - - myExtractUnstructuredGrid->SetInput(theGrid); - - myMergeFilter->SetGeometry(myExtractUnstructuredGrid->GetOutput()); - - myExtractGeometry->SetInput(myMergeFilter->GetOutput()); - - int anId = 0; - SetImplicitFunctionUsed(myIsImplicitFunctionUsed); - myPassFilter[ anId + 1]->SetInput( myPassFilter[ anId ]->GetOutput() ); - - anId++; // 1 - myGeomFilter->SetInput( myPassFilter[ anId ]->GetOutput() ); - - anId++; // 2 - myPassFilter[ anId ]->SetInput( myGeomFilter->GetOutput() ); - myPassFilter[ anId + 1 ]->SetInput( myPassFilter[ anId ]->GetOutput() ); - - anId++; // 3 - myTransformFilter->SetInput( myPassFilter[ anId ]->GetPolyDataOutput() ); - myTransformFilter->SetInput( myPassFilter[ anId ]->GetPolyDataOutput() ); - - anId++; // 4 - myPassFilter[ anId ]->SetInput( myTransformFilter->GetOutput() ); - myPassFilter[ anId + 1 ]->SetInput( myPassFilter[ anId ]->GetOutput() ); - myPassFilter[ anId ]->SetInput( myTransformFilter->GetOutput() ); - myPassFilter[ anId + 1 ]->SetInput( myPassFilter[ anId ]->GetOutput() ); - - anId++; // 5 - myMapper->SetInput( myPassFilter[ anId ]->GetPolyDataOutput() ); - myMapper->SetInput( myPassFilter[ anId ]->GetPolyDataOutput() ); - - vtkLODActor::SetMapper( myMapper ); - Modified(); - } -} - - -VTKViewer_ExtractUnstructuredGrid* SMESH_DeviceActor::GetExtractUnstructuredGrid(){ - return myExtractUnstructuredGrid; -} - - -vtkUnstructuredGrid* SMESH_DeviceActor::GetUnstructuredGrid(){ - myExtractUnstructuredGrid->Update(); - return myExtractUnstructuredGrid->GetOutput(); -} - - -void SMESH_DeviceActor::SetControlMode(SMESH::Controls::FunctorPtr theFunctor, - vtkScalarBarActor* theScalarBarActor, - vtkLookupTable* theLookupTable) -{ - bool anIsInitialized = theFunctor; - if(anIsInitialized){ - vtkUnstructuredGrid* aDataSet = vtkUnstructuredGrid::New(); - - SetStoreIDMapping(true); - myExtractUnstructuredGrid->Update(); - vtkUnstructuredGrid* aGrid = myExtractUnstructuredGrid->GetOutput(); - - aDataSet->ShallowCopy(aGrid); - - vtkDoubleArray *aScalars = vtkDoubleArray::New(); - vtkIdType aNbCells = aGrid->GetNumberOfCells(); - aScalars->SetNumberOfComponents(1); - aScalars->SetNumberOfTuples(aNbCells); - - myVisualObj->UpdateFunctor(theFunctor); - - using namespace SMESH::Controls; - if(NumericalFunctor* aNumericalFunctor = dynamic_cast(theFunctor.get())){ - for(vtkIdType i = 0; i < aNbCells; i++){ - vtkIdType anId = myExtractUnstructuredGrid->GetInputId(i); - vtkIdType anObjId = myVisualObj->GetElemObjId(anId); - double aValue = aNumericalFunctor->GetValue(anObjId); - aScalars->SetValue(i,aValue); - } - }else if(Predicate* aPredicate = dynamic_cast(theFunctor.get())){ - for(vtkIdType i = 0; i < aNbCells; i++){ - vtkIdType anId = myExtractUnstructuredGrid->GetInputId(i); - vtkIdType anObjId = myVisualObj->GetElemObjId(anId); - bool aValue = aPredicate->IsSatisfy(anObjId); - aScalars->SetValue(i,aValue); - } - } - - aDataSet->GetCellData()->SetScalars(aScalars); - aScalars->Delete(); - - theLookupTable->SetRange(aScalars->GetRange()); - theLookupTable->Build(); - - myMergeFilter->SetScalars(aDataSet); - aDataSet->Delete(); - } - GetMapper()->SetScalarVisibility(anIsInitialized); - theScalarBarActor->SetVisibility(anIsInitialized); -} - -void SMESH_DeviceActor::SetExtControlMode(SMESH::Controls::FunctorPtr theFunctor, - vtkScalarBarActor* theScalarBarActor, - vtkLookupTable* theLookupTable) -{ - bool anIsInitialized = theFunctor; - myExtractUnstructuredGrid->ClearRegisteredCells(); - myExtractUnstructuredGrid->ClearRegisteredCellsWithType(); - myExtractUnstructuredGrid->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::ePassAll); - myVisualObj->UpdateFunctor(theFunctor); - - using namespace SMESH::Controls; - if (anIsInitialized){ - if (Length2D* aLength2D = dynamic_cast(theFunctor.get())){ - SMESH::Controls::Length2D::TValues aValues; - - aLength2D->GetValues(aValues); - vtkUnstructuredGrid* aDataSet = vtkUnstructuredGrid::New(); - vtkUnstructuredGrid* aGrid = myVisualObj->GetUnstructuredGrid(); - - aDataSet->SetPoints(aGrid->GetPoints()); - - vtkIdType aNbCells = aValues.size(); - - vtkDoubleArray *aScalars = vtkDoubleArray::New(); - aScalars->SetNumberOfComponents(1); - aScalars->SetNumberOfTuples(aNbCells); - - vtkIdType aCellsSize = 3*aNbCells; - vtkCellArray* aConnectivity = vtkCellArray::New(); - aConnectivity->Allocate( aCellsSize, 0 ); - - vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); - aCellTypesArray->SetNumberOfComponents( 1 ); - aCellTypesArray->Allocate( aNbCells * aCellTypesArray->GetNumberOfComponents() ); - - vtkIdList *anIdList = vtkIdList::New(); - anIdList->SetNumberOfIds(2); - - Length2D::TValues::const_iterator anIter = aValues.begin(); - for(vtkIdType aVtkId = 0; anIter != aValues.end(); anIter++,aVtkId++){ - const Length2D::Value& aValue = *anIter; - int aNode[2] = { - myVisualObj->GetNodeVTKId(aValue.myPntId[0]), - myVisualObj->GetNodeVTKId(aValue.myPntId[1]) - }; - if(aNode[0] >= 0 && aNode[1] >= 0){ - anIdList->SetId( 0, aNode[0] ); - anIdList->SetId( 1, aNode[1] ); - aConnectivity->InsertNextCell( anIdList ); - aCellTypesArray->InsertNextValue( VTK_LINE ); - aScalars->SetValue(aVtkId,aValue.myLength); - } - } - - vtkIntArray* aCellLocationsArray = vtkIntArray::New(); - aCellLocationsArray->SetNumberOfComponents( 1 ); - aCellLocationsArray->SetNumberOfTuples( aNbCells ); - - aConnectivity->InitTraversal(); - for( vtkIdType idType = 0, *pts, npts; aConnectivity->GetNextCell( npts, pts ); idType++ ) - aCellLocationsArray->SetValue( idType, aConnectivity->GetTraversalLocation( npts ) ); - - aDataSet->SetCells( aCellTypesArray, aCellLocationsArray,aConnectivity ); - SetUnstructuredGrid(aDataSet); - - aDataSet->GetCellData()->SetScalars(aScalars); - aScalars->Delete(); - - theLookupTable->SetRange(aScalars->GetRange()); - theLookupTable->Build(); - - myMergeFilter->SetScalars(aDataSet); - aDataSet->Delete(); - } - else if (MultiConnection2D* aMultiConnection2D = dynamic_cast(theFunctor.get())){ - SMESH::Controls::MultiConnection2D::MValues aValues; - - aMultiConnection2D->GetValues(aValues); - vtkUnstructuredGrid* aDataSet = vtkUnstructuredGrid::New(); - vtkUnstructuredGrid* aGrid = myVisualObj->GetUnstructuredGrid(); - aDataSet->SetPoints(aGrid->GetPoints()); - - vtkIdType aNbCells = aValues.size(); - vtkDoubleArray *aScalars = vtkDoubleArray::New(); - aScalars->SetNumberOfComponents(1); - aScalars->SetNumberOfTuples(aNbCells); - - vtkIdType aCellsSize = 3*aNbCells; - vtkCellArray* aConnectivity = vtkCellArray::New(); - aConnectivity->Allocate( aCellsSize, 0 ); - - vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); - aCellTypesArray->SetNumberOfComponents( 1 ); - aCellTypesArray->Allocate( aNbCells * aCellTypesArray->GetNumberOfComponents() ); - - vtkIdList *anIdList = vtkIdList::New(); - anIdList->SetNumberOfIds(2); - - MultiConnection2D::MValues::const_iterator anIter = aValues.begin(); - for(vtkIdType aVtkId = 0; anIter != aValues.end(); anIter++,aVtkId++){ - const MultiConnection2D::Value& aValue = (*anIter).first; - int aNode[2] = { - myVisualObj->GetNodeVTKId(aValue.myPntId[0]), - myVisualObj->GetNodeVTKId(aValue.myPntId[1]) - }; - if(aNode[0] >= 0 && aNode[1] >= 0){ - anIdList->SetId( 0, aNode[0] ); - anIdList->SetId( 1, aNode[1] ); - aConnectivity->InsertNextCell( anIdList ); - aCellTypesArray->InsertNextValue( VTK_LINE ); - aScalars->SetValue(aVtkId,(*anIter).second); - } - } - - vtkIntArray* aCellLocationsArray = vtkIntArray::New(); - aCellLocationsArray->SetNumberOfComponents( 1 ); - aCellLocationsArray->SetNumberOfTuples( aNbCells ); - - aConnectivity->InitTraversal(); - for( vtkIdType idType = 0, *pts, npts; aConnectivity->GetNextCell( npts, pts ); idType++ ) - aCellLocationsArray->SetValue( idType, aConnectivity->GetTraversalLocation( npts ) ); - - aDataSet->SetCells( aCellTypesArray, aCellLocationsArray,aConnectivity ); - SetUnstructuredGrid(aDataSet); - - aDataSet->GetCellData()->SetScalars(aScalars); - aScalars->Delete(); - - theLookupTable->SetRange(aScalars->GetRange()); - theLookupTable->Build(); - - myMergeFilter->SetScalars(aDataSet); - aDataSet->Delete(); - } - } - GetMapper()->SetScalarVisibility(anIsInitialized); - theScalarBarActor->SetVisibility(anIsInitialized); -} - -void SMESH_DeviceActor::SetExtControlMode(SMESH::Controls::FunctorPtr theFunctor) -{ - myExtractUnstructuredGrid->ClearRegisteredCells(); - myExtractUnstructuredGrid->ClearRegisteredCellsWithType(); - myExtractUnstructuredGrid->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::ePassAll); - myVisualObj->UpdateFunctor(theFunctor); - - using namespace SMESH::Controls; - if(FreeBorders* aFreeBorders = dynamic_cast(theFunctor.get())){ - myExtractUnstructuredGrid->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding); - vtkUnstructuredGrid* aGrid = myVisualObj->GetUnstructuredGrid(); - vtkIdType aNbCells = aGrid->GetNumberOfCells(); - for( vtkIdType i = 0; i < aNbCells; i++ ){ - vtkIdType anObjId = myVisualObj->GetElemObjId(i); - if(aFreeBorders->IsSatisfy(anObjId)) - myExtractUnstructuredGrid->RegisterCell(i); - } - if(!myExtractUnstructuredGrid->IsCellsRegistered()) - myExtractUnstructuredGrid->RegisterCell(-1); - SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); - }else if(FreeEdges* aFreeEdges = dynamic_cast(theFunctor.get())){ - SMESH::Controls::FreeEdges::TBorders aBorders; - aFreeEdges->GetBoreders(aBorders); - vtkUnstructuredGrid* aDataSet = vtkUnstructuredGrid::New(); - vtkUnstructuredGrid* aGrid = myVisualObj->GetUnstructuredGrid(); - aDataSet->SetPoints(aGrid->GetPoints()); - - vtkIdType aNbCells = aBorders.size(); - vtkIdType aCellsSize = 3*aNbCells; - vtkCellArray* aConnectivity = vtkCellArray::New(); - aConnectivity->Allocate( aCellsSize, 0 ); - - vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); - aCellTypesArray->SetNumberOfComponents( 1 ); - aCellTypesArray->Allocate( aNbCells * aCellTypesArray->GetNumberOfComponents() ); - - vtkIdList *anIdList = vtkIdList::New(); - anIdList->SetNumberOfIds(2); - - FreeEdges::TBorders::const_iterator anIter = aBorders.begin(); - for(; anIter != aBorders.end(); anIter++){ - const FreeEdges::Border& aBorder = *anIter; - int aNode[2] = { - myVisualObj->GetNodeVTKId(aBorder.myPntId[0]), - myVisualObj->GetNodeVTKId(aBorder.myPntId[1]) - }; - //cout<<"aNode = "<= 0 && aNode[1] >= 0){ - anIdList->SetId( 0, aNode[0] ); - anIdList->SetId( 1, aNode[1] ); - aConnectivity->InsertNextCell( anIdList ); - aCellTypesArray->InsertNextValue( VTK_LINE ); - } - } - - vtkIntArray* aCellLocationsArray = vtkIntArray::New(); - aCellLocationsArray->SetNumberOfComponents( 1 ); - aCellLocationsArray->SetNumberOfTuples( aNbCells ); - - aConnectivity->InitTraversal(); - for( vtkIdType idType = 0, *pts, npts; aConnectivity->GetNextCell( npts, pts ); idType++ ) - aCellLocationsArray->SetValue( idType, aConnectivity->GetTraversalLocation( npts ) ); - - aDataSet->SetCells( aCellTypesArray, aCellLocationsArray,aConnectivity ); - - SetUnstructuredGrid(aDataSet); - aDataSet->Delete(); - } -} - - - - -unsigned long int SMESH_DeviceActor::GetMTime(){ - unsigned long mTime = this->Superclass::GetMTime(); - mTime = max(mTime,myExtractGeometry->GetMTime()); - mTime = max(mTime,myExtractUnstructuredGrid->GetMTime()); - mTime = max(mTime,myMergeFilter->GetMTime()); - mTime = max(mTime,myGeomFilter->GetMTime()); - mTime = max(mTime,myTransformFilter->GetMTime()); - return mTime; -} - - -void SMESH_DeviceActor::SetTransform(VTKViewer_Transform* theTransform){ - myTransformFilter->SetTransform(theTransform); -} - - -void SMESH_DeviceActor::SetShrink() { - if ( !myIsShrinkable ) return; - if ( vtkDataSet* aDataSet = myPassFilter[ 0 ]->GetOutput() ) - { - myShrinkFilter->SetInput( aDataSet ); - myPassFilter[ 1 ]->SetInput( myShrinkFilter->GetOutput() ); - myIsShrunk = true; - } -} - -void SMESH_DeviceActor::UnShrink() { - if ( !myIsShrunk ) return; - if ( vtkDataSet* aDataSet = myPassFilter[ 0 ]->GetOutput() ) - { - myPassFilter[ 1 ]->SetInput( aDataSet ); - myPassFilter[ 1 ]->Modified(); - myIsShrunk = false; - Modified(); - } -} - - -void SMESH_DeviceActor::SetRepresentation(EReperesent theMode){ - switch(theMode){ - case ePoint: - myGeomFilter->SetInside(true); - GetProperty()->SetRepresentation(0); - break; - case eInsideframe: - myGeomFilter->SetInside(true); - GetProperty()->SetRepresentation(1); - break; - default : - myGeomFilter->SetInside(false); - GetProperty()->SetRepresentation(theMode); - } - myRepresentation = theMode; - GetProperty()->Modified(); - myMapper->Modified(); - Modified(); -} - - -void SMESH_DeviceActor::SetVisibility(int theMode){ - if(!myExtractUnstructuredGrid->GetInput() || - GetUnstructuredGrid()->GetNumberOfCells()) - { - vtkLODActor::SetVisibility(theMode); - }else{ - vtkLODActor::SetVisibility(false); - } -} - - -int SMESH_DeviceActor::GetVisibility(){ - if(!GetUnstructuredGrid()->GetNumberOfCells()){ - vtkLODActor::SetVisibility(false); - } - return vtkLODActor::GetVisibility(); -} - - -int SMESH_DeviceActor::GetNodeObjId(int theVtkID){ - vtkIdType anID = theVtkID; - - if(IsImplicitFunctionUsed()) - anID = myExtractGeometry->GetNodeObjId(theVtkID); - - vtkIdType aRetID = myVisualObj->GetNodeObjId(anID); - if(MYDEBUG) MESSAGE("GetNodeObjId - theVtkID = "< -#include - -class vtkCell; -class vtkProperty; -class vtkMergeFilter; -class vtkShrinkFilter; -class vtkPolyDataMapper; -class vtkUnstructuredGrid; -class vtkScalarBarActor; -class vtkLookupTable; -class vtkImplicitBoolean; - -class VTKViewer_Transform; -class VTKViewer_TransformFilter; -class VTKViewer_PassThroughFilter; -class VTKViewer_ExtractUnstructuredGrid; - -class SMESH_ExtractGeometry; - - -class SMESH_DeviceActor: public vtkLODActor{ - friend class SMESH_ActorDef; - - public: - vtkTypeMacro(SMESH_DeviceActor,vtkLODActor); - static SMESH_DeviceActor* New(); - - void SetStoreClippingMapping(bool theStoreMapping); - void SetStoreGemetryMapping(bool theStoreMapping); - void SetStoreIDMapping(bool theStoreMapping); - - virtual int GetNodeObjId(int theVtkID); - virtual float* GetNodeCoord(int theObjID); - - virtual int GetElemObjId(int theVtkID); - virtual vtkCell* GetElemCell(int theObjID); - - virtual void SetTransform(VTKViewer_Transform* theTransform); - virtual unsigned long int GetMTime(); - - float GetShrinkFactor(); - void SetShrinkFactor(float value); - - bool IsShrunkable() { return myIsShrinkable;} - bool IsShrunk() { return myIsShrunk;} - void SetShrink(); - void UnShrink(); - - enum EReperesent { ePoint, eWireframe, eSurface, eInsideframe}; - EReperesent GetRepresentation(){ return myRepresentation;} - void SetRepresentation(EReperesent theMode); - - virtual void SetVisibility(int theMode); - virtual int GetVisibility(); - - VTKViewer_ExtractUnstructuredGrid* GetExtractUnstructuredGrid(); - vtkUnstructuredGrid* GetUnstructuredGrid(); - - void SetControlMode(SMESH::Controls::FunctorPtr theFunctor, - vtkScalarBarActor* theScalarBarActor, - vtkLookupTable* theLookupTable); - void SetExtControlMode(SMESH::Controls::FunctorPtr theFunctor, - vtkScalarBarActor* theScalarBarActor, - vtkLookupTable* theLookupTable); - void SetExtControlMode(SMESH::Controls::FunctorPtr theFunctor); - - bool IsHighlited() { return myIsHighlited;} - void SetHighlited(bool theIsHighlited); - - virtual void Render(vtkRenderer *, vtkMapper *); - - void SetImplicitFunctionUsed(bool theIsImplicitFunctionUsed); - bool IsImplicitFunctionUsed() const{ return myIsImplicitFunctionUsed;} - - protected: - void Init(TVisualObjPtr theVisualObj, vtkImplicitBoolean* theImplicitBoolean); - void SetUnstructuredGrid(vtkUnstructuredGrid* theGrid); - - vtkPolyDataMapper *myMapper; - TVisualObjPtr myVisualObj; - - vtkProperty *myProperty; - EReperesent myRepresentation; - - SMESH_ExtractGeometry* myExtractGeometry; - bool myIsImplicitFunctionUsed; - - vtkMergeFilter* myMergeFilter; - VTKViewer_ExtractUnstructuredGrid* myExtractUnstructuredGrid; - - bool myStoreClippingMapping; - VTKViewer_GeometryFilter *myGeomFilter; - VTKViewer_TransformFilter *myTransformFilter; - std::vector myPassFilter; - - vtkShrinkFilter* myShrinkFilter; - bool myIsShrinkable; - bool myIsShrunk; - - bool myIsHighlited; - - float myPolygonOffsetFactor; - float myPolygonOffsetUnits; - - void SetPolygonOffsetParameters(float factor, float units); - void GetPolygonOffsetParameters(float& factor, float& units){ - factor = myPolygonOffsetFactor; - units = myPolygonOffsetUnits; - } - - SMESH_DeviceActor(); - ~SMESH_DeviceActor(); - SMESH_DeviceActor(const SMESH_DeviceActor&); - void operator=(const SMESH_DeviceActor&); - -}; - - -#endif //SMESH_DEVICE_ACTOR_H diff --git a/src/OBJECT/SMESH_ExtractGeometry.cxx b/src/OBJECT/SMESH_ExtractGeometry.cxx deleted file mode 100644 index 84812a142..000000000 --- a/src/OBJECT/SMESH_ExtractGeometry.cxx +++ /dev/null @@ -1,254 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - - -#include "SMESH_ExtractGeometry.h" - -#include "vtkCell.h" -#include "vtkCellData.h" -#include "vtkFloatArray.h" -#include "vtkIdList.h" -#include "vtkImplicitFunction.h" -#include "vtkObjectFactory.h" -#include "vtkPointData.h" -#include "vtkUnstructuredGrid.h" - -using namespace std; - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - -#if defined __GNUC__ - #if __GNUC__ == 2 - #define __GNUC_2__ - #endif -#endif - - -vtkStandardNewMacro(SMESH_ExtractGeometry); - - -SMESH_ExtractGeometry::SMESH_ExtractGeometry() -{} - - -SMESH_ExtractGeometry::~SMESH_ExtractGeometry(){} - - -vtkIdType SMESH_ExtractGeometry::GetElemObjId(int theVtkID){ - if(myElemVTK2ObjIds.empty() || theVtkID > myElemVTK2ObjIds.size()) return -1; -#if defined __GNUC_2__ - return myElemVTK2ObjIds[theVtkID]; -#else - return myElemVTK2ObjIds.at(theVtkID); -#endif -} - - -vtkIdType SMESH_ExtractGeometry::GetNodeObjId(int theVtkID){ - if(myNodeVTK2ObjIds.empty() || theVtkID > myNodeVTK2ObjIds.size()) return -1; -#if defined __GNUC_2__ - return myNodeVTK2ObjIds[theVtkID]; -#else - return myNodeVTK2ObjIds.at(theVtkID); -#endif -} - - -void SMESH_ExtractGeometry::Execute() -{ - vtkIdType ptId, numPts, numCells, i, cellId, newCellId, newId, *pointMap; - vtkIdList *cellPts; - vtkCell *cell; - int numCellPts; - float *x; - float multiplier; - vtkPoints *newPts; - vtkIdList *newCellPts; - vtkDataSet *input = this->GetInput(); - vtkPointData *pd = input->GetPointData(); - vtkCellData *cd = input->GetCellData(); - vtkUnstructuredGrid *output = this->GetOutput(); - vtkPointData *outputPD = output->GetPointData(); - vtkCellData *outputCD = output->GetCellData(); - int npts; - numCells = input->GetNumberOfCells(); - numPts = input->GetNumberOfPoints(); - - vtkDebugMacro(<< "Extracting geometry"); - - if ( ! this->ImplicitFunction ) - { - vtkErrorMacro(<<"No implicit function specified"); - return; - } - - newCellPts = vtkIdList::New(); - newCellPts->Allocate(VTK_CELL_SIZE); - - if ( this->ExtractInside ) - { - multiplier = 1.0; - } - else - { - multiplier = -1.0; - } - - // Loop over all points determining whether they are inside the - // implicit function. Copy the points and point data if they are. - // - pointMap = new vtkIdType[numPts]; // maps old point ids into new - for (i=0; i < numPts; i++) - { - pointMap[i] = -1; - } - - output->Allocate(numCells/4); //allocate storage for geometry/topology - newPts = vtkPoints::New(); - newPts->Allocate(numPts/4,numPts); - outputPD->CopyAllocate(pd); - outputCD->CopyAllocate(cd); - vtkFloatArray *newScalars = NULL; - - if(myStoreMapping){ - myElemVTK2ObjIds.clear(); - myElemVTK2ObjIds.reserve(numCells); - myNodeVTK2ObjIds.clear(); - myNodeVTK2ObjIds.reserve(numPts); - } - - if ( ! this->ExtractBoundaryCells ) - { - for ( ptId=0; ptId < numPts; ptId++ ) - { - x = input->GetPoint(ptId); - if ( (this->ImplicitFunction->FunctionValue(x)*multiplier) < 0.0 ) - { - newId = newPts->InsertNextPoint(x); - pointMap[ptId] = newId; - myNodeVTK2ObjIds.push_back(ptId); - outputPD->CopyData(pd,ptId,newId); - } - } - } - else - { - // To extract boundary cells, we have to create supplemental information - if ( this->ExtractBoundaryCells ) - { - float val; - newScalars = vtkFloatArray::New(); - newScalars->SetNumberOfValues(numPts); - - for (ptId=0; ptId < numPts; ptId++ ) - { - x = input->GetPoint(ptId); - val = this->ImplicitFunction->FunctionValue(x) * multiplier; - newScalars->SetValue(ptId, val); - if ( val < 0.0 ) - { - newId = newPts->InsertNextPoint(x); - pointMap[ptId] = newId; - myNodeVTK2ObjIds.push_back(ptId); - outputPD->CopyData(pd,ptId,newId); - } - } - } - } - - // Now loop over all cells to see whether they are inside implicit - // function (or on boundary if ExtractBoundaryCells is on). - // - for (cellId=0; cellId < numCells; cellId++) - { - cell = input->GetCell(cellId); - cellPts = cell->GetPointIds(); - numCellPts = cell->GetNumberOfPoints(); - - newCellPts->Reset(); - if ( ! this->ExtractBoundaryCells ) //requires less work - { - for ( npts=0, i=0; i < numCellPts; i++, npts++) - { - ptId = cellPts->GetId(i); - if ( pointMap[ptId] < 0 ) - { - break; //this cell won't be inserted - } - else - { - newCellPts->InsertId(i,pointMap[ptId]); - } - } - } //if don't want to extract boundary cells - - else //want boundary cells - { - for ( npts=0, i=0; i < numCellPts; i++ ) - { - ptId = cellPts->GetId(i); - if ( newScalars->GetValue(ptId) <= 0.0 ) - { - npts++; - } - } - if ( npts > 0 ) - { - for ( i=0; i < numCellPts; i++ ) - { - ptId = cellPts->GetId(i); - if ( pointMap[ptId] < 0 ) - { - x = input->GetPoint(ptId); - newId = newPts->InsertNextPoint(x); - pointMap[ptId] = newId; - myNodeVTK2ObjIds.push_back(ptId); - outputPD->CopyData(pd,ptId,newId); - } - newCellPts->InsertId(i,pointMap[ptId]); - } - }//a boundary or interior cell - }//if mapping boundary cells - - if ( npts >= numCellPts || (this->ExtractBoundaryCells && npts > 0) ) - { - newCellId = output->InsertNextCell(cell->GetCellType(),newCellPts); - myElemVTK2ObjIds.push_back(cellId); - outputCD->CopyData(cd,cellId,newCellId); - } - }//for all cells - - // Update ourselves and release memory - // - delete [] pointMap; - newCellPts->Delete(); - output->SetPoints(newPts); - newPts->Delete(); - - if ( this->ExtractBoundaryCells ) - { - newScalars->Delete(); - } - - output->Squeeze(); -} diff --git a/src/OBJECT/SMESH_ExtractGeometry.h b/src/OBJECT/SMESH_ExtractGeometry.h deleted file mode 100644 index 794229516..000000000 --- a/src/OBJECT/SMESH_ExtractGeometry.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef SALOME_ExtractGeometry_HeaderFile -#define SALOME_ExtractGeometry_HeaderFile - -#include -#include - - -class SMESH_ExtractGeometry : public vtkExtractGeometry{ -public: - vtkTypeMacro(SMESH_ExtractGeometry,vtkExtractGeometry); - - static SMESH_ExtractGeometry *New(); - - void SetStoreMapping(bool theStoreMapping){ - myStoreMapping = theStoreMapping; - Modified(); - } - bool GetStoreMapping(){ return myStoreMapping;} - - virtual vtkIdType GetNodeObjId(int theVtkID); - virtual vtkIdType GetElemObjId(int theVtkID); - -protected: - SMESH_ExtractGeometry(); - ~SMESH_ExtractGeometry(); - - void Execute(); - -private: - bool myStoreMapping; - typedef std::vector TVectorId; - TVectorId myElemVTK2ObjIds; - TVectorId myNodeVTK2ObjIds; - - SMESH_ExtractGeometry(const SMESH_ExtractGeometry&); // Not implemented. - void operator=(const SMESH_ExtractGeometry&); // Not implemented. -}; - - -#endif - - diff --git a/src/OBJECT/SMESH_Object.cxx b/src/OBJECT/SMESH_Object.cxx deleted file mode 100644 index 885ee3de3..000000000 --- a/src/OBJECT/SMESH_Object.cxx +++ /dev/null @@ -1,1270 +0,0 @@ -// SMESH OBJECT : interactive object for SMESH visualization -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Grid.cxx -// Author : Nicolas REJNERI -// Module : SMESH - -#include "SMESH_ObjectDef.h" -#include "SMESH_ActorUtils.h" - -#include "SMDS_Mesh.hxx" -#include "SMESH_Actor.h" -#include "SMESH_ControlsDef.hxx" -#include - -#include CORBA_SERVER_HEADER(SALOME_Exception) - -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include "utilities.h" - -using namespace std; - -#ifndef EXCEPTION -#define EXCEPTION(TYPE, MSG) {\ - std::ostringstream aStream;\ - aStream<<__FILE__<<"["<<__LINE__<<"]::"<FindNode(theId)) return anElem; - EXCEPTION(runtime_error,"SMDS_Mesh::FindNode - cannot find a SMDS_MeshNode for ID = "<FindElement(theId)) return anElem; - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot find a SMDS_MeshElement for ID = "<AddNodeWithID(aCoords[aCoordId], - aCoords[aCoordId+1], - aCoords[aCoordId+2], - anIndexes[anElemId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddNodeWithID for ID = "<AddEdgeWithID(anIndexes[anIndexId+1], - anIndexes[anIndexId+2], - anIndexes[anIndexId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddEdgeWithID for ID = "<AddFaceWithID(anIndexes[anIndexId+1], - anIndexes[anIndexId+2], - anIndexes[anIndexId+3], - anIndexes[anIndexId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddFaceWithID for ID = "<AddFaceWithID(anIndexes[anIndexId+1], - anIndexes[anIndexId+2], - anIndexes[anIndexId+3], - anIndexes[anIndexId+4], - anIndexes[anIndexId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddFaceWithID for ID = "< nodes_ids (aNbNodes); - for (int i = 0; i < aNbNodes; i++) { - nodes_ids[i] = anIndexes[anIndexId++]; - } - - SMDS_MeshElement* anElem = theMesh->AddPolygonalFaceWithID(nodes_ids, aFaceId); - if (!anElem) - EXCEPTION(runtime_error, "SMDS_Mesh::FindElement - cannot AddPolygonalFaceWithID for ID = " - << anElemId); - } - } - - - inline void AddTetrasWithID(SMDS_Mesh* theMesh, - SMESH::log_array_var& theSeq, - CORBA::Long theId) - { - const SMESH::long_array& anIndexes = theSeq[theId].indexes; - CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number; - if(5*aNbElems != anIndexes.length()) - EXCEPTION(runtime_error,"AddEdgeWithID - 5*aNbElems != anIndexes.length()"); - for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=5){ - SMDS_MeshElement* anElem = theMesh->AddVolumeWithID(anIndexes[anIndexId+1], - anIndexes[anIndexId+2], - anIndexes[anIndexId+3], - anIndexes[anIndexId+4], - anIndexes[anIndexId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddVolumeWithID for ID = "<AddVolumeWithID(anIndexes[anIndexId+1], - anIndexes[anIndexId+2], - anIndexes[anIndexId+3], - anIndexes[anIndexId+4], - anIndexes[anIndexId+5], - anIndexes[anIndexId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddVolumeWithID for ID = "<AddVolumeWithID(anIndexes[anIndexId+1], - anIndexes[anIndexId+2], - anIndexes[anIndexId+3], - anIndexes[anIndexId+4], - anIndexes[anIndexId+5], - anIndexes[anIndexId+6], - anIndexes[anIndexId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddVolumeWithID for ID = "<AddVolumeWithID(anIndexes[anIndexId+1], - anIndexes[anIndexId+2], - anIndexes[anIndexId+3], - anIndexes[anIndexId+4], - anIndexes[anIndexId+5], - anIndexes[anIndexId+6], - anIndexes[anIndexId+7], - anIndexes[anIndexId+8], - anIndexes[anIndexId]); - if(!anElem) - EXCEPTION(runtime_error,"SMDS_Mesh::FindElement - cannot AddVolumeWithID for ID = "< nodes_ids (aNbNodes); - for (int i = 0; i < aNbNodes; i++) { - nodes_ids[i] = anIndexes[anIndexId++]; - } - - int aNbFaces = anIndexes[anIndexId++]; - std::vector quantities (aNbFaces); - for (int i = 0; i < aNbFaces; i++) { - quantities[i] = anIndexes[anIndexId++]; - } - - SMDS_MeshElement* anElem = - theMesh->AddPolyhedralVolumeWithID(nodes_ids, quantities, aFaceId); - if (!anElem) - EXCEPTION(runtime_error, "SMDS_Mesh::FindElement - cannot AddPolyhedralVolumeWithID for ID = " - << anElemId); - } - } - - - inline void ChangePolyhedronNodes (SMDS_Mesh* theMesh, - SMESH::log_array_var& theSeq, - CORBA::Long theId) - { - const SMESH::long_array& anIndexes = theSeq[theId].indexes; - CORBA::Long iind = 0, aNbElems = theSeq[theId].number; - - for (CORBA::Long anElemId = 0; anElemId < aNbElems; anElemId++) - { - // find element - const SMDS_MeshElement* elem = FindElement(theMesh, anIndexes[iind++]); - // nb nodes - int nbNodes = anIndexes[iind++]; - // nodes - std::vector aNodes (nbNodes); - for (int iNode = 0; iNode < nbNodes; iNode++) { - aNodes[iNode] = FindNode(theMesh, anIndexes[iind++]); - } - // nb faces - int nbFaces = anIndexes[iind++]; - // quantities - std::vector quantities (nbFaces); - for (int iFace = 0; iFace < nbFaces; iFace++) { - quantities[iFace] = anIndexes[iind++]; - } - // change - theMesh->ChangePolyhedronNodes(elem, aNodes, quantities); - } - } - - -} -/* - Class : SMESH_VisualObjDef - Description : Base class for all mesh objects to be visuilised -*/ - -//================================================================================= -// function : getCellType -// purpose : Get type of VTK cell -//================================================================================= -static inline vtkIdType getCellType( const SMDSAbs_ElementType theType, - const bool thePoly, - const int theNbNodes ) -{ - switch( theType ) - { - case SMDSAbs_Edge: - return theNbNodes == 2 ? VTK_LINE : VTK_EMPTY_CELL; - - case SMDSAbs_Face : - if (thePoly && theNbNodes>2 ) return VTK_POLYGON; - else if ( theNbNodes == 3 ) return VTK_TRIANGLE; - else if ( theNbNodes == 4 ) return VTK_QUAD; - else return VTK_EMPTY_CELL; - - case SMDSAbs_Volume: - if (thePoly && theNbNodes>3 ) return VTK_CONVEX_POINT_SET; - else if ( theNbNodes == 4 ) return VTK_TETRA; - else if ( theNbNodes == 5 ) return VTK_PYRAMID; - else if ( theNbNodes == 6 ) return VTK_WEDGE; - else if ( theNbNodes == 8 ) return VTK_HEXAHEDRON; - else return VTK_EMPTY_CELL; - - default: return VTK_EMPTY_CELL; - } -} - -//================================================================================= -// functions : SMESH_VisualObjDef -// purpose : Constructor -//================================================================================= -SMESH_VisualObjDef::SMESH_VisualObjDef() -{ - myGrid = vtkUnstructuredGrid::New(); -} -SMESH_VisualObjDef::~SMESH_VisualObjDef() -{ - if ( MYDEBUG ) - MESSAGE( "~SMESH_MeshObj - myGrid->GetReferenceCount() = " << myGrid->GetReferenceCount() ); - myGrid->Delete(); -} - -//================================================================================= -// functions : GetNodeObjId, GetNodeVTKId, GetElemObjId, GetElemVTKId -// purpose : Methods for retrieving VTK IDs by SMDS IDs and vice versa -//================================================================================= -vtkIdType SMESH_VisualObjDef::GetNodeObjId( int theVTKID ) -{ - return myVTK2SMDSNodes.find(theVTKID) == myVTK2SMDSNodes.end() ? -1 : myVTK2SMDSNodes[theVTKID]; -} - -vtkIdType SMESH_VisualObjDef::GetNodeVTKId( int theObjID ) -{ - return mySMDS2VTKNodes.find(theObjID) == mySMDS2VTKNodes.end() ? -1 : mySMDS2VTKNodes[theObjID]; -} - -vtkIdType SMESH_VisualObjDef::GetElemObjId( int theVTKID ) -{ - return myVTK2SMDSElems.find(theVTKID) == myVTK2SMDSElems.end() ? -1 : myVTK2SMDSElems[theVTKID]; -} - -vtkIdType SMESH_VisualObjDef::GetElemVTKId( int theObjID ) -{ - return mySMDS2VTKElems.find(theObjID) == mySMDS2VTKElems.end() ? -1 : mySMDS2VTKElems[theObjID]; -} - -//================================================================================= -// function : SMESH_VisualObjDef::createPoints -// purpose : Create points from nodes -//================================================================================= -void SMESH_VisualObjDef::createPoints( vtkPoints* thePoints ) -{ - if ( thePoints == 0 ) - return; - - TEntityList aNodes; - vtkIdType nbNodes = GetEntities( SMDSAbs_Node, aNodes ); - thePoints->SetNumberOfPoints( nbNodes ); - - int nbPoints = 0; - - TEntityList::const_iterator anIter; - for ( anIter = aNodes.begin(); anIter != aNodes.end(); ++anIter ) - { - const SMDS_MeshNode* aNode = ( const SMDS_MeshNode* )(*anIter); - if ( aNode != 0 ) - { - thePoints->SetPoint( nbPoints, aNode->X(), aNode->Y(), aNode->Z() ); - int anId = aNode->GetID(); - mySMDS2VTKNodes.insert( TMapOfIds::value_type( anId, nbPoints ) ); - myVTK2SMDSNodes.insert( TMapOfIds::value_type( nbPoints, anId ) ); - nbPoints++; - } - } - - if ( nbPoints != nbNodes ) - thePoints->SetNumberOfPoints( nbPoints ); -} - -//================================================================================= -// function : buildPrs -// purpose : create VTK cells( fill unstructured grid ) -//================================================================================= -void SMESH_VisualObjDef::buildPrs() -{ - try - { - mySMDS2VTKNodes.clear(); - myVTK2SMDSNodes.clear(); - mySMDS2VTKElems.clear(); - myVTK2SMDSElems.clear(); - - if ( IsNodePrs() ) - buildNodePrs(); - else - buildElemPrs(); - } - catch( const std::exception& exc ) - { - INFOS("Follow exception was cought:\n\t"<GetNumberOfCells() = "<GetNumberOfCells() ); - if( MYDEBUGWITHFILES ) SMESH::WriteUnstructuredGrid( myGrid,"/tmp/buildPrs" ); -} - -//================================================================================= -// function : buildNodePrs -// purpose : create VTK cells for nodes -//================================================================================= -void SMESH_VisualObjDef::buildNodePrs() -{ - vtkPoints* aPoints = vtkPoints::New(); - createPoints( aPoints ); - myGrid->SetPoints( aPoints ); - aPoints->Delete(); - - myGrid->SetCells( 0, 0, 0 ); - - // Create cells - /* - int nbPoints = aPoints->GetNumberOfPoints(); - vtkIdList *anIdList = vtkIdList::New(); - anIdList->SetNumberOfIds( 1 ); - - vtkCellArray *aCells = vtkCellArray::New(); - aCells->Allocate( 2 * nbPoints, 0 ); - - vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); - aCellTypesArray->SetNumberOfComponents( 1 ); - aCellTypesArray->Allocate( nbPoints ); - - for( vtkIdType aCellId = 0; aCellId < nbPoints; aCellId++ ) - { - anIdList->SetId( 0, aCellId ); - aCells->InsertNextCell( anIdList ); - aCellTypesArray->InsertNextValue( VTK_VERTEX ); - } - - vtkIntArray* aCellLocationsArray = vtkIntArray::New(); - aCellLocationsArray->SetNumberOfComponents( 1 ); - aCellLocationsArray->SetNumberOfTuples( nbPoints ); - - aCells->InitTraversal(); - for( vtkIdType i = 0, *pts, npts; aCells->GetNextCell( npts, pts ); i++ ) - aCellLocationsArray->SetValue( i, aCells->GetTraversalLocation( npts ) ); - - myGrid->SetCells( aCellTypesArray, aCellLocationsArray, aCells ); - - aCellLocationsArray->Delete(); - aCellTypesArray->Delete(); - aCells->Delete(); - anIdList->Delete(); - */ -} - -//================================================================================= -// function : buildElemPrs -// purpose : Create VTK cells for elements -//================================================================================= - -namespace{ - typedef std::vector TConnect; - - int GetConnect(const SMDS_ElemIteratorPtr& theNodesIter, - TConnect& theConnect) - { - theConnect.clear(); - for(; theNodesIter->more();) - theConnect.push_back(theNodesIter->next()); - return theConnect.size(); - } - - inline - void SetId(vtkIdList *theIdList, - const SMESH_VisualObjDef::TMapOfIds& theSMDS2VTKNodes, - const TConnect& theConnect, - int thePosition, - int theId) - { - theIdList->SetId(thePosition,theSMDS2VTKNodes.find(theConnect[theId]->GetID())->second); - } - -} - - -void SMESH_VisualObjDef::buildElemPrs() -{ - // Create points - - vtkPoints* aPoints = vtkPoints::New(); - createPoints( aPoints ); - myGrid->SetPoints( aPoints ); - aPoints->Delete(); - - if ( MYDEBUG ) - MESSAGE("Update - myGrid->GetNumberOfPoints() = "<GetNumberOfPoints()); - - // Calculate cells size - - static SMDSAbs_ElementType aTypes[ 3 ] = { SMDSAbs_Edge, SMDSAbs_Face, SMDSAbs_Volume }; - - // get entity data - map nbEnts; - map anEnts; - - for ( int i = 0; i <= 2; i++ ) - nbEnts[ aTypes[ i ] ] = GetEntities( aTypes[ i ], anEnts[ aTypes[ i ] ] ); - - vtkIdType aCellsSize = 3 * nbEnts[ SMDSAbs_Edge ]; - - for ( int i = 1; i <= 2; i++ ) // iterate through faces and volumes - { - if ( nbEnts[ aTypes[ i ] ] ) - { - const TEntityList& aList = anEnts[ aTypes[ i ] ]; - TEntityList::const_iterator anIter; - for ( anIter = aList.begin(); anIter != aList.end(); ++anIter ) - aCellsSize += (*anIter)->NbNodes() + 1; - } - } - - vtkIdType aNbCells = nbEnts[ SMDSAbs_Edge ] + nbEnts[ SMDSAbs_Face ] + nbEnts[ SMDSAbs_Volume ]; - - if ( MYDEBUG ) - MESSAGE( "Update - aNbCells = "<_is_nil() = "<_is_nil()); - - myMeshServer = SMESH::SMESH_Mesh::_duplicate( theMesh ); - myMeshServer->Register(); - myMesh = new SMDS_Mesh(); -} - -//================================================================================= -// function : ~SMESH_MeshObj -// purpose : Destructor -//================================================================================= -SMESH_MeshObj::~SMESH_MeshObj() -{ - myMeshServer->Destroy(); - delete myMesh; -} - -//================================================================================= -// function : Update -// purpose : Update mesh and fill grid with new values if necessary -//================================================================================= -void SMESH_MeshObj::Update( int theIsClear ) -{ - // Update SMDS_Mesh on client part - - try - { - SMESH::log_array_var aSeq = myMeshServer->GetLog( theIsClear ); - CORBA::Long aLength = aSeq->length(); - - if( MYDEBUG ) MESSAGE( "Update: length of the script is "<RemoveNode( FindNode( myMesh, anIndexes[anElemId] ) ); - break; - - case SMESH::REMOVE_ELEMENT: - for( ; anElemId < aNbElems; anElemId++ ) - myMesh->RemoveElement( FindElement( myMesh, anIndexes[anElemId] ) ); - break; - - case SMESH::MOVE_NODE: - for(CORBA::Long aCoordId=0; anElemId < aNbElems; anElemId++, aCoordId+=3) - { - SMDS_MeshNode* node = - const_cast( FindNode( myMesh, anIndexes[anElemId] )); - node->setXYZ( aCoords[aCoordId], aCoords[aCoordId+1], aCoords[aCoordId+2] ); - } - break; - - case SMESH::CHANGE_ELEMENT_NODES: - for ( CORBA::Long i = 0; anElemId < aNbElems; anElemId++ ) - { - // find element - const SMDS_MeshElement* elem = FindElement( myMesh, anIndexes[i++] ); - // nb nodes - int nbNodes = anIndexes[i++]; - // nodes - //ASSERT( nbNodes < 9 ); - const SMDS_MeshNode* aNodes[ nbNodes ]; - for ( int iNode = 0; iNode < nbNodes; iNode++ ) - aNodes[ iNode ] = FindNode( myMesh, anIndexes[i++] ); - // change - myMesh->ChangeElementNodes( elem, aNodes, nbNodes ); - } - break; - - case SMESH::CHANGE_POLYHEDRON_NODES: - ChangePolyhedronNodes(myMesh, aSeq, anId); - break; - case SMESH::RENUMBER: - for(CORBA::Long i=0; anElemId < aNbElems; anElemId++, i+=3) - { - myMesh->Renumber( anIndexes[i], anIndexes[i+1], anIndexes[i+2] ); - } - break; - - default:; - } - } - } - catch ( SALOME::SALOME_Exception& exc ) - { - INFOS("Following exception was cought:\n\t"<NbNodes() = "<NbNodes()); - MESSAGE("Update - myMesh->NbEdges() = "<NbEdges()); - MESSAGE("Update - myMesh->NbFaces() = "<NbFaces()); - MESSAGE("Update - myMesh->NbVolumes() = "<NbVolumes()); - } - - // Fill unstructured grid - buildPrs(); -} - -//================================================================================= -// function : GetElemDimension -// purpose : Get dimension of element -//================================================================================= -int SMESH_MeshObj::GetElemDimension( const int theObjId ) -{ - const SMDS_MeshElement* anElem = myMesh->FindElement( theObjId ); - if ( anElem == 0 ) - return 0; - - int aType = anElem->GetType(); - switch ( aType ) - { - case SMDSAbs_Edge : return 1; - case SMDSAbs_Face : return 2; - case SMDSAbs_Volume: return 3; - default : return 0; - } -} - -//================================================================================= -// function : GetEntities -// purpose : Get entities of specified type. Return number of entities -//================================================================================= -int SMESH_MeshObj::GetNbEntities( const SMDSAbs_ElementType theType) const -{ - switch ( theType ) - { - case SMDSAbs_Node: - { - return myMesh->NbNodes(); - } - break; - case SMDSAbs_Edge: - { - return myMesh->NbEdges(); - } - break; - case SMDSAbs_Face: - { - return myMesh->NbFaces(); - } - break; - case SMDSAbs_Volume: - { - return myMesh->NbVolumes(); - } - break; - default: - return 0; - break; - } -} - -int SMESH_MeshObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList& theObjs ) const -{ - theObjs.clear(); - - switch ( theType ) - { - case SMDSAbs_Node: - { - SMDS_NodeIteratorPtr anIter = myMesh->nodesIterator(); - while ( anIter->more() ) theObjs.push_back( anIter->next() ); - } - break; - case SMDSAbs_Edge: - { - SMDS_EdgeIteratorPtr anIter = myMesh->edgesIterator(); - while ( anIter->more() ) theObjs.push_back( anIter->next() ); - } - break; - case SMDSAbs_Face: - { - SMDS_FaceIteratorPtr anIter = myMesh->facesIterator(); - while ( anIter->more() ) theObjs.push_back( anIter->next() ); - } - break; - case SMDSAbs_Volume: - { - SMDS_VolumeIteratorPtr anIter = myMesh->volumesIterator(); - while ( anIter->more() ) theObjs.push_back( anIter->next() ); - } - break; - default: - break; - } - - return theObjs.size(); -} - -//================================================================================= -// function : UpdateFunctor -// purpose : Update functor in accordance with current mesh -//================================================================================= -void SMESH_MeshObj::UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor ) -{ - theFunctor->SetMesh( GetMesh() ); -} - -//================================================================================= -// function : IsNodePrs -// purpose : Return true if node presentation is used -//================================================================================= -bool SMESH_MeshObj::IsNodePrs() const -{ - return myMesh->NbEdges() == 0 &&myMesh->NbFaces() == 0 &&myMesh->NbVolumes() == 0 ; -} - - -/* - Class : SMESH_SubMeshObj - Description : Base class for visualisation of submeshes and groups -*/ - -//================================================================================= -// function : SMESH_SubMeshObj -// purpose : Constructor -//================================================================================= -SMESH_SubMeshObj::SMESH_SubMeshObj( SMESH_MeshObj* theMeshObj ) -{ - if ( MYDEBUG ) MESSAGE( "SMESH_SubMeshObj - theMeshObj = " << theMeshObj ); - - myMeshObj = theMeshObj; -} - -SMESH_SubMeshObj::~SMESH_SubMeshObj() -{ -} - -//================================================================================= -// function : GetElemDimension -// purpose : Get dimension of element -//================================================================================= -int SMESH_SubMeshObj::GetElemDimension( const int theObjId ) -{ - return myMeshObj == 0 ? 0 : myMeshObj->GetElemDimension( theObjId ); -} - -//================================================================================= -// function : UpdateFunctor -// purpose : Update functor in accordance with current mesh -//================================================================================= -void SMESH_SubMeshObj::UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor ) -{ - theFunctor->SetMesh( myMeshObj->GetMesh() ); -} - -//================================================================================= -// function : Update -// purpose : Update mesh object and fill grid with new values -//================================================================================= -void SMESH_SubMeshObj::Update( int theIsClear ) -{ - myMeshObj->Update( theIsClear ); - buildPrs(); -} - - -/* - Class : SMESH_GroupObj - Description : Class for visualisation of groups -*/ - -//================================================================================= -// function : SMESH_GroupObj -// purpose : Constructor -//================================================================================= -SMESH_GroupObj::SMESH_GroupObj( SMESH::SMESH_GroupBase_ptr theGroup, - SMESH_MeshObj* theMeshObj ) -: SMESH_SubMeshObj( theMeshObj ), - myGroupServer( SMESH::SMESH_GroupBase::_duplicate(theGroup) ) -{ - if ( MYDEBUG ) MESSAGE("SMESH_GroupObj - theGroup->_is_nil() = "<_is_nil()); - myGroupServer->Register(); -} - -SMESH_GroupObj::~SMESH_GroupObj() -{ - if ( MYDEBUG ) MESSAGE("~SMESH_GroupObj"); - myGroupServer->Destroy(); -} - -//================================================================================= -// function : IsNodePrs -// purpose : Return true if node presentation is used -//================================================================================= -bool SMESH_GroupObj::IsNodePrs() const -{ - return myGroupServer->GetType() == SMESH::NODE; -} - -//================================================================================= -// function : getNodesFromElems -// purpose : Retrieve nodes from elements -//================================================================================= -static int getNodesFromElems( SMESH::long_array_var& theElemIds, - const SMDS_Mesh* theMesh, - std::list& theResList ) -{ - set aNodeSet; - - for ( CORBA::Long i = 0, n = theElemIds->length(); i < n; i++ ) - { - const SMDS_MeshElement* anElem = theMesh->FindElement( theElemIds[ i ] ); - if ( anElem != 0 ) - { - SMDS_ElemIteratorPtr anIter = anElem->nodesIterator(); - while ( anIter->more() ) - { - const SMDS_MeshElement* aNode = anIter->next(); - if ( aNode != 0 ) - aNodeSet.insert( aNode ); - } - } - } - - set::const_iterator anIter; - for ( anIter = aNodeSet.begin(); anIter != aNodeSet.end(); ++anIter ) - theResList.push_back( *anIter ); - - return theResList.size(); -} - -//================================================================================= -// function : getPointers -// purpose : Get std::list from list of IDs -//================================================================================= -static int getPointers( const SMDSAbs_ElementType theRequestType, - SMESH::long_array_var& theElemIds, - const SMDS_Mesh* theMesh, - std::list& theResList ) -{ - for ( CORBA::Long i = 0, n = theElemIds->length(); i < n; i++ ) - { - const SMDS_MeshElement* anElem = theRequestType == SMDSAbs_Node - ? theMesh->FindNode( theElemIds[ i ] ) : theMesh->FindElement( theElemIds[ i ] ); - - if ( anElem != 0 ) - theResList.push_back( anElem ); - } - - return theResList.size(); -} - - -//================================================================================= -// function : GetEntities -// purpose : Get entities of specified type. Return number of entities -//================================================================================= -int SMESH_GroupObj::GetNbEntities( const SMDSAbs_ElementType theType) const -{ - if(SMDSAbs_ElementType(myGroupServer->GetType()) == theType){ - return myGroupServer->Size(); - } - return 0; -} - -int SMESH_GroupObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList& theResList ) const -{ - theResList.clear(); - SMDS_Mesh* aMesh = myMeshObj->GetMesh(); - - if ( myGroupServer->Size() == 0 || aMesh == 0 ) - return 0; - - SMDSAbs_ElementType aGrpType = SMDSAbs_ElementType(myGroupServer->GetType()); - SMESH::long_array_var anIds = myGroupServer->GetListOfID(); - - if ( aGrpType == theType ) - return getPointers( theType, anIds, aMesh, theResList ); - else if ( theType == SMDSAbs_Node ) - return getNodesFromElems( anIds, aMesh, theResList ); - else - return 0; -} - - - -/* - Class : SMESH_subMeshObj - Description : Class for visualisation of submeshes -*/ - -//================================================================================= -// function : SMESH_subMeshObj -// purpose : Constructor -//================================================================================= -SMESH_subMeshObj::SMESH_subMeshObj( SMESH::SMESH_subMesh_ptr theSubMesh, - SMESH_MeshObj* theMeshObj ) -: SMESH_SubMeshObj( theMeshObj ), - mySubMeshServer( SMESH::SMESH_subMesh::_duplicate( theSubMesh ) ) -{ - if ( MYDEBUG ) MESSAGE( "SMESH_subMeshObj - theSubMesh->_is_nil() = " << theSubMesh->_is_nil() ); - - mySubMeshServer->Register(); -} - -SMESH_subMeshObj::~SMESH_subMeshObj() -{ - if ( MYDEBUG ) MESSAGE( "~SMESH_subMeshObj" ); - mySubMeshServer->Destroy(); -} - -//================================================================================= -// function : GetEntities -// purpose : Get entities of specified type. Return number of entities -//================================================================================= -int SMESH_subMeshObj::GetNbEntities( const SMDSAbs_ElementType theType) const -{ - switch ( theType ) - { - case SMDSAbs_Node: - { - return mySubMeshServer->GetNumberOfNodes( false ); - } - break; - case SMDSAbs_Edge: - case SMDSAbs_Face: - case SMDSAbs_Volume: - { - SMESH::long_array_var anIds = - mySubMeshServer->GetElementsByType( SMESH::ElementType(theType) ); - return anIds->length(); - } - default: - return 0; - break; - } -} - -int SMESH_subMeshObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList& theResList ) const -{ - theResList.clear(); - - SMDS_Mesh* aMesh = myMeshObj->GetMesh(); - if ( aMesh == 0 ) - return 0; - - bool isNodal = IsNodePrs(); - - if ( isNodal ) - { - if ( theType == SMDSAbs_Node ) - { - SMESH::long_array_var anIds = mySubMeshServer->GetNodesId(); - return getPointers( SMDSAbs_Node, anIds, aMesh, theResList ); - } - } - else - { - if ( theType == SMDSAbs_Node ) - { - SMESH::long_array_var anIds = mySubMeshServer->GetElementsId(); - return getNodesFromElems( anIds, aMesh, theResList ); - } - else - { - SMESH::long_array_var anIds = - mySubMeshServer->GetElementsByType( SMESH::ElementType(theType) ); - return getPointers( theType, anIds, aMesh, theResList ); - } - } - - return 0; -} - -//================================================================================= -// function : IsNodePrs -// purpose : Return true if node presentation is used -//================================================================================= -bool SMESH_subMeshObj::IsNodePrs() const -{ - return mySubMeshServer->GetNumberOfElements() == 0; -} - - - - - - - - - - - - diff --git a/src/OBJECT/SMESH_Object.h b/src/OBJECT/SMESH_Object.h deleted file mode 100644 index aea4f778e..000000000 --- a/src/OBJECT/SMESH_Object.h +++ /dev/null @@ -1,70 +0,0 @@ -// SMESH OBJECT : interactive object for SMESH visualization -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Object.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef SMESH_OBJECT_H -#define SMESH_OBJECT_H - -#include -#include - -#include "SMESH_Controls.hxx" -#include "SMDSAbs_ElementType.hxx" - -class SMDS_Mesh; -class vtkUnstructuredGrid; - -/* - Class : SMESH_VisualObj - Description : Base class for all mesh objects to be visuilised -*/ -class SMESH_VisualObj -{ -public: - virtual void Update( int theIsClear = true ) = 0; - virtual void UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor ) = 0; - virtual int GetElemDimension( const int theObjId ) = 0; - - virtual int GetNbEntities( const SMDSAbs_ElementType theType) const = 0; - virtual SMDS_Mesh* GetMesh() const = 0; - - virtual bool GetEdgeNodes( const int theElemId, - const int theEdgeNum, - int& theNodeId1, - int& theNodeId2 ) const = 0; - - virtual vtkUnstructuredGrid* GetUnstructuredGrid() = 0; - - virtual vtkIdType GetNodeObjId( int theVTKID ) = 0; - virtual vtkIdType GetNodeVTKId( int theObjID ) = 0; - virtual vtkIdType GetElemObjId( int theVTKID ) = 0; - virtual vtkIdType GetElemVTKId( int theObjID ) = 0; -}; - -typedef boost::shared_ptr TVisualObjPtr; - -#endif diff --git a/src/OBJECT/SMESH_ObjectDef.h b/src/OBJECT/SMESH_ObjectDef.h deleted file mode 100644 index 134b47b10..000000000 --- a/src/OBJECT/SMESH_ObjectDef.h +++ /dev/null @@ -1,202 +0,0 @@ -// SMESH OBJECT : interactive object for SMESH visualization -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Object.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef SMESH_OBJECTDEF_H -#define SMESH_OBJECTDEF_H - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_Group) - -#include -#include - -#include "SMESH_Controls.hxx" -#include "SMESH_Object.h" - -class vtkPoints; -class SALOME_ExtractUnstructuredGrid; - -class SMESH_Actor; -class SMDS_MeshNode; -class SMDS_MeshElement; - -/* - Class : SMESH_VisualObj - Description : Base class for all mesh objects to be visuilised -*/ -class SMESH_VisualObjDef: public SMESH_VisualObj -{ -public: - typedef std::list TEntityList; - typedef std::map TMapOfIds; - - SMESH_VisualObjDef(); - virtual ~SMESH_VisualObjDef(); - - virtual void Update( int theIsClear = true ) = 0; - virtual void UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor ) = 0; - virtual int GetElemDimension( const int theObjId ) = 0; - - virtual int GetNbEntities( const SMDSAbs_ElementType theType) const = 0; - virtual int GetEntities( const SMDSAbs_ElementType, TEntityList& ) const = 0; - virtual bool IsNodePrs() const = 0; - virtual SMDS_Mesh* GetMesh() const = 0; - - virtual bool GetEdgeNodes( const int theElemId, - const int theEdgeNum, - int& theNodeId1, - int& theNodeId2 ) const; - - virtual vtkUnstructuredGrid* GetUnstructuredGrid() { return myGrid; } - - virtual vtkIdType GetNodeObjId( int theVTKID ); - virtual vtkIdType GetNodeVTKId( int theObjID ); - virtual vtkIdType GetElemObjId( int theVTKID ); - virtual vtkIdType GetElemVTKId( int theObjID ); - -protected: - - void createPoints( vtkPoints* ); - void buildPrs(); - void buildNodePrs(); - void buildElemPrs(); - -private: - - TMapOfIds mySMDS2VTKNodes; - TMapOfIds myVTK2SMDSNodes; - TMapOfIds mySMDS2VTKElems; - TMapOfIds myVTK2SMDSElems; - - vtkUnstructuredGrid* myGrid; -}; - - -/* - Class : SMESH_MeshObj - Description : Class for visualisation of mesh -*/ - -class SMESH_MeshObj: public SMESH_VisualObjDef -{ -public: - - SMESH_MeshObj( SMESH::SMESH_Mesh_ptr ); - virtual ~SMESH_MeshObj(); - - virtual void Update( int theIsClear = true ); - - virtual int GetNbEntities( const SMDSAbs_ElementType) const; - virtual int GetEntities( const SMDSAbs_ElementType, TEntityList& ) const; - virtual bool IsNodePrs() const; - - virtual int GetElemDimension( const int theObjId ); - - virtual void UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor ); - - SMESH::SMESH_Mesh_ptr GetMeshServer() { return myMeshServer.in(); } - SMDS_Mesh* GetMesh() const { return myMesh; } - -protected: - - SMESH::SMESH_Mesh_var myMeshServer; - SMDS_Mesh* myMesh; -}; - - -/* - Class : SMESH_SubMeshObj - Description : Base class for visualisation of submeshes and groups -*/ - -class SMESH_SubMeshObj: public SMESH_VisualObjDef -{ -public: - - SMESH_SubMeshObj(SMESH_MeshObj* theMeshObj); - virtual ~SMESH_SubMeshObj(); - - virtual void Update( int theIsClear = true ); - - virtual void UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor ); - virtual int GetElemDimension( const int theObjId ); - virtual SMDS_Mesh* GetMesh() const { return myMeshObj->GetMesh(); } - -protected: - - SMESH_MeshObj* myMeshObj; -}; - - -/* - Class : SMESH_GroupObj - Description : Class for visualisation of groups -*/ - -class SMESH_GroupObj: public SMESH_SubMeshObj -{ -public: - SMESH_GroupObj( SMESH::SMESH_GroupBase_ptr, SMESH_MeshObj* ); - virtual ~SMESH_GroupObj(); - - virtual int GetNbEntities( const SMDSAbs_ElementType) const; - virtual int GetEntities( const SMDSAbs_ElementType, TEntityList& ) const; - virtual bool IsNodePrs() const; - -private: - - SMESH::SMESH_GroupBase_var myGroupServer; -}; - - -/* - Class : SMESH_subMeshObj - Description : Class for visualisation of submeshes -*/ - -class SMESH_subMeshObj : public SMESH_SubMeshObj -{ -public: - - SMESH_subMeshObj( SMESH::SMESH_subMesh_ptr, - SMESH_MeshObj* ); - virtual ~SMESH_subMeshObj(); - - virtual int GetNbEntities( const SMDSAbs_ElementType) const; - virtual int GetEntities( const SMDSAbs_ElementType, TEntityList& ) const; - virtual bool IsNodePrs() const; - -protected: - - SMESH::SMESH_subMesh_var mySubMeshServer; -}; - - -#endif diff --git a/src/SMDS/Makefile.in b/src/SMDS/Makefile.in deleted file mode 100644 index e066e25e0..000000000 --- a/src/SMDS/Makefile.in +++ /dev/null @@ -1,143 +0,0 @@ -# SMESH SMDS : implementaion of Salome mesh data structure -# -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : Makefile.in -# Author : Patrick GOLDBRONN (CEA) -# Module : SMESH - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl - - -@COMMENCE@ - -# Libraries targets - -LIB = libSMDS.la -LIB_SRC = \ - SMDS_MeshObject.cxx \ - SMDS_MeshElement.cxx \ - SMDS_Position.cxx \ - SMDS_EdgePosition.cxx \ - SMDS_FacePosition.cxx \ - SMDS_SpacePosition.cxx \ - SMDS_VertexPosition.cxx \ - SMDS_MeshNode.cxx \ - SMDS_MeshEdge.cxx \ - SMDS_MeshFace.cxx \ - SMDS_MeshVolume.cxx \ - SMDS_MeshElementIDFactory.cxx \ - SMDS_MeshGroup.cxx \ - SMDS_MeshIDFactory.cxx \ - SMDS_Mesh.cxx \ - SMDS_IteratorOfElements.cxx \ - SMDS_VolumeOfFaces.cxx \ - SMDS_VolumeOfNodes.cxx \ - SMDS_PolyhedralVolumeOfNodes.cxx \ - SMDS_FaceOfEdges.cxx \ - SMDS_FaceOfNodes.cxx \ - SMDS_PolygonalFaceOfNodes.cxx \ - SMDS_VolumeTool.cxx -# SMDS_Tria3OfNodes.cxx \ -# SMDS_HexahedronOfNodes.cxx - -#SMDSControl_BoundaryEdges.cxx \ -#SMDSControl_BoundaryFaces.cxx \ -#SMDSControl.cxx \ -#SMDSControl_MeshBoundary.cxx \ -#SMDSEdit_Transform.cxx \ -#SMDS_MeshNodeIDFactory.cxx \ -#SMDS_MeshPrism.cxx \ -#SMDS_MeshPyramid.cxx \ -#SMDS_MeshQuadrangle.cxx \ -#SMDS_MeshTetrahedron.cxx \ -#SMDS_MeshTriangle.cxx \ - - -LIB_CLIENT_IDL = -LIB_SERVER_IDL = - -# Executables targets -BIN = -BIN_SRC = -BIN_CLIENT_IDL = -BIN_SERVER_IDL = - -# header files -EXPORT_HEADERS= \ - SMDS_TypeOfPosition.hxx \ - SMDSAbs_ElementType.hxx \ - SMDS_EdgePosition.hxx \ - SMDS_ElemIterator.hxx \ - SMDS_FacePosition.hxx \ - SMDS_Mesh.hxx \ - SMDS_MeshEdge.hxx \ - SMDS_MeshElement.hxx \ - SMDS_MeshElementIDFactory.hxx \ - SMDS_MeshFace.hxx \ - SMDS_MeshGroup.hxx \ - SMDS_MeshIDFactory.hxx \ - SMDS_MeshNode.hxx \ - SMDS_MeshObject.hxx \ - SMDS_MeshVolume.hxx \ - SMDS_Position.hxx \ - SMDS_SpacePosition.hxx \ - SMDS_VertexPosition.hxx \ - SMDS_Iterator.hxx \ - SMDS_IteratorOfElements.hxx \ - SMDS_VolumeOfFaces.hxx \ - SMDS_VolumeOfNodes.hxx \ - SMDS_PolyhedralVolumeOfNodes.hxx \ - SMDS_FaceOfEdges.hxx \ - SMDS_FaceOfNodes.hxx \ - SMDS_PolygonalFaceOfNodes.hxx \ - SMDS_VolumeTool.hxx -# SMDS_Tria3OfNodes.hxx \ -# SMDS_HexahedronOfNodes.hxx - -#SMDSControl_BoundaryEdges.hxx \ -#SMDSControl_BoundaryFaces.hxx \ -#SMDSControl.hxx \ -#SMDSControl_MeshBoundary.hxx \ -#SMDSEdit_Transform.hxx \ -#SMDS_MeshPrism.hxx \ -#SMDS_MeshPyramid.hxx \ -#SMDS_MeshQuadrangle.hxx \ -#SMDS_MeshTetrahedron.hxx \ -#SMDS_MeshTriangle.hxx \ -#SMDS_MeshNodeIDFactory.hxx - -# additionnal information to compil and link file -CPPFLAGS += -I${KERNEL_ROOT_DIR}/include/salome $(OCC_INCLUDES) $(BOOST_CPPFLAGS) -CXXFLAGS += -I${KERNEL_ROOT_DIR}/include/salome -LDFLAGS += -L${KERNEL_ROOT_DIR}/lib/salome $(OCC_KERNEL_LIBS) - - -# additional file to be cleaned -MOSTLYCLEAN = -CLEAN = -DISTCLEAN = - -@CONCLUDE@ diff --git a/src/SMDS/SMDSAbs_ElementType.hxx b/src/SMDS/SMDSAbs_ElementType.hxx deleted file mode 100644 index c474a4e55..000000000 --- a/src/SMDS/SMDSAbs_ElementType.hxx +++ /dev/null @@ -1,41 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org or email : webmaster@opencascade.org -// -// -// -// File : SMDSAbs_ElementType.hxx -// Module : SMESH - -#ifndef _SMDSAbs_ElementType_HeaderFile -#define _SMDSAbs_ElementType_HeaderFile - -/////////////////////////////////////////////////////////////////////////////// -/// Type (node, edge, face or volume) of elements -/////////////////////////////////////////////////////////////////////////////// -enum SMDSAbs_ElementType -{ - SMDSAbs_All, - SMDSAbs_Node, - SMDSAbs_Edge, - SMDSAbs_Face, - SMDSAbs_Volume -}; - -#endif diff --git a/src/SMDS/SMDS_EdgePosition.cxx b/src/SMDS/SMDS_EdgePosition.cxx deleted file mode 100644 index 82c92b398..000000000 --- a/src/SMDS/SMDS_EdgePosition.cxx +++ /dev/null @@ -1,76 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_EdgePosition.cxx -// Author : Jean-Michel BOULCOURT -// Module : SMESH - -#include "SMDS_EdgePosition.hxx" - -#include "utilities.h" - -using namespace std; - -//======================================================================= -//function : SMDS_EdgePosition -//purpose : -//======================================================================= - -SMDS_EdgePosition::SMDS_EdgePosition(const int aEdgeId, - const double aUParam):SMDS_Position(aEdgeId), myUParameter(aUParam) -{ -} - -//======================================================================= -//function : Coords -//purpose : -//======================================================================= - -const double *SMDS_EdgePosition::Coords() const -{ - static double origin[]={0,0,0}; - MESSAGE("SMDS_EdgePosition::Coords not implemented"); - return origin; -} - -/** -*/ -SMDS_TypeOfPosition SMDS_EdgePosition::GetTypeOfPosition() const -{ - return SMDS_TOP_EDGE; -} - -void SMDS_EdgePosition::SetUParameter(double aUparam) -{ - myUParameter = aUparam; -} - -//======================================================================= -//function : GetUParameter -//purpose : -//======================================================================= - -double SMDS_EdgePosition::GetUParameter() const -{ - return myUParameter; -} diff --git a/src/SMDS/SMDS_EdgePosition.hxx b/src/SMDS/SMDS_EdgePosition.hxx deleted file mode 100644 index 84916246b..000000000 --- a/src/SMDS/SMDS_EdgePosition.hxx +++ /dev/null @@ -1,48 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_EdgePosition.hxx -// Module : SMESH - -#ifndef _SMDS_EdgePosition_HeaderFile -#define _SMDS_EdgePosition_HeaderFile - -#include "SMDS_Position.hxx" - -class SMDS_EdgePosition:public SMDS_Position -{ - - public: - SMDS_EdgePosition(const int aEdgeId=0, const double aUParam=0); - const virtual double * Coords() const; - SMDS_TypeOfPosition GetTypeOfPosition() const; - void SetUParameter(double aUparam); - double GetUParameter() const; - - private: - - double myUParameter; - -}; - -#endif diff --git a/src/SMDS/SMDS_ElemIterator.hxx b/src/SMDS/SMDS_ElemIterator.hxx deleted file mode 100755 index c8432afdd..000000000 --- a/src/SMDS/SMDS_ElemIterator.hxx +++ /dev/null @@ -1,40 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_MeshElement.hxx -// Module : SMESH -// Created: 12.01.05 18:02:52 -// Author: Michael Sazonov - -#ifndef SMDS_ElemIterator_HeaderFile -#define SMDS_ElemIterator_HeaderFile - -#include "SMDS_Iterator.hxx" -#include - -class SMDS_MeshElement; - -typedef SMDS_Iterator SMDS_ElemIterator; -typedef boost::shared_ptr > SMDS_ElemIteratorPtr; - -#endif diff --git a/src/SMDS/SMDS_FaceOfEdges.cxx b/src/SMDS/SMDS_FaceOfEdges.cxx deleted file mode 100644 index 640c55d30..000000000 --- a/src/SMDS/SMDS_FaceOfEdges.cxx +++ /dev/null @@ -1,157 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#endif - -#include "SMDS_FaceOfEdges.hxx" -#include "SMDS_IteratorOfElements.hxx" -#include "SMDS_MeshNode.hxx" - -using namespace std; - -//======================================================================= -//function : NbEdges -//purpose : -//======================================================================= - -int SMDS_FaceOfEdges::NbEdges() const -{ - return myNbEdges; -} - -int SMDS_FaceOfEdges::NbFaces() const -{ - return 1; -} -//======================================================================= -//function : Print -//purpose : -//======================================================================= - -void SMDS_FaceOfEdges::Print(ostream & OS) const -{ - OS << "face <" << GetID() << " > : "; - int i; - for (i = 0; i < NbEdges() - 1; i++) OS << myEdges[i] << ","; - OS << myEdges[i] << ") " << endl; -} - -SMDSAbs_ElementType SMDS_FaceOfEdges::GetType() const -{ - return SMDSAbs_Face; -} - -//======================================================================= -//function : elementsIterator -//purpose : -//======================================================================= - -class SMDS_FaceOfEdges_MyIterator:public SMDS_ElemIterator -{ - const SMDS_MeshEdge* const *mySet; - int myLength; - int index; - public: - SMDS_FaceOfEdges_MyIterator(const SMDS_MeshEdge* const *s, int l): - mySet(s),myLength(l),index(0) {} - - bool more() - { - return index set1,set2; - SMDS_ElemIteratorPtr it; - const SMDS_MeshNode * n; - - it=f1.nodesIterator(); - - while(it->more()) - { - n=static_cast(it->next()); - set1.insert(*n); - } - - delete it; - it=f2.nodesIterator(); - - while(it->more()) - { - n=static_cast(it->next()); - set2.insert(*n); - } - - delete it; - return set1 - - -class SMDS_FaceOfEdges:public SMDS_MeshFace -{ - public: - void Print(std::ostream & OS) const; - SMDS_FaceOfEdges(const SMDS_MeshEdge* edge1, - const SMDS_MeshEdge* edge2, - const SMDS_MeshEdge* edge3); - SMDS_FaceOfEdges(const SMDS_MeshEdge* edge1, - const SMDS_MeshEdge* edge2, - const SMDS_MeshEdge* edge3, - const SMDS_MeshEdge* edge4); - - SMDSAbs_ElementType GetType() const; - int NbEdges() const; - int NbFaces() const; -// friend bool operator<(const SMDS_FaceOfEdges& e1, const SMDS_FaceOfEdges& e2); - - protected: - SMDS_ElemIteratorPtr - elementsIterator(SMDSAbs_ElementType type) const; - - private: - const SMDS_MeshEdge* myEdges[4]; - int myNbEdges; - -}; - -#endif diff --git a/src/SMDS/SMDS_FaceOfNodes.cxx b/src/SMDS/SMDS_FaceOfNodes.cxx deleted file mode 100644 index aa6870824..000000000 --- a/src/SMDS/SMDS_FaceOfNodes.cxx +++ /dev/null @@ -1,177 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#endif - -#include "SMDS_FaceOfNodes.hxx" -#include "SMDS_IteratorOfElements.hxx" -#include "SMDS_MeshNode.hxx" -#include "utilities.h" - -using namespace std; - -//======================================================================= -//function : NbEdges -//purpose : -//======================================================================= - -int SMDS_FaceOfNodes::NbEdges() const -{ - return NbNodes(); -} - -int SMDS_FaceOfNodes::NbFaces() const -{ - return 1; -} - -int SMDS_FaceOfNodes::NbNodes() const -{ - return myNbNodes; -} - -//======================================================================= -//function : Print -//purpose : -//======================================================================= - -void SMDS_FaceOfNodes::Print(ostream & OS) const -{ - OS << "face <" << GetID() << " > : "; - int i; - for (i = 0; i < NbNodes() - 1; i++) OS << myNodes[i] << ","; - OS << myNodes[i] << ") " << endl; -} - -//======================================================================= -//function : elementsIterator -//purpose : -//======================================================================= - -class SMDS_FaceOfNodes_MyIterator:public SMDS_ElemIterator -{ - const SMDS_MeshNode* const *mySet; - int myLength; - int index; - public: - SMDS_FaceOfNodes_MyIterator(const SMDS_MeshNode* const *s, int l): - mySet(s),myLength(l),index(0) {} - - bool more() - { - return index set1,set2; - SMDS_ElemIteratorPtr it; - const SMDS_MeshNode * n; - - it=f1.nodesIterator(); - - while(it->more()) - { - n=static_cast(it->next()); - set1.insert(*n); - } - - delete it; - it=f2.nodesIterator(); - - while(it->more()) - { - n=static_cast(it->next()); - set2.insert(*n); - } - - delete it; - return set1 - -class SMDS_FaceOfNodes:public SMDS_MeshFace -{ - public: - void Print(std::ostream & OS) const; - SMDS_FaceOfNodes(const SMDS_MeshNode* node1, - const SMDS_MeshNode* node2, - const SMDS_MeshNode* node3); - SMDS_FaceOfNodes(const SMDS_MeshNode* node1, - const SMDS_MeshNode* node2, - const SMDS_MeshNode* node3, - const SMDS_MeshNode* node4); - bool ChangeNodes(const SMDS_MeshNode* nodes[], - const int nbNodes); - int NbEdges() const; - int NbFaces() const; - int NbNodes() const; - protected: - SMDS_ElemIteratorPtr - elementsIterator(SMDSAbs_ElementType type) const; - - private: - const SMDS_MeshNode* myNodes[4]; - int myNbNodes; - -}; - -#endif diff --git a/src/SMDS/SMDS_FacePosition.cxx b/src/SMDS/SMDS_FacePosition.cxx deleted file mode 100644 index c97e64f7a..000000000 --- a/src/SMDS/SMDS_FacePosition.cxx +++ /dev/null @@ -1,98 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_FacePosition.cxx -// Author : Jean-Michel BOULCOURT -// Module : SMESH - -#include "SMDS_FacePosition.hxx" - -#include "utilities.h" - -using namespace std; - -//======================================================================= -//function : SMDS_FacePosition -//purpose : -//======================================================================= - -SMDS_FacePosition::SMDS_FacePosition(const int aEdgeId, - const double aUParam, - const double aVParam) - :SMDS_Position(aEdgeId), - myUParameter(aUParam),myVParameter(aVParam) -{ -} - -//======================================================================= -//function : Coords -//purpose : -//======================================================================= -const double *SMDS_FacePosition::Coords() const -{ - static double origin[]={0,0,0}; - MESSAGE("SMDS_EdgePosition::Coords not implemented"); - return origin; -} - -/** -*/ -SMDS_TypeOfPosition SMDS_FacePosition::GetTypeOfPosition() const -{ - return SMDS_TOP_FACE; -} - -void SMDS_FacePosition::SetUParameter(double aUparam) -{ - myUParameter = aUparam; -} - -//======================================================================= -//function : SetVParameter -//purpose : -//======================================================================= - -void SMDS_FacePosition::SetVParameter(double aVparam) -{ - myVParameter = aVparam; -} - -//======================================================================= -//function : GetUParameter -//purpose : -//======================================================================= - -double SMDS_FacePosition::GetUParameter() const -{ - return myUParameter; -} - -//======================================================================= -//function : GetVParameter -//purpose : -//======================================================================= - -double SMDS_FacePosition::GetVParameter() const -{ - return myVParameter; -} diff --git a/src/SMDS/SMDS_FacePosition.hxx b/src/SMDS/SMDS_FacePosition.hxx deleted file mode 100644 index 255fd05d8..000000000 --- a/src/SMDS/SMDS_FacePosition.hxx +++ /dev/null @@ -1,49 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_FacePosition.hxx -// Module : SMESH - -#ifndef _SMDS_FacePosition_HeaderFile -#define _SMDS_FacePosition_HeaderFile - -#include "SMDS_Position.hxx" - -class SMDS_FacePosition:public SMDS_Position -{ - - public: - SMDS_FacePosition(int aFaceId=0, double aUParam=0, - double aVParam=0); - const virtual double * Coords() const; - SMDS_TypeOfPosition GetTypeOfPosition() const; - void SetUParameter(double aUparam); - void SetVParameter(double aVparam); - double GetUParameter() const; - double GetVParameter() const; - - private: - double myUParameter; - double myVParameter; -}; -#endif diff --git a/src/SMDS/SMDS_Iterator.hxx b/src/SMDS/SMDS_Iterator.hxx deleted file mode 100644 index 264438c7d..000000000 --- a/src/SMDS/SMDS_Iterator.hxx +++ /dev/null @@ -1,46 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _SMDS_Iterator_HeaderFile -#define _SMDS_Iterator_HeaderFile - -/////////////////////////////////////////////////////////////////////////////// -///Abstract class for iterators -///@author Jerome Robert -/////////////////////////////////////////////////////////////////////////////// -template class SMDS_Iterator -{ - public: - /// Return true if and only if there are other object in this iterator - virtual bool more()=0; - - /// Return the current object and step to the next one - virtual VALUE next()=0; - - /// Delete the current element and step to the next one - virtual void remove(){} - - /// Provide virtual destructor just for case if some derived iterator - /// must have a destructor - virtual ~SMDS_Iterator(){} -}; - -#endif diff --git a/src/SMDS/SMDS_IteratorOfElements.cxx b/src/SMDS/SMDS_IteratorOfElements.cxx deleted file mode 100644 index 472ae0d54..000000000 --- a/src/SMDS/SMDS_IteratorOfElements.cxx +++ /dev/null @@ -1,106 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#endif - -#include "SMDS_IteratorOfElements.hxx" - -bool SMDS_IteratorOfElements::subMore() -{ - if((t2Iterator.get()==NULL)||(!t2Iterator->more())) - { - if(t1Iterator->more()) - { - t2Iterator=t1Iterator->next()->elementsIterator(myType); - return subMore(); - } - else return false; - } - else return true; -} - -const SMDS_MeshElement * SMDS_IteratorOfElements::subNext() -{ - if((t2Iterator.get()==NULL)||(!t2Iterator->more())) - if(t1Iterator->more()) - t2Iterator=t1Iterator->next()->elementsIterator(myType); - return t2Iterator->next(); -} - -///////////////////////////////////////////////////////////////////////////// -/// Create an iterator which look for elements of type type which are linked -/// to the element element. it is the iterator to get connectivity of element -////////////////////////////////////////////////////////////////////////////// -SMDS_IteratorOfElements::SMDS_IteratorOfElements(const SMDS_MeshElement * element, - SMDSAbs_ElementType type, - const SMDS_ElemIteratorPtr& it) - : t1Iterator(it), - t2Iterator(SMDS_ElemIteratorPtr((SMDS_ElemIterator*)NULL)), - myType(type), myElement(element), - myProxyElement(NULL) -{ - while(subMore()) - alreadyReturnedElements.insert(subNext()); - itAlreadyReturned= alreadyReturnedElements.begin(); - switch(myElement->GetType()) - { - case SMDSAbs_Node: - case SMDSAbs_Edge: myReverseIteration=true; break; - case SMDSAbs_Face: myReverseIteration=(type==SMDSAbs_Volume); break; - default: myReverseIteration=false; - } -} - -bool SMDS_IteratorOfElements::more() -{ - if(myProxyElement==NULL) - { - while(itAlreadyReturned!=alreadyReturnedElements.end()) - { - myProxyElement=*itAlreadyReturned; - itAlreadyReturned++; - - if(myReverseIteration) - { - SMDS_ElemIteratorPtr it= - myProxyElement->elementsIterator(myElement->GetType()); - while(it->more()) - { - if(it->next()==myElement) return true; - } - } - else return true; - } - myProxyElement=NULL; - return false; - } - else return true; -} - -const SMDS_MeshElement * SMDS_IteratorOfElements::next() -{ - more(); - const SMDS_MeshElement *e=myProxyElement; - myProxyElement=NULL; - return e; -} diff --git a/src/SMDS/SMDS_IteratorOfElements.hxx b/src/SMDS/SMDS_IteratorOfElements.hxx deleted file mode 100644 index faf777de9..000000000 --- a/src/SMDS/SMDS_IteratorOfElements.hxx +++ /dev/null @@ -1,52 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "SMDS_Iterator.hxx" -#include "SMDS_MeshElement.hxx" -#include - - -class SMDS_IteratorOfElements:public SMDS_ElemIterator -{ - public: -///////////////////////////////////////////////////////////////////////////// -/// Create an iterator which look for elements of type type which are linked -/// to the element element. it is the iterator to get connectivity of element -////////////////////////////////////////////////////////////////////////////// - SMDS_IteratorOfElements(const SMDS_MeshElement * element, - SMDSAbs_ElementType type, - const SMDS_ElemIteratorPtr& it); - bool more(); - const SMDS_MeshElement * next(); - - private: - SMDS_ElemIteratorPtr t2Iterator; - SMDS_ElemIteratorPtr t1Iterator; - SMDSAbs_ElementType myType; - const SMDS_MeshElement * myProxyElement; - const SMDS_MeshElement * myElement; - bool myReverseIteration; - - std::set alreadyReturnedElements; - std::set::iterator itAlreadyReturned; - bool subMore(); - const SMDS_MeshElement * subNext(); -}; diff --git a/src/SMDS/SMDS_Mesh.cxx b/src/SMDS/SMDS_Mesh.cxx deleted file mode 100644 index 6381e547e..000000000 --- a/src/SMDS/SMDS_Mesh.cxx +++ /dev/null @@ -1,2203 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#endif - -#include "utilities.h" -#include "SMDS_Mesh.hxx" -#include "SMDS_VolumeOfNodes.hxx" -#include "SMDS_VolumeOfFaces.hxx" -#include "SMDS_FaceOfNodes.hxx" -#include "SMDS_FaceOfEdges.hxx" -#include "SMDS_PolyhedralVolumeOfNodes.hxx" -#include "SMDS_PolygonalFaceOfNodes.hxx" - -#include -#include -using namespace std; - -/////////////////////////////////////////////////////////////////////////////// -/// Create a new mesh object -/////////////////////////////////////////////////////////////////////////////// -SMDS_Mesh::SMDS_Mesh() - :myParent(NULL), - myNodeIDFactory(new SMDS_MeshElementIDFactory()), - myElementIDFactory(new SMDS_MeshElementIDFactory()), - myHasConstructionEdges(false), myHasConstructionFaces(false), - myHasInverseElements(true) -{ -} - -/////////////////////////////////////////////////////////////////////////////// -/// Create a new child mesh -/// Note that the tree structure of SMDS_Mesh seems to be unused in this version -/// (2003-09-08) of SMESH -/////////////////////////////////////////////////////////////////////////////// -SMDS_Mesh::SMDS_Mesh(SMDS_Mesh * parent) - :myParent(parent), myNodeIDFactory(parent->myNodeIDFactory), - myElementIDFactory(parent->myElementIDFactory), - myHasConstructionEdges(false), myHasConstructionFaces(false), - myHasInverseElements(true) -{ -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a submesh and add it to the current mesh -/////////////////////////////////////////////////////////////////////////////// - -SMDS_Mesh *SMDS_Mesh::AddSubMesh() -{ - SMDS_Mesh *submesh = new SMDS_Mesh(this); - myChildren.insert(myChildren.end(), submesh); - return submesh; -} - -/////////////////////////////////////////////////////////////////////////////// -///create a MeshNode and add it to the current Mesh -///An ID is automatically assigned to the node. -///@return : The created node -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshNode * SMDS_Mesh::AddNode(double x, double y, double z) -{ - return SMDS_Mesh::AddNodeWithID(x,y,z,myNodeIDFactory->GetFreeID()); -} - -/////////////////////////////////////////////////////////////////////////////// -///create a MeshNode and add it to the current Mesh -///@param ID : The ID of the MeshNode to create -///@return : The created node or NULL if a node with this ID already exists -/////////////////////////////////////////////////////////////////////////////// -SMDS_MeshNode * SMDS_Mesh::AddNodeWithID(double x, double y, double z, int ID) -{ - // find the MeshNode corresponding to ID - const SMDS_MeshElement *node = myNodeIDFactory->MeshElement(ID); - if(!node){ - SMDS_MeshNode * node=new SMDS_MeshNode(x, y, z); - myNodes.Add(node); - myNodeIDFactory->BindID(ID,node); - return node; - }else - return NULL; -} - -/////////////////////////////////////////////////////////////////////////////// -/// create a MeshEdge and add it to the current Mesh -/// @return : The created MeshEdge -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(int idnode1, int idnode2, int ID) -{ - SMDS_MeshNode * node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1); - SMDS_MeshNode * node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2); - if(!node1 || !node2) return NULL; - return SMDS_Mesh::AddEdgeWithID(node1, node2, ID); -} - -/////////////////////////////////////////////////////////////////////////////// -/// create a MeshEdge and add it to the current Mesh -/// @return : The created MeshEdge -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshEdge* SMDS_Mesh::AddEdge(const SMDS_MeshNode * node1, - const SMDS_MeshNode * node2) -{ - return SMDS_Mesh::AddEdgeWithID(node1, node2, myElementIDFactory->GetFreeID()); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Create a new edge and at it to the mesh -/// @param idnode1 ID of the first node -/// @param idnode2 ID of the second node -/// @param ID ID of the edge to create -/// @return The created edge or NULL if an element with this ID already exists or -/// if input nodes are not found. -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - int ID) -{ - SMDS_MeshEdge * edge=new SMDS_MeshEdge(n1,n2); - if(myElementIDFactory->BindID(ID, edge)) { - SMDS_MeshNode *node1,*node2; - node1=const_cast(n1); - node2=const_cast(n2); - node1->AddInverseElement(edge); - node2->AddInverseElement(edge); - myEdges.Add(edge); - return edge; - } - else { - delete edge; - return NULL; - } -} - -/////////////////////////////////////////////////////////////////////////////// -/// Add a triangle defined by its nodes. An ID is automatically affected to the -/// Created face -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3) -{ - return SMDS_Mesh::AddFaceWithID(n1,n2,n3, myElementIDFactory->GetFreeID()); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Add a triangle defined by its nodes IDs -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(int idnode1, int idnode2, int idnode3, int ID) -{ - SMDS_MeshNode * node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1); - SMDS_MeshNode * node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2); - SMDS_MeshNode * node3 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode3); - if(!node1 || !node2 || !node3) return NULL; - return SMDS_Mesh::AddFaceWithID(node1, node2, node3, ID); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Add a triangle defined by its nodes -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - int ID) -{ - SMDS_MeshFace * face=createTriangle(n1, n2, n3); - - if (!registerElement(ID, face)) { - RemoveElement(face, false); - face = NULL; - } - return face; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Add a quadrangle defined by its nodes. An ID is automatically affected to the -/// created face -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4) -{ - return SMDS_Mesh::AddFaceWithID(n1,n2,n3, n4, myElementIDFactory->GetFreeID()); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Add a quadrangle defined by its nodes IDs -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(int idnode1, - int idnode2, - int idnode3, - int idnode4, - int ID) -{ - SMDS_MeshNode *node1, *node2, *node3, *node4; - node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1); - node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2); - node3 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode3); - node4 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode4); - if(!node1 || !node2 || !node3 || !node4) return NULL; - return SMDS_Mesh::AddFaceWithID(node1, node2, node3, node4, ID); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Add a quadrangle defined by its nodes -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - int ID) -{ - SMDS_MeshFace * face=createQuadrangle(n1, n2, n3, n4); - - if (!registerElement(ID, face)) { - RemoveElement(face, false); - face = NULL; - } - return face; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Add a triangle defined by its edges. An ID is automatically assigned to the -/// Created face -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshEdge * e1, - const SMDS_MeshEdge * e2, - const SMDS_MeshEdge * e3) -{ - if (!hasConstructionEdges()) - return NULL; - return AddFaceWithID(e1,e2,e3, myElementIDFactory->GetFreeID()); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Add a triangle defined by its edges -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshEdge * e1, - const SMDS_MeshEdge * e2, - const SMDS_MeshEdge * e3, - int ID) -{ - if (!hasConstructionEdges()) - return NULL; - SMDS_MeshFace * face = new SMDS_FaceOfEdges(e1,e2,e3); - myFaces.Add(face); - - if (!registerElement(ID, face)) { - RemoveElement(face, false); - face = NULL; - } - return face; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Add a quadrangle defined by its edges. An ID is automatically assigned to the -/// Created face -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshEdge * e1, - const SMDS_MeshEdge * e2, - const SMDS_MeshEdge * e3, - const SMDS_MeshEdge * e4) -{ - if (!hasConstructionEdges()) - return NULL; - return AddFaceWithID(e1,e2,e3,e4, myElementIDFactory->GetFreeID()); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Add a quadrangle defined by its edges -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshEdge * e1, - const SMDS_MeshEdge * e2, - const SMDS_MeshEdge * e3, - const SMDS_MeshEdge * e4, - int ID) -{ - if (!hasConstructionEdges()) - return NULL; - SMDS_MeshFace * face = new SMDS_FaceOfEdges(e1,e2,e3,e4); - myFaces.Add(face); - - if (!registerElement(ID, face)) - { - RemoveElement(face, false); - face = NULL; - } - return face; -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new tetrahedron and add it to the mesh. -///@return The created tetrahedron -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4) -{ - int ID = myElementIDFactory->GetFreeID(); - SMDS_MeshVolume * v = SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, ID); - if(v==NULL) myElementIDFactory->ReleaseID(ID); - return v; -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new tetrahedron and add it to the mesh. -///@param ID The ID of the new volume -///@return The created tetrahedron or NULL if an element with this ID already exists -///or if input nodes are not found. -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(int idnode1, - int idnode2, - int idnode3, - int idnode4, - int ID) -{ - SMDS_MeshNode *node1, *node2, *node3, *node4; - node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1); - node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2); - node3 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode3); - node4 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode4); - if(!node1 || !node2 || !node3 || !node4) return NULL; - return SMDS_Mesh::AddVolumeWithID(node1, node2, node3, node4, ID); -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new tetrahedron and add it to the mesh. -///@param ID The ID of the new volume -///@return The created tetrahedron -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - int ID) -{ - SMDS_MeshVolume* volume; - if(hasConstructionFaces()) { - SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3); - SMDS_MeshFace * f2=FindFaceOrCreate(n1,n2,n4); - SMDS_MeshFace * f3=FindFaceOrCreate(n1,n3,n4); - SMDS_MeshFace * f4=FindFaceOrCreate(n2,n3,n4); - volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4); - myVolumes.Add(volume); - } - else if(hasConstructionEdges()) { - MESSAGE("Error : Not implemented"); - return NULL; - } - else { - volume=new SMDS_VolumeOfNodes(n1,n2,n3,n4); - myVolumes.Add(volume); - } - - if (!registerElement(ID, volume)) { - RemoveElement(volume, false); - volume = NULL; - } - return volume; -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new pyramid and add it to the mesh. -///Nodes 1,2,3 and 4 define the base of the pyramid -///@return The created pyramid -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5) -{ - int ID = myElementIDFactory->GetFreeID(); - SMDS_MeshVolume * v = SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, ID); - if(v==NULL) myElementIDFactory->ReleaseID(ID); - return v; -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new pyramid and add it to the mesh. -///Nodes 1,2,3 and 4 define the base of the pyramid -///@param ID The ID of the new volume -///@return The created pyramid or NULL if an element with this ID already exists -///or if input nodes are not found. -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(int idnode1, - int idnode2, - int idnode3, - int idnode4, - int idnode5, - int ID) -{ - SMDS_MeshNode *node1, *node2, *node3, *node4, *node5; - node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1); - node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2); - node3 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode3); - node4 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode4); - node5 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode5); - if(!node1 || !node2 || !node3 || !node4 || !node5) return NULL; - return SMDS_Mesh::AddVolumeWithID(node1, node2, node3, node4, node5, ID); -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new pyramid and add it to the mesh. -///Nodes 1,2,3 and 4 define the base of the pyramid -///@param ID The ID of the new volume -///@return The created pyramid -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - int ID) -{ - SMDS_MeshVolume* volume; - if(hasConstructionFaces()) { - SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3,n4); - SMDS_MeshFace * f2=FindFaceOrCreate(n1,n2,n5); - SMDS_MeshFace * f3=FindFaceOrCreate(n2,n3,n5); - SMDS_MeshFace * f4=FindFaceOrCreate(n3,n4,n5); - volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4); - myVolumes.Add(volume); - } - else if(hasConstructionEdges()) { - MESSAGE("Error : Not implemented"); - return NULL; - } - else { - volume=new SMDS_VolumeOfNodes(n1,n2,n3,n4,n5); - myVolumes.Add(volume); - } - - if (!registerElement(ID, volume)) { - RemoveElement(volume, false); - volume = NULL; - } - return volume; -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new prism and add it to the mesh. -///Nodes 1,2,3 is a triangle and 1,2,5,4 a quadrangle. -///@return The created prism -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6) -{ - int ID = myElementIDFactory->GetFreeID(); - SMDS_MeshVolume * v = SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, ID); - if(v==NULL) myElementIDFactory->ReleaseID(ID); - return v; -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new prism and add it to the mesh. -///Nodes 1,2,3 is a triangle and 1,2,5,4 a quadrangle. -///@param ID The ID of the new volume -///@return The created prism or NULL if an element with this ID already exists -///or if input nodes are not found. -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(int idnode1, - int idnode2, - int idnode3, - int idnode4, - int idnode5, - int idnode6, - int ID) -{ - SMDS_MeshNode *node1, *node2, *node3, *node4, *node5, *node6; - node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1); - node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2); - node3 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode3); - node4 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode4); - node5 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode5); - node6 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode6); - if(!node1 || !node2 || !node3 || !node4 || !node5 || !node6) return NULL; - return SMDS_Mesh::AddVolumeWithID(node1, node2, node3, node4, node5, node6, ID); -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new prism and add it to the mesh. -///Nodes 1,2,3 is a triangle and 1,2,5,4 a quadrangle. -///@param ID The ID of the new volume -///@return The created prism -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6, - int ID) -{ - SMDS_MeshVolume* volume; - if(hasConstructionFaces()) { - SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3); - SMDS_MeshFace * f2=FindFaceOrCreate(n4,n5,n6); - SMDS_MeshFace * f3=FindFaceOrCreate(n1,n4,n5,n2); - SMDS_MeshFace * f4=FindFaceOrCreate(n2,n5,n6,n3); - SMDS_MeshFace * f5=FindFaceOrCreate(n3,n6,n4,n1); - volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5); - myVolumes.Add(volume); - } - else if(hasConstructionEdges()) { - MESSAGE("Error : Not implemented"); - return NULL; - } - else { - volume=new SMDS_VolumeOfNodes(n1,n2,n3,n4,n5,n6); - myVolumes.Add(volume); - } - - if (!registerElement(ID, volume)) { - RemoveElement(volume, false); - volume = NULL; - } - return volume; -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new hexahedron and add it to the mesh. -///Nodes 1,2,3,4 and 5,6,7,8 are quadrangle and 5,1 and 7,3 are an edges. -///@return The created hexahedron -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6, - const SMDS_MeshNode * n7, - const SMDS_MeshNode * n8) -{ - int ID = myElementIDFactory->GetFreeID(); - SMDS_MeshVolume * v = SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8, ID); - if(v==NULL) myElementIDFactory->ReleaseID(ID); - return v; -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new hexahedron and add it to the mesh. -///Nodes 1,2,3,4 and 5,6,7,8 are quadrangle and 5,1 and 7,3 are an edges. -///@param ID The ID of the new volume -///@return The created hexahedron or NULL if an element with this ID already -///exists or if input nodes are not found. -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(int idnode1, - int idnode2, - int idnode3, - int idnode4, - int idnode5, - int idnode6, - int idnode7, - int idnode8, - int ID) -{ - SMDS_MeshNode *node1, *node2, *node3, *node4, *node5, *node6, *node7, *node8; - node1 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode1); - node2 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode2); - node3 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode3); - node4 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode4); - node5 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode5); - node6 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode6); - node7 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode7); - node8 = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(idnode8); - if(!node1 || !node2 || !node3 || !node4 || !node5 || !node6 || !node7 || !node8) - return NULL; - return SMDS_Mesh::AddVolumeWithID(node1, node2, node3, node4, node5, node6, - node7, node8, ID); -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new hexahedron and add it to the mesh. -///Nodes 1,2,3,4 and 5,6,7,8 are quadrangle and 5,1 and 7,3 are an edges. -///@param ID The ID of the new volume -///@return The created prism or NULL if an element with this ID already exists -///or if input nodes are not found. -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6, - const SMDS_MeshNode * n7, - const SMDS_MeshNode * n8, - int ID) -{ - SMDS_MeshVolume* volume; - if(hasConstructionFaces()) { - SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3,n4); - SMDS_MeshFace * f2=FindFaceOrCreate(n5,n6,n7,n8); - SMDS_MeshFace * f3=FindFaceOrCreate(n1,n4,n8,n5); - SMDS_MeshFace * f4=FindFaceOrCreate(n1,n2,n6,n5); - SMDS_MeshFace * f5=FindFaceOrCreate(n2,n3,n7,n6); - SMDS_MeshFace * f6=FindFaceOrCreate(n3,n4,n8,n7); - volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5,f6); - myVolumes.Add(volume); - } - else if(hasConstructionEdges()) { - MESSAGE("Error : Not implemented"); - return NULL; - } - else { -// 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); - } - - if (!registerElement(ID, volume)) { - RemoveElement(volume, false); - volume = NULL; - } - return volume; -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new tetrahedron defined by its faces and add it to the mesh. -///@return The created tetrahedron -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshFace * f1, - const SMDS_MeshFace * f2, - const SMDS_MeshFace * f3, - const SMDS_MeshFace * f4) -{ - if (!hasConstructionFaces()) - return NULL; - return AddVolumeWithID(f1,f2,f3,f4, myElementIDFactory->GetFreeID()); -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new tetrahedron defined by its faces and add it to the mesh. -///@param ID The ID of the new volume -///@return The created tetrahedron -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshFace * f1, - const SMDS_MeshFace * f2, - const SMDS_MeshFace * f3, - const SMDS_MeshFace * f4, - int ID) -{ - if (!hasConstructionFaces()) - return NULL; - SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4); - myVolumes.Add(volume); - - if (!registerElement(ID, volume)) { - RemoveElement(volume, false); - volume = NULL; - } - return volume; -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new pyramid defined by its faces and add it to the mesh. -///@return The created pyramid -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshFace * f1, - const SMDS_MeshFace * f2, - const SMDS_MeshFace * f3, - const SMDS_MeshFace * f4, - const SMDS_MeshFace * f5) -{ - if (!hasConstructionFaces()) - return NULL; - return AddVolumeWithID(f1,f2,f3,f4,f5, myElementIDFactory->GetFreeID()); -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new pyramid defined by its faces and add it to the mesh. -///@param ID The ID of the new volume -///@return The created pyramid -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshFace * f1, - const SMDS_MeshFace * f2, - const SMDS_MeshFace * f3, - const SMDS_MeshFace * f4, - const SMDS_MeshFace * f5, - int ID) -{ - if (!hasConstructionFaces()) - return NULL; - SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5); - myVolumes.Add(volume); - - if (!registerElement(ID, volume)) { - RemoveElement(volume, false); - volume = NULL; - } - return volume; -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new prism defined by its faces and add it to the mesh. -///@return The created prism -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshFace * f1, - const SMDS_MeshFace * f2, - const SMDS_MeshFace * f3, - const SMDS_MeshFace * f4, - const SMDS_MeshFace * f5, - const SMDS_MeshFace * f6) -{ - if (!hasConstructionFaces()) - return NULL; - return AddVolumeWithID(f1,f2,f3,f4,f5,f6, myElementIDFactory->GetFreeID()); -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a new prism defined by its faces and add it to the mesh. -///@param ID The ID of the new volume -///@return The created prism -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshFace * f1, - const SMDS_MeshFace * f2, - const SMDS_MeshFace * f3, - const SMDS_MeshFace * f4, - const SMDS_MeshFace * f5, - const SMDS_MeshFace * f6, - int ID) -{ - if (!hasConstructionFaces()) - return NULL; - SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5,f6); - myVolumes.Add(volume); - - if (!registerElement(ID, volume)) { - RemoveElement(volume, false); - volume = NULL; - } - return volume; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Add a polygon defined by its nodes IDs -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshFace* SMDS_Mesh::AddPolygonalFaceWithID (std::vector nodes_ids, - const int ID) -{ - int nbNodes = nodes_ids.size(); - std::vector nodes (nbNodes); - for (int i = 0; i < nbNodes; i++) { - nodes[i] = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(nodes_ids[i]); - if (!nodes[i]) return NULL; - } - return SMDS_Mesh::AddPolygonalFaceWithID(nodes, ID); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Add a polygon defined by its nodes -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshFace* SMDS_Mesh::AddPolygonalFaceWithID - (std::vector nodes, - const int ID) -{ - SMDS_MeshFace * face; - - if (hasConstructionEdges()) - { - MESSAGE("Error : Not implemented"); - return NULL; - } - else - { - face = new SMDS_PolygonalFaceOfNodes(nodes); - myFaces.Add(face); - } - - if (!registerElement(ID, face)) { - RemoveElement(face, false); - face = NULL; - } - return face; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Add a polygon defined by its nodes. -/// An ID is automatically affected to the created face. -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshFace* SMDS_Mesh::AddPolygonalFace (std::vector nodes) -{ - return SMDS_Mesh::AddPolygonalFaceWithID(nodes, myElementIDFactory->GetFreeID()); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Create a new polyhedral volume and add it to the mesh. -/// @param ID The ID of the new volume -/// @return The created volume or NULL if an element with this ID already exists -/// or if input nodes are not found. -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume * SMDS_Mesh::AddPolyhedralVolumeWithID - (std::vector nodes_ids, - std::vector quantities, - const int ID) -{ - int nbNodes = nodes_ids.size(); - std::vector nodes (nbNodes); - for (int i = 0; i < nbNodes; i++) { - nodes[i] = (SMDS_MeshNode *)myNodeIDFactory->MeshElement(nodes_ids[i]); - if (!nodes[i]) return NULL; - } - return SMDS_Mesh::AddPolyhedralVolumeWithID(nodes, quantities, ID); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Create a new polyhedral volume and add it to the mesh. -/// @param ID The ID of the new volume -/// @return The created volume -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddPolyhedralVolumeWithID - (std::vector nodes, - std::vector quantities, - const int ID) -{ - SMDS_MeshVolume* volume; - if (hasConstructionFaces()) { - MESSAGE("Error : Not implemented"); - return NULL; - } else if (hasConstructionEdges()) { - MESSAGE("Error : Not implemented"); - return NULL; - } else { - volume = new SMDS_PolyhedralVolumeOfNodes(nodes, quantities); - myVolumes.Add(volume); - } - - if (!registerElement(ID, volume)) { - RemoveElement(volume, false); - volume = NULL; - } - return volume; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Create a new polyhedral volume and add it to the mesh. -/// @return The created volume -/////////////////////////////////////////////////////////////////////////////// - -SMDS_MeshVolume* SMDS_Mesh::AddPolyhedralVolume - (std::vector nodes, - std::vector quantities) -{ - int ID = myElementIDFactory->GetFreeID(); - SMDS_MeshVolume * v = SMDS_Mesh::AddPolyhedralVolumeWithID(nodes, quantities, ID); - if (v == NULL) myElementIDFactory->ReleaseID(ID); - return v; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Registers element with the given ID, maintains inverse connections -/////////////////////////////////////////////////////////////////////////////// -bool SMDS_Mesh::registerElement(int ID, SMDS_MeshElement * element) -{ - if (myElementIDFactory->BindID(ID, element)) { - SMDS_ElemIteratorPtr it = element->nodesIterator(); - while (it->more()) { - SMDS_MeshNode *node = static_cast - (const_cast(it->next())); - node->AddInverseElement(element); - } - return true; - } - return false; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return the node whose ID is 'ID'. -/////////////////////////////////////////////////////////////////////////////// -const SMDS_MeshNode * SMDS_Mesh::FindNode(int ID) const -{ - return (const SMDS_MeshNode *)myNodeIDFactory->MeshElement(ID); -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a triangle and add it to the current mesh. This methode do not bind a -///ID to the create triangle. -/////////////////////////////////////////////////////////////////////////////// -SMDS_MeshFace * SMDS_Mesh::createTriangle(const SMDS_MeshNode * node1, - const SMDS_MeshNode * node2, - const SMDS_MeshNode * node3) -{ - 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; - } -} - -/////////////////////////////////////////////////////////////////////////////// -///Create a quadrangle and add it to the current mesh. This methode do not bind -///a ID to the create triangle. -/////////////////////////////////////////////////////////////////////////////// -SMDS_MeshFace * SMDS_Mesh::createQuadrangle(const SMDS_MeshNode * node1, - const SMDS_MeshNode * node2, - const SMDS_MeshNode * node3, - const SMDS_MeshNode * node4) -{ - 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; - } -} - -/////////////////////////////////////////////////////////////////////////////// -/// Remove a node and all the elements which own this node -/////////////////////////////////////////////////////////////////////////////// - -void SMDS_Mesh::RemoveNode(const SMDS_MeshNode * node) -{ - RemoveElement(node, true); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Remove an edge and all the elements which own this edge -/////////////////////////////////////////////////////////////////////////////// - -void SMDS_Mesh::RemoveEdge(const SMDS_MeshEdge * edge) -{ - RemoveElement(edge,true); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Remove an face and all the elements which own this face -/////////////////////////////////////////////////////////////////////////////// - -void SMDS_Mesh::RemoveFace(const SMDS_MeshFace * face) -{ - RemoveElement(face, true); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Remove a volume -/////////////////////////////////////////////////////////////////////////////// - -void SMDS_Mesh::RemoveVolume(const SMDS_MeshVolume * volume) -{ - RemoveElement(volume, true); -} - -//======================================================================= -//function : RemoveFromParent -//purpose : -//======================================================================= - -bool SMDS_Mesh::RemoveFromParent() -{ - if (myParent==NULL) return false; - else return (myParent->RemoveSubMesh(this)); -} - -//======================================================================= -//function : RemoveSubMesh -//purpose : -//======================================================================= - -bool SMDS_Mesh::RemoveSubMesh(const SMDS_Mesh * aMesh) -{ - bool found = false; - - list::iterator itmsh=myChildren.begin(); - for (; itmsh!=myChildren.end() && !found; itmsh++) - { - SMDS_Mesh * submesh = *itmsh; - if (submesh == aMesh) - { - found = true; - myChildren.erase(itmsh); - } - } - - return found; -} - -//======================================================================= -//function : ChangeElementNodes -//purpose : -//======================================================================= - -bool SMDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * elem, - const SMDS_MeshNode * nodes[], - const int nbnodes) -{ - // keep current nodes of elem - set oldNodes; - SMDS_ElemIteratorPtr itn = elem->nodesIterator(); - while(itn->more()) - oldNodes.insert( itn->next() ); - - // change nodes - bool Ok = false; - 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] ); - } - break; - } - case SMDSAbs_Face: { - const SMDS_FaceOfNodes* face = dynamic_cast( elem ); - if ( face ) { - Ok = const_cast( face )->ChangeNodes( nodes, nbnodes ); - } else { - /// ??? begin - const SMDS_PolygonalFaceOfNodes* face = dynamic_cast(elem); - if (face) { - Ok = const_cast(face)->ChangeNodes(nodes, nbnodes); - } - /// ??? end - } - 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 ); - break; - } - default: - MESSAGE ( "WRONG ELEM TYPE"); - } - - if ( Ok ) { // update InverseElements - - // AddInverseElement to new nodes - for ( int i = 0; i < nbnodes; i++ ) - if ( oldNodes.find( nodes[i] ) == oldNodes.end() ) - // new node - const_cast( nodes[i] )->AddInverseElement( elem ); - else - // remove from oldNodes a node that remains in elem - oldNodes.erase( nodes[i] ); - - - // 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 )); - n->RemoveInverseElement( elem ); - } - } - - //MESSAGE ( "::ChangeNodes() Ok = " << Ok); - - return Ok; -} - -//======================================================================= -//function : ChangePolyhedronNodes -//purpose : to change nodes of polyhedral volume -//======================================================================= -bool SMDS_Mesh::ChangePolyhedronNodes (const SMDS_MeshElement * elem, - std::vector nodes, - std::vector quantities) -{ - if (elem->GetType() != SMDSAbs_Volume) { - MESSAGE("WRONG ELEM TYPE"); - return false; - } - - const SMDS_PolyhedralVolumeOfNodes* vol = dynamic_cast(elem); - if (!vol) { - return false; - } - - // keep current nodes of elem - set oldNodes; - SMDS_ElemIteratorPtr itn = elem->nodesIterator(); - while (itn->more()) { - oldNodes.insert(itn->next()); - } - - // change nodes - bool Ok = const_cast(vol)->ChangeNodes(nodes, quantities); - if (!Ok) { - return false; - } - - // update InverseElements - - // AddInverseElement to new nodes - int nbnodes = nodes.size(); - for (int i = 0; i < nbnodes; i++) { - if (oldNodes.find(nodes[i]) == oldNodes.end()) { - // new node - const_cast(nodes[i])->AddInverseElement(elem); - } else { - // remove from oldNodes a node that remains in elem - oldNodes.erase(nodes[i]); - } - } - - // 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 )); - n->RemoveInverseElement(elem); - } - - return Ok; -} - -//======================================================================= -//function : FindEdge -//purpose : -//======================================================================= - -const SMDS_MeshEdge* SMDS_Mesh::FindEdge(int idnode1, int idnode2) const -{ - const SMDS_MeshNode * node1=FindNode(idnode1); - const SMDS_MeshNode * node2=FindNode(idnode2); - if((node1==NULL)||(node2==NULL)) return NULL; - return FindEdge(node1,node2); -} - -//#include "Profiler.h" -const SMDS_MeshEdge* SMDS_Mesh::FindEdge(const SMDS_MeshNode * node1, - const SMDS_MeshNode * node2) -{ - const SMDS_MeshEdge * toReturn=NULL; - //PROFILER_Init(); - //PROFILER_Set(); - SMDS_ElemIteratorPtr it1=node1->edgesIterator(); - //PROFILER_Get(0); - //PROFILER_Set(); - while(it1->more()) - { - const SMDS_MeshEdge * e=static_cast - (it1->next()); - SMDS_ElemIteratorPtr it2=e->nodesIterator(); - while(it2->more()) - { - if(it2->next()->GetID()==node2->GetID()) - { - toReturn=e; - break; - } - } - } - //PROFILER_Get(1); - return toReturn; -} - - -SMDS_MeshEdge* SMDS_Mesh::FindEdgeOrCreate(const SMDS_MeshNode * node1, - const SMDS_MeshNode * node2) -{ - SMDS_MeshEdge * toReturn=NULL; - toReturn=const_cast(FindEdge(node1,node2)); - if(toReturn==NULL) - { - toReturn=new SMDS_MeshEdge(node1,node2); - myEdges.Add(toReturn); - } - return toReturn; -} - -//======================================================================= -//function : FindFace -//purpose : -//======================================================================= - -const SMDS_MeshFace* SMDS_Mesh::FindFace(int idnode1, int idnode2, - int idnode3) const -{ - const SMDS_MeshNode * node1=FindNode(idnode1); - const SMDS_MeshNode * node2=FindNode(idnode2); - const SMDS_MeshNode * node3=FindNode(idnode3); - if((node1==NULL)||(node2==NULL)||(node3==NULL)) return NULL; - return FindFace(node1, node2, node3); -} - -const SMDS_MeshFace* SMDS_Mesh::FindFace( - const SMDS_MeshNode *node1, - const SMDS_MeshNode *node2, - const SMDS_MeshNode *node3) -{ - const SMDS_MeshFace * face; - const SMDS_MeshElement * node; - bool node2found, node3found; - - SMDS_ElemIteratorPtr it1=node1->facesIterator(); - while(it1->more()) - { - face=static_cast(it1->next()); - if(face->NbNodes()!=3) continue; - SMDS_ElemIteratorPtr it2=face->nodesIterator(); - node2found=false; - node3found=false; - while(it2->more()) - { - node=it2->next(); - if(node->GetID()==node2->GetID()) node2found=true; - if(node->GetID()==node3->GetID()) node3found=true; - } - if(node2found&&node3found) - return face; - } - return NULL; -} - -SMDS_MeshFace* SMDS_Mesh::FindFaceOrCreate( - const SMDS_MeshNode *node1, - const SMDS_MeshNode *node2, - const SMDS_MeshNode *node3) -{ - SMDS_MeshFace * toReturn=NULL; - toReturn=const_cast(FindFace(node1,node2,node3)); - if(toReturn==NULL) - { - toReturn=createTriangle(node1,node2,node3); - } - return toReturn; -} - -//======================================================================= -//function : FindFace -//purpose : -//======================================================================= - -const SMDS_MeshFace* SMDS_Mesh::FindFace(int idnode1, int idnode2, int idnode3, - int idnode4) const -{ - const SMDS_MeshNode * node1=FindNode(idnode1); - const SMDS_MeshNode * node2=FindNode(idnode2); - const SMDS_MeshNode * node3=FindNode(idnode3); - const SMDS_MeshNode * node4=FindNode(idnode4); - if((node1==NULL)||(node2==NULL)||(node3==NULL)||(node4==NULL)) return NULL; - return FindFace(node1, node2, node3, node4); -} - -const SMDS_MeshFace* SMDS_Mesh::FindFace( - const SMDS_MeshNode *node1, - const SMDS_MeshNode *node2, - const SMDS_MeshNode *node3, - const SMDS_MeshNode *node4) -{ - const SMDS_MeshFace * face; - const SMDS_MeshElement * node; - bool node2found, node3found, node4found; - SMDS_ElemIteratorPtr it1=node1->facesIterator(); - while(it1->more()) - { - face=static_cast(it1->next()); - if(face->NbNodes()!=4) continue; - SMDS_ElemIteratorPtr it2=face->nodesIterator(); - node2found=false; - node3found=false; - node4found=false; - while(it2->more()) - { - node=it2->next(); - if(node->GetID()==node2->GetID()) node2found=true; - if(node->GetID()==node3->GetID()) node3found=true; - if(node->GetID()==node4->GetID()) node4found=true; - } - if(node2found&&node3found&&node4found) - return face; - } - return NULL; -} - -SMDS_MeshFace* SMDS_Mesh::FindFaceOrCreate( - const SMDS_MeshNode *node1, - const SMDS_MeshNode *node2, - const SMDS_MeshNode *node3, - const SMDS_MeshNode *node4) -{ - SMDS_MeshFace * toReturn=NULL; - toReturn=const_cast(FindFace(node1,node2,node3,node4)); - if(toReturn==NULL) - { - toReturn=createQuadrangle(node1,node2,node3,node4); - } - return toReturn; -} - -//======================================================================= -//function : FindElement -//purpose : -//======================================================================= - -const SMDS_MeshElement* SMDS_Mesh::FindElement(int IDelem) const -{ - return myElementIDFactory->MeshElement(IDelem); -} - -//======================================================================= -//function : FindFace -//purpose : find polygon -//======================================================================= - -const SMDS_MeshFace* SMDS_Mesh::FindFace (std::vector nodes_ids) const -{ - int nbnodes = nodes_ids.size(); - std::vector poly_nodes (nbnodes); - for (int inode = 0; inode < nbnodes; inode++) { - const SMDS_MeshNode * node = FindNode(nodes_ids[inode]); - if (node == NULL) return NULL; - } - return FindFace(poly_nodes); -} - -const SMDS_MeshFace* SMDS_Mesh::FindFace (std::vector nodes) -{ - int nbNodes = nodes.size(); - if (nbNodes < 1) return NULL; - - bool isFound = true; - const SMDS_MeshFace * face; - set faces; - - for (int inode = 0; inode < nbNodes && isFound; inode++) { - set new_faces; - - SMDS_ElemIteratorPtr itF = nodes[inode]->facesIterator(); - while (itF->more()) { - face = static_cast(itF->next()); - if (face->NbNodes() == nbNodes) { - if (inode == 0 || faces.find(face) != faces.end()) { - new_faces.insert(face); - } - } - } - faces = new_faces; - if (new_faces.size() == 0) { - isFound = false; - } - } - - if (isFound) - return face; - - return NULL; -} - -//======================================================================= -//function : DumpNodes -//purpose : -//======================================================================= - -void SMDS_Mesh::DumpNodes() const -{ - MESSAGE("dump nodes of mesh : "); - SMDS_NodeIteratorPtr itnode=nodesIterator(); - while(itnode->more()) MESSAGE(itnode->next()); -} - -//======================================================================= -//function : DumpEdges -//purpose : -//======================================================================= - -void SMDS_Mesh::DumpEdges() const -{ - MESSAGE("dump edges of mesh : "); - SMDS_EdgeIteratorPtr itedge=edgesIterator(); - while(itedge->more()) MESSAGE(itedge->next()); -} - -//======================================================================= -//function : DumpFaces -//purpose : -//======================================================================= - -void SMDS_Mesh::DumpFaces() const -{ - MESSAGE("dump faces of mesh : "); - SMDS_FaceIteratorPtr itface=facesIterator(); - while(itface->more()) MESSAGE(itface->next()); -} - -//======================================================================= -//function : DumpVolumes -//purpose : -//======================================================================= - -void SMDS_Mesh::DumpVolumes() const -{ - MESSAGE("dump volumes of mesh : "); - SMDS_VolumeIteratorPtr itvol=volumesIterator(); - while(itvol->more()) MESSAGE(itvol->next()); -} - -//======================================================================= -//function : DebugStats -//purpose : -//======================================================================= - -void SMDS_Mesh::DebugStats() const -{ - MESSAGE("Debug stats of mesh : "); - - MESSAGE("===== NODES ====="<more()) - { - const SMDS_MeshNode *node = itnode->next(); - - sizeofnodes += sizeof(*node); - - SMDS_ElemIteratorPtr it = node->GetInverseElementIterator(); - while(it->more()) - { - const SMDS_MeshElement *me = it->next(); - sizeofnodes += sizeof(me); - } - - } - - SMDS_FaceIteratorPtr itface=facesIterator(); - while(itface->more()) - { - const SMDS_MeshElement *face = itface->next(); - sizeoffaces += sizeof(*face); - - } - MESSAGE("total size of node elements = " << sizeofnodes);; - MESSAGE("total size of face elements = " << sizeoffaces);; - - //#endif -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return the number of nodes -/////////////////////////////////////////////////////////////////////////////// -int SMDS_Mesh::NbNodes() const -{ - return myNodes.Size(); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return the number of edges (including construction edges) -/////////////////////////////////////////////////////////////////////////////// -int SMDS_Mesh::NbEdges() const -{ - return myEdges.Size(); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return the number of faces (including construction faces) -/////////////////////////////////////////////////////////////////////////////// -int SMDS_Mesh::NbFaces() const -{ - return myFaces.Size(); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return the number of volumes -/////////////////////////////////////////////////////////////////////////////// -int SMDS_Mesh::NbVolumes() const -{ - return myVolumes.Size(); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return the number of child mesh of this mesh. -/// Note that the tree structure of SMDS_Mesh seems to be unused in this version -/// (2003-09-08) of SMESH -/////////////////////////////////////////////////////////////////////////////// -int SMDS_Mesh::NbSubMesh() const -{ - return myChildren.size(); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Destroy the mesh and all its elements -/// All pointer on elements owned by this mesh become illegals. -/////////////////////////////////////////////////////////////////////////////// -SMDS_Mesh::~SMDS_Mesh() -{ - list::iterator itc=myChildren.begin(); - while(itc!=myChildren.end()) - { - delete *itc; - itc++; - } - - SetOfNodes::Iterator itn(myNodes); - for (; itn.More(); itn.Next()) - delete itn.Value(); - - SetOfEdges::Iterator ite(myEdges); - for (; ite.More(); ite.Next()) - { - SMDS_MeshElement* elem = ite.Value(); - if(myParent!=NULL) - myElementIDFactory->ReleaseID(elem->GetID()); - delete elem; - } - - SetOfFaces::Iterator itf(myFaces); - for (; itf.More(); itf.Next()) - { - SMDS_MeshElement* elem = itf.Value(); - if(myParent!=NULL) - myElementIDFactory->ReleaseID(elem->GetID()); - delete elem; - } - - SetOfVolumes::Iterator itv(myVolumes); - for (; itv.More(); itv.Next()) - { - SMDS_MeshElement* elem = itv.Value(); - if(myParent!=NULL) - myElementIDFactory->ReleaseID(elem->GetID()); - delete elem; - } - - if(myParent==NULL) - { - delete myNodeIDFactory; - delete myElementIDFactory; - } -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return true if this mesh create faces with edges. -/// A false returned value mean that faces are created with nodes. A concequence -/// is, iteration on edges (SMDS_Element::edgesIterator) will be unavailable. -/////////////////////////////////////////////////////////////////////////////// -bool SMDS_Mesh::hasConstructionEdges() -{ - return myHasConstructionEdges; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return true if this mesh create volumes with faces -/// A false returned value mean that volumes are created with nodes or edges. -/// (see hasConstructionEdges) -/// A concequence is, iteration on faces (SMDS_Element::facesIterator) will be -/// unavailable. -/////////////////////////////////////////////////////////////////////////////// -bool SMDS_Mesh::hasConstructionFaces() -{ - return myHasConstructionFaces; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return true if nodes are linked to the finit elements, they are belonging to. -/// Currently, It always return true. -/////////////////////////////////////////////////////////////////////////////// -bool SMDS_Mesh::hasInverseElements() -{ - return myHasInverseElements; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Make this mesh creating construction edges (see hasConstructionEdges) -/// @param b true to have construction edges, else false. -/////////////////////////////////////////////////////////////////////////////// -void SMDS_Mesh::setConstructionEdges(bool b) -{ - myHasConstructionEdges=b; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Make this mesh creating construction faces (see hasConstructionFaces) -/// @param b true to have construction faces, else false. -/////////////////////////////////////////////////////////////////////////////// -void SMDS_Mesh::setConstructionFaces(bool b) -{ - myHasConstructionFaces=b; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Make this mesh creating link from nodes to elements (see hasInverseElements) -/// @param b true to link nodes to elements, else false. -/////////////////////////////////////////////////////////////////////////////// -void SMDS_Mesh::setInverseElements(bool b) -{ - if(!b) MESSAGE("Error : inverseElement=false not implemented"); - myHasInverseElements=b; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return an iterator on nodes of the current mesh factory -/////////////////////////////////////////////////////////////////////////////// -class SMDS_Mesh_MyNodeIterator:public SMDS_NodeIterator -{ - SMDS_ElemIteratorPtr myIterator; - public: - SMDS_Mesh_MyNodeIterator(const SMDS_ElemIteratorPtr& it):myIterator(it) - {} - - bool more() - { - return myIterator->more(); - } - - const SMDS_MeshNode* next() - { - return static_cast(myIterator->next()); - } -}; - -SMDS_NodeIteratorPtr SMDS_Mesh::nodesIterator() const -{ - return SMDS_NodeIteratorPtr - (new SMDS_Mesh_MyNodeIterator(myNodeIDFactory->elementsIterator())); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return an iterator on elements of the current mesh factory -/////////////////////////////////////////////////////////////////////////////// -SMDS_ElemIteratorPtr SMDS_Mesh::elementsIterator() const -{ - return myElementIDFactory->elementsIterator(); -} - -/////////////////////////////////////////////////////////////////////////////// -///Return an iterator on edges of the current mesh. -/////////////////////////////////////////////////////////////////////////////// -class SMDS_Mesh_MyEdgeIterator:public SMDS_EdgeIterator -{ - typedef SMDS_Mesh::SetOfEdges SetOfEdges; - SetOfEdges::Iterator myIterator; - public: - SMDS_Mesh_MyEdgeIterator(const SetOfEdges& s):myIterator(s) - {} - - bool more() - { - while(myIterator.More()) - { - if(myIterator.Value()->GetID()!=-1) - return true; - myIterator.Next(); - } - return false; - } - - const SMDS_MeshEdge* next() - { - const SMDS_MeshEdge* current = myIterator.Value(); - myIterator.Next(); - return current; - } -}; - -SMDS_EdgeIteratorPtr SMDS_Mesh::edgesIterator() const -{ - return SMDS_EdgeIteratorPtr(new SMDS_Mesh_MyEdgeIterator(myEdges)); -} - -/////////////////////////////////////////////////////////////////////////////// -///Return an iterator on faces of the current mesh. -/////////////////////////////////////////////////////////////////////////////// -class SMDS_Mesh_MyFaceIterator:public SMDS_FaceIterator -{ - typedef SMDS_Mesh::SetOfFaces SetOfFaces; - SetOfFaces::Iterator myIterator; - public: - SMDS_Mesh_MyFaceIterator(const SetOfFaces& s):myIterator(s) - {} - - bool more() - { - while(myIterator.More()) - { - if(myIterator.Value()->GetID()!=-1) - return true; - myIterator.Next(); - } - return false; - } - - const SMDS_MeshFace* next() - { - const SMDS_MeshFace* current = myIterator.Value(); - myIterator.Next(); - return current; - } -}; - -SMDS_FaceIteratorPtr SMDS_Mesh::facesIterator() const -{ - return SMDS_FaceIteratorPtr(new SMDS_Mesh_MyFaceIterator(myFaces)); -} - -/////////////////////////////////////////////////////////////////////////////// -///Return an iterator on volumes of the current mesh. -/////////////////////////////////////////////////////////////////////////////// -class SMDS_Mesh_MyVolumeIterator:public SMDS_VolumeIterator -{ - typedef SMDS_Mesh::SetOfVolumes SetOfVolumes; - SetOfVolumes::Iterator myIterator; - public: - SMDS_Mesh_MyVolumeIterator(const SetOfVolumes& s):myIterator(s) - {} - - bool more() - { - return myIterator.More() != Standard_False; - } - - const SMDS_MeshVolume* next() - { - const SMDS_MeshVolume* current = myIterator.Value(); - myIterator.Next(); - return current; - } -}; - -SMDS_VolumeIteratorPtr SMDS_Mesh::volumesIterator() const -{ - return SMDS_VolumeIteratorPtr(new SMDS_Mesh_MyVolumeIterator(myVolumes)); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Do intersection of sets (more than 2) -/////////////////////////////////////////////////////////////////////////////// -static set * intersectionOfSets( - set vs[], int numberOfSets) -{ - set* rsetA=new set(vs[0]); - set* rsetB; - - for(int i=0; i(); - set_intersection( - rsetA->begin(), rsetA->end(), - vs[i+1].begin(), vs[i+1].end(), - inserter(*rsetB, rsetB->begin())); - delete rsetA; - rsetA=rsetB; - } - return rsetA; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return the list of finit elements owning the given element -/////////////////////////////////////////////////////////////////////////////// -static set * getFinitElements(const SMDS_MeshElement * element) -{ - int numberOfSets=element->NbNodes(); - set *initSet = new set[numberOfSets]; - - SMDS_ElemIteratorPtr itNodes=element->nodesIterator(); - - int i=0; - while(itNodes->more()) - { - const SMDS_MeshNode * n=static_cast(itNodes->next()); - SMDS_ElemIteratorPtr itFe = n->GetInverseElementIterator(); - - //initSet[i]=set(); - while(itFe->more()) - initSet[i].insert(itFe->next()); - - i++; - } - set *retSet=intersectionOfSets(initSet, numberOfSets); - delete [] initSet; - return retSet; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return the list of nodes used only by the given elements -/////////////////////////////////////////////////////////////////////////////// -static set * getExclusiveNodes( - set& elements) -{ - set * toReturn=new set(); - set::iterator itElements=elements.begin(); - - while(itElements!=elements.end()) - { - SMDS_ElemIteratorPtr itNodes = (*itElements)->nodesIterator(); - itElements++; - - while(itNodes->more()) - { - const SMDS_MeshNode * n=static_cast(itNodes->next()); - SMDS_ElemIteratorPtr itFe = n->GetInverseElementIterator(); - set s; - while(itFe->more()) - s.insert(itFe->next()); - if(s==elements) toReturn->insert(n); - } - } - return toReturn; -} - -/////////////////////////////////////////////////////////////////////////////// -///Find the children of an element that are made of given nodes -///@param setOfChildren The set in which matching children will be inserted -///@param element The element were to search matching children -///@param nodes The nodes that the children must have to be selected -/////////////////////////////////////////////////////////////////////////////// -void SMDS_Mesh::addChildrenWithNodes(set& setOfChildren, - const SMDS_MeshElement * element, set& nodes) -{ - - switch(element->GetType()) - { - case SMDSAbs_Node: - MESSAGE("Internal Error: This should not append"); - break; - case SMDSAbs_Edge: - { - SMDS_ElemIteratorPtr itn=element->nodesIterator(); - while(itn->more()) - { - const SMDS_MeshElement * e=itn->next(); - if(nodes.find(e)!=nodes.end()) - { - setOfChildren.insert(element); - break; - } - } - } break; - case SMDSAbs_Face: - { - SMDS_ElemIteratorPtr itn=element->nodesIterator(); - while(itn->more()) - { - const SMDS_MeshElement * e=itn->next(); - if(nodes.find(e)!=nodes.end()) - { - setOfChildren.insert(element); - break; - } - } - if(hasConstructionEdges()) - { - SMDS_ElemIteratorPtr ite=element->edgesIterator(); - while(ite->more()) - addChildrenWithNodes(setOfChildren, ite->next(), nodes); - } - } break; - case SMDSAbs_Volume: - { - if(hasConstructionFaces()) - { - SMDS_ElemIteratorPtr ite=element->facesIterator(); - while(ite->more()) - addChildrenWithNodes(setOfChildren, ite->next(), nodes); - } - else if(hasConstructionEdges()) - { - SMDS_ElemIteratorPtr ite=element->edgesIterator(); - while(ite->more()) - addChildrenWithNodes(setOfChildren, ite->next(), nodes); - } - } - } -} - -/////////////////////////////////////////////////////////////////////////////// -///@param elem The element to delete -///@param removenodes if true remaining nodes will be removed -/////////////////////////////////////////////////////////////////////////////// -void SMDS_Mesh::RemoveElement(const SMDS_MeshElement * elem, - const bool removenodes) -{ - list removedElems; - list removedNodes; - RemoveElement( elem, removedElems, removedNodes, removenodes ); -} - -/////////////////////////////////////////////////////////////////////////////// -///@param elem The element to delete -///@param removedElems contains all removed elements -///@param removedNodes contains all removed nodes -///@param removenodes if true remaining nodes will be removed -/////////////////////////////////////////////////////////////////////////////// -void SMDS_Mesh::RemoveElement(const SMDS_MeshElement * elem, - list& removedElems, - list& removedNodes, - bool removenodes) -{ - // get finite elements built on elem - set * s1; - if (!hasConstructionEdges() && elem->GetType() == SMDSAbs_Edge || - !hasConstructionFaces() && elem->GetType() == SMDSAbs_Face || - elem->GetType() == SMDSAbs_Volume) - { - s1 = new set(); - s1->insert(elem); - } - else - s1 = getFinitElements(elem); - - // get exclusive nodes (which would become free afterwards) - set * s2; - if (elem->GetType() == SMDSAbs_Node) // a node is removed - { - // do not remove nodes except elem - s2 = new set(); - s2->insert(elem); - removenodes = true; - } - else - s2 = getExclusiveNodes(*s1); - - // form the set of finite and construction elements to remove - set s3; - set::iterator it=s1->begin(); - while(it!=s1->end()) - { - addChildrenWithNodes(s3, *it ,*s2); - s3.insert(*it); - it++; - } - if(elem->GetType()!=SMDSAbs_Node) s3.insert(elem); - - // remove finite and construction elements - it=s3.begin(); - while(it!=s3.end()) - { - // Remove element from of its nodes - SMDS_ElemIteratorPtr itn=(*it)->nodesIterator(); - while(itn->more()) - { - SMDS_MeshNode * n = static_cast - (const_cast(itn->next())); - n->RemoveInverseElement( (*it) ); - } - - switch((*it)->GetType()) - { - case SMDSAbs_Node: - MESSAGE("Internal Error: This should not happen"); - break; - case SMDSAbs_Edge: - myEdges.Remove(static_cast - (const_cast(*it))); - break; - case SMDSAbs_Face: - myFaces.Remove(static_cast - (const_cast(*it))); - break; - case SMDSAbs_Volume: - myVolumes.Remove(static_cast - (const_cast(*it))); - break; - } - //MESSAGE( "SMDS: RM elem " << (*it)->GetID() ); - removedElems.push_back( (*it) ); - myElementIDFactory->ReleaseID((*it)->GetID()); - delete (*it); - it++; - } - - // remove exclusive (free) nodes - if(removenodes) - { - it=s2->begin(); - while(it!=s2->end()) - { - //MESSAGE( "SMDS: RM node " << (*it)->GetID() ); - myNodes.Remove(static_cast - (const_cast(*it))); - myNodeIDFactory->ReleaseID((*it)->GetID()); - removedNodes.push_back( (*it) ); - delete *it; - it++; - } - } - - delete s2; - delete s1; -} - -/*! - * Checks if the element is present in mesh. - * Useful to determine dead pointers. - */ -bool SMDS_Mesh::Contains (const SMDS_MeshElement* elem) const -{ - // we should not imply on validity of *elem, so iterate on containers - // of all types in the hope of finding somewhere there - SMDS_NodeIteratorPtr itn = nodesIterator(); - while (itn->more()) - if (elem == itn->next()) - return true; - SMDS_EdgeIteratorPtr ite = edgesIterator(); - while (ite->more()) - if (elem == ite->next()) - return true; - SMDS_FaceIteratorPtr itf = facesIterator(); - while (itf->more()) - if (elem == itf->next()) - return true; - SMDS_VolumeIteratorPtr itv = volumesIterator(); - while (itv->more()) - if (elem == itv->next()) - return true; - return false; -} - -//======================================================================= -//function : MaxNodeID -//purpose : -//======================================================================= - -int SMDS_Mesh::MaxNodeID() const -{ - return myNodeIDFactory->GetMaxID(); -} - -//======================================================================= -//function : MinNodeID -//purpose : -//======================================================================= - -int SMDS_Mesh::MinNodeID() const -{ - return myNodeIDFactory->GetMinID(); -} - -//======================================================================= -//function : MaxElementID -//purpose : -//======================================================================= - -int SMDS_Mesh::MaxElementID() const -{ - return myElementIDFactory->GetMaxID(); -} - -//======================================================================= -//function : MinElementID -//purpose : -//======================================================================= - -int SMDS_Mesh::MinElementID() const -{ - return myElementIDFactory->GetMinID(); -} - -//======================================================================= -//function : Renumber -//purpose : Renumber all nodes or elements. -//======================================================================= - -void SMDS_Mesh::Renumber (const bool isNodes, const int startID, const int deltaID) -{ - if ( deltaID == 0 ) - return; - - SMDS_MeshElementIDFactory * idFactory = - isNodes ? myNodeIDFactory : myElementIDFactory; - - // get existing elements in the order of ID increasing - map elemMap; - SMDS_ElemIteratorPtr idElemIt = idFactory->elementsIterator(); - while ( idElemIt->more() ) { - SMDS_MeshElement* elem = const_cast(idElemIt->next()); - int id = elem->GetID(); - elemMap.insert(map::value_type(id, elem)); - } - // release their ids - map::iterator elemIt = elemMap.begin(); - for ( ; elemIt != elemMap.end(); elemIt++ ) - { - int id = (*elemIt).first; - idFactory->ReleaseID( id ); - } - // set new IDs - int ID = startID; - elemIt = elemMap.begin(); - for ( ; elemIt != elemMap.end(); elemIt++ ) - { - idFactory->BindID( ID, (*elemIt).second ); - ID += deltaID; - } -} - -//======================================================================= -//function : GetElementType -//purpose : Return type of element or node with id -//======================================================================= - -SMDSAbs_ElementType SMDS_Mesh::GetElementType( const int id, const bool iselem ) const -{ - SMDS_MeshElement* elem = 0; - if( iselem ) - elem = myElementIDFactory->MeshElement( id ); - else - elem = myNodeIDFactory->MeshElement( id ); - - if( !elem ) - { - //throw SALOME_Exception(LOCALIZED ("this element isn't exist")); - return SMDSAbs_All; - } - else - return elem->GetType(); -} \ No newline at end of file diff --git a/src/SMDS/SMDS_Mesh.hxx b/src/SMDS/SMDS_Mesh.hxx deleted file mode 100644 index 7f00c4be7..000000000 --- a/src/SMDS/SMDS_Mesh.hxx +++ /dev/null @@ -1,351 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_Mesh.hxx -// Module : SMESH - -#ifndef _SMDS_Mesh_HeaderFile -#define _SMDS_Mesh_HeaderFile - -#include "SMDS_MeshNode.hxx" -#include "SMDS_MeshEdge.hxx" -#include "SMDS_MeshFace.hxx" -#include "SMDS_MeshVolume.hxx" -#include "SMDS_MeshElementIDFactory.hxx" -#include "SMDS_ElemIterator.hxx" -#include - -#include -#include -#include - -typedef SMDS_Iterator SMDS_NodeIterator; -typedef boost::shared_ptr > SMDS_NodeIteratorPtr; -typedef SMDS_Iterator SMDS_EdgeIterator; -typedef boost::shared_ptr > SMDS_EdgeIteratorPtr; -typedef SMDS_Iterator SMDS_FaceIterator; -typedef boost::shared_ptr > SMDS_FaceIteratorPtr; -typedef SMDS_Iterator SMDS_VolumeIterator; -typedef boost::shared_ptr > SMDS_VolumeIteratorPtr; - -class SMDS_Mesh:public SMDS_MeshObject{ -public: - - SMDS_Mesh(); - - SMDS_NodeIteratorPtr nodesIterator() const; - SMDS_EdgeIteratorPtr edgesIterator() const; - SMDS_FaceIteratorPtr facesIterator() const; - SMDS_VolumeIteratorPtr volumesIterator() const; - SMDS_ElemIteratorPtr elementsIterator() const; - - SMDSAbs_ElementType GetElementType( const int id, const bool iselem ) const; - - SMDS_Mesh *AddSubMesh(); - - virtual SMDS_MeshNode* AddNodeWithID(double x, double y, double z, int ID); - virtual SMDS_MeshNode* AddNode(double x, double y, double z); - - virtual SMDS_MeshEdge* AddEdgeWithID(int n1, int n2, int ID); - virtual SMDS_MeshEdge* AddEdgeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - int ID); - virtual SMDS_MeshEdge* AddEdge(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2); - - virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int ID); - virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - int ID); - virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3); - - virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int n4, int ID); - virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - int ID); - virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4); - - virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshEdge * e1, - const SMDS_MeshEdge * e2, - const SMDS_MeshEdge * e3, int ID); - virtual SMDS_MeshFace* AddFace(const SMDS_MeshEdge * e1, - const SMDS_MeshEdge * e2, - const SMDS_MeshEdge * e3); - - virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshEdge * e1, - const SMDS_MeshEdge * e2, - const SMDS_MeshEdge * e3, - const SMDS_MeshEdge * e4, int ID); - virtual SMDS_MeshFace* AddFace(const SMDS_MeshEdge * e1, - const SMDS_MeshEdge * e2, - const SMDS_MeshEdge * e3, - const SMDS_MeshEdge * e4); - - virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int ID); - virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - int ID); - virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4); - - virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, - int n5, int ID); - virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - int ID); - virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5); - - virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, - int n5, int n6, int ID); - virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6, - int ID); - virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6); - - virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, - int n5, int n6, int n7, int n8, int ID); - virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6, - const SMDS_MeshNode * n7, - const SMDS_MeshNode * n8, - int ID); - virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6, - const SMDS_MeshNode * n7, - const SMDS_MeshNode * n8); - - virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshFace * f1, - const SMDS_MeshFace * f2, - const SMDS_MeshFace * f3, - const SMDS_MeshFace * f4, int ID); - virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshFace * f1, - const SMDS_MeshFace * f2, - const SMDS_MeshFace * f3, - const SMDS_MeshFace * f4); - - virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshFace * f1, - const SMDS_MeshFace * f2, - const SMDS_MeshFace * f3, - const SMDS_MeshFace * f4, - const SMDS_MeshFace * f5, int ID); - virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshFace * f1, - const SMDS_MeshFace * f2, - const SMDS_MeshFace * f3, - const SMDS_MeshFace * f4, - const SMDS_MeshFace * f5); - - virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshFace * f1, - const SMDS_MeshFace * f2, - const SMDS_MeshFace * f3, - const SMDS_MeshFace * f4, - const SMDS_MeshFace * f5, - const SMDS_MeshFace * f6, int ID); - virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshFace * f1, - const SMDS_MeshFace * f2, - const SMDS_MeshFace * f3, - const SMDS_MeshFace * f4, - const SMDS_MeshFace * f5, - const SMDS_MeshFace * f6); - - virtual SMDS_MeshFace* AddPolygonalFaceWithID (std::vector nodes_ids, - const int ID); - - virtual SMDS_MeshFace* AddPolygonalFaceWithID (std::vector nodes, - const int ID); - - virtual SMDS_MeshFace* AddPolygonalFace (std::vector nodes); - - virtual SMDS_MeshVolume* AddPolyhedralVolumeWithID - (std::vector nodes_ids, - std::vector quantities, - const int ID); - - virtual SMDS_MeshVolume* AddPolyhedralVolumeWithID - (std::vector nodes, - std::vector quantities, - const int ID); - - virtual SMDS_MeshVolume* AddPolyhedralVolume - (std::vector nodes, - std::vector quantities); - - virtual void RemoveElement(const SMDS_MeshElement * elem, - std::list& removedElems, - std::list& removedNodes, - const bool removenodes = false); - virtual void RemoveElement(const SMDS_MeshElement * elem, bool removenodes = false); - virtual void RemoveNode(const SMDS_MeshNode * node); - virtual void RemoveEdge(const SMDS_MeshEdge * edge); - virtual void RemoveFace(const SMDS_MeshFace * face); - virtual void RemoveVolume(const SMDS_MeshVolume * volume); - - 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); - - virtual void Renumber (const bool isNodes, const int startID = 1, const int deltaID = 1); - // Renumber all nodes or elements. - - const SMDS_MeshNode *FindNode(int idnode) const; - const SMDS_MeshEdge *FindEdge(int idnode1, int idnode2) const; - const SMDS_MeshFace *FindFace(int idnode1, int idnode2, int idnode3) const; - const SMDS_MeshFace *FindFace(int idnode1, int idnode2, int idnode3, int idnode4) const; - const SMDS_MeshElement *FindElement(int IDelem) const; - static const SMDS_MeshEdge* FindEdge(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2); - static const SMDS_MeshFace* FindFace(const SMDS_MeshNode *n1, - const SMDS_MeshNode *n2, - const SMDS_MeshNode *n3); - static const SMDS_MeshFace* FindFace(const SMDS_MeshNode *n1, - const SMDS_MeshNode *n2, - const SMDS_MeshNode *n3, - const SMDS_MeshNode *n4); - - const SMDS_MeshFace *FindFace(std::vector nodes_ids) const; - static const SMDS_MeshFace* FindFace(std::vector nodes); - - int MaxNodeID() const; - int MinNodeID() const; - int MaxElementID() const; - int MinElementID() const; - - - int NbNodes() const; - int NbEdges() const; - int NbFaces() const; - int NbVolumes() const; - int NbSubMesh() const; - void DumpNodes() const; - void DumpEdges() const; - void DumpFaces() const; - void DumpVolumes() const; - void DebugStats() const; - SMDS_Mesh *boundaryFaces(); - SMDS_Mesh *boundaryEdges(); - virtual ~SMDS_Mesh(); - bool hasConstructionEdges(); - bool hasConstructionFaces(); - bool hasInverseElements(); - void setConstructionEdges(bool); - void setConstructionFaces(bool); - void setInverseElements(bool); - - /*! - * Checks if the element is present in mesh. - * Useful to determine dead pointers. - * Use this function for debug purpose only! Do not check in the code - * using it even in _DEBUG_ mode - */ - bool Contains (const SMDS_MeshElement* elem) const; - - typedef NCollection_Map SetOfNodes; - typedef NCollection_Map SetOfEdges; - typedef NCollection_Map SetOfFaces; - typedef NCollection_Map SetOfVolumes; - -private: - SMDS_Mesh(SMDS_Mesh * parent); - - SMDS_MeshFace * createTriangle(const SMDS_MeshNode * node1, - const SMDS_MeshNode * node2, - const SMDS_MeshNode * node3); - SMDS_MeshFace * createQuadrangle(const SMDS_MeshNode * node1, - const SMDS_MeshNode * node2, - const SMDS_MeshNode * node3, - const SMDS_MeshNode * node4); - SMDS_MeshEdge* FindEdgeOrCreate(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2); - SMDS_MeshFace* FindFaceOrCreate(const SMDS_MeshNode *n1, - const SMDS_MeshNode *n2, - const SMDS_MeshNode *n3); - SMDS_MeshFace* FindFaceOrCreate(const SMDS_MeshNode *n1, - const SMDS_MeshNode *n2, - const SMDS_MeshNode *n3, - const SMDS_MeshNode *n4); - - bool registerElement(int ID, SMDS_MeshElement * element); - - void addChildrenWithNodes(std::set& setOfChildren, - const SMDS_MeshElement * element, - std::set& nodes); - - // Fields PRIVATE - - SetOfNodes myNodes; - SetOfEdges myEdges; - SetOfFaces myFaces; - SetOfVolumes myVolumes; - SMDS_Mesh *myParent; - std::list myChildren; - SMDS_MeshElementIDFactory *myNodeIDFactory; - SMDS_MeshElementIDFactory *myElementIDFactory; - - bool myHasConstructionEdges; - bool myHasConstructionFaces; - bool myHasInverseElements; -}; - - -#endif diff --git a/src/SMDS/SMDS_MeshEdge.cxx b/src/SMDS/SMDS_MeshEdge.cxx deleted file mode 100644 index 66c8ae3d5..000000000 --- a/src/SMDS/SMDS_MeshEdge.cxx +++ /dev/null @@ -1,150 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_MeshEdge.cxx -// Author : Jean-Michel BOULCOURT -// Module : SMESH - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#endif - -#include "SMDS_MeshEdge.hxx" -#include "SMDS_IteratorOfElements.hxx" -#include "SMDS_MeshNode.hxx" - -using namespace std; - -//======================================================================= -//function : SMDS_MeshEdge -//purpose : -//======================================================================= - -SMDS_MeshEdge::SMDS_MeshEdge(const SMDS_MeshNode * node1, - const SMDS_MeshNode * node2) -{ - myNodes[0]=node1; - myNodes[1]=node2; -} - -//======================================================================= -//function : Print -//purpose : -//======================================================================= - -void SMDS_MeshEdge::Print(ostream & OS) const -{ - OS << "edge <" << GetID() << "> : (" << myNodes[0] << " , " << myNodes[1] << - ") " << endl; -} - -int SMDS_MeshEdge::NbNodes() const -{ - return 2; -} - -int SMDS_MeshEdge::NbEdges() const -{ - return 1; -} - -SMDSAbs_ElementType SMDS_MeshEdge::GetType() const -{ - return SMDSAbs_Edge; -} - -class SMDS_MeshEdge_MyNodeIterator:public SMDS_ElemIterator -{ - const SMDS_MeshNode *const* myNodes; - int myIndex; - public: - SMDS_MeshEdge_MyNodeIterator(const SMDS_MeshNode * const* nodes): - myNodes(nodes),myIndex(0) {} - - bool more() - { - return myIndex<2; - } - - const SMDS_MeshElement* next() - { - myIndex++; - return myNodes[myIndex-1]; - } -}; - -SMDS_ElemIteratorPtr SMDS_MeshEdge:: - elementsIterator(SMDSAbs_ElementType type) const -{ - switch(type) - { - case SMDSAbs_Edge: - return SMDS_MeshElement::elementsIterator(SMDSAbs_Edge); - case SMDSAbs_Node: - return SMDS_ElemIteratorPtr(new SMDS_MeshEdge_MyNodeIterator(myNodes)); - default: - return SMDS_ElemIteratorPtr - (new SMDS_IteratorOfElements - (this,type, SMDS_ElemIteratorPtr(new SMDS_MeshEdge_MyNodeIterator(myNodes)))); - } -} - -bool operator<(const SMDS_MeshEdge & e1, const SMDS_MeshEdge & e2) -{ - int id11=e1.myNodes[0]->GetID(); - int id21=e2.myNodes[0]->GetID(); - int id12=e1.myNodes[1]->GetID(); - int id22=e2.myNodes[1]->GetID(); - int tmp; - - if(id11>=id12) - { - tmp=id11; - id11=id12; - id12=tmp; - } - if(id21>=id22) - { - tmp=id21; - id21=id22; - id22=tmp; - } - - if(id11 - -class SMDS_MeshEdge:public SMDS_MeshElement -{ - - public: - SMDS_MeshEdge(const SMDS_MeshNode * node1, - const SMDS_MeshNode * node2); - bool ChangeNodes(const SMDS_MeshNode * node1, - const SMDS_MeshNode * node2); - void Print(std::ostream & OS) const; - - SMDSAbs_ElementType GetType() const; - int NbNodes() const; - int NbEdges() const; - friend bool operator<(const SMDS_MeshEdge& e1, const SMDS_MeshEdge& e2); - protected: - SMDS_ElemIteratorPtr - elementsIterator(SMDSAbs_ElementType type) const; - - private: - const SMDS_MeshNode* myNodes[2]; - -}; -#endif diff --git a/src/SMDS/SMDS_MeshElement.cxx b/src/SMDS/SMDS_MeshElement.cxx deleted file mode 100644 index 8d4d9b75d..000000000 --- a/src/SMDS/SMDS_MeshElement.cxx +++ /dev/null @@ -1,194 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#endif - -#include "SMDS_MeshElement.hxx" -#include "SMDS_MeshNode.hxx" -#include "SMDS_MeshEdge.hxx" -#include "SMDS_MeshFace.hxx" -#include "SMDS_MeshVolume.hxx" -#include "utilities.h" - -using namespace std; - -SMDS_MeshElement::SMDS_MeshElement(int ID):myID(ID) -{ -} - -void SMDS_MeshElement::Print(ostream & OS) const -{ - OS << "dump of mesh element" << endl; -} - -ostream & operator <<(ostream & OS, const SMDS_MeshElement * ME) -{ - ME->Print(OS); - return OS; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Create an iterator which iterate on nodes owned by the element. -/// This method call elementsIterator(). -/////////////////////////////////////////////////////////////////////////////// -SMDS_ElemIteratorPtr SMDS_MeshElement::nodesIterator() const -{ - return elementsIterator(SMDSAbs_Node); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Create an iterator which iterate on edges linked with or owned by the element. -/// This method call elementsIterator(). -/////////////////////////////////////////////////////////////////////////////// -SMDS_ElemIteratorPtr SMDS_MeshElement::edgesIterator() const -{ - return elementsIterator(SMDSAbs_Edge); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Create an iterator which iterate on faces linked with or owned by the element. -/// This method call elementsIterator(). -/////////////////////////////////////////////////////////////////////////////// -SMDS_ElemIteratorPtr SMDS_MeshElement::facesIterator() const -{ - return elementsIterator(SMDSAbs_Face); -} - -/////////////////////////////////////////////////////////////////////////////// -///Return The number of nodes owned by the current element -/////////////////////////////////////////////////////////////////////////////// -int SMDS_MeshElement::NbNodes() const -{ - int nbnodes=0; - SMDS_ElemIteratorPtr it=nodesIterator(); - while(it->more()) - { - it->next(); - nbnodes++; - } - return nbnodes; -} - -/////////////////////////////////////////////////////////////////////////////// -///Return the number of edges owned by or linked with the current element -/////////////////////////////////////////////////////////////////////////////// -int SMDS_MeshElement::NbEdges() const -{ - int nbedges=0; - SMDS_ElemIteratorPtr it=edgesIterator(); - while(it->more()) - { - it->next(); - nbedges++; - } - return nbedges; -} - -/////////////////////////////////////////////////////////////////////////////// -///Return the number of faces owned by or linked with the current element -/////////////////////////////////////////////////////////////////////////////// -int SMDS_MeshElement::NbFaces() const -{ - int nbfaces=0; - SMDS_ElemIteratorPtr it=facesIterator(); - while(it->more()) - { - it->next(); - nbfaces++; - } - return nbfaces; -} - -/////////////////////////////////////////////////////////////////////////////// -///Create an iterator which iterate on elements linked with the current element. -///@param type The of elements on which you want to iterate -///@return A smart pointer to iterator, you are not to take care of freeing memory -/////////////////////////////////////////////////////////////////////////////// -class SMDS_MeshElement_MyIterator:public SMDS_ElemIterator -{ - const SMDS_MeshElement * myElement; - bool myMore; - public: - SMDS_MeshElement_MyIterator(const SMDS_MeshElement * element): - myElement(element),myMore(true) {} - - bool more() - { - return myMore; - } - - const SMDS_MeshElement* next() - { - myMore=false; - return myElement; - } -}; -SMDS_ElemIteratorPtr SMDS_MeshElement:: - elementsIterator(SMDSAbs_ElementType type) const -{ - /** @todo Check that iterator in the child classes return elements - in the same order for each different implementation (i.e: SMDS_VolumeOfNodes - and SMDS_VolumeOfFaces */ - - if(type==GetType()) - return SMDS_ElemIteratorPtr(new SMDS_MeshElement_MyIterator(this)); - else - { - MESSAGE("Iterator not implemented"); - return SMDS_ElemIteratorPtr((SMDS_ElemIterator*)NULL); - } -} - -/////////////////////////////////////////////////////////////////////////////// -///Return the ID of the element -/////////////////////////////////////////////////////////////////////////////// -int SMDS_MeshElement::GetID() const -{ - return myID; -} - -bool operator<(const SMDS_MeshElement& e1, const SMDS_MeshElement& e2) -{ - if(e1.GetType()!=e2.GetType()) return false; - switch(e1.GetType()) - { - case SMDSAbs_Node: - return static_cast(e1) < - static_cast(e2); - - case SMDSAbs_Edge: - return static_cast(e1) < - static_cast(e2); - - case SMDSAbs_Face: - return static_cast(e1) < - static_cast(e2); - - case SMDSAbs_Volume: - return static_cast(e1) < - static_cast(e2); - - default : MESSAGE("Internal Error"); - } - return false; -} diff --git a/src/SMDS/SMDS_MeshElement.hxx b/src/SMDS/SMDS_MeshElement.hxx deleted file mode 100644 index b9f61351b..000000000 --- a/src/SMDS/SMDS_MeshElement.hxx +++ /dev/null @@ -1,75 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_MeshElement.hxx -// Module : SMESH - -#ifndef _SMDS_MeshElement_HeaderFile -#define _SMDS_MeshElement_HeaderFile - -#include "SMDSAbs_ElementType.hxx" -#include "SMDS_MeshObject.hxx" -#include "SMDS_ElemIterator.hxx" -#include "SMDS_MeshElementIDFactory.hxx" - -#include -#include - -class SMDS_MeshNode; -class SMDS_MeshEdge; -class SMDS_MeshFace; - -/////////////////////////////////////////////////////////////////////////////// -/// Base class for elements -/////////////////////////////////////////////////////////////////////////////// -class SMDS_MeshElement:public SMDS_MeshObject -{ - - public: - SMDS_ElemIteratorPtr nodesIterator() const; - SMDS_ElemIteratorPtr edgesIterator() const; - SMDS_ElemIteratorPtr facesIterator() const; - virtual SMDS_ElemIteratorPtr - elementsIterator(SMDSAbs_ElementType type) const; - - virtual int NbNodes() const; - virtual int NbEdges() const; - virtual int NbFaces() const; - int GetID() const; - - ///Return the type of the current element - virtual SMDSAbs_ElementType GetType() const = 0; - virtual bool IsPoly() const { return false; }; - - friend std::ostream & operator <<(std::ostream & OS, const SMDS_MeshElement *); - friend bool SMDS_MeshElementIDFactory::BindID(int ID,SMDS_MeshElement*elem); - - protected: - SMDS_MeshElement(int ID=-1); - virtual void Print(std::ostream & OS) const; - - private: - int myID; -}; - -#endif diff --git a/src/SMDS/SMDS_MeshElementIDFactory.cxx b/src/SMDS/SMDS_MeshElementIDFactory.cxx deleted file mode 100644 index 8fc09230b..000000000 --- a/src/SMDS/SMDS_MeshElementIDFactory.cxx +++ /dev/null @@ -1,169 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_MeshElementIDFactory.cxx -// Author : Jean-Michel BOULCOURT -// Module : SMESH - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#endif - -#include "SMDS_MeshElementIDFactory.hxx" -#include "SMDS_MeshElement.hxx" - -using namespace std; - -//======================================================================= -//function : SMDS_MeshElementIDFactory -//purpose : -//======================================================================= -SMDS_MeshElementIDFactory::SMDS_MeshElementIDFactory(): - SMDS_MeshIDFactory(), - myMin(0), myMax(0) -{ -} - -//======================================================================= -//function : BindID -//purpose : -//======================================================================= -bool SMDS_MeshElementIDFactory::BindID(int ID, SMDS_MeshElement * elem) -{ - if (myIDElements.IsBound(ID)) - return false; - myIDElements.Bind(ID,elem); - elem->myID=ID; - updateMinMax (ID); - return true; -} - -//======================================================================= -//function : MeshElement -//purpose : -//======================================================================= -SMDS_MeshElement* SMDS_MeshElementIDFactory::MeshElement(int ID) -{ - if (!myIDElements.IsBound(ID)) - return NULL; - return myIDElements.Find(ID); -} - - -//======================================================================= -//function : GetFreeID -//purpose : -//======================================================================= -int SMDS_MeshElementIDFactory::GetFreeID() -{ - int ID; - do { - ID = SMDS_MeshIDFactory::GetFreeID(); - } while (myIDElements.IsBound(ID)); - return ID; -} - -//======================================================================= -//function : ReleaseID -//purpose : -//======================================================================= -void SMDS_MeshElementIDFactory::ReleaseID(const int ID) -{ - myIDElements.UnBind(ID); - SMDS_MeshIDFactory::ReleaseID(ID); - if (ID == myMax) - myMax = 0; - if (ID == myMin) - myMin = 0; -} - -//======================================================================= -//function : GetMaxID -//purpose : -//======================================================================= - -int SMDS_MeshElementIDFactory::GetMaxID() const -{ - if (myMax == 0) - updateMinMax(); - return myMax; -} - -//======================================================================= -//function : GetMinID -//purpose : -//======================================================================= - -int SMDS_MeshElementIDFactory::GetMinID() const -{ - if (myMin == 0) - updateMinMax(); - return myMin; -} - -//======================================================================= -//function : updateMinMax -//purpose : -//======================================================================= - -void SMDS_MeshElementIDFactory::updateMinMax() const -{ - myMin = IntegerLast(); - myMax = 0; - SMDS_IdElementMap::Iterator it(myIDElements); - for (; it.More(); it.Next()) - updateMinMax (it.Key()); - if (myMin == IntegerLast()) - myMin = 0; -} - -//======================================================================= -//function : elementsIterator -//purpose : Return an iterator on elements of the factory -//======================================================================= - -class SMDS_Fact_MyElemIterator:public SMDS_ElemIterator -{ - SMDS_IdElementMap::Iterator myIterator; - public: - SMDS_Fact_MyElemIterator(const SMDS_IdElementMap& s):myIterator(s) - {} - - bool more() - { - return myIterator.More() != Standard_False; - } - - const SMDS_MeshElement* next() - { - const SMDS_MeshElement* current = myIterator.Value(); - myIterator.Next(); - return current; - } -}; - -SMDS_ElemIteratorPtr SMDS_MeshElementIDFactory::elementsIterator() const -{ - return SMDS_ElemIteratorPtr - (new SMDS_Fact_MyElemIterator(myIDElements)); -} diff --git a/src/SMDS/SMDS_MeshElementIDFactory.hxx b/src/SMDS/SMDS_MeshElementIDFactory.hxx deleted file mode 100644 index 526bcb5a0..000000000 --- a/src/SMDS/SMDS_MeshElementIDFactory.hxx +++ /dev/null @@ -1,63 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_MeshElementIDFactory.hxx -// Module : SMESH - -#ifndef _SMDS_MeshElementIDFactory_HeaderFile -#define _SMDS_MeshElementIDFactory_HeaderFile - -#include "SMDS_MeshIDFactory.hxx" -#include "SMDS_ElemIterator.hxx" - -#include - -class SMDS_MeshElement; - -typedef NCollection_DataMap SMDS_IdElementMap; - -class SMDS_MeshElementIDFactory:public SMDS_MeshIDFactory -{ -public: - SMDS_MeshElementIDFactory(); - bool BindID(int ID, SMDS_MeshElement * elem); - SMDS_MeshElement * MeshElement(int ID); - virtual int GetFreeID(); - virtual void ReleaseID(int ID); - int GetMaxID() const; - int GetMinID() const; - SMDS_ElemIteratorPtr elementsIterator() const; -private: - void updateMinMax() const; - void updateMinMax(int id) const - { - if (id > myMax) myMax = id; - if (id < myMin) myMin = id; - } - - SMDS_IdElementMap myIDElements; - mutable int myMin, myMax; - -}; - -#endif diff --git a/src/SMDS/SMDS_MeshFace.cxx b/src/SMDS/SMDS_MeshFace.cxx deleted file mode 100644 index b7014293a..000000000 --- a/src/SMDS/SMDS_MeshFace.cxx +++ /dev/null @@ -1,27 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "SMDS_MeshFace.hxx" - -SMDSAbs_ElementType SMDS_MeshFace::GetType() const -{ - return SMDSAbs_Face; -} diff --git a/src/SMDS/SMDS_MeshFace.hxx b/src/SMDS/SMDS_MeshFace.hxx deleted file mode 100644 index 36f2fa542..000000000 --- a/src/SMDS/SMDS_MeshFace.hxx +++ /dev/null @@ -1,38 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_MeshFace.hxx -// Module : SMESH - -#ifndef _SMDS_MeshFace_HeaderFile -#define _SMDS_MeshFace_HeaderFile - -#include "SMDS_MeshElement.hxx" - -class SMDS_MeshFace:public SMDS_MeshElement -{ - public: - SMDSAbs_ElementType GetType() const; -}; - -#endif diff --git a/src/SMDS/SMDS_MeshGroup.cxx b/src/SMDS/SMDS_MeshGroup.cxx deleted file mode 100644 index 0cb481c50..000000000 --- a/src/SMDS/SMDS_MeshGroup.cxx +++ /dev/null @@ -1,163 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org or email : webmaster@opencascade.org -// -// -// -// File : SMDS_MeshGroup.cxx -// Author : Jean-Michel BOULCOURT -// Module : SMESH - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#endif - -#include "SMDS_MeshGroup.hxx" -#include "utilities.h" - -using namespace std; - -//======================================================================= -//function : SMDS_MeshGroup -//purpose : -//======================================================================= - -SMDS_MeshGroup::SMDS_MeshGroup(const SMDS_Mesh * theMesh, - const SMDSAbs_ElementType theType) - :myMesh(theMesh),myType(theType), myParent(NULL) -{ -} - -//======================================================================= -//function : SMDS_MeshGroup -//purpose : -//======================================================================= - -SMDS_MeshGroup::SMDS_MeshGroup(SMDS_MeshGroup * theParent, - const SMDSAbs_ElementType theType) - :myMesh(theParent->myMesh),myType(theType), myParent(theParent) -{ -} - -//======================================================================= -//function : AddSubGroup -//purpose : -//======================================================================= - -const SMDS_MeshGroup *SMDS_MeshGroup::AddSubGroup - (const SMDSAbs_ElementType theType) -{ - const SMDS_MeshGroup * subgroup = new SMDS_MeshGroup(this,theType); - myChildren.insert(myChildren.end(),subgroup); - return subgroup; -} - -//======================================================================= -//function : RemoveSubGroup -//purpose : -//======================================================================= - -bool SMDS_MeshGroup::RemoveSubGroup(const SMDS_MeshGroup * theGroup) -{ - bool found = false; - list::iterator itgroup; - for(itgroup=myChildren.begin(); itgroup!=myChildren.end(); itgroup++) - { - const SMDS_MeshGroup* subgroup=*itgroup; - if (subgroup == theGroup) - { - found = true; - myChildren.erase(itgroup); - } - } - - return found; -} - -//======================================================================= -//function : RemoveFromParent -//purpose : -//======================================================================= - -bool SMDS_MeshGroup::RemoveFromParent() -{ - - if (myParent==NULL) return false; - else - { - return (myParent->RemoveSubGroup(this)); - } -} -//======================================================================= -//function : Clear -//purpose : -//======================================================================= - -void SMDS_MeshGroup::Clear() -{ - myElements.clear(); - myType = SMDSAbs_All; -} - -//======================================================================= -//function : Add -//purpose : -//======================================================================= - -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) - MESSAGE("SMDS_MeshGroup::Add : Type Mismatch "<GetType()<<"!="< - - -class SMDS_MeshGroup:public SMDS_MeshObject -{ - public: - SMDS_MeshGroup(const SMDS_Mesh * theMesh, - const SMDSAbs_ElementType theType = SMDSAbs_All); - const SMDS_MeshGroup * AddSubGroup - (const SMDSAbs_ElementType theType = SMDSAbs_All); - virtual bool RemoveSubGroup(const SMDS_MeshGroup* theGroup); - virtual bool RemoveFromParent(); - - const SMDS_Mesh* GetMesh() const { return myMesh; } - - void SetType (const SMDSAbs_ElementType theType); - void Clear(); - void Add(const SMDS_MeshElement * theElem); - void Remove(const SMDS_MeshElement * theElem); - bool IsEmpty() const { return myElements.empty(); } - int Extent() const { return myElements.size(); } - - SMDSAbs_ElementType GetType() const { return myType; } - - bool Contains(const SMDS_MeshElement * theElem) const; - - void InitIterator() const - { const_cast(myIterator) = myElements.begin(); } - - bool More() const { return myIterator != myElements.end(); } - - const SMDS_MeshElement* Next() const - { return *(const_cast(myIterator))++; } - - private: - SMDS_MeshGroup(SMDS_MeshGroup* theParent, - const SMDSAbs_ElementType theType = SMDSAbs_All); - - typedef std::set::const_iterator TIterator; - const SMDS_Mesh * myMesh; - SMDSAbs_ElementType myType; - std::set myElements; - SMDS_MeshGroup * myParent; - std::list myChildren; - TIterator myIterator; -}; -#endif diff --git a/src/SMDS/SMDS_MeshIDFactory.cxx b/src/SMDS/SMDS_MeshIDFactory.cxx deleted file mode 100644 index 536b2f783..000000000 --- a/src/SMDS/SMDS_MeshIDFactory.cxx +++ /dev/null @@ -1,83 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_MeshIDFactory.cxx -// Author : Jean-Michel BOULCOURT -// Module : SMESH - - -#include "SMDS_MeshIDFactory.hxx" - -using namespace std; - -//======================================================================= -//function : SMDS_MeshIDFactory -//purpose : -//======================================================================= - -SMDS_MeshIDFactory::SMDS_MeshIDFactory():myMaxID(0) -{ -} - -int SMDS_MeshIDFactory::GetFreeID() -{ - if (myPoolOfID.empty()) return ++myMaxID; - else - { - set::iterator i = myPoolOfID.begin(); - int ID = *i;//myPoolOfID.top(); - myPoolOfID.erase( i );//myPoolOfID.pop(); - return ID; - } -} - -//======================================================================= -//function : ReleaseID -//purpose : -//======================================================================= -void SMDS_MeshIDFactory::ReleaseID(const int ID) -{ - if ( ID > 0 ) - { - if ( ID < myMaxID ) - { - myPoolOfID.insert(ID); - } - else if ( ID == myMaxID ) - { - --myMaxID; - if ( !myPoolOfID.empty() ) // assure that myMaxID is not in myPoolOfID - { - set::iterator i = --myPoolOfID.end(); - while ( i != myPoolOfID.begin() && myMaxID == *i ) { - --myMaxID; --i; - } - if ( myMaxID == *i ) - --myMaxID; // begin of myPoolOfID reached - else - ++i; - myPoolOfID.erase( i, myPoolOfID.end() ); - } - } - } -} diff --git a/src/SMDS/SMDS_MeshIDFactory.hxx b/src/SMDS/SMDS_MeshIDFactory.hxx deleted file mode 100644 index 8a6425ac2..000000000 --- a/src/SMDS/SMDS_MeshIDFactory.hxx +++ /dev/null @@ -1,46 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_MeshIDFactory.hxx -// Module : SMESH - -#ifndef _SMDS_MeshIDFactory_HeaderFile -#define _SMDS_MeshIDFactory_HeaderFile - -#include "SMDS_MeshObject.hxx" -#include - - -class SMDS_MeshIDFactory:public SMDS_MeshObject -{ - public: - virtual int GetFreeID(); - virtual void ReleaseID(int ID); - - protected: - SMDS_MeshIDFactory(); - int myMaxID; - std::set myPoolOfID; -}; - -#endif diff --git a/src/SMDS/SMDS_MeshNode.cxx b/src/SMDS/SMDS_MeshNode.cxx deleted file mode 100644 index 06ab12173..000000000 --- a/src/SMDS/SMDS_MeshNode.cxx +++ /dev/null @@ -1,246 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#endif - -#include "SMDS_MeshNode.hxx" -#include "SMDS_SpacePosition.hxx" -#include "SMDS_IteratorOfElements.hxx" - -using namespace std; - -//======================================================================= -//function : SMDS_MeshNode -//purpose : -//======================================================================= - -SMDS_MeshNode::SMDS_MeshNode(double x, double y, double z): - myX(x), myY(y), myZ(z), - myPosition(SMDS_SpacePosition::originSpacePosition()) -{ -} - -//======================================================================= -//function : RemoveInverseElement -//purpose : -//======================================================================= - -void SMDS_MeshNode::RemoveInverseElement(const SMDS_MeshElement * parent) -{ - NCollection_List::Iterator it(myInverseElements); - while (it.More()) { - const SMDS_MeshElement* elem = it.Value(); - if (elem == parent) - myInverseElements.Remove(it); - else - it.Next(); - } -} - -//======================================================================= -//function : Print -//purpose : -//======================================================================= - -void SMDS_MeshNode::Print(ostream & OS) const -{ - OS << "Node <" << GetID() << "> : X = " << myX << " Y = " - << myY << " Z = " << myZ << endl; -} - -//======================================================================= -//function : SetPosition -//purpose : -//======================================================================= - -void SMDS_MeshNode::SetPosition(const SMDS_PositionPtr& aPos) -{ - myPosition = aPos; -} - -//======================================================================= -//function : GetPosition -//purpose : -//======================================================================= - -const SMDS_PositionPtr& SMDS_MeshNode::GetPosition() const -{ - return myPosition; -} - -class SMDS_MeshNode_MyInvIterator:public SMDS_ElemIterator -{ - NCollection_List::Iterator myIterator; - public: - SMDS_MeshNode_MyInvIterator(const NCollection_List& s): - myIterator(s) - {} - - bool more() - { - return myIterator.More() != Standard_False; - } - - const SMDS_MeshElement* next() - { - const SMDS_MeshElement* current=myIterator.Value(); - myIterator.Next(); - return current; - } -}; - -SMDS_ElemIteratorPtr SMDS_MeshNode:: - GetInverseElementIterator() const -{ - return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyInvIterator(myInverseElements)); -} - -// Same as GetInverseElementIterator but the create iterator only return -// wanted type elements. -class SMDS_MeshNode_MyIterator:public SMDS_ElemIterator -{ - NCollection_List mySet; - NCollection_List::Iterator myIterator; - public: - SMDS_MeshNode_MyIterator(SMDSAbs_ElementType type, - const NCollection_List& s) - { - const SMDS_MeshElement * e; - bool toInsert; - NCollection_List::Iterator it(s); - for(; it.More(); it.Next()) - { - e=it.Value(); - switch(type) - { - case SMDSAbs_Edge: toInsert=true; break; - case SMDSAbs_Face: toInsert=(e->GetType()!=SMDSAbs_Edge); break; - case SMDSAbs_Volume: toInsert=(e->GetType()==SMDSAbs_Volume); break; - } - if(toInsert) mySet.Append(e); - } - myIterator.Init(mySet); - } - - bool more() - { - return myIterator.More() != Standard_False; - } - - const SMDS_MeshElement* next() - { - const SMDS_MeshElement* current=myIterator.Value(); - myIterator.Next(); - return current; - } -}; - -SMDS_ElemIteratorPtr SMDS_MeshNode:: - elementsIterator(SMDSAbs_ElementType type) const -{ - if(type==SMDSAbs_Node) - return SMDS_MeshElement::elementsIterator(SMDSAbs_Node); - else - return SMDS_ElemIteratorPtr - (new SMDS_IteratorOfElements - (this,type, - SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyIterator(type, myInverseElements)))); -} - -int SMDS_MeshNode::NbNodes() const -{ - return 1; -} - -double SMDS_MeshNode::X() const -{ - return myX; -} - -double SMDS_MeshNode::Y() const -{ - return myY; -} - -double SMDS_MeshNode::Z() const -{ - return myZ; -} - -void SMDS_MeshNode::setXYZ(double x, double y, double z) -{ - myX=x; - myY=y; - myZ=z; -} - -SMDSAbs_ElementType SMDS_MeshNode::GetType() const -{ - return SMDSAbs_Node; -} - -//======================================================================= -//function : AddInverseElement -//purpose : -//======================================================================= -void SMDS_MeshNode::AddInverseElement(const SMDS_MeshElement* ME) -{ - NCollection_List::Iterator it(myInverseElements); - for (; it.More(); it.Next()) { - const SMDS_MeshElement* elem = it.Value(); - if (elem == ME) - return; - } - myInverseElements.Append(ME); -} - -//======================================================================= -//function : ClearInverseElements -//purpose : -//======================================================================= -void SMDS_MeshNode::ClearInverseElements() -{ - myInverseElements.Clear(); -} - -bool SMDS_MeshNode::emptyInverseElements() -{ - return myInverseElements.IsEmpty() != Standard_False; -} - -/////////////////////////////////////////////////////////////////////////////// -/// To be used with STL set -/////////////////////////////////////////////////////////////////////////////// -bool operator<(const SMDS_MeshNode& e1, const SMDS_MeshNode& e2) -{ - return e1.GetID() - -class SMDS_MeshNode:public SMDS_MeshElement -{ - - public: - SMDS_MeshNode(double x, double y, double z); - void Print(std::ostream & OS) const; - double X() const; - double Y() const; - double Z() const; - void AddInverseElement(const SMDS_MeshElement * ME); - void RemoveInverseElement(const SMDS_MeshElement * parent); - void ClearInverseElements(); - bool emptyInverseElements(); - SMDS_ElemIteratorPtr GetInverseElementIterator() const; - void SetPosition(const SMDS_PositionPtr& aPos); - const SMDS_PositionPtr& GetPosition() const; - SMDSAbs_ElementType GetType() const; - int NbNodes() const; - void setXYZ(double x, double y, double z); - friend bool operator<(const SMDS_MeshNode& e1, const SMDS_MeshNode& e2); - - protected: - SMDS_ElemIteratorPtr - elementsIterator(SMDSAbs_ElementType type) const; - - private: - double myX, myY, myZ; - SMDS_PositionPtr myPosition; - NCollection_List myInverseElements; -}; - -#endif diff --git a/src/SMDS/SMDS_MeshObject.cxx b/src/SMDS/SMDS_MeshObject.cxx deleted file mode 100644 index b822b8098..000000000 --- a/src/SMDS/SMDS_MeshObject.cxx +++ /dev/null @@ -1,28 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_MeshObject.cxx -// Author : Jean-Michel BOULCOURT -// Module : SMESH - -#include "SMDS_MeshObject.hxx" diff --git a/src/SMDS/SMDS_MeshObject.hxx b/src/SMDS/SMDS_MeshObject.hxx deleted file mode 100644 index 8386f2115..000000000 --- a/src/SMDS/SMDS_MeshObject.hxx +++ /dev/null @@ -1,35 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_MeshObject.hxx -// Module : SMESH - -#ifndef _SMDS_MeshObject_HeaderFile -#define _SMDS_MeshObject_HeaderFile - -class SMDS_MeshObject -{ - public: - virtual ~SMDS_MeshObject() {} -}; -#endif diff --git a/src/SMDS/SMDS_MeshVolume.cxx b/src/SMDS/SMDS_MeshVolume.cxx deleted file mode 100644 index 561f0dccb..000000000 --- a/src/SMDS/SMDS_MeshVolume.cxx +++ /dev/null @@ -1,38 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_MeshVolume.cxx -// Author : Jean-Michel BOULCOURT -// Module : SMESH - -#include "SMDS_MeshVolume.hxx" -//======================================================================= -//function : Print -//purpose : -//======================================================================= - -SMDSAbs_ElementType SMDS_MeshVolume::GetType() const -{ - return SMDSAbs_Volume; -} - diff --git a/src/SMDS/SMDS_MeshVolume.hxx b/src/SMDS/SMDS_MeshVolume.hxx deleted file mode 100644 index c543c3001..000000000 --- a/src/SMDS/SMDS_MeshVolume.hxx +++ /dev/null @@ -1,38 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_MeshVolume.hxx -// Module : SMESH - -#ifndef _SMDS_MeshVolume_HeaderFile -#define _SMDS_MeshVolume_HeaderFile - -#include "SMDS_MeshElement.hxx" - -class SMDS_MeshVolume:public SMDS_MeshElement -{ - - public: - SMDSAbs_ElementType GetType() const; -}; -#endif diff --git a/src/SMDS/SMDS_PolygonalFaceOfNodes.cxx b/src/SMDS/SMDS_PolygonalFaceOfNodes.cxx deleted file mode 100644 index 38abf18c2..000000000 --- a/src/SMDS/SMDS_PolygonalFaceOfNodes.cxx +++ /dev/null @@ -1,174 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#endif - -#include "SMDS_PolygonalFaceOfNodes.hxx" - -#include "SMDS_IteratorOfElements.hxx" -//#include "SMDS_MeshNode.hxx" -#include "utilities.h" - -using namespace std; - -//======================================================================= -//function : Constructor -//purpose : -//======================================================================= -SMDS_PolygonalFaceOfNodes::SMDS_PolygonalFaceOfNodes - (std::vector nodes) -{ - myNodes = nodes; -} - -//======================================================================= -//function : GetType -//purpose : -//======================================================================= -SMDSAbs_ElementType SMDS_PolygonalFaceOfNodes::GetType() const -{ - return SMDSAbs_Face; - //return SMDSAbs_PolygonalFace; -} - -//======================================================================= -//function : ChangeNodes -//purpose : -//======================================================================= -bool SMDS_PolygonalFaceOfNodes::ChangeNodes (std::vector nodes) -{ - if (nodes.size() < 3) - return false; - - myNodes = nodes; - - return true; -} - -//======================================================================= -//function : ChangeNodes -//purpose : to support the same interface, as SMDS_FaceOfNodes -//======================================================================= -bool SMDS_PolygonalFaceOfNodes::ChangeNodes (const SMDS_MeshNode* nodes[], - const int nbNodes) -{ - if (nbNodes < 3) - return false; - - myNodes.resize(nbNodes); - int i = 0; - for (; i < nbNodes; i++) { - myNodes[i] = nodes[i]; - } - - return true; -} - -//======================================================================= -//function : NbNodes -//purpose : -//======================================================================= -int SMDS_PolygonalFaceOfNodes::NbNodes() const -{ - return myNodes.size(); -} - -//======================================================================= -//function : NbEdges -//purpose : -//======================================================================= -int SMDS_PolygonalFaceOfNodes::NbEdges() const -{ - return NbNodes(); -} - -//======================================================================= -//function : NbFaces -//purpose : -//======================================================================= -int SMDS_PolygonalFaceOfNodes::NbFaces() const -{ - return 1; -} - -//======================================================================= -//function : Print -//purpose : -//======================================================================= -void SMDS_PolygonalFaceOfNodes::Print(ostream & OS) const -{ - OS << "polygonal face <" << GetID() << " > : "; - int i, nbNodes = myNodes.size(); - for (i = 0; i < nbNodes - 1; i++) - OS << myNodes[i] << ","; - OS << myNodes[i] << ") " << endl; -} - -//======================================================================= -//function : elementsIterator -//purpose : -//======================================================================= -class SMDS_PolygonalFaceOfNodes_MyIterator:public SMDS_ElemIterator -{ - //const SMDS_MeshNode* const *mySet; - const std::vector mySet; - //int myLength; - int index; - public: - //SMDS_PolygonalFaceOfNodes_MyIterator(const SMDS_MeshNode* const *s, int l): - // mySet(s),myLength(l),index(0) {} - SMDS_PolygonalFaceOfNodes_MyIterator(const std::vector s): - mySet(s),index(0) {} - - bool more() - { - return index < mySet.size(); - } - - const SMDS_MeshElement* next() - { - index++; - return mySet[index-1]; - } -}; - -SMDS_ElemIteratorPtr SMDS_PolygonalFaceOfNodes::elementsIterator - (SMDSAbs_ElementType type) const -{ - switch(type) - { - case SMDSAbs_Face: - return SMDS_MeshElement::elementsIterator(SMDSAbs_Face); - case SMDSAbs_Node: - return SMDS_ElemIteratorPtr(new SMDS_PolygonalFaceOfNodes_MyIterator(myNodes)); - case SMDSAbs_Edge: - MESSAGE("Error : edge iterator for SMDS_PolygonalFaceOfNodes not implemented"); - break; - default: - return SMDS_ElemIteratorPtr - (new SMDS_IteratorOfElements - (this,type,SMDS_ElemIteratorPtr - (new SMDS_PolygonalFaceOfNodes_MyIterator(myNodes)))); - } - return SMDS_ElemIteratorPtr(); -} diff --git a/src/SMDS/SMDS_PolygonalFaceOfNodes.hxx b/src/SMDS/SMDS_PolygonalFaceOfNodes.hxx deleted file mode 100644 index 567746259..000000000 --- a/src/SMDS/SMDS_PolygonalFaceOfNodes.hxx +++ /dev/null @@ -1,60 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _SMDS_PolygonalFaceOfNodes_HeaderFile -#define _SMDS_PolygonalFaceOfNodes_HeaderFile - -#include "SMDS_MeshFace.hxx" -//#include "SMDS_FaceOfNodes.hxx" -#include "SMDS_MeshNode.hxx" -#include "SMDS_Iterator.hxx" - -#include - -//class SMDS_PolygonalFaceOfNodes:public SMDS_FaceOfNodes -class SMDS_PolygonalFaceOfNodes:public SMDS_MeshFace -{ - public: - SMDS_PolygonalFaceOfNodes (std::vector nodes); - - virtual SMDSAbs_ElementType GetType() const; - virtual bool IsPoly() const { return true; }; - - bool ChangeNodes (std::vector nodes); - - bool ChangeNodes (const SMDS_MeshNode* nodes[], - const int nbNodes); - // to support the same interface, as SMDS_FaceOfNodes - - virtual int NbNodes() const; - virtual int NbEdges() const; - virtual int NbFaces() const; - - virtual void Print (std::ostream & OS) const; - - protected: - virtual SMDS_ElemIteratorPtr elementsIterator (SMDSAbs_ElementType type) const; - - private: - std::vector myNodes; -}; - -#endif diff --git a/src/SMDS/SMDS_PolyhedralVolumeOfNodes.cxx b/src/SMDS/SMDS_PolyhedralVolumeOfNodes.cxx deleted file mode 100644 index 8b2613474..000000000 --- a/src/SMDS/SMDS_PolyhedralVolumeOfNodes.cxx +++ /dev/null @@ -1,182 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#endif - -#include "SMDS_PolyhedralVolumeOfNodes.hxx" -#include "SMDS_MeshNode.hxx" -#include "utilities.h" - -#include - -using namespace std; - -//======================================================================= -//function : Constructor -//purpose : Create a volume of many faces -//======================================================================= -SMDS_PolyhedralVolumeOfNodes::SMDS_PolyhedralVolumeOfNodes - (std::vector nodes, - std::vector quantities) -: SMDS_VolumeOfNodes(NULL, NULL, NULL, NULL) -{ - ChangeNodes(nodes, quantities); -} - -//======================================================================= -//function : GetType -//purpose : -//======================================================================= -SMDSAbs_ElementType SMDS_PolyhedralVolumeOfNodes::GetType() const -{ -// return SMDSAbs_PolyhedralVolume; - return SMDSAbs_Volume; -} - -//======================================================================= -//function : ChangeNodes -//purpose : -//======================================================================= -bool SMDS_PolyhedralVolumeOfNodes::ChangeNodes (std::vector nodes, - std::vector quantities) -{ - myNodesByFaces = nodes; - myQuantities = quantities; - - // Init fields of parent class - int aNbNodes = 0; - std::set aSet; - int nodes_len = nodes.size(); - for (int j = 0; j < nodes_len; j++) { - if (aSet.find(nodes[j]) == aSet.end()) { - aSet.insert(nodes[j]); - aNbNodes++; - } - } - - int k = 0; - const SMDS_MeshNode* aNodes [aNbNodes]; - std::set::iterator anIter = aSet.begin(); - for (; anIter != aSet.end(); anIter++, k++) { - aNodes[k] = *anIter; - } - - //SMDS_VolumeOfNodes::ChangeNodes(aNodes, aNbNodes); - delete [] myNodes; - //myNbNodes = nodes.size(); - myNbNodes = aNbNodes; - myNodes = new const SMDS_MeshNode* [myNbNodes]; - for (int i = 0; i < myNbNodes; i++) { - //myNodes[i] = nodes[i]; - myNodes[i] = aNodes[i]; - } - - return true; -} - -//======================================================================= -//function : NbEdges -//purpose : -//======================================================================= -int SMDS_PolyhedralVolumeOfNodes::NbEdges() const -{ - int nbEdges = 0; - - for (int ifa = 0; ifa < myQuantities.size(); ifa++) { - nbEdges += myQuantities[ifa]; - } - nbEdges /= 2; - - return nbEdges; -} - -//======================================================================= -//function : NbFaces -//purpose : -//======================================================================= -int SMDS_PolyhedralVolumeOfNodes::NbFaces() const -{ - return myQuantities.size(); -} - -//======================================================================= -//function : NbFaceNodes -//purpose : -//======================================================================= -int SMDS_PolyhedralVolumeOfNodes::NbFaceNodes (const int face_ind) const -{ - if (face_ind < 1 || myQuantities.size() < face_ind) - return 0; - return myQuantities[face_ind - 1]; -} - -//======================================================================= -//function : GetFaceNode -//purpose : -//======================================================================= -const SMDS_MeshNode* SMDS_PolyhedralVolumeOfNodes::GetFaceNode (const int face_ind, - const int node_ind) const -{ - if (node_ind < 1 || NbFaceNodes(face_ind) < node_ind) - return NULL; - - int i, first_node = 0; - for (i = 0; i < face_ind - 1; i++) { - first_node += myQuantities[i]; - } - - return myNodesByFaces[first_node + node_ind - 1]; -} - -//======================================================================= -//function : Print -//purpose : -//======================================================================= -void SMDS_PolyhedralVolumeOfNodes::Print (ostream & OS) const -{ - OS << "polyhedral volume <" << GetID() << "> : "; - - int faces_len = myQuantities.size(); - //int nodes_len = myNodesByFaces.size(); - int cur_first_node = 0; - - int i, j; - for (i = 0; i < faces_len; i++) { - OS << "face_" << i << " ("; - for (j = 0; j < myQuantities[i] - 1; j++) { - OS << myNodesByFaces[cur_first_node + j] << ","; - } - OS << myNodesByFaces[cur_first_node + j] << ") "; - cur_first_node += myQuantities[i]; - } -} - -//======================================================================= -//function : ChangeNodes -//purpose : usage disabled -//======================================================================= -bool SMDS_PolyhedralVolumeOfNodes::ChangeNodes (const SMDS_MeshNode* nodes[], - const int nbNodes) -{ - return false; -} diff --git a/src/SMDS/SMDS_PolyhedralVolumeOfNodes.hxx b/src/SMDS/SMDS_PolyhedralVolumeOfNodes.hxx deleted file mode 100644 index d7cfeeed5..000000000 --- a/src/SMDS/SMDS_PolyhedralVolumeOfNodes.hxx +++ /dev/null @@ -1,72 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_PolyhedralVolumeOfNodes.hxx -// Module : SMESH - -#ifndef _SMDS_PolyhedralVolumeOfNodes_HeaderFile -#define _SMDS_PolyhedralVolumeOfNodes_HeaderFile - -#include "SMDS_VolumeOfNodes.hxx" - -class SMDS_PolyhedralVolumeOfNodes:public SMDS_VolumeOfNodes -{ - public: - SMDS_PolyhedralVolumeOfNodes (std::vector nodes, - std::vector quantities); - - //virtual ~SMDS_PolyhedralVolumeOfNodes(); - - virtual SMDSAbs_ElementType GetType() const; - virtual bool IsPoly() const { return true; }; - - bool ChangeNodes (std::vector nodes, - std::vector quantities); - - //virtual int NbNodes() const; - virtual int NbEdges() const; - virtual int NbFaces() const; - - int NbFaceNodes (const int face_ind) const; - // 1 <= face_ind <= NbFaces() - - const SMDS_MeshNode* GetFaceNode (const int face_ind, const int node_ind) const; - // 1 <= face_ind <= NbFaces() - // 1 <= node_ind <= NbFaceNodes() - - virtual void Print (std::ostream & OS) const; - - protected: - //virtual SMDS_ElemIteratorPtr elementsIterator (SMDSAbs_ElementType type) const; - - private: - // usage disabled - bool ChangeNodes (const SMDS_MeshNode* nodes[], - const int nbNodes); - - private: - std::vector myNodesByFaces; - std::vector myQuantities; -}; - -#endif diff --git a/src/SMDS/SMDS_Position.cxx b/src/SMDS/SMDS_Position.cxx deleted file mode 100644 index 926aa4bf9..000000000 --- a/src/SMDS/SMDS_Position.cxx +++ /dev/null @@ -1,76 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_Position.cxx -// Author : Jean-Michel BOULCOURT -// Module : SMESH - -#include "SMDS_Position.hxx" - -//======================================================================= -//function : SMDS_Position -//purpose : -//======================================================================= - -SMDS_Position::SMDS_Position(int aShapeId) :myShapeId(aShapeId) -{ -} - -//======================================================================= -//function : SetShapeId -//purpose : -//======================================================================= - -void SMDS_Position::SetShapeId(int aShapeId) -{ - myShapeId = aShapeId; -} - -//======================================================================= -//function : GetShapeId -//purpose : -//======================================================================= - -int SMDS_Position::GetShapeId() const -{ - return myShapeId; -} - -//======================================================================= -//function : GetDim -//purpose : -//======================================================================= - -int SMDS_Position::GetDim() const -{ -// switch ( GetTypeOfPosition() ) { -// case SMDS_TOP_UNSPEC: return -1; -// case SMDS_TOP_VERTEX: return 0; -// case SMDS_TOP_EDGE: return 1; -// case SMDS_TOP_FACE: return 2; -// case SMDS_TOP_3DSPACE: return 3; -// } - return GetTypeOfPosition(); -} - - diff --git a/src/SMDS/SMDS_Position.hxx b/src/SMDS/SMDS_Position.hxx deleted file mode 100644 index a18ec9eb2..000000000 --- a/src/SMDS/SMDS_Position.hxx +++ /dev/null @@ -1,56 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_Position.hxx -// Module : SMESH - -#ifndef _SMDS_Position_HeaderFile -#define _SMDS_Position_HeaderFile - -#include "SMDS_TypeOfPosition.hxx" -#include - -class SMDS_Position; -typedef boost::shared_ptr SMDS_PositionPtr; - - -class SMDS_Position -{ - - public: - const virtual double * Coords() const = 0; - virtual SMDS_TypeOfPosition GetTypeOfPosition() const = 0; - virtual int GetDim() const; - void SetShapeId(int aShapeId); - int GetShapeId() const; - virtual ~SMDS_Position() {} - - protected: - SMDS_Position(int aShapeId); - - private: - int myShapeId; -}; - - -#endif diff --git a/src/SMDS/SMDS_SpacePosition.cxx b/src/SMDS/SMDS_SpacePosition.cxx deleted file mode 100644 index 7ce582f91..000000000 --- a/src/SMDS/SMDS_SpacePosition.cxx +++ /dev/null @@ -1,59 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_SpacePosition.cxx -// Author : Jean-Michel BOULCOURT -// Module : SMESH - -#include "SMDS_SpacePosition.hxx" - -//======================================================================= -//function : SMDS_SpacePosition -//purpose : -//======================================================================= - -SMDS_SpacePosition::SMDS_SpacePosition(double x, double y, double z): - SMDS_Position(0) -{ - myCoords[0]=x; - myCoords[1]=y; - myCoords[2]=z; -} - -/** -*/ -SMDS_TypeOfPosition SMDS_SpacePosition::GetTypeOfPosition() const -{ - return SMDS_TOP_3DSPACE; -} - -const double * SMDS_SpacePosition::Coords() const -{ - return myCoords; -} - -SMDS_PositionPtr SMDS_SpacePosition::originSpacePosition() -{ - static SMDS_PositionPtr staticpos (new SMDS_SpacePosition()); - return staticpos; -} diff --git a/src/SMDS/SMDS_SpacePosition.hxx b/src/SMDS/SMDS_SpacePosition.hxx deleted file mode 100644 index e4fadd6b1..000000000 --- a/src/SMDS/SMDS_SpacePosition.hxx +++ /dev/null @@ -1,45 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_SpacePosition.hxx -// Module : SMESH - -#ifndef _SMDS_SpacePosition_HeaderFile -#define _SMDS_SpacePosition_HeaderFile - -#include "SMDS_Position.hxx" - -class SMDS_SpacePosition:public SMDS_Position -{ - - public: - SMDS_SpacePosition(double x=0, double y=0, double z=0); - const virtual double * Coords() const; - virtual inline SMDS_TypeOfPosition GetTypeOfPosition() const; - inline void SetCoords(const double x, const double y, const double z); - static SMDS_PositionPtr originSpacePosition(); - private: - double myCoords[3]; -}; - -#endif diff --git a/src/SMDS/SMDS_TypeOfPosition.hxx b/src/SMDS/SMDS_TypeOfPosition.hxx deleted file mode 100644 index 8c0631bfc..000000000 --- a/src/SMDS/SMDS_TypeOfPosition.hxx +++ /dev/null @@ -1,39 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_TypeOfPosition.hxx -// Module : SMESH - -#ifndef _SMDS_TypeOfPosition_HeaderFile -#define _SMDS_TypeOfPosition_HeaderFile - -enum SMDS_TypeOfPosition // Value is equal to shape dimention -{ - SMDS_TOP_UNSPEC = -1, - SMDS_TOP_VERTEX = 0, - SMDS_TOP_EDGE = 1, - SMDS_TOP_FACE = 2, - SMDS_TOP_3DSPACE = 3 -}; - -#endif diff --git a/src/SMDS/SMDS_VertexPosition.cxx b/src/SMDS/SMDS_VertexPosition.cxx deleted file mode 100644 index 022f76ad3..000000000 --- a/src/SMDS/SMDS_VertexPosition.cxx +++ /dev/null @@ -1,60 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_VertexPosition.cxx -// Author : Jean-Michel BOULCOURT -// Module : SMESH - -#include "SMDS_VertexPosition.hxx" - -#include "utilities.h" - -using namespace std; - -//======================================================================= -//function : SMDS_VertexPosition -//purpose : -//======================================================================= - -SMDS_VertexPosition:: SMDS_VertexPosition(const int aVertexId) - :SMDS_Position(aVertexId) -{ -} - -//======================================================================= -//function : Coords -//purpose : -//======================================================================= - -const double *SMDS_VertexPosition::Coords() const -{ - const static double origin[]={0,0,0}; - MESSAGE("SMDS_VertexPosition::Coords not implemented"); - return origin; -} - - -SMDS_TypeOfPosition SMDS_VertexPosition::GetTypeOfPosition() const -{ - return SMDS_TOP_VERTEX; -} diff --git a/src/SMDS/SMDS_VertexPosition.hxx b/src/SMDS/SMDS_VertexPosition.hxx deleted file mode 100644 index 52ef05918..000000000 --- a/src/SMDS/SMDS_VertexPosition.hxx +++ /dev/null @@ -1,41 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_VertexPosition.hxx -// Module : SMESH - -#ifndef _SMDS_VertexPosition_HeaderFile -#define _SMDS_VertexPosition_HeaderFile - -#include "SMDS_Position.hxx" - -class SMDS_VertexPosition:public SMDS_Position -{ - - public: - SMDS_TypeOfPosition GetTypeOfPosition() const; - SMDS_VertexPosition(int aVertexId=0); - const double *Coords() const; -}; - -#endif diff --git a/src/SMDS/SMDS_VolumeOfFaces.cxx b/src/SMDS/SMDS_VolumeOfFaces.cxx deleted file mode 100644 index 51e71f86c..000000000 --- a/src/SMDS/SMDS_VolumeOfFaces.cxx +++ /dev/null @@ -1,138 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_VolumeOfFaces.cxx -// Author : Jean-Michel BOULCOURT -// Module : SMESH - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#endif - -#include "SMDS_VolumeOfFaces.hxx" -#include "SMDS_IteratorOfElements.hxx" - -using namespace std; - -//======================================================================= -//function : Print -//purpose : -//======================================================================= - -void SMDS_VolumeOfFaces::Print(ostream & OS) const -{ - OS << "volume <" << GetID() << "> : "; - int i; - for (i = 0; i < NbFaces()-1; ++i) OS << myFaces[i] << ","; - OS << myFaces[i]<< ") " << endl; -} - - -int SMDS_VolumeOfFaces::NbFaces() const -{ - return myNbFaces; -} - -class SMDS_VolumeOfFaces_MyIterator:public SMDS_ElemIterator -{ - const SMDS_MeshFace* const *mySet; - int myLength; - int index; - public: - SMDS_VolumeOfFaces_MyIterator(const SMDS_MeshFace* const *s, int l): - mySet(s),myLength(l),index(0) {} - - bool more() - { - return index - - -class SMDS_VolumeOfFaces:public SMDS_MeshVolume -{ - - public: - SMDS_VolumeOfFaces(const SMDS_MeshFace * face1, - const SMDS_MeshFace * face2, - const SMDS_MeshFace * face3, - const SMDS_MeshFace * face4); - SMDS_VolumeOfFaces(const SMDS_MeshFace * face1, - const SMDS_MeshFace * face2, - const SMDS_MeshFace * face3, - const SMDS_MeshFace * face4, - const SMDS_MeshFace * face5); - SMDS_VolumeOfFaces(const SMDS_MeshFace * face1, - const SMDS_MeshFace * face2, - const SMDS_MeshFace * face3, - const SMDS_MeshFace * face4, - const SMDS_MeshFace * face5, - const SMDS_MeshFace * face6); - - void Print(std::ostream & OS) const; - - int NbFaces() const; - - protected: - SMDS_ElemIteratorPtr - elementsIterator(SMDSAbs_ElementType type) const; - const SMDS_MeshFace * myFaces[6]; - int myNbFaces; -}; -#endif diff --git a/src/SMDS/SMDS_VolumeOfNodes.cxx b/src/SMDS/SMDS_VolumeOfNodes.cxx deleted file mode 100644 index cd893f484..000000000 --- a/src/SMDS/SMDS_VolumeOfNodes.cxx +++ /dev/null @@ -1,212 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#endif - -#include "SMDS_VolumeOfNodes.hxx" -#include "SMDS_MeshNode.hxx" -#include "utilities.h" - -using namespace std; - -/////////////////////////////////////////////////////////////////////////////// -/// Create an hexahedron. node 1,2,3,4 and 5,6,7,8 are quadrangle and -/// 5,1 and 7,3 are an edges. -/////////////////////////////////////////////////////////////////////////////// -SMDS_VolumeOfNodes::SMDS_VolumeOfNodes( - const SMDS_MeshNode * node1, - const SMDS_MeshNode * node2, - const SMDS_MeshNode * node3, - const SMDS_MeshNode * node4, - const SMDS_MeshNode * node5, - const SMDS_MeshNode * node6, - const SMDS_MeshNode * node7, - const SMDS_MeshNode * node8) -{ - myNbNodes = 8; - myNodes = new const SMDS_MeshNode* [myNbNodes]; - myNodes[0]=node1; - myNodes[1]=node2; - myNodes[2]=node3; - myNodes[3]=node4; - myNodes[4]=node5; - myNodes[5]=node6; - myNodes[6]=node7; - myNodes[7]=node8; -} - -SMDS_VolumeOfNodes::SMDS_VolumeOfNodes( - const SMDS_MeshNode * node1, - const SMDS_MeshNode * node2, - const SMDS_MeshNode * node3, - const SMDS_MeshNode * node4) -{ - myNbNodes = 4; - myNodes = new const SMDS_MeshNode* [myNbNodes]; - myNodes[0]=node1; - myNodes[1]=node2; - myNodes[2]=node3; - myNodes[3]=node4; -} - -SMDS_VolumeOfNodes::SMDS_VolumeOfNodes( - const SMDS_MeshNode * node1, - const SMDS_MeshNode * node2, - const SMDS_MeshNode * node3, - const SMDS_MeshNode * node4, - const SMDS_MeshNode * node5) -{ - myNbNodes = 5; - myNodes = new const SMDS_MeshNode* [myNbNodes]; - myNodes[0]=node1; - myNodes[1]=node2; - myNodes[2]=node3; - myNodes[3]=node4; - myNodes[4]=node5; -} - -SMDS_VolumeOfNodes::SMDS_VolumeOfNodes( - const SMDS_MeshNode * node1, - const SMDS_MeshNode * node2, - const SMDS_MeshNode * node3, - const SMDS_MeshNode * node4, - const SMDS_MeshNode * node5, - const SMDS_MeshNode * node6) -{ - myNbNodes = 6; - myNodes = new const SMDS_MeshNode* [myNbNodes]; - myNodes[0]=node1; - myNodes[1]=node2; - myNodes[2]=node3; - myNodes[3]=node4; - myNodes[4]=node5; - myNodes[5]=node6; -} - -bool SMDS_VolumeOfNodes::ChangeNodes(const SMDS_MeshNode* nodes[], - const int nbNodes) -{ - if (nbNodes < 4 || nbNodes > 8 || nbNodes == 7) - return false; - - delete [] myNodes; - myNbNodes = nbNodes; - myNodes = new const SMDS_MeshNode* [myNbNodes]; - for ( int i = 0; i < nbNodes; i++ ) - myNodes[ i ] = nodes [ i ]; - - return true; -} - -SMDS_VolumeOfNodes::~SMDS_VolumeOfNodes() -{ - if (myNodes != NULL) { - delete [] myNodes; - myNodes = NULL; - } -} - -//======================================================================= -//function : Print -//purpose : -//======================================================================= - -void SMDS_VolumeOfNodes::Print(ostream & OS) const -{ - OS << "volume <" << GetID() << "> : "; - int i; - for (i = 0; i < NbNodes(); ++i) OS << myNodes[i] << ","; - OS << myNodes[NbNodes()-1]<< ") " << endl; -} - -int SMDS_VolumeOfNodes::NbFaces() const -{ - switch(NbNodes()) - { - case 4: return 4; - case 5: return 5; - case 6: return 5; - case 8: return 6; - default: MESSAGE("invalid number of nodes"); - } - return 0; -} - -int SMDS_VolumeOfNodes::NbNodes() const -{ - return myNbNodes; -} - -int SMDS_VolumeOfNodes::NbEdges() const -{ - switch(NbNodes()) - { - case 4: return 6; - case 5: return 8; - case 6: return 9; - case 8: return 12; - default: MESSAGE("invalid number of nodes"); - } - return 0; -} - -class SMDS_VolumeOfNodes_MyIterator:public SMDS_ElemIterator -{ - const SMDS_MeshNode* const* mySet; - int myLength; - int index; - public: - SMDS_VolumeOfNodes_MyIterator(const SMDS_MeshNode* const* s, int l): - mySet(s),myLength(l),index(0) {} - - bool more() - { - return index -#include -#include - -using namespace std; - -// ====================================================== -// Node indices in faces depending on volume orientation -// making most faces normals external -// ====================================================== - -/* -// N3 -// + -// /|\ -// / | \ -// / | \ -// N0 +---|---+ N1 TETRAHEDRON -// \ | / -// \ | / -// \ | / -// \|/ -// + -// N2 -*/ -static int Tetra_F [4][4] = { // FORWARD == EXTERNAL - { 0, 1, 2, 0 }, // All faces have external normals - { 0, 3, 1, 0 }, - { 1, 3, 2, 1 }, - { 0, 2, 3, 0 }}; -static int Tetra_R [4][4] = { // REVERSED - { 0, 1, 2, 0 }, // All faces but a bottom have external normals - { 0, 1, 3, 0 }, - { 1, 2, 3, 1 }, - { 0, 3, 2, 0 }}; -static int Tetra_RE [4][4] = { // REVERSED -> FORWARD (EXTERNAL) - { 0, 2, 1, 0 }, // All faces have external normals - { 0, 1, 3, 0 }, - { 1, 2, 3, 1 }, - { 0, 3, 2, 0 }}; -static int Tetra_nbN [] = { 3, 3, 3, 3 }; - -// -// PYRAMID -// -static int Pyramid_F [5][5] = { // FORWARD == EXTERNAL - { 0, 1, 2, 3, 0 }, // All faces have external normals - { 0, 4, 1, 0, 4 }, - { 1, 4, 2, 1, 4 }, - { 2, 4, 3, 2, 4 }, - { 3, 4, 0, 3, 4 }}; -static int Pyramid_R [5][5] = { // REVERSED - { 0, 1, 2, 3, 0 }, // All faces but a bottom have external normals - { 0, 1, 4, 0, 4 }, - { 1, 2, 4, 1, 4 }, - { 2, 3, 4, 2, 4 }, - { 3, 0, 4, 3, 4 }}; -static int Pyramid_RE [5][5] = { // REVERSED -> FORWARD (EXTERNAL) - { 0, 3, 2, 1, 0 }, // All faces but a bottom have external normals - { 0, 1, 4, 0, 4 }, - { 1, 2, 4, 1, 4 }, - { 2, 3, 4, 2, 4 }, - { 3, 0, 4, 3, 4 }}; -static int Pyramid_nbN [] = { 4, 3, 3, 3, 3 }; - -/* -// + N4 -// /|\ -// / | \ -// / | \ -// / | \ -// N3 +---------+ N5 -// | | | -// | + N1 | -// | / \ | PENTAHEDRON -// | / \ | -// | / \ | -// |/ \| -// N0 +---------+ N2 -*/ -static int Penta_F [5][5] = { // FORWARD - { 0, 1, 2, 0, 0 }, // Top face has an internal normal, other - external - { 3, 4, 5, 3, 3 }, // 0 is bottom, 1 is top face - { 0, 2, 5, 3, 0 }, - { 1, 4, 5, 2, 1 }, - { 0, 3, 4, 1, 0 }}; -static int Penta_R [5][5] = { // REVERSED - { 0, 1, 2, 0, 0 }, // Bottom face has an internal normal, other - external - { 3, 4, 5, 3, 3 }, // 0 is bottom, 1 is top face - { 0, 3, 5, 2, 0 }, - { 1, 2, 5, 4, 1 }, - { 0, 1, 4, 3, 0 }}; -static int Penta_FE [5][5] = { // FORWARD -> EXTERNAL - { 0, 1, 2, 0, 0 }, - { 3, 5, 4, 3, 3 }, - { 0, 2, 5, 3, 0 }, - { 1, 4, 5, 2, 1 }, - { 0, 3, 4, 1, 0 }}; -static int Penta_RE [5][5] = { // REVERSED -> EXTERNAL - { 0, 2, 1, 0, 0 }, - { 3, 4, 5, 3, 3 }, - { 0, 3, 5, 2, 0 }, - { 1, 2, 5, 4, 1 }, - { 0, 1, 4, 3, 0 }}; -static int Penta_nbN [] = { 3, 3, 4, 4, 4 }; - -/* -// N5+----------+N6 -// /| /| -// / | / | -// / | / | -// N4+----------+N7 | -// | | | | HEXAHEDRON -// | | | | -// | | | | -// | N1+------|---+N2 -// | / | / -// | / | / -// |/ |/ -// N0+----------+N3 -*/ -static int Hexa_F [6][5] = { // FORWARD - { 0, 1, 2, 3, 0 }, // opposite faces are neighbouring, - { 4, 5, 6, 7, 4 }, // odd face(1,3,5) normal is internal, even(0,2,4) - external - { 1, 0, 4, 5, 1 }, // same index nodes of opposite faces are linked - { 2, 3, 7, 6, 2 }, - { 0, 3, 7, 4, 0 }, - { 1, 2, 6, 5, 1 }}; -// static int Hexa_R [6][5] = { // REVERSED -// { 0, 3, 2, 1, 0 }, // opposite faces are neighbouring, -// { 4, 7, 6, 5, 4 }, // odd face(1,3,5) normal is external, even(0,2,4) - internal -// { 1, 5, 4, 0, 1 }, // same index nodes of opposite faces are linked -// { 2, 6, 7, 3, 2 }, -// { 0, 4, 7, 3, 0 }, -// { 1, 5, 6, 2, 1 }}; -static int Hexa_FE [6][5] = { // FORWARD -> EXTERNAL - { 0, 1, 2, 3, 0 } , // opposite faces are neighbouring, - { 4, 7, 6, 5, 4 }, // all face normals are external, - { 0, 4, 5, 1, 0 }, // links in opposite faces: 0-0, 1-3, 2-2, 3-1 - { 3, 2, 6, 7, 3 }, - { 0, 3, 7, 4, 0 }, - { 1, 5, 6, 2, 1 }}; -static int Hexa_RE [6][5] = { // REVERSED -> EXTERNAL - { 0, 3, 2, 1, 0 }, // opposite faces are neighbouring, - { 4, 5, 6, 7, 4 }, // all face normals are external, - { 0, 1, 5, 4, 0 }, // links in opposite faces: 0-0, 1-3, 2-2, 3-1 - { 3, 7, 6, 2, 3 }, - { 0, 4, 7, 3, 0 }, - { 1, 2, 6, 5, 1 }}; -static int Hexa_nbN [] = { 4, 4, 4, 4, 4, 4 }; - -// ======================================================== -// to perform some calculations without linkage to CASCADE -// ======================================================== -struct XYZ { - double x; - double y; - double z; - XYZ() { x = 0; y = 0; z = 0; } - XYZ( double X, double Y, double Z ) { x = X; y = Y; z = Z; } - XYZ( const XYZ& other ) { x = other.x; y = other.y; z = other.z; } - XYZ( const SMDS_MeshNode* n ) { x = n->X(); y = n->Y(); z = n->Z(); } - XYZ operator-( const XYZ& other ); - XYZ Crossed( const XYZ& other ); - double Dot( const XYZ& other ); - double Magnitude(); -}; -XYZ XYZ::operator-( const XYZ& Right ) { - return XYZ(x - Right.x, y - Right.y, z - Right.z); -} -XYZ XYZ::Crossed( const XYZ& Right ) { - return XYZ (y * Right.z - z * Right.y, - z * Right.x - x * Right.z, - x * Right.y - y * Right.x); -} -double XYZ::Dot( const XYZ& Other ) { - return(x * Other.x + y * Other.y + z * Other.z); -} -double XYZ::Magnitude() { - return sqrt (x * x + y * y + z * z); -} - -//======================================================================= -//function : SMDS_VolumeTool -//purpose : -//======================================================================= - -SMDS_VolumeTool::SMDS_VolumeTool () - : myVolume( 0 ), - myPolyedre( 0 ), - myVolForward( true ), - myNbFaces( 0 ), - myVolumeNbNodes( 0 ), - myVolumeNodes( NULL ), - myExternalFaces( false ), - myFaceNbNodes( 0 ), - myCurFace( -1 ), - myFaceNodeIndices( NULL ), - myFaceNodes( NULL ) -{ -} - -//======================================================================= -//function : SMDS_VolumeTool -//purpose : -//======================================================================= - -SMDS_VolumeTool::SMDS_VolumeTool (const SMDS_MeshElement* theVolume) - : myVolume( 0 ), - myPolyedre( 0 ), - myVolForward( true ), - myNbFaces( 0 ), - myVolumeNbNodes( 0 ), - myVolumeNodes( NULL ), - myExternalFaces( false ), - myFaceNbNodes( 0 ), - myCurFace( -1 ), - myFaceNodeIndices( NULL ), - myFaceNodes( NULL ) -{ - Set( theVolume ); -} - -//======================================================================= -//function : SMDS_VolumeTool -//purpose : -//======================================================================= - -SMDS_VolumeTool::~SMDS_VolumeTool() -{ - if (myVolumeNodes != NULL) { - delete [] myVolumeNodes; - myVolumeNodes = NULL; - } - if (myFaceNodes != NULL) { - delete [] myFaceNodes; - myFaceNodes = NULL; - } -} - -//======================================================================= -//function : SetVolume -//purpose : Set volume to iterate on -//======================================================================= - -bool SMDS_VolumeTool::Set (const SMDS_MeshElement* theVolume) -{ - myVolume = 0; - myPolyedre = 0; - - myVolForward = true; - myNbFaces = 0; - myVolumeNbNodes = 0; - if (myVolumeNodes != NULL) { - delete [] myVolumeNodes; - myVolumeNodes = NULL; - } - - myExternalFaces = false; - myFaceNbNodes = 0; - - myCurFace = -1; - myFaceNodeIndices = NULL; - if (myFaceNodes != NULL) { - delete [] myFaceNodes; - myFaceNodes = NULL; - } - - if ( theVolume && theVolume->GetType() == SMDSAbs_Volume ) - { - myVolume = theVolume; - - myNbFaces = theVolume->NbFaces(); - myVolumeNbNodes = theVolume->NbNodes(); - - // set volume nodes - int iNode = 0; - myVolumeNodes = new const SMDS_MeshNode* [myVolumeNbNodes]; - SMDS_ElemIteratorPtr nodeIt = myVolume->nodesIterator(); - while ( nodeIt->more() ) { - myVolumeNodes[ iNode++ ] = static_cast( nodeIt->next() ); - } - - if (myVolume->IsPoly()) { - myPolyedre = static_cast( myVolume ); - if (!myPolyedre) { - MESSAGE("Warning: bad volumic element"); - return false; - } - } else { - switch ( myVolumeNbNodes ) { - case 4: - case 5: - case 6: - case 8: { - // define volume orientation - XYZ botNormal; - GetFaceNormal( 0, botNormal.x, botNormal.y, botNormal.z ); - const SMDS_MeshNode* topNode = myVolumeNodes[ myVolumeNbNodes - 1 ]; - const SMDS_MeshNode* botNode = myVolumeNodes[ 0 ]; - XYZ upDir (topNode->X() - botNode->X(), - topNode->Y() - botNode->Y(), - topNode->Z() - botNode->Z() ); - myVolForward = ( botNormal.Dot( upDir ) < 0 ); - break; - } - default: - break; - } - } - } - return ( myVolume != 0 ); -} - -//======================================================================= -//function : Inverse -//purpose : Inverse volume -//======================================================================= - -#define SWAP_NODES(nodes,i1,i2) \ -{ \ - const SMDS_MeshNode* tmp = nodes[ i1 ]; \ - nodes[ i1 ] = nodes[ i2 ]; \ - nodes[ i2 ] = tmp; \ -} -void SMDS_VolumeTool::Inverse () -{ - if ( !myVolume ) return; - - if (myVolume->IsPoly()) { - MESSAGE("Warning: attempt to inverse polyhedral volume"); - return; - } - - myVolForward = !myVolForward; - myCurFace = -1; - - // inverse top and bottom faces - switch ( myVolumeNbNodes ) { - case 4: - SWAP_NODES( myVolumeNodes, 1, 2 ); - break; - case 5: - SWAP_NODES( myVolumeNodes, 1, 3 ); - break; - case 6: - SWAP_NODES( myVolumeNodes, 1, 2 ); - SWAP_NODES( myVolumeNodes, 4, 5 ); - break; - case 8: - SWAP_NODES( myVolumeNodes, 1, 3 ); - SWAP_NODES( myVolumeNodes, 5, 7 ); - break; - default:; - } -} - -//======================================================================= -//function : GetSize -//purpose : Return element volume -//======================================================================= - -double SMDS_VolumeTool::GetSize() const -{ - return 0; -} - -//======================================================================= -//function : GetBaryCenter -//purpose : -//======================================================================= - -bool SMDS_VolumeTool::GetBaryCenter(double & X, double & Y, double & Z) const -{ - X = Y = Z = 0.; - if ( !myVolume ) - return false; - - for ( int i = 0; i < myVolumeNbNodes; i++ ) { - X += myVolumeNodes[ i ]->X(); - Y += myVolumeNodes[ i ]->Y(); - Z += myVolumeNodes[ i ]->Z(); - } - X /= myVolumeNbNodes; - Y /= myVolumeNbNodes; - Z /= myVolumeNbNodes; - - return true; -} - -//======================================================================= -//function : SetExternalNormal -//purpose : Node order will be so that faces normals are external -//======================================================================= - -void SMDS_VolumeTool::SetExternalNormal () -{ - myExternalFaces = true; - myCurFace = -1; -} - -//======================================================================= -//function : NbFaceNodes -//purpose : Return number of nodes in the array of face nodes -//======================================================================= - -int SMDS_VolumeTool::NbFaceNodes( int faceIndex ) -{ - if ( !setFace( faceIndex )) - return 0; - return myFaceNbNodes; -} - -//======================================================================= -//function : GetFaceNodes -//purpose : Return pointer to the array of face nodes. -// To comfort link iteration, the array -// length == NbFaceNodes( faceIndex ) + 1 and -// the last node == the first one. -//======================================================================= - -const SMDS_MeshNode** SMDS_VolumeTool::GetFaceNodes( int faceIndex ) -{ - if ( !setFace( faceIndex )) - return 0; - return myFaceNodes; -} - -//======================================================================= -//function : GetFaceNodesIndices -//purpose : Return pointer to the array of face nodes indices -// To comfort link iteration, the array -// length == NbFaceNodes( faceIndex ) + 1 and -// the last node index == the first one. -//======================================================================= - -const int* SMDS_VolumeTool::GetFaceNodesIndices( int faceIndex ) -{ - if (myVolume->IsPoly()) { - MESSAGE("Warning: attempt to obtain FaceNodesIndices of polyhedral volume"); - return NULL; - } - if ( !setFace( faceIndex )) - return 0; - return myFaceNodeIndices; -} - -//======================================================================= -//function : GetFaceNodes -//purpose : Return a set of face nodes. -//======================================================================= - -bool SMDS_VolumeTool::GetFaceNodes (int faceIndex, - set& theFaceNodes ) -{ - if ( !setFace( faceIndex )) - return false; - - theFaceNodes.clear(); - int iNode, nbNode = myFaceNbNodes; - for ( iNode = 0; iNode < nbNode; iNode++ ) - theFaceNodes.insert( myFaceNodes[ iNode ]); - - return true; -} - -//======================================================================= -//function : IsFaceExternal -//purpose : Check normal orientation of a returned face -//======================================================================= - -bool SMDS_VolumeTool::IsFaceExternal( int faceIndex ) -{ - if ( myExternalFaces || !myVolume ) - return true; - - if (myVolume->IsPoly()) { - XYZ aNormal, baryCenter, p0 (myPolyedre->GetFaceNode(faceIndex + 1, 1)); - GetFaceNormal(faceIndex, aNormal.x, aNormal.y, aNormal.z); - GetBaryCenter(baryCenter.x, baryCenter.y, baryCenter.z); - XYZ insideVec (baryCenter - p0); - if (insideVec.Dot(aNormal) > 0) - return false; - return true; - } - - switch ( myVolumeNbNodes ) { - case 4: - case 5: - // only the bottom of a reversed tetrahedron can be internal - return ( myVolForward || faceIndex != 0 ); - case 6: - // in a forward pentahedron, the top is internal, in a reversed one - bottom - return ( myVolForward ? faceIndex != 1 : faceIndex != 0 ); - case 8: { - // in a forward hexahedron, even face normal is external, odd - internal - bool odd = faceIndex % 2; - return ( myVolForward ? !odd : odd ); - } - default:; - } - return false; -} - -//======================================================================= -//function : GetFaceNormal -//purpose : Return a normal to a face -//======================================================================= - -bool SMDS_VolumeTool::GetFaceNormal (int faceIndex, double & X, double & Y, double & Z) -{ - if ( !setFace( faceIndex )) - return false; - - XYZ p1 ( myFaceNodes[0] ); - XYZ p2 ( myFaceNodes[1] ); - XYZ p3 ( myFaceNodes[2] ); - XYZ aVec12( p2 - p1 ); - XYZ aVec13( p3 - p1 ); - XYZ cross = aVec12.Crossed( aVec13 ); - - if ( myFaceNbNodes == 4 ) { - XYZ p4 ( myFaceNodes[3] ); - XYZ aVec14( p4 - p1 ); - XYZ cross2 = aVec13.Crossed( aVec14 ); - cross.x += cross2.x; - cross.y += cross2.y; - cross.z += cross2.z; - } - - double size = cross.Magnitude(); - if ( size <= DBL_MIN ) - return false; - - X = cross.x / size; - Y = cross.y / size; - Z = cross.z / size; - - return true; -} - -//======================================================================= -//function : GetFaceArea -//purpose : Return face area -//======================================================================= - -double SMDS_VolumeTool::GetFaceArea( int faceIndex ) -{ - if (myVolume->IsPoly()) { - MESSAGE("Warning: attempt to obtain area of a face of polyhedral volume"); - return 0; - } - - if ( !setFace( faceIndex )) - return 0; - - XYZ p1 ( myFaceNodes[0] ); - XYZ p2 ( myFaceNodes[1] ); - XYZ p3 ( myFaceNodes[2] ); - XYZ aVec12( p2 - p1 ); - XYZ aVec13( p3 - p1 ); - double area = aVec12.Crossed( aVec13 ).Magnitude() * 0.5; - - if ( myFaceNbNodes == 4 ) { - XYZ p4 ( myFaceNodes[3] ); - XYZ aVec14( p4 - p1 ); - area += aVec14.Crossed( aVec13 ).Magnitude() * 0.5; - } - return area; -} - -//======================================================================= -//function : GetOppFaceIndex -//purpose : Return index of the opposite face if it exists, else -1. -//======================================================================= - -int SMDS_VolumeTool::GetOppFaceIndex( int faceIndex ) const -{ - int ind = -1; - if (myVolume->IsPoly()) { - MESSAGE("Warning: attempt to obtain opposite face on polyhedral volume"); - return ind; - } - - if ( faceIndex >= 0 && faceIndex < NbFaces() ) { - switch ( myVolumeNbNodes ) { - case 6: - if ( faceIndex == 0 || faceIndex == 1 ) - ind = 1 - faceIndex; - break; - case 8: - ind = faceIndex + ( faceIndex % 2 ? -1 : 1 ); - break; - default:; - } - } - return ind; -} - -//======================================================================= -//function : IsLinked -//purpose : return true if theNode1 is linked with theNode2 -//======================================================================= - -bool SMDS_VolumeTool::IsLinked (const SMDS_MeshNode* theNode1, - const SMDS_MeshNode* theNode2) const -{ - if ( !myVolume ) - return false; - - if (myVolume->IsPoly()) { - if (!myPolyedre) { - MESSAGE("Warning: bad volumic element"); - return false; - } - bool isLinked = false; - int iface; - for (iface = 1; iface <= myNbFaces && !isLinked; iface++) { - int inode, nbFaceNodes = myPolyedre->NbFaceNodes(iface); - - for (inode = 1; inode <= nbFaceNodes && !isLinked; inode++) { - const SMDS_MeshNode* curNode = myPolyedre->GetFaceNode(iface, inode); - - if (curNode == theNode1 || curNode == theNode2) { - int inextnode = (inode == nbFaceNodes) ? 1 : inode + 1; - const SMDS_MeshNode* nextNode = myPolyedre->GetFaceNode(iface, inextnode); - - if ((curNode == theNode1 && nextNode == theNode2) || - (curNode == theNode2 && nextNode == theNode1)) { - isLinked = true; - } - } - } - } - return isLinked; - } - - // find nodes indices - int i1 = -1, i2 = -1; - for ( int i = 0; i < myVolumeNbNodes; i++ ) { - if ( myVolumeNodes[ i ] == theNode1 ) - i1 = i; - else if ( myVolumeNodes[ i ] == theNode2 ) - i2 = i; - } - return IsLinked( i1, i2 ); -} - -//======================================================================= -//function : IsLinked -//purpose : return true if the node with theNode1Index is linked -// with the node with theNode2Index -//======================================================================= - -bool SMDS_VolumeTool::IsLinked (const int theNode1Index, - const int theNode2Index) const -{ - if (myVolume->IsPoly()) { - return IsLinked(myVolumeNodes[theNode1Index], myVolumeNodes[theNode2Index]); - } - - int minInd = theNode1Index < theNode2Index ? theNode1Index : theNode2Index; - int maxInd = theNode1Index < theNode2Index ? theNode2Index : theNode1Index; - - if ( minInd < 0 || maxInd > myVolumeNbNodes - 1 || maxInd == minInd ) - return false; - - switch ( myVolumeNbNodes ) { - case 4: - return true; - case 5: - if ( maxInd == 4 ) - return true; - switch ( maxInd - minInd ) { - case 1: - case 3: return true; - default:; - } - break; - case 6: - switch ( maxInd - minInd ) { - case 1: return minInd != 2; - case 2: return minInd == 0 || minInd == 3; - case 3: return true; - default:; - } - break; - case 8: - switch ( maxInd - minInd ) { - case 1: return minInd != 3; - case 3: return minInd == 0 || minInd == 4; - case 4: return true; - default:; - } - break; - default:; - } - return false; -} - -//======================================================================= -//function : GetNodeIndex -//purpose : Return an index of theNode -//======================================================================= - -int SMDS_VolumeTool::GetNodeIndex(const SMDS_MeshNode* theNode) const -{ - if ( myVolume ) { - for ( int i = 0; i < myVolumeNbNodes; i++ ) { - if ( myVolumeNodes[ i ] == theNode ) - return i; - } - } - return -1; -} - -//======================================================================= -//function : IsFreeFace -//purpose : check that only one volume is build on the face nodes -//======================================================================= - -bool SMDS_VolumeTool::IsFreeFace( int faceIndex ) -{ - const int free = true; - - if (!setFace( faceIndex )) - return !free; - - const SMDS_MeshNode** nodes = GetFaceNodes( faceIndex ); - int nbFaceNodes = myFaceNbNodes; - - // evaluate nb of face nodes shared by other volume - int maxNbShared = -1; - typedef map< const SMDS_MeshElement*, int > TElemIntMap; - TElemIntMap volNbShared; - TElemIntMap::iterator vNbIt; - for ( int iNode = 0; iNode < nbFaceNodes; iNode++ ) - { - const SMDS_MeshNode* n = nodes[ iNode ]; - SMDS_ElemIteratorPtr eIt = n->GetInverseElementIterator(); - while ( eIt->more() ) { - const SMDS_MeshElement* elem = eIt->next(); - if ( elem != myVolume && elem->GetType() == SMDSAbs_Volume ) { - int nbShared = 1; - vNbIt = volNbShared.find( elem ); - if ( vNbIt == volNbShared.end() ) - volNbShared.insert ( TElemIntMap::value_type( elem, nbShared )); - else - nbShared = ++(*vNbIt).second; - if ( nbShared > maxNbShared ) - maxNbShared = nbShared; - } - } - } - if ( maxNbShared < 3 ) - return free; // is free - - // find volumes laying on the opposite side of the face - // and sharing all nodes - XYZ intNormal; // internal normal - GetFaceNormal( faceIndex, intNormal.x, intNormal.y, intNormal.z ); - if ( IsFaceExternal( faceIndex )) - intNormal = XYZ( -intNormal.x, -intNormal.y, -intNormal.z ); - XYZ p0 ( nodes[0] ), baryCenter; - for ( vNbIt = volNbShared.begin(); vNbIt != volNbShared.end(); vNbIt++ ) - { - int nbShared = (*vNbIt).second; - if ( nbShared >= 3 ) { - SMDS_VolumeTool volume( (*vNbIt).first ); - volume.GetBaryCenter( baryCenter.x, baryCenter.y, baryCenter.z ); - XYZ intNormal2( baryCenter - p0 ); - if ( intNormal.Dot( intNormal2 ) < 0 ) - continue; // opposite side - } - // remove a volume from volNbShared map - volNbShared.erase( vNbIt ); - } - // here volNbShared contains only volumes laying on the - // opposite side of the face - if ( volNbShared.empty() ) - return free; // is free - - // check if the whole area of a face is shared - bool isShared[] = { false, false, false, false }; // 4 triangle parts of a quadrangle - for ( vNbIt = volNbShared.begin(); vNbIt != volNbShared.end(); vNbIt++ ) - { - SMDS_VolumeTool volume( (*vNbIt).first ); - bool prevLinkShared = false; - int nbSharedLinks = 0; - for ( int iNode = 0; iNode < nbFaceNodes; iNode++ ) - { - bool linkShared = volume.IsLinked( nodes[ iNode ], nodes[ iNode + 1] ); - if ( linkShared ) - nbSharedLinks++; - if ( linkShared && prevLinkShared && - volume.IsLinked( nodes[ iNode - 1 ], nodes[ iNode + 1] )) - isShared[ iNode ] = true; - prevLinkShared = linkShared; - } - if ( nbSharedLinks == nbFaceNodes ) - return !free; // is not free - if ( nbFaceNodes == 4 ) { - // check traingle parts 1 & 3 - if ( isShared[1] && isShared[3] ) - return !free; // is not free - // check triangle parts 0 & 2; - // 0 part could not be checked in the loop; check it here - if ( isShared[2] && prevLinkShared && - volume.IsLinked( nodes[ 0 ], nodes[ 1 ] ) && - volume.IsLinked( nodes[ 1 ], nodes[ 3 ] ) ) - return !free; // is not free - } - } - return free; -} - -//======================================================================= -//function : GetFaceIndex -//purpose : Return index of a face formed by theFaceNodes -//======================================================================= - -int SMDS_VolumeTool::GetFaceIndex( const set& theFaceNodes ) -{ - for ( int iFace = 0; iFace < myNbFaces; iFace++ ) { - const SMDS_MeshNode** nodes = GetFaceNodes( iFace ); - int nbFaceNodes = NbFaceNodes( iFace ); - set nodeSet; - for ( int iNode = 0; iNode < nbFaceNodes; iNode++ ) - nodeSet.insert( nodes[ iNode ] ); - if ( theFaceNodes == nodeSet ) - return iFace; - } - return -1; -} - -//======================================================================= -//function : GetFaceIndex -//purpose : Return index of a face formed by theFaceNodes -//======================================================================= - -/*int SMDS_VolumeTool::GetFaceIndex( const set& theFaceNodesIndices ) -{ - for ( int iFace = 0; iFace < myNbFaces; iFace++ ) { - const int* nodes = GetFaceNodesIndices( iFace ); - int nbFaceNodes = NbFaceNodes( iFace ); - set nodeSet; - for ( int iNode = 0; iNode < nbFaceNodes; iNode++ ) - nodeSet.insert( nodes[ iNode ] ); - if ( theFaceNodesIndices == nodeSet ) - return iFace; - } - return -1; -}*/ - -//======================================================================= -//function : setFace -//purpose : -//======================================================================= - -bool SMDS_VolumeTool::setFace( int faceIndex ) -{ - if ( !myVolume ) - return false; - - if ( myCurFace == faceIndex ) - return true; - - myCurFace = -1; - - if ( faceIndex < 0 || faceIndex >= NbFaces() ) - return false; - - if (myFaceNodes != NULL) { - delete [] myFaceNodes; - myFaceNodes = NULL; - } - - if (myVolume->IsPoly()) { - if (!myPolyedre) { - MESSAGE("Warning: bad volumic element"); - return false; - } - - // check orientation - bool isGoodOri = true; - if (myExternalFaces) { - // get natural orientation - XYZ aNormal, baryCenter, p0 (myPolyedre->GetFaceNode(faceIndex + 1, 1)); - SMDS_VolumeTool vTool (myPolyedre); - vTool.GetFaceNormal(faceIndex, aNormal.x, aNormal.y, aNormal.z); - vTool.GetBaryCenter(baryCenter.x, baryCenter.y, baryCenter.z); - XYZ insideVec (baryCenter - p0); - if (insideVec.Dot(aNormal) > 0) - isGoodOri = false; - } - - // set face nodes - int iNode; - myFaceNbNodes = myPolyedre->NbFaceNodes(faceIndex + 1); - myFaceNodes = new const SMDS_MeshNode* [myFaceNbNodes + 1]; - if (isGoodOri) { - for ( iNode = 0; iNode < myFaceNbNodes; iNode++ ) - myFaceNodes[ iNode ] = myPolyedre->GetFaceNode(faceIndex + 1, iNode + 1); - } else { - for ( iNode = 0; iNode < myFaceNbNodes; iNode++ ) - myFaceNodes[ iNode ] = myPolyedre->GetFaceNode(faceIndex + 1, myFaceNbNodes - iNode); - } - myFaceNodes[ myFaceNbNodes ] = myFaceNodes[ 0 ]; // last = first - - } else { - // choose face node indices - switch ( myVolumeNbNodes ) { - case 4: - myFaceNbNodes = Tetra_nbN[ faceIndex ]; - if ( myExternalFaces ) - myFaceNodeIndices = myVolForward ? Tetra_F[ faceIndex ] : Tetra_RE[ faceIndex ]; - else - myFaceNodeIndices = myVolForward ? Tetra_F[ faceIndex ] : Tetra_R[ faceIndex ]; - break; - case 5: - myFaceNbNodes = Pyramid_nbN[ faceIndex ]; - if ( myExternalFaces ) - myFaceNodeIndices = myVolForward ? Pyramid_F[ faceIndex ] : Pyramid_RE[ faceIndex ]; - else - myFaceNodeIndices = myVolForward ? Pyramid_F[ faceIndex ] : Pyramid_R[ faceIndex ]; - break; - case 6: - myFaceNbNodes = Penta_nbN[ faceIndex ]; - if ( myExternalFaces ) - myFaceNodeIndices = myVolForward ? Penta_FE[ faceIndex ] : Penta_RE[ faceIndex ]; - else - myFaceNodeIndices = myVolForward ? Penta_F[ faceIndex ] : Penta_R[ faceIndex ]; - break; - case 8: - myFaceNbNodes = Hexa_nbN[ faceIndex ]; - if ( myExternalFaces ) - myFaceNodeIndices = myVolForward ? Hexa_FE[ faceIndex ] : Hexa_RE[ faceIndex ]; - else - myFaceNodeIndices = Hexa_F[ faceIndex ]; - break; - default: - return false; - } - - // set face nodes - myFaceNodes = new const SMDS_MeshNode* [myFaceNbNodes + 1]; - for ( int iNode = 0; iNode < myFaceNbNodes; iNode++ ) - myFaceNodes[ iNode ] = myVolumeNodes[ myFaceNodeIndices[ iNode ]]; - myFaceNodes[ myFaceNbNodes ] = myFaceNodes[ 0 ]; - } - - myCurFace = faceIndex; - - return true; -} - -//======================================================================= -//function : GetType -//purpose : return VolumeType by nb of nodes in a volume -//======================================================================= - -SMDS_VolumeTool::VolumeType SMDS_VolumeTool::GetType(int nbNodes) -{ - switch ( nbNodes ) { - case 4: return TETRA; - case 5: return PYRAM; - case 6: return PENTA; - case 8: return HEXA; - default:return UNKNOWN; - } -} - -//======================================================================= -//function : NbFaces -//purpose : return nb of faces by volume type -//======================================================================= - -int SMDS_VolumeTool::NbFaces( VolumeType type ) -{ - switch ( type ) { - case TETRA: return 4; - case PYRAM: return 5; - case PENTA: return 5; - case HEXA : return 6; - default: return 0; - } -} - -//======================================================================= -//function : GetFaceNodesIndices -//purpose : Return the array of face nodes indices -// To comfort link iteration, the array -// length == NbFaceNodes( faceIndex ) + 1 and -// the last node index == the first one. -//======================================================================= - -const int* SMDS_VolumeTool::GetFaceNodesIndices(VolumeType type, - int faceIndex, - bool external) -{ - switch ( type ) { - case TETRA: return Tetra_F[ faceIndex ]; - case PYRAM: return Pyramid_F[ faceIndex ]; - case PENTA: return external ? Penta_FE[ faceIndex ] : Penta_F[ faceIndex ]; - case HEXA: return external ? Hexa_FE[ faceIndex ] : Hexa_F[ faceIndex ]; - default:; - } - return 0; -} - -//======================================================================= -//function : NbFaceNodes -//purpose : Return number of nodes in the array of face nodes -//======================================================================= - -int SMDS_VolumeTool::NbFaceNodes(VolumeType type, - int faceIndex ) -{ - switch ( type ) { - case TETRA: return Tetra_nbN[ faceIndex ]; - case PYRAM: return Pyramid_nbN[ faceIndex ]; - case PENTA: return Penta_nbN[ faceIndex ]; - case HEXA: return Hexa_nbN[ faceIndex ]; - default:; - } - return 0; -} - diff --git a/src/SMDS/SMDS_VolumeTool.hxx b/src/SMDS/SMDS_VolumeTool.hxx deleted file mode 100644 index 89732b1da..000000000 --- a/src/SMDS/SMDS_VolumeTool.hxx +++ /dev/null @@ -1,251 +0,0 @@ -// SMESH SMDS : implementaion of Salome mesh data structure -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMDS_VolumeTool.hxx -// Module : SMESH -// Created : Tue Jul 13 11:27:17 2004 -// Author : Edward AGAPOV (eap) - - -#ifndef SMDS_VolumeTool_HeaderFile -#define SMDS_VolumeTool_HeaderFile - -class SMDS_MeshElement; -class SMDS_MeshNode; -class SMDS_PolyhedralVolumeOfNodes; - -#include -#include - -// ========================================================================= -// -// Class providing topological and other information about SMDS_MeshVolume: -// allows iteration on faces or, to be precise, on nodes of volume sides; -// provides info on nodes connection etc. -// -// ========================================================================= - -class SMDS_VolumeTool -{ - public: - - SMDS_VolumeTool (); - ~SMDS_VolumeTool (); - SMDS_VolumeTool (const SMDS_MeshElement* theVolume); - - bool Set (const SMDS_MeshElement* theVolume); - // Set volume. - // Return false if theVolume is not of type SMDSAbs_Volume - - // ----------------------- - // general info - // ----------------------- - - bool IsForward() const { return myVolForward; } - // Check volume orientation. can be changed by Inverse(). - // See node order of forward volumes at the file bottom - - void Inverse(); - // Change nodes order as if the volume changes its orientation: - // top and bottom faces are reversed. - // Result of IsForward() and methods returning nodes change - - const SMDS_MeshNode** GetNodes() { return myVolumeNodes; } - // Return array of volume nodes - - int NbNodes() { return myVolumeNbNodes; } - // Return array of volume nodes - - double GetSize() const; - // Return element volume - - bool GetBaryCenter (double & X, double & Y, double & Z) const; - - - // ----------------------- - // info on node connection - // ----------------------- - - bool IsLinked (const SMDS_MeshNode* theNode1, - const SMDS_MeshNode* theNode2) const; - // Return true if theNode1 is linked with theNode2. - - bool IsLinked (const int theNode1Index, - const int theNode2Index) const; - // Return true if the node with theNode1Index is linked - // with the node with theNode2Index - - int GetNodeIndex(const SMDS_MeshNode* theNode) const; - // Return an index of theNode - - // ------------- - // info on faces - // ------------- - - void SetExternalNormal (); - // Node order in faces will be so that faces normals are external. - - int NbFaces() const { return myNbFaces; } - // Return number of faces of the volume. In the following - // methods 0 <= faceIndex < NbFaces() - - int NbFaceNodes( int faceIndex ); - // Return number of nodes in the array of face nodes - - const int* GetFaceNodesIndices( int faceIndex ); - // Return the array of face nodes indices - // To comfort link iteration, the array - // length == NbFaceNodes( faceIndex ) + 1 and - // the last node index == the first one. - - const SMDS_MeshNode** GetFaceNodes( int faceIndex ); - // Return the array of face nodes. - // To comfort link iteration, the array - // length == NbFaceNodes( faceIndex ) + 1 and - // the last node == the first one. - // WARNING: do not modify the array, some methods - // work basing on its contents - - bool GetFaceNodes (int faceIndex, - std::set& theFaceNodes ); - // Return a set of face nodes. - - bool IsFaceExternal( int faceIndex ); - // Check normal orientation of a face. - // SetExternalNormal() is taken into account. - - bool IsFreeFace( int faceIndex ); - // Check that all volumes built on the face nodes lays on one side - - bool GetFaceNormal (int faceIndex, double & X, double & Y, double & Z); - // Return a normal to a face - - double GetFaceArea( int faceIndex ); - // Return face area - - int GetOppFaceIndex( int faceIndex ) const; - // Return index of the opposite face if it exists, else -1. - - int GetFaceIndex( const std::set& theFaceNodes ); - // Return index of a face formed by theFaceNodes. - // Return -1 if a face not found - - //int GetFaceIndex( const std::set& theFaceNodesIndices ); - // Return index of a face formed by theFaceNodesIndices - // Return -1 if a face not found - - // ------------------------ - // static methods for faces - // ------------------------ - - enum VolumeType { UNKNOWN, TETRA, PYRAM, PENTA, HEXA }; - - static VolumeType GetType(int nbNodes); - // return VolumeType by nb of nodes in a volume - - static int NbFaces( VolumeType type ); - // return nb of faces by volume type - - static const int* GetFaceNodesIndices(VolumeType type, - int faceIndex, - bool external); - // Return the array of face nodes indices - // To comfort link iteration, the array - // length == NbFaceNodes( faceIndex ) + 1 and - // the last node index == the first one. - - static int NbFaceNodes(VolumeType type, - int faceIndex ); - // Return number of nodes in the array of face nodes - - private: - - bool setFace( int faceIndex ); - - const SMDS_MeshElement* myVolume; - const SMDS_PolyhedralVolumeOfNodes* myPolyedre; - - bool myVolForward; - int myNbFaces; - int myVolumeNbNodes; - const SMDS_MeshNode** myVolumeNodes; - - bool myExternalFaces; - - int myCurFace; - int myFaceNbNodes; - int* myFaceNodeIndices; - const SMDS_MeshNode** myFaceNodes; - -}; -#endif - - -/////////////////////////////////////////////////////////////////////////// -// -// ORDER OF NODES OF FORWARD ELEMENT -// -/////////////////////////////////////////////////////////////////////////// -/* -// N3 -// + -// /|\ -// / | \ -// / | \ -// N0 +---|---+ N1 TETRAHEDRON -// \ | / -// \ | / -// \ | / -// \|/ -// + -// N2 - -// + N4 -// /|\ -// / | \ -// / | \ -// / | \ -// N3 +---------+ N5 -// | | | -// | + N1 | -// | / \ | PENTAHEDRON -// | / \ | -// | / \ | -// |/ \| -// N0 +---------+ N2 - -// N5+----------+N6 -// /| /| -// / | / | -// / | / | -// N4+----------+N7 | -// | | | | HEXAHEDRON -// | | | | -// | | | | -// | N1+------|---+N2 -// | / | / -// | / | / -// |/ |/ -// N0+----------+N3 -// -*/ diff --git a/src/SMESH/Makefile.in b/src/SMESH/Makefile.in deleted file mode 100644 index 5242617d5..000000000 --- a/src/SMESH/Makefile.in +++ /dev/null @@ -1,85 +0,0 @@ -# SMESH SMESH : implementaion of SMESH idl descriptions -# -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : Makefile.in -# Author : Paul RASCLE, EDF -# Module : SMESH -# $Header$ -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= \ - SMESH_Gen.hxx \ - SMESH_Mesh.hxx \ - SMESH_subMesh.hxx \ - SMESH_Hypothesis.hxx \ - SMESH_Algo.hxx \ - SMESH_1D_Algo.hxx \ - SMESH_2D_Algo.hxx \ - SMESH_3D_Algo.hxx \ - SMESH_Group.hxx \ - SMESH_MeshEditor.hxx \ - SMESH_Block.hxx \ - SMESH_Pattern.hxx - -EXPORT_PYSCRIPTS = - -# Libraries targets - -LIB= libSMESHimpl.la - -LIB_SRC = SMESH_Gen.cxx SMESH_Mesh.cxx SMESH_subMesh.cxx \ - SMESH_Hypothesis.cxx \ - SMESH_Algo.cxx \ - SMESH_1D_Algo.cxx \ - SMESH_2D_Algo.cxx \ - SMESH_3D_Algo.cxx \ - SMESH_Group.cxx \ - SMESH_MeshEditor.cxx \ - SMESH_Block.cxx \ - SMESH_Pattern.cxx \ - SMESH_HypoFilter.cxx - -LIB_SERVER_IDL = - -LIB_CLIENT_IDL = - -# Executables targets -BIN = -BIN_SRC = - -# additionnal information to compile and link file -CPPFLAGS+= $(OCC_INCLUDES) $(HDF5_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome \ - -I${MED_ROOT_DIR}/include/salome -I${GEOM_ROOT_DIR}/include/salome $(BOOST_CPPFLAGS) -CXXFLAGS+= $(OCC_CXXFLAGS) $(HDF5_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome \ - -I${MED_ROOT_DIR}/include/salome -I${GEOM_ROOT_DIR}/include/salome -LDFLAGS+= -L${KERNEL_ROOT_DIR}/lib/salome -L${GEOM_ROOT_DIR}/lib/salome -L${MED_ROOT_DIR}/lib/salome -lNMTTools -lSMESHDS -lMeshDriverDAT -lMeshDriverSTL -lMeshDriverMED -lMeshDriverUNV - -@CONCLUDE@ - diff --git a/src/SMESH/SMESH_1D_Algo.cxx b/src/SMESH/SMESH_1D_Algo.cxx deleted file mode 100644 index 37567a536..000000000 --- a/src/SMESH/SMESH_1D_Algo.cxx +++ /dev/null @@ -1,57 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_1D_Algo.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "SMESH_1D_Algo.hxx" -#include "SMESH_Gen.hxx" -#include "SMESH_subMesh.hxx" - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_1D_Algo::SMESH_1D_Algo(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_Algo(hypId, studyId, gen) -{ -// _compatibleHypothesis.push_back("hypothese_1D_bidon"); - _type = ALGO_1D; - gen->_map1D_Algo[hypId] = this; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_1D_Algo::~SMESH_1D_Algo() -{ -} - diff --git a/src/SMESH/SMESH_1D_Algo.hxx b/src/SMESH/SMESH_1D_Algo.hxx deleted file mode 100644 index 378ed7545..000000000 --- a/src/SMESH/SMESH_1D_Algo.hxx +++ /dev/null @@ -1,42 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_1D_Algo.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_1D_ALGO_HXX_ -#define _SMESH_1D_ALGO_HXX_ - -#include "SMESH_Algo.hxx" - -class SMESH_1D_Algo: - public SMESH_Algo -{ -public: - SMESH_1D_Algo(int hypId, int studyId, SMESH_Gen* gen); - virtual ~SMESH_1D_Algo(); -}; - -#endif diff --git a/src/SMESH/SMESH_2D_Algo.cxx b/src/SMESH/SMESH_2D_Algo.cxx deleted file mode 100644 index d1084f7d4..000000000 --- a/src/SMESH/SMESH_2D_Algo.cxx +++ /dev/null @@ -1,92 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_2D_Algo.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "SMESH_2D_Algo.hxx" -#include "SMESH_Gen.hxx" -#include "SMESH_subMesh.hxx" - -#include "utilities.h" - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_2D_Algo::SMESH_2D_Algo(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_Algo(hypId, studyId, gen) -{ -// _compatibleHypothesis.push_back("hypothese_2D_bidon"); - _type = ALGO_2D; - gen->_map2D_Algo[hypId] = this; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_2D_Algo::~SMESH_2D_Algo() -{ -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -int SMESH_2D_Algo::NumberOfWires(const TopoDS_Shape& S) -{ - int i = 0; - for (TopExp_Explorer exp(S,TopAbs_WIRE); exp.More(); exp.Next()) - i++; - return i; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -int SMESH_2D_Algo::NumberOfPoints(SMESH_Mesh& aMesh, const TopoDS_Wire& W) -{ - int nbPoints = 0; - for (TopExp_Explorer exp(W,TopAbs_EDGE); exp.More(); exp.Next()) - { - const TopoDS_Edge& E = TopoDS::Edge(exp.Current()); - int nb = aMesh.GetSubMesh(E)->GetSubMeshDS()->NbNodes(); - //SCRUTE(nb); - nbPoints += nb +1; // internal points plus 1 vertex of 2 (last point ?) - } - //SCRUTE(nbPoints); - return nbPoints; -} diff --git a/src/SMESH/SMESH_2D_Algo.hxx b/src/SMESH/SMESH_2D_Algo.hxx deleted file mode 100644 index 5c904e22e..000000000 --- a/src/SMESH/SMESH_2D_Algo.hxx +++ /dev/null @@ -1,46 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_2D_Algo.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_2D_ALGO_HXX_ -#define _SMESH_2D_ALGO_HXX_ - -#include "SMESH_Algo.hxx" -#include - -class SMESH_2D_Algo: - public SMESH_Algo -{ -public: - SMESH_2D_Algo(int hypId, int studyId, SMESH_Gen* gen); - virtual ~SMESH_2D_Algo(); - - int NumberOfWires(const TopoDS_Shape& S); - int NumberOfPoints(SMESH_Mesh& aMesh,const TopoDS_Wire& W); -}; - -#endif diff --git a/src/SMESH/SMESH_3D_Algo.cxx b/src/SMESH/SMESH_3D_Algo.cxx deleted file mode 100644 index d42680f62..000000000 --- a/src/SMESH/SMESH_3D_Algo.cxx +++ /dev/null @@ -1,58 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_3D_Algo.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "SMESH_3D_Algo.hxx" -#include "SMESH_Gen.hxx" -#include "SMESH_subMesh.hxx" - -#include "utilities.h" - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_3D_Algo::SMESH_3D_Algo(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_Algo(hypId, studyId, gen) -{ -// _compatibleHypothesis.push_back("hypothese_3D_bidon"); - _type = ALGO_3D; - gen->_map3D_Algo[hypId] = this; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_3D_Algo::~SMESH_3D_Algo() -{ -} diff --git a/src/SMESH/SMESH_3D_Algo.hxx b/src/SMESH/SMESH_3D_Algo.hxx deleted file mode 100644 index 62621ce3c..000000000 --- a/src/SMESH/SMESH_3D_Algo.hxx +++ /dev/null @@ -1,42 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_3D_Algo.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_3D_ALGO_HXX_ -#define _SMESH_3D_ALGO_HXX_ - -#include "SMESH_Algo.hxx" - -class SMESH_3D_Algo: - public SMESH_Algo -{ -public: - SMESH_3D_Algo(int hypId, int studyId, SMESH_Gen* gen); - virtual ~SMESH_3D_Algo(); -}; - -#endif diff --git a/src/SMESH/SMESH_Algo.cxx b/src/SMESH/SMESH_Algo.cxx deleted file mode 100644 index 60a55f3be..000000000 --- a/src/SMESH/SMESH_Algo.cxx +++ /dev/null @@ -1,149 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Algo.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "SMESH_Algo.hxx" -#include "SMESH_Gen.hxx" -#include "SMESH_Mesh.hxx" -#include "SMESH_HypoFilter.hxx" - -#include -#include -#include - -#include "utilities.h" - -#include -#include -#include - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Algo::SMESH_Algo(int hypId, int studyId, - SMESH_Gen * gen):SMESH_Hypothesis(hypId, studyId, gen) -{ -// _compatibleHypothesis.push_back("hypothese_bidon"); - _type = ALGO; - gen->_mapAlgo[hypId] = this; - - _onlyUnaryInput = _requireDescretBoundary = true; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Algo::~SMESH_Algo() -{ -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -const vector < string > &SMESH_Algo::GetCompatibleHypothesis() -{ - return _compatibleHypothesis; -} - -//============================================================================= -/*! - * List the hypothesis used by the algorithm associated to the shape. - * Hypothesis associated to father shape -are- taken into account (see - * GetAppliedHypothesis). Relevant hypothesis have a name (type) listed in - * the algorithm. This method could be surcharged by specific algorithms, in - * case of several hypothesis simultaneously applicable. - */ -//============================================================================= - -const list & SMESH_Algo::GetUsedHypothesis( - SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) -{ - _usedHypList.clear(); - if ( !_compatibleHypothesis.empty() ) - { - SMESH_HypoFilter filter( SMESH_HypoFilter::HasName( _compatibleHypothesis[0] )); - for ( int i = 1; i < _compatibleHypothesis.size(); ++i ) - filter.Or( filter.HasName( _compatibleHypothesis[ i ] )); - - aMesh.GetHypotheses( aShape, filter, _usedHypList, true ); - if ( _usedHypList.size() > 1 ) - _usedHypList.clear(); //only one compatible hypothesis allowed - } - return _usedHypList; -} - -//============================================================================= -/*! - * List the relevant hypothesis associated to the shape. Relevant hypothesis - * have a name (type) listed in the algorithm. Hypothesis associated to - * father shape -are not- taken into account (see GetUsedHypothesis) - */ -//============================================================================= - -const list & SMESH_Algo::GetAppliedHypothesis( - SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) -{ - _appliedHypList.clear(); - if ( !_compatibleHypothesis.empty() ) - { - SMESH_HypoFilter filter( SMESH_HypoFilter::HasName( _compatibleHypothesis[0] )); - for ( int i = 1; i < _compatibleHypothesis.size(); ++i ) - filter.Or( filter.HasName( _compatibleHypothesis[ i ] )); - - aMesh.GetHypotheses( aShape, filter, _appliedHypList, false ); - } - return _appliedHypList; -} - -//============================================================================= -/*! - * Compute length of an edge - */ -//============================================================================= - -double SMESH_Algo::EdgeLength(const TopoDS_Edge & E) -{ - double UMin = 0, UMax = 0; - TopLoc_Location L; - if (BRep_Tool::Degenerated(E)) - return 0; - Handle(Geom_Curve) C = BRep_Tool::Curve(E, L, UMin, UMax); - GeomAdaptor_Curve AdaptCurve(C); - GCPnts_AbscissaPoint gabs; - double length = gabs.Length(AdaptCurve, UMin, UMax); - return length; -} diff --git a/src/SMESH/SMESH_Algo.hxx b/src/SMESH/SMESH_Algo.hxx deleted file mode 100644 index 029dc6711..000000000 --- a/src/SMESH/SMESH_Algo.hxx +++ /dev/null @@ -1,90 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Algo.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_ALGO_HXX_ -#define _SMESH_ALGO_HXX_ - -#include "SMESH_Hypothesis.hxx" - -#include -#include - -#include -#include -#include - -class SMESH_Gen; -class SMESH_Mesh; - -class SMESH_Algo:public SMESH_Hypothesis -{ - public: - SMESH_Algo(int hypId, int studyId, SMESH_Gen * gen); - virtual ~ SMESH_Algo(); - - const std::vector < std::string > &GetCompatibleHypothesis(); - virtual bool CheckHypothesis(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - SMESH_Hypothesis::Hypothesis_Status& aStatus) = 0; - - virtual bool Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) = 0; - - virtual const std::list & - GetUsedHypothesis(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape); - - const list & - GetAppliedHypothesis(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape); - - static double EdgeLength(const TopoDS_Edge & E); - - public: - // algo features - - // SMESH_Hypothesis::GetDim(); - // 1 - dimention of target mesh - - bool OnlyUnaryInput() const { return _onlyUnaryInput; } - // 2 - is collection of tesselatable shapes inacceptable as input; - // "collection" means a shape containing shapes of dim equal - // to GetDim(). - // Algo which can process a collection shape should expect - // an input temporary shape that is neither MainShape nor - // its child. - - bool NeedDescretBoundary() const { return _requireDescretBoundary; } - // 3 - is a Dim-1 mesh prerequisite - - protected: - bool _onlyUnaryInput; - bool _requireDescretBoundary; - std::vector _compatibleHypothesis; - std::list _appliedHypList; - std::list _usedHypList; -}; - -#endif diff --git a/src/SMESH/SMESH_Block.cxx b/src/SMESH/SMESH_Block.cxx deleted file mode 100644 index 431208fcf..000000000 --- a/src/SMESH/SMESH_Block.cxx +++ /dev/null @@ -1,1391 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -// File : SMESH_Pattern.hxx -// Created : Mon Aug 2 10:30:00 2004 -// Author : Edward AGAPOV (eap) - -#include "SMESH_Block.hxx" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "SMDS_MeshNode.hxx" -#include "SMDS_MeshVolume.hxx" -#include "SMDS_VolumeTool.hxx" -#include "utilities.h" - -#include - -using namespace std; - -#define SQRT_FUNC 1 - -//======================================================================= -//function : SMESH_Block::TEdge::GetU -//purpose : -//======================================================================= - -double SMESH_Block::TEdge::GetU( const gp_XYZ& theParams ) const -{ - double u = theParams.Coord( myCoordInd ); - if ( myC3d.IsNull() ) // if mesh block - return u; - return ( 1 - u ) * myFirst + u * myLast; -} - -//======================================================================= -//function : SMESH_Block::TEdge::Point -//purpose : -//======================================================================= - -gp_XYZ SMESH_Block::TEdge::Point( const gp_XYZ& theParams ) const -{ - double u = GetU( theParams ); - - if ( myC3d.IsNull() ) // if mesh block - return myNodes[0] * ( 1 - u ) + myNodes[1] * u; - - gp_XYZ p = myC3d->Value( u ).XYZ(); - if ( myTrsf.Form() != gp_Identity ) - myTrsf.Transforms( p ); - return p; -} - -//======================================================================= -//function : SMESH_Block::TFace::GetCoefs -//purpose : return coefficients for addition of [0-3]-th edge and vertex -//======================================================================= - -void SMESH_Block::TFace::GetCoefs(int iE, - const gp_XYZ& theParams, - double& Ecoef, - double& Vcoef ) const -{ - double dU = theParams.Coord( GetUInd() ); - double dV = theParams.Coord( GetVInd() ); - switch ( iE ) { - case 0: - Ecoef = ( 1 - dV ); // u0 - Vcoef = ( 1 - dU ) * ( 1 - dV ); break; // 00 - case 1: - Ecoef = dV; // u1 - Vcoef = dU * ( 1 - dV ); break; // 10 - case 2: - Ecoef = ( 1 - dU ); // 0v - Vcoef = dU * dV ; break; // 11 - case 3: - Ecoef = dU ; // 1v - Vcoef = ( 1 - dU ) * dV ; break; // 01 - default: ASSERT(0); - } -} - -//======================================================================= -//function : SMESH_Block::TFace::GetUV -//purpose : -//======================================================================= - -gp_XY SMESH_Block::TFace::GetUV( const gp_XYZ& theParams ) const -{ - gp_XY uv(0.,0.); - for ( int iE = 0; iE < 4; iE++ ) // loop on 4 edges - { - double Ecoef = 0, Vcoef = 0; - GetCoefs( iE, theParams, Ecoef, Vcoef ); - // edge addition - double u = theParams.Coord( myCoordInd[ iE ] ); - u = ( 1 - u ) * myFirst[ iE ] + u * myLast[ iE ]; - uv += Ecoef * myC2d[ iE ]->Value( u ).XY(); - // corner addition - uv -= Vcoef * myCorner[ iE ]; - } - return uv; -} - -//======================================================================= -//function : SMESH_Block::TFace::Point -//purpose : -//======================================================================= - -gp_XYZ SMESH_Block::TFace::Point( const gp_XYZ& theParams ) const -{ - gp_XYZ p(0.,0.,0.); - if ( myS.IsNull() ) // if mesh block - { - for ( int iE = 0; iE < 4; iE++ ) // loop on 4 edges - { - double Ecoef = 0, Vcoef = 0; - GetCoefs( iE, theParams, Ecoef, Vcoef ); - // edge addition - double u = theParams.Coord( myCoordInd[ iE ] ); - int i1 = 0, i2 = 1; - switch ( iE ) { - case 1: i1 = 3; i2 = 2; break; - case 2: i1 = 1; i2 = 2; break; - case 3: i1 = 0; i2 = 3; break; - } - p += Ecoef * ( myNodes[ i1 ] * ( 1 - u ) + myNodes[ i2 ] * u ); - // corner addition - p -= Vcoef * myNodes[ iE ]; - } - - } - else // shape block - { - gp_XY uv = GetUV( theParams ); - p = myS->Value( uv.X(), uv.Y() ).XYZ(); - if ( myTrsf.Form() != gp_Identity ) - myTrsf.Transforms( p ); - } - return p; -} - -//======================================================================= -//function : GetShapeCoef -//purpose : -//======================================================================= - -double* SMESH_Block::GetShapeCoef (const int theShapeID) -{ - static double shapeCoef[][3] = { - // V000, V100, V010, V110 - { -1,-1,-1 }, { 1,-1,-1 }, { -1, 1,-1 }, { 1, 1,-1 }, - // V001, V101, V011, V111, - { -1,-1, 1 }, { 1,-1, 1 }, { -1, 1, 1 }, { 1, 1, 1 }, - // Ex00, Ex10, Ex01, Ex11, - { 0,-1,-1 }, { 0, 1,-1 }, { 0,-1, 1 }, { 0, 1, 1 }, - // E0y0, E1y0, E0y1, E1y1, - { -1, 0,-1 }, { 1, 0,-1 }, { -1, 0, 1 }, { 1, 0, 1 }, - // E00z, E10z, E01z, E11z, - { -1,-1, 0 }, { 1,-1, 0 }, { -1, 1, 0 }, { 1, 1, 0 }, - // Fxy0, Fxy1, Fx0z, Fx1z, F0yz, F1yz, - { 0, 0,-1 }, { 0, 0, 1 }, { 0,-1, 0 }, { 0, 1, 0 }, { -1, 0, 0 }, { 1, 0, 0 }, - // ID_Shell - { 0, 0, 0 } - }; - if ( theShapeID < ID_V000 || theShapeID > ID_F1yz ) - return shapeCoef[ ID_Shell - 1 ]; - - return shapeCoef[ theShapeID - 1 ]; -} - -//======================================================================= -//function : ShellPoint -//purpose : return coordinates of a point in shell -//======================================================================= - -bool SMESH_Block::ShellPoint( const gp_XYZ& theParams, gp_XYZ& thePoint ) const -{ - thePoint.SetCoord( 0., 0., 0. ); - for ( int shapeID = ID_V000; shapeID < ID_Shell; shapeID++ ) - { - // coef - double* coefs = GetShapeCoef( shapeID ); - double k = 1; - for ( int iCoef = 0; iCoef < 3; iCoef++ ) { - if ( coefs[ iCoef ] != 0 ) { - if ( coefs[ iCoef ] < 0 ) - k *= ( 1. - theParams.Coord( iCoef + 1 )); - else - k *= theParams.Coord( iCoef + 1 ); - } - } - // point on a shape - gp_XYZ Ps; - if ( shapeID < ID_Ex00 ) // vertex - VertexPoint( shapeID, Ps ); - else if ( shapeID < ID_Fxy0 ) { // edge - EdgePoint( shapeID, theParams, Ps ); - k = -k; - } else // face - FacePoint( shapeID, theParams, Ps ); - - thePoint += k * Ps; - } - return true; -} - -//======================================================================= -//function : ShellPoint -//purpose : computes coordinates of a point in shell by points on sub-shapes; -// thePointOnShape[ subShapeID ] must be a point on a subShape -//======================================================================= - -bool SMESH_Block::ShellPoint(const gp_XYZ& theParams, - const vector& thePointOnShape, - gp_XYZ& thePoint ) -{ - if ( thePointOnShape.size() < ID_F1yz ) - return false; - - double x = theParams.X(), y = theParams.Y(), z = theParams.Z(); - double x1 = 1. - x, y1 = 1. - y, z1 = 1. - z; - 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])); - 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]); - - return true; -} - -//======================================================================= -//function : NbVariables -//purpose : -//======================================================================= - -Standard_Integer SMESH_Block::NbVariables() const -{ - return 3; -} - -//======================================================================= -//function : NbEquations -//purpose : -//======================================================================= - -Standard_Integer SMESH_Block::NbEquations() const -{ - return 1; -} - -//======================================================================= -//function : Value -//purpose : -//======================================================================= - -Standard_Boolean SMESH_Block::Value(const math_Vector& theXYZ, math_Vector& theFxyz) -{ - gp_XYZ P, params( theXYZ(1), theXYZ(2), theXYZ(3) ); - if ( params.IsEqual( myParam, DBL_MIN )) { // same param - theFxyz( 1 ) = myValues[ 0 ]; - } - else { - ShellPoint( params, P ); - gp_Vec dP( P - myPoint ); - theFxyz(1) = SQRT_FUNC ? dP.SquareMagnitude() : dP.Magnitude(); - } - return true; -} - -//======================================================================= -//function : Derivatives -//purpose : -//======================================================================= - -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 -//purpose : -//======================================================================= - -Standard_Boolean SMESH_Block::Values(const math_Vector& theXYZ, - math_Vector& theFxyz, - math_Matrix& theDf) -{ -// MESSAGE( endl<<"SMESH_Block::Values( "< DBL_MIN ) - dPi /= mag; - drv[ iP - 1 ] = dPi; - } - for ( int iP = 0; iP < 3; iP++ ) { - if ( iP == myFaceIndex ) - theDf( 1, iP + 1 ) = myFaceParam; - else { - // like IntAna_IntConicQuad::Perform (const gp_Lin& L, const gp_Pln& P) - // where L is (P -> myPoint), P is defined by the 2 other derivative direction - int iPrev = ( iP ? iP - 1 : 2 ); - int iNext = ( iP == 2 ? 0 : iP + 1 ); - gp_Vec plnNorm = drv[ iPrev ].Crossed( drv [ iNext ] ); - double Direc = plnNorm * drv[ iP ]; - if ( Abs(Direc) <= DBL_MIN ) - theDf( 1, iP + 1 ) = dP * drv[ iP ]; - else { - double Dis = plnNorm * P - plnNorm * myPoint; - theDf( 1, iP + 1 ) = Dis/Direc; - } - } - } - //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 )); - } - - return true; -} - -//======================================================================= -//function : ComputeParameters -//purpose : compute point parameters in the block -//======================================================================= - -bool SMESH_Block::ComputeParameters(const gp_Pnt& thePoint, - gp_XYZ& theParams, - const int theShapeID) -{ - if ( VertexParameters( theShapeID, theParams )) - return true; - - if ( IsEdgeID( theShapeID )) { - TEdge& e = myEdge[ theShapeID - ID_Ex00 ]; - GeomAdaptor_Curve curve( e.myC3d ); - double f = Min( e.myFirst, e.myLast ), l = Max( e.myFirst, e.myLast ); - Extrema_ExtPC anExtPC( thePoint, curve, f, l ); - int i, nb = anExtPC.IsDone() ? anExtPC.NbExt() : 0; - for ( i = 1; i <= nb; i++ ) { - if ( anExtPC.IsMin( i )) - return EdgeParameters( theShapeID, anExtPC.Point( i ).Parameter(), theParams ); - } - return false; - } - -// MESSAGE( endl<<"SMESH_Block::ComputeParameters( " -// < zero ) { - par = v0P.Dot( v01 ) / len2; - if ( par < 0 || par > 1 ) { - needGrid = true; - break; - } - } - start( iParam ) += par; - } - start( iParam ) /= 4.; - } - if ( needGrid ) { - // compute nodes of 3 x 3 x 3 grid - int iNode = 0; - for ( double x = 0.25; x < 0.9; x += 0.25 ) - for ( double y = 0.25; y < 0.9; y += 0.25 ) - for ( double z = 0.25; z < 0.9; z += 0.25 ) { - TxyzPair & prmPtn = my3x3x3GridNodes[ iNode++ ]; - prmPtn.first.SetCoord( x, y, z ); - ShellPoint( prmPtn.first, prmPtn.second ); - } - myGridComputed = true; - } - } - if ( myGridComputed ) { - double minDist = DBL_MAX; - gp_XYZ* bestParam = 0; - for ( int iNode = 0; iNode < 27; iNode++ ) { - TxyzPair & prmPtn = my3x3x3GridNodes[ iNode ]; - double dist = ( thePoint.XYZ() - prmPtn.second ).SquareModulus(); - if ( dist < minDist ) { - minDist = dist; - bestParam = & prmPtn.first; - } - } - start( 1 ) = bestParam->X(); - start( 2 ) = bestParam->Y(); - start( 3 ) = bestParam->Z(); - } - - int myFaceIndex = -1; - 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; - } - } - math_Vector low ( 1, 3, 0.0 ); - math_Vector up ( 1, 3, 1.0 ); - math_Vector tol ( 1, 3, 1e-4 ); - math_FunctionSetRoot paramSearch( *this, tol ); - - int nbLoops = 0; - while ( myValues[0] > 1e-1 && nbLoops++ < 10 ) { - paramSearch.Perform ( *this, start, low, up ); - if ( !paramSearch.IsDone() ) { - //MESSAGE( " !paramSearch.IsDone() " ); - } - else { - //MESSAGE( " NB ITERATIONS: " << paramSearch.NbIterations() ); - } - start( 1 ) = myParam.X(); - start( 2 ) = myParam.Y(); - start( 3 ) = myParam.Z(); - //MESSAGE( "Distance: " << ( SQRT_FUNC ? sqrt(myValues[0]) : myValues[0] )); - } -// MESSAGE( endl << myParam.X() << " " << myParam.Y() << " " << myParam.Z() << endl); -// mySumDist += myValues[0]; -// MESSAGE( " TOTAL NB ITERATIONS: " << myNbIterations << -// " DIST: " << ( SQRT_FUNC ? sqrt(mySumDist) : mySumDist )); - - - theParams = myParam; - - return true; -} - -//======================================================================= -//function : VertexParameters -//purpose : return parameters of a vertex given by TShapeID -//======================================================================= - -bool SMESH_Block::VertexParameters(const int theVertexID, gp_XYZ& theParams) -{ - switch ( theVertexID ) { - case ID_V000: theParams.SetCoord(0., 0., 0.); return true; - case ID_V100: theParams.SetCoord(1., 0., 0.); return true; - case ID_V110: theParams.SetCoord(1., 1., 0.); return true; - case ID_V010: theParams.SetCoord(0., 1., 0.); return true; - default:; - } - return false; -} - -//======================================================================= -//function : EdgeParameters -//purpose : return parameters of a point given by theU on edge -//======================================================================= - -bool SMESH_Block::EdgeParameters(const int theEdgeID, const double theU, gp_XYZ& theParams) -{ - if ( IsEdgeID( theEdgeID )) { - vector< int > vertexVec; - GetEdgeVertexIDs( theEdgeID, vertexVec ); - VertexParameters( vertexVec[0], theParams ); - TEdge& e = myEdge[ theEdgeID - ID_Ex00 ]; - double param = ( theU - e.myFirst ) / ( e.myLast - e.myFirst ); - theParams.SetCoord( e.myCoordInd, param ); - return true; - } - return false; -} - -//======================================================================= -//function : GetStateNumber -//purpose : -//======================================================================= - -Standard_Integer SMESH_Block::GetStateNumber () -{ -// MESSAGE( endl<<"SMESH_Block::GetStateNumber( "< 26 || id < 0 ) { - MESSAGE( "GetShapeIDByParams() = " << id - <<" "<< theCoord.X() <<" "<< theCoord.Y() <<" "<< theCoord.Z() ); - } - - return id + 1; // shape ids start at 1 -} - - -//======================================================================= -//function : getOrderedEdges -//purpose : return nb wires and a list of oredered edges -//======================================================================= - -static int getOrderedEdges (const TopoDS_Face& theFace, - const TopoDS_Vertex& theFirstVertex, - list< TopoDS_Edge >& theEdges, - list< int > & theNbVertexInWires) -{ - // put wires in a list, so that an outer wire comes first - list aWireList; - TopoDS_Wire anOuterWire = BRepTools::OuterWire( theFace ); - aWireList.push_back( anOuterWire ); - for ( TopoDS_Iterator wIt (theFace); wIt.More(); wIt.Next() ) - if ( !anOuterWire.IsSame( wIt.Value() )) - aWireList.push_back( TopoDS::Wire( wIt.Value() )); - - // loop on edges of wires - theNbVertexInWires.clear(); - list::iterator wlIt = aWireList.begin(); - for ( ; wlIt != aWireList.end(); wlIt++ ) - { - int iE; - BRepTools_WireExplorer wExp( *wlIt, theFace ); - for ( iE = 0; wExp.More(); wExp.Next(), iE++ ) - { - TopoDS_Edge edge = wExp.Current(); - edge = TopoDS::Edge( edge.Oriented( wExp.Orientation() )); - theEdges.push_back( edge ); - } - theNbVertexInWires.push_back( iE ); - iE = 0; - if ( wlIt == aWireList.begin() && theEdges.size() > 1 ) { // the outer wire - // orient closed edges - list< TopoDS_Edge >::iterator eIt, eIt2; - for ( eIt = theEdges.begin(); eIt != theEdges.end(); eIt++ ) - { - TopoDS_Edge& edge = *eIt; - if ( TopExp::FirstVertex( edge ).IsSame( TopExp::LastVertex( edge ) )) - { - eIt2 = eIt; - bool isNext = ( eIt2 == theEdges.begin() ); - TopoDS_Edge edge2 = isNext ? *(++eIt2) : *(--eIt2); - double f1,l1,f2,l2; - Handle(Geom2d_Curve) c1 = BRep_Tool::CurveOnSurface( edge, theFace, f1,l1 ); - Handle(Geom2d_Curve) c2 = BRep_Tool::CurveOnSurface( edge2, theFace, f2,l2 ); - gp_Pnt2d pf = c1->Value( edge.Orientation() == TopAbs_FORWARD ? f1 : l1 ); - gp_Pnt2d pl = c1->Value( edge.Orientation() == TopAbs_FORWARD ? l1 : f1 ); - bool isFirst = ( edge2.Orientation() == TopAbs_FORWARD ? isNext : !isNext ); - gp_Pnt2d p2 = c2->Value( isFirst ? f2 : l2 ); - isFirst = ( p2.SquareDistance( pf ) < p2.SquareDistance( pl )); - if ( isNext ? isFirst : !isFirst ) - edge.Reverse(); - } - } - // rotate theEdges until it begins from theFirstVertex - if ( ! theFirstVertex.IsNull() ) - while ( !theFirstVertex.IsSame( TopExp::FirstVertex( theEdges.front(), true ))) - { - theEdges.splice(theEdges.end(), theEdges, - theEdges.begin(), ++ theEdges.begin()); - if ( iE++ > theNbVertexInWires.back() ) - break; // break infinite loop - } - } - } - - return aWireList.size(); -} - -//======================================================================= -//function : LoadMeshBlock -//purpose : prepare to work with theVolume -//======================================================================= - -#define gpXYZ(n) gp_XYZ(n->X(),n->Y(),n->Z()) - -bool SMESH_Block::LoadMeshBlock(const SMDS_MeshVolume* theVolume, - const int theNode000Index, - const int theNode001Index, - vector& theOrderedNodes) -{ - MESSAGE(" ::LoadMeshBlock()"); - - myNbIterations = 0; - mySumDist = 0; - myGridComputed = false; - - SMDS_VolumeTool vTool; - if (!vTool.Set( theVolume ) || vTool.NbNodes() != 8 || - !vTool.IsLinked( theNode000Index, theNode001Index )) { - MESSAGE(" Bad arguments "); - return false; - } - vTool.SetExternalNormal(); - // In terms of indices used for access to nodes and faces in SMDS_VolumeTool: - int V000, V100, V010, V110, V001, V101, V011, V111; // 8 vertices - int Fxy0, Fxy1; // bottom and top faces - // vertices of faces - vector vFxy0, vFxy1; - - V000 = theNode000Index; - V001 = theNode001Index; - - // get faces sharing V000 and V001 - list fV000, fV001; - int i, iF, iE, iN; - for ( iF = 0; iF < vTool.NbFaces(); ++iF ) { - const int* nid = vTool.GetFaceNodesIndices( iF ); - for ( iN = 0; iN < 4; ++iN ) - if ( nid[ iN ] == V000 ) { - fV000.push_back( iF ); - } else if ( nid[ iN ] == V001 ) { - fV001.push_back( iF ); - } - } - - // find the bottom (Fxy0), the top (Fxy1) faces - list::iterator fIt1, fIt2, Fxy0Pos; - for ( fIt1 = fV000.begin(); fIt1 != fV000.end(); fIt1++) { - fIt2 = std::find( fV001.begin(), fV001.end(), *fIt1 ); - if ( fIt2 != fV001.end() ) { // *fIt1 is in the both lists - fV001.erase( fIt2 ); // erase Fx0z or F0yz from fV001 - } else { // *fIt1 is in fV000 only - Fxy0Pos = fIt1; // points to Fxy0 - } - } - Fxy0 = *Fxy0Pos; - Fxy1 = fV001.front(); - const SMDS_MeshNode** nn = vTool.GetNodes(); - - // find bottom veritices, their order is that a face normal is external - vFxy0.resize(4); - const int* nid = vTool.GetFaceNodesIndices( Fxy0 ); - for ( i = 0; i < 4; ++i ) - if ( nid[ i ] == V000 ) - break; - for ( iN = 0; iN < 4; ++iN, ++i ) { - if ( i == 4 ) i = 0; - vFxy0[ iN ] = nid[ i ]; - } - // find top veritices, their order is that a face normal is external - vFxy1.resize(4); - nid = vTool.GetFaceNodesIndices( Fxy1 ); - for ( i = 0; i < 4; ++i ) - if ( nid[ i ] == V001 ) - break; - for ( iN = 0; iN < 4; ++iN, ++i ) { - if ( i == 4 ) i = 0; - vFxy1[ iN ] = nid[ i ]; - } - // find indices of the rest veritices - V100 = vFxy0[3]; - V010 = vFxy0[1]; - V110 = vFxy0[2]; - V101 = vFxy1[1]; - V011 = vFxy1[3]; - V111 = vFxy1[2]; - - // set points coordinates - myPnt[ ID_V000 - 1 ] = gpXYZ( nn[ V000 ] ); - myPnt[ ID_V100 - 1 ] = gpXYZ( nn[ V100 ] ); - myPnt[ ID_V010 - 1 ] = gpXYZ( nn[ V010 ] ); - myPnt[ ID_V110 - 1 ] = gpXYZ( nn[ V110 ] ); - myPnt[ ID_V001 - 1 ] = gpXYZ( nn[ V001 ] ); - myPnt[ ID_V101 - 1 ] = gpXYZ( nn[ V101 ] ); - myPnt[ ID_V011 - 1 ] = gpXYZ( nn[ V011 ] ); - myPnt[ ID_V111 - 1 ] = gpXYZ( nn[ V111 ] ); - - // fill theOrderedNodes - theOrderedNodes.resize( 8 ); - theOrderedNodes[ 0 ] = nn[ V000 ]; - theOrderedNodes[ 1 ] = nn[ V100 ]; - theOrderedNodes[ 2 ] = nn[ V010 ]; - theOrderedNodes[ 3 ] = nn[ V110 ]; - theOrderedNodes[ 4 ] = nn[ V001 ]; - theOrderedNodes[ 5 ] = nn[ V101 ]; - theOrderedNodes[ 6 ] = nn[ V011 ]; - theOrderedNodes[ 7 ] = nn[ V111 ]; - - // fill edges - myEdge[ ID_Ex00 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V000 - 1 ]; - myEdge[ ID_Ex00 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V100 - 1 ]; - - myEdge[ ID_Ex10 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V010 - 1 ]; - myEdge[ ID_Ex10 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V110 - 1 ]; - - myEdge[ ID_Ex01 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V001 - 1 ]; - myEdge[ ID_Ex01 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V101 - 1 ]; - - myEdge[ ID_Ex11 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V011 - 1 ]; - myEdge[ ID_Ex11 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V111 - 1 ]; - - myEdge[ ID_E0y0 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V000 - 1 ]; - myEdge[ ID_E0y0 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V010 - 1 ]; - - myEdge[ ID_E1y0 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V100 - 1 ]; - myEdge[ ID_E1y0 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V110 - 1 ]; - - myEdge[ ID_E0y1 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V001 - 1 ]; - myEdge[ ID_E0y1 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V011 - 1 ]; - - myEdge[ ID_E1y1 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V101 - 1 ]; - myEdge[ ID_E1y1 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V111 - 1 ]; - - myEdge[ ID_E00z - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V000 - 1 ]; - myEdge[ ID_E00z - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V001 - 1 ]; - - myEdge[ ID_E10z - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V100 - 1 ]; - myEdge[ ID_E10z - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V101 - 1 ]; - - myEdge[ ID_E01z - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V010 - 1 ]; - myEdge[ ID_E01z - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V011 - 1 ]; - - myEdge[ ID_E11z - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V110 - 1 ]; - myEdge[ ID_E11z - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V111 - 1 ]; - - for ( iE = ID_Ex00; iE <= ID_E11z; ++iE ) - myEdge[ iE - ID_Ex00 ].myCoordInd = GetCoordIndOnEdge( iE ); - - // fill faces corners - for ( iF = ID_Fxy0; iF < ID_Shell; ++iF ) - { - TFace& tFace = myFace[ iF - ID_Fxy0 ]; - vector< int > edgeIdVec(4, -1); - GetFaceEdgesIDs( iF, edgeIdVec ); - tFace.myNodes[ 0 ] = myEdge[ edgeIdVec [ 0 ] - ID_Ex00 ].myNodes[ 1 ]; - tFace.myNodes[ 1 ] = myEdge[ edgeIdVec [ 0 ] - ID_Ex00 ].myNodes[ 0 ]; - tFace.myNodes[ 2 ] = myEdge[ edgeIdVec [ 1 ] - ID_Ex00 ].myNodes[ 0 ]; - tFace.myNodes[ 3 ] = myEdge[ edgeIdVec [ 1 ] - ID_Ex00 ].myNodes[ 1 ]; - tFace.myCoordInd[ 0 ] = GetCoordIndOnEdge( edgeIdVec[ 0 ] ); - tFace.myCoordInd[ 1 ] = GetCoordIndOnEdge( edgeIdVec[ 1 ] ); - tFace.myCoordInd[ 2 ] = GetCoordIndOnEdge( edgeIdVec[ 2 ] ); - tFace.myCoordInd[ 3 ] = GetCoordIndOnEdge( edgeIdVec[ 3 ] ); - } - - return true; -} - -//======================================================================= -//function : LoadBlockShapes -//purpose : add sub-shapes of theBlock to theShapeIDMap so that they get -// IDs acoording to enum TShapeID -//======================================================================= - -bool SMESH_Block::LoadBlockShapes(const TopoDS_Shell& theShell, - const TopoDS_Vertex& theVertex000, - const TopoDS_Vertex& theVertex001, - TopTools_IndexedMapOfOrientedShape& theShapeIDMap ) -{ - MESSAGE(" ::LoadBlockShapes()"); - - myShell = theShell; - myNbIterations = 0; - mySumDist = 0; - myGridComputed = false; - - // 8 vertices - TopoDS_Shape V000, V100, V010, V110, V001, V101, V011, V111; - // 12 edges - TopoDS_Shape Ex00, Ex10, Ex01, Ex11; - TopoDS_Shape E0y0, E1y0, E0y1, E1y1; - TopoDS_Shape E00z, E10z, E01z, E11z; - // 6 faces - TopoDS_Shape Fxy0, Fx0z, F0yz, Fxy1, Fx1z, F1yz; - - // nb of faces bound to a vertex in TopTools_IndexedDataMapOfShapeListOfShape - // filled by TopExp::MapShapesAndAncestors() - const int NB_FACES_BY_VERTEX = 6; - - TopTools_IndexedDataMapOfShapeListOfShape vfMap; - TopExp::MapShapesAndAncestors( myShell, TopAbs_VERTEX, TopAbs_FACE, vfMap ); - if ( vfMap.Extent() != 8 ) { - MESSAGE(" Wrong nb of vertices in the block: " << vfMap.Extent() ); - return false; - } - - V000 = theVertex000; - V001 = theVertex001; - - if ( V000.IsNull() ) { - // find vertex 000 - the one with smallest coordinates - double minVal = DBL_MAX, minX, val; - for ( int i = 1; i <= 8; i++ ) { - const TopoDS_Vertex& v = TopoDS::Vertex( vfMap.FindKey( i )); - gp_Pnt P = BRep_Tool::Pnt( v ); - val = P.X() + P.Y() + P.Z(); - if ( val < minVal || ( val == minVal && P.X() < minX )) { - V000 = v; - minVal = val; - minX = P.X(); - } - } - // find vertex 001 - the one on the most vertical edge passing through V000 - TopTools_IndexedDataMapOfShapeListOfShape veMap; - TopExp::MapShapesAndAncestors( myShell, TopAbs_VERTEX, TopAbs_EDGE, veMap ); - gp_Vec dir001 = gp::DZ(); - gp_Pnt p000 = BRep_Tool::Pnt( TopoDS::Vertex( V000 )); - double maxVal = -DBL_MAX; - TopTools_ListIteratorOfListOfShape eIt ( veMap.FindFromKey( V000 )); - for ( ; eIt.More(); eIt.Next() ) { - const TopoDS_Edge& e = TopoDS::Edge( eIt.Value() ); - TopoDS_Vertex v = TopExp::FirstVertex( e ); - if ( v.IsSame( V000 )) - v = TopExp::LastVertex( e ); - val = dir001 * gp_Vec( p000, BRep_Tool::Pnt( v )).Normalized(); - if ( val > maxVal ) { - V001 = v; - maxVal = val; - } - } - } - - // find the bottom (Fxy0), Fx0z and F0yz faces - - const TopTools_ListOfShape& f000List = vfMap.FindFromKey( V000 ); - const TopTools_ListOfShape& f001List = vfMap.FindFromKey( V001 ); - if (f000List.Extent() != NB_FACES_BY_VERTEX || - f001List.Extent() != NB_FACES_BY_VERTEX ) { - MESSAGE(" LoadBlockShapes() " << f000List.Extent() << " " << f001List.Extent()); - return false; - } - TopTools_ListIteratorOfListOfShape f001It, f000It ( f000List ); - int i, j, iFound1, iFound2; - for ( j = 0; f000It.More(); f000It.Next(), j++ ) - { - if ( NB_FACES_BY_VERTEX == 6 && j % 2 ) continue; // each face encounters twice - const TopoDS_Shape& F = f000It.Value(); - for ( i = 0, f001It.Initialize( f001List ); f001It.More(); f001It.Next(), i++ ) { - if ( NB_FACES_BY_VERTEX == 6 && i % 2 ) continue; // each face encounters twice - if ( F.IsSame( f001It.Value() )) - break; - } - if ( f001It.More() ) // Fx0z or F0yz found - if ( Fx0z.IsNull() ) { - Fx0z = F; - iFound1 = i; - } else { - F0yz = F; - iFound2 = i; - } - else // F is the bottom face - Fxy0 = F; - } - if ( Fxy0.IsNull() || Fx0z.IsNull() || F0yz.IsNull() ) { - MESSAGE( Fxy0.IsNull() <<" "<< Fx0z.IsNull() <<" "<< F0yz.IsNull() ); - return false; - } - - // choose the top face (Fxy1) - for ( i = 0, f001It.Initialize( f001List ); f001It.More(); f001It.Next(), i++ ) { - if ( NB_FACES_BY_VERTEX == 6 && i % 2 ) continue; // each face encounters twice - if ( i != iFound1 && i != iFound2 ) - break; - } - Fxy1 = f001It.Value(); - if ( Fxy1.IsNull() ) { - MESSAGE(" LoadBlockShapes() error "); - return false; - } - - // find bottom edges and veritices - list< TopoDS_Edge > eList; - list< int > nbVertexInWires; - getOrderedEdges( TopoDS::Face( Fxy0 ), TopoDS::Vertex( V000 ), eList, nbVertexInWires ); - if ( nbVertexInWires.size() != 1 || nbVertexInWires.front() != 4 ) { - MESSAGE(" LoadBlockShapes() error "); - return false; - } - list< TopoDS_Edge >::iterator elIt = eList.begin(); - for ( i = 0; elIt != eList.end(); elIt++, i++ ) - switch ( i ) { - case 0: E0y0 = *elIt; V010 = TopExp::LastVertex( *elIt, true ); break; - case 1: Ex10 = *elIt; V110 = TopExp::LastVertex( *elIt, true ); break; - case 2: E1y0 = *elIt; V100 = TopExp::LastVertex( *elIt, true ); break; - case 3: Ex00 = *elIt; break; - default:; - } - if ( i != 4 || E0y0.IsNull() || Ex10.IsNull() || E1y0.IsNull() || Ex00.IsNull() ) { - MESSAGE(" LoadBlockShapes() error, eList.size()=" << eList.size()); - return false; - } - - - // find top edges and veritices - eList.clear(); - getOrderedEdges( TopoDS::Face( Fxy1 ), TopoDS::Vertex( V001 ), eList, nbVertexInWires ); - if ( nbVertexInWires.size() != 1 || nbVertexInWires.front() != 4 ) { - MESSAGE(" LoadBlockShapes() error "); - return false; - } - for ( i = 0, elIt = eList.begin(); elIt != eList.end(); elIt++, i++ ) - switch ( i ) { - case 0: Ex01 = *elIt; V101 = TopExp::LastVertex( *elIt, true ); break; - case 1: E1y1 = *elIt; V111 = TopExp::LastVertex( *elIt, true ); break; - case 2: Ex11 = *elIt; V011 = TopExp::LastVertex( *elIt, true ); break; - case 3: E0y1 = *elIt; break; - default:; - } - if ( i != 4 || Ex01.IsNull() || E1y1.IsNull() || Ex11.IsNull() || E0y1.IsNull() ) { - MESSAGE(" LoadBlockShapes() error, eList.size()=" << eList.size()); - return false; - } - - // swap Fx0z and F0yz if necessary - TopExp_Explorer exp( Fx0z, TopAbs_VERTEX ); - for ( ; exp.More(); exp.Next() ) // Fx0z shares V101 and V100 - if ( V101.IsSame( exp.Current() ) || V100.IsSame( exp.Current() )) - break; // V101 or V100 found - if ( !exp.More() ) { // not found - TopoDS_Shape f = Fx0z; Fx0z = F0yz; F0yz = f; - } - - // find Fx1z and F1yz faces - const TopTools_ListOfShape& f111List = vfMap.FindFromKey( V111 ); - const TopTools_ListOfShape& f110List = vfMap.FindFromKey( V110 ); - if (f111List.Extent() != NB_FACES_BY_VERTEX || - f110List.Extent() != NB_FACES_BY_VERTEX ) { - MESSAGE(" LoadBlockShapes() " << f111List.Extent() << " " << f110List.Extent()); - return false; - } - TopTools_ListIteratorOfListOfShape f111It, f110It ( f110List); - for ( j = 0 ; f110It.More(); f110It.Next(), j++ ) { - if ( NB_FACES_BY_VERTEX == 6 && j % 2 ) continue; // each face encounters twice - const TopoDS_Shape& F = f110It.Value(); - for ( i = 0, f111It.Initialize( f111List ); f111It.More(); f111It.Next(), i++ ) { - if ( NB_FACES_BY_VERTEX == 6 && i % 2 ) continue; // each face encounters twice - if ( F.IsSame( f111It.Value() )) { // Fx1z or F1yz found - if ( Fx1z.IsNull() ) - Fx1z = F; - else - F1yz = F; - } - } - } - if ( Fx1z.IsNull() || F1yz.IsNull() ) { - MESSAGE(" LoadBlockShapes() error "); - return false; - } - - // swap Fx1z and F1yz if necessary - for ( exp.Init( Fx1z, TopAbs_VERTEX ); exp.More(); exp.Next() ) - if ( V010.IsSame( exp.Current() ) || V011.IsSame( exp.Current() )) - break; - if ( !exp.More() ) { - TopoDS_Shape f = Fx1z; Fx1z = F1yz; F1yz = f; - } - - // find vertical edges - for ( exp.Init( Fx0z, TopAbs_EDGE ); exp.More(); exp.Next() ) { - const TopoDS_Edge& edge = TopoDS::Edge( exp.Current() ); - const TopoDS_Shape& vFirst = TopExp::FirstVertex( edge, true ); - if ( vFirst.IsSame( V001 )) - E00z = edge; - else if ( vFirst.IsSame( V100 )) - E10z = edge; - } - if ( E00z.IsNull() || E10z.IsNull() ) { - MESSAGE(" LoadBlockShapes() error "); - return false; - } - for ( exp.Init( Fx1z, TopAbs_EDGE ); exp.More(); exp.Next() ) { - const TopoDS_Edge& edge = TopoDS::Edge( exp.Current() ); - const TopoDS_Shape& vFirst = TopExp::FirstVertex( edge, true ); - if ( vFirst.IsSame( V111 )) - E11z = edge; - else if ( vFirst.IsSame( V010 )) - E01z = edge; - } - if ( E01z.IsNull() || E11z.IsNull() ) { - MESSAGE(" LoadBlockShapes() error "); - return false; - } - - // load shapes in theShapeIDMap - - theShapeIDMap.Clear(); - - theShapeIDMap.Add(V000.Oriented( TopAbs_FORWARD )); - theShapeIDMap.Add(V100.Oriented( TopAbs_FORWARD )); - theShapeIDMap.Add(V010.Oriented( TopAbs_FORWARD )); - theShapeIDMap.Add(V110.Oriented( TopAbs_FORWARD )); - theShapeIDMap.Add(V001.Oriented( TopAbs_FORWARD )); - theShapeIDMap.Add(V101.Oriented( TopAbs_FORWARD )); - theShapeIDMap.Add(V011.Oriented( TopAbs_FORWARD )); - theShapeIDMap.Add(V111.Oriented( TopAbs_FORWARD )); - - theShapeIDMap.Add(Ex00); - theShapeIDMap.Add(Ex10); - theShapeIDMap.Add(Ex01); - theShapeIDMap.Add(Ex11); - - theShapeIDMap.Add(E0y0); - theShapeIDMap.Add(E1y0); - theShapeIDMap.Add(E0y1); - theShapeIDMap.Add(E1y1); - - theShapeIDMap.Add(E00z); - theShapeIDMap.Add(E10z); - theShapeIDMap.Add(E01z); - theShapeIDMap.Add(E11z); - - theShapeIDMap.Add(Fxy0); - theShapeIDMap.Add(Fxy1); - theShapeIDMap.Add(Fx0z); - theShapeIDMap.Add(Fx1z); - theShapeIDMap.Add(F0yz); - theShapeIDMap.Add(F1yz); - - theShapeIDMap.Add(myShell); - - if ( theShapeIDMap.Extent() != 27 ) { - MESSAGE("LoadBlockShapes() " << theShapeIDMap.Extent() ); - return false; - } - - // store shapes geometry - for ( int shapeID = 1; shapeID < theShapeIDMap.Extent(); shapeID++ ) - { - const TopoDS_Shape& S = theShapeIDMap( shapeID ); - switch ( S.ShapeType() ) - { - case TopAbs_VERTEX: { - - if ( shapeID > ID_V111 ) { - MESSAGE(" shapeID =" << shapeID ); - return false; - } - myPnt[ shapeID - ID_V000 ] = - BRep_Tool::Pnt( TopoDS::Vertex( S )).XYZ(); - break; - } - case TopAbs_EDGE: { - - const TopoDS_Edge& edge = TopoDS::Edge( S ); - if ( shapeID < ID_Ex00 || shapeID > ID_E11z || edge.IsNull() ) { - MESSAGE(" shapeID =" << shapeID ); - return false; - } - TEdge& tEdge = myEdge[ shapeID - ID_Ex00 ]; - tEdge.myCoordInd = GetCoordIndOnEdge( shapeID ); - TopLoc_Location loc; - tEdge.myC3d = BRep_Tool::Curve( edge, loc, tEdge.myFirst, tEdge.myLast ); - if ( !IsForwardEdge( edge, theShapeIDMap )) - Swap( tEdge.myFirst, tEdge.myLast ); - tEdge.myTrsf = loc; - break; - } - case TopAbs_FACE: { - - const TopoDS_Face& face = TopoDS::Face( S ); - if ( shapeID < ID_Fxy0 || shapeID > ID_F1yz || face.IsNull() ) { - MESSAGE(" shapeID =" << shapeID ); - return false; - } - TFace& tFace = myFace[ shapeID - ID_Fxy0 ]; - // pcurves - vector< int > edgeIdVec(4, -1); - GetFaceEdgesIDs( shapeID, edgeIdVec ); - for ( int iE = 0; iE < 4; iE++ ) // loop on 4 edges - { - const TopoDS_Edge& edge = TopoDS::Edge( theShapeIDMap( edgeIdVec[ iE ])); - tFace.myCoordInd[ iE ] = GetCoordIndOnEdge( edgeIdVec[ iE ] ); - tFace.myC2d[ iE ] = - BRep_Tool::CurveOnSurface( edge, face, tFace.myFirst[iE], tFace.myLast[iE] ); - if ( !IsForwardEdge( edge, theShapeIDMap )) - Swap( tFace.myFirst[ iE ], tFace.myLast[ iE ] ); - } - // 2d corners - tFace.myCorner[ 0 ] = tFace.myC2d[ 0 ]->Value( tFace.myFirst[0] ).XY(); - tFace.myCorner[ 1 ] = tFace.myC2d[ 0 ]->Value( tFace.myLast[0] ).XY(); - tFace.myCorner[ 2 ] = tFace.myC2d[ 1 ]->Value( tFace.myLast[1] ).XY(); - tFace.myCorner[ 3 ] = tFace.myC2d[ 1 ]->Value( tFace.myFirst[1] ).XY(); - // sufrace - TopLoc_Location loc; - tFace.myS = BRep_Tool::Surface( face, loc ); - tFace.myTrsf = loc; - break; - } - default: break; - } - } // loop on shapes in theShapeIDMap - - return true; -} - -//======================================================================= -//function : GetFaceEdgesIDs -//purpose : return edges IDs in the order u0, u1, 0v, 1v -// u0 means "|| u, v == 0" -//======================================================================= - -void SMESH_Block::GetFaceEdgesIDs (const int faceID, vector< int >& edgeVec ) -{ - edgeVec.resize( 4 ); - switch ( faceID ) { - case ID_Fxy0: - edgeVec[ 0 ] = ID_Ex00; - edgeVec[ 1 ] = ID_Ex10; - edgeVec[ 2 ] = ID_E0y0; - edgeVec[ 3 ] = ID_E1y0; - break; - case ID_Fxy1: - edgeVec[ 0 ] = ID_Ex01; - edgeVec[ 1 ] = ID_Ex11; - edgeVec[ 2 ] = ID_E0y1; - edgeVec[ 3 ] = ID_E1y1; - break; - case ID_Fx0z: - edgeVec[ 0 ] = ID_Ex00; - edgeVec[ 1 ] = ID_Ex01; - edgeVec[ 2 ] = ID_E00z; - edgeVec[ 3 ] = ID_E10z; - break; - case ID_Fx1z: - edgeVec[ 0 ] = ID_Ex10; - edgeVec[ 1 ] = ID_Ex11; - edgeVec[ 2 ] = ID_E01z; - edgeVec[ 3 ] = ID_E11z; - break; - case ID_F0yz: - edgeVec[ 0 ] = ID_E0y0; - edgeVec[ 1 ] = ID_E0y1; - edgeVec[ 2 ] = ID_E00z; - edgeVec[ 3 ] = ID_E01z; - break; - case ID_F1yz: - edgeVec[ 0 ] = ID_E1y0; - edgeVec[ 1 ] = ID_E1y1; - edgeVec[ 2 ] = ID_E10z; - edgeVec[ 3 ] = ID_E11z; - break; - default: - MESSAGE(" GetFaceEdgesIDs(), wrong face ID: " << faceID ); - } -} - -//======================================================================= -//function : GetEdgeVertexIDs -//purpose : return vertex IDs of an edge -//======================================================================= - -void SMESH_Block::GetEdgeVertexIDs (const int edgeID, vector< int >& vertexVec ) -{ - vertexVec.resize( 2 ); - switch ( edgeID ) { - - case ID_Ex00: - vertexVec[ 0 ] = ID_V000; - vertexVec[ 1 ] = ID_V100; - break; - case ID_Ex10: - vertexVec[ 0 ] = ID_V010; - vertexVec[ 1 ] = ID_V110; - break; - case ID_Ex01: - vertexVec[ 0 ] = ID_V001; - vertexVec[ 1 ] = ID_V101; - break; - case ID_Ex11: - vertexVec[ 0 ] = ID_V011; - vertexVec[ 1 ] = ID_V111; - break; - - case ID_E0y0: - vertexVec[ 0 ] = ID_V000; - vertexVec[ 1 ] = ID_V010; - break; - case ID_E1y0: - vertexVec[ 0 ] = ID_V100; - vertexVec[ 1 ] = ID_V110; - break; - case ID_E0y1: - vertexVec[ 0 ] = ID_V001; - vertexVec[ 1 ] = ID_V011; - break; - case ID_E1y1: - vertexVec[ 0 ] = ID_V101; - vertexVec[ 1 ] = ID_V111; - break; - - case ID_E00z: - vertexVec[ 0 ] = ID_V000; - vertexVec[ 1 ] = ID_V001; - break; - case ID_E10z: - vertexVec[ 0 ] = ID_V100; - vertexVec[ 1 ] = ID_V101; - break; - case ID_E01z: - vertexVec[ 0 ] = ID_V010; - vertexVec[ 1 ] = ID_V011; - break; - case ID_E11z: - vertexVec[ 0 ] = ID_V110; - vertexVec[ 1 ] = ID_V111; - break; - default: - MESSAGE(" GetEdgeVertexIDs(), wrong edge ID: " << edgeID ); - } -} - diff --git a/src/SMESH/SMESH_Block.hxx b/src/SMESH/SMESH_Block.hxx deleted file mode 100644 index 155104866..000000000 --- a/src/SMESH/SMESH_Block.hxx +++ /dev/null @@ -1,275 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -// File : SMESH_Block.hxx -// Created : Tue Nov 30 12:42:18 2004 -// Author : Edward AGAPOV (eap) - - -#ifndef SMESH_Block_HeaderFile -#define SMESH_Block_HeaderFile - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -class SMDS_MeshVolume; -class SMDS_MeshNode; - -// ========================================================= -// class calculating coordinates of 3D points by normalized -// parameters inside the block and vice versa -// ========================================================= - -class SMESH_Block: public math_FunctionSetWithDerivatives -{ - public: - enum TShapeID { // ids of the block sub-shapes - ID_NONE = 0, - - ID_V000 = 1, ID_V100, ID_V010, ID_V110, ID_V001, ID_V101, ID_V011, ID_V111, - - ID_Ex00, ID_Ex10, ID_Ex01, ID_Ex11, - ID_E0y0, ID_E1y0, ID_E0y1, ID_E1y1, - ID_E00z, ID_E10z, ID_E01z, ID_E11z, - - ID_Fxy0, ID_Fxy1, ID_Fx0z, ID_Fx1z, ID_F0yz, ID_F1yz, - - ID_Shell - }; - - - public: // methods about ids of the block sub-shapes - - static int NbVertices() { return 8; } - static int NbEdges() { return 12; } - static int NbFaces() { return 6; } - static int NbSubShapes() { return ID_Shell; } - // to avoid magic numbers when allocating memory for subshapes - - static inline bool IsVertexID( int theShapeID ) - { return ( theShapeID >= ID_V000 && theShapeID <= ID_V111 ); } - - static inline bool IsEdgeID( int theShapeID ) - { return ( theShapeID >= ID_Ex00 && theShapeID <= ID_E11z ); } - - static inline bool IsFaceID( int theShapeID ) - { return ( theShapeID >= ID_Fxy0 && theShapeID <= ID_F1yz ); } - - static int ShapeIndex( int theShapeID ) - { - if ( IsVertexID( theShapeID )) return theShapeID - ID_V000; - if ( IsEdgeID( theShapeID )) return theShapeID - ID_Ex00; - if ( IsFaceID( theShapeID )) return theShapeID - ID_Fxy0; - return 0; - } - // return index [0-...] for each type of sub-shapes, - // for example : - // ShapeIndex( ID_Ex00 ) == 0 - // ShapeIndex( ID_Ex10 ) == 1 - - static void GetFaceEdgesIDs (const int faceID, vector< int >& edgeVec ); - // return edges IDs of a face in the order u0, u1, 0v, 1v - - static void GetEdgeVertexIDs (const int edgeID, vector< int >& vertexVec ); - // return vertex IDs of an edge - - static int GetCoordIndOnEdge (const int theEdgeID) - { return (theEdgeID < ID_E0y0) ? 1 : (theEdgeID < ID_E00z) ? 2 : 3; } - // return an index of a coordinate which varies along the edge - - static double* GetShapeCoef (const int theShapeID); - // for theShapeID( TShapeID ), returns 3 coefficients used - // to compute an addition of an on-theShape point to coordinates - // of an in-shell point. If an in-shell point has parameters (Px,Py,Pz), - // then the addition of a point P is computed as P*kx*ky*kz and ki is - // defined by the returned coef like this: - // ki = (coef[i] == 0) ? 1 : (coef[i] < 0) ? 1 - Pi : Pi - - static int GetShapeIDByParams ( const gp_XYZ& theParams ); - // define an id of the block sub-shape by point parameters - - static ostream& DumpShapeID (const int theBlockShapeID, ostream& stream); - // DEBUG: dump an id of a block sub-shape - - - public: // initialization - - SMESH_Block (): myNbIterations(0), mySumDist(0.) {} - - bool LoadBlockShapes(const TopoDS_Shell& theShell, - const TopoDS_Vertex& theVertex000, - const TopoDS_Vertex& theVertex001, - TopTools_IndexedMapOfOrientedShape& theShapeIDMap ); - // add sub-shapes of theBlock to theShapeIDMap so that they get - // IDs acoording to enum TShapeID - - bool LoadMeshBlock(const SMDS_MeshVolume* theVolume, - const int theNode000Index, - const int theNode001Index, - vector& theOrderedNodes); - // prepare to work with theVolume and - // return nodes in the order of TShapeID enum - - - public: // define coordinates by parameters - - bool VertexPoint( const int theVertexID, gp_XYZ& thePoint ) const { - if ( !IsVertexID( theVertexID )) return false; - thePoint = myPnt[ theVertexID - ID_V000 ]; return true; - } - // return vertex coordinates, parameters are defined by theVertexID - - bool EdgePoint( const int theEdgeID, const gp_XYZ& theParams, gp_XYZ& thePoint ) const { - if ( !IsEdgeID( theEdgeID )) return false; - thePoint = myEdge[ theEdgeID - ID_Ex00 ].Point( theParams ); return true; - } - // return coordinates of a point on edge - - bool FacePoint( const int theFaceID, const gp_XYZ& theParams, gp_XYZ& thePoint ) const { - if ( !IsFaceID ( theFaceID )) return false; - thePoint = myFace[ theFaceID - ID_Fxy0 ].Point( theParams ); return true; - } - // return coordinates of a point on face - - bool ShellPoint( const gp_XYZ& theParams, gp_XYZ& thePoint ) const; - // return coordinates of a point in shell - - static bool ShellPoint(const gp_XYZ& theParams, - const vector& thePointOnShape, - gp_XYZ& thePoint ); - // computes coordinates of a point in shell by points on sub-shapes; - // thePointOnShape[ subShapeID ] must be a point on a subShape; - // thePointOnShape.size() == ID_Shell, thePointOnShape[0] not used - - - public: // define parameters by coordinates - - bool ComputeParameters (const gp_Pnt& thePoint, - gp_XYZ& theParams, - const int theShapeID = ID_Shell); - // compute point parameters in the block. - // Note: for edges, it is better to use EdgeParameters() - - bool VertexParameters(const int theVertexID, gp_XYZ& theParams); - // return parameters of a vertex given by TShapeID - - bool EdgeParameters(const int theEdgeID, const double theU, gp_XYZ& theParams); - // return parameters of a point given by theU on edge - - - public: // services - - static bool IsForwardEdge (const TopoDS_Edge & theEdge, - TopTools_IndexedMapOfOrientedShape& theShapeIDMap) { - int v1ID = theShapeIDMap.FindIndex( TopExp::FirstVertex( theEdge ).Oriented( TopAbs_FORWARD )); - int v2ID = theShapeIDMap.FindIndex( TopExp::LastVertex( theEdge ).Oriented( TopAbs_FORWARD )); - return ( v1ID < v2ID ); - } - // Return true if an in-block parameter increases along theEdge curve - - static void Swap(double& a, double& b) { double tmp = a; a = b; b = tmp; } - - - public: - // methods of math_FunctionSetWithDerivatives used internally - // to define parameters by coordinates - Standard_Integer NbVariables() const; - Standard_Integer NbEquations() const; - Standard_Boolean Value(const math_Vector& X,math_Vector& F) ; - Standard_Boolean Derivatives(const math_Vector& X,math_Matrix& D) ; - Standard_Boolean Values(const math_Vector& X,math_Vector& F,math_Matrix& D) ; - Standard_Integer GetStateNumber (); - - private: - - struct TEdge { - int myCoordInd; - double myFirst; - double myLast; - Handle(Geom_Curve) myC3d; - gp_Trsf myTrsf; - double GetU( const gp_XYZ& theParams ) const; - gp_XYZ Point( const gp_XYZ& theParams ) const; - // if mesh volume - gp_XYZ myNodes[2]; - }; - - struct TFace { - // 4 edges in the order u0, u1, 0v, 1v - int myCoordInd[ 4 ]; - double myFirst [ 4 ]; - double myLast [ 4 ]; - Handle(Geom2d_Curve) myC2d [ 4 ]; - // 4 corner points in the order 00, 10, 11, 01 - gp_XY myCorner [ 4 ]; - // surface - Handle(Geom_Surface) myS; - gp_Trsf myTrsf; - gp_XY GetUV( const gp_XYZ& theParams ) const; - gp_XYZ Point( const gp_XYZ& theParams ) const; - int GetUInd() const { return myCoordInd[ 0 ]; } - int GetVInd() const { return myCoordInd[ 2 ]; } - void GetCoefs( int i, const gp_XYZ& theParams, double& eCoef, double& vCoef ) const; - // if mesh volume - gp_XYZ myNodes[4]; - }; - - TopoDS_Shell myShell; - // geometry in the order as in TShapeID: - // 8 vertices - gp_XYZ myPnt[ 8 ]; - // 12 edges - TEdge myEdge[ 12 ]; - // 6 faces - TFace myFace[ 6 ]; - - // for param computation - - int myFaceIndex; - double myFaceParam; - int myNbIterations; - double mySumDist; - - gp_XYZ myPoint; // the given point - gp_XYZ myParam; // the best parameters guess - double myValues[ 4 ]; // values computed at myParam - - typedef pair TxyzPair; - TxyzPair my3x3x3GridNodes[ 27 ]; - bool myGridComputed; -}; - - -#endif diff --git a/src/SMESH/SMESH_Gen.cxx b/src/SMESH/SMESH_Gen.cxx deleted file mode 100644 index 7a3c34a50..000000000 --- a/src/SMESH/SMESH_Gen.cxx +++ /dev/null @@ -1,721 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Gen.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#include "SMESH_Gen.hxx" -#include "SMESH_subMesh.hxx" -#include "SMESH_HypoFilter.hxx" -#include "SMDS_MeshElement.hxx" -#include "SMDS_MeshNode.hxx" - -#include "utilities.h" -#include "OpUtil.hxx" -#include "Utils_ExceptHandlers.hxx" - -#include -#include -#include -#include - -using namespace std; - -//============================================================================= -/*! - * default constructor: - */ -//============================================================================= - -SMESH_Gen::SMESH_Gen() -{ - MESSAGE("SMESH_Gen::SMESH_Gen"); - _localId = 0; - _hypId = 0; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Gen::~SMESH_Gen() -{ - MESSAGE("SMESH_Gen::~SMESH_Gen"); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -/*SMESH_Hypothesis *SMESH_Gen::CreateHypothesis(const char *anHyp, int studyId) - throw(SALOME_Exception) -{ - - MESSAGE("CreateHypothesis("<GetID(); - myStudyContext->mapHypothesis[hypId] = myHypothesis; - SCRUTE(studyId); - SCRUTE(hypId); - - // store hypothesis in SMESHDS document - - myStudyContext->myDocument->AddHypothesis(myHypothesis); - return myHypothesis; -}*/ - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Mesh* SMESH_Gen::CreateMesh(int studyId) -throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - MESSAGE("SMESH_Gen::CreateMesh"); -// if (aShape.ShapeType() == TopAbs_COMPOUND) -// { -// INFOS("Mesh Compound not yet implemented!"); -// throw(SALOME_Exception(LOCALIZED("Mesh Compound not yet implemented!"))); -// } - - // Get studyContext, create it if it does'nt exist, with a SMESHDS_Document - - StudyContextStruct *myStudyContext = GetStudyContext(studyId); - - // create a new SMESH_mesh object - - SMESH_Mesh *mesh = new SMESH_Mesh(_localId++, - studyId, - this, - myStudyContext->myDocument); - myStudyContext->mapMesh[_localId] = mesh; - - // associate a TopoDS_Shape to the mesh - -//mesh->ShapeToMesh(aShape); - return mesh; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool SMESH_Gen::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) -{ - MESSAGE("SMESH_Gen::Compute"); - // bool isDone = false; - /* - Algo : s'appuie ou non sur une geometrie - Si geometrie: - Vertex : rien à faire (range le point) - Edge, Wire, collection d'edge et wire : 1D - Face, Shell, collection de Face et Shells : 2D - Solid, Collection de Solid : 3D - */ - // *** corriger commentaires - // check hypothesis associated to the mesh : - // - only one algo : type compatible with the type of the shape - // - hypothesis = compatible with algo - // - check if hypothesis are applicable to this algo - // - check contradictions within hypothesis - // (test if enough hypothesis is done further) - - bool ret = true; - -// if ( !CheckAlgoState( aMesh, aShape )) -// { -// INFOS( "ABORT MESHING: some algos or hypothesis are missing"); -// return false; -// } - - SMESH_subMesh *sm = aMesh.GetSubMesh(aShape); - - if ( sm->GetComputeState() == SMESH_subMesh::COMPUTE_OK ) - return true; // already computed - - // ----------------------------------------------------------------- - // apply algos that do not require descretized boundaries, starting - // from the most complex shapes - // ----------------------------------------------------------------- - - // map containing all subshapes in the order: vertices, edges, faces... - const map& smMap = sm->DependsOn(); - map::const_reverse_iterator revItSub = smMap.rbegin(); - - SMESH_subMesh* smToCompute = sm; - while ( smToCompute ) - { - const TopoDS_Shape& aSubShape = smToCompute->GetSubShape(); - if ( GetShapeDim( aSubShape ) < 1 ) break; - - SMESH_Algo* algo = GetAlgo( aMesh, aSubShape ); - if (algo && !algo->NeedDescretBoundary()) { - if (smToCompute->GetComputeState() == SMESH_subMesh::READY_TO_COMPUTE) { - ret = smToCompute->ComputeStateEngine( SMESH_subMesh::COMPUTE ); - } else if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE) { - // JFA for PAL6524 - ret = false; - } else { - } - } - if (!ret) - return false; - - // next subMesh - if (revItSub != smMap.rend()) - { - smToCompute = (*revItSub).second; - revItSub++; - } - else - smToCompute = 0; - } - - // ----------------------------------------------- - // mesh the rest subshapes starting from vertices - // ----------------------------------------------- - - int i, nbSub = smMap.size(); - map::const_iterator itSub = smMap.begin(); - for ( i = 0; i <= nbSub; ++i ) // loop on the whole map plus - { - if ( itSub == smMap.end() ) - smToCompute = sm; - else - smToCompute = (itSub++)->second; - if (smToCompute->GetComputeState() != SMESH_subMesh::READY_TO_COMPUTE) { - if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE) - ret = false; - continue; - } - TopoDS_Shape subShape = smToCompute->GetSubShape(); - if ( subShape.ShapeType() != TopAbs_VERTEX ) - { - if ( !smToCompute->ComputeStateEngine(SMESH_subMesh::COMPUTE) ) - ret = false; - } - else - { - TopoDS_Vertex V1 = TopoDS::Vertex(subShape); - gp_Pnt P1 = BRep_Tool::Pnt(V1); - SMESHDS_Mesh * meshDS = aMesh.GetMeshDS(); - SMDS_MeshNode * node = meshDS->AddNode(P1.X(), P1.Y(), P1.Z()); - if ( node ) { // san - increase robustness - meshDS->SetNodeOnVertex(node, V1); - smToCompute->ComputeStateEngine(SMESH_subMesh::COMPUTE); - } - } - } - - MESSAGE( "VSR - SMESH_Gen::Compute() finished, OK = " << ret); - return ret; -} - - -//======================================================================= -//function : checkConformIgnoredAlgos -//purpose : -//======================================================================= - -static bool checkConformIgnoredAlgos(SMESH_Mesh& aMesh, - SMESH_subMesh* aSubMesh, - const SMESH_Algo* aGlobIgnoAlgo, - const SMESH_Algo* aLocIgnoAlgo, - bool & checkConform, - map& aCheckedMap) -{ - ASSERT( aSubMesh ); - if ( aSubMesh->GetSubShape().ShapeType() == TopAbs_VERTEX) - return true; - - - bool ret = true; - - const list& listHyp = - aMesh.GetMeshDS()->GetHypothesis( aSubMesh->GetSubShape() ); - list::const_iterator it=listHyp.begin(); - for ( ; it != listHyp.end(); it++) - { - const SMESHDS_Hypothesis * aHyp = *it; - if (aHyp->GetType() == SMESHDS_Hypothesis::PARAM_ALGO) - continue; - - const SMESH_Algo* algo = dynamic_cast (aHyp); - ASSERT ( algo ); - - if ( aLocIgnoAlgo ) // algo is hidden by a local algo of upper dim - { - INFOS( "Local <" << algo->GetName() << "> is hidden by local <" - << aLocIgnoAlgo->GetName() << ">"); - } - else - { - bool isGlobal = (aMesh.IsMainShape( aSubMesh->GetSubShape() )); - int dim = algo->GetDim(); - int aMaxGlobIgnoDim = ( aGlobIgnoAlgo ? aGlobIgnoAlgo->GetDim() : -1 ); - - if ( dim < aMaxGlobIgnoDim ) - { - // algo is hidden by a global algo - INFOS( ( isGlobal ? "Global" : "Local" ) - << " <" << algo->GetName() << "> is hidden by global <" - << aGlobIgnoAlgo->GetName() << ">"); - } - else if ( !algo->NeedDescretBoundary() && !isGlobal) - { - // local algo is not hidden and hides algos on sub-shapes - if (checkConform && !aSubMesh->IsConform( algo )) - { - ret = false; - checkConform = false; // no more check conformity - INFOS( "ERROR: Local <" << algo->GetName() << - "> would produce not conform mesh: " - " hypotesis is missing"); - } - - // sub-algos will be hidden by a local - const map& smMap = aSubMesh->DependsOn(); - map::const_reverse_iterator revItSub; - bool checkConform2 = false; - for ( revItSub = smMap.rbegin(); revItSub != smMap.rend(); revItSub++) - { - checkConformIgnoredAlgos (aMesh, (*revItSub).second, aGlobIgnoAlgo, - algo, checkConform2, aCheckedMap); - int key = (*revItSub).first; - SMESH_subMesh* sm = (*revItSub).second; - if ( aCheckedMap.find( key ) == aCheckedMap.end() ) - { - aCheckedMap[ key ] = sm; - } - } - } - } - } - - return ret; -} - -//======================================================================= -//function : checkMissing -//purpose : notify on missing hypothesis -// Return false if algo or hipothesis is missing -//======================================================================= - -static bool checkMissing(SMESH_Gen* aGen, - SMESH_Mesh& aMesh, - SMESH_subMesh* aSubMesh, - const int aTopAlgoDim, - bool* globalChecked, - const bool checkNoAlgo, - map& aCheckedMap) -{ - if ( aSubMesh->GetSubShape().ShapeType() == TopAbs_VERTEX) - return true; - - //MESSAGE("=====checkMissing"); - - int ret = true; - SMESH_Algo* algo = 0; - - switch (aSubMesh->GetAlgoState()) - { - case SMESH_subMesh::NO_ALGO: { - if (checkNoAlgo) - { - // should there be any algo? - int shapeDim = SMESH_Gen::GetShapeDim( aSubMesh->GetSubShape() ); - if (aTopAlgoDim > shapeDim) - { - INFOS( "ERROR: " << shapeDim << "D algorithm is missing" ); - ret = false; - } - } - return ret; - } - case SMESH_subMesh::MISSING_HYP: { - // notify if an algo missing hyp is attached to aSubMesh - algo = aGen->GetAlgo( aMesh, aSubMesh->GetSubShape() ); - ASSERT( algo ); - bool IsGlobalHypothesis = aGen->IsGlobalHypothesis( algo, aMesh ); - if (!IsGlobalHypothesis || !globalChecked[ algo->GetDim() ]) - { - INFOS( "ERROR: " << (IsGlobalHypothesis ? "Global " : "Local ") - << "<" << algo->GetName() << "> misses some hypothesis"); - if (IsGlobalHypothesis) - globalChecked[ algo->GetDim() ] = true; - } - ret = false; - break; - } - case SMESH_subMesh::HYP_OK: - algo = aGen->GetAlgo( aMesh, aSubMesh->GetSubShape() ); - ret = true; - break; - default: ASSERT(0); - } - - // do not check under algo that hides sub-algos or - // re-start checking NO_ALGO state - ASSERT (algo); - bool isTopLocalAlgo = - ( aTopAlgoDim <= algo->GetDim() && !aGen->IsGlobalHypothesis( algo, aMesh )); - if (!algo->NeedDescretBoundary() || isTopLocalAlgo) - { - bool checkNoAlgo2 = ( algo->NeedDescretBoundary() ); - const map& subMeshes = aSubMesh->DependsOn(); - map::const_iterator itsub; - for (itsub = subMeshes.begin(); itsub != subMeshes.end(); itsub++) - { - // sub-meshes should not be checked further more - int key = (*itsub).first; - SMESH_subMesh* sm = (*itsub).second; - if ( aCheckedMap.find( key ) == aCheckedMap.end() ) - aCheckedMap[ key ] = sm; - - if (isTopLocalAlgo) - { - //check algo on sub-meshes - int aTopAlgoDim2 = algo->GetDim(); - if (!checkMissing (aGen, aMesh, sm, aTopAlgoDim2, - globalChecked, checkNoAlgo2, aCheckedMap)) - { - ret = false; - if (sm->GetAlgoState() == SMESH_subMesh::NO_ALGO ) - checkNoAlgo2 = false; - } - } - } - } - return ret; -} - -//======================================================================= -//function : CheckAlgoState -//purpose : notify on bad state of attached algos, return false -// if Compute() would fail because of some algo bad state -//======================================================================= - -bool SMESH_Gen::CheckAlgoState(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape) -{ - //MESSAGE("SMESH_Gen::CheckAlgoState"); - - bool ret = true; - bool hasAlgo = false; - - SMESH_subMesh* sm = aMesh.GetSubMesh(aShape); - const SMESHDS_Mesh* meshDS = aMesh.GetMeshDS(); - TopoDS_Shape mainShape = meshDS->ShapeToMesh(); - - // ----------------- - // get global algos - // ----------------- - - const SMESH_Algo* aGlobAlgoArr[] = {0,0,0,0}; - - const list& listHyp = meshDS->GetHypothesis( mainShape ); - list::const_iterator it=listHyp.begin(); - for ( ; it != listHyp.end(); it++) - { - const SMESHDS_Hypothesis * aHyp = *it; - if (aHyp->GetType() == SMESHDS_Hypothesis::PARAM_ALGO) - continue; - - const SMESH_Algo* algo = dynamic_cast (aHyp); - ASSERT ( algo ); - - int dim = algo->GetDim(); - aGlobAlgoArr[ dim ] = algo; - - hasAlgo = true; - } - - // -------------------------------------------------------- - // info on algos that will be ignored because of ones that - // don't NeedDescretBoundary() attached to super-shapes, - // check that a conform mesh will be produced - // -------------------------------------------------------- - - - // find a global algo possibly hidding sub-algos - int dim; - const SMESH_Algo* aGlobIgnoAlgo = 0; - for (dim = 3; dim > 0; dim--) - { - if (aGlobAlgoArr[ dim ] && - !aGlobAlgoArr[ dim ]->NeedDescretBoundary()) - { - aGlobIgnoAlgo = aGlobAlgoArr[ dim ]; - break; - } - } - - const map& smMap = sm->DependsOn(); - map::const_reverse_iterator revItSub = smMap.rbegin(); - map aCheckedMap; - bool checkConform = ( !aMesh.IsNotConformAllowed() ); - int aKey = 1; - SMESH_subMesh* smToCheck = sm; - - // loop on aShape and its sub-shapes - while ( smToCheck ) - { - if ( smToCheck->GetSubShape().ShapeType() == TopAbs_VERTEX) - break; - - if ( aCheckedMap.find( aKey ) == aCheckedMap.end() ) - if (!checkConformIgnoredAlgos (aMesh, smToCheck, aGlobIgnoAlgo, - 0, checkConform, aCheckedMap)) - ret = false; - - if ( smToCheck->GetAlgoState() != SMESH_subMesh::NO_ALGO ) - hasAlgo = true; - - // next subMesh - if (revItSub != smMap.rend()) - { - aKey = (*revItSub).first; - smToCheck = (*revItSub).second; - revItSub++; - } - else - { - smToCheck = 0; - } - - } - - // ---------------------------------------------------------------- - // info on missing hypothesis and find out if all needed algos are - // well defined - // ---------------------------------------------------------------- - - //MESSAGE( "---info on missing hypothesis and find out if all needed algos are"); - - // find max dim of global algo - int aTopAlgoDim = 0; - for (dim = 3; dim > 0; dim--) - { - if (aGlobAlgoArr[ dim ]) - { - aTopAlgoDim = dim; - break; - } - } - aCheckedMap.clear(); - smToCheck = sm; - revItSub = smMap.rbegin(); - bool checkNoAlgo = (bool) aTopAlgoDim; - bool globalChecked[] = { false, false, false, false }; - - // loop on aShape and its sub-shapes - while ( smToCheck ) - { - if ( smToCheck->GetSubShape().ShapeType() == TopAbs_VERTEX) - break; - - if ( aCheckedMap.find( aKey ) == aCheckedMap.end() ) - if (!checkMissing (this, aMesh, smToCheck, aTopAlgoDim, - globalChecked, checkNoAlgo, aCheckedMap)) - { - ret = false; - if (smToCheck->GetAlgoState() == SMESH_subMesh::NO_ALGO ) - checkNoAlgo = false; - } - - // next subMesh - if (revItSub != smMap.rend()) - { - aKey = (*revItSub).first; - smToCheck = (*revItSub).second; - revItSub++; - } - else - smToCheck = 0; - } - - if ( !hasAlgo ) - INFOS( "None algorithm attached" ); - - return ( ret && hasAlgo ); -} - -//======================================================================= -//function : IsGlobalHypothesis -//purpose : check if theAlgo is attached to the main shape -//======================================================================= - -bool SMESH_Gen::IsGlobalHypothesis(const SMESH_Hypothesis* theHyp, SMESH_Mesh& aMesh) -{ - SMESH_HypoFilter filter( SMESH_HypoFilter::Is( theHyp )); - return aMesh.GetHypothesis( aMesh.GetMeshDS()->ShapeToMesh(), filter, false ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Algo *SMESH_Gen::GetAlgo(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) -{ -// MESSAGE("SMESH_Gen::GetAlgo"); - - SMESH_HypoFilter filter( SMESH_HypoFilter::IsAlgo() ); - filter.And( filter.IsApplicableTo( aShape )); - - list algoList; - aMesh.GetHypotheses( aShape, filter, algoList, true ); - - if ( algoList.empty() ) - return NULL; - - if (algoList.size() > 1 ) { // check if there is one algo several times - list ::iterator algo = algoList.begin(); - for ( ; algo != algoList.end(); ++algo ) - if ( (*algo) != algoList.front() && - (*algo)->GetName() != algoList.front()->GetName() ) - return NULL; - } - - return const_cast ( static_cast( algoList.front() )); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -StudyContextStruct *SMESH_Gen::GetStudyContext(int studyId) -{ - // Get studyContext, create it if it does'nt exist, with a SMESHDS_Document - - if (_mapStudyContext.find(studyId) == _mapStudyContext.end()) - { - _mapStudyContext[studyId] = new StudyContextStruct; - _mapStudyContext[studyId]->myDocument = new SMESHDS_Document(studyId); - } - StudyContextStruct *myStudyContext = _mapStudyContext[studyId]; -// ASSERT(_mapStudyContext.find(studyId) != _mapStudyContext.end()); - return myStudyContext; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_Gen::Save(int studyId, const char *aUrlOfFile) -{ -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_Gen::Load(int studyId, const char *aUrlOfFile) -{ -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_Gen::Close(int studyId) -{ -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -int SMESH_Gen::GetShapeDim(const TopAbs_ShapeEnum & aShapeType) -{ - int shapeDim = -1; // Shape dimension: 0D, 1D, 2D, 3D - int type = aShapeType;//.ShapeType(); - switch (type) - { - case TopAbs_COMPOUND: - case TopAbs_COMPSOLID: - case TopAbs_SOLID: - case TopAbs_SHELL: - { - shapeDim = 3; - break; - } - // case TopAbs_SHELL: - case TopAbs_FACE: - { - shapeDim = 2; - break; - } - case TopAbs_WIRE: - case TopAbs_EDGE: - { - shapeDim = 1; - break; - } - case TopAbs_VERTEX: - { - shapeDim = 0; - break; - } - } - return shapeDim; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -int SMESH_Gen::GetANewId() -{ - //MESSAGE("SMESH_Gen::GetANewId"); - return _hypId++; -} diff --git a/src/SMESH/SMESH_Gen.hxx b/src/SMESH/SMESH_Gen.hxx deleted file mode 100644 index 17dbe35e6..000000000 --- a/src/SMESH/SMESH_Gen.hxx +++ /dev/null @@ -1,106 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Gen.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_GEN_HXX_ -#define _SMESH_GEN_HXX_ - -#include "Utils_SALOME_Exception.hxx" - -#include "SMESH_Hypothesis.hxx" -#include "SMESH_Algo.hxx" -#include "SMESH_1D_Algo.hxx" -#include "SMESH_2D_Algo.hxx" -#include "SMESH_3D_Algo.hxx" -#include "SMESH_Mesh.hxx" - -#include "SMESHDS_Document.hxx" - -#include - -#include - - -typedef struct studyContextStruct -{ - std::map < int, SMESH_Hypothesis * >mapHypothesis; - std::map < int, SMESH_Mesh * >mapMesh; - SMESHDS_Document * myDocument; -} StudyContextStruct; - -class SMESH_Gen -{ - public: - SMESH_Gen(); - ~SMESH_Gen(); - -// SMESH_Hypothesis *CreateHypothesis(const char *anHyp, int studyId) -// throw(SALOME_Exception); - SMESH_Mesh* CreateMesh(int studyId) - throw(SALOME_Exception); - bool Compute(::SMESH_Mesh & aMesh, const TopoDS_Shape & aShape); - - bool CheckAlgoState(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape); - // notify on bad state of attached algos, return false - // if Compute() would fail because of some algo bad state - - - StudyContextStruct *GetStudyContext(int studyId); - - static int GetShapeDim(const TopAbs_ShapeEnum & aShapeType); - static int GetShapeDim(const TopoDS_Shape & aShape) - { return GetShapeDim( aShape.ShapeType() ); } - SMESH_Algo* GetAlgo(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape); - static bool IsGlobalHypothesis(const SMESH_Hypothesis* theHyp, SMESH_Mesh& aMesh); - - // inherited methods from SALOMEDS::Driver - - void Save(int studyId, const char *aUrlOfFile); - void Load(int studyId, const char *aUrlOfFile); - void Close(int studyId); - const char *ComponentDataType(); - - const char *IORToLocalPersistentID(const char *IORString, bool & IsAFile); - const char *LocalPersistentIDToIOR(const char *aLocalPersistentID); - - int GetANewId(); - - std::map < int, SMESH_Algo * >_mapAlgo; - std::map < int, SMESH_1D_Algo * >_map1D_Algo; - std::map < int, SMESH_2D_Algo * >_map2D_Algo; - std::map < int, SMESH_3D_Algo * >_map3D_Algo; - - private: - - int _localId; // unique Id of created objects, within SMESH_Gen entity - std::map < int, StudyContextStruct * >_mapStudyContext; - - // hypotheses managing - int _hypId; -}; - -#endif diff --git a/src/SMESH/SMESH_Group.cxx b/src/SMESH/SMESH_Group.cxx deleted file mode 100644 index 49cade122..000000000 --- a/src/SMESH/SMESH_Group.cxx +++ /dev/null @@ -1,66 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2004 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Group.cxx -// Author : Michael Sazonov (OCC) -// Module : SMESH -// $Header$ - -#include "SMESH_Group.hxx" -#include "SMESH_Mesh.hxx" -#include "SMESHDS_Group.hxx" -#include "SMESHDS_GroupOnGeom.hxx" - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Group::SMESH_Group (int theID, - const SMESH_Mesh* theMesh, - const SMDSAbs_ElementType theType, - const char* theName, - const TopoDS_Shape& theShape) - : myName(theName) -{ - if ( theShape.IsNull() ) - myGroupDS = new SMESHDS_Group (theID, - const_cast(theMesh)->GetMeshDS(), - theType); - else - myGroupDS = new SMESHDS_GroupOnGeom (theID, - const_cast(theMesh)->GetMeshDS(), - theType, - theShape); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Group::~SMESH_Group () -{ - delete myGroupDS; -} diff --git a/src/SMESH/SMESH_Group.hxx b/src/SMESH/SMESH_Group.hxx deleted file mode 100644 index 26493e4e0..000000000 --- a/src/SMESH/SMESH_Group.hxx +++ /dev/null @@ -1,67 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2004 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Group.hxx -// Author : Michael Sazonov (OCC) -// Module : SMESH -// $Header$ - -#ifndef _SMESH_Group_HeaderFile -#define _SMESH_Group_HeaderFile - -#include -#include -#include - - -class SMESHDS_GroupBase; -class SMESH_Mesh; - -class SMESH_Group -{ - public: - - SMESH_Group (int theID, - const SMESH_Mesh* theMesh, - const SMDSAbs_ElementType theType, - const char* theName, - const TopoDS_Shape& theShape = TopoDS_Shape()); - ~SMESH_Group (); - - void SetName (const char* theName) { myName = theName; } - - const char* GetName () const { return myName.c_str(); } - - SMESHDS_GroupBase * GetGroupDS () { return myGroupDS; } - - private: - SMESH_Group (const SMESH_Group& theOther); - // prohibited copy constructor - SMESH_Group& operator = (const SMESH_Group& theOther); - // prohibited assign operator - - SMESHDS_GroupBase * myGroupDS; - std::string myName; - -}; - -#endif diff --git a/src/SMESH/SMESH_HypoFilter.cxx b/src/SMESH/SMESH_HypoFilter.cxx deleted file mode 100644 index 783547bb1..000000000 --- a/src/SMESH/SMESH_HypoFilter.cxx +++ /dev/null @@ -1,290 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_HypoFilter.cxx -// Module : SMESH -// $Header$ - -#include "SMESH_HypoFilter.hxx" - -#include "SMESH_Hypothesis.hxx" -#include "SMESH_subMesh.hxx" - -using namespace std; - - -//======================================================================= -//function : NamePredicate::Value -//purpose : -//======================================================================= - -bool SMESH_HypoFilter::NamePredicate::IsOk (const SMESH_Hypothesis* aHyp, - const TopoDS_Shape& /*aShape*/ ) const -{ - return ( _name == aHyp->GetName() ); -} - -//======================================================================= -//function : TypePredicate::Value -//purpose : -//======================================================================= - -int SMESH_HypoFilter::TypePredicate::Value( const SMESH_Hypothesis* aHyp ) const -{ - return aHyp->GetType(); -}; - -//======================================================================= -//function : DimPredicate::Value -//purpose : -//======================================================================= - -int SMESH_HypoFilter::DimPredicate::Value( const SMESH_Hypothesis* aHyp ) const -{ - return aHyp->GetDim(); -} - -//======================================================================= -//function : ApplicablePredicate::IsOk -//purpose : -//======================================================================= - -bool SMESH_HypoFilter::ApplicablePredicate::IsOk(const SMESH_Hypothesis* aHyp, - const TopoDS_Shape& /*aShape*/) const -{ - return SMESH_subMesh::IsApplicableHypotesis( aHyp, (TopAbs_ShapeEnum)_shapeType ); -}; - -//======================================================================= -//function : ApplicablePredicate::ApplicablePredicate -//purpose : -//======================================================================= - -SMESH_HypoFilter::ApplicablePredicate::ApplicablePredicate( const TopoDS_Shape& theShape ) -{ - _shapeType = ( theShape.IsNull() ? TopAbs_SHAPE : theShape.ShapeType()); -} - -//======================================================================= -//function : InstancePredicate::IsOk -//purpose : -//======================================================================= - -bool SMESH_HypoFilter::InstancePredicate::IsOk(const SMESH_Hypothesis* aHyp, - const TopoDS_Shape& /*aShape*/) const -{ - return _hypo == aHyp; -} - -//======================================================================= -//function : IsGlobalPredicate::IsOk -//purpose : -//======================================================================= - -bool SMESH_HypoFilter::IsGlobalPredicate::IsOk(const SMESH_Hypothesis* aHyp, - const TopoDS_Shape& aShape) const -{ - return ( !_mainShape.IsNull() && !aShape.IsNull() && _mainShape.IsSame( aShape )); -} - -//======================================================================= -//function : SMESH_HypoFilter -//purpose : -//======================================================================= - -SMESH_HypoFilter::SMESH_HypoFilter() -{ -} - -//======================================================================= -//function : SMESH_HypoFilter -//purpose : -//======================================================================= - -SMESH_HypoFilter::SMESH_HypoFilter( SMESH_HypoPredicate* aPredicate, bool notNagate ) -{ - add( notNagate ? AND : AND_NOT, aPredicate ); -} - -//======================================================================= -//function : And -//purpose : -//======================================================================= - -void SMESH_HypoFilter::And( SMESH_HypoPredicate* aPredicate ) -{ - add( AND, aPredicate ); -} - -//======================================================================= -//function : AndNot -//purpose : -//======================================================================= - -void SMESH_HypoFilter::AndNot( SMESH_HypoPredicate* aPredicate ) -{ - add( AND_NOT, aPredicate ); -} - -//======================================================================= -//function : Or -//purpose : -//======================================================================= - -void SMESH_HypoFilter::Or( SMESH_HypoPredicate* aPredicate ) -{ - add( OR, aPredicate ); -} - -//======================================================================= -//function : OrNot -//purpose : Return predicates -//======================================================================= - -void SMESH_HypoFilter::OrNot( SMESH_HypoPredicate* aPredicate ) -{ - add( OR_NOT, aPredicate ); -} - -//======================================================================= -//function : Is -//purpose : -//======================================================================= - -SMESH_HypoPredicate* SMESH_HypoFilter::Is(const SMESH_Hypothesis* theHypo) -{ - return new InstancePredicate( theHypo ); -} - -//======================================================================= -//function : IsAlgo -//purpose : -//======================================================================= - -SMESH_HypoPredicate* SMESH_HypoFilter::IsAlgo() -{ - return new TypePredicate( MORE, SMESHDS_Hypothesis::PARAM_ALGO ); -} - -//======================================================================= -//function : IsGlobal -//purpose : -//======================================================================= - - SMESH_HypoPredicate* SMESH_HypoFilter::IsGlobal(const TopoDS_Shape& theMainShape) -{ - return new IsGlobalPredicate( theMainShape ); -} - -//======================================================================= -//function : HasName -//purpose : -//======================================================================= - -SMESH_HypoPredicate* SMESH_HypoFilter::HasName(const string & theName) -{ - return new NamePredicate( theName ); -} - -//======================================================================= -//function : HasDim -//purpose : -//======================================================================= - -SMESH_HypoPredicate* SMESH_HypoFilter::HasDim(const int theDim) -{ - return new DimPredicate( EQUAL, theDim ); -} - -//======================================================================= -//function : IsApplicableTo -//purpose : -//======================================================================= - -SMESH_HypoPredicate* SMESH_HypoFilter::IsApplicableTo(const TopoDS_Shape& theShape) -{ - return new ApplicablePredicate( theShape ); -} - -//======================================================================= -//function : HasType -//purpose : -//======================================================================= - -SMESH_HypoPredicate* SMESH_HypoFilter::HasType(const int theHypType) -{ - return new TypePredicate( EQUAL, theHypType ); -} - -//======================================================================= -//function : IsOk -//purpose : -//======================================================================= - -bool SMESH_HypoFilter::IsOk (const SMESH_Hypothesis* aHyp, - const TopoDS_Shape& aShape) const -{ - if ( myPredicates.empty() ) - return true; - - bool ok = ( myPredicates.front()->_logical_op <= AND_NOT ); - list::const_iterator pred = myPredicates.begin(); - for ( ; pred != myPredicates.end(); ++pred ) - { - bool ok2 = (*pred)->IsOk( aHyp, aShape ); - switch ( (*pred)->_logical_op ) { - case AND: ok = ok && ok2; break; - case AND_NOT: ok = ok && !ok2; break; - case OR: ok = ok || ok2; break; - case OR_NOT: ok = ok || !ok2; break; - default:; - } - } - return ok; -} - -//======================================================================= -//function : Init -//purpose : -//======================================================================= - -void SMESH_HypoFilter::Init ( SMESH_HypoPredicate* aPredicate, bool notNagate ) -{ - list::const_iterator pred = myPredicates.begin(); - for ( ; pred != myPredicates.end(); ++pred ) - delete *pred; - - add( notNagate ? AND : AND_NOT, aPredicate ); -} - - -//======================================================================= -//function : IsOk -//purpose : -//======================================================================= - -SMESH_HypoFilter::~SMESH_HypoFilter() -{ - Init(0); -} - diff --git a/src/SMESH/SMESH_HypoFilter.hxx b/src/SMESH/SMESH_HypoFilter.hxx deleted file mode 100644 index 673b9fe2a..000000000 --- a/src/SMESH/SMESH_HypoFilter.hxx +++ /dev/null @@ -1,163 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_HypoFilter.hxx -// Module : SMESH -// $Header$ - - -#ifndef SMESH_HypoFilter_HeaderFile -#define SMESH_HypoFilter_HeaderFile - -// =========================== -// Filter of SMESH_Hypothesis -// =========================== - -#include -#include - -class SMESH_HypoFilter; -class SMESH_Hypothesis; -class TopoDS_Shape; - -class SMESH_HypoPredicate { - public: - virtual bool IsOk(const SMESH_Hypothesis* aHyp, - const TopoDS_Shape& aShape) const = 0; - // check aHyp or/and aShape it is assigned to - virtual ~SMESH_HypoPredicate() {} - private: - int _logical_op; - friend class SMESH_HypoFilter; -}; - -class SMESH_HypoFilter: public SMESH_HypoPredicate -{ - public: - // Create and add predicates. - // Added predicates will be destroyed by filter when it dies - SMESH_HypoFilter(); - SMESH_HypoFilter( SMESH_HypoPredicate* aPredicate, bool notNagate = true ); - // notNagate==false means !aPredicate->IsOk() - void Init ( SMESH_HypoPredicate* aPredicate, bool notNagate = true ); - void And ( SMESH_HypoPredicate* aPredicate ); - void AndNot( SMESH_HypoPredicate* aPredicate ); - void Or ( SMESH_HypoPredicate* aPredicate ); - void OrNot ( SMESH_HypoPredicate* aPredicate ); - - // Create predicates - static SMESH_HypoPredicate* IsAlgo(); - static SMESH_HypoPredicate* IsApplicableTo(const TopoDS_Shape& theMainShape); - static SMESH_HypoPredicate* Is(const SMESH_Hypothesis* theHypo); - static SMESH_HypoPredicate* IsGlobal(const TopoDS_Shape& theMainShape); - static SMESH_HypoPredicate* HasName(const std::string & theName); - static SMESH_HypoPredicate* HasDim(const int theDim); - static SMESH_HypoPredicate* HasType(const int theHypType); - - bool IsOk (const SMESH_Hypothesis* aHyp, - const TopoDS_Shape& aShape) const; - // check aHyp or/and aShape it is assigned to - - ~SMESH_HypoFilter(); - - - protected: - // fields - - std::list myPredicates; - - // private methods - - enum Logical { AND, AND_NOT, OR, OR_NOT }; - enum Comparison { EQUAL, NOT_EQUAL, MORE, LESS }; - - SMESH_HypoFilter(const SMESH_HypoFilter& other){} - - void add( Logical bool_op, SMESH_HypoPredicate* pred ) - { - if ( pred ) { - pred->_logical_op = bool_op; - myPredicates.push_back( pred ); - } - } - - // predicates implementation - - template - struct templPredicate: public SMESH_HypoPredicate { - Comparison _comp; - TValue _val; - virtual TValue Value(const SMESH_Hypothesis* aHyp) const = 0; - virtual bool IsOk(const SMESH_Hypothesis* aHyp, const TopoDS_Shape& ) const - { - if ( _comp == EQUAL ) return _val == Value( aHyp ); - else if ( _comp == NOT_EQUAL ) return _val != Value( aHyp ); - else if ( _comp == MORE ) return _val < Value( aHyp ); - else return _val > Value( aHyp ); - } - }; - - struct NamePredicate : public SMESH_HypoPredicate { - std::string _name; - NamePredicate( std::string name ): _name(name){} - bool IsOk(const SMESH_Hypothesis* aHyp, - const TopoDS_Shape& aShape) const; - }; - - struct TypePredicate : public templPredicate< int > { - TypePredicate( Comparison comp, int hypType ) - { _comp = comp; _val = hypType; } - int Value( const SMESH_Hypothesis* aHyp ) const; - }; - - struct DimPredicate : public templPredicate< int > { - DimPredicate( Comparison comp, int dim ) - { _comp = comp; _val = dim; } - int Value( const SMESH_Hypothesis* aHyp ) const; - }; - - struct ApplicablePredicate : public SMESH_HypoPredicate { - int _shapeType; - ApplicablePredicate( const TopoDS_Shape& theShape ); - bool IsOk(const SMESH_Hypothesis* aHyp, - const TopoDS_Shape& aShape) const; - }; - - struct InstancePredicate : public SMESH_HypoPredicate { - const SMESH_Hypothesis* _hypo; - InstancePredicate( const SMESH_Hypothesis* hypo ):_hypo(hypo){} - bool IsOk(const SMESH_Hypothesis* aHyp, - const TopoDS_Shape& aShape) const; - }; - - struct IsGlobalPredicate : public SMESH_HypoPredicate { - const TopoDS_Shape& _mainShape; - IsGlobalPredicate( const TopoDS_Shape& mainShape ):_mainShape(mainShape){} - bool IsOk(const SMESH_Hypothesis* aHyp, - const TopoDS_Shape& aShape) const; - }; - -}; - - -#endif diff --git a/src/SMESH/SMESH_Hypothesis.cxx b/src/SMESH/SMESH_Hypothesis.cxx deleted file mode 100644 index 0107c3e36..000000000 --- a/src/SMESH/SMESH_Hypothesis.cxx +++ /dev/null @@ -1,162 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Hypothesis.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -using namespace std; -#include "SMESH_Hypothesis.hxx" -#include "SMESH_Gen.hxx" -#include "SMESH_subMesh.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Hypothesis::SMESH_Hypothesis(int hypId, - int studyId, - SMESH_Gen* gen) : SMESHDS_Hypothesis(hypId) -{ - //MESSAGE("SMESH_Hypothesis::SMESH_Hypothesis"); - _gen = gen; - _studyId = studyId; - StudyContextStruct* myStudyContext = _gen->GetStudyContext(_studyId); - myStudyContext->mapHypothesis[_hypId] = this; - _type = PARAM_ALGO; - _shapeType = 0; // to be set by algo with TopAbs_Enum - _param_algo_dim = -1; // to be set by algo parameter -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Hypothesis::~SMESH_Hypothesis() -{ - MESSAGE("SMESH_Hypothesis::~SMESH_Hypothesis"); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -int SMESH_Hypothesis::GetDim() const -{ - int dim = -1; - switch (_type) - { - case ALGO_1D: dim = 1; break; - case ALGO_2D: dim = 2; break; - case ALGO_3D: dim = 3; break; - case PARAM_ALGO: dim = _param_algo_dim; break; - } - return dim; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -int SMESH_Hypothesis::GetShapeType() const -{ - return _shapeType; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -int SMESH_Hypothesis::GetStudyId() const -{ - return _studyId; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_Hypothesis::NotifySubMeshesHypothesisModification() -{ - MESSAGE("SMESH_Hypothesis::NotifySubMeshesHypothesisModification"); - - // for all meshes in study - - StudyContextStruct* myStudyContext = _gen->GetStudyContext(_studyId); - map::iterator itm; - for (itm = myStudyContext->mapMesh.begin(); - itm != myStudyContext->mapMesh.end(); - itm++) - { - SMESH_Mesh* mesh = (*itm).second; - const list& subMeshes = - mesh->GetSubMeshUsingHypothesis(this); - - //for all subMeshes using hypothesis - - list::const_iterator its; - for (its = subMeshes.begin(); its != subMeshes.end(); its++) - (*its)->ComputeStateEngine(SMESH_subMesh::MODIF_HYP); - } -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -const char* SMESH_Hypothesis::GetLibName() const -{ -// MESSAGE("SMESHDS_Hypothesis::GetLibName"); -// SCRUTE(_LibName); -// SCRUTE(&_LibName); - return _libName.c_str(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_Hypothesis::SetLibName(const char* theLibName) -{ -// MESSAGE("SMESHDS_Hypothesis::SetLibName"); - _libName = string(theLibName); -} diff --git a/src/SMESH/SMESH_Hypothesis.hxx b/src/SMESH/SMESH_Hypothesis.hxx deleted file mode 100644 index 1d881a680..000000000 --- a/src/SMESH/SMESH_Hypothesis.hxx +++ /dev/null @@ -1,74 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Hypothesis.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_HYPOTHESIS_HXX_ -#define _SMESH_HYPOTHESIS_HXX_ - -#include "SMESHDS_Hypothesis.hxx" - -class SMESH_Gen; - -class SMESH_Hypothesis: public SMESHDS_Hypothesis -{ -public: - enum Hypothesis_Status // in the order of severity - { - HYP_OK, - HYP_MISSING, // algo misses a hypothesis - HYP_CONCURENT, // several applicable hypotheses - HYP_BAD_PARAMETER,// hypothesis has a bad parameter value - HYP_UNKNOWN_FATAL,// --- all statuses below should be considered as fatal - // for Add/RemoveHypothesis operations - HYP_INCOMPATIBLE, // hypothesis does not fit algo - HYP_NOTCONFORM, // not conform mesh is produced appling a hypothesis - HYP_ALREADY_EXIST,// such hypothesis already exist - HYP_BAD_DIM // bad dimension - }; - static bool IsStatusFatal(Hypothesis_Status theStatus) - { return theStatus >= HYP_UNKNOWN_FATAL; } - - SMESH_Hypothesis(int hypId, int studyId, SMESH_Gen* gen); - virtual ~SMESH_Hypothesis(); - int GetDim() const; - int GetStudyId() const; - void NotifySubMeshesHypothesisModification(); - int GetShapeType() const; - const char* GetLibName() const; - void SetLibName(const char* theLibName); - -protected: - SMESH_Gen* _gen; - int _studyId; - int _shapeType; - int _param_algo_dim; - -private: - std::string _libName; -}; - -#endif diff --git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx deleted file mode 100644 index c473bd612..000000000 --- a/src/SMESH/SMESH_Mesh.cxx +++ /dev/null @@ -1,1429 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Mesh.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#include "SMESH_Mesh.hxx" -#include "SMESH_subMesh.hxx" -#include "SMESH_Gen.hxx" -#include "SMESH_Hypothesis.hxx" -#include "SMESH_Group.hxx" -#include "SMESH_HypoFilter.hxx" -#include "SMESHDS_Group.hxx" -#include "SMESHDS_Script.hxx" -#include "SMESHDS_GroupOnGeom.hxx" -#include "SMDS_MeshVolume.hxx" - -#include "utilities.h" - -#include "DriverMED_W_SMESHDS_Mesh.h" -#include "DriverDAT_W_SMDS_Mesh.h" -#include "DriverUNV_W_SMDS_Mesh.h" -#include "DriverSTL_W_SMDS_Mesh.h" - -#include "DriverMED_R_SMESHDS_Mesh.h" -#include "DriverUNV_R_SMDS_Mesh.h" -#include "DriverSTL_R_SMDS_Mesh.h" - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include "Utils_ExceptHandlers.hxx" - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Mesh::SMESH_Mesh(int localId, int studyId, SMESH_Gen * gen, SMESHDS_Document * myDocument) -: _groupId( 0 ) -{ - INFOS("SMESH_Mesh::SMESH_Mesh(int localId)"); - _id = localId; - _studyId = studyId; - _gen = gen; - _myDocument = myDocument; - _idDoc = _myDocument->NewMesh(); - _myMeshDS = _myDocument->GetMesh(_idDoc); - _isShapeToMesh = false; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Mesh::~SMESH_Mesh() -{ - INFOS("SMESH_Mesh::~SMESH_Mesh"); - - // delete groups - map < int, SMESH_Group * >::iterator itg; - for (itg = _mapGroup.begin(); itg != _mapGroup.end(); itg++) { - SMESH_Group *aGroup = (*itg).second; - delete aGroup; - } -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_Mesh::ShapeToMesh(const TopoDS_Shape & aShape) -{ - if(MYDEBUG) MESSAGE("SMESH_Mesh::ShapeToMesh"); - - if ( !_myMeshDS->ShapeToMesh().IsNull() && aShape.IsNull() ) - { - // removal of a shape to mesh, delete objects referring to sub-shapes: - // - sub-meshes - map ::iterator i_sm = _mapSubMesh.begin(); - for ( ; i_sm != _mapSubMesh.end(); ++i_sm ) - delete i_sm->second; - _mapSubMesh.clear(); - // - groups on geometry - map ::iterator i_gr = _mapGroup.begin(); - while ( i_gr != _mapGroup.end() ) { - if ( dynamic_cast( i_gr->second->GetGroupDS() )) { - _myMeshDS->RemoveGroup( i_gr->second->GetGroupDS() ); - delete i_gr->second; - _mapGroup.erase( i_gr++ ); - } - else - i_gr++; - } - _mapPropagationChains.Clear(); - } - else - { - if (_isShapeToMesh) - throw SALOME_Exception(LOCALIZED ("a shape to mesh has already been defined")); - } - _isShapeToMesh = true; - _myMeshDS->ShapeToMesh(aShape); - - // fill _mapAncestors - _mapAncestors.Clear(); - int desType, ancType; - for ( desType = TopAbs_EDGE; desType > TopAbs_COMPOUND; desType-- ) - for ( ancType = desType - 1; ancType >= TopAbs_COMPOUND; ancType-- ) - TopExp::MapShapesAndAncestors ( aShape, - (TopAbs_ShapeEnum) desType, - (TopAbs_ShapeEnum) ancType, - _mapAncestors ); - - // NRI : 24/02/03 - //EAP: 1/9/04 TopExp::MapShapes(aShape, _subShapes); USE the same map of _myMeshDS -} - -//======================================================================= -//function : UNVToMesh -//purpose : -//======================================================================= - -int SMESH_Mesh::UNVToMesh(const char* theFileName) -{ - if(MYDEBUG) MESSAGE("UNVToMesh - theFileName = "<NbNodes() = "<<_myMeshDS->NbNodes()); - MESSAGE("MEDToMesh - _myMeshDS->NbEdges() = "<<_myMeshDS->NbEdges()); - MESSAGE("MEDToMesh - _myMeshDS->NbFaces() = "<<_myMeshDS->NbFaces()); - MESSAGE("MEDToMesh - _myMeshDS->NbVolumes() = "<<_myMeshDS->NbVolumes()); - } - return 1; -} - -//======================================================================= -//function : MEDToMesh -//purpose : -//======================================================================= - -int SMESH_Mesh::MEDToMesh(const char* theFileName, const char* theMeshName) -{ - if(MYDEBUG) MESSAGE("MEDToMesh - theFileName = "<NbNodes() = "<<_myMeshDS->NbNodes()); - MESSAGE("MEDToMesh - _myMeshDS->NbEdges() = "<<_myMeshDS->NbEdges()); - MESSAGE("MEDToMesh - _myMeshDS->NbFaces() = "<<_myMeshDS->NbFaces()); - MESSAGE("MEDToMesh - _myMeshDS->NbVolumes() = "<<_myMeshDS->NbVolumes()); - } - - // Reading groups (sub-meshes are out of scope of MED import functionality) - list aGroupNames = myReader.GetGroupNames(); - if(MYDEBUG) MESSAGE("MEDToMesh - Nb groups = "<::iterator it = aGroupNames.begin(); it != aGroupNames.end(); it++ ) { - SMESH_Group* aGroup = AddGroup( SMDSAbs_All, it->c_str(), anId ); - if ( aGroup ) { - if(MYDEBUG) MESSAGE("MEDToMesh - group added: "<c_str()); - SMESHDS_Group* aGroupDS = dynamic_cast( aGroup->GetGroupDS() ); - if ( aGroupDS ) { - aGroupDS->SetStoreName( it->c_str() ); - myReader.GetGroup( aGroupDS ); - } - } - } - return (int) status; -} - -//======================================================================= -//function : STLToMesh -//purpose : -//======================================================================= - -int SMESH_Mesh::STLToMesh(const char* theFileName) -{ - if(MYDEBUG) MESSAGE("UNVToMesh - theFileName = "<NbNodes() = "<<_myMeshDS->NbNodes()); - MESSAGE("MEDToMesh - _myMeshDS->NbEdges() = "<<_myMeshDS->NbEdges()); - MESSAGE("MEDToMesh - _myMeshDS->NbFaces() = "<<_myMeshDS->NbFaces()); - MESSAGE("MEDToMesh - _myMeshDS->NbVolumes() = "<<_myMeshDS->NbVolumes()); - } - return 1; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Hypothesis::Hypothesis_Status - SMESH_Mesh::AddHypothesis(const TopoDS_Shape & aSubShape, - int anHypId ) throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - if(MYDEBUG) MESSAGE("SMESH_Mesh::AddHypothesis"); - - SMESH_subMesh *subMesh = GetSubMesh(aSubShape); - SMESHDS_SubMesh *subMeshDS = subMesh->GetSubMeshDS(); - if ( subMeshDS && subMeshDS->IsComplexSubmesh() ) // group of sub-shapes and maybe of not sub- - { - MESSAGE("AddHypothesis() to complex submesh"); - // return the worst but not fatal state of all group memebers - SMESH_Hypothesis::Hypothesis_Status aBestRet, aWorstNotFatal, ret; - aBestRet = SMESH_Hypothesis::HYP_BAD_DIM; - aWorstNotFatal = SMESH_Hypothesis::HYP_OK; - for ( TopoDS_Iterator itS ( aSubShape ); itS.More(); itS.Next()) - { - if ( !GetMeshDS()->ShapeToIndex( itS.Value() )) - continue; // not sub-shape - ret = AddHypothesis( itS.Value(), anHypId ); - if ( !SMESH_Hypothesis::IsStatusFatal( ret ) && ret > aWorstNotFatal ) - aWorstNotFatal = ret; - if ( ret < aBestRet ) - aBestRet = ret; - } - if ( SMESH_Hypothesis::IsStatusFatal( aBestRet )) - return aBestRet; - return aWorstNotFatal; - } - - StudyContextStruct *sc = _gen->GetStudyContext(_studyId); - if (sc->mapHypothesis.find(anHypId) == sc->mapHypothesis.end()) - { - if(MYDEBUG) MESSAGE("Hypothesis ID does not give an hypothesis"); - if(MYDEBUG) { - SCRUTE(_studyId); - SCRUTE(anHypId); - } - throw SALOME_Exception(LOCALIZED("hypothesis does not exist")); - } - - SMESH_Hypothesis *anHyp = sc->mapHypothesis[anHypId]; - MESSAGE( "SMESH_Mesh::AddHypothesis " << anHyp->GetName() ); - - bool isGlobalHyp = IsMainShape( aSubShape ); - - // NotConformAllowed can be only global - if ( !isGlobalHyp ) - { - string hypName = anHyp->GetName(); - if ( hypName == "NotConformAllowed" ) - { - if(MYDEBUG) MESSAGE( "Hypotesis can be only global" ); - return SMESH_Hypothesis::HYP_INCOMPATIBLE; - } - } - - // shape - - int event; - if (anHyp->GetType() == SMESHDS_Hypothesis::PARAM_ALGO) - event = SMESH_subMesh::ADD_HYP; - else - event = SMESH_subMesh::ADD_ALGO; - SMESH_Hypothesis::Hypothesis_Status ret = subMesh->AlgoStateEngine(event, anHyp); - - // subShapes - if (!SMESH_Hypothesis::IsStatusFatal(ret) && - !subMesh->IsApplicableHypotesis( anHyp )) // is added on father - { - if (anHyp->GetType() == SMESHDS_Hypothesis::PARAM_ALGO) - event = SMESH_subMesh::ADD_FATHER_HYP; - else - event = SMESH_subMesh::ADD_FATHER_ALGO; - SMESH_Hypothesis::Hypothesis_Status ret2 = - subMesh->SubMeshesAlgoStateEngine(event, anHyp); - if (ret2 > ret) - ret = ret2; - - // check concurent hypotheses on ansestors - if (ret < SMESH_Hypothesis::HYP_CONCURENT && !isGlobalHyp ) - { - const map < int, SMESH_subMesh * >& smMap = subMesh->DependsOn(); - map < int, SMESH_subMesh * >::const_iterator smIt = smMap.begin(); - for ( ; smIt != smMap.end(); smIt++ ) { - if ( smIt->second->IsApplicableHypotesis( anHyp )) { - ret2 = smIt->second->CheckConcurentHypothesis( anHyp->GetType() ); - if (ret2 > ret) { - ret = ret2; - break; - } - } - } - } - } - - if(MYDEBUG) subMesh->DumpAlgoState(true); - SCRUTE(ret); - return ret; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Hypothesis::Hypothesis_Status - SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape, - int anHypId)throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - if(MYDEBUG) MESSAGE("SMESH_Mesh::RemoveHypothesis"); - - SMESH_subMesh *subMesh = GetSubMesh(aSubShape); - SMESHDS_SubMesh *subMeshDS = subMesh->GetSubMeshDS(); - if ( subMeshDS && subMeshDS->IsComplexSubmesh() ) - { - // return the worst but not fatal state of all group memebers - SMESH_Hypothesis::Hypothesis_Status aBestRet, aWorstNotFatal, ret; - aBestRet = SMESH_Hypothesis::HYP_BAD_DIM; - aWorstNotFatal = SMESH_Hypothesis::HYP_OK; - for ( TopoDS_Iterator itS ( aSubShape ); itS.More(); itS.Next()) - { - if ( !GetMeshDS()->ShapeToIndex( itS.Value() )) - continue; // not sub-shape - ret = RemoveHypothesis( itS.Value(), anHypId ); - if ( !SMESH_Hypothesis::IsStatusFatal( ret ) && ret > aWorstNotFatal ) - aWorstNotFatal = ret; - if ( ret < aBestRet ) - aBestRet = ret; - } - if ( SMESH_Hypothesis::IsStatusFatal( aBestRet )) - return aBestRet; - return aWorstNotFatal; - } - - StudyContextStruct *sc = _gen->GetStudyContext(_studyId); - if (sc->mapHypothesis.find(anHypId) == sc->mapHypothesis.end()) - throw SALOME_Exception(LOCALIZED("hypothesis does not exist")); - - SMESH_Hypothesis *anHyp = sc->mapHypothesis[anHypId]; - int hypType = anHyp->GetType(); - if(MYDEBUG) SCRUTE(hypType); - int event; - - // shape - - if (anHyp->GetType() == SMESHDS_Hypothesis::PARAM_ALGO) - event = SMESH_subMesh::REMOVE_HYP; - else - event = SMESH_subMesh::REMOVE_ALGO; - SMESH_Hypothesis::Hypothesis_Status ret = subMesh->AlgoStateEngine(event, anHyp); - - // there may appear concurrent hyps that were covered by the removed hyp - if (ret < SMESH_Hypothesis::HYP_CONCURENT && - subMesh->IsApplicableHypotesis( anHyp ) && - subMesh->CheckConcurentHypothesis( anHyp->GetType() ) != SMESH_Hypothesis::HYP_OK) - ret = SMESH_Hypothesis::HYP_CONCURENT; - - // subShapes - if (!SMESH_Hypothesis::IsStatusFatal(ret) && - !subMesh->IsApplicableHypotesis( anHyp )) // is removed from father - { - if (anHyp->GetType() == SMESHDS_Hypothesis::PARAM_ALGO) - event = SMESH_subMesh::REMOVE_FATHER_HYP; - else - event = SMESH_subMesh::REMOVE_FATHER_ALGO; - SMESH_Hypothesis::Hypothesis_Status ret2 = - subMesh->SubMeshesAlgoStateEngine(event, anHyp); - if (ret2 > ret) // more severe - ret = ret2; - - // check concurent hypotheses on ansestors - if (ret < SMESH_Hypothesis::HYP_CONCURENT && !IsMainShape( aSubShape ) ) - { - const map < int, SMESH_subMesh * >& smMap = subMesh->DependsOn(); - map < int, SMESH_subMesh * >::const_iterator smIt = smMap.begin(); - for ( ; smIt != smMap.end(); smIt++ ) { - if ( smIt->second->IsApplicableHypotesis( anHyp )) { - ret2 = smIt->second->CheckConcurentHypothesis( anHyp->GetType() ); - if (ret2 > ret) { - ret = ret2; - break; - } - } - } - } - } - - if(MYDEBUG) subMesh->DumpAlgoState(true); - if(MYDEBUG) SCRUTE(ret); - return ret; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESHDS_Mesh * SMESH_Mesh::GetMeshDS() -{ - return _myMeshDS; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -const list& -SMESH_Mesh::GetHypothesisList(const TopoDS_Shape & aSubShape) const - throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - return _myMeshDS->GetHypothesis(aSubShape); -} - -//======================================================================= -//function : GetHypothesis -//purpose : -//======================================================================= - -const SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const TopoDS_Shape & aSubShape, - const SMESH_HypoFilter& aFilter, - const bool andAncestors) const -{ - { - const list& hypList = _myMeshDS->GetHypothesis(aSubShape); - list::const_iterator hyp = hypList.begin(); - for ( ; hyp != hypList.end(); hyp++ ) { - const SMESH_Hypothesis * h = static_cast( *hyp ); - if ( aFilter.IsOk( h, aSubShape)) - return h; - } - } - if ( andAncestors ) - { - TopTools_ListIteratorOfListOfShape it( GetAncestors( aSubShape )); - for (; it.More(); it.Next() ) - { - const list& hypList = _myMeshDS->GetHypothesis(it.Value()); - list::const_iterator hyp = hypList.begin(); - for ( ; hyp != hypList.end(); hyp++ ) { - const SMESH_Hypothesis * h = static_cast( *hyp ); - if (aFilter.IsOk( h, it.Value() )) - return h; - } - } - } - return 0; -} - -//======================================================================= -//function : GetHypotheses -//purpose : -//======================================================================= - -bool SMESH_Mesh::GetHypotheses(const TopoDS_Shape & aSubShape, - const SMESH_HypoFilter& aFilter, - list & aHypList, - const bool andAncestors) const -{ - int nbHyp = 0; - { - const list& hypList = _myMeshDS->GetHypothesis(aSubShape); - list::const_iterator hyp = hypList.begin(); - for ( ; hyp != hypList.end(); hyp++ ) - if ( aFilter.IsOk (static_cast( *hyp ), aSubShape)) { - aHypList.push_back( *hyp ); - nbHyp++; - } - } - // get hypos from shape of one type only: if any hypo is found on edge, do - // not look up on faces - if ( !nbHyp && andAncestors ) - { - TopTools_MapOfShape map; - TopTools_ListIteratorOfListOfShape it( GetAncestors( aSubShape )); - int shapeType = it.More() ? it.Value().ShapeType() : TopAbs_SHAPE; - for (; it.More(); it.Next() ) - { - if ( nbHyp && shapeType != it.Value().ShapeType() ) - break; - shapeType = it.Value().ShapeType(); - if ( !map.Add( it.Value() )) - continue; - const list& hypList = _myMeshDS->GetHypothesis(it.Value()); - list::const_iterator hyp = hypList.begin(); - for ( ; hyp != hypList.end(); hyp++ ) - if (aFilter.IsOk( static_cast( *hyp ), it.Value() )) { - aHypList.push_back( *hyp ); - nbHyp++; - } - } - } - return nbHyp; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -const list & SMESH_Mesh::GetLog() throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - if(MYDEBUG) MESSAGE("SMESH_Mesh::GetLog"); - return _myMeshDS->GetScript()->GetCommands(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -void SMESH_Mesh::ClearLog() throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - if(MYDEBUG) MESSAGE("SMESH_Mesh::ClearLog"); - _myMeshDS->GetScript()->Clear(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -int SMESH_Mesh::GetId() -{ - if(MYDEBUG) MESSAGE("SMESH_Mesh::GetId"); - return _id; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Gen *SMESH_Mesh::GetGen() -{ - return _gen; -} - -//============================================================================= -/*! - * Get or Create the SMESH_subMesh object implementation - */ -//============================================================================= - -SMESH_subMesh *SMESH_Mesh::GetSubMesh(const TopoDS_Shape & aSubShape) -throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - SMESH_subMesh *aSubMesh; - int index = _myMeshDS->ShapeToIndex(aSubShape); - - // for submeshes on GEOM Group - if ( !index && aSubShape.ShapeType() == TopAbs_COMPOUND ) { - TopoDS_Iterator it( aSubShape ); - if ( it.More() ) - index = _myMeshDS->AddCompoundSubmesh( aSubShape, it.Value().ShapeType() ); - } - - if (_mapSubMesh.find(index) != _mapSubMesh.end()) - { - aSubMesh = _mapSubMesh[index]; - } - else - { - aSubMesh = new SMESH_subMesh(index, this, _myMeshDS, aSubShape); - _mapSubMesh[index] = aSubMesh; - } - return aSubMesh; -} - -//============================================================================= -/*! - * Get the SMESH_subMesh object implementation. Dont create it, return null - * if it does not exist. - */ -//============================================================================= - -SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape) -throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - bool isFound = false; - SMESH_subMesh *aSubMesh = NULL; - - int index = _myMeshDS->ShapeToIndex(aSubShape); - if (_mapSubMesh.find(index) != _mapSubMesh.end()) - { - aSubMesh = _mapSubMesh[index]; - isFound = true; - } - if (!isFound) - aSubMesh = NULL; - return aSubMesh; -} - -//============================================================================= -/*! - * Get the SMESH_subMesh object implementation. Dont create it, return null - * if it does not exist. - */ -//============================================================================= - -SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const int aShapeID) -throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - - map ::iterator i_sm = _mapSubMesh.find(aShapeID); - if (i_sm == _mapSubMesh.end()) - return NULL; - return i_sm->second; -} - -//======================================================================= -//function : IsUsedHypothesis -//purpose : Return True if anHyp is used to mesh aSubShape -//======================================================================= - -bool SMESH_Mesh::IsUsedHypothesis(SMESHDS_Hypothesis * anHyp, - const TopoDS_Shape & aSubShape) -{ - SMESH_Hypothesis* hyp = static_cast(anHyp); - // check if anHyp is applicable to aSubShape - SMESH_subMesh * subMesh = GetSubMeshContaining( aSubShape ); - if ( !subMesh || !subMesh->IsApplicableHypotesis( hyp )) - return false; - - SMESH_Algo *algo = _gen->GetAlgo(*this, aSubShape); - - // algorithm - if (anHyp->GetType() > SMESHDS_Hypothesis::PARAM_ALGO) - return ( anHyp == algo ); - - // algorithm parameter - if (algo) - { - // look trough hypotheses used by algo - const list &usedHyps = - algo->GetUsedHypothesis(*this, aSubShape); - return ( find( usedHyps.begin(), usedHyps.end(), anHyp ) != usedHyps.end() ); - } - - // look through all assigned hypotheses - SMESH_HypoFilter filter( SMESH_HypoFilter::Is( hyp )); - return GetHypothesis( aSubShape, filter, true ); -} - - -//============================================================================= -/*! - * - */ -//============================================================================= - -const list < SMESH_subMesh * >& - SMESH_Mesh::GetSubMeshUsingHypothesis(SMESHDS_Hypothesis * anHyp) -throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - if(MYDEBUG) MESSAGE("SMESH_Mesh::GetSubMeshUsingHypothesis"); - map < int, SMESH_subMesh * >::iterator itsm; - _subMeshesUsingHypothesisList.clear(); - for (itsm = _mapSubMesh.begin(); itsm != _mapSubMesh.end(); itsm++) - { - SMESH_subMesh *aSubMesh = (*itsm).second; - if ( IsUsedHypothesis ( anHyp, aSubMesh->GetSubShape() )) - _subMeshesUsingHypothesisList.push_back(aSubMesh); - } - return _subMeshesUsingHypothesisList; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_Mesh::ExportMED(const char *file, - const char* theMeshName, - bool theAutoGroups, - int theVersion) - throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - DriverMED_W_SMESHDS_Mesh myWriter; - myWriter.SetFile ( file, MED::EVersion(theVersion) ); - myWriter.SetMesh ( _myMeshDS ); - if ( !theMeshName ) - myWriter.SetMeshId ( _idDoc ); - else { - myWriter.SetMeshId ( -1 ); - myWriter.SetMeshName( theMeshName ); - } - - if ( theAutoGroups ) { - myWriter.AddGroupOfNodes(); - myWriter.AddGroupOfEdges(); - myWriter.AddGroupOfFaces(); - myWriter.AddGroupOfVolumes(); - } - - for ( map::iterator it = _mapGroup.begin(); it != _mapGroup.end(); it++ ) { - SMESH_Group* aGroup = it->second; - SMESHDS_GroupBase* aGroupDS = aGroup->GetGroupDS(); - if ( aGroupDS ) { - aGroupDS->SetStoreName( aGroup->GetName() ); - myWriter.AddGroup( aGroupDS ); - } - } - - myWriter.Perform(); -} - -void SMESH_Mesh::ExportDAT(const char *file) throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - DriverDAT_W_SMDS_Mesh myWriter; - myWriter.SetFile(string(file)); - myWriter.SetMesh(_myMeshDS); - myWriter.SetMeshId(_idDoc); - myWriter.Perform(); -} - -void SMESH_Mesh::ExportUNV(const char *file) throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - DriverUNV_W_SMDS_Mesh myWriter; - myWriter.SetFile(string(file)); - myWriter.SetMesh(_myMeshDS); - myWriter.SetMeshId(_idDoc); - myWriter.Perform(); -} - -void SMESH_Mesh::ExportSTL(const char *file, const bool isascii) throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - DriverSTL_W_SMDS_Mesh myWriter; - myWriter.SetFile(string(file)); - myWriter.SetIsAscii( isascii ); - myWriter.SetMesh(_myMeshDS); - myWriter.SetMeshId(_idDoc); - myWriter.Perform(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -int SMESH_Mesh::NbNodes() throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - return _myMeshDS->NbNodes(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -int SMESH_Mesh::NbEdges() throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - return _myMeshDS->NbEdges(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -int SMESH_Mesh::NbFaces() throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - return _myMeshDS->NbFaces(); -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return the number of 3 nodes faces in the mesh. This method run in O(n) -/////////////////////////////////////////////////////////////////////////////// -int SMESH_Mesh::NbTriangles() throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - int Nb = 0; - - SMDS_FaceIteratorPtr itFaces=_myMeshDS->facesIterator(); - //while(itFaces->more()) if(itFaces->next()->NbNodes()==3) Nb++; - const SMDS_MeshFace * curFace; - while (itFaces->more()) { - curFace = itFaces->next(); - if (!curFace->IsPoly() && curFace->NbNodes() == 3) Nb++; - } - return Nb; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return the number of 4 nodes faces in the mesh. This method run in O(n) -/////////////////////////////////////////////////////////////////////////////// -int SMESH_Mesh::NbQuadrangles() throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - int Nb = 0; - - SMDS_FaceIteratorPtr itFaces=_myMeshDS->facesIterator(); - //while(itFaces->more()) if(itFaces->next()->NbNodes()==4) Nb++; - const SMDS_MeshFace * curFace; - while (itFaces->more()) { - curFace = itFaces->next(); - if (!curFace->IsPoly() && curFace->NbNodes() == 4) Nb++; - } - return Nb; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return the number of polygonal faces in the mesh. This method run in O(n) -/////////////////////////////////////////////////////////////////////////////// -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; -} - -//============================================================================= -/*! - * - */ -//============================================================================= -int SMESH_Mesh::NbVolumes() throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - return _myMeshDS->NbVolumes(); -} - -int SMESH_Mesh::NbTetras() throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - int Nb = 0; - SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator(); - //while(itVolumes->more()) if(itVolumes->next()->NbNodes()==4) Nb++; - const SMDS_MeshVolume * curVolume; - while (itVolumes->more()) { - curVolume = itVolumes->next(); - if (!curVolume->IsPoly() && curVolume->NbNodes() == 4) Nb++; - } - return Nb; -} - -int SMESH_Mesh::NbHexas() throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - int Nb = 0; - SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator(); - //while(itVolumes->more()) if(itVolumes->next()->NbNodes()==8) Nb++; - const SMDS_MeshVolume * curVolume; - while (itVolumes->more()) { - curVolume = itVolumes->next(); - if (!curVolume->IsPoly() && curVolume->NbNodes() == 8) Nb++; - } - return Nb; -} - -int SMESH_Mesh::NbPyramids() throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - int Nb = 0; - SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator(); - //while(itVolumes->more()) if(itVolumes->next()->NbNodes()==5) Nb++; - const SMDS_MeshVolume * curVolume; - while (itVolumes->more()) { - curVolume = itVolumes->next(); - if (!curVolume->IsPoly() && curVolume->NbNodes() == 5) Nb++; - } - return Nb; -} - -int SMESH_Mesh::NbPrisms() throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - int Nb = 0; - SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator(); - //while(itVolumes->more()) if(itVolumes->next()->NbNodes()==6) Nb++; - const SMDS_MeshVolume * curVolume; - while (itVolumes->more()) { - curVolume = itVolumes->next(); - if (!curVolume->IsPoly() && curVolume->NbNodes() == 6) Nb++; - } - return Nb; -} - -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; -} - -//============================================================================= -/*! - * - */ -//============================================================================= -int SMESH_Mesh::NbSubMesh() throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - return _myMeshDS->NbSubMesh(); -} - -//======================================================================= -//function : IsNotConformAllowed -//purpose : check if a hypothesis alowing notconform mesh is present -//======================================================================= - -bool SMESH_Mesh::IsNotConformAllowed() const -{ - if(MYDEBUG) MESSAGE("SMESH_Mesh::IsNotConformAllowed"); - - SMESH_HypoFilter filter( SMESH_HypoFilter::HasName( "NotConformAllowed" )); - return GetHypothesis( _myMeshDS->ShapeToMesh(), filter, false ); -} - -//======================================================================= -//function : IsMainShape -//purpose : -//======================================================================= - -bool SMESH_Mesh::IsMainShape(const TopoDS_Shape& theShape) const -{ - return theShape.IsSame(_myMeshDS->ShapeToMesh() ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Group* SMESH_Mesh::AddGroup (const SMDSAbs_ElementType theType, - const char* theName, - int& theId, - const TopoDS_Shape& theShape) -{ - if (_mapGroup.find(_groupId) != _mapGroup.end()) - return NULL; - theId = _groupId; - SMESH_Group* aGroup = new SMESH_Group (theId, this, theType, theName, theShape); - GetMeshDS()->AddGroup( aGroup->GetGroupDS() ); - _mapGroup[_groupId++] = aGroup; - return aGroup; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Group* SMESH_Mesh::GetGroup (const int theGroupID) -{ - if (_mapGroup.find(theGroupID) == _mapGroup.end()) - return NULL; - return _mapGroup[theGroupID]; -} - - -//============================================================================= -/*! - * - */ -//============================================================================= - -list SMESH_Mesh::GetGroupIds() -{ - list anIds; - for ( map::const_iterator it = _mapGroup.begin(); it != _mapGroup.end(); it++ ) - anIds.push_back( it->first ); - - return anIds; -} - - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_Mesh::RemoveGroup (const int theGroupID) -{ - if (_mapGroup.find(theGroupID) == _mapGroup.end()) - return; - GetMeshDS()->RemoveGroup( _mapGroup[theGroupID]->GetGroupDS() ); - _mapGroup.erase (theGroupID); - delete _mapGroup[theGroupID]; -} - -//============================================================================= -/*! - * IsLocal1DHypothesis - * Returns a local 1D hypothesis used for theEdge - */ -//============================================================================= -const SMESH_Hypothesis* SMESH_Mesh::IsLocal1DHypothesis (const TopoDS_Shape& theEdge) -{ - SMESH_HypoFilter filter( SMESH_HypoFilter::HasDim( 1 )); - filter.AndNot( SMESH_HypoFilter::IsAlgo() ); - filter.AndNot( SMESH_HypoFilter::IsGlobal( GetMeshDS()->ShapeToMesh() )); - - return GetHypothesis( theEdge, filter, 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); - 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 TopTools_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 TopTools_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::CLEANDEP); - } - } -} - -//============================================================================= -/*! - * 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); - TopTools_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)) { - TopTools_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 - TopTools_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 -// that lower dimention shapes come first. -//======================================================================= - -const TopTools_ListOfShape& SMESH_Mesh::GetAncestors(const TopoDS_Shape& theS) const -{ - if ( _mapAncestors.Contains( theS ) ) - return _mapAncestors.FindFromKey( theS ); - - static TopTools_ListOfShape emptyList; - return emptyList; -} - -//======================================================================= -//function : Dump -//purpose : dumps contents of mesh to stream [ debug purposes ] -//======================================================================= -ostream& SMESH_Mesh::Dump(ostream& save) -{ - save << "========================== Dump contents of mesh ==========================" << endl; - save << "1) Total number of nodes: " << NbNodes() << endl; - save << "2) Total number of edges: " << NbEdges() << endl; - save << "3) Total number of faces: " << NbFaces() << endl; - if ( NbFaces() > 0 ) { - int nb3 = NbTriangles(); - int nb4 = NbQuadrangles(); - save << "3.1.) Number of triangles: " << nb3 << endl; - save << "3.2.) Number of quadrangles: " << nb4 << endl; - if ( nb3 + nb4 != NbFaces() ) { - map myFaceMap; - SMDS_FaceIteratorPtr itFaces=_myMeshDS->facesIterator(); - while( itFaces->more( ) ) { - int nbNodes = itFaces->next()->NbNodes(); - if ( myFaceMap.find( nbNodes ) == myFaceMap.end() ) - myFaceMap[ nbNodes ] = 0; - myFaceMap[ nbNodes ] = myFaceMap[ nbNodes ] + 1; - } - save << "3.3.) Faces in detail: " << endl; - map ::iterator itF; - for (itF = myFaceMap.begin(); itF != myFaceMap.end(); itF++) - save << "--> nb nodes: " << itF->first << " - nb elemens: " << itF->second << endl; - } - } - save << "4) Total number of volumes: " << NbVolumes() << endl; - if ( NbVolumes() > 0 ) { - int nb8 = NbHexas(); - int nb4 = NbTetras(); - int nb5 = NbPyramids(); - int nb6 = NbPrisms(); - save << "4.1.) Number of hexahedrons: " << nb8 << endl; - save << "4.2.) Number of tetrahedrons: " << nb4 << endl; - save << "4.3.) Number of prisms: " << nb6 << endl; - save << "4.4.) Number of pyramides: " << nb5 << endl; - if ( nb8 + nb4 + nb5 + nb6 != NbVolumes() ) { - map myVolumesMap; - SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator(); - while( itVolumes->more( ) ) { - int nbNodes = itVolumes->next()->NbNodes(); - if ( myVolumesMap.find( nbNodes ) == myVolumesMap.end() ) - myVolumesMap[ nbNodes ] = 0; - myVolumesMap[ nbNodes ] = myVolumesMap[ nbNodes ] + 1; - } - save << "4.5.) Volumes in detail: " << endl; - map ::iterator itV; - for (itV = myVolumesMap.begin(); itV != myVolumesMap.end(); itV++) - save << "--> nb nodes: " << itV->first << " - nb elemens: " << itV->second << endl; - } - } - save << "===========================================================================" << endl; - return 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 ); -} \ No newline at end of file diff --git a/src/SMESH/SMESH_Mesh.hxx b/src/SMESH/SMESH_Mesh.hxx deleted file mode 100644 index 321714ac1..000000000 --- a/src/SMESH/SMESH_Mesh.hxx +++ /dev/null @@ -1,254 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Mesh.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_MESH_HXX_ -#define _SMESH_MESH_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 "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 SMESH_Group; -class TopTools_ListOfShape; -class SMESH_subMesh; -class SMESH_HypoFilter; - -typedef NMTTools_IndexedDataMapOfShapeIndexedMapOfShape IndexedMapOfChain; - -class SMESH_Mesh -{ - SMESH_Mesh(); - SMESH_Mesh(const SMESH_Mesh&); -public: - SMESH_Mesh(int localId, int studyId, SMESH_Gen * gen, - SMESHDS_Document * myDocument); - - virtual ~SMESH_Mesh(); - - void ShapeToMesh(const TopoDS_Shape & aShape); - - int UNVToMesh(const char* theFileName); - /*! - * consult DriverMED_R_SMESHDS_Mesh::ReadStatus for returned value - */ - int MEDToMesh(const char* theFileName, const char* theMeshName); - - int STLToMesh(const char* theFileName); - - SMESH_Hypothesis::Hypothesis_Status - AddHypothesis(const TopoDS_Shape & aSubShape, int anHypId) - throw(SALOME_Exception); - - SMESH_Hypothesis::Hypothesis_Status - RemoveHypothesis(const TopoDS_Shape & aSubShape, int anHypId) - throw(SALOME_Exception); - - const list & - GetHypothesisList(const TopoDS_Shape & aSubShape) const - throw(SALOME_Exception); - - const SMESH_Hypothesis * GetHypothesis(const TopoDS_Shape & aSubShape, - const SMESH_HypoFilter& aFilter, - const bool andAncestors) const; - - bool GetHypotheses(const TopoDS_Shape & aSubShape, - const SMESH_HypoFilter& aFilter, - list & aHypList, - const bool andAncestors) const; - - const list & GetLog() throw(SALOME_Exception); - - void ClearLog() throw(SALOME_Exception); - - int GetId(); - - SMESHDS_Mesh * GetMeshDS(); - - SMESH_Gen *GetGen(); - - SMESH_subMesh *GetSubMesh(const TopoDS_Shape & aSubShape) - throw(SALOME_Exception); - - SMESH_subMesh *GetSubMeshContaining(const TopoDS_Shape & aSubShape) - throw(SALOME_Exception); - - SMESH_subMesh *GetSubMeshContaining(const int aShapeID) - throw(SALOME_Exception); - - const list < SMESH_subMesh * >& - GetSubMeshUsingHypothesis(SMESHDS_Hypothesis * anHyp) - throw(SALOME_Exception); - - bool IsUsedHypothesis(SMESHDS_Hypothesis * anHyp, - const TopoDS_Shape & aSubShape); - // Return True if anHyp is used to mesh aSubShape - - bool IsNotConformAllowed() const; - // check if a hypothesis alowing notconform mesh is present - - bool IsMainShape(const TopoDS_Shape& theShape) const; - - const TopTools_ListOfShape& GetAncestors(const TopoDS_Shape& theSubShape) const; - // return list of ancestors of theSubShape in the order - // that lower dimention shapes come first. - - void ExportMED(const char *file, - const char* theMeshName = NULL, - bool theAutoGroups = true, - int theVersion = 0) - throw(SALOME_Exception); - - void ExportDAT(const char *file) throw(SALOME_Exception); - void ExportUNV(const char *file) throw(SALOME_Exception); - void ExportSTL(const char *file, const bool isascii) throw(SALOME_Exception); - - int NbNodes() throw(SALOME_Exception); - - int NbEdges() throw(SALOME_Exception); - - int NbFaces() throw(SALOME_Exception); - - int NbTriangles() throw(SALOME_Exception); - - int NbQuadrangles() throw(SALOME_Exception); - - int NbPolygons() throw(SALOME_Exception); - - int NbVolumes() throw(SALOME_Exception); - - int NbTetras() throw(SALOME_Exception); - - int NbHexas() throw(SALOME_Exception); - - int NbPyramids() throw(SALOME_Exception); - - int NbPrisms() throw(SALOME_Exception); - - int NbPolyhedrons() throw(SALOME_Exception); - - int NbSubMesh() throw(SALOME_Exception); - - int NbGroup() const { return _mapGroup.size(); } - - SMESH_Group* AddGroup (const SMDSAbs_ElementType theType, - const char* theName, - int& theId, - const TopoDS_Shape& theShape=TopoDS_Shape()); - - SMESH_Group* GetGroup (const int theGroupID); - - list GetGroupIds(); - - 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 - - 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 - - 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 ); - - // - - ostream& Dump(ostream & save); - -private: - // Propagation hypothesis management - void CleanMeshOnPropagationChain(const TopoDS_Shape& theMainEdge); - // - -private: - int _id; // id given by creator (unique within the creator instance) - int _studyId; - int _idDoc; // id given by SMESHDS_Document - int _groupId; // id generator for group objects - bool _isShapeToMesh;// set to true when a shape is given (only once) - list _subMeshesUsingHypothesisList; - SMESHDS_Document * _myDocument; - SMESHDS_Mesh * _myMeshDS; - map _mapSubMesh; - map _mapGroup; - SMESH_Gen * _gen; - - TopTools_IndexedDataMapOfShapeListOfShape _mapAncestors; - - IndexedMapOfChain _mapPropagationChains; // Propagation hypothesis management -}; - -#endif diff --git a/src/SMESH/SMESH_MeshEditor.cxx b/src/SMESH/SMESH_MeshEditor.cxx deleted file mode 100644 index c1d184c37..000000000 --- a/src/SMESH/SMESH_MeshEditor.cxx +++ /dev/null @@ -1,5053 +0,0 @@ -// SMESH SMESH : idl implementation based on 'SMESH' unit's classes -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_MeshEditor.cxx -// Created : Mon Apr 12 16:10:22 2004 -// Author : Edward AGAPOV (eap) - - -#include "SMESH_MeshEditor.hxx" - -#include "SMDS_FaceOfNodes.hxx" -#include "SMDS_VolumeTool.hxx" -#include "SMDS_EdgePosition.hxx" -#include "SMDS_PolyhedralVolumeOfNodes.hxx" -#include "SMDS_FacePosition.hxx" -#include "SMDS_SpacePosition.hxx" - -#include "SMESHDS_Group.hxx" -#include "SMESHDS_Mesh.hxx" - -#include "SMESH_subMesh.hxx" -#include "SMESH_ControlsDef.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 - -using namespace std; -using namespace SMESH::Controls; - -typedef map TNodeNodeMap; -typedef map > TElemOfNodeListMap; -typedef map > TElemOfElemListMap; -typedef map > TNodeOfNodeListMap; -typedef TNodeOfNodeListMap::iterator TNodeOfNodeListMapItr; -typedef map > TElemOfVecOfNnlmiMap; - -//======================================================================= -//function : SMESH_MeshEditor -//purpose : -//======================================================================= - -SMESH_MeshEditor::SMESH_MeshEditor( SMESH_Mesh* theMesh ): -myMesh( theMesh ) -{ -} - -//======================================================================= -//function : Remove -//purpose : Remove a node or an element. -// Modify a compute state of sub-meshes which become empty -//======================================================================= - -bool SMESH_MeshEditor::Remove (const list< int >& theIDs, - const bool isNodes ) -{ - - SMESHDS_Mesh* aMesh = GetMeshDS(); - set< SMESH_subMesh *> smmap; - - list::const_iterator it = theIDs.begin(); - for ( ; it != theIDs.end(); it++ ) - { - const SMDS_MeshElement * elem; - if ( isNodes ) - elem = aMesh->FindNode( *it ); - else - elem = aMesh->FindElement( *it ); - 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() ) { - int aShapeID = aPosition->GetShapeId(); - if ( aShapeID ) { - TopoDS_Shape aShape = aMesh->IndexToShape( aShapeID ); - SMESH_subMesh * sm = GetMesh()->GetSubMeshContaining( aShape ); - if ( sm ) - smmap.insert( sm ); - } - } - } - - // Do remove - if ( isNodes ) - aMesh->RemoveNode( static_cast< const SMDS_MeshNode* >( elem )); - else - aMesh->RemoveElement( elem ); - } - - // Notify sub-meshes about modification - if ( !smmap.empty() ) { - set< SMESH_subMesh *>::iterator smIt; - for ( smIt = smmap.begin(); smIt != smmap.end(); smIt++ ) - (*smIt)->ComputeStateEngine( SMESH_subMesh::MESH_ENTITY_REMOVED ); - } - return true; -} - -//======================================================================= -//function : FindShape -//purpose : Return an index of the shape theElem is on -// or zero if a shape not found -//======================================================================= - -int SMESH_MeshEditor::FindShape (const SMDS_MeshElement * theElem) -{ - SMESHDS_Mesh * aMesh = GetMeshDS(); - if ( aMesh->ShapeToMesh().IsNull() ) - return 0; - - if ( theElem->GetType() == SMDSAbs_Node ) - { - const SMDS_PositionPtr& aPosition = - static_cast( theElem )->GetPosition(); - if ( aPosition.get() ) - return aPosition->GetShapeId(); - else - return 0; - } - - TopoDS_Shape aShape; // the shape a node is on - SMDS_ElemIteratorPtr nodeIt = theElem->nodesIterator(); - while ( nodeIt->more() ) - { - const SMDS_MeshNode* node = static_cast( nodeIt->next() ); - const SMDS_PositionPtr& aPosition = node->GetPosition(); - if ( aPosition.get() ) { - int aShapeID = aPosition->GetShapeId(); - SMESHDS_SubMesh * sm = aMesh->MeshElements( aShapeID ); - if ( sm ) - { - if ( sm->Contains( theElem )) - return aShapeID; - if ( aShape.IsNull() ) - aShape = aMesh->IndexToShape( aShapeID ); - } - else - { - //MESSAGE ( "::FindShape() No SubShape for aShapeID " << aShapeID ); - } - } - } - - // None of nodes is on a proper shape, - // find the shape among ancestors of aShape on which a node is - if ( aShape.IsNull() ) { - //MESSAGE ("::FindShape() - NONE node is on shape") - return 0; - } - TopTools_ListIteratorOfListOfShape ancIt( GetMesh()->GetAncestors( aShape )); - for ( ; ancIt.More(); ancIt.Next() ) - { - SMESHDS_SubMesh * sm = aMesh->MeshElements( ancIt.Value() ); - if ( sm && sm->Contains( theElem )) - return aMesh->ShapeToIndex( ancIt.Value() ); - } - - //MESSAGE ("::FindShape() - SHAPE NOT FOUND") - return 0; -} - -//======================================================================= -//function : InverseDiag -//purpose : Replace two neighbour triangles with ones built on the same 4 nodes -// but having other common link. -// Return False if args are improper -//======================================================================= - -bool SMESH_MeshEditor::InverseDiag (const SMDS_MeshElement * theTria1, - const SMDS_MeshElement * theTria2 ) -{ - if (!theTria1 || !theTria2) - return false; - const SMDS_FaceOfNodes* F1 = dynamic_cast( theTria1 ); - if (!F1) return false; - const SMDS_FaceOfNodes* F2 = dynamic_cast( theTria2 ); - if (!F2) return false; - - // 1 +--+ A theTria1: ( 1 A B ) A->2 ( 1 2 B ) 1 +--+ A - // | /| theTria2: ( B A 2 ) B->1 ( 1 A 2 ) |\ | - // |/ | | \| - // B +--+ 2 B +--+ 2 - - // put nodes in array and find out indices of the same ones - const SMDS_MeshNode* aNodes [6]; - int sameInd [] = { 0, 0, 0, 0, 0, 0 }; - int i = 0; - SMDS_ElemIteratorPtr it = theTria1->nodesIterator(); - while ( it->more() ) - { - aNodes[ i ] = static_cast( it->next() ); - - if ( i > 2 ) // theTria2 - // find same node of theTria1 - for ( int j = 0; j < 3; j++ ) - if ( aNodes[ i ] == aNodes[ j ]) { - sameInd[ j ] = i; - sameInd[ i ] = j; - break; - } - // next - i++; - if ( i == 3 ) { - if ( it->more() ) - return false; // theTria1 is not a triangle - it = theTria2->nodesIterator(); - } - if ( i == 6 && it->more() ) - return false; // theTria2 is not a triangle - } - - // find indices of 1,2 and of A,B in theTria1 - int iA = 0, iB = 0, i1 = 0, i2 = 0; - for ( i = 0; i < 6; i++ ) - { - if ( sameInd [ i ] == 0 ) - if ( i < 3 ) i1 = i; - else i2 = i; - else if (i < 3) - if ( iA ) iB = i; - else iA = i; - } - // nodes 1 and 2 should not be the same - if ( aNodes[ i1 ] == aNodes[ i2 ] ) - return false; - - - // theTria1: A->2 - aNodes[ iA ] = aNodes[ i2 ]; - // theTria2: B->1 - aNodes[ sameInd[ iB ]] = aNodes[ i1 ]; - - //MESSAGE( theTria1 << theTria2 ); - - GetMeshDS()->ChangeElementNodes( theTria1, aNodes, 3 ); - GetMeshDS()->ChangeElementNodes( theTria2, &aNodes[ 3 ], 3 ); - - //MESSAGE( theTria1 << theTria2 ); - - return true; -} - -//======================================================================= -//function : findTriangles -//purpose : find triangles sharing theNode1-theNode2 link -//======================================================================= - -static bool findTriangles(const SMDS_MeshNode * theNode1, - const SMDS_MeshNode * theNode2, - const SMDS_MeshElement*& theTria1, - const SMDS_MeshElement*& theTria2) -{ - if ( !theNode1 || !theNode2 ) return false; - - theTria1 = theTria2 = 0; - - set< const SMDS_MeshElement* > emap; - SMDS_ElemIteratorPtr it = theNode1->GetInverseElementIterator(); - while (it->more()) { - const SMDS_MeshElement* elem = it->next(); - if ( elem->GetType() == SMDSAbs_Face && elem->NbNodes() == 3 ) - emap.insert( elem ); - } - it = theNode2->GetInverseElementIterator(); - while (it->more()) { - const SMDS_MeshElement* elem = it->next(); - if ( elem->GetType() == SMDSAbs_Face && - emap.find( elem ) != emap.end() ) - if ( theTria1 ) { - theTria2 = elem; - break; - } else { - theTria1 = elem; - } - } - return ( theTria1 && theTria2 ); -} - -//======================================================================= -//function : InverseDiag -//purpose : Replace two neighbour triangles sharing theNode1-theNode2 link -// with ones built on the same 4 nodes but having other common link. -// Return false if proper faces not found -//======================================================================= - -bool SMESH_MeshEditor::InverseDiag (const SMDS_MeshNode * theNode1, - const SMDS_MeshNode * theNode2) -{ - MESSAGE( "::InverseDiag()" ); - - const SMDS_MeshElement *tr1, *tr2; - if ( !findTriangles( theNode1, theNode2, tr1, tr2 )) - return false; - - const SMDS_FaceOfNodes* F1 = dynamic_cast( tr1 ); - if (!F1) return false; - const SMDS_FaceOfNodes* F2 = dynamic_cast( tr2 ); - if (!F2) return false; - - // 1 +--+ A tr1: ( 1 A B ) A->2 ( 1 2 B ) 1 +--+ A - // | /| tr2: ( B A 2 ) B->1 ( 1 A 2 ) |\ | - // |/ | | \| - // B +--+ 2 B +--+ 2 - - // put nodes in array - // and find indices of 1,2 and of A in tr1 and of B in tr2 - int i, iA1 = 0, i1 = 0; - const SMDS_MeshNode* aNodes1 [3]; - SMDS_ElemIteratorPtr it; - for (i = 0, it = tr1->nodesIterator(); it->more(); i++ ) { - aNodes1[ i ] = static_cast( it->next() ); - if ( aNodes1[ i ] == theNode1 ) - iA1 = i; // node A in tr1 - else if ( aNodes1[ i ] != theNode2 ) - i1 = i; // node 1 - } - int iB2 = 0, i2 = 0; - const SMDS_MeshNode* aNodes2 [3]; - for (i = 0, it = tr2->nodesIterator(); it->more(); i++ ) { - aNodes2[ i ] = static_cast( it->next() ); - if ( aNodes2[ i ] == theNode2 ) - iB2 = i; // node B in tr2 - else if ( aNodes2[ i ] != theNode1 ) - i2 = i; // node 2 - } - - // nodes 1 and 2 should not be the same - if ( aNodes1[ i1 ] == aNodes2[ i2 ] ) - return false; - - // tr1: A->2 - aNodes1[ iA1 ] = aNodes2[ i2 ]; - // tr2: B->1 - aNodes2[ iB2 ] = aNodes1[ i1 ]; - - //MESSAGE( tr1 << tr2 ); - - GetMeshDS()->ChangeElementNodes( tr1, aNodes1, 3 ); - GetMeshDS()->ChangeElementNodes( tr2, aNodes2, 3 ); - - //MESSAGE( tr1 << tr2 ); - - return true; - -} - -//======================================================================= -//function : getQuadrangleNodes -//purpose : fill theQuadNodes - nodes of a quadrangle resulting from -// fusion of triangles tr1 and tr2 having shared link on -// theNode1 and theNode2 -//======================================================================= - -bool getQuadrangleNodes(const SMDS_MeshNode * theQuadNodes [], - const SMDS_MeshNode * theNode1, - const SMDS_MeshNode * theNode2, - const SMDS_MeshElement * tr1, - const SMDS_MeshElement * tr2 ) -{ - // find the 4-th node to insert into tr1 - const SMDS_MeshNode* n4 = 0; - SMDS_ElemIteratorPtr it = tr2->nodesIterator(); - while ( !n4 && it->more() ) - { - const SMDS_MeshNode * n = static_cast( it->next() ); - bool isDiag = ( n == theNode1 || n == theNode2 ); - if ( !isDiag ) - n4 = n; - } - // Make an array of nodes to be in a quadrangle - int iNode = 0, iFirstDiag = -1; - it = tr1->nodesIterator(); - while ( it->more() ) - { - const SMDS_MeshNode * n = static_cast( it->next() ); - bool isDiag = ( n == theNode1 || n == theNode2 ); - if ( isDiag ) - { - if ( iFirstDiag < 0 ) - iFirstDiag = iNode; - else if ( iNode - iFirstDiag == 1 ) - theQuadNodes[ iNode++ ] = n4; // insert the 4-th node between diagonal nodes - } - else if ( n == n4 ) - { - return false; // tr1 and tr2 should not have all the same nodes - } - theQuadNodes[ iNode++ ] = n; - } - if ( iNode == 3 ) // diagonal nodes have 0 and 2 indices - theQuadNodes[ iNode ] = n4; - - return true; -} - -//======================================================================= -//function : DeleteDiag -//purpose : Replace two neighbour triangles sharing theNode1-theNode2 link -// with a quadrangle built on the same 4 nodes. -// Return false if proper faces not found -//======================================================================= - -bool SMESH_MeshEditor::DeleteDiag (const SMDS_MeshNode * theNode1, - const SMDS_MeshNode * theNode2) -{ - MESSAGE( "::DeleteDiag()" ); - - const SMDS_MeshElement *tr1, *tr2; - if ( !findTriangles( theNode1, theNode2, tr1, tr2 )) - return false; - - const SMDS_FaceOfNodes* F1 = dynamic_cast( tr1 ); - if (!F1) return false; - const SMDS_FaceOfNodes* F2 = dynamic_cast( tr2 ); - if (!F2) return false; - - const SMDS_MeshNode* aNodes [ 4 ]; - if ( ! getQuadrangleNodes( aNodes, theNode1, theNode2, tr1, tr2 )) - return false; - - //MESSAGE( endl << tr1 << tr2 ); - - GetMeshDS()->ChangeElementNodes( tr1, aNodes, 4 ); - GetMeshDS()->RemoveElement( tr2 ); - - //MESSAGE( endl << tr1 ); - - return true; -} - -//======================================================================= -//function : Reorient -//purpose : Reverse theElement orientation -//======================================================================= - -bool SMESH_MeshEditor::Reorient (const SMDS_MeshElement * theElem) -{ - if (!theElem) - return false; - SMDS_ElemIteratorPtr it = theElem->nodesIterator(); - if ( !it || !it->more() ) - return false; - - switch ( theElem->GetType() ) { - - case SMDSAbs_Edge: - case SMDSAbs_Face: - { - int i = theElem->NbNodes(); - vector aNodes( i ); - while ( it->more() ) - aNodes[ --i ]= static_cast( it->next() ); - return GetMeshDS()->ChangeElementNodes( theElem, &aNodes[0], theElem->NbNodes() ); - } - case SMDSAbs_Volume: - { - if (theElem->IsPoly()) { - const SMDS_PolyhedralVolumeOfNodes* aPolyedre = - static_cast( theElem ); - if (!aPolyedre) { - MESSAGE("Warning: bad volumic element"); - return false; - } - - int nbFaces = aPolyedre->NbFaces(); - vector poly_nodes; - vector quantities (nbFaces); - - // reverse each face of the polyedre - for (int iface = 1; iface <= nbFaces; iface++) { - int inode, nbFaceNodes = aPolyedre->NbFaceNodes(iface); - quantities[iface - 1] = nbFaceNodes; - - for (inode = nbFaceNodes; inode >= 1; inode--) { - const SMDS_MeshNode* curNode = aPolyedre->GetFaceNode(iface, inode); - poly_nodes.push_back(curNode); - } - } - - return GetMeshDS()->ChangePolyhedronNodes( theElem, poly_nodes, quantities ); - - } else { - SMDS_VolumeTool vTool; - if ( !vTool.Set( theElem )) - return false; - vTool.Inverse(); - return GetMeshDS()->ChangeElementNodes( theElem, vTool.GetNodes(), vTool.NbNodes() ); - } - } - default:; - } - - return false; -} - -//======================================================================= -//function : getBadRate -//purpose : -//======================================================================= - -static double getBadRate (const SMDS_MeshElement* theElem, - SMESH::Controls::NumericalFunctorPtr& theCrit) -{ - SMESH::Controls::TSequenceOfXYZ P; - if ( !theElem || !theCrit->GetPoints( theElem, P )) - return 1e100; - return theCrit->GetBadRate( theCrit->GetValue( P ), theElem->NbNodes() ); - //return theCrit->GetBadRate( theCrit->GetValue( theElem->GetID() ), theElem->NbNodes() ); -} - -//======================================================================= -//function : QuadToTri -//purpose : Cut quadrangles into triangles. -// theCrit is used to select a diagonal to cut -//======================================================================= - -bool SMESH_MeshEditor::QuadToTri (set & theElems, - SMESH::Controls::NumericalFunctorPtr theCrit) -{ - MESSAGE( "::QuadToTri()" ); - - if ( !theCrit.get() ) - return false; - - SMESHDS_Mesh * aMesh = GetMeshDS(); - - set< const SMDS_MeshElement * >::iterator itElem; - for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) - { - const SMDS_MeshElement* elem = (*itElem); - if ( !elem || elem->GetType() != SMDSAbs_Face || elem->NbNodes() != 4 ) - continue; - - // retrieve element nodes - const SMDS_MeshNode* aNodes [4]; - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - int i = 0; - while ( itN->more() ) - aNodes[ i++ ] = static_cast( itN->next() ); - - // compare two sets of possible triangles - double aBadRate1, aBadRate2; // to what extent a set is bad - SMDS_FaceOfNodes tr1 ( aNodes[0], aNodes[1], aNodes[2] ); - SMDS_FaceOfNodes tr2 ( aNodes[2], aNodes[3], aNodes[0] ); - aBadRate1 = getBadRate( &tr1, theCrit ) + getBadRate( &tr2, theCrit ); - - SMDS_FaceOfNodes tr3 ( aNodes[1], aNodes[2], aNodes[3] ); - SMDS_FaceOfNodes tr4 ( aNodes[3], aNodes[0], aNodes[1] ); - aBadRate2 = getBadRate( &tr3, theCrit ) + getBadRate( &tr4, theCrit ); - - int aShapeId = FindShape( elem ); - //MESSAGE( "aBadRate1 = " << aBadRate1 << "; aBadRate2 = " << aBadRate2 - // << " ShapeID = " << aShapeId << endl << elem ); - - if ( aBadRate1 <= aBadRate2 ) { - // tr1 + tr2 is better - aMesh->ChangeElementNodes( elem, aNodes, 3 ); - //MESSAGE( endl << elem ); - - elem = aMesh->AddFace( aNodes[2], aNodes[3], aNodes[0] ); - } - else { - // tr3 + tr4 is better - aMesh->ChangeElementNodes( elem, &aNodes[1], 3 ); - //MESSAGE( endl << elem ); - - elem = aMesh->AddFace( aNodes[3], aNodes[0], aNodes[1] ); - } - //MESSAGE( endl << elem ); - - // put a new triangle on the same shape - if ( aShapeId ) - aMesh->SetMeshElementOnShape( elem, aShapeId ); - } - - return true; -} - -//======================================================================= -//function : BestSplit -//purpose : Find better diagonal for cutting. -//======================================================================= -int SMESH_MeshEditor::BestSplit (const SMDS_MeshElement* theQuad, - SMESH::Controls::NumericalFunctorPtr theCrit) -{ - if (!theCrit.get()) - return -1; - - if (!theQuad || theQuad->GetType() != SMDSAbs_Face || theQuad->NbNodes() != 4) - return -1; - - // retrieve element nodes - const SMDS_MeshNode* aNodes [4]; - SMDS_ElemIteratorPtr itN = theQuad->nodesIterator(); - int i = 0; - while (itN->more()) - aNodes[ i++ ] = static_cast( itN->next() ); - - // compare two sets of possible triangles - double aBadRate1, aBadRate2; // to what extent a set is bad - SMDS_FaceOfNodes tr1 ( aNodes[0], aNodes[1], aNodes[2] ); - SMDS_FaceOfNodes tr2 ( aNodes[2], aNodes[3], aNodes[0] ); - aBadRate1 = getBadRate( &tr1, theCrit ) + getBadRate( &tr2, theCrit ); - - SMDS_FaceOfNodes tr3 ( aNodes[1], aNodes[2], aNodes[3] ); - SMDS_FaceOfNodes tr4 ( aNodes[3], aNodes[0], aNodes[1] ); - aBadRate2 = getBadRate( &tr3, theCrit ) + getBadRate( &tr4, theCrit ); - - if (aBadRate1 <= aBadRate2) // tr1 + tr2 is better - return 1; // diagonal 1-3 - - return 2; // diagonal 2-4 -} - -//======================================================================= -//function : AddToSameGroups -//purpose : add elemToAdd to the groups the elemInGroups belongs to -//======================================================================= - -void SMESH_MeshEditor::AddToSameGroups (const SMDS_MeshElement* elemToAdd, - const SMDS_MeshElement* elemInGroups, - SMESHDS_Mesh * aMesh) -{ - const set& groups = aMesh->GetGroups(); - set::const_iterator grIt = groups.begin(); - for ( ; grIt != groups.end(); grIt++ ) { - SMESHDS_Group* group = dynamic_cast( *grIt ); - if ( group && group->SMDSGroup().Contains( elemInGroups )) - group->SMDSGroup().Add( elemToAdd ); - } -} - -//======================================================================= -//function : QuadToTri -//purpose : Cut quadrangles into triangles. -// theCrit is used to select a diagonal to cut -//======================================================================= - -bool SMESH_MeshEditor::QuadToTri (std::set & theElems, - const bool the13Diag) -{ - MESSAGE( "::QuadToTri()" ); - - SMESHDS_Mesh * aMesh = GetMeshDS(); - - set< const SMDS_MeshElement * >::iterator itElem; - for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) - { - const SMDS_MeshElement* elem = (*itElem); - if ( !elem || elem->GetType() != SMDSAbs_Face || elem->NbNodes() != 4 ) - continue; - - // retrieve element nodes - const SMDS_MeshNode* aNodes [4]; - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - int i = 0; - while ( itN->more() ) - aNodes[ i++ ] = static_cast( itN->next() ); - - int aShapeId = FindShape( elem ); - const SMDS_MeshElement* newElem = 0; - if ( the13Diag ) - { - aMesh->ChangeElementNodes( elem, aNodes, 3 ); - newElem = aMesh->AddFace( aNodes[2], aNodes[3], aNodes[0] ); - } - else - { - aMesh->ChangeElementNodes( elem, &aNodes[1], 3 ); - newElem = aMesh->AddFace( aNodes[3], aNodes[0], aNodes[1] ); - } - - // put a new triangle on the same shape and add to the same groups - - if ( aShapeId ) - aMesh->SetMeshElementOnShape( newElem, aShapeId ); - - AddToSameGroups( newElem, elem, aMesh ); - } - - return true; -} - -//======================================================================= -//function : getAngle -//purpose : -//======================================================================= - -double getAngle(const SMDS_MeshElement * tr1, - const SMDS_MeshElement * tr2, - const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2) -{ - double angle = 2*PI; // bad angle - - // get normals - SMESH::Controls::TSequenceOfXYZ P1, P2; - if ( !SMESH::Controls::NumericalFunctor::GetPoints( tr1, P1 ) || - !SMESH::Controls::NumericalFunctor::GetPoints( tr2, P2 )) - return angle; - gp_Vec N1 = gp_Vec( P1(2) - P1(1) ) ^ gp_Vec( P1(3) - P1(1) ); - if ( N1.SquareMagnitude() <= gp::Resolution() ) - return angle; - gp_Vec N2 = gp_Vec( P2(2) - P2(1) ) ^ gp_Vec( P2(3) - P2(1) ); - if ( N2.SquareMagnitude() <= gp::Resolution() ) - return angle; - - // find the first diagonal node n1 in the triangles: - // take in account a diagonal link orientation - const SMDS_MeshElement *nFirst[2], *tr[] = { tr1, tr2 }; - for ( int t = 0; t < 2; t++ ) - { - SMDS_ElemIteratorPtr it = tr[ t ]->nodesIterator(); - int i = 0, iDiag = -1; - while ( it->more()) { - const SMDS_MeshElement *n = it->next(); - if ( n == n1 || n == n2 ) - if ( iDiag < 0) - iDiag = i; - else { - if ( i - iDiag == 1 ) - nFirst[ t ] = ( n == n1 ? n2 : n1 ); - else - nFirst[ t ] = n; - break; - } - i++; - } - } - if ( nFirst[ 0 ] == nFirst[ 1 ] ) - N2.Reverse(); - - angle = N1.Angle( N2 ); - //SCRUTE( angle ); - return angle; -} - -// ================================================= -// class generating a unique ID for a pair of nodes -// and able to return nodes by that ID -// ================================================= - -class LinkID_Gen { - public: - - LinkID_Gen( const SMESHDS_Mesh* theMesh ) - :myMesh( theMesh ), myMaxID( theMesh->MaxNodeID() + 1) - {} - - long GetLinkID (const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2) const - { - return ( Min(n1->GetID(),n2->GetID()) * myMaxID + Max(n1->GetID(),n2->GetID())); - } - - bool GetNodes (const long theLinkID, - const SMDS_MeshNode* & theNode1, - const SMDS_MeshNode* & theNode2) const - { - theNode1 = myMesh->FindNode( theLinkID / myMaxID ); - if ( !theNode1 ) return false; - theNode2 = myMesh->FindNode( theLinkID % myMaxID ); - if ( !theNode2 ) return false; - return true; - } - - private: - LinkID_Gen(); - const SMESHDS_Mesh* myMesh; - long myMaxID; -}; - -//======================================================================= -//function : TriToQuad -//purpose : Fuse neighbour triangles into quadrangles. -// theCrit is used to select a neighbour to fuse with. -// theMaxAngle is a max angle between element normals at which -// fusion is still performed. -//======================================================================= - -bool SMESH_MeshEditor::TriToQuad (set & theElems, - SMESH::Controls::NumericalFunctorPtr theCrit, - const double theMaxAngle) -{ - MESSAGE( "::TriToQuad()" ); - - if ( !theCrit.get() ) - return false; - - SMESHDS_Mesh * aMesh = GetMeshDS(); - LinkID_Gen aLinkID_Gen( aMesh ); - - - // Prepare data for algo: build - // 1. map of elements with their linkIDs - // 2. map of linkIDs with their elements - - map< long, list< const SMDS_MeshElement* > > mapLi_listEl; - map< long, list< const SMDS_MeshElement* > >::iterator itLE; - map< const SMDS_MeshElement*, set< long > > mapEl_setLi; - map< const SMDS_MeshElement*, set< long > >::iterator itEL; - - set::iterator itElem; - for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) - { - const SMDS_MeshElement* elem = (*itElem); - if ( !elem || elem->NbNodes() != 3 ) - continue; - - // retrieve element nodes - const SMDS_MeshNode* aNodes [4]; - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - int i = 0; - while ( itN->more() ) - aNodes[ i++ ] = static_cast( itN->next() ); - ASSERT( i == 3 ); - aNodes[ 3 ] = aNodes[ 0 ]; - - // fill maps - for ( i = 0; i < 3; i++ ) - { - long linkID = aLinkID_Gen.GetLinkID( aNodes[ i ], aNodes[ i+1 ] ); - // check if elements sharing a link can be fused - itLE = mapLi_listEl.find( linkID ); - if ( itLE != mapLi_listEl.end() ) - { - if ((*itLE).second.size() > 1 ) // consider only 2 elems adjacent by a link - continue; - const SMDS_MeshElement* elem2 = (*itLE).second.front(); -// if ( FindShape( elem ) != FindShape( elem2 )) -// continue; // do not fuse triangles laying on different shapes - if ( getAngle( elem, elem2, aNodes[i], aNodes[i+1] ) > theMaxAngle ) - continue; // avoid making badly shaped quads - (*itLE).second.push_back( elem ); - } - else - mapLi_listEl[ linkID ].push_back( elem ); - mapEl_setLi [ elem ].insert( linkID ); - } - } - // Clean the maps from the links shared by a sole element, ie - // links to which only one element is bound in mapLi_listEl - - for ( itLE = mapLi_listEl.begin(); itLE != mapLi_listEl.end(); itLE++ ) - { - int nbElems = (*itLE).second.size(); - if ( nbElems < 2 ) { - const SMDS_MeshElement* elem = (*itLE).second.front(); - long link = (*itLE).first; - mapEl_setLi[ elem ].erase( link ); - if ( mapEl_setLi[ elem ].empty() ) - mapEl_setLi.erase( elem ); - } - } - - // Algo: fuse triangles into quadrangles - - while ( ! mapEl_setLi.empty() ) - { - // Look for the start element: - // the element having the least nb of shared links - - const SMDS_MeshElement* startElem = 0; - int minNbLinks = 4; - for ( itEL = mapEl_setLi.begin(); itEL != mapEl_setLi.end(); itEL++ ) - { - int nbLinks = (*itEL).second.size(); - if ( nbLinks < minNbLinks ) - { - startElem = (*itEL).first; - minNbLinks = nbLinks; - if ( minNbLinks == 1 ) - break; - } - } - - // search elements to fuse starting from startElem or links of elements - // fused earlyer - startLinks - list< long > startLinks; - while ( startElem || !startLinks.empty() ) - { - while ( !startElem && !startLinks.empty() ) - { - // Get an element to start, by a link - long linkId = startLinks.front(); - startLinks.pop_front(); - itLE = mapLi_listEl.find( linkId ); - if ( itLE != mapLi_listEl.end() ) - { - list< const SMDS_MeshElement* > & listElem = (*itLE).second; - list< const SMDS_MeshElement* >::iterator itE = listElem.begin(); - for ( ; itE != listElem.end() ; itE++ ) - if ( mapEl_setLi.find( (*itE) ) != mapEl_setLi.end() ) - startElem = (*itE); - mapLi_listEl.erase( itLE ); - } - } - - if ( startElem ) - { - // Get candidates to be fused - - const SMDS_MeshElement *tr1 = startElem, *tr2 = 0, *tr3 = 0; - long link12, link13; - startElem = 0; - ASSERT( mapEl_setLi.find( tr1 ) != mapEl_setLi.end() ); - set< long >& setLi = mapEl_setLi[ tr1 ]; - ASSERT( !setLi.empty() ); - set< long >::iterator itLi; - for ( itLi = setLi.begin(); itLi != setLi.end(); itLi++ ) - { - long linkID = (*itLi); - itLE = mapLi_listEl.find( linkID ); - if ( itLE == mapLi_listEl.end() ) - continue; - const SMDS_MeshElement* elem = (*itLE).second.front(); - if ( elem == tr1 ) - elem = (*itLE).second.back(); - mapLi_listEl.erase( itLE ); - if ( mapEl_setLi.find( elem ) == mapEl_setLi.end()) - continue; - if ( tr2 ) - { - tr3 = elem; - link13 = linkID; - } - else - { - tr2 = elem; - link12 = linkID; - } - - // add other links of elem to list of links to re-start from - set< long >& links = mapEl_setLi[ elem ]; - set< long >::iterator it; - for ( it = links.begin(); it != links.end(); it++ ) - { - long linkID2 = (*it); - if ( linkID2 != linkID ) - startLinks.push_back( linkID2 ); - } - } - - // Get nodes of possible quadrangles - - const SMDS_MeshNode *n12 [4], *n13 [4]; - bool Ok12 = false, Ok13 = false; - const SMDS_MeshNode *linkNode1, *linkNode2; - if ( tr2 && - aLinkID_Gen.GetNodes( link12, linkNode1, linkNode2 ) && - getQuadrangleNodes( n12, linkNode1, linkNode2, tr1, tr2 )) - Ok12 = true; - if ( tr3 && - aLinkID_Gen.GetNodes( link13, linkNode1, linkNode2 ) && - getQuadrangleNodes( n13, linkNode1, linkNode2, tr1, tr3 )) - Ok13 = true; - - // Choose a pair to fuse - - if ( Ok12 && Ok13 ) - { - SMDS_FaceOfNodes quad12 ( n12[ 0 ], n12[ 1 ], n12[ 2 ], n12[ 3 ] ); - SMDS_FaceOfNodes quad13 ( n13[ 0 ], n13[ 1 ], n13[ 2 ], n13[ 3 ] ); - double aBadRate12 = getBadRate( &quad12, theCrit ); - double aBadRate13 = getBadRate( &quad13, theCrit ); - if ( aBadRate13 < aBadRate12 ) - Ok12 = false; - else - Ok13 = false; - } - - - // Make quadrangles - // and remove fused elems and removed links from the maps - - mapEl_setLi.erase( tr1 ); - if ( Ok12 ) - { - mapEl_setLi.erase( tr2 ); - mapLi_listEl.erase( link12 ); - aMesh->ChangeElementNodes( tr1, n12, 4 ); - aMesh->RemoveElement( tr2 ); - } - else if ( Ok13 ) - { - mapEl_setLi.erase( tr3 ); - mapLi_listEl.erase( link13 ); - aMesh->ChangeElementNodes( tr1, n13, 4 ); - aMesh->RemoveElement( tr3 ); - } - - // Next element to fuse: the rejected one - if ( tr3 ) - startElem = Ok12 ? tr3 : tr2; - - } // if ( startElem ) - } // while ( startElem || !startLinks.empty() ) - } // while ( ! mapEl_setLi.empty() ) - - return true; -} - - -/*#define DUMPSO(txt) \ -// cout << txt << endl; -//============================================================================= -// -// -// -//============================================================================= -static void swap( int i1, int i2, int idNodes[], gp_Pnt P[] ) -{ - if ( i1 == i2 ) - return; - int tmp = idNodes[ i1 ]; - idNodes[ i1 ] = idNodes[ i2 ]; - idNodes[ i2 ] = tmp; - gp_Pnt Ptmp = P[ i1 ]; - P[ i1 ] = P[ i2 ]; - P[ i2 ] = Ptmp; - DUMPSO( i1 << "(" << idNodes[ i2 ] << ") <-> " << i2 << "(" << idNodes[ i1 ] << ")"); -} - -//======================================================================= -//function : SortQuadNodes -//purpose : Set 4 nodes of a quadrangle face in a good order. -// Swap 1<->2 or 2<->3 nodes and correspondingly return -// 1 or 2 else 0. -//======================================================================= - -int SMESH_MeshEditor::SortQuadNodes (const SMDS_Mesh * theMesh, - int idNodes[] ) -{ - gp_Pnt P[4]; - int i; - for ( i = 0; i < 4; i++ ) { - const SMDS_MeshNode *n = theMesh->FindNode( idNodes[i] ); - if ( !n ) return 0; - P[ i ].SetCoord( n->X(), n->Y(), n->Z() ); - } - - gp_Vec V1(P[0], P[1]); - gp_Vec V2(P[0], P[2]); - gp_Vec V3(P[0], P[3]); - - gp_Vec Cross1 = V1 ^ V2; - gp_Vec Cross2 = V2 ^ V3; - - i = 0; - if (Cross1.Dot(Cross2) < 0) - { - Cross1 = V2 ^ V1; - Cross2 = V1 ^ V3; - - if (Cross1.Dot(Cross2) < 0) - i = 2; - else - i = 1; - swap ( i, i + 1, idNodes, P ); - -// for ( int ii = 0; ii < 4; ii++ ) { -// const SMDS_MeshNode *n = theMesh->FindNode( idNodes[ii] ); -// DUMPSO( ii << "(" << idNodes[ii] <<") : "<X()<<" "<Y()<<" "<Z()); -// } - } - return i; -} - -//======================================================================= -//function : SortHexaNodes -//purpose : Set 8 nodes of a hexahedron in a good order. -// Return success status -//======================================================================= - -bool SMESH_MeshEditor::SortHexaNodes (const SMDS_Mesh * theMesh, - int idNodes[] ) -{ - gp_Pnt P[8]; - int i; - DUMPSO( "INPUT: ========================================"); - for ( i = 0; i < 8; i++ ) { - const SMDS_MeshNode *n = theMesh->FindNode( idNodes[i] ); - if ( !n ) return false; - P[ i ].SetCoord( n->X(), n->Y(), n->Z() ); - DUMPSO( i << "(" << idNodes[i] <<") : "<X()<<" "<Y()<<" "<Z()); - } - DUMPSO( "========================================"); - - - set faceNodes; // ids of bottom face nodes, to be found - set checkedId1; // ids of tried 2-nd nodes - Standard_Real leastDist = DBL_MAX; // dist of the 4-th node from 123 plane - const Standard_Real tol = 1.e-6; // tolerance to find nodes in plane - int iMin, iLoop1 = 0; - - // Loop to try the 2-nd nodes - - while ( leastDist > DBL_MIN && ++iLoop1 < 8 ) - { - // Find not checked 2-nd node - for ( i = 1; i < 8; i++ ) - if ( checkedId1.find( idNodes[i] ) == checkedId1.end() ) { - int id1 = idNodes[i]; - swap ( 1, i, idNodes, P ); - checkedId1.insert ( id1 ); - break; - } - - // Find the 3-d node so that 1-2-3 triangle to be on a hexa face, - // ie that all but meybe one (id3 which is on the same face) nodes - // lay on the same side from the triangle plane. - - bool manyInPlane = false; // more than 4 nodes lay in plane - int iLoop2 = 0; - while ( ++iLoop2 < 6 ) { - - // get 1-2-3 plane coeffs - Standard_Real A, B, C, D; - gp_Vec N = gp_Vec (P[0], P[1]).Crossed( gp_Vec (P[0], P[2]) ); - if ( N.SquareMagnitude() > gp::Resolution() ) - { - gp_Pln pln ( P[0], N ); - pln.Coefficients( A, B, C, D ); - - // find the node (iMin) closest to pln - Standard_Real dist[ 8 ], minDist = DBL_MAX; - set idInPln; - for ( i = 3; i < 8; i++ ) { - dist[i] = A * P[i].X() + B * P[i].Y() + C * P[i].Z() + D; - if ( fabs( dist[i] ) < minDist ) { - minDist = fabs( dist[i] ); - iMin = i; - } - if ( fabs( dist[i] ) <= tol ) - idInPln.insert( idNodes[i] ); - } - - // there should not be more than 4 nodes in bottom plane - if ( idInPln.size() > 1 ) - { - DUMPSO( "### idInPln.size() = " << idInPln.size()); - // idInPlane does not contain the first 3 nodes - if ( manyInPlane || idInPln.size() == 5) - return false; // all nodes in one plane - manyInPlane = true; - - // set the 1-st node to be not in plane - for ( i = 3; i < 8; i++ ) { - if ( idInPln.find( idNodes[ i ] ) == idInPln.end() ) { - DUMPSO( "### Reset 0-th node"); - swap( 0, i, idNodes, P ); - break; - } - } - - // reset to re-check second nodes - leastDist = DBL_MAX; - faceNodes.clear(); - checkedId1.clear(); - iLoop1 = 0; - break; // from iLoop2; - } - - // check that the other 4 nodes are on the same side - bool sameSide = true; - bool isNeg = dist[ iMin == 3 ? 4 : 3 ] <= 0.; - for ( i = 3; sameSide && i < 8; i++ ) { - if ( i != iMin ) - sameSide = ( isNeg == dist[i] <= 0.); - } - - // keep best solution - if ( sameSide && minDist < leastDist ) { - leastDist = minDist; - faceNodes.clear(); - faceNodes.insert( idNodes[ 1 ] ); - faceNodes.insert( idNodes[ 2 ] ); - faceNodes.insert( idNodes[ iMin ] ); - DUMPSO( "loop " << iLoop2 << " id2 " << idNodes[ 1 ] << " id3 " << idNodes[ 2 ] - << " leastDist = " << leastDist); - if ( leastDist <= DBL_MIN ) - break; - } - } - - // set next 3-d node to check - int iNext = 2 + iLoop2; - if ( iNext < 8 ) { - DUMPSO( "Try 2-nd"); - swap ( 2, iNext, idNodes, P ); - } - } // while ( iLoop2 < 6 ) - } // iLoop1 - - if ( faceNodes.empty() ) return false; - - // Put the faceNodes in proper places - for ( i = 4; i < 8; i++ ) { - if ( faceNodes.find( idNodes[ i ] ) != faceNodes.end() ) { - // find a place to put - int iTo = 1; - while ( faceNodes.find( idNodes[ iTo ] ) != faceNodes.end() ) - iTo++; - DUMPSO( "Set faceNodes"); - swap ( iTo, i, idNodes, P ); - } - } - - - // Set nodes of the found bottom face in good order - DUMPSO( " Found bottom face: "); - i = SortQuadNodes( theMesh, idNodes ); - if ( i ) { - gp_Pnt Ptmp = P[ i ]; - P[ i ] = P[ i+1 ]; - P[ i+1 ] = Ptmp; - } -// else -// for ( int ii = 0; ii < 4; ii++ ) { -// const SMDS_MeshNode *n = theMesh->FindNode( idNodes[ii] ); -// DUMPSO( ii << "(" << idNodes[ii] <<") : "<X()<<" "<Y()<<" "<Z()); -// } - - // Gravity center of the top and bottom faces - gp_Pnt aGCb = ( P[0].XYZ() + P[1].XYZ() + P[2].XYZ() + P[3].XYZ() ) / 4.; - gp_Pnt aGCt = ( P[4].XYZ() + P[5].XYZ() + P[6].XYZ() + P[7].XYZ() ) / 4.; - - // Get direction from the bottom to the top face - gp_Vec upDir ( aGCb, aGCt ); - Standard_Real upDirSize = upDir.Magnitude(); - if ( upDirSize <= gp::Resolution() ) return false; - upDir / upDirSize; - - // Assure that the bottom face normal points up - gp_Vec Nb = gp_Vec (P[0], P[1]).Crossed( gp_Vec (P[0], P[2]) ); - Nb += gp_Vec (P[0], P[2]).Crossed( gp_Vec (P[0], P[3]) ); - if ( Nb.Dot( upDir ) < 0 ) { - DUMPSO( "Reverse bottom face"); - swap( 1, 3, idNodes, P ); - } - - // Find 5-th node - the one closest to the 1-st among the last 4 nodes. - Standard_Real minDist = DBL_MAX; - for ( i = 4; i < 8; i++ ) { - // projection of P[i] to the plane defined by P[0] and upDir - gp_Pnt Pp = P[i].Translated( upDir * ( upDir.Dot( gp_Vec( P[i], P[0] )))); - Standard_Real sqDist = P[0].SquareDistance( Pp ); - if ( sqDist < minDist ) { - minDist = sqDist; - iMin = i; - } - } - DUMPSO( "Set 4-th"); - swap ( 4, iMin, idNodes, P ); - - // Set nodes of the top face in good order - DUMPSO( "Sort top face"); - i = SortQuadNodes( theMesh, &idNodes[4] ); - if ( i ) { - i += 4; - gp_Pnt Ptmp = P[ i ]; - P[ i ] = P[ i+1 ]; - P[ i+1 ] = Ptmp; - } - - // Assure that direction of the top face normal is from the bottom face - gp_Vec Nt = gp_Vec (P[4], P[5]).Crossed( gp_Vec (P[4], P[6]) ); - Nt += gp_Vec (P[4], P[6]).Crossed( gp_Vec (P[4], P[7]) ); - if ( Nt.Dot( upDir ) < 0 ) { - DUMPSO( "Reverse top face"); - swap( 5, 7, idNodes, P ); - } - -// DUMPSO( "OUTPUT: ========================================"); -// for ( i = 0; i < 8; i++ ) { -// float *p = ugrid->GetPoint(idNodes[i]); -// DUMPSO( i << "(" << idNodes[i] << ") : " << p[0] << " " << p[1] << " " << p[2]); -// } - - return true; -}*/ - -//======================================================================= -//function : laplacianSmooth -//purpose : pulls theNode toward the center of surrounding nodes directly -// connected to that node along an element edge -//======================================================================= - -void laplacianSmooth(const SMDS_MeshNode* theNode, - const Handle(Geom_Surface)& theSurface, - map< const SMDS_MeshNode*, gp_XY* >& theUVMap) -{ - // find surrounding nodes - - set< const SMDS_MeshNode* > nodeSet; - SMDS_ElemIteratorPtr elemIt = theNode->GetInverseElementIterator(); - while ( elemIt->more() ) - { - const SMDS_MeshElement* elem = elemIt->next(); - if ( elem->GetType() != SMDSAbs_Face ) - continue; - - // put all nodes in array - int nbNodes = 0, iNode = 0; - vector< const SMDS_MeshNode*> aNodes( elem->NbNodes() ); - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - while ( itN->more() ) - { - aNodes[ nbNodes ] = static_cast( itN->next() ); - if ( aNodes[ nbNodes ] == theNode ) - iNode = nbNodes; // index of theNode within aNodes - nbNodes++; - } - // add linked nodes - int iAfter = ( iNode + 1 == nbNodes ) ? 0 : iNode + 1; - nodeSet.insert( aNodes[ iAfter ]); - int iBefore = ( iNode == 0 ) ? nbNodes - 1 : iNode - 1; - nodeSet.insert( aNodes[ iBefore ]); - } - - // compute new coodrs - - double coord[] = { 0., 0., 0. }; - set< const SMDS_MeshNode* >::iterator nodeSetIt = nodeSet.begin(); - for ( ; nodeSetIt != nodeSet.end(); nodeSetIt++ ) { - const SMDS_MeshNode* node = (*nodeSetIt); - if ( theSurface.IsNull() ) { // smooth in 3D - coord[0] += node->X(); - coord[1] += node->Y(); - coord[2] += node->Z(); - } - else { // smooth in 2D - ASSERT( theUVMap.find( node ) != theUVMap.end() ); - gp_XY* uv = theUVMap[ node ]; - coord[0] += uv->X(); - coord[1] += uv->Y(); - } - } - int nbNodes = nodeSet.size(); - if ( !nbNodes ) - return; - coord[0] /= nbNodes; - coord[1] /= nbNodes; - - if ( !theSurface.IsNull() ) { - ASSERT( theUVMap.find( theNode ) != theUVMap.end() ); - theUVMap[ theNode ]->SetCoord( coord[0], coord[1] ); - gp_Pnt p3d = theSurface->Value( coord[0], coord[1] ); - coord[0] = p3d.X(); - coord[1] = p3d.Y(); - coord[2] = p3d.Z(); - } - else - coord[2] /= nbNodes; - - // move node - - const_cast< SMDS_MeshNode* >( theNode )->setXYZ(coord[0],coord[1],coord[2]); -} - -//======================================================================= -//function : centroidalSmooth -//purpose : pulls theNode toward the element-area-weighted centroid of the -// surrounding elements -//======================================================================= - -void centroidalSmooth(const SMDS_MeshNode* theNode, - const Handle(Geom_Surface)& theSurface, - map< const SMDS_MeshNode*, gp_XY* >& theUVMap) -{ - gp_XYZ aNewXYZ(0.,0.,0.); - SMESH::Controls::Area anAreaFunc; - double totalArea = 0.; - int nbElems = 0; - - // compute new XYZ - - SMDS_ElemIteratorPtr elemIt = theNode->GetInverseElementIterator(); - while ( elemIt->more() ) - { - const SMDS_MeshElement* elem = elemIt->next(); - if ( elem->GetType() != SMDSAbs_Face ) - continue; - nbElems++; - - gp_XYZ elemCenter(0.,0.,0.); - SMESH::Controls::TSequenceOfXYZ aNodePoints; - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - while ( itN->more() ) - { - const SMDS_MeshNode* aNode = static_cast( itN->next() ); - gp_XYZ aP( aNode->X(), aNode->Y(), aNode->Z() ); - aNodePoints.push_back( aP ); - if ( !theSurface.IsNull() ) { // smooth in 2D - ASSERT( theUVMap.find( aNode ) != theUVMap.end() ); - gp_XY* uv = theUVMap[ aNode ]; - aP.SetCoord( uv->X(), uv->Y(), 0. ); - } - elemCenter += aP; - } - double elemArea = anAreaFunc.GetValue( aNodePoints ); - totalArea += elemArea; - elemCenter /= elem->NbNodes(); - aNewXYZ += elemCenter * elemArea; - } - aNewXYZ /= totalArea; - if ( !theSurface.IsNull() ) { - ASSERT( theUVMap.find( theNode ) != theUVMap.end() ); - theUVMap[ theNode ]->SetCoord( aNewXYZ.X(), aNewXYZ.Y() ); - aNewXYZ = theSurface->Value( aNewXYZ.X(), aNewXYZ.Y() ).XYZ(); - } - - // move node - - const_cast< SMDS_MeshNode* >( theNode )->setXYZ(aNewXYZ.X(),aNewXYZ.Y(),aNewXYZ.Z()); -} - -//======================================================================= -//function : getClosestUV -//purpose : return UV of closest projection -//======================================================================= - -static bool getClosestUV (Extrema_GenExtPS& projector, - const gp_Pnt& point, - gp_XY & result) -{ - projector.Perform( point ); - if ( projector.IsDone() ) { - double u, v, minVal = DBL_MAX; - for ( int i = projector.NbExt(); i > 0; i-- ) - if ( projector.Value( i ) < minVal ) { - minVal = projector.Value( i ); - projector.Point( i ).Parameter( u, v ); - } - result.SetCoord( u, v ); - return true; - } - return false; -} - -//======================================================================= -//function : Smooth -//purpose : Smooth theElements during theNbIterations or until a worst -// element has aspect ratio <= theTgtAspectRatio. -// Aspect Ratio varies in range [1.0, inf]. -// If theElements is empty, the whole mesh is smoothed. -// theFixedNodes contains additionally fixed nodes. Nodes built -// on edges and boundary nodes are always fixed. -//======================================================================= - -void SMESH_MeshEditor::Smooth (set & theElems, - set & theFixedNodes, - const SmoothMethod theSmoothMethod, - const int theNbIterations, - double theTgtAspectRatio, - const bool the2D) -{ - MESSAGE((theSmoothMethod==LAPLACIAN ? "LAPLACIAN" : "CENTROIDAL") << "--::Smooth()"); - - if ( theTgtAspectRatio < 1.0 ) - theTgtAspectRatio = 1.0; - - SMESH::Controls::AspectRatio aQualityFunc; - - SMESHDS_Mesh* aMesh = GetMeshDS(); - - if ( theElems.empty() ) { - // add all faces to theElems - SMDS_FaceIteratorPtr fIt = aMesh->facesIterator(); - while ( fIt->more() ) - theElems.insert( fIt->next() ); - } - // get all face ids theElems are on - set< int > faceIdSet; - set< const SMDS_MeshElement* >::iterator itElem; - if ( the2D ) - for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) { - int fId = FindShape( *itElem ); - // check that corresponding submesh exists and a shape is face - if (fId && - faceIdSet.find( fId ) == faceIdSet.end() && - aMesh->MeshElements( fId )) { - TopoDS_Shape F = aMesh->IndexToShape( fId ); - if ( !F.IsNull() && F.ShapeType() == TopAbs_FACE ) - faceIdSet.insert( fId ); - } - } - faceIdSet.insert( 0 ); // to smooth elements that are not on any TopoDS_Face - - // =============================================== - // smooth elements on each TopoDS_Face separately - // =============================================== - - set< int >::reverse_iterator fId = faceIdSet.rbegin(); // treate 0 fId at the end - for ( ; fId != faceIdSet.rend(); ++fId ) - { - // get face surface and submesh - Handle(Geom_Surface) surface; - SMESHDS_SubMesh* faceSubMesh = 0; - TopoDS_Face face; - double fToler2 = 0, vPeriod = 0., uPeriod = 0., f,l; - double u1 = 0, u2 = 0, v1 = 0, v2 = 0; - bool isUPeriodic = false, isVPeriodic = false; - if ( *fId ) { - face = TopoDS::Face( aMesh->IndexToShape( *fId )); - surface = BRep_Tool::Surface( face ); - faceSubMesh = aMesh->MeshElements( *fId ); - fToler2 = BRep_Tool::Tolerance( face ); - fToler2 *= fToler2 * 10.; - isUPeriodic = surface->IsUPeriodic(); - if ( isUPeriodic ) - vPeriod = surface->UPeriod(); - isVPeriodic = surface->IsVPeriodic(); - if ( isVPeriodic ) - uPeriod = surface->VPeriod(); - surface->Bounds( u1, u2, v1, v2 ); - } - // --------------------------------------------------------- - // for elements on a face, find movable and fixed nodes and - // compute UV for them - // --------------------------------------------------------- - bool checkBoundaryNodes = false; - set setMovableNodes; - map< const SMDS_MeshNode*, gp_XY* > uvMap, uvMap2; - list< gp_XY > listUV; // uvs the 2 uvMaps refer to - list< const SMDS_MeshElement* > elemsOnFace; - - Extrema_GenExtPS projector; - GeomAdaptor_Surface surfAdaptor; - if ( !surface.IsNull() ) { - surfAdaptor.Load( surface ); - projector.Initialize( surfAdaptor, 20,20, 1e-5,1e-5 ); - } - int nbElemOnFace = 0; - itElem = theElems.begin(); - // loop on not yet smoothed elements: look for elems on a face - while ( itElem != theElems.end() ) - { - if ( faceSubMesh && nbElemOnFace == faceSubMesh->NbElements() ) - break; // all elements found - - const SMDS_MeshElement* elem = (*itElem); - if ( !elem || elem->GetType() != SMDSAbs_Face || elem->NbNodes() < 3 || - ( faceSubMesh && !faceSubMesh->Contains( elem ))) { - ++itElem; - continue; - } - elemsOnFace.push_back( elem ); - theElems.erase( itElem++ ); - nbElemOnFace++; - - // get movable nodes of elem - const SMDS_MeshNode* node; - SMDS_TypeOfPosition posType; - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - while ( itN->more() ) { - node = static_cast( itN->next() ); - const SMDS_PositionPtr& pos = node->GetPosition(); - posType = pos.get() ? pos->GetTypeOfPosition() : SMDS_TOP_3DSPACE; - if (posType != SMDS_TOP_EDGE && - posType != SMDS_TOP_VERTEX && - theFixedNodes.find( node ) == theFixedNodes.end()) - { - // check if all faces around the node are on faceSubMesh - // because a node on edge may be bound to face - SMDS_ElemIteratorPtr eIt = node->GetInverseElementIterator(); - bool all = true; - if ( faceSubMesh ) { - while ( eIt->more() && all ) { - const SMDS_MeshElement* e = eIt->next(); - if ( e->GetType() == SMDSAbs_Face ) - all = faceSubMesh->Contains( e ); - } - } - if ( all ) - setMovableNodes.insert( node ); - else - checkBoundaryNodes = true; - } - if ( posType == SMDS_TOP_3DSPACE ) - checkBoundaryNodes = true; - } - - if ( surface.IsNull() ) - continue; - - // get nodes to check UV - list< const SMDS_MeshNode* > uvCheckNodes; - itN = elem->nodesIterator(); - while ( itN->more() ) { - node = static_cast( itN->next() ); - if ( uvMap.find( node ) == uvMap.end() ) - uvCheckNodes.push_back( node ); - // add nodes of elems sharing node -// SMDS_ElemIteratorPtr eIt = node->GetInverseElementIterator(); -// while ( eIt->more() ) { -// const SMDS_MeshElement* e = eIt->next(); -// if ( e != elem && e->GetType() == SMDSAbs_Face ) { -// SMDS_ElemIteratorPtr nIt = e->nodesIterator(); -// while ( nIt->more() ) { -// const SMDS_MeshNode* n = -// static_cast( nIt->next() ); -// if ( uvMap.find( n ) == uvMap.end() ) -// uvCheckNodes.push_back( n ); -// } -// } -// } - } - // check UV on face - list< const SMDS_MeshNode* >::iterator n = uvCheckNodes.begin(); - for ( ; n != uvCheckNodes.end(); ++n ) - { - node = *n; - gp_XY uv( 0, 0 ); - const SMDS_PositionPtr& pos = node->GetPosition(); - posType = pos.get() ? pos->GetTypeOfPosition() : SMDS_TOP_3DSPACE; - // get existing UV - switch ( posType ) { - case SMDS_TOP_FACE: { - SMDS_FacePosition* fPos = ( SMDS_FacePosition* ) pos.get(); - uv.SetCoord( fPos->GetUParameter(), fPos->GetVParameter() ); - break; - } - case SMDS_TOP_EDGE: { - TopoDS_Shape S = aMesh->IndexToShape( pos->GetShapeId() ); - Handle(Geom2d_Curve) pcurve; - if ( !S.IsNull() && S.ShapeType() == TopAbs_EDGE ) - pcurve = BRep_Tool::CurveOnSurface( TopoDS::Edge( S ), face, f,l ); - if ( !pcurve.IsNull() ) { - double u = (( SMDS_EdgePosition* ) pos.get() )->GetUParameter(); - uv = pcurve->Value( u ).XY(); - } - break; - } - case SMDS_TOP_VERTEX: { - TopoDS_Shape S = aMesh->IndexToShape( pos->GetShapeId() ); - if ( !S.IsNull() && S.ShapeType() == TopAbs_VERTEX ) - uv = BRep_Tool::Parameters( TopoDS::Vertex( S ), face ).XY(); - break; - } - default:; - } - // check existing UV - bool project = true; - gp_Pnt pNode ( node->X(), node->Y(), node->Z() ); - double dist1 = DBL_MAX, dist2 = 0; - if ( posType != SMDS_TOP_3DSPACE ) { - dist1 = pNode.SquareDistance( surface->Value( uv.X(), uv.Y() )); - project = dist1 > fToler2; - } - if ( project ) { // compute new UV - gp_XY newUV; - if ( !getClosestUV( projector, pNode, newUV )) { - MESSAGE("Node Projection Failed " << node); - } - else { - if ( isUPeriodic ) - newUV.SetX( ElCLib::InPeriod( newUV.X(), u1, u2 )); - if ( isVPeriodic ) - newUV.SetY( ElCLib::InPeriod( newUV.Y(), v1, v2 )); - // check new UV - if ( posType != SMDS_TOP_3DSPACE ) - dist2 = pNode.SquareDistance( surface->Value( newUV.X(), newUV.Y() )); - if ( dist2 < dist1 ) - uv = newUV; - } - } - // store UV in the map - listUV.push_back( uv ); - uvMap.insert( make_pair( node, &listUV.back() )); - } - } // loop on not yet smoothed elements - - if ( !faceSubMesh || nbElemOnFace != faceSubMesh->NbElements() ) - checkBoundaryNodes = true; - - // fix nodes on mesh boundary - - if ( checkBoundaryNodes ) - { - typedef pair TLink; - map< TLink, int > linkNbMap; // how many times a link encounters in elemsOnFace - map< TLink, int >::iterator link_nb; - // put all elements links to linkNbMap - list< const SMDS_MeshElement* >::iterator elemIt = elemsOnFace.begin(); - for ( ; elemIt != elemsOnFace.end(); ++elemIt ) - { - // put elem nodes in array - vector< const SMDS_MeshNode* > nodes; - nodes.reserve( (*elemIt)->NbNodes() + 1 ); - SMDS_ElemIteratorPtr itN = (*elemIt)->nodesIterator(); - while ( itN->more() ) - nodes.push_back( static_cast( itN->next() )); - nodes.push_back( nodes.front() ); - // loop on elem links: insert them in linkNbMap - for ( int iN = 1; iN < nodes.size(); ++iN ) { - TLink link; - if ( nodes[ iN-1 ]->GetID() < nodes[ iN ]->GetID() ) - link = make_pair( nodes[ iN-1 ], nodes[ iN ] ); - else - link = make_pair( nodes[ iN ], nodes[ iN-1 ] ); - link_nb = linkNbMap.find( link ); - if ( link_nb == linkNbMap.end() ) - linkNbMap.insert( make_pair ( link, 1 )); - else - link_nb->second++; - } - } - // remove nodes that are in links encountered only once from setMovableNodes - for ( link_nb = linkNbMap.begin(); link_nb != linkNbMap.end(); ++link_nb ) { - if ( link_nb->second == 1 ) { - setMovableNodes.erase( link_nb->first.first ); - setMovableNodes.erase( link_nb->first.second ); - } - } - } - - // ----------------------------------------------------- - // for nodes on seam edge, compute one more UV ( uvMap2 ); - // find movable nodes linked to nodes on seam and which - // are to be smoothed using the second UV ( uvMap2 ) - // ----------------------------------------------------- - - set nodesNearSeam; // to smooth using uvMap2 - if ( !surface.IsNull() ) - { - TopExp_Explorer eExp( face, TopAbs_EDGE ); - for ( ; eExp.More(); eExp.Next() ) - { - TopoDS_Edge edge = TopoDS::Edge( eExp.Current() ); - if ( !BRep_Tool::IsClosed( edge, face )) - continue; - SMESHDS_SubMesh* sm = aMesh->MeshElements( edge ); - if ( !sm ) continue; - // find out which parameter varies for a node on seam - double f,l; - gp_Pnt2d uv1, uv2; - Handle(Geom2d_Curve) pcurve = BRep_Tool::CurveOnSurface( edge, face, f, l ); - if ( pcurve.IsNull() ) continue; - uv1 = pcurve->Value( f ); - edge.Reverse(); - pcurve = BRep_Tool::CurveOnSurface( edge, face, f, l ); - if ( pcurve.IsNull() ) continue; - uv2 = pcurve->Value( f ); - int iPar = Abs( uv1.X() - uv2.X() ) > Abs( uv1.Y() - uv2.Y() ) ? 1 : 2; - // assure uv1 < uv2 - if ( uv1.Coord( iPar ) > uv2.Coord( iPar )) { - gp_Pnt2d tmp = uv1; uv1 = uv2; uv2 = tmp; - } - // get nodes on seam and its vertices - list< const SMDS_MeshNode* > seamNodes; - SMDS_NodeIteratorPtr nSeamIt = sm->GetNodes(); - while ( nSeamIt->more() ) - seamNodes.push_back( nSeamIt->next() ); - TopExp_Explorer vExp( edge, TopAbs_VERTEX ); - for ( ; vExp.More(); vExp.Next() ) { - sm = aMesh->MeshElements( vExp.Current() ); - if ( sm ) { - nSeamIt = sm->GetNodes(); - while ( nSeamIt->more() ) - seamNodes.push_back( nSeamIt->next() ); - } - } - // loop on nodes on seam - list< const SMDS_MeshNode* >::iterator noSeIt = seamNodes.begin(); - for ( ; noSeIt != seamNodes.end(); ++noSeIt ) - { - const SMDS_MeshNode* nSeam = *noSeIt; - map< const SMDS_MeshNode*, gp_XY* >::iterator n_uv = uvMap.find( nSeam ); - if ( n_uv == uvMap.end() ) - continue; - // set the first UV - n_uv->second->SetCoord( iPar, uv1.Coord( iPar )); - // set the second UV - listUV.push_back( *n_uv->second ); - listUV.back().SetCoord( iPar, uv2.Coord( iPar )); - if ( uvMap2.empty() ) - uvMap2 = uvMap; // copy the uvMap contents - uvMap2[ nSeam ] = &listUV.back(); - - // collect movable nodes linked to ones on seam in nodesNearSeam - SMDS_ElemIteratorPtr eIt = nSeam->GetInverseElementIterator(); - while ( eIt->more() ) - { - const SMDS_MeshElement* e = eIt->next(); - if ( e->GetType() != SMDSAbs_Face ) - continue; - int nbUseMap1 = 0, nbUseMap2 = 0; - SMDS_ElemIteratorPtr nIt = e->nodesIterator(); - while ( nIt->more() ) - { - const SMDS_MeshNode* n = - static_cast( nIt->next() ); - if (n == nSeam || - setMovableNodes.find( n ) == setMovableNodes.end() ) - continue; - // add only nodes being closer to uv2 than to uv1 - gp_Pnt pMid (0.5 * ( n->X() + nSeam->X() ), - 0.5 * ( n->Y() + nSeam->Y() ), - 0.5 * ( n->Z() + nSeam->Z() )); - gp_XY uv; - getClosestUV( projector, pMid, uv ); - if ( uv.Coord( iPar ) > uvMap[ n ]->Coord( iPar ) ) { - nodesNearSeam.insert( n ); - nbUseMap2++; - } - else - nbUseMap1++; - } - // for centroidalSmooth all element nodes must - // be on one side of a seam - if ( theSmoothMethod == CENTROIDAL && nbUseMap1 && nbUseMap2 ) - { - SMDS_ElemIteratorPtr nIt = e->nodesIterator(); - while ( nIt->more() ) { - const SMDS_MeshNode* n = - static_cast( nIt->next() ); - setMovableNodes.erase( n ); - } - } - } - } // loop on nodes on seam - } // loop on edge of a face - } // if ( !face.IsNull() ) - - if ( setMovableNodes.empty() ) { - MESSAGE( "Face id : " << *fId << " - NO SMOOTHING: no nodes to move!!!"); - continue; // goto next face - } - - // ------------- - // SMOOTHING // - // ------------- - - int it = -1; - double maxRatio = -1., maxDisplacement = -1.; - set::iterator nodeToMove; - for ( it = 0; it < theNbIterations; it++ ) - { - maxDisplacement = 0.; - nodeToMove = setMovableNodes.begin(); - for ( ; nodeToMove != setMovableNodes.end(); nodeToMove++ ) - { - const SMDS_MeshNode* node = (*nodeToMove); - gp_XYZ aPrevPos ( node->X(), node->Y(), node->Z() ); - - // smooth - bool map2 = ( nodesNearSeam.find( node ) != nodesNearSeam.end() ); - if ( theSmoothMethod == LAPLACIAN ) - laplacianSmooth( node, surface, map2 ? uvMap2 : uvMap ); - else - centroidalSmooth( node, surface, map2 ? uvMap2 : uvMap ); - - // node displacement - gp_XYZ aNewPos ( node->X(), node->Y(), node->Z() ); - Standard_Real aDispl = (aPrevPos - aNewPos).SquareModulus(); - if ( aDispl > maxDisplacement ) - maxDisplacement = aDispl; - } - // no node movement => exit - if ( maxDisplacement < 1.e-16 ) { - MESSAGE("-- no node movement --"); - break; - } - - // check elements quality - maxRatio = 0; - list< const SMDS_MeshElement* >::iterator elemIt = elemsOnFace.begin(); - for ( ; elemIt != elemsOnFace.end(); ++elemIt ) - { - const SMDS_MeshElement* elem = (*elemIt); - if ( !elem || elem->GetType() != SMDSAbs_Face ) - continue; - SMESH::Controls::TSequenceOfXYZ aPoints; - if ( aQualityFunc.GetPoints( elem, aPoints )) { - double aValue = aQualityFunc.GetValue( aPoints ); - if ( aValue > maxRatio ) - maxRatio = aValue; - } - } - if ( maxRatio <= theTgtAspectRatio ) { - MESSAGE("-- quality achived --"); - break; - } - if (it+1 == theNbIterations) { - MESSAGE("-- Iteration limit exceeded --"); - } - } // smoothing iterations - - MESSAGE(" Face id: " << *fId << - " Nb iterstions: " << it << - " Displacement: " << maxDisplacement << - " Aspect Ratio " << maxRatio); - - // --------------------------------------- - // new nodes positions are computed, - // record movement in DS and set new UV - // --------------------------------------- - - nodeToMove = setMovableNodes.begin(); - for ( ; nodeToMove != setMovableNodes.end(); nodeToMove++ ) - { - SMDS_MeshNode* node = const_cast< SMDS_MeshNode* > (*nodeToMove); - aMesh->MoveNode( node, node->X(), node->Y(), node->Z() ); - map< const SMDS_MeshNode*, gp_XY* >::iterator node_uv = uvMap.find( node ); - if ( node_uv != uvMap.end() ) { - gp_XY* uv = node_uv->second; - node->SetPosition - ( SMDS_PositionPtr( new SMDS_FacePosition( *fId, uv->X(), uv->Y() ))); - } - } - - } // loop on face ids -} - -//======================================================================= -//function : isReverse -//purpose : Return true if normal of prevNodes is not co-directied with -// gp_Vec(prevNodes[iNotSame],nextNodes[iNotSame]). -// iNotSame is where prevNodes and nextNodes are different -//======================================================================= - -static bool isReverse(const SMDS_MeshNode* prevNodes[], - const SMDS_MeshNode* nextNodes[], - const int nbNodes, - const int iNotSame) -{ - int iBeforeNotSame = ( iNotSame == 0 ? nbNodes - 1 : iNotSame - 1 ); - int iAfterNotSame = ( iNotSame + 1 == nbNodes ? 0 : iNotSame + 1 ); - - const SMDS_MeshNode* nB = prevNodes[ iBeforeNotSame ]; - const SMDS_MeshNode* nA = prevNodes[ iAfterNotSame ]; - const SMDS_MeshNode* nP = prevNodes[ iNotSame ]; - const SMDS_MeshNode* nN = nextNodes[ iNotSame ]; - - gp_Pnt pB ( nB->X(), nB->Y(), nB->Z() ); - gp_Pnt pA ( nA->X(), nA->Y(), nA->Z() ); - gp_Pnt pP ( nP->X(), nP->Y(), nP->Z() ); - gp_Pnt pN ( nN->X(), nN->Y(), nN->Z() ); - - gp_Vec vB ( pP, pB ), vA ( pP, pA ), vN ( pP, pN ); - - return (vA ^ vB) * vN < 0.0; -} - -//======================================================================= -//function : sweepElement -//purpose : -//======================================================================= - -static void sweepElement(SMESHDS_Mesh* aMesh, - const SMDS_MeshElement* elem, - const vector & newNodesItVec, - list& newElems) -{ - // Loop on elem nodes: - // find new nodes and detect same nodes indices - int nbNodes = elem->NbNodes(); - list::const_iterator itNN[ nbNodes ]; - const SMDS_MeshNode* prevNod[ nbNodes ], *nextNod[ nbNodes ]; - int iNode, nbSame = 0, iNotSameNode = 0, iSameNode = 0; - - for ( iNode = 0; iNode < nbNodes; iNode++ ) - { - TNodeOfNodeListMapItr nnIt = newNodesItVec[ iNode ]; - const SMDS_MeshNode* node = nnIt->first; - const list< const SMDS_MeshNode* > & listNewNodes = nnIt->second; - if ( listNewNodes.empty() ) - return; - - itNN[ iNode ] = listNewNodes.begin(); - prevNod[ iNode ] = node; - nextNod[ iNode ] = listNewNodes.front(); - if ( prevNod[ iNode ] != nextNod [ iNode ]) - iNotSameNode = iNode; - else { - iSameNode = iNode; - nbSame++; - } - } - if ( nbSame == nbNodes || nbSame > 2) { - MESSAGE( " Too many same nodes of element " << elem->GetID() ); - return; - } - - int iBeforeSame = 0, iAfterSame = 0, iOpposSame = 0; - if ( nbSame > 0 ) { - iBeforeSame = ( iSameNode == 0 ? nbNodes - 1 : iSameNode - 1 ); - iAfterSame = ( iSameNode + 1 == nbNodes ? 0 : iSameNode + 1 ); - iOpposSame = ( iSameNode - 2 < 0 ? iSameNode + 2 : iSameNode - 2 ); - } - - // check element orientation - int i0 = 0, i2 = 2; - if ( nbNodes > 2 && !isReverse( prevNod, nextNod, nbNodes, iNotSameNode )) { - //MESSAGE("Reversed elem " << elem ); - i0 = 2; - i2 = 0; - if ( nbSame > 0 ) { - int iAB = iAfterSame + iBeforeSame; - iBeforeSame = iAB - iBeforeSame; - iAfterSame = iAB - iAfterSame; - } - } - - // make new elements - int iStep, nbSteps = newNodesItVec[ 0 ]->second.size(); - for (iStep = 0; iStep < nbSteps; iStep++ ) - { - // get next nodes - for ( iNode = 0; iNode < nbNodes; iNode++ ) { - nextNod[ iNode ] = *itNN[ iNode ]; - itNN[ iNode ]++; - } - SMDS_MeshElement* aNewElem = 0; - switch ( nbNodes ) - { - case 0: - return; - case 1: { // NODE - if ( nbSame == 0 ) - aNewElem = aMesh->AddEdge( prevNod[ 0 ], nextNod[ 0 ] ); - break; - } - case 2: { // EDGE - - if ( nbSame == 0 ) - aNewElem = aMesh->AddFace(prevNod[ 0 ], prevNod[ 1 ], - nextNod[ 1 ], nextNod[ 0 ] ); - else - aNewElem = aMesh->AddFace(prevNod[ 0 ], prevNod[ 1 ], - nextNod[ iNotSameNode ] ); - break; - } - case 3: { // TRIANGLE - - if ( nbSame == 0 ) // --- pentahedron - aNewElem = aMesh->AddVolume (prevNod[ i0 ], prevNod[ 1 ], prevNod[ i2 ], - nextNod[ i0 ], nextNod[ 1 ], nextNod[ i2 ] ); - - else if ( nbSame == 1 ) // --- pyramid - aNewElem = aMesh->AddVolume (prevNod[ iBeforeSame ], prevNod[ iAfterSame ], - nextNod[ iAfterSame ], nextNod[ iBeforeSame ], - nextNod[ iSameNode ]); - - else // 2 same nodes: --- tetrahedron - aNewElem = aMesh->AddVolume (prevNod[ i0 ], prevNod[ 1 ], prevNod[ i2 ], - nextNod[ iNotSameNode ]); - break; - } - case 4: { // QUADRANGLE - - if ( nbSame == 0 ) // --- hexahedron - aNewElem = aMesh->AddVolume (prevNod[ i0 ], prevNod[ 1 ], prevNod[ i2 ], prevNod[ 3 ], - nextNod[ i0 ], nextNod[ 1 ], nextNod[ i2 ], nextNod[ 3 ]); - - else if ( nbSame == 1 ) // --- pyramid + pentahedron - { - aNewElem = aMesh->AddVolume (prevNod[ iBeforeSame ], prevNod[ iAfterSame ], - nextNod[ iAfterSame ], nextNod[ iBeforeSame ], - nextNod[ iSameNode ]); - newElems.push_back( aNewElem ); - aNewElem = aMesh->AddVolume (prevNod[ iAfterSame ], prevNod[ iOpposSame ], - prevNod[ iBeforeSame ], nextNod[ iAfterSame ], - nextNod[ iOpposSame ], nextNod[ iBeforeSame ] ); - } - else if ( nbSame == 2 ) // pentahedron - { - if ( prevNod[ iBeforeSame ] == nextNod[ iBeforeSame ] ) - // iBeforeSame is same too - aNewElem = aMesh->AddVolume (prevNod[ iBeforeSame ], prevNod[ iOpposSame ], - nextNod[ iOpposSame ], prevNod[ iSameNode ], - prevNod[ iAfterSame ], nextNod[ iAfterSame ]); - else - // iAfterSame is same too - aNewElem = aMesh->AddVolume (prevNod[ iSameNode ], prevNod[ iBeforeSame ], - nextNod[ iBeforeSame ], prevNod[ iAfterSame ], - prevNod[ iOpposSame ], nextNod[ iOpposSame ]); - } - break; - } - default: { - // realized for extrusion only - vector polyedre_nodes (nbNodes*2 + 4*nbNodes); - vector quantities (nbNodes + 2); - - quantities[0] = nbNodes; // bottom of prism - for (int inode = 0; inode < nbNodes; inode++) { - polyedre_nodes[inode] = prevNod[inode]; - } - - quantities[1] = nbNodes; // top of prism - for (int inode = 0; inode < nbNodes; inode++) { - polyedre_nodes[nbNodes + inode] = nextNod[inode]; - } - - for (int iface = 0; iface < nbNodes; iface++) { - quantities[iface + 2] = 4; - int inextface = (iface == nbNodes - 1) ? 0 : iface + 1; - polyedre_nodes[2*nbNodes + 4*iface + 0] = prevNod[iface]; - polyedre_nodes[2*nbNodes + 4*iface + 1] = prevNod[inextface]; - polyedre_nodes[2*nbNodes + 4*iface + 2] = nextNod[inextface]; - polyedre_nodes[2*nbNodes + 4*iface + 3] = nextNod[iface]; - } - aNewElem = aMesh->AddPolyhedralVolume (polyedre_nodes, quantities); - } - } - if ( aNewElem ) - newElems.push_back( aNewElem ); - - // set new prev nodes - for ( iNode = 0; iNode < nbNodes; iNode++ ) - prevNod[ iNode ] = nextNod[ iNode ]; - - } // for steps -} - -//======================================================================= -//function : makeWalls -//purpose : create 1D and 2D elements around swept elements -//======================================================================= - -static void makeWalls (SMESHDS_Mesh* aMesh, - TNodeOfNodeListMap & mapNewNodes, - TElemOfElemListMap & newElemsMap, - TElemOfVecOfNnlmiMap & elemNewNodesMap, - set& elemSet) -{ - ASSERT( newElemsMap.size() == elemNewNodesMap.size() ); - - // Find nodes belonging to only one initial element - sweep them to get edges. - - TNodeOfNodeListMapItr nList = mapNewNodes.begin(); - for ( ; nList != mapNewNodes.end(); nList++ ) - { - const SMDS_MeshNode* node = - static_cast( nList->first ); - SMDS_ElemIteratorPtr eIt = node->GetInverseElementIterator(); - int nbInitElems = 0; - while ( eIt->more() && nbInitElems < 2 ) - if ( elemSet.find( eIt->next() ) != elemSet.end() ) - nbInitElems++; - if ( nbInitElems < 2 ) { - vector newNodesItVec( 1, nList ); - list newEdges; - sweepElement( aMesh, node, newNodesItVec, newEdges ); - } - } - - // Make a ceiling for each element ie an equal element of last new nodes. - // Find free links of faces - make edges and sweep them into faces. - - TElemOfElemListMap::iterator itElem = newElemsMap.begin(); - TElemOfVecOfNnlmiMap::iterator itElemNodes = elemNewNodesMap.begin(); - for ( ; itElem != newElemsMap.end(); itElem++, itElemNodes++ ) - { - const SMDS_MeshElement* elem = itElem->first; - vector& vecNewNodes = itElemNodes->second; - - if ( elem->GetType() == SMDSAbs_Edge ) - { - // create a ceiling edge - aMesh->AddEdge(vecNewNodes[ 0 ]->second.back(), - vecNewNodes[ 1 ]->second.back() ); - } - if ( elem->GetType() != SMDSAbs_Face ) - continue; - - bool hasFreeLinks = false; - - set avoidSet; - avoidSet.insert( elem ); - - // loop on a face nodes - set aFaceLastNodes; - int iNode, nbNodes = vecNewNodes.size(); - for ( iNode = 0; iNode < nbNodes; iNode++ ) - { - aFaceLastNodes.insert( vecNewNodes[ iNode ]->second.back() ); - // look for free links of a face - int iNext = ( iNode + 1 == nbNodes ) ? 0 : iNode + 1; - const SMDS_MeshNode* n1 = vecNewNodes[ iNode ]->first; - const SMDS_MeshNode* n2 = vecNewNodes[ iNext ]->first; - // check if a link is free - if ( ! SMESH_MeshEditor::FindFaceInSet ( n1, n2, elemSet, avoidSet )) - { - hasFreeLinks = true; - // make an edge and a ceiling for a new edge - if ( !aMesh->FindEdge( n1, n2 )) - aMesh->AddEdge( n1, n2 ); - n1 = vecNewNodes[ iNode ]->second.back(); - n2 = vecNewNodes[ iNext ]->second.back(); - if ( !aMesh->FindEdge( n1, n2 )) - aMesh->AddEdge( n1, n2 ); - } - } - // sweep free links into faces - - 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++ ) - initNodeSet.insert( vecNewNodes[ iNode ]->first ); - - 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; - 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 ( fInd.empty() ) - continue; - - // create faces for all steps - for ( iStep = 0; iStep < nbSteps; iStep++ ) - { - vTool.Set( *v ); - vTool.SetExternalNormal(); - list< int >::iterator ind = fInd.begin(); - for ( ; ind != fInd.end(); ind++ ) - { - const SMDS_MeshNode** nodes = vTool.GetFaceNodes( *ind ); - switch ( vTool.NbFaceNodes( *ind ) ) { - case 3: - aMesh->AddFace( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] ); break; - case 4: - aMesh->AddFace( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ], nodes[ 3 ] ); break; - default: - { - int nbPolygonNodes = vTool.NbFaceNodes( *ind ); - vector polygon_nodes (nbPolygonNodes); - for (int inode = 0; inode < nbPolygonNodes; inode++) { - polygon_nodes[inode] = nodes[inode]; - } - aMesh->AddPolygonalFace(polygon_nodes); - break; - } - } - } - // go to the next volume - iVol = 0; - while ( iVol++ < nbVolumesByStep ) v++; - } - } - } // sweep free links into faces - - // make a ceiling face with a normal external to a volume - - SMDS_VolumeTool lastVol( itElem->second.back() ); - int iF = lastVol.GetFaceIndex( aFaceLastNodes ); - if ( iF >= 0 ) - { - lastVol.SetExternalNormal(); - const SMDS_MeshNode** nodes = lastVol.GetFaceNodes( iF ); - switch ( lastVol.NbFaceNodes( iF ) ) { - case 3: - if (!hasFreeLinks || - !aMesh->FindFace( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ])) - aMesh->AddFace( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] ); - break; - case 4: - if (!hasFreeLinks || - !aMesh->FindFace( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ], nodes[ 3 ])) - aMesh->AddFace( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ], nodes[ 3 ] ); - break; - default: - { - int nbPolygonNodes = lastVol.NbFaceNodes( iF ); - vector polygon_nodes (nbPolygonNodes); - for (int inode = 0; inode < nbPolygonNodes; inode++) { - polygon_nodes[inode] = nodes[inode]; - } - if (!hasFreeLinks || !aMesh->FindFace(polygon_nodes)) - aMesh->AddPolygonalFace(polygon_nodes); - } - break; - } - } - - } // loop on swept elements -} - -//======================================================================= -//function : RotationSweep -//purpose : -//======================================================================= - -void SMESH_MeshEditor::RotationSweep(set & theElems, - const gp_Ax1& theAxis, - const double theAngle, - const int theNbSteps, - const double theTol) -{ - MESSAGE( "RotationSweep()"); - gp_Trsf aTrsf; - aTrsf.SetRotation( theAxis, theAngle ); - - gp_Lin aLine( theAxis ); - double aSqTol = theTol * theTol; - - SMESHDS_Mesh* aMesh = GetMeshDS(); - - TNodeOfNodeListMap mapNewNodes; - TElemOfVecOfNnlmiMap mapElemNewNodes; - TElemOfElemListMap newElemsMap; - - // loop on theElems - set< const SMDS_MeshElement* >::iterator itElem; - for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) - { - const SMDS_MeshElement* elem = (*itElem); - if ( !elem ) - continue; - vector & newNodesItVec = mapElemNewNodes[ elem ]; - newNodesItVec.reserve( elem->NbNodes() ); - - // loop on elem nodes - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - while ( itN->more() ) { - - // check if a node has been already sweeped - const SMDS_MeshNode* node = - static_cast( itN->next() ); - TNodeOfNodeListMapItr nIt = mapNewNodes.find( node ); - if ( nIt == mapNewNodes.end() ) - { - nIt = mapNewNodes.insert( make_pair( node, list() )).first; - list& listNewNodes = nIt->second; - - // make new nodes - gp_XYZ aXYZ( node->X(), node->Y(), node->Z() ); - double coord[3]; - aXYZ.Coord( coord[0], coord[1], coord[2] ); - bool isOnAxis = ( aLine.SquareDistance( aXYZ ) <= aSqTol ); - const SMDS_MeshNode * newNode = node; - for ( int i = 0; i < theNbSteps; i++ ) { - if ( !isOnAxis ) { - aTrsf.Transforms( coord[0], coord[1], coord[2] ); - newNode = aMesh->AddNode( coord[0], coord[1], coord[2] ); - } - listNewNodes.push_back( newNode ); - } - } - newNodesItVec.push_back( nIt ); - } - // make new elements - sweepElement( aMesh, elem, newNodesItVec, newElemsMap[elem] ); - } - - makeWalls( aMesh, mapNewNodes, newElemsMap, mapElemNewNodes, theElems ); - -} -//======================================================================= -//function : ExtrusionSweep -//purpose : -//======================================================================= - -void SMESH_MeshEditor::ExtrusionSweep(set & theElems, - const gp_Vec& theStep, - const int theNbSteps) -{ - gp_Trsf aTrsf; - aTrsf.SetTranslation( theStep ); - - SMESHDS_Mesh* aMesh = GetMeshDS(); - - TNodeOfNodeListMap mapNewNodes; - TElemOfVecOfNnlmiMap mapElemNewNodes; - TElemOfElemListMap newElemsMap; - - // loop on theElems - set< const SMDS_MeshElement* >::iterator itElem; - for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) - { - // check element type - const SMDS_MeshElement* elem = (*itElem); - if ( !elem ) - continue; - - vector & newNodesItVec = mapElemNewNodes[ elem ]; - newNodesItVec.reserve( elem->NbNodes() ); - - // loop on elem nodes - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - while ( itN->more() ) { - - // check if a node has been already sweeped - const SMDS_MeshNode* node = - static_cast( itN->next() ); - TNodeOfNodeListMap::iterator nIt = mapNewNodes.find( node ); - if ( nIt == mapNewNodes.end() ) - { - nIt = mapNewNodes.insert( make_pair( node, list() )).first; - list& listNewNodes = nIt->second; - - // make new nodes - double coord[] = { node->X(), node->Y(), node->Z() }; - for ( int i = 0; i < theNbSteps; i++ ) { - aTrsf.Transforms( coord[0], coord[1], coord[2] ); - const SMDS_MeshNode * newNode = aMesh->AddNode( coord[0], coord[1], coord[2] ); - listNewNodes.push_back( newNode ); - } - } - newNodesItVec.push_back( nIt ); - } - // make new elements - sweepElement( aMesh, elem, newNodesItVec, newElemsMap[elem] ); - } - makeWalls( aMesh, mapNewNodes, newElemsMap, mapElemNewNodes, theElems ); -} - -//======================================================================= -//class : SMESH_MeshEditor_PathPoint -//purpose : auxiliary class -//======================================================================= -class SMESH_MeshEditor_PathPoint { -public: - SMESH_MeshEditor_PathPoint() { - myPnt.SetCoord(99., 99., 99.); - myTgt.SetCoord(1.,0.,0.); - myAngle=0.; - myPrm=0.; - } - void SetPnt(const gp_Pnt& aP3D){ - myPnt=aP3D; - } - void SetTangent(const gp_Dir& aTgt){ - myTgt=aTgt; - } - void SetAngle(const double& aBeta){ - myAngle=aBeta; - } - void SetParameter(const double& aPrm){ - myPrm=aPrm; - } - const gp_Pnt& Pnt()const{ - return myPnt; - } - const gp_Dir& Tangent()const{ - return myTgt; - } - double Angle()const{ - return myAngle; - } - double Parameter()const{ - return myPrm; - } - -protected: - gp_Pnt myPnt; - gp_Dir myTgt; - double myAngle; - double myPrm; -}; - -//======================================================================= -//function : ExtrusionAlongTrack -//purpose : -//======================================================================= -SMESH_MeshEditor::Extrusion_Error - SMESH_MeshEditor::ExtrusionAlongTrack (std::set & theElements, - SMESH_subMesh* theTrack, - const SMDS_MeshNode* theN1, - const bool theHasAngles, - std::list& theAngles, - const bool theHasRefPoint, - const gp_Pnt& theRefPoint) -{ - MESSAGE("SMESH_MeshEditor::ExtrusionAlongTrack") - int j, aNbTP, aNbE, aNb; - double aT1, aT2, aT, aAngle, aX, aY, aZ; - std::list aPrms; - std::list::iterator aItD; - std::set< const SMDS_MeshElement* >::iterator itElem; - - Standard_Real aTx1, aTx2, aL2, aTolVec, aTolVec2; - gp_Pnt aP3D, aV0; - gp_Vec aVec; - gp_XYZ aGC; - Handle(Geom_Curve) aC3D; - TopoDS_Edge aTrackEdge; - TopoDS_Vertex aV1, aV2; - - SMDS_ElemIteratorPtr aItE; - SMDS_NodeIteratorPtr aItN; - SMDSAbs_ElementType aTypeE; - - TNodeOfNodeListMap mapNewNodes; - TElemOfVecOfNnlmiMap mapElemNewNodes; - TElemOfElemListMap newElemsMap; - - aTolVec=1.e-7; - aTolVec2=aTolVec*aTolVec; - - // 1. Check data - aNbE = theElements.size(); - // nothing to do - if ( !aNbE ) - return EXTR_NO_ELEMENTS; - - // 1.1 Track Pattern - ASSERT( theTrack ); - - SMESHDS_SubMesh* pSubMeshDS=theTrack->GetSubMeshDS(); - - aItE = pSubMeshDS->GetElements(); - while ( aItE->more() ) { - const SMDS_MeshElement* pE = aItE->next(); - aTypeE = pE->GetType(); - // Pattern must contain links only - if ( aTypeE != SMDSAbs_Edge ) - return EXTR_PATH_NOT_EDGE; - } - - const TopoDS_Shape& aS = theTrack->GetSubShape(); - // Sub shape for the Pattern must be an Edge - if ( aS.ShapeType() != TopAbs_EDGE ) - return EXTR_BAD_PATH_SHAPE; - - aTrackEdge = TopoDS::Edge( aS ); - // the Edge must not be degenerated - if ( BRep_Tool::Degenerated( aTrackEdge ) ) - return EXTR_BAD_PATH_SHAPE; - - TopExp::Vertices( aTrackEdge, aV1, aV2 ); - aT1=BRep_Tool::Parameter( aV1, aTrackEdge ); - aT2=BRep_Tool::Parameter( aV2, aTrackEdge ); - - aItN = theTrack->GetFather()->GetSubMesh( aV1 )->GetSubMeshDS()->GetNodes(); - const SMDS_MeshNode* aN1 = aItN->next(); - - aItN = theTrack->GetFather()->GetSubMesh( aV2 )->GetSubMeshDS()->GetNodes(); - const SMDS_MeshNode* aN2 = aItN->next(); - - // starting node must be aN1 or aN2 - if ( !( aN1 == theN1 || aN2 == theN1 ) ) - return EXTR_BAD_STARTING_NODE; - - aNbTP = pSubMeshDS->NbNodes() + 2; - - // 1.2. Angles - vector aAngles( aNbTP ); - - for ( j=0; j < aNbTP; ++j ) { - aAngles[j] = 0.; - } - - if ( theHasAngles ) { - aItD = theAngles.begin(); - for ( j=1; (aItD != theAngles.end()) && (jGetNodes(); - while ( aItN->more() ) { - const SMDS_MeshNode* pNode = aItN->next(); - const SMDS_EdgePosition* pEPos = - static_cast( pNode->GetPosition().get() ); - aT = pEPos->GetUParameter(); - aPrms.push_back( aT ); - } - - // sort parameters - aPrms.sort(); - if ( aN1 == theN1 ) { - if ( aT1 > aT2 ) { - aPrms.reverse(); - } - } - else { - if ( aT2 > aT1 ) { - aPrms.reverse(); - } - } - - // 3. Path Points - SMESH_MeshEditor_PathPoint aPP; - vector aPPs( aNbTP ); - // - aC3D = BRep_Tool::Curve( aTrackEdge, aTx1, aTx2 ); - // - aItD = aPrms.begin(); - for ( j=0; aItD != aPrms.end(); ++aItD, ++j ) { - aT = *aItD; - aC3D->D1( aT, aP3D, aVec ); - aL2 = aVec.SquareMagnitude(); - if ( aL2 < aTolVec2 ) - return EXTR_CANT_GET_TANGENT; - - gp_Dir aTgt( aVec ); - aAngle = aAngles[j]; - - aPP.SetPnt( aP3D ); - aPP.SetTangent( aTgt ); - aPP.SetAngle( aAngle ); - aPP.SetParameter( aT ); - aPPs[j]=aPP; - } - - // 3. Center of rotation aV0 - aV0 = theRefPoint; - if ( !theHasRefPoint ) { - aNb = 0; - aGC.SetCoord( 0.,0.,0. ); - - itElem = theElements.begin(); - for ( ; itElem != theElements.end(); itElem++ ) { - const SMDS_MeshElement* elem = (*itElem); - - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - while ( itN->more() ) { - const SMDS_MeshNode* node = static_cast( itN->next() ); - aX = node->X(); - aY = node->Y(); - aZ = node->Z(); - - if ( mapNewNodes.find( node ) == mapNewNodes.end() ) { - list aLNx; - mapNewNodes[node] = aLNx; - // - gp_XYZ aXYZ( aX, aY, aZ ); - aGC += aXYZ; - ++aNb; - } - } - } - aGC /= aNb; - aV0.SetXYZ( aGC ); - } // if (!theHasRefPoint) { - mapNewNodes.clear(); - - // 4. Processing the elements - SMESHDS_Mesh* aMesh = GetMeshDS(); - - for ( itElem = theElements.begin(); itElem != theElements.end(); itElem++ ) { - // check element type - const SMDS_MeshElement* elem = (*itElem); - aTypeE = elem->GetType(); - if ( !elem || ( aTypeE != SMDSAbs_Face && aTypeE != SMDSAbs_Edge ) ) - continue; - - vector & newNodesItVec = mapElemNewNodes[ elem ]; - newNodesItVec.reserve( elem->NbNodes() ); - - // loop on elem nodes - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - while ( itN->more() ) { - - // check if a node has been already processed - const SMDS_MeshNode* node = - static_cast( itN->next() ); - TNodeOfNodeListMap::iterator nIt = mapNewNodes.find( node ); - if ( nIt == mapNewNodes.end() ) { - nIt = mapNewNodes.insert( make_pair( node, list() )).first; - list& listNewNodes = nIt->second; - - // make new nodes - aX = node->X(); aY = node->Y(); aZ = node->Z(); - - Standard_Real aAngle1x, aAngleT1T0, aTolAng; - gp_Pnt aP0x, aP1x, aPN0, aPN1, aV0x, aV1x; - gp_Ax1 anAx1, anAxT1T0; - gp_Dir aDT1x, aDT0x, aDT1T0; - - aTolAng=1.e-4; - - aV0x = aV0; - aPN0.SetCoord(aX, aY, aZ); - - const SMESH_MeshEditor_PathPoint& aPP0 = aPPs[0]; - aP0x = aPP0.Pnt(); - aDT0x= aPP0.Tangent(); - - for ( j = 1; j < aNbTP; ++j ) { - const SMESH_MeshEditor_PathPoint& aPP1 = aPPs[j]; - aP1x = aPP1.Pnt(); - aDT1x = aPP1.Tangent(); - aAngle1x = aPP1.Angle(); - - gp_Trsf aTrsf, aTrsfRot, aTrsfRotT1T0; - // Translation - gp_Vec aV01x( aP0x, aP1x ); - aTrsf.SetTranslation( aV01x ); - - // traslated point - aV1x = aV0x.Transformed( aTrsf ); - aPN1 = aPN0.Transformed( aTrsf ); - - // rotation 1 [ T1,T0 ] - aAngleT1T0=-aDT1x.Angle( aDT0x ); - if (fabs(aAngleT1T0) > aTolAng) { - aDT1T0=aDT1x^aDT0x; - anAxT1T0.SetLocation( aV1x ); - anAxT1T0.SetDirection( aDT1T0 ); - aTrsfRotT1T0.SetRotation( anAxT1T0, aAngleT1T0 ); - - aPN1 = aPN1.Transformed( aTrsfRotT1T0 ); - } - - // rotation 2 - if ( theHasAngles ) { - anAx1.SetLocation( aV1x ); - anAx1.SetDirection( aDT1x ); - aTrsfRot.SetRotation( anAx1, aAngle1x ); - - aPN1 = aPN1.Transformed( aTrsfRot ); - } - - // make new node - aX = aPN1.X(); - aY = aPN1.Y(); - aZ = aPN1.Z(); - const SMDS_MeshNode* newNode = aMesh->AddNode( aX, aY, aZ ); - listNewNodes.push_back( newNode ); - - aPN0 = aPN1; - aP0x = aP1x; - aV0x = aV1x; - aDT0x = aDT1x; - } - } - newNodesItVec.push_back( nIt ); - } - // make new elements - sweepElement( aMesh, elem, newNodesItVec, newElemsMap[elem] ); - } - - makeWalls( aMesh, mapNewNodes, newElemsMap, mapElemNewNodes, theElements ); - - return EXTR_OK; -} - -//======================================================================= -//function : Transform -//purpose : -//======================================================================= - -void SMESH_MeshEditor::Transform (set & theElems, - const gp_Trsf& theTrsf, - const bool theCopy) -{ - bool needReverse; - switch ( theTrsf.Form() ) { - case gp_PntMirror: - case gp_Ax2Mirror: - needReverse = true; - break; - default: - needReverse = false; - } - - SMESHDS_Mesh* aMesh = GetMeshDS(); - - // map old node to new one - TNodeNodeMap nodeMap; - - // elements sharing moved nodes; those of them which have all - // nodes mirrored but are not in theElems are to be reversed - set inverseElemSet; - - // loop on theElems - set< const SMDS_MeshElement* >::iterator itElem; - for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) - { - const SMDS_MeshElement* elem = (*itElem); - if ( !elem ) - continue; - - // loop on elem nodes - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - 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() ) - continue; - - double coord[3]; - coord[0] = node->X(); - 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] ); - else { - aMesh->MoveNode( node, coord[0], coord[1], coord[2] ); - // node position on shape becomes invalid - const_cast< SMDS_MeshNode* > ( node )->SetPosition - ( SMDS_SpacePosition::originSpacePosition() ); - } - nodeMap.insert( TNodeNodeMap::value_type( node, newNode )); - - // keep inverse elements - if ( !theCopy && needReverse ) { - SMDS_ElemIteratorPtr invElemIt = node->GetInverseElementIterator(); - while ( invElemIt->more() ) - inverseElemSet.insert( invElemIt->next() ); - } - } - } - - // either new elements are to be created - // or a mirrored element are to be reversed - if ( !theCopy && !needReverse) - return; - - if ( !inverseElemSet.empty()) { - set::iterator invElemIt = inverseElemSet.begin(); - for ( ; invElemIt != inverseElemSet.end(); invElemIt++ ) - theElems.insert( *invElemIt ); - } - - // replicate or reverse elements - - enum { - REV_TETRA = 0, // = nbNodes - 4 - REV_PYRAMID = 1, // = nbNodes - 4 - REV_PENTA = 2, // = nbNodes - 4 - REV_FACE = 3, - REV_HEXA = 4, // = nbNodes - 4 - FORWARD = 5 - }; - int index[][8] = { - { 2, 1, 0, 3, 4, 0, 0, 0 }, // REV_TETRA - { 2, 1, 0, 3, 4, 0, 0, 0 }, // REV_PYRAMID - { 2, 1, 0, 5, 4, 3, 0, 0 }, // REV_PENTA - { 2, 1, 0, 3, 0, 0, 0, 0 }, // REV_FACE - { 2, 1, 0, 3, 6, 5, 4, 7 }, // REV_HEXA - { 0, 1, 2, 3, 4, 5, 6, 7 } // FORWARD - }; - - for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) - { - const SMDS_MeshElement* elem = (*itElem); - if ( !elem || elem->GetType() == SMDSAbs_Node ) - continue; - - int nbNodes = elem->NbNodes(); - int elemType = elem->GetType(); - - if (elem->IsPoly()) { - // Polygon or Polyhedral Volume - switch ( elemType ) { - case SMDSAbs_Face: - { - vector poly_nodes (nbNodes); - int iNode = 0; - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - while (itN->more()) { - const SMDS_MeshNode* node = - static_cast(itN->next()); - TNodeNodeMap::iterator nodeMapIt = nodeMap.find(node); - if (nodeMapIt == nodeMap.end()) - break; // not all nodes transformed - if (needReverse) { - // reverse mirrored faces and volumes - poly_nodes[nbNodes - iNode - 1] = (*nodeMapIt).second; - } else { - poly_nodes[iNode] = (*nodeMapIt).second; - } - iNode++; - } - if ( iNode != nbNodes ) - continue; // not all nodes transformed - - if ( theCopy ) { - aMesh->AddPolygonalFace(poly_nodes); - } else { - aMesh->ChangePolygonNodes(elem, poly_nodes); - } - } - break; - case SMDSAbs_Volume: - { - // ATTENTION: Reversing is not yet done!!! - const SMDS_PolyhedralVolumeOfNodes* aPolyedre = - (const SMDS_PolyhedralVolumeOfNodes*) elem; - if (!aPolyedre) { - MESSAGE("Warning: bad volumic element"); - continue; - } - - vector poly_nodes; - vector quantities; - - bool allTransformed = true; - int nbFaces = aPolyedre->NbFaces(); - for (int iface = 1; iface <= nbFaces && allTransformed; iface++) { - int nbFaceNodes = aPolyedre->NbFaceNodes(iface); - for (int inode = 1; inode <= nbFaceNodes && allTransformed; inode++) { - const SMDS_MeshNode* node = aPolyedre->GetFaceNode(iface, inode); - TNodeNodeMap::iterator nodeMapIt = nodeMap.find(node); - if (nodeMapIt == nodeMap.end()) { - allTransformed = false; // not all nodes transformed - } else { - poly_nodes.push_back((*nodeMapIt).second); - } - } - quantities.push_back(nbFaceNodes); - } - if ( !allTransformed ) - continue; // not all nodes transformed - - if ( theCopy ) { - aMesh->AddPolyhedralVolume(poly_nodes, quantities); - } else { - aMesh->ChangePolyhedronNodes(elem, poly_nodes, quantities); - } - } - break; - 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 ]; - - // find transformed nodes - const SMDS_MeshNode* nodes[8]; - int iNode = 0; - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - while ( itN->more() ) - { - const SMDS_MeshNode* node = - static_cast( itN->next() ); - TNodeNodeMap::iterator nodeMapIt = nodeMap.find( node ); - if ( nodeMapIt == nodeMap.end() ) - break; // not all nodes transformed - nodes[ i [ iNode++ ]] = (*nodeMapIt).second; - } - if ( iNode != nbNodes ) - continue; // not all nodes transformed - - if ( theCopy ) - { - // add a new element - switch ( elemType ) { - case SMDSAbs_Edge: - aMesh->AddEdge( nodes[ 0 ], nodes[ 1 ] ); - break; - case SMDSAbs_Face: - if ( nbNodes == 3 ) - aMesh->AddFace( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] ); - else - aMesh->AddFace( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] , nodes[ 3 ]); - break; - case SMDSAbs_Volume: - if ( nbNodes == 4 ) - aMesh->AddVolume( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] , nodes[ 3 ] ); - else if ( nbNodes == 8 ) - aMesh->AddVolume( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] , nodes[ 3 ], - nodes[ 4 ], nodes[ 5 ], nodes[ 6 ] , nodes[ 7 ]); - else if ( nbNodes == 6 ) - aMesh->AddVolume( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] , nodes[ 3 ], - nodes[ 4 ], nodes[ 5 ]); - else if ( nbNodes == 5 ) - aMesh->AddVolume( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] , nodes[ 3 ], - nodes[ 4 ]); - break; - default:; - } - } - else - { - // reverse element as it was reversed by transformation - if ( nbNodes > 2 ) - aMesh->ChangeElementNodes( elem, nodes, nbNodes ); - } - } -} - -//======================================================================= -//function : FindCoincidentNodes -//purpose : Return list of group of nodes close to each other within theTolerance -// Search among theNodes or in the whole mesh if theNodes is empty. -//======================================================================= - -void SMESH_MeshEditor::FindCoincidentNodes (set & theNodes, - const double theTolerance, - TListOfListOfNodes & theGroupsOfNodes) -{ - double tol2 = theTolerance * theTolerance; - - list nodes; - if ( theNodes.empty() ) - { // get all nodes in the mesh - SMDS_NodeIteratorPtr nIt = GetMeshDS()->nodesIterator(); - while ( nIt->more() ) - nodes.push_back( nIt->next() ); - } - else - { - nodes.insert( nodes.end(), theNodes.begin(), theNodes.end() ); - } - - list::iterator it2, it1 = nodes.begin(); - for ( ; it1 != nodes.end(); it1++ ) - { - const SMDS_MeshNode* n1 = *it1; - gp_Pnt p1( n1->X(), n1->Y(), n1->Z() ); - - list * groupPtr = 0; - it2 = it1; - for ( it2++; it2 != nodes.end(); it2++ ) - { - const SMDS_MeshNode* n2 = *it2; - gp_Pnt p2( n2->X(), n2->Y(), n2->Z() ); - if ( p1.SquareDistance( p2 ) <= tol2 ) - { - if ( !groupPtr ) { - theGroupsOfNodes.push_back( list() ); - groupPtr = & theGroupsOfNodes.back(); - groupPtr->push_back( n1 ); - } - groupPtr->push_back( n2 ); - it2 = nodes.erase( it2 ); - it2--; - } - } - } -} - -//======================================================================= -//function : SimplifyFace -//purpose : -//======================================================================= -int SMESH_MeshEditor::SimplifyFace (const vector faceNodes, - vector& poly_nodes, - vector& quantities) const -{ - int nbNodes = faceNodes.size(); - - if (nbNodes < 3) - return 0; - - set nodeSet; - - // get simple seq of nodes - const SMDS_MeshNode* simpleNodes[ nbNodes ]; - int iSimple = 0, nbUnique = 0; - - simpleNodes[iSimple++] = faceNodes[0]; - nbUnique++; - for (int iCur = 1; iCur < nbNodes; iCur++) { - if (faceNodes[iCur] != simpleNodes[iSimple - 1]) { - simpleNodes[iSimple++] = faceNodes[iCur]; - if (nodeSet.insert( faceNodes[iCur] ).second) - nbUnique++; - } - } - int nbSimple = iSimple; - if (simpleNodes[nbSimple - 1] == simpleNodes[0]) { - nbSimple--; - iSimple--; - } - - if (nbUnique < 3) - return 0; - - // separate loops - int nbNew = 0; - bool foundLoop = (nbSimple > nbUnique); - while (foundLoop) { - foundLoop = false; - set loopSet; - for (iSimple = 0; iSimple < nbSimple && !foundLoop; iSimple++) { - const SMDS_MeshNode* n = simpleNodes[iSimple]; - if (!loopSet.insert( n ).second) { - foundLoop = true; - - // separate loop - int iC = 0, curLast = iSimple; - for (; iC < curLast; iC++) { - if (simpleNodes[iC] == n) break; - } - int loopLen = curLast - iC; - if (loopLen > 2) { - // create sub-element - nbNew++; - quantities.push_back(loopLen); - for (; iC < curLast; iC++) { - poly_nodes.push_back(simpleNodes[iC]); - } - } - // shift the rest nodes (place from the first loop position) - for (iC = curLast + 1; iC < nbSimple; iC++) { - simpleNodes[iC - loopLen] = simpleNodes[iC]; - } - nbSimple -= loopLen; - iSimple -= loopLen; - } - } // for (iSimple = 0; iSimple < nbSimple; iSimple++) - } // while (foundLoop) - - if (iSimple > 2) { - nbNew++; - quantities.push_back(iSimple); - for (int i = 0; i < iSimple; i++) - poly_nodes.push_back(simpleNodes[i]); - } - - return nbNew; -} - -//======================================================================= -//function : MergeNodes -//purpose : In each group, the cdr of nodes are substituted by the first one -// in all elements. -//======================================================================= - -void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - TNodeNodeMap nodeNodeMap; // node to replace - new node - set elems; // all elements with changed nodes - list< int > rmElemIds, rmNodeIds; - - // Fill nodeNodeMap and elems - - TListOfListOfNodes::iterator grIt = theGroupsOfNodes.begin(); - for ( ; grIt != theGroupsOfNodes.end(); grIt++ ) - { - list& nodes = *grIt; - list::iterator nIt = nodes.begin(); - const SMDS_MeshNode* nToKeep = *nIt; - for ( ; nIt != nodes.end(); nIt++ ) - { - const SMDS_MeshNode* nToRemove = *nIt; - nodeNodeMap.insert( TNodeNodeMap::value_type( nToRemove, nToKeep )); - if ( nToRemove != nToKeep ) { - rmNodeIds.push_back( nToRemove->GetID() ); - AddToSameGroups( nToKeep, nToRemove, aMesh ); - } - - SMDS_ElemIteratorPtr invElemIt = nToRemove->GetInverseElementIterator(); - while ( invElemIt->more() ) - elems.insert( invElemIt->next() ); - } - } - // Change element nodes or remove an element - - set::iterator eIt = elems.begin(); - for ( ; eIt != elems.end(); eIt++ ) - { - const SMDS_MeshElement* elem = *eIt; - int nbNodes = elem->NbNodes(); - int aShapeId = FindShape( elem ); - - set nodeSet; - const SMDS_MeshNode* curNodes[ nbNodes ], *uniqueNodes[ nbNodes ]; - int iUnique = 0, iCur = 0, nbRepl = 0, iRepl [ nbNodes ]; - - // get new seq of nodes - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - while ( itN->more() ) - { - const SMDS_MeshNode* n = - static_cast( itN->next() ); - - TNodeNodeMap::iterator nnIt = nodeNodeMap.find( n ); - if ( nnIt != nodeNodeMap.end() ) { // n sticks - n = (*nnIt).second; - iRepl[ nbRepl++ ] = iCur; - } - curNodes[ iCur ] = n; - bool isUnique = nodeSet.insert( n ).second; - if ( isUnique ) - uniqueNodes[ iUnique++ ] = n; - iCur++; - } - - // Analyse element topology after replacement - - bool isOk = true; - int nbUniqueNodes = nodeSet.size(); - if ( nbNodes != nbUniqueNodes ) // some nodes stick - { - // Polygons and Polyhedral volumes - if (elem->IsPoly()) { - - if (elem->GetType() == SMDSAbs_Face) { - // Polygon - vector face_nodes (nbNodes); - int inode = 0; - for (; inode < nbNodes; inode++) { - face_nodes[inode] = curNodes[inode]; - } - - vector polygons_nodes; - vector quantities; - int nbNew = SimplifyFace(face_nodes, polygons_nodes, quantities); - - if (nbNew > 0) { - inode = 0; - for (int iface = 0; iface < nbNew - 1; iface++) { - int nbNodes = quantities[iface]; - vector poly_nodes (nbNodes); - for (int ii = 0; ii < nbNodes; ii++, inode++) { - poly_nodes[ii] = polygons_nodes[inode]; - } - SMDS_MeshElement* newElem = aMesh->AddPolygonalFace(poly_nodes); - if (aShapeId) - aMesh->SetMeshElementOnShape(newElem, aShapeId); - } - aMesh->ChangeElementNodes(elem, &polygons_nodes[inode], quantities[nbNew - 1]); - } else { - rmElemIds.push_back(elem->GetID()); - } - - } else if (elem->GetType() == SMDSAbs_Volume) { - // Polyhedral volume - if (nbUniqueNodes < 4) { - rmElemIds.push_back(elem->GetID()); - } else { - // each face has to be analized in order to check volume validity - const SMDS_PolyhedralVolumeOfNodes* aPolyedre = - static_cast( elem ); - if (aPolyedre) { - int nbFaces = aPolyedre->NbFaces(); - - vector poly_nodes; - vector quantities; - - for (int iface = 1; iface <= nbFaces; iface++) { - int nbFaceNodes = aPolyedre->NbFaceNodes(iface); - vector faceNodes (nbFaceNodes); - - for (int inode = 1; inode <= nbFaceNodes; inode++) { - const SMDS_MeshNode * faceNode = aPolyedre->GetFaceNode(iface, inode); - TNodeNodeMap::iterator nnIt = nodeNodeMap.find(faceNode); - if (nnIt != nodeNodeMap.end()) { // faceNode sticks - faceNode = (*nnIt).second; - } - faceNodes[inode - 1] = faceNode; - } - - SimplifyFace(faceNodes, poly_nodes, quantities); - } - - if (quantities.size() > 3) { - // to be done: remove coincident faces - } - - if (quantities.size() > 3) - aMesh->ChangePolyhedronNodes(elem, poly_nodes, quantities); - else - rmElemIds.push_back(elem->GetID()); - - } else { - rmElemIds.push_back(elem->GetID()); - } - } - } else { - } - - continue; - } - - // Regular elements - switch ( nbNodes ) { - case 2: ///////////////////////////////////// EDGE - isOk = false; break; - case 3: ///////////////////////////////////// TRIANGLE - isOk = false; break; - case 4: - if ( elem->GetType() == SMDSAbs_Volume ) // TETRAHEDRON - isOk = false; - else { //////////////////////////////////// QUADRANGLE - if ( nbUniqueNodes < 3 ) - isOk = false; - else if ( nbRepl == 2 && iRepl[ 1 ] - iRepl[ 0 ] == 2 ) - isOk = false; // opposite nodes stick - } - break; - case 6: ///////////////////////////////////// PENTAHEDRON - if ( nbUniqueNodes == 4 ) { - // ---------------------------------> tetrahedron - if (nbRepl == 3 && - iRepl[ 0 ] > 2 && iRepl[ 1 ] > 2 && iRepl[ 2 ] > 2 ) { - // all top nodes stick: reverse a bottom - uniqueNodes[ 0 ] = curNodes [ 1 ]; - uniqueNodes[ 1 ] = curNodes [ 0 ]; - } - else if (nbRepl == 3 && - iRepl[ 0 ] < 3 && iRepl[ 1 ] < 3 && iRepl[ 2 ] < 3 ) { - // all bottom nodes stick: set a top before - uniqueNodes[ 3 ] = uniqueNodes [ 0 ]; - uniqueNodes[ 0 ] = curNodes [ 3 ]; - uniqueNodes[ 1 ] = curNodes [ 4 ]; - uniqueNodes[ 2 ] = curNodes [ 5 ]; - } - else if (nbRepl == 4 && - iRepl[ 2 ] - iRepl [ 0 ] == 3 && iRepl[ 3 ] - iRepl [ 1 ] == 3 ) { - // a lateral face turns into a line: reverse a bottom - uniqueNodes[ 0 ] = curNodes [ 1 ]; - uniqueNodes[ 1 ] = curNodes [ 0 ]; - } - else - isOk = false; - } - else if ( nbUniqueNodes == 5 ) { - // PENTAHEDRON --------------------> 2 tetrahedrons - if ( nbRepl == 2 && iRepl[ 1 ] - iRepl [ 0 ] == 3 ) { - // a bottom node sticks with a linked top one - // 1. - SMDS_MeshElement* newElem = - aMesh->AddVolume(curNodes[ 3 ], - curNodes[ 4 ], - curNodes[ 5 ], - curNodes[ iRepl[ 0 ] == 2 ? 1 : 2 ]); - if ( aShapeId ) - aMesh->SetMeshElementOnShape( newElem, aShapeId ); - // 2. : reverse a bottom - uniqueNodes[ 0 ] = curNodes [ 1 ]; - uniqueNodes[ 1 ] = curNodes [ 0 ]; - nbUniqueNodes = 4; - } - else - isOk = false; - } - else - isOk = false; - break; - case 8: { //////////////////////////////////// HEXAHEDRON - isOk = false; - SMDS_VolumeTool hexa (elem); - hexa.SetExternalNormal(); - if ( nbUniqueNodes == 4 && nbRepl == 6 ) { - //////////////////////// ---> tetrahedron - for ( int iFace = 0; iFace < 6; iFace++ ) { - const int *ind = hexa.GetFaceNodesIndices( iFace ); // indices of face nodes - if (curNodes[ind[ 0 ]] == curNodes[ind[ 1 ]] && - curNodes[ind[ 0 ]] == curNodes[ind[ 2 ]] && - curNodes[ind[ 0 ]] == curNodes[ind[ 3 ]] ) { - // one face turns into a point ... - int iOppFace = hexa.GetOppFaceIndex( iFace ); - ind = hexa.GetFaceNodesIndices( iOppFace ); - int nbStick = 0; - iUnique = 2; // reverse a tetrahedron bottom - for ( iCur = 0; iCur < 4 && nbStick < 2; iCur++ ) { - if ( curNodes[ind[ iCur ]] == curNodes[ind[ iCur + 1 ]] ) - nbStick++; - else if ( iUnique >= 0 ) - uniqueNodes[ iUnique-- ] = curNodes[ind[ iCur ]]; - } - if ( nbStick == 1 ) { - // ... and the opposite one - into a triangle. - // set a top node - ind = hexa.GetFaceNodesIndices( iFace ); - uniqueNodes[ 3 ] = curNodes[ind[ 0 ]]; - isOk = true; - } - break; - } - } - } - else if (nbUniqueNodes == 5 && nbRepl == 4 ) { - //////////////////// HEXAHEDRON ---> 2 tetrahedrons - for ( int iFace = 0; iFace < 6; iFace++ ) { - const int *ind = hexa.GetFaceNodesIndices( iFace ); // indices of face nodes - if (curNodes[ind[ 0 ]] == curNodes[ind[ 1 ]] && - curNodes[ind[ 0 ]] == curNodes[ind[ 2 ]] && - curNodes[ind[ 0 ]] == curNodes[ind[ 3 ]] ) { - // one face turns into a point ... - int iOppFace = hexa.GetOppFaceIndex( iFace ); - ind = hexa.GetFaceNodesIndices( iOppFace ); - int nbStick = 0; - iUnique = 2; // reverse a tetrahedron 1 bottom - for ( iCur = 0; iCur < 4 && nbStick == 0; iCur++ ) { - if ( curNodes[ind[ iCur ]] == curNodes[ind[ iCur + 1 ]] ) - nbStick++; - else if ( iUnique >= 0 ) - uniqueNodes[ iUnique-- ] = curNodes[ind[ iCur ]]; - } - if ( nbStick == 0 ) { - // ... and the opposite one is a quadrangle - // set a top node - const int* indTop = hexa.GetFaceNodesIndices( iFace ); - uniqueNodes[ 3 ] = curNodes[indTop[ 0 ]]; - nbUniqueNodes = 4; - // tetrahedron 2 - SMDS_MeshElement* newElem = - aMesh->AddVolume(curNodes[ind[ 0 ]], - curNodes[ind[ 3 ]], - curNodes[ind[ 2 ]], - curNodes[indTop[ 0 ]]); - if ( aShapeId ) - aMesh->SetMeshElementOnShape( newElem, aShapeId ); - isOk = true; - } - break; - } - } - } - else if ( nbUniqueNodes == 6 && nbRepl == 4 ) { - ////////////////// HEXAHEDRON ---> 2 tetrahedrons or 1 prism - // find indices of quad and tri faces - int iQuadFace[ 6 ], iTriFace[ 6 ], nbQuad = 0, nbTri = 0, iFace; - for ( iFace = 0; iFace < 6; iFace++ ) { - const int *ind = hexa.GetFaceNodesIndices( iFace ); // indices of face nodes - nodeSet.clear(); - for ( iCur = 0; iCur < 4; iCur++ ) - nodeSet.insert( curNodes[ind[ iCur ]] ); - nbUniqueNodes = nodeSet.size(); - if ( nbUniqueNodes == 3 ) - iTriFace[ nbTri++ ] = iFace; - else if ( nbUniqueNodes == 4 ) - iQuadFace[ nbQuad++ ] = iFace; - } - if (nbQuad == 2 && nbTri == 4 && - hexa.GetOppFaceIndex( iQuadFace[ 0 ] ) == iQuadFace[ 1 ]) { - // 2 opposite quadrangles stuck with a diagonal; - // sample groups of merged indices: (0-4)(2-6) - // --------------------------------------------> 2 tetrahedrons - const int *ind1 = hexa.GetFaceNodesIndices( iQuadFace[ 0 ]); // indices of quad1 nodes - const int *ind2 = hexa.GetFaceNodesIndices( iQuadFace[ 1 ]); - int i0, i1d, i2, i3d, i0t, i2t; // d-daigonal, t-top - if (curNodes[ind1[ 0 ]] == curNodes[ind2[ 0 ]] && - curNodes[ind1[ 2 ]] == curNodes[ind2[ 2 ]]) { - // stuck with 0-2 diagonal - i0 = ind1[ 3 ]; - i1d = ind1[ 0 ]; - i2 = ind1[ 1 ]; - i3d = ind1[ 2 ]; - i0t = ind2[ 1 ]; - i2t = ind2[ 3 ]; - } - else if (curNodes[ind1[ 1 ]] == curNodes[ind2[ 3 ]] && - curNodes[ind1[ 3 ]] == curNodes[ind2[ 1 ]]) { - // stuck with 1-3 diagonal - i0 = ind1[ 0 ]; - i1d = ind1[ 1 ]; - i2 = ind1[ 2 ]; - i3d = ind1[ 3 ]; - i0t = ind2[ 0 ]; - i2t = ind2[ 1 ]; - } - else { - ASSERT(0); - } - // tetrahedron 1 - uniqueNodes[ 0 ] = curNodes [ i0 ]; - uniqueNodes[ 1 ] = curNodes [ i1d ]; - uniqueNodes[ 2 ] = curNodes [ i3d ]; - uniqueNodes[ 3 ] = curNodes [ i0t ]; - nbUniqueNodes = 4; - // tetrahedron 2 - SMDS_MeshElement* newElem = aMesh->AddVolume(curNodes[ i1d ], - curNodes[ i2 ], - curNodes[ i3d ], - curNodes[ i2t ]); - if ( aShapeId ) - aMesh->SetMeshElementOnShape( newElem, aShapeId ); - isOk = true; - } - else if (( nbTri == 2 && nbQuad == 3 ) || // merged (0-4)(1-5) - ( nbTri == 4 && nbQuad == 2 )) { // merged (7-4)(1-5) - // --------------------------------------------> prism - // find 2 opposite triangles - nbUniqueNodes = 6; - for ( iFace = 0; iFace + 1 < nbTri; iFace++ ) { - if ( hexa.GetOppFaceIndex( iTriFace[ iFace ] ) == iTriFace[ iFace + 1 ]) { - // find indices of kept and replaced nodes - // and fill unique nodes of 2 opposite triangles - const int *ind1 = hexa.GetFaceNodesIndices( iTriFace[ iFace ]); - const int *ind2 = hexa.GetFaceNodesIndices( iTriFace[ iFace + 1 ]); - const SMDS_MeshNode** hexanodes = hexa.GetNodes(); - // fill unique nodes - iUnique = 0; - isOk = true; - for ( iCur = 0; iCur < 4 && isOk; iCur++ ) { - const SMDS_MeshNode* n = curNodes[ind1[ iCur ]]; - const SMDS_MeshNode* nInit = hexanodes[ind1[ iCur ]]; - if ( n == nInit ) { - // iCur of a linked node of the opposite face (make normals co-directed): - int iCurOpp = ( iCur == 1 || iCur == 3 ) ? 4 - iCur : iCur; - // check that correspondent corners of triangles are linked - if ( !hexa.IsLinked( ind1[ iCur ], ind2[ iCurOpp ] )) - isOk = false; - else { - uniqueNodes[ iUnique ] = n; - uniqueNodes[ iUnique + 3 ] = curNodes[ind2[ iCurOpp ]]; - iUnique++; - } - } - } - break; - } - } - } - } // if ( nbUniqueNodes == 6 && nbRepl == 4 ) - break; - } // HEXAHEDRON - - default: - isOk = false; - } // switch ( nbNodes ) - - } // if ( nbNodes != nbUniqueNodes ) // some nodes stick - - if ( isOk ) { - if (elem->IsPoly() && elem->GetType() == SMDSAbs_Volume) { - // Change nodes of polyedre - const SMDS_PolyhedralVolumeOfNodes* aPolyedre = - static_cast( elem ); - if (aPolyedre) { - int nbFaces = aPolyedre->NbFaces(); - - vector poly_nodes; - vector quantities (nbFaces); - - for (int iface = 1; iface <= nbFaces; iface++) { - int inode, nbFaceNodes = aPolyedre->NbFaceNodes(iface); - quantities[iface - 1] = nbFaceNodes; - - for (inode = 1; inode <= nbFaceNodes; inode++) { - const SMDS_MeshNode* curNode = aPolyedre->GetFaceNode(iface, inode); - - TNodeNodeMap::iterator nnIt = nodeNodeMap.find( curNode ); - if (nnIt != nodeNodeMap.end()) { // curNode sticks - curNode = (*nnIt).second; - } - poly_nodes.push_back(curNode); - } - } - aMesh->ChangePolyhedronNodes( elem, poly_nodes, quantities ); - } - } else { - // Change regular element or polygon - aMesh->ChangeElementNodes( elem, uniqueNodes, nbUniqueNodes ); - } - } else { - // Remove invalid regular element or invalid polygon - rmElemIds.push_back( elem->GetID() ); - } - - } // loop on elements - - // Remove equal nodes and bad elements - - Remove( rmNodeIds, true ); - Remove( rmElemIds, false ); - -} - -//======================================================================= -//function : MergeEqualElements -//purpose : Remove all but one of elements built on the same nodes. -//======================================================================= - -void SMESH_MeshEditor::MergeEqualElements() -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - SMDS_EdgeIteratorPtr eIt = aMesh->edgesIterator(); - SMDS_FaceIteratorPtr fIt = aMesh->facesIterator(); - SMDS_VolumeIteratorPtr vIt = aMesh->volumesIterator(); - - list< int > rmElemIds; // IDs of elems to remove - - for ( int iDim = 1; iDim <= 3; iDim++ ) { - - set< set > setOfNodeSet; - - while ( 1 ) { - // get next element - const SMDS_MeshElement* elem = 0; - if ( iDim == 1 ) { - if ( eIt->more() ) elem = eIt->next(); - } else if ( iDim == 2 ) { - if ( fIt->more() ) elem = fIt->next(); - } else { - if ( vIt->more() ) elem = vIt->next(); - } - if ( !elem ) break; - - // get elem nodes - set nodeSet; - SMDS_ElemIteratorPtr nodeIt = elem->nodesIterator(); - while ( nodeIt->more() ) - nodeSet.insert( nodeIt->next() ); - - // check uniqueness - bool isUnique = setOfNodeSet.insert( nodeSet ).second; - if ( !isUnique ) - rmElemIds.push_back( elem->GetID() ); - } - } - - Remove( rmElemIds, false ); -} - -//======================================================================= -//function : FindFaceInSet -//purpose : Return a face having linked nodes n1 and n2 and which is -// - not in avoidSet, -// - in elemSet provided that !elemSet.empty() -//======================================================================= - -const SMDS_MeshElement* - SMESH_MeshEditor::FindFaceInSet(const SMDS_MeshNode* n1, - const SMDS_MeshNode* n2, - const set& elemSet, - const set& avoidSet) - -{ - SMDS_ElemIteratorPtr invElemIt = n1->GetInverseElementIterator(); - while ( invElemIt->more() ) { // loop on inverse elements of n1 - const SMDS_MeshElement* elem = invElemIt->next(); - if (elem->GetType() != SMDSAbs_Face || - avoidSet.find( elem ) != avoidSet.end() ) - continue; - if ( !elemSet.empty() && elemSet.find( elem ) == elemSet.end()) - continue; - // get face nodes and find index of n1 - int i1, nbN = elem->NbNodes(), iNode = 0; - const SMDS_MeshNode* faceNodes[ nbN ], *n; - SMDS_ElemIteratorPtr nIt = elem->nodesIterator(); - while ( nIt->more() ) { - faceNodes[ iNode ] = static_cast( nIt->next() ); - if ( faceNodes[ iNode++ ] == n1 ) - i1 = iNode - 1; - } - // find a n2 linked to n1 - for ( iNode = 0; iNode < 2; iNode++ ) { - if ( iNode ) // node before n1 - n = faceNodes[ i1 == 0 ? nbN - 1 : i1 - 1 ]; - else // node after n1 - n = faceNodes[ i1 + 1 == nbN ? 0 : i1 + 1 ]; - if ( n == n2 ) - return elem; - } - } - return 0; -} - -//======================================================================= -//function : findAdjacentFace -//purpose : -//======================================================================= - -static const SMDS_MeshElement* findAdjacentFace(const SMDS_MeshNode* n1, - const SMDS_MeshNode* n2, - const SMDS_MeshElement* elem) -{ - set elemSet, avoidSet; - if ( elem ) - avoidSet.insert ( elem ); - return SMESH_MeshEditor::FindFaceInSet( n1, n2, elemSet, avoidSet ); -} - -//======================================================================= -//function : findFreeBorder -//purpose : -//======================================================================= - -#define ControlFreeBorder SMESH::Controls::FreeEdges::IsFreeEdge - -static bool findFreeBorder (const SMDS_MeshNode* theFirstNode, - const SMDS_MeshNode* theSecondNode, - const SMDS_MeshNode* theLastNode, - list< const SMDS_MeshNode* > & theNodes, - list< const SMDS_MeshElement* > & theFaces) -{ - if ( !theFirstNode || !theSecondNode ) - return false; - // find border face between theFirstNode and theSecondNode - const SMDS_MeshElement* curElem = findAdjacentFace( theFirstNode, theSecondNode, 0 ); - if ( !curElem ) - return false; - - theFaces.push_back( curElem ); - theNodes.push_back( theFirstNode ); - theNodes.push_back( theSecondNode ); - - const SMDS_MeshNode* nodes [5], *nIgnore = theFirstNode, * nStart = theSecondNode; - set < const SMDS_MeshElement* > foundElems; - bool needTheLast = ( theLastNode != 0 ); - - while ( nStart != theLastNode ) - { - if ( nStart == theFirstNode ) - return !needTheLast; - - // find all free border faces sharing form nStart - - list< const SMDS_MeshElement* > curElemList; - list< const SMDS_MeshNode* > nStartList; - SMDS_ElemIteratorPtr invElemIt = nStart->facesIterator(); - while ( invElemIt->more() ) { - const SMDS_MeshElement* e = invElemIt->next(); - if ( e == curElem || foundElems.insert( e ).second ) - { - // get nodes - SMDS_ElemIteratorPtr nIt = e->nodesIterator(); - int iNode = 0, nbNodes = e->NbNodes(); - while ( nIt->more() ) - nodes[ iNode++ ] = static_cast( nIt->next() ); - nodes[ iNode ] = nodes[ 0 ]; - // check 2 links - for ( iNode = 0; iNode < nbNodes; iNode++ ) - if (((nodes[ iNode ] == nStart && nodes[ iNode + 1] != nIgnore ) || - (nodes[ iNode + 1] == nStart && nodes[ iNode ] != nIgnore )) && - ControlFreeBorder( &nodes[ iNode ], e->GetID() )) - { - nStartList.push_back( nodes[ iNode + ( nodes[ iNode ] == nStart ? 1 : 0 )]); - curElemList.push_back( e ); - } - } - } - // analyse the found - - int nbNewBorders = curElemList.size(); - if ( nbNewBorders == 0 ) { - // no free border furthermore - return !needTheLast; - } - else if ( nbNewBorders == 1 ) { - // one more element found - nIgnore = nStart; - nStart = nStartList.front(); - curElem = curElemList.front(); - theFaces.push_back( curElem ); - theNodes.push_back( nStart ); - } - else { - // several continuations found - list< const SMDS_MeshElement* >::iterator curElemIt; - list< const SMDS_MeshNode* >::iterator nStartIt; - // check if one of them reached the last node - if ( needTheLast ) { - for (curElemIt = curElemList.begin(), nStartIt = nStartList.begin(); - curElemIt!= curElemList.end(); - curElemIt++, nStartIt++ ) - if ( *nStartIt == theLastNode ) { - theFaces.push_back( *curElemIt ); - theNodes.push_back( *nStartIt ); - return true; - } - } - // find the best free border by the continuations - list contNodes[ 2 ], *cNL; - list contFaces[ 2 ], *cFL; - for (curElemIt = curElemList.begin(), nStartIt = nStartList.begin(); - curElemIt!= curElemList.end(); - curElemIt++, nStartIt++ ) - { - cNL = & contNodes[ contNodes[0].empty() ? 0 : 1 ]; - cFL = & contFaces[ contFaces[0].empty() ? 0 : 1 ]; - // find one more free border - if ( ! findFreeBorder( nIgnore, nStart, theLastNode, *cNL, *cFL )) { - cNL->clear(); - cFL->clear(); - } - else if ( !contNodes[0].empty() && !contNodes[1].empty() ) { - // choice: clear a worse one - int iLongest = ( contNodes[0].size() < contNodes[1].size() ? 1 : 0 ); - int iWorse = ( needTheLast ? 1 - iLongest : iLongest ); - contNodes[ iWorse ].clear(); - contFaces[ iWorse ].clear(); - } - } - if ( contNodes[0].empty() && contNodes[1].empty() ) - return false; - - // append the best free border - cNL = & contNodes[ contNodes[0].empty() ? 1 : 0 ]; - cFL = & contFaces[ contFaces[0].empty() ? 1 : 0 ]; - theNodes.pop_back(); // remove nIgnore - theNodes.pop_back(); // remove nStart - theFaces.pop_back(); // remove curElem - list< const SMDS_MeshNode* >::iterator nIt = cNL->begin(); - list< const SMDS_MeshElement* >::iterator fIt = cFL->begin(); - for ( ; nIt != cNL->end(); nIt++ ) theNodes.push_back( *nIt ); - for ( ; fIt != cFL->end(); fIt++ ) theFaces.push_back( *fIt ); - return true; - - } // several continuations found - } // while ( nStart != theLastNode ) - - return true; -} - -//======================================================================= -//function : CheckFreeBorderNodes -//purpose : Return true if the tree nodes are on a free border -//======================================================================= - -bool SMESH_MeshEditor::CheckFreeBorderNodes(const SMDS_MeshNode* theNode1, - const SMDS_MeshNode* theNode2, - const SMDS_MeshNode* theNode3) -{ - list< const SMDS_MeshNode* > nodes; - list< const SMDS_MeshElement* > faces; - return findFreeBorder( theNode1, theNode2, theNode3, nodes, faces); -} - -//======================================================================= -//function : SewFreeBorder -//purpose : -//======================================================================= - -SMESH_MeshEditor::Sew_Error - SMESH_MeshEditor::SewFreeBorder (const SMDS_MeshNode* theBordFirstNode, - const SMDS_MeshNode* theBordSecondNode, - const SMDS_MeshNode* theBordLastNode, - const SMDS_MeshNode* theSideFirstNode, - const SMDS_MeshNode* theSideSecondNode, - const SMDS_MeshNode* theSideThirdNode, - const bool theSideIsFreeBorder, - const bool toCreatePolygons, - const bool toCreatePolyedrs) -{ - MESSAGE("::SewFreeBorder()"); - Sew_Error aResult = SEW_OK; - - // ==================================== - // find side nodes and elements - // ==================================== - - list< const SMDS_MeshNode* > nSide[ 2 ]; - list< const SMDS_MeshElement* > eSide[ 2 ]; - list< const SMDS_MeshNode* >::iterator nIt[ 2 ]; - list< const SMDS_MeshElement* >::iterator eIt[ 2 ]; - - // Free border 1 - // -------------- - if (!findFreeBorder(theBordFirstNode,theBordSecondNode,theBordLastNode, - nSide[0], eSide[0])) { - MESSAGE(" Free Border 1 not found " ); - aResult = SEW_BORDER1_NOT_FOUND; - } - if (theSideIsFreeBorder) - { - // Free border 2 - // -------------- - if (!findFreeBorder(theSideFirstNode, theSideSecondNode, theSideThirdNode, - nSide[1], eSide[1])) { - MESSAGE(" Free Border 2 not found " ); - aResult = ( aResult != SEW_OK ? SEW_BOTH_BORDERS_NOT_FOUND : SEW_BORDER2_NOT_FOUND ); - } - } - if ( aResult != SEW_OK ) - return aResult; - - if (!theSideIsFreeBorder) - { - // Side 2 - // -------------- - - // ------------------------------------------------------------------------- - // Algo: - // 1. If nodes to merge are not coincident, move nodes of the free border - // from the coord sys defined by the direction from the first to last - // nodes of the border to the correspondent sys of the side 2 - // 2. On the side 2, find the links most co-directed with the correspondent - // links of the free border - // ------------------------------------------------------------------------- - - // 1. Since sewing may brake if there are volumes to split on the side 2, - // we wont move nodes but just compute new coordinates for them - typedef map TNodeXYZMap; - TNodeXYZMap nBordXYZ; - list< const SMDS_MeshNode* >& bordNodes = nSide[ 0 ]; - list< const SMDS_MeshNode* >::iterator nBordIt; - - gp_XYZ Pb1( theBordFirstNode->X(), theBordFirstNode->Y(), theBordFirstNode->Z() ); - gp_XYZ Pb2( theBordLastNode->X(), theBordLastNode->Y(), theBordLastNode->Z() ); - gp_XYZ Ps1( theSideFirstNode->X(), theSideFirstNode->Y(), theSideFirstNode->Z() ); - gp_XYZ Ps2( theSideSecondNode->X(), theSideSecondNode->Y(), theSideSecondNode->Z() ); - double tol2 = 1.e-8; - gp_Vec Vbs1( Pb1 - Ps1 ),Vbs2( Pb2 - Ps2 ); - if ( Vbs1.SquareMagnitude() > tol2 || Vbs2.SquareMagnitude() > tol2 ) - { - // Need node movement. - - // find X and Z axes to create trsf - gp_Vec Zb( Pb1 - Pb2 ), Zs( Ps1 - Ps2 ); - gp_Vec X = Zs ^ Zb; - if ( X.SquareMagnitude() <= gp::Resolution() * gp::Resolution() ) - // Zb || Zs - X = gp_Ax2( gp::Origin(), Zb ).XDirection(); - - // coord systems - gp_Ax3 toBordAx( Pb1, Zb, X ); - gp_Ax3 fromSideAx( Ps1, Zs, X ); - gp_Ax3 toGlobalAx( gp::Origin(), gp::DZ(), gp::DX() ); - // set trsf - gp_Trsf toBordSys, fromSide2Sys; - toBordSys.SetTransformation( toBordAx ); - fromSide2Sys.SetTransformation( fromSideAx, toGlobalAx ); - fromSide2Sys.SetScaleFactor( Zs.Magnitude() / Zb.Magnitude() ); - - // move - for ( nBordIt = bordNodes.begin(); nBordIt != bordNodes.end(); nBordIt++ ) { - const SMDS_MeshNode* n = *nBordIt; - gp_XYZ xyz( n->X(),n->Y(),n->Z() ); - toBordSys.Transforms( xyz ); - fromSide2Sys.Transforms( xyz ); - nBordXYZ.insert( TNodeXYZMap::value_type( n, xyz )); - } - } - else - { - // just insert nodes XYZ in the nBordXYZ map - for ( nBordIt = bordNodes.begin(); nBordIt != bordNodes.end(); nBordIt++ ) { - const SMDS_MeshNode* n = *nBordIt; - nBordXYZ.insert( TNodeXYZMap::value_type( n, gp_XYZ( n->X(),n->Y(),n->Z() ))); - } - } - - // 2. On the side 2, find the links most co-directed with the correspondent - // links of the free border - - list< const SMDS_MeshElement* >& sideElems = eSide[ 1 ]; - list< const SMDS_MeshNode* >& sideNodes = nSide[ 1 ]; - sideNodes.push_back( theSideFirstNode ); - - bool hasVolumes = false; - LinkID_Gen aLinkID_Gen( GetMeshDS() ); - set foundSideLinkIDs, checkedLinkIDs; - SMDS_VolumeTool volume; - //const SMDS_MeshNode* faceNodes[ 4 ]; - - const SMDS_MeshNode* sideNode; - const SMDS_MeshElement* sideElem; - const SMDS_MeshNode* prevSideNode = theSideFirstNode; - const SMDS_MeshNode* prevBordNode = theBordFirstNode; - nBordIt = bordNodes.begin(); - nBordIt++; - // border node position and border link direction to compare with - gp_XYZ bordPos = nBordXYZ[ *nBordIt ]; - gp_XYZ bordDir = bordPos - nBordXYZ[ prevBordNode ]; - // choose next side node by link direction or by closeness to - // the current border node: - bool searchByDir = ( *nBordIt != theBordLastNode ); - do { - // find the next node on the Side 2 - sideNode = 0; - double maxDot = -DBL_MAX, minDist = DBL_MAX; - long linkID; - checkedLinkIDs.clear(); - gp_XYZ prevXYZ( prevSideNode->X(), prevSideNode->Y(), prevSideNode->Z() ); - - SMDS_ElemIteratorPtr invElemIt - = prevSideNode->GetInverseElementIterator(); - while ( invElemIt->more() ) { // loop on inverse elements on the Side 2 - const SMDS_MeshElement* elem = invElemIt->next(); - // prepare data for a loop on links, of a face or a volume - int iPrevNode, iNode = 0, nbNodes = elem->NbNodes(); - const SMDS_MeshNode* faceNodes[ nbNodes ]; - bool isVolume = volume.Set( elem ); - const SMDS_MeshNode** nodes = isVolume ? volume.GetNodes() : faceNodes; - if ( isVolume ) // --volume - hasVolumes = true; - else if ( nbNodes > 2 ) { // --face - // retrieve all face nodes and find iPrevNode - an index of the prevSideNode - SMDS_ElemIteratorPtr nIt = elem->nodesIterator(); - while ( nIt->more() ) { - nodes[ iNode ] = static_cast( nIt->next() ); - if ( nodes[ iNode++ ] == prevSideNode ) - iPrevNode = iNode - 1; - } - // there are 2 links to check - nbNodes = 2; - } - else // --edge - continue; - // loop on links, to be precise, on the second node of links - for ( iNode = 0; iNode < nbNodes; iNode++ ) { - const SMDS_MeshNode* n = nodes[ iNode ]; - if ( isVolume ) { - if ( !volume.IsLinked( n, prevSideNode )) - continue; - } else { - if ( iNode ) // a node before prevSideNode - n = nodes[ iPrevNode == 0 ? elem->NbNodes() - 1 : iPrevNode - 1 ]; - else // a node after prevSideNode - n = nodes[ iPrevNode + 1 == elem->NbNodes() ? 0 : iPrevNode + 1 ]; - } - // check if this link was already used - long iLink = aLinkID_Gen.GetLinkID( prevSideNode, n ); - bool isJustChecked = !checkedLinkIDs.insert( iLink ).second; - if (!isJustChecked && - foundSideLinkIDs.find( iLink ) == foundSideLinkIDs.end() ) { - // test a link geometrically - gp_XYZ nextXYZ ( n->X(), n->Y(), n->Z() ); - bool linkIsBetter = false; - double dot, dist; - if ( searchByDir ) { // choose most co-directed link - dot = bordDir * ( nextXYZ - prevXYZ ).Normalized(); - linkIsBetter = ( dot > maxDot ); - } - else { // choose link with the node closest to bordPos - dist = ( nextXYZ - bordPos ).SquareModulus(); - linkIsBetter = ( dist < minDist ); - } - if ( linkIsBetter ) { - maxDot = dot; - minDist = dist; - linkID = iLink; - sideNode = n; - sideElem = elem; - } - } - } - } // loop on inverse elements of prevSideNode - - if ( !sideNode ) { - MESSAGE(" Cant find path by links of the Side 2 "); - return SEW_BAD_SIDE_NODES; - } - sideNodes.push_back( sideNode ); - sideElems.push_back( sideElem ); - foundSideLinkIDs.insert ( linkID ); - prevSideNode = sideNode; - - if ( *nBordIt == theBordLastNode ) - searchByDir = false; - else { - // find the next border link to compare with - gp_XYZ sidePos( sideNode->X(), sideNode->Y(), sideNode->Z() ); - searchByDir = ( bordDir * ( sidePos - bordPos ) <= 0 ); - while ( *nBordIt != theBordLastNode && !searchByDir ) { - prevBordNode = *nBordIt; - nBordIt++; - bordPos = nBordXYZ[ *nBordIt ]; - bordDir = bordPos - nBordXYZ[ prevBordNode ]; - searchByDir = ( bordDir * ( sidePos - bordPos ) <= 0 ); - } - } - } - while ( sideNode != theSideSecondNode ); - - if ( hasVolumes && sideNodes.size () != bordNodes.size() && !toCreatePolyedrs) { - MESSAGE("VOLUME SPLITTING IS FORBIDDEN"); - return SEW_VOLUMES_TO_SPLIT; // volume splitting is forbidden - } - } // end nodes search on the side 2 - - // ============================ - // sew the border to the side 2 - // ============================ - - int nbNodes[] = { nSide[0].size(), nSide[1].size() }; - int maxNbNodes = Max( nbNodes[0], nbNodes[1] ); - - TListOfListOfNodes nodeGroupsToMerge; - if ( nbNodes[0] == nbNodes[1] || - ( theSideIsFreeBorder && !theSideThirdNode)) { - - // all nodes are to be merged - - for (nIt[0] = nSide[0].begin(), nIt[1] = nSide[1].begin(); - nIt[0] != nSide[0].end() && nIt[1] != nSide[1].end(); - nIt[0]++, nIt[1]++ ) - { - nodeGroupsToMerge.push_back( list() ); - nodeGroupsToMerge.back().push_back( *nIt[1] ); // to keep - nodeGroupsToMerge.back().push_back( *nIt[0] ); // tp remove - } - } - else { - - // insert new nodes into the border and the side to get equal nb of segments - - // get normalized parameters of nodes on the borders - double param[ 2 ][ maxNbNodes ]; - int iNode, iBord; - for ( iBord = 0; iBord < 2; iBord++ ) { // loop on 2 borders - list< const SMDS_MeshNode* >& nodes = nSide[ iBord ]; - list< const SMDS_MeshNode* >::iterator nIt = nodes.begin(); - const SMDS_MeshNode* nPrev = *nIt; - double bordLength = 0; - for ( iNode = 0; nIt != nodes.end(); nIt++, iNode++ ) { // loop on border nodes - const SMDS_MeshNode* nCur = *nIt; - gp_XYZ segment (nCur->X() - nPrev->X(), - nCur->Y() - nPrev->Y(), - nCur->Z() - nPrev->Z()); - double segmentLen = segment.Modulus(); - bordLength += segmentLen; - param[ iBord ][ iNode ] = bordLength; - nPrev = nCur; - } - // normalize within [0,1] - for ( iNode = 0; iNode < nbNodes[ iBord ]; iNode++ ) { - param[ iBord ][ iNode ] /= bordLength; - } - } - - // loop on border segments - const SMDS_MeshNode *nPrev[ 2 ] = { 0, 0 }; - int i[ 2 ] = { 0, 0 }; - nIt[0] = nSide[0].begin(); eIt[0] = eSide[0].begin(); - nIt[1] = nSide[1].begin(); eIt[1] = eSide[1].begin(); - - TElemOfNodeListMap insertMap; - TElemOfNodeListMap::iterator insertMapIt; - // insertMap is - // key: elem to insert nodes into - // value: 2 nodes to insert between + nodes to be inserted - do { - bool next[ 2 ] = { false, false }; - - // find min adjacent segment length after sewing - double nextParam = 10., prevParam = 0; - for ( iBord = 0; iBord < 2; iBord++ ) { // loop on 2 borders - if ( i[ iBord ] + 1 < nbNodes[ iBord ]) - nextParam = Min( nextParam, param[iBord][ i[iBord] + 1 ]); - if ( i[ iBord ] > 0 ) - prevParam = Max( prevParam, param[iBord][ i[iBord] - 1 ]); - } - double minParam = Min( param[ 0 ][ i[0] ], param[ 1 ][ i[1] ]); - double maxParam = Max( param[ 0 ][ i[0] ], param[ 1 ][ i[1] ]); - double minSegLen = Min( nextParam - minParam, maxParam - prevParam ); - - // choose to insert or to merge nodes - double du = param[ 1 ][ i[1] ] - param[ 0 ][ i[0] ]; - if ( Abs( du ) <= minSegLen * 0.2 ) { - // merge - // ------ - nodeGroupsToMerge.push_back( list() ); - const SMDS_MeshNode* n0 = *nIt[0]; - const SMDS_MeshNode* n1 = *nIt[1]; - nodeGroupsToMerge.back().push_back( n1 ); - nodeGroupsToMerge.back().push_back( n0 ); - // position of node of the border changes due to merge - param[ 0 ][ i[0] ] += du; - // move n1 for the sake of elem shape evaluation during insertion. - // n1 will be removed by MergeNodes() anyway - const_cast( n0 )->setXYZ( n1->X(), n1->Y(), n1->Z() ); - next[0] = next[1] = true; - } - else { - // insert - // ------ - int intoBord = ( du < 0 ) ? 0 : 1; - const SMDS_MeshElement* elem = *eIt[ intoBord ]; - const SMDS_MeshNode* n1 = nPrev[ intoBord ]; - const SMDS_MeshNode* n2 = *nIt[ intoBord ]; - const SMDS_MeshNode* nIns = *nIt[ 1 - intoBord ]; - if ( intoBord == 1 ) { - // move node of the border to be on a link of elem of the side - gp_XYZ p1 (n1->X(), n1->Y(), n1->Z()); - gp_XYZ p2 (n2->X(), n2->Y(), n2->Z()); - double ratio = du / ( param[ 1 ][ i[1] ] - param[ 1 ][ i[1]-1 ]); - gp_XYZ p = p2 * ( 1 - ratio ) + p1 * ratio; - GetMeshDS()->MoveNode( nIns, p.X(), p.Y(), p.Z() ); - } - insertMapIt = insertMap.find( elem ); - bool notFound = ( insertMapIt == insertMap.end() ); - bool otherLink = ( !notFound && (*insertMapIt).second.front() != n1 ); - if ( otherLink ) { - // insert into another link of the same element: - // 1. perform insertion into the other link of the elem - list & nodeList = (*insertMapIt).second; - const SMDS_MeshNode* n12 = nodeList.front(); nodeList.pop_front(); - const SMDS_MeshNode* n22 = nodeList.front(); nodeList.pop_front(); - InsertNodesIntoLink( elem, n12, n22, nodeList, toCreatePolygons ); - // 2. perform insertion into the link of adjacent faces - while (true) { - const SMDS_MeshElement* adjElem = findAdjacentFace( n12, n22, elem ); - if ( adjElem ) - InsertNodesIntoLink( adjElem, n12, n22, nodeList, toCreatePolygons ); - else - break; - } - if (toCreatePolyedrs) { - // perform insertion into the links of adjacent volumes - UpdateVolumes(n12, n22, nodeList); - } - // 3. find an element appeared on n1 and n2 after the insertion - insertMap.erase( elem ); - elem = findAdjacentFace( n1, n2, 0 ); - } - if ( notFound || otherLink ) { - // add element and nodes of the side into the insertMap - insertMapIt = insertMap.insert - ( TElemOfNodeListMap::value_type( elem, list() )).first; - (*insertMapIt).second.push_back( n1 ); - (*insertMapIt).second.push_back( n2 ); - } - // add node to be inserted into elem - (*insertMapIt).second.push_back( nIns ); - next[ 1 - intoBord ] = true; - } - - // go to the next segment - for ( iBord = 0; iBord < 2; iBord++ ) { // loop on 2 borders - if ( next[ iBord ] ) { - if ( i[ iBord ] != 0 && eIt[ iBord ] != eSide[ iBord ].end()) - eIt[ iBord ]++; - nPrev[ iBord ] = *nIt[ iBord ]; - nIt[ iBord ]++; i[ iBord ]++; - } - } - } - while ( nIt[0] != nSide[0].end() && nIt[1] != nSide[1].end()); - - // perform insertion of nodes into elements - - for (insertMapIt = insertMap.begin(); - insertMapIt != insertMap.end(); - insertMapIt++ ) - { - const SMDS_MeshElement* elem = (*insertMapIt).first; - list & nodeList = (*insertMapIt).second; - const SMDS_MeshNode* n1 = nodeList.front(); nodeList.pop_front(); - const SMDS_MeshNode* n2 = nodeList.front(); nodeList.pop_front(); - - InsertNodesIntoLink( elem, n1, n2, nodeList, toCreatePolygons ); - - if ( !theSideIsFreeBorder ) { - // look for and insert nodes into the faces adjacent to elem - while (true) { - const SMDS_MeshElement* adjElem = findAdjacentFace( n1, n2, elem ); - if ( adjElem ) - InsertNodesIntoLink( adjElem, n1, n2, nodeList, toCreatePolygons ); - else - break; - } - } - if (toCreatePolyedrs) { - // perform insertion into the links of adjacent volumes - UpdateVolumes(n1, n2, nodeList); - } - } - - } // end: insert new nodes - - MergeNodes ( nodeGroupsToMerge ); - - return aResult; -} - -//======================================================================= -//function : InsertNodesIntoLink -//purpose : insert theNodesToInsert into theFace between theBetweenNode1 -// and theBetweenNode2 and split theElement -//======================================================================= - -void SMESH_MeshEditor::InsertNodesIntoLink(const SMDS_MeshElement* theFace, - const SMDS_MeshNode* theBetweenNode1, - const SMDS_MeshNode* theBetweenNode2, - list& theNodesToInsert, - const bool toCreatePoly) -{ - if ( theFace->GetType() != SMDSAbs_Face ) return; - - // find indices of 2 link nodes and of the rest nodes - int iNode = 0, il1, il2, i3, i4; - il1 = il2 = i3 = i4 = -1; - const SMDS_MeshNode* nodes[ theFace->NbNodes() ]; - SMDS_ElemIteratorPtr nodeIt = theFace->nodesIterator(); - while ( nodeIt->more() ) { - const SMDS_MeshNode* n = static_cast( nodeIt->next() ); - if ( n == theBetweenNode1 ) - il1 = iNode; - else if ( n == theBetweenNode2 ) - il2 = iNode; - else if ( i3 < 0 ) - i3 = iNode; - else - i4 = iNode; - nodes[ iNode++ ] = n; - } - if ( il1 < 0 || il2 < 0 || i3 < 0 ) - return ; - - // arrange link nodes to go one after another regarding the face orientation - bool reverse = ( Abs( il2 - il1 ) == 1 ? il2 < il1 : il1 < il2 ); - list aNodesToInsert = theNodesToInsert; - if ( reverse ) { - iNode = il1; - il1 = il2; - il2 = iNode; - aNodesToInsert.reverse(); - } - // check that not link nodes of a quadrangles are in good order - int nbFaceNodes = theFace->NbNodes(); - if ( nbFaceNodes == 4 && i4 - i3 != 1 ) { - iNode = i3; - i3 = i4; - i4 = iNode; - } - - if (toCreatePoly || theFace->IsPoly()) { - - iNode = 0; - vector poly_nodes (nbFaceNodes + aNodesToInsert.size()); - - // add nodes of face up to first node of link - bool isFLN = false; - nodeIt = theFace->nodesIterator(); - while ( nodeIt->more() && !isFLN ) { - const SMDS_MeshNode* n = static_cast( nodeIt->next() ); - poly_nodes[iNode++] = n; - if (n == nodes[il1]) { - isFLN = true; - } - } - - // add nodes to insert - list::iterator nIt = aNodesToInsert.begin(); - for (; nIt != aNodesToInsert.end(); nIt++) { - poly_nodes[iNode++] = *nIt; - } - - // add nodes of face starting from last node of link - while ( nodeIt->more() ) { - const SMDS_MeshNode* n = static_cast( nodeIt->next() ); - poly_nodes[iNode++] = n; - } - - // edit or replace the face - SMESHDS_Mesh *aMesh = GetMeshDS(); - - if (theFace->IsPoly()) { - aMesh->ChangePolygonNodes(theFace, poly_nodes); - - } else { - int aShapeId = FindShape( theFace ); - - SMDS_MeshElement* newElem = aMesh->AddPolygonalFace(poly_nodes); - if ( aShapeId && newElem ) - aMesh->SetMeshElementOnShape( newElem, aShapeId ); - - aMesh->RemoveElement(theFace); - } - return; - } - - // put aNodesToInsert between theBetweenNode1 and theBetweenNode2 - int nbLinkNodes = 2 + aNodesToInsert.size(); - const SMDS_MeshNode* linkNodes[ nbLinkNodes ]; - linkNodes[ 0 ] = nodes[ il1 ]; - linkNodes[ nbLinkNodes - 1 ] = nodes[ il2 ]; - list::iterator nIt = aNodesToInsert.begin(); - for ( iNode = 1; nIt != aNodesToInsert.end(); nIt++ ) { - linkNodes[ iNode++ ] = *nIt; - } - // decide how to split a quadrangle: compare possible variants - // and choose which of splits to be a quadrangle - int i1, i2, iSplit, nbSplits = nbLinkNodes - 1, iBestQuad; - if ( nbFaceNodes == 3 ) - { - iBestQuad = nbSplits; - i4 = i3; - } - else if ( nbFaceNodes == 4 ) - { - SMESH::Controls::NumericalFunctorPtr aCrit( new SMESH::Controls::AspectRatio); - double aBestRate = DBL_MAX; - for ( int iQuad = 0; iQuad < nbSplits; iQuad++ ) { - i1 = 0; i2 = 1; - double aBadRate = 0; - // evaluate elements quality - for ( iSplit = 0; iSplit < nbSplits; iSplit++ ) { - if ( iSplit == iQuad ) { - SMDS_FaceOfNodes quad (linkNodes[ i1++ ], - linkNodes[ i2++ ], - nodes[ i3 ], - nodes[ i4 ]); - aBadRate += getBadRate( &quad, aCrit ); - } - else { - SMDS_FaceOfNodes tria (linkNodes[ i1++ ], - linkNodes[ i2++ ], - nodes[ iSplit < iQuad ? i4 : i3 ]); - aBadRate += getBadRate( &tria, aCrit ); - } - } - // choice - if ( aBadRate < aBestRate ) { - iBestQuad = iQuad; - aBestRate = aBadRate; - } - } - } - - // create new elements - SMESHDS_Mesh *aMesh = GetMeshDS(); - int aShapeId = FindShape( theFace ); - - i1 = 0; i2 = 1; - for ( iSplit = 0; iSplit < nbSplits - 1; iSplit++ ) { - SMDS_MeshElement* newElem = 0; - if ( iSplit == iBestQuad ) - newElem = aMesh->AddFace (linkNodes[ i1++ ], - linkNodes[ i2++ ], - nodes[ i3 ], - nodes[ i4 ]); - else - newElem = aMesh->AddFace (linkNodes[ i1++ ], - linkNodes[ i2++ ], - nodes[ iSplit < iBestQuad ? i4 : i3 ]); - if ( aShapeId && newElem ) - aMesh->SetMeshElementOnShape( newElem, aShapeId ); - } - - // change nodes of theFace - const SMDS_MeshNode* newNodes[ 4 ]; - newNodes[ 0 ] = linkNodes[ i1 ]; - newNodes[ 1 ] = linkNodes[ i2 ]; - newNodes[ 2 ] = nodes[ iSplit >= iBestQuad ? i3 : i4 ]; - newNodes[ 3 ] = nodes[ i4 ]; - aMesh->ChangeElementNodes( theFace, newNodes, iSplit == iBestQuad ? 4 : 3 ); -} - -//======================================================================= -//function : UpdateVolumes -//purpose : -//======================================================================= -void SMESH_MeshEditor::UpdateVolumes (const SMDS_MeshNode* theBetweenNode1, - const SMDS_MeshNode* theBetweenNode2, - list& theNodesToInsert) -{ - SMDS_ElemIteratorPtr invElemIt = theBetweenNode1->GetInverseElementIterator(); - while (invElemIt->more()) { // loop on inverse elements of theBetweenNode1 - const SMDS_MeshElement* elem = invElemIt->next(); - if (elem->GetType() != SMDSAbs_Volume) - continue; - - // check, if current volume has link theBetweenNode1 - theBetweenNode2 - SMDS_VolumeTool aVolume (elem); - if (!aVolume.IsLinked(theBetweenNode1, theBetweenNode2)) - continue; - - // insert new nodes in all faces of the volume, sharing link theBetweenNode1 - theBetweenNode2 - int iface, nbFaces = aVolume.NbFaces(); - vector poly_nodes; - vector quantities (nbFaces); - - for (iface = 0; iface < nbFaces; iface++) { - int nbFaceNodes = aVolume.NbFaceNodes(iface), nbInserted = 0; - // faceNodes will contain (nbFaceNodes + 1) nodes, last = first - const SMDS_MeshNode** faceNodes = aVolume.GetFaceNodes(iface); - - for (int inode = 0; inode < nbFaceNodes; inode++) { - poly_nodes.push_back(faceNodes[inode]); - - if (nbInserted == 0) { - if (faceNodes[inode] == theBetweenNode1) { - if (faceNodes[inode + 1] == theBetweenNode2) { - nbInserted = theNodesToInsert.size(); - - // add nodes to insert - list::iterator nIt = theNodesToInsert.begin(); - for (; nIt != theNodesToInsert.end(); nIt++) { - poly_nodes.push_back(*nIt); - } - } - } else if (faceNodes[inode] == theBetweenNode2) { - if (faceNodes[inode + 1] == theBetweenNode1) { - nbInserted = theNodesToInsert.size(); - - // add nodes to insert in reversed order - list::iterator nIt = theNodesToInsert.end(); - nIt--; - for (; nIt != theNodesToInsert.begin(); nIt--) { - poly_nodes.push_back(*nIt); - } - poly_nodes.push_back(*nIt); - } - } else { - } - } - } - quantities[iface] = nbFaceNodes + nbInserted; - } - - // Replace or update the volume - SMESHDS_Mesh *aMesh = GetMeshDS(); - - if (elem->IsPoly()) { - aMesh->ChangePolyhedronNodes(elem, poly_nodes, quantities); - - } else { - int aShapeId = FindShape( elem ); - - SMDS_MeshElement* newElem = - aMesh->AddPolyhedralVolume(poly_nodes, quantities); - if (aShapeId && newElem) - aMesh->SetMeshElementOnShape(newElem, aShapeId); - - aMesh->RemoveElement(elem); - } - } -} - -//======================================================================= -//function : SewSideElements -//purpose : -//======================================================================= - -SMESH_MeshEditor::Sew_Error - SMESH_MeshEditor::SewSideElements (set& theSide1, - set& theSide2, - const SMDS_MeshNode* theFirstNode1, - const SMDS_MeshNode* theFirstNode2, - const SMDS_MeshNode* theSecondNode1, - const SMDS_MeshNode* theSecondNode2) -{ - MESSAGE ("::::SewSideElements()"); - if ( theSide1.size() != theSide2.size() ) - return SEW_DIFF_NB_OF_ELEMENTS; - - Sew_Error aResult = SEW_OK; - // Algo: - // 1. Build set of faces representing each side - // 2. Find which nodes of the side 1 to merge with ones on the side 2 - // 3. Replace nodes in elements of the side 1 and remove replaced nodes - - // ======================================================================= - // 1. Build set of faces representing each side: - // ======================================================================= - // a. build set of nodes belonging to faces - // b. complete set of faces: find missing fices whose nodes are in set of nodes - // c. create temporary faces representing side of volumes if correspondent - // face does not exist - - SMESHDS_Mesh* aMesh = GetMeshDS(); - SMDS_Mesh aTmpFacesMesh; - set faceSet1, faceSet2; - set volSet1, volSet2; - set nodeSet1, nodeSet2; - set * faceSetPtr[] = { &faceSet1, &faceSet2 }; - set * volSetPtr[] = { &volSet1, &volSet2 }; - set * nodeSetPtr[] = { &nodeSet1, &nodeSet2 }; - set * elemSetPtr[] = { &theSide1, &theSide2 }; - int iSide, iFace, iNode; - - for ( iSide = 0; iSide < 2; iSide++ ) { - set * nodeSet = nodeSetPtr[ iSide ]; - set * elemSet = elemSetPtr[ iSide ]; - set * faceSet = faceSetPtr[ iSide ]; - set * volSet = volSetPtr [ iSide ]; - set::iterator vIt, eIt; - set::iterator nIt; - - // ----------------------------------------------------------- - // 1a. Collect nodes of existing faces - // and build set of face nodes in order to detect missing - // faces corresponing to sides of volumes - // ----------------------------------------------------------- - - set< set > setOfFaceNodeSet; - - // loop on the given element of a side - for (eIt = elemSet->begin(); eIt != elemSet->end(); eIt++ ) { - const SMDS_MeshElement* elem = *eIt; - if ( elem->GetType() == SMDSAbs_Face ) { - faceSet->insert( elem ); - set faceNodeSet; - SMDS_ElemIteratorPtr nodeIt = elem->nodesIterator(); - while ( nodeIt->more() ) { - const SMDS_MeshNode* n = static_cast( nodeIt->next() ); - nodeSet->insert( n ); - faceNodeSet.insert( n ); - } - setOfFaceNodeSet.insert( faceNodeSet ); - } - else if ( elem->GetType() == SMDSAbs_Volume ) - volSet->insert( elem ); - } - // ------------------------------------------------------------------------------ - // 1b. Complete set of faces: find missing fices whose nodes are in set of nodes - // ------------------------------------------------------------------------------ - - for ( nIt = nodeSet->begin(); nIt != nodeSet->end(); nIt++ ) { // loop on nodes of iSide - SMDS_ElemIteratorPtr fIt = (*nIt)->facesIterator(); - while ( fIt->more() ) { // loop on faces sharing a node - const SMDS_MeshElement* f = fIt->next(); - if ( faceSet->find( f ) == faceSet->end() ) { - // check if all nodes are in nodeSet and - // complete setOfFaceNodeSet if they are - set faceNodeSet; - SMDS_ElemIteratorPtr nodeIt = f->nodesIterator(); - bool allInSet = true; - while ( nodeIt->more() && allInSet ) { // loop on nodes of a face - const SMDS_MeshNode* n = static_cast( nodeIt->next() ); - if ( nodeSet->find( n ) == nodeSet->end() ) - allInSet = false; - else - faceNodeSet.insert( n ); - } - if ( allInSet ) { - faceSet->insert( f ); - setOfFaceNodeSet.insert( faceNodeSet ); - } - } - } - } - - // ------------------------------------------------------------------------- - // 1c. Create temporary faces representing sides of volumes if correspondent - // face does not exist - // ------------------------------------------------------------------------- - - if ( !volSet->empty() ) - { - //int nodeSetSize = nodeSet->size(); - - // loop on given volumes - for ( vIt = volSet->begin(); vIt != volSet->end(); vIt++ ) { - SMDS_VolumeTool vol (*vIt); - // loop on volume faces: find free faces - // -------------------------------------- - list freeFaceList; - for ( iFace = 0; iFace < vol.NbFaces(); iFace++ ) { - if ( !vol.IsFreeFace( iFace )) - continue; - // check if there is already a face with same nodes in a face set - const SMDS_MeshElement* aFreeFace = 0; - const SMDS_MeshNode** fNodes = vol.GetFaceNodes( iFace ); - int nbNodes = vol.NbFaceNodes( iFace ); - set faceNodeSet; - vol.GetFaceNodes( iFace, faceNodeSet ); - bool isNewFace = setOfFaceNodeSet.insert( faceNodeSet ).second; - if ( isNewFace ) { - // no such a face is given but it still can exist, check it - if ( nbNodes == 3 ) { - aFreeFace = aMesh->FindFace( fNodes[0],fNodes[1],fNodes[2] ); - } else if ( nbNodes == 4 ) { - aFreeFace = aMesh->FindFace( fNodes[0],fNodes[1],fNodes[2],fNodes[3] ); - } else { - vector poly_nodes (nbNodes); - for (int inode = 0; inode < nbNodes; inode++) { - poly_nodes[inode] = fNodes[inode]; - } - aFreeFace = aMesh->FindFace(poly_nodes); - } - } - if ( !aFreeFace ) { - // create a temporary face - if ( nbNodes == 3 ) { - aFreeFace = aTmpFacesMesh.AddFace( fNodes[0],fNodes[1],fNodes[2] ); - } else if ( nbNodes == 4 ) { - aFreeFace = aTmpFacesMesh.AddFace( fNodes[0],fNodes[1],fNodes[2],fNodes[3] ); - } else { - vector poly_nodes (nbNodes); - for (int inode = 0; inode < nbNodes; inode++) { - poly_nodes[inode] = fNodes[inode]; - } - aFreeFace = aTmpFacesMesh.AddPolygonalFace(poly_nodes); - } - } - if ( aFreeFace ) - freeFaceList.push_back( aFreeFace ); - - } // loop on faces of a volume - - // choose one of several free faces - // -------------------------------------- - if ( freeFaceList.size() > 1 ) { - // choose a face having max nb of nodes shared by other elems of a side - int maxNbNodes = -1/*, nbExcludedFaces = 0*/; - list::iterator fIt = freeFaceList.begin(); - while ( fIt != freeFaceList.end() ) { // loop on free faces - int nbSharedNodes = 0; - SMDS_ElemIteratorPtr nodeIt = (*fIt)->nodesIterator(); - while ( nodeIt->more() ) { // loop on free face nodes - const SMDS_MeshNode* n = - static_cast( nodeIt->next() ); - SMDS_ElemIteratorPtr invElemIt = n->GetInverseElementIterator(); - while ( invElemIt->more() ) { - const SMDS_MeshElement* e = invElemIt->next(); - if ( faceSet->find( e ) != faceSet->end() ) - nbSharedNodes++; - if ( elemSet->find( e ) != elemSet->end() ) - nbSharedNodes++; - } - } - if ( nbSharedNodes >= maxNbNodes ) { - maxNbNodes = nbSharedNodes; - fIt++; - } - else - freeFaceList.erase( fIt++ ); // here fIt++ occures before erase - } - if ( freeFaceList.size() > 1 ) - { - // could not choose one face, use another way - // choose a face most close to the bary center of the opposite side - gp_XYZ aBC( 0., 0., 0. ); - set addedNodes; - set * elemSet2 = elemSetPtr[ 1 - iSide ]; - eIt = elemSet2->begin(); - for ( eIt = elemSet2->begin(); eIt != elemSet2->end(); eIt++ ) { - SMDS_ElemIteratorPtr nodeIt = (*eIt)->nodesIterator(); - while ( nodeIt->more() ) { // loop on free face nodes - const SMDS_MeshNode* n = - static_cast( nodeIt->next() ); - if ( addedNodes.insert( n ).second ) - aBC += gp_XYZ( n->X(),n->Y(),n->Z() ); - } - } - aBC /= addedNodes.size(); - double minDist = DBL_MAX; - fIt = freeFaceList.begin(); - while ( fIt != freeFaceList.end() ) { // loop on free faces - double dist = 0; - SMDS_ElemIteratorPtr nodeIt = (*fIt)->nodesIterator(); - while ( nodeIt->more() ) { // loop on free face nodes - const SMDS_MeshNode* n = - static_cast( nodeIt->next() ); - gp_XYZ p( n->X(),n->Y(),n->Z() ); - dist += ( aBC - p ).SquareModulus(); - } - if ( dist < minDist ) { - minDist = dist; - freeFaceList.erase( freeFaceList.begin(), fIt++ ); - } - else - fIt = freeFaceList.erase( fIt++ ); - } - } - } // choose one of several free faces of a volume - - if ( freeFaceList.size() == 1 ) { - const SMDS_MeshElement* aFreeFace = freeFaceList.front(); - faceSet->insert( aFreeFace ); - // complete a node set with nodes of a found free face -// for ( iNode = 0; iNode < ; iNode++ ) -// nodeSet->insert( fNodes[ iNode ] ); - } - - } // loop on volumes of a side - -// // complete a set of faces if new nodes in a nodeSet appeared -// // ---------------------------------------------------------- -// if ( nodeSetSize != nodeSet->size() ) { -// for ( ; nIt != nodeSet->end(); nIt++ ) { // loop on nodes of iSide -// SMDS_ElemIteratorPtr fIt = (*nIt)->facesIterator(); -// while ( fIt->more() ) { // loop on faces sharing a node -// const SMDS_MeshElement* f = fIt->next(); -// if ( faceSet->find( f ) == faceSet->end() ) { -// // check if all nodes are in nodeSet and -// // complete setOfFaceNodeSet if they are -// set faceNodeSet; -// SMDS_ElemIteratorPtr nodeIt = f->nodesIterator(); -// bool allInSet = true; -// while ( nodeIt->more() && allInSet ) { // loop on nodes of a face -// const SMDS_MeshNode* n = static_cast( nodeIt->next() ); -// if ( nodeSet->find( n ) == nodeSet->end() ) -// allInSet = false; -// else -// faceNodeSet.insert( n ); -// } -// if ( allInSet ) { -// faceSet->insert( f ); -// setOfFaceNodeSet.insert( faceNodeSet ); -// } -// } -// } -// } -// } - } // Create temporary faces, if there are volumes given - } // loop on sides - - if ( faceSet1.size() != faceSet2.size() ) { - // delete temporary faces: they are in reverseElements of actual nodes - SMDS_FaceIteratorPtr tmpFaceIt = aTmpFacesMesh.facesIterator(); - while ( tmpFaceIt->more() ) - aTmpFacesMesh.RemoveElement( tmpFaceIt->next() ); - MESSAGE("Diff nb of faces"); - return SEW_TOPO_DIFF_SETS_OF_ELEMENTS; - } - - // ============================================================ - // 2. Find nodes to merge: - // bind a node to remove to a node to put instead - // ============================================================ - - TNodeNodeMap nReplaceMap; // bind a node to remove to a node to put instead - if ( theFirstNode1 != theFirstNode2 ) - nReplaceMap.insert( TNodeNodeMap::value_type( theFirstNode1, theFirstNode2 )); - if ( theSecondNode1 != theSecondNode2 ) - nReplaceMap.insert( TNodeNodeMap::value_type( theSecondNode1, theSecondNode2 )); - - LinkID_Gen aLinkID_Gen( GetMeshDS() ); - set< long > linkIdSet; // links to process - linkIdSet.insert( aLinkID_Gen.GetLinkID( theFirstNode1, theSecondNode1 )); - - typedef pair< const SMDS_MeshNode*, const SMDS_MeshNode* > TPairOfNodes; - list< TPairOfNodes > linkList[2]; - linkList[0].push_back( TPairOfNodes( theFirstNode1, theSecondNode1 )); - linkList[1].push_back( TPairOfNodes( theFirstNode2, theSecondNode2 )); - // loop on links in linkList; find faces by links and append links - // of the found faces to linkList - list< TPairOfNodes >::iterator linkIt[] = { linkList[0].begin(), linkList[1].begin() } ; - for ( ; linkIt[0] != linkList[0].end(); linkIt[0]++, linkIt[1]++ ) - { - TPairOfNodes link[] = { *linkIt[0], *linkIt[1] }; - long linkID = aLinkID_Gen.GetLinkID( link[0].first, link[0].second ); - if ( linkIdSet.find( linkID ) == linkIdSet.end() ) - continue; - - // by links, find faces in the face sets, - // and find indices of link nodes in the found faces; - // in a face set, there is only one or no face sharing a link - // --------------------------------------------------------------- - - const SMDS_MeshElement* face[] = { 0, 0 }; - const SMDS_MeshNode* faceNodes[ 2 ][ 5 ]; - const SMDS_MeshNode* notLinkNodes[ 2 ][ 2 ] = {{ 0, 0 },{ 0, 0 }} ; - int iLinkNode[2][2]; - for ( iSide = 0; iSide < 2; iSide++ ) { // loop on 2 sides - const SMDS_MeshNode* n1 = link[iSide].first; - const SMDS_MeshNode* n2 = link[iSide].second; - set * faceSet = faceSetPtr[ iSide ]; - set< const SMDS_MeshElement* > fMap; - for ( int i = 0; i < 2; i++ ) { // loop on 2 nodes of a link - const SMDS_MeshNode* n = i ? n1 : n2; // a node of a link - SMDS_ElemIteratorPtr fIt = n->facesIterator(); - while ( fIt->more() ) { // loop on faces sharing a node - const SMDS_MeshElement* f = fIt->next(); - if (faceSet->find( f ) != faceSet->end() && // f is in face set - ! fMap.insert( f ).second ) // f encounters twice - { - if ( face[ iSide ] ) { - MESSAGE( "2 faces per link " ); - aResult = iSide ? SEW_BAD_SIDE2_NODES : SEW_BAD_SIDE1_NODES; - break; - } - face[ iSide ] = f; - faceSet->erase( f ); - // get face nodes and find ones of a link - iNode = 0; - SMDS_ElemIteratorPtr nIt = f->nodesIterator(); - while ( nIt->more() ) { - const SMDS_MeshNode* n = - static_cast( nIt->next() ); - if ( n == n1 ) - iLinkNode[ iSide ][ 0 ] = iNode; - else if ( n == n2 ) - iLinkNode[ iSide ][ 1 ] = iNode; - else if ( notLinkNodes[ iSide ][ 0 ] ) - notLinkNodes[ iSide ][ 1 ] = n; - else - notLinkNodes[ iSide ][ 0 ] = n; - faceNodes[ iSide ][ iNode++ ] = n; - } - faceNodes[ iSide ][ iNode ] = faceNodes[ iSide ][ 0 ]; - } - } - } - } - // check similarity of elements of the sides - if (aResult == SEW_OK && ( face[0] && !face[1] ) || ( !face[0] && face[1] )) { - MESSAGE("Correspondent face not found on side " << ( face[0] ? 1 : 0 )); - if ( nReplaceMap.size() == 2 ) // faces on input nodes not found - aResult = ( face[0] ? SEW_BAD_SIDE2_NODES : SEW_BAD_SIDE1_NODES ); - else - aResult = SEW_TOPO_DIFF_SETS_OF_ELEMENTS; - break; // do not return because it s necessary to remove tmp faces - } - - // set nodes to merge - // ------------------- - - if ( face[0] && face[1] ) - { - int nbNodes = face[0]->NbNodes(); - if ( nbNodes != face[1]->NbNodes() ) { - MESSAGE("Diff nb of face nodes"); - aResult = SEW_TOPO_DIFF_SETS_OF_ELEMENTS; - break; // do not return because it s necessary to remove tmp faces - } - bool reverse[] = { false, false }; // order of notLinkNodes of quadrangle - if ( nbNodes == 3 ) - nReplaceMap.insert( TNodeNodeMap::value_type - ( notLinkNodes[0][0], notLinkNodes[1][0] )); - else { - for ( iSide = 0; iSide < 2; iSide++ ) { // loop on 2 sides - // analyse link orientation in faces - int i1 = iLinkNode[ iSide ][ 0 ]; - int i2 = iLinkNode[ iSide ][ 1 ]; - reverse[ iSide ] = Abs( i1 - i2 ) == 1 ? i1 > i2 : i2 > i1; - // if notLinkNodes are the first and the last ones, then - // their order does not correspond to the link orientation - if (( i1 == 1 && i2 == 2 ) || - ( i1 == 2 && i2 == 1 )) - reverse[ iSide ] = !reverse[ iSide ]; - } - if ( reverse[0] == reverse[1] ) { - nReplaceMap.insert( TNodeNodeMap::value_type - ( notLinkNodes[0][0], notLinkNodes[1][0] )); - nReplaceMap.insert( TNodeNodeMap::value_type - ( notLinkNodes[0][1], notLinkNodes[1][1] )); - } - else { - nReplaceMap.insert( TNodeNodeMap::value_type - ( notLinkNodes[0][0], notLinkNodes[1][1] )); - nReplaceMap.insert( TNodeNodeMap::value_type - ( notLinkNodes[0][1], notLinkNodes[1][0] )); - } - } - - // add other links of the faces to linkList - // ----------------------------------------- - - const SMDS_MeshNode** nodes = faceNodes[ 0 ]; - for ( iNode = 0; iNode < nbNodes; iNode++ ) - { - linkID = aLinkID_Gen.GetLinkID( nodes[iNode], nodes[iNode+1] ); - pair< set::iterator, bool > iter_isnew = linkIdSet.insert( linkID ); - if ( !iter_isnew.second ) { // already in a set: no need to process - linkIdSet.erase( iter_isnew.first ); - } - else // new in set == encountered for the first time: add - { - const SMDS_MeshNode* n1 = nodes[ iNode ]; - const SMDS_MeshNode* n2 = nodes[ iNode + 1]; - linkList[0].push_back ( TPairOfNodes( n1, n2 )); - linkList[1].push_back ( TPairOfNodes( nReplaceMap[n1], nReplaceMap[n2] )); - } - } - } // 2 faces found - } // loop on link lists - - if ( aResult == SEW_OK && - ( linkIt[0] != linkList[0].end() || - !faceSetPtr[0]->empty() || !faceSetPtr[1]->empty() )) { - MESSAGE( (linkIt[0] != linkList[0].end()) <<" "<< (faceSetPtr[0]->empty()) << - " " << (faceSetPtr[1]->empty())); - aResult = SEW_TOPO_DIFF_SETS_OF_ELEMENTS; - } - - // ==================================================================== - // 3. Replace nodes in elements of the side 1 and remove replaced nodes - // ==================================================================== - - // delete temporary faces: they are in reverseElements of actual nodes - SMDS_FaceIteratorPtr tmpFaceIt = aTmpFacesMesh.facesIterator(); - while ( tmpFaceIt->more() ) - aTmpFacesMesh.RemoveElement( tmpFaceIt->next() ); - - if ( aResult != SEW_OK) - return aResult; - - list< int > nodeIDsToRemove/*, elemIDsToRemove*/; - // loop on nodes replacement map - TNodeNodeMap::iterator nReplaceMapIt = nReplaceMap.begin(), nnIt; - for ( ; nReplaceMapIt != nReplaceMap.end(); nReplaceMapIt++ ) - if ( (*nReplaceMapIt).first != (*nReplaceMapIt).second ) - { - const SMDS_MeshNode* nToRemove = (*nReplaceMapIt).first; - nodeIDsToRemove.push_back( nToRemove->GetID() ); - // loop on elements sharing nToRemove - SMDS_ElemIteratorPtr invElemIt = nToRemove->GetInverseElementIterator(); - while ( invElemIt->more() ) { - const SMDS_MeshElement* e = invElemIt->next(); - // get a new suite of nodes: make replacement - int nbReplaced = 0, i = 0, nbNodes = e->NbNodes(); - const SMDS_MeshNode* nodes[ 8 ]; - SMDS_ElemIteratorPtr nIt = e->nodesIterator(); - while ( nIt->more() ) { - const SMDS_MeshNode* n = - static_cast( nIt->next() ); - nnIt = nReplaceMap.find( n ); - if ( nnIt != nReplaceMap.end() ) { - nbReplaced++; - n = (*nnIt).second; - } - nodes[ i++ ] = n; - } - // if ( nbReplaced == nbNodes && e->GetType() == SMDSAbs_Face ) - // elemIDsToRemove.push_back( e->GetID() ); - // else - if ( nbReplaced ) - aMesh->ChangeElementNodes( e, nodes, nbNodes ); - } - } - - Remove( nodeIDsToRemove, true ); - - return aResult; -} diff --git a/src/SMESH/SMESH_MeshEditor.hxx b/src/SMESH/SMESH_MeshEditor.hxx deleted file mode 100644 index 0dfd8c09d..000000000 --- a/src/SMESH/SMESH_MeshEditor.hxx +++ /dev/null @@ -1,314 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_MeshEditor.hxx -// Created : Mon Apr 12 14:56:19 2004 -// Author : Edward AGAPOV (eap) -// Module : SMESH - - -#ifndef SMESH_MeshEditor_HeaderFile -#define SMESH_MeshEditor_HeaderFile - -#include "SMESH_Mesh.hxx" -#include "SMESH_Controls.hxx" - -#include -#include - -class SMDS_MeshElement; -class SMDS_MeshFace; -class SMDS_MeshNode; -class gp_Ax1; -class gp_Vec; -class gp_Pnt; - -class SMESH_MeshEditor { - public: - - SMESH_MeshEditor( SMESH_Mesh* theMesh ); - - bool Remove (const std::list< int >& theElemIDs, const bool isNodes); - // Remove a node or an element. - // Modify a compute state of sub-meshes which become empty - - bool InverseDiag (const SMDS_MeshElement * theTria1, - const SMDS_MeshElement * theTria2 ); - // Replace two neighbour triangles with ones built on the same 4 nodes - // but having other common link. - // Return False if args are improper - - bool InverseDiag (const SMDS_MeshNode * theNode1, - const SMDS_MeshNode * theNode2 ); - // Replace two neighbour triangles sharing theNode1-theNode2 link - // with ones built on the same 4 nodes but having other common link. - // Return false if proper faces not found - - bool DeleteDiag (const SMDS_MeshNode * theNode1, - const SMDS_MeshNode * theNode2 ); - // Replace two neighbour triangles sharing theNode1-theNode2 link - // with a quadrangle built on the same 4 nodes. - // Return false if proper faces not found - - bool Reorient (const SMDS_MeshElement * theElement); - // Reverse theElement orientation - - - /*! - * \brief Fuse neighbour triangles into quadrangles. - * \param theElems - The triangles to be fused. - * \param theCriterion - Is used to choose a neighbour to fuse with. - * \param theMaxAngle - Is a max angle between element normals at which fusion - * is still performed; theMaxAngle is mesured in radians. - * \retval bool - Success or not. - */ - bool TriToQuad (std::set & theElems, - SMESH::Controls::NumericalFunctorPtr theCriterion, - const double theMaxAngle); - - /*! - * \brief Split quadrangles into triangles. - * \param theElems - The faces to be splitted. - * \param theCriterion - Is used to choose a diagonal for splitting. - * \retval bool - Success or not. - */ - bool QuadToTri (std::set & theElems, - SMESH::Controls::NumericalFunctorPtr theCriterion); - - /*! - * \brief Split quadrangles into triangles. - * \param theElems - The faces to be splitted. - * \param the13Diag - Is used to choose a diagonal for splitting. - * \retval bool - Success or not. - */ - bool QuadToTri (std::set & theElems, - const bool the13Diag); - - /*! - * \brief Find better diagonal for splitting. - * \param theQuad - The face to find better splitting of. - * \param theCriterion - Is used to choose a diagonal for splitting. - * \retval int - 1 for 1-3 diagonal, 2 for 2-4, -1 - for errors. - */ - int BestSplit (const SMDS_MeshElement* theQuad, - SMESH::Controls::NumericalFunctorPtr theCriterion); - - - enum SmoothMethod { LAPLACIAN = 0, CENTROIDAL }; - - void Smooth (std::set & theElements, - std::set & theFixedNodes, - const SmoothMethod theSmoothMethod, - const int theNbIterations, - double theTgtAspectRatio = 1.0, - const bool the2D = true); - // Smooth theElements using theSmoothMethod during theNbIterations - // or until a worst element has aspect ratio <= theTgtAspectRatio. - // Aspect Ratio varies in range [1.0, inf]. - // If theElements is empty, the whole mesh is smoothed. - // theFixedNodes contains additionally fixed nodes. Nodes built - // on edges and boundary nodes are always fixed. - // If the2D, smoothing is performed using UV parameters of nodes - // on geometrical faces - - - void RotationSweep (std::set & theElements, - const gp_Ax1& theAxis, - const double theAngle, - const int theNbSteps, - const double theToler); - // Generate new elements by rotation of theElements around theAxis - // by theAngle by theNbSteps - - void ExtrusionSweep (std::set & theElements, - const gp_Vec& theStep, - const int theNbSteps); - // Generate new elements by extrusion of theElements - // by theStep by theNbSteps - - enum Extrusion_Error { - EXTR_OK, - EXTR_NO_ELEMENTS, - EXTR_PATH_NOT_EDGE, - EXTR_BAD_PATH_SHAPE, - EXTR_BAD_STARTING_NODE, - EXTR_BAD_ANGLES_NUMBER, - EXTR_CANT_GET_TANGENT - }; - - Extrusion_Error ExtrusionAlongTrack (std::set & theElements, - SMESH_subMesh* theTrackPattern, - const SMDS_MeshNode* theNodeStart, - const bool theHasAngles, - std::list& theAngles, - const bool theHasRefPoint, - const gp_Pnt& theRefPoint); - // Generate new elements by extrusion of theElements along path given by theTrackPattern, - // theHasAngles are the rotation angles, base point can be given by theRefPoint - - void Transform (std::set & theElements, - const gp_Trsf& theTrsf, - const bool theCopy); - // Move or copy theElements applying theTrsf to their nodes - - typedef std::list< std::list< const SMDS_MeshNode* > > TListOfListOfNodes; - - void FindCoincidentNodes (std::set & theNodes, - const double theTolerance, - TListOfListOfNodes & theGroupsOfNodes); - // Return list of group of nodes close to each other within theTolerance. - // Search among theNodes or in the whole mesh if theNodes is empty. - - int SimplifyFace (const vector faceNodes, - vector& poly_nodes, - vector& quantities) const; - // Split face, defined by , into several faces by repeating nodes. - // Is used by MergeNodes() - - void MergeNodes (TListOfListOfNodes & theNodeGroups); - // In each group, the cdr of nodes are substituted by the first one - // in all elements. - - void MergeEqualElements(); - // Remove all but one of elements built on the same nodes. - // Return nb of successfully merged groups. - - static bool CheckFreeBorderNodes(const SMDS_MeshNode* theNode1, - const SMDS_MeshNode* theNode2, - const SMDS_MeshNode* theNode3 = 0); - // Return true if the three nodes are on a free border - - enum Sew_Error { - SEW_OK, - // for SewFreeBorder() - SEW_BORDER1_NOT_FOUND, - SEW_BORDER2_NOT_FOUND, - SEW_BOTH_BORDERS_NOT_FOUND, - SEW_BAD_SIDE_NODES, - SEW_VOLUMES_TO_SPLIT, - // for SewSideElements() - SEW_DIFF_NB_OF_ELEMENTS, - SEW_TOPO_DIFF_SETS_OF_ELEMENTS, - SEW_BAD_SIDE1_NODES, - SEW_BAD_SIDE2_NODES - }; - - - Sew_Error SewFreeBorder (const SMDS_MeshNode* theBorderFirstNode, - const SMDS_MeshNode* theBorderSecondNode, - const SMDS_MeshNode* theBorderLastNode, - const SMDS_MeshNode* theSide2FirstNode, - const SMDS_MeshNode* theSide2SecondNode, - const SMDS_MeshNode* theSide2ThirdNode = 0, - const bool theSide2IsFreeBorder = true, - const bool toCreatePolygons = false, - const bool toCreatePolyedrs = false); - // Sew the free border to the side2 by replacing nodes in - // elements on the free border with nodes of the elements - // of the side 2. If nb of links in the free border and - // between theSide2FirstNode and theSide2LastNode are different, - // additional nodes are inserted on a link provided that no - // volume elements share the splitted link. - // The side 2 is a free border if theSide2IsFreeBorder == true. - // Sewing is peformed between the given first, second and last - // nodes on the sides. - // theBorderFirstNode is merged with theSide2FirstNode. - // if (!theSide2IsFreeBorder) then theSide2SecondNode gives - // the last node on the side 2, which will be merged with - // theBorderLastNode. - // if (theSide2IsFreeBorder) then theSide2SecondNode will - // be merged with theBorderSecondNode. - // if (theSide2IsFreeBorder && theSide2ThirdNode == 0) then - // the 2 free borders are sewn link by link and no additional - // nodes are inserted. - // Return false, if sewing failed. - - Sew_Error SewSideElements (std::set& theSide1, - std::set& theSide2, - const SMDS_MeshNode* theFirstNode1ToMerge, - const SMDS_MeshNode* theFirstNode2ToMerge, - const SMDS_MeshNode* theSecondNode1ToMerge, - const SMDS_MeshNode* theSecondNode2ToMerge); - // Sew two sides of a mesh. Nodes belonging to theSide1 are - // merged with nodes of elements of theSide2. - // Number of elements in theSide1 and in theSide2 must be - // equal and they should have similar node connectivity. - // The nodes to merge should belong to side s borders and - // the first node should be linked to the second. - - void InsertNodesIntoLink(const SMDS_MeshElement* theFace, - const SMDS_MeshNode* theBetweenNode1, - const SMDS_MeshNode* theBetweenNode2, - std::list& theNodesToInsert, - const bool toCreatePoly = false); - // insert theNodesToInsert into theFace between theBetweenNode1 and theBetweenNode2. - // If toCreatePoly is true, replace theFace by polygon, else split theFace. - - void UpdateVolumes (const SMDS_MeshNode* theBetweenNode1, - const SMDS_MeshNode* theBetweenNode2, - std::list& theNodesToInsert); - // insert theNodesToInsert into all volumes, containing link - // theBetweenNode1 - theBetweenNode2, between theBetweenNode1 and theBetweenNode2. - -// static int SortQuadNodes (const SMDS_Mesh * theMesh, -// int theNodeIds[] ); -// // Set 4 nodes of a quadrangle face in a good order. -// // Swap 1<->2 or 2<->3 nodes and correspondingly return -// // 1 or 2 else 0. -// -// static bool SortHexaNodes (const SMDS_Mesh * theMesh, -// int theNodeIds[] ); -// // Set 8 nodes of a hexahedron in a good order. -// // Return success status - - static void AddToSameGroups (const SMDS_MeshElement* elemToAdd, - const SMDS_MeshElement* elemInGroups, - SMESHDS_Mesh * aMesh); - // Add elemToAdd to the groups the elemInGroups belongs to - - static const SMDS_MeshElement* - FindFaceInSet(const SMDS_MeshNode* n1, - const SMDS_MeshNode* n2, - const std::set& elemSet, - const std::set& avoidSet); - // Return a face having linked nodes n1 and n2 and which is - // - not in avoidSet, - // - in elemSet provided that !elemSet.empty() - - int FindShape (const SMDS_MeshElement * theElem); - // Return an index of the shape theElem is on - // or zero if a shape not found - - - SMESH_Mesh * GetMesh() { return myMesh; } - - SMESHDS_Mesh * GetMeshDS() { return myMesh->GetMeshDS(); } - - - private: - - SMESH_Mesh * myMesh; - -}; - -#endif diff --git a/src/SMESH/SMESH_Pattern.cxx b/src/SMESH/SMESH_Pattern.cxx deleted file mode 100644 index fb9b5afc1..000000000 --- a/src/SMESH/SMESH_Pattern.cxx +++ /dev/null @@ -1,4344 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -// File : SMESH_Pattern.hxx -// Created : Mon Aug 2 10:30:00 2004 -// Author : Edward AGAPOV (eap) - -#include "SMESH_Pattern.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 "SMDS_EdgePosition.hxx" -#include "SMDS_FacePosition.hxx" -#include "SMDS_MeshElement.hxx" -#include "SMDS_MeshFace.hxx" -#include "SMDS_MeshNode.hxx" -#include "SMDS_VolumeTool.hxx" -#include "SMESHDS_Group.hxx" -#include "SMESHDS_Mesh.hxx" -#include "SMESHDS_SubMesh.hxx" -#include "SMESH_Block.hxx" -#include "SMESH_Mesh.hxx" -#include "SMESH_MeshEditor.hxx" -#include "SMESH_subMesh.hxx" - -#include "utilities.h" - -using namespace std; - -typedef map< const SMDS_MeshElement*, int > TNodePointIDMap; - -//======================================================================= -//function : SMESH_Pattern -//purpose : -//======================================================================= - -SMESH_Pattern::SMESH_Pattern () -{ -} -//======================================================================= -//function : getInt -//purpose : -//======================================================================= - -static inline int getInt( const char * theSring ) -{ - if ( *theSring < '0' || *theSring > '9' ) - return -1; - - char *ptr; - int val = strtol( theSring, &ptr, 10 ); - if ( ptr == theSring || - // there must not be neither '.' nor ',' nor 'E' ... - (*ptr != ' ' && *ptr != '\n' && *ptr != '\0')) - return -1; - - return val; -} - -//======================================================================= -//function : getDouble -//purpose : -//======================================================================= - -static inline double getDouble( const char * theSring ) -{ - char *ptr; - return strtod( theSring, &ptr ); -} - -//======================================================================= -//function : readLine -//purpose : Put token starting positions in theFields until '\n' or '\0' -// Return the number of the found tokens -//======================================================================= - -static int readLine (list & theFields, - const char* & theLineBeg, - const bool theClearFields ) -{ - if ( theClearFields ) - theFields.clear(); - - // algo: - /* loop */ - /* switch ( symbol ) { */ - /* case white-space: */ - /* look for a non-space symbol; */ - /* case string-end: */ - /* case line-end: */ - /* exit; */ - /* case comment beginning: */ - /* skip all till a line-end; */ - /* case a number */ - /* put its position in theFields, skip till a white-space;*/ - /* default: */ - /* abort; */ - /* till line-end */ - - int nbRead = 0; - bool stopReading = false; - do { - bool goOn = true; - bool isNumber = false; - switch ( *theLineBeg ) - { - case ' ': // white space - case '\t': // tab - case 13: // ^M - break; - - case '\n': // a line ends - stopReading = ( nbRead > 0 ); - break; - - case '!': // comment - do theLineBeg++; - while ( *theLineBeg != '\n' && *theLineBeg != '\0' ); - goOn = false; - break; - - case '\0': // file ends - return nbRead; - - case '-': // real number - case '+': - case '.': - isNumber = true; - default: // data - isNumber = isNumber || ( *theLineBeg >= '0' && *theLineBeg <= '9' ); - if ( isNumber ) { - theFields.push_back( theLineBeg ); - nbRead++; - do theLineBeg++; - while (*theLineBeg != ' ' && - *theLineBeg != '\n' && - *theLineBeg != '\0'); - goOn = false; - } - else - return 0; // incorrect file format - } - - if ( goOn ) - theLineBeg++; - - } while ( !stopReading ); - - return nbRead; -} - -//======================================================================= -//function : Load -//purpose : Load a pattern from -//======================================================================= - -bool SMESH_Pattern::Load (const char* theFileContents) -{ - MESSAGE("Load( file ) "); - - // file structure: - - // ! This is a comment - // NB_POINTS ! 1 integer - the number of points in the pattern. - // X1 Y1 [Z1] ! 2 or 3 reals - nodes coordinates within 2D or 3D domain: - // X2 Y2 [Z2] ! the pattern dimention is defined by the number of coordinates - // ... - // [ ID1 ID2 ... IDn ] ! Indices of key-points for a 2D pattern (only). - // ! elements description goes after all - // ID1 ID2 ... IDn ! 2-4 or 4-8 integers - nodal connectivity of a 2D or 3D element. - // ... - - Clear(); - - const char* lineBeg = theFileContents; - list fields; - const bool clearFields = true; - - // NB_POINTS ! 1 integer - the number of points in the pattern. - - if ( readLine( fields, lineBeg, clearFields ) != 1 ) { - MESSAGE("Error reading NB_POINTS"); - return setErrorCode( ERR_READ_NB_POINTS ); - } - int nbPoints = getInt( fields.front() ); - - // X1 Y1 [Z1] ! 2 or 3 reals - nodes coordinates within 2D or 3D domain: - - // read the first point coordinates to define pattern dimention - int dim = readLine( fields, lineBeg, clearFields ); - if ( dim == 2 ) - myIs2D = true; - else if ( dim == 3 ) - myIs2D = false; - else { - MESSAGE("Error reading points: wrong nb of coordinates"); - return setErrorCode( ERR_READ_POINT_COORDS ); - } - if ( nbPoints <= dim ) { - MESSAGE(" Too few points "); - return setErrorCode( ERR_READ_TOO_FEW_POINTS ); - } - - // read the rest points - int iPoint; - for ( iPoint = 1; iPoint < nbPoints; iPoint++ ) - if ( readLine( fields, lineBeg, !clearFields ) != dim ) { - MESSAGE("Error reading points : wrong nb of coordinates "); - return setErrorCode( ERR_READ_POINT_COORDS ); - } - // store point coordinates - myPoints.resize( nbPoints ); - list ::iterator fIt = fields.begin(); - for ( iPoint = 0; iPoint < nbPoints; iPoint++ ) - { - TPoint & p = myPoints[ iPoint ]; - for ( int iCoord = 1; iCoord <= dim; iCoord++, fIt++ ) - { - double coord = getDouble( *fIt ); - if ( !myIs2D && ( coord < 0.0 || coord > 1.0 )) { - MESSAGE("Error reading 3D points, value should be in [0,1]: " << coord); - Clear(); - return setErrorCode( ERR_READ_3D_COORD ); - } - p.myInitXYZ.SetCoord( iCoord, coord ); - if ( myIs2D ) - p.myInitUV.SetCoord( iCoord, coord ); - } - } - - // [ ID1 ID2 ... IDn ] ! Indices of key-points for a 2D pattern (only). - if ( myIs2D ) - { - if ( readLine( fields, lineBeg, clearFields ) == 0 ) { - MESSAGE("Error: missing key-points"); - Clear(); - return setErrorCode( ERR_READ_NO_KEYPOINT ); - } - set idSet; - for ( fIt = fields.begin(); fIt != fields.end(); fIt++ ) - { - int pointIndex = getInt( *fIt ); - if ( pointIndex >= nbPoints || pointIndex < 0 ) { - MESSAGE("Error: invalid point index " << pointIndex ); - Clear(); - return setErrorCode( ERR_READ_BAD_INDEX ); - } - if ( idSet.insert( pointIndex ).second ) // unique? - myKeyPointIDs.push_back( pointIndex ); - } - } - - // ID1 ID2 ... IDn ! 2-4 or 4-8 integers - nodal connectivity of a 2D or 3D element. - - while ( readLine( fields, lineBeg, clearFields )) - { - myElemPointIDs.push_back( TElemDef() ); - TElemDef& elemPoints = myElemPointIDs.back(); - for ( fIt = fields.begin(); fIt != fields.end(); fIt++ ) - { - int pointIndex = getInt( *fIt ); - if ( pointIndex >= nbPoints || pointIndex < 0 ) { - MESSAGE("Error: invalid point index " << pointIndex ); - Clear(); - return setErrorCode( ERR_READ_BAD_INDEX ); - } - elemPoints.push_back( pointIndex ); - } - // check the nb of nodes in element - bool Ok = true; - switch ( elemPoints.size() ) { - case 3: if ( !myIs2D ) Ok = false; break; - case 4: break; - case 5: - case 6: - case 8: if ( myIs2D ) Ok = false; break; - default: Ok = false; - } - if ( !Ok ) { - MESSAGE("Error: wrong nb of nodes in element " << elemPoints.size() ); - Clear(); - return setErrorCode( ERR_READ_ELEM_POINTS ); - } - } - if ( myElemPointIDs.empty() ) { - MESSAGE("Error: no elements"); - Clear(); - return setErrorCode( ERR_READ_NO_ELEMS ); - } - - findBoundaryPoints(); // sort key-points - - return setErrorCode( ERR_OK ); -} - -//======================================================================= -//function : Save -//purpose : Save the loaded pattern into the file -//======================================================================= - -bool SMESH_Pattern::Save (ostream& theFile) -{ - MESSAGE(" ::Save(file) " ); - if ( !IsLoaded() ) { - MESSAGE(" Pattern not loaded "); - return setErrorCode( ERR_SAVE_NOT_LOADED ); - } - - theFile << "!!! SALOME Mesh Pattern file" << endl; - theFile << "!!!" << endl; - theFile << "!!! Nb of points:" << endl; - theFile << myPoints.size() << endl; - - // point coordinates - const int width = 8; -// theFile.width( 8 ); -// theFile.setf(ios::fixed);// use 123.45 floating notation -// theFile.setf(ios::right); -// theFile.flags( theFile.flags() & ~ios::showpoint); // do not show trailing zeros -// theFile.setf(ios::showpoint); // do not show trailing zeros - vector< TPoint >::const_iterator pVecIt = myPoints.begin(); - for ( int i = 0; pVecIt != myPoints.end(); pVecIt++, i++ ) { - const gp_XYZ & xyz = (*pVecIt).myInitXYZ; - theFile << " " << setw( width ) << xyz.X() << " " << setw( width ) << xyz.Y(); - if ( !myIs2D ) theFile << " " << setw( width ) << xyz.Z(); - theFile << " !- " << i << endl; // point id to ease reading by a human being - } - // key-points - if ( myIs2D ) { - theFile << "!!! Indices of " << myKeyPointIDs.size() << " key-points:" << endl; - list< int >::const_iterator kpIt = myKeyPointIDs.begin(); - for ( ; kpIt != myKeyPointIDs.end(); kpIt++ ) - theFile << " " << *kpIt; - if ( !myKeyPointIDs.empty() ) - theFile << endl; - } - // elements - theFile << "!!! Indices of points of " << myElemPointIDs.size() << " elements:" << endl; - list::const_iterator epIt = myElemPointIDs.begin(); - for ( ; epIt != myElemPointIDs.end(); epIt++ ) - { - const TElemDef & elemPoints = *epIt; - TElemDef::const_iterator iIt = elemPoints.begin(); - for ( ; iIt != elemPoints.end(); iIt++ ) - theFile << " " << *iIt; - theFile << endl; - } - - theFile << endl; - - return setErrorCode( ERR_OK ); -} - -//======================================================================= -//function : sortBySize -//purpose : sort theListOfList by size -//======================================================================= - -template struct TSizeCmp { - bool operator ()( const list < T > & l1, const list < T > & l2 ) - const { return l1.size() < l2.size(); } -}; - -template void sortBySize( list< list < T > > & theListOfList ) -{ - if ( theListOfList.size() > 2 ) { - TSizeCmp< T > SizeCmp; - theListOfList.sort( SizeCmp ); - } -} - -//======================================================================= -//function : getOrderedEdges -//purpose : return nb wires and a list of oredered edges -//======================================================================= - -static int getOrderedEdges (const TopoDS_Face& theFace, - const TopoDS_Vertex& theFirstVertex, - list< TopoDS_Edge >& theEdges, - list< int > & theNbVertexInWires) -{ - // put wires in a list, so that an outer wire comes first - list aWireList; - TopoDS_Wire anOuterWire = BRepTools::OuterWire( theFace ); - aWireList.push_back( anOuterWire ); - for ( TopoDS_Iterator wIt (theFace); wIt.More(); wIt.Next() ) - if ( !anOuterWire.IsSame( wIt.Value() )) - aWireList.push_back( TopoDS::Wire( wIt.Value() )); - - // loop on edges of wires - theNbVertexInWires.clear(); - list::iterator wlIt = aWireList.begin(); - for ( ; wlIt != aWireList.end(); wlIt++ ) - { - int iE; - BRepTools_WireExplorer wExp( *wlIt, theFace ); - for ( iE = 0; wExp.More(); wExp.Next(), iE++ ) - { - TopoDS_Edge edge = wExp.Current(); - edge = TopoDS::Edge( edge.Oriented( wExp.Orientation() )); - theEdges.push_back( edge ); - } - theNbVertexInWires.push_back( iE ); - iE = 0; - if ( wlIt == aWireList.begin() && theEdges.size() > 1 ) { // the outer wire - // orient closed edges - list< TopoDS_Edge >::iterator eIt, eIt2; - for ( eIt = theEdges.begin(); eIt != theEdges.end(); eIt++ ) - { - TopoDS_Edge& edge = *eIt; - if ( TopExp::FirstVertex( edge ).IsSame( TopExp::LastVertex( edge ) )) - { - eIt2 = eIt; - bool isNext = ( eIt2 == theEdges.begin() ); - TopoDS_Edge edge2 = isNext ? *(++eIt2) : *(--eIt2); - double f1,l1,f2,l2; - Handle(Geom2d_Curve) c1 = BRep_Tool::CurveOnSurface( edge, theFace, f1,l1 ); - Handle(Geom2d_Curve) c2 = BRep_Tool::CurveOnSurface( edge2, theFace, f2,l2 ); - gp_Pnt2d pf = c1->Value( edge.Orientation() == TopAbs_FORWARD ? f1 : l1 ); - gp_Pnt2d pl = c1->Value( edge.Orientation() == TopAbs_FORWARD ? l1 : f1 ); - bool isFirst = ( edge2.Orientation() == TopAbs_FORWARD ? isNext : !isNext ); - gp_Pnt2d p2 = c2->Value( isFirst ? f2 : l2 ); - isFirst = ( p2.SquareDistance( pf ) < p2.SquareDistance( pl )); - if ( isNext ? isFirst : !isFirst ) - edge.Reverse(); - } - } - // rotate theEdges until it begins from theFirstVertex - if ( ! theFirstVertex.IsNull() ) - while ( !theFirstVertex.IsSame( TopExp::FirstVertex( theEdges.front(), true ))) - { - theEdges.splice(theEdges.end(), theEdges, - theEdges.begin(), ++ theEdges.begin()); - if ( iE++ > theNbVertexInWires.back() ) - break; // break infinite loop - } - } - } - - return aWireList.size(); -} - -//======================================================================= -//function : project -//purpose : -//======================================================================= - -static gp_XY project (const SMDS_MeshNode* theNode, - Extrema_GenExtPS & theProjectorPS) -{ - gp_Pnt P( theNode->X(), theNode->Y(), theNode->Z() ); - theProjectorPS.Perform( P ); - if ( !theProjectorPS.IsDone() ) { - MESSAGE( "SMESH_Pattern: point projection FAILED"); - return gp_XY(0.,0.); - } - double u, v, minVal = DBL_MAX; - for ( int i = theProjectorPS.NbExt(); i > 0; i-- ) - if ( theProjectorPS.Value( i ) < minVal ) { - minVal = theProjectorPS.Value( i ); - theProjectorPS.Point( i ).Parameter( u, v ); - } - return gp_XY( u, v ); -} - -//======================================================================= -//function : isMeshBoundToShape -//purpose : return true if all 2d elements are bound to shape -//======================================================================= - -static bool isMeshBoundToShape(SMESH_Mesh* theMesh) -{ - // check faces binding - SMESHDS_Mesh * aMeshDS = theMesh->GetMeshDS(); - SMESHDS_SubMesh * aMainSubMesh = aMeshDS->MeshElements( aMeshDS->ShapeToMesh() ); - if ( aMeshDS->NbFaces() != aMainSubMesh->NbElements() ) - return false; - - // check face nodes binding - SMDS_FaceIteratorPtr fIt = aMeshDS->facesIterator(); - while ( fIt->more() ) - { - SMDS_ElemIteratorPtr nIt = fIt->next()->nodesIterator(); - while ( nIt->more() ) - { - const SMDS_MeshNode* node = static_cast( nIt->next() ); - SMDS_PositionPtr pos = node->GetPosition(); - if ( !pos || !pos->GetShapeId() ) - return false; - } - } - return true; -} - -//======================================================================= -//function : Load -//purpose : Create a pattern from the mesh built on . -// ==true makes override nodes positions -// on computed by mesher -//======================================================================= - -bool SMESH_Pattern::Load (SMESH_Mesh* theMesh, - const TopoDS_Face& theFace, - bool theProject) -{ - MESSAGE(" ::Load(face) " ); - Clear(); - myIs2D = true; - - SMESHDS_Mesh * aMeshDS = theMesh->GetMeshDS(); - SMESHDS_SubMesh * fSubMesh = aMeshDS->MeshElements( theFace ); - - int nbNodes = ( !fSubMesh ? 0 : fSubMesh->NbNodes() ); - int nbElems = ( !fSubMesh ? 0 : fSubMesh->NbElements() ); - if ( nbElems == 0 && aMeshDS->NbFaces() == 0 ) - { - MESSAGE( "No elements bound to the face"); - return setErrorCode( ERR_LOAD_EMPTY_SUBMESH ); - } - - TopoDS_Face face = TopoDS::Face( theFace.Oriented( TopAbs_FORWARD )); - - // check that face is not closed - TopoDS_Vertex bidon; - list eList; - getOrderedEdges( face, bidon, eList, myNbKeyPntInBoundary ); - list::iterator elIt = eList.begin(); - for ( ; elIt != eList.end() ; elIt++ ) - if ( BRep_Tool::IsClosed( *elIt , face )) - return setErrorCode( ERR_LOADF_CLOSED_FACE ); - - - Extrema_GenExtPS projector; - GeomAdaptor_Surface aSurface( BRep_Tool::Surface( face )); - if ( theProject || nbElems == 0 ) - projector.Initialize( aSurface, 20,20, 1e-5,1e-5 ); - - int iPoint = 0; - TNodePointIDMap nodePointIDMap; - - if ( nbElems == 0 || (theProject && - theMesh->IsMainShape( face ) && - !isMeshBoundToShape( theMesh ))) - { - MESSAGE("Project the whole mesh"); - // --------------------------------------------------------------- - // The case where the whole mesh is projected to theFace - // --------------------------------------------------------------- - - // put nodes of all faces in the nodePointIDMap and fill myElemPointIDs - SMDS_FaceIteratorPtr fIt = aMeshDS->facesIterator(); - while ( fIt->more() ) - { - myElemPointIDs.push_back( TElemDef() ); - TElemDef& elemPoints = myElemPointIDs.back(); - SMDS_ElemIteratorPtr nIt = fIt->next()->nodesIterator(); - while ( nIt->more() ) - { - const SMDS_MeshElement* node = nIt->next(); - TNodePointIDMap::iterator nIdIt = nodePointIDMap.find( node ); - if ( nIdIt == nodePointIDMap.end() ) - { - elemPoints.push_back( iPoint ); - nodePointIDMap.insert( make_pair( node, iPoint++ )); - } - else - elemPoints.push_back( (*nIdIt).second ); - } - } - myPoints.resize( iPoint ); - - // project all nodes of 2d elements to theFace - TNodePointIDMap::iterator nIdIt = nodePointIDMap.begin(); - for ( ; nIdIt != nodePointIDMap.end(); nIdIt++ ) - { - const SMDS_MeshNode* node = - static_cast( (*nIdIt).first ); - TPoint * p = & myPoints[ (*nIdIt).second ]; - p->myInitUV = project( node, projector ); - p->myInitXYZ.SetCoord( p->myInitUV.X(), p->myInitUV.Y(), 0 ); - } - // find key-points: the points most close to UV of vertices - TopExp_Explorer vExp( face, TopAbs_VERTEX ); - set foundIndices; - for ( ; vExp.More(); vExp.Next() ) { - const TopoDS_Vertex v = TopoDS::Vertex( vExp.Current() ); - gp_Pnt2d uv = BRep_Tool::Parameters( v, face ); - double minDist = DBL_MAX; - int index; - vector< TPoint >::const_iterator pVecIt = myPoints.begin(); - for ( iPoint = 0; pVecIt != myPoints.end(); pVecIt++, iPoint++ ) { - double dist = uv.SquareDistance( (*pVecIt).myInitUV ); - if ( dist < minDist ) { - minDist = dist; - index = iPoint; - } - } - if ( foundIndices.insert( index ).second ) // unique? - myKeyPointIDs.push_back( index ); - } - myIsBoundaryPointsFound = false; - - } - else - { - // --------------------------------------------------------------------- - // The case where a pattern is being made from the mesh built by mesher - // --------------------------------------------------------------------- - - // Load shapes in the consequent order and count nb of points - - // vertices - for ( elIt = eList.begin(); elIt != eList.end(); elIt++ ) { - myShapeIDMap.Add( TopExp::FirstVertex( *elIt, true )); - SMESHDS_SubMesh * eSubMesh = aMeshDS->MeshElements( *elIt ); - if ( eSubMesh ) - nbNodes += eSubMesh->NbNodes() + 1; - } - // edges - for ( elIt = eList.begin(); elIt != eList.end(); elIt++ ) - myShapeIDMap.Add( *elIt ); - // the face - myShapeIDMap.Add( face ); - - myPoints.resize( nbNodes ); - - // Load U of points on edges - - for ( elIt = eList.begin(); elIt != eList.end(); elIt++ ) - { - TopoDS_Edge & edge = *elIt; - list< TPoint* > & ePoints = getShapePoints( edge ); - double f, l; - Handle(Geom2d_Curve) C2d; - if ( !theProject ) - C2d = BRep_Tool::CurveOnSurface( edge, face, f, l ); - bool isForward = ( edge.Orientation() == TopAbs_FORWARD ); - - // the forward key-point - TopoDS_Shape v = TopExp::FirstVertex( edge, true ); - list< TPoint* > & vPoint = getShapePoints( v ); - if ( vPoint.empty() ) - { - SMESHDS_SubMesh * vSubMesh = aMeshDS->MeshElements( v ); - if ( vSubMesh && vSubMesh->NbNodes() ) { - myKeyPointIDs.push_back( iPoint ); - SMDS_NodeIteratorPtr nIt = vSubMesh->GetNodes(); - const SMDS_MeshNode* node = nIt->next(); - nodePointIDMap.insert( make_pair( node, iPoint )); - - TPoint* keyPoint = &myPoints[ iPoint++ ]; - vPoint.push_back( keyPoint ); - if ( theProject ) - keyPoint->myInitUV = project( node, projector ); - else - keyPoint->myInitUV = C2d->Value( isForward ? f : l ).XY(); - keyPoint->myInitXYZ.SetCoord (keyPoint->myInitUV.X(), keyPoint->myInitUV.Y(), 0); - } - } - if ( !vPoint.empty() ) - ePoints.push_back( vPoint.front() ); - - // on-edge points - SMESHDS_SubMesh * eSubMesh = aMeshDS->MeshElements( edge ); - if ( eSubMesh && eSubMesh->NbNodes() ) - { - // loop on nodes of an edge: sort them by param on edge - typedef map < double, const SMDS_MeshNode* > TParamNodeMap; - TParamNodeMap paramNodeMap; - SMDS_NodeIteratorPtr nIt = eSubMesh->GetNodes(); - while ( nIt->more() ) - { - const SMDS_MeshNode* node = - static_cast( nIt->next() ); - const SMDS_EdgePosition* epos = - static_cast(node->GetPosition().get()); - double u = epos->GetUParameter(); - paramNodeMap.insert( TParamNodeMap::value_type( u, node )); - } - // put U in [0,1] so that the first key-point has U==0 - double du = l - f; - TParamNodeMap::iterator unIt = paramNodeMap.begin(); - TParamNodeMap::reverse_iterator unRIt = paramNodeMap.rbegin(); - while ( unIt != paramNodeMap.end() ) - { - TPoint* p = & myPoints[ iPoint ]; - ePoints.push_back( p ); - const SMDS_MeshNode* node = isForward ? (*unIt).second : (*unRIt).second; - nodePointIDMap.insert ( make_pair( node, iPoint )); - - if ( theProject ) - p->myInitUV = project( node, projector ); - else { - double u = isForward ? (*unIt).first : (*unRIt).first; - p->myInitU = isForward ? (( u - f ) / du ) : ( 1.0 - ( u - f ) / du ); - p->myInitUV = C2d->Value( u ).XY(); - } - p->myInitXYZ.SetCoord( p->myInitUV.X(), p->myInitUV.Y(), 0 ); - unIt++; unRIt++; - iPoint++; - } - } - // the reverse key-point - v = TopExp::LastVertex( edge, true ).Reversed(); - list< TPoint* > & vPoint2 = getShapePoints( v ); - if ( vPoint2.empty() ) - { - SMESHDS_SubMesh * vSubMesh = aMeshDS->MeshElements( v ); - if ( vSubMesh && vSubMesh->NbNodes() ) { - myKeyPointIDs.push_back( iPoint ); - SMDS_NodeIteratorPtr nIt = vSubMesh->GetNodes(); - const SMDS_MeshNode* node = nIt->next(); - nodePointIDMap.insert( make_pair( node, iPoint )); - - TPoint* keyPoint = &myPoints[ iPoint++ ]; - vPoint2.push_back( keyPoint ); - if ( theProject ) - keyPoint->myInitUV = project( node, projector ); - else - keyPoint->myInitUV = C2d->Value( isForward ? l : f ).XY(); - keyPoint->myInitXYZ.SetCoord( keyPoint->myInitUV.X(), keyPoint->myInitUV.Y(), 0 ); - } - } - if ( !vPoint2.empty() ) - ePoints.push_back( vPoint2.front() ); - - // compute U of edge-points - if ( theProject ) - { - double totalDist = 0; - list< TPoint* >::iterator pIt = ePoints.begin(); - TPoint* prevP = *pIt; - prevP->myInitU = totalDist; - for ( pIt++; pIt != ePoints.end(); pIt++ ) { - TPoint* p = *pIt; - totalDist += ( p->myInitUV - prevP->myInitUV ).Modulus(); - p->myInitU = totalDist; - prevP = p; - } - if ( totalDist > DBL_MIN) - for ( pIt = ePoints.begin(); pIt != ePoints.end(); pIt++ ) { - TPoint* p = *pIt; - p->myInitU /= totalDist; - } - } - } // loop on edges of a wire - - // Load in-face points and elements - - if ( fSubMesh && fSubMesh->NbElements() ) - { - list< TPoint* > & fPoints = getShapePoints( face ); - SMDS_NodeIteratorPtr nIt = fSubMesh->GetNodes(); - while ( nIt->more() ) - { - const SMDS_MeshNode* node = - static_cast( nIt->next() ); - nodePointIDMap.insert( make_pair( node, iPoint )); - TPoint* p = &myPoints[ iPoint++ ]; - fPoints.push_back( p ); - if ( theProject ) - p->myInitUV = project( node, projector ); - else { - const SMDS_FacePosition* pos = - static_cast(node->GetPosition().get()); - p->myInitUV.SetCoord( pos->GetUParameter(), pos->GetVParameter() ); - } - p->myInitXYZ.SetCoord( p->myInitUV.X(), p->myInitUV.Y(), 0 ); - } - // load elements - SMDS_ElemIteratorPtr elemIt = fSubMesh->GetElements(); - while ( elemIt->more() ) { - SMDS_ElemIteratorPtr nIt = elemIt->next()->nodesIterator(); - myElemPointIDs.push_back( TElemDef() ); - TElemDef& elemPoints = myElemPointIDs.back(); - while ( nIt->more() ) - elemPoints.push_back( nodePointIDMap[ nIt->next() ]); - } - } - - myIsBoundaryPointsFound = true; - } - - // Assure that U range is proportional to V range - - Bnd_Box2d bndBox; - vector< TPoint >::iterator pVecIt = myPoints.begin(); - for ( ; pVecIt != myPoints.end(); pVecIt++ ) - bndBox.Add( gp_Pnt2d( (*pVecIt).myInitUV )); - double minU, minV, maxU, maxV; - bndBox.Get( minU, minV, maxU, maxV ); - double dU = maxU - minU, dV = maxV - minV; - if ( dU <= DBL_MIN || dV <= DBL_MIN ) { - Clear(); - return setErrorCode( ERR_LOADF_NARROW_FACE ); - } - double ratio = dU / dV, maxratio = 3, scale; - int iCoord = 0; - if ( ratio > maxratio ) { - scale = ratio / maxratio; - iCoord = 2; - } - else if ( ratio < 1./maxratio ) { - scale = maxratio / ratio; - iCoord = 1; - } - if ( iCoord ) { - SCRUTE( scale ); - for ( pVecIt = myPoints.begin(); pVecIt != myPoints.end(); pVecIt++ ) { - TPoint & p = *pVecIt; - p.myInitUV.SetCoord( iCoord, p.myInitUV.Coord( iCoord ) * scale ); - p.myInitXYZ.SetCoord( p.myInitUV.X(), p.myInitUV.Y(), 0 ); - } - } - if ( myElemPointIDs.empty() ) { - MESSAGE( "No elements bound to the face"); - return setErrorCode( ERR_LOAD_EMPTY_SUBMESH ); - } - - return setErrorCode( ERR_OK ); -} - -//======================================================================= -//function : computeUVOnEdge -//purpose : compute coordinates of points on theEdge -//======================================================================= - -void SMESH_Pattern::computeUVOnEdge (const TopoDS_Edge& theEdge, - const list< TPoint* > & ePoints ) -{ - bool isForward = ( theEdge.Orientation() == TopAbs_FORWARD ); - double f, l; - Handle(Geom2d_Curve) C2d = - BRep_Tool::CurveOnSurface( theEdge, TopoDS::Face( myShape ), f, l ); - - ePoints.back()->myInitU = 1.0; - list< TPoint* >::const_iterator pIt = ePoints.begin(); - for ( pIt++; pIt != ePoints.end(); pIt++ ) - { - TPoint* point = *pIt; - // U - double du = ( isForward ? point->myInitU : 1 - point->myInitU ); - point->myU = ( f * ( 1 - du ) + l * du ); - // UV - point->myUV = C2d->Value( point->myU ).XY(); - } -} - -//======================================================================= -//function : intersectIsolines -//purpose : -//======================================================================= - -static bool intersectIsolines(const gp_XY& uv11, const gp_XY& uv12, const double r1, - const gp_XY& uv21, const gp_XY& uv22, const double r2, - gp_XY& resUV, - bool& isDeformed) -{ - 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; -// double len1 = ( uv11 - uv12 ).Modulus(); -// double len2 = ( uv21 - uv22 ).Modulus(); -// resUV = loc1 * len2 / ( len1 + len2 ) + loc2 * len1 / ( len1 + len2 ); -// return true; - - -// gp_Lin2d line1( uv11, uv12 - uv11 ); -// gp_Lin2d line2( uv21, uv22 - uv21 ); -// double angle = Abs( line1.Angle( line2 ) ); - -// IntAna2d_AnaIntersection inter; -// inter.Perform( line1.Normal( loc1 ), line2.Normal( loc2 ) ); -// if ( inter.IsDone() && inter.NbPoints() == 1 ) -// { -// gp_Pnt2d interUV = inter.Point(1).Value(); -// resUV += interUV.XY(); -// inter.Perform( line1, line2 ); -// interUV = inter.Point(1).Value(); -// resUV += interUV.XY(); - -// resUV /= 2.; -// } - return true; -} - -//======================================================================= -//function : compUVByIsoIntersection -//purpose : -//======================================================================= - -bool SMESH_Pattern::compUVByIsoIntersection (const list< list< TPoint* > >& theBndPoints, - const gp_XY& theInitUV, - gp_XY& theUV, - bool & theIsDeformed ) -{ - // compute UV by intersection of 2 iso lines - //gp_Lin2d isoLine[2]; - gp_XY uv1[2], uv2[2]; - double ratio[2]; - const double zero = DBL_MIN; - for ( int iIso = 0; iIso < 2; iIso++ ) - { - // to build an iso line: - // find 2 pairs of consequent edge-points such that the range of their - // initial parameters encloses the in-face point initial parameter - gp_XY UV[2], initUV[2]; - int nbUV = 0, iCoord = iIso + 1; - double initParam = theInitUV.Coord( iCoord ); - - list< list< TPoint* > >::const_iterator bndIt = theBndPoints.begin(); - for ( ; bndIt != theBndPoints.end(); bndIt++ ) - { - const list< TPoint* > & bndPoints = * bndIt; - TPoint* prevP = bndPoints.back(); // this is the first point - list< TPoint* >::const_iterator pIt = bndPoints.begin(); - bool coincPrev = false; - // loop on the edge-points - for ( ; pIt != bndPoints.end(); pIt++ ) - { - double paramDiff = initParam - (*pIt)->myInitUV.Coord( iCoord ); - double prevParamDiff = initParam - prevP->myInitUV.Coord( iCoord ); - double sumOfDiff = Abs(prevParamDiff) + Abs(paramDiff); - if (!coincPrev && // ignore if initParam coincides with prev point param - sumOfDiff > zero && // ignore if both points coincide with initParam - prevParamDiff * paramDiff <= zero ) - { - // find UV in parametric space of theFace - double r = Abs(prevParamDiff) / sumOfDiff; - gp_XY uvInit = (*pIt)->myInitUV * r + prevP->myInitUV * ( 1 - r ); - int i = nbUV++; - if ( i >= 2 ) { - // throw away uv most distant from - gp_XY vec0 = initUV[0] - theInitUV; - gp_XY vec1 = initUV[1] - theInitUV; - gp_XY vec = uvInit - theInitUV; - bool isBetween = ( vec0 * vec1 < 0 ); // is theInitUV between initUV[0] and initUV[1] - double dist0 = vec0.SquareModulus(); - double dist1 = vec1.SquareModulus(); - double dist = vec .SquareModulus(); - if ( !isBetween || dist < dist0 || dist < dist1 ) { - i = ( dist0 < dist1 ? 1 : 0 ); - if ( isBetween && vec.Dot( i ? vec1 : vec0 ) < 0 ) - i = 3; // theInitUV must remain between - } - } - if ( i < 2 ) { - initUV[ i ] = uvInit; - UV[ i ] = (*pIt)->myUV * r + prevP->myUV * ( 1 - r ); - } - coincPrev = ( Abs(paramDiff) <= zero ); - } - else - coincPrev = false; - prevP = *pIt; - } - } - if ( nbUV < 2 || (UV[0]-UV[1]).SquareModulus() <= DBL_MIN*DBL_MIN ) { - MESSAGE(" consequent edge-points not found, nb UV found: " << nbUV << - ", for point: " << theInitUV.X() <<" " << theInitUV.Y() ); - return setErrorCode( ERR_APPLF_BAD_TOPOLOGY ); - } - // an iso line should be normal to UV[0] - UV[1] direction - // and be located at the same relative distance as from initial ends - //gp_Lin2d iso( UV[0], UV[0] - UV[1] ); - double r = - (initUV[0]-theInitUV).Modulus() / (initUV[0]-initUV[1]).Modulus(); - //gp_Pnt2d isoLoc = UV[0] * ( 1 - r ) + UV[1] * r; - //isoLine[ iIso ] = iso.Normal( isoLoc ); - uv1[ iIso ] = UV[0]; - uv2[ iIso ] = UV[1]; - ratio[ iIso ] = r; - } - if ( !intersectIsolines( uv1[0], uv2[0], ratio[0], - uv1[1], uv2[1], ratio[1], theUV, theIsDeformed )) { - MESSAGE(" Cant intersect isolines for a point "<myNext[ dir ]; - if ( n && !n->IsUVComputed()/* && node->IsMovable()*/ ) { - n = 0;//node->myBndNodes[ dir ]; -// MESSAGE("getNextNode: use bnd for node "<< -// node->myInitUV.X()<<" "<myInitUV.Y()); - } - return n; -} -//======================================================================= -//function : checkQuads -//purpose : check if newUV destortes quadrangles around node, -// and if ( crit == FIX_OLD ) fix newUV in this case -//======================================================================= - -enum { CHECK_NEW_IN, CHECK_NEW_OK, FIX_OLD }; - -static bool checkQuads (const TIsoNode* node, - gp_XY& newUV, - const bool reversed, - const int crit = FIX_OLD, - double fixSize = 0.) -{ - gp_XY oldUV = node->myUV, oldUVFixed[4], oldUVImpr[4]; - int nbOldFix = 0, nbOldImpr = 0; - double newBadRate = 0, oldBadRate = 0; - bool newIsOk = true, newIsIn = true, oldIsIn = true, oldIsOk = true; - int i, dir1 = 0, dir2 = 3; - for ( ; dir1 < 4; dir1++, dir2++ ) // loop on 4 quadrangles around - { - if ( dir2 > 3 ) dir2 = 0; - TIsoNode* n[3]; - // walking counterclockwise around a quad, - // nodes are in the order: node, n[0], n[1], n[2] - n[0] = getNextNode( node, dir1 ); - n[2] = getNextNode( node, dir2 ); - if ( !n[0] || !n[2] ) continue; - n[1] = getNextNode( n[0], dir2 ); - if ( !n[1] ) n[1] = getNextNode( n[2], dir1 ); - bool isTriangle = ( !n[1] ); - if ( reversed ) { - TIsoNode* tmp = n[0]; n[0] = n[2]; n[2] = tmp; - } -// if ( fixSize != 0 ) { -// cout<<"NODE: "<myInitUV.X()<<" "<myInitUV.Y()<<" UV: "<myUV.X()<<" "<myUV.Y()<myInitUV.X()<<" "<myInitUV.Y()<<" UV: "<myUV.X()<<" "<myUV.Y()<myInitUV.X()<<" "<myInitUV.Y()<<" UV: "<myUV.X()<<" "<myUV.Y()<myInitUV.X()<<" "<myInitUV.Y()<<" UV: "<myUV.X()<<" "<myUV.Y()<myUV - n[1]->myUV ).SquareModulus() <= DBL_MIN ) || - (( n[2]->myUV - n[1]->myUV ).SquareModulus() <= DBL_MIN ))) - isTriangle = true; - if ( isTriangle && - ( n[0]->myUV - n[2]->myUV ).SquareModulus() <= DBL_MIN ) - continue; - - // find min size of the diagonal node-n[1] - double minDiag = fixSize; - if ( minDiag == 0. ) { - double maxLen2 = ( node->myUV - n[0]->myUV ).SquareModulus(); - if ( !isTriangle ) { - maxLen2 = Max( maxLen2, ( n[0]->myUV - n[1]->myUV ).SquareModulus() ); - maxLen2 = Max( maxLen2, ( n[1]->myUV - n[2]->myUV ).SquareModulus() ); - } - maxLen2 = Max( maxLen2, ( n[2]->myUV - node->myUV ).SquareModulus() ); - minDiag = sqrt( maxLen2 ) * PI / 60.; // ~ maxLen * Sin( 3 deg ) - } - - // check if newUV is behind 3 dirs: n[0]-n[1], n[1]-n[2] and n[0]-n[2] - // ( behind means "to the right of") - // it is OK if - // 1. newUV is not behind 01 and 12 dirs - // 2. or newUV is not behind 02 dir and n[2] is convex - bool newIn[3] = { true, true, true }, newOk[3] = { true, true, true }; - bool wasIn[3] = { true, true, true }, wasOk[3] = { true, true, true }; - gp_Vec2d moveVec[3], outVec[3]; - for ( i = isTriangle ? 2 : 0; i < 3; i++ ) - { - bool isDiag = ( i == 2 ); - if ( isDiag && newOk[0] && newOk[1] && !isTriangle ) - break; - gp_Vec2d sideDir; - if ( isDiag ) - sideDir = gp_Vec2d( n[0]->myUV, n[2]->myUV ); - else - sideDir = gp_Vec2d( n[i]->myUV, n[i+1]->myUV ); - - gp_Vec2d outDir( sideDir.Y(), -sideDir.X() ); // to the right - outDir.Normalize(); - gp_Vec2d newDir( n[i]->myUV, newUV ); - gp_Vec2d oldDir( n[i]->myUV, oldUV ); - outVec[i] = outDir; - if ( newIsOk ) newOk[i] = ( outDir * newDir < -minDiag ); - if ( newIsIn ) newIn[i] = ( outDir * newDir < 0 ); - if ( crit == FIX_OLD ) { - wasIn[i] = ( outDir * oldDir < 0 ); - wasOk[i] = ( outDir * oldDir < -minDiag ); - if ( !newOk[i] ) - newBadRate += outDir * newDir; - if ( !wasOk[i] ) - oldBadRate += outDir * oldDir; - // push node inside - if ( !wasOk[i] ) { - double oldDist = - outDir * oldDir;//, l2 = outDir * newDir; - // double r = ( l1 - minDiag ) / ( l1 + l2 ); - // moveVec[i] = r * gp_Vec2d( node->myUV, newUV ); - moveVec[i] = ( oldDist - minDiag ) * outDir; - } - } - } - - // check if n[2] is convex - bool convex = true; - if ( !isTriangle ) - convex = ( outVec[0] * gp_Vec2d( n[1]->myUV, n[2]->myUV ) < 0 ); - - bool isNewOk = ( newOk[0] && newOk[1] ) || ( newOk[2] && convex ); - bool isNewIn = ( newIn[0] && newIn[1] ) || ( newIn[2] && convex ); - newIsOk = ( newIsOk && isNewOk ); - newIsIn = ( newIsIn && isNewIn ); - - if ( crit != FIX_OLD ) { - if ( crit == CHECK_NEW_OK && !newIsOk ) break; - if ( crit == CHECK_NEW_IN && !newIsIn ) break; - continue; - } - - bool isOldIn = ( wasIn[0] && wasIn[1] ) || ( wasIn[2] && convex ); - bool isOldOk = ( wasOk[0] && wasOk[1] ) || ( wasOk[2] && convex ); - oldIsIn = ( oldIsIn && isOldIn ); - oldIsOk = ( oldIsOk && isOldIn ); - - - if ( !isOldIn ) { // node is outside a quadrangle - // move newUV inside a quadrangle -//MESSAGE("Quad "<< dir1 << " WAS IN " << wasIn[0]<<" "<myUV + n[2]->myUV ) - minDiag * outVec[2].XY(); - } - else { - gp_Vec2d out = outVec[0].Normalized() + outVec[1].Normalized(); - double outSize = out.Magnitude(); - if ( outSize > DBL_MIN ) - out /= outSize; - else - out.SetCoord( -outVec[1].Y(), outVec[1].X() ); - uv = n[1]->myUV - minDiag * out.XY(); - } - oldUVFixed[ nbOldFix++ ] = uv; - //node->myUV = newUV; - } - else if ( !isOldOk ) { - // try to fix old UV: move node inside as less as possible -//MESSAGE("Quad "<< dir1 << " old is BAD, try to fix old, minDiag: "<< minDiag); - gp_XY uv1, uv2 = node->myUV; - for ( i = isTriangle ? 2 : 0; i < 3; i++ ) // mark not computed vectors - if ( wasOk[i] ) - moveVec[ i ].SetCoord( 1, 2e100); // not use this vector - while ( !isOldOk ) { - // find the least moveVec - int i, iMin = 4; - double minMove2 = 1e100; - for ( i = isTriangle ? 2 : 0; i < 3; i++ ) - { - if ( moveVec[i].Coord(1) < 1e100 ) { - double move2 = moveVec[i].SquareMagnitude(); - if ( move2 < minMove2 ) { - minMove2 = move2; - iMin = i; - } - } - } - if ( iMin == 4 ) { - break; - } - // move node to newUV - uv1 = node->myUV + moveVec[ iMin ].XY(); - uv2 += moveVec[ iMin ].XY(); - moveVec[ iMin ].SetCoord( 1, 2e100); // not use this vector more - // check if uv1 is ok - for ( i = isTriangle ? 2 : 0; i < 3; i++ ) - wasOk[i] = ( outVec[i] * gp_Vec2d( n[i]->myUV, uv1 ) < -minDiag ); - isOldOk = ( wasOk[0] && wasOk[1] ) || ( wasOk[2] && convex ); - if ( isOldOk ) - oldUVImpr[ nbOldImpr++ ] = uv1; - else { - // check if uv2 is ok - for ( i = isTriangle ? 2 : 0; i < 3; i++ ) - wasOk[i] = ( outVec[i] * gp_Vec2d( n[i]->myUV, uv2 ) < -minDiag ); - isOldOk = ( wasOk[0] && wasOk[1] ) || ( wasOk[2] && convex ); - if ( isOldOk ) - oldUVImpr[ nbOldImpr++ ] = uv2; - } - } - } - - } // loop on 4 quadrangles around - - if ( crit == CHECK_NEW_OK ) - return newIsOk; - if ( crit == CHECK_NEW_IN ) - return newIsIn; - - if ( newIsOk ) - return true; - - if ( oldIsOk ) - newUV = oldUV; - else { - if ( oldIsIn && nbOldImpr ) { -// MESSAGE(" Try to improve UV, init: "<myInitUV.X()<<" "<myInitUV.Y()<< -// " uv: "<myInitUV.X()<<" "<myInitUV.Y()<< -// " uv: "< >& theBndPoints, - const list< TPoint* >& thePntToCompute) -{ -//cout << "============================== KEY POINTS =============================="<::iterator kpIt = myKeyPointIDs.begin(); -// for ( ; kpIt != myKeyPointIDs.end(); kpIt++ ) { -// TPoint& p = myPoints[ *kpIt ]; -// cout << "INIT: " << p.myInitUV.X() << " " << p.myInitUV.Y() << -// " UV: " << p.myUV.X() << " " << p.myUV.Y() << endl; -// } -//cout << "=============================="< paramSet[ 2 ]; - list< list< TPoint* > >::const_iterator pListIt; - list< TPoint* >::const_iterator pIt; - for ( pListIt = theBndPoints.begin(); pListIt != theBndPoints.end(); pListIt++ ) { - const list< TPoint* > & pList = * pListIt; - for ( pIt = pList.begin(); pIt != pList.end(); pIt++ ) { - paramSet[0].insert( (*pIt)->myInitUV.X() ); - paramSet[1].insert( (*pIt)->myInitUV.Y() ); - } - } - for ( pIt = thePntToCompute.begin(); pIt != thePntToCompute.end(); pIt++ ) { - paramSet[0].insert( (*pIt)->myInitUV.X() ); - paramSet[1].insert( (*pIt)->myInitUV.Y() ); - } - // unite close parameters and split too long segments - int iDir; - double tol[ 2 ]; - for ( iDir = 0; iDir < 2; iDir++ ) - { - set< double > & params = paramSet[ iDir ]; - double range = ( *params.rbegin() - *params.begin() ); - double toler = range / 1e6; - tol[ iDir ] = toler; -// double maxSegment = range / params.size() / 2.; -// -// set< double >::iterator parIt = params.begin(); -// double prevPar = *parIt; -// for ( parIt++; parIt != params.end(); parIt++ ) -// { -// double segLen = (*parIt) - prevPar; -// if ( segLen < toler ) -// ;//params.erase( prevPar ); // unite -// else if ( segLen > maxSegment ) -// params.insert( prevPar + 0.5 * segLen ); // split -// prevPar = (*parIt); -// } - } - - // Make nodes of a grid of iso-poly-lines - - list < TIsoNode > nodes; - typedef list < TIsoNode *> TIsoLine; - map < double, TIsoLine > isoMap[ 2 ]; - - set< double > & params0 = paramSet[ 0 ]; - set< double >::iterator par0It = params0.begin(); - for ( ; par0It != params0.end(); par0It++ ) - { - TIsoLine & isoLine0 = isoMap[0][ *par0It ]; // vertical isoline with const U - set< double > & params1 = paramSet[ 1 ]; - set< double >::iterator par1It = params1.begin(); - for ( ; par1It != params1.end(); par1It++ ) - { - nodes.push_back( TIsoNode( *par0It, *par1It ) ); - isoLine0.push_back( & nodes.back() ); - isoMap[1][ *par1It ].push_back( & nodes.back() ); - } - } - - // Compute intersections of boundaries with iso-lines: - // only boundary nodes will have computed UV so far - - Bnd_Box2d uvBnd; - list< list< TPoint* > >::const_iterator bndIt = theBndPoints.begin(); - list< TIsoNode* > bndNodes; // nodes corresponding to outer theBndPoints - for ( ; bndIt != theBndPoints.end(); bndIt++ ) - { - const list< TPoint* > & bndPoints = * bndIt; - TPoint* prevP = bndPoints.back(); // this is the first point - list< TPoint* >::const_iterator pIt = bndPoints.begin(); - // loop on the edge-points - for ( ; pIt != bndPoints.end(); pIt++ ) - { - TPoint* point = *pIt; - for ( iDir = 0; iDir < 2; iDir++ ) - { - const int iCoord = iDir + 1; - const int iOtherCoord = 2 - iDir; - double par1 = prevP->myInitUV.Coord( iCoord ); - double par2 = point->myInitUV.Coord( iCoord ); - double parDif = par2 - par1; - if ( Abs( parDif ) <= DBL_MIN ) - continue; - // find iso-lines intersecting a bounadry - double toler = tol[ 1 - iDir ]; - double minPar = Min ( par1, par2 ); - double maxPar = Max ( par1, par2 ); - map < double, TIsoLine >& isos = isoMap[ iDir ]; - map < double, TIsoLine >::iterator isoIt = isos.begin(); - for ( ; isoIt != isos.end(); isoIt++ ) - { - double isoParam = (*isoIt).first; - if ( isoParam < minPar || isoParam > maxPar ) - continue; - double r = ( isoParam - par1 ) / parDif; - gp_XY uv = ( 1 - r ) * prevP->myUV + r * point->myUV; - gp_XY initUV = ( 1 - r ) * prevP->myInitUV + r * point->myInitUV; - double otherPar = initUV.Coord( iOtherCoord ); // along isoline - // find existing node with otherPar or insert a new one - TIsoLine & isoLine = (*isoIt).second; - double nodePar; - TIsoLine::iterator nIt = isoLine.begin(); - for ( ; nIt != isoLine.end(); nIt++ ) { - nodePar = (*nIt)->myInitUV.Coord( iOtherCoord ); - if ( nodePar >= otherPar ) - break; - } - TIsoNode * node; - if ( Abs( nodePar - otherPar ) <= toler ) - node = ( nIt == isoLine.end() ) ? isoLine.back() : (*nIt); - else { - nodes.push_back( TIsoNode( initUV.X(), initUV.Y() ) ); - node = & nodes.back(); - isoLine.insert( nIt, node ); - } - node->SetNotMovable(); - node->myUV = uv; - uvBnd.Add( gp_Pnt2d( uv )); -// cout << "bnd: "<myInitUV.X()<<" "<myInitUV.Y()<<" UV: "<myUV.X()<<" "<myUV.Y()<myUV - prevP->myUV ); - if ( ::IsEqual( r, 1. )) - node->myDir[ 0 ] = tgt; - else if ( ::IsEqual( r, 0. )) - node->myDir[ 1 ] = tgt; - else - node->myDir[ 1 ] = node->myDir[ 0 ] = tgt; - // keep boundary nodes corresponding to boundary points - if ( bndIt == theBndPoints.begin() && ::IsEqual( r, 1. )) - if ( bndNodes.empty() || bndNodes.back() != node ) - bndNodes.push_back( node ); - } // loop on isolines - } // loop on 2 directions - prevP = point; - } // loop on boundary points - } // loop on boundaries - - // Define orientation - - // find the point with the least X - double leastX = DBL_MAX; - TIsoNode * leftNode; - list < TIsoNode >::iterator nodeIt = nodes.begin(); - for ( ; nodeIt != nodes.end(); nodeIt++ ) { - TIsoNode & node = *nodeIt; - if ( node.IsUVComputed() && node.myUV.X() < leastX ) { - leastX = node.myUV.X(); - leftNode = &node; - } -// if ( node.IsUVComputed() ) { -// cout << "bndNode INIT: " << node.myInitUV.X()<<" "<myDir[0].Y() + leftNode->myDir[1].Y() > 0 ); - //SCRUTE( reversed ); - - // Prepare internal nodes: - // 1. connect nodes - // 2. compute ratios - // 3. find boundary nodes for each node - // 4. remove nodes out of the boundary - for ( iDir = 0; iDir < 2; iDir++ ) - { - const int iCoord = 2 - iDir; // coord changing along an isoline - map < double, TIsoLine >& isos = isoMap[ iDir ]; - map < double, TIsoLine >::iterator isoIt = isos.begin(); - for ( ; isoIt != isos.end(); isoIt++ ) - { - TIsoLine & isoLine = (*isoIt).second; - bool firstCompNodeFound = false; - TIsoLine::iterator lastCompNodePos, nPrevIt, nIt, nNextIt, nIt2; - nPrevIt = nIt = nNextIt = isoLine.begin(); - nIt++; - nNextIt++; nNextIt++; - while ( nIt != isoLine.end() ) - { - // 1. connect prev - cur - TIsoNode* node = *nIt, * prevNode = *nPrevIt; - if ( !firstCompNodeFound && prevNode->IsUVComputed() ) { - firstCompNodeFound = true; - lastCompNodePos = nPrevIt; - } - if ( firstCompNodeFound ) { - node->SetNext( prevNode, iDir, 0 ); - prevNode->SetNext( node, iDir, 1 ); - } - // 2. compute ratio - if ( nNextIt != isoLine.end() ) { - double par1 = prevNode->myInitUV.Coord( iCoord ); - double par2 = node->myInitUV.Coord( iCoord ); - double par3 = (*nNextIt)->myInitUV.Coord( iCoord ); - node->myRatio[ iDir ] = ( par2 - par1 ) / ( par3 - par1 ); - } - // 3. find boundary nodes - if ( node->IsUVComputed() ) - lastCompNodePos = nIt; - else if ( firstCompNodeFound && nNextIt != isoLine.end() ) { - TIsoNode* bndNode1 = *lastCompNodePos, *bndNode2 = 0; - for ( nIt2 = nNextIt; nIt2 != isoLine.end(); nIt2++ ) - if ( (*nIt2)->IsUVComputed() ) - break; - if ( nIt2 != isoLine.end() ) { - bndNode2 = *nIt2; - node->SetBoundaryNode( bndNode1, iDir, 0 ); - node->SetBoundaryNode( bndNode2, iDir, 1 ); -// cout << "--------------------------------------------------"<myUV.X()<<" "<myUV.Y()<myDir[0].X()<<" "<myDir[0].Y() << -// " dir1: "<myDir[1].X()<<" "<myDir[1].Y() << endl; -// cout << "bndNode2: " << bndNode2->myUV.X()<<" "<myUV.Y()<myDir[0].X()<<" "<myDir[0].Y() << -// " dir1: "<myDir[1].X()<<" "<myDir[1].Y() << endl; - } - } - nIt++; nPrevIt++; - if ( nNextIt != isoLine.end() ) nNextIt++; - // 4. remove nodes out of the boundary - if ( !firstCompNodeFound ) - isoLine.pop_front(); - } // loop on isoLine nodes - - // remove nodes after the boundary -// for ( nIt = ++lastCompNodePos; nIt != isoLine.end(); nIt++ ) -// (*nIt)->SetNotMovable(); - isoLine.erase( ++lastCompNodePos, isoLine.end() ); - } // loop on isolines - } // loop on 2 directions - - // Compute local isoline direction for internal nodes - - /* - map < double, TIsoLine >& isos = isoMap[ 0 ]; // vertical isolines with const U - map < double, TIsoLine >::iterator isoIt = isos.begin(); - for ( ; isoIt != isos.end(); isoIt++ ) - { - TIsoLine & isoLine = (*isoIt).second; - TIsoLine::iterator nIt = isoLine.begin(); - for ( ; nIt != isoLine.end(); nIt++ ) - { - TIsoNode* node = *nIt; - if ( node->IsUVComputed() || !node->IsMovable() ) - continue; - gp_Vec2d aTgt[2], aNorm[2]; - double ratio[2]; - bool OK = true; - for ( iDir = 0; iDir < 2; iDir++ ) - { - TIsoNode* bndNode1 = node->GetBoundaryNode( iDir, 0 ); - TIsoNode* bndNode2 = node->GetBoundaryNode( iDir, 1 ); - if ( !bndNode1 || !bndNode2 ) { - OK = false; - break; - } - const int iCoord = 2 - iDir; // coord changing along an isoline - double par1 = bndNode1->myInitUV.Coord( iCoord ); - double par2 = node->myInitUV.Coord( iCoord ); - double par3 = bndNode2->myInitUV.Coord( iCoord ); - ratio[ iDir ] = ( par2 - par1 ) / ( par3 - par1 ); - - gp_Vec2d tgt1( bndNode1->myDir[0].XY() + bndNode1->myDir[1].XY() ); - gp_Vec2d tgt2( bndNode2->myDir[0].XY() + bndNode2->myDir[1].XY() ); - if ( bool( iDir ) == reversed ) tgt2.Reverse(); // along perpend. isoline - else tgt1.Reverse(); -//cout<<" tgt: " << tgt1.X()<<" "< PI / 2. ) { - // check direction of the last but one perpendicular isoline - TIsoNode* prevNode = bndNode2->GetNext( iDir, 0 ); - bndNode1 = prevNode->GetBoundaryNode( 1 - iDir, 0 ); - bndNode2 = prevNode->GetBoundaryNode( 1 - iDir, 1 ); - gp_Vec2d isoDir( bndNode1->myUV, bndNode2->myUV ); - if ( isoDir * tgt2 < 0 ) - isoDir.Reverse(); - double angle2 = tgt1.Angle( isoDir ); - //cout << " isoDir: "<< isoDir.X() <<" "< Abs( angle ) || - ( angle2 * angle < 0 && Abs( angle2 ) > Abs( angle - angle2 ))) { - //MESSAGE("Add PI"); - // cout << "NODE: "<myInitUV.X()<<" "<myInitUV.Y()<myUV.X()<<" "<myUV.Y()<< endl; - // cout << "bndNode2: " << bndNode2->myUV.X()<<" "<myUV.Y()<myDir[iDir] = //aTgt[iDir]; - aNorm[1-iDir] * r + aTgt[iDir] * ( 1. - r ); - } -// cout << "NODE: "<myInitUV.X()<<" "<myInitUV.Y()<myDir[0].X() <<" "<myDir[0].Y()<<" | " -// << node->myDir[1].X() <<" "<myDir[1].Y()< startNodes; - list< TIsoNode* >::iterator nIt = bndNodes.end(); - TIsoNode* node = *(--nIt); - TIsoNode* prevNode = *(--nIt); - for ( nIt = bndNodes.begin(); nIt != bndNodes.end(); nIt++ ) - { - TIsoNode* nextNode = *nIt; - gp_Vec2d initTgt1( prevNode->myInitUV, node->myInitUV ); - gp_Vec2d initTgt2( node->myInitUV, nextNode->myInitUV ); - double initAngle = initTgt1.Angle( initTgt2 ); - double angle = node->myDir[0].Angle( node->myDir[1] ); - if ( reversed ) angle = -angle; - if ( initAngle > angle && initAngle - angle > PI / 2.1 ) { - // find a close internal node - TIsoNode* nClose = 0; - list< TIsoNode* > testNodes; - testNodes.push_back( node ); - list< TIsoNode* >::iterator it = testNodes.begin(); - for ( ; !nClose && it != testNodes.end(); it++ ) - { - for (int i = 0; i < 4; i++ ) - { - nClose = (*it)->myNext[ i ]; - if ( nClose ) { - if ( !nClose->IsUVComputed() ) - break; - else { - testNodes.push_back( nClose ); - nClose = 0; - } - } - } - } - startNodes.push_back( nClose ); -// cout << "START: "<myInitUV.X()<<" "<myInitUV.Y()<<" UV: "<< -// node->myUV.X()<<" "<myUV.Y()<myDir[ 0 ].X() <<" "<myDir[ 0 ].Y()<<" | "<< -// node->myDir[ 1 ].X() <<" "<myDir[ 1 ].Y()<myInitUV.X()<<" "<myInitUV.Y()< internNodes; - bool needIteration = true; - if ( startNodes.empty() ) { - MESSAGE( " Starting UV by compUVByIsoIntersection()"); - needIteration = false; - map < double, TIsoLine >& isos = isoMap[ 0 ]; - map < double, TIsoLine >::iterator isoIt = isos.begin(); - for ( ; isoIt != isos.end(); isoIt++ ) - { - TIsoLine & isoLine = (*isoIt).second; - TIsoLine::iterator nIt = isoLine.begin(); - for ( ; !needIteration && nIt != isoLine.end(); nIt++ ) - { - TIsoNode* node = *nIt; - if ( !node->IsUVComputed() && node->IsMovable() ) { - internNodes.push_back( node ); - //bool isDeformed; - if ( !compUVByIsoIntersection(theBndPoints, node->myInitUV, - node->myUV, needIteration )) - node->myUV = node->myInitUV; - } - } - } - if ( needIteration ) - for ( nIt = bndNodes.begin(); nIt != bndNodes.end(); nIt++ ) - { - TIsoNode* node = *nIt, *nClose = 0; - list< TIsoNode* > testNodes; - testNodes.push_back( node ); - list< TIsoNode* >::iterator it = testNodes.begin(); - for ( ; !nClose && it != testNodes.end(); it++ ) - { - for (int i = 0; i < 4; i++ ) - { - nClose = (*it)->myNext[ i ]; - if ( nClose ) { - if ( !nClose->IsUVComputed() && nClose->IsMovable() ) - break; - else { - testNodes.push_back( nClose ); - nClose = 0; - } - } - } - } - startNodes.push_back( nClose ); - } - } - - double aMin[2], aMax[2], step[2]; - uvBnd.Get( aMin[0], aMin[1], aMax[0], aMax[1] ); - double minUvSize = Min ( aMax[0]-aMin[0], aMax[1]-aMin[1] ); - step[0] = minUvSize / paramSet[ 0 ].size() / 10; - step[1] = minUvSize / paramSet[ 1 ].size() / 10; -//cout << "STEPS: " << step[0] << " " << step[1]<< endl; - - for ( nIt = startNodes.begin(); nIt != startNodes.end(); nIt++ ) - { - TIsoNode* prevN[2], *node = *nIt; - if ( node->IsUVComputed() || !node->IsMovable() ) - continue; - gp_XY newUV( 0, 0 ), sumDir( 0, 0 ); - int nbComp = 0, nbPrev = 0; - for ( iDir = 0; iDir < 2; iDir++ ) - { - TIsoNode* prevNode1 = 0, *prevNode2 = 0; - TIsoNode* n = node->GetNext( iDir, 0 ); - if ( n->IsUVComputed() ) - prevNode1 = n; - else - startNodes.push_back( n ); - n = node->GetNext( iDir, 1 ); - if ( n->IsUVComputed() ) - prevNode2 = n; - else - startNodes.push_back( n ); - if ( !prevNode1 ) { - prevNode1 = prevNode2; - prevNode2 = 0; - } - if ( prevNode1 ) nbPrev++; - if ( prevNode2 ) nbPrev++; - if ( prevNode1 ) { - gp_XY dir; - double prevPar = prevNode1->myInitUV.Coord( 2 - iDir ); - double par = node->myInitUV.Coord( 2 - iDir ); - bool isEnd = ( prevPar > par ); -// dir = node->myDir[ 1 - iDir ].XY() * ( isEnd ? -1. : 1. ); - //cout << "__________"<myInitUV.X()<<" "<myInitUV.Y()<GetBoundaryNode( iDir, isEnd ); - gp_XY tgt( bndNode->myDir[0].XY() + bndNode->myDir[1].XY() ); - dir.SetCoord( 1, tgt.Y() * ( reversed ? 1 : -1 )); - dir.SetCoord( 2, tgt.X() * ( reversed ? -1 : 1 )); - //cout << "bndNode UV: " << bndNode->myUV.X()<<" "<myUV.Y()<< endl; - // cout << " tgt: "<< bndNode->myDir[ 0 ].X() <<" "<myDir[ 0 ].Y()<<" | "<< - // bndNode->myDir[ 1 ].X() <<" "<myDir[ 1 ].Y()<myUV.X()<<" "<myUV.Y()<< - //" par: " << prevPar << endl; - // cout <<" tgt: " << tgt.X()<<" "<myInitUV.X()<<" "<myInitUV.Y()<myUV; - gp_XY & uv2 = prevNode2->myUV; -// dir = ( uv2 - uv1 ); -// double len = dir.Modulus(); -// if ( len > DBL_MIN ) -// dir /= len * 0.5; - double r = node->myRatio[ iDir ]; - newUV += uv1 * ( 1 - r ) + uv2 * r; - } - else { - newUV += prevNode1->myUV + dir * step[ iDir ]; - } - sumDir += dir; - prevN[ iDir ] = prevNode1; - nbComp++; - } - } - newUV /= nbComp; - node->myUV = newUV; - //cout << "NODE: "<myInitUV.X()<<" "<myInitUV.Y()< 1 ) { - //int crit = ( nbPrev == 4 ) ? FIX_OLD : CHECK_NEW_IN; - if ( !checkQuads( node, newUV, reversed, FIX_OLD, step[0] + step[1] )) { - //cout <<" newUV: " << node->myUV.X() << " "<myUV.Y() << " nbPrev: "<myUV = newUV; - } - } - internNodes.push_back( node ); - } - - // Move nodes - - static int maxNbIter = 100; -#ifdef DEB_COMPUVBYELASTICISOLINES -// maxNbIter++; - bool useNbMoveNode = 0; - static int maxNbNodeMove = 100; - maxNbNodeMove++; - int nbNodeMove = 0; - if ( !useNbMoveNode ) - maxNbIter = ( maxNbIter < 0 ) ? 100 : -1; -#endif - double maxMove; - int nbIter = 0; - do { - if ( !needIteration) break; -#ifdef DEB_COMPUVBYELASTICISOLINES - if ( nbIter >= maxNbIter ) break; -#endif - maxMove = 0.0; - list < TIsoNode* >::iterator nIt = internNodes.begin(); - for ( ; nIt != internNodes.end(); nIt++ ) { -#ifdef DEB_COMPUVBYELASTICISOLINES - if (useNbMoveNode ) - cout << nbNodeMove <<" =================================================="<GetNext( iDir, 0 )->myUV; - gp_XY & uv2 = node->GetNext( iDir, 1 )->myUV; - double r = node->myRatio[ iDir ]; - loc[ iDir ] = uv1 * ( 1 - r ) + uv2 * r; -// line[ iDir ].SetLocation( loc[ iDir ] ); -// line[ iDir ].SetDirection( node->myDir[ iDir ] ); - } - // define ratio - double locR[2] = { 0, 0 }; - for ( iDir = 0; iDir < 2; iDir++ ) - { - const int iCoord = 2 - iDir; // coord changing along an isoline - TIsoNode* bndNode1 = node->GetBoundaryNode( iDir, 0 ); - TIsoNode* bndNode2 = node->GetBoundaryNode( iDir, 1 ); - double par1 = bndNode1->myInitUV.Coord( iCoord ); - double par2 = node->myInitUV.Coord( iCoord ); - double par3 = bndNode2->myInitUV.Coord( iCoord ); - double r = ( par2 - par1 ) / ( par3 - par1 ); - r = Abs ( r - 0.5 ) * 2.0; // [0,1] - distance from the middle - locR[ iDir ] = ( 1 - r * r ) * 0.25; - } - //locR[0] = locR[1] = 0.25; - // intersect the 2 lines and move a node - //IntAna2d_AnaIntersection inter( line[0], line[1] ); - if ( /*inter.IsDone() && inter.NbPoints() ==*/ 1 ) - { -// double intR = 1 - locR[0] - locR[1]; -// gp_XY newUV = inter.Point(1).Value().XY(); -// if ( !checkQuads( node, newUV, reversed, CHECK_NEW_IN )) -// newUV = ( locR[0] * loc[0] + locR[1] * loc[1] ) / ( 1 - intR ); -// else -// newUV = intR * newUV + locR[0] * loc[0] + locR[1] * loc[1]; - gp_XY newUV = 0.5 * ( loc[0] + loc[1] ); - // avoid parallel isolines intersection - checkQuads( node, newUV, reversed ); - - maxMove = Max( maxMove, ( newUV - node->myUV ).SquareModulus()); - node->myUV = newUV; - } // intersection found -#ifdef DEB_COMPUVBYELASTICISOLINES - if (useNbMoveNode && ++nbNodeMove >= maxNbNodeMove ) break; -#endif - } // loop on internal nodes -#ifdef DEB_COMPUVBYELASTICISOLINES - if (useNbMoveNode && nbNodeMove >= maxNbNodeMove ) break; -#endif - } while ( maxMove > 1e-8 && nbIter++ < maxNbIter ); - - MESSAGE( "compUVByElasticIsolines(): Nb iterations " << nbIter << " dist: " << sqrt( maxMove )); - - if ( nbIter >= maxNbIter && sqrt(maxMove) > minUvSize * 0.05 ) { - MESSAGE( "compUVByElasticIsolines() failed: "<"<myUV; - double minDist = DBL_MAX; - list < TIsoNode >::iterator nIt = nodes.begin(); - for ( ; nIt != nodes.end(); nIt++ ) { - double dist = ( (*nIt).myInitUV - point->myInitUV ).SquareModulus(); - if ( dist < minDist ) { - minDist = dist; - point->myUV = (*nIt).myUV; - } - } - } - - - return true; -} - - -//======================================================================= -//function : setFirstEdge -//purpose : choose the best first edge of theWire; return the summary distance -// between point UV computed by isolines intersection and -// eventual UV got from edge p-curves -//======================================================================= - -//#define DBG_SETFIRSTEDGE -double SMESH_Pattern::setFirstEdge (list< TopoDS_Edge > & theWire, int theFirstEdgeID) -{ - int iE, nbEdges = theWire.size(); - if ( nbEdges == 1 ) - return 0; - - // Transform UVs computed by iso to fit bnd box of a wire - - // max nb of points on an edge - int maxNbPnt = 0; - int eID = theFirstEdgeID; - for ( iE = 0; iE < nbEdges; iE++ ) - maxNbPnt = Max ( maxNbPnt, getShapePoints( eID++ ).size() ); - - // compute bnd boxes - TopoDS_Face face = TopoDS::Face( myShape ); - Bnd_Box2d bndBox, eBndBox; - eID = theFirstEdgeID; - list< TopoDS_Edge >::iterator eIt; - list< TPoint* >::iterator pIt; - for ( eIt = theWire.begin(); eIt != theWire.end(); eIt++ ) - { - // UV by isos stored in TPoint.myXYZ - list< TPoint* > & ePoints = getShapePoints( eID++ ); - for ( pIt = ePoints.begin(); pIt != ePoints.end(); pIt++ ) { - TPoint* p = (*pIt); - bndBox.Add( gp_Pnt2d( p->myXYZ.X(), p->myXYZ.Y() )); - } - // UV by an edge p-curve - double f, l; - Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface( *eIt, face, f, l ); - double dU = ( l - f ) / ( maxNbPnt - 1 ); - for ( int i = 0; i < maxNbPnt; i++ ) - eBndBox.Add( C2d->Value( f + i * dU )); - } - - // transform UVs by isos - double minPar[2], maxPar[2], eMinPar[2], eMaxPar[2]; - bndBox.Get( minPar[0], minPar[1], maxPar[0], maxPar[1] ); - eBndBox.Get( eMinPar[0], eMinPar[1], eMaxPar[0], eMaxPar[1] ); -#ifdef DBG_SETFIRSTEDGE - cout << "EDGES: X: " << eMinPar[0] << " - " << eMaxPar[0] << " Y: " - << eMinPar[1] << " - " << eMaxPar[1] << endl; -#endif - for ( int iC = 1, i = 0; i < 2; iC++, i++ ) // loop on 2 coordinates - { - double dMin = eMinPar[i] - minPar[i]; - double dMax = eMaxPar[i] - maxPar[i]; - double dPar = maxPar[i] - minPar[i]; - eID = theFirstEdgeID; - for ( iE = 0; iE < nbEdges; iE++ ) // loop on edges of a boundary - { - list< TPoint* > & ePoints = getShapePoints( eID++ ); - for ( pIt = ++ePoints.begin(); pIt != ePoints.end(); pIt++ ) // loop on edge points - { - double par = (*pIt)->myXYZ.Coord( iC ); - double r = ( par - minPar[i] ) / dPar; - par += ( 1 - r ) * dMin + r * dMax; - (*pIt)->myXYZ.SetCoord( iC, par ); - } - } - } - - TopoDS_Edge eBest; - double minDist = DBL_MAX; - for ( iE = 0 ; iE < nbEdges; iE++ ) - { -#ifdef DBG_SETFIRSTEDGE - cout << " VARIANT " << iE << endl; -#endif - // evaluate the distance between UV computed by the 2 methods: - // by isos intersection ( myXYZ ) and by edge p-curves ( myUV ) - double dist = 0; - int eID = theFirstEdgeID; - for ( eIt = theWire.begin(); eIt != theWire.end(); eIt++ ) - { - list< TPoint* > & ePoints = getShapePoints( eID++ ); - computeUVOnEdge( *eIt, ePoints ); - for ( pIt = ++ePoints.begin(); pIt != ePoints.end(); pIt++ ) { - TPoint* p = (*pIt); - dist += ( p->myUV - gp_XY( p->myXYZ.X(), p->myXYZ.Y() )).SquareModulus(); -#ifdef DBG_SETFIRSTEDGE - cout << " ISO : ( " << p->myXYZ.X() << ", "<< p->myXYZ.Y() << " ) PCURVE : ( " << - p->myUV.X() << ", " << p->myUV.Y() << ") " << endl; -#endif - } - } -#ifdef DBG_SETFIRSTEDGE - cout << "dist -- " << dist << endl; -#endif - if ( dist < minDist ) { - minDist = dist; - eBest = theWire.front(); - } - // check variant with another first edge - theWire.splice( theWire.begin(), theWire, --theWire.end(), theWire.end() ); - } - // put the best first edge to the theWire front - if ( eBest != theWire.front() ) { - eIt = find ( theWire.begin(), theWire.end(), eBest ); - theWire.splice( theWire.begin(), theWire, eIt, theWire.end() ); - } - - return minDist; -} - -//======================================================================= -//function : sortSameSizeWires -//purpose : sort wires in theWireList from theFromWire until theToWire, -// the wires are set in the order to correspond to the order -// of boundaries; after sorting, edges in the wires are put -// in a good order, point UVs on edges are computed and points -// are appended to theEdgesPointsList -//======================================================================= - -bool SMESH_Pattern::sortSameSizeWires (TListOfEdgesList & theWireList, - const TListOfEdgesList::iterator& theFromWire, - const TListOfEdgesList::iterator& theToWire, - const int theFirstEdgeID, - list< list< TPoint* > >& theEdgesPointsList ) -{ - TopoDS_Face F = TopoDS::Face( myShape ); - int iW, nbWires = 0; - TListOfEdgesList::iterator wlIt = theFromWire; - while ( wlIt++ != theToWire ) - nbWires++; - - // Recompute key-point UVs by isolines intersection, - // compute CG of key-points for each wire and bnd boxes of GCs - - bool aBool; - gp_XY orig( gp::Origin2d().XY() ); - vector< gp_XY > vGcVec( nbWires, orig ), gcVec( nbWires, orig ); - Bnd_Box2d bndBox, vBndBox; - int eID = theFirstEdgeID; - list< TopoDS_Edge >::iterator eIt; - for ( iW = 0, wlIt = theFromWire; wlIt != theToWire; wlIt++, iW++ ) - { - list< TopoDS_Edge > & wire = *wlIt; - for ( eIt = wire.begin(); eIt != wire.end(); eIt++ ) - { - list< TPoint* > & ePoints = getShapePoints( eID++ ); - TPoint* p = ePoints.front(); - if ( !compUVByIsoIntersection( theEdgesPointsList, p->myInitUV, p->myUV, aBool )) { - MESSAGE("cant sortSameSizeWires()"); - return false; - } - gcVec[iW] += p->myUV; - bndBox.Add( gp_Pnt2d( p->myUV )); - TopoDS_Vertex V = TopExp::FirstVertex( *eIt, true ); - gp_Pnt2d vXY = BRep_Tool::Parameters( V, F ); - vGcVec[iW] += vXY.XY(); - vBndBox.Add( vXY ); - // keep the computed UV to compare against by setFirstEdge() - p->myXYZ.SetCoord( p->myUV.X(), p->myUV.Y(), 0. ); - } - gcVec[iW] /= nbWires; - vGcVec[iW] /= nbWires; -// cout << " Wire " << iW << " iso: " << gcVec[iW].X() << " " << gcVec[iW].Y() << endl << -// " \t vertex: " << vGcVec[iW].X() << " " << vGcVec[iW].Y() << endl; - } - - // Transform GCs computed by isos to fit in bnd box of GCs by vertices - - double minPar[2], maxPar[2], vMinPar[2], vMaxPar[2]; - bndBox.Get( minPar[0], minPar[1], maxPar[0], maxPar[1] ); - vBndBox.Get( vMinPar[0], vMinPar[1], vMaxPar[0], vMaxPar[1] ); - for ( int iC = 1, i = 0; i < 2; iC++, i++ ) // loop on 2 coordinates - { - double dMin = vMinPar[i] - minPar[i]; - double dMax = vMaxPar[i] - maxPar[i]; - double dPar = maxPar[i] - minPar[i]; - if ( Abs( dPar ) <= DBL_MIN ) - continue; - for ( iW = 0; iW < nbWires; iW++ ) { // loop on GCs of wires - double par = gcVec[iW].Coord( iC ); - double r = ( par - minPar[i] ) / dPar; - par += ( 1 - r ) * dMin + r * dMax; - gcVec[iW].SetCoord( iC, par ); - } - } - - // Define boundary - wire correspondence by GC closeness - - TListOfEdgesList tmpWList; - tmpWList.splice( tmpWList.end(), theWireList, theFromWire, theToWire ); - typedef map< int, TListOfEdgesList::iterator > TIntWirePosMap; - TIntWirePosMap bndIndWirePosMap; - vector< bool > bndFound( nbWires, false ); - for ( iW = 0, wlIt = tmpWList.begin(); iW < nbWires; iW++, wlIt++ ) - { -// cout << " TRSF Wire " << iW << " iso: " << gcVec[iW].X() << " " << gcVec[iW].Y() << endl << -// " \t vertex: " << vGcVec[iW].X() << " " << vGcVec[iW].Y() << endl; - double minDist = DBL_MAX; - gp_XY & wGc = vGcVec[ iW ]; - int bIndex; - for ( int iB = 0; iB < nbWires; iB++ ) { - if ( bndFound[ iB ] ) continue; - double dist = ( wGc - gcVec[ iB ] ).SquareModulus(); - if ( dist < minDist ) { - minDist = dist; - bIndex = iB; - } - } - bndFound[ bIndex ] = true; - bndIndWirePosMap.insert( TIntWirePosMap::value_type( bIndex, wlIt )); - } - - // Treat each wire - - TIntWirePosMap::iterator bIndWPosIt = bndIndWirePosMap.begin(); - eID = theFirstEdgeID; - for ( ; bIndWPosIt != bndIndWirePosMap.end(); bIndWPosIt++ ) - { - TListOfEdgesList::iterator wirePos = (*bIndWPosIt).second; - list < TopoDS_Edge > & wire = ( *wirePos ); - - // choose the best first edge of a wire - setFirstEdge( wire, eID ); - - // compute eventual UV and fill theEdgesPointsList - theEdgesPointsList.push_back( list< TPoint* >() ); - list< TPoint* > & edgesPoints = theEdgesPointsList.back(); - for ( eIt = wire.begin(); eIt != wire.end(); eIt++ ) - { - list< TPoint* > & ePoints = getShapePoints( eID++ ); - computeUVOnEdge( *eIt, ePoints ); - edgesPoints.insert( edgesPoints.end(), ePoints.begin(), (--ePoints.end())); - } - // put wire back to theWireList - wlIt = wirePos++; - theWireList.splice( theToWire, tmpWList, wlIt, wirePos ); - } - - return true; -} - -//======================================================================= -//function : Apply -//purpose : Compute nodes coordinates applying -// the loaded pattern to . The first key-point -// will be mapped into -//======================================================================= - -bool SMESH_Pattern::Apply (const TopoDS_Face& theFace, - const TopoDS_Vertex& theVertexOnKeyPoint1, - const bool theReverse) -{ - MESSAGE(" ::Apply(face) " ); - TopoDS_Face face = theReverse ? TopoDS::Face( theFace.Reversed() ) : theFace; - if ( !setShapeToMesh( face )) - return false; - - // find points on edges, it fills myNbKeyPntInBoundary - if ( !findBoundaryPoints() ) - return false; - - // Define the edges order so that the first edge starts at - // theVertexOnKeyPoint1 - - list< TopoDS_Edge > eList; - list< int > nbVertexInWires; - int nbWires = getOrderedEdges( face, theVertexOnKeyPoint1, eList, nbVertexInWires); - if ( !theVertexOnKeyPoint1.IsSame( TopExp::FirstVertex( eList.front(), true ))) - { - MESSAGE( " theVertexOnKeyPoint1 not found in the outer wire "); - return setErrorCode( ERR_APPLF_BAD_VERTEX ); - } - // check nb wires and edges - list< int > l1 = myNbKeyPntInBoundary, l2 = nbVertexInWires; - l1.sort(); l2.sort(); - if ( l1 != l2 ) - { - MESSAGE( "Wrong nb vertices in wires" ); - return setErrorCode( ERR_APPL_BAD_NB_VERTICES ); - } - - // here shapes get IDs, for the outer wire IDs are OK - list::iterator elIt = eList.begin(); - for ( ; elIt != eList.end(); elIt++ ) { - myShapeIDMap.Add( TopExp::FirstVertex( *elIt, true )); - if ( BRep_Tool::IsClosed( *elIt, theFace ) ) - myShapeIDMap.Add( TopExp::LastVertex( *elIt, true )); - } - int nbVertices = myShapeIDMap.Extent(); - - for ( elIt = eList.begin(); elIt != eList.end(); elIt++ ) - myShapeIDMap.Add( *elIt ); - - myShapeIDMap.Add( face ); - - if ( myShapeIDToPointsMap.size() != myShapeIDMap.Extent()/* + nbSeamShapes*/ ) { - MESSAGE( myShapeIDToPointsMap.size() <<" != " << myShapeIDMap.Extent()); - return setErrorCode( ERR_APPLF_INTERNAL_EEROR ); - } - - // 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 of points on the outer wire - int iE, nbEdgesInOuterWire = nbVertexInWires.front(); - for (iE = 0, elIt = eList.begin(); - iE < nbEdgesInOuterWire && elIt != eList.end(); - iE++, elIt++ ) - { - list< TPoint* > & ePoints = getShapePoints( *elIt ); - // compute UV - computeUVOnEdge( *elIt, ePoints ); - // collect on-edge points (excluding the last one) - edgesPoints->insert( edgesPoints->end(), ePoints.begin(), --ePoints.end()); - } - - // If there are several wires, define the order of edges of inner wires: - // compute UV of inner edge-points using 2 methods: the one for in-face points - // and the one for on-edge points and then choose the best edge order - // by the best correspondance of the 2 results - if ( nbWires > 1 ) - { - // compute UV of inner edge-points using the method for in-face points - // and devide eList into a list of separate wires - bool aBool; - list< list< TopoDS_Edge > > wireList; - list::iterator eIt = elIt; - list::iterator nbEIt = nbVertexInWires.begin(); - for ( nbEIt++; nbEIt != nbVertexInWires.end(); nbEIt++ ) - { - int nbEdges = *nbEIt; - wireList.push_back( list< TopoDS_Edge >() ); - list< TopoDS_Edge > & wire = wireList.back(); - for ( iE = 0 ; iE < nbEdges; eIt++, iE++ ) - { - list< TPoint* > & ePoints = getShapePoints( *eIt ); - pIt = ePoints.begin(); - for ( pIt++; pIt != ePoints.end(); pIt++ ) { - TPoint* p = (*pIt); - if ( !compUVByIsoIntersection( edgesPointsList, p->myInitUV, p->myUV, aBool )) { - MESSAGE("cant Apply(face)"); - return false; - } - // keep the computed UV to compare against by setFirstEdge() - p->myXYZ.SetCoord( p->myUV.X(), p->myUV.Y(), 0. ); - } - wire.push_back( *eIt ); - } - } - // remove inner edges from eList - eList.erase( elIt, eList.end() ); - - // sort wireList by nb edges in a wire - sortBySize< TopoDS_Edge > ( wireList ); - - // an ID of the first edge of a boundary - int id1 = nbVertices + nbEdgesInOuterWire + 1; -// if ( nbSeamShapes > 0 ) -// id1 += 2; // 2 vertices more - - // find points - edge correspondence for wires of unique size, - // edge order within a wire should be defined only - - list< list< TopoDS_Edge > >::iterator wlIt = wireList.begin(); - while ( wlIt != wireList.end() ) - { - list< TopoDS_Edge >& wire = (*wlIt); - int nbEdges = wire.size(); - wlIt++; - if ( wlIt == wireList.end() || (*wlIt).size() != nbEdges ) // a unique size wire - { - // choose the best first edge of a wire - setFirstEdge( wire, id1 ); - - // compute eventual UV and collect on-edge points - edgesPointsList.push_back( list< TPoint* >() ); - edgesPoints = & edgesPointsList.back(); - int eID = id1; - for ( eIt = wire.begin(); eIt != wire.end(); eIt++ ) - { - list< TPoint* > & ePoints = getShapePoints( eID++ ); - computeUVOnEdge( *eIt, ePoints ); - edgesPoints->insert( edgesPoints->end(), ePoints.begin(), (--ePoints.end())); - } - } - id1 += nbEdges; - } - - // find boundary - wire correspondence for several wires of same size - - id1 = nbVertices + nbEdgesInOuterWire + 1; - wlIt = wireList.begin(); - while ( wlIt != wireList.end() ) - { - int nbSameSize = 0, nbEdges = (*wlIt).size(); - list< list< TopoDS_Edge > >::iterator wlIt2 = wlIt; - wlIt2++; - while ( wlIt2 != wireList.end() && (*wlIt2).size() == nbEdges ) { // a same size wire - nbSameSize++; - wlIt2++; - } - if ( nbSameSize > 0 ) - if (!sortSameSizeWires(wireList, wlIt, wlIt2, id1, edgesPointsList)) - return false; - wlIt = wlIt2; - id1 += nbEdges * ( nbSameSize + 1 ); - } - - // add well-ordered edges to eList - - for ( wlIt = wireList.begin(); wlIt != wireList.end(); wlIt++ ) - { - list< TopoDS_Edge >& wire = (*wlIt); - eList.splice( eList.end(), wire, wire.begin(), wire.end() ); - } - - // re-fill myShapeIDMap - all shapes get good IDs - - myShapeIDMap.Clear(); - for ( elIt = eList.begin(); elIt != eList.end(); elIt++ ) - myShapeIDMap.Add( TopExp::FirstVertex( *elIt, true )); - for ( elIt = eList.begin(); elIt != eList.end(); elIt++ ) - myShapeIDMap.Add( *elIt ); - myShapeIDMap.Add( face ); - - } // there are inner wires - - // Compute XYZ of on-edge points - - TopLoc_Location loc; - for ( iE = nbVertices + 1, elIt = eList.begin(); elIt != eList.end(); elIt++ ) - { - double f,l; - Handle(Geom_Curve) C3d = BRep_Tool::Curve( *elIt, loc, f, l ); - const gp_Trsf & aTrsf = loc.Transformation(); - list< TPoint* > & ePoints = getShapePoints( iE++ ); - pIt = ePoints.begin(); - for ( pIt++; pIt != ePoints.end(); pIt++ ) - { - TPoint* point = *pIt; - point->myXYZ = C3d->Value( point->myU ); - if ( !loc.IsIdentity() ) - aTrsf.Transforms( point->myXYZ.ChangeCoord() ); - } - } - - // Compute UV and XYZ of in-face points - - // try to use a simple algo - list< TPoint* > & fPoints = getShapePoints( face ); - 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; - } - } - - Handle(Geom_Surface) aSurface = BRep_Tool::Surface( face, loc ); - const gp_Trsf & aTrsf = loc.Transformation(); - for ( pIt = fPoints.begin(); pIt != fPoints.end(); pIt++ ) - { - TPoint * point = *pIt; - point->myXYZ = aSurface->Value( point->myUV.X(), point->myUV.Y() ); - if ( !loc.IsIdentity() ) - aTrsf.Transforms( point->myXYZ.ChangeCoord() ); - } - - myIsComputed = true; - - 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 (const SMDS_MeshFace* theFace, - const int theNodeIndexOnKeyPoint1, - const bool theReverse) -{ -// MESSAGE(" ::Apply(MeshFace) " ); - - 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 = static_cast( 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 ); - } - list< gp_XYZ > xyzList; - myOrderedNodes.resize( theFace->NbNodes() ); - for ( iSub = 0, n = nodes.begin(); n != nodes.end(); ++n ) { - xyzList.push_back( gp_XYZ( (*n)->X(), (*n)->Y(), (*n)->Z() )); - myOrderedNodes[ iSub++] = *n; - } - - // Define a face plane - - list< gp_XYZ >::iterator xyzIt = xyzList.begin(); - gp_Pnt P ( *xyzIt++ ); - gp_Vec Vx( P, *xyzIt++ ), N; - do { - N = Vx ^ gp_Vec( P, *xyzIt++ ); - } while ( N.SquareMagnitude() <= DBL_MIN && xyzIt != xyzList.end() ); - if ( N.SquareMagnitude() <= DBL_MIN ) - return setErrorCode( ERR_APPLF_BAD_FACE_GEOM ); - gp_Ax2 pos( P, N, Vx ); - - // Compute UV of key-points on a plane - for ( xyzIt = xyzList.begin(), iSub = 1; xyzIt != xyzList.end(); xyzIt++, iSub++ ) - { - gp_Vec vec ( pos.Location(), *xyzIt ); - TPoint* p = getShapePoints( iSub ).front(); - p->myUV.SetX( vec * pos.XDirection() ); - p->myUV.SetY( vec * pos.YDirection() ); - p->myXYZ = *xyzIt; - } - - // 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 ( xyzIt = xyzList.begin(); xyzIt != xyzList.end(); iSub++ ) - { - gp_XYZ& xyz1 = *xyzIt++; - gp_XYZ& xyz2 = ( xyzIt != xyzList.end() ) ? *xyzIt : xyzList.front(); - - 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->myXYZ = xyz1 * ( 1 - p->myInitU ) + xyz2 * p->myInitU; - gp_Vec vec ( pos.Location(), p->myXYZ ); - p->myUV.SetX( vec * pos.XDirection() ); - p->myUV.SetY( vec * pos.YDirection() ); - } - // 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++ ) - { - (*pIt)->myXYZ = ElSLib::PlaneValue( (*pIt)->myUV.X(), (*pIt)->myUV.Y(), pos ); - } - - myIsComputed = true; - - return setErrorCode( ERR_OK ); -} - -//======================================================================= -//function : undefinedXYZ -//purpose : -//======================================================================= - -static const gp_XYZ& undefinedXYZ() -{ - static gp_XYZ xyz( 1.e100, 0., 0. ); - return xyz; -} - -//======================================================================= -//function : isDefined -//purpose : -//======================================================================= - -inline static bool isDefined(const gp_XYZ& theXYZ) -{ - return theXYZ.X() < 1.e100; -} - -//======================================================================= -//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 (std::set& theFaces, - const int theNodeIndexOnKeyPoint1, - const bool theReverse) -{ - MESSAGE(" ::Apply(set) " ); - - if ( !IsLoaded() ) { - MESSAGE( "Pattern not loaded" ); - return setErrorCode( ERR_APPL_NOT_LOADED ); - } - - // 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 ); - } - - myShape.Nullify(); - myXYZ.clear(); - myElemXYZIDs.clear(); - myXYZIdToNodeMap.clear(); - myElements.clear(); - myIdsOnBoundary.clear(); - myReverseConnectivity.clear(); - - myXYZ.resize( myPoints.size() * theFaces.size(), undefinedXYZ() ); - myElements.reserve( theFaces.size() ); - - // to find point index - map< TPoint*, int > pointIndex; - for ( int i = 0; i < myPoints.size(); i++ ) - pointIndex.insert( make_pair( & myPoints[ i ], i )); - - int ind1 = 0; // lowest point index for a face - - // apply to each face in theFaces set - set::iterator face = theFaces.begin(); - for ( ; face != theFaces.end(); ++face ) - { - if ( !Apply( *face, theNodeIndexOnKeyPoint1, theReverse )) { - MESSAGE( "Failed on " << *face ); - continue; - } - myElements.push_back( *face ); - - // store computed points belonging to elements - list< TElemDef >::iterator ll = myElemPointIDs.begin(); - for ( ; ll != myElemPointIDs.end(); ++ll ) - { - myElemXYZIDs.push_back(TElemDef()); - TElemDef& xyzIds = myElemXYZIDs.back(); - TElemDef& pIds = *ll; - for ( TElemDef::iterator id = pIds.begin(); id != pIds.end(); id++ ) { - int pIndex = *id + ind1; - xyzIds.push_back( pIndex ); - myXYZ[ pIndex ] = myPoints[ *id ].myXYZ.XYZ(); - myReverseConnectivity[ pIndex ].push_back( & xyzIds ); - } - } - // put points on links to myIdsOnBoundary, - // they will be used to sew new elements on adjacent refined elements - int nbNodes = (*face)->NbNodes(), eID = nbNodes + 1; - for ( int i = 0; i < nbNodes; i++ ) - { - list< TPoint* > & linkPoints = getShapePoints( eID++ ); - const SMDS_MeshNode* n1 = myOrderedNodes[ i ]; - const SMDS_MeshNode* n2 = myOrderedNodes[ i + 1 == nbNodes ? 0 : i + 1 ]; - // make a link and a node set - TNodeSet linkSet, node1Set; - linkSet.insert( n1 ); - linkSet.insert( n2 ); - node1Set.insert( n1 ); - list< TPoint* >::iterator p = linkPoints.begin(); - { - // map the first link point to n1 - int nId = pointIndex[ *p ] + ind1; - myXYZIdToNodeMap[ nId ] = n1; - list< list< int > >& groups = myIdsOnBoundary[ node1Set ]; - groups.push_back(list< int > ()); - groups.back().push_back( nId ); - } - // add the linkSet to the map - list< list< int > >& groups = myIdsOnBoundary[ linkSet ]; - groups.push_back(list< int > ()); - list< int >& indList = groups.back(); - // add points to the map excluding the end points - for ( p++; *p != linkPoints.back(); p++ ) - indList.push_back( pointIndex[ *p ] + ind1 ); - } - ind1 += myPoints.size(); - } - - return !myElemXYZIDs.empty(); -} - -//======================================================================= -//function : Apply -//purpose : Compute nodes coordinates applying -// the loaded pattern to . The (0,0,0) key-point -// will be mapped into -th node. The -// (0,0,1) key-point will be mapped into -th -// node. -//======================================================================= - -bool SMESH_Pattern::Apply (std::set & theVolumes, - const int theNode000Index, - const int theNode001Index) -{ - MESSAGE(" ::Apply(set) " ); - - if ( !IsLoaded() ) { - MESSAGE( "Pattern not loaded" ); - return setErrorCode( ERR_APPL_NOT_LOADED ); - } - - // bind ID to points - if ( !findBoundaryPoints() ) - return false; - - // check that there are no holes in a pattern - if (myNbKeyPntInBoundary.size() > 1 ) { - return setErrorCode( ERR_APPL_BAD_NB_VERTICES ); - } - - myShape.Nullify(); - myXYZ.clear(); - myElemXYZIDs.clear(); - myXYZIdToNodeMap.clear(); - myElements.clear(); - myIdsOnBoundary.clear(); - myReverseConnectivity.clear(); - - myXYZ.resize( myPoints.size() * theVolumes.size(), undefinedXYZ() ); - myElements.reserve( theVolumes.size() ); - - // to find point index - map< TPoint*, int > pointIndex; - for ( int i = 0; i < myPoints.size(); i++ ) - pointIndex.insert( make_pair( & myPoints[ i ], i )); - - int ind1 = 0; // lowest point index for an element - - // apply to each element in theVolumes set - set::iterator vol = theVolumes.begin(); - for ( ; vol != theVolumes.end(); ++vol ) - { - if ( !Apply( *vol, theNode000Index, theNode001Index )) { - MESSAGE( "Failed on " << *vol ); - continue; - } - myElements.push_back( *vol ); - - // store computed points belonging to elements - list< TElemDef >::iterator ll = myElemPointIDs.begin(); - for ( ; ll != myElemPointIDs.end(); ++ll ) - { - myElemXYZIDs.push_back(TElemDef()); - TElemDef& xyzIds = myElemXYZIDs.back(); - TElemDef& pIds = *ll; - for ( TElemDef::iterator id = pIds.begin(); id != pIds.end(); id++ ) { - int pIndex = *id + ind1; - xyzIds.push_back( pIndex ); - myXYZ[ pIndex ] = myPoints[ *id ].myXYZ.XYZ(); - myReverseConnectivity[ pIndex ].push_back( & xyzIds ); - } - } - // put points on edges and faces to myIdsOnBoundary, - // they will be used to sew new elements on adjacent refined elements - for ( int Id = SMESH_Block::ID_V000; Id <= SMESH_Block::ID_F1yz; Id++ ) - { - // make a set of sub-points - TNodeSet subNodes; - vector< int > subIDs; - if ( SMESH_Block::IsVertexID( Id )) { - subNodes.insert( myOrderedNodes[ Id - 1 ]); - } - else if ( SMESH_Block::IsEdgeID( Id )) { - SMESH_Block::GetEdgeVertexIDs( Id, subIDs ); - subNodes.insert( myOrderedNodes[ subIDs.front() - 1 ]); - subNodes.insert( myOrderedNodes[ subIDs.back() - 1 ]); - } - else { - SMESH_Block::GetFaceEdgesIDs( Id, subIDs ); - int e1 = subIDs[ 0 ], e2 = subIDs[ 1 ]; - SMESH_Block::GetEdgeVertexIDs( e1, subIDs ); - subNodes.insert( myOrderedNodes[ subIDs.front() - 1 ]); - subNodes.insert( myOrderedNodes[ subIDs.back() - 1 ]); - SMESH_Block::GetEdgeVertexIDs( e2, subIDs ); - subNodes.insert( myOrderedNodes[ subIDs.front() - 1 ]); - subNodes.insert( myOrderedNodes[ subIDs.back() - 1 ]); - } - // add points - list< TPoint* > & points = getShapePoints( Id ); - list< TPoint* >::iterator p = points.begin(); - list< list< int > >& groups = myIdsOnBoundary[ subNodes ]; - groups.push_back(list< int > ()); - list< int >& indList = groups.back(); - for ( ; p != points.end(); p++ ) - indList.push_back( pointIndex[ *p ] + ind1 ); - if ( subNodes.size() == 1 ) // vertex case - myXYZIdToNodeMap[ indList.back() ] = myOrderedNodes[ Id - 1 ]; - } - ind1 += myPoints.size(); - } - - return !myElemXYZIDs.empty(); -} - -//======================================================================= -//function : Load -//purpose : Create a pattern from the mesh built on -//======================================================================= - -bool SMESH_Pattern::Load (SMESH_Mesh* theMesh, - const TopoDS_Shell& theBlock) -{ - MESSAGE(" ::Load(volume) " ); - Clear(); - myIs2D = false; - SMESHDS_Mesh * aMeshDS = theMesh->GetMeshDS(); - - // load shapes in myShapeIDMap - SMESH_Block block; - TopoDS_Vertex v1, v2; - if ( !block.LoadBlockShapes( theBlock, v1, v2, myShapeIDMap )) - return setErrorCode( ERR_LOADV_BAD_SHAPE ); - - // count nodes - int nbNodes = 0, shapeID; - for ( shapeID = 1; shapeID <= myShapeIDMap.Extent(); shapeID++ ) - { - const TopoDS_Shape& S = myShapeIDMap( shapeID ); - SMESHDS_SubMesh * aSubMesh = aMeshDS->MeshElements( S ); - if ( aSubMesh ) - nbNodes += aSubMesh->NbNodes(); - } - myPoints.resize( nbNodes ); - - // load U of points on edges - TNodePointIDMap nodePointIDMap; - int iPoint = 0; - for ( shapeID = 1; shapeID <= myShapeIDMap.Extent(); shapeID++ ) - { - const TopoDS_Shape& S = myShapeIDMap( shapeID ); - list< TPoint* > & shapePoints = getShapePoints( shapeID ); - SMESHDS_SubMesh * aSubMesh = aMeshDS->MeshElements( S ); - if ( ! aSubMesh ) continue; - SMDS_NodeIteratorPtr nIt = aSubMesh->GetNodes(); - if ( !nIt->more() ) continue; - - // store a node and a point - while ( nIt->more() ) { - const SMDS_MeshNode* node = static_cast( nIt->next() ); - nodePointIDMap.insert( make_pair( node, iPoint )); - if ( block.IsVertexID( shapeID )) - myKeyPointIDs.push_back( iPoint ); - TPoint* p = & myPoints[ iPoint++ ]; - shapePoints.push_back( p ); - p->myXYZ.SetCoord( node->X(), node->Y(), node->Z() ); - p->myInitXYZ.SetCoord( 0,0,0 ); - } - list< TPoint* >::iterator pIt = shapePoints.begin(); - - // compute init XYZ - switch ( S.ShapeType() ) - { - case TopAbs_VERTEX: - case TopAbs_EDGE: { - - for ( ; pIt != shapePoints.end(); pIt++ ) { - double * coef = block.GetShapeCoef( shapeID ); - for ( int iCoord = 1; iCoord <= 3; iCoord++ ) - if ( coef[ iCoord - 1] > 0 ) - (*pIt)->myInitXYZ.SetCoord( iCoord, 1. ); - } - if ( S.ShapeType() == TopAbs_VERTEX ) - break; - - const TopoDS_Edge& edge = TopoDS::Edge( S ); - double f,l; - BRep_Tool::Range( edge, f, l ); - int iCoord = SMESH_Block::GetCoordIndOnEdge( shapeID ); - bool isForward = SMESH_Block::IsForwardEdge( edge, myShapeIDMap ); - pIt = shapePoints.begin(); - nIt = aSubMesh->GetNodes(); - for ( ; nIt->more(); pIt++ ) - { - const SMDS_MeshNode* node = - static_cast( nIt->next() ); - const SMDS_EdgePosition* epos = - static_cast(node->GetPosition().get()); - double u = ( epos->GetUParameter() - f ) / ( l - f ); - (*pIt)->myInitXYZ.SetCoord( iCoord, isForward ? u : 1 - u ); - } - break; - } - default: - for ( ; pIt != shapePoints.end(); pIt++ ) - { - if ( !block.ComputeParameters( (*pIt)->myXYZ, (*pIt)->myInitXYZ, shapeID )) { - MESSAGE( "!block.ComputeParameters()" ); - return setErrorCode( ERR_LOADV_COMPUTE_PARAMS ); - } - } - } - } // loop on block sub-shapes - - // load elements - - SMESHDS_SubMesh * aSubMesh = aMeshDS->MeshElements( theBlock ); - if ( aSubMesh ) - { - SMDS_ElemIteratorPtr elemIt = aSubMesh->GetElements(); - while ( elemIt->more() ) { - SMDS_ElemIteratorPtr nIt = elemIt->next()->nodesIterator(); - myElemPointIDs.push_back( TElemDef() ); - TElemDef& elemPoints = myElemPointIDs.back(); - while ( nIt->more() ) - elemPoints.push_back( nodePointIDMap[ nIt->next() ]); - } - } - - myIsBoundaryPointsFound = true; - - return setErrorCode( ERR_OK ); -} - -//======================================================================= -//function : Apply -//purpose : Compute nodes coordinates applying -// the loaded pattern to . The (0,0,0) key-point -// will be mapped into . The (0,0,1) -// fifth key-point will be mapped into . -//======================================================================= - -bool SMESH_Pattern::Apply (const TopoDS_Shell& theBlock, - const TopoDS_Vertex& theVertex000, - const TopoDS_Vertex& theVertex001) -{ - MESSAGE(" ::Apply(volume) " ); - - if (!findBoundaryPoints() || // bind ID to points - !setShapeToMesh( theBlock )) // check theBlock is a suitable shape - return false; - - SMESH_Block block; // bind ID to shape - if (!block.LoadBlockShapes( theBlock, theVertex000, theVertex001, myShapeIDMap )) - return setErrorCode( ERR_APPLV_BAD_SHAPE ); - - // compute XYZ of points on shapes - - for ( int shapeID = 1; shapeID <= myShapeIDMap.Extent(); shapeID++ ) - { - list< TPoint* > & shapePoints = getShapePoints( shapeID ); - list< TPoint* >::iterator pIt = shapePoints.begin(); - const TopoDS_Shape& S = myShapeIDMap( shapeID ); - switch ( S.ShapeType() ) - { - case TopAbs_VERTEX: { - - for ( ; pIt != shapePoints.end(); pIt++ ) - block.VertexPoint( shapeID, (*pIt)->myXYZ.ChangeCoord() ); - break; - } - case TopAbs_EDGE: { - - for ( ; pIt != shapePoints.end(); pIt++ ) - block.EdgePoint( shapeID, (*pIt)->myInitXYZ, (*pIt)->myXYZ.ChangeCoord() ); - break; - } - case TopAbs_FACE: { - - for ( ; pIt != shapePoints.end(); pIt++ ) - block.FacePoint( shapeID, (*pIt)->myInitXYZ, (*pIt)->myXYZ.ChangeCoord() ); - break; - } - default: - for ( ; pIt != shapePoints.end(); pIt++ ) - block.ShellPoint( (*pIt)->myInitXYZ, (*pIt)->myXYZ.ChangeCoord() ); - } - } // loop on block sub-shapes - - myIsComputed = true; - - return setErrorCode( ERR_OK ); -} - -//======================================================================= -//function : Apply -//purpose : Compute nodes coordinates applying -// the loaded pattern to . The (0,0,0) key-point -// will be mapped into -th node. The -// (0,0,1) key-point will be mapped into -th -// node. -//======================================================================= - -bool SMESH_Pattern::Apply (const SMDS_MeshVolume* theVolume, - const int theNode000Index, - const int theNode001Index) -{ - //MESSAGE(" ::Apply(MeshVolume) " ); - - if (!findBoundaryPoints()) // bind ID to points - return false; - - SMESH_Block block; // bind ID to shape - if (!block.LoadMeshBlock( theVolume, theNode000Index, theNode001Index, myOrderedNodes )) - return setErrorCode( ERR_APPLV_BAD_SHAPE ); - // compute XYZ of points on shapes - - for ( int ID = SMESH_Block::ID_V000; ID <= SMESH_Block::ID_Shell; ID++ ) - { - list< TPoint* > & shapePoints = getShapePoints( ID ); - list< TPoint* >::iterator pIt = shapePoints.begin(); - - if ( block.IsVertexID( ID )) - for ( ; pIt != shapePoints.end(); pIt++ ) { - block.VertexPoint( ID, (*pIt)->myXYZ.ChangeCoord() ); - } - else if ( block.IsEdgeID( ID )) - for ( ; pIt != shapePoints.end(); pIt++ ) { - block.EdgePoint( ID, (*pIt)->myInitXYZ, (*pIt)->myXYZ.ChangeCoord() ); - } - else if ( block.IsFaceID( ID )) - for ( ; pIt != shapePoints.end(); pIt++ ) { - block.FacePoint( ID, (*pIt)->myInitXYZ, (*pIt)->myXYZ.ChangeCoord() ); - } - else - for ( ; pIt != shapePoints.end(); pIt++ ) - block.ShellPoint( (*pIt)->myInitXYZ, (*pIt)->myXYZ.ChangeCoord() ); - } // loop on block sub-shapes - - myIsComputed = true; - - return setErrorCode( ERR_OK ); -} - -//======================================================================= -//function : mergePoints -//purpose : Merge XYZ on edges and/or faces. -//======================================================================= - -void SMESH_Pattern::mergePoints (const bool uniteGroups) -{ - map< TNodeSet, list< list< int > > >::iterator idListIt = myIdsOnBoundary.begin(); - for ( ; idListIt != myIdsOnBoundary.end(); idListIt++ ) - { - list >& groups = idListIt->second; - if ( groups.size() < 2 ) - continue; - - // find tolerance - const TNodeSet& nodes = idListIt->first; - double tol2 = 1.e-10; - if ( nodes.size() > 1 ) { - Bnd_Box box; - TNodeSet::const_iterator n = nodes.begin(); - for ( ; n != nodes.end(); ++n ) - box.Add( gp_Pnt( (*n)->X(), (*n)->Y(), (*n)->Z() )); - double x, y, z, X, Y, Z; - box.Get( x, y, z, X, Y, Z ); - gp_Pnt p( x, y, z ), P( X, Y, Z ); - tol2 = 1.e-4 * p.SquareDistance( P ); - } - - // to unite groups on link - bool unite = ( uniteGroups && nodes.size() == 2 ); - map< double, int > distIndMap; - const SMDS_MeshNode* node = *nodes.begin(); - gp_Pnt P( node->X(), node->Y(), node->Z() ); - - // compare points, replace indices - - list< int >::iterator ind1, ind2; - list< list< int > >::iterator grpIt1, grpIt2; - for ( grpIt1 = groups.begin(); grpIt1 != groups.end(); grpIt1++ ) - { - list< int >& indices1 = *grpIt1; - grpIt2 = grpIt1; - for ( grpIt2++; grpIt2 != groups.end(); grpIt2++ ) - { - list< int >& indices2 = *grpIt2; - for ( ind1 = indices1.begin(); ind1 != indices1.end(); ind1++ ) - { - gp_XYZ& p1 = myXYZ[ *ind1 ]; - ind2 = indices2.begin(); - while ( ind2 != indices2.end() ) - { - gp_XYZ& p2 = myXYZ[ *ind2 ]; - //MESSAGE("COMP: " << *ind1 << " " << *ind2 << " X: " << p2.X() << " tol2: " << tol2); - if ( ( p1 - p2 ).SquareModulus() <= tol2 ) - { - ASSERT( myReverseConnectivity.find( *ind2 ) != myReverseConnectivity.end() ); - list< TElemDef* > & elemXYZIDsList = myReverseConnectivity[ *ind2 ]; - list< TElemDef* >::iterator elemXYZIDs = elemXYZIDsList.begin(); - for ( ; elemXYZIDs != elemXYZIDsList.end(); elemXYZIDs++ ) - { - //MESSAGE( " Replace " << *ind2 << " with " << *ind1 ); - myXYZ[ *ind2 ] = undefinedXYZ(); - replace( (*elemXYZIDs)->begin(), (*elemXYZIDs)->end(), *ind2, *ind1 ); - } - ind2 = indices2.erase( ind2 ); - } - else - ind2++; - } - } - } - if ( unite ) { // sort indices using distIndMap - for ( ind1 = indices1.begin(); ind1 != indices1.end(); ind1++ ) - { - ASSERT( isDefined( myXYZ[ *ind1 ] )); - double dist = P.SquareDistance( myXYZ[ *ind1 ]); - distIndMap.insert( make_pair( dist, *ind1 )); - } - } - } - if ( unite ) { // put all sorted indices into the first group - list< int >& g = groups.front(); - g.clear(); - map< double, int >::iterator dist_ind = distIndMap.begin(); - for ( ; dist_ind != distIndMap.end(); dist_ind++ ) - g.push_back( dist_ind->second ); - } - } // loop on myIdsOnBoundary -} - -//======================================================================= -//function : makePolyElements -//purpose : prepare intermediate data to create Polygons and Polyhedrons -//======================================================================= - -void SMESH_Pattern:: - makePolyElements(const vector< const SMDS_MeshNode* >& theNodes, - const bool toCreatePolygons, - const bool toCreatePolyedrs) -{ - myPolyElemXYZIDs.clear(); - myPolyElems.clear(); - myPolyElems.reserve( myIdsOnBoundary.size() ); - - // make a set of refined elements - set< const SMDS_MeshElement* > avoidSet, elemSet; - avoidSet.insert( myElements.begin(), myElements.end() ); - - map< TNodeSet, list< list< int > > >::iterator indListIt, nn_IdList; - - if ( toCreatePolygons ) - { - int lastFreeId = myXYZ.size(); - - // loop on links of refined elements - indListIt = myIdsOnBoundary.begin(); - for ( ; indListIt != myIdsOnBoundary.end(); indListIt++ ) - { - const TNodeSet & linkNodes = indListIt->first; - if ( linkNodes.size() != 2 ) - continue; // skip face - const SMDS_MeshNode* n1 = * linkNodes.begin(); - const SMDS_MeshNode* n2 = * linkNodes.rbegin(); - - list >& idGroups = indListIt->second; // ids of nodes to build - if ( idGroups.empty() || idGroups.front().empty() ) - continue; - - // find not refined face having n1-n2 link - - while (true) - { - const SMDS_MeshElement* face = - SMESH_MeshEditor::FindFaceInSet( n1, n2, elemSet, avoidSet ); - if ( face ) - { - avoidSet.insert ( face ); - myPolyElems.push_back( face ); - - // some links of are split; - // make list of xyz for - myPolyElemXYZIDs.push_back(TElemDef()); - TElemDef & faceNodeIds = myPolyElemXYZIDs.back(); - // loop on links of a - SMDS_ElemIteratorPtr nIt = face->nodesIterator(); - int i = 0, nbNodes = face->NbNodes(); - vector nodes( nbNodes + 1 ); - while ( nIt->more() ) - nodes[ i++ ] = static_cast( nIt->next() ); - nodes[ i ] = nodes[ 0 ]; - for ( i = 0; i < nbNodes; ++i ) - { - // look for point mapped on a link - TNodeSet faceLinkNodes; - faceLinkNodes.insert( nodes[ i ] ); - faceLinkNodes.insert( nodes[ i + 1 ] ); - if ( faceLinkNodes == linkNodes ) - nn_IdList = indListIt; - else - nn_IdList = myIdsOnBoundary.find( faceLinkNodes ); - // add face point ids - faceNodeIds.push_back( ++lastFreeId ); - myXYZIdToNodeMap.insert( make_pair( lastFreeId, nodes[ i ])); - if ( nn_IdList != myIdsOnBoundary.end() ) - { - // there are points mapped on a link - list< int >& mappedIds = nn_IdList->second.front(); - if ( isReversed( nodes[ i ], mappedIds )) - faceNodeIds.insert (faceNodeIds.end(),mappedIds.rbegin(), mappedIds.rend() ); - else - faceNodeIds.insert (faceNodeIds.end(),mappedIds.begin(), mappedIds.end() ); - } - } // loop on links of a - } // if ( face ) - else - break; - } // while (true) - - if ( myIs2D && idGroups.size() > 1 ) { - - // sew new elements on 2 refined elements sharing n1-n2 link - - list< int >& idsOnLink = idGroups.front(); - // temporarily add ids of link nodes to idsOnLink - bool rev = isReversed( n1, idsOnLink ); - for ( int i = 0; i < 2; ++i ) - { - TNodeSet nodeSet; - nodeSet.insert( i ? n2 : n1 ); - ASSERT( myIdsOnBoundary.find( nodeSet ) != myIdsOnBoundary.end() ); - list >& groups = myIdsOnBoundary[ nodeSet ]; - int nodeId = groups.front().front(); - bool append = i; - if ( rev ) append = !append; - if ( append ) - idsOnLink.push_back( nodeId ); - else - idsOnLink.push_front( nodeId ); - } - list< int >::iterator id = idsOnLink.begin(); - for ( ; id != idsOnLink.end(); ++id ) // loop on XYZ ids on a link - { - list< TElemDef* >& elemDefs = myReverseConnectivity[ *id ]; // elems sharing id - list< TElemDef* >::iterator pElemDef = elemDefs.begin(); - for ( ; pElemDef != elemDefs.end(); pElemDef++ ) // loop on elements sharing id - { - TElemDef* pIdList = *pElemDef; // ptr on list of ids making element up - // look for in element definition - TElemDef::iterator idDef = find( pIdList->begin(), pIdList->end(), *id ); - ASSERT ( idDef != pIdList->end() ); - // look for 2 neighbour ids of in element definition - for ( int prev = 0; prev < 2; ++prev ) { - TElemDef::iterator idDef2 = idDef; - if ( prev ) - idDef2 = ( idDef2 == pIdList->begin() ) ? --pIdList->end() : --idDef2; - else - idDef2 = ( ++idDef2 == pIdList->end() ) ? pIdList->begin() : idDef2; - // look for idDef2 on a link starting from id - list< int >::iterator id2 = find( id, idsOnLink.end(), *idDef2 ); - if ( id2 != idsOnLink.end() && id != --id2 ) { // found not next to id - // insert ids located on link between and - // into the element definition between idDef and idDef2 - if ( prev ) - for ( ; id2 != id; --id2 ) - pIdList->insert( idDef, *id2 ); - else { - list< int >::iterator id1 = id; - for ( ++id1, ++id2; id1 != id2; ++id1 ) - pIdList->insert( idDef2, *id1 ); - } - } - } - } - } - // remove ids of link nodes - idsOnLink.pop_front(); - idsOnLink.pop_back(); - } - } // loop on myIdsOnBoundary - } // if ( toCreatePolygons ) - - if ( toCreatePolyedrs ) - { - // check volumes adjacent to the refined elements - SMDS_VolumeTool volTool; - vector::iterator refinedElem = myElements.begin(); - for ( ; refinedElem != myElements.end(); ++refinedElem ) - { - // loop on nodes of refinedElem - SMDS_ElemIteratorPtr nIt = (*refinedElem)->nodesIterator(); - while ( nIt->more() ) { - const SMDS_MeshNode* node = static_cast( nIt->next() ); - // loop on inverse elements of node - SMDS_ElemIteratorPtr eIt = node->GetInverseElementIterator(); - while ( eIt->more() ) - { - const SMDS_MeshElement* elem = eIt->next(); - if ( !volTool.Set( elem ) || !avoidSet.insert( elem ).second ) - continue; // skip faces or refined elements - // add polyhedron definition - myPolyhedronQuantities.push_back(vector ()); - myPolyElemXYZIDs.push_back(TElemDef()); - vector& quantity = myPolyhedronQuantities.back(); - TElemDef & elemDef = myPolyElemXYZIDs.back(); - // get definitions of new elements on volume faces - bool makePoly = false; - for ( int iF = 0; iF < volTool.NbFaces(); ++iF ) - { - if ( getFacesDefinition(volTool.GetFaceNodes( iF ), - volTool.NbFaceNodes( iF ), - theNodes, elemDef, quantity)) - makePoly = true; - } - if ( makePoly ) - myPolyElems.push_back( elem ); - else { - myPolyhedronQuantities.pop_back(); - myPolyElemXYZIDs.pop_back(); - } - } - } - } - } -} - -//======================================================================= -//function : getFacesDefinition -//purpose : return faces definition for a volume face defined by theBndNodes -//======================================================================= - -bool SMESH_Pattern:: - getFacesDefinition(const SMDS_MeshNode** theBndNodes, - const int theNbBndNodes, - const vector< const SMDS_MeshNode* >& theNodes, - list< int >& theFaceDefs, - vector& theQuantity) -{ - bool makePoly = false; -// cout << "FROM FACE NODES: " < bndNodeSet; - for ( int i = 0; i < theNbBndNodes; ++i ) - bndNodeSet.insert( theBndNodes[ i ]); - - map< TNodeSet, list< list< int > > >::iterator nn_IdList; - - // make a set of all nodes on a face - set< int > ids; - if ( !myIs2D ) { // for 2D, merge only edges - nn_IdList = myIdsOnBoundary.find( bndNodeSet ); - if ( nn_IdList != myIdsOnBoundary.end() ) { - makePoly = true; - list< int > & faceIds = nn_IdList->second.front(); - ids.insert( faceIds.begin(), faceIds.end() ); - } - } - //bool hasIdsInFace = !ids.empty(); - - // add ids on links and bnd nodes - int lastFreeId = Max( myXYZIdToNodeMap.rbegin()->first, theNodes.size() ); - TElemDef faceDef; // definition for the case if there is no new adjacent volumes - for ( int iN = 0; iN < theNbBndNodes; ++iN ) - { - // add id of iN-th bnd node - TNodeSet nSet; - nSet.insert( theBndNodes[ iN ] ); - nn_IdList = myIdsOnBoundary.find( nSet ); - int bndId = ++lastFreeId; - if ( nn_IdList != myIdsOnBoundary.end() ) { - bndId = nn_IdList->second.front().front(); - ids.insert( bndId ); - } - else - myXYZIdToNodeMap.insert( make_pair( bndId, theBndNodes[ iN ] )); - faceDef.push_back( bndId ); - // add ids on a link - TNodeSet linkNodes; - linkNodes.insert( theBndNodes[ iN ]); - linkNodes.insert( theBndNodes[ iN + 1 == theNbBndNodes ? 0 : iN + 1 ]); - nn_IdList = myIdsOnBoundary.find( linkNodes ); - if ( nn_IdList != myIdsOnBoundary.end() ) { - makePoly = true; - list< int > & linkIds = nn_IdList->second.front(); - ids.insert( linkIds.begin(), linkIds.end() ); - if ( isReversed( theBndNodes[ iN ], linkIds )) - faceDef.insert( faceDef.end(), linkIds.begin(), linkIds.end() ); - else - faceDef.insert( faceDef.end(), linkIds.rbegin(), linkIds.rend() ); - } - } - - // find faces definition of new volumes - - bool defsAdded = false; - if ( !myIs2D ) { // for 2D, merge only edges - SMDS_VolumeTool vol; - set< TElemDef* > checkedVolDefs; - set< int >::iterator id = ids.begin(); - for ( ; id != ids.end(); ++id ) - { - // definitions of volumes sharing id - list< TElemDef* >& defList = myReverseConnectivity[ *id ]; - ASSERT( !defList.empty() ); - // loop on volume definitions - list< TElemDef* >::iterator pIdList = defList.begin(); - for ( ; pIdList != defList.end(); ++pIdList) - { - if ( !checkedVolDefs.insert( *pIdList ).second ) - continue; // skip already checked volume definition - vector< int > idVec; - idVec.reserve( (*pIdList)->size() ); - idVec.insert( idVec.begin(), (*pIdList)->begin(), (*pIdList)->end() ); - // loop on face defs of a volume - SMDS_VolumeTool::VolumeType volType = vol.GetType( idVec.size() ); - if ( volType == SMDS_VolumeTool::UNKNOWN ) - continue; - int nbFaces = vol.NbFaces( volType ); - for ( int iF = 0; iF < nbFaces; ++iF ) - { - const int* nodeInds = vol.GetFaceNodesIndices( volType, iF, true ); - int iN, nbN = vol.NbFaceNodes( volType, iF ); - // check if all nodes of a faces are in - bool all = true; - for ( iN = 0; iN < nbN && all; ++iN ) { - int nodeId = idVec[ nodeInds[ iN ]]; - all = ( ids.find( nodeId ) != ids.end() ); - } - if ( all ) { - // store a face definition - for ( iN = 0; iN < nbN; ++iN ) { - theFaceDefs.push_back( idVec[ nodeInds[ iN ]]); - } - theQuantity.push_back( nbN ); - defsAdded = true; - } - } - } - } - } - if ( !defsAdded ) { - theQuantity.push_back( faceDef.size() ); - theFaceDefs.splice( theFaceDefs.end(), faceDef, faceDef.begin(), faceDef.end() ); - } - - return makePoly; -} - -//======================================================================= -//function : MakeMesh -//purpose : Create nodes and elements in using nodes -// coordinates computed by either of Apply...() methods -//======================================================================= - -bool SMESH_Pattern::MakeMesh(SMESH_Mesh* theMesh, - const bool toCreatePolygons, - const bool toCreatePolyedrs) -{ - MESSAGE(" ::MakeMesh() " ); - if ( !myIsComputed ) - return setErrorCode( ERR_MAKEM_NOT_COMPUTED ); - - mergePoints( toCreatePolygons ); - - SMESHDS_Mesh* aMeshDS = theMesh->GetMeshDS(); - - // clear elements and nodes existing on myShape - - if ( !myShape.IsNull() ) - { - SMESH_subMesh * aSubMesh = theMesh->GetSubMeshContaining( myShape ); - SMESHDS_SubMesh * aSubMeshDS = aMeshDS->MeshElements( myShape ); - if ( aSubMesh ) - aSubMesh->ComputeStateEngine( SMESH_subMesh::CLEAN ); - else if ( aSubMeshDS ) - { - SMDS_ElemIteratorPtr eIt = aSubMeshDS->GetElements(); - while ( eIt->more() ) - aMeshDS->RemoveElement( eIt->next() ); - SMDS_NodeIteratorPtr nIt = aSubMeshDS->GetNodes(); - while ( nIt->more() ) - aMeshDS->RemoveNode( static_cast( nIt->next() )); - } - } - - bool onMeshElements = ( !myElements.empty() ); - - vector< const SMDS_MeshNode* > nodesVector; // i-th point/xyz -> node - if ( onMeshElements ) - { - nodesVector.resize( Max( myXYZ.size(), myXYZIdToNodeMap.rbegin()->first ), 0 ); - map< int, const SMDS_MeshNode*>::iterator i_node = myXYZIdToNodeMap.begin(); - for ( ; i_node != myXYZIdToNodeMap.end(); i_node++ ) { - nodesVector[ i_node->first ] = i_node->second; - } - for ( int i = 0; i < myXYZ.size(); ++i ) { - if ( !nodesVector[ i ] && isDefined( myXYZ[ i ] ) ) - nodesVector[ i ] = aMeshDS->AddNode (myXYZ[ i ].X(), - myXYZ[ i ].Y(), - myXYZ[ i ].Z()); - } - } - else - { - nodesVector.resize( myPoints.size(), 0 ); - - // to find point index - map< TPoint*, int > pointIndex; - for ( int i = 0; i < myPoints.size(); i++ ) - pointIndex.insert( make_pair( & myPoints[ i ], i )); - - // loop on sub-shapes of myShape: create nodes - map< int, list< TPoint* > >::iterator idPointIt = myShapeIDToPointsMap.begin(); - for ( ; idPointIt != myShapeIDToPointsMap.end(); idPointIt++ ) - { - TopoDS_Shape S; - SMESHDS_SubMesh * subMeshDS = 0; - if ( !myShapeIDMap.IsEmpty() ) { - S = myShapeIDMap( idPointIt->first ); - subMeshDS = aMeshDS->MeshElements( S ); - } - list< TPoint* > & points = idPointIt->second; - list< TPoint* >::iterator pIt = points.begin(); - for ( ; pIt != points.end(); pIt++ ) - { - TPoint* point = *pIt; - int pIndex = pointIndex[ point ]; - if ( nodesVector [ pIndex ] ) - continue; - SMDS_MeshNode* node = aMeshDS->AddNode (point->myXYZ.X(), - point->myXYZ.Y(), - point->myXYZ.Z()); - nodesVector [ pIndex ] = node; - - if ( subMeshDS ) { - switch ( S.ShapeType() ) { - case TopAbs_VERTEX: { - aMeshDS->SetNodeOnVertex( node, TopoDS::Vertex( S )); - break; - } - case TopAbs_EDGE: { - aMeshDS->SetNodeOnEdge( node, TopoDS::Edge( S )); - SMDS_EdgePosition* epos = - dynamic_cast(node->GetPosition().get()); - epos->SetUParameter( point->myU ); - break; - } - case TopAbs_FACE: { - aMeshDS->SetNodeOnFace( node, TopoDS::Face( S )); - SMDS_FacePosition* pos = - dynamic_cast(node->GetPosition().get()); - pos->SetUParameter( point->myUV.X() ); - pos->SetVParameter( point->myUV.Y() ); - break; - } - default: - aMeshDS->SetNodeInVolume( node, TopoDS::Shell( S )); - } - } - } - } - } - - // create elements - - if ( onMeshElements ) - { - // prepare data to create poly elements - makePolyElements( nodesVector, toCreatePolygons, toCreatePolyedrs ); - - // refine elements - createElements( theMesh, nodesVector, myElemXYZIDs, myElements ); - // sew old and new elements - createElements( theMesh, nodesVector, myPolyElemXYZIDs, myPolyElems ); - } - else - { - createElements( theMesh, nodesVector, myElemPointIDs, myElements ); - } - -// const map& sm = aMeshDS->SubMeshes(); -// map::const_iterator i_sm = sm.begin(); -// for ( ; i_sm != sm.end(); i_sm++ ) -// { -// cout << " SM " << i_sm->first << " "; -// TopAbs::Print( aMeshDS->IndexToShape( i_sm->first ).ShapeType(), cout)<< " "; -// //SMDS_ElemIteratorPtr GetElements(); -// SMDS_NodeIteratorPtr nit = i_sm->second->GetNodes(); -// while ( nit->more() ) -// cout << nit->next()->GetID() << " "; -// cout << endl; -// } - return setErrorCode( ERR_OK ); -} - -//======================================================================= -//function : createElements -//purpose : add elements to the mesh -//======================================================================= - -void SMESH_Pattern::createElements(SMESH_Mesh* theMesh, - const vector& theNodesVector, - const list< TElemDef > & theElemNodeIDs, - const vector& theElements) -{ - SMESHDS_Mesh* aMeshDS = theMesh->GetMeshDS(); - SMESH_MeshEditor editor( theMesh ); - - bool onMeshElements = !theElements.empty(); - - // shapes and groups theElements are on - vector< int > shapeIDs; - vector< list< SMESHDS_Group* > > groups; - set< const SMDS_MeshNode* > shellNodes; - if ( onMeshElements ) - { - shapeIDs.resize( theElements.size() ); - groups.resize( theElements.size() ); - const set& allGroups = aMeshDS->GetGroups(); - set::const_iterator grIt; - for ( int i = 0; i < theElements.size(); i++ ) - { - shapeIDs[ i ] = editor.FindShape( theElements[ i ] ); - for ( grIt = allGroups.begin(); grIt != allGroups.end(); grIt++ ) { - SMESHDS_Group* group = dynamic_cast( *grIt ); - if ( group && group->SMDSGroup().Contains( theElements[ i ] )) - groups[ i ].push_back( group ); - } - } - // get all nodes bound to shells because their SpacePosition is not set - // by SMESHDS_Mesh::SetNodeInVolume() - TopoDS_Shape aMainShape = aMeshDS->ShapeToMesh(); - if ( !aMainShape.IsNull() ) { - TopExp_Explorer shellExp( aMainShape, TopAbs_SHELL ); - for ( ; shellExp.More(); shellExp.Next() ) - { - SMESHDS_SubMesh * sm = aMeshDS->MeshElements( shellExp.Current() ); - if ( sm ) { - SMDS_NodeIteratorPtr nIt = sm->GetNodes(); - while ( nIt->more() ) - shellNodes.insert( nIt->next() ); - } - } - } - } - // nb new elements per a refined element - int nbNewElemsPerOld = 1; - if ( onMeshElements ) - nbNewElemsPerOld = theElemNodeIDs.size() / theElements.size(); - - bool is2d = myIs2D; - - list< TElemDef >::const_iterator enIt = theElemNodeIDs.begin(); - list< vector >::iterator quantity = myPolyhedronQuantities.begin(); - for ( int iElem = 0; enIt != theElemNodeIDs.end(); enIt++, iElem++ ) - { - const TElemDef & elemNodeInd = *enIt; - // retrieve nodes - vector< const SMDS_MeshNode* > nodes( elemNodeInd.size() ); - TElemDef::const_iterator id = elemNodeInd.begin(); - int nbNodes; - for ( nbNodes = 0; id != elemNodeInd.end(); id++ ) { - if ( *id < theNodesVector.size() ) - nodes[ nbNodes++ ] = theNodesVector[ *id ]; - else - nodes[ nbNodes++ ] = myXYZIdToNodeMap[ *id ]; - } - // dim of refined elem - int elemIndex = iElem / nbNewElemsPerOld; // refined element index - if ( onMeshElements ) { - is2d = ( theElements[ elemIndex ]->GetType() == SMDSAbs_Face ); - } - // add an element - const SMDS_MeshElement* elem = 0; - if ( is2d ) { - switch ( nbNodes ) { - case 3: - elem = aMeshDS->AddFace( nodes[0], nodes[1], nodes[2] ); break; - case 4: - elem = aMeshDS->AddFace( nodes[0], nodes[1], nodes[2], nodes[3] ); break; - default: - elem = aMeshDS->AddPolygonalFace( nodes ); - } - } - else { - switch ( nbNodes ) { - case 4: - elem = aMeshDS->AddVolume (nodes[0], nodes[1], nodes[2], nodes[3] ); break; - case 5: - elem = aMeshDS->AddVolume (nodes[0], nodes[1], nodes[2], nodes[3], - nodes[4] ); break; - case 6: - elem = aMeshDS->AddVolume (nodes[0], nodes[1], nodes[2], nodes[3], - nodes[4], nodes[5] ); break; - case 8: - elem = aMeshDS->AddVolume (nodes[0], nodes[1], nodes[2], nodes[3], - nodes[4], nodes[5], nodes[6], nodes[7] ); break; - default: - elem = aMeshDS->AddPolyhedralVolume( nodes, *quantity++ ); - } - } - // set element on a shape - if ( elem && onMeshElements ) // applied to mesh elements - { - int shapeID = shapeIDs[ elemIndex ]; - if ( shapeID > 0 ) { - aMeshDS->SetMeshElementOnShape( elem, shapeID ); - // set nodes on a shape - TopoDS_Shape S = aMeshDS->IndexToShape( shapeID ); - if ( S.ShapeType() == TopAbs_SOLID ) { - TopoDS_Iterator shellIt( S ); - if ( shellIt.More() ) - shapeID = aMeshDS->ShapeToIndex( shellIt.Value() ); - } - SMDS_ElemIteratorPtr noIt = elem->nodesIterator(); - while ( noIt->more() ) { - SMDS_MeshNode* node = const_cast - ( static_cast( noIt->next() )); - if (!node->GetPosition()->GetShapeId() && - shellNodes.find( node ) == shellNodes.end() ) { - if ( S.ShapeType() == TopAbs_FACE ) - aMeshDS->SetNodeOnFace( node, shapeID ); - else { - aMeshDS->SetNodeInVolume( node, shapeID ); - shellNodes.insert( node ); - } - } - } - } - // add elem in groups - list< SMESHDS_Group* >::iterator g = groups[ elemIndex ].begin(); - for ( ; g != groups[ elemIndex ].end(); ++g ) - (*g)->SMDSGroup().Add( elem ); - } - if ( elem && !myShape.IsNull() ) // applied to shape - aMeshDS->SetMeshElementOnShape( elem, myShape ); - } - - // make that SMESH_subMesh::_computeState == COMPUTE_OK - // so that operations with hypotheses will erase the mesh being built - - SMESH_subMesh * subMesh; - if ( !myShape.IsNull() ) { - subMesh = theMesh->GetSubMeshContaining( myShape ); - if ( subMesh ) - subMesh->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE ); - } - if ( onMeshElements ) { - list< int > elemIDs; - for ( int i = 0; i < theElements.size(); i++ ) - { - subMesh = theMesh->GetSubMeshContaining( shapeIDs[ i ] ); - if ( subMesh ) - subMesh->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE ); - - elemIDs.push_back( theElements[ i ]->GetID() ); - } - // remove refined elements - editor.Remove( elemIDs, false ); - } -} - -//======================================================================= -//function : isReversed -//purpose : check xyz ids order in theIdsList taking into account -// theFirstNode on a link -//======================================================================= - -bool SMESH_Pattern::isReversed(const SMDS_MeshNode* theFirstNode, - const list< int >& theIdsList) const -{ - if ( theIdsList.size() < 2 ) - return false; - - gp_Pnt Pf ( theFirstNode->X(), theFirstNode->Y(), theFirstNode->Z() ); - gp_Pnt P[2]; - list::const_iterator id = theIdsList.begin(); - for ( int i = 0; i < 2; ++i, ++id ) { - if ( *id < myXYZ.size() ) - P[ i ] = myXYZ[ *id ]; - else { - map< int, const SMDS_MeshNode*>::const_iterator i_n; - i_n = myXYZIdToNodeMap.find( *id ); - ASSERT( i_n != myXYZIdToNodeMap.end() ); - const SMDS_MeshNode* n = i_n->second; - P[ i ].SetCoord( n->X(), n->Y(), n->Z() ); - } - } - return Pf.SquareDistance( P[ 1 ] ) < Pf.SquareDistance( P[ 0 ] ); -} - - -//======================================================================= -//function : arrangeBoundaries -//purpose : if there are several wires, arrange boundaryPoints so that -// the outer wire goes first and fix inner wires orientation -// update myKeyPointIDs to correspond to the order of key-points -// in boundaries; sort internal boundaries by the nb of key-points -//======================================================================= - -void SMESH_Pattern::arrangeBoundaries (list< list< TPoint* > >& boundaryList) -{ - typedef list< list< TPoint* > >::iterator TListOfListIt; - TListOfListIt bndIt; - list< TPoint* >::iterator pIt; - - int nbBoundaries = boundaryList.size(); - if ( nbBoundaries > 1 ) - { - // sort boundaries by nb of key-points - if ( nbBoundaries > 2 ) - { - // move boundaries in tmp list - list< list< TPoint* > > tmpList; - tmpList.splice( tmpList.begin(), boundaryList, boundaryList.begin(), boundaryList.end()); - // make a map nb-key-points to boundary-position-in-tmpList, - // boundary-positions get ordered in it - typedef map< int, TListOfListIt > TNbKpBndPosMap; - TNbKpBndPosMap nbKpBndPosMap; - bndIt = tmpList.begin(); - list< int >::iterator nbKpIt = myNbKeyPntInBoundary.begin(); - for ( ; nbKpIt != myNbKeyPntInBoundary.end(); nbKpIt++, bndIt++ ) { - int nb = *nbKpIt * nbBoundaries; - while ( nbKpBndPosMap.find ( nb ) != nbKpBndPosMap.end() ) - nb++; - nbKpBndPosMap.insert( TNbKpBndPosMap::value_type( nb, bndIt )); - } - // move boundaries back to boundaryList - TNbKpBndPosMap::iterator nbKpBndPosIt = nbKpBndPosMap.begin(); - for ( ; nbKpBndPosIt != nbKpBndPosMap.end(); nbKpBndPosIt++ ) { - TListOfListIt & bndPos2 = (*nbKpBndPosIt).second; - TListOfListIt bndPos1 = bndPos2++; - boundaryList.splice( boundaryList.end(), tmpList, bndPos1, bndPos2 ); - } - } - - // Look for the outer boundary: the one with the point with the least X - double leastX = DBL_MAX; - TListOfListIt outerBndPos; - for ( bndIt = boundaryList.begin(); bndIt != boundaryList.end(); bndIt++ ) - { - list< TPoint* >& boundary = (*bndIt); - for ( pIt = boundary.begin(); pIt != boundary.end(); pIt++) - { - TPoint* point = *pIt; - if ( point->myInitXYZ.X() < leastX ) { - leastX = point->myInitXYZ.X(); - outerBndPos = bndIt; - } - } - } - - if ( outerBndPos != boundaryList.begin() ) - boundaryList.splice( boundaryList.begin(), boundaryList, outerBndPos, ++outerBndPos ); - - } // if nbBoundaries > 1 - - // Check boundaries orientation and re-fill myKeyPointIDs - - set< TPoint* > keyPointSet; - list< int >::iterator kpIt = myKeyPointIDs.begin(); - for ( ; kpIt != myKeyPointIDs.end(); kpIt++ ) - keyPointSet.insert( & myPoints[ *kpIt ]); - myKeyPointIDs.clear(); - - // update myNbKeyPntInBoundary also - list< int >::iterator nbKpIt = myNbKeyPntInBoundary.begin(); - - for ( bndIt = boundaryList.begin(); bndIt != boundaryList.end(); bndIt++, nbKpIt++ ) - { - // find the point with the least X - double leastX = DBL_MAX; - list< TPoint* >::iterator xpIt; - list< TPoint* >& boundary = (*bndIt); - for ( pIt = boundary.begin(); pIt != boundary.end(); pIt++) - { - TPoint* point = *pIt; - if ( point->myInitXYZ.X() < leastX ) { - leastX = point->myInitXYZ.X(); - xpIt = pIt; - } - } - // find points next to the point with the least X - TPoint* p = *xpIt, *pPrev, *pNext; - if ( p == boundary.front() ) - pPrev = *(++boundary.rbegin()); - else { - xpIt--; - pPrev = *xpIt; - xpIt++; - } - if ( p == boundary.back() ) - pNext = *(++boundary.begin()); - else { - xpIt++; - pNext = *xpIt; - } - // vectors of boundary direction near

- gp_Vec2d v1( pPrev->myInitUV, p->myInitUV ), v2( p->myInitUV, pNext->myInitUV ); - double sqMag1 = v1.SquareMagnitude(), sqMag2 = v2.SquareMagnitude(); - if ( sqMag1 > DBL_MIN && sqMag2 > DBL_MIN ) { - double yPrev = v1.Y() / sqrt( sqMag1 ); - double yNext = v2.Y() / sqrt( sqMag2 ); - double sumY = yPrev + yNext; - bool reverse; - if ( bndIt == boundaryList.begin() ) // outer boundary - reverse = sumY > 0; - else - reverse = sumY < 0; - if ( reverse ) - boundary.reverse(); - } - - // Put key-point IDs of a well-oriented boundary in myKeyPointIDs - (*nbKpIt) = 0; // count nb of key-points again - pIt = boundary.begin(); - for ( ; pIt != boundary.end(); pIt++) - { - TPoint* point = *pIt; - if ( keyPointSet.find( point ) == keyPointSet.end() ) - continue; - // find an index of a keypoint - int index = 0; - vector< TPoint >::const_iterator pVecIt = myPoints.begin(); - for ( ; pVecIt != myPoints.end(); pVecIt++, index++ ) - if ( &(*pVecIt) == point ) - break; - myKeyPointIDs.push_back( index ); - (*nbKpIt)++; - } - myKeyPointIDs.pop_back(); // remove the first key-point from the back - (*nbKpIt)--; - - } // loop on a list of boundaries - - ASSERT( myKeyPointIDs.size() == keyPointSet.size() ); -} - -//======================================================================= -//function : findBoundaryPoints -//purpose : if loaded from file, find points to map on edges and faces and -// compute their parameters -//======================================================================= - -bool SMESH_Pattern::findBoundaryPoints() -{ - if ( myIsBoundaryPointsFound ) return true; - - MESSAGE(" findBoundaryPoints() "); - - if ( myIs2D ) - { - set< TPoint* > pointsInElems; - - // Find free links of elements: - // put links of all elements in a set and remove links encountered twice - - typedef pair< TPoint*, TPoint*> TLink; - set< TLink > linkSet; - list::iterator epIt = myElemPointIDs.begin(); - for ( ; epIt != myElemPointIDs.end(); epIt++ ) - { - TElemDef & elemPoints = *epIt; - TElemDef::iterator pIt = elemPoints.begin(); - int prevP = elemPoints.back(); - for ( ; pIt != elemPoints.end(); pIt++ ) { - TPoint* p1 = & myPoints[ prevP ]; - TPoint* p2 = & myPoints[ *pIt ]; - TLink link(( p1 < p2 ? p1 : p2 ), ( p1 < p2 ? p2 : p1 )); - ASSERT( link.first != link.second ); - pair::iterator,bool> itUniq = linkSet.insert( link ); - if ( !itUniq.second ) - linkSet.erase( itUniq.first ); - prevP = *pIt; - - pointsInElems.insert( p1 ); - } - } - // Now linkSet contains only free links, - // find the points order that they have in boundaries - - // 1. make a map of key-points - set< TPoint* > keyPointSet; - list< int >::iterator kpIt = myKeyPointIDs.begin(); - for ( ; kpIt != myKeyPointIDs.end(); kpIt++ ) - keyPointSet.insert( & myPoints[ *kpIt ]); - - // 2. chain up boundary points - list< list< TPoint* > > boundaryList; - boundaryList.push_back( list< TPoint* >() ); - list< TPoint* > * boundary = & boundaryList.back(); - - TPoint *point1, *point2, *keypoint1; - kpIt = myKeyPointIDs.begin(); - point1 = keypoint1 = & myPoints[ *kpIt++ ]; - // loop on free links: look for the next point - int iKeyPoint = 0; - set< TLink >::iterator lIt = linkSet.begin(); - while ( lIt != linkSet.end() ) - { - if ( (*lIt).first == point1 ) - point2 = (*lIt).second; - else if ( (*lIt).second == point1 ) - point2 = (*lIt).first; - else { - lIt++; - continue; - } - linkSet.erase( lIt ); - lIt = linkSet.begin(); - - if ( keyPointSet.find( point2 ) == keyPointSet.end() ) // not a key-point - { - boundary->push_back( point2 ); - } - else // a key-point found - { - keyPointSet.erase( point2 ); // keyPointSet contains not found key-points only - iKeyPoint++; - if ( point2 != keypoint1 ) // its not the boundary end - { - boundary->push_back( point2 ); - } - else // the boundary end reached - { - boundary->push_front( keypoint1 ); - boundary->push_back( keypoint1 ); - myNbKeyPntInBoundary.push_back( iKeyPoint ); - if ( keyPointSet.empty() ) - break; // all boundaries containing key-points are found - - // prepare to search for the next boundary - boundaryList.push_back( list< TPoint* >() ); - boundary = & boundaryList.back(); - point2 = keypoint1 = (*keyPointSet.begin()); - } - } - point1 = point2; - } // loop on the free links set - - if ( boundary->empty() ) { - MESSAGE(" a separate key-point"); - return setErrorCode( ERR_READ_BAD_KEY_POINT ); - } - - // if there are several wires, arrange boundaryPoints so that - // the outer wire goes first and fix inner wires orientation; - // sort myKeyPointIDs to correspond to the order of key-points - // in boundaries - arrangeBoundaries( boundaryList ); - - // Find correspondence shape ID - points, - // compute points parameter on edge - - keyPointSet.clear(); - for ( kpIt = myKeyPointIDs.begin(); kpIt != myKeyPointIDs.end(); kpIt++ ) - keyPointSet.insert( & myPoints[ *kpIt ]); - - set< TPoint* > edgePointSet; // to find in-face points - int vertexID = 1; // the first index in TopTools_IndexedMapOfShape - int edgeID = myKeyPointIDs.size() + 1; - - list< list< TPoint* > >::iterator bndIt = boundaryList.begin(); - for ( ; bndIt != boundaryList.end(); bndIt++ ) - { - boundary = & (*bndIt); - double edgeLength = 0; - list< TPoint* >::iterator pIt = boundary->begin(); - getShapePoints( edgeID ).push_back( *pIt ); - getShapePoints( vertexID++ ).push_back( *pIt ); - for ( pIt++; pIt != boundary->end(); pIt++) - { - list< TPoint* > & edgePoints = getShapePoints( edgeID ); - TPoint* prevP = edgePoints.empty() ? 0 : edgePoints.back(); - TPoint* point = *pIt; - edgePointSet.insert( point ); - if ( keyPointSet.find( point ) == keyPointSet.end() ) // inside-edge point - { - edgePoints.push_back( point ); - edgeLength += ( point->myInitUV - prevP->myInitUV ).Modulus(); - point->myInitU = edgeLength; - } - else // a key-point - { - // treat points on the edge which ends up: compute U [0,1] - edgePoints.push_back( point ); - if ( edgePoints.size() > 2 ) { - edgeLength += ( point->myInitUV - prevP->myInitUV ).Modulus(); - list< TPoint* >::iterator epIt = edgePoints.begin(); - for ( ; epIt != edgePoints.end(); epIt++ ) - (*epIt)->myInitU /= edgeLength; - } - // begin the next edge treatment - edgeLength = 0; - edgeID++; - if ( point != boundary->front() ) { // not the first key-point again - getShapePoints( edgeID ).push_back( point ); - getShapePoints( vertexID++ ).push_back( point ); - } - } - } - } - - // find in-face points - list< TPoint* > & facePoints = getShapePoints( edgeID ); - vector< TPoint >::iterator pVecIt = myPoints.begin(); - for ( ; pVecIt != myPoints.end(); pVecIt++ ) { - TPoint* point = &(*pVecIt); - if ( edgePointSet.find( point ) == edgePointSet.end() && - pointsInElems.find( point ) != pointsInElems.end()) - facePoints.push_back( point ); - } - - } // 2D case - - else // 3D case - { - // bind points to shapes according to point parameters - vector< TPoint >::iterator pVecIt = myPoints.begin(); - for ( int i = 0; pVecIt != myPoints.end(); pVecIt++, i++ ) { - TPoint* point = &(*pVecIt); - int shapeID = SMESH_Block::GetShapeIDByParams( point->myInitXYZ ); - getShapePoints( shapeID ).push_back( point ); - // detect key-points - if ( SMESH_Block::IsVertexID( shapeID )) - myKeyPointIDs.push_back( i ); - } - } - - myIsBoundaryPointsFound = true; - return myIsBoundaryPointsFound; -} - -//======================================================================= -//function : Clear -//purpose : clear fields -//======================================================================= - -void SMESH_Pattern::Clear() -{ - myIsComputed = myIsBoundaryPointsFound = false; - - myPoints.clear(); - myKeyPointIDs.clear(); - myElemPointIDs.clear(); - myShapeIDToPointsMap.clear(); - myShapeIDMap.Clear(); - myShape.Nullify(); - myNbKeyPntInBoundary.clear(); -} - -//======================================================================= -//function : setShapeToMesh -//purpose : set a shape to be meshed. Return True if meshing is possible -//======================================================================= - -bool SMESH_Pattern::setShapeToMesh(const TopoDS_Shape& theShape) -{ - if ( !IsLoaded() ) { - MESSAGE( "Pattern not loaded" ); - return setErrorCode( ERR_APPL_NOT_LOADED ); - } - - TopAbs_ShapeEnum aType = theShape.ShapeType(); - bool dimOk = ( myIs2D ? aType == TopAbs_FACE : aType == TopAbs_SHELL ); - if ( !dimOk ) { - MESSAGE( "Pattern dimention mismatch" ); - return setErrorCode( ERR_APPL_BAD_DIMENTION ); - } - - // check if a face is closed - int nbNodeOnSeamEdge = 0; - if ( myIs2D ) { - TopoDS_Face face = TopoDS::Face( theShape ); - TopExp_Explorer eExp( theShape, TopAbs_EDGE ); - for ( ; eExp.More() && nbNodeOnSeamEdge == 0; eExp.Next() ) - if ( BRep_Tool::IsClosed( TopoDS::Edge( eExp.Current() ), face )) - nbNodeOnSeamEdge = 2; - } - - // check nb of vertices - TopTools_IndexedMapOfShape vMap; - TopExp::MapShapes( theShape, TopAbs_VERTEX, vMap ); - if ( vMap.Extent() + nbNodeOnSeamEdge != myKeyPointIDs.size() ) { - MESSAGE( myKeyPointIDs.size() << " != " << vMap.Extent() ); - return setErrorCode( ERR_APPL_BAD_NB_VERTICES ); - } - - myElements.clear(); // not refine elements - myElemXYZIDs.clear(); - - myShapeIDMap.Clear(); - myShape = theShape; - return true; -} - -//======================================================================= -//function : GetMappedPoints -//purpose : Return nodes coordinates computed by Apply() method -//======================================================================= - -bool SMESH_Pattern::GetMappedPoints ( list< const gp_XYZ * > & thePoints ) const -{ - thePoints.clear(); - if ( !myIsComputed ) - return false; - - if ( myElements.empty() ) { // applied to shape - vector< TPoint >::const_iterator pVecIt = myPoints.begin(); - for ( ; pVecIt != myPoints.end(); pVecIt++ ) - thePoints.push_back( & (*pVecIt).myXYZ.XYZ() ); - } - else { // applied to mesh elements - const gp_XYZ * definedXYZ = & myPoints[ myKeyPointIDs.front() ].myXYZ.XYZ(); - vector::const_iterator xyz = myXYZ.begin(); - for ( ; xyz != myXYZ.end(); ++xyz ) - if ( !isDefined( *xyz )) - thePoints.push_back( definedXYZ ); - else - thePoints.push_back( & (*xyz) ); - } - return !thePoints.empty(); -} - - -//======================================================================= -//function : GetPoints -//purpose : Return nodes coordinates of the pattern -//======================================================================= - -bool SMESH_Pattern::GetPoints ( list< const gp_XYZ * > & thePoints ) const -{ - thePoints.clear(); - - if ( !IsLoaded() ) - return false; - - vector< TPoint >::const_iterator pVecIt = myPoints.begin(); - for ( ; pVecIt != myPoints.end(); pVecIt++ ) - thePoints.push_back( & (*pVecIt).myInitXYZ ); - - return ( thePoints.size() > 0 ); -} - -//======================================================================= -//function : getShapePoints -//purpose : return list of points located on theShape -//======================================================================= - -list< SMESH_Pattern::TPoint* > & - SMESH_Pattern::getShapePoints(const TopoDS_Shape& theShape) -{ - int aShapeID; - if ( !myShapeIDMap.Contains( theShape )) - aShapeID = myShapeIDMap.Add( theShape ); - else - aShapeID = myShapeIDMap.FindIndex( theShape ); - - return myShapeIDToPointsMap[ aShapeID ]; -} - -//======================================================================= -//function : getShapePoints -//purpose : return list of points located on the shape -//======================================================================= - -list< SMESH_Pattern::TPoint* > & SMESH_Pattern::getShapePoints(const int theShapeID) -{ - return myShapeIDToPointsMap[ theShapeID ]; -} - -//======================================================================= -//function : DumpPoints -//purpose : Debug -//======================================================================= - -void SMESH_Pattern::DumpPoints() const -{ -#ifdef _DEBUG_ - vector< TPoint >::const_iterator pVecIt = myPoints.begin(); - for ( int i = 0; pVecIt != myPoints.end(); pVecIt++, i++ ) - cout << i << ": " << *pVecIt; -#endif -} - -//======================================================================= -//function : TPoint() -//purpose : -//======================================================================= - -SMESH_Pattern::TPoint::TPoint() -{ -#ifdef _DEBUG_ - myInitXYZ.SetCoord(0,0,0); - myInitUV.SetCoord(0.,0.); - myInitU = 0; - myXYZ.SetCoord(0,0,0); - myUV.SetCoord(0.,0.); - myU = 0; -#endif -} - -//======================================================================= -//function : operator << -//purpose : -//======================================================================= - -ostream & operator <<(ostream & OS, const SMESH_Pattern::TPoint& p) -{ - gp_XYZ xyz = p.myInitXYZ; - OS << "\tinit( xyz( " << xyz.X() << " " << xyz.Y() << " " << xyz.Z() << " )"; - gp_XY xy = p.myInitUV; - OS << " uv( " << xy.X() << " " << xy.Y() << " )"; - double u = p.myInitU; - OS << " u( " << u << " )) " << &p << endl; - xyz = p.myXYZ.XYZ(); - OS << "\t ( xyz( " << xyz.X() << " " << xyz.Y() << " " << xyz.Z() << " )"; - xy = p.myUV; - OS << " uv( " << xy.X() << " " << xy.Y() << " )"; - u = p.myU; - OS << " u( " << u << " ))" << endl; - - return OS; -} diff --git a/src/SMESH/SMESH_Pattern.hxx b/src/SMESH/SMESH_Pattern.hxx deleted file mode 100644 index 373d2ef25..000000000 --- a/src/SMESH/SMESH_Pattern.hxx +++ /dev/null @@ -1,353 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -// File : SMESH_Pattern.hxx -// Created : Mon Aug 2 10:30:00 2004 -// Author : Edward AGAPOV (eap) - -#ifndef SMESH_Pattern_HeaderFile -#define SMESH_Pattern_HeaderFile - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -class SMDS_MeshElement; -class SMDS_MeshFace; -class SMDS_MeshVolume; -class SMDS_MeshNode; -class SMESH_Mesh; -class TopoDS_Shell; -class TopoDS_Vertex; -class TopoDS_Face; -class TopoDS_Edge; - -// -// Class allowing meshing by mapping of pre-defined patterns: it generates -// a 2D mesh on a geometrical face or a 3D mesh inside a geometrical block -// of 6 faces. -// - -class SMESH_Pattern { - public: - - SMESH_Pattern (); - - void Clear(); - // clear fields - - bool Load (const char* theFileContents); - // Load a pattern from - - bool Load (SMESH_Mesh* theMesh, - const TopoDS_Face& theFace, - bool theProject); - // Create a pattern from the mesh built on . - // ==true makes override nodes positions - // on computed by mesher - - bool Load (SMESH_Mesh* theMesh, - const TopoDS_Shell& theBlock); - // Create a pattern from the mesh built on - - bool Save (std::ostream& theFile); - // Save the loaded pattern into theFile - - bool Apply (const TopoDS_Face& theFace, - const TopoDS_Vertex& theVertexOnKeyPoint1, - const bool theReverse); - // Compute nodes coordinates applying - // the loaded pattern to . The first key-point - // will be mapped into , which must - // be in the outer wire of theFace - - bool Apply (const TopoDS_Shell& theBlock, - const TopoDS_Vertex& theVertex000, - const TopoDS_Vertex& theVertex001); - // Compute nodes coordinates applying - // the loaded pattern to . The (0,0,0) key-point - // will be mapped into . The - // (0,0,1) key-point will be mapped into . - - bool Apply (const SMDS_MeshFace* theFace, - 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 (std::set& theFaces, - 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 (const SMDS_MeshVolume* theVolume, - const int theNode000Index, - const int theNode001Index); - // Compute nodes coordinates applying - // the loaded pattern to . The (0,0,0) key-point - // will be mapped into -th node. The - // (0,0,1) key-point will be mapped into -th - // node. - - bool Apply (std::set& theVolumes, - const int theNode000Index, - const int theNode001Index); - // Compute nodes coordinates applying - // the loaded pattern to . The (0,0,0) key-point - // will be mapped into -th node. The - // (0,0,1) key-point will be mapped into -th - // node. - - bool GetMappedPoints ( std::list & thePoints ) const; - // Return nodes coordinates computed by Apply() method - - bool MakeMesh(SMESH_Mesh* theMesh, - const bool toCreatePolygons = false, - const bool toCreatePolyedrs = false); - // Create nodes and elements in using nodes - // coordinates computed by either of Apply...() methods - - - // Inquiries - - enum ErrorCode { - ERR_OK, - // Load(file) - ERR_READ_NB_POINTS, // couldn't read nb of points - ERR_READ_POINT_COORDS, // invalid nb of point coordinates - ERR_READ_TOO_FEW_POINTS, // too few points in a pattern - ERR_READ_3D_COORD, // coordinate of 3D point out of [0,1] range - ERR_READ_NO_KEYPOINT, // no key-points in 2D pattern - ERR_READ_BAD_INDEX, // invalid point index - ERR_READ_ELEM_POINTS, // invalid nb of points in element - ERR_READ_NO_ELEMS, // no elements in a pattern - ERR_READ_BAD_KEY_POINT, // a key-point not on a boundary - // Save(file) - ERR_SAVE_NOT_LOADED, // pattern was not loaded - // Load(shape) - ERR_LOAD_EMPTY_SUBMESH, // no elements to load - // Load(face) - ERR_LOADF_NARROW_FACE, // too narrow face - ERR_LOADF_CLOSED_FACE, // closed face - // Load(volume) - ERR_LOADV_BAD_SHAPE, // volume is not a brick of 6 faces - ERR_LOADV_COMPUTE_PARAMS, // cant compute point parameters - // Apply(shape) - ERR_APPL_NOT_COMPUTED, // mapping failed - ERR_APPL_NOT_LOADED, // pattern was not loaded - ERR_APPL_BAD_DIMENTION, // wrong shape dimention - ERR_APPL_BAD_NB_VERTICES, // keypoints - vertices mismatch - // Apply(face) - ERR_APPLF_BAD_TOPOLOGY, // bad pattern topology - ERR_APPLF_BAD_VERTEX, // first vertex not on an outer face boundary - ERR_APPLF_INTERNAL_EEROR, // program error - // Apply(volume) - ERR_APPLV_BAD_SHAPE, // volume is not a brick of 6 faces - // Apply(mesh_face) - ERR_APPLF_BAD_FACE_GEOM, // bad face geometry - // MakeMesh - ERR_MAKEM_NOT_COMPUTED // mapping failed - }; - - ErrorCode GetErrorCode() const { return myErrorCode; } - // return ErrorCode of the last operation - - bool IsLoaded() const { return !myPoints.empty() && !myElemPointIDs.empty(); } - // Return true if a pattern was successfully loaded - - bool Is2D() const { return myIs2D; } - // Return true if the loaded pattern is a 2D one - - bool GetPoints ( std::list & thePoints ) const; - // Return nodes coordinates of the pattern - - const std::list< int > & GetKeyPointIDs () const { return myKeyPointIDs; } - // Return indices of key-points within the sequences returned by - // GetPoints() and GetMappedPoints() - - const std::list< std::list< int > >& GetElementPointIDs (bool applied) const - { return myElemXYZIDs.empty() || !applied ? myElemPointIDs : myElemXYZIDs; } - // Return nodal connectivity of the elements of the pattern - - void DumpPoints() const; - // Debug - - - private: - // private methods - - struct TPoint { - gp_XYZ myInitXYZ; // loaded postion - gp_XY myInitUV; - double myInitU; // [0,1] - gp_Pnt myXYZ; // position to compute - gp_XY myUV; - double myU; - TPoint(); - }; - friend std::ostream & operator <<(std::ostream & OS, const TPoint& p); - - bool setErrorCode( const ErrorCode theErrorCode ) - { myErrorCode = theErrorCode; return myErrorCode == ERR_OK; } - // set ErrorCode and return true if it is Ok - - bool setShapeToMesh(const TopoDS_Shape& theShape); - // Set a shape to be meshed. Return True if meshing is possible - - list< TPoint* > & getShapePoints(const TopoDS_Shape& theShape); - // Return list of points located on theShape. - // A list of edge-points include vertex-points (for 2D pattern only). - // A list of face-points doesnt include edge-points. - // A list of volume-points doesnt include face-points. - - list< TPoint* > & getShapePoints(const int theShapeID); - // Return list of points located on the shape - - bool findBoundaryPoints(); - // If loaded from file, find points to map on edges and faces and - // compute their parameters - - void arrangeBoundaries (list< list< TPoint* > >& boundaryPoints); - // if there are several wires, arrange boundaryPoints so that - // the outer wire goes first and fix inner wires orientation; - // update myKeyPointIDs to correspond to the order of key-points - // in boundaries; sort internal boundaries by the nb of key-points - - void computeUVOnEdge( const TopoDS_Edge& theEdge, const list< TPoint* > & ePoints ); - // compute coordinates of points on theEdge - - bool compUVByIsoIntersection (const list< list< TPoint* > >& boundaryPoints, - const gp_XY& theInitUV, - gp_XY& theUV, - bool & theIsDeformed); - // compute UV by intersection of iso-lines found by points on edges - - bool compUVByElasticIsolines(const list< list< TPoint* > >& boundaryPoints, - const list< TPoint* >& pointsToCompute); - // compute UV as nodes of iso-poly-lines consisting of - // segments keeping relative size as in the pattern - - double setFirstEdge (list< TopoDS_Edge > & theWire, int theFirstEdgeID); - // choose the best first edge of theWire; return the summary distance - // between point UV computed by isolines intersection and - // eventual UV got from edge p-curves - - typedef list< list< TopoDS_Edge > > TListOfEdgesList; - - bool sortSameSizeWires (TListOfEdgesList & theWireList, - const TListOfEdgesList::iterator& theFromWire, - const TListOfEdgesList::iterator& theToWire, - const int theFirstEdgeID, - list< list< TPoint* > >& theEdgesPointsList ); - // sort wires in theWireList from theFromWire until theToWire, - // the wires are set in the order to correspond to the order - // of boundaries; after sorting, edges in the wires are put - // in a good order, point UVs on edges are computed and points - // are appended to theEdgesPointsList - - typedef std::set TNodeSet; - - void mergePoints (const bool uniteGroups); - // Merge XYZ on edges and/or faces. - - void makePolyElements(const std::vector< const SMDS_MeshNode* >& theNodes, - const bool toCreatePolygons, - const bool toCreatePolyedrs); - // prepare intermediate data to create Polygons and Polyhedrons - - void createElements(SMESH_Mesh* theMesh, - const std::vector& theNodesVector, - const std::list< std::list< int > > & theElemNodeIDs, - const std::vector& theElements); - // add elements to the mesh - - bool getFacesDefinition(const SMDS_MeshNode** theBndNodes, - const int theNbBndNodes, - const std::vector< const SMDS_MeshNode* >& theNodes, - std::list< int >& theFaceDefs, - std::vector& theQuantity); - // fill faces definition for a volume face defined by theBndNodes - // return true if a face definition changes - - - bool isReversed(const SMDS_MeshNode* theFirstNode, - const std::list< int >& theIdsList) const; - // check xyz ids order in theIdsList taking into account - // theFirstNode on a link - - private: - // fields - - typedef std::list< int > TElemDef; // element definition is its nodes ids - - bool myIs2D; - std::vector< TPoint > myPoints; - std::list< int > myKeyPointIDs; - std::list< TElemDef > myElemPointIDs; - - ErrorCode myErrorCode; - bool myIsComputed; - bool myIsBoundaryPointsFound; - - TopoDS_Shape myShape; - // all functions assure that shapes are indexed so that first go - // ordered vertices, then ordered edge, then faces and maybe a shell - TopTools_IndexedMapOfOrientedShape myShapeIDMap; - std::map< int, list< TPoint* > > myShapeIDToPointsMap; - - // for the 2d case: - // nb of key-points in each of pattern boundaries - std::list< int > myNbKeyPntInBoundary; - - - // to compute while applying to mesh elements, not to shapes - - std::vector myXYZ; // XYZ of nodes to create - std::list< TElemDef > myElemXYZIDs; // new elements definitions - std::map< int, const SMDS_MeshNode*> myXYZIdToNodeMap; // map XYZ id to node of a refined element - std::vector myElements; // refined elements - std::vector myOrderedNodes; - - // elements to replace with polygon or polyhedron - std::vector myPolyElems; - // definitions of new poly elements - std::list< TElemDef > myPolyElemXYZIDs; - std::list< std::vector > myPolyhedronQuantities; - - // map a boundary to XYZs on it; - // a boundary (edge or face) is defined as a set of its nodes, - // XYZs on a boundary are indices of myXYZ s - std::map > > myIdsOnBoundary; - // map XYZ id to element it is in - std::map< int, std::list< TElemDef* > > myReverseConnectivity; -}; - - -#endif diff --git a/src/SMESH/SMESH_subMesh.cxx b/src/SMESH/SMESH_subMesh.cxx deleted file mode 100644 index 163a8a45f..000000000 --- a/src/SMESH/SMESH_subMesh.cxx +++ /dev/null @@ -1,1698 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_subMesh.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "SMESH_subMesh.hxx" -#include "SMESH_Gen.hxx" -#include "SMESH_Mesh.hxx" -#include "SMESH_Hypothesis.hxx" -#include "SMESH_Algo.hxx" -#include "SMESH_HypoFilter.hxx" - -#include "utilities.h" -#include "OpUtil.hxx" - -#include - -#include -#include -#include -#include -#include -#include - -#include - -#ifdef _DEBUG_ -#include -#include -#include -#endif - -//============================================================================= -/*! - * default constructor: - */ -//============================================================================= - -SMESH_subMesh::SMESH_subMesh(int Id, SMESH_Mesh * father, SMESHDS_Mesh * meshDS, - const TopoDS_Shape & aSubShape) -{ - _subShape = aSubShape; - _meshDS = meshDS; - _subMeshDS = meshDS->MeshElements(_subShape); // may be null ... - _father = father; - _Id = Id; - _dependenceAnalysed = false; - - if (_subShape.ShapeType() == TopAbs_VERTEX) - { - _algoState = HYP_OK; - _computeState = READY_TO_COMPUTE; - } - else - { - _algoState = NO_ALGO; - _computeState = NOT_READY; - } -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_subMesh::~SMESH_subMesh() -{ - MESSAGE("SMESH_subMesh::~SMESH_subMesh"); - // **** -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -int SMESH_subMesh::GetId() const -{ - //MESSAGE("SMESH_subMesh::GetId"); - return _Id; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESHDS_SubMesh * SMESH_subMesh::GetSubMeshDS() -{ - //MESSAGE("SMESH_subMesh::GetSubMeshDS"); - if (_subMeshDS==NULL) - { - //MESSAGE("subMesh pointer still null, trying to get it..."); - _subMeshDS = _meshDS->MeshElements(_subShape); // may be null ... - if (_subMeshDS==NULL) - { - MESSAGE("problem... subMesh still empty"); - //NRI ASSERT(0); - //NRI throw SALOME_Exception(LOCALIZED(subMesh still empty)); - } - } - return _subMeshDS; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESHDS_SubMesh* SMESH_subMesh::CreateSubMeshDS() -{ - if ( !GetSubMeshDS() ) - _meshDS->NewSubMesh( _meshDS->ShapeToIndex( _subShape ) ); - - return GetSubMeshDS(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_subMesh *SMESH_subMesh::GetFirstToCompute() -{ - //MESSAGE("SMESH_subMesh::GetFirstToCompute"); - const map < int, SMESH_subMesh * >&subMeshes = DependsOn(); - SMESH_subMesh *firstToCompute = 0; - - map < int, SMESH_subMesh * >::const_iterator itsub; - for (itsub = subMeshes.begin(); itsub != subMeshes.end(); itsub++) - { - SMESH_subMesh *sm = (*itsub).second; - // SCRUTE(sm->GetId()); - // SCRUTE(sm->GetComputeState()); - bool readyToCompute = (sm->GetComputeState() == READY_TO_COMPUTE); - if (readyToCompute) - { - firstToCompute = sm; - //SCRUTE(sm->GetId()); - break; - } - } - if (firstToCompute) - { - return firstToCompute; // a subMesh of this - } - if (_computeState == READY_TO_COMPUTE) - { - return this; // this - } - return 0; // nothing to compute -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool SMESH_subMesh::SubMeshesComputed() -{ - //MESSAGE("SMESH_subMesh::SubMeshesComputed"); - const map < int, SMESH_subMesh * >&subMeshes = DependsOn(); - - bool subMeshesComputed = true; - map < int, SMESH_subMesh * >::const_iterator itsub; - for (itsub = subMeshes.begin(); itsub != subMeshes.end(); itsub++) - { - SMESH_subMesh *sm = (*itsub).second; - - const TopoDS_Shape & ss = sm->GetSubShape(); - int type = ss.ShapeType(); - bool computeOk = (sm->GetComputeState() == COMPUTE_OK); - if (!computeOk) - { - subMeshesComputed = false; - - switch (type) - { - case TopAbs_COMPOUND: - { - MESSAGE("The not computed sub mesh is a COMPOUND"); - break; - } - case TopAbs_COMPSOLID: - { - MESSAGE("The not computed sub mesh is a COMPSOLID"); - break; - } - case TopAbs_SHELL: - { - MESSAGE("The not computed sub mesh is a SHEL"); - break; - } - case TopAbs_WIRE: - { - MESSAGE("The not computed sub mesh is a WIRE"); - break; - } - case TopAbs_SOLID: - { - MESSAGE("The not computed sub mesh is a SOLID"); - break; - } - case TopAbs_FACE: - { - MESSAGE("The not computed sub mesh is a FACE"); - break; - } - case TopAbs_EDGE: - { - MESSAGE("The not computed sub mesh is a EDGE"); - break; - } - default: - { - MESSAGE("The not computed sub mesh is of unknown type"); - break; - } - } - - break; - } - } - return subMeshesComputed; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool SMESH_subMesh::SubMeshesReady() -{ - MESSAGE("SMESH_subMesh::SubMeshesReady"); - const map < int, SMESH_subMesh * >&subMeshes = DependsOn(); - - bool subMeshesReady = true; - map < int, SMESH_subMesh * >::const_iterator itsub; - for (itsub = subMeshes.begin(); itsub != subMeshes.end(); itsub++) - { - SMESH_subMesh *sm = (*itsub).second; - bool computeOk = ((sm->GetComputeState() == COMPUTE_OK) - || (sm->GetComputeState() == READY_TO_COMPUTE)); - if (!computeOk) - { - subMeshesReady = false; - SCRUTE(sm->GetId()); - break; - } - } - return subMeshesReady; -} - -//============================================================================= -/*! - * Construct dependence on first level subMeshes. complex shapes (compsolid, - * shell, wire) are not analysed the same way as simple shapes (solid, face, - * edge). - * For collection shapes (compsolid, shell, wire) prepare a list of submeshes - * with possible multiples occurences. Multiples occurences corresponds to - * internal frontiers within shapes of the collection and must not be keeped. - * See FinalizeDependence. - */ -//============================================================================= - -const map < int, SMESH_subMesh * >&SMESH_subMesh::DependsOn() -{ - if (_dependenceAnalysed) - return _mapDepend; - - //MESSAGE("SMESH_subMesh::DependsOn"); - - int type = _subShape.ShapeType(); - //SCRUTE(type); - switch (type) - { - case TopAbs_COMPOUND: - { - //MESSAGE("compound"); - for (TopExp_Explorer exp(_subShape, TopAbs_SOLID); exp.More(); - exp.Next()) - { - InsertDependence(exp.Current()); - } - for (TopExp_Explorer exp(_subShape, TopAbs_SHELL, TopAbs_SOLID); exp.More(); - exp.Next()) - { - InsertDependence(exp.Current()); //only shell not in solid - } - for (TopExp_Explorer exp(_subShape, TopAbs_FACE, TopAbs_SHELL); exp.More(); - exp.Next()) - { - InsertDependence(exp.Current()); - } - for (TopExp_Explorer exp(_subShape, TopAbs_EDGE, TopAbs_FACE); exp.More(); - exp.Next()) - { - InsertDependence(exp.Current()); - } - break; - } - case TopAbs_COMPSOLID: - { - //MESSAGE("compsolid"); - for (TopExp_Explorer exp(_subShape, TopAbs_SOLID); exp.More(); - exp.Next()) - { - InsertDependence(exp.Current()); - } - break; - } - case TopAbs_SHELL: - { - //MESSAGE("shell"); - for (TopExp_Explorer exp(_subShape, TopAbs_FACE); exp.More(); - exp.Next()) - { - InsertDependence(exp.Current()); - } - break; - } - case TopAbs_WIRE: - { - //MESSAGE("wire"); - for (TopExp_Explorer exp(_subShape, TopAbs_EDGE); exp.More(); - exp.Next()) - { - InsertDependence(exp.Current()); - } - break; - } - case TopAbs_SOLID: - { - //MESSAGE("solid"); - for (TopExp_Explorer exp(_subShape, TopAbs_FACE); exp.More(); - exp.Next()) - { - InsertDependence(exp.Current()); - } - break; - } - case TopAbs_FACE: - { - //MESSAGE("face"); - for (TopExp_Explorer exp(_subShape, TopAbs_EDGE); exp.More(); - exp.Next()) - { - InsertDependence(exp.Current()); - } - break; - } - case TopAbs_EDGE: - { - //MESSAGE("edge"); - for (TopExp_Explorer exp(_subShape, TopAbs_VERTEX); exp.More(); - exp.Next()) - { - InsertDependence(exp.Current()); - } - break; - } - case TopAbs_VERTEX: - { - break; - } - default: - { - break; - } - } - _dependenceAnalysed = true; - return _mapDepend; -} - -//============================================================================= -/*! - * For simple Shapes (solid, face, edge): add subMesh into dependence list. - */ -//============================================================================= - -void SMESH_subMesh::InsertDependence(const TopoDS_Shape aSubShape) -{ - //MESSAGE("SMESH_subMesh::InsertDependence"); - SMESH_subMesh *aSubMesh = _father->GetSubMesh(aSubShape); - int type = aSubShape.ShapeType(); - int ordType = 9 - type; // 2 = Vertex, 8 = CompSolid - int cle = aSubMesh->GetId(); - cle += 10000000 * ordType; // sort map by ordType then index - if (_mapDepend.find(cle) == _mapDepend.end()) - { - _mapDepend[cle] = aSubMesh; - const map < int, SMESH_subMesh * >&subMap = aSubMesh->DependsOn(); - map < int, SMESH_subMesh * >::const_iterator im; - for (im = subMap.begin(); im != subMap.end(); im++) - { - int clesub = (*im).first; - SMESH_subMesh *sm = (*im).second; - if (_mapDepend.find(clesub) == _mapDepend.end()) - _mapDepend[clesub] = sm; - } - } - -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -const TopoDS_Shape & SMESH_subMesh::GetSubShape() -{ - //MESSAGE("SMESH_subMesh::GetSubShape"); - return _subShape; -} - - -//======================================================================= -//function : CanAddHypothesis -//purpose : return true if theHypothesis can be attached to me: -// its dimention is checked -//======================================================================= - -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 ( aHypDim < aShapeDim ) -// return ( _father->IsMainShape( _subShape )); - - return false; -} - -//======================================================================= -//function : IsApplicableHypotesis -//purpose : -//======================================================================= - -bool SMESH_subMesh::IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis, - const TopAbs_ShapeEnum theShapeType) -{ - if ( theHypothesis->GetType() > SMESHDS_Hypothesis::PARAM_ALGO) - // algorithm - return ( theHypothesis->GetShapeType() & (1<< theShapeType)); - - // hypothesis - int aShapeDim = 100; - switch ( theShapeType ) { - case TopAbs_EDGE: aShapeDim = 1; break; - case TopAbs_FACE: aShapeDim = 2; break; - case TopAbs_SHELL:aShapeDim = 3; break; - case TopAbs_SOLID:aShapeDim = 3; break; -// case TopAbs_VERTEX: -// case TopAbs_WIRE: -// case TopAbs_COMPSOLID: -// case TopAbs_COMPOUND: - default: return false; - } - - return ( theHypothesis->GetDim() == aShapeDim ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Hypothesis::Hypothesis_Status - SMESH_subMesh::AlgoStateEngine(int event, SMESH_Hypothesis * anHyp) -{ - // MESSAGE("SMESH_subMesh::AlgoStateEngine"); - //SCRUTE(_algoState); - //SCRUTE(event); - - // **** les retour des evenement shape sont significatifs - // (add ou remove fait ou non) - // le retour des evenement father n'indiquent pas que add ou remove fait - - SMESH_Hypothesis::Hypothesis_Status aux_ret, ret = SMESH_Hypothesis::HYP_OK; - - int dim = SMESH_Gen::GetShapeDim(_subShape); - - if (dim < 1) - { - _algoState = HYP_OK; - if (event == ADD_HYP || event == ADD_ALGO) - return SMESH_Hypothesis::HYP_BAD_DIM; // do not allow to assign any hyp - else - return SMESH_Hypothesis::HYP_OK; - } - - SMESH_Gen* gen =_father->GetGen(); -// bool ret = false; - int oldAlgoState = _algoState; - bool modifiedHyp = false; // if set to true, force event MODIF_ALGO_STATE - // in ComputeStateEngine - - // ---------------------- - // check mesh conformity - // ---------------------- - if (event == ADD_ALGO) - { - if (IsApplicableHypotesis( anHyp ) && - !_father->IsNotConformAllowed() && - !IsConform( static_cast< SMESH_Algo* >( anHyp ))) - return SMESH_Hypothesis::HYP_NOTCONFORM; - } - - // ---------------------------------- - // add a hypothesis to DS if possible - // ---------------------------------- - if (event == ADD_HYP || event == ADD_ALGO) - { - if ( ! CanAddHypothesis( anHyp )) - return SMESH_Hypothesis::HYP_BAD_DIM; - - if ( 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 - if (event == ADD_HYP) { - bool isPropagationOk = true; - string hypName = anHyp->GetName(); - - if (hypName == "Propagation") { - 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 && ret < SMESH_Hypothesis::HYP_CONCURENT) { - ret = SMESH_Hypothesis::HYP_CONCURENT; - } - } // Serve Propagation of 1D hypothesis - } - - // -------------------------- - // remove a hypothesis from DS - // -------------------------- - if (event == REMOVE_HYP || event == REMOVE_ALGO) - { - if (!_meshDS->RemoveHypothesis(_subShape, anHyp)) - return SMESH_Hypothesis::HYP_OK; // nothing changes - - // Serve Propagation of 1D hypothesis - if (event == REMOVE_HYP) - { - bool isPropagationOk = true; - SMESH_HypoFilter propagFilter( SMESH_HypoFilter::HasName( "Propagation" )); - if ( propagFilter.IsOk( anHyp, _subShape )) - { - 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 && ret < SMESH_Hypothesis::HYP_CONCURENT) { - ret = SMESH_Hypothesis::HYP_CONCURENT; - } - } // Serve Propagation of 1D hypothesis - } - - // ------------------ - // analyse algo state - // ------------------ - if (!IsApplicableHypotesis( anHyp )) - return ret; // not applicable hypotheses do not change algo state - - switch (_algoState) - { - - // ---------------------------------------------------------------------- - - case NO_ALGO: - switch (event) { - case ADD_HYP: - break; - case ADD_ALGO: { - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - ASSERT(algo); - if (algo->CheckHypothesis((*_father),_subShape, aux_ret)) - SetAlgoState(HYP_OK); - else - SetAlgoState(MISSING_HYP); - break; - } - case REMOVE_HYP: - break; - case REMOVE_ALGO: - break; - case ADD_FATHER_HYP: - break; - case ADD_FATHER_ALGO: { // Algo just added in father - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - ASSERT(algo); - if ( algo == anHyp ) { - if ( algo->CheckHypothesis((*_father),_subShape, aux_ret)) - SetAlgoState(HYP_OK); - else - SetAlgoState(MISSING_HYP); - } - break; - } - case REMOVE_FATHER_HYP: - break; - case REMOVE_FATHER_ALGO: { - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - if (algo) - { - if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) - SetAlgoState(HYP_OK); - else - SetAlgoState(MISSING_HYP); - } - break; - } - default: - ASSERT(0); - break; - } - break; - - // ---------------------------------------------------------------------- - - case MISSING_HYP: - switch (event) - { - case ADD_HYP: { - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - ASSERT(algo); - if ( algo->CheckHypothesis((*_father),_subShape, ret )) - SetAlgoState(HYP_OK); - if (SMESH_Hypothesis::IsStatusFatal( ret )) - _meshDS->RemoveHypothesis(_subShape, anHyp); - else if (!_father->IsUsedHypothesis( anHyp, _subShape )) - { - _meshDS->RemoveHypothesis(_subShape, anHyp); - ret = SMESH_Hypothesis::HYP_INCOMPATIBLE; - } - break; - } - case ADD_ALGO: { //already existing algo : on father ? - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - ASSERT(algo); - if ( algo->CheckHypothesis((*_father),_subShape, aux_ret ))// ignore hyp status - SetAlgoState(HYP_OK); - else - SetAlgoState(MISSING_HYP); - break; - } - case REMOVE_HYP: - break; - case REMOVE_ALGO: { // perhaps a father algo applies ? - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - if (algo == NULL) // no more algo applying on subShape... - { - SetAlgoState(NO_ALGO); - } - else - { - if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) - SetAlgoState(HYP_OK); - else - SetAlgoState(MISSING_HYP); - } - break; - } - case ADD_FATHER_HYP: { - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - ASSERT(algo); - if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) - SetAlgoState(HYP_OK); - else - SetAlgoState(MISSING_HYP); - } - break; - case ADD_FATHER_ALGO: { // new father algo - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - ASSERT( algo ); - if ( algo == anHyp ) { - if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) - SetAlgoState(HYP_OK); - else - SetAlgoState(MISSING_HYP); - } - break; - } - case REMOVE_FATHER_HYP: // nothing to do - break; - case REMOVE_FATHER_ALGO: { - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - if (algo == NULL) // no more applying algo on father - { - SetAlgoState(NO_ALGO); - } - else - { - if ( algo->CheckHypothesis((*_father),_subShape , aux_ret )) - SetAlgoState(HYP_OK); - else - SetAlgoState(MISSING_HYP); - } - break; - } - default: - ASSERT(0); - break; - } - break; - - // ---------------------------------------------------------------------- - - case HYP_OK: - switch (event) - { - case ADD_HYP: { - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - ASSERT(algo); - if (!algo->CheckHypothesis((*_father),_subShape, ret )) - { - //two applying algo on the same shape not allowed - _meshDS->RemoveHypothesis(_subShape, anHyp); - if ( !SMESH_Hypothesis::IsStatusFatal( ret )) - // ret should be fatal: anHyp was not added - ret = SMESH_Hypothesis::HYP_INCOMPATIBLE; - } - else if (SMESH_Hypothesis::IsStatusFatal( ret )) - { - _meshDS->RemoveHypothesis(_subShape, anHyp); - } - else if (!_father->IsUsedHypothesis( anHyp, _subShape )) - { - _meshDS->RemoveHypothesis(_subShape, anHyp); - ret = SMESH_Hypothesis::HYP_INCOMPATIBLE; - } - else - { - modifiedHyp = true; - } - break; - } - case ADD_ALGO: { //already existing algo : on father ? - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) - SetAlgoState(HYP_OK); - else - SetAlgoState(MISSING_HYP); - modifiedHyp = true; - break; - } - case REMOVE_HYP: { - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - ASSERT(algo); - if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) - SetAlgoState(HYP_OK); - else - SetAlgoState(MISSING_HYP); - modifiedHyp = true; - break; - } - case REMOVE_ALGO: { // perhaps a father algo applies ? - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - if (algo == NULL) // no more algo applying on subShape... - { - SetAlgoState(NO_ALGO); - } - else - { - if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) - SetAlgoState(HYP_OK); - else - SetAlgoState(MISSING_HYP); - // check if same algo remains - if ( anHyp != algo && strcmp( anHyp->GetName(), algo->GetName()) ) - modifiedHyp = true; - } - break; - } - case ADD_FATHER_HYP: { // new father hypothesis ? - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - ASSERT(algo); - if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) - { - SetAlgoState(HYP_OK); - if (_father->IsUsedHypothesis( anHyp, _subShape )) // new Hyp - modifiedHyp = true; - } - else - SetAlgoState(MISSING_HYP); - break; - } - case ADD_FATHER_ALGO: { // a new algo on father - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - if ( algo == anHyp ) { - if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) - SetAlgoState(HYP_OK); - else - SetAlgoState(MISSING_HYP); - modifiedHyp = true; - } - break; - } - case REMOVE_FATHER_HYP: { - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - ASSERT(algo); - if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) - SetAlgoState(HYP_OK); - else - SetAlgoState(MISSING_HYP); - // is there the same local hyp or maybe a new father algo applied? - if ( !GetSimilarAttached( _subShape, anHyp ) ) - modifiedHyp = true; - break; - } - case REMOVE_FATHER_ALGO: { - SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape); - if (algo == NULL) // no more applying algo on father - { - SetAlgoState(NO_ALGO); - } - else - { - if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) - SetAlgoState(HYP_OK); - else - SetAlgoState(MISSING_HYP); - // is there the same local algo or maybe a new father algo applied? - if ( !GetSimilarAttached( _subShape, anHyp )) - modifiedHyp = true; - } - break; - } - default: - ASSERT(0); - break; - } - break; - - // ---------------------------------------------------------------------- - - default: - ASSERT(0); - break; - } - - if ((_algoState != oldAlgoState) || modifiedHyp) - ComputeStateEngine(MODIF_ALGO_STATE); - - return ret; -} - - -//======================================================================= -//function : IsConform -//purpose : check if a conform mesh will be produced by the Algo -//======================================================================= - -bool SMESH_subMesh::IsConform(const SMESH_Algo* theAlgo) -{ -// MESSAGE( "SMESH_subMesh::IsConform" ); - - if ( !theAlgo ) return false; - - // check only algo that doesn't NeedDescretBoundary(): because mesh made - // on a sub-shape will be ignored by theAlgo - if ( theAlgo->NeedDescretBoundary() ) - return true; - - SMESH_Gen* gen =_father->GetGen(); - - // only local algo is to be checked - if ( gen->IsGlobalHypothesis( theAlgo, *_father )) - return true; - - // check algo attached to adjacent shapes - - // loop on one level down sub-meshes - TopoDS_Iterator itsub( _subShape ); - for (; itsub.More(); itsub.Next()) - { - // loop on adjacent subShapes - TopTools_ListIteratorOfListOfShape it( _father->GetAncestors( itsub.Value() )); - for (; it.More(); it.Next()) - { - const TopoDS_Shape& adjacent = it.Value(); - if ( _subShape.IsSame( adjacent )) continue; - if ( adjacent.ShapeType() != _subShape.ShapeType()) - break; - - // check algo attached to smAdjacent - SMESH_Algo * algo = gen->GetAlgo((*_father), adjacent); - if (algo && - //algo != theAlgo && - !algo->NeedDescretBoundary() /*&& - !gen->IsGlobalHypothesis( algo, *_father )*/) - return false; // NOT CONFORM MESH WILL BE PRODUCED - } - } - - return true; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_subMesh::SetAlgoState(int state) -{ -// if (state != _oldAlgoState) -// int retc = ComputeStateEngine(MODIF_ALGO_STATE); - _algoState = state; -} - -//============================================================================= -/*! - * - */ -//============================================================================= -SMESH_Hypothesis::Hypothesis_Status - SMESH_subMesh::SubMeshesAlgoStateEngine(int event, - SMESH_Hypothesis * anHyp) -{ - //MESSAGE("SMESH_subMesh::SubMeshesAlgoStateEngine"); - SMESH_Hypothesis::Hypothesis_Status ret = SMESH_Hypothesis::HYP_OK; - //EAP: a wire (dim==1) should notify edges (dim==1) - //EAP: int dim = SMESH_Gen::GetShapeDim(_subShape); - if (/*EAP:dim > 1*/ _subShape.ShapeType() < TopAbs_EDGE ) - { - const map < int, SMESH_subMesh * >&subMeshes = DependsOn(); - - map < int, SMESH_subMesh * >::const_iterator itsub; - for (itsub = subMeshes.begin(); itsub != subMeshes.end(); itsub++) - { - SMESH_subMesh *sm = (*itsub).second; - SMESH_Hypothesis::Hypothesis_Status ret2 = - sm->AlgoStateEngine(event, anHyp); - if ( ret2 > ret ) - ret = ret2; - } - } - return ret; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_subMesh::CleanDependsOn() -{ - MESSAGE("SMESH_subMesh::CleanDependsOn"); - // **** parcourir les ancetres dans l'ordre de dépendance - - ComputeStateEngine(CLEAN); - - const map < int, SMESH_subMesh * >&dependson = DependsOn(); - map < int, SMESH_subMesh * >::const_iterator its; - for (its = dependson.begin(); its != dependson.end(); its++) - { - SMESH_subMesh *sm = (*its).second; - // SCRUTE((*its).first); - sm->ComputeStateEngine(CLEAN); - } -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_subMesh::DumpAlgoState(bool isMain) -{ - int dim = SMESH_Gen::GetShapeDim(_subShape); -// if (dim < 1) return; - if (isMain) - { - const map < int, SMESH_subMesh * >&subMeshes = DependsOn(); - - map < int, SMESH_subMesh * >::const_iterator itsub; - for (itsub = subMeshes.begin(); itsub != subMeshes.end(); itsub++) - { - SMESH_subMesh *sm = (*itsub).second; - sm->DumpAlgoState(false); - } - } - int type = _subShape.ShapeType(); - MESSAGE("dim = " << dim << " type of shape " << type); - switch (_algoState) - { - case NO_ALGO: - MESSAGE(" AlgoState = NO_ALGO"); - break; - case MISSING_HYP: - MESSAGE(" AlgoState = MISSING_HYP"); - break; - case HYP_OK: - MESSAGE(" AlgoState = HYP_OK"); - break; - } - switch (_computeState) - { - case NOT_READY: - MESSAGE(" ComputeState = NOT_READY"); - break; - case READY_TO_COMPUTE: - MESSAGE(" ComputeState = READY_TO_COMPUTE"); - break; - case COMPUTE_OK: - MESSAGE(" ComputeState = COMPUTE_OK"); - break; - case FAILED_TO_COMPUTE: - MESSAGE(" ComputeState = FAILED_TO_COMPUTE"); - break; - } -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool SMESH_subMesh::ComputeStateEngine(int event) -{ - //MESSAGE("SMESH_subMesh::ComputeStateEngine"); - //SCRUTE(_computeState); - //SCRUTE(event); - - int dim = SMESH_Gen::GetShapeDim(_subShape); - - if (dim < 1) - { - if ( IsMeshComputed() ) - _computeState = COMPUTE_OK; - else - _computeState = READY_TO_COMPUTE; - return true; - } - SMESH_Gen *gen = _father->GetGen(); - SMESH_Algo *algo = 0; - bool ret = true; - SMESH_Hypothesis::Hypothesis_Status hyp_status; - - switch (_computeState) - { - - // ---------------------------------------------------------------------- - - case NOT_READY: - switch (event) - { - case MODIF_HYP: // nothing to do - break; - case MODIF_ALGO_STATE: - if (_algoState == HYP_OK) - { - _computeState = READY_TO_COMPUTE; - } - break; - case COMPUTE: // nothing to do - break; - case CLEAN: - RemoveSubMeshElementsAndNodes(); - break; - case CLEANDEP: - CleanDependants(); - break; - case SUBMESH_COMPUTED: // nothing to do - break; - case SUBMESH_RESTORED: - ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE ); - break; - case MESH_ENTITY_REMOVED: - break; - case CHECK_COMPUTE_STATE: - if ( IsMeshComputed() ) - _computeState = COMPUTE_OK; - break; - default: - ASSERT(0); - break; - } - break; - - // ---------------------------------------------------------------------- - - case READY_TO_COMPUTE: - switch (event) - { - case MODIF_HYP: // nothing to do - break; - case MODIF_ALGO_STATE: - _computeState = NOT_READY; - algo = gen->GetAlgo((*_father), _subShape); - if (algo) - { - ret = algo->CheckHypothesis((*_father), _subShape, hyp_status); - if (ret) - _computeState = READY_TO_COMPUTE; - } - break; - case COMPUTE: - { - algo = gen->GetAlgo((*_father), _subShape); - ASSERT(algo); - ret = algo->CheckHypothesis((*_father), _subShape, hyp_status); - if (!ret) - { - MESSAGE("***** verify compute state *****"); - _computeState = NOT_READY; - break; - } - // check submeshes needed - if (algo->NeedDescretBoundary()) - ret = SubMeshesComputed(); - if (!ret) - { - MESSAGE("Some SubMeshes not computed"); - _computeState = FAILED_TO_COMPUTE; - break; - } - RemoveSubMeshElementsAndNodes(); - // compute - if (!algo->NeedDescretBoundary() && !algo->OnlyUnaryInput()) - ret = ApplyToCollection( algo, GetCollection( gen, algo ) ); - else - ret = algo->Compute((*_father), _subShape); - - if (!ret) - { - MESSAGE("problem in algo execution: failed to compute"); - _computeState = FAILED_TO_COMPUTE; - if (!algo->NeedDescretBoundary()) - UpdateSubMeshState( FAILED_TO_COMPUTE ); - -#ifdef _DEBUG_ - // Show vertices location of a failed shape - TopExp_Explorer exp( _subShape, TopAbs_VERTEX); - for ( ; exp.More(); exp.Next() ) { - gp_Pnt P( BRep_Tool::Pnt( TopoDS::Vertex( exp.Current() ))); - cout << P.X() << " " << P.Y() << " " << P.Z() << " " << endl; - } -#endif - break; - } - else - { - _computeState = COMPUTE_OK; - UpdateDependantsState( SUBMESH_COMPUTED ); // send event SUBMESH_COMPUTED - if (!algo->NeedDescretBoundary()) - UpdateSubMeshState( COMPUTE_OK ); - } - } - break; - case CLEAN: - RemoveSubMeshElementsAndNodes(); - _computeState = NOT_READY; - algo = gen->GetAlgo((*_father), _subShape); - if (algo) - { - ret = algo->CheckHypothesis((*_father), _subShape, hyp_status); - if (ret) - _computeState = READY_TO_COMPUTE; - } - break; - case CLEANDEP: - CleanDependants(); - break; - case SUBMESH_COMPUTED: // nothing to do - break; - case SUBMESH_RESTORED: - // check if a mesh is already computed that may - // happen after retrieval from a file - ComputeStateEngine( CHECK_COMPUTE_STATE ); - ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE ); - break; - case MESH_ENTITY_REMOVED: - break; - case CHECK_COMPUTE_STATE: - if ( IsMeshComputed() ) - _computeState = COMPUTE_OK; - break; - default: - ASSERT(0); - break; - } - break; - - // ---------------------------------------------------------------------- - - case COMPUTE_OK: - switch (event) - { - case MODIF_HYP: - CleanDependants(); // recursive recall with event CLEANDEP - algo = gen->GetAlgo((*_father), _subShape); - if (algo && !algo->NeedDescretBoundary()) - CleanDependsOn(); // remove sub-mesh with event CLEANDEP - break; - case MODIF_ALGO_STATE: - CleanDependants(); // recursive recall with event CLEANDEP - algo = gen->GetAlgo((*_father), _subShape); - if (algo && !algo->NeedDescretBoundary()) - CleanDependsOn(); // remove sub-mesh with event CLEANDEP - break; - case COMPUTE: // nothing to do - break; - case CLEAN: - RemoveSubMeshElementsAndNodes(); - _computeState = NOT_READY; - algo = gen->GetAlgo((*_father), _subShape); - if (algo) - { - ret = algo->CheckHypothesis((*_father), _subShape, hyp_status); - if (ret) - _computeState = READY_TO_COMPUTE; - } - break; - case CLEANDEP: - CleanDependants(); // recursive recall with event CLEANDEP - break; - case SUBMESH_COMPUTED: // nothing to do - break; - case SUBMESH_RESTORED: - ComputeStateEngine( CHECK_COMPUTE_STATE ); - ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE ); - break; - case MESH_ENTITY_REMOVED: - UpdateDependantsState( CHECK_COMPUTE_STATE ); - ComputeStateEngine( CHECK_COMPUTE_STATE ); - ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE ); - break; - case CHECK_COMPUTE_STATE: - if ( !IsMeshComputed() ) - if (_algoState == HYP_OK) - _computeState = READY_TO_COMPUTE; - else - _computeState = NOT_READY; - break; - default: - ASSERT(0); - break; - } - break; - - // ---------------------------------------------------------------------- - - case FAILED_TO_COMPUTE: - switch (event) - { - case MODIF_HYP: - if (_algoState == HYP_OK) - _computeState = READY_TO_COMPUTE; - else - _computeState = NOT_READY; - break; - case MODIF_ALGO_STATE: - if (_algoState == HYP_OK) - _computeState = READY_TO_COMPUTE; - else - _computeState = NOT_READY; - break; - case COMPUTE: // nothing to do - break; - case CLEAN: - RemoveSubMeshElementsAndNodes(); - if (_algoState == HYP_OK) - _computeState = READY_TO_COMPUTE; - else - _computeState = NOT_READY; - break; - case CLEANDEP: - CleanDependants(); - break; - case SUBMESH_COMPUTED: // allow retry compute - if (_algoState == HYP_OK) - _computeState = READY_TO_COMPUTE; - else - _computeState = NOT_READY; - break; - case SUBMESH_RESTORED: - ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE ); - break; - case MESH_ENTITY_REMOVED: - break; - case CHECK_COMPUTE_STATE: - if ( IsMeshComputed() ) - _computeState = COMPUTE_OK; - else - if (_algoState == HYP_OK) - _computeState = READY_TO_COMPUTE; - else - _computeState = NOT_READY; - break; - default: - ASSERT(0); - break; - } - break; - - // ---------------------------------------------------------------------- - default: - ASSERT(0); - break; - } - - //SCRUTE(_computeState); - return ret; -} - -//======================================================================= -//function : ApplyToCollection -//purpose : Apply theAlgo to all subshapes in theCollection -//======================================================================= - -bool SMESH_subMesh::ApplyToCollection (SMESH_Algo* theAlgo, - const TopoDS_Shape& theCollection) -{ - MESSAGE("SMESH_subMesh::ApplyToCollection"); - ASSERT ( !theAlgo->NeedDescretBoundary() ); - - bool ret = false; - - - ret = theAlgo->Compute( *_father, theCollection ); - - // set _computeState of subshapes - TopExp_Explorer anExplorer( theCollection, _subShape.ShapeType() ); - for ( ; anExplorer.More(); anExplorer.Next() ) - { - const TopoDS_Shape& aSubShape = anExplorer.Current(); - SMESH_subMesh* subMesh = _father->GetSubMeshContaining( aSubShape ); - if ( subMesh ) - { - if (ret) - { - subMesh->_computeState = COMPUTE_OK; - subMesh->UpdateDependantsState( SUBMESH_COMPUTED ); - subMesh->UpdateSubMeshState( COMPUTE_OK ); - } - else - { - subMesh->_computeState = FAILED_TO_COMPUTE; - } - } - } - return ret; -} - - -//======================================================================= -//function : UpdateSubMeshState -//purpose : -//======================================================================= - -void SMESH_subMesh::UpdateSubMeshState(const compute_state theState) -{ - const map& smMap = DependsOn(); - map::const_iterator itsub; - for (itsub = smMap.begin(); itsub != smMap.end(); itsub++) - { - SMESH_subMesh* sm = (*itsub).second; - sm->_computeState = theState; - } -} - -//======================================================================= -//function : ComputeSubMeshStateEngine -//purpose : -//======================================================================= - -void SMESH_subMesh::ComputeSubMeshStateEngine(int event) -{ - const map& smMap = DependsOn(); - map::const_iterator itsub; - for (itsub = smMap.begin(); itsub != smMap.end(); itsub++) - { - SMESH_subMesh* sm = (*itsub).second; - sm->ComputeStateEngine(event); - } -} - -//======================================================================= -//function : UpdateDependantsState -//purpose : -//======================================================================= - -void SMESH_subMesh::UpdateDependantsState(const compute_event theEvent) -{ - //MESSAGE("SMESH_subMesh::UpdateDependantsState"); - TopTools_ListIteratorOfListOfShape it( _father->GetAncestors( _subShape )); - for (; it.More(); it.Next()) - { - const TopoDS_Shape& ancestor = it.Value(); - SMESH_subMesh *aSubMesh = - _father->GetSubMeshContaining(ancestor); - if (aSubMesh) - aSubMesh->ComputeStateEngine( theEvent ); - } -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_subMesh::CleanDependants() -{ - //MESSAGE("SMESH_subMesh::CleanDependants: shape type " << _subShape.ShapeType() ); - - TopTools_ListIteratorOfListOfShape it( _father->GetAncestors( _subShape )); - for (; it.More(); it.Next()) - { - const TopoDS_Shape& ancestor = it.Value(); - //MESSAGE("ancestor shape type " << ancestor.ShapeType() ); - SMESH_subMesh *aSubMesh = _father->GetSubMeshContaining(ancestor); - if (aSubMesh) - aSubMesh->ComputeStateEngine(CLEANDEP); - } - ComputeStateEngine(CLEAN); -} - - -//============================================================================= -/*! - * - */ -//============================================================================= - -static void removeSubMesh( SMESHDS_Mesh * meshDS, const TopoDS_Shape& subShape) -{ - SMESHDS_SubMesh * subMeshDS = meshDS->MeshElements(subShape); - if (subMeshDS!=NULL) - { - SMDS_ElemIteratorPtr ite=subMeshDS->GetElements(); - while(ite->more()) - { - const SMDS_MeshElement * elt = ite->next(); - //MESSAGE( " RM elt: "<GetID()<<" ( "<NbNodes()<<" )" ); - meshDS->RemoveElement(elt); - } - - SMDS_NodeIteratorPtr itn=subMeshDS->GetNodes(); - while(itn->more()) - { - const SMDS_MeshNode * node = itn->next(); - //MESSAGE( " RM node: "<GetID()); - meshDS->RemoveNode(node); - } - } -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_subMesh::RemoveSubMeshElementsAndNodes() -{ - //SCRUTE(_subShape.ShapeType()); - - removeSubMesh( _meshDS, _subShape ); - - // algo may bind a submesh not to _subShape, eg 3D algo - // sets nodes on SHELL while _subShape may be SOLID - - int dim = SMESH_Gen::GetShapeDim( _subShape ); - int type = _subShape.ShapeType() + 1; - for ( ; type <= TopAbs_EDGE; type++) - if ( dim == SMESH_Gen::GetShapeDim( (TopAbs_ShapeEnum) type )) - { - TopExp_Explorer exp( _subShape, (TopAbs_ShapeEnum) type ); - for ( ; exp.More(); exp.Next() ) - removeSubMesh( _meshDS, exp.Current() ); - } - else - break; -} - -//======================================================================= -//function : IsMeshComputed -//purpose : check if _subMeshDS contains mesh elements -//======================================================================= - -bool SMESH_subMesh::IsMeshComputed() const -{ - // algo may bind a submesh not to _subShape, eg 3D algo - // sets nodes on SHELL while _subShape may be SOLID - - int dim = SMESH_Gen::GetShapeDim( _subShape ); - int type = _subShape.ShapeType(); - for ( ; type <= TopAbs_VERTEX; type++) { - if ( dim == SMESH_Gen::GetShapeDim( (TopAbs_ShapeEnum) type )) - { - TopExp_Explorer exp( _subShape, (TopAbs_ShapeEnum) type ); - for ( ; exp.More(); exp.Next() ) - { - SMESHDS_SubMesh * subMeshDS = _meshDS->MeshElements( exp.Current() ); - if ( subMeshDS != NULL && - (subMeshDS->GetElements()->more() || subMeshDS->GetNodes()->more())) { - return true; - } - } - } - else - break; - } - - return false; -} - - -//======================================================================= -//function : GetCollection -//purpose : return a shape containing all sub-shapes of the MainShape that can be -// meshed at once along with _subShape -//======================================================================= - -TopoDS_Shape SMESH_subMesh::GetCollection(SMESH_Gen * theGen, SMESH_Algo* theAlgo) -{ - MESSAGE("SMESH_subMesh::GetCollection"); - ASSERT (!theAlgo->NeedDescretBoundary()); - - TopoDS_Shape mainShape = _father->GetMeshDS()->ShapeToMesh(); - - if ( mainShape.IsSame( _subShape )) - return _subShape; - - list aUsedHyp = - theAlgo->GetUsedHypothesis( *_father, _subShape ); // copy - - // put in a compound all shapes with the same hypothesis assigned - // and a good ComputState - - TopoDS_Compound aCompound; - BRep_Builder aBuilder; - aBuilder.MakeCompound( aCompound ); - - TopExp_Explorer anExplorer( mainShape, _subShape.ShapeType() ); - for ( ; anExplorer.More(); anExplorer.Next() ) - { - const TopoDS_Shape& S = anExplorer.Current(); - SMESH_subMesh* subMesh = _father->GetSubMesh( S ); - SMESH_Algo* anAlgo = theGen->GetAlgo( *_father, S ); - - if (subMesh->GetComputeState() == READY_TO_COMPUTE && - anAlgo == theAlgo && - anAlgo->GetUsedHypothesis( *_father, S ) == aUsedHyp) - { - aBuilder.Add( aCompound, S ); - } - } - - return aCompound; -} - -//======================================================================= -//function : GetSimilarAttached -//purpose : return nb of hypotheses attached to theShape. -// If theHyp is provided, similar but not same hypotheses -// are countered; else only applicable ones having theHypType -// are countered -//======================================================================= - -const SMESH_Hypothesis* SMESH_subMesh::GetSimilarAttached(const TopoDS_Shape& theShape, - const SMESH_Hypothesis * theHyp, - const int theHypType) -{ - SMESH_HypoFilter filter; - filter.Init( SMESH_HypoFilter::HasType( theHyp ? theHyp->GetType() : theHypType )); - if ( theHyp ) { - filter.And( SMESH_HypoFilter::HasDim( theHyp->GetDim() )); - filter.AndNot( SMESH_HypoFilter::Is( theHyp )); - } - else - filter.And( SMESH_HypoFilter::IsApplicableTo( theShape )); - - return _father->GetHypothesis( theShape, filter, false ); -} - -//======================================================================= -//function : CheckConcurentHypothesis -//purpose : check if there are several applicable hypothesis attached to -// ansestors -//======================================================================= - -SMESH_Hypothesis::Hypothesis_Status - SMESH_subMesh::CheckConcurentHypothesis (const int theHypType) -{ - MESSAGE ("SMESH_subMesh::CheckConcurentHypothesis"); - - // is there local hypothesis on me? - if ( GetSimilarAttached( _subShape, 0, theHypType ) ) - return SMESH_Hypothesis::HYP_OK; - - - TopoDS_Shape aPrevWithHyp; - const SMESH_Hypothesis* aPrevHyp = 0; - TopTools_ListIteratorOfListOfShape it( _father->GetAncestors( _subShape )); - for (; it.More(); it.Next()) - { - const TopoDS_Shape& ancestor = it.Value(); - const SMESH_Hypothesis* hyp = GetSimilarAttached( ancestor, 0, theHypType ); - if ( hyp ) - { - if ( aPrevWithHyp.IsNull() || aPrevWithHyp.IsSame( ancestor )) - { - aPrevWithHyp = ancestor; - aPrevHyp = hyp; - } - else if ( aPrevWithHyp.ShapeType() == ancestor.ShapeType() && aPrevHyp != hyp ) - return SMESH_Hypothesis::HYP_CONCURENT; - else - return SMESH_Hypothesis::HYP_OK; - } - } - return SMESH_Hypothesis::HYP_OK; -} diff --git a/src/SMESH/SMESH_subMesh.hxx b/src/SMESH/SMESH_subMesh.hxx deleted file mode 100644 index 8251c6b94..000000000 --- a/src/SMESH/SMESH_subMesh.hxx +++ /dev/null @@ -1,182 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_subMesh.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_SUBMESH_HXX_ -#define _SMESH_SUBMESH_HXX_ - -#include "SMESHDS_Mesh.hxx" -#include "SMESHDS_SubMesh.hxx" -#include "SMESH_Hypothesis.hxx" -#include "Utils_SALOME_Exception.hxx" -#include -#include -#include - -#include -#include -#include - -class SMESH_Mesh; -class SMESH_Hypothesis; -class SMESH_Algo; -class SMESH_Gen; - -class SMESH_subMesh -{ - public: - SMESH_subMesh(int Id, SMESH_Mesh * father, SMESHDS_Mesh * meshDS, - const TopoDS_Shape & aSubShape); - virtual ~ SMESH_subMesh(); - - int GetId() const; - - // bool Contains(const TopoDS_Shape & aSubShape) - // throw (SALOME_Exception); - - SMESH_Mesh* GetFather() { return _father; } - - SMESHDS_SubMesh * GetSubMeshDS(); - - SMESHDS_SubMesh* CreateSubMeshDS(); - // Explicit SMESHDS_SubMesh creation method, required for persistence mechanism - - SMESH_subMesh *GetFirstToCompute(); - - const map < int, SMESH_subMesh * >&DependsOn(); - //const map < int, SMESH_subMesh * >&Dependants(); - - const TopoDS_Shape & GetSubShape(); - -// bool _vertexSet; // only for vertex subMesh, set to false for dim > 0 - - enum compute_state - { - NOT_READY, READY_TO_COMPUTE, - COMPUTE_OK, FAILED_TO_COMPUTE - }; - enum algo_state - { - NO_ALGO, MISSING_HYP, HYP_OK - }; - enum algo_event - { - ADD_HYP, ADD_ALGO, - REMOVE_HYP, REMOVE_ALGO, - ADD_FATHER_HYP, ADD_FATHER_ALGO, - REMOVE_FATHER_HYP, REMOVE_FATHER_ALGO - }; - enum compute_event - { - MODIF_HYP, MODIF_ALGO_STATE, COMPUTE, - CLEAN, CLEANDEP, SUBMESH_COMPUTED, SUBMESH_RESTORED, - MESH_ENTITY_REMOVED, CHECK_COMPUTE_STATE - }; - - SMESH_Hypothesis::Hypothesis_Status - AlgoStateEngine(int event, SMESH_Hypothesis * anHyp); - - SMESH_Hypothesis::Hypothesis_Status - SubMeshesAlgoStateEngine(int event, SMESH_Hypothesis * anHyp); - - int GetAlgoState() { return _algoState; } - - void DumpAlgoState(bool isMain); - - bool ComputeStateEngine(int event); - - int GetComputeState() - { - return _computeState; - }; - - bool IsConform(const SMESH_Algo* theAlgo); - // check if a conform mesh will be produced by the Algo - - bool CanAddHypothesis(const SMESH_Hypothesis* theHypothesis) const; - // return true if theHypothesis can be attached to me: - // its dimention is checked - - static bool IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis, - const TopAbs_ShapeEnum theShapeType); - - bool IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis) const - { return IsApplicableHypotesis( theHypothesis, _subShape.ShapeType() ); } - // return true if theHypothesis can be used to mesh me: - // its shape type is checked - - SMESH_Hypothesis::Hypothesis_Status CheckConcurentHypothesis (const int theHypType); - // check if there are several applicable hypothesis on fathers - - protected: - void InsertDependence(const TopoDS_Shape aSubShape); - - bool SubMeshesComputed(); - - bool SubMeshesReady(); - - void RemoveSubMeshElementsAndNodes(); - void UpdateDependantsState(const compute_event theEvent); - void UpdateSubMeshState(const compute_state theState); - void ComputeSubMeshStateEngine(int event); - void CleanDependants(); - void CleanDependsOn(); - void SetAlgoState(int state); - - bool IsMeshComputed() const; - // check if _subMeshDS contains mesh elements - - TopoDS_Shape GetCollection(SMESH_Gen * theGen, SMESH_Algo* theAlgo); - // return a shape containing all sub-shapes of the MainShape that can be - // meshed at once along with _subShape - - bool ApplyToCollection (SMESH_Algo* theAlgo, - const TopoDS_Shape& theCollection); - // Apply theAlgo to all subshapes in theCollection - - const SMESH_Hypothesis* GetSimilarAttached(const TopoDS_Shape& theShape, - const SMESH_Hypothesis * theHyp, - const int theHypType = 0); - // return a hypothesis attached to theShape. - // If theHyp is provided, similar but not same hypotheses - // is returned; else an applicable ones having theHypType - // is returned - - TopoDS_Shape _subShape; - SMESHDS_Mesh * _meshDS; - SMESHDS_SubMesh * _subMeshDS; - int _Id; - SMESH_Mesh *_father; - map < int, SMESH_subMesh * >_mapDepend; - bool _dependenceAnalysed; - - int _algoState; - int _computeState; - -}; - -#endif diff --git a/src/SMESHDS/Makefile.in b/src/SMESHDS/Makefile.in deleted file mode 100644 index 50d4fa742..000000000 --- a/src/SMESHDS/Makefile.in +++ /dev/null @@ -1,83 +0,0 @@ -# SMESH SMESHDS : management of mesh data and SMESH document -# -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : Makefile.in -# Author : Patrick GOLDBRONN (CEA) -# Module : SMESH - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl - - -@COMMENCE@ - -# Libraries targets - -LIB = libSMESHDS.la -LIB_SRC = \ - SMESHDS_Document.cxx \ - SMESHDS_Hypothesis.cxx \ - SMESHDS_Script.cxx \ - SMESHDS_Command.cxx \ - SMESHDS_SubMesh.cxx \ - SMESHDS_Mesh.cxx \ - SMESHDS_GroupBase.cxx \ - SMESHDS_Group.cxx \ - SMESHDS_GroupOnGeom.cxx - -LIB_CLIENT_IDL = -LIB_SERVER_IDL = - -# Executables targets -BIN = -BIN_SRC = -BIN_CLIENT_IDL = -BIN_SERVER_IDL = - -# header files -EXPORT_HEADERS= \ - SMESHDS_Document.hxx \ - SMESHDS_Hypothesis.hxx \ - SMESHDS_Mesh.hxx \ - SMESHDS_Script.hxx \ - SMESHDS_Command.hxx \ - SMESHDS_CommandType.hxx \ - SMESHDS_SubMesh.hxx \ - SMESHDS_GroupBase.hxx \ - SMESHDS_Group.hxx \ - SMESHDS_GroupOnGeom.hxx - -# additionnal information to compil and link file -CPPFLAGS += $(OCC_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome $(BOOST_CPPFLAGS) -CXXFLAGS += $(OCC_CXXFLAGS) -I${KERNEL_ROOT_DIR}/include/salome -LDFLAGS += $(OCC_KERNEL_LIBS) -lSMDS - - -# additional file to be cleaned -MOSTLYCLEAN = -CLEAN = -DISTCLEAN = - -@CONCLUDE@ diff --git a/src/SMESHDS/SMESHDS_Command.cxx b/src/SMESHDS/SMESHDS_Command.cxx deleted file mode 100644 index b55b5af1c..000000000 --- a/src/SMESHDS/SMESHDS_Command.cxx +++ /dev/null @@ -1,410 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Command.cxx -// Author : Yves FRICAUD, OCC -// Module : SMESH -// $Header: - -#include "SMESHDS_Command.hxx" - -#include "utilities.h" - -using namespace std; - -//======================================================================= -//function : -//purpose : -//======================================================================= -SMESHDS_Command::SMESHDS_Command(const SMESHDS_CommandType aType):myType(aType), -myNumber(0) -{ -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Command::AddNode(int NewNodeID, double x, double y, double z) -{ - if (!myType == SMESHDS_AddNode) - { - MESSAGE("SMESHDS_Command::AddNode : Bad Type"); - return; - } - myIntegers.push_back(NewNodeID); - myReals.push_back(x); - myReals.push_back(y); - myReals.push_back(z); - myNumber++; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Command::MoveNode(int NodeID, double x, double y, double z) -{ - if (!myType == SMESHDS_MoveNode) - { - MESSAGE("SMESHDS_Command::MoveNode : Bad Type"); - return; - } - myIntegers.push_back(NodeID); - myReals.push_back(x); - myReals.push_back(y); - myReals.push_back(z); - myNumber++; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Command::AddEdge(int NewEdgeID, int idnode1, int idnode2) -{ - if (!myType == SMESHDS_AddEdge) - { - MESSAGE("SMESHDS_Command::AddEdge : Bad Type"); - return; - } - myIntegers.push_back(NewEdgeID); - myIntegers.push_back(idnode1); - myIntegers.push_back(idnode2); - myNumber++; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Command::AddFace(int NewFaceID, - int idnode1, int idnode2, int idnode3) -{ - if (!myType == SMESHDS_AddTriangle) - { - MESSAGE("SMESHDS_Command::AddFace : Bad Type"); - return; - } - myIntegers.push_back(NewFaceID); - myIntegers.push_back(idnode1); - myIntegers.push_back(idnode2); - myIntegers.push_back(idnode3); - myNumber++; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Command::AddFace(int NewFaceID, - int idnode1, int idnode2, int idnode3, int idnode4) -{ - if (!myType == SMESHDS_AddQuadrangle) - { - MESSAGE("SMESHDS_Command::AddFace : Bad Type"); - return; - } - myIntegers.push_back(NewFaceID); - myIntegers.push_back(idnode1); - myIntegers.push_back(idnode2); - myIntegers.push_back(idnode3); - myIntegers.push_back(idnode4); - myNumber++; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Command::AddVolume(int NewVolID, - int idnode1, int idnode2, int idnode3, int idnode4) -{ - if (!myType == SMESHDS_AddTetrahedron) - { - MESSAGE("SMESHDS_Command::AddVolume : Bad Type"); - return; - } - myIntegers.push_back(NewVolID); - myIntegers.push_back(idnode1); - myIntegers.push_back(idnode2); - myIntegers.push_back(idnode3); - myIntegers.push_back(idnode4); - myNumber++; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Command::AddVolume(int NewVolID, - int idnode1, int idnode2, int idnode3, int idnode4, int idnode5) -{ - if (!myType == SMESHDS_AddPyramid) - { - MESSAGE("SMESHDS_Command::AddVolume : Bad Type"); - return; - } - myIntegers.push_back(NewVolID); - myIntegers.push_back(idnode1); - myIntegers.push_back(idnode2); - myIntegers.push_back(idnode3); - myIntegers.push_back(idnode4); - myIntegers.push_back(idnode5); - myNumber++; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Command::AddVolume(int NewVolID, - int idnode1, - int idnode2, int idnode3, int idnode4, int idnode5, int idnode6) -{ - if (!myType == SMESHDS_AddPrism) - { - MESSAGE("SMESHDS_Command::AddVolume : Bad Type"); - return; - } - myIntegers.push_back(NewVolID); - myIntegers.push_back(idnode1); - myIntegers.push_back(idnode2); - myIntegers.push_back(idnode3); - myIntegers.push_back(idnode4); - myIntegers.push_back(idnode5); - myIntegers.push_back(idnode6); - myNumber++; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Command::AddVolume(int NewVolID, - int idnode1, - int idnode2, - int idnode3, - int idnode4, int idnode5, int idnode6, int idnode7, int idnode8) -{ - if (!myType == SMESHDS_AddHexahedron) - { - MESSAGE("SMESHDS_Command::AddVolume : Bad Type"); - return; - } - myIntegers.push_back(NewVolID); - myIntegers.push_back(idnode1); - myIntegers.push_back(idnode2); - myIntegers.push_back(idnode3); - myIntegers.push_back(idnode4); - myIntegers.push_back(idnode5); - myIntegers.push_back(idnode6); - myIntegers.push_back(idnode7); - myIntegers.push_back(idnode8); - myNumber++; -} - -//======================================================================= -//function : AddPolygonalFace -//purpose : -//======================================================================= -void SMESHDS_Command::AddPolygonalFace (const int ElementID, - std::vector nodes_ids) -{ - if (!myType == SMESHDS_AddPolygon) { - MESSAGE("SMESHDS_Command::AddPolygonalFace : Bad Type"); - return; - } - myIntegers.push_back(ElementID); - - int i, nbNodes = nodes_ids.size(); - myIntegers.push_back(nbNodes); - for (i = 0; i < nbNodes; i++) { - myIntegers.push_back(nodes_ids[i]); - } - - myNumber++; -} - -//======================================================================= -//function : AddPolyhedralVolume -//purpose : -//======================================================================= -void SMESHDS_Command::AddPolyhedralVolume (const int ElementID, - std::vector nodes_ids, - std::vector quantities) -{ - if (!myType == SMESHDS_AddPolyhedron) { - MESSAGE("SMESHDS_Command::AddPolyhedralVolume : Bad Type"); - return; - } - myIntegers.push_back(ElementID); - - int i, nbNodes = nodes_ids.size(); - myIntegers.push_back(nbNodes); - for (i = 0; i < nbNodes; i++) { - myIntegers.push_back(nodes_ids[i]); - } - - int nbFaces = quantities.size(); - myIntegers.push_back(nbFaces); - for (i = 0; i < nbFaces; i++) { - myIntegers.push_back(quantities[i]); - } - - myNumber++; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Command::RemoveNode(int NodeID) -{ - if (!myType == SMESHDS_RemoveNode) - { - MESSAGE("SMESHDS_Command::RemoveNode : Bad Type"); - return; - } - myIntegers.push_back(NodeID); - myNumber++; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Command::RemoveElement(int ElementID) -{ - if (!myType == SMESHDS_RemoveElement) - { - MESSAGE("SMESHDS_Command::RemoveElement : Bad Type"); - return; - } - myIntegers.push_back(ElementID); - myNumber++; -} - -//======================================================================= -//function : ChangeElementNodes -//purpose : -//======================================================================= - -void SMESHDS_Command::ChangeElementNodes(int ElementID, int nodes[], int nbnodes) -{ - if (!myType == SMESHDS_ChangeElementNodes) - { - MESSAGE("SMESHDS_Command::ChangeElementNodes : Bad Type"); - return; - } - myIntegers.push_back(ElementID); - myIntegers.push_back(nbnodes); - for ( int i = 0; i < nbnodes; i++ ) - myIntegers.push_back( nodes[ i ] ); - - myNumber++; -} - -//======================================================================= -//function : ChangePolyhedronNodes -//purpose : -//======================================================================= -void SMESHDS_Command::ChangePolyhedronNodes (const int ElementID, - std::vector nodes_ids, - std::vector quantities) -{ - if (myType != SMESHDS_ChangePolyhedronNodes) - { - MESSAGE("SMESHDS_Command::ChangePolyhedronNodes : Bad Type"); - return; - } - myIntegers.push_back(ElementID); - - int i, nbNodes = nodes_ids.size(); - myIntegers.push_back(nbNodes); - for (i = 0; i < nbNodes; i++) { - myIntegers.push_back(nodes_ids[i]); - } - - int nbFaces = quantities.size(); - myIntegers.push_back(nbFaces); - for (i = 0; i < nbFaces; i++) { - myIntegers.push_back(quantities[i]); - } - - myNumber++; -} - -//======================================================================= -//function : Renumber -//purpose : -//======================================================================= - -void SMESHDS_Command::Renumber (const bool isNodes, const int startID, const int deltaID) -{ - if (!myType == SMESHDS_Renumber) - { - MESSAGE("SMESHDS_Command::Renumber : Bad Type"); - return; - } - myIntegers.push_back(isNodes); - myIntegers.push_back(startID); - myIntegers.push_back(deltaID); - myNumber++; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -SMESHDS_CommandType SMESHDS_Command::GetType() -{ - return myType; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -int SMESHDS_Command::GetNumber() -{ - return myNumber; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -const list < int >&SMESHDS_Command::GetIndexes() -{ - return myIntegers; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -const list < double >&SMESHDS_Command::GetCoords() -{ - return myReals; -} diff --git a/src/SMESHDS/SMESHDS_Command.hxx b/src/SMESHDS/SMESHDS_Command.hxx deleted file mode 100644 index 3ecd762f3..000000000 --- a/src/SMESHDS/SMESHDS_Command.hxx +++ /dev/null @@ -1,76 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_Command.hxx -// Module : SMESH - -#ifndef _SMESHDS_Command_HeaderFile -#define _SMESHDS_Command_HeaderFile - -#include "SMESHDS_CommandType.hxx" -#include -#include - -class SMESHDS_Command -{ - - public: - SMESHDS_Command(const SMESHDS_CommandType aType); - void AddNode(int NewNodeID, double x, double y, double z); - void AddEdge(int NewEdgeID, int idnode1, int idnode2); - void AddFace(int NewFaceID, int idnode1, int idnode2, int idnode3); - void AddFace(int NewFaceID, int idnode1, int idnode2, int idnode3, - int idnode4); - void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3, - int idnode4); - void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3, - int idnode4, int idnode5); - void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3, - int idnode4, int idnode5, int idnode6); - void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3, - int idnode4, int idnode5, int idnode6, int idnode7, int idnode8); - void AddPolygonalFace (const int ElementID, - std::vector nodes_ids); - void AddPolyhedralVolume (const int ElementID, - std::vector nodes_ids, - std::vector quantities); - void MoveNode(int NewNodeID, double x, double y, double z); - void RemoveNode(int NodeID); - void RemoveElement(int ElementID); - void ChangeElementNodes(int ElementID, int nodes[], int nbnodes); - void ChangePolyhedronNodes(const int ElementID, - std::vector nodes_ids, - std::vector quantities); - void Renumber (const bool isNodes, const int startID, const int deltaID); - SMESHDS_CommandType GetType(); - int GetNumber(); - const std::list & GetIndexes(); - const std::list & GetCoords(); - ~SMESHDS_Command(); - private: - SMESHDS_CommandType myType; - int myNumber; - std::list myReals; - std::list myIntegers; -}; -#endif diff --git a/src/SMESHDS/SMESHDS_CommandType.hxx b/src/SMESHDS/SMESHDS_CommandType.hxx deleted file mode 100644 index f2c505b1f..000000000 --- a/src/SMESHDS/SMESHDS_CommandType.hxx +++ /dev/null @@ -1,52 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_CommandType.hxx -// Module : SMESH - -#ifndef _SMESHDS_CommandType_HeaderFile -#define _SMESHDS_CommandType_HeaderFile - -//#include - -enum SMESHDS_CommandType { - SMESHDS_AddNode, - SMESHDS_AddEdge, - SMESHDS_AddTriangle, - SMESHDS_AddQuadrangle, - SMESHDS_AddPolygon, - SMESHDS_AddTetrahedron, - SMESHDS_AddPyramid, - SMESHDS_AddPrism, - SMESHDS_AddHexahedron, - SMESHDS_AddPolyhedron, - SMESHDS_RemoveNode, - SMESHDS_RemoveElement, - SMESHDS_MoveNode, - SMESHDS_ChangeElementNodes, - SMESHDS_ChangePolyhedronNodes, - SMESHDS_Renumber -}; - - -#endif diff --git a/src/SMESHDS/SMESHDS_Document.cxx b/src/SMESHDS/SMESHDS_Document.cxx deleted file mode 100644 index f533a72a7..000000000 --- a/src/SMESHDS/SMESHDS_Document.cxx +++ /dev/null @@ -1,192 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_Document.cxx -// Author : Yves FRICAUD, OCC -// Module : SMESH -// $Header: - -#include "SMESHDS_Document.hxx" -#include "utilities.h" - -using namespace std; - -//======================================================================= -//function : Create -//purpose : -//======================================================================= -SMESHDS_Document::SMESHDS_Document(int UserID):myUserID(UserID) -{ -} - -//======================================================================= -//function : NewMesh -//purpose : -//======================================================================= -int SMESHDS_Document::NewMesh() -{ - static int NewMeshID = 0; - NewMeshID++; - SMESHDS_Mesh *aNewMesh = new SMESHDS_Mesh(NewMeshID); - myMeshes[NewMeshID] = aNewMesh; - return NewMeshID; -} - -//======================================================================= -//function : GetMesh -//purpose : -//======================================================================= -SMESHDS_Mesh *SMESHDS_Document::GetMesh(int MeshID) -{ - map::iterator it=myMeshes.find(MeshID); - if (it==myMeshes.end()) - { - MESSAGE("SMESHDS_Document::GetMesh : ID not found"); - return NULL; - } - else return (*it).second; -} - -//======================================================================= -//function : RemoveMesh -//purpose : -//======================================================================= -void SMESHDS_Document::RemoveMesh(int MeshID) -{ - map::iterator it=myMeshes.find(MeshID); - if (it==myMeshes.end()) - MESSAGE("SMESHDS_Document::RemoveMesh : ID not found"); - myMeshes.erase(it); -} - -//======================================================================= -//function : AddHypothesis -//purpose : -//======================================================================= -void SMESHDS_Document::AddHypothesis(SMESHDS_Hypothesis * H) -{ - myHypothesis[H->GetID()]=H; -} - -//======================================================================= -//function : GetHypothesis -//purpose : -//======================================================================= -SMESHDS_Hypothesis * SMESHDS_Document::GetHypothesis(int HypID) -{ - map::iterator it=myHypothesis.find(HypID); - if (it==myHypothesis.end()) - { - MESSAGE("SMESHDS_Document::GetHypothesis : ID not found"); - return NULL; - } - else return (*it).second; -} - -//======================================================================= -//function : RemoveHypothesis -//purpose : -//======================================================================= -void SMESHDS_Document::RemoveHypothesis(int HypID) -{ - map::iterator it=myHypothesis.find(HypID); - if (it==myHypothesis.end()) - MESSAGE("SMESHDS_Document::RemoveHypothesis : ID not found"); - myHypothesis.erase(it); -} - -//======================================================================= -//function : NbMeshes -//purpose : -//======================================================================= -int SMESHDS_Document::NbMeshes() -{ - return myMeshes.size(); -} - -//======================================================================= -//function : NbHypothesis -//purpose : -//======================================================================= -int SMESHDS_Document::NbHypothesis() -{ - return myHypothesis.size(); -} - -//======================================================================= -//function : InitMeshesIterator -//purpose : -//======================================================================= -void SMESHDS_Document::InitMeshesIterator() -{ - myMeshesIt=myMeshes.begin(); -} - -//======================================================================= -//function : NextMesh -//purpose : -//======================================================================= -SMESHDS_Mesh * SMESHDS_Document::NextMesh() -{ - SMESHDS_Mesh * toReturn=(*myMeshesIt).second; - myMeshesIt++; - return toReturn; -} - -//======================================================================= -//function : MoreMesh -//purpose : -//======================================================================= -bool SMESHDS_Document::MoreMesh() -{ - return myMeshesIt!=myMeshes.end(); -} - -//======================================================================= -//function : InitHypothesisIterator -//purpose : -//======================================================================= -void SMESHDS_Document::InitHypothesisIterator() -{ - myHypothesisIt=myHypothesis.begin(); -} - -//======================================================================= -//function : NextMesh -//purpose : -//======================================================================= -SMESHDS_Hypothesis * SMESHDS_Document::NextHypothesis() -{ - SMESHDS_Hypothesis * toReturn=(*myHypothesisIt).second; - myHypothesisIt++; - return toReturn; -} - -//======================================================================= -//function : MoreMesh -//purpose : -//======================================================================= -bool SMESHDS_Document::MoreHypothesis() -{ - return myHypothesisIt!=myHypothesis.end(); -} diff --git a/src/SMESHDS/SMESHDS_Document.hxx b/src/SMESHDS/SMESHDS_Document.hxx deleted file mode 100644 index e95269f11..000000000 --- a/src/SMESHDS/SMESHDS_Document.hxx +++ /dev/null @@ -1,63 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_Document.hxx -// Module : SMESH - -#ifndef _SMESHDS_Document_HeaderFile -#define _SMESHDS_Document_HeaderFile - -#include "SMESHDS_Mesh.hxx" -#include "SMESHDS_Hypothesis.hxx" -#include - - -class SMESHDS_Document -{ - public: - SMESHDS_Document(int UserID); - int NewMesh(); - void RemoveMesh(int MeshID); - SMESHDS_Mesh * GetMesh(int MeshID); - void AddHypothesis(SMESHDS_Hypothesis * H); - void RemoveHypothesis(int HypID); - SMESHDS_Hypothesis * GetHypothesis(int HypID); - int NbMeshes(); - int NbHypothesis(); - void InitMeshesIterator(); - SMESHDS_Mesh * NextMesh(); - bool MoreMesh(); - void InitHypothesisIterator(); - SMESHDS_Hypothesis * NextHypothesis(); - bool MoreHypothesis(); - ~SMESHDS_Document(); - - private: - int myUserID; - std::map myMeshes; - std::map myHypothesis; - std::map::iterator myMeshesIt; - std::map::iterator myHypothesisIt; -}; - -#endif diff --git a/src/SMESHDS/SMESHDS_Group.cxx b/src/SMESHDS/SMESHDS_Group.cxx deleted file mode 100644 index 9c7dfa4a9..000000000 --- a/src/SMESHDS/SMESHDS_Group.cxx +++ /dev/null @@ -1,164 +0,0 @@ -// SMESH SMESHDS : idl implementation based on 'SMESH' unit's classes -// -// Copyright (C) 2004 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_Group.cxx -// Module : SMESH -// $Header$ - -#include "SMESHDS_Group.hxx" -#include "SMESHDS_Mesh.hxx" - -using namespace std; - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESHDS_Group::SMESHDS_Group (const int theID, - const SMESHDS_Mesh* theMesh, - const SMDSAbs_ElementType theType) - : SMESHDS_GroupBase(theID,theMesh,theType), - myGroup(theMesh,theType) -{ -} - -//======================================================================= -//function : Extent -//purpose : -//======================================================================= - -int SMESHDS_Group::Extent() -{ - return myGroup.Extent(); -} - -//======================================================================= -//function : IsEmpty -//purpose : -//======================================================================= - -bool SMESHDS_Group::IsEmpty() -{ - return myGroup.IsEmpty(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool SMESHDS_Group::Contains (const int theID) -{ - const SMDS_MeshElement* aElem = findInMesh (theID); - if (aElem) - return myGroup.Contains(aElem); - return false; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool SMESHDS_Group::Add (const int theID) -{ - const SMDS_MeshElement* aElem = findInMesh (theID); - if (!aElem || myGroup.Contains(aElem)) - return false; - - if (myGroup.IsEmpty()) - SetType( aElem->GetType() ); - - myGroup.Add (aElem); - resetIterator(); - return true; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool SMESHDS_Group::Remove (const int theID) -{ - const SMDS_MeshElement* aElem = findInMesh (theID); - if (!aElem || !myGroup.Contains(aElem)) - return false; - myGroup.Remove (aElem); - resetIterator(); - return true; -} - -//======================================================================= -//function : Clear -//purpose : -//======================================================================= - -void SMESHDS_Group::Clear() -{ - myGroup.Clear(); - resetIterator(); -} - -// ===================== -// class MyGroupIterator -// ===================== - -class MyGroupIterator: public SMDS_ElemIterator -{ - const SMDS_MeshGroup& myGroup; - public: - MyGroupIterator(const SMDS_MeshGroup& group): myGroup(group) { myGroup.InitIterator(); } - bool more() { return myGroup.More(); } - const SMDS_MeshElement* next() { return myGroup.Next(); } -}; - -//======================================================================= -//function : GetElements -//purpose : -//======================================================================= - -SMDS_ElemIteratorPtr SMESHDS_Group::GetElements() -{ - return SMDS_ElemIteratorPtr( new MyGroupIterator ( myGroup )); -} - -//======================================================================= -//function : SetType -//purpose : -//======================================================================= - -void SMESHDS_Group::SetType(SMDSAbs_ElementType theType) -{ - if ( myGroup.IsEmpty() || GetType() == SMDSAbs_All ) { - SMESHDS_GroupBase::SetType( theType ); - myGroup.SetType ( theType ); - } - else - SMESHDS_GroupBase::SetType( myGroup.GetType() ); -} - diff --git a/src/SMESHDS/SMESHDS_Group.hxx b/src/SMESHDS/SMESHDS_Group.hxx deleted file mode 100644 index b318a0f97..000000000 --- a/src/SMESHDS/SMESHDS_Group.hxx +++ /dev/null @@ -1,68 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2004 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_Group.hxx -// Module : SMESH -// $Header$ - -#ifndef _SMESHDS_Group_HeaderFile -#define _SMESHDS_Group_HeaderFile - -#include -#include "SMESHDS_GroupBase.hxx" -#include "SMDS_MeshGroup.hxx" - -class SMESHDS_Mesh; - -class SMESHDS_Group : public SMESHDS_GroupBase -{ - public: - - SMESHDS_Group (const int theID, - const SMESHDS_Mesh* theMesh, - const SMDSAbs_ElementType theType); - - virtual void SetType(SMDSAbs_ElementType theType); - - virtual int Extent(); - - virtual bool IsEmpty(); - - virtual bool Contains (const int theID); - - virtual SMDS_ElemIteratorPtr GetElements(); - - bool SMESHDS_Group::Add (const int theID); - - bool SMESHDS_Group::Remove (const int theID); - - void Clear(); - - SMDS_MeshGroup& SMDSGroup() { return myGroup; } - - private: - - SMDS_MeshGroup myGroup; - -}; - -#endif diff --git a/src/SMESHDS/SMESHDS_GroupBase.cxx b/src/SMESHDS/SMESHDS_GroupBase.cxx deleted file mode 100644 index c4adcc53b..000000000 --- a/src/SMESHDS/SMESHDS_GroupBase.cxx +++ /dev/null @@ -1,150 +0,0 @@ -// SMESH SMESHDS : idl implementation based on 'SMESH' unit's classes -// -// Copyright (C) 2004 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_Group.cxx -// Module : SMESH -// $Header$ - -#include "SMESHDS_GroupBase.hxx" -#include "SMESHDS_Mesh.hxx" - -#include "utilities.h" - -using namespace std; - -//============================================================================= -/*! - * - */ -//============================================================================= - -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) -{ -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -int SMESHDS_GroupBase::GetID (const int theIndex) -{ - if (myCurIndex < 1 || myCurIndex > theIndex) { - myIterator = GetElements(); - myCurIndex = 0; - myCurID = -1; - } - while (myCurIndex < theIndex && myIterator->more()) { - myCurIndex++; - myCurID = myIterator->next()->GetID(); - } - return myCurIndex == theIndex ? myCurID : -1; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -const SMDS_MeshElement* SMESHDS_GroupBase::findInMesh (const int theID) const -{ - SMDSAbs_ElementType aType = GetType(); - const SMDS_MeshElement* aElem = NULL; - if (aType == SMDSAbs_Node) { - aElem = GetMesh()->FindNode(theID); - } - else if (aType != SMDSAbs_All) { - aElem = GetMesh()->FindElement(theID); - if (aElem && aType != aElem->GetType()) - aElem = NULL; - } - return aElem; -} - -//============================================================================= -/*! - * Internal method: resets cached iterator, should be called by ancestors - * when they are modified (ex: Add() or Remove() ) - */ -//============================================================================= -void SMESHDS_GroupBase::resetIterator() -{ - myCurIndex = 0; - myCurID = -1; -} - -//======================================================================= -//function : Extent -//purpose : -//======================================================================= - -int SMESHDS_GroupBase::Extent() -{ - SMDS_ElemIteratorPtr it = GetElements(); - int nb = 0; - if ( it ) - for ( ; it->more(); it->next() ) - nb++; - return nb; -} - -//======================================================================= -//function : IsEmpty -//purpose : -//======================================================================= - -bool SMESHDS_GroupBase::IsEmpty() -{ - SMDS_ElemIteratorPtr it = GetElements(); - return ( !it || !it->more() ); -} - -//======================================================================= -//function : Contains -//purpose : -//======================================================================= - -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; -} - -//======================================================================= -//function : SetType -//purpose : -//======================================================================= - -void SMESHDS_GroupBase::SetType(SMDSAbs_ElementType theType) -{ - myType = theType; -} diff --git a/src/SMESHDS/SMESHDS_GroupBase.hxx b/src/SMESHDS/SMESHDS_GroupBase.hxx deleted file mode 100644 index a7aa87ced..000000000 --- a/src/SMESHDS/SMESHDS_GroupBase.hxx +++ /dev/null @@ -1,90 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2004 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_Group.hxx -// Module : SMESH -// $Header$ - -#ifndef _SMESHDS_GroupBase_HeaderFile -#define _SMESHDS_GroupBase_HeaderFile - -#include -#include "SMDSAbs_ElementType.hxx" -#include "SMDS_MeshElement.hxx" - -class SMESHDS_Mesh; - -class SMESHDS_GroupBase -{ - public: - - SMESHDS_GroupBase (const int theID, - const SMESHDS_Mesh* theMesh, - const SMDSAbs_ElementType theType); - - int GetID() const { return myID; } - - const SMESHDS_Mesh* GetMesh() const { return myMesh; } - - virtual void SetType(SMDSAbs_ElementType theType); - - SMDSAbs_ElementType GetType() const { return myType; } - - void SetStoreName (const char* theName) { myStoreName = theName; } - - const char* GetStoreName () const { return myStoreName.c_str(); } - - virtual int Extent(); - - virtual bool IsEmpty(); - - virtual bool Contains (const int theID); - - virtual SMDS_ElemIteratorPtr GetElements() = 0; - - int GetID (const int theIndex); - // use it for iterations 1..Extent() - - virtual ~SMESHDS_GroupBase() {} - - protected: - const SMDS_MeshElement* findInMesh (const int theID) const; - void resetIterator(); - - private: - SMESHDS_GroupBase (const SMESHDS_GroupBase& theOther); - // prohibited copy constructor - SMESHDS_GroupBase& operator = (const SMESHDS_GroupBase& theOther); - // prohibited assign operator - - int myID; - const SMESHDS_Mesh* myMesh; - SMDSAbs_ElementType myType; - std::string myStoreName; - // for GetID() - int myCurIndex; - int myCurID; - SMDS_ElemIteratorPtr myIterator; - -}; - -#endif diff --git a/src/SMESHDS/SMESHDS_GroupOnGeom.cxx b/src/SMESHDS/SMESHDS_GroupOnGeom.cxx deleted file mode 100644 index 187357a67..000000000 --- a/src/SMESHDS/SMESHDS_GroupOnGeom.cxx +++ /dev/null @@ -1,112 +0,0 @@ -// SMESH SMESHDS : idl implementation based on 'SMESH' unit's classes -// -// Copyright (C) 2004 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_GroupOnGeom.cxx -// Module : SMESH -// $Header$ - -#include "SMESHDS_GroupOnGeom.hxx" -#include "SMESHDS_Mesh.hxx" -#include "utilities.h" - -using namespace std; - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESHDS_GroupOnGeom::SMESHDS_GroupOnGeom (const int theID, - const SMESHDS_Mesh* theMesh, - const SMDSAbs_ElementType theType, - const TopoDS_Shape& theShape) - : SMESHDS_GroupBase(theID,theMesh,theType), myShape(theShape) -{ - SMESHDS_Mesh* aMesh = const_cast(theMesh); - mySubMesh = aMesh->MeshElements( aMesh->AddCompoundSubmesh( theShape )); -} - -// ===================== -// class MyGroupIterator -// ===================== - -class MyIterator: public SMDS_ElemIterator -{ - SMDSAbs_ElementType myType; - SMDS_ElemIteratorPtr myElemIt; - SMDS_NodeIteratorPtr myNodeIt; - const SMDS_MeshElement* myElem; - public: - MyIterator(SMDSAbs_ElementType type, const SMESHDS_SubMesh* subMesh) - : myType(type), myElem(0) - { - if ( subMesh ) - if ( myType == SMDSAbs_Node ) - myNodeIt = subMesh->GetNodes(); - else { - myElemIt = subMesh->GetElements(); - next(); - } - } - bool more() - { - if ( myType == SMDSAbs_Node && myNodeIt ) - return myNodeIt->more(); - return ( myElem != 0 ); - } - const SMDS_MeshElement* next() - { - if ( myType == SMDSAbs_Node && myNodeIt ) - return myNodeIt->next(); - const SMDS_MeshElement* res = myElem; - myElem = 0; - while ( myElemIt && myElemIt->more() ) { - myElem = myElemIt->next(); - if ( myElem && myElem->GetType() == myType ) - break; - else - myElem = 0; - } - return res; - } -}; - -//======================================================================= -//function : GetElements -//purpose : -//======================================================================= - -SMDS_ElemIteratorPtr SMESHDS_GroupOnGeom::GetElements() -{ - return SMDS_ElemIteratorPtr( new MyIterator ( GetType(), mySubMesh )); -} - -//======================================================================= -//function : Contains -//purpose : -//======================================================================= - -bool SMESHDS_GroupOnGeom::Contains (const int theID) -{ - return mySubMesh->Contains( findInMesh( theID )); -} diff --git a/src/SMESHDS/SMESHDS_GroupOnGeom.hxx b/src/SMESHDS/SMESHDS_GroupOnGeom.hxx deleted file mode 100644 index 6a514e2f1..000000000 --- a/src/SMESHDS/SMESHDS_GroupOnGeom.hxx +++ /dev/null @@ -1,56 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2004 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_GroupOnGeom.hxx -// Module : SMESH -// $Header$ - -#ifndef _SMESHDS_GroupOnGeom_HeaderFile -#define _SMESHDS_GroupOnGeom_HeaderFile - -#include "SMESHDS_GroupBase.hxx" -#include - -class SMESHDS_SubMesh; - -class SMESHDS_GroupOnGeom: public SMESHDS_GroupBase -{ - public: - - SMESHDS_GroupOnGeom (const int theID, - const SMESHDS_Mesh* theMesh, - const SMDSAbs_ElementType theType, - const TopoDS_Shape& theShape); - - TopoDS_Shape GetShape() const { return myShape; } - - virtual bool Contains (const int theID); - - virtual SMDS_ElemIteratorPtr GetElements(); - - private: - - TopoDS_Shape myShape; - const SMESHDS_SubMesh* mySubMesh; -}; - -#endif diff --git a/src/SMESHDS/SMESHDS_Hypothesis.cxx b/src/SMESHDS/SMESHDS_Hypothesis.cxx deleted file mode 100644 index 29501c440..000000000 --- a/src/SMESHDS/SMESHDS_Hypothesis.cxx +++ /dev/null @@ -1,98 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_Hypothesis.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#include "SMESHDS_Hypothesis.hxx" - -using namespace std; - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESHDS_Hypothesis::SMESHDS_Hypothesis(int hypId) -{ -// MESSAGE("SMESHDS_Hypothesis::SMESHDS_Hypothesis"); - _hypId = hypId; - _name = "generic"; -// SCRUTE(_name); -// SCRUTE(_hypId); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESHDS_Hypothesis::~SMESHDS_Hypothesis() -{ -// MESSAGE("SMESHDS_Hypothesis::~SMESHDS_Hypothesis"); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -const char* SMESHDS_Hypothesis::GetName() const -{ -// MESSAGE("SMESHDS_Hypothesis::GetName"); -// SCRUTE(_name); -// SCRUTE(&_name); - return _name.c_str(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -int SMESHDS_Hypothesis::GetID() const -{ -// MESSAGE("SMESHDS_Hypothesis::GetId"); -// SCRUTE(_hypId); - return _hypId; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -int SMESHDS_Hypothesis::GetType() const -{ -// MESSAGE("SMESHDS_Hypothesis::GetType"); -// SCRUTE(_type); - return _type; -} - diff --git a/src/SMESHDS/SMESHDS_Hypothesis.hxx b/src/SMESHDS/SMESHDS_Hypothesis.hxx deleted file mode 100644 index 9fb413fbd..000000000 --- a/src/SMESHDS/SMESHDS_Hypothesis.hxx +++ /dev/null @@ -1,56 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_Hypothesis.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESHDS_HYPOTHESIS_HXX_ -#define _SMESHDS_HYPOTHESIS_HXX_ - -#include -#include - -class SMESHDS_Hypothesis -{ -public: - SMESHDS_Hypothesis(int hypId); - virtual ~SMESHDS_Hypothesis(); - - const char* GetName() const; - int GetID() const; - int GetType() const; - - virtual std::ostream & SaveTo(std::ostream & save)=0; - virtual std::istream & LoadFrom(std::istream & load)=0; - -enum hypothesis_type {PARAM_ALGO, ALGO, ALGO_1D, ALGO_2D, ALGO_3D}; - -protected: - std::string _name; - int _hypId; - int _type; -}; - -#endif diff --git a/src/SMESHDS/SMESHDS_Mesh.cxx b/src/SMESHDS/SMESHDS_Mesh.cxx deleted file mode 100644 index ded954d0c..000000000 --- a/src/SMESHDS/SMESHDS_Mesh.cxx +++ /dev/null @@ -1,1127 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Mesh.cxx -// Author : Yves FRICAUD, OCC -// Module : SMESH -// $Header: - -#include "SMESHDS_Mesh.hxx" - -#include "SMESHDS_Group.hxx" -#include "SMDS_VertexPosition.hxx" -#include "SMDS_EdgePosition.hxx" -#include "SMDS_FacePosition.hxx" -#include "SMESHDS_GroupOnGeom.hxx" -#include -#include -#include - -#include "utilities.h" - -using namespace std; - -//======================================================================= -//function : Create -//purpose : -//======================================================================= -SMESHDS_Mesh::SMESHDS_Mesh(int MeshID):myMeshID(MeshID) -{ - myScript = new SMESHDS_Script(); -} - -//======================================================================= -//function : ShapeToMesh -//purpose : -//======================================================================= -void SMESHDS_Mesh::ShapeToMesh(const TopoDS_Shape & S) -{ - if ( !myShape.IsNull() && S.IsNull() ) - { - // removal of a shape to mesh, delete ... - // - hypotheses - myShapeToHypothesis.clear(); - // - shape indices in SMDS_Position of nodes - map::iterator i_sub = myShapeIndexToSubMesh.begin(); - for ( ; i_sub != myShapeIndexToSubMesh.end(); i_sub++ ) { - if ( !i_sub->second->IsComplexSubmesh() ) { - SMDS_NodeIteratorPtr nIt = i_sub->second->GetNodes(); - while ( nIt->more() ) - nIt->next()->GetPosition()->SetShapeId( 0 ); - } - } - // - sub-meshes - myIndexToShape.Clear(); - myShapeIndexToSubMesh.clear(); - // - groups on geometry - set::iterator gr = myGroups.begin(); - while ( gr != myGroups.end() ) { - if ( dynamic_cast( *gr )) - myGroups.erase( gr++ ); - else - gr++; - } - } - else { - myShape = S; - if ( !S.IsNull() ) - TopExp::MapShapes(myShape, myIndexToShape); - } -} - -//======================================================================= -//function : AddHypothesis -//purpose : -//======================================================================= - -bool SMESHDS_Mesh::AddHypothesis(const TopoDS_Shape & SS, - const SMESHDS_Hypothesis * H) -{ - list& alist=myShapeToHypothesis[SS]; - - //Check if the Hypothesis is still present - list::iterator ith=alist.begin(); - - for (; ith!=alist.end(); ith++) - if (H == *ith) return false; - - alist.push_back(H); - return true; -} - -//======================================================================= -//function : RemoveHypothesis -//purpose : -//======================================================================= - -bool SMESHDS_Mesh::RemoveHypothesis(const TopoDS_Shape & S, - const SMESHDS_Hypothesis * H) -{ - ShapeToHypothesis::iterator its=myShapeToHypothesis.find(S); - if(its!=myShapeToHypothesis.end()) - { - list::iterator ith=(*its).second.begin(); - - for (; ith!=(*its).second.end(); ith++) - if (H == *ith) - { - (*its).second.erase(ith); - return true; - } - } - return false; -} - -//======================================================================= -//function : AddNode -//purpose : -//======================================================================= -SMDS_MeshNode* SMESHDS_Mesh::AddNode(double x, double y, double z){ - SMDS_MeshNode* node = SMDS_Mesh::AddNode(x, y, z); - if(node!=NULL) myScript->AddNode(node->GetID(), x, y, z); - return node; -} - -SMDS_MeshNode* SMESHDS_Mesh::AddNodeWithID(double x, double y, double z, int ID){ - SMDS_MeshNode* node = SMDS_Mesh::AddNodeWithID(x,y,z,ID); - if(node!=NULL) myScript->AddNode(node->GetID(), x, y, z); - return node; -} - -//======================================================================= -//function : MoveNode -//purpose : -//======================================================================= -void SMESHDS_Mesh::MoveNode(const SMDS_MeshNode *n, double x, double y, double z) -{ - SMDS_MeshNode * node=const_cast(n); - node->setXYZ(x,y,z); - myScript->MoveNode(n->GetID(), x, y, z); -} - -//======================================================================= -//function : ChangeElementNodes -//purpose : -//======================================================================= - -bool SMESHDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * elem, - const SMDS_MeshNode * nodes[], - const int nbnodes) -{ - if ( ! SMDS_Mesh::ChangeElementNodes( elem, nodes, nbnodes )) - return false; - - //ASSERT( nbnodes < 9 ); - //int i, IDs[ 8 ]; - int i, IDs[ nbnodes ]; - for ( i = 0; i < nbnodes; i++ ) - IDs [ i ] = nodes[ i ]->GetID(); - myScript->ChangeElementNodes( elem->GetID(), IDs, nbnodes); - - return true; -} - -//======================================================================= -//function : ChangePolygonNodes -//purpose : -//======================================================================= -bool SMESHDS_Mesh::ChangePolygonNodes - (const SMDS_MeshElement * elem, - std::vector nodes) -{ - ASSERT(nodes.size() > 3); - - int nb = nodes.size(); - const SMDS_MeshNode* nodes_array [nb]; - for (int inode = 0; inode < nb; inode++) { - nodes_array[inode] = nodes[inode]; - } - - return ChangeElementNodes(elem, nodes_array, nb); -} - -//======================================================================= -//function : ChangePolyhedronNodes -//purpose : -//======================================================================= -bool SMESHDS_Mesh::ChangePolyhedronNodes - (const SMDS_MeshElement * elem, - std::vector nodes, - std::vector quantities) -{ - ASSERT(nodes.size() > 3); - - if (!SMDS_Mesh::ChangePolyhedronNodes(elem, nodes, quantities)) - return false; - - int i, len = nodes.size(); - std::vector nodes_ids (len); - for (i = 0; i < len; i++) { - nodes_ids[i] = nodes[i]->GetID(); - } - myScript->ChangePolyhedronNodes(elem->GetID(), nodes_ids, quantities); - - return true; -} - -//======================================================================= -//function : Renumber -//purpose : -//======================================================================= - -void SMESHDS_Mesh::Renumber (const bool isNodes, const int startID, const int deltaID) -{ - SMDS_Mesh::Renumber( isNodes, startID, deltaID ); - myScript->Renumber( isNodes, startID, deltaID ); -} - -//======================================================================= -//function :AddEdgeWithID -//purpose : -//======================================================================= -SMDS_MeshEdge* SMESHDS_Mesh::AddEdgeWithID(int n1, int n2, int ID) -{ - SMDS_MeshEdge* anElem = SMDS_Mesh::AddEdgeWithID(n1,n2,ID); - if(anElem) myScript->AddEdge(ID,n1,n2); - return anElem; -} - -SMDS_MeshEdge* SMESHDS_Mesh::AddEdgeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - int ID) -{ - return AddEdgeWithID(n1->GetID(), - n2->GetID(), - ID); -} - -SMDS_MeshEdge* SMESHDS_Mesh::AddEdge(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2) -{ - SMDS_MeshEdge* anElem = SMDS_Mesh::AddEdge(n1,n2); - if(anElem) myScript->AddEdge(anElem->GetID(), - n1->GetID(), - n2->GetID()); - return anElem; -} - -//======================================================================= -//function :AddFace -//purpose : -//======================================================================= -SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(int n1, int n2, int n3, int ID) -{ - SMDS_MeshFace *anElem = SMDS_Mesh::AddFaceWithID(n1, n2, n3, ID); - if(anElem) myScript->AddFace(ID,n1,n2,n3); - return anElem; -} - -SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - int ID) -{ - return AddFaceWithID(n1->GetID(), - n2->GetID(), - n3->GetID(), - ID); -} - -SMDS_MeshFace* SMESHDS_Mesh::AddFace( const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3) -{ - SMDS_MeshFace *anElem = SMDS_Mesh::AddFace(n1, n2, n3); - if(anElem) myScript->AddFace(anElem->GetID(), - n1->GetID(), - n2->GetID(), - n3->GetID()); - return anElem; -} - -//======================================================================= -//function :AddFace -//purpose : -//======================================================================= -SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(int n1, int n2, int n3, int n4, int ID) -{ - SMDS_MeshFace *anElem = SMDS_Mesh::AddFaceWithID(n1, n2, n3, n4, ID); - if(anElem) myScript->AddFace(ID, n1, n2, n3, n4); - return anElem; -} - -SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - int ID) -{ - return AddFaceWithID(n1->GetID(), - n2->GetID(), - n3->GetID(), - n4->GetID(), - ID); -} - -SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4) -{ - SMDS_MeshFace *anElem = SMDS_Mesh::AddFace(n1, n2, n3, n4); - if(anElem) myScript->AddFace(anElem->GetID(), - n1->GetID(), - n2->GetID(), - n3->GetID(), - n4->GetID()); - return anElem; -} - -//======================================================================= -//function :AddVolume -//purpose : -//======================================================================= -SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4, int ID) -{ - SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, ID); - if(anElem) myScript->AddVolume(ID, n1, n2, n3, n4); - return anElem; -} - -SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - int ID) -{ - return AddVolumeWithID(n1->GetID(), - n2->GetID(), - n3->GetID(), - n4->GetID(), - ID); -} - -SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4) -{ - SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1, n2, n3, n4); - if(anElem) myScript->AddVolume(anElem->GetID(), - n1->GetID(), - n2->GetID(), - n3->GetID(), - n4->GetID()); - return anElem; -} - -//======================================================================= -//function :AddVolume -//purpose : -//======================================================================= -SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int ID) -{ - SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, ID); - if(anElem) myScript->AddVolume(ID, n1, n2, n3, n4, n5); - return anElem; -} - -SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - int ID) -{ - return AddVolumeWithID(n1->GetID(), - n2->GetID(), - n3->GetID(), - n4->GetID(), - n5->GetID(), - ID); -} - -SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5) -{ - SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1, n2, n3, n4, n5); - if(anElem) myScript->AddVolume(anElem->GetID(), - n1->GetID(), - n2->GetID(), - n3->GetID(), - n4->GetID(), - n5->GetID()); - return anElem; -} - -//======================================================================= -//function :AddVolume -//purpose : -//======================================================================= -SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int n6, int ID) -{ - SMDS_MeshVolume *anElem= SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, ID); - if(anElem) myScript->AddVolume(ID, n1, n2, n3, n4, n5, n6); - return anElem; -} - -SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6, - int ID) -{ - return AddVolumeWithID(n1->GetID(), - n2->GetID(), - n3->GetID(), - n4->GetID(), - n5->GetID(), - n6->GetID(), - ID); -} - -SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6) -{ - SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1, n2, n3, n4, n5, n6); - if(anElem) myScript->AddVolume(anElem->GetID(), - n1->GetID(), - n2->GetID(), - n3->GetID(), - n4->GetID(), - n5->GetID(), - n6->GetID()); - return anElem; -} - -//======================================================================= -//function :AddVolume -//purpose : -//======================================================================= -SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int ID) -{ - SMDS_MeshVolume *anElem= SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8, ID); - if(anElem) myScript->AddVolume(ID, n1, n2, n3, n4, n5, n6, n7, n8); - return anElem; -} - -SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6, - const SMDS_MeshNode * n7, - const SMDS_MeshNode * n8, - int ID) -{ - return AddVolumeWithID(n1->GetID(), - n2->GetID(), - n3->GetID(), - n4->GetID(), - n5->GetID(), - n6->GetID(), - n7->GetID(), - n8->GetID(), - ID); -} - -SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6, - const SMDS_MeshNode * n7, - const SMDS_MeshNode * n8) -{ - SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1, n2, n3, n4, n5, n6, n7, n8); - if(anElem) myScript->AddVolume(anElem->GetID(), - n1->GetID(), - n2->GetID(), - n3->GetID(), - n4->GetID(), - n5->GetID(), - n6->GetID(), - n7->GetID(), - n8->GetID()); - return anElem; -} - -//======================================================================= -//function : AddPolygonalFace -//purpose : -//======================================================================= -SMDS_MeshFace* SMESHDS_Mesh::AddPolygonalFaceWithID (std::vector nodes_ids, - const int ID) -{ - SMDS_MeshFace *anElem = SMDS_Mesh::AddPolygonalFaceWithID(nodes_ids, ID); - if (anElem) { - myScript->AddPolygonalFace(ID, nodes_ids); - } - return anElem; -} - -SMDS_MeshFace* SMESHDS_Mesh::AddPolygonalFaceWithID - (std::vector nodes, - const int ID) -{ - SMDS_MeshFace *anElem = SMDS_Mesh::AddPolygonalFaceWithID(nodes, ID); - if (anElem) { - int i, len = nodes.size(); - std::vector nodes_ids (len); - for (i = 0; i < len; i++) { - nodes_ids[i] = nodes[i]->GetID(); - } - myScript->AddPolygonalFace(ID, nodes_ids); - } - return anElem; -} - -SMDS_MeshFace* SMESHDS_Mesh::AddPolygonalFace - (std::vector nodes) -{ - SMDS_MeshFace *anElem = SMDS_Mesh::AddPolygonalFace(nodes); - if (anElem) { - int i, len = nodes.size(); - std::vector nodes_ids (len); - for (i = 0; i < len; i++) { - nodes_ids[i] = nodes[i]->GetID(); - } - myScript->AddPolygonalFace(anElem->GetID(), nodes_ids); - } - return anElem; -} - -//======================================================================= -//function : AddPolyhedralVolume -//purpose : -//======================================================================= -SMDS_MeshVolume* SMESHDS_Mesh::AddPolyhedralVolumeWithID (std::vector nodes_ids, - std::vector quantities, - const int ID) -{ - SMDS_MeshVolume *anElem = SMDS_Mesh::AddPolyhedralVolumeWithID(nodes_ids, quantities, ID); - if (anElem) { - myScript->AddPolyhedralVolume(ID, nodes_ids, quantities); - } - return anElem; -} - -SMDS_MeshVolume* SMESHDS_Mesh::AddPolyhedralVolumeWithID - (std::vector nodes, - std::vector quantities, - const int ID) -{ - SMDS_MeshVolume *anElem = SMDS_Mesh::AddPolyhedralVolumeWithID(nodes, quantities, ID); - if (anElem) { - int i, len = nodes.size(); - std::vector nodes_ids (len); - for (i = 0; i < len; i++) { - nodes_ids[i] = nodes[i]->GetID(); - } - myScript->AddPolyhedralVolume(ID, nodes_ids, quantities); - } - return anElem; -} - -SMDS_MeshVolume* SMESHDS_Mesh::AddPolyhedralVolume - (std::vector nodes, - std::vector quantities) -{ - SMDS_MeshVolume *anElem = SMDS_Mesh::AddPolyhedralVolume(nodes, quantities); - if (anElem) { - int i, len = nodes.size(); - std::vector nodes_ids (len); - for (i = 0; i < len; i++) { - nodes_ids[i] = nodes[i]->GetID(); - } - myScript->AddPolyhedralVolume(anElem->GetID(), nodes_ids, quantities); - } - return anElem; -} - -//======================================================================= -//function : removeFromContainers -//purpose : -//======================================================================= - -static void removeFromContainers (map & theSubMeshes, - set& theGroups, - list & theElems, - const bool isNode) -{ - if ( theElems.empty() ) - return; - - // Rm from group - // Element can belong to several groups - if ( !theGroups.empty() ) - { - set::iterator GrIt = theGroups.begin(); - for ( ; GrIt != theGroups.end(); GrIt++ ) - { - SMESHDS_Group* group = dynamic_cast( *GrIt ); - if ( !group || group->IsEmpty() ) continue; - - list::iterator elIt = theElems.begin(); - for ( ; elIt != theElems.end(); elIt++ ) - { - group->SMDSGroup().Remove( *elIt ); - if ( group->IsEmpty() ) break; - } - } - } - - // Rm from sub-meshes - // Element should belong to only one sub-mesh - map::iterator SubIt = theSubMeshes.begin(); - for ( ; SubIt != theSubMeshes.end(); SubIt++ ) - { - int size = isNode ? (*SubIt).second->NbNodes() : (*SubIt).second->NbElements(); - if ( size == 0 ) continue; - - list::iterator elIt = theElems.begin(); - while ( elIt != theElems.end() ) - { - bool removed = false; - if ( isNode ) - removed = (*SubIt).second->RemoveNode( static_cast (*elIt) ); - else - removed = (*SubIt).second->RemoveElement( *elIt ); - - if (removed) - { - elIt = theElems.erase( elIt ); - if ( theElems.empty() ) - return; // all elements are found and removed - } - else - { - elIt++ ; - } - } - } -} - -//======================================================================= -//function : RemoveNode -//purpose : -//======================================================================= -void SMESHDS_Mesh::RemoveNode(const SMDS_MeshNode * n) -{ - myScript->RemoveNode(n->GetID()); - - list removedElems; - list removedNodes; - - SMDS_Mesh::RemoveElement( n, removedElems, removedNodes, true ); - - removeFromContainers( myShapeIndexToSubMesh, myGroups, removedElems, false ); - removeFromContainers( myShapeIndexToSubMesh, myGroups, removedNodes, true ); -} - -//======================================================================= -//function : RemoveElement -//purpose : -//======================================================================== -void SMESHDS_Mesh::RemoveElement(const SMDS_MeshElement * elt) -{ - if (elt->GetType() == SMDSAbs_Node) - { - RemoveNode( static_cast( elt )); - return; - } - - myScript->RemoveElement(elt->GetID()); - - list removedElems; - list removedNodes; - - SMDS_Mesh::RemoveElement(elt, removedElems, removedNodes, false); - - removeFromContainers( myShapeIndexToSubMesh, myGroups, removedElems, false ); -} - -//======================================================================= -//function : SetNodeOnVolume -//purpose : -//======================================================================= -void SMESHDS_Mesh::SetNodeInVolume(SMDS_MeshNode * aNode, - const TopoDS_Shell & S) -{ - if (myShape.IsNull()) MESSAGE("myShape is NULL"); - - int Index = myIndexToShape.FindIndex(S); - - //Set Position on Node - //Handle (SMDS_FacePosition) aPos = new SMDS_FacePosition (myFaceToId(S),0.,0.);; - //aNode->SetPosition(aPos); - - //Update or build submesh - map::iterator it=myShapeIndexToSubMesh.find(Index); - if (it==myShapeIndexToSubMesh.end()) - myShapeIndexToSubMesh[Index]= new SMESHDS_SubMesh(); - - myShapeIndexToSubMesh[Index]->AddNode(aNode); -} - -//======================================================================= -//function : SetNodeOnFace -//purpose : -//======================================================================= -void SMESHDS_Mesh::SetNodeOnFace(SMDS_MeshNode * aNode, - const TopoDS_Face & S) -{ - if (myShape.IsNull()) MESSAGE("myShape is NULL"); - - int Index = myIndexToShape.FindIndex(S); - - //Set Position on Node - aNode->SetPosition(SMDS_PositionPtr(new SMDS_FacePosition(Index, 0., 0.))); - - //Update or build submesh - map::iterator it=myShapeIndexToSubMesh.find(Index); - if (it==myShapeIndexToSubMesh.end()) - myShapeIndexToSubMesh[Index]= new SMESHDS_SubMesh(); - - myShapeIndexToSubMesh[Index]->AddNode(aNode); -} - -//======================================================================= -//function : SetNodeOnEdge -//purpose : -//======================================================================= -void SMESHDS_Mesh::SetNodeOnEdge(SMDS_MeshNode * aNode, - const TopoDS_Edge & S) -{ - if (myShape.IsNull()) MESSAGE("myShape is NULL"); - - int Index = myIndexToShape.FindIndex(S); - - //Set Position on Node - aNode->SetPosition(SMDS_PositionPtr(new SMDS_EdgePosition(Index, 0.))); - - //Update or build submesh - map::iterator it=myShapeIndexToSubMesh.find(Index); - if (it==myShapeIndexToSubMesh.end()) - myShapeIndexToSubMesh[Index]= new SMESHDS_SubMesh(); - - myShapeIndexToSubMesh[Index]->AddNode(aNode); -} - -//======================================================================= -//function : SetNodeOnVertex -//purpose : -//======================================================================= -void SMESHDS_Mesh::SetNodeOnVertex(SMDS_MeshNode * aNode, - const TopoDS_Vertex & S) -{ - if (myShape.IsNull()) MESSAGE("myShape is NULL"); - - int Index = myIndexToShape.FindIndex(S); - - //Set Position on Node - aNode->SetPosition(SMDS_PositionPtr(new SMDS_VertexPosition(Index))); - - //Update or build submesh - map::iterator it=myShapeIndexToSubMesh.find(Index); - if (it==myShapeIndexToSubMesh.end()) - myShapeIndexToSubMesh[Index]= new SMESHDS_SubMesh(); - - myShapeIndexToSubMesh[Index]->AddNode(aNode); -} - -//======================================================================= -//function : UnSetNodeOnShape -//purpose : -//======================================================================= -void SMESHDS_Mesh::UnSetNodeOnShape(const SMDS_MeshNode* aNode) -{ - MESSAGE("not implemented"); -} - -//======================================================================= -//function : SetMeshElementOnShape -//purpose : -//======================================================================= -void SMESHDS_Mesh::SetMeshElementOnShape(const SMDS_MeshElement * anElement, - const TopoDS_Shape & S) -{ - if (myShape.IsNull()) MESSAGE("myShape is NULL"); - - int Index = myIndexToShape.FindIndex(S); - - if (myShapeIndexToSubMesh.find(Index)==myShapeIndexToSubMesh.end()) - myShapeIndexToSubMesh[Index]=new SMESHDS_SubMesh(); - - myShapeIndexToSubMesh[Index]->AddElement(anElement); -} - -//======================================================================= -//function : UnSetMeshElementOnShape -//purpose : -//======================================================================= -void SMESHDS_Mesh:: -UnSetMeshElementOnShape(const SMDS_MeshElement * anElement, - const TopoDS_Shape & S) -{ - if (myShape.IsNull()) MESSAGE("myShape is NULL"); - - int Index = myIndexToShape.FindIndex(S); - - if (myShapeIndexToSubMesh.find(Index)!=myShapeIndexToSubMesh.end()) - myShapeIndexToSubMesh[Index]->RemoveElement(anElement); -} - -//======================================================================= -//function : ShapeToMesh -//purpose : -//======================================================================= -TopoDS_Shape SMESHDS_Mesh::ShapeToMesh() const -{ - return myShape; -} - -//======================================================================= -//function : IsGroupOfSubShapes -//purpose : return true if at least one subshape of theShape is a subshape -// of myShape or theShape == myShape -//======================================================================= - -bool SMESHDS_Mesh::IsGroupOfSubShapes (const TopoDS_Shape& theShape) const -{ - if ( myShape.IsSame( theShape )) - return true; - - for ( TopoDS_Iterator it( theShape ); it.More(); it.Next() ) { - if (myIndexToShape.Contains( it.Value() ) || - IsGroupOfSubShapes( it.Value() )) - return true; - } - - return false; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return the sub mesh linked to the a given TopoDS_Shape or NULL if the given -/// TopoDS_Shape is unknown -/////////////////////////////////////////////////////////////////////////////// -SMESHDS_SubMesh * SMESHDS_Mesh::MeshElements(const TopoDS_Shape & S) const -{ - if (myShape.IsNull()) MESSAGE("myShape is NULL"); - - int Index = ShapeToIndex(S); - TShapeIndexToSubMesh::const_iterator anIter = myShapeIndexToSubMesh.find(Index); - if (anIter != myShapeIndexToSubMesh.end()) - return anIter->second; - else - return NULL; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Return the sub mesh by Id of shape it is linked to -/////////////////////////////////////////////////////////////////////////////// -SMESHDS_SubMesh * SMESHDS_Mesh::MeshElements(const int Index) -{ - if (myShape.IsNull()) MESSAGE("myShape is NULL"); - - if (myShapeIndexToSubMesh.find(Index)!=myShapeIndexToSubMesh.end()) - return myShapeIndexToSubMesh[Index]; - else - return NULL; -} - -//======================================================================= -//function : SubMeshIndices -//purpose : -//======================================================================= -list SMESHDS_Mesh::SubMeshIndices() -{ - list anIndices; - std::map::iterator anIter = myShapeIndexToSubMesh.begin(); - for (; anIter != myShapeIndexToSubMesh.end(); anIter++) { - anIndices.push_back((*anIter).first); - } - return anIndices; -} - -//======================================================================= -//function : GetHypothesis -//purpose : -//======================================================================= - -const list& SMESHDS_Mesh::GetHypothesis( - const TopoDS_Shape & S) const -{ - if (myShapeToHypothesis.find(S)!=myShapeToHypothesis.end()) - return myShapeToHypothesis.find(S)->second; - - static list empty; - return empty; -} - -//======================================================================= -//function : GetScript -//purpose : -//======================================================================= -SMESHDS_Script* SMESHDS_Mesh::GetScript() -{ - return myScript; -} - -//======================================================================= -//function : ClearScript -//purpose : -//======================================================================= -void SMESHDS_Mesh::ClearScript() -{ - myScript->Clear(); -} - -//======================================================================= -//function : HasMeshElements -//purpose : -//======================================================================= -bool SMESHDS_Mesh::HasMeshElements(const TopoDS_Shape & S) -{ - if (myShape.IsNull()) MESSAGE("myShape is NULL"); - int Index = myIndexToShape.FindIndex(S); - return myShapeIndexToSubMesh.find(Index)!=myShapeIndexToSubMesh.end(); -} - -//======================================================================= -//function : HasHypothesis -//purpose : -//======================================================================= -bool SMESHDS_Mesh::HasHypothesis(const TopoDS_Shape & S) -{ - return myShapeToHypothesis.find(S)!=myShapeToHypothesis.end(); -} - -//======================================================================= -//function : NewSubMesh -//purpose : -//======================================================================= -SMESHDS_SubMesh * SMESHDS_Mesh::NewSubMesh(int Index) -{ - SMESHDS_SubMesh* SM = 0; - if (myShapeIndexToSubMesh.find(Index)==myShapeIndexToSubMesh.end()) - { - SM = new SMESHDS_SubMesh(); - myShapeIndexToSubMesh[Index]=SM; - } - else - SM = myShapeIndexToSubMesh[Index]; - return SM; -} - -//======================================================================= -//function : AddCompoundSubmesh -//purpose : -//======================================================================= - -int SMESHDS_Mesh::AddCompoundSubmesh(const TopoDS_Shape& S, - TopAbs_ShapeEnum type) -{ - int aMainIndex = 0; - if ( IsGroupOfSubShapes( S ) || (S.ShapeType() == TopAbs_VERTEX && myIndexToShape.Contains(S)) ) - { - aMainIndex = myIndexToShape.Add( S ); - bool all = ( type == TopAbs_SHAPE ); - if ( all ) // corresponding simple submesh may exist - aMainIndex = -aMainIndex; - //MESSAGE("AddCompoundSubmesh index = " << aMainIndex ); - SMESHDS_SubMesh * aNewSub = NewSubMesh( aMainIndex ); - if ( !aNewSub->IsComplexSubmesh() ) // is empty - { - int shapeType = all ? myShape.ShapeType() : type; - int typeLimit = all ? TopAbs_VERTEX : type; - for ( ; shapeType <= typeLimit; shapeType++ ) - { - TopExp_Explorer exp( S, TopAbs_ShapeEnum( shapeType )); - for ( ; exp.More(); exp.Next() ) - { - int index = myIndexToShape.FindIndex( exp.Current() ); - if ( index ) - aNewSub->AddSubMesh( NewSubMesh( index )); - } - } - } - } - return aMainIndex; -} - -//======================================================================= -//function : IndexToShape -//purpose : -//======================================================================= -TopoDS_Shape SMESHDS_Mesh::IndexToShape(int ShapeIndex) -{ - return myIndexToShape.FindKey(ShapeIndex); -} - -//======================================================================= -//function : ShapeToIndex -//purpose : -//======================================================================= -int SMESHDS_Mesh::ShapeToIndex(const TopoDS_Shape & S) const -{ - if (myShape.IsNull()) - MESSAGE("myShape is NULL"); - - int index = myIndexToShape.FindIndex(S); - - return index; -} - -//======================================================================= -//function : SetNodeOnVolume -//purpose : -//======================================================================= -void SMESHDS_Mesh::SetNodeInVolume(const SMDS_MeshNode* aNode, int Index) -{ - //Set Position on Node - //Handle (SMDS_FacePosition) aPos = new SMDS_FacePosition (myFaceToId(S),0.,0.);; - //aNode->SetPosition(aPos); - - //Update or build submesh - if (myShapeIndexToSubMesh.find(Index)==myShapeIndexToSubMesh.end()) - myShapeIndexToSubMesh[Index]=new SMESHDS_SubMesh(); - - myShapeIndexToSubMesh[Index]->AddNode(aNode); -} - -//======================================================================= -//function : SetNodeOnFace -//purpose : -//======================================================================= -void SMESHDS_Mesh::SetNodeOnFace(SMDS_MeshNode* aNode, int Index) -{ - //Set Position on Node - aNode->SetPosition(SMDS_PositionPtr(new SMDS_FacePosition(Index, 0., 0.))); - - //Update or build submesh - if (myShapeIndexToSubMesh.find(Index)==myShapeIndexToSubMesh.end()) - myShapeIndexToSubMesh[Index]=new SMESHDS_SubMesh(); - - myShapeIndexToSubMesh[Index]->AddNode(aNode); -} - -//======================================================================= -//function : SetNodeOnEdge -//purpose : -//======================================================================= -void SMESHDS_Mesh::SetNodeOnEdge(SMDS_MeshNode* aNode, int Index) -{ - //Set Position on Node - aNode->SetPosition(SMDS_PositionPtr(new SMDS_EdgePosition(Index, 0.))); - - //Update or build submesh - if (myShapeIndexToSubMesh.find(Index)==myShapeIndexToSubMesh.end()) - myShapeIndexToSubMesh[Index]=new SMESHDS_SubMesh(); - - myShapeIndexToSubMesh[Index]->AddNode(aNode); -} - -//======================================================================= -//function : SetNodeOnVertex -//purpose : -//======================================================================= -void SMESHDS_Mesh::SetNodeOnVertex(SMDS_MeshNode* aNode, int Index) -{ - //Set Position on Node - aNode->SetPosition(SMDS_PositionPtr(new SMDS_VertexPosition(Index))); - - //Update or build submesh - if (myShapeIndexToSubMesh.find(Index)==myShapeIndexToSubMesh.end()) - myShapeIndexToSubMesh[Index]=new SMESHDS_SubMesh(); - - myShapeIndexToSubMesh[Index]->AddNode(aNode); -} - -//======================================================================= -//function : SetMeshElementOnShape -//purpose : -//======================================================================= -void SMESHDS_Mesh::SetMeshElementOnShape(const SMDS_MeshElement* anElement, - int Index) -{ - if (myShapeIndexToSubMesh.find(Index)==myShapeIndexToSubMesh.end()) - myShapeIndexToSubMesh[Index]=new SMESHDS_SubMesh(); - - myShapeIndexToSubMesh[Index]->AddElement(anElement); -} - -SMESHDS_Mesh::~SMESHDS_Mesh() -{ -} diff --git a/src/SMESHDS/SMESHDS_Mesh.hxx b/src/SMESHDS/SMESHDS_Mesh.hxx deleted file mode 100644 index 86b9071c1..000000000 --- a/src/SMESHDS/SMESHDS_Mesh.hxx +++ /dev/null @@ -1,262 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_Mesh.hxx -// Module : SMESH - -#ifndef _SMESHDS_Mesh_HeaderFile -#define _SMESHDS_Mesh_HeaderFile - -#include "SMDS_Mesh.hxx" -#include "SMDS_MeshNode.hxx" -#include "SMDS_MeshEdge.hxx" -#include "SMDS_MeshFace.hxx" -#include "SMDS_MeshVolume.hxx" -#include "SMESHDS_Hypothesis.hxx" -#include "SMESHDS_SubMesh.hxx" -#include "SMESHDS_Script.hxx" - -#include -#include -#include -#include -#include -#include -#include - -//Not portable see http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html#5_4 to know more. -#ifdef __GNUC__ - #if __GNUC__ < 3 - #include - namespace gstd { using ::hash_map; }; // inherit globals - #else - #include - #if __GNUC_MINOR__ == 0 - namespace gstd = std; // GCC 3.0 - #else - namespace gstd = ::__gnu_cxx; // GCC 3.1 and later - #endif - #endif -#else // ... there are other compilers, right? - namespace gstd = std; -#endif - -class SMESHDS_GroupBase; - -class SMESHDS_Mesh:public SMDS_Mesh{ -public: - SMESHDS_Mesh(int MeshID); - void ShapeToMesh(const TopoDS_Shape & S); - bool AddHypothesis(const TopoDS_Shape & SS, const SMESHDS_Hypothesis * H); - bool RemoveHypothesis(const TopoDS_Shape & S, const SMESHDS_Hypothesis * H); - - virtual SMDS_MeshNode* AddNodeWithID(double x, double y, double z, int ID); - virtual SMDS_MeshNode * AddNode(double x, double y, double z); - - virtual SMDS_MeshEdge* AddEdgeWithID(int n1, int n2, int ID); - virtual SMDS_MeshEdge* AddEdgeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - int ID); - virtual SMDS_MeshEdge* AddEdge(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2); - - virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int ID); - virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - int ID); - virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3); - - virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int n4, int ID); - virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - int ID); - virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4); - - virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int ID); - virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - int ID); - virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4); - - virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int ID); - virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - int ID); - virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5); - - virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int n6, int ID); - virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6, - int ID); - virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6); - - virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int ID); - virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6, - const SMDS_MeshNode * n7, - const SMDS_MeshNode * n8, - int ID); - virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1, - const SMDS_MeshNode * n2, - const SMDS_MeshNode * n3, - const SMDS_MeshNode * n4, - const SMDS_MeshNode * n5, - const SMDS_MeshNode * n6, - const SMDS_MeshNode * n7, - const SMDS_MeshNode * n8); - - virtual SMDS_MeshFace* AddPolygonalFaceWithID (std::vector nodes_ids, - const int ID); - - virtual SMDS_MeshFace* AddPolygonalFaceWithID (std::vector nodes, - const int ID); - - virtual SMDS_MeshFace* AddPolygonalFace (std::vector nodes); - - virtual SMDS_MeshVolume* AddPolyhedralVolumeWithID - (std::vector nodes_ids, - std::vector quantities, - const int ID); - - virtual SMDS_MeshVolume* AddPolyhedralVolumeWithID - (std::vector nodes, - std::vector quantities, - const int ID); - - virtual SMDS_MeshVolume* AddPolyhedralVolume - (std::vector nodes, - std::vector quantities); - - void MoveNode(const SMDS_MeshNode *, double x, double y, double z); - virtual void RemoveNode(const SMDS_MeshNode *); - void RemoveElement(const SMDS_MeshElement *); - bool ChangeElementNodes(const SMDS_MeshElement * elem, - const SMDS_MeshNode * nodes[], - const int nbnodes); - bool ChangePolygonNodes(const SMDS_MeshElement * elem, - std::vector nodes); - bool ChangePolyhedronNodes(const SMDS_MeshElement * elem, - std::vector nodes, - std::vector quantities); - void Renumber (const bool isNodes, const int startID=1, const int deltaID=1); - - void SetNodeInVolume(SMDS_MeshNode * aNode, const TopoDS_Shell & S); - void SetNodeOnFace(SMDS_MeshNode * aNode, const TopoDS_Face & S); - void SetNodeOnEdge(SMDS_MeshNode * aNode, const TopoDS_Edge & S); - void SetNodeOnVertex(SMDS_MeshNode * aNode, const TopoDS_Vertex & S); - void UnSetNodeOnShape(const SMDS_MeshNode * aNode); - void SetMeshElementOnShape(const SMDS_MeshElement * anElt, - const TopoDS_Shape & S); - void UnSetMeshElementOnShape(const SMDS_MeshElement * anElt, - const TopoDS_Shape & S); - TopoDS_Shape ShapeToMesh() const; - bool HasMeshElements(const TopoDS_Shape & S); - SMESHDS_SubMesh * MeshElements(const TopoDS_Shape & S) const; - SMESHDS_SubMesh * MeshElements(const int Index); - std::list SubMeshIndices(); - const std::map& SubMeshes() - { return myShapeIndexToSubMesh; } - - bool HasHypothesis(const TopoDS_Shape & S); - const std::list& GetHypothesis(const TopoDS_Shape & S) const; - SMESHDS_Script * GetScript(); - void ClearScript(); - int ShapeToIndex(const TopoDS_Shape & aShape) const; - TopoDS_Shape IndexToShape(int ShapeIndex); - - SMESHDS_SubMesh * NewSubMesh(int Index); - int AddCompoundSubmesh(const TopoDS_Shape& S, TopAbs_ShapeEnum type = TopAbs_SHAPE); - void SetNodeInVolume(const SMDS_MeshNode * aNode, int Index); - void SetNodeOnFace(SMDS_MeshNode * aNode, int Index); - void SetNodeOnEdge(SMDS_MeshNode * aNode, int Index); - void SetNodeOnVertex(SMDS_MeshNode * aNode, int Index); - void SetMeshElementOnShape(const SMDS_MeshElement * anElt, int Index); - - void AddGroup (SMESHDS_GroupBase* theGroup) { myGroups.insert(theGroup); } - void RemoveGroup (SMESHDS_GroupBase* theGroup) { myGroups.erase(theGroup); } - int GetNbGroups() const { return myGroups.size(); } - const std::set& GetGroups() const { return myGroups; } - - bool IsGroupOfSubShapes (const TopoDS_Shape& aSubShape) const; - - ~SMESHDS_Mesh(); - -private: - struct HashTopoDS_Shape{ - size_t operator()(const TopoDS_Shape& S) const { - return S.HashCode(2147483647); - } - }; - typedef std::list THypList; - typedef gstd::hash_map ShapeToHypothesis; - ShapeToHypothesis myShapeToHypothesis; - - int myMeshID; - TopoDS_Shape myShape; - - typedef std::map TShapeIndexToSubMesh; - TShapeIndexToSubMesh myShapeIndexToSubMesh; - - TopTools_IndexedMapOfShape myIndexToShape; - - typedef std::set TGroups; - TGroups myGroups; - - SMESHDS_Script* myScript; -}; - - -#endif diff --git a/src/SMESHDS/SMESHDS_Script.cxx b/src/SMESHDS/SMESHDS_Script.cxx deleted file mode 100644 index 369ab4697..000000000 --- a/src/SMESHDS/SMESHDS_Script.cxx +++ /dev/null @@ -1,247 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Script.cxx -// Author : Yves FRICAUD, OCC -// Module : SMESH -// $Header: - -#include "SMESHDS_Script.hxx" - -using namespace std; - -//======================================================================= -//function : getCommand -//purpose : -//======================================================================= -SMESHDS_Command* SMESHDS_Script::getCommand(const SMESHDS_CommandType aType) -{ - SMESHDS_Command* com; - if (myCommands.empty()) - { - com = new SMESHDS_Command(aType); - myCommands.insert(myCommands.end(),com); - } - else - { - com = myCommands.back(); - if (com->GetType() != aType) - { - com = new SMESHDS_Command(aType); - myCommands.insert(myCommands.end(),com); - } - } - return com; -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Script::AddNode(int NewNodeID, double x, double y, double z) -{ - getCommand(SMESHDS_AddNode)->AddNode(NewNodeID, x, y, z); -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Script::AddEdge(int NewEdgeID, int idnode1, int idnode2) -{ - getCommand(SMESHDS_AddEdge)->AddEdge(NewEdgeID, idnode1, idnode2); -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Script::AddFace(int NewFaceID, - int idnode1, int idnode2, int idnode3) -{ - getCommand(SMESHDS_AddTriangle)->AddFace(NewFaceID, - idnode1, idnode2, idnode3); -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Script::AddFace(int NewFaceID, - int idnode1, int idnode2, - int idnode3, int idnode4) -{ - getCommand(SMESHDS_AddQuadrangle)->AddFace(NewFaceID, - idnode1, idnode2, - idnode3, idnode4); -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Script::AddVolume(int NewID, - int idnode1, int idnode2, - int idnode3, int idnode4) -{ - getCommand(SMESHDS_AddTetrahedron)->AddVolume(NewID, - idnode1, idnode2, - idnode3, idnode4); -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Script::AddVolume(int NewID, - int idnode1, int idnode2, - int idnode3, int idnode4, int idnode5) -{ - getCommand(SMESHDS_AddPyramid)->AddVolume(NewID, - idnode1, idnode2, - idnode3, idnode4, idnode5); -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Script::AddVolume(int NewID, - int idnode1, int idnode2, int idnode3, - int idnode4, int idnode5, int idnode6) -{ - getCommand(SMESHDS_AddPrism)->AddVolume(NewID, - idnode1, idnode2, idnode3, - idnode4, idnode5, idnode6); -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Script::AddVolume(int NewID, - int idnode1, int idnode2, int idnode3, int idnode4, - int idnode5, int idnode6, int idnode7, int idnode8) -{ - getCommand(SMESHDS_AddHexahedron)->AddVolume(NewID, - idnode1, idnode2, idnode3, idnode4, - idnode5, idnode6, idnode7, idnode8); -} - -//======================================================================= -//function : AddPolygonalFace -//purpose : -//======================================================================= -void SMESHDS_Script::AddPolygonalFace (int NewFaceID, std::vector nodes_ids) -{ - getCommand(SMESHDS_AddPolygon)->AddPolygonalFace(NewFaceID, nodes_ids); -} - -//======================================================================= -//function : AddPolyhedralVolume -//purpose : -//======================================================================= -void SMESHDS_Script::AddPolyhedralVolume (int NewID, - std::vector nodes_ids, - std::vector quantities) -{ - getCommand(SMESHDS_AddPolyhedron)->AddPolyhedralVolume - (NewID, nodes_ids, quantities); -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Script::MoveNode(int NewNodeID, double x, double y, double z) -{ - getCommand(SMESHDS_MoveNode)->MoveNode(NewNodeID, x, y, z); -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Script::RemoveNode(int ID) -{ - getCommand(SMESHDS_RemoveNode)->RemoveNode(ID); -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Script::RemoveElement(int ElementID) -{ - getCommand(SMESHDS_RemoveElement)->RemoveElement(ElementID); -} - -//======================================================================= -//function : ChangeElementNodes -//purpose : -//======================================================================= - -void SMESHDS_Script::ChangeElementNodes(int ElementID, int nodes[], int nbnodes) -{ - getCommand(SMESHDS_ChangeElementNodes)->ChangeElementNodes( ElementID, nodes, nbnodes ); -} - -//======================================================================= -//function : ChangePolyhedronNodes -//purpose : -//======================================================================= -void SMESHDS_Script::ChangePolyhedronNodes (const int ElementID, - std::vector nodes_ids, - std::vector quantities) -{ - getCommand(SMESHDS_ChangePolyhedronNodes)->ChangePolyhedronNodes - (ElementID, nodes_ids, quantities); -} - -//======================================================================= -//function : Renumber -//purpose : -//======================================================================= - -void SMESHDS_Script::Renumber (const bool isNodes, const int startID, const int deltaID) -{ - getCommand(SMESHDS_Renumber)->Renumber( isNodes, startID, deltaID ); -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -void SMESHDS_Script::Clear() -{ - myCommands.clear(); -} - -//======================================================================= -//function : -//purpose : -//======================================================================= -const list& SMESHDS_Script::GetCommands() -{ - return myCommands; -} diff --git a/src/SMESHDS/SMESHDS_Script.hxx b/src/SMESHDS/SMESHDS_Script.hxx deleted file mode 100644 index 3874facfc..000000000 --- a/src/SMESHDS/SMESHDS_Script.hxx +++ /dev/null @@ -1,77 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_Script.hxx -// Module : SMESH - -#ifndef _SMESHDS_Script_HeaderFile -#define _SMESHDS_Script_HeaderFile - -#include "SMESHDS_Command.hxx" - -#include -#include - - -class SMESHDS_Script -{ - public: - void AddNode(int NewNodeID, double x, double y, double z); - void AddEdge(int NewEdgeID, int idnode1, int idnode2); - void AddFace(int NewFaceID, int idnode1, int idnode2, int idnode3); - void AddFace(int NewFaceID, int idnode1, int idnode2, int idnode3, - int idnode4); - void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3, - int idnode4); - void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3, - int idnode4, int idnode5); - void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3, - int idnode4, int idnode5, int idnode6); - void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3, - int idnode4, int idnode5, int idnode6, int idnode7, int idnode8); - - void AddPolygonalFace (const int NewFaceID, - std::vector nodes_ids); - void AddPolyhedralVolume (const int NewVolID, - std::vector nodes_ids, - std::vector quantities); - - void MoveNode(int NewNodeID, double x, double y, double z); - void RemoveNode(int NodeID); - void RemoveElement(int ElementID); - void ChangeElementNodes(int ElementID, int nodes[], int nbnodes); - void ChangePolyhedronNodes(const int ElementID, - std::vector nodes_ids, - std::vector quantities); - void Renumber (const bool isNodes, const int startID, const int deltaID); - void Clear(); - const std::list & GetCommands(); - ~SMESHDS_Script(); - - private: - SMESHDS_Command* getCommand(const SMESHDS_CommandType aType); - - std::list myCommands; -}; - -#endif diff --git a/src/SMESHDS/SMESHDS_SubMesh.cxx b/src/SMESHDS/SMESHDS_SubMesh.cxx deleted file mode 100644 index 4218db744..000000000 --- a/src/SMESHDS/SMESHDS_SubMesh.cxx +++ /dev/null @@ -1,291 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_SubMesh.cxx -// Author : Yves FRICAUD, OCC -// Module : SMESH -// $Header: - -#include "SMESHDS_SubMesh.hxx" - -#include "utilities.h" - -using namespace std; - -//======================================================================= -//function : AddElement -//purpose : -//======================================================================= -void SMESHDS_SubMesh::AddElement(const SMDS_MeshElement * ME) -{ - if ( !IsComplexSubmesh() ) - myElements.insert(ME); -} - -//======================================================================= -//function : RemoveElement -//purpose : -//======================================================================= -bool SMESHDS_SubMesh::RemoveElement(const SMDS_MeshElement * ME) -{ - if ( !IsComplexSubmesh() && NbElements() ) - return myElements.erase(ME); - - return false; -} - -//======================================================================= -//function : AddNode -//purpose : -//======================================================================= -void SMESHDS_SubMesh::AddNode(const SMDS_MeshNode * N) -{ - if ( !IsComplexSubmesh() ) - myNodes.insert(N); -} - -//======================================================================= -//function : RemoveNode -//purpose : -//======================================================================= - -bool SMESHDS_SubMesh::RemoveNode(const SMDS_MeshNode * N) -{ - if ( !IsComplexSubmesh() && NbNodes() ) - return myNodes.erase(N); - - return false; -} - -//======================================================================= -//function : NbElements -//purpose : -//======================================================================= -int SMESHDS_SubMesh::NbElements() const -{ - if ( !IsComplexSubmesh() ) - return myElements.size(); - - int nbElems = 0; - set::iterator it = mySubMeshes.begin(); - for ( ; it != mySubMeshes.end(); it++ ) - nbElems += (*it)->NbElements(); - - return nbElems; -} - -//======================================================================= -//function : NbNodes -//purpose : -//======================================================================= - -int SMESHDS_SubMesh::NbNodes() const -{ - if ( !IsComplexSubmesh() ) - return myNodes.size(); - - int nbElems = 0; - set::iterator it = mySubMeshes.begin(); - for ( ; it != mySubMeshes.end(); it++ ) - nbElems += (*it)->NbNodes(); - - return nbElems; -} - -// ===================== -// class MySetIterator -// ===================== - -template class MySetIterator:public SMDS_Iterator -{ - typedef const set TSet; - typename TSet::const_iterator myIt; - TSet& mySet; - - public: - MySetIterator(const set& s):mySet(s), myIt(s.begin()) - { - } - - bool more() - { - return myIt!=mySet.end(); - } - const T* next() - { - const T* t=*myIt; - myIt++; - return t; - } -}; - -// ===================== -// class MyIterator -// ===================== - -template class MyIterator : public SMDS_Iterator -{ - public: - MyIterator (const set& theSubMeshes) - : mySubMeshes( theSubMeshes ), mySubIt( theSubMeshes.begin() ), myMore(false) - {} - bool more() - { - while (( !myElemIt.get() || !myElemIt->more() ) && - mySubIt != mySubMeshes.end()) - { - myElemIt = getElements(*mySubIt); - mySubIt++; - } - myMore = myElemIt.get() && myElemIt->more(); - return myMore; - } - VALUE next() - { - VALUE elem = 0; - if ( myMore ) - elem = myElemIt->next(); - return elem; - } - protected: - virtual boost::shared_ptr< SMDS_Iterator > - getElements(const SMESHDS_SubMesh*) const = 0; - - private: - bool myMore; - const set& mySubMeshes; - set::const_iterator mySubIt; - boost::shared_ptr< SMDS_Iterator > myElemIt; -}; - -// ===================== -// class MyElemIterator -// ===================== - -class MyElemIterator: public MyIterator -{ - public: - MyElemIterator (const set& theSubMeshes) - :MyIterator( theSubMeshes ) {} - SMDS_ElemIteratorPtr getElements(const SMESHDS_SubMesh* theSubMesh) const - { return theSubMesh->GetElements(); } -}; - -// ===================== -// class MyNodeIterator -// ===================== - -class MyNodeIterator: public MyIterator -{ - public: - MyNodeIterator (const set& theSubMeshes) - :MyIterator( theSubMeshes ) {} - SMDS_NodeIteratorPtr getElements(const SMESHDS_SubMesh* theSubMesh) const - { return theSubMesh->GetNodes(); } -}; - -//======================================================================= -//function : GetElements -//purpose : -//======================================================================= - -SMDS_ElemIteratorPtr SMESHDS_SubMesh::GetElements() const -{ - if ( IsComplexSubmesh() ) - return SMDS_ElemIteratorPtr( new MyElemIterator( mySubMeshes )); - - return SMDS_ElemIteratorPtr(new MySetIterator(myElements)); -} - -//======================================================================= -//function : GetNodes -//purpose : -//======================================================================= - -SMDS_NodeIteratorPtr SMESHDS_SubMesh::GetNodes() const -{ - if ( IsComplexSubmesh() ) - return SMDS_NodeIteratorPtr( new MyNodeIterator( mySubMeshes )); - - return SMDS_NodeIteratorPtr(new MySetIterator(myNodes)); -} - -//======================================================================= -//function : Contains -//purpose : check if elem or node is in -//======================================================================= - -bool SMESHDS_SubMesh::Contains(const SMDS_MeshElement * ME) const -{ - // DO NOT TRY TO FIND A REMOVED ELEMENT !! - if ( !ME ) - return false; - - if ( IsComplexSubmesh() ) - { - set::const_iterator aSubIt = mySubMeshes.begin(); - for ( ; aSubIt != mySubMeshes.end(); aSubIt++ ) - if ( (*aSubIt)->Contains( ME )) - return true; - return false; - } - - if ( ME->GetType() == SMDSAbs_Node ) - { - const SMDS_MeshNode* n = static_cast( ME ); - return ( myNodes.find( n ) != myNodes.end() ); - } - - return ( myElements.find( ME ) != myElements.end() ); -} - -//======================================================================= -//function : AddSubMesh -//purpose : -//======================================================================= - -void SMESHDS_SubMesh::AddSubMesh( const SMESHDS_SubMesh* theSubMesh ) -{ - ASSERT( theSubMesh ); - mySubMeshes.insert( theSubMesh ); -} - -//======================================================================= -//function : RemoveSubMesh -//purpose : -//======================================================================= - -bool SMESHDS_SubMesh::RemoveSubMesh( const SMESHDS_SubMesh* theSubMesh ) -{ - return mySubMeshes.erase( theSubMesh ); -} - -//======================================================================= -//function : ContainsSubMesh -//purpose : -//======================================================================= - -bool SMESHDS_SubMesh::ContainsSubMesh( const SMESHDS_SubMesh* theSubMesh ) const -{ - return mySubMeshes.find( theSubMesh ) != mySubMeshes.end(); -} diff --git a/src/SMESHDS/SMESHDS_SubMesh.hxx b/src/SMESHDS/SMESHDS_SubMesh.hxx deleted file mode 100644 index 7b202b9a4..000000000 --- a/src/SMESHDS/SMESHDS_SubMesh.hxx +++ /dev/null @@ -1,63 +0,0 @@ -// SMESH SMESHDS : management of mesh data and SMESH document -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHDS_SubMesh.hxx -// Module : SMESH - -#ifndef _SMESHDS_SubMesh_HeaderFile -#define _SMESHDS_SubMesh_HeaderFile - -#include "SMDS_Mesh.hxx" -#include - -class SMESHDS_SubMesh -{ - public: - - bool IsComplexSubmesh() const { return !mySubMeshes.empty(); } - - // if !IsComplexSubmesh() - void AddElement(const SMDS_MeshElement * ME); - bool RemoveElement(const SMDS_MeshElement * ME); // ret true if ME was in - void AddNode(const SMDS_MeshNode * ME); - bool RemoveNode(const SMDS_MeshNode * ME); // ret true if ME was in - - // if IsComplexSubmesh() - void AddSubMesh( const SMESHDS_SubMesh* theSubMesh ); - bool RemoveSubMesh( const SMESHDS_SubMesh* theSubMesh ); - bool ContainsSubMesh( const SMESHDS_SubMesh* theSubMesh ) const; - - // for both types - int NbElements() const; - SMDS_ElemIteratorPtr GetElements() const; - int NbNodes() const; - SMDS_NodeIteratorPtr GetNodes() const; - bool Contains(const SMDS_MeshElement * ME) const; // check if elem or node is in - - private: - //const SMDS_Mesh * myMesh; - std::set myElements; - std::set myNodes; - std::set mySubMeshes; -}; -#endif diff --git a/src/SMESHFiltersSelection/Handle_SMESH_TypeFilter.hxx b/src/SMESHFiltersSelection/Handle_SMESH_TypeFilter.hxx deleted file mode 100644 index 79db47025..000000000 --- a/src/SMESHFiltersSelection/Handle_SMESH_TypeFilter.hxx +++ /dev/null @@ -1,89 +0,0 @@ -// File generated by CPPExt (Transient) -// -// Copyright (C) 1991,1995 by -// -// MATRA DATAVISION, FRANCE -// -// This software is furnished in accordance with the terms and conditions -// of the contract and with the inclusion of the above copyright notice. -// This software or any other copy thereof may not be provided or otherwise -// be made available to any other person. No title to an ownership of the -// software is hereby transferred. -// -// At the termination of the contract, the software and all copies of this -// software must be deleted. - -#ifndef _Handle_SMESH_TypeFilter_HeaderFile -#define _Handle_SMESH_TypeFilter_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_SALOME_Filter_HeaderFile -#include "Handle_SALOME_Filter.hxx" -#endif - -class Standard_Transient; -class Handle_Standard_Type; -class Handle(SALOME_Filter); -class SMESH_TypeFilter; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(SMESH_TypeFilter); - -class Handle(SMESH_TypeFilter) : public Handle(SALOME_Filter) { - public: - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - Handle(SMESH_TypeFilter)():Handle(SALOME_Filter)() {} - Handle(SMESH_TypeFilter)(const Handle(SMESH_TypeFilter)& aHandle) : Handle(SALOME_Filter)(aHandle) - { - } - - Handle(SMESH_TypeFilter)(const SMESH_TypeFilter* anItem) : Handle(SALOME_Filter)((SALOME_Filter *)anItem) - { - } - - Handle(SMESH_TypeFilter)& operator=(const Handle(SMESH_TypeFilter)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(SMESH_TypeFilter)& operator=(const SMESH_TypeFilter* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - SMESH_TypeFilter* operator->() - { - return (SMESH_TypeFilter *)ControlAccess(); - } - - SMESH_TypeFilter* operator->() const - { - return (SMESH_TypeFilter *)ControlAccess(); - } - - Standard_EXPORT ~Handle(SMESH_TypeFilter)(); - - Standard_EXPORT static const Handle(SMESH_TypeFilter) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/SMESHFiltersSelection/SMESH_LogicalFilter.cxx b/src/SMESHFiltersSelection/SMESH_LogicalFilter.cxx deleted file mode 100644 index 18631a405..000000000 --- a/src/SMESHFiltersSelection/SMESH_LogicalFilter.cxx +++ /dev/null @@ -1,81 +0,0 @@ -// File : SMESH_LogicalFilter.cxx -// Module : SMESH - -#include "SMESH_LogicalFilter.hxx" - -//======================================================================= -// name : SMESH_LogicalFilter::SMESH_LogicalFilter -// Purpose : Constructor -//======================================================================= -SMESH_LogicalFilter::SMESH_LogicalFilter (const QPtrList& theFilters, - const int theLogOp) -{ - setFilters(theFilters); - setOperation(theLogOp); -} - -//======================================================================= -// name : SMESH_LogicalFilter::~SMESH_LogicalFilter -// Purpose : Destructor -//======================================================================= -SMESH_LogicalFilter::~SMESH_LogicalFilter() -{ -} - -//======================================================================= -// name : SMESH_LogicalFilter::IsOk -// Purpose : Verify validity of entry object -//======================================================================= -bool SMESH_LogicalFilter::isOk (const SUIT_DataOwner* owner) const -{ - bool res = true; - QPtrListIterator it (myFilters); - SUIT_SelectionFilter* filter; - for (; ((filter = it.current()) != 0) && res; ++it) - { - if (myOperation == LO_OR && filter->isOk(owner)) - return true; - if (myOperation == LO_AND && !filter->isOk(owner)) - return false; - if (myOperation == LO_NOT) - return !filter->isOk(owner); - } - - return (myOperation != LO_OR); -} - -//======================================================================= -// name : SMESH_LogicalFilter::setFilters -// Purpose : Set new list of filters. Old wilters are removed -//======================================================================= -void SMESH_LogicalFilter::setFilters (const QPtrList& theFilters) -{ - myFilters = theFilters; -} - -//======================================================================= -// name : SMESH_LogicalFilter::setOperation -// Purpose : Set logical operation -//======================================================================= -void SMESH_LogicalFilter::setOperation (const int theLogOp) -{ - myOperation = theLogOp; -} - -//======================================================================= -// name : SMESH_LogicalFilter::getFilters -// Purpose : Get list of filters -//======================================================================= -const QPtrList SMESH_LogicalFilter::getFilters() const -{ - return myFilters; -} - -//======================================================================= -// name : SMESH_LogicalFilter::getOperation -// Purpose : Get logical operation -//======================================================================= -int SMESH_LogicalFilter::getOperation() const -{ - return myOperation; -} diff --git a/src/SMESHFiltersSelection/SMESH_LogicalFilter.hxx b/src/SMESHFiltersSelection/SMESH_LogicalFilter.hxx deleted file mode 100644 index a453bb13d..000000000 --- a/src/SMESHFiltersSelection/SMESH_LogicalFilter.hxx +++ /dev/null @@ -1,33 +0,0 @@ -// File : SMESH_LogicalFilter.hxx -// Module : SMESH - -#ifndef _SMESH_LogicalFilter_HeaderFile -#define _SMESH_LogicalFilter_HeaderFile - -#include - -#include - -class SMESH_LogicalFilter : public SUIT_SelectionFilter -{ - public: - enum { LO_OR, LO_AND, LO_NOT, LO_UNDEFINED }; - - public: - SMESH_LogicalFilter (const QPtrList&, - const int); - virtual ~SMESH_LogicalFilter(); - - virtual bool isOk (const SUIT_DataOwner*) const; - - void setFilters (const QPtrList&); - void setOperation (const int); - const QPtrList getFilters() const; - int getOperation() const; - -private: - QPtrList myFilters; - int myOperation; -}; - -#endif diff --git a/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx b/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx deleted file mode 100644 index 3f0cd8834..000000000 --- a/src/SMESHFiltersSelection/SMESH_NumberFilter.cxx +++ /dev/null @@ -1,200 +0,0 @@ -// File : SMESH_NumberFilter.cxx -// Module : SMESH - -#include "SMESH_NumberFilter.hxx" - -#include "GEOMBase.h" - -#include "SUIT_Application.h" -#include "SUIT_Session.h" - -#include "SalomeApp_Study.h" -#include "SalomeApp_DataOwner.h" - -#include "SALOME_InteractiveObject.hxx" -#include "SALOMEDSClient_SObject.hxx" -#include "SALOMEDS_SObject.hxx" - -#include -#include - -/*! - * Class : SMESH_NumberFilter - * Description : Filter for geom objects. - * Filter geom objects by number of subshapes of the given type - */ - -//======================================================================= -// name : SMESH_NumberFilter::SMESH_NumberFilter -// Purpose : Constructor -//======================================================================= -SMESH_NumberFilter::SMESH_NumberFilter (const char* theKind, - const TopAbs_ShapeEnum theSubShapeType, - const int theNumber, - const TopAbs_ShapeEnum theShapeType, - GEOM::GEOM_Object_ptr theMainObj, - const bool theIsClosedOnly) -{ - myKind = (char*)theKind; - mySubShapeType = theSubShapeType; - myNumber = theNumber; - myIsClosedOnly = theIsClosedOnly; - myShapeTypes.Add(theShapeType); - myMainObj = GEOM::GEOM_Object::_duplicate(theMainObj); -} - -//======================================================================= -// name : SMESH_NumberFilter::SMESH_NumberFilter -// Purpose : Constructor -//======================================================================= -SMESH_NumberFilter::SMESH_NumberFilter (const char* theKind, - const TopAbs_ShapeEnum theSubShapeType, - const int theNumber, - const TColStd_MapOfInteger& theShapeTypes, - GEOM::GEOM_Object_ptr theMainObj, - const bool theIsClosedOnly ) -{ - myKind = (char*)theKind; - mySubShapeType = theSubShapeType; - myNumber = theNumber; - myIsClosedOnly = theIsClosedOnly; - myShapeTypes = theShapeTypes; - myMainObj = GEOM::GEOM_Object::_duplicate(theMainObj); -} - -SMESH_NumberFilter::~SMESH_NumberFilter() -{ -} - -//======================================================================= -// name : SMESH_NumberFilter::SMESH_NumberFilter -// Purpose : Verify validity of entry object -//======================================================================= -bool SMESH_NumberFilter::isOk (const SUIT_DataOwner* theDataOwner) const -{ - if (!theDataOwner) - return false; - - // Get geom object from IO - GEOM::GEOM_Object_var aGeomObj = getGeom(theDataOwner); - if (aGeomObj->_is_nil()) - return false; - - // Get shape from geom object and verify its parameters - TopoDS_Shape aShape; - if (!GEOMBase::GetShape(aGeomObj, aShape) || - aShape.IsNull() || - !myShapeTypes.Contains(aShape.ShapeType())) - return false; - - if (myIsClosedOnly && aShape.ShapeType() == TopAbs_SHELL && !aShape.Closed()) - return false; - - // Verify whether shape of entry object is sub-shape of myMainObj - if (!myMainObj->_is_nil()) { - TopoDS_Shape aMainShape; - if (!GEOMBase::GetShape(myMainObj, aMainShape)) - return false; - - bool isFound = false; - TopAbs_ShapeEnum aShapeType = aShape.ShapeType(); - TopExp_Explorer anExp (aMainShape, aShapeType); - for (; anExp.More(); anExp.Next()) { - if (anExp.Current() == aShape) { - isFound = true; - break; - } - } - if (!isFound) - return false; - } - - // Verify number of sub-shapes - if (mySubShapeType == TopAbs_SHAPE); - return true; - - TopExp_Explorer anExp2 (aShape, mySubShapeType); - TopTools_MapOfShape aMap; - for (; anExp2.More(); anExp2.Next()) - aMap.Add(anExp2.Current()); - - return myNumber == aMap.Extent(); -} - -//======================================================================= -// name : SMESH_NumberFilter::getGeom -// Purpose : Retrieve geom object from SALOME_InteractiveObject -//======================================================================= -GEOM::GEOM_Object_ptr SMESH_NumberFilter::getGeom - (const SUIT_DataOwner* theDataOwner) const -{ - const SalomeApp_DataOwner* owner = - dynamic_cast(theDataOwner); - SalomeApp_Study* appStudy = dynamic_cast - (SUIT_Session::session()->activeApplication()->activeStudy()); - - GEOM::GEOM_Object_var anObj; - - if (!owner || !appStudy) - return GEOM::GEOM_Object::_nil(); - - _PTR(Study) study = appStudy->studyDS(); - QString entry = owner->entry(); - - _PTR(SObject) aSO(study->FindObjectID(entry.latin1())); - if (!aSO) - return GEOM::GEOM_Object::_nil(); - - CORBA::Object_var anObject = _CAST(SObject,aSO)->GetObject(); - anObj = GEOM::GEOM_Object::_narrow(anObject); - if (!CORBA::is_nil(anObj)) - return anObj._retn(); - - // Get geom object corresponding to the mesh - _PTR(ChildIterator) anIter = study->NewChildIterator(aSO); - for (; anIter->More(); anIter->Next()) { - _PTR(SObject) aSO = anIter->Value(); - if (!aSO) - continue; - _PTR(SObject) aRefSO; - _PTR(SObject) anObj; - if (aSO->ReferencedObject(aRefSO)) - anObj = aRefSO; - - if (!anObj) - anObj = aSO; - - anObject = _CAST(SObject,anObj)->GetObject(); - GEOM::GEOM_Object_var aMeshShape = GEOM::GEOM_Object::_narrow(anObject); - - if (!aMeshShape->_is_nil()) - return aMeshShape._retn(); - } - - return GEOM::GEOM_Object::_nil(); -} - -void SMESH_NumberFilter::SetSubShapeType (const TopAbs_ShapeEnum theSubShapeType) -{ - mySubShapeType = theSubShapeType; -} - -void SMESH_NumberFilter::SetNumber (const int theNumber) -{ - myNumber = theNumber; -} - -void SMESH_NumberFilter::SetClosedOnly (const bool theIsClosedOnly) -{ - myIsClosedOnly = theIsClosedOnly; -} - -void SMESH_NumberFilter::SetShapeType (const TopAbs_ShapeEnum theShapeType) -{ - myShapeTypes.Add( theShapeType ); -} - -void SMESH_NumberFilter::SetMainShape (GEOM::GEOM_Object_ptr theMainObj) -{ - myMainObj = GEOM::GEOM_Object::_duplicate(theMainObj); -} diff --git a/src/SMESHFiltersSelection/SMESH_NumberFilter.hxx b/src/SMESHFiltersSelection/SMESH_NumberFilter.hxx deleted file mode 100644 index 6b3411293..000000000 --- a/src/SMESHFiltersSelection/SMESH_NumberFilter.hxx +++ /dev/null @@ -1,69 +0,0 @@ -// File : SMESH_NumberFilter.hxx -// Module : SMESH - -#ifndef _SMESH_NumberFilter_HeaderFile -#define _SMESH_NumberFilter_HeaderFile - -#include "SUIT_SelectionFilter.h" - -#include -#include - -#include -#include CORBA_SERVER_HEADER(GEOM_Gen) - -class SUIT_DataOwner; - -/*! - * Class : SMESH_NumberFilter - * Description : Filter for geom or smesh objects. - * 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 - * * theShapeType - This map specifies types of object to be selected - * * theMainObject - Sub-shapes of this object is selected only - * * theIsClosedOnly - Closed shapes is selected if this parameter is true - */ -class SMESH_NumberFilter : public SUIT_SelectionFilter -{ - public: - SMESH_NumberFilter (const char* theKind, - const TopAbs_ShapeEnum theSubShapeType, - const int theNumber, - const TopAbs_ShapeEnum theShapeType = TopAbs_SHAPE, - GEOM::GEOM_Object_ptr theMainObj = GEOM::GEOM_Object::_nil(), - const bool theIsClosedOnly = false ); - - SMESH_NumberFilter (const char* theKind, - const TopAbs_ShapeEnum theSubShapeType, - const int theNumber, - const TColStd_MapOfInteger& theShapeTypes, - GEOM::GEOM_Object_ptr theMainObj = GEOM::GEOM_Object::_nil(), - const bool theIsClosedOnly = false ); - - virtual ~SMESH_NumberFilter(); - - virtual bool isOk (const SUIT_DataOwner*) const; - - void SetSubShapeType (const TopAbs_ShapeEnum); - void SetNumber (const int); - void SetClosedOnly (const bool); - void SetShapeType (const TopAbs_ShapeEnum); - void SetShapeTypes (const TColStd_MapOfInteger&); - void SetMainShape (GEOM::GEOM_Object_ptr); - - private: - GEOM::GEOM_Object_ptr getGeom (const SUIT_DataOwner*) const; - - private: - char* myKind; - TopAbs_ShapeEnum mySubShapeType; - int myNumber; - bool myIsClosedOnly; - TColStd_MapOfInteger myShapeTypes; - GEOM::GEOM_Object_var myMainObj; -}; - -#endif diff --git a/src/SMESHFiltersSelection/SMESH_Type.h b/src/SMESHFiltersSelection/SMESH_Type.h deleted file mode 100644 index f80b9cc28..000000000 --- a/src/SMESHFiltersSelection/SMESH_Type.h +++ /dev/null @@ -1,27 +0,0 @@ -// File : SMESH_Type.h -// Created : Mon Jun 03 15:14:15 2002 -// Author : Nicolas REJNERI - -// Project : SALOME -// Module : SMESH -// Copyright : Open CASCADE 2002 -// $Header$ - -#ifndef SMESH_TYPE_HEADER -#define SMESH_TYPE_HEADER - -enum MeshObjectType { - HYPOTHESIS, - ALGORITHM, - MESH, - SUBMESH, - MESHorSUBMESH, - SUBMESH_VERTEX, - SUBMESH_EDGE, - SUBMESH_FACE, - SUBMESH_SOLID, - SUBMESH_COMPOUND, - GROUP -}; - -#endif diff --git a/src/SMESHFiltersSelection/SMESH_TypeFilter.cxx b/src/SMESHFiltersSelection/SMESH_TypeFilter.cxx deleted file mode 100644 index 856131720..000000000 --- a/src/SMESHFiltersSelection/SMESH_TypeFilter.cxx +++ /dev/null @@ -1,137 +0,0 @@ -#include "SMESH_TypeFilter.hxx" - -#include - -#include -#include - -SMESH_TypeFilter::SMESH_TypeFilter (MeshObjectType theType) -{ - myType = theType; -} - -SMESH_TypeFilter::~SMESH_TypeFilter() -{ -} - -bool SMESH_TypeFilter::isOk (const SUIT_DataOwner* theDataOwner) const -{ - bool Ok = false; - - const SalomeApp_DataOwner* owner = - dynamic_cast(theDataOwner); - SalomeApp_Study* appStudy = dynamic_cast - (SUIT_Session::session()->activeApplication()->activeStudy()); - - if (owner && appStudy) { - _PTR(Study) study = appStudy->studyDS(); - QString entry = owner->entry(); - - _PTR(SObject) obj (study->FindObjectID(entry.latin1())); - if (!obj) return false; - - _PTR(SObject) objFather = obj->GetFather(); - _PTR(SComponent) objComponent = obj->GetFatherComponent(); - - if( objComponent->ComponentDataType()!="SMESH" ) - return false; - - int aLevel = obj->Depth() - objComponent->Depth(); - - // Max level under the component is 4: - // - // 0 Mesh Component - // 1 |- Hypotheses - // 2 | |- Regular 1D - // |- Algorithms - // |- Mesh 1 - // |- Applied Hypotheses - // |- Applied Algorithms - // |- Submeshes on Face - // 3 | |- SubmeshFace - // 4 | |- Applied algorithms ( selectable in Use Case Browser ) - // |- Group Of Nodes - - if (aLevel <= 0) - return false; - - switch (myType) - { - case HYPOTHESIS: - { - if ( aLevel == 2 && ( objFather->Tag() == 1 )) - Ok = true; - break; - } - case ALGORITHM: - { - if ( aLevel == 2 && ( objFather->Tag() == 2 )) - Ok = true; - break; - } - case MESH: - { - if ( aLevel == 1 && ( obj->Tag() >= 3 )) - Ok = true; - break; - } - case SUBMESH: - { - // see SMESH_Gen_i.cxx for tag numbers - if ( aLevel == 3 && ( objFather->Tag() >= 4 && objFather->Tag() <= 10 )) - Ok = true; - break; - } - case MESHorSUBMESH: - { - if ( aLevel == 1 && ( obj->Tag() >= 3 )) - Ok = true; // mesh - else if ( aLevel == 3 && ( objFather->Tag() >= 4 && objFather->Tag() <= 10 )) - Ok = true; - break; - } - case SUBMESH_VERTEX: // Label "SubMeshes on vertexes" - { - if ( aLevel == 3 && ( objFather->Tag() == 4 )) - Ok = true; - break; - } - case SUBMESH_EDGE: - { - if ( aLevel == 3 && ( objFather->Tag() == 5 )) - Ok = true; - break; - } - case SUBMESH_FACE: - { - if ( aLevel == 3 && ( objFather->Tag() == 7 )) - Ok = true; - break; - } - case SUBMESH_SOLID: - { - if ( aLevel == 3 && ( objFather->Tag() == 9 )) - Ok = true; - break; - } - case SUBMESH_COMPOUND: - { - if ( aLevel == 3 && ( objFather->Tag() == 10 )) - Ok = true; - break; - } - case GROUP: - { - if ( aLevel == 3 && ( objFather->Tag() > 10 )) - Ok = true; - break; - } - } - } - return Ok; -} - -MeshObjectType SMESH_TypeFilter::type() const -{ - return myType; -} diff --git a/src/SMESHFiltersSelection/SMESH_TypeFilter.hxx b/src/SMESHFiltersSelection/SMESH_TypeFilter.hxx deleted file mode 100644 index 442d72dad..000000000 --- a/src/SMESHFiltersSelection/SMESH_TypeFilter.hxx +++ /dev/null @@ -1,25 +0,0 @@ -// File : SMESH_TypeFilter.hxx -// Module : SMESH - -#ifndef _SMESH_TypeFilter_HeaderFile -#define _SMESH_TypeFilter_HeaderFile - -#include "SMESH_Type.h" -#include "SUIT_SelectionFilter.h" - -class SUIT_DataOwner; - -class SMESH_TypeFilter : public SUIT_SelectionFilter -{ -public: - SMESH_TypeFilter (MeshObjectType theType); - ~SMESH_TypeFilter(); - - virtual bool isOk (const SUIT_DataOwner*) const; - MeshObjectType type() const; - -protected: - MeshObjectType myType; -}; - -#endif diff --git a/src/SMESHFiltersSelection/SMESH_TypeFilter.ixx b/src/SMESHFiltersSelection/SMESH_TypeFilter.ixx deleted file mode 100644 index a01d02ee0..000000000 --- a/src/SMESHFiltersSelection/SMESH_TypeFilter.ixx +++ /dev/null @@ -1,71 +0,0 @@ -// File generated by CPPExt (Transient) -// Copyright (C) 1991,1995 by -// -// MATRA DATAVISION, FRANCE -// -// This software is furnished in accordance with the terms and conditions -// of the contract and with the inclusion of the above copyright notice. -// This software or any other copy thereof may not be provided or otherwise -// be made available to any other person. No title to an ownership of the -// software is hereby transferred. -// -// At the termination of the contract, the software and all copies of this -// software must be deleted. -// -#include "SMESH_TypeFilter.jxx" - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -SMESH_TypeFilter::~SMESH_TypeFilter() {} - - - -Standard_EXPORT Handle_Standard_Type& SMESH_TypeFilter_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(SALOME_Filter); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(SALOME_Filter); - static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("SMESH_TypeFilter", - sizeof(SMESH_TypeFilter), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -// DownCast method -// allow safe downcasting -// -const Handle(SMESH_TypeFilter) Handle(SMESH_TypeFilter)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(SMESH_TypeFilter) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(SMESH_TypeFilter))) { - _anOtherObject = Handle(SMESH_TypeFilter)((Handle(SMESH_TypeFilter)&)AnObject); - } - } - - return _anOtherObject ; -} -const Handle(Standard_Type)& SMESH_TypeFilter::DynamicType() const -{ - return STANDARD_TYPE(SMESH_TypeFilter) ; -} -Standard_Boolean SMESH_TypeFilter::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(SMESH_TypeFilter) == AType || SALOME_Filter::IsKind(AType)); -} -Handle_SMESH_TypeFilter::~Handle_SMESH_TypeFilter() {} - diff --git a/src/SMESHFiltersSelection/SMESH_TypeFilter.jxx b/src/SMESHFiltersSelection/SMESH_TypeFilter.jxx deleted file mode 100644 index 2aed9c397..000000000 --- a/src/SMESHFiltersSelection/SMESH_TypeFilter.jxx +++ /dev/null @@ -1,3 +0,0 @@ -#ifndef _SMESH_TypeFilter_HeaderFile -#include "SMESH_TypeFilter.hxx" -#endif diff --git a/src/SMESHGUI/Makefile.in b/src/SMESHGUI/Makefile.in deleted file mode 100644 index e637c770d..000000000 --- a/src/SMESHGUI/Makefile.in +++ /dev/null @@ -1,202 +0,0 @@ -# SMESH SMESHGUI : GUI for SMESH component -# -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : Makefile.in -# Author : Nicolas REJNERI -# Module : SMESH -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= SMESHGUI_Swig.hxx \ - SMESHGUI_Swig.i \ - SMESHGUI.h \ - SMESHGUI_Utils.h \ - SMESHGUI_Hypotheses.h \ - SMESHGUI_HypothesesUtils.h \ - SMESHGUI_SpinBox.h \ - SMESHGUI_aParameter.h \ - SMESHGUI_aParameterDlg.h \ - SMESHGUI_Selection.h - -# .po files to transform in .qm -PO_FILES = \ - SMESH_images.po \ - SMESH_msg_en.po - -# Libraries targets -LIB = libSMESH.la -LIB_SRC = SMESHGUI.cxx \ - SMESHGUI_PatternWidget.cxx \ - SMESHGUI_CreatePatternDlg.cxx \ - SMESHGUI_MeshPatternDlg.cxx \ - SMESHGUI_SpinBox.cxx \ - SMESHGUI_NodesDlg.cxx \ - SMESHGUI_InitMeshDlg.cxx \ - SMESHGUI_AddSubMeshDlg.cxx \ - SMESHGUI_TransparencyDlg.cxx \ - SMESHGUI_ClippingDlg.cxx \ - SMESHGUI_GroupDlg.cxx \ - SMESHGUI_RemoveNodesDlg.cxx \ - SMESHGUI_RemoveElementsDlg.cxx \ - SMESHGUI_MeshInfosDlg.cxx \ - SMESHGUI_StandardMeshInfosDlg.cxx \ - SMESHGUI_Preferences_ColorDlg.cxx \ - SMESHGUI_Preferences_ScalarBarDlg.cxx \ - SMESHGUI_Preferences_SelectionDlg.cxx \ - SMESHGUI_aParameterDlg.cxx \ - SMESHGUI_Swig.cxx \ - SMESHGUI_MoveNodesDlg.cxx \ - SMESHGUI_AddMeshElementDlg.cxx \ - SMESHGUI_EditHypothesesDlg.cxx \ - SMESHGUI_CreateHypothesesDlg.cxx \ - SMESHGUI_XmlHandler.cxx \ - SMESHGUI_Filter.cxx \ - SMESHGUI_FilterDlg.cxx \ - SMESHGUI_FilterLibraryDlg.cxx \ - SMESHGUI_SingleEditDlg.cxx \ - SMESHGUI_MultiEditDlg.cxx \ - SMESHGUI_aParameter.cxx \ - SMESHGUI_DeleteGroupDlg.cxx \ - SMESHGUI_GroupOpDlg.cxx \ - SMESHGUI_SmoothingDlg.cxx \ - SMESHGUI_RenumberingDlg.cxx \ - SMESHGUI_ExtrusionDlg.cxx \ - SMESHGUI_ExtrusionAlongPathDlg.cxx \ - SMESHGUI_RevolutionDlg.cxx \ - SMESHGUI_RotationDlg.cxx \ - SMESHGUI_TranslationDlg.cxx \ - SMESHGUI_SymmetryDlg.cxx \ - SMESHGUI_SewingDlg.cxx \ - SMESHGUI_MergeNodesDlg.cxx \ - SMESHGUI_EditMeshDlg.cxx \ - SMESHGUI_Utils.cxx \ - SMESHGUI_GEOMGenUtils.cxx \ - SMESHGUI_MeshUtils.cxx \ - SMESHGUI_GroupUtils.cxx \ - SMESHGUI_FilterUtils.cxx \ - SMESHGUI_PatternUtils.cxx \ - SMESHGUI_HypothesesUtils.cxx \ - SMESHGUI_PrecisionDlg.cxx \ - SMESHGUI_VTKUtils.cxx \ - SMESHGUI_Selection.cxx \ - SMESHGUI_CreatePolyhedralVolumeDlg.cxx \ - SMESHGUI_Operation.cxx \ - SMESHGUI_SelectionOp.cxx \ - SMESHGUI_Dialog.cxx \ - SMESHGUI_MeshDlg.cxx \ - SMESHGUI_MeshOp.cxx - -LIB_MOC = \ - SMESHGUI.h \ - SMESHGUI_PatternWidget.h \ - SMESHGUI_MeshPatternDlg.h \ - SMESHGUI_CreatePatternDlg.h \ - SMESHGUI_NodesDlg.h \ - SMESHGUI_SpinBox.h \ - SMESHGUI_InitMeshDlg.h \ - SMESHGUI_AddSubMeshDlg.h \ - SMESHGUI_TransparencyDlg.h \ - SMESHGUI_ClippingDlg.h \ - SMESHGUI_GroupDlg.h \ - SMESHGUI_RemoveNodesDlg.h \ - SMESHGUI_RemoveElementsDlg.h \ - SMESHGUI_MeshInfosDlg.h \ - SMESHGUI_StandardMeshInfosDlg.h \ - SMESHGUI_Preferences_ColorDlg.h \ - SMESHGUI_Preferences_ScalarBarDlg.h \ - SMESHGUI_Preferences_SelectionDlg.h \ - SMESHGUI_aParameterDlg.h \ - SMESHGUI_MoveNodesDlg.h \ - SMESHGUI_AddMeshElementDlg.h \ - SMESHGUI_EditHypothesesDlg.h \ - SMESHGUI_CreateHypothesesDlg.h \ - SMESHGUI_FilterDlg.h \ - SMESHGUI_FilterLibraryDlg.h \ - SMESHGUI_SingleEditDlg.h \ - SMESHGUI_MultiEditDlg.h \ - SMESHGUI_DeleteGroupDlg.h \ - SMESHGUI_GroupOpDlg.h \ - SMESHGUI_SmoothingDlg.h \ - SMESHGUI_RenumberingDlg.h \ - SMESHGUI_ExtrusionDlg.h \ - SMESHGUI_ExtrusionAlongPathDlg.h \ - SMESHGUI_RevolutionDlg.h \ - SMESHGUI_RotationDlg.h \ - SMESHGUI_TranslationDlg.h \ - SMESHGUI_SymmetryDlg.h \ - SMESHGUI_SewingDlg.h \ - SMESHGUI_PrecisionDlg.h \ - SMESHGUI_MergeNodesDlg.h \ - SMESHGUI_aParameter.h \ - SMESHGUI_EditMeshDlg.h \ - SMESHGUI_CreatePolyhedralVolumeDlg.h \ - SMESHGUI_Operation.h \ - SMESHGUI_SelectionOp.h \ - SMESHGUI_Dialog.h \ - SMESHGUI_MeshDlg.h \ - SMESHGUI_MeshOp.h - - -LIB_CLIENT_IDL = SALOME_Exception.idl \ - GEOM_Gen.idl \ - SMESH_Gen.idl \ - SMESH_Mesh.idl \ - SMESH_Hypothesis.idl \ - SMESH_Group.idl \ - SALOMEDS.idl \ - SALOMEDS_Attributes.idl \ - SALOME_ModuleCatalog.idl \ - SALOME_Component.idl \ - MED.idl \ - SMESH_Filter.idl \ - SMESH_Pattern.idl \ - SALOME_GenericObj.idl \ - SALOME_Comm.idl - -LIB_SERVER_IDL = - -# additionnal information to compil and link file - -#BIN = SMESHBin - -CPPFLAGS += $(QT_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) $(OCC_INCLUDES) $(PYTHON_INCLUDES) \ - -I${KERNEL_ROOT_DIR}/include/salome -I${GUI_ROOT_DIR}/include/salome \ - -I${GEOM_ROOT_DIR}/include/salome $(BOOST_CPPFLAGS) - -CXXFLAGS += -I${KERNEL_ROOT_DIR}/include/salome -I${GUI_ROOT_DIR}/include/salome \ - -I${GEOM_ROOT_DIR}/include/salome - - -LDFLAGS += -lSMESHObject -lSMESHFiltersSelection -lSMDS -lSMESHControls -lDlgRef $(OCC_KERNEL_LIBS) -lTKBO -L${KERNEL_ROOT_DIR}/lib/salome -L${GUI_ROOT_DIR}/lib/salome -lVTKViewer -lSalomeApp -lSalomePrs -lSalomeNS -lSalomeLifeCycleCORBA -lOpUtil -lSalomeObject -lEvent -lSALOMELocalTrace -lSVTK -lOCCViewer -L${GEOM_ROOT_DIR}/lib/salome -lGEOM -lGEOMClient -lGEOMBase -lGEOMObject -lGEOMFiltersSelection - -LDFLAGSFORBIN += $(LDFLAGS) - -@CONCLUDE@ diff --git a/src/SMESHGUI/SMESHBin.cxx b/src/SMESHGUI/SMESHBin.cxx deleted file mode 100644 index 61f9777fe..000000000 --- a/src/SMESHGUI/SMESHBin.cxx +++ /dev/null @@ -1,4 +0,0 @@ -int main(int argc, char** argv){ - return 0; -} - diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index f92fdf067..349eb3ec4 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -587,6 +587,7 @@ namespace{ } anActor->SetControlMode(aControl); anActor->GetScalarBarActor()->SetTitle(aTitle.latin1()); + SMESH::RepaintCurrentView(); } } } @@ -1169,8 +1170,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } } } - SALOME_ListIO l1; - aSel->setSelectedObjects( l1 ); + + if (anAction == SMESH::eErase) { + SALOME_ListIO l1; + aSel->setSelectedObjects( l1 ); + } + else + aSel->setSelectedObjects( selected ); break; } @@ -2802,14 +2808,16 @@ void SMESHGUI::createPreferences() { int genTab = addPreference( tr( "PREF_TAB_GENERAL" ) ); + int updateGroup = addPreference( tr( "PREF_GROUP_UPDATE" ), genTab ); + addPreference( tr( "PREF_AUTO_UPDATE" ), updateGroup, SalomeApp_Preferences::Bool, "SMESH", "auto_update" ); + int qaGroup = addPreference( tr( "PREF_GROUP_QUALITY" ), genTab ); addPreference( tr( "PREF_DISPLAY_ENTITY" ), qaGroup, SalomeApp_Preferences::Bool, "SMESH", "display_entity" ); - addPreference( tr( "PREF_AUTO_UPDATE" ), qaGroup, SalomeApp_Preferences::Bool, "SMESH", "auto_update" ); - + addPreference( tr( "PREF_PRECISION_USE" ), qaGroup, SalomeApp_Preferences::Bool, "SMESH", "use_precision" ); + int precGroup = addPreference( tr( "PREF_GROUP_PRECISION" ), genTab ); setPreferenceProperty( precGroup, "columns", 1 ); - addPreference( tr( "PREF_PRECISION_USE" ), precGroup, SalomeApp_Preferences::Bool ); int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), precGroup, SalomeApp_Preferences::IntSpin, "SMESH", "controls_precision" ); setPreferenceProperty( prec, "min", 0 ); @@ -2820,9 +2828,15 @@ void SMESHGUI::createPreferences() QStringList modes; modes.append( "Wireframe" ); modes.append( "Shading" ); - modes.append( "Shrink" ); modes.append( "Nodes" ); + modes.append( "Shrink" ); + QValueList indices; + indices.append( 0 ); + indices.append( 1 ); + indices.append( 2 ); + indices.append( 3 ); setPreferenceProperty( dispmode, "strings", modes ); + setPreferenceProperty( dispmode, "indexes", indices ); int meshTab = addPreference( tr( "PREF_TAB_MESH" ) ); int nodeGroup = addPreference( tr( "PREF_GROUP_NODES" ), meshTab ); @@ -2909,7 +2923,7 @@ void SMESHGUI::createPreferences() QStringList orients; orients.append( tr( "SMESH_VERTICAL" ) ); orients.append( tr( "SMESH_HORIZONTAL" ) ); - QValueList indices; indices.append( 0 ); indices.append( 1 ); + indices.clear(); indices.append( 0 ); indices.append( 1 ); setPreferenceProperty( orient, "strings", orients ); setPreferenceProperty( orient, "indexes", indices ); diff --git a/src/SMESHGUI/SMESHGUI.h b/src/SMESHGUI/SMESHGUI.h deleted file mode 100644 index 5ccfbe869..000000000 --- a/src/SMESHGUI/SMESHGUI.h +++ /dev/null @@ -1,140 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef SMESHGUI_HeaderFile -#define SMESHGUI_HeaderFile - -// SALOME Includes -#include -#include - -#include -#include CORBA_SERVER_HEADER(SMESH_Gen) - -class QDialog; - -class SUIT_Desktop; -class SUIT_Study; -class SUIT_ViewWindow; -class SUIT_ResourceMgr; -class SUIT_ViewManager; - -class SalomeApp_Operation; -class SalomeApp_Study; -class SalomeApp_SelectionMgr; - - -//================================================================================= -// class : SMESHGUI -// purpose : -//================================================================================= -class SMESHGUI : public SalomeApp_Module -{ - Q_OBJECT; - -public : - SMESHGUI(); - ~SMESHGUI(); - - static SMESH::SMESH_Gen_var GetSMESHGen(); - static SMESHGUI* GetSMESHGUI(); - static SalomeApp_SelectionMgr* selectionMgr(); - static SUIT_ResourceMgr* resourceMgr(); - static SUIT_Desktop* desktop() ; - static SalomeApp_Study* activeStudy(); - bool isActiveStudyLocked(); - - static bool automaticUpdate(); - - virtual QString engineIOR() const; - virtual void initialize( CAM_Application* ); - virtual void windows( QMap& ) const; - virtual void viewManagers( QStringList& ) const; - - QDialog* GetActiveDialogBox() ; - void SetActiveDialogBox(QDialog* aDlg) ; - - void ResetState() ; - void SetState(int aState) ; - bool DefineDlgPosition(QWidget* aDlg, int& x, int& y) ; - - virtual bool OnGUIEvent ( int id ); - virtual bool OnMousePress ( QMouseEvent*, SUIT_ViewWindow* ); - virtual bool OnMouseMove ( QMouseEvent*, SUIT_ViewWindow* ); - virtual bool OnKeyPress ( QKeyEvent*, SUIT_ViewWindow* ); - - virtual void contextMenuPopup( const QString&, QPopupMenu*, QString& ); - - virtual void BuildPresentation ( const Handle(SALOME_InteractiveObject)&, - SUIT_ViewWindow* = 0 ); - - /* Non modal dialog boxes management */ - void EmitSignalDeactivateDialog() ; - void EmitSignalStudyFrameChanged() ; - void EmitSignalCloseAllDialogs() ; - - virtual void createPreferences(); - virtual void preferencesChanged( const QString&, const QString& ); - - virtual void update( const int ); - -public slots: - virtual bool deactivateModule( SUIT_Study* ); - virtual bool activateModule( SUIT_Study* ); - -private slots: - void OnGUIEvent(); - void onViewManagerAdded( SUIT_ViewManager* ); - void onOperationCommited( SUIT_Operation* ); - void onOperationAborted( SUIT_Operation* ); - - -signals: - void SignalDeactivateActiveDialog() ; - void SignalStudyFrameChanged() ; - void SignalCloseAllDialogs() ; - -protected: - void createSMESHAction( const int, const QString&, const QString& = QString(""), - const int = 0, const bool = false ); - void createPopupItem( const int, const QString&, const QString&, - const QString& = QString::null, const int = -1 ); - - virtual SalomeApp_Operation* createOperation( const int ) const; - -private: - void OnEditDelete(); - -private : - static SMESH::SMESH_Gen_var myComponentSMESH; - QDialog* myActiveDialogBox; - int myState; - QMap myRules; -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx b/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx deleted file mode 100644 index 0915c3923..000000000 --- a/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx +++ /dev/null @@ -1,756 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_AddMeshElementDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#include "SMESHGUI_AddMeshElementDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_MeshUtils.h" -#include "SMESHGUI_IdValidator.h" -#include "SMESH_ActorUtils.h" - -#include "SMDS_Mesh.hxx" -#include "SMESH_Actor.h" - -#include "SUIT_Session.h" - -#include "SVTK_Selection.h" -#include "SVTK_Selector.h" -#include "SALOME_ListIO.hxx" -#include "SALOME_ListIteratorOfListIO.hxx" - -#include "SalomeApp_Study.h" -#include "SalomeApp_Application.h" - -#include "SVTK_ViewModel.h" -#include "SVTK_ViewWindow.h" - -#include "utilities.h" - -// OCCT Includes -#include -#include - -// VTK Includes -#include -#include -#include -#include -#include -#include -#include - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// STL includes -#include - -using namespace std; - -namespace SMESH { - - class TElementSimulation { - SalomeApp_Application* myApplication; - SUIT_ViewWindow* myViewWindow; - SVTK_ViewWindow* myVTKViewWindow; - - SALOME_Actor* myPreviewActor; - vtkDataSetMapper* myMapper; - vtkUnstructuredGrid* myGrid; - - public: - TElementSimulation (SalomeApp_Application* theApplication) - { - myApplication = theApplication; - SUIT_ViewManager* mgr = theApplication->activeViewManager(); - if (!mgr) return; - myViewWindow = mgr->getActiveView(); - myVTKViewWindow = GetVtkViewWindow(myViewWindow); - - myGrid = vtkUnstructuredGrid::New(); - - // Create and display actor - myMapper = vtkDataSetMapper::New(); - myMapper->SetInput(myGrid); - - myPreviewActor = SALOME_Actor::New(); - myPreviewActor->PickableOff(); - myPreviewActor->VisibilityOff(); - myPreviewActor->SetMapper(myMapper); - - float anRGB[3]; - vtkProperty* aProp = vtkProperty::New(); - GetColor( "SMESH", "fill_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) ); - aProp->SetColor( anRGB[0], anRGB[1], anRGB[2] ); - myPreviewActor->SetProperty( aProp ); - aProp->Delete(); - - vtkProperty* aBackProp = vtkProperty::New(); - GetColor( "SMESH", "backface_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 0, 255 ) ); - aBackProp->SetColor( anRGB[0], anRGB[1], anRGB[2] ); - myPreviewActor->SetBackfaceProperty( aBackProp ); - aBackProp->Delete(); - - myVTKViewWindow->AddActor(myPreviewActor); - } - - typedef std::vector TVTKIds; - void SetPosition (SMESH_Actor* theActor, - vtkIdType theType, - const TVTKIds& theIds) - { - vtkUnstructuredGrid *aGrid = theActor->GetUnstructuredGrid(); - myGrid->SetPoints(aGrid->GetPoints()); - - const int* aConn = NULL; - switch (theType) { - case VTK_TETRA: - { - static int anIds[] = {0,2,1,3}; - aConn = anIds; - break; - } - case VTK_PYRAMID: - { - static int anIds[] = {0,3,2,1,4}; - aConn = anIds; - break; - } - case VTK_HEXAHEDRON: - { - static int anIds[] = {0,3,2,1,4,7,6,5}; - aConn = anIds; - break; - } - } - - myGrid->Reset(); - vtkIdList *anIds = vtkIdList::New(); - - if(aConn) - for (int i = 0, iEnd = theIds.size(); i < iEnd; i++) - anIds->InsertId(i,theIds[aConn[i]]); - else - for (int i = 0, iEnd = theIds.size(); i < iEnd; i++) - anIds->InsertId(i,theIds[i]); - - myGrid->InsertNextCell(theType,anIds); - anIds->Delete(); - - myGrid->Modified(); - - SetVisibility(true); - } - - - void SetVisibility (bool theVisibility) - { - myPreviewActor->SetVisibility(theVisibility); - RepaintCurrentView(); - } - - - ~TElementSimulation() - { - if (FindVtkViewWindow(myApplication->activeViewManager(), myViewWindow)) { - myVTKViewWindow->RemoveActor(myPreviewActor); - } - myPreviewActor->Delete(); - - myMapper->RemoveAllInputs(); - myMapper->Delete(); - - myGrid->Delete(); - } - }; -} - -//================================================================================= -// function : SMESHGUI_AddMeshElementDlg() -// purpose : constructor -//================================================================================= -SMESHGUI_AddMeshElementDlg::SMESHGUI_AddMeshElementDlg( SMESHGUI* theModule, - const char* name, - SMDSAbs_ElementType ElementType, int nbNodes, - 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 ) ) -{ - SalomeApp_Application* anApp = dynamic_cast - (SUIT_Session::session()->activeApplication()); - myIsPoly = false; - mySimulation = new SMESH::TElementSimulation (anApp); - mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); - - // verify nb nodes and type - myNbNodes = nbNodes; - myElementType = ElementType; - switch (ElementType) { - case SMDSAbs_Face: -// if (myNbNodes != 3 && myNbNodes != 4) -// myNbNodes = 3; -// break; - case SMDSAbs_Volume: -// if (myNbNodes != 4 && myNbNodes != 8) //(nbNodes < 4 || nbNodes > 8 || nbNodes == 7) -// myNbNodes = 4; - break; - default: - myElementType = SMDSAbs_Edge; - myNbNodes = 2; - } - - QString elemName; - if (myNbNodes == 2) - elemName = "EDGE"; - else if (myNbNodes == 3) - elemName = "TRIANGLE"; - else if (myNbNodes == 4) - if (myElementType == SMDSAbs_Face) - elemName = "QUADRANGLE"; - else - elemName = "TETRAS"; - else if (myNbNodes == 8) - elemName = "HEXAS"; - else if (myElementType == SMDSAbs_Face){ - elemName = "POLYGON"; - myIsPoly = true; - } - - QString iconName = tr(QString("ICON_DLG_%1").arg(elemName)); - QString buttonGrTitle = tr(QString("SMESH_%1").arg(elemName)); - QString caption = tr(QString("SMESH_ADD_%1_TITLE").arg(elemName)); - QString grBoxTitle = tr(QString("SMESH_ADD_%1").arg(elemName)); - - QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", iconName)); - QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); - - if (!name) - setName("SMESHGUI_AddMeshElementDlg"); - resize(303, 185); - setCaption(caption); - - setSizeGripEnabled(TRUE); - SMESHGUI_AddMeshElementDlgLayout = new QGridLayout(this); - SMESHGUI_AddMeshElementDlgLayout->setSpacing(6); - SMESHGUI_AddMeshElementDlgLayout->setMargin(11); - - /***************************************************************/ - GroupConstructors = new QButtonGroup(this, "GroupConstructors"); - GroupConstructors->setTitle(buttonGrTitle); - - GroupConstructors->setExclusive(TRUE); - GroupConstructors->setColumnLayout(0, Qt::Vertical); - GroupConstructors->layout()->setSpacing(0); - GroupConstructors->layout()->setMargin(0); - GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout()); - GroupConstructorsLayout->setAlignment(Qt::AlignTop); - GroupConstructorsLayout->setSpacing(6); - GroupConstructorsLayout->setMargin(11); - Constructor1 = new QRadioButton(GroupConstructors, "Constructor1"); - Constructor1->setText(tr("" )); - Constructor1->setPixmap(image0); - Constructor1->setChecked(TRUE); - Constructor1->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, Constructor1->sizePolicy().hasHeightForWidth())); - Constructor1->setMinimumSize(QSize(50, 0)); - GroupConstructorsLayout->addWidget(Constructor1, 0, 0); - QSpacerItem* spacer = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupConstructorsLayout->addItem(spacer, 0, 1); - SMESHGUI_AddMeshElementDlgLayout->addWidget(GroupConstructors, 0, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - GroupButtons->setTitle(tr("" )); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_APPLY" )); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - buttonOk = new QPushButton(GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_OK" )); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - SMESHGUI_AddMeshElementDlgLayout->addWidget(GroupButtons, 2, 0); - - /***************************************************************/ - GroupC1 = new QGroupBox(this, "GroupC1"); - GroupC1->setTitle(grBoxTitle); - - GroupC1->setMinimumSize(QSize(0, 0)); - GroupC1->setFrameShape(QGroupBox::Box); - GroupC1->setFrameShadow(QGroupBox::Sunken); - GroupC1->setColumnLayout(0, Qt::Vertical); - GroupC1->layout()->setSpacing(0); - GroupC1->layout()->setMargin(0); - GroupC1Layout = new QGridLayout(GroupC1->layout()); - GroupC1Layout->setAlignment(Qt::AlignTop); - GroupC1Layout->setSpacing(6); - GroupC1Layout->setMargin(11); - TextLabelC1A1 = new QLabel(GroupC1, "TextLabelC1A1"); - TextLabelC1A1->setText(tr("SMESH_ID_NODES" )); - TextLabelC1A1->setMinimumSize(QSize(50, 0)); - TextLabelC1A1->setFrameShape(QLabel::NoFrame); - TextLabelC1A1->setFrameShadow(QLabel::Plain); - GroupC1Layout->addWidget(TextLabelC1A1, 0, 0); - SelectButtonC1A1 = new QPushButton(GroupC1, "SelectButtonC1A1"); - SelectButtonC1A1->setText(tr("" )); - SelectButtonC1A1->setPixmap(image1); - SelectButtonC1A1->setToggleButton(FALSE); - GroupC1Layout->addWidget(SelectButtonC1A1, 0, 1); - LineEditC1A1 = new QLineEdit(GroupC1, "LineEditC1A1"); -// LineEditC1A1->setReadOnly(TRUE); - if (!myIsPoly) - LineEditC1A1->setValidator(new SMESHGUI_IdValidator(this, "validator", myNbNodes)); - GroupC1Layout->addWidget(LineEditC1A1, 0, 2); - - if (myElementType == SMDSAbs_Face) { - Reverse = new QCheckBox(GroupC1, "Reverse"); - Reverse->setText(tr("SMESH_REVERSE" )); - GroupC1Layout->addWidget(Reverse, 1, 0); - } - else - Reverse = 0; - - SMESHGUI_AddMeshElementDlgLayout->addWidget(GroupC1, 1, 0); - - Init(); /* Initialisations */ -} - -//================================================================================= -// function : ~SMESHGUI_AddMeshElementDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_AddMeshElementDlg::~SMESHGUI_AddMeshElementDlg() -{ - // no need to delete child widgets, Qt does it all for us - delete mySimulation; -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_AddMeshElementDlg::Init() -{ - GroupC1->show(); - Constructor1->setChecked(TRUE); - myEditCurrentArgument = LineEditC1A1; - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - myNbOkNodes = 0; - myActor = 0; - - /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), SLOT(ClickOnCancel())); - connect(buttonApply, SIGNAL(clicked()), SLOT(ClickOnApply())); - - connect(SelectButtonC1A1, SIGNAL(clicked()), SLOT(SetEditCurrentArgument())); - connect(LineEditC1A1, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); - connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), SLOT(DeactivateActiveDialog())); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(SelectionIntoArgument())); - /* to close dialog if study frame change */ - connect(mySMESHGUI, SIGNAL (SignalStudyFrameChanged()), SLOT(ClickOnCancel())); - - if (Reverse) - connect(Reverse, SIGNAL(stateChanged(int)), SLOT(CheckBox(int))); - - // Move widget on the botton right corner of main widget - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); // displays Dialog - - // set selection mode - SMESH::SetPointRepresentation(true); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( NodeSelection ); - - myBusy = false; - - SelectionIntoArgument(); -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -void SMESHGUI_AddMeshElementDlg::ClickOnApply() -{ - if (myNbOkNodes && !mySMESHGUI->isActiveStudyLocked()) { - myBusy = true; - SMESH::long_array_var anArrayOfIdeces = new SMESH::long_array; - anArrayOfIdeces->length(myNbNodes); - bool reverse = (Reverse && Reverse->isChecked()); - QStringList aListId = QStringList::split(" ", myEditCurrentArgument->text(), false); - for (int i = 0; i < aListId.count(); i++) - if (reverse) - anArrayOfIdeces[i] = aListId[ myNbNodes - i - 1 ].toInt(); - else - anArrayOfIdeces[i] = aListId[ i ].toInt(); - - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - switch (myElementType) { - case SMDSAbs_Edge: - aMeshEditor->AddEdge(anArrayOfIdeces.inout()); break; - case SMDSAbs_Face: - aMeshEditor->AddFace(anArrayOfIdeces.inout()); break; - case SMDSAbs_Volume: - aMeshEditor->AddVolume(anArrayOfIdeces.inout()); break; - default:; - } - - SALOME_ListIO aList; aList.Append( myActor->getIO() ); - mySelectionMgr->setSelectedObjects( aList, false ); - - SMESH::UpdateView(); - mySimulation->SetVisibility(false); - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - myEditCurrentArgument->setText(""); - - myBusy = false; - } -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_AddMeshElementDlg::ClickOnOk() -{ - this->ClickOnApply(); - this->ClickOnCancel(); - return; -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_AddMeshElementDlg::ClickOnCancel() -{ - mySelectionMgr->clearSelected(); - mySimulation->SetVisibility(false); - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( ActorSelection ); - disconnect(mySelectionMgr, 0, this, 0); - mySMESHGUI->ResetState(); - reject(); - return; -} - -//================================================================================= -// function : onTextChange() -// purpose : -//================================================================================= -void SMESHGUI_AddMeshElementDlg::onTextChange (const QString& theNewText) -{ - if (myBusy) return; - myBusy = true; - - myNbOkNodes = 0; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - mySimulation->SetVisibility(false); - - // hilight entered nodes - SMDS_Mesh* aMesh = 0; - if (myActor) - aMesh = myActor->GetObject()->GetMesh(); - - if (aMesh) { - TColStd_MapOfInteger newIndices; - - QStringList aListId = QStringList::split(" ", theNewText, false); - bool allOk = true; - for (int i = 0; i < aListId.count(); i++) { - if( const SMDS_MeshNode * n = aMesh->FindNode( aListId[ i ].toInt() ) ) - { - newIndices.Add( n->GetID() ); - myNbOkNodes++; - } - else - allOk = false; - } - - mySelector->AddOrRemoveIndex( myActor->getIO(), newIndices, false ); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( myActor->getIO(), true, true ); - - myNbOkNodes = ( allOk && myNbNodes == aListId.count() ); - - if (myIsPoly) - { - if ( !allOk || myElementType != SMDSAbs_Face || aListId.count() < 3 ) - myNbOkNodes = 0; - else - myNbOkNodes = aListId.count(); - } - } - - if(myNbOkNodes) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - displaySimulation(); - } - - myBusy = false; -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection has changed -//================================================================================= -void SMESHGUI_AddMeshElementDlg::SelectionIntoArgument() -{ - if (myBusy) return; - - // clear - myNbOkNodes = 0; - myActor = 0; - - myBusy = true; - myEditCurrentArgument->setText(""); - myBusy = false; - - if (!GroupButtons->isEnabled()) // inactive - return; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - mySimulation->SetVisibility(false); -// SMESH::SetPointRepresentation(true); - - // get selected mesh - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type()); - - if (aList.Extent() != 1) - return; - - Handle(SALOME_InteractiveObject) anIO = aList.First(); - myMesh = SMESH::GetMeshByIO(anIO); - if (myMesh->_is_nil()) - return; - - myActor = SMESH::FindActorByEntry(anIO->getEntry()); - if (!myActor) - return; - - // get selected nodes - QString aString = ""; - int nbNodes = SMESH::GetNameOfSelectedNodes(mySelector,myActor->getIO(),aString); - myBusy = true; - myEditCurrentArgument->setText(aString); - myBusy = false; - if (myIsPoly && myElementType == SMDSAbs_Face && nbNodes >= 3 ) { - myNbNodes = nbNodes; - } else if (myNbNodes != nbNodes) { - return; - } - - // OK - myNbOkNodes = nbNodes; - - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - - displaySimulation(); -} - -//================================================================================= -// function : displaySimulation() -// purpose : -//================================================================================= -void SMESHGUI_AddMeshElementDlg::displaySimulation() -{ - if (myNbOkNodes && GroupButtons->isEnabled()) { - SMESH::TElementSimulation::TVTKIds anIds; - QStringList aListId = QStringList::split(" ", myEditCurrentArgument->text(), false); - for (int i = 0; i < aListId.count(); i++) - anIds.push_back(myActor->GetObject()->GetNodeVTKId(aListId[ i ].toInt())); - - if (Reverse && Reverse->isChecked()) - reverse(anIds.begin(),anIds.end()); - - vtkIdType aType = 0; - if (myIsPoly) - switch ( myElementType ) { - case SMDSAbs_Face : aType = VTK_POLYGON; break; - default: return; - } - else { - switch (myNbNodes) { - case 2: aType = VTK_LINE; break; - case 3: aType = VTK_TRIANGLE; break; - case 4: aType = myElementType == SMDSAbs_Face ? VTK_QUAD : VTK_TETRA; break; - case 8: aType = VTK_HEXAHEDRON; break; - default: return; - } - } - - mySimulation->SetPosition(myActor,aType,anIds); - SMESH::UpdateView(); - } -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_AddMeshElementDlg::SetEditCurrentArgument() -{ - QPushButton* send = (QPushButton*)sender(); - if (send == SelectButtonC1A1) { - LineEditC1A1->setFocus(); - myEditCurrentArgument = LineEditC1A1; - } - SelectionIntoArgument(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_AddMeshElementDlg::DeactivateActiveDialog() -{ - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); - GroupC1->setEnabled(false); - GroupButtons->setEnabled(false); - mySimulation->SetVisibility(false); - mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_AddMeshElementDlg::ActivateThisDialog() -{ - /* Emit a signal to deactivate the active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog(); - - GroupConstructors->setEnabled(true); - GroupC1->setEnabled(true); - GroupButtons->setEnabled(true); - - SMESH::SetPointRepresentation(true); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( NodeSelection ); - SelectionIntoArgument(); -} - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_AddMeshElementDlg::enterEvent (QEvent*) -{ - if (GroupConstructors->isEnabled()) - return; - ActivateThisDialog(); - return; -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_AddMeshElementDlg::closeEvent (QCloseEvent*) -{ - /* same than click on cancel button */ - this->ClickOnCancel(); - return; -} - -//================================================================================= -// function : hideEvent() -// purpose : caused by ESC key -//================================================================================= -void SMESHGUI_AddMeshElementDlg::hideEvent (QHideEvent*) -{ - if (!isMinimized()) - ClickOnCancel(); -} - -//================================================================================= -// function : CheckBox() -// purpose : -//================================================================================= -void SMESHGUI_AddMeshElementDlg::CheckBox (int state) -{ - if (!myNbOkNodes) - return; - - if (state >= 0) { - mySimulation->SetVisibility(false); - displaySimulation(); - } -} diff --git a/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.h b/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.h deleted file mode 100644 index e6149a33e..000000000 --- a/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.h +++ /dev/null @@ -1,135 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_AddMeshElementDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef DIALOGBOX_ADD_FACE_H -#define DIALOGBOX_ADD_FACE_H - -#include "SalomeApp_SelectionMgr.h" - -#include "SMDSAbs_ElementType.hxx" - - -// QT Includes -#include -#include - -class QVBoxLayout; -class QHBoxLayout; -class QGridLayout; -class QButtonGroup; -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class QRadioButton; -class QCheckBox; -class SMESHGUI; -class SMESH_Actor; -class SMDS_Mesh; -class SVTK_ViewWindow; -class SVTK_Selector; - -namespace SMESH{ - struct TElementSimulation; -} - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -//================================================================================= -// class : SMESHGUI_AddMeshElementDlg -// purpose : -//================================================================================= -class SMESHGUI_AddMeshElementDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_AddMeshElementDlg( SMESHGUI*, - const char* = 0, - SMDSAbs_ElementType ElementType = SMDSAbs_Edge, - int nbNodes = 2, bool modal = FALSE, WFlags fl = 0 ); - ~SMESHGUI_AddMeshElementDlg(); - -private: - void Init (); - void closeEvent (QCloseEvent*); - void hideEvent (QHideEvent*); /* ESC key */ - void enterEvent (QEvent*); /* mouse enter the QWidget */ - void displaySimulation(); - - SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ - SalomeApp_SelectionMgr* mySelectionMgr; /* User shape selection */ - int myNbOkNodes; /* to check when arguments is defined */ - bool myBusy; - SVTK_Selector* mySelector; - - QLineEdit* myEditCurrentArgument; /* Current LineEdit */ - - int myElementType; - int myNbNodes; - bool myIsPoly; - - SMESH::SMESH_Mesh_var myMesh; - SMESH_Actor* myActor; - SMESH::TElementSimulation* mySimulation; - - QButtonGroup* GroupConstructors; - QRadioButton* Constructor1; - QGroupBox * GroupButtons; - QPushButton * buttonOk; - QPushButton * buttonCancel; - QPushButton * buttonApply; - QGroupBox * GroupC1; - QLabel * TextLabelC1A1; - QPushButton * SelectButtonC1A1; - QLineEdit * LineEditC1A1; - - QCheckBox * Reverse; - -private slots: - - void ClickOnOk(); - void ClickOnCancel(); - void ClickOnApply(); - void SetEditCurrentArgument() ; - void SelectionIntoArgument() ; - void DeactivateActiveDialog() ; - void ActivateThisDialog() ; - void CheckBox( int ); - void onTextChange(const QString&); - -protected: - QGridLayout* SMESHGUI_AddMeshElementDlgLayout; - QGridLayout* GroupConstructorsLayout; - QGridLayout* GroupButtonsLayout; - QGridLayout* GroupC1Layout; -}; - -#endif // DIALOGBOX_ADD_FACE_H diff --git a/src/SMESHGUI/SMESHGUI_AddSubMeshDlg.cxx b/src/SMESHGUI/SMESHGUI_AddSubMeshDlg.cxx deleted file mode 100644 index 79cbb32c0..000000000 --- a/src/SMESHGUI/SMESHGUI_AddSubMeshDlg.cxx +++ /dev/null @@ -1,535 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_AddSubMeshDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#include "SMESHGUI_AddSubMeshDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_GEOMGenUtils.h" -#include "SMESHGUI_HypothesesUtils.h" - -#include "SMESH_TypeFilter.hxx" -#include "SMESH_NumberFilter.hxx" - -#include "GEOMBase.h" - -#include "SUIT_Session.h" -#include "SUIT_MessageBox.h" -#include "SUIT_OverrideCursor.h" -#include "SUIT_Operation.h" -#include "SUIT_Desktop.h" - -#include "SALOMEDSClient_Study.hxx" -#include "SALOMEDS_SObject.hxx" -#include "SALOME_ListIO.hxx" -#include "SALOME_ListIteratorOfListIO.hxx" -#include "SalomeApp_Tools.h" - -#include "SVTK_ViewModel.h" - -#include "utilities.h" - -// QT Includes -#include -#include -#include -#include -#include -#include - -using namespace std; - -namespace SMESH { - SMESH::SMESH_subMesh_var AddSubMesh (SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theShapeObject, - const char* theMeshName) - { - SMESH::SMESH_subMesh_var aSubMesh; - try { - if (!theMesh->_is_nil() && !theShapeObject->_is_nil()) - aSubMesh = theMesh->GetSubMesh(theShapeObject, theMeshName); - } catch (const SALOME::SALOME_Exception& S_ex) { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - } - return aSubMesh._retn(); - } -} - -//================================================================================= -// function : SMESHGUI_AddSubMeshDlg() -// purpose : Constructs a SMESHGUI_AddSubMeshDlg which is a child of 'parent', with the -// name 'name' and widget flags set to 'f'. -// The dialog will by default be modeless, unless you set 'modal' to -// TRUE to construct a modal dialog. -//================================================================================= -SMESHGUI_AddSubMeshDlg::SMESHGUI_AddSubMeshDlg( SMESHGUI* theModule, const char* name, - bool modal, WFlags fl) - : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | - WStyle_Title | WStyle_SysMenu | WDestructiveClose), - mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) -{ - QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); - if (!name) - setName("SMESHGUI_AddSubMeshDlg"); - setCaption(tr("SMESH_ADD_SUBMESH")); - setSizeGripEnabled(TRUE); - QGridLayout* SMESHGUI_AddSubMeshDlgLayout = new QGridLayout(this); - SMESHGUI_AddSubMeshDlgLayout->setSpacing(6); - SMESHGUI_AddSubMeshDlgLayout->setMargin(11); - - /***************************************************************/ - GroupC1 = new QGroupBox (tr("SMESH_ARGUMENTS"), this, "GroupC1"); - GroupC1->setColumnLayout(0, Qt::Vertical); - GroupC1->layout()->setSpacing(0); - GroupC1->layout()->setMargin(0); - QGridLayout* GroupC1Layout = new QGridLayout (GroupC1->layout()); - GroupC1Layout->setAlignment(Qt::AlignTop); - GroupC1Layout->setSpacing(6); - GroupC1Layout->setMargin(11); - - TextLabel_NameMesh = new QLabel (tr("SMESH_NAME"), GroupC1, "TextLabel_NameMesh"); - GroupC1Layout->addWidget(TextLabel_NameMesh, 0, 0); - LineEdit_NameMesh = new QLineEdit (GroupC1, "LineEdit_NameMesh"); - GroupC1Layout->addWidget(LineEdit_NameMesh, 0, 2); - - TextLabelC1A1 = new QLabel (tr("SMESH_OBJECT_MESH"), GroupC1, "TextLabelC1A1"); - GroupC1Layout->addWidget(TextLabelC1A1, 1, 0); - SelectButtonC1A1 = new QPushButton (GroupC1, "SelectButtonC1A1"); - SelectButtonC1A1->setPixmap(image0); - SelectButtonC1A1->setToggleButton(FALSE); - GroupC1Layout->addWidget(SelectButtonC1A1, 1, 1); - LineEditC1A1 = new QLineEdit (GroupC1, "LineEditC1A1"); - LineEditC1A1->setReadOnly(true); - GroupC1Layout->addWidget(LineEditC1A1, 1, 2); - - TextLabelC1A2 = new QLabel(tr("SMESH_OBJECT_GEOM"), GroupC1, "TextLabelC1A2"); - GroupC1Layout->addWidget(TextLabelC1A2, 2, 0); - SelectButtonC1A2 = new QPushButton(GroupC1, "SelectButtonC1A2"); - SelectButtonC1A2->setPixmap(image0); - SelectButtonC1A2->setToggleButton(FALSE); - GroupC1Layout->addWidget(SelectButtonC1A2, 2, 1); - LineEditC1A2 = new QLineEdit(GroupC1, "LineEditC1A2"); - LineEditC1A2->setReadOnly(true); - GroupC1Layout->addWidget(LineEditC1A2, 2, 2); - - TextLabelC1A1Hyp = new QLabel(tr("SMESH_OBJECT_HYPOTHESIS"), GroupC1, "TextLabelC1A1Hyp"); - GroupC1Layout->addWidget(TextLabelC1A1Hyp, 3, 0); - SelectButtonC1A1Hyp = new QPushButton(GroupC1, "SelectButtonC1A1Hyp"); - SelectButtonC1A1Hyp->setPixmap(image0); - GroupC1Layout->addWidget(SelectButtonC1A1Hyp, 3, 1); - LineEditC1A1Hyp = new QLineEdit(GroupC1, "LineEditC1A1Hyp"); - LineEditC1A1Hyp->setReadOnly(true); - GroupC1Layout->addWidget(LineEditC1A1Hyp, 3, 2); - - TextLabelC1A1Algo = new QLabel(tr("SMESH_OBJECT_ALGORITHM"), GroupC1, "TextLabelC1A1Algo"); - GroupC1Layout->addWidget(TextLabelC1A1Algo, 4, 0); - SelectButtonC1A1Algo = new QPushButton(GroupC1, "SelectButtonC1A1Algo"); - SelectButtonC1A1Algo->setPixmap(image0); - GroupC1Layout->addWidget(SelectButtonC1A1Algo, 4, 1); - LineEditC1A1Algo = new QLineEdit(GroupC1, "LineEditC1A1Algo"); - LineEditC1A1Algo->setReadOnly(true); - GroupC1Layout->addWidget(LineEditC1A1Algo, 4, 2); - - SMESHGUI_AddSubMeshDlgLayout->addWidget(GroupC1, 1, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - - buttonOk = new QPushButton(tr("SMESH_BUT_OK"), GroupButtons, "buttonOk"); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - - buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons, "buttonApply"); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - - GroupButtonsLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 2); - - buttonCancel = new QPushButton(tr("SMESH_BUT_CLOSE"), GroupButtons, "buttonCancel"); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - - SMESHGUI_AddSubMeshDlgLayout->addWidget(GroupButtons, 2, 0); - - /***************************************************************/ - Init(); -} - -//================================================================================= -// function : ~SMESHGUI_AddSubMeshDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_AddSubMeshDlg::~SMESHGUI_AddSubMeshDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_AddSubMeshDlg::Init () -{ - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - //myGeomFilter = new SALOME_TypeFilter("GEOM"); - TColStd_MapOfInteger allTypesMap; - for (int i = 0; i < 10; i++) - allTypesMap.Add(i); - myGeomFilter = new SMESH_NumberFilter ("GEOM", TopAbs_SHAPE, 0, allTypesMap); - myMeshFilter = new SMESH_TypeFilter (MESH); - myAlgorithmFilter = new SMESH_TypeFilter (ALGORITHM); - myHypothesisFilter = new SMESH_TypeFilter (HYPOTHESIS); - - /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - - connect(SelectButtonC1A1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectButtonC1A2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectButtonC1A1Hyp, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectButtonC1A1Algo, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); - - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); - - LineEdit_NameMesh->setText(tr("SMESH_SUBMESH")); - LineEdit_NameMesh->setFocus(); - myEditCurrentArgument = LineEditC1A1; - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myMeshFilter); - - SelectionIntoArgument(); -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_AddSubMeshDlg::ClickOnOk() -{ - if (this->ClickOnApply()) - this->ClickOnCancel(); -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -bool SMESHGUI_AddSubMeshDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return false; - - QString myNameSubMesh = LineEdit_NameMesh->text().stripWhiteSpace(); - if (myNameSubMesh.isEmpty()) { - SUIT_MessageBox::warn1(this, tr("SMESH_WRN_WARNING"), - tr("SMESH_WRN_EMPTY_NAME"), tr("SMESH_BUT_OK")); - return false; - } - - if (myMesh->_is_nil() || myGeomShape->_is_nil() || - (!HypoList.count() && !AlgoList.count())) - return false; - - _PTR(SObject) aMeshSO = SMESH::FindSObject(myMesh); - GEOM::GEOM_Object_var myMainShape = SMESH::GetShapeOnMeshOrSubMesh(aMeshSO); - if (myMainShape->_is_nil()) - return false; - - SUIT_OverrideCursor wc; - - SUIT_Operation* op = - new SUIT_Operation (SUIT_Session::session()->activeApplication()); - - // start transaction - op->start(); - - // create submesh - SMESH::SMESH_subMesh_var aSubMesh = SMESH::AddSubMesh(myMesh, myGeomShape, myNameSubMesh); - int nbSuccess = 0; - - if (!aSubMesh->_is_nil()) { - // assign hypotheses - int nbAlgo = AlgoList.count(); - int nbHyps = HypoList.count() + nbAlgo; - for (int i = 0; i < nbHyps; i++) { - _PTR(SObject) aHypSOClient = - SMESH::GetActiveStudyDocument()->FindObjectID - (i < nbAlgo ? AlgoList[i].latin1() : HypoList[i-nbAlgo].latin1()); - if (aHypSOClient) { - CORBA::Object_var anObject = _CAST(SObject,aHypSOClient)->GetObject(); - if (!CORBA::is_nil(anObject)) { - SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow(anObject); - if (!aHyp->_is_nil()) - if (SMESH::AddHypothesisOnSubMesh(aSubMesh, aHyp)) - nbSuccess++; - } else { - SCRUTE(CORBA::is_nil(anObject)); - } - } else { - SCRUTE(!aHypSOClient); - } - } - } else { - SCRUTE(aSubMesh->_is_nil()); - } - - // commit transaction - op->commit(); - mySMESHGUI->updateObjBrowser(); - return (nbSuccess > 0); -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_AddSubMeshDlg::ClickOnCancel() -{ - close(); -} - -//================================================================================= -// function : IsFatherOf() -// purpose : -//================================================================================= -static bool IsFatherOf (_PTR(SObject) SO, _PTR(SObject) fatherSO) -{ - if (SO && fatherSO) { - _PTR(SObject) aSO = SO->GetFather(); - //while (strlen(aSO->GetID()) >= strlen(fatherSO->GetID())) { - while (aSO->GetID().length() >= fatherSO->GetID().length()) { - //if (QString(aSO->GetID()) == QString(fatherSO->GetID())) - if (aSO->GetID() == fatherSO->GetID()) - return true; - aSO = aSO->GetFather(); - } - } - return false; -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_AddSubMeshDlg::SelectionIntoArgument() -{ - QString aString = ""; - - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList, SVTK_Viewer::Type()); - int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - - if (myEditCurrentArgument == LineEditC1A1) { - // mesh - if (nbSel != 1) { - myMesh = SMESH::SMESH_Mesh::_nil(); - aString = ""; - } else { - Handle(SALOME_InteractiveObject) IO = aList.First(); - myMesh = SMESH::IObjectToInterface(IO); - if (myMesh->_is_nil()) { - aString = ""; - } - } - myGeomShape = GEOM::GEOM_Object::_nil(); - LineEditC1A2->setText(""); - - } else if (myEditCurrentArgument == LineEditC1A2) { - // geom shape - if (nbSel != 1) { - myGeomShape = GEOM::GEOM_Object::_nil(); - aString = ""; - } else { - Handle(SALOME_InteractiveObject) IO = aList.First(); - myGeomShape = SMESH::IObjectToInterface(IO); - if (myGeomShape->_is_nil() || !GEOMBase::IsShape(myGeomShape)) { - myGeomShape = GEOM::GEOM_Object::_nil(); - aString = ""; - } - if (!myMesh->_is_nil()) { - _PTR(SObject) aMeshSO = SMESH::FindSObject(myMesh); - GEOM::GEOM_Object_var aMainGeomShape = SMESH::GetShapeOnMeshOrSubMesh(aMeshSO); - _PTR(SObject) aMainGeomShapeSO = SMESH::FindSObject(aMainGeomShape); - if (!aMainGeomShapeSO || - !IsFatherOf(SMESH::GetActiveStudyDocument()->FindObjectID - (IO->getEntry()), aMainGeomShapeSO)) { - myGeomShape = GEOM::GEOM_Object::_nil(); - aString = ""; - } - } - } - } else if (myEditCurrentArgument == LineEditC1A1Hyp) { - // hypotheses - HypoList.clear(); - if (nbSel >= 1) { - SALOME_ListIteratorOfListIO Itinit (aList); - for (; Itinit.More(); Itinit.Next()) { - HypoList.append(Itinit.Value()->getEntry()); - } - if (nbSel > 1) - aString = tr("%1 Hypothesis").arg(nbSel); - } else { - aString = ""; - } - } else if (myEditCurrentArgument == LineEditC1A1Algo) { - // algorithms - AlgoList.clear(); - if (nbSel >= 1) { - SALOME_ListIteratorOfListIO Itinit (aList); - for (; Itinit.More(); Itinit.Next()) { - AlgoList.append(Itinit.Value()->getEntry()); - } - if (nbSel > 1) - aString = tr("%1 Algorithms").arg(nbSel); - } else { - aString = ""; - } - } else { - } - - myEditCurrentArgument->setText(aString); - myEditCurrentArgument->setCursorPosition( 0 ); - - UpdateControlState(); -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_AddSubMeshDlg::SetEditCurrentArgument() -{ - QPushButton* send = (QPushButton*)sender(); - if(send == SelectButtonC1A1) { - LineEditC1A1->setFocus(); - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myMeshFilter); - myEditCurrentArgument = LineEditC1A1; - } else if (send == SelectButtonC1A2) { - LineEditC1A2->setFocus(); - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myGeomFilter); - myEditCurrentArgument = LineEditC1A2; - } else if(send == SelectButtonC1A1Hyp) { - LineEditC1A1Hyp->setFocus(); - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myHypothesisFilter); - myEditCurrentArgument = LineEditC1A1Hyp; - } else if(send == SelectButtonC1A1Algo) { - LineEditC1A1Algo->setFocus(); - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myAlgorithmFilter); - myEditCurrentArgument = LineEditC1A1Algo; - } - SelectionIntoArgument(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_AddSubMeshDlg::DeactivateActiveDialog() -{ - if (GroupC1->isEnabled()) { - disconnect(mySelectionMgr, 0, this, 0); - GroupC1->setEnabled(false); - GroupButtons->setEnabled(false); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_AddSubMeshDlg::ActivateThisDialog() -{ - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupC1->setEnabled(true); - GroupButtons->setEnabled(true); - connect (mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); -} - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_AddSubMeshDlg::enterEvent (QEvent*) -{ - if (!GroupC1->isEnabled()) - ActivateThisDialog(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_AddSubMeshDlg::closeEvent (QCloseEvent* e) -{ - disconnect(mySelectionMgr, 0, this, 0); - mySMESHGUI->ResetState(); - mySelectionMgr->clearFilters(); - QDialog::closeEvent(e); -} - -//================================================================================= -// function : UpdateControlState() -// purpose : -//================================================================================= -void SMESHGUI_AddSubMeshDlg::UpdateControlState() -{ - bool isEnabled = (!myMesh->_is_nil() && - !myGeomShape->_is_nil() && - (HypoList.count() || AlgoList.count())); - bool isImportedMesh = false; - if (!myMesh->_is_nil()) { - _PTR(SObject) aMeshSO = SMESH::FindSObject(myMesh); - GEOM::GEOM_Object_var myGeomShape = SMESH::GetShapeOnMeshOrSubMesh(aMeshSO); - isImportedMesh = myGeomShape->_is_nil(); - } - - buttonOk ->setEnabled(isEnabled && !isImportedMesh); - buttonApply->setEnabled(isEnabled && !isImportedMesh); -} diff --git a/src/SMESHGUI/SMESHGUI_AddSubMeshDlg.h b/src/SMESHGUI/SMESHGUI_AddSubMeshDlg.h deleted file mode 100644 index 20e197618..000000000 --- a/src/SMESHGUI/SMESHGUI_AddSubMeshDlg.h +++ /dev/null @@ -1,129 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_AddSubMeshDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef DIALOGBOX_ADD_SUBMESH_H -#define DIALOGBOX_ADD_SUBMESH_H - -//#include "SMESH_TypeFilter.hxx" - -#include "SUIT_SelectionFilter.h" -#include "SalomeApp_SelectionMgr.h" - -// QT Includes -#include -#include - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(GEOM_Gen) -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class SMESHGUI; - -//================================================================================= -// class : SMESHGUI_AddSubMeshDlg -// purpose : -//================================================================================= -class SMESHGUI_AddSubMeshDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_AddSubMeshDlg( SMESHGUI*, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0); - ~SMESHGUI_AddSubMeshDlg(); - -protected: - void closeEvent (QCloseEvent* e); - void enterEvent (QEvent *) ; - -private: - void Init (); - - void UpdateControlState(); - -private: - SMESHGUI* mySMESHGUI; - SalomeApp_SelectionMgr* mySelectionMgr; - - SMESH::SMESH_Mesh_var myMesh; - GEOM::GEOM_Object_var myGeomShape; - QLineEdit* myEditCurrentArgument; - - //Handle(SALOME_TypeFilter) myMeshFilter; - //Handle(SMESH_TypeFilter) myMeshFilter; - //Handle(SMESH_TypeFilter) myHypothesisFilter; - //Handle(SMESH_TypeFilter) myAlgorithmFilter; - SUIT_SelectionFilter* myGeomFilter; - SUIT_SelectionFilter* myMeshFilter; - SUIT_SelectionFilter* myHypothesisFilter; - SUIT_SelectionFilter* myAlgorithmFilter; - - QStringList HypoList; - QStringList AlgoList; - - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonApply; - QPushButton* buttonCancel; - - QGroupBox* GroupC1; - QLabel* TextLabel_NameMesh; - QLineEdit* LineEdit_NameMesh; - QLabel* TextLabelC1A1; - QPushButton* SelectButtonC1A1; - QLineEdit* LineEditC1A1; - QLabel* TextLabelC1A2; - QPushButton* SelectButtonC1A2; - QLineEdit* LineEditC1A2; - - QLabel* TextLabelC1A1Hyp; - QPushButton* SelectButtonC1A1Hyp; - QLineEdit* LineEditC1A1Hyp; - - QLabel* TextLabelC1A1Algo; - QPushButton* SelectButtonC1A1Algo; - QLineEdit* LineEditC1A1Algo; - -private slots: - void ClickOnOk(); - bool ClickOnApply(); - void ClickOnCancel(); - void SetEditCurrentArgument(); - void SelectionIntoArgument(); - void DeactivateActiveDialog(); - void ActivateThisDialog(); -}; - -#endif // DIALOGBOX_ADD_SUBMESH_H diff --git a/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx b/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx deleted file mode 100644 index bdc7b83af..000000000 --- a/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx +++ /dev/null @@ -1,745 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_ClippingDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#include "SMESHGUI_ClippingDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" - -#include "SMESH_Actor.h" -#include "SMESH_ActorUtils.h" - -#include "SUIT_Session.h" -#include "SUIT_OverrideCursor.h" - -#include "SALOME_ListIO.hxx" -#include "SALOME_InteractiveObject.hxx" -#include "SALOME_ListIteratorOfListIO.hxx" - -#include "SalomeApp_Application.h" -#include "SalomeApp_SelectionMgr.h" - -#include "SVTK_Selector.h" -#include "SVTK_ViewWindow.h" - -// QT Includes -#include -#include -#include -#include -#include -#include - -// VTK Includes -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -// STL includes -#include - -using namespace std; - - -class OrientedPlane: public vtkPlane -{ - SVTK_ViewWindow* myViewWindow; - - vtkDataSetMapper* myMapper; - -public: - static OrientedPlane *New() - { - return new OrientedPlane(); - } - static OrientedPlane *New(SVTK_ViewWindow* theViewWindow) - { - return new OrientedPlane(theViewWindow); - } - vtkTypeMacro (OrientedPlane, vtkPlane); - - SMESH::Orientation myOrientation; - float myDistance; - double myAngle[2]; - - vtkPlaneSource* myPlaneSource; - SALOME_Actor *myActor; - - void SetOrientation (SMESH::Orientation theOrientation) { myOrientation = theOrientation; } - SMESH::Orientation GetOrientation() { return myOrientation; } - - void SetDistance (float theDistance) { myDistance = theDistance; } - float GetDistance() { return myDistance; } - - void ShallowCopy (OrientedPlane* theOrientedPlane) - { - SetNormal(theOrientedPlane->GetNormal()); - SetOrigin(theOrientedPlane->GetOrigin()); - - myOrientation = theOrientedPlane->GetOrientation(); - myDistance = theOrientedPlane->GetDistance(); - - myAngle[0] = theOrientedPlane->myAngle[0]; - myAngle[1] = theOrientedPlane->myAngle[1]; - - myPlaneSource->SetNormal(theOrientedPlane->myPlaneSource->GetNormal()); - myPlaneSource->SetOrigin(theOrientedPlane->myPlaneSource->GetOrigin()); - myPlaneSource->SetPoint1(theOrientedPlane->myPlaneSource->GetPoint1()); - myPlaneSource->SetPoint2(theOrientedPlane->myPlaneSource->GetPoint2()); - } - -protected: - OrientedPlane(SVTK_ViewWindow* theViewWindow): - myViewWindow(theViewWindow), - myOrientation(SMESH::XY), - myDistance(0.5) - { - Init(); - myViewWindow->AddActor(myActor); - } - - OrientedPlane(): - myOrientation(SMESH::XY), - myViewWindow(NULL), - myDistance(0.5) - { - Init(); - } - - void Init() - { - myPlaneSource = vtkPlaneSource::New(); - - myAngle[0] = myAngle[1] = 0.0; - - // Create and display actor - myMapper = vtkDataSetMapper::New(); - myMapper->SetInput(myPlaneSource->GetOutput()); - - myActor = SALOME_Actor::New(); - myActor->VisibilityOff(); - myActor->PickableOff(); - myActor->SetInfinitive(true); - myActor->SetMapper(myMapper); - - float anRGB[3]; - vtkProperty* aProp = vtkProperty::New(); - SMESH::GetColor( "SMESH", "fill_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) ); - aProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); - aProp->SetOpacity(0.75); - myActor->SetProperty(aProp); - aProp->Delete(); - - vtkProperty* aBackProp = vtkProperty::New(); - SMESH::GetColor( "SMESH", "backface_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 0, 255 ) ); - aBackProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); - aBackProp->SetOpacity(0.75); - myActor->SetBackfaceProperty(aBackProp); - aBackProp->Delete(); - } - - ~OrientedPlane(){ - myViewWindow->RemoveActor(myActor); - myActor->Delete(); - - myMapper->RemoveAllInputs(); - myMapper->Delete(); - - myPlaneSource->UnRegisterAllOutputs(); - myPlaneSource->Delete(); - }; - -private: - // Not implemented. - OrientedPlane (const OrientedPlane&); - void operator= (const OrientedPlane&); - -}; - -struct TSetVisiblity { - TSetVisiblity(int theIsVisible): myIsVisible(theIsVisible){} - void operator()(SMESH::TVTKPlane& theOrientedPlane){ - theOrientedPlane->myActor->SetVisibility(myIsVisible); - } - int myIsVisible; -}; - -//================================================================================= -// class : SMESHGUI_ClippingDlg() -// purpose : -// -//================================================================================= -SMESHGUI_ClippingDlg::SMESHGUI_ClippingDlg (SMESHGUI* theModule, - const char* name, - bool modal, - WFlags fl): - QDialog(SMESH::GetDesktop(theModule), - name, - modal, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose), - mySelector(SMESH::GetViewWindow(theModule)->GetSelector()), - mySelectionMgr(SMESH::GetSelectionMgr(theModule)), - mySMESHGUI(theModule) -{ - if (!name) - setName("SMESHGUI_ClippingDlg"); - setCaption(tr("SMESH_CLIPPING_TITLE")); - setSizeGripEnabled(TRUE); - QGridLayout* SMESHGUI_ClippingDlgLayout = new QGridLayout(this); - SMESHGUI_ClippingDlgLayout->setSpacing(6); - SMESHGUI_ClippingDlgLayout->setMargin(11); - - // Controls for selecting, creating, deleting planes - QGroupBox* GroupPlanes = new QGroupBox (this, "GroupPlanes"); - GroupPlanes->setTitle(tr("Clipping planes")); - GroupPlanes->setColumnLayout(0, Qt::Vertical); - GroupPlanes->layout()->setSpacing(0); - GroupPlanes->layout()->setMargin(0); - QGridLayout* GroupPlanesLayout = new QGridLayout (GroupPlanes->layout()); - GroupPlanesLayout->setAlignment(Qt::AlignTop); - GroupPlanesLayout->setSpacing(6); - GroupPlanesLayout->setMargin(11); - - ComboBoxPlanes = new QComboBox(GroupPlanes, "ComboBoxPlanes"); - GroupPlanesLayout->addWidget(ComboBoxPlanes, 0, 0); - - QSpacerItem* spacerGP = new QSpacerItem (20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupPlanesLayout->addItem(spacerGP, 0, 1); - - buttonNew = new QPushButton (GroupPlanes, "buttonNew"); - buttonNew->setText(tr("SMESH_BUT_NEW")); - GroupPlanesLayout->addWidget(buttonNew, 0, 2); - - buttonDelete = new QPushButton (GroupPlanes, "buttonDelete"); - buttonDelete->setText(tr("SMESH_BUT_DELETE")); - GroupPlanesLayout->addWidget(buttonDelete, 0, 3); - - // Controls for defining plane parameters - QGroupBox* GroupParameters = new QGroupBox (this, "GroupParameters"); - GroupParameters->setTitle(tr("SMESH_PARAMETERS")); - GroupParameters->setColumnLayout(0, Qt::Vertical); - GroupParameters->layout()->setSpacing(0); - GroupParameters->layout()->setMargin(0); - QGridLayout* GroupParametersLayout = new QGridLayout (GroupParameters->layout()); - GroupParametersLayout->setAlignment(Qt::AlignTop); - GroupParametersLayout->setSpacing(6); - GroupParametersLayout->setMargin(11); - - TextLabelOrientation = new QLabel(GroupParameters, "TextLabelOrientation"); - TextLabelOrientation->setText(tr("SMESH_ORIENTATION")); - GroupParametersLayout->addWidget(TextLabelOrientation, 0, 0); - - ComboBoxOrientation = new QComboBox(GroupParameters, "ComboBoxOrientation"); - GroupParametersLayout->addWidget(ComboBoxOrientation, 0, 1); - - TextLabelDistance = new QLabel(GroupParameters, "TextLabelDistance"); - TextLabelDistance->setText(tr("SMESH_DISTANCE")); - GroupParametersLayout->addWidget(TextLabelDistance, 1, 0); - - SpinBoxDistance = new SMESHGUI_SpinBox(GroupParameters, "SpinBoxDistance"); - GroupParametersLayout->addWidget(SpinBoxDistance, 1, 1); - - TextLabelRot1 = new QLabel(GroupParameters, "TextLabelRot1"); - TextLabelRot1->setText(tr("Rotation around X (Y to Z):")); - GroupParametersLayout->addWidget(TextLabelRot1, 2, 0); - - SpinBoxRot1 = new SMESHGUI_SpinBox(GroupParameters, "SpinBoxRot1"); - GroupParametersLayout->addWidget(SpinBoxRot1, 2, 1); - - TextLabelRot2 = new QLabel(GroupParameters, "TextLabelRot2"); - TextLabelRot2->setText(tr("Rotation around Y (X to Z):")); - GroupParametersLayout->addWidget(TextLabelRot2, 3, 0); - - SpinBoxRot2 = new SMESHGUI_SpinBox(GroupParameters, "SpinBoxRot2"); - GroupParametersLayout->addWidget(SpinBoxRot2, 3, 1); - - PreviewCheckBox = new QCheckBox(tr("Show preview"), GroupParameters); - PreviewCheckBox->setChecked(true); - GroupParametersLayout->addWidget(PreviewCheckBox, 4, 0); - - AutoApplyCheckBox = new QCheckBox(tr("Auto Apply"), GroupParameters); - AutoApplyCheckBox->setChecked(false); - GroupParametersLayout->addWidget(AutoApplyCheckBox, 4, 1); - - // Controls for "Ok", "Apply" and "Close" button - QGroupBox* GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, GroupButtons->sizePolicy().hasHeightForWidth())); - GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - GroupButtons->setTitle(tr("" )); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_APPLY" )); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - buttonOk = new QPushButton(GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_OK" )); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - - SMESHGUI_ClippingDlgLayout->addWidget(GroupPlanes, 0, 0); - SMESHGUI_ClippingDlgLayout->addWidget(GroupParameters, 1, 0); - SMESHGUI_ClippingDlgLayout->addWidget(GroupButtons, 2, 0); - - // Initial state - SpinBoxDistance->RangeStepAndValidator(0.0, 1.0, 0.01, 3); - SpinBoxRot1->RangeStepAndValidator(-180.0, 180.0, 1, 3); - SpinBoxRot2->RangeStepAndValidator(-180.0, 180.0, 1, 3); - - ComboBoxOrientation->insertItem(tr("|| X-Y")); - ComboBoxOrientation->insertItem(tr("|| Y-Z")); - ComboBoxOrientation->insertItem(tr("|| Z-X")); - - SpinBoxDistance->SetValue(0.5); - - myActor = 0; - myIsSelectPlane = false; - onSelectionChanged(); - - // signals and slots connections : - connect(ComboBoxPlanes, SIGNAL(activated(int)), this, SLOT(onSelectPlane(int))); - connect(buttonNew, SIGNAL(clicked()), this, SLOT(ClickOnNew())); - connect(buttonDelete, SIGNAL(clicked()), this, SLOT(ClickOnDelete())); - connect(ComboBoxOrientation, SIGNAL(activated(int)), this, SLOT(onSelectOrientation(int))); - connect(SpinBoxDistance, SIGNAL(valueChanged(double)), this, SLOT(SetCurrentPlaneParam())); - connect(SpinBoxRot1, SIGNAL(valueChanged(double)), this, SLOT(SetCurrentPlaneParam())); - connect(SpinBoxRot2, SIGNAL(valueChanged(double)), this, SLOT(SetCurrentPlaneParam())); - connect(PreviewCheckBox, SIGNAL(toggled(bool)), this, SLOT(OnPreviewToggle(bool))); - connect(AutoApplyCheckBox, SIGNAL(toggled(bool)), this, SLOT(ClickOnApply())); - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnOk())); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionChanged())); - /* to close dialog if study frame change */ - connect(mySMESHGUI, SIGNAL (SignalStudyFrameChanged()), this, SLOT(ClickOnCancel())); - - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); -} - -//================================================================================= -// function : ~SMESHGUI_ClippingDlg() -// purpose : -//================================================================================= -SMESHGUI_ClippingDlg::~SMESHGUI_ClippingDlg() -{ - // no need to delete child widgets, Qt does it all for us - std::for_each(myPlanes.begin(),myPlanes.end(),TSetVisiblity(false)); - SMESH::RenderViewWindow(SMESH::GetViewWindow(mySMESHGUI)); -} - -//======================================================================= -// function : ClickOnApply() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::ClickOnApply() -{ - if (!myActor) - return; - - if (SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow(mySMESHGUI)) { - SUIT_OverrideCursor wc; - - myActor->RemoveAllClippingPlanes(); - - SMESH::TPlanes::iterator anIter = myPlanes.begin(); - for (; anIter != myPlanes.end(); anIter++) { - OrientedPlane* anOrientedPlane = OrientedPlane::New(aViewWindow); - anOrientedPlane->ShallowCopy(anIter->GetPointer()); - myActor->AddClippingPlane(anOrientedPlane); - anOrientedPlane->Delete(); - } - - SMESH::RenderViewWindow(aViewWindow); - } -} - -//======================================================================= -// function : ClickOnOk() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::ClickOnOk() -{ - ClickOnApply(); - ClickOnCancel(); -} - -//======================================================================= -// function : ClickOnCancel() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::ClickOnCancel() -{ - close(); -} - -//================================================================================= -// function : onSelectionChanged() -// purpose : Called when selection is changed -//================================================================================= -void SMESHGUI_ClippingDlg::onSelectionChanged() -{ - if (SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow(mySMESHGUI)) { - const SALOME_ListIO& aList = mySelector->StoredIObjects(); - if (aList.Extent() > 0) { - Handle(SALOME_InteractiveObject) IOS = aList.First(); - myActor = SMESH::FindActorByEntry(IOS->getEntry()); - if (myActor) { - std::for_each(myPlanes.begin(),myPlanes.end(),TSetVisiblity(false)); - myPlanes.clear(); - - vtkIdType anId = 0, anEnd = myActor->GetNumberOfClippingPlanes(); - for (; anId < anEnd; anId++) { - if (vtkImplicitFunction* aFunction = myActor->GetClippingPlane(anId)) { - if(OrientedPlane* aPlane = OrientedPlane::SafeDownCast(aFunction)){ - OrientedPlane* anOrientedPlane = OrientedPlane::New(aViewWindow); - SMESH::TVTKPlane aTVTKPlane(anOrientedPlane); - anOrientedPlane->Delete(); - aTVTKPlane->ShallowCopy(aPlane); - myPlanes.push_back(aTVTKPlane); - } - } - } - - std::for_each(myPlanes.begin(),myPlanes.end(), - TSetVisiblity(PreviewCheckBox->isChecked())); - } - } - SMESH::RenderViewWindow(aViewWindow); - } - Sinchronize(); -} - -//======================================================================= -// function : onSelectPlane() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::onSelectPlane (int theIndex) -{ - if (!myActor || myPlanes.empty()) - return; - - OrientedPlane* aPlane = myPlanes[theIndex].GetPointer(); - - // Orientation - SMESH::Orientation anOrientation = aPlane->GetOrientation(); - - // Rotations - double aRot[2] = {aPlane->myAngle[0], aPlane->myAngle[1]}; - - // Set plane parameters in the dialog - myIsSelectPlane = true; - setDistance(aPlane->GetDistance()); - setRotation(aRot[0], aRot[1]); - switch (anOrientation) { - case SMESH::XY: - ComboBoxOrientation->setCurrentItem(0); - onSelectOrientation(0); - break; - case SMESH::YZ: - ComboBoxOrientation->setCurrentItem(1); - onSelectOrientation(1); - break; - case SMESH::ZX: - ComboBoxOrientation->setCurrentItem(2); - onSelectOrientation(2); - break; - } - myIsSelectPlane = false; -} - -//======================================================================= -// function : ClickOnNew() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::ClickOnNew() -{ - if (!myActor) - return; - - if(SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow(mySMESHGUI)){ - OrientedPlane* aPlane = OrientedPlane::New(aViewWindow); - SMESH::TVTKPlane aTVTKPlane(aPlane); - myPlanes.push_back(aTVTKPlane); - - if (PreviewCheckBox->isChecked()) - aTVTKPlane->myActor->VisibilityOn(); - - Sinchronize(); - SetCurrentPlaneParam(); - } -} - -//======================================================================= -// function : ClickOnDelete() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::ClickOnDelete() -{ - if (!myActor || myPlanes.empty()) - return; - - int aPlaneIndex = ComboBoxPlanes->currentItem(); - - SMESH::TPlanes::iterator anIter = myPlanes.begin() + aPlaneIndex; - anIter->GetPointer()->myActor->SetVisibility(false); - myPlanes.erase(anIter); - - if(AutoApplyCheckBox->isChecked()) - ClickOnApply(); - - Sinchronize(); - SMESH::RenderViewWindow(SMESH::GetCurrentVtkView()); -} - -//======================================================================= -// function : onSelectOrientation() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::onSelectOrientation (int theItem) -{ - if (myPlanes.empty()) - return; - - if (theItem == 0) { - TextLabelRot1->setText(tr("Rotation around X (Y to Z):")); - TextLabelRot2->setText(tr("Rotation around Y (X to Z):")); - } - else if (theItem == 1) { - TextLabelRot1->setText(tr("Rotation around Y (Z to X):")); - TextLabelRot2->setText(tr("Rotation around Z (Y to X):")); - } - else if (theItem == 2) { - TextLabelRot1->setText(tr("Rotation around Z (X to Y):")); - TextLabelRot2->setText(tr("Rotation around X (Z to Y):")); - } - - if((QComboBox*)sender() == ComboBoxOrientation) - SetCurrentPlaneParam(); -} - -//======================================================================= -// function : Sinchronize() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::Sinchronize() -{ - int aNbPlanes = myPlanes.size(); - ComboBoxPlanes->clear(); - - QString aName; - for(int i = 1; i<=aNbPlanes; i++) { - aName = QString(tr("Plane# %1")).arg(i); - ComboBoxPlanes->insertItem(aName); - } - - int aPos = ComboBoxPlanes->count() - 1; - ComboBoxPlanes->setCurrentItem(aPos); - - bool anIsControlsEnable = (aPos >= 0); - if (anIsControlsEnable) { - onSelectPlane(aPos); - } else { - ComboBoxPlanes->insertItem(tr("No planes")); - SpinBoxRot1->SetValue(0.0); - SpinBoxRot2->SetValue(0.0); - SpinBoxDistance->SetValue(0.5); - } - - buttonDelete->setEnabled(anIsControlsEnable); - buttonApply->setEnabled(anIsControlsEnable); - PreviewCheckBox->setEnabled(anIsControlsEnable); - AutoApplyCheckBox->setEnabled(anIsControlsEnable); - ComboBoxOrientation->setEnabled(anIsControlsEnable); - SpinBoxDistance->setEnabled(anIsControlsEnable); - SpinBoxRot1->setEnabled(anIsControlsEnable); - SpinBoxRot2->setEnabled(anIsControlsEnable); -} - -//======================================================================= -// function : setRotation() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::setRotation (const double theRot1, const double theRot2) -{ - SpinBoxRot1->SetValue(theRot1); - SpinBoxRot2->SetValue(theRot2); -} - -//======================================================================= -// function : SetCurrentPlaneParam() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::SetCurrentPlaneParam() -{ - if (myPlanes.empty() || myIsSelectPlane) - return; - - int aCurPlaneIndex = ComboBoxPlanes->currentItem(); - - OrientedPlane* aPlane = myPlanes[aCurPlaneIndex].GetPointer(); - - float aNormal[3]; - SMESH::Orientation anOrientation; - float aDir[3][3] = {{0, 0, 0}, {0, 0, 0}}; - { - static double aCoeff = vtkMath::Pi()/180.0; - - float aRot[2] = {getRotation1(), getRotation2()}; - aPlane->myAngle[0] = aRot[0]; - aPlane->myAngle[1] = aRot[1]; - - float anU[2] = {cos(aCoeff*aRot[0]), cos(aCoeff*aRot[1])}; - float aV[2] = {sqrt(1.0-anU[0]*anU[0]), sqrt(1.0-anU[1]*anU[1])}; - aV[0] = aRot[0] > 0? aV[0]: -aV[0]; - aV[1] = aRot[1] > 0? aV[1]: -aV[1]; - - switch (ComboBoxOrientation->currentItem()) { - case 0: - anOrientation = SMESH::XY; - - aDir[0][1] = anU[0]; - aDir[0][2] = aV[0]; - - aDir[1][0] = anU[1]; - aDir[1][2] = aV[1]; - - break; - case 1: - anOrientation = SMESH::YZ; - - aDir[0][2] = anU[0]; - aDir[0][0] = aV[0]; - - aDir[1][1] = anU[1]; - aDir[1][0] = aV[1]; - - break; - case 2: - anOrientation = SMESH::ZX; - - aDir[0][0] = anU[0]; - aDir[0][1] = aV[0]; - - aDir[1][2] = anU[1]; - aDir[1][1] = aV[1]; - - break; - } - - vtkMath::Cross(aDir[1],aDir[0],aNormal); - vtkMath::Normalize(aNormal); - vtkMath::Cross(aNormal,aDir[1],aDir[0]); - } - - aPlane->SetOrientation(anOrientation); - aPlane->SetDistance(getDistance()); - - myActor->SetPlaneParam(aNormal, getDistance(), aPlane); - - vtkDataSet* aDataSet = myActor->GetInput(); - float *aPnt = aDataSet->GetCenter(); - - float* anOrigin = aPlane->GetOrigin(); - float aDel = aDataSet->GetLength()/2.0; - - float aDelta[2][3] = {{aDir[0][0]*aDel, aDir[0][1]*aDel, aDir[0][2]*aDel}, - {aDir[1][0]*aDel, aDir[1][1]*aDel, aDir[1][2]*aDel}}; - float aParam, aPnt0[3], aPnt1[3], aPnt2[3]; - - float aPnt01[3] = {aPnt[0] - aDelta[0][0] - aDelta[1][0], - aPnt[1] - aDelta[0][1] - aDelta[1][1], - aPnt[2] - aDelta[0][2] - aDelta[1][2]}; - float aPnt02[3] = {aPnt01[0] + aNormal[0], - aPnt01[1] + aNormal[1], - aPnt01[2] + aNormal[2]}; - vtkPlane::IntersectWithLine(aPnt01,aPnt02,aNormal,anOrigin,aParam,aPnt0); - - float aPnt11[3] = {aPnt[0] - aDelta[0][0] + aDelta[1][0], - aPnt[1] - aDelta[0][1] + aDelta[1][1], - aPnt[2] - aDelta[0][2] + aDelta[1][2]}; - float aPnt12[3] = {aPnt11[0] + aNormal[0], - aPnt11[1] + aNormal[1], - aPnt11[2] + aNormal[2]}; - vtkPlane::IntersectWithLine(aPnt11,aPnt12,aNormal,anOrigin,aParam,aPnt1); - - float aPnt21[3] = {aPnt[0] + aDelta[0][0] - aDelta[1][0], - aPnt[1] + aDelta[0][1] - aDelta[1][1], - aPnt[2] + aDelta[0][2] - aDelta[1][2]}; - float aPnt22[3] = {aPnt21[0] + aNormal[0], - aPnt21[1] + aNormal[1], - aPnt21[2] + aNormal[2]}; - vtkPlane::IntersectWithLine(aPnt21,aPnt22,aNormal,anOrigin,aParam,aPnt2); - - vtkPlaneSource* aPlaneSource = aPlane->myPlaneSource; - aPlaneSource->SetNormal(aNormal[0],aNormal[1],aNormal[2]); - aPlaneSource->SetOrigin(aPnt0[0],aPnt0[1],aPnt0[2]); - aPlaneSource->SetPoint1(aPnt1[0],aPnt1[1],aPnt1[2]); - aPlaneSource->SetPoint2(aPnt2[0],aPnt2[1],aPnt2[2]); - - if(AutoApplyCheckBox->isChecked()) - ClickOnApply(); - - SMESH::RenderViewWindow(SMESH::GetCurrentVtkView()); -} - -//======================================================================= -// function : OnPreviewToggle() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::OnPreviewToggle (bool theIsToggled) -{ - std::for_each(myPlanes.begin(),myPlanes.end(),TSetVisiblity(theIsToggled)); - SMESH::RenderViewWindow(SMESH::GetCurrentVtkView()); -} diff --git a/src/SMESHGUI/SMESHGUI_ClippingDlg.h b/src/SMESHGUI/SMESHGUI_ClippingDlg.h deleted file mode 100644 index 288724434..000000000 --- a/src/SMESHGUI/SMESHGUI_ClippingDlg.h +++ /dev/null @@ -1,131 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_TransparencyDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef DIALOGBOX_CLIPPING_H -#define DIALOGBOX_CLIPPING_H - -#include - -#include -#include - -#include - -// QT Includes -#include -#include - -class QLabel; -class QPushButton; -class QTable; -class QCheckBox; -class QComboBox; - -class SalomeApp_SelectionMgr; -class SVTK_Selector; - -class SMESHGUI; -class SMESH_Actor; - -class OrientedPlane; - - -namespace SMESH { - - typedef vtkSmartPointer TVTKPlane; - typedef std::vector TPlanes; - enum Orientation {XY, YZ, ZX}; - -}; - - -//================================================================================= -// class : SMESHGUI_ClippingDlg -// purpose : -//================================================================================= -class SMESHGUI_ClippingDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_ClippingDlg (SMESHGUI* theModule, - const char* name = 0, - bool modal = false, - WFlags fl = 0); - - float getDistance() { return (float)SpinBoxDistance->GetValue(); } - void setDistance (const float theDistance) { SpinBoxDistance->SetValue(theDistance); } - double getRotation1() { return SpinBoxRot1->GetValue(); } - double getRotation2() { return SpinBoxRot2->GetValue(); } - void setRotation (const double theRot1, const double theRot2); - void Sinchronize(); - - ~SMESHGUI_ClippingDlg(); - -private: - - SalomeApp_SelectionMgr* mySelectionMgr; - SVTK_Selector* mySelector; - SMESHGUI* mySMESHGUI; - SMESH_Actor* myActor; - SMESH::TPlanes myPlanes; - - QComboBox* ComboBoxPlanes; - QPushButton* buttonNew; - QPushButton* buttonDelete; - QLabel* TextLabelOrientation; - QComboBox* ComboBoxOrientation; - QLabel* TextLabelDistance; - SMESHGUI_SpinBox* SpinBoxDistance; - QLabel* TextLabelRot1; - SMESHGUI_SpinBox* SpinBoxRot1; - QLabel* TextLabelRot2; - SMESHGUI_SpinBox* SpinBoxRot2; - QCheckBox* PreviewCheckBox; - QCheckBox* AutoApplyCheckBox; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - - bool myIsSelectPlane; - -public slots: - - void onSelectPlane (int theIndex); - void ClickOnNew(); - void ClickOnDelete(); - void onSelectOrientation (int theItem); - void SetCurrentPlaneParam(); - void onSelectionChanged(); - void OnPreviewToggle (bool theIsToggled); - void ClickOnOk(); - void ClickOnCancel(); - void ClickOnApply(); -}; - -#endif // DIALOGBOX_TRANSPARENCYDLG_H diff --git a/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.cxx b/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.cxx deleted file mode 100644 index 68d2f10c8..000000000 --- a/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.cxx +++ /dev/null @@ -1,294 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_CreateHypothesesDlg.cxx -// Author : Julia DOROVSKIKH -// Module : SMESH -// $Header$ - -#include "SMESHGUI_CreateHypothesesDlg.h" - -#include "SMESHGUI_HypothesesUtils.h" -#include "SMESHGUI_Hypotheses.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI.h" - -#include "SUIT_Desktop.h" -#include "SUIT_ResourceMgr.h" - -#include "SALOME_ListIteratorOfListIO.hxx" - -#include "utilities.h" - -// QT Includes -#include -#include -#include -#include -#include -#include - -using namespace std; - -//================================================================================= -// function : SMESHGUI_CreateHypothesesDlg() -// purpose : Constructs a SMESHGUI_CreateHypothesesDlg which is a child of 'parent', with the -// name 'name' and widget flags set to 'f'. -// The dialog will by default be modeless, unless you set 'modal' to -// TRUE to construct a modal dialog. -//================================================================================= -SMESHGUI_CreateHypothesesDlg::SMESHGUI_CreateHypothesesDlg (SMESHGUI* theModule, - const char* name, - bool modal, - bool isAlgo) - : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | - WStyle_Title | WStyle_SysMenu | WDestructiveClose), - myIsAlgo(isAlgo), - mySMESHGUI( theModule ) -{ - if (!name) - setName("SMESHGUI_CreateHypothesesDlg"); - setCaption(isAlgo ? tr("SMESH_CREATE_ALGORITHMS" ) : tr("SMESH_CREATE_HYPOTHESES" )); - setSizeGripEnabled(TRUE); - - QGridLayout* SMESHGUI_CreateHypothesesDlgLayout = new QGridLayout(this); - SMESHGUI_CreateHypothesesDlgLayout->setSpacing(6); - SMESHGUI_CreateHypothesesDlgLayout->setMargin(11); - - /***************************************************************/ - GroupAlgorithms = new QGroupBox(this, "GroupAlgorithms"); - GroupAlgorithms->setTitle(isAlgo ? tr("SMESH_AVAILABLE_ALGORITHMS") : tr("SMESH_AVAILABLE_HYPOTHESES")); - GroupAlgorithms->setColumnLayout(0, Qt::Vertical); - GroupAlgorithms->layout()->setSpacing(0); - GroupAlgorithms->layout()->setMargin(0); - - QGridLayout* hypLayout = new QGridLayout(GroupAlgorithms->layout()); - hypLayout->setGeometry(QRect(12, 18, 139, 250)); - hypLayout->setAlignment(Qt::AlignTop); - hypLayout->setSpacing(6); - hypLayout->setMargin(11); - - ListAlgoDefinition = new QListView(GroupAlgorithms, "ListAlgoDefinition"); - ListAlgoDefinition->setMinimumSize(400, 200); - ListAlgoDefinition->addColumn(""); - ListAlgoDefinition->header()->hide(); - ListAlgoDefinition->setSelectionMode(QListView::Single); - ListAlgoDefinition->setResizeMode(QListView::AllColumns); - ListAlgoDefinition->setRootIsDecorated(true); - - hypLayout->addWidget(ListAlgoDefinition, 0, 0); - SMESHGUI_CreateHypothesesDlgLayout->addWidget(GroupAlgorithms, 0, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_CREATE" )); - buttonApply->setAutoDefault(TRUE); - buttonApply->setDefault(FALSE); - buttonApply->setEnabled(FALSE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); - buttonCancel->setAutoDefault(TRUE); - buttonCancel->setDefault(TRUE); - buttonCancel->setEnabled(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - - SMESHGUI_CreateHypothesesDlgLayout->addWidget(GroupButtons, 1, 0); - /***************************************************************/ - - Init(); -} - -//================================================================================= -// function : ~SMESHGUI_CreateHypothesesDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_CreateHypothesesDlg::~SMESHGUI_CreateHypothesesDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::Init() -{ - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - InitAlgoDefinition(); - - /* signals and slots connections */ - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply , SIGNAL(clicked()), this, SLOT(ClickOnApply())); - -// connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); - - connect(ListAlgoDefinition, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); - connect(ListAlgoDefinition, SIGNAL(doubleClicked(QListViewItem*)), this, SLOT(onDoubleClicked(QListViewItem*))); - - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::ClickOnCancel() -{ - close(); -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return; - QListViewItem* item = ListAlgoDefinition->selectedItem(); - if (!item) - return; - QString aHypType = item->text(1); - MESSAGE("Apply " << aHypType); - char* sHypType = (char*)aHypType.latin1(); - - HypothesisData* aHypData = SMESH::GetHypothesisData(sHypType); - if (!aHypData) - return; - QString aClientLibName = aHypData->ClientLibName; - MESSAGE("Client lib name = " << aClientLibName); - - if (aClientLibName == "") { - // Call hypothesis creation server method (without GUI) - QString aHypName = aHypData->Label; - SMESH::CreateHypothesis(sHypType, aHypName, myIsAlgo); - } else { - // Get hypotheses creator client (GUI) - SMESHGUI_GenericHypothesisCreator* aCreator = - SMESH::GetHypothesisCreator(sHypType); - - // Create hypothesis/algorithm - aCreator->CreateHypothesis(myIsAlgo, this); - } - -// buttonApply->setEnabled(FALSE); - return; -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::ActivateThisDialog() -{ - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupButtons->setEnabled(true); - return; -} - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::enterEvent (QEvent*) -{ - ActivateThisDialog(); - return; -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::closeEvent (QCloseEvent* e) -{ - mySMESHGUI->ResetState(); - QDialog::closeEvent(e); -} - -//================================================================================= -// function : onSelectionChanged() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::onSelectionChanged() -{ - QListViewItem* item = ListAlgoDefinition->selectedItem(); - buttonApply->setEnabled(item && item->depth() > 0); -} - -//================================================================================= -// function : onDoubleClicked() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::onDoubleClicked (QListViewItem* i) -{ - if (i && i->depth() > 0) - this->ClickOnApply(); -} - -//================================================================================= -// function : InitAlgoDefinition() -// purpose : -//================================================================================= -void SMESHGUI_CreateHypothesesDlg::InitAlgoDefinition() -{ - ListAlgoDefinition->clear(); - QStringList HypList = SMESH::GetAvailableHypotheses(myIsAlgo); - for (int i = 0; i < HypList.count(); ++i) { - HypothesisData* aHypData = SMESH::GetHypothesisData(HypList[i]); - QListViewItem* parentItem = 0; - QListViewItem* childItem = ListAlgoDefinition->firstChild(); - while (childItem) { - if (childItem->text(0) == aHypData->PluginName) { - parentItem = childItem; - break; - } - childItem = childItem->nextSibling(); - } - if (!parentItem) - parentItem = new QListViewItem(ListAlgoDefinition, aHypData->PluginName); - parentItem->setOpen(true); - QListViewItem* aItem = new QListViewItem(parentItem, aHypData->Label, HypList[i]); - QPixmap aPixMap (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr(aHypData->IconId))); - if (!aPixMap.isNull()) - aItem->setPixmap(0, aPixMap); - } -} diff --git a/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.h b/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.h deleted file mode 100644 index e2bb65a67..000000000 --- a/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.h +++ /dev/null @@ -1,94 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_CreateHypothesesDlg.h -// Author : Julia DOROVSKIKH -// Module : SMESH -// $Header$ - -#ifndef DIALOGBOX_CREATE_HYPOTHESES_H -#define DIALOGBOX_CREATE_HYPOTHESES_H - -// QT Includes -#include -#include -#include - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(GEOM_Gen) -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -#include -#include - -class QButtonGroup; -class QGroupBox; -class QPushButton; -class QListView; -class QListViewItem; -class SMESHGUI; - -//================================================================================= -// class : SMESHGUI_CreateHypothesesDlg -// purpose : -//================================================================================= -class SMESHGUI_CreateHypothesesDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_CreateHypothesesDlg (SMESHGUI*, - const char* name = 0, - bool modal = FALSE, - bool isAlgo = FALSE); - ~SMESHGUI_CreateHypothesesDlg (); - -private: - - void Init() ; - void closeEvent( QCloseEvent* e ) ; - void enterEvent ( QEvent * ) ; - - void InitAlgoDefinition(); - - SMESHGUI* mySMESHGUI; - bool myIsAlgo; - - QGroupBox* GroupButtons; - QPushButton* buttonCancel; - QPushButton* buttonApply; - - QGroupBox* GroupAlgorithms; - QListView* ListAlgoDefinition; - -private slots: - - void ClickOnCancel(); - void ClickOnApply(); - void ActivateThisDialog() ; - - void onSelectionChanged(); - void onDoubleClicked(QListViewItem*); -}; - -#endif // DIALOGBOX_CREATE_HYPOTHESES_H diff --git a/src/SMESHGUI/SMESHGUI_CreatePatternDlg.cxx b/src/SMESHGUI/SMESHGUI_CreatePatternDlg.cxx deleted file mode 100755 index 6b1f20e12..000000000 --- a/src/SMESHGUI/SMESHGUI_CreatePatternDlg.cxx +++ /dev/null @@ -1,720 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_CreatePatternDlg.cxx -// Author : Sergey LITONIN -// Module : SMESH - -#include "SMESHGUI_CreatePatternDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_SpinBox.h" -#include "SMESHGUI_PatternWidget.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_PatternUtils.h" -#include "SMESHGUI_GEOMGenUtils.h" - -#include "SMESH_NumberFilter.hxx" - -#include "SUIT_ResourceMgr.h" -#include "SUIT_Desktop.h" -#include "SUIT_FileDlg.h" - -#include "SalomeApp_Study.h" -#include "SalomeApp_DataOwner.h" -#include "SalomeApp_SelectionMgr.h" -#include "SalomeApp_Tools.h" - -#include "SALOMEDS_SObject.hxx" - -#include "SALOME_ListIO.hxx" -#include "SVTK_ViewModel.h" -#include "SVTK_ViewWindow.h" -#include "SVTK_Selector.h" -#include "SVTK_Selection.h" - -// OCCT Includes -#include - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define SPACING 5 -#define MARGIN 10 - -/*! - * Class : SMESHGUI_CreatePatternDlg - * Description : Dialog to specify filters for VTK viewer - */ - -//======================================================================= -// function : SMESHGUI_CreatePatternDlg() -// purpose : Constructor -//======================================================================= -SMESHGUI_CreatePatternDlg::SMESHGUI_CreatePatternDlg( SMESHGUI* theModule, - const int theType, - const char* theName) - : QDialog( SMESH::GetDesktop( theModule ), theName, false, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), - mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) -{ - setCaption(tr("CAPTION")); - - QVBoxLayout* aDlgLay = new QVBoxLayout (this, MARGIN, SPACING); - - QFrame* aMainFrame = createMainFrame (this); - QFrame* aBtnFrame = createButtonFrame(this); - - aDlgLay->addWidget(aMainFrame); - aDlgLay->addWidget(aBtnFrame); - - aDlgLay->setStretchFactor(aMainFrame, 1); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - mySelector = aViewWindow->GetSelector(); - - Init(theType); -} - -//======================================================================= -// function : createMainFrame() -// purpose : Create frame containing dialog's input fields -//======================================================================= -QFrame* SMESHGUI_CreatePatternDlg::createMainFrame (QWidget* theParent) -{ - QPixmap iconSlct (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); - QPixmap icon2d (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_PATTERN_2d"))); - QPixmap icon3d (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_PATTERN_3d"))); - QPixmap iconSample2d (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_PATTERN_SAMPLE_2D"))); - - QGroupBox* aMainGrp = new QGroupBox(1, Qt::Horizontal, theParent); - aMainGrp->setFrameStyle(QFrame::NoFrame); - aMainGrp->setInsideMargin(0); - - // Pattern type group - - myTypeGrp = new QButtonGroup (1, Qt::Vertical, tr("PATTERN_TYPE"), aMainGrp); - mySwitch2d = new QRadioButton (myTypeGrp); - mySwitch3d = new QRadioButton (myTypeGrp); - mySwitch2d->setPixmap(icon2d); - mySwitch3d->setPixmap(icon3d); - myTypeGrp->insert(mySwitch2d, Type_2d); - myTypeGrp->insert(mySwitch3d, Type_3d); - - QGroupBox* aPatternGrp = new QGroupBox(1, Qt::Horizontal, tr("PATTERN"), aMainGrp); - - // Mesh and pattern name group - - QGroupBox* aMeshGrp = new QGroupBox(1, Qt::Vertical, aPatternGrp); - aMeshGrp->setFrameStyle(QFrame::NoFrame); - aMeshGrp->setInsideMargin(0); - - new QLabel(tr("MESH_OR_SUBMESH"), aMeshGrp); - - QPushButton* aSelBtn = new QPushButton(aMeshGrp); - aSelBtn->setPixmap(iconSlct); - myMeshEdit = new QLineEdit(aMeshGrp); - myMeshEdit->setReadOnly(true); - - QGroupBox* aPattGrp = new QGroupBox(1, Qt::Vertical, aPatternGrp); - aPattGrp->setFrameStyle(QFrame::NoFrame); - aPattGrp->setInsideMargin(0); - - new QLabel(tr("PATTERN_NAME"), aPattGrp); - myName = new QLineEdit(aPattGrp); - - // Picture 2d - - myPicture2d = new SMESHGUI_PatternWidget(aPatternGrp), - myPicture2d->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); - - // Project check box - - myProjectChk = new QCheckBox(tr("PROJECT"), aPatternGrp); - - // Connect signals and slots - - connect(myTypeGrp, SIGNAL(clicked(int) ), SLOT(onTypeChanged(int))); - connect(myProjectChk, SIGNAL(toggled(bool)), SLOT(onProject(bool) )); - connect(aSelBtn, SIGNAL(clicked() ), SLOT(onSelBtnClicked())); - - return aMainGrp; -} - -//======================================================================= -// function : createButtonFrame() -// purpose : Create frame containing buttons -//======================================================================= -QFrame* SMESHGUI_CreatePatternDlg::createButtonFrame (QWidget* theParent) -{ - QFrame* aFrame = new QFrame(theParent); - aFrame->setFrameStyle(QFrame::Box | QFrame::Sunken); - - myOkBtn = new QPushButton(tr("SMESH_BUT_OK" ), aFrame); - mySaveBtn = new QPushButton(tr("SAVE" ), aFrame); - myCloseBtn = new QPushButton(tr("SMESH_BUT_CANCEL"), aFrame); - - QSpacerItem* aSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); - - QHBoxLayout* aLay = new QHBoxLayout(aFrame, MARGIN, SPACING); - - aLay->addWidget(myOkBtn); - aLay->addWidget(mySaveBtn); - aLay->addItem(aSpacer); - aLay->addWidget(myCloseBtn); - - connect(myOkBtn, SIGNAL(clicked()), SLOT(onOk())); - connect(myCloseBtn, SIGNAL(clicked()), SLOT(onClose())); - connect(mySaveBtn, SIGNAL(clicked()), SLOT(onSave())); - - return aFrame; -} - -//======================================================================= -// function : ~SMESHGUI_CreatePatternDlg() -// purpose : Destructor -//======================================================================= -SMESHGUI_CreatePatternDlg::~SMESHGUI_CreatePatternDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//======================================================================= -// function : onProject() -// purpose : SLOT. Called when state of "Project nodes on ther face" -// checkbox is changed -//======================================================================= -void SMESHGUI_CreatePatternDlg::onProject (bool) -{ - loadFromObject(false); - displayPreview(); -} - -//======================================================================= -// function : Init() -// purpose : Init dialog fields, connect signals and slots, show dialog -//======================================================================= -void SMESHGUI_CreatePatternDlg::Init( const int theType ) -{ - myIsLoaded = false; - myType = -1; - myNbPoints = -1; - mySubMesh = SMESH::SMESH_subMesh::_nil(); - myMesh = SMESH::SMESH_Mesh::_nil(); - myGeomObj = GEOM::GEOM_Object::_nil(); - myPattern = SMESH::SMESH_Pattern::_nil(); - - erasePreview(); - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - // selection and SMESHGUI - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone())); - connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate())); - connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(onClose())); - - mySwitch2d->setEnabled(theType == Type_2d); - mySwitch3d->setEnabled(theType == Type_3d); - - if (theType == Type_2d) - myProjectChk->show(); - else - myProjectChk->hide(); - - myTypeGrp->setButton(theType); - onTypeChanged(theType); - - myName->setText(getDefaultName()); - myMeshEdit->setText(""); - - setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); - qApp->processEvents(); - updateGeometry(); - myPicture2d->updateGeometry(); - adjustSize(); - resize(minimumSize()); - - activateSelection(); - onSelectionDone(); - - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); -} - -//======================================================================= -// function : SetMesh() -// purpose : Set mesh to dialog -//======================================================================= -void SMESHGUI_CreatePatternDlg::SetMesh (SMESH::SMESH_Mesh_ptr thePtr) -{ - myMesh = SMESH::SMESH_Mesh::_duplicate(thePtr); - mySubMesh = SMESH::SMESH_subMesh::_nil(); - - bool isValidMesh = false; - if (!myMesh->_is_nil()) - { - _PTR(SObject) aSobj = SMESH::FindSObject(myMesh.in()); - //Handle(SALOME_InteractiveObject) anIObj = - // new SALOME_InteractiveObject(aSobj->GetID().c_str(), "SMESH"); - SUIT_DataOwnerPtr anIObj (new SalomeApp_DataOwner(aSobj->GetID().c_str())); - - isValidMesh = mySelectionMgr->isOk(anIObj); - } - - if (isValidMesh) { - _PTR(SObject) aSO = SMESH::FindSObject(myMesh.in()); - myMeshEdit->setText(aSO->GetName().c_str()); - myGeomObj = SMESH::GetGeom(aSO); - } else { - myMeshEdit->setText(""); - myGeomObj = GEOM::GEOM_Object::_nil(); - } - - if (myType == Type_2d) { - loadFromObject(false); - displayPreview(); - } -} - -//======================================================================= -// function : isValid() -// purpose : Verify validity of entry data -//======================================================================= -bool SMESHGUI_CreatePatternDlg::isValid() -{ - if (myGeomObj->_is_nil()) { - QMessageBox::information(SMESH::GetDesktop( mySMESHGUI ), - tr("SMESH_INSUFFICIENT_DATA"), - tr("SMESHGUI_INVALID_PARAMETERS"), - QMessageBox::Ok); - return false; - } - else - return true; -} - -//======================================================================= -// function : getDefaultName() -// purpose : Get default pattern name -//======================================================================= -QString SMESHGUI_CreatePatternDlg::getDefaultName() const -{ - return myType == Type_2d ? tr("DEFAULT_2D") : tr("DEFAULT_3D"); -} - -//======================================================================= -// function : onSave() -// purpose : SLOT called when "Save" button pressed. Build pattern and -// save it to disk -//======================================================================= -void SMESHGUI_CreatePatternDlg::onSave() -{ - try { - if (!isValid()) - return; - - if (!myIsLoaded) - loadFromObject(true); - - // Load pattern from object - if (!myIsLoaded) - return; - - /////////////////////////////////////////////////////// - SUIT_FileDlg* aDlg = new SUIT_FileDlg (this, false); - aDlg->setCaption(tr("SAVE_PATTERN")); - aDlg->setMode(QFileDialog::AnyFile); - aDlg->setFilters(tr("PATTERN_FILT")); - if (myName->text() != "") - aDlg->setSelection(myName->text()); - - if (aDlg->exec() != Accepted) - return; - - QString fName = aDlg->selectedFile(); - if (fName.isEmpty()) - return; - - if (QFileInfo(fName).extension().isEmpty()) - fName = autoExtension(fName); - - fName = QDir::convertSeparators(fName); - - QString aData (myPattern->GetString()); - long aLen = aData.length(); - - QFile aFile (fName); - aFile.open(IO_WriteOnly); - long aWritten = aFile.writeBlock(aData, aLen); - aFile.close(); - - if (aWritten != aLen) { - QMessageBox::information(SMESH::GetDesktop( mySMESHGUI ), tr("SMESH_ERROR"), - tr("ERROR_OF_SAVING"), QMessageBox::Ok); - } else { - //SUIT_Application::getDesktop()->setSelectionModes(ActorSelection); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - disconnect(mySelectionMgr, 0, this, 0); - disconnect(mySMESHGUI, 0, this, 0); - mySMESHGUI->ResetState(); - accept(); - emit NewPattern(); - } - } catch (const SALOME::SALOME_Exception& S_ex) { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - } catch (...) { - } -} - -//======================================================================= -// function : GetPatternName() -// purpose : Get name of pattern -//======================================================================= -QString SMESHGUI_CreatePatternDlg::GetPatternName() const -{ - return myName->text(); -} - -//======================================================================= -// function : GetPattern() -// purpose : Get result pattern -//======================================================================= -SMESH::SMESH_Pattern_ptr SMESHGUI_CreatePatternDlg::GetPattern() -{ - return myPattern.in(); -} - -//======================================================================= -// function : onOk() -// purpose : SLOT called when "Ok" button pressed. -//======================================================================= -void SMESHGUI_CreatePatternDlg::onOk() -{ - try { - if (!isValid()) - return; - - if (!myIsLoaded) - loadFromObject(true); - - // Load pattern from object - if (!myIsLoaded) { - return; - } else { - //SUIT_Application::getDesktop()->setSelectionModes(ActorSelection); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - disconnect(mySelectionMgr, 0, this, 0); - disconnect(mySMESHGUI, 0, this, 0); - mySMESHGUI->ResetState(); - accept(); - emit NewPattern(); - } - } catch (const SALOME::SALOME_Exception& S_ex) { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - } catch (...) { - } -} - -//======================================================================= -// function : onClose() -// purpose : SLOT called when "Close" button pressed. Close dialog -//======================================================================= -void SMESHGUI_CreatePatternDlg::onClose() -{ - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - disconnect(mySelectionMgr, 0, this, 0); - disconnect(mySMESHGUI, 0, this, 0); - mySMESHGUI->ResetState(); - reject(); - emit Close(); -} - -//======================================================================= -// function : loadFromObject() -// purpose : Load pattern from geom object corresponding to the mesh/submesh -//======================================================================= -bool SMESHGUI_CreatePatternDlg::loadFromObject (const bool theMess) -{ - try { - myIsLoaded = false; - - if (myPattern->_is_nil()) - myPattern = SMESH::GetPattern(); - - if (myMesh->_is_nil() && mySubMesh->_is_nil() || myGeomObj->_is_nil()) - return false; - - SMESH::SMESH_Mesh_ptr aMesh = mySubMesh->_is_nil() ? myMesh.in() : mySubMesh->GetFather(); - - myIsLoaded = myType == Type_2d - ? myPattern->LoadFromFace(aMesh, myGeomObj, myProjectChk->isChecked()) - : myPattern->LoadFrom3DBlock(aMesh, myGeomObj); - - if (!myIsLoaded && theMess) { - QString aMess; - SMESH::SMESH_Pattern::ErrorCode aCode = myPattern->GetErrorCode(); - - if (aCode == SMESH::SMESH_Pattern::ERR_LOAD_EMPTY_SUBMESH ) aMess = tr("ERR_LOAD_EMPTY_SUBMESH"); - else if (aCode == SMESH::SMESH_Pattern::ERR_LOADF_NARROW_FACE ) aMess = tr("ERR_LOADF_NARROW_FACE"); - else if (aCode == SMESH::SMESH_Pattern::ERR_LOADF_CLOSED_FACE ) aMess = tr("ERR_LOADF_CLOSED_FACE"); - else if (aCode == SMESH::SMESH_Pattern::ERR_LOADV_BAD_SHAPE ) aMess = tr("ERR_LOADV_BAD_SHAPE"); - else if (aCode == SMESH::SMESH_Pattern::ERR_LOADV_COMPUTE_PARAMS) aMess = tr("ERR_LOADV_COMPUTE_PARAMS"); - else aMess = tr("ERROR_OF_CREATION"); - - QMessageBox::information(SMESH::GetDesktop( mySMESHGUI ), - tr("SMESH_ERROR"), aMess, QMessageBox::Ok); - } - } catch (const SALOME::SALOME_Exception& S_ex) { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - } - - return myIsLoaded; -} - -//======================================================================= -// function : onSelectionDone() -// purpose : SLOT called when selection changed -//======================================================================= -void SMESHGUI_CreatePatternDlg::onSelectionDone() -{ - try { - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList, SVTK_Viewer::Type()); - if (aList.Extent() != 1) - return; - - // Get mesh or sub-mesh from selection - Handle(SALOME_InteractiveObject) anIO = aList.First(); - SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface(anIO); - SMESH::SMESH_subMesh_var aSubMesh = SMESH::IObjectToInterface(anIO); - if (aMesh->_is_nil() && aSubMesh->_is_nil()) - return; - - // Get geom object corresponding to the mesh - _PTR(SObject) aSO; - if (!aMesh->_is_nil()) - aSO = SMESH::FindSObject(aMesh.in()); - else - aSO = SMESH::FindSObject(aSubMesh.in()); - - GEOM::GEOM_Object_var aGeomObj = SMESH::GetGeom(aSO); - if (aGeomObj->_is_nil()) - return; - - myGeomObj = aGeomObj; - - // init class fields - if (!aMesh->_is_nil()) { - myMesh = aMesh; - mySubMesh = SMESH::SMESH_subMesh::_nil(); - } else { - mySubMesh = aSubMesh; - myMesh = SMESH::SMESH_Mesh::_nil(); - } - - QString aName; - SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aName); - myMeshEdit->setText(aName); - - if (myType == Type_2d) { - loadFromObject(true); - displayPreview(); - } - } catch (...) { - myMesh = SMESH::SMESH_Mesh::_nil(); - mySubMesh = SMESH::SMESH_subMesh::_nil(); - myGeomObj = GEOM::GEOM_Object::_nil(); - erasePreview(); - } -} - -//======================================================================= -// function : onDeactivate() -// purpose : SLOT called when dialog must be deativated -//======================================================================= -void SMESHGUI_CreatePatternDlg::onDeactivate() -{ - disconnect(mySelectionMgr, 0, this, 0); - setEnabled(false); -} - -//======================================================================= -// function : enterEvent() -// purpose : Event filter -//======================================================================= -void SMESHGUI_CreatePatternDlg::enterEvent (QEvent*) -{ - mySMESHGUI->EmitSignalDeactivateDialog(); - setEnabled(true); - activateSelection(); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone())); -} - -//================================================================================= -// function : closeEvent() -// purpose : Close dialog box -//================================================================================= -void SMESHGUI_CreatePatternDlg::closeEvent (QCloseEvent*) -{ - onClose(); -} - -//======================================================================= -// function : onSelBtnClicked() -// purpose : SLOT. Called when -> button clicked. -//======================================================================= -void SMESHGUI_CreatePatternDlg::onSelBtnClicked() -{ - onSelectionDone(); -} - -//================================================================ -// function : autoExtension() -// purpose : Append extension to the file name -//================================================================ -QString SMESHGUI_CreatePatternDlg::autoExtension (const QString& theFileName) const -{ - QString anExt = theFileName.section('.', -1); - return anExt != "smp" && anExt != "SMP" ? theFileName + ".smp" : theFileName; -} - -//======================================================================= -// function : displayPreview() -// purpose : Display preview -//======================================================================= -void SMESHGUI_CreatePatternDlg::displayPreview() -{ - // Redisplay preview in dialog - try { - if (!myIsLoaded) { - erasePreview(); - } else { - SMESH::point_array_var pnts = myPattern->GetPoints(); - SMESH::long_array_var keyPoints = myPattern->GetKeyPoints(); - SMESH::array_of_long_array_var elemPoints = myPattern->GetElementPoints(false); - - if (pnts->length() == 0 || - keyPoints->length() == 0 || - elemPoints->length() == 0) { - myIsLoaded = false; - erasePreview(); - return; - } - - PointVector aPoints (pnts->length()); - QValueVector aKeyPoints (keyPoints->length()); - ConnectivityVector anElemPoints (elemPoints->length()); - - for (int i = 0, n = pnts->length(); i < n; i++) - aPoints[ i ] = pnts[ i ]; - - for (int i2 = 0, n2 = keyPoints->length(); i2 < n2; i2++) - aKeyPoints[ i2 ] = keyPoints[ i2 ]; - - for (int i3 = 0, n3 = elemPoints->length(); i3 < n3; i3++) { - QValueVector aVec (elemPoints[ i3 ].length()); - for (int i4 = 0, n4 = elemPoints[ i3 ].length(); i4 < n4; i4++) - aVec[ i4 ] = elemPoints[ i3 ][ i4 ]; - - anElemPoints[ i3 ] = aVec; - } - - myPicture2d->SetPoints(aPoints, aKeyPoints, anElemPoints); - } - - return; - - } catch (const SALOME::SALOME_Exception& S_ex) { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - } catch (...) { - } - erasePreview(); -} - -//======================================================================= -// function : erasePreview() -// purpose : Erase preview -//======================================================================= -void SMESHGUI_CreatePatternDlg::erasePreview() -{ - // Erase preview in 2D viewer - myPicture2d->SetPoints(PointVector(), QValueVector(), ConnectivityVector()); -} - -//======================================================================= -// function : activateSelection() -// purpose : Activate selection in accordance with current pattern type -//======================================================================= -void SMESHGUI_CreatePatternDlg::activateSelection() -{ - mySelectionMgr->clearFilters(); - //SUIT_Application::getDesktop()->setSelectionModes(ActorSelection); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - - if (myType == Type_2d) { - mySelectionMgr->installFilter(new SMESH_NumberFilter - ("SMESH", TopAbs_SHAPE, -1, TopAbs_FACE)); - } else { - TColStd_MapOfInteger aTypes; - aTypes.Add(TopAbs_SHELL); - aTypes.Add(TopAbs_SOLID); - mySelectionMgr->installFilter(new SMESH_NumberFilter - ("SMESH", TopAbs_FACE, 6, aTypes, GEOM::GEOM_Object::_nil(), true)); - } -} - -//======================================================================= -// function : onTypeChanged() -// purpose : SLOT. Called when pattern type changed. -// Change dialog's look and feel -//======================================================================= -void SMESHGUI_CreatePatternDlg::onTypeChanged (int theType) -{ - if (myType == theType) - return; - - myType = theType; - - if (theType == Type_2d) - myPicture2d->show(); - else - myPicture2d->hide(); -} diff --git a/src/SMESHGUI/SMESHGUI_CreatePatternDlg.h b/src/SMESHGUI/SMESHGUI_CreatePatternDlg.h deleted file mode 100755 index 2e2555c55..000000000 --- a/src/SMESHGUI/SMESHGUI_CreatePatternDlg.h +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_CreatePatternDlg.h -// Author : Sergey LITONIN -// Module : SMESH - - -#ifndef SMESHGUI_CreatePatternDlg_H -#define SMESHGUI_CreatePatternDlg_H - -#include - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(GEOM_Gen) -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_Pattern) - -class SMESHGUI_PatternWidget; -class SALOMEDSClient_SObject; - -class QCloseEvent; -class QFrame; -class QLineEdit; -class SMESHGUI_SpinBox; -class QPushButton; -class SalomeApp_SelectionMgr; -class QRadioButton; -class QCheckBox; -class QButtonGroup; -class QLabel; -class SVTK_ViewWindow; -class SVTK_Selector; -class SMESHGUI; - -/*! - * Class : SMESHGUI_CreatePatternDlg - * Description : Dialog to specify filters for VTK viewer - */ - -class SMESHGUI_CreatePatternDlg : public QDialog -{ - Q_OBJECT - -public: - enum { Type_2d, Type_3d }; - -public: - SMESHGUI_CreatePatternDlg( SMESHGUI*, - const int, - const char* = 0); - virtual ~SMESHGUI_CreatePatternDlg(); - - void Init(const int); - QString GetPatternName() const; - SMESH::SMESH_Pattern_ptr GetPattern(); - void SetMesh (SMESH::SMESH_Mesh_ptr); - -signals: - - void NewPattern(); - void Close(); - -private: - - void closeEvent (QCloseEvent* e); - void enterEvent (QEvent*); - -private slots: - - void onOk(); - void onSave(); - void onClose(); - - void onDeactivate(); - - void onSelectionDone(); - void onTypeChanged (int); - void onProject (bool); - void onSelBtnClicked(); - -private: - - QFrame* createButtonFrame (QWidget*); - QFrame* createMainFrame (QWidget*); - void displayPreview(); - void erasePreview(); - void activateSelection(); - QString autoExtension (const QString& theFileName) const; - bool isValid(); - bool loadFromObject (const bool = true); - QString getDefaultName() const; - GEOM::GEOM_Object_ptr getGeom (SALOMEDSClient_SObject*) const; - -private: - - QPushButton* myOkBtn; - QPushButton* mySaveBtn; - QPushButton* myCloseBtn; - - QButtonGroup* myTypeGrp; - QRadioButton* mySwitch2d; - QRadioButton* mySwitch3d; - QRadioButton* mySwitchSMESH_Pattern3d; - - QLineEdit* myMeshEdit; - QLineEdit* myName; - - SMESHGUI_PatternWidget* myPicture2d; - - QCheckBox* myProjectChk; - - SMESHGUI* mySMESHGUI; - SVTK_Selector* mySelector; - SalomeApp_SelectionMgr* mySelectionMgr; - int myNbPoints; - int myType; - - SMESH::SMESH_Mesh_var myMesh; - SMESH::SMESH_subMesh_var mySubMesh; - GEOM::GEOM_Object_var myGeomObj; - - SMESH::SMESH_Pattern_var myPattern; - bool myIsLoaded; -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx b/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx deleted file mode 100644 index a58fd065e..000000000 --- a/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx +++ /dev/null @@ -1,999 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_CreatePolyhedralVolumeDlg.cxx -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#include "SMESHGUI_CreatePolyhedralVolumeDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_MeshUtils.h" -#include "SMESHGUI_IdValidator.h" -#include "SMESH_ActorUtils.h" -#include "SMESHGUI_SpinBox.h" -#include "SMESH_Actor.h" -#include "SMESH_TypeFilter.hxx" -#include "SMDS_Mesh.hxx" - -#include "VTKViewer_ViewWindow.h" - -#include "SUIT_ResourceMgr.h" - -#include "SalomeApp_Application.h" -#include "SalomeApp_Study.h" -#include "SUIT_Desktop.h" -#include "SUIT_MessageBox.h" -#include "SalomeApp_SelectionMgr.h" -#include "utilities.h" - -#include "SVTK_ViewWindow.h" -#include "SVTK_Selector.h" - -#include -#include -#include - -#include -#include -#include -#include -#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) - -using namespace std; - -namespace SMESH{ - -class TPolySimulation{ - SVTK_ViewWindow* myViewWindow; - - SALOME_Actor *myPreviewActor; - vtkDataSetMapper* myMapper; - vtkUnstructuredGrid* myGrid; - - public: - - TPolySimulation(SalomeApp_Application* app) - { - SUIT_ViewManager* mgr = app->activeViewManager(); - myViewWindow = mgr ? dynamic_cast( mgr->getActiveView() ) : NULL; - - myGrid = vtkUnstructuredGrid::New(); - - // Create and display actor - myMapper = vtkDataSetMapper::New(); - myMapper->SetInput( myGrid ); - - myPreviewActor = SALOME_Actor::New(); - myPreviewActor->PickableOff(); - myPreviewActor->VisibilityOff(); - myPreviewActor->SetMapper( myMapper ); - - float anRGB[3]; - vtkProperty* aProp = vtkProperty::New(); - GetColor( "SMESH", "fill_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) ); - aProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); - myPreviewActor->SetProperty( aProp ); - aProp->Delete(); - - vtkProperty* aBackProp = vtkProperty::New(); - GetColor( "SMESH", "backface_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 0, 255 ) ); - aBackProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); - myPreviewActor->SetBackfaceProperty( aBackProp ); - aBackProp->Delete(); - - myViewWindow->AddActor( myPreviewActor ); - - } - - - typedef std::vector TVTKIds; - void SetPosition(SMESH_Actor* theActor, - vtkIdType theType, - const TVTKIds& theIds, - bool theReset=true) - { - vtkUnstructuredGrid *aGrid = theActor->GetUnstructuredGrid(); - myGrid->SetPoints(aGrid->GetPoints()); - - if (theReset) ResetGrid(theReset); - - vtkIdList *anIds = vtkIdList::New(); - - for (int i = 0, iEnd = theIds.size(); i < iEnd; i++) - anIds->InsertId(i,theIds[i]); - - myGrid->InsertNextCell(theType,anIds); - if(theIds.size()!=0){ - myGrid->InsertNextCell(theType,anIds); - myGrid->Modified(); - } - - anIds->Delete(); - - SetVisibility(true); - - } - - void ResetGrid(bool theReset=true){ - if (theReset) myGrid->Reset(); - } - - void SetVisibility(bool theVisibility){ - myPreviewActor->SetVisibility(theVisibility); - RepaintCurrentView(); - } - - - ~TPolySimulation(){ - if( myViewWindow ) - myViewWindow->RemoveActor(myPreviewActor); - - myPreviewActor->Delete(); - - myMapper->RemoveAllInputs(); - myMapper->Delete(); - - myGrid->Delete(); - } - - }; -} - -//================================================================================= -// class : SMESHGUI_CreatePolyhedralVolumeDlgDlg() -// purpose : -//================================================================================= -SMESHGUI_CreatePolyhedralVolumeDlg::SMESHGUI_CreatePolyhedralVolumeDlg( 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 ) ) -{ - QPixmap image0( SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap( "SMESH",tr("ICON_SELECT"))); - - if ( !name ) - setName( "SMESHGUI_CreatePolyhedralVolumeDlg" ); - resize( 300, 185 ); - setCaption( tr( "SMESH_CREATE_POLYHEDRAL_VOLUME_TITLE" ) ); - setSizeGripEnabled( TRUE ); - SMESHGUI_CreatePolyhedralVolumeDlgLayout = new QGridLayout( this ); - SMESHGUI_CreatePolyhedralVolumeDlgLayout->setSpacing( 6 ); - SMESHGUI_CreatePolyhedralVolumeDlgLayout->setMargin( 11 ); - - /***************************************************************/ - GroupConstructors = new QButtonGroup( this, "GroupConstructors" ); - GroupConstructors->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, GroupConstructors->sizePolicy().hasHeightForWidth() ) ); - GroupConstructors->setTitle( tr( "SMESH_ELEMENTS_TYPE" ) ); - GroupConstructors->setExclusive( TRUE ); - GroupConstructors->setColumnLayout(0, Qt::Vertical ); - GroupConstructors->layout()->setSpacing( 0 ); - GroupConstructors->layout()->setMargin( 0 ); - GroupConstructorsLayout = new QGridLayout( GroupConstructors->layout() ); - GroupConstructorsLayout->setAlignment( Qt::AlignTop ); - GroupConstructorsLayout->setSpacing( 6 ); - GroupConstructorsLayout->setMargin( 11 ); - RadioButton1= new QRadioButton( GroupConstructors, "RadioButton1" ); - RadioButton1->setText( tr( "MESH_NODE" ) ); - GroupConstructorsLayout->addWidget( RadioButton1, 0, 0 ); - RadioButton2= new QRadioButton( GroupConstructors, "RadioButton2" ); - RadioButton2->setText( tr( "SMESH_FACE" ) ); - GroupConstructorsLayout->addWidget( RadioButton2, 0, 2 ); - SMESHGUI_CreatePolyhedralVolumeDlgLayout->addWidget( GroupConstructors, 0, 0 ); - - /***************************************************************/ - GroupButtons = new QGroupBox( this, "GroupButtons" ); - GroupButtons->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, GroupButtons->sizePolicy().hasHeightForWidth() ) ); - GroupButtons->setGeometry( QRect( 10, 10, 281, 48 ) ); - GroupButtons->setTitle( tr( "" ) ); - GroupButtons->setColumnLayout(0, Qt::Vertical ); - GroupButtons->layout()->setSpacing( 0 ); - GroupButtons->layout()->setMargin( 0 ); - GroupButtonsLayout = new QGridLayout( GroupButtons->layout() ); - GroupButtonsLayout->setAlignment( Qt::AlignTop ); - GroupButtonsLayout->setSpacing( 6 ); - GroupButtonsLayout->setMargin( 11 ); - buttonCancel = new QPushButton( GroupButtons, "cancel" ); - buttonCancel->setText( tr( "SMESH_BUT_CLOSE" ) ); - buttonCancel->setAutoDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonCancel, 0, 3 ); - buttonApply = new QPushButton( GroupButtons, "apply" ); - buttonApply->setText( tr( "SMESH_BUT_APPLY" ) ); - buttonApply->setAutoDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonApply, 0, 1 ); - QSpacerItem* spacer_9 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); - GroupButtonsLayout->addItem( spacer_9, 0, 2 ); - buttonOk = new QPushButton( GroupButtons, "ok" ); - buttonOk->setText( tr( "SMESH_BUT_OK" ) ); - buttonOk->setAutoDefault( TRUE ); - buttonOk->setDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonOk, 0, 0 ); - SMESHGUI_CreatePolyhedralVolumeDlgLayout->addWidget( GroupButtons, 2, 0 ); - - /***************************************************************/ - GroupContent = new QGroupBox( this, "GroupContent" ); - GroupContent->setTitle( tr( "SMESH_CONTENT" ) ); - GroupContent->setColumnLayout(0, Qt::Vertical ); - GroupContent->layout()->setSpacing( 0 ); - GroupContent->layout()->setMargin( 0 ); - GroupContentLayout = new QGridLayout( GroupContent->layout() ); - GroupContentLayout->setAlignment( Qt::AlignTop ); - GroupContentLayout->setSpacing( 6 ); - GroupContentLayout->setMargin( 11 ); - - QFrame* anIds = new QFrame(GroupContent, "anIds"); - QGridLayout* aLayout = new QGridLayout(anIds, 1, 3); - aLayout->setSpacing(6); - aLayout->setAutoAdd(false); - - TextLabelIds = new QLabel( anIds, "TextLabelIds" ); - TextLabelIds->setText( tr( "SMESH_ID_NODES" ) ); - TextLabelIds->setFixedWidth(74); - aLayout->addWidget( TextLabelIds, 0, 0 ); - - SelectElementsButton = new QPushButton( anIds, "SelectElementsButton" ); - SelectElementsButton->setText( tr( "" ) ); - SelectElementsButton->setPixmap( image0 ); - SelectElementsButton->setToggleButton( FALSE ); - aLayout->addWidget( SelectElementsButton, 0, 1 ); - - LineEditElements = new QLineEdit( anIds, "LineEditElements" ); - LineEditElements->setValidator( new SMESHGUI_IdValidator( this, "validator" )); - aLayout->addWidget( LineEditElements, 0, 2 ); - - GroupContentLayout->addMultiCellWidget(anIds, 0, 0, 0, 1); - - myFacesByNodesLabel = new QLabel(GroupContent, "faces by nodes label"); - myFacesByNodesLabel->setText(tr("FACES_BY_NODES")); - GroupContentLayout->addWidget( myFacesByNodesLabel, 1, 0 ); - - myFacesByNodes = new QListBox(GroupContent, "faces by nodes list"); - myFacesByNodes->setSelectionMode(QListBox::Extended); - myFacesByNodes->setMinimumHeight(150); - GroupContentLayout->addMultiCellWidget( myFacesByNodes, 2, 4, 0, 0 ); - - AddButton = new QPushButton(GroupContent, "add"); - AddButton->setText(tr("SMESH_BUT_ADD")); - AddButton->setMaximumWidth(85); - GroupContentLayout->addWidget( AddButton, 2, 1 ); - - RemoveButton = new QPushButton(GroupContent, "remove"); - RemoveButton->setText(tr("SMESH_BUT_REMOVE")); - RemoveButton->setMaximumWidth(85); - GroupContentLayout->addWidget( RemoveButton, 3, 1 ); - - Preview = new QCheckBox( GroupContent, "Preview" ); - Preview->setText( tr( "SMESH_POLYEDRE_PREVIEW" ) ); - GroupContentLayout->addWidget( Preview , 5, 0 ); - - mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); - - SMESHGUI_CreatePolyhedralVolumeDlgLayout->addWidget( GroupContent, 1, 0 ); - - GroupContent->show(); - RadioButton1->setChecked( TRUE ); - - mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ; - - Init(); -} - -//================================================================================= -// function : ~SMESHGUI_CreatePolyhedralVolumeDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_CreatePolyhedralVolumeDlg::~SMESHGUI_CreatePolyhedralVolumeDlg() -{ - // no need to delete child widgets, Qt does it all for us - delete mySimulation; -} - -static bool busy = false; -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::Init() -{ - myEditCurrentArgument = LineEditElements; - mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ; - - myNbOkElements = 0; - myActor = 0; - - mySimulation = new SMESH::TPolySimulation( dynamic_cast( mySMESHGUI->application() ) ); - - /* signals and slots connections */ - connect(buttonOk, SIGNAL( clicked() ), SLOT( ClickOnOk() ) ); - connect(buttonCancel, SIGNAL( clicked() ), SLOT( ClickOnCancel() ) ) ; - connect(buttonApply, SIGNAL( clicked() ), SLOT(ClickOnApply() ) ); - - connect( GroupConstructors, SIGNAL(clicked(int) ), SLOT( ConstructorsClicked(int) ) ); - connect(SelectElementsButton, SIGNAL( clicked() ), SLOT( SetEditCurrentArgument() ) ) ; - connect(LineEditElements, SIGNAL( textChanged(const QString&) ), SLOT(onTextChange(const QString&))); - - connect(myFacesByNodes, SIGNAL(selectionChanged()), this, SLOT(onListSelectionChanged())); - connect(AddButton, SIGNAL(clicked()), this, SLOT(onAdd())); - connect(RemoveButton, SIGNAL(clicked()), this, SLOT(onRemove())); - - connect( mySMESHGUI, SIGNAL ( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) ) ; - connect( mySelectionMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); - connect( Preview, SIGNAL(toggled(bool)), this, SLOT(ClickOnPreview(bool))); - /* to close dialog if study change */ - connect( mySMESHGUI, SIGNAL ( SignalCloseAllDialogs() ), this, SLOT( ClickOnCancel() ) ) ; - - /* Move widget on the botton right corner of main widget */ - int x, y ; - mySMESHGUI->DefineDlgPosition( this, x, y ) ; - this->move( x, y ) ; - this->show() ; /* displays Dialog */ - - ConstructorsClicked(0); - SelectionIntoArgument(); -} - - -//================================================================================= -// function : ConstructorsClicked() -// purpose : Radio button management -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::ConstructorsClicked(int constructorId) -{ - //disconnect(mySelectionMgr, 0, this, 0); - - SALOME_ListIO aList; - mySelectionMgr->setSelectedObjects( aList ); - myEditCurrentArgument->clear(); - myNbOkElements = 0; - buttonApply->setEnabled(false); - buttonOk->setEnabled(false); - mySimulation->SetVisibility(false); - - switch(constructorId) - { - case 0 : - { - if ( myActor ){ - myActor->SetPointRepresentation(true); - myActor->SetEntityMode(SMESH_Actor::eVolumes); - myActor->SetRepresentation(SMESH_Actor::eSurface); - } - else - SMESH::SetPointRepresentation(true); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - - AddButton->setEnabled(false); - RemoveButton->setEnabled(false); - TextLabelIds->setText( tr( "SMESH_ID_NODES" ) ); - myFacesByNodesLabel->show(); - myFacesByNodes->clear(); - myFacesByNodes->show(); - AddButton->show(); - RemoveButton->show(); - Preview->show(); - break; - } - case 1 : - { - if( myActor ){ - myActor->SetPointRepresentation(false); - myActor->SetEntityMode(SMESH_Actor::eFaces); - myActor->SetEntityMode(SMESH_Actor::eVolumes); - myActor->SetRepresentation(SMESH_Actor::eSurface); - } else { - SMESH::SetPointRepresentation(false); - } - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(FaceSelection); - - TextLabelIds->setText( tr( "SMESH_ID_FACES" ) ); - myFacesByNodesLabel->hide(); - myFacesByNodes->hide(); - AddButton->hide(); - RemoveButton->hide(); - Preview->show(); - break; - } - } - - //connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); -} - -//================================================================================= -// function : ClickOnPreview() -// purpose : -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnPreview(bool theToggled){ - Preview->setChecked(theToggled); - displaySimulation(); -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnApply() -{ - if ( myNbOkElements>0 && !mySMESHGUI->isActiveStudyLocked()) - { - busy = true; - if (GetConstructorId() == 0) - { - SMESH::long_array_var anIdsOfNodes = new SMESH::long_array; - SMESH::long_array_var aQuantities = new SMESH::long_array; - - aQuantities->length( myFacesByNodes->count() ); - - TColStd_ListOfInteger aNodesIds; - - QListBoxItem* anItem; - int aNbQuantities = 0; - for (anItem = myFacesByNodes->firstItem(); anItem != 0; anItem = anItem->next()) { - QStringList anIds = QStringList::split(" ", anItem->text()); - int aNbNodesInFace = 0; - for (QStringList::iterator it = anIds.begin(); it != anIds.end(); ++it, ++aNbNodesInFace) - aNodesIds.Append( (*it).toInt() ); - - aQuantities[aNbQuantities++] = aNbNodesInFace; - } - - anIdsOfNodes->length(aNodesIds.Extent()); - - int aNbIdsOfNodes = 0; - TColStd_ListIteratorOfListOfInteger It; - It.Initialize(aNodesIds); - for(;It.More();It.Next()) - anIdsOfNodes[aNbIdsOfNodes++] = It.Value(); - - try{ - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - QApplication::setOverrideCursor(Qt::waitCursor); - aMeshEditor->AddPolyhedralVolume(anIdsOfNodes, aQuantities); - QApplication::restoreOverrideCursor(); - }catch(SALOME::SALOME_Exception& exc){ - INFOS("Follow exception was cought:\n\t"<text() ); - anIdsOfFaces->length(aListId.count()); - for ( int i = 0; i < aListId.count(); i++ ) - anIdsOfFaces[i] = aListId[i].toInt(); - - try{ - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - QApplication::setOverrideCursor(Qt::waitCursor); - aMeshEditor->AddPolyhedralVolumeByFaces(anIdsOfFaces); - QApplication::restoreOverrideCursor(); - }catch(SALOME::SALOME_Exception& exc){ - INFOS("Follow exception was cought:\n\t"<setSelectedObjects( aList ); - mySimulation->SetVisibility(false); - SMESH::UpdateView(); - ConstructorsClicked( GetConstructorId() ); - busy = false; - } -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnOk() -{ - ClickOnApply() ; - ClickOnCancel() ; -} - - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnCancel() -{ - mySelectionMgr->clearFilters(); - SALOME_ListIO aList; - mySelectionMgr->setSelectedObjects( aList ); - SMESH::SetPointRepresentation(false); - mySimulation->SetVisibility(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( ActorSelection ); - disconnect( mySelectionMgr, 0, this, 0 ); - mySMESHGUI->ResetState() ; - reject() ; -} - -//======================================================================= -//function : onTextChange -//purpose : -//======================================================================= - -void SMESHGUI_CreatePolyhedralVolumeDlg::onTextChange(const QString& theNewText) -{ - if ( busy ) return; - busy = true; - - mySimulation->SetVisibility(false); - - SMDS_Mesh* aMesh = 0; - if ( myActor ) - aMesh = myActor->GetObject()->GetMesh(); - - if (GetConstructorId() == 0) - { - if ( aMesh ) { - TColStd_MapOfInteger newIndices; - - QStringList aListId = QStringList::split( " ", theNewText, false); - for ( int i = 0; i < aListId.count(); i++ ) { - const SMDS_MeshNode * n = aMesh->FindNode( aListId[ i ].toInt() ); - if ( n ) { - newIndices.Add(n->GetID()); - myNbOkElements++; - } - } - - mySelector->AddOrRemoveIndex( myActor->getIO(), newIndices, false ); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( myActor->getIO(), true, true ); - - if ( myNbOkElements>0 && aListId.count()>=3) - AddButton->setEnabled(true); - else - AddButton->setEnabled(false); - - displaySimulation(); - } - } else if (GetConstructorId() == 1) - { - myNbOkElements = 0; - buttonOk->setEnabled( false ); - buttonApply->setEnabled( false ); - - // check entered ids of faces and hilight them - QStringList aListId; - if ( aMesh ) { - TColStd_MapOfInteger newIndices; - - aListId = QStringList::split( " ", theNewText, false); - - for ( int i = 0; i < aListId.count(); i++ ) { - const SMDS_MeshElement * e = aMesh->FindElement( aListId[ i ].toInt() ); - if ( e ) { - newIndices.Add(e->GetID()); - myNbOkElements++; - } - } - - mySelector->AddOrRemoveIndex( myActor->getIO(), newIndices, false ); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( myActor->getIO(), true, true ); - - if ( myNbOkElements ) { - if (aListId.count()>1){ - buttonOk->setEnabled( true ); - buttonApply->setEnabled( true ); - } - else{ - buttonOk->setEnabled( false ); - buttonApply->setEnabled( false ); - } - displaySimulation(); - } - } - } - busy = false; -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::SelectionIntoArgument() -{ - if ( busy ) return; - - // clear - - if (GetConstructorId() == 1 || myFacesByNodes->count() <= 1) - { - myNbOkElements = 0; - AddButton->setEnabled(false); - buttonOk->setEnabled( false ); - buttonApply->setEnabled( false ); - } - - myActor = 0; - - busy = true; - myEditCurrentArgument->setText( "" ); - busy = false; - if ( !GroupButtons->isEnabled() ) // inactive - return; - - mySimulation->SetVisibility(false); - - // get selected mesh - - SALOME_ListIO selected; - mySelectionMgr->selectedObjects( selected ); - int nbSel = selected.Extent(); - if(nbSel != 1){ - return; - } - - myMesh = SMESH::GetMeshByIO( selected.First() ); - if ( myMesh->_is_nil() ) - return; - - myActor = SMESH::FindActorByObject(myMesh); - if ( !myActor ) - return; - - // get selected nodes/faces - QString aString = ""; - switch(GetConstructorId()){ - case 0:{ - int anbNodes = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString); - if (anbNodes >= 3) - AddButton->setEnabled(true); - else if (anbNodes < 3){ - AddButton->setEnabled(false); - } - busy = true; - myEditCurrentArgument->setText( aString ); - busy = false; - break; - } - case 1:{ - // get selected faces - int aNbFaces = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aString); - if (aNbFaces<=1){ - buttonOk->setEnabled( false ); - buttonApply->setEnabled( false ); - } else { - buttonOk->setEnabled( true ); - buttonApply->setEnabled( true ); - } - busy = true; - myEditCurrentArgument->setText( aString ); - busy = false; - - // OK - myNbOkElements = 1; - break; - } - default: return; - } - - displaySimulation(); -} - -//======================================================================= -//function : displaySimulation -//purpose : -//======================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::displaySimulation() -{ - if ( (myNbOkElements || AddButton->isEnabled()) && GroupButtons->isEnabled() && myActor) - { - SMESH::TPolySimulation::TVTKIds aVTKIds; - vtkIdType aType = VTK_CONVEX_POINT_SET ; - if (GetConstructorId() == 0){ - if(!Preview->isChecked()) myActor->SetEntityMode(SMESH_Actor::eFaces); - else myActor->SetEntityMode(SMESH_Actor::eVolumes); - if (!AddButton->isEnabled()){ - QListBoxItem* anItem; - mySimulation->ResetGrid(true); - for (anItem = myFacesByNodes->firstItem(); anItem != 0; anItem = anItem->next()) { - QStringList anIds = QStringList::split(" ", anItem->text()); - SMESH::TPolySimulation::TVTKIds aVTKIds_faces; - for (QStringList::iterator it = anIds.begin(); it != anIds.end(); ++it){ - vtkIdType aId = myActor->GetObject()->GetNodeVTKId( (*it).toInt() ) ; - aVTKIds.push_back(aId); - aVTKIds_faces.push_back(aId); - } - if(!Preview->isChecked()){ - aType = VTK_POLYGON; - mySimulation->SetPosition(myActor, aType, aVTKIds_faces,false); - } - } - if(myFacesByNodes->count() == 0){ - mySimulation->SetVisibility(false); - } else { - mySimulation->SetVisibility(true); - } - if(Preview->isChecked()){ - mySimulation->SetPosition(myActor, aType, aVTKIds); - } - } else { - // add ids from edit line - QStringList anEditIds = QStringList::split( " ", myEditCurrentArgument->text(), false); - myActor->SetEntityMode(SMESH_Actor::eFaces); - for ( int i = 0; i < anEditIds.count(); i++ ) - aVTKIds.push_back( myActor->GetObject()->GetNodeVTKId( anEditIds[ i ].toInt() )); - aType = VTK_POLYGON; - mySimulation->SetPosition(myActor, aType, aVTKIds); - } - }else if(GetConstructorId() == 1){ - SMDS_Mesh* aMesh = 0; - if ( myActor ){ - aMesh = myActor->GetObject()->GetMesh(); - if (Preview->isChecked()) - myActor->SetEntityMode(SMESH_Actor::eVolumes); - else - myActor->SetEntityMode(SMESH_Actor::eFaces); - } - if ( aMesh ) { - QStringList aListId = QStringList::split( " ", myEditCurrentArgument->text(), false); - for ( int i = 0; i < aListId.count(); i++ ) - { - const SMDS_MeshElement * anElem = aMesh->FindElement( aListId[ i ].toInt() ); - if ( !anElem ) - return; - - SMDS_ElemIteratorPtr anIter = anElem->nodesIterator(); - SMESH::TPolySimulation::TVTKIds aVTKIds_faces; - while( anIter->more() ) - if ( const SMDS_MeshNode* aNode = (SMDS_MeshNode*)anIter->next() ){ - vtkIdType aId = myActor->GetObject()->GetNodeVTKId( aNode->GetID() ) ; - aVTKIds.push_back(aId); - aVTKIds_faces.push_back(aId); - } - if(!Preview->isChecked()){ - aType = VTK_POLYGON; - mySimulation->SetPosition(myActor, aType, aVTKIds_faces); - } - } - if(Preview->isChecked()) - mySimulation->SetPosition(myActor, aType, aVTKIds); - } - } - SMESH::UpdateView(); - } -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::SetEditCurrentArgument() -{ - QPushButton* send = (QPushButton*)sender(); - if(send == SelectElementsButton) { - LineEditElements->setFocus() ; - myEditCurrentArgument = LineEditElements; - } - SelectionIntoArgument(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::DeactivateActiveDialog() -{ - if ( GroupConstructors->isEnabled() ) { - GroupConstructors->setEnabled(false) ; - GroupContent->setEnabled(false) ; - GroupButtons->setEnabled(false) ; - mySimulation->SetVisibility(false); - mySMESHGUI->ResetState() ; - mySMESHGUI->SetActiveDialogBox(0) ; - } -} - - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::ActivateThisDialog() -{ - /* Emit a signal to deactivate the active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog() ; - GroupConstructors->setEnabled(true) ; - GroupContent->setEnabled(true) ; - GroupButtons->setEnabled(true) ; - - mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ; - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( FaceSelection ); - SelectionIntoArgument(); -} - - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::enterEvent(QEvent* e) -{ - if ( GroupConstructors->isEnabled() ) - return ; - ActivateThisDialog() ; -} - - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::closeEvent( QCloseEvent* e ) -{ - /* same than click on cancel button */ - this->ClickOnCancel() ; -} - - -//======================================================================= -//function : hideEvent -//purpose : caused by ESC key -//======================================================================= - -void SMESHGUI_CreatePolyhedralVolumeDlg::hideEvent ( QHideEvent * e ) -{ - if ( !isMinimized() ) - ClickOnCancel(); -} - - -//================================================================================= -// function : GetConstructorId() -// purpose : -//================================================================================= -int SMESHGUI_CreatePolyhedralVolumeDlg::GetConstructorId() -{ - if ( GroupConstructors != NULL && GroupConstructors->selected() != NULL ) - return GroupConstructors->id( GroupConstructors->selected() ); - return -1; -} - -//================================================================================= -// function : onAdd() -// purpose : -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::onAdd() -{ - SALOME_ListIO selected; - mySelectionMgr->selectedObjects( selected ); - int aNbSel = selected.Extent(); - if (aNbSel == 0 || !myActor || myMesh->_is_nil()) return; - - busy = true; - - if ( !(myEditCurrentArgument->text().isEmpty()) ) - { - myFacesByNodes->insertItem(myEditCurrentArgument->text()); - //myFacesByNodes->setSelected(myFacesByNodes->count() - 1, true); - myNbOkElements = 1; - myEditCurrentArgument->clear(); - AddButton->setEnabled(false); - buttonOk->setEnabled( true ); - if(myFacesByNodes->count()>1) buttonApply->setEnabled( true ); - } - busy = false; - onListSelectionChanged(); - displaySimulation(); -} - -//================================================================================= -// function : onRemove() -// purpose : -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::onRemove() -{ - busy = true; - for (int i = myFacesByNodes->count(); i > 0; i--) { - if (myFacesByNodes->isSelected(i-1)) { - myFacesByNodes->removeItem(i-1); - myNbOkElements = 1; - } - } - if (myFacesByNodes->count() < 1){ - RemoveButton->setEnabled(false); - buttonOk->setEnabled( false ); - buttonApply->setEnabled( false ); - } - else if (myFacesByNodes->count() == 1){ - buttonOk->setEnabled( false ); - buttonApply->setEnabled( false ); - } - busy = false; - displaySimulation(); -} - -//================================================================================= -// function : onListSelectionChanged() -// purpose : Called when selection in element list is changed -//================================================================================= -void SMESHGUI_CreatePolyhedralVolumeDlg::onListSelectionChanged() -{ - if (busy || !myActor) return; - busy = true; - bool isSelected=false; - SALOME_ListIO aList; - mySelectionMgr->setSelectedObjects( aList ); - TColStd_MapOfInteger aIndexes; - QListBoxItem* anItem; - for (anItem = myFacesByNodes->firstItem(); anItem != 0; anItem = anItem->next()) { - if (anItem->isSelected()) { - isSelected = true; - QStringList anIds = QStringList::split(" ", anItem->text()); - for (QStringList::iterator it = anIds.begin(); it != anIds.end(); ++it) - aIndexes.Add((*it).toInt()); - } - } - if(isSelected) RemoveButton->setEnabled(true); - else RemoveButton->setEnabled(false); - mySelector->AddOrRemoveIndex(myActor->getIO(), aIndexes, true ); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( myActor->getIO(), true, true ); - mySelectionMgr->clearFilters(); - aList.Append( myActor->getIO() ); - mySelectionMgr->setSelectedObjects( aList ); - - busy = false; -} diff --git a/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.h b/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.h deleted file mode 100644 index 8ba99e3ba..000000000 --- a/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.h +++ /dev/null @@ -1,134 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_CreatePolyhedralVolumeDlg.h -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#ifndef DIALOGBOX_CREATEPOLYHEDRAL_H -#define DIALOGBOX_CREATEPOLYHEDRAL_H - -// QT Includes -#include - -class QGridLayout; -class QButtonGroup; -class QGroupBox; -class QListBox; -class QLabel; -class QLineEdit; -class QPushButton; -class QRadioButton; -class QCheckBox; -class SMESHGUI; -class SMESH_Actor; -class SVTK_Selector; -class SVTK_ViewWindow; -class SalomeApp_SelectionMgr; - -namespace SMESH{ - struct TPolySimulation; -} - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -//================================================================================= -// class : SMESHGUI_CreatePolyhedralVolumeDlg -// purpose : -//================================================================================= -class SMESHGUI_CreatePolyhedralVolumeDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_CreatePolyhedralVolumeDlg( SMESHGUI*, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ); - ~SMESHGUI_CreatePolyhedralVolumeDlg(); - -private: - - void Init() ; - void closeEvent( QCloseEvent* e ) ; - void enterEvent ( QEvent * ) ; /* mouse enter the QWidget */ - void hideEvent ( QHideEvent * ); /* ESC key */ - int GetConstructorId(); - void displaySimulation(); - - SMESHGUI* mySMESHGUI ; /* Current SMESHGUI object */ - SalomeApp_SelectionMgr* mySelectionMgr ; /* User shape selection */ - SVTK_Selector* mySelector; - QString myIDs; - int myNbOkElements ; /* to check when elements are defined */ - - QLineEdit* myEditCurrentArgument; - - SMESH::SMESH_Mesh_var myMesh; - SMESH_Actor* myActor; - SMESH::TPolySimulation* mySimulation; - - QButtonGroup* GroupConstructors; - QRadioButton* RadioButton1; - QRadioButton* RadioButton2; - QCheckBox* Preview; - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - QGroupBox* GroupContent; - QLabel* TextLabelIds; - QPushButton* SelectElementsButton; - QLineEdit* LineEditElements; - QListBox* myFacesByNodes; - QLabel* myFacesByNodesLabel; - QPushButton* AddButton; - QPushButton* RemoveButton; - - public slots: - - void onAdd(); - void onRemove(); - - private slots: - - void ConstructorsClicked(int constructorId); - void ClickOnPreview(bool theToggled); - void ClickOnOk(); - void ClickOnCancel(); - void ClickOnApply(); - void SetEditCurrentArgument() ; - void SelectionIntoArgument() ; - void DeactivateActiveDialog() ; - void ActivateThisDialog() ; - void onTextChange(const QString&); - void onListSelectionChanged(); - -protected: - QGridLayout* SMESHGUI_CreatePolyhedralVolumeDlgLayout; - QGridLayout* GroupConstructorsLayout; - QGridLayout* GroupButtonsLayout; - QGridLayout* GroupContentLayout; -}; - -#endif // DIALOGBOX_CREATEPOLYHEDRAL_H diff --git a/src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx b/src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx deleted file mode 100644 index cd6afe1c1..000000000 --- a/src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx +++ /dev/null @@ -1,305 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_DeleteGroupDlg.cxx -// Author : Sergey LITONIN -// Module : SMESH - -#include "SMESHGUI_DeleteGroupDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" - -#include "SMESH_TypeFilter.hxx" - -#include "SUIT_Desktop.h" - -#include "SalomeApp_Study.h" -#include "SalomeApp_SelectionMgr.h" - -#include "SALOME_ListIO.hxx" -#include "SALOME_ListIteratorOfListIO.hxx" - -#include "SVTK_Selection.h" -#include "SVTK_ViewWindow.h" - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include - -// IDL Headers -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -#define SPACING 5 -#define MARGIN 10 - -/*! - * Class : SMESHGUI_DeleteGroupDlg - * Description : Delete groups and their contents - */ - -//================================================================================= -// function : SMESHGUI_DeleteGroupDlg() -// purpose : Constructor -//================================================================================= -SMESHGUI_DeleteGroupDlg::SMESHGUI_DeleteGroupDlg (SMESHGUI* theModule): - QDialog(SMESH::GetDesktop(theModule), - "SMESHGUI_DeleteGroupDlg", - false, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), - mySelectionMgr(SMESH::GetSelectionMgr(theModule)), - mySMESHGUI(theModule) -{ - setCaption(tr("CAPTION")); - - QVBoxLayout* aDlgLay = new QVBoxLayout(this, MARGIN, SPACING); - - QFrame* aMainFrame = createMainFrame (this); - QFrame* aBtnFrame = createButtonFrame(this); - - aDlgLay->addWidget(aMainFrame); - aDlgLay->addWidget(aBtnFrame); - - aDlgLay->setStretchFactor(aMainFrame, 1); - - Init(); -} - -//================================================================================= -// function : createMainFrame() -// purpose : Create frame containing dialog's input fields -//================================================================================= -QFrame* SMESHGUI_DeleteGroupDlg::createMainFrame (QWidget* theParent) -{ - QGroupBox* aMainGrp = - new QGroupBox(1, Qt::Horizontal, tr("SELECTED_GROUPS"), theParent); - - myListBox = new QListBox(aMainGrp); - myListBox->setMinimumHeight(100); - myListBox->setSelectionMode(QListBox::NoSelection); - myListBox->setRowMode(QListBox::FitToWidth); - - return aMainGrp; -} - -//================================================================================= -// function : createButtonFrame() -// purpose : Create frame containing buttons -//================================================================================= -QFrame* SMESHGUI_DeleteGroupDlg::createButtonFrame (QWidget* theParent) -{ - QFrame* aFrame = new QFrame(theParent); - aFrame->setFrameStyle(QFrame::Box | QFrame::Sunken); - - myOkBtn = new QPushButton(tr("SMESH_BUT_OK" ), aFrame); - myApplyBtn = new QPushButton(tr("SMESH_BUT_APPLY"), aFrame); - myCloseBtn = new QPushButton(tr("SMESH_BUT_CLOSE"), aFrame); - - QSpacerItem* aSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); - - QHBoxLayout* aLay = new QHBoxLayout(aFrame, MARGIN, SPACING); - - aLay->addWidget(myOkBtn); - aLay->addWidget(myApplyBtn); - aLay->addItem(aSpacer); - aLay->addWidget(myCloseBtn); - - // connect signals and slots - connect(myOkBtn, SIGNAL(clicked()), SLOT(onOk())); - connect(myCloseBtn, SIGNAL(clicked()), SLOT(onClose())); - connect(myApplyBtn, SIGNAL(clicked()), SLOT(onApply())); - - return aFrame; -} - -//================================================================================= -// name : ~SMESHGUI_DeleteGroupDlg() -// Purpose : Destructor -//================================================================================= -SMESHGUI_DeleteGroupDlg::~SMESHGUI_DeleteGroupDlg() -{ -} - -//================================================================================= -// function : Init() -// purpose : Init dialog fields, connect signals and slots, show dialog -//================================================================================= -void SMESHGUI_DeleteGroupDlg::Init () -{ - myBlockSelection = false; - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - // selection and SMESHGUI - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone())); - connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate())); - connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(onClose())); - - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); - - // set selection mode - mySelectionMgr->installFilter(new SMESH_TypeFilter(GROUP)); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - onSelectionDone(); - - return; -} - -//================================================================================= -// function : isValid() -// purpose : Verify validity of input data -//================================================================================= -bool SMESHGUI_DeleteGroupDlg::isValid() -{ - if (myListBox->count() == 0) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), - tr("NO_SELECTED_GROUPS"), QMessageBox::Ok); - return false; - } - - return !mySMESHGUI->isActiveStudyLocked(); -} - -//================================================================================= -// function : onApply() -// purpose : SLOT called when "Apply" button pressed. -//================================================================================= -bool SMESHGUI_DeleteGroupDlg::onApply() -{ - if (!isValid()) - return false; - - myBlockSelection = true; - - QValueList::iterator anIter; - for (anIter = myListGrp.begin(); anIter != myListGrp.end(); ++anIter) { - SMESH::SMESH_Mesh_ptr aMesh = (*anIter)->GetMesh(); - if (!aMesh->_is_nil()) - aMesh->RemoveGroupWithContents(*anIter); - } - - myListBox->clear(); - myListGrp.clear(); - mySelectionMgr->clearSelected(); - SMESH::UpdateView(); - mySMESHGUI->updateObjBrowser(true); - - myBlockSelection = false; - return true; -} - -//================================================================================= -// function : onOk() -// purpose : SLOT called when "Ok" button pressed. -//================================================================================= -void SMESHGUI_DeleteGroupDlg::onOk() -{ - if (onApply()) - onClose(); -} - -//================================================================================= -// function : onClose() -// purpose : SLOT called when "Close" button pressed. Close dialog -//================================================================================= -void SMESHGUI_DeleteGroupDlg::onClose() -{ - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - disconnect(mySelectionMgr, 0, this, 0); - disconnect(mySMESHGUI, 0, this, 0); - mySMESHGUI->ResetState(); - mySelectionMgr->clearFilters(); - reject(); -} - -//================================================================================= -// function : onSelectionDone() -// purpose : SLOT called when selection changed -//================================================================================= -void SMESHGUI_DeleteGroupDlg::onSelectionDone() -{ - if (myBlockSelection) - return; - - myListGrp.clear(); - QStringList aNames; - - SALOME_ListIO aListIO; - mySelectionMgr->selectedObjects(aListIO); - SALOME_ListIteratorOfListIO anIter (aListIO); - for (; anIter.More(); anIter.Next()) { - SMESH::SMESH_GroupBase_var aGroup = - SMESH::IObjectToInterface(anIter.Value()); - if (!aGroup->_is_nil()) { - aNames.append(aGroup->GetName()); - myListGrp.append(aGroup); - } - } - - myListBox->clear(); - myListBox->insertStringList(aNames); -} - -//================================================================================= -// function : onDeactivate() -// purpose : SLOT called when dialog must be deativated -//================================================================================= -void SMESHGUI_DeleteGroupDlg::onDeactivate() -{ - mySelectionMgr->clearFilters(); - setEnabled(false); -} - -//================================================================================= -// function : enterEvent() -// purpose : Event filter -//================================================================================= -void SMESHGUI_DeleteGroupDlg::enterEvent (QEvent*) -{ - mySMESHGUI->EmitSignalDeactivateDialog(); - setEnabled(true); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(new SMESH_TypeFilter (GROUP)); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_DeleteGroupDlg::closeEvent (QCloseEvent*) -{ - onClose(); -} diff --git a/src/SMESHGUI/SMESHGUI_DeleteGroupDlg.h b/src/SMESHGUI/SMESHGUI_DeleteGroupDlg.h deleted file mode 100644 index 320f411b5..000000000 --- a/src/SMESHGUI/SMESHGUI_DeleteGroupDlg.h +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_DeleteGroupDlg.h -// Author : Sergey LITONIN -// Module : SMESH - - -#ifndef SMESHGUI_DELETEGROUPDLG_H -#define SMESHGUI_DELETEGROUPDLG_H - -#include -#include - -#include -#include CORBA_SERVER_HEADER(SMESH_Group) - -class QCloseEvent; -class QFrame; -class QPushButton; -class QListBox; - -class SMESHGUI; -class SVTK_ViewWindow; -class SalomeApp_SelectionMgr; - -/*! - * Class : SMESHGUI_DeleteGroupDlg - * Description : Delete groups and their contents - */ - -class SMESHGUI_DeleteGroupDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_DeleteGroupDlg( SMESHGUI* ); - virtual ~SMESHGUI_DeleteGroupDlg(); - - void Init (); - -private: - - void closeEvent (QCloseEvent*); - void enterEvent (QEvent*); - -private slots: - - void onOk(); - bool onApply(); - void onClose(); - - void onDeactivate(); - - void onSelectionDone(); - -private: - - QFrame* createButtonFrame (QWidget*); - QFrame* createMainFrame (QWidget*); - bool isValid(); - -private: - - QPushButton* myOkBtn; - QPushButton* myApplyBtn; - QPushButton* myCloseBtn; - QListBox* myListBox; - - SMESHGUI* mySMESHGUI; - SalomeApp_SelectionMgr* mySelectionMgr; - - QValueList myListGrp; - bool myBlockSelection; -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_Dialog.cxx b/src/SMESHGUI/SMESHGUI_Dialog.cxx deleted file mode 100644 index 1e1df649c..000000000 --- a/src/SMESHGUI/SMESHGUI_Dialog.cxx +++ /dev/null @@ -1,139 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_Dialog.cxx -// Author : Alexander SOLOVYOV -// Module : SMESH -// $Header$ - -#include -#include -#include -#include - -//================================================================================= -// function : SMESHGUI_Dialog -// purpose : Constructor -//================================================================================= -SMESHGUI_Dialog::SMESHGUI_Dialog( QWidget* parent, const bool modal, - const bool allowResize, const int flags ) -: SalomeApp_Dialog( parent == 0 ? desktop() : parent, "", modal, allowResize, flags ) -{ - int pr = prefix( "SMESH" ); - typeName( pr + MESH ) = tr( "DLG_MESH" ); - typeName( pr + HYPOTHESIS ) = tr( "DLG_HYPO" ); - typeName( pr + ALGORITHM ) = tr( "DLG_ALGO" ); - if ( flags & Close ) - setButtonPosition( Right, Close ); -} - -//================================================================================= -// function : ~SMESHGUI_Dialog -// purpose : Destructor -//================================================================================= -SMESHGUI_Dialog::~SMESHGUI_Dialog() -{ -} - -//================================================================================= -// function : show -// purpose : -//================================================================================= -void SMESHGUI_Dialog::show() -{ - adjustSize(); - SUIT_Desktop *PP = desktop(); - int x = abs( PP->x() + PP->size().width() - size().width() - 10 ), - y = abs( PP->y() + PP->size().height() - size().height() - 10 ); - move(x, y); - SalomeApp_Dialog::show(); -} - -//================================================================================= -// function : setContentActive -// purpose : -//================================================================================= -void SMESHGUI_Dialog::setContentActive( const bool active ) const -{ - mainFrame()->setEnabled( active ); -} - -//================================================================================= -// function : desktop -// purpose : -//================================================================================= -SUIT_Desktop* SMESHGUI_Dialog::desktop() const -{ - SUIT_Desktop* d = 0; - SUIT_Session* s = SUIT_Session::session(); - if( s ) - { - SalomeApp_Application* app = dynamic_cast( s->activeApplication() ); - if( app ) - d = app->desktop(); - } - return d; -} - -//======================================================================= -// name : prefix -// Purpose : Get prefix for module types -//======================================================================= -int SMESHGUI_Dialog::prefix( const QString& name ) -{ - if( name == "GEOM" ) - return 100; - else if( name == "SMESH" ) - return 200; - else if( name == "SMESH element" ) - return 300; - else - return 0; -} - -//======================================================================= -// name : resourceMgr -// Purpose : Gets resource manager -//======================================================================= -SUIT_ResourceMgr* resourceMgr() -{ - return SUIT_Session::session()->resourceMgr(); -} - - - - - - - - - - - - - - - - - - diff --git a/src/SMESHGUI/SMESHGUI_Dialog.h b/src/SMESHGUI/SMESHGUI_Dialog.h deleted file mode 100644 index 66f61c6d3..000000000 --- a/src/SMESHGUI/SMESHGUI_Dialog.h +++ /dev/null @@ -1,66 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_Dialog.h -// Author : Alexander SOLOVYOV -// Module : SMESH -// $Header$ - - -#ifndef SMESHGUI_DIALOG_H -#define SMESHGUI_DIALOG_H - -#include - -class SUIT_Desktop; -class SUIT_ResourceMgr; - -//================================================================================= -// class : SMESHGUI_Dialog -// purpose : Base dialog for all SMESHGUI dialogs -//================================================================================= -class SMESHGUI_Dialog : public SalomeApp_Dialog -{ - Q_OBJECT - -public: - SMESHGUI_Dialog( QWidget* = 0, const bool = false, const bool = false, const int = OK | Close | Apply ); - virtual ~SMESHGUI_Dialog(); - - virtual void show(); - - //! set all content to enable (parameter is true) or disable state - virtual void setContentActive( const bool ) const; - - //! Return hard-coded prefix using to differ overlapping types - static int prefix( const QString& ); - -protected: - //! find desktop of active application - SUIT_Desktop* desktop() const; - - //! gets resource manager - SUIT_ResourceMgr* resourceMgr(); -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_EditHypothesesDlg.cxx b/src/SMESHGUI/SMESHGUI_EditHypothesesDlg.cxx deleted file mode 100644 index c2d0185b6..000000000 --- a/src/SMESHGUI/SMESHGUI_EditHypothesesDlg.cxx +++ /dev/null @@ -1,963 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_EditHypothesesDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#include "SMESHGUI_EditHypothesesDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_GEOMGenUtils.h" -#include "SMESHGUI_HypothesesUtils.h" - -#include "SMESH_TypeFilter.hxx" -#include "SMESH_NumberFilter.hxx" - -#include "SALOME_ListIO.hxx" -#include "SALOME_ListIteratorOfListIO.hxx" - -#include "SALOMEDSClient_Study.hxx" -#include "SALOMEDSClient_AttributeIOR.hxx" -#include "SALOMEDSClient_AttributeName.hxx" - -#include "SUIT_Session.h" -#include "SUIT_OverrideCursor.h" -#include "SUIT_Operation.h" -#include "SUIT_Desktop.h" - -#include "utilities.h" - -#include "SVTK_ViewModel.h" - -// QT Includes -#include -#include -#include -#include -#include -#include - -using namespace std; - -//VRV: porting on Qt 3.0.5 -#if QT_VERSION >= 0x030005 -#include -#endif -//VRV: porting on Qt 3.0.5 - -class ListBoxIOR : public QListBoxText -{ -public: - enum { RTTI_IOR = 1000 }; - -public: - ListBoxIOR (QListBox* listbox, - const char* ior, - const QString& text = QString::null) - : QListBoxText(listbox, text), myIOR(ior) {} - virtual ~ListBoxIOR() {}; - virtual int rtti() const { return RTTI_IOR; } - const char* GetIOR() { return myIOR.c_str(); } - -private: - string myIOR; -}; - -#define ALLOW_CHANGE_SHAPE 0 - -int findItem (QListBox* listBox, const string& ior) -{ - for (int i = 0; i < listBox->count(); i++) { - if (listBox->item(i)->rtti() == ListBoxIOR::RTTI_IOR) { - ListBoxIOR* anItem = (ListBoxIOR*)(listBox->item(i)); - if (anItem && ior == string(anItem->GetIOR())) - return i; - } - } - return -1; -} - -//================================================================================= -// function : SMESHGUI_EditHypothesesDlg() -// purpose : Constructs a SMESHGUI_EditHypothesesDlg which is a child of 'parent', with the -// name 'name' and widget flags set to 'f'. -// The dialog will by default be modeless, unless you set 'modal' to -// TRUE to construct a modal dialog. -//================================================================================= -SMESHGUI_EditHypothesesDlg::SMESHGUI_EditHypothesesDlg (SMESHGUI* theModule, const char* name, - bool modal, WFlags fl) - : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | - WStyle_Title | WStyle_SysMenu | WDestructiveClose), - myImportedMesh(false), - mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) -{ - QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); - if (!name) - setName("SMESHGUI_EditHypothesesDlg"); - setCaption(tr("SMESH_EDIT_HYPOTHESES")); - setSizeGripEnabled(TRUE); - QGridLayout* SMESHGUI_EditHypothesesDlgLayout = new QGridLayout(this); - SMESHGUI_EditHypothesesDlgLayout->setSpacing(6); - SMESHGUI_EditHypothesesDlgLayout->setMargin(11); - - /***************************************************************/ - GroupC1 = new QGroupBox(tr("SMESH_ARGUMENTS"), this, "GroupC1"); - GroupC1->setColumnLayout(0, Qt::Vertical); - GroupC1->layout()->setSpacing(0); - GroupC1->layout()->setMargin(0); - QGridLayout* GroupC1Layout = new QGridLayout(GroupC1->layout()); - GroupC1Layout->setAlignment(Qt::AlignTop); - GroupC1Layout->setSpacing(6); - GroupC1Layout->setMargin(11); - - TextLabelC1A1 = new QLabel(tr("SMESH_OBJECT_MESHorSUBMESH"), GroupC1, "TextLabelC1A1"); - GroupC1Layout->addWidget(TextLabelC1A1, 0, 0); - SelectButtonC1A1 = new QPushButton(GroupC1, "SelectButtonC1A1"); - SelectButtonC1A1->setPixmap(image0); - GroupC1Layout->addWidget(SelectButtonC1A1, 0, 1); - LineEditC1A1 = new QLineEdit(GroupC1, "LineEditC1A1"); - LineEditC1A1->setReadOnly(true); - GroupC1Layout->addWidget(LineEditC1A1, 0, 2); - - TextLabelC1A2 = new QLabel(tr("SMESH_OBJECT_GEOM"), GroupC1, "TextLabelC1A2"); - GroupC1Layout->addWidget(TextLabelC1A2, 1, 0); - SelectButtonC1A2 = new QPushButton(GroupC1, "SelectButtonC1A2"); - SelectButtonC1A2->setPixmap(image0); - SelectButtonC1A2->setToggleButton(FALSE); - GroupC1Layout->addWidget(SelectButtonC1A2, 1, 1); - LineEditC1A2 = new QLineEdit(GroupC1, "LineEditC1A2"); - LineEditC1A2->setReadOnly(true); - GroupC1Layout->addWidget(LineEditC1A2, 1, 2); - - SMESHGUI_EditHypothesesDlgLayout->addWidget(GroupC1, 0, 0); - - /***************************************************************/ - GroupHypotheses = new QGroupBox(tr("SMESH_HYPOTHESES"), this, "GroupHypotheses"); - GroupHypotheses->setColumnLayout(0, Qt::Vertical); - GroupHypotheses->layout()->setSpacing(0); - GroupHypotheses->layout()->setMargin(0); - QGridLayout* grid_3 = new QGridLayout(GroupHypotheses->layout()); - grid_3->setAlignment(Qt::AlignTop); - grid_3->setSpacing(6); - grid_3->setMargin(11); - - TextHypDefinition = new QLabel(tr("SMESH_AVAILABLE"), GroupHypotheses, "TextHypDefinition"); - grid_3->addWidget(TextHypDefinition, 0, 0); - - ListHypDefinition = new QListBox(GroupHypotheses, "ListHypDefinition"); - ListHypDefinition->setMinimumSize(100, 100); - grid_3->addWidget(ListHypDefinition, 1, 0); - - TextHypAssignation = new QLabel(tr("SMESH_EDIT_USED"), GroupHypotheses, "TextHypAssignation"); - grid_3->addWidget(TextHypAssignation, 0, 1); - - ListHypAssignation = new QListBox(GroupHypotheses, "ListHypAssignation"); - ListHypAssignation->setMinimumSize(100, 100); - grid_3->addWidget(ListHypAssignation, 1, 1); - - SMESHGUI_EditHypothesesDlgLayout->addWidget(GroupHypotheses, 1, 0); - - /***************************************************************/ - GroupAlgorithms = new QGroupBox(tr("SMESH_ADD_ALGORITHM"), this, "GroupAlgorithms"); - GroupAlgorithms->setColumnLayout(0, Qt::Vertical); - GroupAlgorithms->layout()->setSpacing(0); - GroupAlgorithms->layout()->setMargin(0); - QGridLayout* grid_4 = new QGridLayout(GroupAlgorithms->layout()); - grid_4->setAlignment(Qt::AlignTop); - grid_4->setSpacing(6); - grid_4->setMargin(11); - - TextAlgoDefinition = new QLabel(tr("SMESH_AVAILABLE"), GroupAlgorithms, "TextAlgoDefinition"); - grid_4->addWidget(TextAlgoDefinition, 0, 0); - - ListAlgoDefinition = new QListBox(GroupAlgorithms, "ListAlgoDefinition"); - ListAlgoDefinition->setMinimumSize(100, 100); - grid_4->addWidget(ListAlgoDefinition, 1, 0); - - TextAlgoAssignation = new QLabel(tr("SMESH_EDIT_USED"), GroupAlgorithms, "TextAlgoAssignation"); - grid_4->addWidget(TextAlgoAssignation, 0, 1); - - ListAlgoAssignation = new QListBox(GroupAlgorithms, "ListAlgoAssignation"); - ListAlgoAssignation ->setMinimumSize(100, 100); - grid_4->addWidget(ListAlgoAssignation, 1, 1); - - SMESHGUI_EditHypothesesDlgLayout->addWidget(GroupAlgorithms, 2, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - - buttonOk = new QPushButton(tr("SMESH_BUT_OK"), GroupButtons, "buttonOk"); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(FALSE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - - buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons, "buttonApply"); - buttonApply->setAutoDefault(TRUE); - buttonApply->setDefault(FALSE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - - GroupButtonsLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 2); - - buttonCancel = new QPushButton(tr("SMESH_BUT_CLOSE"), GroupButtons, "buttonCancel"); - buttonCancel->setAutoDefault(TRUE); - buttonCancel->setDefault(TRUE); - buttonCancel->setEnabled(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - - SMESHGUI_EditHypothesesDlgLayout->addWidget(GroupButtons, 4, 0); - - /***************************************************************/ - Init(); -} - -//================================================================================= -// function : ~SMESHGUI_EditHypothesesDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_EditHypothesesDlg::~SMESHGUI_EditHypothesesDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::Init() -{ - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - InitHypDefinition(); - InitAlgoDefinition(); - - //myGeomFilter = new SALOME_TypeFilter ("GEOM"); - TColStd_MapOfInteger allTypesMap; - for (int i = 0; i < 10; i++) - allTypesMap.Add(i); - myGeomFilter = new SMESH_NumberFilter ("GEOM", TopAbs_SHAPE, 0, allTypesMap); - myMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH); - - myGeomShape = GEOM::GEOM_Object::_nil(); - myMesh = SMESH::SMESH_Mesh::_nil(); - mySubMesh = SMESH::SMESH_subMesh::_nil(); - - /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - - connect(SelectButtonC1A1, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectButtonC1A2, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); - - connect(ListHypAssignation, SIGNAL(doubleClicked(QListBoxItem*)), this, SLOT(removeItem(QListBoxItem*))); - connect(ListAlgoAssignation, SIGNAL(doubleClicked(QListBoxItem*)), this, SLOT(removeItem(QListBoxItem*))); - - connect(ListHypDefinition, SIGNAL(doubleClicked(QListBoxItem*)), this, SLOT(addItem(QListBoxItem*))); - connect(ListAlgoDefinition, SIGNAL(doubleClicked(QListBoxItem*)), this, SLOT(addItem(QListBoxItem*))); - - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); - - LineEditC1A1->setFocus(); - myEditCurrentArgument = LineEditC1A1; - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myMeshOrSubMeshFilter); - - SelectionIntoArgument(); - - UpdateControlState(); -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::ClickOnOk() -{ - if (ClickOnApply()) - ClickOnCancel(); -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -bool SMESHGUI_EditHypothesesDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return false; - - bool aRes = false; - - SUIT_OverrideCursor wc; - - SUIT_Operation* op = new SUIT_Operation - (SUIT_Session::session()->activeApplication()); - - // start transaction - op->start(); - - if (!myMesh->_is_nil()) - aRes = StoreMesh(); - else if (!mySubMesh->_is_nil()) - aRes = StoreSubMesh(); - - if (true/*aRes*/) { // abort desynchronizes contents of a Study and a mesh on server - // commit transaction - op->commit(); - InitHypAssignation(); - InitAlgoAssignation(); - } else { - // abort transaction - op->abort(); - } - - UpdateControlState(); - mySMESHGUI->updateObjBrowser(); - - return aRes; -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::ClickOnCancel() -{ - close(); -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_EditHypothesesDlg::SelectionIntoArgument() -{ - QString aString = ""; - - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type()); - - int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - - if (myEditCurrentArgument == LineEditC1A1) { - if (nbSel != 1) { - myMesh = SMESH::SMESH_Mesh::_nil(); - mySubMesh = SMESH::SMESH_subMesh::_nil(); - aString = ""; - } else { - Handle(SALOME_InteractiveObject) IO = aList.First(); - myMesh = SMESH::IObjectToInterface(IO); - if (myMesh->_is_nil()) { - mySubMesh = SMESH::IObjectToInterface(IO); - if (mySubMesh->_is_nil()) { - aString = ""; - } - } - } - myEditCurrentArgument->setText(aString); - - // InitGeom() will try to retrieve a shape from myMesh or mySubMesh - myGeomShape = GEOM::GEOM_Object::_nil(); - InitGeom(); - - myImportedMesh = myGeomShape->_is_nil(); - - InitHypAssignation(); - InitAlgoAssignation(); - - } else if (myEditCurrentArgument == LineEditC1A2) { - if (nbSel != 1) { - myGeomShape = GEOM::GEOM_Object::_nil(); - } else { - Handle(SALOME_InteractiveObject) IO = aList.First(); - myGeomShape = SMESH::IObjectToInterface(IO); - } - InitGeom(); - } - - UpdateControlState(); -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::SetEditCurrentArgument() -{ - QPushButton* send = (QPushButton*)sender(); - if(send == SelectButtonC1A1) { - LineEditC1A1->setFocus(); - myEditCurrentArgument = LineEditC1A1; - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myMeshOrSubMeshFilter); - } else if (send == SelectButtonC1A2) { - LineEditC1A2->setFocus(); - myEditCurrentArgument = LineEditC1A2; - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myGeomFilter); - } - SelectionIntoArgument(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::DeactivateActiveDialog() -{ - if (GroupC1->isEnabled()) { - disconnect(mySelectionMgr, 0, this, 0); - GroupC1->setEnabled(false); - GroupButtons->setEnabled(false); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::ActivateThisDialog() -{ - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupC1->setEnabled(true); - GroupButtons->setEnabled(true); - connect (mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); -} - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::enterEvent (QEvent*) -{ - if (!GroupC1->isEnabled()) - ActivateThisDialog(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::closeEvent (QCloseEvent* e) -{ - disconnect(mySelectionMgr, 0, this, 0); - mySMESHGUI->ResetState(); - mySelectionMgr->clearFilters(); - QDialog::closeEvent(e); -} - -//======================================================================= -// function : IsOld() -// purpose : -//======================================================================= -bool SMESHGUI_EditHypothesesDlg::IsOld (QListBoxItem* hypItem) -{ - if (hypItem->rtti() == ListBoxIOR::RTTI_IOR) { - ListBoxIOR* hyp = (ListBoxIOR*) hypItem; - return (myMapOldHypos.find(hyp->GetIOR()) != myMapOldHypos.end() || - myMapOldAlgos.find(hyp->GetIOR()) != myMapOldAlgos.end()); - } - - return false; -} - -//================================================================================= -// function : removeItem() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::removeItem (QListBoxItem* item) -{ - const QObject* aSender = sender(); - - if (!item) return; - - if (aSender == ListHypAssignation) { - myNbModification += IsOld(item) ? 1 : -1; - ListHypAssignation->removeItem(ListHypAssignation->index(item)); - } - else if (aSender == ListAlgoAssignation) { - myNbModification += IsOld(item) ? 1 : -1; - ListAlgoAssignation->removeItem(ListAlgoAssignation->index(item)); - } - - UpdateControlState(); -} - -//================================================================================= -// function : addItem() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::addItem (QListBoxItem* item) -{ - const QObject* aSender = sender(); - - if (!item) return; - - ListBoxIOR* i = 0; - if (item->rtti() == ListBoxIOR::RTTI_IOR) - i = (ListBoxIOR*)item; - if (!i) return; - - bool isFound = false; - - ListBoxIOR* anItem; - if (aSender == ListHypDefinition) { - for (int j = 0, n = ListHypAssignation->count(); !isFound && j < n; j++) { - if (ListHypAssignation->item(j)->rtti() == ListBoxIOR::RTTI_IOR) { - anItem = (ListBoxIOR*)ListHypAssignation->item(j); - isFound = !strcmp(anItem->GetIOR(), i->GetIOR()); - } - } - if (!isFound) - anItem = new ListBoxIOR (ListHypAssignation, - CORBA::string_dup(i->GetIOR()), - CORBA::string_dup(i->text().latin1())); - - } else if (aSender == ListAlgoDefinition) { - for (int j = 0, n = ListAlgoAssignation->count(); !isFound && j < n; j++) { - if (ListAlgoAssignation->item(j)->rtti() == ListBoxIOR::RTTI_IOR) { - anItem = (ListBoxIOR*)ListAlgoAssignation->item(j); - isFound = !strcmp(anItem->GetIOR(), i->GetIOR()); - } - } - if (!isFound) - anItem = new ListBoxIOR (ListAlgoAssignation, - CORBA::string_dup(i->GetIOR()), - CORBA::string_dup(i->text().latin1())); - } else { - } - - if (!isFound) - myNbModification += IsOld(item) ? -1 : 1; - - UpdateControlState(); -} - -//================================================================================= -// function : InitHypDefinition() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::InitHypDefinition() -{ - ListHypDefinition->clear(); - - _PTR(SComponent) father = SMESH::GetActiveStudyDocument()->FindComponent("SMESH"); - if (!father) - return; - - _PTR(SObject) HypothesisRoot; - _PTR(GenericAttribute) anAttr; - _PTR(AttributeName) aName; - _PTR(AttributeIOR) anIOR; - - //int Tag_HypothesisRoot = 1; - if (father->FindSubObject(1, HypothesisRoot)) { - _PTR(ChildIterator) it = - SMESH::GetActiveStudyDocument()->NewChildIterator(HypothesisRoot); - ListBoxIOR* anItem; - for (; it->More();it->Next()) { - _PTR(SObject) Obj = it->Value(); - if (Obj->FindAttribute(anAttr, "AttributeName")) { - aName = anAttr; - if (Obj->FindAttribute(anAttr, "AttributeIOR")) { - anIOR = anAttr; - anItem = new ListBoxIOR (ListHypDefinition, - anIOR->Value().c_str(), - aName->Value().c_str()); - } - } - } - } -} - -//================================================================================= -// function : InitHypAssignation() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::InitHypAssignation() -{ - myNbModification = 0; - - myMapOldHypos.clear(); - ListHypAssignation->clear(); - if (myImportedMesh) - return; - - _PTR(SObject) aMorSM, AHR, aRef; - _PTR(GenericAttribute) anAttr; - _PTR(AttributeName) aName; - _PTR(AttributeIOR) anIOR; - - if (!myMesh->_is_nil()) - aMorSM = SMESH::FindSObject(myMesh); - else if (!mySubMesh->_is_nil()) - aMorSM = SMESH::FindSObject(mySubMesh); - - if (aMorSM && aMorSM->FindSubObject(2, AHR)) { - _PTR(ChildIterator) it = - SMESH::GetActiveStudyDocument()->NewChildIterator(AHR); - for (; it->More();it->Next()) { - _PTR(SObject) Obj = it->Value(); - if (Obj->ReferencedObject(aRef)) { - if (aRef->FindAttribute(anAttr, "AttributeName")) { - aName = anAttr; - if (aRef->FindAttribute(anAttr, "AttributeIOR")) { - anIOR = anAttr; - ListBoxIOR* anItem = new ListBoxIOR (ListHypAssignation, - anIOR->Value().c_str(), - aName->Value().c_str()); - myMapOldHypos[ anIOR->Value() ] = ListHypAssignation->index(anItem); - } - } - } - } - } -} - -//================================================================================= -// function : InitAlgoDefinition() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::InitAlgoDefinition() -{ - ListAlgoDefinition->clear(); - - _PTR(SComponent) father = SMESH::GetActiveStudyDocument()->FindComponent("SMESH"); - if (!father) - return; - - _PTR(SObject) AlgorithmsRoot; - _PTR(GenericAttribute) anAttr; - _PTR(AttributeName) aName; - _PTR(AttributeIOR) anIOR; - - if (father->FindSubObject (2, AlgorithmsRoot)) { - _PTR(ChildIterator) it = - SMESH::GetActiveStudyDocument()->NewChildIterator(AlgorithmsRoot); - ListBoxIOR* anItem; - for (; it->More();it->Next()) { - _PTR(SObject) Obj = it->Value(); - if (Obj->FindAttribute(anAttr, "AttributeName")) { - aName = anAttr; - if (Obj->FindAttribute(anAttr, "AttributeIOR")) { - anIOR = anAttr; - anItem = new ListBoxIOR (ListAlgoDefinition, - anIOR->Value().c_str(), - aName->Value().c_str()); - } - } - } - } -} - -//================================================================================= -// function : InitAlgoAssignation() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::InitAlgoAssignation() -{ - myMapOldAlgos.clear(); - ListAlgoAssignation->clear(); - if (myImportedMesh) - return; - - _PTR(SObject) aMorSM, AHR, aRef; - _PTR(GenericAttribute) anAttr; - _PTR(AttributeName) aName; - _PTR(AttributeIOR) anIOR; - - if (!myMesh->_is_nil()) - aMorSM = SMESH::FindSObject(myMesh); - else if (!mySubMesh->_is_nil()) - aMorSM = SMESH::FindSObject(mySubMesh); - - if (aMorSM && aMorSM->FindSubObject(3, AHR)) { - _PTR(ChildIterator) it = - SMESH::GetActiveStudyDocument()->NewChildIterator(AHR); - for (; it->More();it->Next()) { - _PTR(SObject) Obj = it->Value(); - if (Obj->ReferencedObject(aRef)) { - if (aRef->FindAttribute(anAttr, "AttributeName")) { - aName = anAttr; - if (aRef->FindAttribute(anAttr, "AttributeIOR")) { - anIOR = anAttr; - ListBoxIOR* anItem = new ListBoxIOR (ListAlgoAssignation, - anIOR->Value().c_str(), - aName->Value().c_str()); - myMapOldAlgos[ anIOR->Value() ] = ListAlgoAssignation->index(anItem); - } - } - } - } - } -} - -//================================================================================= -// function : InitGeom() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::InitGeom() -{ - LineEditC1A2->setText(""); - - if (myGeomShape->_is_nil() && !myMesh->_is_nil()) { - _PTR(SObject) aMesh = SMESH::FindSObject(myMesh); - if (aMesh) - myGeomShape = SMESH::GetShapeOnMeshOrSubMesh(aMesh); - } - if (myGeomShape->_is_nil() && !mySubMesh->_is_nil()) { - _PTR(SObject) aSubMesh = SMESH::FindSObject(mySubMesh); - if (aSubMesh) - myGeomShape = SMESH::GetShapeOnMeshOrSubMesh(aSubMesh); - } - - _PTR(GenericAttribute) anAttr; - _PTR(AttributeName) aName; - if (!myGeomShape->_is_nil() && (!myMesh->_is_nil() || !mySubMesh->_is_nil())) { - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); - //_PTR(SObject) aSO = aStudy->FindObjectIOR(aStudy->ConvertObjectToIOR(myGeomShape)); - _PTR(SObject) aSO = aStudy->FindObjectID(myGeomShape->GetStudyEntry()); - if (aSO) { - if (aSO->FindAttribute(anAttr, "AttributeName")) { - aName = anAttr; - LineEditC1A2->setText(QString(aName->Value().c_str())); - } - } - } -} - -//================================================================================= -// function : UpdateControlState() -// purpose : -//================================================================================= -void SMESHGUI_EditHypothesesDlg::UpdateControlState() -{ - // asl the check of "count" is commented because of PAL9787 - bool isEnabled = (!myMesh->_is_nil() && !myGeomShape->_is_nil() /*&& - ListHypAssignation->count() && ListAlgoAssignation->count()*/ ) - || - (!mySubMesh->_is_nil() && !myGeomShape->_is_nil() /*&& - (ListHypAssignation->count() || ListAlgoAssignation->count())*/); - - buttonOk ->setEnabled(myNbModification && isEnabled && !myImportedMesh); - buttonApply->setEnabled(myNbModification && isEnabled && !myImportedMesh); - - SelectButtonC1A2 ->setEnabled(ALLOW_CHANGE_SHAPE && !myImportedMesh); - LineEditC1A2 ->setEnabled(ALLOW_CHANGE_SHAPE && !myImportedMesh); - ListHypDefinition ->setEnabled(!myImportedMesh); - ListHypAssignation ->setEnabled(!myImportedMesh); - ListAlgoDefinition ->setEnabled(!myImportedMesh); - ListAlgoAssignation->setEnabled(!myImportedMesh); -} - -//================================================================================= -// function : StoreMesh() -// purpose : -//================================================================================= -bool SMESHGUI_EditHypothesesDlg::StoreMesh() -{ - MapIOR anOldHypos, aNewHypos; - if (myGeomShape->_is_nil()) - return false; - - // 1. Check whether the geometric shape has changed - _PTR(SObject) aMeshSO = SMESH::FindSObject(myMesh); - GEOM::GEOM_Object_var aIniGeomShape = SMESH::GetShapeOnMeshOrSubMesh(aMeshSO); - bool bShapeChanged = aIniGeomShape->_is_nil() || - !aIniGeomShape->_is_equivalent(myGeomShape); - if (bShapeChanged) { - // VSR : TODO : Set new shape - not supported yet by SMESH engine - // 1. remove all old hypotheses and algorithms and also submeshes - // 2. set new shape - } - - int nbFail = 0; - MapIOR::iterator it; - - // 2. remove not used hypotheses from the mesh - for (it = myMapOldHypos.begin(); it != myMapOldHypos.end(); ++it) { - string ior = it->first; - int index = findItem(ListHypAssignation, ior); - if (index < 0) { - SMESH::SMESH_Hypothesis_var aHyp = - SMESH::IORToInterface(ior.c_str()); - if (!aHyp->_is_nil()) { - if (!SMESH::RemoveHypothesisOrAlgorithmOnMesh(aMeshSO, aHyp)) - nbFail++; - } - } - } - - // 3. remove not used algorithms from the mesh - for (it = myMapOldAlgos.begin(); it != myMapOldAlgos.end(); ++it) { - string ior = it->first; - int index = findItem(ListAlgoAssignation, ior); - if (index < 0) { - SMESH::SMESH_Hypothesis_var aHyp = - SMESH::IORToInterface(ior.c_str()); - if (!aHyp->_is_nil()) { - if (!SMESH::RemoveHypothesisOrAlgorithmOnMesh(aMeshSO, aHyp)) - nbFail++; - } - } - } - - // 4. Add new algorithms - for (int i = 0; i < ListAlgoAssignation->count(); i++) { - if (ListAlgoAssignation->item(i)->rtti() == ListBoxIOR::RTTI_IOR) { - ListBoxIOR* anItem = (ListBoxIOR*)(ListAlgoAssignation->item(i)); - if (anItem) { - string ior = anItem->GetIOR(); - if (myMapOldAlgos.find(ior) == myMapOldAlgos.end()) { - SMESH::SMESH_Hypothesis_var aHyp = - SMESH::IORToInterface(ior.c_str()); - if (!aHyp->_is_nil()) { - if (!SMESH::AddHypothesisOnMesh(myMesh, aHyp)) - nbFail++; - } - } - } - } - } - - // 5. Add new hypotheses - for (int i = 0; i < ListHypAssignation->count(); i++) { - if (ListHypAssignation->item(i)->rtti() == ListBoxIOR::RTTI_IOR) { - ListBoxIOR* anItem = (ListBoxIOR*)(ListHypAssignation->item(i)); - if (anItem) { - string ior = anItem->GetIOR(); - if (myMapOldHypos.find(ior) == myMapOldHypos.end()) { - SMESH::SMESH_Hypothesis_var aHyp = - SMESH::IORToInterface(ior.c_str()); - if (!aHyp->_is_nil()) { - if (!SMESH::AddHypothesisOnMesh(myMesh, aHyp)) - nbFail++; - } - } - } - } - } - return (nbFail == 0); -} - -//================================================================================= -// function : StoreSubMesh() -// purpose : -//================================================================================= -bool SMESHGUI_EditHypothesesDlg::StoreSubMesh() -{ - MapIOR anOldHypos, aNewHypos; - if (myGeomShape->_is_nil()) - return false; - - // 1. Check whether the geometric shape has changed - _PTR(SObject) aSubMeshSO = SMESH::FindSObject(mySubMesh); - GEOM::GEOM_Object_var aIniGeomShape = SMESH::GetShapeOnMeshOrSubMesh(aSubMeshSO); - bool bShapeChanged = aIniGeomShape->_is_nil() || !aIniGeomShape->_is_equivalent(myGeomShape); - if (bShapeChanged) { - // VSR : TODO : Set new shape - not supported yet by engine - // 1. remove all old hypotheses and algorithms - // 2. set new shape - } - int nbFail = 0; - MapIOR::iterator it; - - // 2. remove not used hypotheses from the submesh - for (it = myMapOldHypos.begin(); it != myMapOldHypos.end(); ++it) { - string ior = it->first; - int index = findItem(ListHypAssignation, ior); - if (index < 0) { - SMESH::SMESH_Hypothesis_var aHyp = SMESH::IORToInterface(ior.c_str()); - if (!aHyp->_is_nil()) { - if (!SMESH::RemoveHypothesisOrAlgorithmOnMesh(aSubMeshSO, aHyp)) - nbFail++; - } - } - } - - // 3. remove not used algorithms from the submesh - for (it = myMapOldAlgos.begin(); it != myMapOldAlgos.end(); ++it) { - string ior = it->first; - int index = findItem(ListAlgoAssignation, ior); - if (index < 0) { - SMESH::SMESH_Hypothesis_var aHyp = SMESH::IORToInterface(ior.c_str()); - if (!aHyp->_is_nil()){ - if (!SMESH::RemoveHypothesisOrAlgorithmOnMesh(aSubMeshSO, aHyp)) - nbFail++; - } - } - } - - // 4. Add new algorithms - for (int i = 0; i < ListAlgoAssignation->count(); i++) { - if (ListAlgoAssignation->item(i)->rtti() == ListBoxIOR::RTTI_IOR) { - ListBoxIOR* anItem = (ListBoxIOR*)(ListAlgoAssignation->item(i)); - if (anItem) { - string ior = anItem->GetIOR(); - if (myMapOldAlgos.find(ior) == myMapOldAlgos.end()) { - SMESH::SMESH_Hypothesis_var aHyp = SMESH::IORToInterface(ior.c_str()); - if (!aHyp->_is_nil()){ - if (!SMESH::AddHypothesisOnSubMesh(mySubMesh, aHyp)) - nbFail++; - } - } - } - } - } - - // 5. Add new hypotheses - for (int i = 0; i < ListHypAssignation->count(); i++) { - if (ListHypAssignation->item(i)->rtti() == ListBoxIOR::RTTI_IOR) { - ListBoxIOR* anItem = (ListBoxIOR*)(ListHypAssignation->item(i)); - if (anItem) { - string ior = anItem->GetIOR(); - if (myMapOldHypos.find(ior) == myMapOldHypos.end()) { - SMESH::SMESH_Hypothesis_var aHyp = SMESH::IORToInterface(ior.c_str()); - if (!aHyp->_is_nil()){ - if (!SMESH::AddHypothesisOnSubMesh(mySubMesh, aHyp)) - nbFail++; - } - } - } - } - } - return (nbFail == 0); -} diff --git a/src/SMESHGUI/SMESHGUI_EditHypothesesDlg.h b/src/SMESHGUI/SMESHGUI_EditHypothesesDlg.h deleted file mode 100644 index 6c40460e5..000000000 --- a/src/SMESHGUI/SMESHGUI_EditHypothesesDlg.h +++ /dev/null @@ -1,151 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_EditHypothesesDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef DIALOGBOX_EDIT_HYPOTHESES_H -#define DIALOGBOX_EDIT_HYPOTHESES_H - -//#include "SMESH_TypeFilter.hxx" -#include "SUIT_SelectionFilter.h" -#include "SalomeApp_SelectionMgr.h" - -// QT Includes -#include - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(GEOM_Gen) -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -#include -#include - -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class QListBox; -class QListBoxItem; -class SMESHGUI; - -typedef map MapIOR; - -//================================================================================= -// class : SMESHGUI_EditHypothesesDlg -// purpose : -//================================================================================= -class SMESHGUI_EditHypothesesDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_EditHypothesesDlg (SMESHGUI*, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0); - ~SMESHGUI_EditHypothesesDlg(); - -protected: - virtual void closeEvent (QCloseEvent*); - virtual void enterEvent (QEvent*); - -private: - void Init(); - - void InitHypDefinition(); - void InitAlgoDefinition(); - void InitHypAssignation(); - void InitAlgoAssignation(); - - void InitGeom(); - - void UpdateControlState(); - - bool StoreMesh(); - bool StoreSubMesh(); - - bool IsOld(QListBoxItem* hypItem); - -private: - SMESHGUI* mySMESHGUI; - SalomeApp_SelectionMgr* mySelectionMgr; - - GEOM::GEOM_Object_var myGeomShape; - QLineEdit* myEditCurrentArgument; - - SMESH::SMESH_Mesh_var myMesh; - SMESH::SMESH_subMesh_var mySubMesh; - - //Handle(SALOME_TypeFilter) myGeomFilter; - //Handle(SMESH_TypeFilter) myMeshOrSubMeshFilter; - SUIT_SelectionFilter* myGeomFilter; - SUIT_SelectionFilter* myMeshOrSubMeshFilter; - - MapIOR myMapOldHypos, myMapOldAlgos; - int myNbModification; - - bool myImportedMesh; - - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonApply; - QPushButton* buttonCancel; - - QGroupBox* GroupC1; - QLabel* TextLabelC1A1; - QPushButton* SelectButtonC1A1; - QLineEdit* LineEditC1A1; - QLabel* TextLabelC1A2; - QPushButton* SelectButtonC1A2; - QLineEdit* LineEditC1A2; - - QGroupBox* GroupHypotheses; - QLabel* TextHypDefinition; - QListBox* ListHypDefinition; - QLabel* TextHypAssignation; - QListBox* ListHypAssignation; - - QGroupBox* GroupAlgorithms; - QLabel* TextAlgoDefinition; - QListBox* ListAlgoDefinition; - QLabel* TextAlgoAssignation; - QListBox* ListAlgoAssignation; - -private slots: - void ClickOnOk(); - bool ClickOnApply(); - void ClickOnCancel(); - void SetEditCurrentArgument(); - void SelectionIntoArgument(); - void DeactivateActiveDialog(); - void ActivateThisDialog(); - - void removeItem(QListBoxItem*); - void addItem(QListBoxItem*); -}; - -#endif // DIALOGBOX_EDIT_HYPOTHESES_H diff --git a/src/SMESHGUI/SMESHGUI_EditMeshDlg.cxx b/src/SMESHGUI/SMESHGUI_EditMeshDlg.cxx deleted file mode 100644 index 935f18bae..000000000 --- a/src/SMESHGUI/SMESHGUI_EditMeshDlg.cxx +++ /dev/null @@ -1,323 +0,0 @@ - -#include "SMESHGUI_EditMeshDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" - -#include "SMESH_TypeFilter.hxx" - -#include "SUIT_Desktop.h" -#include "SUIT_Session.h" - -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//================================================================================= -// class : SMESHGUI_EditMeshDlg() -// purpose : -//================================================================================= -SMESHGUI_EditMeshDlg::SMESHGUI_EditMeshDlg (SMESHGUI* theModule, - const char* title, const char* icon, - int theAction) - : QDialog(SMESH::GetDesktop(theModule), "SMESHGUI_EditMeshDlg", false, WStyle_Customize | - WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose), - mySMESHGUI(theModule), - mySelectionMgr(SMESH::GetSelectionMgr(theModule)), - myAction(theAction) -{ - resize(303, 185); - setCaption(tr(title)); - - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - QPixmap image0 (aResMgr->loadPixmap("SMESH", tr(icon))); - QPixmap image1 (aResMgr->loadPixmap("SMESH", tr("ICON_SELECT"))); - - setSizeGripEnabled(TRUE); - DlgLayout = new QGridLayout (this); - DlgLayout->setSpacing(6); - DlgLayout->setMargin(11); - - /***************************************************************/ - GroupConstructors = new QButtonGroup (this, "GroupConstructors"); - GroupConstructors->setExclusive(TRUE); - GroupConstructors->setColumnLayout(0, Qt::Vertical); - GroupConstructors->layout()->setSpacing(0); - GroupConstructors->layout()->setMargin(0); - GroupConstructorsLayout = new QGridLayout (GroupConstructors->layout()); - GroupConstructorsLayout->setAlignment(Qt::AlignTop); - GroupConstructorsLayout->setSpacing(6); - GroupConstructorsLayout->setMargin(11); - Constructor1 = new QRadioButton (GroupConstructors, "Constructor1"); - Constructor1->setText(tr("")); - Constructor1->setPixmap(image0); - Constructor1->setChecked(TRUE); - Constructor1->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1, - (QSizePolicy::SizeType)0, - Constructor1->sizePolicy().hasHeightForWidth())); - Constructor1->setMinimumSize(QSize(50, 0)); - GroupConstructorsLayout->addWidget(Constructor1, 0, 0); - QSpacerItem* spacer = new QSpacerItem (20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupConstructorsLayout->addItem(spacer, 0, 1); - DlgLayout->addWidget(GroupConstructors, 0, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox (this, "GroupButtons"); - GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - GroupButtons->setTitle(tr("" )); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - GroupButtonsLayout = new QGridLayout (GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - buttonCancel = new QPushButton (GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - buttonApply = new QPushButton (GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_APPLY" )); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - QSpacerItem* spacer_9 = new QSpacerItem (20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - buttonOk = new QPushButton (GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_OK" )); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - DlgLayout->addWidget(GroupButtons, 2, 0); - - /***************************************************************/ - GroupMesh = new QGroupBox (this, "GroupMesh"); - GroupMesh->setTitle(tr("SMESH_MESH" )); - GroupMesh->setMinimumSize(QSize(0, 0)); - GroupMesh->setFrameShape(QGroupBox::Box); - GroupMesh->setFrameShadow(QGroupBox::Sunken); - 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); - TextLabelMesh = new QLabel (GroupMesh, "TextLabelMesh"); - TextLabelMesh->setText(tr("SMESH_MESH")); - TextLabelMesh->setMinimumSize(QSize(50, 0)); - TextLabelMesh->setFrameShape(QLabel::NoFrame); - TextLabelMesh->setFrameShadow(QLabel::Plain); - GroupMeshLayout->addWidget(TextLabelMesh, 0, 0); - SelectButton = new QPushButton (GroupMesh, "SelectButton"); - SelectButton->setText(tr("")); - SelectButton->setPixmap(image1); - SelectButton->setToggleButton(FALSE); - GroupMeshLayout->addWidget(SelectButton, 0, 1); - LineEditMesh = new QLineEdit (GroupMesh, "LineEditMesh"); - LineEditMesh->setReadOnly(true); - GroupMeshLayout->addWidget(LineEditMesh, 0, 2); - DlgLayout->addWidget(GroupMesh, 1, 0); - - Init(); // Initialisations -} - -//================================================================================= -// function : ~SMESHGUI_EditMeshDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_EditMeshDlg::~SMESHGUI_EditMeshDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_EditMeshDlg::Init() -{ - GroupMesh->show(); - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - myMesh = SMESH::SMESH_Mesh::_nil(); - - myMeshFilter = new SMESH_TypeFilter (MESH); - - // signals and slots connections - connect(buttonOk , SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply , SIGNAL(clicked()), this, SLOT(ClickOnApply())); - - connect(SelectButton, SIGNAL(clicked()), this, SLOT(SelectionIntoArgument())); - - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - - connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()) , this, SLOT(ClickOnCancel())); - - // Move widget on the bottom right corner of main widget - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); // displays Dialog - - LineEditMesh->setFocus(); - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myMeshFilter); - - SelectionIntoArgument(); -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -void SMESHGUI_EditMeshDlg::ClickOnApply() -{ - if (!myMesh->_is_nil()) { - try { - QApplication::setOverrideCursor(Qt::waitCursor); - - if (myAction == 1) { - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - aMeshEditor->MergeEqualElements(); - } - - QApplication::restoreOverrideCursor(); - } catch(...) { - } - - mySelectionMgr->clearSelected(); - SMESH::UpdateView(); - } -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_EditMeshDlg::ClickOnOk() -{ - ClickOnApply(); - ClickOnCancel(); -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_EditMeshDlg::ClickOnCancel() -{ - mySelectionMgr->clearSelected(); - mySelectionMgr->clearFilters(); - disconnect(mySelectionMgr, 0, this, 0); - mySMESHGUI->ResetState(); - reject(); -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_EditMeshDlg::SelectionIntoArgument() -{ - if (!GroupButtons->isEnabled()) // inactive - return; - - QString aString = ""; - - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList); - int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - - // mesh - if (nbSel != 1) { - myMesh = SMESH::SMESH_Mesh::_nil(); - aString = ""; - } else { - Handle(SALOME_InteractiveObject) IO = aList.First(); - myMesh = SMESH::IObjectToInterface(IO); - if (myMesh->_is_nil()) - aString = ""; - } - - LineEditMesh->setText(aString); - - bool isEnabled = (!myMesh->_is_nil()); - buttonOk->setEnabled(isEnabled); - buttonApply->setEnabled(isEnabled); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_EditMeshDlg::DeactivateActiveDialog() -{ - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); - GroupMesh->setEnabled(false); - GroupButtons->setEnabled(false); - mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_EditMeshDlg::ActivateThisDialog() -{ - /* Emit a signal to deactivate the active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupConstructors->setEnabled(true); - GroupMesh->setEnabled(true); - GroupButtons->setEnabled(true); - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - SelectionIntoArgument(); -} - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_EditMeshDlg::enterEvent(QEvent* e) -{ - if (GroupConstructors->isEnabled()) - return; - ActivateThisDialog(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_EditMeshDlg::closeEvent(QCloseEvent* e) -{ - /* same than click on cancel button */ - this->ClickOnCancel(); -} - -//======================================================================= -//function : hideEvent -//purpose : caused by ESC key -//======================================================================= -void SMESHGUI_EditMeshDlg::hideEvent (QHideEvent * e) -{ - if (!isMinimized()) - ClickOnCancel(); -} diff --git a/src/SMESHGUI/SMESHGUI_EditMeshDlg.h b/src/SMESHGUI/SMESHGUI_EditMeshDlg.h deleted file mode 100644 index 20cf71080..000000000 --- a/src/SMESHGUI/SMESHGUI_EditMeshDlg.h +++ /dev/null @@ -1,85 +0,0 @@ - -#ifndef DIALOGBOX_GETMESH_H -#define DIALOGBOX_GETMESH_H - -#include "SalomeApp_SelectionMgr.h" -#include "SUIT_SelectionFilter.h" - -// QT Includes -#include - -// Open CASCADE Includes - -class QGridLayout; -class QButtonGroup; -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class QRadioButton; -class SMESHGUI; - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -//================================================================================= -// class : SMESHGUI_EditMeshDlg -// purpose : -//================================================================================= -class SMESHGUI_EditMeshDlg : public QDialog -{ - Q_OBJECT; - - public: - SMESHGUI_EditMeshDlg (SMESHGUI * theModule, - const char* title, - const char* icon, - int theAction); - ~SMESHGUI_EditMeshDlg(); - - private: - void Init(); - void closeEvent (QCloseEvent*); - void enterEvent (QEvent*); /* mouse enter the QWidget */ - void hideEvent (QHideEvent*); /* ESC key */ - - private: - SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ - SalomeApp_SelectionMgr* mySelectionMgr; /* User shape selection */ - - SMESH::SMESH_Mesh_var myMesh; - SUIT_SelectionFilter* myMeshFilter; - - int myAction; - - // Widgets - QButtonGroup* GroupConstructors; - QRadioButton* Constructor1; - - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - - QGroupBox* GroupMesh; - QLabel* TextLabelMesh; - QPushButton* SelectButton; - QLineEdit* LineEditMesh; - - //protected: - QGridLayout* DlgLayout; - QGridLayout* GroupConstructorsLayout; - QGridLayout* GroupButtonsLayout; - QGridLayout* GroupMeshLayout; - - private slots: - void ClickOnOk(); - void ClickOnCancel(); - void ClickOnApply(); - void SelectionIntoArgument(); - void DeactivateActiveDialog(); - void ActivateThisDialog(); -}; - -#endif // DIALOGBOX_GETMESH_H diff --git a/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx b/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx deleted file mode 100644 index 3e84be424..000000000 --- a/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx +++ /dev/null @@ -1,1169 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_ExtrusionAlongPathDlg.cxx -// Author : Vadim SANDLER -// Module : SMESH -// $Header: - -#include "SMESHGUI_ExtrusionAlongPathDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_MeshUtils.h" -#include "SMESHGUI_SpinBox.h" -#include "SMESHGUI_IdValidator.h" - -#include "SMESH_Actor.h" -#include "SMESH_TypeFilter.hxx" -#include "SMESH_NumberFilter.hxx" -#include "SMESH_LogicalFilter.hxx" - -#include "SMDS_Mesh.hxx" - -#include "GEOMBase.h" - -#include "SUIT_ResourceMgr.h" -#include "SUIT_OverrideCursor.h" -#include "SUIT_Desktop.h" -#include "SUIT_MessageBox.h" - -#include "SVTK_ViewModel.h" -#include "SVTK_ViewWindow.h" -#include "SVTK_Selector.h" -#include "SVTK_Selection.h" -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// OCCT Includes -#include -#include -#include -#include -#include -#include -#include - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// IDL Headers -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Group) - -using namespace std; - -//================================================================================= -// function : SMESHGUI_ExtrusionAlongPathDlg() -// purpose : constructor -//================================================================================= -SMESHGUI_ExtrusionAlongPathDlg::SMESHGUI_ExtrusionAlongPathDlg( SMESHGUI* theModule, - bool modal ) - : QDialog( SMESH::GetDesktop( theModule ), "SMESHGUI_ExtrusionAlongPathDlg", modal, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose), - mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) -{ - SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); - QPixmap edgeImage ( mgr->loadPixmap("SMESH", tr("ICON_DLG_EDGE"))); - QPixmap faceImage ( mgr->loadPixmap("SMESH", tr("ICON_DLG_TRIANGLE"))); - QPixmap selectImage ( mgr->loadPixmap("SMESH", tr("ICON_SELECT"))); - QPixmap addImage ( mgr->loadPixmap("SMESH", tr("ICON_APPEND"))); - QPixmap removeImage ( mgr->loadPixmap("SMESH", tr("ICON_REMOVE"))); - - myType = -1; - - setCaption(tr("EXTRUSION_ALONG_PATH")); - setSizeGripEnabled(TRUE); - - QGridLayout* topLayout = new QGridLayout(this); - topLayout->setSpacing(6); - topLayout->setMargin(11); - - /***************************************************************/ - // Elements type group box (1d / 2d elements) - GroupConstructors = new QButtonGroup(tr("SMESH_EXTRUSION"), this); - GroupConstructors->setColumnLayout(0, Qt::Vertical); - GroupConstructors->layout()->setSpacing(0); - GroupConstructors->layout()->setMargin(0); - QGridLayout* GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout()); - GroupConstructorsLayout->setAlignment(Qt::AlignTop); - GroupConstructorsLayout->setSpacing(6); GroupConstructorsLayout->setMargin(11); - - Elements1dRB = new QRadioButton(GroupConstructors); - Elements1dRB->setPixmap(edgeImage); - Elements2dRB = new QRadioButton(GroupConstructors); - Elements2dRB->setPixmap(faceImage); - Elements1dRB->setChecked(true); - - // layouting - GroupConstructorsLayout->addWidget(Elements1dRB, 0, 0); - GroupConstructorsLayout->addWidget(Elements2dRB, 0, 2); - - /***************************************************************/ - // Arguments group box - GroupArguments = new QGroupBox(tr("EXTRUSION_1D"), this); - GroupArguments->setColumnLayout(0, Qt::Vertical); - GroupArguments->layout()->setSpacing(0); GroupArguments->layout()->setMargin(0); - QGridLayout* GroupArgumentsLayout = new QGridLayout(GroupArguments->layout()); - GroupArgumentsLayout->setAlignment(Qt::AlignTop); - GroupArgumentsLayout->setSpacing(6); GroupArgumentsLayout->setMargin(11); - - // Controls for elements selection - ElementsLab = new QLabel(tr("SMESH_ID_ELEMENTS"), GroupArguments); - - SelectElementsButton = new QToolButton(GroupArguments); - SelectElementsButton->setPixmap(selectImage); - - ElementsLineEdit = new QLineEdit(GroupArguments); - ElementsLineEdit->setValidator(new SMESHGUI_IdValidator(this)); - - // Controls for the whole mesh selection - MeshCheck = new QCheckBox(tr("SMESH_SELECT_WHOLE_MESH"), GroupArguments); - - // Controls for path selection - PathGrp = new QGroupBox(tr("SMESH_PATH"), GroupArguments); - PathGrp->setColumnLayout(0, Qt::Vertical); - PathGrp->layout()->setSpacing(0); PathGrp->layout()->setMargin(0); - QGridLayout* PathGrpLayout = new QGridLayout(PathGrp->layout()); - PathGrpLayout->setAlignment(Qt::AlignTop); - PathGrpLayout->setSpacing(6); PathGrpLayout->setMargin(11); - - // Controls for path mesh selection - PathMeshLab = new QLabel(tr("SMESH_PATH_MESH"), PathGrp); - - SelectPathMeshButton = new QToolButton(PathGrp); - SelectPathMeshButton->setPixmap(selectImage); - - PathMeshLineEdit = new QLineEdit(PathGrp); - PathMeshLineEdit->setReadOnly(true); - - // Controls for path shape selection - PathShapeLab = new QLabel(tr("SMESH_PATH_SHAPE"), PathGrp); - - SelectPathShapeButton = new QToolButton(PathGrp); - SelectPathShapeButton->setPixmap(selectImage); - - PathShapeLineEdit = new QLineEdit(PathGrp); - PathShapeLineEdit->setReadOnly(true); - - // Controls for path starting point selection - StartPointLab = new QLabel(tr("SMESH_PATH_START"), PathGrp); - - SelectStartPointButton = new QToolButton(PathGrp); - SelectStartPointButton->setPixmap(selectImage); - - StartPointLineEdit = new QLineEdit(PathGrp); - StartPointLineEdit->setValidator(new QIntValidator(this)); - - // layouting - PathGrpLayout->addWidget(PathMeshLab, 0, 0); - PathGrpLayout->addWidget(SelectPathMeshButton, 0, 1); - PathGrpLayout->addWidget(PathMeshLineEdit, 0, 2); - PathGrpLayout->addWidget(PathShapeLab, 1, 0); - PathGrpLayout->addWidget(SelectPathShapeButton, 1, 1); - PathGrpLayout->addWidget(PathShapeLineEdit, 1, 2); - PathGrpLayout->addWidget(StartPointLab, 2, 0); - PathGrpLayout->addWidget(SelectStartPointButton, 2, 1); - PathGrpLayout->addWidget(StartPointLineEdit, 2, 2); - - // Controls for base point defining - BasePointCheck = new QCheckBox(tr("SMESH_USE_BASE_POINT"), GroupArguments); - - BasePointGrp = new QGroupBox(tr("SMESH_BASE_POINT"), GroupArguments); - BasePointGrp->setColumnLayout(0, Qt::Vertical); - BasePointGrp->layout()->setSpacing(0); BasePointGrp->layout()->setMargin(0); - QGridLayout* BasePointGrpLayout = new QGridLayout(BasePointGrp->layout()); - BasePointGrpLayout->setAlignment(Qt::AlignTop); - BasePointGrpLayout->setSpacing(6); BasePointGrpLayout->setMargin(11); - - SelectBasePointButton = new QToolButton(BasePointGrp); - SelectBasePointButton->setPixmap(selectImage); - - XLab = new QLabel(tr("SMESH_X"), BasePointGrp); - XSpin = new SMESHGUI_SpinBox(BasePointGrp); - YLab = new QLabel(tr("SMESH_Y"), BasePointGrp); - YSpin = new SMESHGUI_SpinBox(BasePointGrp); - ZLab = new QLabel(tr("SMESH_Z"), BasePointGrp); - ZSpin = new SMESHGUI_SpinBox(BasePointGrp); - - // layouting - BasePointGrpLayout->addWidget(SelectBasePointButton, 0, 0); - BasePointGrpLayout->addWidget(XLab, 0, 1); - BasePointGrpLayout->addWidget(XSpin, 0, 2); - BasePointGrpLayout->addWidget(YLab, 0, 3); - BasePointGrpLayout->addWidget(YSpin, 0, 4); - BasePointGrpLayout->addWidget(ZLab, 0, 5); - BasePointGrpLayout->addWidget(ZSpin, 0, 6); - - // Controls for angles defining - AnglesCheck = new QCheckBox(tr("SMESH_USE_ANGLES"), GroupArguments); - - AnglesGrp = new QGroupBox(tr("SMESH_ANGLES"), GroupArguments); - AnglesGrp->setColumnLayout(0, Qt::Vertical); - AnglesGrp->layout()->setSpacing(0); AnglesGrp->layout()->setMargin(0); - QGridLayout* AnglesGrpLayout = new QGridLayout(AnglesGrp->layout()); - AnglesGrpLayout->setAlignment(Qt::AlignTop); - AnglesGrpLayout->setSpacing(6); AnglesGrpLayout->setMargin(11); - - AnglesList = new QListBox(AnglesGrp); - AnglesList->setSelectionMode(QListBox::Extended); - - AddAngleButton = new QToolButton(AnglesGrp); - AddAngleButton->setPixmap(addImage); - - RemoveAngleButton = new QToolButton(AnglesGrp); - RemoveAngleButton->setPixmap(removeImage); - - AngleSpin = new SMESHGUI_SpinBox(AnglesGrp); - - // layouting - QVBoxLayout* bLayout = new QVBoxLayout(); - bLayout->addWidget(AddAngleButton); - bLayout->addSpacing(6); - bLayout->addWidget(RemoveAngleButton); - bLayout->addStretch(); - AnglesGrpLayout->addMultiCellWidget(AnglesList, 0, 1, 0, 0); - AnglesGrpLayout->addMultiCellLayout(bLayout, 0, 1, 1, 1); - AnglesGrpLayout->addWidget( AngleSpin, 0, 2 ); - AnglesGrpLayout->setRowStretch(1, 10); - - // layouting - GroupArgumentsLayout->addWidget( ElementsLab, 0, 0 ); - GroupArgumentsLayout->addWidget( SelectElementsButton, 0, 1 ); - GroupArgumentsLayout->addWidget( ElementsLineEdit, 0, 2 ); - GroupArgumentsLayout->addMultiCellWidget(MeshCheck, 1, 1, 0, 2); - GroupArgumentsLayout->addMultiCellWidget(PathGrp, 2, 2, 0, 2); - GroupArgumentsLayout->addWidget( BasePointCheck, 3, 0 ); - GroupArgumentsLayout->addMultiCellWidget(BasePointGrp, 3, 4, 1, 2); - GroupArgumentsLayout->addWidget( AnglesCheck, 5, 0 ); - GroupArgumentsLayout->addMultiCellWidget(AnglesGrp, 5, 6, 1, 2); - GroupArgumentsLayout->setRowStretch(6, 10); - - /***************************************************************/ - // common buttons group box - GroupButtons = new QGroupBox(this); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); GroupButtonsLayout->setMargin(11); - - OkButton = new QPushButton(tr("SMESH_BUT_OK"), GroupButtons); - OkButton->setAutoDefault(true); - OkButton->setDefault(true); - - ApplyButton = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons); - ApplyButton->setAutoDefault(true); - - CloseButton = new QPushButton(tr("SMESH_BUT_CLOSE"), GroupButtons); - CloseButton->setAutoDefault(true); - - // layouting - GroupButtonsLayout->addWidget(OkButton, 0, 0); - GroupButtonsLayout->addWidget(ApplyButton, 0, 1); - GroupButtonsLayout->addWidget(CloseButton, 0, 3); - GroupButtonsLayout->addColSpacing(2, 10); - GroupButtonsLayout->setColStretch(2, 10); - - /***************************************************************/ - // layouting - topLayout->addWidget(GroupConstructors, 0, 0); - topLayout->addWidget(GroupArguments, 1, 0); - topLayout->addWidget(GroupButtons, 2, 0); - - /***************************************************************/ - // Initialisations - XSpin->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - YSpin->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - ZSpin->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - AngleSpin->RangeStepAndValidator(-999999.999, +999999.999, 5.0, 3); - - mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); - - mySMESHGUI->SetActiveDialogBox(this); - - // Costruction of the logical filter for the elements: mesh/sub-mesh/group - 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); - - myElementsFilter = new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR); - myPathMeshFilter = new SMESH_TypeFilter (MESH); - - Init(); - - /***************************************************************/ - // signals-slots connections - connect(OkButton, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(CloseButton, SIGNAL(clicked()), this, SLOT(reject())); - connect(ApplyButton, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - - connect(AddAngleButton, SIGNAL(clicked()), this, SLOT(OnAngleAdded())); - connect(RemoveAngleButton, SIGNAL(clicked()), this, SLOT(OnAngleRemoved())); - - connect(GroupConstructors, SIGNAL(clicked(int)), SLOT(ConstructorsClicked(int))); - - connect(SelectElementsButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectPathMeshButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectPathShapeButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectStartPointButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectBasePointButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - - connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(reject())); - - connect(ElementsLineEdit, SIGNAL(textChanged(const QString&)), - SLOT(onTextChange(const QString&))); - connect(StartPointLineEdit, SIGNAL(textChanged(const QString&)), - SLOT(onTextChange(const QString&))); - - connect(MeshCheck, SIGNAL(toggled(bool)), SLOT(onSelectMesh())); - connect(AnglesCheck, SIGNAL(toggled(bool)), SLOT(onAnglesCheck())); - connect(BasePointCheck, SIGNAL(toggled(bool)), SLOT(onBasePointCheck())); - - AnglesList->installEventFilter(this); - ElementsLineEdit->installEventFilter(this); - StartPointLineEdit->installEventFilter(this); - XSpin->editor()->installEventFilter(this); - YSpin->editor()->installEventFilter(this); - ZSpin->editor()->installEventFilter(this); - - /***************************************************************/ - // set position and show dialog box - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); // displays Dialog -} - -//================================================================================= -// function : ~SMESHGUI_ExtrusionAlongPathDlg() -// purpose : destructor -//================================================================================= -SMESHGUI_ExtrusionAlongPathDlg::~SMESHGUI_ExtrusionAlongPathDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : initialization -//================================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::Init (bool ResetControls) -{ - myBusy = false; - myEditCurrentArgument = 0; - - myMesh = SMESH::SMESH_Mesh::_nil(); - myIDSource = SMESH::SMESH_IDSource::_nil(); - myMeshActor = 0; - myPathMesh = SMESH::SMESH_Mesh::_nil(); - myPathShape = GEOM::GEOM_Object::_nil(); - - ElementsLineEdit->clear(); - PathMeshLineEdit->clear(); - PathShapeLineEdit->clear(); - StartPointLineEdit->clear(); - - if (ResetControls) { - XSpin->SetValue(0.0); - YSpin->SetValue(0.0); - ZSpin->SetValue(0.0); - - AngleSpin->SetValue(45); - MeshCheck->setChecked(false); - ConstructorsClicked(0); - onSelectMesh(); - onAnglesCheck(); - onBasePointCheck(); - } - SetEditCurrentArgument(0); -} - -//================================================================================= -// function : ConstructorsClicked() -// purpose : Called when user changes type of elements (1d / 2d) -//================================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::ConstructorsClicked (int type) -{ - if (myType == type) return; - - disconnect(mySelectionMgr, 0, this, 0); - - if (type == 0) - GroupArguments->setTitle(tr("EXTRUSION_1D")); - else if (type == 1) - GroupArguments->setTitle(tr("EXTRUSION_2D")); - - // clear elements ID list - if (!MeshCheck->isChecked()) { - ElementsLineEdit->clear(); - } - // set selection mode if necessary - if (myEditCurrentArgument == ElementsLineEdit) { - mySelectionMgr->clearSelected(); - mySelectionMgr->clearFilters(); - SMESH::SetPickable(); - - SMESH::SetPointRepresentation(false); - if (MeshCheck->isChecked()) { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myElementsFilter); - } else { - if (type == 0) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(EdgeSelection); - } - if (type == 1) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(FaceSelection); - } - } - } - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - - myType = type; -} - -//================================================================================= -// function : ClickOnApply() -// purpose : Called when user presses button -//================================================================================= -bool SMESHGUI_ExtrusionAlongPathDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return false; - - if (myMesh->_is_nil() || MeshCheck->isChecked() && myIDSource->_is_nil() || - !myMeshActor || myPathMesh->_is_nil() || myPathShape->_is_nil()) - return false; - - SMESH::long_array_var anElementsId = new SMESH::long_array; - - if (MeshCheck->isChecked()) { - // If "Select whole mesh, submesh or group" check box is on -> - // get all elements of the required type from the object selected - - // if MESH object is selected - if (!CORBA::is_nil(SMESH::SMESH_Mesh::_narrow(myIDSource))) { - // get mesh - SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow(myIDSource); - // get IDs from mesh... - if (Elements1dRB->isChecked()) - // 1d elements - anElementsId = aMesh->GetElementsByType(SMESH::EDGE); - else if (Elements2dRB->isChecked()) { - anElementsId = aMesh->GetElementsByType(SMESH::FACE); - } - } - // SUBMESH is selected - if (!CORBA::is_nil(SMESH::SMESH_subMesh::_narrow(myIDSource))) { - // get submesh - SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(myIDSource); - // get IDs from submesh - if (Elements1dRB->isChecked()) - // 1d elements - anElementsId = aSubMesh->GetElementsByType(SMESH::EDGE); - else if (Elements2dRB->isChecked()) - // 2d elements - anElementsId = aSubMesh->GetElementsByType(SMESH::FACE); - } - // GROUP is selected - if (!CORBA::is_nil(SMESH::SMESH_GroupBase::_narrow(myIDSource))) { - // get smesh group - SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(myIDSource); - // get IDs from group - // 1d elements or 2d elements - if (Elements1dRB->isChecked() && aGroup->GetType() == SMESH::EDGE || - Elements2dRB->isChecked() && aGroup->GetType() == SMESH::FACE) - anElementsId = aGroup->GetListOfID(); - } - } else { - // If "Select whole mesh, submesh or group" check box is off -> - // use only elements of given type selected by user - - SMDS_Mesh* aMesh = myMeshActor->GetObject()->GetMesh(); - if (aMesh) { - QStringList aListElementsId = QStringList::split(" ", ElementsLineEdit->text(), false); - anElementsId = new SMESH::long_array; - anElementsId->length(aListElementsId.count()); - bool bOk; - int j = 0; - for (int i = 0; i < aListElementsId.count(); i++) { - long ind = aListElementsId[ i ].toLong(&bOk); - if (bOk) { - const SMDS_MeshElement* e = aMesh->FindElement(ind); - if (e) { - bool typeMatch = Elements1dRB->isChecked() && e->GetType() == SMDSAbs_Edge || - Elements2dRB->isChecked() && e->GetType() == SMDSAbs_Face; - if (typeMatch) - anElementsId[ j++ ] = ind; - } - } - } - anElementsId->length(j); - } - } - - if (anElementsId->length() <= 0) { - return false; - } - - if (StartPointLineEdit->text().stripWhiteSpace().isEmpty()) { - return false; - } - - bool bOk; - long aNodeStart = StartPointLineEdit->text().toLong(&bOk); - if (!bOk) { - return false; - } - - // get angles - SMESH::double_array_var anAngles = new SMESH::double_array; - if (AnglesCheck->isChecked()) { - anAngles->length(AnglesList->count()); - int j = 0; - bool bOk; - for (int i = 0; i < AnglesList->count(); i++) { - double angle = AnglesList->text(i).toDouble(&bOk); - if (bOk) - anAngles[ j++ ] = angle*PI/180; - } - anAngles->length(j); - } - - // get base point - SMESH::PointStruct aBasePoint; - if (BasePointCheck->isChecked()) { - aBasePoint.x = XSpin->GetValue(); - aBasePoint.y = YSpin->GetValue(); - aBasePoint.z = ZSpin->GetValue(); - } - - 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); - - //wc.stop(); - wc.suspend(); - switch (retVal) { - case SMESH::SMESH_MeshEditor::EXTR_NO_ELEMENTS: - SUIT_MessageBox::warn1(SMESHGUI::desktop(), - tr("SMESH_ERROR"), - tr("NO_ELEMENTS_SELECTED"), - tr("SMESH_BUT_OK")); - return false; break; - case SMESH::SMESH_MeshEditor::EXTR_PATH_NOT_EDGE: - SUIT_MessageBox::warn1(SMESHGUI::desktop(), - tr("SMESH_ERROR"), - tr("SELECTED_PATH_IS_NOT_EDGE"), - tr("SMESH_BUT_OK")); - return false; break; - case SMESH::SMESH_MeshEditor::EXTR_BAD_PATH_SHAPE: - SUIT_MessageBox::warn1(SMESHGUI::desktop(), - tr("SMESH_ERROR"), - tr("BAD_SHAPE_TYPE"), - tr("SMESH_BUT_OK")); - return false; break; - case SMESH::SMESH_MeshEditor::EXTR_BAD_STARTING_NODE: - SUIT_MessageBox::warn1(SMESHGUI::desktop(), - tr("SMESH_ERROR"), - tr("EXTR_BAD_STARTING_NODE"), - tr("SMESH_BUT_OK")); - return false; break; - case SMESH::SMESH_MeshEditor::EXTR_BAD_ANGLES_NUMBER: - SUIT_MessageBox::warn1(SMESHGUI::desktop(), - tr("SMESH_ERROR"), - tr("WRONG_ANGLES_NUMBER"), - tr("SMESH_BUT_OK")); - return false; break; - case SMESH::SMESH_MeshEditor::EXTR_CANT_GET_TANGENT: - SUIT_MessageBox::warn1(SMESHGUI::desktop(), - tr("SMESH_ERROR"), - tr("CANT_GET_TANGENT"), - tr("SMESH_BUT_OK")); - return false; break; - case SMESH::SMESH_MeshEditor::EXTR_OK: - break; - } - } catch (...) { - return false; - } - - mySelectionMgr->clearSelected(); - SMESH::UpdateView(); - Init(false); - ConstructorsClicked(GetConstructorId()); - return true; -} - -//================================================================================= -// function : ClickOnOk() -// purpose : Called when user presses button -//================================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::ClickOnOk() -{ - if (ClickOnApply()) - reject(); -} - -//================================================================================= -// function : reject() -// purpose : Called when dialog box is closed -//================================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::reject() -{ - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearFilters(); - mySelectionMgr->clearSelected(); - SMESH::SetPickable(); // ??? - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySMESHGUI->ResetState(); - QDialog::reject(); -} - -//======================================================================= -// function : onTextChange() -// purpose : -//======================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::onTextChange (const QString& theNewText) -{ - QLineEdit* send = (QLineEdit*)sender(); - - // return if busy - if (myBusy) return; - - // set busy flag - SetBusy sb (this); - - if (send != StartPointLineEdit && send != ElementsLineEdit) - send = ElementsLineEdit; - - if (send == ElementsLineEdit && myEditCurrentArgument == ElementsLineEdit) { - // hilight entered elements - SMDS_Mesh* aMesh = 0; - if (myMeshActor) - aMesh = myMeshActor->GetObject()->GetMesh(); - - if (aMesh) { - //mySelectionMgr->clearSelected(); - //mySelectionMgr->AddIObject(myMeshActor->getIO()); - SALOME_ListIO aList; - aList.Append(myMeshActor->getIO()); - mySelectionMgr->setSelectedObjects(aList, false); - - QStringList aListId = QStringList::split(" ", theNewText, false); - bool bOk; - const Handle(SALOME_InteractiveObject)& anIO = myMeshActor->getIO(); - TColStd_MapOfInteger newIndices; - for (int i = 0; i < aListId.count(); i++) { - long ind = aListId[ i ].toLong(&bOk); - if (bOk) { - const SMDS_MeshElement* e = aMesh->FindElement(ind); - if (e) { - // check also type of element - bool typeMatch = Elements1dRB->isChecked() && e->GetType() == SMDSAbs_Edge || - Elements2dRB->isChecked() && e->GetType() == SMDSAbs_Face; - if (typeMatch) - newIndices.Add(e->GetID()); - } - } - } - mySelector->AddOrRemoveIndex(anIO, newIndices, false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( anIO, true, true ); - } - } else if (send == StartPointLineEdit && - myEditCurrentArgument == StartPointLineEdit) { - if (!myPathMesh->_is_nil()) { - SMESH_Actor* aPathActor = SMESH::FindActorByObject(myPathMesh); - SMDS_Mesh* aMesh = 0; - if (aPathActor) - aMesh = aPathActor->GetObject()->GetMesh(); - if (aMesh) { - //mySelectionMgr->clearSelected(); - //mySelectionMgr->AddIObject(aPathActor->getIO()); - SALOME_ListIO aList; - aList.Append(aPathActor->getIO()); - mySelectionMgr->setSelectedObjects(aList, false); - - bool bOk; - long ind = theNewText.toLong(&bOk); - if (bOk) { - const SMDS_MeshNode* n = aMesh->FindNode(ind); - if (n) { - //if (!mySelectionMgr->IsIndexSelected(aPathActor->getIO(), n->GetID())) { - TColStd_MapOfInteger newIndices; - newIndices.Add(n->GetID()); - mySelector->AddOrRemoveIndex( aPathActor->getIO(), newIndices, false ); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( aPathActor->getIO(), true, true ); - } - } - } - } - } -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::SelectionIntoArgument() -{ - if (myBusy) return; - - // return if dialog box is inactive - if (!GroupButtons->isEnabled()) - return; - - // selected objects count - const SALOME_ListIO& aList = mySelector->StoredIObjects(); - int nbSel = aList.Extent(); - if (nbSel != 1) - return; - - // set busy flag - SetBusy sb (this); - - if (myEditCurrentArgument == ElementsLineEdit) { - // we are now selecting mesh elements (or whole mesh/submesh/group) - // reset - ElementsLineEdit->clear(); - myMesh = SMESH::SMESH_Mesh::_nil(); - myIDSource = SMESH::SMESH_IDSource::_nil(); - myMeshActor = 0; - - // try to get mesh from selection - Handle(SALOME_InteractiveObject) IO = aList.First(); - myMesh = SMESH::GetMeshByIO(IO); - if (myMesh->_is_nil()) - return; - // find actor - myMeshActor = SMESH::FindActorByObject(myMesh); - if (!myMeshActor) - return; - - if (MeshCheck->isChecked()) { - // If "Select whole mesh, submesh or group" check box is on -> - // get ID source and put it's name to the edit box - QString aString; - SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - - myIDSource = SMESH::IObjectToInterface(IO); - ElementsLineEdit->setText(aString); - } else { - // If "Select whole mesh, submesh or group" check box is off -> - // try to get selected elements IDs - QString aString; - //int aNbUnits = SMESH::GetNameOfSelectedElements(mySelectionMgr, aString); - SMESH::GetNameOfSelectedElements(mySelector, myMeshActor->getIO(), aString); - ElementsLineEdit->setText(aString); - } - } else if (myEditCurrentArgument == PathMeshLineEdit) { - // we are now selecting path mesh - // reset - PathMeshLineEdit->clear(); - myPathMesh = SMESH::SMESH_Mesh::_nil(); - PathShapeLineEdit->clear(); - myPathShape = GEOM::GEOM_Object::_nil(); - StartPointLineEdit->clear(); - - // try to get mesh from selection - Handle(SALOME_InteractiveObject) IO = aList.First(); - myPathMesh = SMESH::IObjectToInterface(IO); - if(myPathMesh->_is_nil()) - return; - - QString aString; - SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - PathMeshLineEdit->setText(aString); - } else if (myEditCurrentArgument == PathShapeLineEdit) { - // we are now selecting path mesh - // reset - PathShapeLineEdit->clear(); - myPathShape = GEOM::GEOM_Object::_nil(); - StartPointLineEdit->clear(); - - // return if path mesh is not yet selected - if (myPathMesh->_is_nil()) - return; - - // try to get shape from selection - Handle(SALOME_InteractiveObject) IO = aList.First(); - myPathShape = SMESH::IObjectToInterface(IO); - if (myPathShape->_is_nil()) - return; - - QString aString; - SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - PathShapeLineEdit->setText(aString); - } else if (myEditCurrentArgument == StartPointLineEdit) { - // we are now selecting start point of path - // reset - StartPointLineEdit->clear(); - - // return if path mesh or path shape is not yet selected - if (myPathMesh->_is_nil() || myPathShape->_is_nil()) - return; - - // try to get shape from selection - Handle(SALOME_InteractiveObject) IO = aList.First(); - - QString aString; - int aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, myMeshActor->getIO(), aString); - if (aNbUnits == 1) - StartPointLineEdit->setText(aString.stripWhiteSpace()); - - } else if (myEditCurrentArgument == XSpin) { - // we are now selecting base point - // reset is not performed here! - - // return if is not enabled - if (!BasePointGrp->isEnabled()) - return; - - // try to get shape from selection - Handle(SALOME_InteractiveObject) IO = aList.First(); - - // check if geom vertex is selected - GEOM::GEOM_Object_var aGeomObj = SMESH::IObjectToInterface(IO); - TopoDS_Vertex aVertex; - if (!aGeomObj->_is_nil()) { - if (aGeomObj->IsShape() && GEOMBase::GetShape(aGeomObj, aVertex) && !aVertex.IsNull()) { - gp_Pnt aPnt = BRep_Tool::Pnt(aVertex); - XSpin->SetValue(aPnt.X()); - YSpin->SetValue(aPnt.Y()); - ZSpin->SetValue(aPnt.Z()); - } - return; - } - - // check if smesh node is selected - SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(IO); - if (aMesh->_is_nil()) - return; - - QString aString; - int aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myMeshActor->getIO(), aString); - // return if more than one node is selected - if (aNbUnits != 1) - return; - - SMESH_Actor* aMeshActor = SMESH::FindActorByObject(aMesh); - if (!aMeshActor) - return; - - SMDS_Mesh* mesh = aMeshActor->GetObject()->GetMesh(); - if (!mesh) - return; - - const SMDS_MeshNode* n = mesh->FindNode(aString.toLong()); - if (!n) - return; - - XSpin->SetValue(n->X()); - YSpin->SetValue(n->Y()); - ZSpin->SetValue(n->Z()); - } -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::SetEditCurrentArgument() -{ - QToolButton* send = (QToolButton*)sender(); - if (send != SelectElementsButton && - send != SelectPathMeshButton && - send != SelectPathShapeButton && - send != SelectStartPointButton && - send != SelectBasePointButton) - return; - SetEditCurrentArgument(send); -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::SetEditCurrentArgument (QToolButton* button) -{ - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearSelected(); - mySelectionMgr->clearFilters(); - SMESH::SetPickable(); - - if (button == SelectElementsButton) { - myEditCurrentArgument = ElementsLineEdit; - SMESH::SetPointRepresentation(false); - if (MeshCheck->isChecked()) { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myElementsFilter); - } else { - if (Elements1dRB->isChecked()) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(EdgeSelection); - } - else if (Elements2dRB->isChecked()) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(FaceSelection); - } - } - } else if (button == SelectPathMeshButton) { - myEditCurrentArgument = PathMeshLineEdit; - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myPathMeshFilter); - } - else if (button == SelectPathShapeButton) { - myEditCurrentArgument = PathShapeLineEdit; - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - - if (!myPathMesh->_is_nil()) { - GEOM::GEOM_Object_var aMainShape = myPathMesh->GetShapeToMesh(); - SMESH_Actor* aPathActor = SMESH::FindActorByObject(myPathMesh); - - if (!aMainShape->_is_nil() && aPathActor) - mySelectionMgr->installFilter(new SMESH_NumberFilter ("GEOM", TopAbs_SHAPE, -1, - TopAbs_EDGE, aMainShape)); - //SMESH::SetPickable(aPathActor); - } - } - else if (button == SelectStartPointButton) { - myEditCurrentArgument = StartPointLineEdit; - if (!myPathMesh->_is_nil()) { - SMESH_Actor* aPathActor = SMESH::FindActorByObject(myPathMesh); - if (aPathActor) { - SMESH::SetPointRepresentation(true); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - SMESH::SetPickable(aPathActor); - } - } - } - else if (button == SelectBasePointButton) { - myEditCurrentArgument = XSpin; - SMESH::SetPointRepresentation(true); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - - SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter(MESHorSUBMESH); - SMESH_TypeFilter* aSmeshGroupFilter = new SMESH_TypeFilter(GROUP); - SMESH_NumberFilter* aVertexFilter = new SMESH_NumberFilter ("GEOM", TopAbs_SHAPE, - -1, TopAbs_VERTEX); - QPtrList aListOfFilters; - if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter); - if (aSmeshGroupFilter) aListOfFilters.append(aSmeshGroupFilter); - if (aVertexFilter) aListOfFilters.append(aVertexFilter); - - mySelectionMgr->installFilter(new SMESH_LogicalFilter - (aListOfFilters, SMESH_LogicalFilter::LO_OR)); - } - - if (myEditCurrentArgument && !myEditCurrentArgument->hasFocus()) - myEditCurrentArgument->setFocus(); - - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - SelectionIntoArgument(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : Deactivates this dialog -//================================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::DeactivateActiveDialog() -{ - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); - GroupArguments->setEnabled(false); - GroupButtons->setEnabled(false); - mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : Activates this dialog -//================================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::ActivateThisDialog() -{ - // Emit a signal to deactivate the active dialog - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupConstructors->setEnabled(true); - GroupArguments->setEnabled(true); - GroupButtons->setEnabled(true); - - mySMESHGUI->SetActiveDialogBox(this); - - ConstructorsClicked(GetConstructorId()); - SelectionIntoArgument(); -} - -//================================================================================= -// function : enterEvent() -// purpose : Mouse enter event -//================================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::enterEvent (QEvent*) -{ - if (!GroupConstructors->isEnabled()) - ActivateThisDialog(); -} - -//======================================================================= -// function : onSelectMesh() -// purpose : -//======================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::onSelectMesh() -{ - bool toSelectMesh = MeshCheck->isChecked(); - - ElementsLineEdit->setReadOnly(toSelectMesh); - ElementsLab->setText(toSelectMesh ? tr("SMESH_NAME") : tr("SMESH_ID_ELEMENTS")); - ElementsLineEdit->clear(); - - SetEditCurrentArgument(SelectElementsButton); -} - -//================================================================================= -// function : GetConstructorId() -// purpose : -//================================================================================= -int SMESHGUI_ExtrusionAlongPathDlg::GetConstructorId() -{ - if (GroupConstructors != NULL && GroupConstructors->selected() != NULL) - return GroupConstructors->id(GroupConstructors->selected()); - return -1; -} - -//======================================================================= -// function : onAnglesCheck() -// purpose : called when "Use Angles" check box is switched -//======================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::onAnglesCheck() -{ - AnglesGrp->setEnabled(AnglesCheck->isChecked()); -} - -//======================================================================= -// function : onBasePointCheck() -// purpose : called when "Use Base Point" check box is switched -//======================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::onBasePointCheck() -{ - BasePointGrp->setEnabled(BasePointCheck->isChecked()); -} - -//======================================================================= -// function : OnAngleAdded() -// purpose : Called when user adds angle to the list -//======================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::OnAngleAdded() -{ - AnglesList->insertItem(QString::number(AngleSpin->GetValue())); -} - -//======================================================================= -// function : OnAngleRemoved() -// purpose : Called when user removes angle(s) from the list -//======================================================================= -void SMESHGUI_ExtrusionAlongPathDlg::OnAngleRemoved() -{ - QList aList; - aList.setAutoDelete(false); - for (int i = 0; i < AnglesList->count(); i++) - if (AnglesList->isSelected(i)) - aList.append(AnglesList->item(i)); - - for (int i = 0; i < aList.count(); i++) - delete aList.at(i); -} - -//================================================================================= -// function : eventFilter() -// purpose : event filter ??? -//================================================================================= -bool SMESHGUI_ExtrusionAlongPathDlg::eventFilter (QObject* object, QEvent* event) -{ - if (event->type() == QEvent::KeyPress) { - QKeyEvent* ke = (QKeyEvent*)event; - if (object == AnglesList) { - if (ke->key() == Key_Delete) - OnAngleRemoved(); - } - } - else if (event->type() == QEvent::FocusIn) { - if (object == ElementsLineEdit) { - if (myEditCurrentArgument != ElementsLineEdit) - SetEditCurrentArgument(SelectElementsButton); - } - else if (object == StartPointLineEdit) { - if (myEditCurrentArgument != StartPointLineEdit) - SetEditCurrentArgument(SelectStartPointButton); - } - else if (object == XSpin->editor() || object == YSpin->editor() || object == ZSpin->editor()) { - if (myEditCurrentArgument != XSpin) - SetEditCurrentArgument(SelectBasePointButton); - } - } - return QDialog::eventFilter(object, event); -} diff --git a/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.h b/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.h deleted file mode 100644 index 91ba5084c..000000000 --- a/src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.h +++ /dev/null @@ -1,165 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_ExtrusionAlongPathDlg.h -// Author : Vadim SANDLER -// Module : SMESH -// $Header: - -#ifndef DIALOGBOX_EXTRUSION_PATH_H -#define DIALOGBOX_EXTRUSION_PATH_H - -#include "SalomeApp_SelectionMgr.h" -#include "SUIT_SelectionFilter.h" - -// QT Includes -#include - -class QButtonGroup; -class QRadioButton; -class QGroupBox; -class QLabel; -class QToolButton; -class QLineEdit; -class QCheckBox; -class QListBox; -class QPushButton; - -class SMESHGUI; -class SMESH_Actor; -class SMESHGUI_SpinBox; -class SVTK_ViewWindow; -class SVTK_Selector; - - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -//================================================================================= -// class : SMESHGUI_ExtrusionAlongPathDlg -// purpose : -//================================================================================= -class SMESHGUI_ExtrusionAlongPathDlg : public QDialog -{ - Q_OBJECT - - class SetBusy { - public: - SetBusy (SMESHGUI_ExtrusionAlongPathDlg* _dlg) { myDlg = _dlg; myDlg->myBusy = true; } - ~SetBusy() { myDlg->myBusy = false; } - private: - SMESHGUI_ExtrusionAlongPathDlg* myDlg; - }; - friend class SetBusy; - -public: - SMESHGUI_ExtrusionAlongPathDlg (SMESHGUI*, - bool modal = FALSE); - ~SMESHGUI_ExtrusionAlongPathDlg(); - - bool eventFilter (QObject* object, QEvent* event); - -private: - void Init (bool ResetControls = true); - void enterEvent (QEvent*); /* mouse enter the QWidget */ - int GetConstructorId(); - void SetEditCurrentArgument (QToolButton* button); - - SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ - SalomeApp_SelectionMgr* mySelectionMgr; /* User shape selection */ - SVTK_Selector* mySelector; - - QWidget* myEditCurrentArgument; /* Current argument */ - - bool myBusy; - SMESH::SMESH_Mesh_var myMesh; - SMESH_Actor* myMeshActor; - SMESH::SMESH_IDSource_var myIDSource; - SMESH::SMESH_Mesh_var myPathMesh; - GEOM::GEOM_Object_var myPathShape; - SUIT_SelectionFilter* myElementsFilter; - SUIT_SelectionFilter* myPathMeshFilter; - int myType; - - // widgets - QButtonGroup* GroupConstructors; - QRadioButton* Elements1dRB; - QRadioButton* Elements2dRB; - - QGroupBox* GroupArguments; - QLabel* ElementsLab; - QToolButton* SelectElementsButton; - QLineEdit* ElementsLineEdit; - QCheckBox* MeshCheck; - QGroupBox* PathGrp; - QLabel* PathMeshLab; - QToolButton* SelectPathMeshButton; - QLineEdit* PathMeshLineEdit; - QLabel* PathShapeLab; - QToolButton* SelectPathShapeButton; - QLineEdit* PathShapeLineEdit; - QLabel* StartPointLab; - QToolButton* SelectStartPointButton; - QLineEdit* StartPointLineEdit; - QCheckBox* AnglesCheck; - QGroupBox* AnglesGrp; - QListBox* AnglesList; - QToolButton* AddAngleButton; - QToolButton* RemoveAngleButton; - SMESHGUI_SpinBox* AngleSpin; - QCheckBox* BasePointCheck; - QGroupBox* BasePointGrp; - QToolButton* SelectBasePointButton; - QLabel* XLab; - SMESHGUI_SpinBox* XSpin; - QLabel* YLab; - SMESHGUI_SpinBox* YSpin; - QLabel* ZLab; - SMESHGUI_SpinBox* ZSpin; - - QGroupBox* GroupButtons; - QPushButton* OkButton; - QPushButton* ApplyButton; - QPushButton* CloseButton; - -protected slots: - void reject(); - -private slots: - void ConstructorsClicked (int); - void ClickOnOk(); - bool ClickOnApply(); - void SetEditCurrentArgument(); - void SelectionIntoArgument(); - void DeactivateActiveDialog(); - void ActivateThisDialog(); - void onTextChange (const QString&); - void onSelectMesh(); - void onAnglesCheck(); - void onBasePointCheck(); - void OnAngleAdded(); - void OnAngleRemoved(); -}; - -#endif // DIALOGBOX_EXTRUSION_PATH_H diff --git a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx deleted file mode 100644 index 0caa16cc3..000000000 --- a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx +++ /dev/null @@ -1,757 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_ExtrusionDlg.cxx -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#include "SMESHGUI_ExtrusionDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_MeshUtils.h" -#include "SMESHGUI_SpinBox.h" -#include "SMESHGUI_IdValidator.h" - -#include "SMESH_Actor.h" -#include "SMESH_TypeFilter.hxx" -#include "SMESH_NumberFilter.hxx" -#include "SMESH_LogicalFilter.hxx" - -#include "SMDS_Mesh.hxx" - -#include "SUIT_ResourceMgr.h" -#include "SUIT_OverrideCursor.h" -#include "SUIT_Desktop.h" -#include "SUIT_MessageBox.h" - -#include "SVTK_ViewModel.h" -#include "SVTK_ViewWindow.h" -#include "SVTK_Selector.h" -#include "SVTK_Selection.h" -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// OCCT Includes -#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) - -using namespace std; - -//================================================================================= -// function : SMESHGUI_ExtrusionDlg() -// purpose : constructor -//================================================================================= -SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule, - bool modal) - : QDialog( SMESH::GetDesktop( theModule ), "SMESHGUI_ExtrusionDlg", modal, WStyle_Customize | - WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose), - mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) -{ - QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_EDGE"))); - QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_TRIANGLE"))); - QPixmap image2 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); - - resize(303, 185); - setCaption(tr("EXTRUSION_ALONG_LINE")); - setSizeGripEnabled(TRUE); - - QGridLayout* SMESHGUI_ExtrusionDlgLayout = new QGridLayout(this); - SMESHGUI_ExtrusionDlgLayout->setSpacing(6); - SMESHGUI_ExtrusionDlgLayout->setMargin(11); - - /***************************************************************/ - GroupConstructors = new QButtonGroup("GroupConstructors", this); - GroupConstructors->setTitle(tr("SMESH_EXTRUSION")); - GroupConstructors->setExclusive(TRUE); - GroupConstructors->setColumnLayout(0, Qt::Vertical); - GroupConstructors->layout()->setSpacing(0); - GroupConstructors->layout()->setMargin(0); - QGridLayout* GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout()); - GroupConstructorsLayout->setAlignment(Qt::AlignTop); - GroupConstructorsLayout->setSpacing(6); - GroupConstructorsLayout->setMargin(11); - RadioButton1= new QRadioButton(GroupConstructors, "RadioButton1"); - RadioButton1->setText(tr("")); - RadioButton1->setPixmap(image0); - GroupConstructorsLayout->addWidget(RadioButton1, 0, 0); - RadioButton2= new QRadioButton(GroupConstructors, "RadioButton2"); - RadioButton2->setText(tr("")); - RadioButton2->setPixmap(image1); - GroupConstructorsLayout->addWidget(RadioButton2, 0, 2); - SMESHGUI_ExtrusionDlgLayout->addWidget(GroupConstructors, 0, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - GroupButtons->setTitle(tr("")); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_APPLY" )); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - buttonOk = new QPushButton(GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_OK" )); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - SMESHGUI_ExtrusionDlgLayout->addWidget(GroupButtons, 2, 0); - - /***************************************************************/ - GroupArguments = new QGroupBox(this, "GroupArguments"); - GroupArguments->setTitle(tr("EXTRUSION_1D")); - GroupArguments->setColumnLayout(0, Qt::Vertical); - GroupArguments->layout()->setSpacing(0); - GroupArguments->layout()->setMargin(0); - QGridLayout* 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); - - SelectElementsButton = new QPushButton(GroupArguments, "SelectElementsButton"); - SelectElementsButton->setText(tr("" )); - SelectElementsButton->setPixmap(image2); - SelectElementsButton->setToggleButton(FALSE); - GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1); - - LineEditElements = new QLineEdit(GroupArguments, "LineEditElements"); - LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator")); - GroupArgumentsLayout->addMultiCellWidget(LineEditElements, 0, 0, 2, 7); - - // Control for the whole mesh selection - CheckBoxMesh = new QCheckBox(GroupArguments, "CheckBoxMesh"); - CheckBoxMesh->setText(tr("SMESH_SELECT_WHOLE_MESH" )); - GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 7); - - // Controls for vector selection - TextLabelVector = new QLabel(GroupArguments, "TextLabelVector"); - TextLabelVector->setText(tr("SMESH_VECTOR")); - GroupArgumentsLayout->addWidget(TextLabelVector, 2, 0); - - TextLabelDx = new QLabel(GroupArguments, "TextLabelDx"); - TextLabelDx->setText(tr("SMESH_DX")); - GroupArgumentsLayout->addWidget(TextLabelDx, 2, 2); - - SpinBox_Dx = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Dx"); - GroupArgumentsLayout->addWidget(SpinBox_Dx, 2, 3); - - TextLabelDy = new QLabel(GroupArguments, "TextLabelDy"); - TextLabelDy->setText(tr("SMESH_DY")); - GroupArgumentsLayout->addWidget(TextLabelDy, 2, 4); - - SpinBox_Dy = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Dy"); - GroupArgumentsLayout->addWidget(SpinBox_Dy, 2, 5); - - TextLabelDz = new QLabel(GroupArguments, "TextLabelDz"); - TextLabelDz->setText(tr("SMESH_DZ")); - GroupArgumentsLayout->addWidget(TextLabelDz, 2, 6); - - SpinBox_Dz = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Dz"); - GroupArgumentsLayout->addWidget(SpinBox_Dz, 2, 7); - - // Controls for nb. steps defining - TextLabelNbSteps = new QLabel(GroupArguments, "TextLabelNbSteps"); - TextLabelNbSteps->setText(tr("SMESH_NUMBEROFSTEPS" )); - GroupArgumentsLayout->addMultiCellWidget(TextLabelNbSteps, 3, 3, 0, 1); - - SpinBox_NbSteps = new QSpinBox(GroupArguments, "SpinBox_NbSteps"); - GroupArgumentsLayout->addMultiCellWidget(SpinBox_NbSteps, 3, 3, 2, 7); - - SMESHGUI_ExtrusionDlgLayout->addWidget(GroupArguments, 1, 0); - - /* Initialisations */ - SpinBox_Dx->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_Dy->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_Dz->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - - QIntValidator* anIntValidator = new QIntValidator(SpinBox_NbSteps); - SpinBox_NbSteps->setValidator(anIntValidator); - SpinBox_NbSteps->setRange(1, 999999); - - GroupArguments->show(); - RadioButton1->setChecked(TRUE); - - mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); - - mySMESHGUI->SetActiveDialogBox(this); - - // Costruction of the logical filter for the elements: mesh/sub-mesh/group - 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); - - Init(); - - /***************************************************************/ - // signals and slots connections - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect(GroupConstructors, SIGNAL(clicked(int)), SLOT(ConstructorsClicked(int))); - - connect(SelectElementsButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - /* to close dialog if study change */ - connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); - connect(LineEditElements, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); - connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool))); - - /***************************************************************/ - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); // displays Dialog - - ConstructorsClicked(0); -} - -//================================================================================= -// function : ~SMESHGUI_ExtrusionDlg() -// purpose : destructor -//================================================================================= -SMESHGUI_ExtrusionDlg::~SMESHGUI_ExtrusionDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : initialization -//================================================================================= -void SMESHGUI_ExtrusionDlg::Init (bool ResetControls) -{ - myBusy = false; - - LineEditElements->clear(); - myElementsId = ""; - myNbOkElements = 0; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - myActor = 0; - myMesh = SMESH::SMESH_Mesh::_nil(); - - if (ResetControls) { - SpinBox_NbSteps->setValue(1); - SpinBox_Dx->SetValue(0); - SpinBox_Dy->SetValue(0); - SpinBox_Dz->SetValue(0); - - CheckBoxMesh->setChecked(false); - onSelectMesh(false); - } -} - -//================================================================================= -// function : ConstructorsClicked() -// purpose : Radio button management -//================================================================================= -void SMESHGUI_ExtrusionDlg::ConstructorsClicked (int constructorId) -{ - disconnect(mySelectionMgr, 0, this, 0); - - switch (constructorId) { - case 0: - { - GroupArguments->setTitle(tr("EXTRUSION_1D")); - if (!CheckBoxMesh->isChecked()) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(EdgeSelection); - } - break; - } - case 1: - { - GroupArguments->setTitle(tr("EXTRUSION_2D")); - if (!CheckBoxMesh->isChecked()) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(FaceSelection); - } - break; - } - } - - myEditCurrentArgument = LineEditElements; - LineEditElements->setFocus(); - - if (CheckBoxMesh->isChecked()) - onSelectMesh(true); - - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); -} - -//================================================================================= -// function : ClickOnApply() -// purpose : Called when user presses button -//================================================================================= -bool SMESHGUI_ExtrusionDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - 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(); - aVector.PS.y = SpinBox_Dy->GetValue(); - aVector.PS.z = SpinBox_Dz->GetValue(); - - long aNbSteps = (long)SpinBox_NbSteps->value(); - - try { - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - QApplication::setOverrideCursor(Qt::waitCursor); - aMeshEditor->ExtrusionSweep(anElementsId.inout(), aVector, aNbSteps); - QApplication::restoreOverrideCursor(); - } catch (...) { - } - - mySelectionMgr->clearSelected(); - SMESH::UpdateView(); - Init(false); - ConstructorsClicked(GetConstructorId()); - } - return true; -} - -//================================================================================= -// function : ClickOnOk() -// purpose : Called when user presses button -//================================================================================= -void SMESHGUI_ExtrusionDlg::ClickOnOk() -{ - if (ClickOnApply()) - ClickOnCancel(); -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : Called when dialog box is closed -//================================================================================= -void SMESHGUI_ExtrusionDlg::ClickOnCancel() -{ - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearFilters(); - mySelectionMgr->clearSelected(); - SMESH::SetPickable(); // ??? - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySMESHGUI->ResetState(); - reject(); -} - -//================================================================================= -// function : onTextChange() -// purpose : -//================================================================================= -void SMESHGUI_ExtrusionDlg::onTextChange (const QString& theNewText) -{ - QLineEdit* send = (QLineEdit*)sender(); - - // return if busy - if (myBusy) return; - - // set busy flag - myBusy = true; - - if (send == LineEditElements) - myNbOkElements = 0; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - // hilight entered elements/nodes - SMDS_Mesh* aMesh = 0; - if (myActor) - aMesh = myActor->GetObject()->GetMesh(); - - if (aMesh) { - QStringList aListId = QStringList::split(" ", theNewText, false); - - if (send == LineEditElements) { - const Handle(SALOME_InteractiveObject)& anIO = myActor->getIO(); - 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++; - } - mySelector->AddOrRemoveIndex(anIO, newIndices, false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( anIO, true, true ); - myElementsId = theNewText; - } - } - - if (myNbOkElements) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } - - myBusy = false; -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_ExtrusionDlg::SelectionIntoArgument() -{ - if (myBusy) return; - - // return if dialog box is inactive - if (!GroupButtons->isEnabled()) - return; - - // clear - myActor = 0; - QString aString = ""; - - // set busy flag - myBusy = true; - - myEditCurrentArgument->setText(aString); - myNbOkElements = 0; - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - myBusy = false; - - // get selected mesh - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList, SVTK_Viewer::Type()); - int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - 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) - return; - - if (myEditCurrentArgument == LineEditElements) { - int aNbElements = 0; - myElementsId = ""; - - if (CheckBoxMesh->isChecked()) { - int aConstructorId = GetConstructorId(); - - 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++; - } - } - } - } 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, myActor->getIO(), aString); - myElementsId = aString; - } - - if (aNbElements < 1) - return; - - myNbOkElements = true; - } - - myBusy = true; - myEditCurrentArgument->setText(aString); - myBusy = false; - - // OK - if (myNbOkElements) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_ExtrusionDlg::SetEditCurrentArgument() -{ - QPushButton* send = (QPushButton*)sender(); - - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearSelected(); - mySelectionMgr->clearFilters(); - - if (send == SelectElementsButton) { - myEditCurrentArgument = LineEditElements; - if (CheckBoxMesh->isChecked()) { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); - } else { - int aConstructorId = GetConstructorId(); - if (aConstructorId == 0) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(EdgeSelection); - } - else if (aConstructorId == 1) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(FaceSelection); - } - } - } - - myEditCurrentArgument->setFocus(); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - SelectionIntoArgument(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : Deactivates this dialog -//================================================================================= -void SMESHGUI_ExtrusionDlg::DeactivateActiveDialog() -{ - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); - GroupArguments->setEnabled(false); - GroupButtons->setEnabled(false); - mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : Activates this dialog -//================================================================================= -void SMESHGUI_ExtrusionDlg::ActivateThisDialog() -{ - // Emit a signal to deactivate the active dialog - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupConstructors->setEnabled(true); - GroupArguments->setEnabled(true); - GroupButtons->setEnabled(true); - - mySMESHGUI->SetActiveDialogBox(this); - - ConstructorsClicked(GetConstructorId()); - SelectionIntoArgument(); -} - -//================================================================================= -// function : enterEvent() -// purpose : Mouse enter event -//================================================================================= -void SMESHGUI_ExtrusionDlg::enterEvent (QEvent*) -{ - if (!GroupConstructors->isEnabled()) - ActivateThisDialog(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -//void SMESHGUI_ExtrusionDlg::closeEvent (QCloseEvent*) -//{ -// /* same than click on cancel button */ -// this->ClickOnCancel(); -//} -// -//================================================================================= -// function : hideEvent() -// purpose : caused by ESC key -//================================================================================= -//void SMESHGUI_ExtrusionDlg::hideEvent (QHideEvent*) -//{ -// if (!isMinimized()) -// ClickOnCancel(); -//} - -//================================================================================= -// function : onSelectMesh() -// purpose : -//================================================================================= -void SMESHGUI_ExtrusionDlg::onSelectMesh (bool toSelectMesh) -{ - if (toSelectMesh) - TextLabelElements->setText(tr("SMESH_NAME")); - else - TextLabelElements->setText(tr("SMESH_ID_ELEMENTS")); - - if (myEditCurrentArgument != LineEditElements) { - LineEditElements->clear(); - return; - } - - mySelectionMgr->clearFilters(); - - if (toSelectMesh) { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); - LineEditElements->setReadOnly(true); - } else { - int aConstructorId = GetConstructorId(); - if (aConstructorId == 0) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(EdgeSelection); - } - else if (aConstructorId == 0) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(FaceSelection); - } - - LineEditElements->setReadOnly(false); - onTextChange(LineEditElements->text()); - } - - SelectionIntoArgument(); -} - -//================================================================================= -// function : GetConstructorId() -// purpose : -//================================================================================= -int SMESHGUI_ExtrusionDlg::GetConstructorId() -{ - if (GroupConstructors != NULL && GroupConstructors->selected() != NULL) - return GroupConstructors->id(GroupConstructors->selected()); - return -1; -} diff --git a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.h b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.h deleted file mode 100644 index cebdaefb7..000000000 --- a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.h +++ /dev/null @@ -1,128 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_ExtrusionDlg.h -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#ifndef DIALOGBOX_EXTRUSION_H -#define DIALOGBOX_EXTRUSION_H - -#include "SalomeApp_SelectionMgr.h" -#include "SUIT_SelectionFilter.h" - -// QT Includes -#include - -class QGridLayout; -class QButtonGroup; -class QRadioButton; -class QGroupBox; -class QLabel; -class QLineEdit; -class QCheckBox; -class QSpinBox; -class QPushButton; - -class SMESHGUI; -class SMESH_Actor; -class SMESHGUI_SpinBox; -class SVTK_ViewWindow; -class SVTK_Selector; - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -//================================================================================= -// class : SMESHGUI_ExtrusionDlg -// purpose : -//================================================================================= -class SMESHGUI_ExtrusionDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_ExtrusionDlg (SMESHGUI*, - bool modal = FALSE); - ~SMESHGUI_ExtrusionDlg(); - -private: - void Init (bool ResetControls = true); - void enterEvent (QEvent*); /* mouse enter the QWidget */ - int GetConstructorId(); - //void closeEvent (QCloseEvent*); - //void hideEvent (QHideEvent*); /* ESC key */ - - SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ - SalomeApp_SelectionMgr* mySelectionMgr; /* User shape selection */ - QLineEdit* myEditCurrentArgument; /* Current LineEdit */ - QString myElementsId; - int myNbOkElements; /* to check when elements are defined */ - SVTK_Selector* mySelector; - - bool myBusy; - SMESH::SMESH_Mesh_var myMesh; - SMESH_Actor* myActor; - SUIT_SelectionFilter* myMeshOrSubMeshOrGroupFilter; - - // widgets - QButtonGroup* GroupConstructors; - QRadioButton* RadioButton1; - QRadioButton* RadioButton2; - - QGroupBox* GroupArguments; - QLabel* TextLabelElements; - QPushButton* SelectElementsButton; - QLineEdit* LineEditElements; - QCheckBox* CheckBoxMesh; - QLabel* TextLabelVector; - QLabel* TextLabelDx; - SMESHGUI_SpinBox* SpinBox_Dx; - QLabel* TextLabelDy; - SMESHGUI_SpinBox* SpinBox_Dy; - QLabel* TextLabelDz; - SMESHGUI_SpinBox* SpinBox_Dz; - QLabel* TextLabelNbSteps; - QSpinBox* SpinBox_NbSteps; - - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - -private slots: - void ConstructorsClicked (int); - void ClickOnOk(); - bool ClickOnApply(); - void ClickOnCancel(); - void SetEditCurrentArgument(); - void SelectionIntoArgument(); - void DeactivateActiveDialog(); - void ActivateThisDialog(); - void onTextChange (const QString&); - void onSelectMesh (bool toSelectMesh); -}; - -#endif // DIALOGBOX_EXTRUSION_H diff --git a/src/SMESHGUI/SMESHGUI_Filter.cxx b/src/SMESHGUI/SMESHGUI_Filter.cxx deleted file mode 100755 index 19b3fcb1a..000000000 --- a/src/SMESHGUI/SMESHGUI_Filter.cxx +++ /dev/null @@ -1,497 +0,0 @@ -// SMESHGUI_PredicateFilter : Filters for VTK viewer -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_Filter.cxx -// Author : Sergey LITONIN -// Module : SMESH - -#include "SMESHGUI_Filter.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" - -#include "SMESH_Actor.h" -#include "SMDS_Mesh.hxx" -#include "SMDS_MeshElement.hxx" -#include "SMDSAbs_ElementType.hxx" - -// OCCT Includes -#include -#include - -// VTK Includes -#include - -IMPLEMENT_STANDARD_HANDLE(SMESHGUI_Filter, VTKViewer_Filter) -IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_Filter, VTKViewer_Filter) - -IMPLEMENT_STANDARD_HANDLE(SMESHGUI_PredicateFilter, SMESHGUI_Filter) -IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_PredicateFilter, SMESHGUI_Filter) - -IMPLEMENT_STANDARD_HANDLE(SMESHGUI_QuadrangleFilter, SMESHGUI_Filter) -IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_QuadrangleFilter, SMESHGUI_Filter) - -IMPLEMENT_STANDARD_HANDLE(SMESHGUI_TriangleFilter, SMESHGUI_Filter) -IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_TriangleFilter, SMESHGUI_Filter) - -IMPLEMENT_STANDARD_HANDLE(SMESHGUI_FacesFilter, SMESHGUI_Filter) -IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_FacesFilter, SMESHGUI_Filter) - -IMPLEMENT_STANDARD_HANDLE(SMESHGUI_VolumesFilter, SMESHGUI_Filter) -IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_VolumesFilter, SMESHGUI_Filter) - -/* - Class : SMESHGUI_PredicateFilter - Description : Selection filter for VTK viewer. This class aggregate object - of SMESH_Predicate class and uses it for verification of criterion -*/ - -//======================================================================= -// name : SMESHGUI_PredicateFilter::SMESHGUI_PredicateFilter -// Purpose : Constructor -//======================================================================= -SMESHGUI_PredicateFilter::SMESHGUI_PredicateFilter() -{ -} - -SMESHGUI_PredicateFilter::~SMESHGUI_PredicateFilter() -{ -} - -//======================================================================= -// name : SMESHGUI_PredicateFilter::IsValid -// Purpose : Verify whether entry id satisfies to criterion of the filter -//======================================================================= -bool SMESHGUI_PredicateFilter::IsValid( const int theCellId ) const -{ - if ( myActor == 0 || myPred->_is_nil() ) - return false; - - SMESH_Actor* anActor = dynamic_cast( myActor ); - if ( !anActor || anActor->GetObject() == 0 ) - return false; - - SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh(); - SMESH::ElementType anElemType = myPred->GetElementType(); - int aMeshId = anElemType == SMESH::NODE ? anActor->GetNodeObjId( theCellId ) - : anActor->GetElemObjId( theCellId ); - - // if type of element != type of predicate return true because - // this predicate is not intended for filtering sush elements - const SMDS_MeshElement* anElem = anElemType == SMESH::NODE ? aMesh->FindNode( aMeshId ) - : aMesh->FindElement( aMeshId ); - if ( anElem != 0 && anElem->GetType() != (SMDSAbs_ElementType)myPred->GetElementType() ) - return true; - - return myPred->IsSatisfy( aMeshId ); -} - -//======================================================================= -// name : SMESHGUI_PredicateFilter::IsValid -// Purpose : Verify whether entry id satisfies to criterion of the filter -//======================================================================= -bool SMESHGUI_PredicateFilter::IsObjValid( const int theObjId ) const -{ - if ( myActor == 0 || myPred->_is_nil() ) - return false; - - SMESH_Actor* anActor = ( SMESH_Actor* )myActor; - if ( anActor->GetObject() == 0 ) - return false; - - SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh(); - SMESH::ElementType anElemType = myPred->GetElementType(); - - // if type of element != type of predicate return true because - // this predicate is not intended for filtering sush elements - const SMDS_MeshElement* anElem = anElemType == SMESH::NODE ? aMesh->FindNode( theObjId ) - : aMesh->FindElement( theObjId ); - if ( anElem != 0 && anElem->GetType() != (SMDSAbs_ElementType)myPred->GetElementType() ) - return true; - - return myPred->IsSatisfy( theObjId ); -} - -//======================================================================= -// name : SMESHGUI_PredicateFilter::IsNodeFilter -// Purpose : Returns true if filter is intended for nodes -//======================================================================= -bool SMESHGUI_PredicateFilter::IsNodeFilter() const -{ - return GetId() == SMESHGUI_NodeFilter; -} - -//======================================================================= -// name : SMESHGUI_PredicateFilter::SetPredicate -// Purpose : Set new pridicate to the filter -//======================================================================= -void SMESHGUI_PredicateFilter::SetPredicate( SMESH::Predicate_ptr thePred ) -{ - myPred = SMESH::Predicate::_duplicate( thePred ); -} - -//======================================================================= -// name : SMESHGUI_PredicateFilter::SetActor -// Purpose : Set new actor -//======================================================================= -void SMESHGUI_PredicateFilter::SetActor( SALOME_Actor* theActor ) -{ - if ( myActor == theActor ) - return; - SMESHGUI_Filter::SetActor( theActor ); - - if ( myActor != 0 && !myPred->_is_nil() ) - { - SALOME_Actor* sActor = dynamic_cast( myActor ); - Handle(SALOME_InteractiveObject) anIO; - if( sActor ) - anIO = sActor->getIO(); - if ( !anIO.IsNull() ) - { - SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface(anIO); - if(!aMesh->_is_nil()) - myPred->SetMesh(aMesh); - } - } -} - -//======================================================================= -// name : SMESHGUI_PredicateFilter::SetActor -// Purpose : Get ID of the filter. Must return value from SMESHGUI_FilterType -// enumeration. All filters must have different ids -//======================================================================= -int SMESHGUI_PredicateFilter::GetId() const -{ - if ( myPred->GetElementType() == SMESH::NODE ) return SMESHGUI_NodeFilter; - else if ( myPred->GetElementType() == SMESH::EDGE ) return SMESHGUI_EdgeFilter; - else if ( myPred->GetElementType() == SMESH::FACE ) return SMESHGUI_FaceFilter; - else if ( myPred->GetElementType() == SMESH::VOLUME ) return SMESHGUI_VolumeFilter; - else if ( myPred->GetElementType() == SMESH::ALL ) return SMESHGUI_AllElementsFilter; - else return SMESHGUI_UnknownFilter; -} - - -/* - Class : SMESHGUI_QuadrangleFilter - Description : Verify whether selected cell is quadranle -*/ - -//======================================================================= -// name : SMESHGUI_QuadrangleFilter::SMESHGUI_QuadrangleFilter -// Purpose : Constructor -//======================================================================= -SMESHGUI_QuadrangleFilter::SMESHGUI_QuadrangleFilter() -: SMESHGUI_Filter() -{ -} - -SMESHGUI_QuadrangleFilter::~SMESHGUI_QuadrangleFilter() -{ -} - -//======================================================================= -// name : SMESHGUI_QuadrangleFilter::IsValid -// Purpose : Verify whether selected cell is quadranle -//======================================================================= -bool SMESHGUI_QuadrangleFilter::IsValid( const int theCellId ) const -{ - if ( myActor == 0 ) - return false; - - SMESH_Actor* anActor = ( SMESH_Actor* )myActor; - if ( anActor->GetObject() == 0 ) - return false; - - SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh(); - const SMDS_MeshElement* anElem = aMesh->FindElement( anActor->GetElemObjId( theCellId ) ); - - return anElem && anElem->GetType() == SMDSAbs_Face && anElem->NbNodes() == 4; -} - -//======================================================================= -// name : SMESHGUI_QuadrangleFilter::IsValid -// Purpose : Verify whether selected cell is quadranle -//======================================================================= -bool SMESHGUI_QuadrangleFilter::IsObjValid( const int theObjId ) const -{ - if ( myActor == 0 ) - return false; - - SMESH_Actor* anActor = ( SMESH_Actor* )myActor; - if ( anActor->GetObject() == 0 ) - return false; - - SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh(); - const SMDS_MeshElement* anElem = aMesh->FindElement( theObjId ); - - return anElem && anElem->GetType() == SMDSAbs_Face && anElem->NbNodes() == 4; -} - -//======================================================================= -// name : SMESHGUI_QuadrangleFilter::SetActor -// Purpose : Get ID of the filter. Must return value from SMESHGUI_FilterType -// enumeration. All filters must have different ids -//======================================================================= -int SMESHGUI_QuadrangleFilter::GetId() const -{ - return SMESHGUI_QuadFilter; -} - -//======================================================================= -// name : SMESHGUI_QuadrangleFilter::IsNodeFilter -// Purpose : Returns true if filter is intended for nodes -//======================================================================= -bool SMESHGUI_QuadrangleFilter::IsNodeFilter() const -{ - return false; -} - - -/* - Class : SMESHGUI_TriangleFilter - Description : Verify whether selected cell is triangle -*/ - - -//======================================================================= -// name : SMESHGUI_TriangleFilter::SMESHGUI_TriangleFilter -// Purpose : Constructor -//======================================================================= -SMESHGUI_TriangleFilter::SMESHGUI_TriangleFilter() -: SMESHGUI_Filter() -{ -} - -SMESHGUI_TriangleFilter::~SMESHGUI_TriangleFilter() -{ -} - -//======================================================================= -// name : SMESHGUI_TriangleFilter::IsValid -// Purpose : Verify whether selected cell is triangle -//======================================================================= -bool SMESHGUI_TriangleFilter::IsValid( const int theCellId ) const -{ - if ( myActor == 0 ) - return false; - - SMESH_Actor* anActor = ( SMESH_Actor* )myActor; - if ( anActor->GetObject() == 0 ) - return false; - - SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh(); - const SMDS_MeshElement* anElem = aMesh->FindElement( anActor->GetElemObjId( theCellId ) ); - - return anElem && anElem->GetType() == SMDSAbs_Face && anElem->NbNodes() == 3; -} - -//======================================================================= -// name : SMESHGUI_TriangleFilter::IsValid -// Purpose : Verify whether selected cell is triangle -//======================================================================= -bool SMESHGUI_TriangleFilter::IsObjValid( const int theObjId ) const -{ - if ( myActor == 0 ) - return false; - - SMESH_Actor* anActor = ( SMESH_Actor* )myActor; - if ( anActor->GetObject() == 0 ) - return false; - - SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh(); - const SMDS_MeshElement* anElem = aMesh->FindElement( theObjId ); - - return anElem && anElem->GetType() == SMDSAbs_Face && anElem->NbNodes() == 3; -} - -//======================================================================= -// name : SMESHGUI_TriangleFilter::SetActor -// Purpose : Get ID of the filter. Must return value from SMESHGUI_FilterType -// enumeration. All filters must have different ids -//======================================================================= -int SMESHGUI_TriangleFilter::GetId() const -{ - return SMESHGUI_TriaFilter; -} - -//======================================================================= -// name : SMESHGUI_TriangleFilter::IsNodeFilter -// Purpose : Returns true if filter is intended for nodes -//======================================================================= -bool SMESHGUI_TriangleFilter::IsNodeFilter() const -{ - return false; -} - -/* - Class : SMESHGUI_FacesFilter - Description : Verify whether selected cell is any face -*/ - - -//======================================================================= -// name : SMESHGUI_FacesFilter::SMESHGUI_FacesFilter -// Purpose : Constructor -//======================================================================= -SMESHGUI_FacesFilter::SMESHGUI_FacesFilter() -: SMESHGUI_Filter() -{ -} - -SMESHGUI_FacesFilter::~SMESHGUI_FacesFilter() -{ -} - -//======================================================================= -// name : SMESHGUI_FacesFilter::IsValid -// Purpose : Verify whether selected cell is face -//======================================================================= -bool SMESHGUI_FacesFilter::IsValid( const int theCellId ) const -{ - if ( myActor == 0 ) - return false; - - SMESH_Actor* anActor = ( SMESH_Actor* )myActor; - if ( anActor->GetObject() == 0 ) - return false; - - SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh(); - const SMDS_MeshElement* anElem = aMesh->FindElement( anActor->GetElemObjId( theCellId ) ); - - return anElem && anElem->GetType() == SMDSAbs_Face; -} - -//======================================================================= -// name : SMESHGUI_FacesFilter::IsValid -// Purpose : Verify whether selected cell is face -//======================================================================= -bool SMESHGUI_FacesFilter::IsObjValid( const int theObjId ) const -{ - if ( myActor == 0 ) - return false; - - SMESH_Actor* anActor = ( SMESH_Actor* )myActor; - if ( anActor->GetObject() == 0 ) - return false; - - SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh(); - const SMDS_MeshElement* anElem = aMesh->FindElement( theObjId ); - - return anElem && anElem->GetType() == SMDSAbs_Face; -} - -//======================================================================= -// name : SMESHGUI_FacesFilter::GetId -// Purpose : Get ID of the filter. Must return value from SMESHGUI_FilterType -// enumeration. All filters must have different ids -//======================================================================= -int SMESHGUI_FacesFilter::GetId() const -{ - return SMESHGUI_FaceFilter; -} - -//======================================================================= -// name : SMESHGUI_FacesFilter::IsNodeFilter -// Purpose : Returns true if filter is intended for nodes -//======================================================================= -bool SMESHGUI_FacesFilter::IsNodeFilter() const -{ - return false; -} - - -/* - Class : SMESHGUI_VolumesFilter - Description : Verify whether selected cell is any volume -*/ - - -//======================================================================= -// name : SMESHGUI_VolumesFilter::SMESHGUI_VolumesFilter -// Purpose : Constructor -//======================================================================= -SMESHGUI_VolumesFilter::SMESHGUI_VolumesFilter() -: SMESHGUI_Filter() -{ -} - -SMESHGUI_VolumesFilter::~SMESHGUI_VolumesFilter() -{ -} - -//======================================================================= -// name : SMESHGUI_VolumesFilter::IsValid -// Purpose : Verify whether selected cell is volume -//======================================================================= -bool SMESHGUI_VolumesFilter::IsValid( const int theCellId ) const -{ - if ( myActor == 0 ) - return false; - - SMESH_Actor* anActor = ( SMESH_Actor* )myActor; - if ( anActor->GetObject() == 0 ) - return false; - - SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh(); - const SMDS_MeshElement* anElem = aMesh->FindElement( anActor->GetElemObjId( theCellId ) ); - - return anElem && anElem->GetType() == SMDSAbs_Volume; -} - -//======================================================================= -// name : SMESHGUI_VolumesFilter::IsValid -// Purpose : Verify whether selected cell is volume -//======================================================================= -bool SMESHGUI_VolumesFilter::IsObjValid( const int theObjId ) const -{ - if ( myActor == 0 ) - return false; - - SMESH_Actor* anActor = ( SMESH_Actor* )myActor; - if ( anActor->GetObject() == 0 ) - return false; - - SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh(); - const SMDS_MeshElement* anElem = aMesh->FindElement( theObjId ); - - return anElem && anElem->GetType() == SMDSAbs_Volume; -} - -//======================================================================= -// name : SMESHGUI_VolumesFilter::GetId -// Purpose : Get ID of the filter. Must return value from SMESHGUI_FilterType -// enumeration. All filters must have different ids -//======================================================================= -int SMESHGUI_VolumesFilter::GetId() const -{ - return SMESHGUI_VolumeFilter; -} - -//======================================================================= -// name : SMESHGUI_VolumesFilter::IsNodeFilter -// Purpose : Returns true if filter is intended for nodes -//======================================================================= -bool SMESHGUI_VolumesFilter::IsNodeFilter() const -{ - return false; -} diff --git a/src/SMESHGUI/SMESHGUI_Filter.h b/src/SMESHGUI/SMESHGUI_Filter.h deleted file mode 100755 index 0114f38b8..000000000 --- a/src/SMESHGUI/SMESHGUI_Filter.h +++ /dev/null @@ -1,191 +0,0 @@ -// SMESHGUI_Filter : Filters for VTK viewer -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_Filter.h -// Author : Sergey LITONIN -// Module : SMESH - -#ifndef SMESHGUI_Filter_HeaderFile -#define SMESHGUI_Filter_HeaderFile - -#include "VTKViewer_Filter.h" - -#include -#include CORBA_SERVER_HEADER(SMESH_Filter) - -class SALOME_Actor; - -enum SMESHGUI_FilterType -{ - SMESHGUI_UnknownFilter = -1, - SMESHGUI_NodeFilter = 0, - SMESHGUI_EdgeFilter = 1, - SMESHGUI_FaceFilter = 2, - SMESHGUI_VolumeFilter = 3, - SMESHGUI_AllElementsFilter = 4, - SMESHGUI_QuadFilter = 5, - SMESHGUI_TriaFilter = 6, - SMESHGUI_LastFilter -}; - -/* - Class : SMESHGUI_Filter - Description : Base class for SMESH selection filters for VTK viewer. -*/ - -DEFINE_STANDARD_HANDLE(SMESHGUI_Filter, VTKViewer_Filter) - -class SMESHGUI_Filter : public VTKViewer_Filter -{ - -public: - - virtual bool IsObjValid( const int theObjId ) const = 0; -public: - DEFINE_STANDARD_RTTI(SMESHGUI_Filter) -}; - -/* - Class : SMESHGUI_PredicateFilter - Description : Selection filter for VTK viewer. This class aggregate object - of SMESH_Predicate class and uses it for verification of criterion -*/ - -DEFINE_STANDARD_HANDLE(SMESHGUI_PredicateFilter, SMESHGUI_Filter) - -class SMESHGUI_PredicateFilter : public SMESHGUI_Filter -{ - -public: - SMESHGUI_PredicateFilter(); - virtual ~SMESHGUI_PredicateFilter(); - - virtual bool IsValid( const int theCellId ) const; - virtual bool IsObjValid( const int theObjId ) const; - virtual int GetId() const; - virtual bool IsNodeFilter() const; - void SetPredicate( SMESH::Predicate_ptr ); - - void SetActor( SALOME_Actor* ); - -private: - - SMESH::Predicate_var myPred; - -public: - DEFINE_STANDARD_RTTI(SMESHGUI_PredicateFilter) -}; - -/* - Class : SMESHGUI_QuadrangleFilter - Description : Verify whether selected cell is quadranle -*/ - -DEFINE_STANDARD_HANDLE(SMESHGUI_QuadrangleFilter, SMESHGUI_Filter) - -class SMESHGUI_QuadrangleFilter : public SMESHGUI_Filter -{ - -public: - SMESHGUI_QuadrangleFilter(); - virtual ~SMESHGUI_QuadrangleFilter(); - - virtual bool IsValid( const int theCellId ) const; - virtual bool IsObjValid( const int theObjId ) const; - virtual int GetId() const; - virtual bool IsNodeFilter() const; - -public: - DEFINE_STANDARD_RTTI(SMESHGUI_QuadrangleFilter) -}; - -/* - Class : SMESHGUI_TriangleFilter - Description : Verify whether selected cell is triangle -*/ - -DEFINE_STANDARD_HANDLE(SMESHGUI_TriangleFilter, SMESHGUI_Filter) - -class SMESHGUI_TriangleFilter : public SMESHGUI_Filter -{ - -public: - SMESHGUI_TriangleFilter(); - virtual ~SMESHGUI_TriangleFilter(); - - virtual bool IsValid( const int theCellId ) const; - virtual bool IsObjValid( const int theObjId ) const; - virtual int GetId() const; - virtual bool IsNodeFilter() const; - -public: - DEFINE_STANDARD_RTTI(SMESHGUI_TriangleFilter) -}; - -/* - Class : SMESHGUI_FacesFilter - Description : Verify whether selected cell is any face -*/ - -DEFINE_STANDARD_HANDLE(SMESHGUI_FacesFilter, SMESHGUI_Filter) - -class SMESHGUI_FacesFilter : public SMESHGUI_Filter -{ - -public: - SMESHGUI_FacesFilter(); - virtual ~SMESHGUI_FacesFilter(); - - virtual bool IsValid( const int theCellId ) const; - virtual bool IsObjValid( const int theObjId ) const; - virtual int GetId() const; - virtual bool IsNodeFilter() const; - -public: - DEFINE_STANDARD_RTTI(SMESHGUI_FacesFilter) -}; - -/* - Class : SMESHGUI_VolumesFilter - Description : Verify whether selected cell is any volume -*/ - -DEFINE_STANDARD_HANDLE(SMESHGUI_VolumesFilter, SMESHGUI_Filter) - -class SMESHGUI_VolumesFilter : public SMESHGUI_Filter -{ - -public: - SMESHGUI_VolumesFilter(); - virtual ~SMESHGUI_VolumesFilter(); - - virtual bool IsValid( const int theCellId ) const; - virtual bool IsObjValid( const int theObjId ) const; - virtual int GetId() const; - virtual bool IsNodeFilter() const; - -public: - DEFINE_STANDARD_RTTI(SMESHGUI_VolumesFilter) -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_FilterDlg.h b/src/SMESHGUI/SMESHGUI_FilterDlg.h deleted file mode 100755 index 7427fe7be..000000000 --- a/src/SMESHGUI/SMESHGUI_FilterDlg.h +++ /dev/null @@ -1,306 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_FilterDlg.h -// Author : Sergey LITONIN -// Module : SMESH - - -#ifndef SMESHGUI_FilterDlg_H -#define SMESHGUI_FilterDlg_H - -#include -#include -#include -#include - -#include "SalomeApp_SelectionMgr.h" -#include "SALOME_InteractiveObject.hxx" -#include "SALOME_DataMapOfIOMapOfInteger.hxx" -#include "SVTK_Selection.h" - -#include - -#include -#include CORBA_SERVER_HEADER(SMESH_Filter) -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -class QButtonGroup; -class QCheckBox; -class QCloseEvent; -class QComboBox; -class QEvent; -class QGroupBox; -class QPushButton; -class QStringList; -class QTable; -class QTableItem; -class QWidgetStack; -class SalomeApp_SelectionMgr; -class SMESHGUI; -class SMESHGUI_FilterLibraryDlg; -class SVTK_Selector; -class SVTK_ViewWindow; - -/*! - * Class : SMESHGUI_FilterTable - * Description : Frame containig - * - Button group for switching entity type - * - Table for displaying filter criterions - * - Buttons for editing table - */ - -class SMESHGUI_FilterTable : public QFrame -{ - Q_OBJECT - - class Table; - class ComboItem; - class AdditionalWidget; - - typedef QMap TableMap; - -public: - SMESHGUI_FilterTable( SMESHGUI*, - QWidget* parent, - const int type); - SMESHGUI_FilterTable( SMESHGUI*, - QWidget* parent, - const QValueList& type); - virtual ~SMESHGUI_FilterTable(); - - void Init (const int type); - void Init (const QValueList& types); - - QGroupBox* GetTableGrp(); - - bool IsValid (const bool = true, const int theEntityType = -1) const; - int GetType() const; - void SetType (const int); - void RestorePreviousEntityType(); - int NumRows (const int theEntityType = -1) const; - void Clear (const int theEntityType = -1); - void SetEditable (const bool); - void SetEnabled (const bool); - void SetLibsEnabled (const bool); - bool IsEditable() const; - - int GetCriterionType (const int theRow, const int theType = -1) const; - - void GetCriterion (const int theRow, - SMESH::Filter::Criterion& theCriterion, - const int theEntityType = -1) const; - - void SetCriterion (const int theRow, - const SMESH::Filter::Criterion& theCriterion, - const int theEntityType = -1); - - void AddCriterion (const SMESH::Filter::Criterion& theCriterion, - const int theEntityType = -1); - - void Copy (const SMESHGUI_FilterTable*); - void SetValidity (const bool); - - bool CurrentCell (int& theRow, int& theCol) const; - void SetThreshold (const int theRow, - const QString& theText, - const int theEntityType = -1); - - bool GetThreshold (const int theRow, - QString& theText, - const int theEntityType = -1); - - void Update(); - -signals: - - void CopyFromClicked(); - void AddToClicked(); - void EntityTypeChanged (const int); - void NeedValidation(); - void CriterionChanged (const int theRow, const int theEntityType); - void CurrentChanged (int, int); - -private slots: - - void onAddBtn(); - void onInsertBtn(); - void onRemoveBtn(); - void onClearBtn(); - void onCopyFromBtn(); - void onAddToBtn(); - void onCriterionChanged (int, int); - void onEntityType (int); - void onCurrentChanged (int, int); - -private: - - void addRow (Table*, const int, const bool toTheEnd = true); - QTableItem* getCriterionItem (QTable*, const int); - QTableItem* getCompareItem (QTable*); - QTableItem* getUnaryItem (QTable*); - QTableItem* getBinaryItem (QTable*); - const QMap& getCriteria (const int theType) const; - const QMap& getCompare() const; - Table* createTable (QWidget*, const int); - QWidget* createAdditionalFrame (QWidget* theParent); - int getFirstSelectedRow() const; - void onCriterionChanged (const int, const int, const int); - - void updateBtnState(); - void removeAdditionalWidget (QTable* theTable, const int theRow); - void updateAdditionalWidget(); - - const QMap& getSupportedTypes() const; - -private: - SMESHGUI* mySMESHGUI; - - QGroupBox* myTableGrp; - QGroupBox* mySwitchTableGrp; - - TableMap myTables; - QPushButton* myAddBtn; - QPushButton* myInsertBtn; - QPushButton* myRemoveBtn; - QPushButton* myClearBtn; - QPushButton* myCopyFromBtn; - QPushButton* myAddToBtn; - - QButtonGroup* myEntityTypeGrp; - int myEntityType; - int myIsValid; - bool myIsLocked; - - SMESHGUI_FilterLibraryDlg* myLibDlg; - - QWidgetStack* myWgStack; - - QMap myAddWidgets; -}; - - -/*! - * Class : SMESHGUI_FilterDlg - * Description : Dialog to specify filters for VTK viewer - */ - -class SMESHGUI_FilterDlg : public QDialog -{ - Q_OBJECT - - // Source elements to be selected - enum { Mesh, Selection, Dialog, None }; - - // Buttons - enum { BTN_OK, BTN_Cancel, BTN_Apply, BTN_Close }; - -public: - SMESHGUI_FilterDlg( SMESHGUI*, - const QValueList& types, - const char* name = 0); - - SMESHGUI_FilterDlg( SMESHGUI*, - const int type, - const char* name = 0); - virtual ~SMESHGUI_FilterDlg(); - - void Init (const QValueList& types); - void Init (const int type); - - void SetSelection(); - void SetMesh (SMESH::SMESH_Mesh_ptr); - void SetSourceWg (QWidget*); - - static SMESH::Filter::Criterion createCriterion(); - -signals: - - void Accepted(); - -private slots: - - void onOk(); - bool onApply(); - void onClose(); - void onDeactivate(); - void onSelectionDone(); - void onCriterionChanged (const int, const int); - void onCurrentChanged (int, int); - -private: - - void construct (const QValueList& types); - - void closeEvent (QCloseEvent*); - void enterEvent (QEvent*); - - // dialog creation - QFrame* createButtonFrame (QWidget*); - QFrame* createMainFrame (QWidget*); - QButtonGroup* createSourceGroup (QWidget*); - void updateMainButtons(); - - // execution - bool isValid() const; - bool createFilter (const int theType); - void insertFilterInViewer(); - void selectInViewer (const int theType, - const QValueList& theIds); - void filterSource (const int theType, - QValueList& theResIds); - void filterSelectionSource (const int theType, - QValueList& theResIds); - void getIdsFromWg (const QWidget*, QValueList&) const; - void setIdsToWg (QWidget*, const QValueList&); - Selection_Mode getSelMode (const int) const; - void updateSelection(); - -private: - - // widgets - QFrame* myMainFrame; - QButtonGroup* mySourceGrp; - - QCheckBox* mySetInViewer; - - QMap myButtons; - - SMESHGUI_FilterTable* myTable; - - // initial fields - QValueList myTypes; - SMESHGUI* mySMESHGUI; - SalomeApp_SelectionMgr* mySelectionMgr; - SVTK_Selector* mySelector; - SMESH::SMESH_Mesh_ptr myMesh; - QWidget* mySourceWg; - - SALOME_DataMapOfIOMapOfInteger myIObjects; - bool myIsSelectionChanged; - QMap< int, SMESH::Filter_var > myFilter; - QMap< int, bool > myInsertState; - QMap< int, int > myApplyToState; -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx b/src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx deleted file mode 100644 index 18eb314cf..000000000 --- a/src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx +++ /dev/null @@ -1,1133 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_FilterLibraryDlg.cxx -// Author : Sergey LITONIN -// Module : SMESH - -#include "SMESHGUI_FilterLibraryDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_FilterUtils.h" - -#include "SUIT_Session.h" -#include "SUIT_Desktop.h" -#include "SUIT_FileDlg.h" - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define SPACING 5 -#define MARGIN 10 - -/*! - * Class : SMESHGUI_FilterLibraryDlg::Dialog - * Description : Dialog for opening filter library - */ - -class SMESHGUI_FilterLibraryDlg::Dialog : public SUIT_FileDlg -{ - public: - Dialog(QWidget* theParent, const bool theToOpen); - virtual ~Dialog(); - - protected: - virtual bool acceptData(); -}; - -SMESHGUI_FilterLibraryDlg::Dialog::Dialog (QWidget* theParent, - const bool theToOpen) - : SUIT_FileDlg(theParent, theToOpen) -{ -} - -SMESHGUI_FilterLibraryDlg::Dialog::~Dialog() -{ -} - -bool SMESHGUI_FilterLibraryDlg::Dialog::acceptData() -{ -// if (mode() != QFileDialogP::AnyFile) -// return SUIT_FileDlg::acceptData(); - - return true; -} - -/*! - * Class : SMESHGUI_FilterLibraryDlg - * Description : Dialog to specify filters for VTK viewer - */ - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::SMESHGUI_FilterLibraryDlg -// Purpose : Constructor -//======================================================================= -SMESHGUI_FilterLibraryDlg::SMESHGUI_FilterLibraryDlg (SMESHGUI* theModule, - QWidget* parent, - const QValueList& theTypes, - const int theMode, - const char* theName) - : QDialog( parent, theName, true, WStyle_Customize | - WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), - mySMESHGUI( theModule ) -{ - construct(theTypes, theMode); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::SMESHGUI_FilterLibraryDlg -// Purpose : Constructor -//======================================================================= -SMESHGUI_FilterLibraryDlg::SMESHGUI_FilterLibraryDlg (SMESHGUI* theModule, - QWidget* parent, - const int theType, - const int theMode, - const char* theName) - : QDialog( parent, theName, true, WStyle_Customize | - WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), - mySMESHGUI( theModule ) -{ - QValueList aTypes; - aTypes.append(theType); - construct(aTypes, theMode); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::construct -// Purpose : Construct dialog (called by constructor) -//======================================================================= -void SMESHGUI_FilterLibraryDlg::construct (const QValueList& theTypes, - const int theMode) -{ - myTypes = theTypes; - myMode = theMode; - - QVBoxLayout* aDlgLay = new QVBoxLayout(this, MARGIN, SPACING); - - myMainFrame = createMainFrame (this); - QFrame* aBtnFrame = createButtonFrame(this); - - aDlgLay->addWidget(myMainFrame); - aDlgLay->addWidget(aBtnFrame); - - aDlgLay->setStretchFactor(myMainFrame, 1); - - Init(myTypes, myMode); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::createMainFrame -// Purpose : Create frame containing dialog's input fields -//======================================================================= -QFrame* SMESHGUI_FilterLibraryDlg::createMainFrame (QWidget* theParent) -{ - QGroupBox* aMainFrame = new QGroupBox(1, Qt::Horizontal, theParent); - aMainFrame->setFrameStyle(QFrame::NoFrame); - aMainFrame->setInsideMargin(0); - - // library name - - QGroupBox* aGrp = new QGroupBox(1, Qt::Vertical, aMainFrame); - aGrp->setFrameStyle(QFrame::NoFrame); - aGrp->setInsideMargin(0); - - new QLabel(tr("LIBRARY_FILE"), aGrp); - myFileName = new QLineEdit(aGrp); - myOpenBtn = new QPushButton(aGrp); - myOpenBtn->setPixmap(SUIT_Session::session()->resourceMgr()->loadPixmap( - "SUIT", tr("ICON_FILE_OPEN"))); - - // filters list box - - aGrp = new QGroupBox(1, Qt::Vertical, tr("FILTER_NAMES"), aMainFrame); - QFrame* aFrame = new QFrame(aGrp); - myListBox = new QListBox(aFrame); - myAddBtn = new QPushButton(tr("ADD"), aFrame); - myDeleteBtn = new QPushButton(tr("DELETE"), aFrame); - - QGridLayout* aLay = new QGridLayout(aFrame, 3, 2, 0, 5); - aLay->addMultiCellWidget(myListBox, 0, 2, 0, 0); - aLay->addWidget(myAddBtn, 0, 1); - aLay->addWidget(myDeleteBtn, 1, 1); - QSpacerItem* aVSpacer = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); - aLay->addItem(aVSpacer, 2, 1); - - // filter name - - myNameGrp = new QGroupBox(1, Qt::Vertical, aMainFrame); - myNameGrp->setFrameStyle(QFrame::NoFrame); - myNameGrp->setInsideMargin(0); - new QLabel(tr("FILTER_NAME"), myNameGrp); - myName = new QLineEdit(myNameGrp); - - // table - - myTable = new SMESHGUI_FilterTable( mySMESHGUI, aMainFrame, myTypes); - myTable->SetEditable(myMode == EDIT); - myTable->SetLibsEnabled(false); - - myListBox->setMinimumHeight((int)(myTable->sizeHint().height() * 0.5)); - myListBox->setRowMode(QListBox::FitToWidth); - myListBox->setSelectionMode(QListBox::Single); - - myOpenBtn->setAutoDefault(false); - myAddBtn->setAutoDefault(false); - myDeleteBtn->setAutoDefault(false); - - // connect signals and slots - - connect(myFileName, SIGNAL(returnPressed()), this, SLOT(onReturnPressed())); - connect(myOpenBtn , SIGNAL(clicked()), this, SLOT(onBrowse())); - - connect(myListBox, SIGNAL(highlighted(const QString&)), - this, SLOT(onFilterChanged(const QString&))); - - connect(myAddBtn, SIGNAL(clicked()), this, SLOT(onAddBtnPressed())); - connect(myDeleteBtn, SIGNAL(clicked()), this, SLOT(onDeleteBtnPressed())); - - connect(myName, SIGNAL(textChanged(const QString&)), - this, SLOT(onFilterNameChanged(const QString&))); - - connect(myTable, SIGNAL(EntityTypeChanged(const int)), - this, SLOT(onEntityTypeChanged(const int))); - - connect(myTable, SIGNAL(NeedValidation()), this, SLOT(onNeedValidation())); - - return aMainFrame; -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::createButtonFrame -// Purpose : Create frame containing buttons -//======================================================================= -QFrame* SMESHGUI_FilterLibraryDlg::createButtonFrame (QWidget* theParent) -{ - QGroupBox* aGrp = new QGroupBox(1, Qt::Vertical, theParent); - - myButtons[ BTN_OK ] = new QPushButton(tr("SMESH_BUT_OK" ), aGrp); - myButtons[ BTN_Apply ] = new QPushButton(tr("SMESH_BUT_APPLY"), aGrp); - - QLabel* aLbl = new QLabel(aGrp); - aLbl->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - - myButtons[ BTN_Cancel ] = new QPushButton(tr("SMESH_BUT_CANCEL"), aGrp); - myButtons[ BTN_Close ] = new QPushButton(tr("SMESH_BUT_CLOSE"), aGrp); - - connect(myButtons[ BTN_OK ], SIGNAL(clicked()), SLOT(onOk())); - connect(myButtons[ BTN_Cancel ], SIGNAL(clicked()), SLOT(onClose())); - connect(myButtons[ BTN_Close ], SIGNAL(clicked()), SLOT(onClose())); - connect(myButtons[ BTN_Apply ], SIGNAL(clicked()), SLOT(onApply())); - - QMap::iterator anIter; - for (anIter = myButtons.begin(); anIter != myButtons.end(); ++anIter) - anIter.data()->setAutoDefault(false); - - updateMainButtons(); - - return aGrp; -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::updateMainButtons -// Purpose : Update visibility of main buttons (OK, Cancel, Close ...) -//======================================================================= -void SMESHGUI_FilterLibraryDlg::updateMainButtons() -{ - if (myTypes.count() == 1) { - myButtons[ BTN_Cancel ]->show(); - myButtons[ BTN_Apply ]->hide(); - myButtons[ BTN_Close ]->hide(); - } else { - myButtons[ BTN_Cancel ]->hide(); - myButtons[ BTN_Apply ]->show(); - myButtons[ BTN_Close ]->show(); - } -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::~SMESHGUI_FilterLibraryDlg -// Purpose : Destructor -//======================================================================= -SMESHGUI_FilterLibraryDlg::~SMESHGUI_FilterLibraryDlg() -{ -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::Init -// Purpose : Init dialog fields, connect signals and slots, show dialog -//======================================================================= -void SMESHGUI_FilterLibraryDlg::Init (const int type, const int theMode) -{ - QValueList aTypes; - aTypes.append(type); - Init(aTypes, theMode); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::Init -// Purpose : Init dialog fields, connect signals and slots, show dialog -//======================================================================= -void SMESHGUI_FilterLibraryDlg::Init (const QValueList& theTypes, - const int theMode) -{ - myMode = theMode; - myTypes = theTypes; - myTable->Init(theTypes); - myCurrFilterName = ""; - myCurrFilter = -1; - myListBox->clear(); - myName->clear(); - myTable->Clear(); - - updateControlsVisibility(); - setEnabled(true); - - connect( mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate())); - connect( mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(onClose())); - - if (myMode == ADD_TO) - { - setCaption(tr("ADD_TO_TLT")); - if (myFileName->text().isEmpty()) - myFileName->setText(getDefaultLibraryName()); - processNewLibrary(); - } - else if (myMode == COPY_FROM) - { - setCaption(tr("COPY_FROM_TLT")); - if (myFileName->text().isEmpty()) - myFileName->setText(getDefaultLibraryName()); - processNewLibrary(); - if (myListBox->count() > 0) - myListBox->setCurrentItem(0); - } - else - { - setCaption(tr("EDIT_LIB_TLT")); - if (myFileName->text().isEmpty()) - myFileName->setText(getDefaultLibraryName()); - processNewLibrary(); - if (myListBox->count() > 0) - myListBox->setCurrentItem(0); - } - - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - - this->show(); - - updateMainButtons(); - isPermissionValid(false); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::updateControlsVisibility -// Purpose : Update visibility of controls in accordance with myMode -//======================================================================= -void SMESHGUI_FilterLibraryDlg::updateControlsVisibility() -{ - if (myMode == ADD_TO) - { - myNameGrp->show(); - myNameGrp->setEnabled(true); - myAddBtn->hide(); - myDeleteBtn->hide(); - myTable->SetEditable(false); - } - else if (myMode == COPY_FROM) - { - myNameGrp->hide(); - myNameGrp->setEnabled(false); - myAddBtn->hide(); - myDeleteBtn->hide(); - myTable->SetEditable(false); - } - else if (myMode == EDIT) - { - myNameGrp->show(); - myNameGrp->setEnabled(true); - myAddBtn->show(); - myDeleteBtn->show(); - myTable->SetEditable(true); - } - - qApp->processEvents(); - updateGeometry(); - adjustSize(); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::onApply -// Purpose : SLOT called when "Apply" button pressed. -//======================================================================= -bool SMESHGUI_FilterLibraryDlg::onApply() -{ - if (!isValid(true) || !isPermissionValid(false)) - return false; - - if (myLibrary->_is_nil()) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_WRN_WARNING"), - tr("LIBRARY_IS_NOT_LOADED"), QMessageBox::Ok); - return false; - } - - const char* aName = myFileName->text().latin1(); - if (strcmp(myLibrary->GetFileName(), aName) != 0) - myLibrary->SetFileName(aName); - - bool aResult = false; - - if (myMode == COPY_FROM || myListBox->count() == 0) { - aResult = true; - } else if (myMode == EDIT || myMode == ADD_TO) { - SMESH::Filter_var aFilter = createFilter(); - if (!myLibrary->Replace(myCurrFilterName, myName->text(), aFilter.in())) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("ERROR_OF_EDITING"), QMessageBox::Ok); - aResult = false; - } - else - aResult = true; - } - - if (aResult && myMode != COPY_FROM) - aResult = myLibrary->Save(); - - if (aResult) { - char* aFileName = myLibrary->GetFileName(); - getDefaultLibraryName() = QString(aFileName); - delete aFileName; - } else if (myMode != COPY_FROM) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("ERROR_OF_SAVING"), QMessageBox::Ok); - } else { - } - - return aResult; -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::onOk -// Purpose : SLOT called when "Ok" button pressed. -// Assign filters VTK viewer and close dialog -//======================================================================= -void SMESHGUI_FilterLibraryDlg::onOk() -{ - if (onApply()) - { - disconnect( mySMESHGUI, 0, this, 0); - mySMESHGUI->ResetState(); - accept(); - } -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::onClose -// Purpose : SLOT called when "Close" button pressed. Close dialog -//======================================================================= -void SMESHGUI_FilterLibraryDlg::onClose() -{ - disconnect( mySMESHGUI, 0, this, 0); - mySMESHGUI->ResetState(); - reject(); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::onDeactivate -// Purpose : SLOT called when dialog must be deativated -//======================================================================= -void SMESHGUI_FilterLibraryDlg::onDeactivate() -{ - setEnabled(false); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::enterEvent -// Purpose : Event filter -//======================================================================= -void SMESHGUI_FilterLibraryDlg::enterEvent(QEvent*) -{ - setEnabled(true); -} - -//================================================================================= -// function : closeEvent() -// purpose : Close dialog -//================================================================================= -void SMESHGUI_FilterLibraryDlg::closeEvent(QCloseEvent* e) -{ - onClose(); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::getFileName -// Purpose : Get file name -//======================================================================= -QString SMESHGUI_FilterLibraryDlg::getFileName() const -{ - return myFileName != 0 ? myFileName->text() : QString(""); -} - -//================================================================ -// Function : setFileName -// Purpose : Set file name to line edit -//================================================================ -void SMESHGUI_FilterLibraryDlg::setFileName(const QString& txt, const bool autoExt) -{ - if (myFileName == 0) - return; - myFileName->setText(autoExt ? autoExtension(txt) : txt); -} - -//================================================================ -// Function : autoExtension -// Purpose : Append extension to the file name -//================================================================ -QString SMESHGUI_FilterLibraryDlg::autoExtension(const QString& theFileName) const -{ - QString anExt = theFileName.section('.', -1); - return anExt != "xml" && anExt != "XML" ? theFileName + ".xml" : theFileName; -} - -//================================================================ -// Function : filterWildCards -// Purpose : -//================================================================ -QStringList SMESHGUI_FilterLibraryDlg::filterWildCards(const QString& theFilter) const -{ - QStringList res; - - int b = theFilter.findRev("("); - int e = theFilter.findRev(")"); - if (b != -1 && e != -1) - { - QString content = theFilter.mid(b + 1, e - b - 1).stripWhiteSpace(); - QStringList lst = QStringList::split(" ", content); - for (QStringList::const_iterator it = lst.begin(); it != lst.end(); ++it) - if ((*it).find(".") != -1) - res.append((*it).stripWhiteSpace()); - } - return res; -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::prepareFilters -// Purpose : Prepare filters for dialog -//======================================================================= -QStringList SMESHGUI_FilterLibraryDlg::prepareFilters() const -{ - static QStringList aList; - if (aList.isEmpty()) - { - aList.append(tr("XML_FILT")); - //aList.append(tr("ALL_FILES_FILTER")); - } - - return aList; -} - -//================================================================ -// Function : onBrowse -// Purpose : SLOT. Display "Open file" dialog for chosing library name -//================================================================ -void SMESHGUI_FilterLibraryDlg::onBrowse() -{ - Dialog* aDlg = new Dialog(this, true); - aDlg->setCaption(tr("OPEN_LIBRARY")); - - //aDlg->setMode(myMode == COPY_FROM ? QFileDialogP::ExistingFile : QFileDialogP::AnyFile); - aDlg->setMode(myMode == COPY_FROM ? QFileDialog::ExistingFile : QFileDialog::AnyFile); - aDlg->setFilters(prepareFilters()); - aDlg->setSelection(getFileName()); - - QPushButton* anOkBtn = (QPushButton*)aDlg->child("OK", "QPushButton"); - if (anOkBtn != 0) - anOkBtn->setText(tr("SMESH_BUT_OK")); - - if (aDlg->exec() != Accepted) - return; - - QString fName = aDlg->selectedFile(); - - if (fName.isEmpty()) - return; - - if (QFileInfo(fName).extension().isEmpty()) - fName = autoExtension(fName); - - fName = QDir::convertSeparators(fName); - QString prev = QDir::convertSeparators(getFileName()); - - if (prev == fName) - return; - - setFileName(fName); - - QString aName = myListBox->text(myListBox->count() - 1); - processNewLibrary(); - - if (myMode == ADD_TO) - { - myTable->Copy((SMESHGUI_FilterTable*)parentWidget()); - myCurrFilterName = ""; - myCurrFilter = -1; - addFilterToLib(aName); - } - - isPermissionValid(false); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::processNewLibrary -// Purpose : SLOT. Calleds when file name changed -//======================================================================= -void SMESHGUI_FilterLibraryDlg::processNewLibrary() -{ - SMESH::FilterManager_var aFilterMgr = SMESH::GetFilterManager(); - if (aFilterMgr->_is_nil()) - return; - - myLibrary = aFilterMgr->LoadLibrary(autoExtension(getFileName())); - if (myLibrary->_is_nil()) { - if (myMode == COPY_FROM) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("ERROR_LOAD"), QMessageBox::Ok); - return; - } else { - myLibrary = aFilterMgr->CreateLibrary(); - myLibrary->SetFileName(getFileName().latin1()); - } - } - - updateList(); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::updateList -// Purpose : Fill list box with filter names -//======================================================================= -void SMESHGUI_FilterLibraryDlg::updateList() -{ - QStringList aList; - SMESH::string_array_var aNames = myLibrary->GetNames((SMESH::ElementType)myTable->GetType()); - for (int i = 0, n = aNames->length(); i < n; i++) - aList.append(QString(aNames[ i ])); - myListBox->clear(); - myListBox->insertStringList(aList); - if (myListBox->count() == 0) - { - myTable->Clear(myTable->GetType()); - myName->clear(); - myName->setEnabled(false); - myTable->SetEnabled(false); - } - else - { - myName->setEnabled(true); - myTable->SetEnabled(true); - if (myListBox->count()) - { - myCurrFilterName = ""; - myListBox->setCurrentItem(0); - } - } -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::isNameValid -// Purpose : Verify validity if entered data -//======================================================================= -bool SMESHGUI_FilterLibraryDlg::isNameValid(const bool theMess) const -{ - // verify validity of filter name - if (myName->isEnabled() && !myCurrFilterName.isEmpty()) { - QString aCurrName = myName->text(); - if (aCurrName.isEmpty()) { - if (theMess) - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), - tr("EMPTY_FILTER_NAME"), QMessageBox::Ok); - return false; - } - - SMESH::string_array_var aNames = myLibrary->GetAllNames(); - for (int f = 0, n = aNames->length(); f < n; f++) { - if (aNames[ f ] == aCurrName && aNames[ f ] != myCurrFilterName) { - if (theMess) - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), - tr("ERROR_FILTER_NAME"), QMessageBox::Ok); - return false; - } - } - } - - return true; -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::isPermissionValid -// Purpose : Verify write permission on file -//======================================================================= -bool SMESHGUI_FilterLibraryDlg::isPermissionValid(const bool theIsExistingOnly) -{ - if (myMode == COPY_FROM) - return true; - - // Verify write permission - bool isWritable = false; - - QString fName(myFileName->text()); - if (QFileInfo(fName).extension().isEmpty()) - fName = autoExtension(fName); - - fName = QDir::convertSeparators(fName); - - if (QFileInfo(fName).exists()) { - isWritable = QFileInfo(fName).isWritable(); - } else if (!theIsExistingOnly) { - QFileInfo aDirInfo(QFileInfo(fName).dirPath(true)); - isWritable = aDirInfo.isWritable(); - /*if (QDir(QFileInfo(fName).dirPath(true)).exists() || - QDir().mkdir(QFileInfo(fName).dirPath(true))) - { - QFile aFile(fName); - if (aFile.open(IO_WriteOnly)) - isWritable = true; - else - aFile.close(); - } - */ - } else { - isWritable = true; - } - - if (!isWritable) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_WRN_WARNING"), - tr("NO_PERMISSION"), QMessageBox::Ok); - return false; - } - - return true; -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::isValid -// Purpose : Verify validity if entered data -//======================================================================= -bool SMESHGUI_FilterLibraryDlg::isValid(const bool theMess) const -{ - // verify validity of table - if (!myTable->IsValid(theMess) || !isNameValid(theMess)) - return false; - else - return true; -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::onFilterChanged -// Purpose : SLOT. Called when selected filter of library changed -//======================================================================= -void SMESHGUI_FilterLibraryDlg::onFilterChanged(const QString& theName) -{ - if (myLibrary->_is_nil()) - return; - - // Save parameters of filter if it was changed - - if (!myCurrFilterName.isEmpty() && myTable->IsEditable()) - { - if (!isValid(true)) - { - myListBox->blockSignals(true); - myListBox->setCurrentItem(myCurrFilter); - myListBox->blockSignals(false); - return; - } - - SMESH::Filter_var aFilter = createFilter(); - myLibrary->Replace(myCurrFilterName.latin1(), myName->text().latin1(), aFilter); - } - - // Fill table with filter parameters - - SMESH::Filter_var aFilter = myLibrary->Copy(theName); - myCurrFilterName = theName; - myCurrFilter = myListBox->currentItem(); - myName->setText(theName); - - - SMESH::Filter::Criteria_var aCriteria; - - myTable->Clear(myTable->GetType()); - - if (!aFilter->GetCriteria(aCriteria)) - return; - - for (int i = 0, n = aCriteria->length(); i < n; i++) - myTable->AddCriterion(aCriteria[ i ], myTable->GetType()); - - myTable->Update(); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::onReturnPressed -// Purpose : SLOT. Called when enter button is pressed in library name field -// Reload library -//======================================================================= -void SMESHGUI_FilterLibraryDlg::onReturnPressed() -{ - QString aName = myListBox->text(myListBox->count() - 1); - - processNewLibrary(); - - if (myMode == ADD_TO) - { - myTable->Copy((SMESHGUI_FilterTable*)parentWidget()); - myCurrFilterName = ""; - myCurrFilter = -1; - addFilterToLib(aName); - } - - isPermissionValid(false); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::enableMainButtons -// Purpose : Update state of "OK", "Cancel" buttons -//======================================================================= -void SMESHGUI_FilterLibraryDlg::enableMainButtons() -{ - /*bool isEnabled = isValid(false); - if (myButtons.contains(BTN_OK)) - myButtons[ BTN_OK ]->setEnabled(isEnabled); - else if (myButtons.contains(BTN_Apply)) - myButtons[ BTN_OK ]->setEnabled(isEnabled); - if (myButtons.contains(BTN_Cancel)) - myButtons[ BTN_Cancel ]->setEnabled(isEnabled); - else if (myButtons.contains(BTN_Close)) - myButtons[ BTN_Cancel ]->setEnabled(isEnabled); - */ -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::createFilter -// Purpose : Cerate filter in accordance with library -//======================================================================= -SMESH::Filter_ptr SMESHGUI_FilterLibraryDlg::createFilter(const int theType) -{ - int n = myTable->NumRows(theType); - - SMESH::Filter::Criteria_var aCriteria = new SMESH::Filter::Criteria; - aCriteria->length(n); - - for (int i = 0; i < n; i++) - { - SMESH::Filter::Criterion aCriterion = SMESHGUI_FilterDlg::createCriterion(); - myTable->GetCriterion(i, aCriterion); - aCriteria[ i ] = aCriterion; - } - - SMESH::FilterManager_var aFilterMgr = SMESH::GetFilterManager(); - SMESH::Filter_var aFilter = aFilterMgr->CreateFilter(); - aFilter->SetCriteria(aCriteria.inout()); - - return aFilter._retn(); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::onAddBtnPressed -// Purpose : SLOT. Called when "Add" button pressed -// Add new filter to the end of library -//======================================================================= -void SMESHGUI_FilterLibraryDlg::onAddBtnPressed() -{ - // Save parameters of filter if it was changed - if (!myCurrFilterName.isEmpty() && myTable->IsEditable()) - { - if (!isValid(true)) - return; - - SMESH::Filter_var aFilter = createFilter(); - myLibrary->Replace(myCurrFilterName.latin1(), myName->text().latin1(), aFilter); - } - - addFilterToLib(getDefaultFilterName()); -} - -//======================================================================= -// name : onAddBtnPressed() -// Purpose : SLOT. Called when "Add" button pressed -// Add new filter to the end of library -//======================================================================= -void SMESHGUI_FilterLibraryDlg::addFilterToLib (const QString& theName) -{ - if (myLibrary->_is_nil()) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_WRN_WARNING"), - tr("LIBRARY_IS_NOT_LOADED"), QMessageBox::Ok); - return; - } - - // create filter - SMESH::Filter_var aFilter = createFilter(); - - // if name of filter already exist in the library assign default name for the filter - QString aName(theName); - SMESH::string_array_var aNames = myLibrary->GetAllNames(); - for (int i = 0, n = aNames->length(); i < n; i++) - if (aName == QString(aNames[ i ])) - { - aName = getDefaultFilterName(); - break; - } - - // add new filter in library - bool aResult = !aFilter->GetPredicate()->_is_nil() - ? myLibrary->Add(aName.latin1(), aFilter) - : myLibrary->AddEmpty(aName.latin1(), (SMESH::ElementType)myTable->GetType()); - - if (!aResult) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("ERROR_OF_ADDING"), QMessageBox::Ok); - } - - updateList(); - myCurrFilterName = ""; - myCurrFilter = -1; - setSelected(aName); - - if (theName != aName) - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_WARNING"), - tr("ASSIGN_NEW_NAME").arg(theName).arg(aName), QMessageBox::Ok); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::getDefaultLibraryName -// Purpose : Get default library name -//======================================================================= -QString& SMESHGUI_FilterLibraryDlg::getDefaultLibraryName() const -{ - static QString aName; - if (aName.isEmpty()) - { - QString aHomeDir = QDir(QDir::home()).absPath(); - aName = aHomeDir + "/" + tr ("LIB_NAME"); - } - return aName; -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::getDefaultFilterName -// Purpose : Create default filter name -//======================================================================= -QString SMESHGUI_FilterLibraryDlg::getDefaultFilterName() const -{ - QString aName; - - if (myTable->GetType() == SMESH::NODE) - aName = tr("NODE"); - else if (myTable->GetType() == SMESH::EDGE) - aName = tr("EDGE"); - else if (myTable->GetType() == SMESH::FACE) - aName = tr("FACE"); - else if (myTable->GetType() == SMESH::VOLUME) - aName = tr("VOLUME"); - else if (myTable->GetType() == SMESH::ALL) - aName = tr("ELEMENT"); - else - aName = tr("SELECTION"); - - aName += tr("FILTER"); - - - QMap< QString, int > anAllNames; - SMESH::string_array_var aNames = myLibrary->GetAllNames(); - for(int i = 0, n = aNames->length(); i < n; i++) - anAllNames[ QString(aNames[ i ]) ] = -1; - - bool isNotValid = true; - int k = 1; - QString aNewName; - while (isNotValid) - { - isNotValid = false; - aNewName = aName + "_" + QString("%1").arg(k); - if (anAllNames.contains(aNewName)) - { - isNotValid = true; - k++; - } - } - - return aNewName; -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::setSelected -// Purpose : set selected item in list box containing filters -//======================================================================= -bool SMESHGUI_FilterLibraryDlg::setSelected(const QString& theName) -{ - int anIndex = getIndex(theName); - if (anIndex != -1) - { - myListBox->setCurrentItem(anIndex); - myCurrFilterName = theName; - myCurrFilter = anIndex; - } - return anIndex != -1; -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::getIndex -// Purpose : Get index of the filter in list box -//======================================================================= -int SMESHGUI_FilterLibraryDlg::getIndex(const QString& theName) const -{ - for (int i = 0, n = myListBox->count(); i < n; i++) - if (myListBox->text(i) == theName) - return i; - return -1; -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::onDeleteBtnPressed -// Purpose : SLOT. Called when "Delete" button pressed -//======================================================================= -void SMESHGUI_FilterLibraryDlg::onDeleteBtnPressed() -{ - if (myLibrary->_is_nil()) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_WRN_WARNING"), - tr("LIBRARY_IS_NOT_LOADED"), QMessageBox::Ok); - return; - } - - int anIndex = getIndex(myCurrFilterName); - - if (anIndex == -1 || !myLibrary->Delete(myCurrFilterName.latin1())) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("ERROR_OF_DELETING"), QMessageBox::Ok); - } else { - myCurrFilterName = ""; - myCurrFilterName = -1; - myListBox->removeItem(anIndex); - - if (anIndex >= 1) - myListBox->setSelected(anIndex - 1, true); - else if (anIndex == 0 && myListBox->count() > 0) - myListBox->setSelected(0, true); - else - myTable->Clear(); - } - - myTable->SetEnabled(myListBox->count() > 0); - if (myListBox->count() == 0) { - myName->setText(""); - myName->setEnabled(false); - } -} - -//======================================================================= -// name : onFilterNameChanged() -// Purpose : SLOT. Called when name of filter changed -// Change filter name in list box -//======================================================================= -void SMESHGUI_FilterLibraryDlg::onFilterNameChanged (const QString& theName) -{ - int aCurrItem = myListBox->currentItem(); - if (aCurrItem == -1) - return; - - myListBox->blockSignals(true); - myListBox->changeItem(theName, aCurrItem); - myListBox->blockSignals(false); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::SetTable -// Purpose : Set table -//======================================================================= -void SMESHGUI_FilterLibraryDlg::SetTable(const SMESHGUI_FilterTable* theTable) -{ - myTable->Copy(theTable); - myName->setText(getDefaultFilterName()); - addFilterToLib(myName->text()); - myTable->Update(); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::GetTable -// Purpose : Get table -//======================================================================= -const SMESHGUI_FilterTable* SMESHGUI_FilterLibraryDlg::GetTable() const -{ - return myTable; -} - - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::onEntityTypeChanged -// Purpose : SLOT. Called when entiyt type changed -//======================================================================= -void SMESHGUI_FilterLibraryDlg::onEntityTypeChanged(const int theType) -{ - if (myLibrary->_is_nil()) - return; - - myName->clear(); - myCurrFilterName = ""; - myCurrFilter = -1; - updateList(); - if (myListBox->count()) - myListBox->setCurrentItem(0); -} - -//======================================================================= -// name : SMESHGUI_FilterLibraryDlg::onNeedValidation -// Purpose : -//======================================================================= -void SMESHGUI_FilterLibraryDlg::onNeedValidation() -{ - if (!myCurrFilterName.isEmpty()) - { - bool valid = isValid(true); - myTable->SetValidity(valid); - - if (valid) - { - SMESH::Filter_var aFilter = createFilter(myTable->GetType()); - myLibrary->Replace(myCurrFilterName.latin1(), myName->text().latin1(), aFilter); - } - } -} diff --git a/src/SMESHGUI/SMESHGUI_FilterLibraryDlg.h b/src/SMESHGUI/SMESHGUI_FilterLibraryDlg.h deleted file mode 100644 index 8fbc6f998..000000000 --- a/src/SMESHGUI/SMESHGUI_FilterLibraryDlg.h +++ /dev/null @@ -1,157 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_FilterLibraryDlg.h -// Author : Sergey LITONIN -// Module : SMESH - - -#ifndef SMESHGUI_FilterLibraryDlg_H -#define SMESHGUI_FilterLibraryDlg_H - -#include -#include - -#include -#include CORBA_SERVER_HEADER(SMESH_Filter) - -class QCloseEvent; -class QListBox; -class QFrame; -class QEvent; -class QLineEdit; -class QPushButton; -class QGroupBox; - -/* - Class : SMESHGUI_FilterLibraryDlg - Description : Dialog to specify filters for VTK viewer -*/ - -class SMESHGUI_FilterLibraryDlg : public QDialog -{ - Q_OBJECT - - // Buttons - enum { BTN_OK, BTN_Cancel, BTN_Apply, BTN_Close }; - - class Dialog; - -public: - - // Mode - enum { ADD_TO, COPY_FROM, EDIT }; - -public: - - SMESHGUI_FilterLibraryDlg( SMESHGUI*, - QWidget*, - const QValueList& types, - const int mode, - const char* name = 0 ); - - SMESHGUI_FilterLibraryDlg( SMESHGUI*, - QWidget*, - const int type, - const int mode, - const char* name = 0 ); - - virtual ~SMESHGUI_FilterLibraryDlg(); - - void Init( const QValueList& types, const int theMode ); - void Init( const int type, const int theMode ); - - const SMESHGUI_FilterTable* GetTable() const; - void SetTable( const SMESHGUI_FilterTable* ); - -private: - - void closeEvent( QCloseEvent* e ) ; - void enterEvent ( QEvent * ) ; - -private slots: - - void onOk(); - bool onApply(); - void onClose(); - - void onDeactivate(); - - void onBrowse(); - void onReturnPressed(); - void onFilterChanged( const QString& ); - void onAddBtnPressed(); - void onDeleteBtnPressed(); - void onFilterNameChanged( const QString& ); - void onEntityTypeChanged( const int ); - void onNeedValidation(); - -private: - - void construct( const QValueList& types, const int mode ); - QFrame* createButtonFrame( QWidget* ); - QFrame* createMainFrame ( QWidget* ); - bool isValid( const bool theMess = true ) const; - bool isNameValid( const bool theMess = true ) const; - SMESH::Filter_ptr createFilter( const int theType = -1 ); - QStringList prepareFilters() const; - QString autoExtension( const QString& ) const; - bool setSelected( const QString& ); - int getIndex( const QString& ) const; - void updateControlsVisibility(); - void updateMainButtons(); - void enableMainButtons(); - void processNewLibrary(); - QString getFileName() const; - void setFileName( const QString& txt, const bool autoExtension = true ); - QStringList filterWildCards( const QString& theFilter ) const; - QString& getDefaultLibraryName() const; - QString getDefaultFilterName() const; - void addFilterToLib( const QString& name ); - void updateList(); - bool isPermissionValid( const bool theIsExistingOnly ); - -private: - - QFrame* myMainFrame; - QMap myButtons; - SMESHGUI_FilterTable* myTable; - QLineEdit* myFileName; - QPushButton* myOpenBtn; - QListBox* myListBox; - QPushButton* myAddBtn; - QPushButton* myDeleteBtn; - QGroupBox* myNameGrp; - QLineEdit* myName; - SMESHGUI* mySMESHGUI; - - QValueList myTypes; - int myMode; - - SMESH::FilterLibrary_var myLibrary; - QString myCurrFilterName; - int myCurrFilter; - -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_FilterUtils.cxx b/src/SMESHGUI/SMESHGUI_FilterUtils.cxx deleted file mode 100644 index 360d00486..000000000 --- a/src/SMESHGUI/SMESHGUI_FilterUtils.cxx +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - - -#include "SMESHGUI_FilterUtils.h" - -#include "SMESHGUI.h" - -namespace SMESH -{ - SMESH::FilterManager_var GetFilterManager() - { - static SMESH::FilterManager_var aFilterManager; - if (CORBA::is_nil(aFilterManager)){ - aFilterManager = SMESHGUI::GetSMESHGen()->CreateFilterManager(); - } - return aFilterManager; - } -} diff --git a/src/SMESHGUI/SMESHGUI_FilterUtils.h b/src/SMESHGUI/SMESHGUI_FilterUtils.h deleted file mode 100644 index 85bd3d01a..000000000 --- a/src/SMESHGUI/SMESHGUI_FilterUtils.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef SMESHGUI_FilterUtils_HeaderFile -#define SMESHGUI_FilterUtils_HeaderFile - -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Filter) - - -namespace SMESH{ - - SMESH::FilterManager_var GetFilterManager(); - -} - - -#endif diff --git a/src/SMESHGUI/SMESHGUI_GEOMGenUtils.cxx b/src/SMESHGUI/SMESHGUI_GEOMGenUtils.cxx deleted file mode 100644 index c9ffc82e6..000000000 --- a/src/SMESHGUI/SMESHGUI_GEOMGenUtils.cxx +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include - -#include "SMESHGUI_GEOMGenUtils.h" -#include "SMESHGUI_Utils.h" - -#include - -#include -#include -#include - -#include CORBA_CLIENT_HEADER(SMESH_Mesh) - - -namespace SMESH { - - GEOM::GEOM_Gen_var GetGEOMGen() - { - static GEOM::GEOM_Gen_var aGEOMGen; - - if(CORBA::is_nil(aGEOMGen)) - aGEOMGen = GeometryGUI::GetGeomGen(); - return aGEOMGen; - } - - GEOM::GEOM_Object_var GetShapeOnMeshOrSubMesh(_PTR(SObject) theMeshOrSubmesh) - { - SALOMEDS_SObject* aMeshOrSubmesh = _CAST(SObject,theMeshOrSubmesh); - if(aMeshOrSubmesh) { - CORBA::Object_var Obj = aMeshOrSubmesh->GetObject(); - if ( !CORBA::is_nil( Obj ) ) { - SMESH::SMESH_Mesh_var aMesh = - SObjectToInterface( theMeshOrSubmesh ); - if ( !aMesh->_is_nil() ) - return aMesh->GetShapeToMesh(); - SMESH::SMESH_subMesh_var aSubmesh = - SObjectToInterface( theMeshOrSubmesh ); - if ( !aSubmesh->_is_nil() ) - return aSubmesh->GetSubShape(); - } - } - return GEOM::GEOM_Object::_nil(); - } - - GEOM::GEOM_Object_ptr GetGeom (_PTR(SObject) theSO) - { - if (!theSO) - return GEOM::GEOM_Object::_nil(); - - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); - if (!aStudy) - return GEOM::GEOM_Object::_nil(); - - _PTR(ChildIterator) anIter (aStudy->NewChildIterator(theSO)); - for (; anIter->More(); anIter->Next()) { - _PTR(SObject) aSObject = anIter->Value(); - _PTR(SObject) aRefSOClient; - GEOM::GEOM_Object_var aMeshShape; - - if (aSObject->ReferencedObject(aRefSOClient)) { - SALOMEDS_SObject* aRefSO = _CAST(SObject,aRefSOClient); - aMeshShape = GEOM::GEOM_Object::_narrow(aRefSO->GetObject()); - } else { - SALOMEDS_SObject* aSO = _CAST(SObject,aSObject); - aMeshShape = GEOM::GEOM_Object::_narrow(aSO->GetObject()); - } - - if (!aMeshShape->_is_nil()) - return aMeshShape._retn(); - } - return GEOM::GEOM_Object::_nil(); - } -} diff --git a/src/SMESHGUI/SMESHGUI_GEOMGenUtils.h b/src/SMESHGUI/SMESHGUI_GEOMGenUtils.h deleted file mode 100644 index 6f2ccb9b3..000000000 --- a/src/SMESHGUI/SMESHGUI_GEOMGenUtils.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef SMESHGUI_GEOMGenUtils_HeaderFile -#define SMESHGUI_GEOMGenUtils_HeaderFile - -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(GEOM_Gen) - -#include "SALOMEDSClient_definitions.hxx" - -class SALOMEDSClient_SObject; - -namespace SMESH -{ - GEOM::GEOM_Gen_var GetGEOMGen(); - - GEOM::GEOM_Object_var GetShapeOnMeshOrSubMesh (_PTR(SObject) theSObject); - - GEOM::GEOM_Object_ptr GetGeom (_PTR(SObject) theSO); -} - -#endif diff --git a/src/SMESHGUI/SMESHGUI_GroupDlg.h b/src/SMESHGUI/SMESHGUI_GroupDlg.h deleted file mode 100644 index 112738099..000000000 --- a/src/SMESHGUI/SMESHGUI_GroupDlg.h +++ /dev/null @@ -1,166 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_GroupDlg.h -// Author : Natalia KOPNOVA -// Module : SMESH -// $Header$ - -#ifndef DIALOGBOX_GROUP_H -#define DIALOGBOX_GROUP_H - -#include "SalomeApp_SelectionMgr.h" -//#include "SMESH_TypeFilter.hxx" -#include "SUIT_SelectionFilter.h" - -// QT Includes -#include -#include - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_Group) - -class QLineEdit; -class QButtonGroup; -class QGroupBox; -class QListBox; -class QPushButton; -class QCheckBox; -class QWidgetStack; -class SMESHGUI; -class SMESH_Actor; -class SMESHGUI_FilterDlg; -class SVTK_Selector; -class SVTK_ViewWindow; - -//================================================================================= -// class : SMESHGUI_GroupDlg -// purpose : -//================================================================================= -class SMESHGUI_GroupDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_GroupDlg( SMESHGUI*, - const char* name = 0, - SMESH::SMESH_Mesh_ptr theMesh = SMESH::SMESH_Mesh::_nil(), - bool modal = FALSE, WFlags fl = 0 ); - SMESHGUI_GroupDlg( SMESHGUI*, - const char* name, - SMESH::SMESH_Group_ptr theGroup, - bool modal = FALSE, WFlags fl = 0 ); - ~SMESHGUI_GroupDlg(); - -public slots: - - void onAdd(); - void onRemove(); - - -private slots: - - void onTypeChanged(int id); - void onGrpTypeChanged(int id); - - void onOK(); - void onClose(); - bool onApply(); - void onDeactivate(); - - void onListSelectionChanged(); - void onObjectSelectionChanged(); - - void onSelectSubMesh(bool on); - void onSelectGroup(bool on); - void onSelectGeomGroup(bool on); - void setCurrentSelection(); - - void setFilters(); - void onSort(); - - void onNameChanged(const QString& text); - void onFilterAccepted(); - -private: - void initDialog(bool create); - void init(SMESH::SMESH_Mesh_ptr theMesh); - void init(SMESH::SMESH_Group_ptr theGroup); - void closeEvent(QCloseEvent* e); - void enterEvent (QEvent*); - void hideEvent (QHideEvent*); /* ESC key */ - void setSelectionMode(int theMode); - void updateButtons(); - - SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ - SalomeApp_SelectionMgr* mySelectionMgr; /* User shape selection */ - SMESH_Actor* myActor; /* Current mesh actor */ - int myGrpTypeId; /* Current group type id : standalone or group on geometry */ - int myTypeId; /* Current type id = radio button id */ - QLineEdit* myCurrentLineEdit; /* Current LineEdit */ - SVTK_Selector* mySelector; - - QPushButton* myMeshGroupBtn; - QLineEdit* myMeshGroupLine; - - QButtonGroup* myTypeGroup; - QLineEdit* myName; - - QButtonGroup* myGrpTypeGroup; - - QWidgetStack* myWGStack; - QListBox* myElements; - QPushButton* myFilter; - - QCheckBox* mySelectSubMesh; - QPushButton* mySubMeshBtn; - QLineEdit* mySubMeshLine; - - QCheckBox* mySelectGroup; - QPushButton* myGroupBtn; - QLineEdit* myGroupLine; - - QCheckBox* mySelectGeomGroup; - QPushButton* myGeomGroupBtn; - QLineEdit* myGeomGroupLine; - - SMESH::SMESH_Mesh_var myMesh; - SMESH::SMESH_Group_var myGroup; - QValueList myIdList; - GEOM::GEOM_Object_var myGeomGroup; - - int mySelectionMode; - //Handle(SMESH_TypeFilter) myMeshFilter; - //Handle(SMESH_TypeFilter) mySubMeshFilter; - //Handle(SMESH_TypeFilter) myGroupFilter; - SUIT_SelectionFilter* myMeshFilter; - SUIT_SelectionFilter* mySubMeshFilter; - SUIT_SelectionFilter* myGroupFilter; - - SMESHGUI_FilterDlg* myFilterDlg; - - bool myCreate, myIsBusy; -}; - -#endif // DIALOGBOX_GROUP_H diff --git a/src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx b/src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx deleted file mode 100644 index 5cff77713..000000000 --- a/src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx +++ /dev/null @@ -1,384 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_GroupOpDlg.cxx -// Author : Sergey LITONIN -// Module : SMESH - -#include "SMESHGUI_GroupOpDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" - -#include "SMESH_TypeFilter.hxx" - -#include "SUIT_ResourceMgr.h" -#include "SUIT_Desktop.h" - -#include "SalomeApp_SelectionMgr.h" -#include "SVTK_Selection.h" -#include "SVTK_ViewWindow.h" -#include "SVTK_Selector.h" -#include "SALOME_ListIO.hxx" - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include - -#define SPACING 5 -#define MARGIN 10 - -/*! - * Class : SMESHGUI_GroupOpDlg - * Description : Perform boolean operations on groups - */ - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::SMESHGUI_GroupOpDlg -// Purpose : Constructor -//======================================================================= -SMESHGUI_GroupOpDlg::SMESHGUI_GroupOpDlg( SMESHGUI* theModule, const int theMode ) - : QDialog( SMESH::GetDesktop( theModule ), "SMESHGUI_GroupOpDlg", false, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), - mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) -{ - myMode = theMode; - - if (myMode == UNION) setCaption(tr("UNION_OF_TWO_GROUPS")); - else if (myMode == INTERSECT) setCaption(tr("INTERSECTION_OF_TWO_GROUPS")); - else setCaption(tr("CUT_OF_TWO_GROUPS")); - - mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); - - QVBoxLayout* aDlgLay = new QVBoxLayout (this, MARGIN, SPACING); - - QFrame* aMainFrame = createMainFrame (this); - QFrame* aBtnFrame = createButtonFrame(this); - - aDlgLay->addWidget(aMainFrame); - aDlgLay->addWidget(aBtnFrame); - - aDlgLay->setStretchFactor(aMainFrame, 1); - - Init(); -} - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::createMainFrame -// Purpose : Create frame containing dialog's input fields -//======================================================================= -QFrame* SMESHGUI_GroupOpDlg::createMainFrame (QWidget* theParent) -{ - QGroupBox* aMainGrp = new QGroupBox(1, Qt::Horizontal, theParent); - aMainGrp->setFrameStyle(QFrame::NoFrame); - aMainGrp->setInsideMargin(0); - - QGroupBox* aNameGrp = new QGroupBox(1, Qt::Vertical, tr("NAME"), aMainGrp); - new QLabel(tr("RESULT_NAME"), aNameGrp); - myNameEdit = new QLineEdit(aNameGrp); - - QGroupBox* anArgGrp = new QGroupBox(3, Qt::Horizontal, tr("ARGUMENTS"), aMainGrp); - - new QLabel(myMode == CUT ? tr("MAIN_OBJECT") :tr("OBJECT_1"), anArgGrp); - myBtn1 = new QPushButton(anArgGrp); - myEdit1 = new QLineEdit(anArgGrp); - myEdit1->setAlignment( Qt::AlignLeft ); - - new QLabel(myMode == CUT ? tr("TOOL_OBJECT") :tr("OBJECT_2"), anArgGrp); - myBtn2 = new QPushButton(anArgGrp); - myEdit2 = new QLineEdit(anArgGrp); - myEdit2->setAlignment( Qt::AlignLeft ); - - myEdit1->setReadOnly(true); - myEdit2->setReadOnly(true); - - QPixmap aPix (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); - myBtn1->setPixmap(aPix); - myBtn2->setPixmap(aPix); - - return aMainGrp; -} - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::createButtonFrame -// Purpose : Create frame containing buttons -//======================================================================= -QFrame* SMESHGUI_GroupOpDlg::createButtonFrame (QWidget* theParent) -{ - QFrame* aFrame = new QFrame(theParent); - aFrame->setFrameStyle(QFrame::Box | QFrame::Sunken); - - myOkBtn = new QPushButton(tr("SMESH_BUT_OK" ), aFrame); - myApplyBtn = new QPushButton(tr("SMESH_BUT_APPLY"), aFrame); - myCloseBtn = new QPushButton(tr("SMESH_BUT_CLOSE"), aFrame); - - QSpacerItem* aSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); - - QHBoxLayout* aLay = new QHBoxLayout(aFrame, MARGIN, SPACING); - - aLay->addWidget(myOkBtn); - aLay->addWidget(myApplyBtn); - aLay->addItem(aSpacer); - aLay->addWidget(myCloseBtn); - - // connect signals and slots - connect(myOkBtn, SIGNAL(clicked()), SLOT(onOk())); - connect(myCloseBtn, SIGNAL(clicked()), SLOT(onClose())); - connect(myApplyBtn, SIGNAL(clicked()), SLOT(onApply())); - - return aFrame; -} - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::~SMESHGUI_GroupOpDlg -// Purpose : Destructor -//======================================================================= -SMESHGUI_GroupOpDlg::~SMESHGUI_GroupOpDlg() -{ -} - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::Init -// Purpose : Init dialog fields, connect signals and slots, show dialog -//======================================================================= -void SMESHGUI_GroupOpDlg::Init() -{ - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - myFocusWg = myEdit1; - - myGroup1 = SMESH::SMESH_GroupBase::_nil(); - myGroup2 = SMESH::SMESH_GroupBase::_nil(); - - // selection and SMESHGUI - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone())); - connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate())); - connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(ClickOnClose())); - - connect(myBtn1, SIGNAL(clicked()), this, SLOT(onFocusChanged())); - connect(myBtn2, SIGNAL(clicked()), this, SLOT(onFocusChanged())); - - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); - - // set selection mode - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(new SMESH_TypeFilter (GROUP)); - - return; -} - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::isValid -// Purpose : Verify validity of input data -//======================================================================= -bool SMESHGUI_GroupOpDlg::isValid() -{ - // Verify validity of group name - if (myNameEdit->text() == "") { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), - tr("EMPTY_NAME"), QMessageBox::Ok); - return false; - } - - // Verufy wheter arguments speciffiyed - if (myGroup1->_is_nil() || myGroup2->_is_nil()) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), - tr("INCORRECT_ARGUMENTS"), QMessageBox::Ok); - return false; - } - - // Verify whether arguments belongs to same mesh - SMESH::SMESH_Mesh_ptr aMesh1 = myGroup1->GetMesh(); - SMESH::SMESH_Mesh_ptr aMesh2 = myGroup2->GetMesh(); - - int aMeshId1 = !aMesh1->_is_nil() ? aMesh1->GetId() : -1; - int aMeshId2 = !aMesh2->_is_nil() ? aMesh2->GetId() : -1; - - if (aMeshId1 != aMeshId2 || aMeshId1 == -1) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), - tr("DIFF_MESHES"), QMessageBox::Ok); - return false; - } - - // Verify whether groups have same types of entities - if (myGroup1->GetType() != myGroup2->GetType()) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), - tr("DIFF_TYPES"), QMessageBox::Ok); - return false; - } - - return true; -} - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::onApply -// Purpose : SLOT called when "Apply" button pressed. -//======================================================================= -bool SMESHGUI_GroupOpDlg::onApply() -{ - if (!isValid() || mySMESHGUI->isActiveStudyLocked()) - return false; - - SMESH::SMESH_Mesh_ptr aMesh = myGroup1->GetMesh(); - QString aName = myNameEdit->text(); - SMESH::SMESH_Group_ptr aNewGrp = SMESH::SMESH_Group::_nil(); - - if (myMode == UNION) aNewGrp = aMesh->UnionGroups(myGroup1, myGroup2, aName.latin1()); - else if (myMode == INTERSECT) aNewGrp = aMesh->IntersectGroups(myGroup1, myGroup2, aName.latin1()); - else aNewGrp = aMesh->CutGroups(myGroup1, myGroup2, aName.latin1()); - - if (!aNewGrp->_is_nil()) { - mySMESHGUI->updateObjBrowser(true); - reset(); - return true; - } else { - QMessageBox::critical(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("SMESH_OPERATION_FAILED"), "OK"); - return false; - } -} - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::onOk -// Purpose : SLOT called when "Ok" button pressed. -//======================================================================= -void SMESHGUI_GroupOpDlg::onOk() -{ - if (onApply()) - onClose(); -} - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::onClose -// Purpose : SLOT called when "Close" button pressed. Close dialog -//======================================================================= -void SMESHGUI_GroupOpDlg::onClose() -{ - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - disconnect(mySelectionMgr, 0, this, 0); - disconnect(mySMESHGUI, 0, this, 0); - mySMESHGUI->ResetState(); - mySelectionMgr->clearFilters(); - reject(); -} - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::onSelectionDone -// Purpose : SLOT called when selection changed -//======================================================================= -void SMESHGUI_GroupOpDlg::onSelectionDone() -{ - if (myFocusWg == myEdit1) - myGroup1 = SMESH::SMESH_GroupBase::_nil(); - else - myGroup2 = SMESH::SMESH_GroupBase::_nil(); - - myFocusWg->setText(""); - - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList); - - if (aList.Extent() == 1) { - SMESH::SMESH_GroupBase_var aGroup = - SMESH::IObjectToInterface(aList.First()); - - if (!aGroup->_is_nil()) - { - myFocusWg->setText(aGroup->GetName()); - myFocusWg->setCursorPosition( 0 ); - - if (myFocusWg == myEdit1) - myGroup1 = aGroup; - else - myGroup2 = aGroup; - } - } -} - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::onDeactivate -// Purpose : SLOT called when dialog must be deativated -//======================================================================= -void SMESHGUI_GroupOpDlg::onDeactivate() -{ - setEnabled(false); - mySelectionMgr->clearFilters(); -} - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::enterEvent -// Purpose : Event filter -//======================================================================= -void SMESHGUI_GroupOpDlg::enterEvent (QEvent*) -{ - mySMESHGUI->EmitSignalDeactivateDialog(); - setEnabled(true); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(new SMESH_TypeFilter (GROUP)); -} - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::closeEvent -// purpose : -//======================================================================= -void SMESHGUI_GroupOpDlg::closeEvent (QCloseEvent*) -{ - onClose(); -} - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::onFocusChanged -// Purpose : SLOT. Called when "Select" button pressed. -//======================================================================= -void SMESHGUI_GroupOpDlg::onFocusChanged() -{ - const QObject* aSender = sender(); - myFocusWg = aSender == myBtn1 ? myEdit1 : myEdit2; - onSelectionDone(); -} - -//======================================================================= -// name : SMESHGUI_GroupOpDlg::reset -// Purpose : Rest state of dialog -//======================================================================= -void SMESHGUI_GroupOpDlg::reset() -{ - myNameEdit->setText(""); - myEdit1->setText(""); - myEdit2->setText(""); - myFocusWg = myEdit1; - myNameEdit->setFocus(); -} diff --git a/src/SMESHGUI/SMESHGUI_GroupOpDlg.h b/src/SMESHGUI/SMESHGUI_GroupOpDlg.h deleted file mode 100644 index 774455d4e..000000000 --- a/src/SMESHGUI/SMESHGUI_GroupOpDlg.h +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_GroupOpDlg.h -// Author : Sergey LITONIN -// Module : SMESH - - -#ifndef SMESHGUI_GroupOpDlg_H -#define SMESHGUI_GroupOpDlg_H - -#include - -#include -#include CORBA_SERVER_HEADER(SMESH_Group) - -class QCloseEvent; -class QLabel; -class QFrame; -class QPushButton; -class SalomeApp_SelectionMgr; -class QLineEdit; -class SMESHGUI; -class SVTK_ViewWindow; -class SVTK_Selector; - -/* - Class : SMESHGUI_GroupOpDlg - Description : Perform boolean operations on groups -*/ - -class SMESHGUI_GroupOpDlg : public QDialog -{ - Q_OBJECT - -public: - enum { UNION, INTERSECT, CUT }; - -public: - SMESHGUI_GroupOpDlg( SMESHGUI*, const int ); - virtual ~SMESHGUI_GroupOpDlg(); - - void Init(); - -private: - - void closeEvent( QCloseEvent* e ) ; - void enterEvent ( QEvent * ) ; - -private slots: - - void onOk(); - bool onApply(); - void onClose(); - - void onDeactivate(); - void onSelectionDone(); - void onFocusChanged(); - -private: - - QFrame* createButtonFrame( QWidget* ); - QFrame* createMainFrame ( QWidget* ); - bool isValid(); - void reset(); - -private: - - QPushButton* myOkBtn; - QPushButton* myApplyBtn; - QPushButton* myCloseBtn; - - QLineEdit* myNameEdit; - QLineEdit* myEdit1; - QLineEdit* myEdit2; - QPushButton* myBtn1; - QPushButton* myBtn2; - - SMESHGUI* mySMESHGUI; - SalomeApp_SelectionMgr* mySelectionMgr; - int myMode; - SVTK_Selector* mySelector; - - QLineEdit* myFocusWg; - - SMESH::SMESH_GroupBase_var myGroup1; - SMESH::SMESH_GroupBase_var myGroup2; - -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_GroupUtils.cxx b/src/SMESHGUI/SMESHGUI_GroupUtils.cxx deleted file mode 100644 index d2aa17f3a..000000000 --- a/src/SMESHGUI/SMESHGUI_GroupUtils.cxx +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - - -#include "SMESHGUI_GroupUtils.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" - -#include "SUIT_Session.h" -#include "SalomeApp_Application.h" -#include "SalomeApp_Tools.h" - -#include "OB_Browser.h" - -namespace SMESH -{ - - SMESH::SMESH_Group_var AddGroup( SMESH::SMESH_Mesh_ptr theMesh, - SMESH::ElementType theType, - const char* theGroupName ) - { - SMESH::SMESH_Group_var aGroup; - try { - if ( !theMesh->_is_nil() ) - aGroup = theMesh->CreateGroup( theType, theGroupName ); - } - catch( const SALOME::SALOME_Exception& S_ex ) { - SalomeApp_Tools::QtCatchCorbaException( S_ex ); - } - //SalomeApp_Application* app = - // dynamic_cast(SUIT_Session::session()->activeApplication()); - //if (app) app->objectBrowser()->updateTree(); - SMESHGUI::GetSMESHGUI()->updateObjBrowser(); - return aGroup._retn(); - } -} diff --git a/src/SMESHGUI/SMESHGUI_GroupUtils.h b/src/SMESHGUI/SMESHGUI_GroupUtils.h deleted file mode 100644 index 9cd9783c1..000000000 --- a/src/SMESHGUI/SMESHGUI_GroupUtils.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef SMESHGUI_GroupUtils_HeaderFile -#define SMESHGUI_GroupUtils_HeaderFile - -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_Group) - - -namespace SMESH{ - - SMESH::SMESH_Group_var AddGroup(SMESH::SMESH_Mesh_ptr theMesh, - SMESH::ElementType theType, - const char* theGroupName); -} - - -#endif diff --git a/src/SMESHGUI/SMESHGUI_Hypotheses.h b/src/SMESHGUI/SMESHGUI_Hypotheses.h deleted file mode 100644 index c9ceee8ef..000000000 --- a/src/SMESHGUI/SMESHGUI_Hypotheses.h +++ /dev/null @@ -1,80 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_Hypotheses.h -// Author : Julia DOROVSKIKH -// Module : SMESH -// $Header$ - -#ifndef SMESHGUI_Hypotheses_HeaderFile -#define SMESHGUI_Hypotheses_HeaderFile - -#include -#include CORBA_SERVER_HEADER(SMESH_Hypothesis) - -// QT Includes -#include -#include -#include - -/*! - * \brief Auxiliary class for creation of hypotheses -*/ -class SMESHGUI_GenericHypothesisCreator -{ - public: - virtual void CreateHypothesis (const bool isAlgo, QWidget* parent) = 0; - virtual void EditHypothesis (SMESH::SMESH_Hypothesis_ptr theHyp) = 0; -}; - -/*! - * \brief Class containing information about hypothesis -*/ -class HypothesisData -{ - public: - HypothesisData( const QString& thePluginName, - const QString& theServerLibName, - const QString& theClientLibName, - const QString& theLabel, - const QString& theIconId, - const QValueList& theDim, - const bool theIsAux ) -: PluginName( thePluginName ), - ServerLibName( theServerLibName ), - ClientLibName( theClientLibName ), - Label( theLabel ), - IconId( theIconId ), - Dim( theDim ), - IsAux( theIsAux ) - {}; - - QString PluginName; //!< plugin name - QString ServerLibName; //!< server library name - QString ClientLibName; //!< client library name - QString Label; //!< label - 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 -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx b/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx deleted file mode 100644 index 96f59ae8a..000000000 --- a/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx +++ /dev/null @@ -1,524 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#include "SMESHGUI_HypothesesUtils.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Hypotheses.h" -#include "SMESHGUI_XmlHandler.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_GEOMGenUtils.h" - -#include "SUIT_Tools.h" -#include "SUIT_Desktop.h" -#include "SUIT_MessageBox.h" -#include "SUIT_OverrideCursor.h" -#include "SUIT_ResourceMgr.h" -#include "SUIT_Session.h" - -#include "OB_Browser.h" - -#include "SalomeApp_Study.h" -#include "SalomeApp_Tools.h" -#include "SalomeApp_Application.h" - -#include -#include - -#include "SALOMEconfig.h" -#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) - -#include -#include - -#include - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - -namespace SMESH{ - - using namespace std; - - typedef map THypothesisDataMap; - THypothesisDataMap myHypothesesMap; - THypothesisDataMap myAlgorithmsMap; - - typedef map THypCreatorMap; - THypCreatorMap myHypCreatorMap; - - void addMap(const THypothesisDataMap& theMap, - THypothesisDataMap& toMap) - { - THypothesisDataMap::const_iterator it; - for (it = theMap.begin(); it != theMap.end(); it++) - toMap.insert(*it); - } - - - void processHypothesisStatus(const int theHypStatus, - SMESH::SMESH_Hypothesis_ptr theHyp, - const bool theIsAddition) - { - if (theHypStatus > SMESH::HYP_OK) { - - // get Hyp name - QString aHypName ("NULL Hypothesis"); - if (!CORBA::is_nil(theHyp)) { - _PTR(SObject) Shyp = SMESH::FindSObject(theHyp); - if (Shyp) - // name in study - aHypName = Shyp->GetName().c_str(); - else - // label in xml file - aHypName = GetHypothesisData(theHyp->GetName())->Label; - } - - // message - bool isFatal = (theHypStatus >= SMESH::HYP_UNKNOWN_FATAL); - QString aMsg; - if (theIsAddition) - aMsg = (isFatal ? "SMESH_CANT_ADD_HYP" : "SMESH_ADD_HYP_WRN"); - else - aMsg = (isFatal ? "SMESH_CANT_RM_HYP" : "SMESH_RM_HYP_WRN"); - - aMsg = QObject::tr(aMsg).arg(aHypName) + - QObject::tr(QString("SMESH_HYP_%1").arg(theHypStatus)); - - SUIT_MessageBox::warn1(SMESHGUI::desktop(), - QObject::tr("SMESH_WRN_WARNING"), - aMsg, - QObject::tr("SMESH_BUT_OK")); - } - } - - - void InitAvailableHypotheses() - { - SUIT_OverrideCursor wc; - if (myHypothesesMap.empty() && myAlgorithmsMap.empty()) { - // Resource manager - SUIT_ResourceMgr* resMgr = SMESHGUI::resourceMgr(); - if (!resMgr) return; - - // Find name of a resource XML file ("SMESH_Meshers.xml"); - QString HypsXml; - char* cenv = getenv("SMESH_MeshersList"); - if (cenv) - HypsXml.sprintf("%s", cenv); - - QStringList HypsXmlList = QStringList::split(":", HypsXml, false); - if (HypsXmlList.count() == 0) - { - SUIT_MessageBox::error1(SMESHGUI::desktop(), - QObject::tr("SMESH_WRN_WARNING"), - QObject::tr("MESHERS_FILE_NO_VARIABLE"), - QObject::tr("SMESH_BUT_OK")); - return; - } - - // loop on files in HypsXml - QString aNoAccessFiles; - for (int i = 0; i < HypsXmlList.count(); i++) { - QString HypsXml = HypsXmlList[ i ]; - - // Find full path to the resource XML file - QString xmlFile = resMgr->path("resources", "SMESH", HypsXml + ".xml"); - if ( xmlFile.isEmpty() ) // try PLUGIN resources - xmlFile = resMgr->path("resources", HypsXml, HypsXml + ".xml"); - - QFile file (xmlFile); - if (file.exists() && file.open(IO_ReadOnly)) { - file.close(); - - SMESHGUI_XmlHandler* aXmlHandler = new SMESHGUI_XmlHandler(); - ASSERT(aXmlHandler); - - QXmlInputSource source (file); - QXmlSimpleReader reader; - reader.setContentHandler(aXmlHandler); - reader.setErrorHandler(aXmlHandler); - bool ok = reader.parse(source); - file.close(); - if (ok) { - addMap(aXmlHandler->myHypothesesMap, myHypothesesMap); - addMap(aXmlHandler->myAlgorithmsMap, myAlgorithmsMap); - } - else { - SUIT_MessageBox::error1(SMESHGUI::desktop(), - QObject::tr("INF_PARSE_ERROR"), - QObject::tr(aXmlHandler->errorProtocol()), - QObject::tr("SMESH_BUT_OK")); - } - } - else { - if (aNoAccessFiles.isEmpty()) - aNoAccessFiles = xmlFile; - else - aNoAccessFiles += ", " + xmlFile; - } - } // end loop - - - if (!aNoAccessFiles.isEmpty()) { - QString aMess = QObject::tr("MESHERS_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n"; - aMess += QObject::tr("MESHERS_FILE_CHECK_VARIABLE"); - wc.suspend(); - SUIT_MessageBox::warn1(SMESHGUI::desktop(), - QObject::tr("SMESH_WRN_WARNING"), - aMess, - QObject::tr("SMESH_BUT_OK")); - wc.resume(); - } - } - } - - - QStringList GetAvailableHypotheses( const bool isAlgo, - const int theDim, - const bool isAux ) - { - QStringList aHypList; - - // Init list of available hypotheses, if needed - InitAvailableHypotheses(); - - // 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()); - } - return aHypList; - } - - - HypothesisData* GetHypothesisData (const char* aHypType) - { - HypothesisData* aHypData = 0; - - // Init list of available hypotheses, if needed - InitAvailableHypotheses(); - - if (myHypothesesMap.find(aHypType) == myHypothesesMap.end()) { - if (myAlgorithmsMap.find(aHypType) != myAlgorithmsMap.end()) { - aHypData = myAlgorithmsMap[aHypType]; - } - } - else { - aHypData = myHypothesesMap[aHypType]; - } - return aHypData; - } - - - SMESHGUI_GenericHypothesisCreator* GetHypothesisCreator(const char* aHypType) - { - if(MYDEBUG) MESSAGE("Get HypothesisCreator for " << aHypType); - - SMESHGUI_GenericHypothesisCreator* aCreator = 0; - - // check, if creator for this hypothesis type already exists - if (myHypCreatorMap.find(aHypType) != myHypCreatorMap.end()) { - aCreator = myHypCreatorMap[aHypType]; - } - else { - // 1. Init list of available hypotheses, if needed - InitAvailableHypotheses(); - - // 2. Get names of plugin libraries - HypothesisData* aHypData = GetHypothesisData(aHypType); - if (!aHypData) - return aCreator; - QString aClientLibName = aHypData->ClientLibName; - QString aServerLibName = aHypData->ServerLibName; - - // 3. Load Client Plugin Library - try { - // load plugin library - if(MYDEBUG) MESSAGE("Loading client meshers plugin library ..."); - void* libHandle = dlopen (aClientLibName, RTLD_LAZY); - if (!libHandle) { - // report any error, if occured - const char* anError = dlerror(); - if(MYDEBUG) MESSAGE(anError); - } - else { - // get method, returning hypothesis creator - if(MYDEBUG) MESSAGE("Find GetHypothesisCreator() method ..."); - typedef SMESHGUI_GenericHypothesisCreator* (*GetHypothesisCreator) \ - (QString aHypType, QString aServerLibName, SMESHGUI* aSMESHGUI); - GetHypothesisCreator procHandle = - (GetHypothesisCreator)dlsym(libHandle, "GetHypothesisCreator"); - if (!procHandle) { - if(MYDEBUG) MESSAGE("bad hypothesis client plugin library"); - dlclose(libHandle); - } - else { - // get hypothesis creator - if(MYDEBUG) MESSAGE("Get Hypothesis Creator for " << aHypType); - aCreator = procHandle(aHypType, aServerLibName, SMESHGUI::GetSMESHGUI()); - if (!aCreator) { - if(MYDEBUG) MESSAGE("no such a hypothesis in this plugin"); - } - else { - // map hypothesis creator to a hypothesis name - myHypCreatorMap[aHypType] = aCreator; - } - } - } - } - catch (const SALOME::SALOME_Exception& S_ex) { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - } - } - - return aCreator; - } - - - SMESH::SMESH_Hypothesis_ptr CreateHypothesis(const char* aHypType, - const char* aHypName, - const bool isAlgo) - { - if(MYDEBUG) MESSAGE("Create " << aHypType << " with name " << aHypName); - - SMESH::SMESH_Hypothesis_var Hyp; - - HypothesisData* aHypData = GetHypothesisData(aHypType); - QString aServLib = aHypData->ServerLibName; - - try { - Hyp = SMESHGUI::GetSMESHGen()->CreateHypothesis(aHypType, aServLib); - if (!Hyp->_is_nil()) { - _PTR(SObject) SHyp = SMESH::FindSObject(Hyp.in()); - if (SHyp) { - //if (strcmp(aHypName,"") != 0) - 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(); - } - } - } - catch (const SALOME::SALOME_Exception & S_ex) { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - } - - return SMESH::SMESH_Hypothesis::_nil(); - } - - - bool AddHypothesisOnMesh (SMESH::SMESH_Mesh_ptr aMesh, SMESH::SMESH_Hypothesis_ptr aHyp) - { - if(MYDEBUG) MESSAGE ("SMESHGUI::AddHypothesisOnMesh"); - int res = SMESH::HYP_UNKNOWN_FATAL; - SUIT_OverrideCursor wc; - - if (!aMesh->_is_nil()) { - _PTR(SObject) SM = SMESH::FindSObject(aMesh); - GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh(SM); - try { - res = aMesh->AddHypothesis(aShapeObject, aHyp); - if (res < SMESH::HYP_UNKNOWN_FATAL) { - _PTR(SObject) SH = SMESH::FindSObject(aHyp); - if (SM && SH) { - SMESH::ModifiedMesh(SM, false); - } - } - if (res > SMESH::HYP_OK) { - wc.suspend(); - processHypothesisStatus(res, aHyp, true); - wc.resume(); - } - } - catch(const SALOME::SALOME_Exception& S_ex) { - wc.suspend(); - SalomeApp_Tools::QtCatchCorbaException(S_ex); - res = SMESH::HYP_UNKNOWN_FATAL; - } - } - return res < SMESH::HYP_UNKNOWN_FATAL; - } - - - bool AddHypothesisOnSubMesh (SMESH::SMESH_subMesh_ptr aSubMesh, SMESH::SMESH_Hypothesis_ptr aHyp) - { - if(MYDEBUG) MESSAGE("SMESHGUI::AddHypothesisOnSubMesh() "); - int res = SMESH::HYP_UNKNOWN_FATAL; - SUIT_OverrideCursor wc; - - if (!aSubMesh->_is_nil() && ! aHyp->_is_nil()) { - try { - SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather(); - _PTR(SObject) SsubM = SMESH::FindSObject(aSubMesh); - GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh(SsubM); - if (!aMesh->_is_nil() && SsubM && !aShapeObject->_is_nil()) { - res = aMesh->AddHypothesis(aShapeObject, aHyp); - if (res < SMESH::HYP_UNKNOWN_FATAL) { - _PTR(SObject) meshSO = SMESH::FindSObject(aMesh); - if (meshSO) - SMESH::ModifiedMesh(meshSO, false); - } - if (res > SMESH::HYP_OK) { - wc.suspend(); - processHypothesisStatus(res, aHyp, true); - wc.resume(); - } - } - else { - SCRUTE(aHyp->_is_nil()); - SCRUTE(aMesh->_is_nil()); - SCRUTE(!SsubM); - SCRUTE(aShapeObject->_is_nil()); - } - } - catch(const SALOME::SALOME_Exception& S_ex) { - wc.suspend(); - SalomeApp_Tools::QtCatchCorbaException(S_ex); - res = SMESH::HYP_UNKNOWN_FATAL; - } - } - else { - SCRUTE(aSubMesh->_is_nil()); - SCRUTE(aHyp->_is_nil()); - } - return res < SMESH::HYP_UNKNOWN_FATAL; - } - - bool RemoveHypothesisOrAlgorithmOnMesh (const Handle(SALOME_InteractiveObject)& IObject) - { - int res = SMESH::HYP_UNKNOWN_FATAL; - SUIT_OverrideCursor wc; - - try { - _PTR(Study) aStudy = GetActiveStudyDocument(); - _PTR(SObject) aHypObj = aStudy->FindObjectID( IObject->getEntry() ); - if( aHypObj ) - { - _PTR(SObject) MorSM = SMESH::GetMeshOrSubmesh( aHypObj ); - _PTR(SObject) aRealHypo; - if( aHypObj->ReferencedObject( aRealHypo ) ) - { - SMESH_Hypothesis_var hypo = SMESH_Hypothesis::_narrow( SObjectToObject( aRealHypo ) ); - RemoveHypothesisOrAlgorithmOnMesh( MorSM, hypo ); - } - else - { - SMESH_Hypothesis_var hypo = SMESH_Hypothesis::_narrow( SObjectToObject( aHypObj ) ); - SObjectList meshList = GetMeshesUsingAlgoOrHypothesis( hypo ); - for( int i = 0; i < meshList.size(); i++ ) - RemoveHypothesisOrAlgorithmOnMesh( meshList[ i ], hypo ); - } - } - } - catch(const SALOME::SALOME_Exception& S_ex) - { - wc.suspend(); - SalomeApp_Tools::QtCatchCorbaException(S_ex); - res = SMESH::HYP_UNKNOWN_FATAL; - } - return res < SMESH::HYP_UNKNOWN_FATAL; - } - - bool RemoveHypothesisOrAlgorithmOnMesh (_PTR(SObject) MorSM, - SMESH::SMESH_Hypothesis_ptr anHyp) - { - SALOMEDS::GenericAttribute_var anAttr; - SALOMEDS::AttributeIOR_var anIOR; - int res = SMESH::HYP_UNKNOWN_FATAL; - SUIT_OverrideCursor wc; - - 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) { - _PTR(SObject) meshSO = SMESH::FindSObject(aMesh); - if (meshSO) - SMESH::ModifiedMesh(meshSO, false); - } - 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); - res = SMESH::HYP_UNKNOWN_FATAL; - } - } - return res < SMESH::HYP_UNKNOWN_FATAL; - } - - SObjectList GetMeshesUsingAlgoOrHypothesis(SMESH::SMESH_Hypothesis_ptr AlgoOrHyp) - { - SObjectList listSOmesh; - listSOmesh.resize(0); - - unsigned int index = 0; - if (!AlgoOrHyp->_is_nil()) { - _PTR(SObject) SO_Hypothesis = SMESH::FindSObject(AlgoOrHyp); - if (SO_Hypothesis) { - SObjectList listSO = - SMESHGUI::activeStudy()->studyDS()->FindDependances(SO_Hypothesis); - - if(MYDEBUG) MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): dependency number ="<GetFather(); - if (aFather) { - _PTR(SObject) SOfatherFather = aFather->GetFather(); - if (SOfatherFather) { - if(MYDEBUG) MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): dependency added to list"); - index++; - listSOmesh.resize(index); - listSOmesh[index - 1] = SOfatherFather; - } - } - } - } - } - } - if (MYDEBUG) MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): completed"); - return listSOmesh; - } -} diff --git a/src/SMESHGUI/SMESHGUI_HypothesesUtils.h b/src/SMESHGUI/SMESHGUI_HypothesesUtils.h deleted file mode 100644 index 0edd7793b..000000000 --- a/src/SMESHGUI/SMESHGUI_HypothesesUtils.h +++ /dev/null @@ -1,78 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_HypothesesUtils.h -// Author : Julia DOROVSKIKH -// Module : SMESH -// $Header$ - -#ifndef SMESHGUI_HypothesesUtils_HeaderFile -#define SMESHGUI_HypothesesUtils_HeaderFile - -#include -#include - -#include "SALOME_InteractiveObject.hxx" -#include "SALOMEDSClient_definitions.hxx" - -#include "SALOMEconfig.h" -#include CORBA_CLIENT_HEADER(SALOMEDS) -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_Hypothesis) - -#include - -class HypothesisData; -class SMESHGUI_GenericHypothesisCreator; -class SALOMEDSClient_SObject; - -namespace SMESH{ - - void InitAvailableHypotheses(); - - QStringList GetAvailableHypotheses( const bool isAlgo, - const int theDim = -1, - const bool isAux = false); - - HypothesisData* GetHypothesisData(const char* aHypType); - - SMESHGUI_GenericHypothesisCreator* GetHypothesisCreator(const char* aHypType); - - SMESH::SMESH_Hypothesis_ptr CreateHypothesis(const char* aHypType, - const char* aHypName, - const bool isAlgo = false); - - bool AddHypothesisOnMesh(SMESH::SMESH_Mesh_ptr aMesh, SMESH::SMESH_Hypothesis_ptr aHyp); - - bool AddHypothesisOnSubMesh(SMESH::SMESH_subMesh_ptr aSubMesh, SMESH::SMESH_Hypothesis_ptr aHyp); - - bool RemoveHypothesisOrAlgorithmOnMesh(const Handle(SALOME_InteractiveObject)& IObject); - - bool RemoveHypothesisOrAlgorithmOnMesh(_PTR(SObject) MorSM, - SMESH::SMESH_Hypothesis_ptr anHyp); - - typedef std::vector<_PTR(SObject)> SObjectList; - SObjectList GetMeshesUsingAlgoOrHypothesis(SMESH::SMESH_Hypothesis_ptr AlgoOrHyp ) ; - -} - -#endif diff --git a/src/SMESHGUI/SMESHGUI_IdValidator.h b/src/SMESHGUI/SMESHGUI_IdValidator.h deleted file mode 100644 index 680dacba8..000000000 --- a/src/SMESHGUI/SMESHGUI_IdValidator.h +++ /dev/null @@ -1,68 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_IdValidator.h -// Author : Edward AGAPOV -// Module : SMESH -// $Header: /dn05/salome/PAL/SMESH/SMESH_SRC/src/SMESHGUI/SMESHGUI_IdValidator.h - -#ifndef SMESHGUI_IdValidator_HeaderFile -#define SMESHGUI_IdValidator_HeaderFile - -#include - -// validator for manual input of Ids - -class SMESHGUI_IdValidator: public QValidator -{ - public: - - SMESHGUI_IdValidator(QWidget * parent, const char * name = 0, const int maxNbId = 0): - QValidator(parent,name), myMaxNbId(maxNbId) {} - - State validate ( QString & text, int & pos) const - { - text.replace( QRegExp(" *[^0-9]+ *"), " " ); - if ( myMaxNbId && text.length() > myMaxNbId) { // truncate extra ids - int ind = 0, nbId = 0; - while ( ind < text.length() ) { - if ( text.at( ind ) != ' ' ) { - if ( ++nbId > myMaxNbId ) { - text.truncate( ind ); - break; - } - ind = text.find( ' ', ind ); - if ( ind < 0 ) break; - } - ind++; - } - } - if ( pos > text.length() ) - pos = text.length(); - return Acceptable; - } - - private: - int myMaxNbId; -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx b/src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx deleted file mode 100644 index f3fbf92a7..000000000 --- a/src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx +++ /dev/null @@ -1,498 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_InitMeshDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#include "SMESHGUI_InitMeshDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_HypothesesUtils.h" - -#include "SMESH_TypeFilter.hxx" -#include "SMESH_NumberFilter.hxx" - -#include "GEOMBase.h" - -#include "SUIT_Session.h" -#include "SUIT_MessageBox.h" -#include "SUIT_OverrideCursor.h" -#include "SUIT_Operation.h" -#include "SUIT_Desktop.h" - -#include "SALOMEDSClient_Study.hxx" -#include "SALOMEDS_SObject.hxx" -#include "SALOME_ListIO.hxx" -#include "SALOME_ListIteratorOfListIO.hxx" -#include "SalomeApp_Tools.h" - -#include "SVTK_ViewModel.h" - -#include "utilities.h" - -// QT Includes -#include -#include -#include -#include -#include -#include - -using namespace std; - -namespace SMESH { - SMESH::SMESH_Mesh_var InitMesh (GEOM::GEOM_Object_ptr theShapeObject, - const char* theMeshName) - { - SMESH::SMESH_Mesh_var aMesh; - try { - SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen(); - if (!aSMESHGen->_is_nil() && !theShapeObject->_is_nil()) { - aMesh = aSMESHGen->CreateMesh(theShapeObject); - if (!aMesh->_is_nil()) { - _PTR(SObject) aMeshSObject = SMESH::FindSObject(aMesh.in()); - SMESH::SetName(aMeshSObject, theMeshName); - } - } - } - catch (const SALOME::SALOME_Exception& S_ex) { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - } - return aMesh._retn(); - } -} - -//================================================================================= -// class : SMESHGUI_InitMeshDlg() -// purpose : Constructs a SMESHGUI_InitMeshDlg which is a child of 'parent', with the -// name 'name' and widget flags set to 'f'. -// The dialog will by default be modeless, unless you set 'modal' to -// TRUE to construct a modal dialog. -//================================================================================= -SMESHGUI_InitMeshDlg::SMESHGUI_InitMeshDlg (SMESHGUI* theModule, const char* name, - bool modal, WFlags fl) - : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | - WStyle_Title | WStyle_SysMenu | WDestructiveClose), - mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) -{ - QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); - if (!name) - setName("SMESHGUI_InitMeshDlg"); - - setCaption(tr("SMESH_INIT_MESH")); - setSizeGripEnabled(TRUE); - QGridLayout* SMESHGUI_InitMeshDlgLayout = new QGridLayout (this); - SMESHGUI_InitMeshDlgLayout->setSpacing(6); - SMESHGUI_InitMeshDlgLayout->setMargin(11); - - /***************************************************************/ - GroupC1 = new QGroupBox(tr("SMESH_ARGUMENTS"), this, "GroupC1"); - GroupC1->setColumnLayout(0, Qt::Vertical); - GroupC1->layout()->setSpacing(0); - GroupC1->layout()->setMargin(0); - QGridLayout* GroupC1Layout = new QGridLayout(GroupC1->layout()); - GroupC1Layout->setAlignment(Qt::AlignTop); - GroupC1Layout->setSpacing(6); - GroupC1Layout->setMargin(11); - - TextLabel_NameMesh = new QLabel(tr("SMESH_NAME"), GroupC1, "TextLabel_NameMesh"); - GroupC1Layout->addWidget(TextLabel_NameMesh, 0, 0); - LineEdit_NameMesh = new QLineEdit(GroupC1, "LineEdit_NameMesh"); - GroupC1Layout->addWidget(LineEdit_NameMesh, 0, 2); - - TextLabelC1A1 = new QLabel(tr("SMESH_OBJECT_GEOM"), GroupC1, "TextLabelC1A1"); - GroupC1Layout->addWidget(TextLabelC1A1, 1, 0); - SelectButtonC1A1 = new QPushButton(GroupC1, "SelectButtonC1A1"); - SelectButtonC1A1->setPixmap(image0); - SelectButtonC1A1->setToggleButton(FALSE); - GroupC1Layout->addWidget(SelectButtonC1A1, 1, 1); - LineEditC1A1 = new QLineEdit(GroupC1, "LineEditC1A1"); - LineEditC1A1->setReadOnly(true); - GroupC1Layout->addWidget(LineEditC1A1, 1, 2); - - TextLabelC1A1Hyp = new QLabel(tr("SMESH_OBJECT_HYPOTHESIS"), GroupC1, "TextLabelC1A1Hyp"); - GroupC1Layout->addWidget(TextLabelC1A1Hyp, 2, 0); - SelectButtonC1A1Hyp = new QPushButton(GroupC1, "SelectButtonC1A1Hyp"); - SelectButtonC1A1Hyp->setPixmap(image0); - GroupC1Layout->addWidget(SelectButtonC1A1Hyp, 2, 1); - LineEditC1A1Hyp = new QLineEdit(GroupC1, "LineEditC1A1Hyp"); - LineEditC1A1Hyp->setReadOnly(true); - GroupC1Layout->addWidget(LineEditC1A1Hyp, 2, 2); - - TextLabelC1A1Algo = new QLabel(tr("SMESH_OBJECT_ALGORITHM"), GroupC1, "TextLabelC1A1Algo"); - GroupC1Layout->addWidget(TextLabelC1A1Algo, 3, 0); - SelectButtonC1A1Algo = new QPushButton(GroupC1, "SelectButtonC1A1Algo"); - SelectButtonC1A1Algo->setPixmap(image0); - GroupC1Layout->addWidget(SelectButtonC1A1Algo, 3, 1); - LineEditC1A1Algo = new QLineEdit(GroupC1, "LineEditC1A1Algo"); - LineEditC1A1Algo->setReadOnly(true); - GroupC1Layout->addWidget(LineEditC1A1Algo, 3, 2); - - SMESHGUI_InitMeshDlgLayout->addWidget(GroupC1, 1, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - - buttonOk = new QPushButton(tr("SMESH_BUT_OK"), GroupButtons, "buttonOk"); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - - buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons, "buttonApply"); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - - GroupButtonsLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 2); - - buttonCancel = new QPushButton(tr("SMESH_BUT_CLOSE"), GroupButtons, "buttonCancel"); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - - SMESHGUI_InitMeshDlgLayout->addWidget(GroupButtons, 2, 0); - - /***************************************************************/ - Init(); -} - -//================================================================================= -// function : ~SMESHGUI_InitMeshDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_InitMeshDlg::~SMESHGUI_InitMeshDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_InitMeshDlg::Init () -{ - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - //myGeomFilter = new SALOME_TypeFilter("GEOM"); - TColStd_MapOfInteger allTypesMap; - for (int i = 0; i < 10; i++) - allTypesMap.Add(i); - myGeomFilter = new SMESH_NumberFilter ("GEOM", TopAbs_SHAPE, 0, allTypesMap); - myAlgorithmFilter = new SMESH_TypeFilter (ALGORITHM); - myHypothesisFilter = new SMESH_TypeFilter (HYPOTHESIS); - - /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - - connect(SelectButtonC1A1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectButtonC1A1Hyp, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectButtonC1A1Algo, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); - - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); - - LineEdit_NameMesh->setText(GetDefaultMeshName()); - LineEdit_NameMesh->setFocus(); - myEditCurrentArgument = LineEditC1A1; - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myGeomFilter); - - SelectionIntoArgument(); - - UpdateControlState(); -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_InitMeshDlg::ClickOnOk() -{ - if (this->ClickOnApply()) - this->ClickOnCancel(); -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -bool SMESHGUI_InitMeshDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return false; - - QString myNameMesh = LineEdit_NameMesh->text().stripWhiteSpace(); - if (myNameMesh.isEmpty()) { - SUIT_MessageBox::warn1(this, tr("SMESH_WRN_WARNING"), - tr("SMESH_WRN_EMPTY_NAME"), tr("SMESH_BUT_OK")); - return false; - } - - if (myGeomShape->_is_nil() || !HypoList.count() || !AlgoList.count()) - return false; - - SUIT_OverrideCursor wc; - - SUIT_Operation* op = - new SUIT_Operation (SUIT_Session::session()->activeApplication()); - - // start transaction - op->start(); - - // create mesh - SMESH::SMESH_Mesh_var aMesh = SMESH::InitMesh(myGeomShape, myNameMesh); - - if (!aMesh->_is_nil()) { - // assign hypotheses - for (int i = 0; i < HypoList.count(); i++) { - _PTR(SObject) aHypSOClient = - SMESH::GetActiveStudyDocument()->FindObjectID(HypoList[i].latin1()); - if (aHypSOClient) { - CORBA::Object_var anObject = _CAST(SObject,aHypSOClient)->GetObject(); - if (!CORBA::is_nil(anObject)) { - SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow(anObject); - if (!aHyp->_is_nil()) { - if (!SMESH::AddHypothesisOnMesh(aMesh, aHyp)) { - // abort transaction -// op->abort(); -// return false; - } - } - } - } - } - // assign algorithms - for (int i = 0; i < AlgoList.count(); i++) { - _PTR(SObject) aHypSOClient = - SMESH::GetActiveStudyDocument()->FindObjectID(AlgoList[i].latin1()); - if (aHypSOClient) { - CORBA::Object_var anObject = _CAST(SObject,aHypSOClient)->GetObject(); - if (!CORBA::is_nil(anObject)) { - SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow(anObject); - if (!aHyp->_is_nil()) { - if (!SMESH::AddHypothesisOnMesh(aMesh, aHyp)) { - // abort transaction -// op->abort(); -// return false; - } - } - } - } - } - } - // commit transaction - op->commit(); - mySMESHGUI->updateObjBrowser(); - LineEdit_NameMesh->setText(GetDefaultMeshName()); - return true; -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_InitMeshDlg::ClickOnCancel() -{ - close(); -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_InitMeshDlg::SelectionIntoArgument() -{ - QString aString = ""; - - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type()); - - int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - - if (myEditCurrentArgument == LineEditC1A1) { - // geom shape - if (nbSel != 1) { - myGeomShape = GEOM::GEOM_Object::_nil(); - aString = ""; - } else { - Handle(SALOME_InteractiveObject) IO = aList.First(); - myGeomShape = SMESH::IObjectToInterface(IO); - if (myGeomShape->_is_nil() || !GEOMBase::IsShape(myGeomShape)) { - myGeomShape = GEOM::GEOM_Object::_nil(); - aString = ""; - } - } - } else if (myEditCurrentArgument == LineEditC1A1Hyp) { - // hypotheses - HypoList.clear(); - if (nbSel >= 1) { - SALOME_ListIteratorOfListIO Itinit (aList); - for (; Itinit.More(); Itinit.Next()) { - HypoList.append(Itinit.Value()->getEntry()); - } - if (nbSel > 1) - aString = tr("%1 Hypothesis").arg(nbSel); - } else { - aString = ""; - } - } else if (myEditCurrentArgument == LineEditC1A1Algo) { - // algorithms - AlgoList.clear(); - if (nbSel >= 1) { - SALOME_ListIteratorOfListIO Itinit (aList); - for (; Itinit.More(); Itinit.Next()) { - AlgoList.append(Itinit.Value()->getEntry()); - } - if (nbSel > 1) - aString = tr("%1 Algorithms").arg(nbSel); - } else { - aString = ""; - } - } else { - } - - myEditCurrentArgument->setText(aString); - - UpdateControlState(); -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_InitMeshDlg::SetEditCurrentArgument() -{ - QPushButton* send = (QPushButton*)sender(); - if (send == SelectButtonC1A1) { - LineEditC1A1->setFocus(); - myEditCurrentArgument = LineEditC1A1; - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myGeomFilter); - } else if (send == SelectButtonC1A1Hyp) { - LineEditC1A1Hyp->setFocus(); - myEditCurrentArgument = LineEditC1A1Hyp; - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myHypothesisFilter); - } else if (send == SelectButtonC1A1Algo) { - LineEditC1A1Algo->setFocus(); - myEditCurrentArgument = LineEditC1A1Algo; - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myAlgorithmFilter); - } - SelectionIntoArgument(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_InitMeshDlg::DeactivateActiveDialog() -{ - if (GroupC1->isEnabled()) { - disconnect(mySelectionMgr, 0, this, 0); - GroupC1->setEnabled(false); - GroupButtons->setEnabled(false); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_InitMeshDlg::ActivateThisDialog() -{ - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupC1->setEnabled(true); - GroupButtons->setEnabled(true); - connect (mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); -} - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_InitMeshDlg::enterEvent (QEvent* e) -{ - if (!GroupC1->isEnabled()) - ActivateThisDialog(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_InitMeshDlg::closeEvent (QCloseEvent* e) -{ - disconnect(mySelectionMgr, 0, this, 0); - mySMESHGUI->ResetState(); - mySelectionMgr->clearFilters(); - QDialog::closeEvent(e); -} - -//================================================================================= -// function : UpdateControlState() -// purpose : -//================================================================================= -void SMESHGUI_InitMeshDlg::UpdateControlState() -{ - bool isEnabled = (!myGeomShape->_is_nil() && HypoList.count() && AlgoList.count()); - - buttonOk ->setEnabled(isEnabled); - buttonApply->setEnabled(isEnabled); -} - -//================================================================================= -// function : GetDefaultMeshName() -// purpose : Generates default mesh name(Mesh_1, Mesh_2, etc.) -//================================================================================= -QString SMESHGUI_InitMeshDlg::GetDefaultMeshName() -{ - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); - int aNumber = 0; - QString aMeshName; - _PTR(SObject) obj; - - do { - aMeshName = QString(tr("SMESH_OBJECT_MESH")) + "_" + QString::number(++aNumber); - obj = aStudy->FindObject(aMeshName.latin1()); - } while (obj); - - return aMeshName; -} diff --git a/src/SMESHGUI/SMESHGUI_InitMeshDlg.h b/src/SMESHGUI/SMESHGUI_InitMeshDlg.h deleted file mode 100644 index 1a6f4ed57..000000000 --- a/src/SMESHGUI/SMESHGUI_InitMeshDlg.h +++ /dev/null @@ -1,124 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_InitMeshDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef DIALOGBOX_INIT_MESH_H -#define DIALOGBOX_INIT_MESH_H - -//#include "SMESH_TypeFilter.hxx" - -#include "SUIT_SelectionFilter.h" -#include "SalomeApp_SelectionMgr.h" - -// QT Includes -#include -#include - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(GEOM_Gen) -#include CORBA_SERVER_HEADER(SMESH_Gen) - -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class SMESHGUI; - -//================================================================================= -// class : SMESHGUI_InitMeshDlg -// purpose : -//================================================================================= -class SMESHGUI_InitMeshDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_InitMeshDlg ( SMESHGUI*, - const char* = 0, - bool modal = FALSE, - WFlags fl = 0 ); - ~SMESHGUI_InitMeshDlg(); - -protected: - void closeEvent( QCloseEvent* e ) ; - void enterEvent( QEvent * ) ; - -private: - void Init(); - - void UpdateControlState(); - QString SMESHGUI_InitMeshDlg::GetDefaultMeshName(); - -private: - SMESHGUI* mySMESHGUI; - SalomeApp_SelectionMgr* mySelectionMgr; - - GEOM::GEOM_Object_var myGeomShape; - QLineEdit* myEditCurrentArgument; - - //Handle(SALOME_TypeFilter) myGeomFilter; - SUIT_SelectionFilter* myGeomFilter; - //SMESH_TypeFilter* myHypothesisFilter; - //SMESH_TypeFilter* myAlgorithmFilter; - SUIT_SelectionFilter* myHypothesisFilter; - SUIT_SelectionFilter* myAlgorithmFilter; - - QStringList HypoList; - QStringList AlgoList; - - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - - QGroupBox* GroupC1; - QLabel* TextLabel_NameMesh; - QLineEdit* LineEdit_NameMesh; - QLabel* TextLabelC1A1; - QPushButton* SelectButtonC1A1; - QLineEdit* LineEditC1A1; - - QLabel* TextLabelC1A1Hyp; - QPushButton* SelectButtonC1A1Hyp; - QLineEdit* LineEditC1A1Hyp; - - QLabel* TextLabelC1A1Algo; - QPushButton* SelectButtonC1A1Algo; - QLineEdit* LineEditC1A1Algo; - -private slots: - void ClickOnOk(); - bool ClickOnApply(); - void ClickOnCancel(); - void SetEditCurrentArgument(); - void SelectionIntoArgument(); - void DeactivateActiveDialog(); - void ActivateThisDialog(); -}; - -#endif // DIALOGBOX_INIT_MESH_H diff --git a/src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx b/src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx deleted file mode 100644 index e297b635c..000000000 --- a/src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx +++ /dev/null @@ -1,700 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_MergeNodesDlg.cxx -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#include "SMESHGUI_MergeNodesDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_IdValidator.h" -#include "SMESHGUI_SpinBox.h" - -#include "SMESH_Actor.h" -#include "SMESH_TypeFilter.hxx" -#include "SMDS_Mesh.hxx" - -#include "GEOMBase.h" - -#include "SUIT_ResourceMgr.h" - -#include "SVTK_ViewModel.h" -#include "SVTK_ViewWindow.h" -#include "SVTK_Selector.h" -#include "SVTK_Selection.h" -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// OCCT Includes -#include - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -//================================================================================= -// class : SMESHGUI_MergeNodesDlg() -// purpose : -//================================================================================= -SMESHGUI_MergeNodesDlg::SMESHGUI_MergeNodesDlg( 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 ) ) -{ - QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SMESH_MERGE_NODES"))); - QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); - - if (!name) - setName("SMESHGUI_MergeNodesDlg"); - resize(303, 185); - setCaption(tr("SMESH_MERGE_NODES")); - setSizeGripEnabled(TRUE); - SMESHGUI_MergeNodesDlgLayout = new QGridLayout(this); - SMESHGUI_MergeNodesDlgLayout->setSpacing(6); - SMESHGUI_MergeNodesDlgLayout->setMargin(11); - - /***************************************************************/ - GroupConstructors = new QButtonGroup(this, "GroupConstructors"); - GroupConstructors->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)5, - (QSizePolicy::SizeType)0, 0, 0, - GroupConstructors->sizePolicy().hasHeightForWidth())); - GroupConstructors->setTitle(tr("SMESH_MERGE_NODES" )); - GroupConstructors->setExclusive(TRUE); - GroupConstructors->setColumnLayout(0, Qt::Vertical); - GroupConstructors->layout()->setSpacing(0); - GroupConstructors->layout()->setMargin(0); - GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout()); - GroupConstructorsLayout->setAlignment(Qt::AlignTop); - GroupConstructorsLayout->setSpacing(6); - GroupConstructorsLayout->setMargin(11); - QHBoxLayout* RBLayout = new QHBoxLayout(0, 0, 6, "Layout2"); - RadioButton1= new QRadioButton(GroupConstructors, "RadioButton1"); - RadioButton1->setText(tr("" )); - RadioButton1->setPixmap(image0); - RBLayout->addWidget(RadioButton1); - GroupConstructorsLayout->addLayout(RBLayout, 0, 0); - SMESHGUI_MergeNodesDlgLayout->addWidget(GroupConstructors, 0, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)7, - (QSizePolicy::SizeType)0, 0, 0, - GroupButtons->sizePolicy().hasHeightForWidth())); - GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - GroupButtons->setTitle(tr("" )); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_APPLY" )); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - buttonOk = new QPushButton(GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_OK" )); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - SMESHGUI_MergeNodesDlgLayout->addWidget(GroupButtons, 4, 0); - - /***************************************************************/ - - // Controls for mesh defining - GroupMesh = new QGroupBox(this, "GroupMesh"); - GroupMesh->setTitle(tr("SMESH_MESH")); - 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); - - TextLabelName = new QLabel(GroupMesh, "TextLabelName"); - TextLabelName->setText(tr("SMESH_NAME")); - GroupMeshLayout->addWidget(TextLabelName, 0, 0); - - SelectMeshButton = new QPushButton(GroupMesh, "SelectMeshButton"); - SelectMeshButton->setPixmap(image1); - GroupMeshLayout->addWidget(SelectMeshButton, 0, 1); - - LineEditMesh = new QLineEdit(GroupMesh, "LineEditMesh"); - LineEditMesh->setReadOnly(true); - GroupMeshLayout->addWidget(LineEditMesh, 0, 2); - - SMESHGUI_MergeNodesDlgLayout->addWidget(GroupMesh, 1, 0); - - // Controls for coincident nodes detecting - GroupCoincident = new QGroupBox(this, "GroupCoincident"); - GroupCoincident->setTitle(tr("COINCIDENT_NODES")); - GroupCoincident->setColumnLayout(0, Qt::Vertical); - GroupCoincident->layout()->setSpacing(0); - GroupCoincident->layout()->setMargin(0); - QGridLayout* GroupCoincidentLayout = new QGridLayout(GroupCoincident->layout()); - GroupCoincidentLayout->setAlignment(Qt::AlignTop); - GroupCoincidentLayout->setSpacing(6); - GroupCoincidentLayout->setMargin(11); - - TextLabelTolerance = new QLabel(GroupCoincident, "TextLabelTolerance"); - TextLabelTolerance->setText(tr("SMESH_TOLERANCE")); - GroupCoincidentLayout->addWidget(TextLabelTolerance, 0, 0); - - SpinBoxTolerance = new SMESHGUI_SpinBox(GroupCoincident, "SpinBoxTolerance"); - GroupCoincidentLayout->addWidget(SpinBoxTolerance, 0, 1); - - QPushButton* DetectButton = new QPushButton(GroupCoincident, "DetectButton"); - DetectButton->setText(tr("DETECT")); - GroupCoincidentLayout->addWidget(DetectButton, 0, 2); - - ListCoincident = new QListView(GroupCoincident); - ListCoincident->setSorting(-1); - ListCoincident->addColumn("Nodes"); - ListCoincident->header()->hide(); - - GroupCoincidentLayout->addMultiCellWidget(ListCoincident, 1, 1, 0, 1); - - SelectAllCB = new QCheckBox(GroupCoincident, "SelectAllCB"); - SelectAllCB->setText(tr("SELECT_ALL")); - GroupCoincidentLayout->addWidget(SelectAllCB, 2, 0); - - SMESHGUI_MergeNodesDlgLayout->addWidget(GroupCoincident, 2, 0); - - // Controls for editing group of nodes - GroupEdit = new QGroupBox(this, "GroupEdit"); - GroupEdit->setTitle(tr("EDIT_GROUP_OF_NODES")); - GroupEdit->setColumnLayout(0, Qt::Vertical); - GroupEdit->layout()->setSpacing(0); - GroupEdit->layout()->setMargin(0); - QGridLayout* GroupEditLayout = new QGridLayout(GroupEdit->layout()); - GroupEditLayout->setAlignment(Qt::AlignTop); - GroupEditLayout->setSpacing(6); - GroupEditLayout->setMargin(11); - - ListEdit = new QListBox(GroupEdit, "ListEdit"); - ListEdit->setColumnMode(QListBox::FitToHeight); - ListEdit->setSelectionMode(QListBox::Extended); - GroupEditLayout->addMultiCellWidget(ListEdit, 0, 2, 0, 0); - - QPushButton* AddButton = new QPushButton(GroupEdit, "AddButton"); - AddButton->setText(tr("SMESH_BUT_ADD")); - GroupEditLayout->addWidget(AddButton, 0, 1); - - QPushButton* RemoveButton = new QPushButton(GroupEdit, "RemoveButton"); - RemoveButton->setText(tr("SMESH_BUT_REMOVE")); - GroupEditLayout->addWidget(RemoveButton, 1, 1); - - QSpacerItem* spacer = new QSpacerItem(20, 200, QSizePolicy::Minimum, QSizePolicy::Expanding); - GroupEditLayout->addItem(spacer, 2, 1); - - SMESHGUI_MergeNodesDlgLayout->addWidget(GroupEdit, 3, 0); - - /* Initialisations */ - SpinBoxTolerance->RangeStepAndValidator(0.0, 999999.999, 0.1, 3); - SpinBoxTolerance->SetValue(1e-05); - - RadioButton1->setChecked(TRUE); - - myActor = 0; - - mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - myMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH); - - /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - - connect(SelectMeshButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(DetectButton, SIGNAL (clicked()), this, SLOT(onDetect())); - connect(ListCoincident, SIGNAL (selectionChanged()), this, SLOT(onSelectNodesGroup())); - connect(ListCoincident, SIGNAL (pressed(QListViewItem*)), this, SLOT(updateControls())); - connect(ListCoincident, SIGNAL (currentChanged(QListViewItem*)), this, SLOT(updateControls())); - connect(SelectAllCB, SIGNAL(toggled(bool)), this, SLOT(onSelectAll(bool))); - connect(ListEdit, SIGNAL (selectionChanged()), this, SLOT(onSelectNodesFromGroup())); - connect(AddButton, SIGNAL (clicked()), this, SLOT(onAdd())); - connect(RemoveButton, SIGNAL (clicked()), this, SLOT(onRemove())); - - 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())); - - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); /* displays Dialog */ - - resize(0,0); - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); -} - -//================================================================================= -// function : ~SMESHGUI_MergeNodesDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_MergeNodesDlg::~SMESHGUI_MergeNodesDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -bool SMESHGUI_MergeNodesDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked() || myMesh->_is_nil()) - return false; - - try { - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - - QApplication::setOverrideCursor(Qt::waitCursor); - SMESH::array_of_long_array_var aGroupsOfNodes = new SMESH::array_of_long_array; - aGroupsOfNodes->length(ListCoincident->childCount()); - QListViewItem* item = ListCoincident->firstChild(); - - int anArrayNum = 0; - while (item) { - QStringList aListIds = QStringList(""); - if (((QCheckListItem*) item)->isOn()) - aListIds = QStringList::split(" ", item->text(0), false); - - SMESH::long_array_var anIds = new SMESH::long_array; - anIds->length(aListIds.count()); - - for (int i = 0; i < aListIds.count(); i++) - anIds[i] = aListIds[i].toInt(); - - aGroupsOfNodes[anArrayNum++] = anIds.inout(); - - item = item->itemBelow(); - } - - aMeshEditor->MergeNodes (aGroupsOfNodes.inout()); - QApplication::restoreOverrideCursor(); - } catch(...) { - } - - mySelectionMgr->clearSelected(); - SMESH::UpdateView(); - - onDetect(); - return true; -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::ClickOnOk() -{ - if (ClickOnApply()) - ClickOnCancel(); -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::ClickOnCancel() -{ - mySelectionMgr->clearFilters(); - mySelectionMgr->clearSelected(); - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - disconnect(mySelectionMgr, 0, this, 0); - mySMESHGUI->ResetState(); - reject(); -} - -//================================================================================= -// function : onEditNodesGroup() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::onEditNodesGroup() -{ - if (ListCoincident->childCount() < 1) - return; - - QString aNewIds = ""; - - QListBoxItem* anItem; - for (anItem = ListEdit->firstItem(); anItem != 0; anItem = anItem->next()) - aNewIds+=QString(" %1").arg(anItem->text()); - - ListCoincident->currentItem()->setText(0, aNewIds); -} - -//================================================================================= -// function : updateControls() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::updateControls() -{ - if (ListCoincident->childCount() < 1) { - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - return; - } - - bool hasChecked = false, hasUnchecked = false; - - QListViewItem* item = ListCoincident->firstChild(); - - while (item && (!hasChecked || !hasUnchecked)) { - if (((QCheckListItem*) item)->isOn()) - hasChecked = true; - else - hasUnchecked = true; - - item = item->itemBelow(); - } - - if (hasUnchecked) - SelectAllCB->setChecked(false); - - bool enable = !(myMesh->_is_nil()) && hasChecked; - - buttonOk->setEnabled(enable); - buttonApply->setEnabled(enable); -} - -//================================================================================= -// function : onDetect() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::onDetect() -{ - if (myMesh->_is_nil()) - return; - - try { - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - - QApplication::setOverrideCursor(Qt::waitCursor); - ListCoincident->clear(); - ListEdit->clear(); - - SMESH::array_of_long_array_var aNodeGroups; - aMeshEditor->FindCoincidentNodes(SpinBoxTolerance->GetValue(), aNodeGroups); - - for (int i = 0; i < aNodeGroups->length(); i++) { - SMESH::long_array& aGroup = aNodeGroups[i]; - - QString aNodeIds; - for (int j = 0; j < aGroup.length(); j++) - aNodeIds+=QString(" %1").arg(aGroup[j]); - - new QCheckListItem (ListCoincident, aNodeIds, QCheckListItem::CheckBox); - } - QApplication::restoreOverrideCursor(); - } catch(...) { - } - - updateControls(); -} - -//================================================================================= -// function : onSelectNodesGroup() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::onSelectNodesGroup() -{ - if (!myActor) - return; - - myEditCurrentArgument = (QWidget*)ListCoincident; - - QListViewItem* aSelectedItem = ListCoincident->selectedItem(); - if (!aSelectedItem) - return; - - QStringList aListId = QStringList::split(" ", aSelectedItem->text(0), false); - - ListEdit->clear(); - ListEdit->insertStringList(aListId); - - //mySelectionMgr->clearSelected(); - //mySelectionMgr->AddIObject(myActor->getIO()); - SALOME_ListIO aList; - aList.Append(myActor->getIO()); - mySelectionMgr->setSelectedObjects(aList, false); - - SMESH::SetPointRepresentation(true); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - - ListEdit->selectAll(true); -} - -//================================================================================= -// function : onSelectAll() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::onSelectAll (bool isToggled) -{ - if (isToggled) { - int aNbItems = 0; - QListViewItem* item = ListCoincident->firstChild(); - while (item) { - aNbItems++; - if (!((QCheckListItem*) item)->isOn()) - ((QCheckListItem*) item)->setOn(true); - item = item->itemBelow(); - } - - if (aNbItems) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } - } -} - -//================================================================================= -// function : onSelectNodesFromGroup() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::onSelectNodesFromGroup() -{ - if (!myActor) - return; - - TColStd_MapOfInteger aIndexes; - QListBoxItem* anItem; - for (anItem = ListEdit->firstItem(); anItem != 0; anItem = anItem->next()) { - if (anItem->isSelected()) { - int anId = anItem->text().toInt(); - aIndexes.Add(anId); - } - } - - mySelector->AddOrRemoveIndex(myActor->getIO(), aIndexes, false); - SALOME_ListIO aList; - aList.Append(myActor->getIO()); - mySelectionMgr->setSelectedObjects(aList); -} - -//================================================================================= -// function : onAdd() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::onAdd() -{ - if (!myActor) - return; - - QString aListStr = ""; - int aNbNnodes = 0; - - aNbNnodes = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aListStr); - if (aNbNnodes < 1) - return; - - QStringList aNodes = QStringList::split(" ", aListStr); - QListBoxItem* anItem = 0; - - for (QStringList::iterator it = aNodes.begin(); it != aNodes.end(); ++it) { - anItem = ListEdit->findItem(*it, Qt::ExactMatch); - if (!anItem) { - anItem = new QListBoxText(*it); - ListEdit->insertItem(anItem); - } - ListEdit->setSelected(anItem, true); - } - - onEditNodesGroup(); -} - -//================================================================================= -// function : onRemove() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::onRemove() -{ - if (myEditCurrentArgument != (QWidget*)ListCoincident) - return; - - for (int i = ListEdit->count(); i > 0; i--) { - if (ListEdit->isSelected(i-1)) - ListEdit->removeItem(i-1); - } - onEditNodesGroup(); -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::SetEditCurrentArgument() -{ - QPushButton* send = (QPushButton*)sender(); - - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearSelected(); - mySelectionMgr->clearFilters(); - - if (send == SelectMeshButton) { - myEditCurrentArgument = (QWidget*)LineEditMesh; - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myMeshOrSubMeshFilter); - } - - myEditCurrentArgument->setFocus(); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - SelectionIntoArgument(); -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_MergeNodesDlg::SelectionIntoArgument() -{ - if (myEditCurrentArgument == (QWidget*)LineEditMesh) { - QString aString = ""; - LineEditMesh->setText(aString); - - ListCoincident->clear(); - ListEdit->clear(); - - int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - if (nbSel != 1) - return; - - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type()); - - Handle(SALOME_InteractiveObject) IO = aList.First(); - myMesh = SMESH::IObjectToInterface(IO); - myActor = SMESH::FindActorByEntry(aList.First()->getEntry()); - if (myMesh->_is_nil() || !myActor) - return; - - LineEditMesh->setText(aString); - } -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::DeactivateActiveDialog() -{ - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); - GroupMesh->setEnabled(false); - GroupCoincident->setEnabled(false); - GroupEdit->setEnabled(false); - GroupButtons->setEnabled(false); - mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::ActivateThisDialog() -{ - /* Emit a signal to deactivate the active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupConstructors->setEnabled(true); - GroupMesh->setEnabled(true); - GroupCoincident->setEnabled(true); - GroupEdit->setEnabled(true); - GroupButtons->setEnabled(true); - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - SelectionIntoArgument(); -} - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::enterEvent (QEvent*) -{ - if (!GroupConstructors->isEnabled()) - ActivateThisDialog(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_MergeNodesDlg::closeEvent (QCloseEvent*) -{ - /* same than click on cancel button */ - ClickOnCancel(); -} - -//======================================================================= -//function : hideEvent() -//purpose : caused by ESC key -//======================================================================= -void SMESHGUI_MergeNodesDlg::hideEvent (QHideEvent*) -{ - if (!isMinimized()) - ClickOnCancel(); -} diff --git a/src/SMESHGUI/SMESHGUI_MergeNodesDlg.h b/src/SMESHGUI/SMESHGUI_MergeNodesDlg.h deleted file mode 100644 index 3eaf68acb..000000000 --- a/src/SMESHGUI/SMESHGUI_MergeNodesDlg.h +++ /dev/null @@ -1,142 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_MergeNodesDlg.h -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#ifndef DIALOGBOX_MERGENODES_H -#define DIALOGBOX_MERGENODES_H - -#include "SalomeApp_SelectionMgr.h" -//#include "SMESH_TypeFilter.hxx" -#include "SUIT_SelectionFilter.h" - -// QT Includes -#include - -class QGridLayout; -class QButtonGroup; -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class QRadioButton; -class QCheckBox; -class QListView; -class QListViewItem; -class QListBox; -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_MergeNodesDlg -// purpose : -//================================================================================= -class SMESHGUI_MergeNodesDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_MergeNodesDlg( SMESHGUI*, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0); - ~SMESHGUI_MergeNodesDlg(); - -private: - void Init(); - void closeEvent( QCloseEvent* e ); - void enterEvent ( QEvent * ); /* mouse enter the QWidget */ - void hideEvent ( QHideEvent * ); /* ESC key */ - void onEditNodesGroup(); - - SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ - SalomeApp_SelectionMgr* mySelectionMgr; /* User shape selection */ - SVTK_Selector* mySelector; - - QWidget* myEditCurrentArgument; - - SMESH::SMESH_Mesh_var myMesh; - SMESH_Actor* myActor; - //Handle(SMESH_TypeFilter) myMeshOrSubMeshFilter; - SUIT_SelectionFilter* myMeshOrSubMeshFilter; - - QButtonGroup* GroupConstructors; - QRadioButton* RadioButton1; - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - QGroupBox* GroupMesh; - QGroupBox* GroupCoincident; - QGroupBox* GroupEdit; - QLabel* TextLabelName; - QLabel* TextLabelTolerance; - QLineEdit* LineEditMesh; - QPushButton* SelectMeshButton; - QPushButton* DetectButton; - QPushButton* AddButton; - QPushButton* RemoveButton; - QCheckBox* SelectAllCB; - QListView* ListCoincident; - QListBox* ListEdit; - SMESHGUI_SpinBox* SpinBoxTolerance; - -private slots: - - void ClickOnOk(); - void ClickOnCancel(); - bool ClickOnApply(); - void updateControls(); - void onDetect(); - void onSelectNodesGroup(); - void onSelectAll(bool isToggled); - void onSelectNodesFromGroup(); - void onAdd(); - void onRemove(); - void SetEditCurrentArgument(); - void SelectionIntoArgument() ; - void DeactivateActiveDialog() ; - void ActivateThisDialog() ; - -protected: - QGridLayout* SMESHGUI_MergeNodesDlgLayout; - QGridLayout* GroupConstructorsLayout; - QGridLayout* GroupButtonsLayout; - QGridLayout* GroupMeshLayout; - QGridLayout* GroupCoincidentLayout; - QGridLayout* GroupEditLayout; -}; - -#endif // DIALOGBOX_MERGENODES_H diff --git a/src/SMESHGUI/SMESHGUI_MeshDlg.cxx b/src/SMESHGUI/SMESHGUI_MeshDlg.cxx deleted file mode 100644 index 8f427ffe9..000000000 --- a/src/SMESHGUI/SMESHGUI_MeshDlg.cxx +++ /dev/null @@ -1,447 +0,0 @@ -/** -* SMESH SMESHGUI -* -* Copyright (C) 2005 CEA/DEN, EDF R&D -* -* -* -* File : SMESHGUI_MeshDlg.cxx -* Author : Sergey LITONIN -* Module : SMESH -*/ - -#include "SMESHGUI_MeshDlg.h" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/*! - * \brief Tab for tab widget containing controls for definition of - * algorithms and hypotheses -*/ - -//================================================================================ -/*! - * \brief Constructor - * \param theParent - Parent widget for this tab - * - * Makes tab's look and feel - */ -//================================================================================ -SMESHGUI_MeshTab::SMESHGUI_MeshTab( QWidget* theParent ) -: QFrame( theParent ), - myPopup( 0 ) -{ - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - QIconSet aCreateIcon( aResMgr->loadPixmap( "SMESH", tr( "ICON_HYPO" ) ) ); - QIconSet aEditIcon( aResMgr->loadPixmap( "SMESH", tr( "ICON_HYPO_EDIT" ) ) ); - - // Algorifm - QLabel* anAlgoLbl = new QLabel( tr( "ALGORITHM" ), this ); - myHyp[ Algo ] = new QComboBox( this ); - - // Hypothesis - QLabel* aHypLbl = new QLabel( tr( "HYPOTHESIS" ), this ); - myHyp[ MainHyp ] = new QComboBox( this ); - myHyp[ MainHyp ]->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); - myCreateHyp[ MainHyp ] = new QToolButton( this ); - myCreateHyp[ MainHyp ]->setIconSet( aCreateIcon ); - myEditHyp[ MainHyp ] = new QToolButton( this ); - myEditHyp[ MainHyp ]->setIconSet( aEditIcon ); - - // Line - QFrame* aLine = new QFrame( this ); - aLine->setFrameStyle( QFrame::HLine | QFrame::Sunken ); - - // Add. hypothesis - QLabel* anAddHypLbl = new QLabel( tr( "ADD_HYPOTHESIS" ), this ); - myHyp[ AddHyp ] = new QComboBox( this ); - myHyp[ AddHyp ]->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); - myCreateHyp[ AddHyp ] = new QToolButton( this ); - myCreateHyp[ AddHyp ]->setIconSet( aCreateIcon ); - myEditHyp[ AddHyp ] = new QToolButton( this ); - myEditHyp[ AddHyp ]->setIconSet( aEditIcon ); - - // Fill layout - QGridLayout* aLay = new QGridLayout( this, 5, 4, 5, 5 ); - aLay->addWidget( anAlgoLbl, 0, 0 ); - aLay->addWidget( myHyp[ Algo ], 0, 1 ); - aLay->addWidget( aHypLbl, 1, 0 ); - aLay->addWidget( myHyp[ MainHyp ], 1, 1 ); - aLay->addWidget( myCreateHyp[ MainHyp ], 1, 2 ); - aLay->addWidget( myEditHyp[ MainHyp ], 1, 3 ); - aLay->addMultiCellWidget( aLine, 2, 2, 0, 3 ); - aLay->addWidget( anAddHypLbl, 3, 0 ); - aLay->addWidget( myHyp[ AddHyp ], 3, 1 ); - aLay->addWidget( myCreateHyp[ AddHyp ], 3, 2 ); - aLay->addWidget( myEditHyp[ AddHyp ], 3, 3 ); - aLay->addItem( new QSpacerItem( 0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding ), 4, 0 ); - - // Connect signals and slots - for ( int i = MainHyp; i <= AddHyp; i++ ) - { - connect( myCreateHyp[ i ], SIGNAL( clicked() ), SLOT( onCreateHyp() ) ); - connect( myEditHyp[ i ], SIGNAL( clicked() ), SLOT( onEditHyp() ) ); - connect( myHyp[ i ], SIGNAL( activated( int ) ), SLOT( onHyp( int ) ) ); - } - - // Initialize controls - - setAvailableHyps( Algo, QStringList() ); - setAvailableHyps( MainHyp, QStringList() ); - setAvailableHyps( AddHyp, QStringList() ); -} - -SMESHGUI_MeshTab::~SMESHGUI_MeshTab() -{ - if ( myPopup ) - delete myPopup; -} - -//================================================================================ -/*! - * \brief Sets available hypothesis or algorithms - * \param theId - identifier of hypothesis (main or additional, see HypType enumeration) - * \param theHyps - list of available hypothesis names - * - * Sets available main or additional hypothesis for this tab - */ -//================================================================================ -void SMESHGUI_MeshTab::setAvailableHyps( const int theId, const QStringList& theHyps ) -{ - myAvailableHyps[ theId ] = theHyps; - if ( theId == Algo ) - { - myHyp[ Algo ]->clear(); - myHyp[ Algo ]->insertItem( tr( "NONE" ) ); - myHyp[ Algo ]->insertStringList( theHyps ); - myHyp[ Algo ]->setCurrentItem( 0 ); - } -} - -//================================================================================ -/*! - * \brief Sets existing hypothesis - * \param theId - identifier of hypothesis (main or additional, see HypType enumeration) - * \param theHyps - list of available hypothesis names - * - * Sets existing main or additional hypothesis for this tab - */ -//================================================================================ -void SMESHGUI_MeshTab::setExistingHyps( const int theId, const QStringList& theHyps ) -{ - if ( theId != Algo ) - { - myHyp[ theId ]->clear(); - myHyp[ theId ]->insertItem( tr( "NONE" ) ); - myHyp[ theId ]->insertStringList( theHyps ); - myHyp[ theId ]->setCurrentItem( 0 ); - myEditHyp[ theId ]->setEnabled( false ); - } -} - -//================================================================================ -/*! - * \brief Adds hypothesis in combo box of available ones - * \param theId - identifier of hypothesis (main or additional, see HypType enumeration) - * \param theHyp - name of hypothesis to be added - * - * Adds hypothesis in combo box of available ones. This method is called by operation - * after creation of new hypothesis. - */ -//================================================================================ -void SMESHGUI_MeshTab::addHyp( const int theId, const QString& theHyp ) -{ - myHyp[ theId ]->insertItem( theHyp ); - myHyp[ theId ]->setCurrentItem( myHyp[ theId ]->count() - 1 ); - myEditHyp[ theId ]->setEnabled( true ); -} - -//================================================================================ -/*! - * \brief Renames hypothesis - * \param theId - identifier of hypothesis (main or additional, see HypType enumeration) - * \param theIndex - index of hypothesis to be renamed - * \param theNewName - new name of hypothesis to be renamed - * - * Renames hypothesis - */ -//================================================================================ -void SMESHGUI_MeshTab::renameHyp( const int theId, - const int theIndex, - const QString& theNewName ) -{ - if ( theIndex > 0 && theIndex < myHyp[ theId ]->count() ) - myHyp[ theId ]->changeItem( theNewName, theIndex ); -} - -//================================================================================ -/*! - * \brief Sets current hypothesis - * \param theId - identifier of hypothesis (main or additional, see HypType enumeration) - * \param theIndex - index of hypothesis to be set as current - * - * Sets current hypothesis - */ -//================================================================================ -void SMESHGUI_MeshTab::setCurrentHyp( const int theId, const int theIndex ) -{ - if ( theIndex >= 0 && theIndex < myHyp[ theId ]->count() ) - { - myHyp[ theId ]->setCurrentItem( theIndex ); - if ( myEditHyp[ theId ] ) - myEditHyp[ theId ]->setEnabled( theIndex > 0 ); - } -} - -//================================================================================ -/*! - * \brief Gets current hypothesis - * \param theId - identifier of hypothesis (main or additional, see HypType enumeration) - * \retval int - index of current hypothesis - * - * Gets current hypothesis - */ -//================================================================================ -int SMESHGUI_MeshTab::currentHyp( const int theId ) const -{ - return myHyp[ theId ]->currentItem(); -} - -//================================================================================ -/*! - * \brief Emits createHyp( const int ) signal - * - * SLOT called when "Create hypothesis" button clicked specifies sender and emits - * createHyp( const int ) signal - */ -//================================================================================ -void SMESHGUI_MeshTab::onCreateHyp() -{ - const QObject* aSender = sender(); - - if ( !myPopup ) - { - myPopup = new QPopupMenu( 0 ); - connect( myPopup, SIGNAL( activated( int ) ), SLOT( onPopupItem( int ) ) ); - } - - QStringList aHypNames; - if ( aSender == myCreateHyp[ MainHyp ] ) - { - aHypNames = myAvailableHyps[ MainHyp ]; - myPopup->setName( "MainHypPopup" ); - } - else - { - aHypNames = myAvailableHyps[ AddHyp ]; - myPopup->setName( "AddHypPopup" ); - } - - myPopup->clear(); - for ( int i = 0, n = aHypNames.count(); i < n; i++ ) - myPopup->insertItem( aHypNames[ i ], i ); - - myPopup->exec( QCursor::pos() ); -} - -//================================================================================ -/*! - * \brief Emits editHyp( const int ) signal - * - * SLOT called when "Edit hypothesis" button clicked specifies sender and emits - * editHyp( const int ) signal - */ -//================================================================================ -void SMESHGUI_MeshTab::onEditHyp() -{ - const QObject* aSender = sender(); - int aHypType = aSender == myEditHyp[ MainHyp ] ? MainHyp : AddHyp; - emit editHyp( aHypType, myHyp[ aHypType ]->currentItem() ); -} - -//================================================================================ -/*! - * \brief Updates "Edit hypothesis" button state - * - * SLOT called when current hypothesis changed disables "Edit hypothesis" button - * if current hypothesis is , enables otherwise - */ -//================================================================================ -void SMESHGUI_MeshTab::onHyp( int theIndex ) -{ - const QObject* aSender = sender(); - int anIndex = aSender == myHyp[ MainHyp ] ? MainHyp : AddHyp; - myEditHyp[ anIndex ]->setEnabled( theIndex > 0 ); -} - -//================================================================================ -/*! - * \brief Emits createHyp signal - * - * SLOT called when item of popup for hypothesis creation is activated. Emits - * createHyp signal to notify operation obout this event - */ -//================================================================================ -void SMESHGUI_MeshTab::onPopupItem( int theId ) -{ - const QObject* aSender = sender(); - if ( aSender ) - emit createHyp( strcmp( aSender->name(), "MainHypPopup" ) == 0 ? MainHyp : AddHyp, theId ); -} - -//================================================================================ -/*! - * \brief Resets all tab fields - * - * Resets all tab fields - */ -//================================================================================ -void SMESHGUI_MeshTab::reset() -{ - for ( int i = Algo; i <= AddHyp; i++ ) - { - myHyp[ i ]->setCurrentItem( 0 ); - if ( myEditHyp[ i ] ) - myEditHyp[ i ]->setEnabled( false ); - } -} - -/*! - * \brief Dialog for mech creation or editing - * - * This dialog is used for mech creation or editing. -*/ - -//================================================================================ -/*! - * \brief Constructor - * \param theToCreate - if this parameter is true then dialog is used for creation, - * for editing otherwise - * \param theIsMesh - if this parameter is true then dialog is used for mesh, - * for sub-mesh otherwise - * - * Makes dialog's look and feel - */ -//================================================================================ -SMESHGUI_MeshDlg::SMESHGUI_MeshDlg( const bool theToCreate, const bool theIsMesh ) -: SMESHGUI_Dialog( 0, false, true ) -{ - // Create top controls - - QGroupBox* aGrp = new QGroupBox( 3, Qt::Horizontal, mainFrame() ); - aGrp->setFrameStyle( QFrame::NoFrame ); - aGrp->setInsideMargin( 0 ); - // name - createObject( tr( "NAME" ), aGrp, Obj ); - setNameIndication( Obj, OneName ); - setReadOnly( Obj, false ); - // mesh - createObject( tr( "MESH" ), aGrp, Mesh ); - // geometry - createObject( tr( "GEOMETRY" ), aGrp, Geom ); - - // Create tab widget - - myTabWg = new QTabWidget( mainFrame() ); - myTabs[ Dim1D ] = new SMESHGUI_MeshTab( myTabWg ); - myTabs[ Dim2D ] = new SMESHGUI_MeshTab( myTabWg ); - myTabs[ Dim3D ] = new SMESHGUI_MeshTab( myTabWg ); - myTabWg->addTab( myTabs[ Dim1D ], tr( "DIM_1D" ) ); - myTabWg->addTab( myTabs[ Dim2D ], tr( "DIM_2D" ) ); - myTabWg->addTab( myTabs[ Dim3D ], tr( "DIM_3D" ) ); - - // Fill layout - - QVBoxLayout* aLay = new QVBoxLayout( mainFrame(), 0, 5 ); - aLay->addWidget( aGrp ); - aLay->addItem( new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum) ); - aLay->addWidget( myTabWg ); - - // Disable controls if necessary - setObjectShown( Mesh, false ); - if ( theToCreate ) - { - setCaption( tr( "CREATE_MESH" ) ); - objectWg( Obj, Btn )->hide(); - if ( theIsMesh ) - setCaption( tr( "CREATE_MESH" ) ); - else - { - setCaption( tr( "CREATE_SUBMESH" ) ); - setObjectShown( Mesh, true ); - } - } - else - { - setCaption( tr( "EDIT_MESH_SUBMESH" ) ); - objectWg( Mesh, Btn )->hide(); - objectWg( Geom, Btn )->hide(); - } -} - -SMESHGUI_MeshDlg::~SMESHGUI_MeshDlg() -{ -} - -//================================================================================ -/*! - * \brief Gets tab with given id - * \param theId - Tab identifier. Possible values are in "Dimensions" enumeration - * \retval SMESHGUI_MeshTab* - pointer to the tab or null if given parameter is - * invalid - * - * Gets tab containing controls for definition of algorithms and AddHypotheses - */ -//================================================================================ -SMESHGUI_MeshTab* SMESHGUI_MeshDlg::tab( const int theId ) const -{ - return ( theId >= Dim1D && theId <= Dim3D ? myTabs[ theId ] : 0 ); -} - -//================================================================================ -/*! - * \brief Resets all dialog fields - */ -//================================================================================ -void SMESHGUI_MeshDlg::reset() -{ - clearSelection(); - myTabs[ Dim1D ]->reset(); - myTabs[ Dim2D ]->reset(); - myTabs[ Dim3D ]->reset(); -} - -//================================================================================ -/*! - * \brief Sets curent tab - */ -//================================================================================ -void SMESHGUI_MeshDlg::setCurrentTab( const int theId ) -{ - myTabWg->setCurrentPage( theId ); -} - - - - - - - - - - - - - diff --git a/src/SMESHGUI/SMESHGUI_MeshDlg.h b/src/SMESHGUI/SMESHGUI_MeshDlg.h deleted file mode 100644 index 47fb33a34..000000000 --- a/src/SMESHGUI/SMESHGUI_MeshDlg.h +++ /dev/null @@ -1,120 +0,0 @@ -/** -* SMESH SMESHGUI -* -* Copyright (C) 2005 CEA/DEN, EDF R&D -* -* -* -* File : SMESHGUI_MeshDlg.h -* Author : Sergey LITONIN -* Module : SMESH -*/ - - -#ifndef SMESHGUI_MeshDlg_H -#define SMESHGUI_MeshDlg_H - -#include "SMESHGUI_Dialog.h" -#include -#include -#include - -class SMESHGUI_MeshTab; -class QTabWidget; -class QLineEdit; -class QComboBox; -class QToolButton; -class QString; -class QPopupMenu; - -/*! - * \brief Dialog for mech creation or editing - * - * This dialog is used for mech creation or editing. -*/ -class SMESHGUI_MeshDlg : public SMESHGUI_Dialog -{ - Q_OBJECT - -public: - - enum Controls { Obj, Mesh, Geom }; - - /*! Describes dimensions */ - enum Dimensions { Dim1D = 0, Dim2D, Dim3D }; - -public: - SMESHGUI_MeshDlg( const bool theToCreate, const bool theIsMesh ); - virtual ~SMESHGUI_MeshDlg(); - - SMESHGUI_MeshTab* tab( const int ) const; - void reset(); - void setCurrentTab( const int ); - -private: - - QMap< int, SMESHGUI_MeshTab* > myTabs; - QTabWidget* myTabWg; -}; - -/*! - * \brief Tab for tab widget containing controls for definition of - * algorithms and hypotheses -*/ - -class SMESHGUI_MeshTab : public QFrame -{ - Q_OBJECT - -public: - /*! To differ main algorithms, hypotheses and additional ones*/ - enum HypType - { - Algo = 0, //!< algorithms - MainHyp, //!< main hypothesis - AddHyp //!< additional hypothesis - }; - -public: - SMESHGUI_MeshTab( QWidget* ); - virtual ~SMESHGUI_MeshTab(); - - void setAvailableHyps( const int, const QStringList& ); - void setExistingHyps( const int, const QStringList& ); - void addHyp( const int, const QString& ); - void renameHyp( const int, const int, const QString& ); - void setCurrentHyp( const int, const int ); - int currentHyp( const int ) const; - void reset(); - -signals: - - void createHyp( const int theHypType, const int theIndex ); - //!< Emited when "Create hypothesis" button clicked - void editHyp( const int theHypType, const int theIndex ); - //!< Emited when "Edit hypothesis" button clicked - -private slots: - - void onCreateHyp(); - void onEditHyp(); - void onHyp( int ); - void onPopupItem( int ); - -private: - - QMap< int, QComboBox* > myHyp; - QMap< int, QToolButton* > myCreateHyp; - QMap< int, QToolButton* > myEditHyp; - - QMap< int, QStringList > myAvailableHyps; - QMap< int, QStringList > myExistingHyps; - - QPopupMenu* myPopup; -}; - -#endif - - - - diff --git a/src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx b/src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx deleted file mode 100644 index 3584bae23..000000000 --- a/src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx +++ /dev/null @@ -1,530 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_MeshInfosDlg.cxx -// Author : Nicolas BARBEROU -// Module : SMESH -// $Header$ - -#include "SMESHGUI_MeshInfosDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" - -#include "SUIT_Desktop.h" -#include "SUIT_ResourceMgr.h" -#include "SUIT_OverrideCursor.h" - -#include "SalomeApp_SelectionMgr.h" -#include "SALOMEDSClient_Study.hxx" -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// QT Includes -#include -#include -#include -#include -#include -#include -#include - -// IDL Headers -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_Group) - -using namespace std; - -#define COLONIZE(str) (QString(str).contains(":") > 0 ? QString(str) : QString(str) + " :" ) - -//================================================================================= -// function : SMESHGUI_MeshInfosDlg() -// purpose : Constructor -//================================================================================= -SMESHGUI_MeshInfosDlg::SMESHGUI_MeshInfosDlg (SMESHGUI* theModule, - const char* name, - bool modal, - WFlags fl): - QDialog(SMESH::GetDesktop(theModule), - name, - modal, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose), - mySelectionMgr(SMESH::GetSelectionMgr(theModule)), - mySMESHGUI(theModule) -{ - if (!name) - setName("SMESHGUI_MeshInfosDlg"); - setCaption(tr("SMESH_MESHINFO_TITLE")); - setSizeGripEnabled(TRUE); - - myStartSelection = true; - myIsActiveWindow = true; - - QVBoxLayout* aTopLayout = new QVBoxLayout(this); - aTopLayout->setSpacing(6); aTopLayout->setMargin(11); - - // select button & label - QPixmap image0(SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH",tr("ICON_SELECT"))); - mySelectBtn = new QPushButton(this, "mySelectBtn"); - mySelectBtn->setPixmap(image0); - mySelectBtn->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); - - mySelectLab = new QLabel(this, "mySelectLab"); - mySelectLab->setAlignment(AlignCenter); - QFont fnt = mySelectLab->font(); fnt.setBold(true); - mySelectLab->setFont(fnt); - - QHBoxLayout* aSelectLayout = new QHBoxLayout; - aSelectLayout->setMargin(0); aSelectLayout->setSpacing(0); - aSelectLayout->addWidget(mySelectBtn); - aSelectLayout->addWidget(mySelectLab); - - // top widget stack - myWGStack = new QWidgetStack(this); - - // no valid selection - QWidget* myBadWidget = new QWidget(myWGStack); - QVBoxLayout* aBadLayout = new QVBoxLayout(myBadWidget); - QLabel* myBadLab = new QLabel(tr("SMESH_BAD_SELECTION"), myBadWidget, "myBadLab"); - myBadLab->setAlignment(Qt::AlignCenter); - myBadLab->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); - aBadLayout->addWidget(myBadLab); - myWGStack->addWidget(myBadWidget, 0); - - // mesh - myMeshWidget = new QWidget(myWGStack); - QGridLayout* aMeshLayout = new QGridLayout(myMeshWidget); - aMeshLayout->setSpacing(6); aMeshLayout->setMargin(0); - myWGStack->addWidget(myMeshWidget); - - // --> name - QLabel* myMeshNameLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_NAME")), myMeshWidget, "myMeshNameLab"); - myMeshName = new QLabel(myMeshWidget, "myMeshName"); - myMeshName->setMinimumWidth(100); - QFrame* line1 = new QFrame(myMeshWidget); - line1->setFrameStyle(QFrame::HLine | QFrame::Sunken); - - // --> nodes - QLabel* myMeshNbNodesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_NODES")), myMeshWidget, "myMeshNbNodesLab"); - myMeshNbNodes = new QLabel(myMeshWidget, "myMeshNbNodes"); - myMeshNbNodes->setMinimumWidth(100); - - // --> edges - QLabel* myMeshNbEdgesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_EDGES")), myMeshWidget, "myMeshNbEdgesLab"); - myMeshNbEdges = new QLabel(myMeshWidget, "myMeshNbEdges"); - myMeshNbEdges->setMinimumWidth(100); - - // --> faces - myMeshFacesGroup = new QGroupBox(tr("SMESH_MESHINFO_FACES"), myMeshWidget, "myMeshFacesGroup"); - myMeshFacesGroup->setColumnLayout(0, Qt::Vertical); - myMeshFacesGroup->layout()->setSpacing(0); myMeshFacesGroup->layout()->setMargin(0); - QGridLayout* myMeshFacesGroupLayout = new QGridLayout(myMeshFacesGroup->layout()); - myMeshFacesGroupLayout->setAlignment(Qt::AlignTop); - myMeshFacesGroupLayout->setSpacing(6); myMeshFacesGroupLayout->setMargin(11); - - // --> faces --> total - QLabel* myMeshNbFacesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TOTAL")), myMeshFacesGroup, "myMeshNbFacesLab"); - myMeshNbFacesLab->setFont(fnt); - myMeshNbFaces = new QLabel(myMeshFacesGroup, "myMeshNbFaces"); - myMeshNbFaces->setMinimumWidth(100); - myMeshNbFaces->setFont(fnt); - - // --> faces --> triangles - QLabel* myMeshNbTrianglesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TRIANGLES")), myMeshFacesGroup, "myMeshNbTrianglesLab"); - myMeshNbTriangles = new QLabel(myMeshFacesGroup, "myMeshNbTriangles"); - myMeshNbTriangles->setMinimumWidth(100); - - // --> faces --> quadrangles - QLabel* myMeshNbQuadranglesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_QUADRANGLES")), myMeshFacesGroup, "myMeshNbQuadranglesLab"); - myMeshNbQuadrangles = new QLabel(myMeshFacesGroup, "myMeshNbQuadrangles"); - myMeshNbQuadrangles->setMinimumWidth(100); - - // --> faces --> polygons - QLabel* myMeshNbPolygonesLab = new QLabel( COLONIZE( tr( "SMESH_MESHINFO_POLYGONES" ) ), myMeshFacesGroup, "myMeshNbPolygonesLab" ); - myMeshNbPolygones = new QLabel( myMeshFacesGroup, "myMeshNbPolygones" ); - myMeshNbPolygones->setMinimumWidth( 100 ); - - myMeshFacesGroupLayout->addWidget(myMeshNbFacesLab, 0, 0); - myMeshFacesGroupLayout->addWidget(myMeshNbFaces, 0, 1); - myMeshFacesGroupLayout->addWidget(myMeshNbTrianglesLab, 1, 0); - myMeshFacesGroupLayout->addWidget(myMeshNbTriangles, 1, 1); - myMeshFacesGroupLayout->addWidget(myMeshNbQuadranglesLab, 2, 0); - myMeshFacesGroupLayout->addWidget(myMeshNbQuadrangles, 2, 1); - myMeshFacesGroupLayout->addWidget( myMeshNbPolygonesLab, 3, 0 ); - myMeshFacesGroupLayout->addWidget( myMeshNbPolygones, 3, 1 ); - - // --> volumes - myMeshVolumesGroup = new QGroupBox(tr("SMESH_MESHINFO_VOLUMES"), myMeshWidget, "myMeshVolumesGroup"); - myMeshVolumesGroup->setColumnLayout(0, Qt::Vertical); - myMeshVolumesGroup->layout()->setSpacing(0); myMeshVolumesGroup->layout()->setMargin(0); - QGridLayout* myMeshVolumesGroupLayout = new QGridLayout(myMeshVolumesGroup->layout()); - myMeshVolumesGroupLayout->setAlignment(Qt::AlignTop); - myMeshVolumesGroupLayout->setSpacing(6); myMeshVolumesGroupLayout->setMargin(11); - - // --> volumes --> total - QLabel* myMeshNbVolumesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TOTAL")), myMeshVolumesGroup, "myMeshNbVolumesLab"); - myMeshNbVolumesLab->setFont(fnt); - myMeshNbVolumes = new QLabel(myMeshVolumesGroup, "myMeshNbVolumes"); - myMeshNbVolumes->setMinimumWidth(100); - myMeshNbVolumes->setFont(fnt); - - // --> volumes --> tetrahedrons - QLabel* myMeshNbTetraLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TETRAS")), myMeshVolumesGroup, "myMeshNbTetraLab"); - myMeshNbTetra = new QLabel(myMeshVolumesGroup, "myMeshNbTetra"); - myMeshNbTetra->setMinimumWidth(100); - - // --> volumes --> hexahedrons - QLabel* myMeshNbHexaLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_HEXAS")), myMeshVolumesGroup, "myMeshNbHexaLab"); - myMeshNbHexa = new QLabel(myMeshVolumesGroup, "myMeshNbHexa"); - myMeshNbHexaLab->setMinimumWidth(100); - - // --> volumes --> prisms - QLabel* myMeshNbPrismLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_PRISMS")), myMeshVolumesGroup, "myMeshNbPrismLab"); - myMeshNbPrism = new QLabel(myMeshVolumesGroup, "myMeshNbPrism"); - myMeshNbPrism->setMinimumWidth(100); - - // --> volumes --> pyramids - QLabel* myMeshNbPyraLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_PYRAS")), myMeshVolumesGroup, "myMeshNbPyraLab"); - myMeshNbPyra = new QLabel(myMeshVolumesGroup, "myMeshNbPyra"); - myMeshNbPyra->setMinimumWidth(100); - - // --> volumes --> polyherones - QLabel* myMeshNbPolyhedronesLab = new QLabel( COLONIZE( tr( "SMESH_MESHINFO_POLYEDRES" ) ), myMeshVolumesGroup, "myMeshNbPolyhedronLab" ); - myMeshNbPolyhedrones = new QLabel( myMeshVolumesGroup, "myMeshNbPolyhedrones" ); - myMeshNbPolyhedrones->setMinimumWidth( 100 ); - - myMeshVolumesGroupLayout->addWidget(myMeshNbVolumesLab, 0, 0); - myMeshVolumesGroupLayout->addWidget(myMeshNbVolumes, 0, 1); - myMeshVolumesGroupLayout->addWidget(myMeshNbTetraLab, 1, 0); - myMeshVolumesGroupLayout->addWidget(myMeshNbTetra, 1, 1); - myMeshVolumesGroupLayout->addWidget(myMeshNbHexaLab, 2, 0); - myMeshVolumesGroupLayout->addWidget(myMeshNbHexa, 2, 1); - myMeshVolumesGroupLayout->addWidget(myMeshNbPrismLab, 3, 0); - myMeshVolumesGroupLayout->addWidget(myMeshNbPrism, 3, 1); - myMeshVolumesGroupLayout->addWidget(myMeshNbPyraLab, 4, 0); - myMeshVolumesGroupLayout->addWidget(myMeshNbPyra, 4, 1); - myMeshVolumesGroupLayout->addWidget( myMeshNbPolyhedronesLab, 5, 0 ); - myMeshVolumesGroupLayout->addWidget( myMeshNbPolyhedrones, 5, 1 ); - - aMeshLayout->addWidget(myMeshNameLab, 0, 0); - aMeshLayout->addWidget(myMeshName, 0, 1); - aMeshLayout->addMultiCellWidget(line1, 1, 1, 0, 1); - aMeshLayout->addWidget(myMeshNbNodesLab, 2, 0); - aMeshLayout->addWidget(myMeshNbNodes, 2, 1); - aMeshLayout->addWidget(myMeshNbEdgesLab, 3, 0); - aMeshLayout->addWidget(myMeshNbEdges, 3, 1); - aMeshLayout->addMultiCellWidget(myMeshFacesGroup, 4, 4, 0, 1); - aMeshLayout->addMultiCellWidget(myMeshVolumesGroup, 5, 5, 0, 1); - aMeshLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Expanding), 6, 0); - - // submesh - mySubMeshWidget = new QWidget(myWGStack); - QGridLayout* aSubMeshLayout = new QGridLayout(mySubMeshWidget); - aSubMeshLayout->setSpacing(6); aSubMeshLayout->setMargin(0); - myWGStack->addWidget(mySubMeshWidget); - - // --> name - QLabel* mySubMeshNameLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_NAME")), mySubMeshWidget, "mySubMeshNameLab"); - mySubMeshName = new QLabel(mySubMeshWidget, "mySubMeshName"); - mySubMeshName->setMinimumWidth(100); - QFrame* line2 = new QFrame(mySubMeshWidget); - line2->setFrameStyle(QFrame::HLine | QFrame::Sunken); - - // --> nodes - QLabel* mySubMeshNbNodesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_NODES")), mySubMeshWidget, "mySubMeshNbNodesLab"); - mySubMeshNbNodes = new QLabel(mySubMeshWidget, "mySubMeshNbNodes"); - mySubMeshNbNodes->setMinimumWidth(100); - - // --> elements - mySubMeshElementsGroup = new QGroupBox(tr("SMESH_MESHINFO_ELEMENTS"), mySubMeshWidget, "mySubMeshElementsGroup"); - mySubMeshElementsGroup->setColumnLayout(0, Qt::Vertical); - mySubMeshElementsGroup->layout()->setSpacing(0); mySubMeshElementsGroup->layout()->setMargin(0); - QGridLayout* mySubMeshElementsGroupLayout = new QGridLayout(mySubMeshElementsGroup->layout()); - mySubMeshElementsGroupLayout->setAlignment(Qt::AlignTop); - mySubMeshElementsGroupLayout->setSpacing(6); mySubMeshElementsGroupLayout->setMargin(11); - - // --> elements --> total - QLabel* mySubMeshNbElementsLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TOTAL")), mySubMeshElementsGroup, "mySubMeshNbElementsLab"); - mySubMeshNbElementsLab->setFont(fnt); - mySubMeshNbElements = new QLabel(mySubMeshElementsGroup, "mySubMeshNbElements"); - mySubMeshNbElements->setMinimumWidth(100); - mySubMeshNbElements->setFont(fnt); - - // --> elements --> edges - QLabel* mySubMeshNbEdgesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_EDGES")), mySubMeshElementsGroup, "mySubMeshNbEdgesLab"); - mySubMeshNbEdges = new QLabel(mySubMeshElementsGroup, "mySubMeshNbEdges"); - mySubMeshNbEdges->setMinimumWidth(100); - - // --> elements --> faces - QLabel* mySubMeshNbFacesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_FACES")), mySubMeshElementsGroup, "mySubMeshNbFacesLab"); - mySubMeshNbFaces = new QLabel(mySubMeshElementsGroup, "mySubMeshNbFaces"); - mySubMeshNbFaces->setMinimumWidth(100); - - // --> elements --> volumes - QLabel* mySubMeshNbVolumesLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_VOLUMES")), mySubMeshElementsGroup, "mySubMeshNbVolumesLab"); - mySubMeshNbVolumes = new QLabel(mySubMeshElementsGroup, "mySubMeshNbVolumes"); - mySubMeshNbVolumes->setMinimumWidth(100); - - mySubMeshElementsGroupLayout->addWidget(mySubMeshNbElementsLab, 0, 0); - mySubMeshElementsGroupLayout->addWidget(mySubMeshNbElements, 0, 1); - mySubMeshElementsGroupLayout->addWidget(mySubMeshNbEdgesLab, 1, 0); - mySubMeshElementsGroupLayout->addWidget(mySubMeshNbEdges, 1, 1); - mySubMeshElementsGroupLayout->addWidget(mySubMeshNbFacesLab, 2, 0); - mySubMeshElementsGroupLayout->addWidget(mySubMeshNbFaces, 2, 1); - mySubMeshElementsGroupLayout->addWidget(mySubMeshNbVolumesLab, 3, 0); - mySubMeshElementsGroupLayout->addWidget(mySubMeshNbVolumes, 3, 1); - - aSubMeshLayout->addWidget(mySubMeshNameLab, 0, 0); - aSubMeshLayout->addWidget(mySubMeshName, 0, 1); - aSubMeshLayout->addMultiCellWidget(line2, 1, 1, 0, 1); - aSubMeshLayout->addWidget(mySubMeshNbNodesLab, 2, 0); - aSubMeshLayout->addWidget(mySubMeshNbNodes, 2, 1); - aSubMeshLayout->addMultiCellWidget(mySubMeshElementsGroup, 3, 3, 0, 1); - aSubMeshLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Expanding), 4, 0); - - // group - myGroupWidget = new QWidget(myWGStack); - QGridLayout* myGroupWidgetLayout = new QGridLayout(myGroupWidget); - myGroupWidgetLayout->setSpacing(6); myGroupWidgetLayout->setMargin(0); - myWGStack->addWidget(myGroupWidget); - - // --> name - QLabel* myGroupNameLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_NAME")), myGroupWidget, "myGroupNameLab"); - myGroupName = new QLabel(myGroupWidget, "myGroupName"); - myGroupName->setMinimumWidth(100); - QFrame* line3 = new QFrame(myGroupWidget); - line3->setFrameStyle(QFrame::HLine | QFrame::Sunken); - - // --> type - QLabel* myGroupTypeLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TYPE")), myGroupWidget, "myGroupTypeLab"); - myGroupType = new QLabel(myGroupWidget, "myGroupType"); - myGroupType->setMinimumWidth(100); - - // --> number of entities - QLabel* myGroupNbLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_ENTITIES")), myGroupWidget, "myGroupNbLab"); - myGroupNb = new QLabel(myGroupWidget, "myGroupNb"); - myGroupNb->setMinimumWidth(100); - - myGroupWidgetLayout->addWidget(myGroupNameLab, 0, 0); - myGroupWidgetLayout->addWidget(myGroupName, 0, 1); - myGroupWidgetLayout->addMultiCellWidget(line3, 1, 1, 0, 1); - myGroupWidgetLayout->addWidget(myGroupTypeLab, 2, 0); - myGroupWidgetLayout->addWidget(myGroupType, 2, 1); - myGroupWidgetLayout->addWidget(myGroupNbLab, 3, 0); - myGroupWidgetLayout->addWidget(myGroupNb, 3, 1); - myGroupWidgetLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Expanding), 4, 0); - - // buttons - myButtonsGroup = new QGroupBox(this, "myButtonsGroup"); - myButtonsGroup->setColumnLayout(0, Qt::Vertical); - myButtonsGroup->layout()->setSpacing(0); myButtonsGroup->layout()->setMargin(0); - QHBoxLayout* myButtonsGroupLayout = new QHBoxLayout(myButtonsGroup->layout()); - myButtonsGroupLayout->setAlignment(Qt::AlignTop); - myButtonsGroupLayout->setSpacing(6); myButtonsGroupLayout->setMargin(11); - - // buttons --> OK button - myOkBtn = new QPushButton(tr("SMESH_BUT_OK" ), myButtonsGroup, "myOkBtn"); - myOkBtn->setAutoDefault(TRUE); myOkBtn->setDefault(TRUE); - myButtonsGroupLayout->addStretch(); - myButtonsGroupLayout->addWidget(myOkBtn); - myButtonsGroupLayout->addStretch(); - - aTopLayout->addLayout(aSelectLayout); - aTopLayout->addWidget(myWGStack); - aTopLayout->addWidget(myButtonsGroup); - - mySMESHGUI->SetActiveDialogBox(this); - - // connect signals - connect(myOkBtn, SIGNAL(clicked()), this, SLOT(close())); - connect(mySelectBtn, SIGNAL(clicked()), this, SLOT(onStartSelection())); - connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(close())); - connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionChanged())); - - // resize and move dialog, then show - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); - - // init dialog with current selection - onSelectionChanged(); -} - -//================================================================================= -// function : ~SMESHGUI_MeshInfosDlg() -// purpose : Destructor -//================================================================================= -SMESHGUI_MeshInfosDlg::~SMESHGUI_MeshInfosDlg() -{ -} - -//================================================================================= -// function : DumpMeshInfos() -// purpose : -//================================================================================= -void SMESHGUI_MeshInfosDlg::DumpMeshInfos() -{ - SUIT_OverrideCursor wc; - - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList); - - int nbSel = aList.Extent(); - if (nbSel == 1) { - myStartSelection = false; - mySelectLab->setText(""); - Handle(SALOME_InteractiveObject) IObject = aList.First(); - _PTR(SObject) aSO = SMESH::GetActiveStudyDocument()->FindObjectID(IObject->getEntry()); - if (aSO) { - //CORBA::Object_var anObject = aSO->GetObject(); - CORBA::Object_var anObject = SMESH::SObjectToObject(aSO); - if (!CORBA::is_nil(anObject)) { - SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow(anObject); - if (!aMesh->_is_nil()) { - myWGStack->raiseWidget(myMeshWidget); - setCaption(tr("SMESH_MESHINFO_TITLE") + " [" + tr("SMESH_OBJECT_MESH") + "]"); - myMeshName->setText(aSO->GetName().c_str()); - myMeshNbNodes->setNum((int)aMesh->NbNodes()); - myMeshNbEdges->setNum((int)aMesh->NbEdges()); - myMeshNbFaces->setNum((int)aMesh->NbFaces()); - myMeshNbTriangles->setNum((int)aMesh->NbTriangles()); - myMeshNbQuadrangles->setNum((int)aMesh->NbQuadrangles()); - myMeshNbPolygones->setNum( (int)aMesh->NbPolygons() ); - myMeshNbVolumes->setNum((int)aMesh->NbVolumes()); - myMeshNbTetra->setNum((int)aMesh->NbTetras()); - myMeshNbHexa->setNum((int)aMesh->NbHexas()); - myMeshNbPrism->setNum((int)aMesh->NbPrisms()); - myMeshNbPyra->setNum((int)aMesh->NbPyramids()); - myMeshNbPolyhedrones->setNum( (int)aMesh->NbPolyhedrons() ); - return; - } - SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(anObject); - if (!aSubMesh->_is_nil()) { - myWGStack->raiseWidget(mySubMeshWidget); - setCaption(tr("SMESH_MESHINFO_TITLE") + " [" + tr("SMESH_SUBMESH") + "]"); - mySubMeshName->setText(aSO->GetName().c_str()); - mySubMeshNbNodes->setNum((int)aSubMesh->GetNumberOfNodes(true)); - mySubMeshNbElements->setNum((int)aSubMesh->GetNumberOfElements()); - mySubMeshNbEdges->setNum((int)(aSubMesh->GetElementsByType(SMESH::EDGE)->length())); - mySubMeshNbFaces->setNum((int)(aSubMesh->GetElementsByType(SMESH::FACE)->length())); - mySubMeshNbVolumes->setNum((int)(aSubMesh->GetElementsByType(SMESH::VOLUME)->length())); - return; - } - SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(anObject); - if (!aGroup->_is_nil()) { - myWGStack->raiseWidget(myGroupWidget); - setCaption(tr("SMESH_MESHINFO_TITLE") + " [" + tr("SMESH_GROUP") + "]"); - myGroupName->setText(aSO->GetName().c_str()); - int aType = aGroup->GetType(); - QString strType; - switch (aType) { - case SMESH::NODE: - strType = "SMESH_MESHINFO_NODES"; break; - case SMESH::EDGE: - strType = "SMESH_MESHINFO_EDGES"; break; - case SMESH::FACE: - strType = "SMESH_MESHINFO_FACES"; break; - case SMESH::VOLUME: - strType = "SMESH_MESHINFO_VOLUMES"; break; - default: - strType = "SMESH_MESHINFO_ALL_TYPES"; break; - } - - myGroupType->setText(tr(strType)); - myGroupNb->setNum((int)aGroup->Size()); - return; - } - } - } - } - myWGStack->raiseWidget(0); - setCaption(tr("SMESH_MESHINFO_TITLE")); -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection has changed -//================================================================================= -void SMESHGUI_MeshInfosDlg::onSelectionChanged() -{ - if (myStartSelection) - DumpMeshInfos(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_MeshInfosDlg::closeEvent (QCloseEvent* e) -{ - mySMESHGUI->ResetState(); - QDialog::closeEvent(e); -} - -//================================================================================= -// function : windowActivationChange() -// purpose : called when window is activated/deactivated -//================================================================================= -void SMESHGUI_MeshInfosDlg::windowActivationChange (bool oldActive) -{ - QDialog::windowActivationChange(oldActive); - if (isActiveWindow() && myIsActiveWindow != isActiveWindow()) - ActivateThisDialog(); - myIsActiveWindow = isActiveWindow(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_MeshInfosDlg::DeactivateActiveDialog() -{ - disconnect(mySelectionMgr, 0, this, 0); -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_MeshInfosDlg::ActivateThisDialog() -{ - /* Emit a signal to deactivate any active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog(); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionChanged())); -} - -//================================================================================= -// function : onStartSelection() -// purpose : starts selection -//================================================================================= -void SMESHGUI_MeshInfosDlg::onStartSelection() -{ - myStartSelection = true; - onSelectionChanged(); - myStartSelection = true; - mySelectLab->setText(tr("INF_SELECT_OBJECT")); -} diff --git a/src/SMESHGUI/SMESHGUI_MeshInfosDlg.h b/src/SMESHGUI/SMESHGUI_MeshInfosDlg.h deleted file mode 100644 index 49db8c13a..000000000 --- a/src/SMESHGUI/SMESHGUI_MeshInfosDlg.h +++ /dev/null @@ -1,111 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_MeshInfosDlg.h -// Author : Nicolas BARBEROU -// Module : SMESH -// $Header$ - -#ifndef SMESHGUI_MESHINFOSDLG_H -#define SMESHGUI_MESHINFOSDLG_H - -// QT Includes -#include - -class QGroupBox; -class QLabel; -class QPushButton; -class QWidgetStack; - -class SalomeApp_SelectionMgr; -class SMESHGUI; - -class SMESHGUI_MeshInfosDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_MeshInfosDlg( SMESHGUI* theModule, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0 ); - ~SMESHGUI_MeshInfosDlg(); - -protected: - void closeEvent( QCloseEvent* e ); - void windowActivationChange( bool oldActive ); - void DumpMeshInfos(); - -private slots: - void onSelectionChanged(); - void DeactivateActiveDialog() ; - void ActivateThisDialog(); - void onStartSelection(); - -private: - SMESHGUI* mySMESHGUI; - SalomeApp_SelectionMgr* mySelectionMgr; - bool myStartSelection; - bool myIsActiveWindow; - - QPushButton* mySelectBtn; - QLabel* mySelectLab; - - QWidgetStack* myWGStack; - - QWidget* myMeshWidget; - QLabel* myMeshName; - QLabel* myMeshNbNodes; - QLabel* myMeshNbEdges; - QGroupBox* myMeshFacesGroup; - QLabel* myMeshNbFaces; - QLabel* myMeshNbTriangles; - QLabel* myMeshNbQuadrangles; - QLabel* myMeshNbPolygones; - QGroupBox* myMeshVolumesGroup; - QLabel* myMeshNbVolumes; - QLabel* myMeshNbTetra; - QLabel* myMeshNbHexa; - QLabel* myMeshNbPyra; - QLabel* myMeshNbPrism; - QLabel* myMeshNbPolyhedrones; - - QWidget* mySubMeshWidget; - QLabel* mySubMeshName; - QLabel* mySubMeshNbNodes; - QGroupBox* mySubMeshElementsGroup; - QLabel* mySubMeshNbElements; - QLabel* mySubMeshNbEdges; - QLabel* mySubMeshNbFaces; - QLabel* mySubMeshNbVolumes; - - QWidget* myGroupWidget; - QLabel* myGroupName; - QLabel* myGroupType; - QLabel* myGroupNb; - - QGroupBox* myButtonsGroup; - QPushButton* myOkBtn; -}; - -#endif // SMESHGUI_MESHINFOSDLG_H diff --git a/src/SMESHGUI/SMESHGUI_MeshOp.cxx b/src/SMESHGUI/SMESHGUI_MeshOp.cxx deleted file mode 100644 index 4882a7207..000000000 --- a/src/SMESHGUI/SMESHGUI_MeshOp.cxx +++ /dev/null @@ -1,999 +0,0 @@ -/** -* SMESH SMESHGUI -* -* Copyright (C) 2005 CEA/DEN, EDF R&D -* -* -* -* File : SMESHGUI_MeshOp.h -* Author : Sergey LITONIN -* Module : SMESHGUI -*/ - -#include "SMESHGUI_MeshOp.h" -#include "SMESHGUI_MeshDlg.h" -#include "SMESH_TypeFilter.hxx" -#include "SMESHGUI.h" - -#include "SMESHGUI_HypothesesUtils.h" -#include "SMESHGUI_Hypotheses.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_GEOMGenUtils.h" - -#include -#include - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include - -#define DEB_SLN - -//================================================================================ -/*! - * \brief Constructor - * \param theToCreate - if this parameter is true then operation is used for creation, - * for editing otherwise - * - * Initialize operation -*/ -//================================================================================ -SMESHGUI_MeshOp::SMESHGUI_MeshOp( const bool theToCreate, const bool theIsMesh ) -: SMESHGUI_SelectionOp(), - myToCreate( theToCreate ), - myIsMesh( theIsMesh ), - myDlg( 0 ) -{ -} - -//================================================================================ -/*! - * \brief Destructor -*/ -//================================================================================ -SMESHGUI_MeshOp::~SMESHGUI_MeshOp() -{ - if( myDlg ) - delete myDlg; -} - -//================================================================================ -/*! - * \brief Gets dialog of this operation - * \retval SalomeApp_Dialog* - pointer to dialog of this operation -*/ -//================================================================================ -SalomeApp_Dialog* SMESHGUI_MeshOp::dlg() const -{ - return myDlg; -} - -//================================================================================ -/*! - * \brief Creates or edits mesh - * \retval bool - TRUE if operation is performed successfully, FALSE otherwise - * - * Virtual slot redefined from the base class called when "Apply" button is clicked - * creates or edits mesh - */ -//================================================================================ -bool SMESHGUI_MeshOp::onApply() -{ - if( isStudyLocked() ) - return false; - - QString aMess; - if ( !isValid( aMess ) ) - { - if ( aMess != "" ) - SUIT_MessageBox::warn1( myDlg, - tr( "SMESH_WRN_WARNING" ), aMess, tr( "SMESH_BUT_OK" ) ); - return false; - } - - bool aResult = false; - aMess = ""; - try - { - if ( myToCreate && myIsMesh ) - aResult = createMesh( aMess ); - if ( myToCreate && !myIsMesh ) - aResult = createSubMesh( aMess ); - else if ( !myToCreate ) - aResult = editMeshOrSubMesh( aMess ); - if ( aResult ) - update( UF_ObjBrowser | UF_Model ); - } - catch ( const SALOME::SALOME_Exception& S_ex ) - { - SalomeApp_Tools::QtCatchCorbaException( S_ex ); - aResult = false; - } - catch ( ... ) - { - aResult = false; - } - - if ( aResult ) - { - if ( myToCreate ) - setDefaultName(); - } - else - { - if ( aMess == "" ) - aMess = tr( "SMESH_OPERATION_FAILED" ); - SUIT_MessageBox::warn1( myDlg, - tr( "SMESH_ERROR" ), aMess, tr( "SMESH_BUT_OK" ) ); - } - - return aResult; -} - -//================================================================================ -/*! - * \brief Creates dialog if necessary and shows it - * - * Virtual method redefined from base class called when operation is started creates - * dialog if necessary and shows it, activates selection - */ -//================================================================================ -void SMESHGUI_MeshOp::startOperation() -{ - if( !myDlg ) - { - myDlg = new SMESHGUI_MeshDlg( myToCreate, myIsMesh ); - for ( int i = SMESH::DIM_1D; i <= SMESH::DIM_3D; i++ ) - { - connect( myDlg->tab( i ), SIGNAL( createHyp( const int, const int ) ), - this, SLOT( onCreateHyp( const int, const int) ) ); - connect( myDlg->tab( i ), SIGNAL( editHyp( const int, const int ) ), - this, SLOT( onEditHyp( const int, const int) ) ); - } - } - SMESHGUI_SelectionOp::startOperation(); - - // iterate through dimensions and get available and existing algoritms and hypotheses, - // set them to the dialog - int i, j; - _PTR(SComponent) aFather = SMESH::GetActiveStudyDocument()->FindComponent( "SMESH" ); - for ( i = SMESH::DIM_1D; i <= SMESH::DIM_3D; i++ ) - { - SMESHGUI_MeshTab* aTab = myDlg->tab( i ); - QStringList anAvailable, anExisting; - for ( j = Algo; j <= AddHyp; j++ ) - { - availableHyps( i, j, anAvailable ); - existingHyps( i, j, aFather, anExisting, myExistingHyps[ i ][ j ] ); - - aTab->setAvailableHyps( j, anAvailable ); - aTab->setExistingHyps( j, anExisting ); - } - } - if ( myToCreate ) - { - setDefaultName(); - myDlg->activateObject( myIsMesh ? SMESHGUI_MeshDlg::Geom : SMESHGUI_MeshDlg::Mesh ); - } - else - myDlg->activateObject( SMESHGUI_MeshDlg::Obj ); - - selectionDone(); - - myDlg->setCurrentTab( SMESH::DIM_1D ); - myDlg->show(); -} - -//================================================================================ -/*! - * \brief Creates selection filter - * \param theId - identifier of current selection widget - * \retval SUIT_SelectionFilter* - pointer to the created filter or null - * - * Creates selection filter in accordance with identifier of current selection widget - */ -//================================================================================ -SUIT_SelectionFilter* SMESHGUI_MeshOp::createFilter( const int theId ) const -{ - if ( theId == SMESHGUI_MeshDlg::Geom ) - { -// TColStd_MapOfInteger allTypesMap; -// for ( int i = 0; i < 10; i++ ) -// allTypesMap.Add( i ); -// return new SMESH_NumberFilter( "GEOM", TopAbs_SHAPE, 0, allTypesMap ); - return new GEOM_SelectionFilter( (SalomeApp_Study*)study(), true ); - } - else if ( theId == SMESHGUI_MeshDlg::Obj && !myToCreate ) - return new SMESH_TypeFilter( MESHorSUBMESH ); - else if ( theId == SMESHGUI_MeshDlg::Mesh ) - return new SMESH_TypeFilter( MESH ); - else - return 0; -} - -//================================================================================ -/*! - * \brief Updates dialog's look and feel - * - * Virtual method redefined from the base class updates dialog's look and feel - */ -//================================================================================ -void SMESHGUI_MeshOp::selectionDone() -{ - SMESHGUI_SelectionOp::selectionDone(); - - if ( !myToCreate ) - { - try - { - QString anObjEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj ); - _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry ); - if ( pObj != 0 ) - { - SMESH::SMESH_subMesh_var aVar = - SMESH::SMESH_subMesh::_narrow( _CAST( SObject,pObj )->GetObject() ); - myDlg->setObjectShown( SMESHGUI_MeshDlg::Mesh, !aVar->_is_nil() ); - myDlg->objectWg( SMESHGUI_MeshDlg::Mesh, SMESHGUI_MeshDlg::Btn )->hide(); - myDlg->updateGeometry(); - myDlg->adjustSize(); - readMesh(); - } - else - myDlg->reset(); - } - catch ( const SALOME::SALOME_Exception& S_ex ) - { - SalomeApp_Tools::QtCatchCorbaException( S_ex ); - } - catch ( ... ) - { - } - } -} - -//================================================================================ -/*! - * \brief Verifies validity of input data - * \param theMess - Output parameter intended for returning error message - * \retval bool - TRUE if input data is valid, false otherwise - * - * Verifies validity of input data. This method is called when "Apply" or "OK" button - * is pressed before mesh creation or editing. - */ -//================================================================================ -bool SMESHGUI_MeshOp::isValid( QString& theMess ) const -{ - // Selected object to be edited - if ( !myToCreate && myDlg->selectedObject( SMESHGUI_MeshDlg::Obj ) == "" ) - { - theMess = tr( "THERE_IS_NO_OBJECT_FOR_EDITING" ); - return false; - } - - // Name - QString aMeshName = myDlg->objectText( SMESHGUI_MeshDlg::Obj ); - aMeshName = aMeshName.stripWhiteSpace(); - if ( aMeshName == "" ) - { - theMess = myIsMesh ? tr( "NAME_OF_MESH_IS_EMPTY" ) : tr( "NAME_OF_SUBMESH_IS_EMPTY" ); - return false; - } - - // Geom - if ( myToCreate ) - { - QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom ); - if ( aGeomEntry == "" ) - { - theMess = tr( "GEOMETRY_OBJECT_IS_NOT_DEFINED" ); - return false; - } - _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry ); - if ( !pGeom || GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() )->_is_nil() ) - { - theMess = tr( "GEOMETRY_OBJECT_IS_NULL" ); - return false; - } - - // Mesh - if ( !myIsMesh ) // i.e sub-mesh creation, - { - QString aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh ); - if ( aMeshEntry == "" ) - { - theMess = tr( "MESH_IS_NOT_DEFINED" ); - return false; - } - _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry ); - if ( !pMesh || SMESH::SMESH_Mesh::_narrow( _CAST( SObject,pMesh )->GetObject() )->_is_nil() ) - { - theMess = tr( "MESH_IS_NULL" ); - return false; - } - } - } - return true; -} - -//================================================================================ -/*! - * \brief Gets available hypotheses or algorithms - * \param theDim - specifies dimension of returned hypotheses/algorifms - * \param theHypType - specifies whether algorims or hypotheses or additional ones - * are retrieved (possible values are in HypType enumeration) - * \param theHyps - Output list of hypotheses' names - * - * Gets available hypotheses or algorithm in accordance with input parameters - */ -//================================================================================ -void SMESHGUI_MeshOp::availableHyps( const int theDim, - const int theHypType, - QStringList& theHyps ) const -{ - theHyps.clear(); - QStringList aHypTypeNameList = SMESH::GetAvailableHypotheses( - theHypType == Algo , theDim, theHypType == AddHyp ); - QStringList::const_iterator anIter; - for ( anIter = aHypTypeNameList.begin(); anIter != aHypTypeNameList.end(); ++anIter ) - { - HypothesisData* aData = SMESH::GetHypothesisData( *anIter ); - theHyps.append( aData->Label ); - } -} - -//================================================================================ -/*! - * \brief Gets existing hypotheses or algorithms - * \param theDim - specifies dimension of returned hypotheses/algorifms - * \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 theHyps - output list of names. - * \param theHypVars - output list of variables. - * - * Gets existing (i.e. already created) hypotheses or algorithm in accordance with - * input parameters - */ -//================================================================================ -void SMESHGUI_MeshOp::existingHyps( const int theDim, - const int theHypType, - _PTR(SObject) theFather, - QStringList& theHyps, - QValueList& theHypVars ) -{ - // Clear hypoheses list - theHyps.clear(); - theHypVars.clear(); - - if ( !theFather ) - return; - - _PTR(SObject) aHypRoot; - _PTR(GenericAttribute) anAttr; - _PTR(AttributeName) aName; - _PTR(AttributeIOR) anIOR; - - bool isMesh = !_CAST( SComponent, theFather ); - int aPart = -1; - if ( isMesh ) - aPart = theHypType == Algo ? 3 : 2; - else - aPart = theHypType == Algo ? 2 : 1; - - if ( theFather->FindSubObject( aPart, aHypRoot ) ) - { - _PTR(ChildIterator) anIter = - SMESH::GetActiveStudyDocument()->NewChildIterator( aHypRoot ); - for (; anIter->More(); anIter->Next() ) - { - _PTR(SObject) anObj = anIter->Value(); - if ( isMesh ) // i.e. mesh or submesh - { - _PTR(SObject) aRefObj; - if ( anObj->ReferencedObject( aRefObj ) ) - anObj = aRefObj; - else - continue; - } - if ( anObj->FindAttribute( anAttr, "AttributeName" ) ) - { - aName = anAttr; - CORBA::Object_var aVar = _CAST(SObject,anObj)->GetObject(); - if ( !CORBA::is_nil( aVar ) ) - { - SMESH::SMESH_Hypothesis_var aHypVar = SMESH::SMESH_Hypothesis::_narrow( aVar ); - if ( !aHypVar->_is_nil() ) - { - QString aHypType( aHypVar->GetName() ); - HypothesisData* aData = SMESH::GetHypothesisData( aHypType ); - if ( ( theDim == -1 || aData->Dim.contains( theDim ) ) && - ( theHypType == AddHyp ) == aData->IsAux ) - { - theHyps.append( aName->Value().c_str() ); - theHypVars.append( aHypVar ); - } - } - } - } - } - } -} - -//================================================================================ -/*! - * \brief Calls plugin methods for hypothesis creation - * \param theHypType - specifies whether main hypotheses or additional ones - * are created - * \param theIndex - index of type of hypothesis to be cerated - * - * Speicfies dimension of hypothesis to be created (using sender() method), specifies - * its type and calls plugin methods for hypothesis creation - */ -//================================================================================ -void SMESHGUI_MeshOp::onCreateHyp( const int theHypType, const int theIndex ) -{ - // Speicfies dimension of hypothesis to be created - const QObject* aSender = sender(); - int aDim = -1; - for ( int i = SMESH::DIM_1D; i <= SMESH::DIM_3D; i++ ) - if ( aSender == myDlg->tab( i ) ) - aDim = i; - if ( aDim == -1 ) - return; - - // Speicfies type of hypothesis to be created - QStringList aHypTypeNames = SMESH::GetAvailableHypotheses( false , aDim, theHypType == AddHyp ); - if ( theIndex < 0 || theIndex >= aHypTypeNames.count() ) - return; - - QString aHypTypeName = aHypTypeNames[ theIndex ]; - HypothesisData* aData = SMESH::GetHypothesisData( aHypTypeName.latin1() ); - if ( aData == 0 ) - return; - - QString aClientLibName = aData->ClientLibName; - QStringList anOldHyps; - _PTR(SComponent) aFather = SMESH::GetActiveStudyDocument()->FindComponent( "SMESH" ); - existingHyps( aDim, theHypType, aFather, anOldHyps, myExistingHyps[ aDim ][ theHypType ] ); - - if ( aClientLibName == "" ) - { - // Call hypothesis creation server method (without GUI) - QString aHypName = aData->Label; - SMESH::CreateHypothesis( aHypTypeName, aHypName, false ); - } - else - { - // Get hypotheses creator client (GUI) - SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator( aHypTypeName ); - - // Create hypothesis - aCreator->CreateHypothesis( false, myDlg ); - } - - QStringList aNewHyps; - aFather = SMESH::GetActiveStudyDocument()->FindComponent( "SMESH" ); - existingHyps( aDim, theHypType, aFather, aNewHyps, myExistingHyps[ aDim ][ theHypType ] ); - if ( aNewHyps.count() > anOldHyps.count() ) - { - for ( int i = anOldHyps.count(); i < aNewHyps.count(); i++ ) - myDlg->tab( aDim )->addHyp( theHypType, aNewHyps[ i ] ); - } -} - -//================================================================================ -/*! - * \brief Calls plugin methods for hypothesis editing - * \param theHypType - specifies whether main hypothesis or additional one - * is edited - * \param theIndex - index of existing hypothesis - * - * Calls plugin methods for hypothesis editing - */ -//================================================================================ -void SMESHGUI_MeshOp::onEditHyp( const int theHypType, const int theIndex ) -{ - // Speicfies dimension of hypothesis to be created - const QObject* aSender = sender(); - int aDim = -1; - for ( int i = SMESH::DIM_1D; i <= SMESH::DIM_3D; i++ ) - if ( aSender == myDlg->tab( i ) ) - aDim = i; - if ( aDim == -1 ) - return; - - QValueList aList = myExistingHyps[ aDim ][ theHypType ]; - SMESH::SMESH_Hypothesis_var aHyp = aList[ theIndex - 1 ]; - if ( aHyp->_is_nil() ) - return; - - char* aTypeName = aHyp->GetName(); - SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator( aTypeName ); - if ( aCreator ) - aCreator->EditHypothesis( aHyp ); -} - -//================================================================================ -/*! - * \brief Creates mesh - * \param theMess - Output parameter intended for returning error message - * \retval bool - TRUE if mesh is created, FALSE otherwise - * - * Creates mesh - */ -//================================================================================ -bool SMESHGUI_MeshOp::createMesh( QString& theMess ) -{ - theMess = ""; - - QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom ); - _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry ); - GEOM::GEOM_Object_var aGeomVar = - GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() ); - - SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen(); - if ( aSMESHGen->_is_nil() ) - return false; - - SUIT_OverrideCursor aWaitCursor; - - // create mesh - SMESH::SMESH_Mesh_var aMeshVar = aSMESHGen->CreateMesh( aGeomVar ); - if ( aMeshVar->_is_nil() ) - return false; - _PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshVar.in() ); - if ( aMeshSO ) - SMESH::SetName( aMeshSO, myDlg->objectText( SMESHGUI_MeshDlg::Obj ).latin1() ); - - for ( int aDim = SMESH::DIM_1D; aDim <= SMESH::DIM_3D; aDim++ ) - { - // assign hypotheses - for ( int aHypType = MainHyp; aHypType <= AddHyp; aHypType++ ) - { - int aHypIndex = currentHyp( aDim, aHypType ); - if ( aHypIndex >= 0 && aHypIndex < myExistingHyps[ aDim ][ aHypType ].count() ) - { - SMESH::SMESH_Hypothesis_var aHypVar = myExistingHyps[ aDim ][ aHypType ][ aHypIndex ]; - if ( !aHypVar->_is_nil() ) - SMESH::AddHypothesisOnMesh( aMeshVar, aHypVar ); - } - } - // find or create algorithm - SMESH::SMESH_Hypothesis_var anAlgoVar = getAlgo( aDim ); - if ( !anAlgoVar->_is_nil() ) - SMESH::AddHypothesisOnMesh( aMeshVar, anAlgoVar ); - } - return true; -} - -//================================================================================ -/*! - * \brief Creates sub-mesh - * \param theMess - Output parameter intended for returning error message - * \retval bool - TRUE if sub-mesh is created, FALSE otherwise - * - * Creates sub-mesh - */ -//================================================================================ -bool SMESHGUI_MeshOp::createSubMesh( QString& theMess ) -{ - theMess = ""; - - SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen(); - if ( aSMESHGen->_is_nil() ) - return false; - - // get mesh object - QString aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh ); - _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry ); - SMESH::SMESH_Mesh_var aMeshVar = - SMESH::SMESH_Mesh::_narrow( _CAST( SObject,pMesh )->GetObject() ); - - // get geom object - QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom ); - _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry ); - GEOM::GEOM_Object_var aGeomVar = - GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() ); - - SUIT_OverrideCursor aWaitCursor; - - // create sub-mesh - QString aName = myDlg->objectText( SMESHGUI_MeshDlg::Obj ); - SMESH::SMESH_subMesh_var aSubMeshVar = aMeshVar->GetSubMesh( aGeomVar, aName.latin1() ); - - for ( int aDim = SMESH::DIM_1D; aDim <= SMESH::DIM_3D; aDim++ ) - { - // assign hypotheses - for ( int aHypType = MainHyp; aHypType <= AddHyp; aHypType++ ) - { - int aHypIndex = currentHyp( aDim, aHypType ); - if ( aHypIndex >= 0 && aHypIndex < myExistingHyps[ aDim ][ aHypType ].count() ) - { - SMESH::SMESH_Hypothesis_var aHypVar = - myExistingHyps[ aDim ][ aHypType ][ aHypIndex ]; - if ( !aHypVar->_is_nil() ) - SMESH::AddHypothesisOnSubMesh( aSubMeshVar, aHypVar ); - } - } - // find or create algorithm - SMESH::SMESH_Hypothesis_var anAlgoVar = getAlgo( aDim ); - if ( !anAlgoVar->_is_nil() ) - SMESH::AddHypothesisOnSubMesh( aSubMeshVar, anAlgoVar ); - } - return true; -} - -//================================================================================ -/*! - * \brief Gets current hypothesis or algorithms - * \param theDim - dimension of hypothesis or algorithm - * \param theHypType - Type of hypothesis (Algo, MainHyp, AddHyp) - * \retval int - current hypothesis or algorithms - * - * Gets current hypothesis or algorithms - */ -//================================================================================ -int SMESHGUI_MeshOp::currentHyp( const int theDim, const int theHypType ) const -{ - return myDlg->tab( theDim )->currentHyp( theHypType ) - 1; -} - -//================================================================================ -/*! - * \brief Sets current hypothesis or algorithms - * \param theDim - dimension of hypothesis or algorithm - * \param theHypType - Type of hypothesis (Algo, MainHyp, AddHyp) - * \param theIndex - Index of hypothesis - * - * Gets current hypothesis or algorithms - */ -//================================================================================ -void SMESHGUI_MeshOp::setCurrentHyp( const int theDim, - const int theHypType, - const int theIndex ) -{ - myDlg->tab( theDim )->setCurrentHyp( theHypType, theIndex + 1 ); -} - -//================================================================================ -/*! - * \brief Generates default and sets mesh/submesh name - * - * Generates and sets default mesh/submesh name(Mesh_1, Mesh_2, etc.) - */ -//================================================================================ -void SMESHGUI_MeshOp::setDefaultName() const -{ - QString aResName; - - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); - int i = 1; - QString aPrefix = tr( myIsMesh ? "SMESH_OBJECT_MESH" : "SMESH_SUBMESH" ) + "_"; - _PTR(SObject) anObj; - do - { - aResName = aPrefix + QString::number( i++ ); - anObj = aStudy->FindObject( aResName.latin1() ); - } - while ( anObj ); - - QLineEdit* aControl = ( QLineEdit* )myDlg->objectWg( - SMESHGUI_MeshDlg::Obj, SMESHGUI_MeshDlg::Control ); - aControl->setText( aResName ); -} - -//================================================================================ -/*! - * \brief Gets algorithm or creates it if necessary - * \param theDim - specifies dimension of returned hypotheses/algorifms - * \retval SMESH::SMESH_Hypothesis_var - algorithm - * - * Gets algorithm or creates it if necessary - */ -//================================================================================ -SMESH::SMESH_Hypothesis_var SMESHGUI_MeshOp::getAlgo( const int theDim ) -{ - SMESH::SMESH_Hypothesis_var anAlgoVar; - int aHypIndex = currentHyp( theDim, Algo ); - QStringList aHypTypeNameList = SMESH::GetAvailableHypotheses( true, theDim, false ); - if ( aHypIndex < 0 || aHypIndex >= aHypTypeNameList.count() ) - return anAlgoVar; - QString aHypName = aHypTypeNameList[ aHypIndex ]; - QValueList& aHypVarList = myExistingHyps[ theDim ][ Algo ]; - QValueList::iterator anIter; - for ( anIter = aHypVarList.begin(); anIter != aHypVarList.end(); anIter++ ) - { - SMESH::SMESH_Hypothesis_var aHypVar = *anIter; - if ( !aHypVar->_is_nil() && aHypName == aHypVar->GetName() ) - { - anAlgoVar = aHypVar; - break; - } - } - if ( anAlgoVar->_is_nil() ) - { - HypothesisData* aHypData = SMESH::GetHypothesisData( aHypName ); - if ( aHypData ) - { - QString aClientLibName = aHypData->ClientLibName; - if ( aClientLibName == "" ) - SMESH::CreateHypothesis( aHypName, aHypData->Label, true ); - else - { - SMESHGUI_GenericHypothesisCreator* aCreator = - SMESH::GetHypothesisCreator( aHypName ); - if ( aCreator ) - aCreator->CreateHypothesis( true, myDlg ); - } - QStringList tmpList; - _PTR(SComponent) aFather = SMESH::GetActiveStudyDocument()->FindComponent( "SMESH" ); - existingHyps( theDim, Algo, aFather, tmpList, myExistingHyps[ theDim ][ Algo ] ); - } - - QValueList& 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() ) - { - anAlgoVar = aHypVar; - break; - } - } - } - - return anAlgoVar._retn(); -} - -//================================================================================ -/*! - * \brief Reads parameters of edited mesh and assigns them to the dialog - * - * Reads parameters of edited mesh and assigns them to the dialog (called when - * mesh is edited only) - */ -//================================================================================ -void SMESHGUI_MeshOp::readMesh() -{ - QString anObjEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj ); - _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry ); - if ( !pObj ) - return; - - // 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() ) - { - _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 hypotheses and algorithms assigned to the mesh/sub-mesh - for ( int dim = SMESH::DIM_1D; dim <= SMESH::DIM_3D; dim++ ) - { - // get algorithm - QStringList anExisting; - int aHypIndex = -1; - existingHyps( dim, Algo, pObj, anExisting, myObjHyps[ dim ][ Algo ] ); - if ( myObjHyps[ dim ][ Algo ].count() > 0 ) - { - SMESH::SMESH_Hypothesis_var aVar = myObjHyps[ dim ][ Algo ].first(); - QString aHypTypeName = aVar->GetName(); - - QStringList aHypTypeNameList = SMESH::GetAvailableHypotheses( true , dim, false ); - for ( int i = 0, n = aHypTypeNameList.count(); i < n; i++ ) - if ( aHypTypeName == aHypTypeNameList[ i ] ) - { - aHypIndex = i; - break; - } - } - setCurrentHyp( dim, Algo, aHypIndex ); - - // get hypotheses - for ( int hypType = MainHyp; hypType <= AddHyp; hypType++ ) - { - // get hypotheses - existingHyps( dim, hypType, pObj, anExisting, myObjHyps[ dim ][ hypType ] ); - // find index of requered hypothesis among existing ones for this dimension - // and hyp types - int aHypIndex = -1; - if ( myObjHyps[ dim ][ hypType ].count() > 0 ) - aHypIndex = find( myObjHyps[ dim ][ hypType ].first(), - myExistingHyps[ dim ][ hypType ] ); - setCurrentHyp( dim, hypType, aHypIndex ); - } - } -} - -//================================================================================ -/*! - * \brief Gets name of object - * \param theSO - SObject - * \retval QString - name of object - * - * Gets name of object - */ -//================================================================================ -QString SMESHGUI_MeshOp::name( _PTR(SObject) theSO ) const -{ - QString aResName; - if ( theSO ) - { - _PTR(GenericAttribute) anAttr; - _PTR(AttributeName) aNameAttr; - if ( theSO->FindAttribute( anAttr, "AttributeName" ) ) - { - aNameAttr = anAttr; - aResName = aNameAttr->Value().c_str(); - } - } - return aResName; -} - -//================================================================================ -/*! - * \brief Finds hypothesis in input list - * \param theHyp - hypothesis to be found - * \param theHypList - input list of hypotheses - * \retval int - index of hypothesis or -1 if it is not found - * - * Finds position of hypothesis in input list - */ -//================================================================================ -int SMESHGUI_MeshOp::find( const SMESH::SMESH_Hypothesis_var& theHyp, - const QValueList& theHypList ) const -{ - int aRes = -1; - if ( !theHyp->_is_nil() ) - { - int i = 0; - QValueList::const_iterator anIter; - for ( anIter = theHypList.begin(); anIter != theHypList.end(); ++ anIter ) - { - if ( theHyp->_is_equivalent( *anIter ) ) - { - aRes = i; - break; - } - i++; - } - } - return aRes; -} - -//================================================================================ -/*! - * \brief Edits mesh or sub-mesh - * \param theMess - Output parameter intended for returning error message - * \retval bool - TRUE if mesh is edited succesfully, FALSE otherwise - * - * Assigns new name hypotheses and algoriths to the mesh or sub-mesh - */ -//================================================================================ -bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess ) -{ - theMess = ""; - - SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen(); - if ( aSMESHGen->_is_nil() ) - return false; - - QString anObjEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj ); - _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry ); - if ( !pObj ) - return false; - - SUIT_OverrideCursor aWaitCursor; - - // Set new name - SMESH::SetName( pObj, myDlg->objectText( SMESHGUI_MeshDlg::Obj ).latin1() ); - - // Assign new hypotheses and algorithms - for ( int dim = SMESH::DIM_1D; dim <= SMESH::DIM_3D; dim++ ) - { - // create algorithm if necessary - getAlgo( dim ); - - // assign hypotheses - for ( int hypType = Algo; hypType <= AddHyp; hypType++ ) - { - int aNewHypIndex = currentHyp( dim, hypType ); - int anOldHypIndex = -1; - if ( myObjHyps[ dim ][ hypType ].count() > 0 ) - anOldHypIndex = find( myObjHyps[ dim ][ hypType ].first(), - myExistingHyps[ dim ][ hypType ] ); - if ( aNewHypIndex != anOldHypIndex ) - { - // remove old hypotheses - if ( anOldHypIndex >= 0 ) - SMESH::RemoveHypothesisOrAlgorithmOnMesh( - pObj, myExistingHyps[ dim ][ hypType ][ anOldHypIndex ] ); - - // assign new hypotheses - if ( aNewHypIndex != -1 ) - { - SMESH::SMESH_Mesh_var aMeshVar = - SMESH::SMESH_Mesh::_narrow( _CAST(SObject,pObj)->GetObject() ); - bool isMesh = !aMeshVar->_is_nil(); - if ( isMesh ) - { - SMESH::AddHypothesisOnMesh( - aMeshVar, myExistingHyps[ dim ][ hypType ][ aNewHypIndex ] ); - } - else - { - SMESH::SMESH_subMesh_var aVar = - SMESH::SMESH_subMesh::_narrow( _CAST(SObject,pObj)->GetObject() ); - if ( !aVar->_is_nil() ) - SMESH::AddHypothesisOnSubMesh( - aVar, myExistingHyps[ dim ][ hypType ][ aNewHypIndex ] ); - } - } - // reread all hypotheses of mesh if necessary - QStringList anExisting; - existingHyps( dim, hypType, pObj, anExisting, myObjHyps[ dim ][ hypType ] ); - } - } - } - - return true; -} - -//================================================================================ -/*! - * \brief Verifies whether given operator is valid for this one - * \param theOtherOp - other operation - * \return Returns TRUE if the given operator is valid for this one, FALSE otherwise -* -* Virtual method redefined from base class verifies whether given operator is valid for -* this one (i.e. can be started "above" this operator). In current implementation method -* retuns false if theOtherOp operation is not intended for deleting objects or mesh -* elements. -*/ -//================================================================================ -bool SMESHGUI_MeshOp::isValid( SUIT_Operation* theOp ) const -{ - return SMESHGUI_Operation::isValid( theOp ) && !theOp->inherits( "SMESHGUI_MeshOp" ); -} - - - - - - - - - diff --git a/src/SMESHGUI/SMESHGUI_MeshOp.h b/src/SMESHGUI/SMESHGUI_MeshOp.h deleted file mode 100644 index 063ebcaac..000000000 --- a/src/SMESHGUI/SMESHGUI_MeshOp.h +++ /dev/null @@ -1,93 +0,0 @@ -/** -* SMESH SMESHGUI -* -* Copyright (C) 2005 CEA/DEN, EDF R&D -* -* -* -* File : SMESHGUI_MeshOp.h -* Author : Sergey LITONIN -* Module : SMESHGUI -*/ - -#ifndef SMESHGUI_MeshOp_H -#define SMESHGUI_MeshOp_H - -#include "SMESHGUI_SelectionOp.h" -#include - -#include -#include CORBA_SERVER_HEADER(GEOM_Gen) -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -class SMESHGUI_MeshDlg; -class SMESH_TypeFilter; -class SMESH_NumberFilter; - - -/*! - * \brief Operation for mech creation or editing - * - * This operation is used for mech creation or editing. -*/ -class SMESHGUI_MeshOp : public SMESHGUI_SelectionOp -{ - Q_OBJECT - - enum HypType{ Algo = 0, MainHyp, AddHyp }; - -public: - SMESHGUI_MeshOp( const bool theToCreate, const bool theIsMesh = true ); - virtual ~SMESHGUI_MeshOp(); - - virtual SalomeApp_Dialog* dlg() const; - -protected: - virtual void startOperation(); - virtual void selectionDone(); - virtual SUIT_SelectionFilter* createFilter( const int ) const; - virtual bool isValid( SUIT_Operation* ) const; - -protected slots: - virtual bool onApply(); - void onCreateHyp( const int theHypType, const int theIndex ); - void onEditHyp( const int theHypType, const int theIndex ); - -private: - bool isValid( QString& ) const; - void availableHyps( const int theDim, - const int theHypType, - QStringList& theHyps ) const; - void existingHyps( const int theDim, - const int theHypType, - _PTR(SObject) theFather, - QStringList& theHyps, - QValueList& theHypVars ); - - bool createMesh( QString& ); - bool createSubMesh( QString& ); - bool editMeshOrSubMesh( QString& ); - - int currentHyp( const int, const int ) const; - void setCurrentHyp( const int, const int, const int ); - void setDefaultName() const; - SMESH::SMESH_Hypothesis_var getAlgo( const int ); - void readMesh(); - QString name( _PTR(SObject) ) const; - int find( const SMESH::SMESH_Hypothesis_var&, - const QValueList& ) const; - -private: - typedef QMap< int, QValueList > IdToHypListMap; - typedef QMap< int, IdToHypListMap > DimToHypMap; - - SMESHGUI_MeshDlg* myDlg; - bool myToCreate; - bool myIsMesh; - - DimToHypMap myExistingHyps; //!< all hypothesis of SMESH module - DimToHypMap myObjHyps; //!< hypothesis assigned to the current - // edited mesh/sub-mesh -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx b/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx deleted file mode 100755 index 827969018..000000000 --- a/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx +++ /dev/null @@ -1,1331 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_MeshPatternDlg.cxx -// Author : Sergey LITONIN -// Module : SMESH - -#include "SMESHGUI_MeshPatternDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_SpinBox.h" -#include "SMESHGUI_CreatePatternDlg.h" -#include "SMESHGUI_PatternWidget.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_PatternUtils.h" -#include "SMESHGUI_GEOMGenUtils.h" - -#include "SMESH_Actor.h" -#include "SMESH_ActorUtils.h" -#include "SMESH_NumberFilter.hxx" - -#include "SMDS_Mesh.hxx" -#include "SMDS_MeshElement.hxx" - -#include "SUIT_ResourceMgr.h" -#include "SUIT_Desktop.h" -#include "SUIT_FileDlg.h" - -#include "SalomeApp_SelectionMgr.h" -#include "SalomeApp_Tools.h" -#include "SalomeApp_Study.h" - -#include "SALOMEDS_SObject.hxx" - -#include "SALOME_ListIO.hxx" -#include "SVTK_Selection.h" - -#include "SVTK_ViewModel.h" -#include "SVTK_Selector.h" -#include "SVTK_ViewWindow.h" - -// OCCT Includes -#include -#include - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// VTK Includes -#include -#include -#include -#include -#include -#include -#include - -#define SPACING 5 -#define MARGIN 10 - -/*! - * Class : SMESHGUI_MeshPatternDlg - * Description : Dialog to specify filters for VTK viewer - */ - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::SMESHGUI_MeshPatternDlg -// Purpose : Constructor -//======================================================================= -SMESHGUI_MeshPatternDlg::SMESHGUI_MeshPatternDlg( SMESHGUI* theModule, - const char* theName ) - : QDialog( SMESH::GetDesktop( theModule ), theName, false, WStyle_Customize | - WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), - myBusy(false), - mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) -{ - setCaption(tr("CAPTION")); - - QVBoxLayout* aDlgLay = new QVBoxLayout(this, MARGIN, SPACING); - - QFrame* aMainFrame = createMainFrame (this); - QFrame* aBtnFrame = createButtonFrame(this); - - aDlgLay->addWidget(aMainFrame); - aDlgLay->addWidget(aBtnFrame); - - aDlgLay->setStretchFactor(aMainFrame, 1); - - myCreationDlg = 0; - - mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); - - Init(); -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::createMainFrame -// Purpose : Create frame containing dialog's input fields -//======================================================================= -QFrame* SMESHGUI_MeshPatternDlg::createMainFrame (QWidget* theParent) -{ - SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); - QPixmap iconSlct ( mgr->loadPixmap("SMESH", tr("ICON_SELECT"))); - QPixmap icon2d ( mgr->loadPixmap("SMESH", tr("ICON_PATTERN_2d"))); - QPixmap icon3d ( mgr->loadPixmap("SMESH", tr("ICON_PATTERN_3d"))); - QPixmap iconOpen ( mgr->loadPixmap("STD", tr("ICON_FILE_OPEN"))); - - QPixmap iconSample2d ( mgr->loadPixmap("SMESH", tr("ICON_PATTERN_SAMPLE_2D"))); - QPixmap iconSample3d ( mgr->loadPixmap("SMESH", tr("ICON_PATTERN_SAMPLE_3D"))); - - QGroupBox* aMainGrp = new QGroupBox (1, Qt::Horizontal, theParent); - aMainGrp->setFrameStyle(QFrame::NoFrame); - aMainGrp->setInsideMargin(0); - - // Pattern type group - - myTypeGrp = new QButtonGroup (1, Qt::Vertical, tr("PATTERN_TYPE"), aMainGrp); - mySwitch2d = new QRadioButton (myTypeGrp); - mySwitch3d = new QRadioButton (myTypeGrp); - mySwitch2d->setPixmap(icon2d); - mySwitch3d->setPixmap(icon3d); - myTypeGrp->insert(mySwitch2d, Type_2d); - myTypeGrp->insert(mySwitch3d, Type_3d); - - // Mesh group - - QGroupBox* aMeshGrp = new QGroupBox(1, Qt::Vertical, tr("SMESH_MESH"), aMainGrp); - new QLabel(tr("SMESH_MESH"), aMeshGrp); - mySelBtn[ Mesh ] = new QPushButton(aMeshGrp); - mySelBtn[ Mesh ]->setPixmap(iconSlct); - mySelEdit[ Mesh ] = new QLineEdit(aMeshGrp); - mySelEdit[ Mesh ]->setReadOnly(true); - - // Pattern group - - QGroupBox* aPatGrp = new QGroupBox(1, Qt::Horizontal, tr("PATTERN"), aMainGrp); - - // pattern name - QGroupBox* aNameGrp = new QGroupBox(1, Qt::Vertical, aPatGrp); - aNameGrp->setFrameStyle(QFrame::NoFrame); - aNameGrp->setInsideMargin(0); - new QLabel(tr("PATTERN"), aNameGrp); - myName = new QLineEdit(aNameGrp); - myName->setReadOnly(true); - myOpenBtn = new QPushButton(aNameGrp); - myOpenBtn->setPixmap(iconOpen); - myNewBtn = new QPushButton(tr("NEW"), aNameGrp); - - // Mode selection check box - myRefine = new QCheckBox(tr("REFINE"), aPatGrp); - - // selection widgets for Apply to geom mode - myGeomGrp = new QGroupBox(3, Qt::Horizontal, aPatGrp); - myGeomGrp->setFrameStyle(QFrame::NoFrame); - myGeomGrp->setInsideMargin(0); - - for (int i = Object; i <= Vertex2; i++) - { - mySelLbl[ i ] = new QLabel(myGeomGrp); - mySelBtn[ i ] = new QPushButton(myGeomGrp); - mySelBtn[ i ]->setPixmap(iconSlct); - mySelEdit[ i ] = new QLineEdit(myGeomGrp); - mySelEdit[ i ]->setReadOnly(true); - } - - // Widgets for refinement of existing mesh elements - myRefineGrp = new QFrame(aPatGrp); - myRefineGrp->setFrameStyle(QFrame::NoFrame); - QGridLayout* aRefGrid = new QGridLayout(myRefineGrp, 3, 3, 0, 5); - - mySelLbl[ Ids ] = new QLabel(myRefineGrp); - mySelBtn[ Ids ] = new QPushButton(myRefineGrp); - mySelBtn[ Ids ]->setPixmap(iconSlct); - mySelEdit[ Ids ] = new QLineEdit(myRefineGrp); - - QLabel* aNodeLbl = new QLabel(tr("NODE_1"), myRefineGrp); - myNode1 = new QSpinBox(myRefineGrp); - myNode2Lbl = new QLabel(tr("NODE_2"), myRefineGrp); - myNode2 = new QSpinBox(myRefineGrp); - - aRefGrid->addWidget(mySelLbl [ Ids ], 0, 0); - aRefGrid->addWidget(mySelBtn [ Ids ], 0, 1); - aRefGrid->addWidget(mySelEdit[ Ids ], 0, 2); - aRefGrid->addWidget(aNodeLbl, 1, 0); - aRefGrid->addMultiCellWidget(myNode1, 1, 1, 1, 2); - aRefGrid->addWidget(myNode2Lbl, 2, 0); - aRefGrid->addMultiCellWidget(myNode2, 2, 2, 1, 2); - - // reverse check box - myReverseChk = new QCheckBox(tr("REVERSE"), aPatGrp); - - // CreatePoly check box - myCreatePolygonsChk = new QCheckBox( tr( "CREATE_POLYGONS_NEAR_BOUNDARY" ), aPatGrp ); - myCreatePolyedrsChk = new QCheckBox( tr( "CREATE_POLYEDRS_NEAR_BOUNDARY" ), aPatGrp ); - - // Pictures 2d and 3d - for (int i = 0; i < 2; i++) { - if (i == 0) { - myPicture2d = new SMESHGUI_PatternWidget(aPatGrp), - myPicture2d->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); - } else { - myPicture3d = new QFrame(aPatGrp), - myPreview3d = new QLabel(myPicture3d); - myPreview3d->setPixmap(iconSample3d); - QGridLayout* aLay = new QGridLayout(myPicture3d, 3, 3, 0, 0); - QSpacerItem* aSpacerH1 = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); - QSpacerItem* aSpacerH2 = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); - QSpacerItem* aSpacerV1 = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); - QSpacerItem* aSpacerV2 = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); - aLay->addItem(aSpacerH1, 1, 0); - aLay->addItem(aSpacerH2, 1, 2); - aLay->addItem(aSpacerV1, 0, 1); - aLay->addItem(aSpacerV2, 2, 1); - aLay->addWidget(myPreview3d, 1, 1); - } - } - - myPreviewChk = new QCheckBox(tr("PREVIEW"), aPatGrp); - - // Connect signals and slots - - connect(myTypeGrp, SIGNAL(clicked(int)), SLOT(onTypeChanged(int))); - connect(myOpenBtn, SIGNAL(clicked()), SLOT(onOpen())); - connect(myNewBtn, SIGNAL(clicked()), SLOT(onNew())); - - connect(myReverseChk, SIGNAL(toggled(bool)), SLOT(onReverse(bool))); - connect(myPreviewChk, SIGNAL(toggled(bool)), SLOT(onPreview(bool))); - connect(myRefine, SIGNAL(toggled(bool)), SLOT(onModeToggled(bool))); - - connect(myNode1, SIGNAL(valueChanged(int)), SLOT(onNodeChanged(int))); - connect(myNode2, SIGNAL(valueChanged(int)), SLOT(onNodeChanged(int))); - - connect(mySelEdit[Ids], SIGNAL(textChanged(const QString&)), SLOT(onTextChanged(const QString&))); - - QMap< int, QPushButton* >::iterator anIter; - for (anIter = mySelBtn.begin(); anIter != mySelBtn.end(); ++anIter) - connect(*anIter, SIGNAL(clicked()), SLOT(onSelInputChanged())); - - return aMainGrp; -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::createButtonFrame -// Purpose : Create frame containing buttons -//======================================================================= -QFrame* SMESHGUI_MeshPatternDlg::createButtonFrame (QWidget* theParent) -{ - QFrame* aFrame = new QFrame(theParent); - aFrame->setFrameStyle(QFrame::Box | QFrame::Sunken); - - myOkBtn = new QPushButton(tr("SMESH_BUT_OK" ), aFrame); - myApplyBtn = new QPushButton(tr("SMESH_BUT_APPLY"), aFrame); - myCloseBtn = new QPushButton(tr("SMESH_BUT_CLOSE"), aFrame); - - QSpacerItem* aSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); - - QHBoxLayout* aLay = new QHBoxLayout(aFrame, MARGIN, SPACING); - - aLay->addWidget(myOkBtn); - aLay->addWidget(myApplyBtn); - aLay->addItem(aSpacer); - aLay->addWidget(myCloseBtn); - - connect(myOkBtn, SIGNAL(clicked()), SLOT(onOk())); - connect(myCloseBtn, SIGNAL(clicked()), SLOT(onClose())); - connect(myApplyBtn, SIGNAL(clicked()), SLOT(onApply())); - - return aFrame; -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::~SMESHGUI_MeshPatternDlg -// Purpose : Destructor -//======================================================================= -SMESHGUI_MeshPatternDlg::~SMESHGUI_MeshPatternDlg() -{ -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::Init -// Purpose : Init dialog fields, connect signals and slots, show dialog -//======================================================================= -void SMESHGUI_MeshPatternDlg::Init() -{ - myPattern = SMESH::GetPattern(); - myPreviewActor = 0; - myIsCreateDlgOpen = false; - mySelInput = Mesh; - myType = -1; - myNbPoints = -1; - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - myMesh = SMESH::SMESH_Mesh::_nil(); - - myMeshShape = GEOM::GEOM_Object::_nil(); - myGeomObj[ Object ] = GEOM::GEOM_Object::_nil(); - myGeomObj[ Vertex1 ] = GEOM::GEOM_Object::_nil(); - myGeomObj[ Vertex2 ] = GEOM::GEOM_Object::_nil(); - - // selection and SMESHGUI - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone())); - connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate())); - connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(onClose())); - - myTypeGrp->setButton(Type_2d); - onTypeChanged(Type_2d); - onModeToggled(isRefine()); - - updateGeometry(); - - resize(minimumSize()); - - activateSelection(); - onSelectionDone(); - - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::isValid -// Purpose : Verify validity of entry data -//======================================================================= -bool SMESHGUI_MeshPatternDlg::isValid (const bool theMess) -{ - QValueList ids; - if ((isRefine() && - (myMesh->_is_nil() || !getIds(ids) || getNode(false) < 0 || - myType == Type_3d && (getNode(true) < 0 || getNode(false) == getNode(true)))) - || - (!isRefine() && - (myMesh->_is_nil() || myMeshShape->_is_nil() || myGeomObj[ Object ]->_is_nil() || - myGeomObj[ Vertex1 ]->_is_nil() || myType == Type_3d && myGeomObj[ Vertex2 ]->_is_nil()))) - { - if (theMess) - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), - tr("SMESHGUI_INVALID_PARAMETERS"), QMessageBox::Ok); - return false; - } - - return true; -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::onApply -// Purpose : SLOT called when "Apply" button pressed. -//======================================================================= -bool SMESHGUI_MeshPatternDlg::onApply() -{ - try { - if (!isValid()) - return false; - - erasePreview(); - - if (isRefine()) { // Refining existing mesh elements - QValueList ids; - getIds(ids); - SMESH::long_array_var varIds = new SMESH::long_array(); - varIds->length(ids.count()); - int i = 0; - for (QValueList::iterator it = ids.begin(); it != ids.end(); ++it) - varIds[i++] = *it; - myType == Type_2d - ? myPattern->ApplyToMeshFaces (myMesh, varIds, getNode(false), myReverseChk->isChecked()) - : myPattern->ApplyToHexahedrons(myMesh, varIds, getNode(false), getNode(true)); - - } else { // Applying a pattern to geometrical object - if (myType == Type_2d) - myPattern->ApplyToFace(myGeomObj[Object], myGeomObj[Vertex1], myReverseChk->isChecked()); - else - myPattern->ApplyTo3DBlock(myGeomObj[Object], myGeomObj[Vertex1], myGeomObj[Vertex2]); - } - - bool toCreatePolygons = myCreatePolygonsChk->isChecked(); - bool toCreatePolyedrs = myCreatePolyedrsChk->isChecked(); - if ( myPattern->MakeMesh( myMesh, toCreatePolygons, toCreatePolyedrs ) ) { - mySelectionMgr->clearSelected(); - bool autoUpdate = SMESHGUI::automaticUpdate(); - if (!isRefine() && autoUpdate) { - _PTR(SObject) aSO = SMESH::FindSObject(myMesh.in()); - SMESH_Actor* anActor = SMESH::FindActorByEntry(aSO->GetID().c_str()); - if (!anActor) { - anActor = SMESH::CreateActor(aSO->GetStudy(), aSO->GetID().c_str()); - if (anActor) { - SMESH::DisplayActor(SMESH::GetActiveWindow(), anActor); - SMESH::FitAll(); - } - } - } - SMESH::UpdateView(); - - mySMESHGUI->updateObjBrowser(true); - return true; - } else { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("SMESH_OPERATION_FAILED"), QMessageBox::Ok); - return false; - } - } catch (const SALOME::SALOME_Exception& S_ex) { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - } catch (...) { - } - - return false; -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::onOk -// Purpose : SLOT called when "Ok" button pressed. -//======================================================================= -void SMESHGUI_MeshPatternDlg::onOk() -{ - if (onApply()) - onClose(); -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::onClose -// Purpose : SLOT called when "Close" button pressed. Close dialog -//======================================================================= -void SMESHGUI_MeshPatternDlg::onClose() -{ - mySelectionMgr->clearFilters(); - SMESH::SetPickable(); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - disconnect(mySelectionMgr, 0, this, 0); - disconnect(mySMESHGUI, 0, this, 0); - mySMESHGUI->ResetState(); - erasePreview(); - reject(); -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::onSelectionDone -// Purpose : SLOT called when selection changed -//======================================================================= -void SMESHGUI_MeshPatternDlg::onSelectionDone() -{ - if (myBusy) - return; - - try { - if (mySelInput == Mesh) { - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type()); - if (aList.Extent() != 1) - return; - - // Retrieve mesh from selection - Handle(SALOME_InteractiveObject) anIO = aList.First(); - SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface(anIO); - if (aMesh->_is_nil()) - return; - - // Get geom object corresponding to the mesh - _PTR(SObject) aSO = SMESH::FindSObject(aMesh.in()); - myMeshShape = SMESH::GetGeom(aSO); - - // Clear fields of geom objects if mesh was changed - if (myMesh != aMesh) { - for (int i = Object; i <= Ids; i++) { - myGeomObj[ i ] = GEOM::GEOM_Object::_nil(); - mySelEdit[ i ]->setText(""); - } - } - - myMesh = aMesh; - - // Set name of mesh in line edit - QString aName; - SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aName); - mySelEdit[ Mesh ]->setText(aName); - - } else if (mySelInput == Ids) { - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type()); - if (aList.Extent() != 1) - return; - - QString anIds; - if (!SMESH::GetNameOfSelectedElements(mySelector, aList.First(), anIds)) - anIds = ""; - - myBusy = true; - mySelEdit[ Ids ]->setText(anIds); - myBusy = false; - - } else { - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList, SVTK_Viewer::Type()); - if (aList.Extent() != 1) - return; - - // Get geom object from selection - Handle(SALOME_InteractiveObject) anIO = aList.First(); - GEOM::GEOM_Object_var anObj = SMESH::IObjectToInterface(anIO); - if (anObj->_is_nil()) - return; - - // Clear fields of vertexes if face or 3d block was changed - if (anObj != myGeomObj[ mySelInput ] && mySelInput == Object) { - for (int i = Vertex1; i <= Vertex2; i++) { - myGeomObj[ i ] = GEOM::GEOM_Object::_nil(); - mySelEdit[ i ]->setText(""); - } - } - - myGeomObj[ mySelInput ] = anObj; - - // Set name of geom object in line edit - QString aName; - SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aName); - mySelEdit[ mySelInput ]->setText(aName); - } - } catch (const SALOME::SALOME_Exception& S_ex) { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - resetSelInput(); - } catch (...) { - resetSelInput(); - } - - updateWgState(); - displayPreview(); -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::resetSelInput -// Purpose : Reset fields corresponding to the current selection input -//======================================================================= -void SMESHGUI_MeshPatternDlg::resetSelInput() -{ - if (mySelInput == Mesh) - { - myMesh = SMESH::SMESH_Mesh::_nil(); - myMeshShape = GEOM::GEOM_Object::_nil(); - } - - else - myGeomObj[ mySelInput ] = GEOM::GEOM_Object::_nil(); - - mySelEdit[ mySelInput ]->setText(""); -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::onDeactivate -// Purpose : SLOT called when dialog must be deativated -//======================================================================= -void SMESHGUI_MeshPatternDlg::onDeactivate() -{ - mySelectionMgr->clearFilters(); - //if (myReverseChk->isChecked()) - // erasePreview(); - disconnect(mySelectionMgr, 0, this, 0); - setEnabled(false); -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::enterEvent -// Purpose : Event filter -//======================================================================= -void SMESHGUI_MeshPatternDlg::enterEvent (QEvent*) -{ - if (myIsCreateDlgOpen) - return; - - if (myReverseChk->isChecked()) - displayPreview(); - mySMESHGUI->EmitSignalDeactivateDialog(); - setEnabled(true); - activateSelection(); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone())); - onTextChanged(mySelEdit[Ids]->text()); -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::closeEvent -// Purpose : -//======================================================================= -void SMESHGUI_MeshPatternDlg::closeEvent (QCloseEvent*) -{ - onClose(); -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::onSelInputChanged -// Purpose : SLOT. Called when -> button clicked. -// Change current selection input field -//======================================================================= -void SMESHGUI_MeshPatternDlg::onSelInputChanged() -{ - const QObject* aSender = sender(); - for (int i = Mesh; i <= Ids; i++) - if (aSender == mySelBtn[ i ]) - mySelInput = i; - - activateSelection(); - onSelectionDone(); -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::prepareFilters -// Purpose : Prepare filters for dialog -//======================================================================= -QStringList SMESHGUI_MeshPatternDlg::prepareFilters() const -{ - static QStringList aList; - if (aList.isEmpty()) - { - aList.append(tr("PATTERN_FILT")); - //aList.append(tr("ALL_FILES_FILTER")); - } - - return aList; -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::autoExtension -// Purpose : Append extension to the file name -//======================================================================= -QString SMESHGUI_MeshPatternDlg::autoExtension (const QString& theFileName) const -{ - QString anExt = theFileName.section('.', -1); - return anExt != "smp" && anExt != "SMP" ? theFileName + ".smp" : theFileName; -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::onOpen -// Purpose : SLOT. Called when "Open" button clicked. -// Displays file open dialog -//======================================================================= -void SMESHGUI_MeshPatternDlg::onOpen() -{ - SUIT_FileDlg* aDlg = new SUIT_FileDlg (this, true); - aDlg->setCaption(tr("LOAD_PATTERN")); - aDlg->setMode(QFileDialog::ExistingFile); - aDlg->setFilters(prepareFilters()); - if (myName->text() != "") - aDlg->setSelection(myName->text() + ".smp"); - QPushButton* anOkBtn = (QPushButton*)aDlg->child("OK", "QPushButton"); - if (anOkBtn != 0) - anOkBtn->setText(tr("SMESH_BUT_OK")); - - if (aDlg->exec() != Accepted) - return; - - QString fName = aDlg->selectedFile(); - if (fName.isEmpty()) - return; - - if (QFileInfo(fName).extension().isEmpty()) - fName = autoExtension(fName); - - fName = QDir::convertSeparators(fName); - - QString prev = QDir::convertSeparators(myName->text()); - if (prev == fName) - return; - - // Read string from file - QFile aFile(fName); - if (!aFile.open(IO_ReadOnly)) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("ERROR_OF_OPENING"), QMessageBox::Ok); - return; - } - - QByteArray aDataArray = aFile.readAll(); - const char* aData = aDataArray.data(); - if (aData == 0) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("ERROR_OF_READING"), QMessageBox::Ok); - return; - } - - if (loadFromFile(aData)) - myName->setText(QFileInfo(fName).baseName()); - - updateWgState(); - displayPreview(); -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::onCloseCreationDlg -// Purpose : SLOT. Called when "Pattern creation" dialog closed with "Close" -//======================================================================= -void SMESHGUI_MeshPatternDlg::onCloseCreationDlg() -{ - setEnabled(true); - myIsCreateDlgOpen = false; -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::onOkCreationDlg -// Purpose : SLOT. Called when "Pattern creation" dialog closed with OK -// or SAVE buttons. Initialize myPattern field. Redisplay preview -//======================================================================= -void SMESHGUI_MeshPatternDlg::onOkCreationDlg() -{ - myPattern = SMESH::SMESH_Pattern::_duplicate(myCreationDlg->GetPattern()); - myName->setText(myCreationDlg->GetPatternName()); - displayPreview(); - setEnabled(true); - myIsCreateDlgOpen = false; -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::onNew -// Purpose : SLOT. Called when "New..." button clicked. Create new pattern -//======================================================================= -void SMESHGUI_MeshPatternDlg::onNew() -{ - setEnabled(false); - myIsCreateDlgOpen = true; - if (myCreationDlg == 0) - { - myCreationDlg = new SMESHGUI_CreatePatternDlg( mySMESHGUI, myType); - connect(myCreationDlg, SIGNAL(NewPattern()), SLOT(onOkCreationDlg())); - connect(myCreationDlg, SIGNAL(Close()), SLOT(onCloseCreationDlg())); - } - else - myCreationDlg->Init(myType); - - myCreationDlg->SetMesh(myMesh); - myCreationDlg->show(); -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::onReverse -// Purpose : SLOT. Called when state of "Reverse order..." checkbox chaged -// Calculate new points of the mesh to be created. Redisplay preview -//======================================================================= -void SMESHGUI_MeshPatternDlg::onReverse (bool) -{ - displayPreview(); -} - -//======================================================================= - -// name : SMESHGUI_MeshPatternDlg::onPreview -// Purpose : SLOT. Called when state of "Preview" checkbox changed -// Display/Erase preview -//======================================================================= -void SMESHGUI_MeshPatternDlg::onPreview (bool) -{ - displayPreview(); -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::displayPreview -// Purpose : Display preview -//======================================================================= -void SMESHGUI_MeshPatternDlg::displayPreview() -{ - try { - // Redisplay preview in dialog - SMESH::point_array_var pnts = myPattern->GetPoints(); - SMESH::long_array_var keyPoints = myPattern->GetKeyPoints(); - SMESH::array_of_long_array_var elemPoints = myPattern->GetElementPoints(false); - - if (pnts->length() == 0 || - keyPoints->length() == 0 || - elemPoints->length() == 0) { - erasePreview(); - return; - } else { - PointVector aPoints(pnts->length()); - QValueVector aKeyPoints(keyPoints->length()); - ConnectivityVector anElemPoints(elemPoints->length()); - - for (int i = 0, n = pnts->length(); i < n; i++) - aPoints[ i ] = pnts[ i ]; - - for (int i2 = 0, n2 = keyPoints->length(); i2 < n2; i2++) - aKeyPoints[ i2 ] = keyPoints[ i2 ]; - - for (int i3 = 0, n3 = elemPoints->length(); i3 < n3; i3++) { - QValueVector aVec(elemPoints[ i3 ].length()); - for (int i4 = 0, n4 = elemPoints[ i3 ].length(); i4 < n4; i4++) - aVec[ i4 ] = elemPoints[ i3 ][ i4 ]; - - anElemPoints[ i3 ] = aVec; - } - - myPicture2d->SetPoints(aPoints, aKeyPoints, anElemPoints); - } - - // Redisplay preview in 3D viewer - if (myPreviewActor != 0) { - if (SVTK_ViewWindow* vf = SMESH::GetCurrentVtkView()) { - vf->RemoveActor(myPreviewActor); - vf->Repaint(); - } - myPreviewActor->Delete(); - myPreviewActor = 0; - } - - if (!myPreviewChk->isChecked() || !isValid(false)) - return; - - vtkUnstructuredGrid* aGrid = getGrid(); - if (aGrid == 0) - return; - - // Create and display actor - vtkDataSetMapper* aMapper = vtkDataSetMapper::New(); - aMapper->SetInput(aGrid); - - myPreviewActor = SALOME_Actor::New(); - myPreviewActor->PickableOff(); - myPreviewActor->SetMapper(aMapper); - - vtkProperty* aProp = vtkProperty::New(); - aProp->SetRepresentationToWireframe(); - aProp->SetColor(250, 0, 250); - if (SMESH::FindActorByObject(myMesh)) - aProp->SetLineWidth( SMESH::GetFloat( "SMESH:element_width", 1 ) + 1 ); - else - aProp->SetLineWidth(1); - myPreviewActor->SetProperty(aProp); - - myPreviewActor->SetRepresentation(3); - - SMESH::GetCurrentVtkView()->AddActor(myPreviewActor); - SMESH::GetCurrentVtkView()->Repaint(); - - aProp->Delete(); - aGrid->Delete(); - } catch (const SALOME::SALOME_Exception& S_ex) { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - erasePreview(); - } catch (...) { - erasePreview(); - } -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::erasePreview -// Purpose : Erase preview -//======================================================================= -void SMESHGUI_MeshPatternDlg::erasePreview() -{ - // Erase preview in 2D viewer - myPicture2d->SetPoints(PointVector(), QValueVector(), ConnectivityVector()); - - // Erase preview in 3D viewer - if (myPreviewActor == 0) - return; - - - if (SVTK_ViewWindow* vf = SMESH::GetCurrentVtkView()) - { - vf->RemoveActor(myPreviewActor); - vf->Repaint(); - } - myPreviewActor->Delete(); - myPreviewActor = 0; -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::updateWgState -// Purpose : Enable/disable selection widgets -//======================================================================= -void SMESHGUI_MeshPatternDlg::updateWgState() -{ - if (myMesh->_is_nil()) { - for (int i = Object; i <= Ids; i++) { - mySelBtn [ i ]->setEnabled(false); - mySelEdit[ i ]->setEnabled(false); - mySelEdit[ i ]->setText(""); - } - myNode1->setEnabled(false); - myNode2->setEnabled(false); - myNode1->setRange(0, 0); - myNode2->setRange(0, 0); - } else { - mySelBtn [ Object ]->setEnabled(true); - mySelEdit[ Object ]->setEnabled(true); - mySelBtn [ Ids ] ->setEnabled(true); - mySelEdit[ Ids ] ->setEnabled(true); - - if (myGeomObj[ Object ]->_is_nil()) { - for (int i = Vertex1; i <= Vertex2; i++) { - mySelBtn [ i ]->setEnabled(false); - mySelEdit[ i ]->setEnabled(false); - mySelEdit[ i ]->setText(""); - } - } else { - for (int i = Object; i <= Vertex2; i++) { - mySelBtn [ i ]->setEnabled(true); - mySelEdit[ i ]->setEnabled(true); - } - } - - QValueList ids; - if (!CORBA::is_nil(myPattern) && getIds(ids)) { - SMESH::long_array_var keyPoints = myPattern->GetKeyPoints(); - if (keyPoints->length()) { - myNode1->setEnabled(true); - myNode2->setEnabled(true); - myNode1->setRange(1, keyPoints->length()); - myNode2->setRange(1, keyPoints->length()); - return; - } - } - - myNode1->setEnabled(false); - myNode2->setEnabled(false); - myNode1->setRange(0, 0); - myNode2->setRange(0, 0); - } -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::activateSelection -// Purpose : Activate selection in accordance with current selection input -//======================================================================= -void SMESHGUI_MeshPatternDlg::activateSelection() -{ - mySelectionMgr->clearFilters(); - if (mySelInput == Ids) { - SMESH_Actor* anActor = SMESH::FindActorByObject(myMesh); - if (anActor) - SMESH::SetPickable(anActor); - - if (myType == Type_2d) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(FaceSelection); - } - else - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(CellSelection); - } - } - else { - SMESH::SetPickable(); - //mySelectionMgr->setSelectionModes(ActorSelection); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - } - - if (mySelInput == Object && !myMeshShape->_is_nil()) { - if (myType == Type_2d) { - if (myNbPoints > 0) - mySelectionMgr->installFilter - (new SMESH_NumberFilter ("GEOM", TopAbs_VERTEX, myNbPoints, TopAbs_FACE, myMeshShape)); - else - mySelectionMgr->installFilter - (new SMESH_NumberFilter ("GEOM", TopAbs_SHAPE, myNbPoints, TopAbs_FACE, myMeshShape)); - } else { - TColStd_MapOfInteger aTypes; - aTypes.Add(TopAbs_SHELL); - aTypes.Add(TopAbs_SOLID); - mySelectionMgr->installFilter - (new SMESH_NumberFilter ("GEOM", TopAbs_FACE, 6, aTypes, myMeshShape, true)); - } - } else if ((mySelInput == Vertex1 || mySelInput == Vertex2) && !myGeomObj[ Object ]->_is_nil()) { - mySelectionMgr->installFilter - (new SMESH_NumberFilter ("GEOM", TopAbs_SHAPE, 1, TopAbs_VERTEX, myGeomObj[ Object ])); - } else { - } -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::loadFromFile -// Purpose : Load pattern from file -//======================================================================= -bool SMESHGUI_MeshPatternDlg::loadFromFile (const QString& theName) -{ - try { - SMESH::SMESH_Pattern_var aPattern = SMESH::GetPattern(); - - if (!aPattern->LoadFromFile(theName.latin1()) || - myType == Type_2d && !aPattern->Is2D()) { - SMESH::SMESH_Pattern::ErrorCode aCode = aPattern->GetErrorCode(); - QString aMess; - if (aCode == SMESH::SMESH_Pattern::ERR_READ_NB_POINTS ) aMess = tr("ERR_READ_NB_POINTS"); - else if (aCode == SMESH::SMESH_Pattern::ERR_READ_POINT_COORDS ) aMess = tr("ERR_READ_POINT_COORDS"); - else if (aCode == SMESH::SMESH_Pattern::ERR_READ_TOO_FEW_POINTS) aMess = tr("ERR_READ_TOO_FEW_POINTS"); - else if (aCode == SMESH::SMESH_Pattern::ERR_READ_3D_COORD ) aMess = tr("ERR_READ_3D_COORD"); - else if (aCode == SMESH::SMESH_Pattern::ERR_READ_NO_KEYPOINT ) aMess = tr("ERR_READ_NO_KEYPOINT"); - else if (aCode == SMESH::SMESH_Pattern::ERR_READ_BAD_INDEX ) aMess = tr("ERR_READ_BAD_INDEX"); - else if (aCode == SMESH::SMESH_Pattern::ERR_READ_ELEM_POINTS ) aMess = tr("ERR_READ_ELEM_POINTS"); - else if (aCode == SMESH::SMESH_Pattern::ERR_READ_NO_ELEMS ) aMess = tr("ERR_READ_NO_ELEMS"); - else if (aCode == SMESH::SMESH_Pattern::ERR_READ_BAD_KEY_POINT ) aMess = tr("ERR_READ_BAD_KEY_POINT"); - else aMess = tr("ERROR_OF_LOADING"); - - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), aMess, QMessageBox::Ok); - return false; - } else { - myPattern = aPattern; - return true; - } - } catch (const SALOME::SALOME_Exception& S_ex) { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("ERROR_OF_LOADING"), QMessageBox::Ok); - return false; - } -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::onTypeChanged -// Purpose : SLOT. Called when pattern type changed. -// Change dialog's look and feel -//======================================================================= -void SMESHGUI_MeshPatternDlg::onTypeChanged (int theType) -{ - if (myType == theType) - return; - - myType = theType; - - myNbPoints = -1; - myGeomObj[ Object ] = GEOM::GEOM_Object::_nil(); - myGeomObj[ Vertex1 ] = GEOM::GEOM_Object::_nil(); - myGeomObj[ Vertex2 ] = GEOM::GEOM_Object::_nil(); - myPattern = SMESH::GetPattern(); - - myName->setText(""); - mySelEdit[ Object ]->setText(""); - mySelEdit[ Vertex1 ]->setText(""); - mySelEdit[ Vertex2 ]->setText(""); - mySelEdit[ Ids ] ->setText(""); - myCreatePolygonsChk->show(); - myCreatePolyedrsChk->show(); - - if (theType == Type_2d) { - // Geom widgets - mySelLbl [ Vertex2 ]->hide(); - mySelBtn [ Vertex2 ]->hide(); - mySelEdit[ Vertex2 ]->hide(); - myReverseChk->show(); - myPicture2d->show(); - myPicture3d->hide(); - mySelLbl[ Object ]->setText(tr("FACE")); - mySelLbl[ Vertex1 ]->setText(tr("VERTEX")); - // Refine widgets - mySelLbl[ Ids ]->setText(tr("MESH_FACES")); - myNode2Lbl->hide(); - myNode2 ->hide(); - } else { - // Geom widgets - mySelLbl [ Vertex2 ]->show(); - mySelBtn [ Vertex2 ]->show(); - mySelEdit[ Vertex2 ]->show(); - myReverseChk->hide(); - myPicture2d->hide(); - myPicture3d->show(); - mySelLbl[ Object ]->setText(tr("3D_BLOCK")); - mySelLbl[ Vertex1 ]->setText(tr("VERTEX1")); - mySelLbl[ Vertex2 ]->setText(tr("VERTEX2")); - // Refine widgets - mySelLbl[ Ids ]->setText(tr("MESH_VOLUMES")); - myNode2Lbl->show(); - myNode2 ->show(); - } - - mySelInput = Mesh; - activateSelection(); - updateWgState(); - displayPreview(); -} - -//======================================================================= -// name : SMESHGUI_MeshPatternDlg::getGrid -// Purpose : Get unstructured grid for pattern -//======================================================================= -vtkUnstructuredGrid* SMESHGUI_MeshPatternDlg::getGrid() -{ - try { - // Get points from pattern - SMESH::point_array_var pnts; - QValueList ids; - if (isRefine() && getIds(ids)) { - SMESH::long_array_var varIds = new SMESH::long_array(); - varIds->length(ids.count()); - int i = 0; - for (QValueList::iterator it = ids.begin(); it != ids.end(); ++it) - varIds[i++] = *it; - pnts = myType == Type_2d - ? myPattern->ApplyToMeshFaces (myMesh, varIds, getNode(false), myReverseChk->isChecked()) - : myPattern->ApplyToHexahedrons(myMesh, varIds, getNode(false), getNode(true)); - } else { - pnts = myType == Type_2d - ? myPattern->ApplyToFace (myGeomObj[ Object ], myGeomObj[ Vertex1 ], myReverseChk->isChecked()) - : myPattern->ApplyTo3DBlock(myGeomObj[ Object ], myGeomObj[ Vertex1 ], myGeomObj[ Vertex2 ]); - } - - SMESH::array_of_long_array_var elemPoints = myPattern->GetElementPoints(true); - - if (pnts->length() == 0 || elemPoints->length() == 0) - return 0; - - // to do : to be removed ///////////////////////////////////////////// - -#ifdef DEB_SLN - for (int i1 = 0, n1 = pnts->length(); i1 < n1; i1++) - printf("%d: %g %g %g\n", i1, pnts[ i1 ].x, pnts[ i1 ].y, pnts[ i1 ].z); - - printf("\nELEMENTS : \n"); - for (int i2 = 0, n2 = elemPoints->length(); i2 < n2; i2++) - { - - printf("%d: ", i2); - for (int i3 = 0, n3 = elemPoints[ i2 ].length(); i3 < n3; i3++) - printf("%d ", elemPoints[ i2 ][ i3 ]); - - printf("\n"); - - } -#endif - ////////////////////////////////////////////////////////////////////// - - // Calculate number of points used for cell - vtkIdType aNbCells = elemPoints->length(); - vtkIdType aCellsSize = 0; - for (int i = 0, n = elemPoints->length(); i < n; i++) - aCellsSize += elemPoints[ i ].length(); - - // Create unstructured grid and other usefull arrays - vtkUnstructuredGrid* aGrid = vtkUnstructuredGrid::New(); - - vtkCellArray* aConnectivity = vtkCellArray::New(); - aConnectivity->Allocate(aCellsSize, 0); - - vtkPoints* aPoints = vtkPoints::New(); - aPoints->SetNumberOfPoints(pnts->length()); - - vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); - aCellTypesArray->SetNumberOfComponents(1); - aCellTypesArray->Allocate(aNbCells * aCellTypesArray->GetNumberOfComponents()); - - vtkIdList *anIdList = vtkIdList::New(); - - // Fill array of points - for (int p = 0, nbPnt = pnts->length(); p < nbPnt; p++) - aPoints->SetPoint(p, pnts[ p ].x, pnts[ p ].y, pnts[ p ].z); - - for (int e = 0, nbElem = elemPoints->length(); e < nbElem; e++) { - int nbPoints = elemPoints[ e ].length(); - anIdList->SetNumberOfIds(nbPoints); - for (int i = 0; i < nbPoints; i++) - anIdList->SetId(i, elemPoints[ e ][ i ]); - - aConnectivity->InsertNextCell(anIdList); - - if (nbPoints == 3) aCellTypesArray->InsertNextValue(VTK_TRIANGLE); - else if (nbPoints == 5) aCellTypesArray->InsertNextValue(VTK_PYRAMID); - else if (nbPoints == 6) aCellTypesArray->InsertNextValue(VTK_WEDGE); - else if (nbPoints == 8) aCellTypesArray->InsertNextValue(VTK_HEXAHEDRON); - else if (nbPoints == 4 && myType == Type_2d) aCellTypesArray->InsertNextValue(VTK_QUAD); - else if (nbPoints == 4 && myType == Type_3d) aCellTypesArray->InsertNextValue(VTK_TETRA); - else aCellTypesArray->InsertNextValue(VTK_EMPTY_CELL); - } - - vtkIntArray* aCellLocationsArray = vtkIntArray::New(); - aCellLocationsArray->SetNumberOfComponents(1); - aCellLocationsArray->SetNumberOfTuples(aNbCells); - - aConnectivity->InitTraversal(); - for (vtkIdType idType = 0, *pts, npts; aConnectivity->GetNextCell(npts, pts); idType++) - aCellLocationsArray->SetValue(idType, aConnectivity->GetTraversalLocation(npts)); - - aGrid->SetPoints(aPoints); - aGrid->SetCells(aCellTypesArray, aCellLocationsArray,aConnectivity); - - aConnectivity->Delete(); - aPoints->Delete(); - aCellTypesArray->Delete(); - anIdList->Delete(); - aCellLocationsArray->Delete(); - - return aGrid; - } catch (...) { - return 0; - } -} - -//======================================================================= -// name : onModeToggled -// Purpose : -//======================================================================= -void SMESHGUI_MeshPatternDlg::onModeToggled (bool on) -{ - on ? myRefineGrp->show() : myRefineGrp->hide(); - on ? myGeomGrp->hide() : myGeomGrp->show(); - - displayPreview(); -} - -//======================================================================= -// name : isRefine -// Purpose : -//======================================================================= -bool SMESHGUI_MeshPatternDlg::isRefine() const -{ - return myRefine->isChecked(); -} - -//======================================================================= -// name : onTextChanged -// Purpose : -//======================================================================= -void SMESHGUI_MeshPatternDlg::onTextChanged (const QString& theNewText) -{ - if (myBusy || !isRefine()) - return; - - myBusy = true; - - if (mySelInput != Ids) { - mySelInput = Ids; - activateSelection(); - } - - // hilight entered elements/nodes - SMDS_Mesh* aMesh = 0; - SMESH_Actor* anActor = SMESH::FindActorByObject(myMesh); - if (anActor) - aMesh = anActor->GetObject()->GetMesh(); - - if (aMesh) { - QStringList aListId = QStringList::split(" ", theNewText, false); - - TColStd_MapOfInteger newIndices; - - for (int i = 0; i < aListId.count(); i++) { - const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt()); - if (e && e->GetType() == (myType == Type_2d ? SMDSAbs_Face : SMDSAbs_Volume)) - newIndices.Add(e->GetID()); - } - mySelector->AddOrRemoveIndex( anActor->getIO(), newIndices, false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( anActor->getIO(), true, true ); - } - - myBusy = false; -} - -//======================================================================= -// name : onNodeChanged -// Purpose : -//======================================================================= -void SMESHGUI_MeshPatternDlg::onNodeChanged (int value) -{ - if (myType == Type_3d) { - QSpinBox* first = (QSpinBox*)sender(); - QSpinBox* second = first == myNode1 ? myNode2 : myNode1; - int secondVal = second->value(); - if (secondVal == value) { - secondVal = value == second->maxValue() ? second->minValue() : value + 1; - bool blocked = second->signalsBlocked(); - second->blockSignals(true); - second->setValue(secondVal); - second->blockSignals(blocked); - } - } - - displayPreview(); -} - -//======================================================================= -// name : getIds -// Purpose : -//======================================================================= -bool SMESHGUI_MeshPatternDlg::getIds (QValueList& ids) const -{ - ids.clear(); - QStringList strIds = QStringList::split(" ", mySelEdit[Ids]->text()); - bool isOk; - int val; - for (QStringList::iterator it = strIds.begin(); it != strIds.end(); ++it) { - val = (*it).toInt(&isOk); - if (isOk) - ids.append(val); - } - - return ids.count(); -} - -//======================================================================= -// name : getNode1 -// Purpose : -//======================================================================= -int SMESHGUI_MeshPatternDlg::getNode (bool second) const -{ - return second ? myNode2->value() - 1 : myNode1->value() - 1; -} diff --git a/src/SMESHGUI/SMESHGUI_MeshPatternDlg.h b/src/SMESHGUI/SMESHGUI_MeshPatternDlg.h deleted file mode 100755 index c09ab443c..000000000 --- a/src/SMESHGUI/SMESHGUI_MeshPatternDlg.h +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_MeshPatternDlg.h -// Author : Sergey LITONIN -// Module : SMESH - - -#ifndef SMESHGUI_MeshPatternDlg_H -#define SMESHGUI_MeshPatternDlg_H - -#include - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(GEOM_Gen) -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_Pattern) - -class QCloseEvent; -class QFrame; -class QLineEdit; -class SMESHGUI_SpinBox; -class QPushButton; -class SalomeApp_SelectionMgr; -class QRadioButton; -class QCheckBox; -class QButtonGroup; -class QLabel; -class QSpinBox; -class QGroupBox; -class SMESHGUI_CreatePatternDlg; -class SMESHGUI_PatternWidget; -class vtkUnstructuredGrid; -class SALOME_Actor; -class SVTK_ViewWindow; -class SVTK_Selector; -class SMESHGUI; - -/* - Class : SMESHGUI_MeshPatternDlg - Description : Dialog to specify filters for VTK viewer -*/ - -class SMESHGUI_MeshPatternDlg : public QDialog -{ - Q_OBJECT - - // Pattern type - enum { Type_2d, Type_3d }; - - // selection input - enum { Mesh, Object, Vertex1, Vertex2, Ids }; - -public: - SMESHGUI_MeshPatternDlg( SMESHGUI*, - const char* = 0 ); - virtual ~SMESHGUI_MeshPatternDlg(); - - void Init(); - -private slots: - - void onOk(); - bool onApply(); - void onClose(); - - void onDeactivate(); - - void onSelectionDone(); - void onSelInputChanged(); - - void onTypeChanged( int ); - void onModeToggled( bool ); - void onOpen(); - void onNew(); - void onReverse( bool ); - void onPreview( bool ); - void onOkCreationDlg(); - void onCloseCreationDlg(); - void onTextChanged( const QString& ); - void onNodeChanged( int value ); - -private: - - QFrame* createButtonFrame( QWidget* ); - QFrame* createMainFrame ( QWidget* ); - void displayPreview(); - vtkUnstructuredGrid* getGrid(); - void erasePreview(); - void updateWgState(); - bool loadFromFile( const QString& ); - void activateSelection(); - QStringList prepareFilters() const; - QString autoExtension( const QString& theFileName ) const; - void closeEvent( QCloseEvent* e ) ; - void enterEvent ( QEvent * ) ; - bool isValid( const bool theMess = true ); - void resetSelInput(); - bool isRefine() const; - - bool getIds( QValueList& ) const; - int getNode( bool = false ) const; - -private: - - QPushButton* myOkBtn; - QPushButton* myApplyBtn; - QPushButton* myCloseBtn; - - QButtonGroup* myTypeGrp; - QRadioButton* mySwitch2d; - QRadioButton* mySwitch3d; - - QCheckBox* myRefine; - - QFrame* myRefineGrp; - QSpinBox* myNode1; - QSpinBox* myNode2; - QLabel* myNode2Lbl; - - QGroupBox* myGeomGrp; - QMap< int, QPushButton* > mySelBtn; - QMap< int, QLineEdit* > mySelEdit; - QMap< int, QLabel* > mySelLbl; - - QLineEdit* myName; - QPushButton* myOpenBtn; - QPushButton* myNewBtn; - - QCheckBox* myReverseChk; - QCheckBox* myCreatePolygonsChk; - QCheckBox* myCreatePolyedrsChk; - SMESHGUI_PatternWidget* myPicture2d; - QFrame* myPicture3d; - QLabel* myPreview3d; - - QCheckBox* myPreviewChk; - - SMESHGUI* mySMESHGUI; - SVTK_Selector* mySelector; - SalomeApp_SelectionMgr* mySelectionMgr; - int mySelInput; - int myNbPoints; - int myType; - bool myIsCreateDlgOpen; - bool myBusy; - - SMESH::SMESH_Mesh_var myMesh; - GEOM::GEOM_Object_var myMeshShape; - QMap< int, GEOM::GEOM_Object_var > myGeomObj; - - SMESHGUI_CreatePatternDlg* myCreationDlg; - SMESH::SMESH_Pattern_var myPattern; - SALOME_Actor* myPreviewActor; -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_MeshUtils.cxx b/src/SMESHGUI/SMESHGUI_MeshUtils.cxx deleted file mode 100644 index 9c8d313c6..000000000 --- a/src/SMESHGUI/SMESHGUI_MeshUtils.cxx +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - - -#include "SMESHGUI_MeshUtils.h" -#include "SMESHGUI_Utils.h" - -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Group) - -namespace SMESH -{ - - SMESH_Mesh_var GetMeshByIO(const Handle(SALOME_InteractiveObject)& theIO) - { - CORBA::Object_var anObj = IObjectToObject(theIO); - if(!CORBA::is_nil(anObj)){ - SMESH_Mesh_var aMesh = SMESH_Mesh::_narrow(anObj); - if(!CORBA::is_nil(aMesh)) - return aMesh; - SMESH_GroupBase_var aGroup = SMESH_GroupBase::_narrow(anObj); - if(!CORBA::is_nil(aGroup)) - return aGroup->GetMesh(); - SMESH_subMesh_var aSubMesh = SMESH_subMesh::_narrow(anObj); - if(!CORBA::is_nil(aSubMesh)) - return aSubMesh->GetFather(); - } - return SMESH_Mesh::_nil(); - } - -} diff --git a/src/SMESHGUI/SMESHGUI_MeshUtils.h b/src/SMESHGUI/SMESHGUI_MeshUtils.h deleted file mode 100644 index 011de3404..000000000 --- a/src/SMESHGUI/SMESHGUI_MeshUtils.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef SMESHGUI_MeshUtils_HeaderFile -#define SMESHGUI_MeshUtils_HeaderFile - -#include "SALOME_InteractiveObject.hxx" - -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Mesh) - - -namespace SMESH{ - - SMESH_Mesh_var GetMeshByIO(const Handle(SALOME_InteractiveObject)& theIO); - -} - - -#endif diff --git a/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx b/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx deleted file mode 100644 index 944a6d2a9..000000000 --- a/src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx +++ /dev/null @@ -1,564 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_MoveNodesDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#include "SMESHGUI_MoveNodesDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_SpinBox.h" -#include "SMESHGUI_IdValidator.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_MeshUtils.h" - -#include "SMESH_Actor.h" -#include "SMDS_Mesh.hxx" -#include "SMDS_MeshNode.hxx" - -#include "SalomeApp_SelectionMgr.h" -#include "SUIT_ResourceMgr.h" -#include "SUIT_Desktop.h" - -#include "SVTK_Selector.h" -#include "SVTK_ViewModel.h" -#include "SVTK_ViewWindow.h" -#include "SALOME_ListIO.hxx" - -#include "SVTK_ViewWindow.h" - -#include "utilities.h" - -// OCCT includes -#include - -// VTK includes -#include -#include -#include -#include -#include -#include -#include - -// QT includes -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -#define MARGIN 10 -#define SPACING 5 - - -//================================================================================= -// name : SMESHGUI_MoveNodesDlg::SMESHGUI_MoveNodesDlg -// Purpose : -//================================================================================= -SMESHGUI_MoveNodesDlg::SMESHGUI_MoveNodesDlg (SMESHGUI* theModule, - const char* theName): - QDialog(SMESH::GetDesktop(theModule), - theName, - false, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), - mySelectionMgr(SMESH::GetSelectionMgr(theModule)), - mySMESHGUI(theModule) -{ - myPreviewActor = 0; - myBusy = false; - - setCaption(tr("CAPTION")); - - QVBoxLayout* aDlgLay = new QVBoxLayout (this, MARGIN, SPACING); - - QFrame* aMainFrame = createMainFrame (this); - QFrame* aBtnFrame = createButtonFrame(this); - - aDlgLay->addWidget(aMainFrame); - aDlgLay->addWidget(aBtnFrame); - - aDlgLay->setStretchFactor(aMainFrame, 1); - - mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); - - Init(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::createButtonFrame -// Purpose : Create frame containing buttons -//======================================================================= -QFrame* SMESHGUI_MoveNodesDlg::createButtonFrame (QWidget* theParent) -{ - QFrame* aFrame = new QFrame(theParent); - aFrame->setFrameStyle(QFrame::Box | QFrame::Sunken); - - myOkBtn = new QPushButton(tr("SMESH_BUT_OK" ), aFrame); - myApplyBtn = new QPushButton(tr("SMESH_BUT_APPLY"), aFrame); - myCloseBtn = new QPushButton(tr("SMESH_BUT_CLOSE"), aFrame); - - QSpacerItem* aSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); - - QHBoxLayout* aLay = new QHBoxLayout(aFrame, MARGIN, SPACING); - - aLay->addWidget(myOkBtn); - aLay->addWidget(myApplyBtn); - aLay->addItem(aSpacer); - aLay->addWidget(myCloseBtn); - - connect(myOkBtn, SIGNAL(clicked()), SLOT(onOk())); - connect(myCloseBtn, SIGNAL(clicked()), SLOT(onClose())); - connect(myApplyBtn, SIGNAL(clicked()), SLOT(onApply())); - - return aFrame; -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::createMainFrame -// Purpose : Create frame containing dialog's input fields -//======================================================================= -QFrame* SMESHGUI_MoveNodesDlg::createMainFrame (QWidget* theParent) -{ - QFrame* aFrame = new QFrame(theParent); - - QPixmap iconMoveNode (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_MOVE_NODE"))); - QPixmap iconSelect (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); - - QButtonGroup* aPixGrp = new QButtonGroup(1, Qt::Vertical, tr("MESH_NODE"), aFrame); - aPixGrp->setExclusive(TRUE); - QRadioButton* aRBut = new QRadioButton(aPixGrp); - aRBut->setPixmap(iconMoveNode); - aRBut->setChecked(TRUE); - - QGroupBox* anIdGrp = new QGroupBox(1, Qt::Vertical, tr("SMESH_MOVE"), aFrame); - new QLabel(tr("NODE_ID"), anIdGrp); - (new QPushButton(anIdGrp))->setPixmap(iconSelect); - myId = new QLineEdit(anIdGrp); - myId->setValidator(new SMESHGUI_IdValidator(this, "validator", 1)); - - QGroupBox* aCoordGrp = new QGroupBox(1, Qt::Vertical, tr("SMESH_COORDINATES"), aFrame); - new QLabel(tr("SMESH_X"), aCoordGrp); - myX = new SMESHGUI_SpinBox(aCoordGrp); - new QLabel(tr("SMESH_Y"), aCoordGrp); - myY = new SMESHGUI_SpinBox(aCoordGrp); - new QLabel(tr("SMESH_Z"), aCoordGrp); - myZ = new SMESHGUI_SpinBox(aCoordGrp); - - myX->RangeStepAndValidator(-999999.999, +999999.999, 25.0, 3); - myY->RangeStepAndValidator(-999999.999, +999999.999, 25.0, 3); - myZ->RangeStepAndValidator(-999999.999, +999999.999, 25.0, 3); - - QVBoxLayout* aLay = new QVBoxLayout(aFrame); - aLay->addWidget(aPixGrp); - aLay->addWidget(anIdGrp); - aLay->addWidget(aCoordGrp); - - // connect signale and slots - connect(myX, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview())); - connect(myY, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview())); - connect(myZ, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview())); - connect(myId, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); - - return aFrame; -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::~SMESHGUI_MoveNodesDlg -// Purpose : -//======================================================================= -SMESHGUI_MoveNodesDlg::~SMESHGUI_MoveNodesDlg() -{ - erasePreview(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::Init -// Purpose : Init dialog fields -//======================================================================= -void SMESHGUI_MoveNodesDlg::Init() -{ - myPreviewActor = 0; - myMeshActor = 0; - myBusy = false; - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - // selection and SMESHGUI - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone())); - connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate())); - connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(onClose())); - - reset(); - setEnabled(true); - - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); - - // set selection mode - SMESH::SetPointRepresentation(true); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - - onSelectionDone(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::isValid -// Purpose : Verify validity of entry information -//======================================================================= -bool SMESHGUI_MoveNodesDlg::isValid (const bool theMess) const -{ - if (myId->text().isEmpty()) { - if (theMess) - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_WARNING"), - tr("NODE_ID_IS_NOT_DEFINED"), QMessageBox::Ok); - return false; - } - return true; -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::reset -// Purpose : Reset the dialog state -//======================================================================= -void SMESHGUI_MoveNodesDlg::reset() -{ - myId->clear(); - myX->SetValue(0); - myY->SetValue(0); - myZ->SetValue(0); - redisplayPreview(); - updateButtons(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::onApply -// Purpose : SLOT called when "Apply" button pressed. -//======================================================================= -bool SMESHGUI_MoveNodesDlg::onApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return false; - - if (!isValid(true)) - return false; - - SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(myMeshActor->getIO()); - if (aMesh->_is_nil()) { - QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("SMESHG_NO_MESH"), QMessageBox::Ok); - return false; - } - - SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor(); - if (aMeshEditor->_is_nil()) - return false; - - int anId = myId->text().toInt(); - bool aResult = false; - try { - aResult = aMeshEditor->MoveNode(anId, myX->GetValue(), myY->GetValue(), myZ->GetValue()); - } catch (...) { - } - - if (aResult) { - SALOME_ListIO aList; - aList.Append(myMeshActor->getIO()); - mySelectionMgr->setSelectedObjects(aList,false); - SMESH::UpdateView(); - reset(); - } - - return aResult; -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::onOk -// Purpose : SLOT called when "Ok" button pressed. -//======================================================================= -void SMESHGUI_MoveNodesDlg::onOk() -{ - if (onApply()) - onClose(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::onClose -// Purpose : SLOT called when "Close" button pressed. Close dialog -//======================================================================= -void SMESHGUI_MoveNodesDlg::onClose() -{ - mySelectionMgr->clearSelected(); - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - disconnect(mySelectionMgr, 0, this, 0); - disconnect(mySMESHGUI, 0, this, 0); - mySMESHGUI->ResetState(); - reject(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::onTextChange -// Purpose : -//======================================================================= -void SMESHGUI_MoveNodesDlg::onTextChange (const QString& theNewText) -{ - if (myBusy) return; - - myOkBtn->setEnabled(false); - myApplyBtn->setEnabled(false); - erasePreview(); - - // select entered node - if(myMeshActor){ - if(SMDS_Mesh* aMesh = myMeshActor->GetObject()->GetMesh()){ - myBusy = true; - Handle(SALOME_InteractiveObject) anIO = myMeshActor->getIO(); - SALOME_ListIO aList; - aList.Append(anIO); - mySelectionMgr->setSelectedObjects(aList,false); - myBusy = false; - - if(const SMDS_MeshElement *anElem = aMesh->FindElement(theNewText.toInt())) { - TColStd_MapOfInteger aListInd; - aListInd.Add(anElem->GetID()); - mySelector->AddOrRemoveIndex(anIO,aListInd, false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight(anIO,true,true); - - onSelectionDone(); - } - } - } -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::onSelectionDone -// Purpose : SLOT called when selection changed -//======================================================================= -void SMESHGUI_MoveNodesDlg::onSelectionDone() -{ - if (myBusy) return; - myMeshActor = 0; - - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type()); - - if (aList.Extent() == 1) { - Handle(SALOME_InteractiveObject) anIO = aList.First(); - myMeshActor = SMESH::FindActorByEntry(anIO->getEntry()); - if(myMeshActor){ - QString aText; - if (SMESH::GetNameOfSelectedNodes(mySelector,anIO,aText) == 1) { - if(SMDS_Mesh* aMesh = myMeshActor->GetObject()->GetMesh()) { - if(const SMDS_MeshNode* aNode = aMesh->FindNode(aText.toInt())) { - myBusy = true; - myId->setText(aText); - myX->SetValue(aNode->X()); - myY->SetValue(aNode->Y()); - myZ->SetValue(aNode->Z()); - myBusy = false; - erasePreview(); // avoid overlapping of a selection and a preview - updateButtons(); - return; - } - } - } - } - } - - reset(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::onDeactivate -// Purpose : SLOT called when dialog must be deativated -//======================================================================= -void SMESHGUI_MoveNodesDlg::onDeactivate() -{ - setEnabled(false); - erasePreview(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::enterEvent -// Purpose : Event filter -//======================================================================= -void SMESHGUI_MoveNodesDlg::enterEvent (QEvent*) -{ - if (!isEnabled()) { - mySMESHGUI->EmitSignalDeactivateDialog(); - - // set selection mode - SMESH::SetPointRepresentation(true); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - - redisplayPreview(); - - setEnabled(true); - } -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::closeEvent -// Purpose : -//======================================================================= -void SMESHGUI_MoveNodesDlg::closeEvent (QCloseEvent*) -{ - onClose(); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->Repaint(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::hideEvent -// Purpose : may be caused by ESC key -//======================================================================= -void SMESHGUI_MoveNodesDlg::hideEvent (QHideEvent*) -{ - if (!isMinimized()) - onClose(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::updateButtons -// Purpose : Update buttons state -//======================================================================= -void SMESHGUI_MoveNodesDlg::updateButtons() -{ - bool isEnabled = isValid(false); - myOkBtn->setEnabled(isEnabled); - myApplyBtn->setEnabled(isEnabled); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::erasePreview -// Purpose : Erase preview -//======================================================================= -void SMESHGUI_MoveNodesDlg::erasePreview() -{ - if (myPreviewActor == 0) - return; - - SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ); - if (aViewWindow) - aViewWindow->RemoveActor(myPreviewActor); - myPreviewActor->Delete(); - myPreviewActor = 0; - if (aViewWindow) - aViewWindow->Repaint(); -} - -//======================================================================= -// name : SMESHGUI_MoveNodesDlg::redisplayPreview -// Purpose : Redisplay preview -//======================================================================= -void SMESHGUI_MoveNodesDlg::redisplayPreview() -{ - if (myBusy) - return; - - if (myPreviewActor != 0) - erasePreview(); - - if (!isValid(false)) - return; - - vtkUnstructuredGrid* aGrid = vtkUnstructuredGrid::New(); - - vtkPoints* aPoints = vtkPoints::New(); - aPoints->SetNumberOfPoints(1); - aPoints->SetPoint(0, myX->GetValue(), myY->GetValue(), myZ->GetValue()); - - // Create cells - - vtkIdList *anIdList = vtkIdList::New(); - anIdList->SetNumberOfIds(1); - - vtkCellArray *aCells = vtkCellArray::New(); - aCells->Allocate(2, 0); - - vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); - aCellTypesArray->SetNumberOfComponents(1); - aCellTypesArray->Allocate(1); - - anIdList->SetId(0, 0); - aCells->InsertNextCell(anIdList); - aCellTypesArray->InsertNextValue(VTK_VERTEX); - anIdList->Delete(); - - vtkIntArray* aCellLocationsArray = vtkIntArray::New(); - aCellLocationsArray->SetNumberOfComponents(1); - aCellLocationsArray->SetNumberOfTuples(1); - - aCells->InitTraversal(); - vtkIdType npts; - aCellLocationsArray->SetValue(0, aCells->GetTraversalLocation(npts)); - - aGrid->SetPoints(aPoints); - aPoints->Delete(); - - aGrid->SetCells(aCellTypesArray,aCellLocationsArray,aCells); - aCellLocationsArray->Delete(); - aCellTypesArray->Delete(); - aCells->Delete(); - - // Create and display actor - vtkDataSetMapper* aMapper = vtkDataSetMapper::New(); - aMapper->SetInput(aGrid); - aGrid->Delete(); - - myPreviewActor = SALOME_Actor::New(); - myPreviewActor->PickableOff(); - myPreviewActor->SetMapper(aMapper); - aMapper->Delete(); - - vtkProperty* aProp = vtkProperty::New(); - aProp->SetRepresentationToWireframe(); - aProp->SetColor(250, 0, 250); - aProp->SetPointSize(5); - myPreviewActor->SetProperty(aProp); - aProp->Delete(); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - { - aViewWindow->AddActor(myPreviewActor); - aViewWindow->Repaint(); - } -} diff --git a/src/SMESHGUI/SMESHGUI_MoveNodesDlg.h b/src/SMESHGUI/SMESHGUI_MoveNodesDlg.h deleted file mode 100644 index aa4d51d96..000000000 --- a/src/SMESHGUI/SMESHGUI_MoveNodesDlg.h +++ /dev/null @@ -1,108 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_MoveNodesDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef DIALOGBOX_MOVE_NODES_H -#define DIALOGBOX_MOVE_NODES_H - -#include "SalomeApp_SelectionMgr.h" - -#include - -class QLineEdit; -class QPushButton; -class SMESHGUI_SpinBox; -class SALOME_Actor; -class QFrame; - -class SMESHGUI; -class SMESH_Actor; -class SUIT_Desktop; -class SVTK_Selector; -class SVTK_ViewWindow; - -//================================================================================= -// class : SMESHGUI_MoveNodesDlg -// purpose : -//================================================================================= -class SMESHGUI_MoveNodesDlg : public QDialog -{ - Q_OBJECT - -public: - - SMESHGUI_MoveNodesDlg(SMESHGUI* theModule, - const char* name = 0); - virtual ~SMESHGUI_MoveNodesDlg(); - - void Init(); - -private slots: - - void onOk(); - bool onApply(); - void onClose(); - - void onDeactivate(); - - void onSelectionDone(); - void redisplayPreview(); - void onTextChange(const QString&); - -private: - - void closeEvent( QCloseEvent* e ) ; - void enterEvent ( QEvent * ) ; - void hideEvent ( QHideEvent * ); - void erasePreview(); - QFrame* createButtonFrame( QWidget* ); - QFrame* createMainFrame ( QWidget* ); - bool isValid( const bool ) const; - void reset(); - void updateButtons(); - -private: - - QPushButton* myOkBtn; - QPushButton* myApplyBtn; - QPushButton* myCloseBtn; - - QLineEdit* myId; - SMESHGUI_SpinBox* myX; - SMESHGUI_SpinBox* myY; - SMESHGUI_SpinBox* myZ; - - SalomeApp_SelectionMgr* mySelectionMgr; - SVTK_Selector* mySelector; - SMESHGUI* mySMESHGUI; - - SALOME_Actor* myPreviewActor; - SMESH_Actor* myMeshActor; - bool myBusy; -}; - -#endif // DIALOGBOX_MOVE_NODES_H diff --git a/src/SMESHGUI/SMESHGUI_MultiEditDlg.h b/src/SMESHGUI/SMESHGUI_MultiEditDlg.h deleted file mode 100755 index e66ebc0f2..000000000 --- a/src/SMESHGUI/SMESHGUI_MultiEditDlg.h +++ /dev/null @@ -1,228 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_MultiEditDlg.h -// Author : Sergey LITONIN -// Module : SMESH - - -#ifndef SMESHGUI_MultiEditDlg_H -#define SMESHGUI_MultiEditDlg_H - -#include - -#include "SUIT_SelectionFilter.h" - -#include - -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_Filter) - -class SMESHGUI; -class SMESHGUI_FilterDlg; -class SMESHGUI_SpinBox; - -class SMESH_Actor; - -class SalomeApp_SelectionMgr; -class SALOME_Actor; -class SVTK_Selector; -class SVTK_ViewWindow; - -class QFrame; -class QObject; -class QListBox; -class QComboBox; -class QCheckBox; -class QGroupBox; -class QLineEdit; -class QPushButton; -class QButtonGroup; - -/*! - * Class : SMESHGUI_MultiEditDlg - * Description : Base class for dialogs of diagonal inversion and - * union of two neighboring triangles - */ - -class SMESHGUI_MultiEditDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_MultiEditDlg(SMESHGUI* theModule, - const int, - const bool = false, - const char* = 0 ); - virtual ~SMESHGUI_MultiEditDlg(); - - void Init(); - - bool eventFilter( QObject* object, QEvent* event ); - -signals: - void ListContensChanged(); - -protected slots: - void onOk(); - virtual bool onApply(); - virtual void onClose(); - - void onDeactivate(); - void onSelectionDone(); - - void onFilterBtn(); - void onAddBtn(); - void onRemoveBtn(); - void onSortListBtn(); - void onListSelectionChanged(); - void onSubmeshChk(); - void onGroupChk(); - virtual void onToAllChk(); - void onFilterAccepted(); - void on3d2dChanged(int); - - SMESH::NumericalFunctor_ptr getNumericalFunctor(); - -protected: - void closeEvent( QCloseEvent* e ) ; - void enterEvent ( QEvent * ) ; - void hideEvent ( QHideEvent * ); /* ESC key */ - QFrame* createButtonFrame( QWidget* ); - QFrame* createMainFrame ( QWidget*, const bool ); - bool isValid( const bool ) const; - SMESH::long_array_var getIds(); - void updateButtons(); - void setSelectionMode(); - virtual bool isIdValid( const int theID ) const; - virtual bool process( SMESH::SMESH_MeshEditor_ptr, const SMESH::long_array& ) = 0; - int entityType(); - -protected: - QPushButton* myOkBtn; - QPushButton* myApplyBtn; - QPushButton* myCloseBtn; - SMESH_Actor* myActor; - SMESH::SMESH_Mesh_var myMesh; - - SalomeApp_SelectionMgr* mySelectionMgr; - SVTK_Selector* mySelector; - SMESHGUI* mySMESHGUI; - - QGroupBox* mySelGrp; - QGroupBox* myCriterionGrp; - - QButtonGroup* myGroupChoice; - QComboBox* myComboBoxFunctor; - - QListBox* myListBox; - QPushButton* myFilterBtn; - QPushButton* myAddBtn; - QPushButton* myRemoveBtn; - QPushButton* mySortBtn; - - QCheckBox* myToAllChk; - QButtonGroup* myEntityTypeGrp; - - QCheckBox* mySubmeshChk; - QPushButton* mySubmeshBtn; - QLineEdit* mySubmesh; - - QCheckBox* myGroupChk; - QPushButton* myGroupBtn; - QLineEdit* myGroup; - - SMESHGUI_FilterDlg* myFilterDlg; - TColStd_MapOfInteger myIds; - int myFilterType; - bool myBusy; - int myEntityType; -}; - -/*! - * Class : SMESHGUI_ChangeOrientationDlg - * Description : Modification of orientation of faces - */ -class SMESHGUI_ChangeOrientationDlg : public SMESHGUI_MultiEditDlg -{ - Q_OBJECT - -public: - SMESHGUI_ChangeOrientationDlg(SMESHGUI* theModule, - const char* = 0); - virtual ~SMESHGUI_ChangeOrientationDlg(); - -protected: - virtual bool process( SMESH::SMESH_MeshEditor_ptr, const SMESH::long_array& ); -}; - -/*! - * Class : SMESHGUI_UnionOfTrianglesDlg - * Description : Construction of quadrangles by automatic association of triangles - */ -class SMESHGUI_UnionOfTrianglesDlg : public SMESHGUI_MultiEditDlg -{ - Q_OBJECT - -public: - SMESHGUI_UnionOfTrianglesDlg(SMESHGUI* theModule, - const char* = 0); - virtual ~SMESHGUI_UnionOfTrianglesDlg(); - -protected: - virtual bool process( SMESH::SMESH_MeshEditor_ptr, const SMESH::long_array& ); - -private: - SMESHGUI_SpinBox* myMaxAngleSpin; -}; - -/* - Class : SMESHGUI_CuttingOfQuadsDlg - Description : Construction of quadrangles by automatic association of triangles -*/ -class SMESHGUI_CuttingOfQuadsDlg : public SMESHGUI_MultiEditDlg -{ - Q_OBJECT - -public: - SMESHGUI_CuttingOfQuadsDlg(SMESHGUI* theModule, - const char* = 0); - virtual ~SMESHGUI_CuttingOfQuadsDlg(); - -protected: - virtual bool process( SMESH::SMESH_MeshEditor_ptr, const SMESH::long_array& ); - -protected slots: - virtual void onClose(); - void onCriterionRB(); - void onPreviewChk(); - -private: - void displayPreview(); - void erasePreview(); - -private: - SALOME_Actor* myPreviewActor; - QCheckBox* myPreviewChk; -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx deleted file mode 100644 index 3f20596c5..000000000 --- a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx +++ /dev/null @@ -1,579 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_NodesDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#include "SMESHGUI_NodesDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_SpinBox.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_MeshUtils.h" - -#include "SMESH_Actor.h" -#include "SMESH_ActorUtils.h" -#include "SMESH_ObjectDef.h" - -#include "SMDS_Mesh.hxx" -#include "SMDS_MeshNode.hxx" - -#include "SUIT_Session.h" -#include "SUIT_OverrideCursor.h" -#include "SUIT_ViewWindow.h" -#include "SUIT_ViewManager.h" -#include "SUIT_MessageBox.h" -#include "SUIT_Desktop.h" - -#include "SalomeApp_Study.h" -#include "SalomeApp_SelectionMgr.h" - -#include "SVTK_Selector.h" -#include "SVTK_ViewWindow.h" - -#include "SALOME_Actor.h" -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// VTK Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - - -namespace SMESH { - - void AddNode (SMESH::SMESH_Mesh_ptr theMesh, float x, float y, float z) - { - SUIT_OverrideCursor wc; - try { - _PTR(SObject) aSobj = SMESH::FindSObject(theMesh); - SMESH::SMESH_MeshEditor_var aMeshEditor = theMesh->GetMeshEditor(); - aMeshEditor->AddNode(x,y,z); - _PTR(Study) aStudy = GetActiveStudyDocument(); - CORBA::Long anId = aStudy->StudyId(); - if (TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId, aSobj->GetID().c_str())) { - aVisualObj->Update(true); - } - } catch (SALOME::SALOME_Exception& exc) { - INFOS("Follow exception was cought:\n\t" << exc.details.text); - } catch (const std::exception& exc) { - INFOS("Follow exception was cought:\n\t" << exc.what()); - } catch (...) { - INFOS("Unknown exception was cought !!!"); - } - } - - class TNodeSimulation { - SVTK_ViewWindow* myViewWindow; - - SALOME_Actor *myPreviewActor; - vtkDataSetMapper* myMapper; - vtkPoints* myPoints; - - public: - TNodeSimulation(SVTK_ViewWindow* theViewWindow): - myViewWindow(theViewWindow) - { - vtkUnstructuredGrid* aGrid = vtkUnstructuredGrid::New(); - - // Create points - myPoints = vtkPoints::New(); - myPoints->SetNumberOfPoints(1); - myPoints->SetPoint(0,0.0,0.0,0.0); - - // Create cells - vtkIdList *anIdList = vtkIdList::New(); - anIdList->SetNumberOfIds(1); - - vtkCellArray *aCells = vtkCellArray::New(); - aCells->Allocate(2, 0); - - vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); - aCellTypesArray->SetNumberOfComponents(1); - aCellTypesArray->Allocate(1); - - anIdList->SetId(0, 0); - aCells->InsertNextCell(anIdList); - aCellTypesArray->InsertNextValue(VTK_VERTEX); - - vtkIntArray* aCellLocationsArray = vtkIntArray::New(); - aCellLocationsArray->SetNumberOfComponents(1); - aCellLocationsArray->SetNumberOfTuples(1); - - aCells->InitTraversal(); - vtkIdType npts; - aCellLocationsArray->SetValue(0, aCells->GetTraversalLocation(npts)); - - aGrid->SetCells(aCellTypesArray, aCellLocationsArray, aCells); - - aGrid->SetPoints(myPoints); - aGrid->SetCells(aCellTypesArray, aCellLocationsArray,aCells); - aCellLocationsArray->Delete(); - aCellTypesArray->Delete(); - aCells->Delete(); - anIdList->Delete(); - - // Create and display actor - myMapper = vtkDataSetMapper::New(); - myMapper->SetInput(aGrid); - aGrid->Delete(); - - myPreviewActor = SALOME_Actor::New(); - myPreviewActor->SetInfinitive(true); - myPreviewActor->VisibilityOff(); - myPreviewActor->PickableOff(); - myPreviewActor->SetMapper(myMapper); - - vtkProperty* aProp = vtkProperty::New(); - aProp->SetRepresentationToPoints(); - - float anRGB[3]; - GetColor( "SMESH", "node_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 255, 0 ) ); - aProp->SetColor( anRGB[0], anRGB[1], anRGB[2] ); - - float aPointSize = GetFloat( "SMESH:node_size", 3 ); - aProp->SetPointSize( aPointSize ); - - myPreviewActor->SetProperty( aProp ); - aProp->Delete(); - - myViewWindow->AddActor(myPreviewActor); - } - - void SetPosition (float x, float y, float z) - { - myPoints->SetPoint(0,x,y,z); - myPoints->Modified(); - SetVisibility(true); - } - - void SetVisibility (bool theVisibility) - { - myPreviewActor->SetVisibility(theVisibility); - RepaintCurrentView(); - } - - ~TNodeSimulation() - { - myViewWindow->RemoveActor(myPreviewActor); - myPreviewActor->Delete(); - - myMapper->RemoveAllInputs(); - myMapper->Delete(); - - myPoints->Delete(); - } - }; -} - -//================================================================================= -// class : SMESHGUI_NodesDlg() -// purpose : -//================================================================================= -SMESHGUI_NodesDlg::SMESHGUI_NodesDlg (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), - mySelector(SMESH::GetViewWindow(theModule)->GetSelector()), - mySelectionMgr(SMESH::GetSelectionMgr(theModule)), - mySMESHGUI(theModule) -{ - mySimulation = new SMESH::TNodeSimulation(SMESH::GetViewWindow( mySMESHGUI )); - - QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_NODE"))); - if (!name) - setName("SMESHGUI_NodesDlg"); - resize(303, 185); - setCaption(tr("MESH_NODE_TITLE")); - setSizeGripEnabled(TRUE); - SMESHGUI_NodesDlgLayout = new QGridLayout(this); - SMESHGUI_NodesDlgLayout->setSpacing(6); - SMESHGUI_NodesDlgLayout->setMargin(11); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - GroupButtons->setTitle(tr("" )); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_APPLY" )); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - buttonOk = new QPushButton(GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_OK" )); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - SMESHGUI_NodesDlgLayout->addWidget(GroupButtons, 2, 0); - - /***************************************************************/ - GroupConstructors = new QButtonGroup(this, "GroupConstructors"); - GroupConstructors->setTitle(tr("MESH_NODE" )); - GroupConstructors->setExclusive(TRUE); - GroupConstructors->setColumnLayout(0, Qt::Vertical); - GroupConstructors->layout()->setSpacing(0); - GroupConstructors->layout()->setMargin(0); - GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout()); - GroupConstructorsLayout->setAlignment(Qt::AlignTop); - GroupConstructorsLayout->setSpacing(6); - GroupConstructorsLayout->setMargin(11); - Constructor1 = new QRadioButton(GroupConstructors, "Constructor1"); - Constructor1->setText(tr("" )); - Constructor1->setPixmap(image0); - Constructor1->setChecked(TRUE); - GroupConstructorsLayout->addWidget(Constructor1, 0, 0); - QSpacerItem* spacer_2 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupConstructorsLayout->addItem(spacer_2, 0, 1); - SMESHGUI_NodesDlgLayout->addWidget(GroupConstructors, 0, 0); - - /***************************************************************/ - GroupCoordinates = new QGroupBox(this, "GroupCoordinates"); - GroupCoordinates->setTitle(tr("SMESH_COORDINATES" )); - GroupCoordinates->setColumnLayout(0, Qt::Vertical); - GroupCoordinates->layout()->setSpacing(0); - GroupCoordinates->layout()->setMargin(0); - GroupCoordinatesLayout = new QGridLayout(GroupCoordinates->layout()); - GroupCoordinatesLayout->setAlignment(Qt::AlignTop); - GroupCoordinatesLayout->setSpacing(6); - GroupCoordinatesLayout->setMargin(11); - TextLabel_X = new QLabel(GroupCoordinates, "TextLabel_X"); - TextLabel_X->setText(tr("SMESH_X" )); - GroupCoordinatesLayout->addWidget(TextLabel_X, 0, 0); - TextLabel_Y = new QLabel(GroupCoordinates, "TextLabel_Y"); - TextLabel_Y->setText(tr("SMESH_Y" )); - GroupCoordinatesLayout->addWidget(TextLabel_Y, 0, 2); - - TextLabel_Z = new QLabel(GroupCoordinates, "TextLabel_Z"); - TextLabel_Z->setText(tr("SMESH_Z" )); - GroupCoordinatesLayout->addWidget(TextLabel_Z, 0, 4); - - SpinBox_X = new SMESHGUI_SpinBox(GroupCoordinates, "SpinBox_X"); - GroupCoordinatesLayout->addWidget(SpinBox_X, 0, 1); - - SpinBox_Y = new SMESHGUI_SpinBox(GroupCoordinates, "SpinBox_Y"); - GroupCoordinatesLayout->addWidget(SpinBox_Y, 0, 3); - - SpinBox_Z = new SMESHGUI_SpinBox(GroupCoordinates, "SpinBox_Z"); - GroupCoordinatesLayout->addWidget(SpinBox_Z, 0, 5); - - SMESHGUI_NodesDlgLayout->addWidget(GroupCoordinates, 1, 0); - - /* Initialisation and display */ - Init(); -} - -//======================================================================= -// function : ~SMESHGUI_NodesDlg() -// purpose : Destructor -//======================================================================= -SMESHGUI_NodesDlg::~SMESHGUI_NodesDlg() -{ - delete mySimulation; -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_NodesDlg::Init () -{ - /* Get setting of step value from file configuration */ - double step; - // QString St = SUIT_CONFIG->getSetting("xxxxxxxxxxxxx"); TODO - // step = St.toDouble(); TODO - step = 25.0; - - /* min, max, step and decimals for spin boxes */ - SpinBox_X->RangeStepAndValidator(-999.999, +999.999, step, 3); - SpinBox_Y->RangeStepAndValidator(-999.999, +999.999, step, 3); - SpinBox_Z->RangeStepAndValidator(-999.999, +999.999, step, 3); - SpinBox_X->SetValue(0.0); - SpinBox_Y->SetValue(0.0); - SpinBox_Z->SetValue(0.0); - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - - connect(SpinBox_X, SIGNAL (valueChanged(double)), SLOT(ValueChangedInSpinBox(double))); - connect(SpinBox_Y, SIGNAL (valueChanged(double)), SLOT(ValueChangedInSpinBox(double))); - connect(SpinBox_Z, SIGNAL (valueChanged(double)), SLOT(ValueChangedInSpinBox(double))); - - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(SelectionIntoArgument())); - connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), SLOT(DeactivateActiveDialog())); - /* to close dialog if study frame change */ - connect(mySMESHGUI, SIGNAL (SignalStudyFrameChanged()), SLOT(ClickOnCancel())); - - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); - - // set selection mode - SMESH::SetPointRepresentation(true); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - - SelectionIntoArgument(); -} - -//================================================================================= -// function : ValueChangedInSpinBox() -// purpose : -//================================================================================= -void SMESHGUI_NodesDlg::ValueChangedInSpinBox (double newValue) -{ - if (!myMesh->_is_nil()) { - double vx = SpinBox_X->GetValue(); - double vy = SpinBox_Y->GetValue(); - double vz = SpinBox_Z->GetValue(); - - mySimulation->SetPosition(vx,vy,vz); - } -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_NodesDlg::ClickOnOk() -{ - if (ClickOnApply()) - ClickOnCancel(); -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -bool SMESHGUI_NodesDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return false; - - if (myMesh->_is_nil()) { - SUIT_MessageBox::warn1(SMESHGUI::desktop(), tr("SMESH_WRN_WARNING"), - tr("MESH_IS_NOT_SELECTED"), tr("SMESH_BUT_OK")); - return false; - } - - /* Recup args and call method */ - double x = SpinBox_X->GetValue(); - double y = SpinBox_Y->GetValue(); - double z = SpinBox_Z->GetValue(); - mySimulation->SetVisibility(false); - SMESH::AddNode(myMesh,x,y,z); - SMESH::SetPointRepresentation(true); - - // select myMesh - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList); - if (aList.Extent() != 1) { - if (SVTK_ViewWindow* aViewWindow = SMESH::GetCurrentVtkView()) { - vtkActorCollection *aCollection = aViewWindow->getRenderer()->GetActors(); - aCollection->InitTraversal(); - while (vtkActor *anAct = aCollection->GetNextActor()) { - if (SMESH_Actor *anActor = dynamic_cast(anAct)) { - if (anActor->hasIO()) { - if (SMESH_MeshObj *aMeshObj = dynamic_cast(anActor->GetObject().get())) { - if (myMesh->_is_equivalent(aMeshObj->GetMeshServer())) { - aList.Clear(); - aList.Append(anActor->getIO()); - mySelectionMgr->setSelectedObjects(aList, false); - break; - } - } - } - } - } - } - } - return true; -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_NodesDlg::ClickOnCancel() -{ - disconnect(mySelectionMgr, 0, this, 0); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - - mySimulation->SetVisibility(false); - SMESH::SetPointRepresentation(false); - mySMESHGUI->ResetState(); - - reject(); -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_NodesDlg::SelectionIntoArgument() -{ - if (!GroupConstructors->isEnabled()) - return; - - mySimulation->SetVisibility(false); - SMESH::SetPointRepresentation(true); - - const SALOME_ListIO& aList = mySelector->StoredIObjects(); - if (aList.Extent() == 1) { - Handle(SALOME_InteractiveObject) anIO = aList.First(); - if (anIO->hasEntry()) { - myMesh = SMESH::GetMeshByIO(anIO); - if (myMesh->_is_nil()) return; - QString aText; - if (SMESH::GetNameOfSelectedNodes(mySelector,anIO,aText) == 1) { - if (SMESH_Actor* anActor = SMESH::FindActorByObject(myMesh.in())) { - if (SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh()) { - if (const SMDS_MeshNode* aNode = aMesh->FindNode(aText.toInt())) { - SpinBox_X->SetValue(aNode->X()); - SpinBox_Y->SetValue(aNode->Y()); - SpinBox_Z->SetValue(aNode->Z()); - } - } - } - } - mySimulation->SetPosition(SpinBox_X->GetValue(), - SpinBox_Y->GetValue(), - SpinBox_Z->GetValue()); - } - } -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_NodesDlg::closeEvent (QCloseEvent*) -{ - this->ClickOnCancel(); /* same than click on cancel button */ -} - -//================================================================================= -// function : hideEvent() -// purpose : caused by ESC key -//================================================================================= -void SMESHGUI_NodesDlg::hideEvent (QHideEvent*) -{ - if (!isMinimized()) - ClickOnCancel(); -} - -//================================================================================= -// function : enterEvent() -// purpose : to reactivate this dialog box when mouse enter onto the window -//================================================================================= -void SMESHGUI_NodesDlg::enterEvent(QEvent*) -{ - if (!GroupConstructors->isEnabled()) - ActivateThisDialog(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : public slot to deactivate if active -//================================================================================= -void SMESHGUI_NodesDlg::DeactivateActiveDialog() -{ - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); - GroupCoordinates->setEnabled(false); - GroupButtons->setEnabled(false); - mySimulation->SetVisibility(false); - mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_NodesDlg::ActivateThisDialog() -{ - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupConstructors->setEnabled(true); - GroupCoordinates->setEnabled(true); - GroupButtons->setEnabled(true); - - SMESH::SetPointRepresentation(true); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - - SelectionIntoArgument(); -} diff --git a/src/SMESHGUI/SMESHGUI_NodesDlg.h b/src/SMESHGUI/SMESHGUI_NodesDlg.h deleted file mode 100644 index e7da8a686..000000000 --- a/src/SMESHGUI/SMESHGUI_NodesDlg.h +++ /dev/null @@ -1,122 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_NodesDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef DIALOGBOX_NODES_H -#define DIALOGBOX_NODES_H - -#include -#include - -class QVBoxLayout; -class QHBoxLayout; -class QGridLayout; -class QButtonGroup; -class QFrame; -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class QRadioButton; - -class SMESHGUI; -class SVTK_Selector; -class SVTK_ViewWindow; -class SMESHGUI_SpinBox; -class SalomeApp_SelectionMgr; - -namespace SMESH{ - struct TNodeSimulation; -} - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -//================================================================================= -// class : SMESHGUI_NodesDlg -// purpose : -//================================================================================= -class SMESHGUI_NodesDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_NodesDlg (SMESHGUI* theModule, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0); - - ~SMESHGUI_NodesDlg(); - -private: - SalomeApp_SelectionMgr* mySelectionMgr; - SVTK_Selector* mySelector; - SMESHGUI* mySMESHGUI; - - SMESH::SMESH_Mesh_var myMesh; - SMESH::TNodeSimulation* mySimulation; - - void Init (); - void enterEvent(QEvent* e); - void closeEvent(QCloseEvent*); - void hideEvent (QHideEvent *); /* ESC key */ - - QButtonGroup* GroupConstructors; - QRadioButton* Constructor1; - QGroupBox* GroupCoordinates; - SMESHGUI_SpinBox* SpinBox_X; - SMESHGUI_SpinBox* SpinBox_Y; - SMESHGUI_SpinBox* SpinBox_Z; - - QLabel* TextLabel_X; - QLabel* TextLabel_Y; - QLabel* TextLabel_Z; - - QGroupBox* GroupButtons; - QPushButton* buttonApply; - QPushButton* buttonOk; - QPushButton* buttonCancel; - -private slots: - - void ClickOnOk(); - void ClickOnCancel(); - bool ClickOnApply(); - void DeactivateActiveDialog() ; - void ActivateThisDialog() ; - void SelectionIntoArgument() ; - void ValueChangedInSpinBox( double newValue ) ; - -protected: - QGridLayout* SMESHGUI_NodesDlgLayout; - QGridLayout* GroupConstructorsLayout; - QGridLayout* GroupCoordinatesLayout; - QGridLayout* GroupButtonsLayout; -}; - -#endif // DIALOGBOX_NODES_H diff --git a/src/SMESHGUI/SMESHGUI_Operation.cxx b/src/SMESHGUI/SMESHGUI_Operation.cxx deleted file mode 100755 index c26f5f69e..000000000 --- a/src/SMESHGUI/SMESHGUI_Operation.cxx +++ /dev/null @@ -1,226 +0,0 @@ -// SALOME SMESHGUI -// -// Copyright (C) 2005 CEA/DEN, EDF R&D -// -// -// -// File : SMESHGUI_Operation.h -// Author : Sergey LITONIN -// Module : SALOME - -#include "SMESHGUI_Operation.h" -#include -#include - -#include - -#include -#include - -#include - -/* - Class : SMESHGUI_Operation - Description : Base class for all SMESH operations -*/ - -//======================================================================= -// name : SMESHGUI_Operation -// Purpose : Constructor -//======================================================================= -SMESHGUI_Operation::SMESHGUI_Operation() -: SalomeApp_Operation() -{ -} - -//======================================================================= -// name : ~SMESHGUI_Operation -// Purpose : Destructor -//======================================================================= -SMESHGUI_Operation::~SMESHGUI_Operation() -{ -} - -//======================================================================= -// name : getSMESHGUI -// Purpose : Get SMESH module -//======================================================================= -SMESHGUI* SMESHGUI_Operation::getSMESHGUI() const -{ - return dynamic_cast( module() ); -} - -//======================================================================= -// name : startOperation -// Purpose : Start opeartion -//======================================================================= -void SMESHGUI_Operation::startOperation() -{ - if( dlg() ) - { - disconnect( dlg(), SIGNAL( dlgOk() ), this, SLOT( onOk() ) ); - disconnect( dlg(), SIGNAL( dlgApply() ), this, SLOT( onApply() ) ); - disconnect( dlg(), SIGNAL( dlgCancel() ), this, SLOT( onCancel() ) ); - disconnect( dlg(), SIGNAL( dlgClose() ), this, SLOT( onCancel() ) ); - - if( dlg()->testButtonFlags( QtxDialog::OK ) ) - connect( dlg(), SIGNAL( dlgOk() ), this, SLOT( onOk() ) ); - - if( dlg()->testButtonFlags( QtxDialog::Apply ) ) - connect( dlg(), SIGNAL( dlgApply() ), this, SLOT( onApply() ) ); - - if( dlg()->testButtonFlags( QtxDialog::Cancel ) ) - connect( dlg(), SIGNAL( dlgCancel() ), this, SLOT( onCancel() ) ); - - //if( dlg()->testButtonFlags( QtxDialog::Close ) ) - //if dialog hasn't close, cancel, no and etc buttons, dlgClose will be emitted when dialog is closed not by OK - connect( dlg(), SIGNAL( dlgClose() ), this, SLOT( onCancel() ) ); - - initDialog(); - } - - SalomeApp_Operation::startOperation(); -} - -//======================================================================= -// name : isReadyToStart -// Purpose : Verify whether operation is ready to start -//======================================================================= -bool SMESHGUI_Operation::isReadyToStart() const -{ - if ( !SalomeApp_Operation::isReadyToStart() ) - return false; - else if ( getSMESHGUI() == 0 ) - { - SUIT_MessageBox::warn1( desktop(), tr( "SMESH_WRN_WARNING" ), - tr( "NO_MODULE" ), tr( "SMESH_BUT_OK" ) ); - return false; - } - else if ( isStudyLocked() ) - return false; - - return true; -} - -//======================================================================= -// name : setDialogActive -// Purpose : -//======================================================================= -void SMESHGUI_Operation::setDialogActive( const bool active ) -{ - SalomeApp_Operation::setDialogActive( active ); - - SMESHGUI_Dialog* d = dynamic_cast( dlg() ); - if( d ) - d->setContentActive( active ); - -} - -//======================================================================= -// name : studyDS -// Purpose : -//======================================================================= -_PTR(Study) SMESHGUI_Operation::studyDS() const -{ - SalomeApp_Study* s = dynamic_cast( study() ); - return s->studyDS(); -} - -//======================================================================= -// name : onOk -// Purpose : -//======================================================================= -void SMESHGUI_Operation::onOk() -{ - if( onApply() ) - commit(); - else - abort(); -} - -//======================================================================= -// name : onApply -// Purpose : -//======================================================================= -bool SMESHGUI_Operation::onApply() -{ - return false; -} - -//======================================================================= -// name : onClose -// Purpose : -//======================================================================= -void SMESHGUI_Operation::onCancel() -{ - abort(); -} - -//======================================================================= -// name : initDialog -// Purpose : -//======================================================================= -void SMESHGUI_Operation::initDialog() -{ -} - -/*! - * \brief Verifies whether study of operation is locked - * \param theMess - specifies whether message box must be shown if study is locked - * \return State of study. -* -* Verifies whether study of operation is locked. If second parameter is TRUE and study -* is locked when corresponding message box appears -*/ -bool SMESHGUI_Operation::isStudyLocked( const bool theMess ) const -{ - if ( studyDS() ) - { - if ( studyDS()->GetProperties()->IsLocked() ) - { - if ( theMess ) - SUIT_MessageBox::warn1 ( SMESHGUI::desktop(), QObject::tr( "WRN_WARNING" ), - QObject::tr( "WRN_STUDY_LOCKED" ), QObject::tr( "BUT_OK" ) ); - return true; - } - } - - return false; -} - -/*! - * \brief Verifies whether given operator is valid for this one - * \param theOtherOp - other operation - * \return Returns TRUE if the given operator is valid for this one, FALSE otherwise -* -* Virtual method redefined from base class verifies whether given operator is valid for -* this one (i.e. can be started "above" this operator). In current implementation method -* retuns false if theOtherOp operation is not intended for deleting objects or mesh -* elements. -*/ -bool SMESHGUI_Operation::isValid( SUIT_Operation* theOtherOp ) const -{ - static QStringList anOps; - if ( anOps.count() == 0 ) - { - anOps.append( "SMESHGUI_DeleteOp" ); - // to do add other operations here - } - - return theOtherOp && theOtherOp->inherits( "SMESHGUI_Operation" ) && - ( !anOps.contains( theOtherOp->className() ) || anOps.contains( className() ) ); - - return true; -} - - - - - - - - - - - - diff --git a/src/SMESHGUI/SMESHGUI_Operation.h b/src/SMESHGUI/SMESHGUI_Operation.h deleted file mode 100755 index 3bc76d4f2..000000000 --- a/src/SMESHGUI/SMESHGUI_Operation.h +++ /dev/null @@ -1,62 +0,0 @@ -// SALOME SMESHGUI -// -// Copyright (C) 2005 CEA/DEN, EDF R&D -// -// -// -// File : SMESHGUI_Operation.h -// Author : Sergey LITONIN -// Module : SALOME - - -#ifndef SMESHGUI_Operation_H -#define SMESHGUI_Operation_H - -#include -#include - -class SMESHGUI; - -/* - Class : SMESHGUI_Operation - Description : Base class for all SMESH operations -*/ - -class SMESHGUI_Operation : public SalomeApp_Operation -{ - Q_OBJECT - -public: - SMESHGUI_Operation(); - virtual ~SMESHGUI_Operation(); - -protected: - //! sets the dialog widgets to state just after operation start - virtual void initDialog(); - - virtual void startOperation(); - virtual bool isReadyToStart() const; - - //! Set according dialog active or inactive - virtual void setDialogActive( const bool ); - - SMESHGUI* getSMESHGUI() const; - bool isStudyLocked( const bool = true ) const; - - _PTR(Study) studyDS() const; - - virtual bool isValid( SUIT_Operation* ) const; - -protected slots: - virtual void onOk(); - virtual bool onApply(); - virtual void onCancel(); -}; - -#endif - - - - - - diff --git a/src/SMESHGUI/SMESHGUI_PatternUtils.cxx b/src/SMESHGUI/SMESHGUI_PatternUtils.cxx deleted file mode 100644 index 718162f2b..000000000 --- a/src/SMESHGUI/SMESHGUI_PatternUtils.cxx +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - - -#include "SMESHGUI_PatternUtils.h" - -#include "SMESHGUI.h" - -namespace SMESH { - - SMESH::SMESH_Pattern_var GetPattern() - { - return SMESHGUI::GetSMESHGen()->GetPattern(); - } -} diff --git a/src/SMESHGUI/SMESHGUI_PatternUtils.h b/src/SMESHGUI/SMESHGUI_PatternUtils.h deleted file mode 100644 index fb09d01d9..000000000 --- a/src/SMESHGUI/SMESHGUI_PatternUtils.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef SMESHGUI_PatternUtils_HeaderFile -#define SMESHGUI_PatternUtils_HeaderFile - -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Pattern) - - -namespace SMESH{ - - SMESH::SMESH_Pattern_var GetPattern(); - -} - - -#endif diff --git a/src/SMESHGUI/SMESHGUI_PatternWidget.cxx b/src/SMESHGUI/SMESHGUI_PatternWidget.cxx deleted file mode 100644 index 178800a62..000000000 --- a/src/SMESHGUI/SMESHGUI_PatternWidget.cxx +++ /dev/null @@ -1,165 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_PatternWidget.cxx -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#include "SMESHGUI_PatternWidget.h" - -//Qt includes -#include -#include - - -//================================================================================= -// class : SMESHGUI_PatternWidget() -// purpose : -//================================================================================= -SMESHGUI_PatternWidget::SMESHGUI_PatternWidget (QWidget* parent, const char* name, WFlags fl) - : QFrame(parent, name, WStyle_Customize) -{ - myMinU = myMinV = myMaxU = myMaxV = 0; - setMinimumHeight(150); - repaint(); -} - -//================================================================================= -// function : ~SMESHGUI_PatternWidget() -// purpose : -//================================================================================= -SMESHGUI_PatternWidget::~SMESHGUI_PatternWidget() -{ -} - -//================================================================================= -// function : SetPoints() -// purpose : -//================================================================================= -void SMESHGUI_PatternWidget::SetPoints (PointVector thePoints, - QValueVector theKeys, - ConnectivityVector theConnections) -{ - myPoints = thePoints; - myKeys = theKeys; - myConnections = theConnections; - - if (!thePoints.size()) - return; - - myMinU = myMaxU = (thePoints[0]).x; - myMinV = myMaxV = (thePoints[0]).y; - double x, y; - - for (int i = 1; i < thePoints.size(); i++) { - x = (thePoints[i]).x; - y = (thePoints[i]).y; - - if (myMinU > x) - myMinU = x; - if (myMaxU < x) - myMaxU = x; - if (myMinV > y) - myMinV = y; - if (myMaxV < y) - myMaxV = y; - } - - repaint(); -} - -static const int Shift = 4; // shift of the point number from point -static const int Border = 20; - -//================================================================================= -// function : paintEvent() -// purpose : -//================================================================================= -void SMESHGUI_PatternWidget::paintEvent (QPaintEvent*) -{ - QPainter paint (this); - paint.setBrush(Qt::SolidPattern); - - //Draw points - const int aRadius = 3; // radius of a point - - for (int i = 0; i < myKeys.size() && i < myPoints.size(); i++) { - SMESH::PointStruct aPoint = myPoints[ myKeys[i] ]; - QPoint aQPnt = MapCoords(aPoint.x, aPoint.y); - - paint.drawPie(aQPnt.x() - aRadius, aQPnt.y() - aRadius, aRadius*2, aRadius*2, 5760, 5760); - paint.drawText(aQPnt.x() + Shift, aQPnt.y() - Shift, QString::number(i+1)); - } - - //Draw lines - for (int i = 0; i < myConnections.size(); i++) { - QValueVector aCVector = myConnections[i]; - - if (aCVector.size() == 0) - continue; - - SMESH::PointStruct aPoint = myPoints[ aCVector[0] ]; - const QPoint aBeginPnt = MapCoords(aPoint.x, aPoint.y); - QPoint aFirstPnt = aBeginPnt, aSecondPnt; - - for (int j = 1; j < aCVector.size(); j++) { - aPoint = myPoints[ aCVector[j] ]; - aSecondPnt = MapCoords(aPoint.x, aPoint.y); - paint.drawLine(aFirstPnt, aSecondPnt); - aFirstPnt = aSecondPnt; - } - - paint.drawLine(aBeginPnt, aSecondPnt); - } -} - -//================================================================================= -// function : MapCoords() -// purpose : -//================================================================================= -QPoint SMESHGUI_PatternWidget::MapCoords (const double u, const double v) -{ - int aWidth = width() - 2*Border; - int aHeight = height() - 2*Border; - - double aUBound = myMaxU - myMinU; - double aVBound = myMaxV - myMinV; - - double aUScale = aWidth/aUBound; - double aVScale = aHeight/aVBound; - - double aScale; - aUScale <= aVScale ? aScale = aUScale : aScale = aVScale; - - double aUMiddle = (myMaxU + myMinU)/2; - double aVMiddle = (myMaxV + myMinV)/2; - - int x = int(aWidth/2 + (u - aUMiddle)*aScale + Border - Shift); - - int y = int(aHeight/2 + (aVMiddle - v)*aScale + Border + Shift); - - QPoint aPoint = QPoint(x, y); - - return aPoint; -} diff --git a/src/SMESHGUI/SMESHGUI_PatternWidget.h b/src/SMESHGUI/SMESHGUI_PatternWidget.h deleted file mode 100644 index ddab7433b..000000000 --- a/src/SMESHGUI/SMESHGUI_PatternWidget.h +++ /dev/null @@ -1,74 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_PatternWidget.h -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#ifndef WIDGET_PATTERN_H -#define WIDGET_PATTERN_H - -#include -#include - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -typedef QValueVector PointVector; -typedef QValueVector< QValueVector > ConnectivityVector; - -class QPoint; - -//================================================================================= -// class : SMESHGUI_PatternWidget -// purpose : -//================================================================================= -class SMESHGUI_PatternWidget : public QFrame -{ - Q_OBJECT - -public: - SMESHGUI_PatternWidget( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); - - ~SMESHGUI_PatternWidget(); - - void SetPoints( PointVector thePoints, QValueVector theKeys, ConnectivityVector theConnections ); - -private : - PointVector myPoints; - QValueVector myKeys; - ConnectivityVector myConnections; - - double myMinU, myMaxU, myMinV, myMaxV; - -private slots: - -protected: - void paintEvent( QPaintEvent * ); - QPoint MapCoords( const double u, const double v ); -}; - -#endif // WIDGET_PATTERN_H - diff --git a/src/SMESHGUI/SMESHGUI_PrecisionDlg.cxx b/src/SMESHGUI/SMESHGUI_PrecisionDlg.cxx deleted file mode 100755 index b589e15d3..000000000 --- a/src/SMESHGUI/SMESHGUI_PrecisionDlg.cxx +++ /dev/null @@ -1,202 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_PrecisionDlg.cxx -// Author : Sergey LITONIN -// Module : SMESH - -#include "SMESHGUI_PrecisionDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_Utils.h" - -#include "SUIT_Desktop.h" -#include "SUIT_ResourceMgr.h" - -#include -#include -#include -#include -#include -#include - -#define SPACING 5 -#define MARGIN 10 -#define DEFAULT_VAL 10 -#define RANGE 128 - -/*! - * Class : SMESHGUI_PrecisionDlg - * Description : Dialog to specify precision of mesh quality controls - */ - -//======================================================================= -// name : SMESHGUI_PrecisionDlg::SMESHGUI_PrecisionDlg -// Purpose : Constructor -//======================================================================= -SMESHGUI_PrecisionDlg::SMESHGUI_PrecisionDlg ( SMESHGUI* theModule ) - : QDialog( SMESH::GetDesktop( theModule ), "SMESHGUI_PrecisionDlg", true, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), - mySMESHGUI( theModule ) -{ - setCaption(tr("CAPTION")); - - QVBoxLayout* aDlgLay = new QVBoxLayout (this, MARGIN, SPACING); - - QFrame* aMainFrame = createMainFrame (this); - QFrame* aBtnFrame = createButtonFrame(this); - - aDlgLay->addWidget(aMainFrame); - aDlgLay->addWidget(aBtnFrame); - - aDlgLay->setStretchFactor(aMainFrame, 1); - - setMinimumWidth((int)(QFontMetrics(font()).width(tr("CAPTION")) * 1.5)); - - Init(); -} - -//======================================================================= -// name : SMESHGUI_PrecisionDlg::~SMESHGUI_PrecisionDlg -// Purpose : Destructor -//======================================================================= -SMESHGUI_PrecisionDlg::~SMESHGUI_PrecisionDlg() -{ -} - -//======================================================================= -// name : SMESHGUI_PrecisionDlg::createButtonFrame -// Purpose : Create frame containing buttons -//======================================================================= -QFrame* SMESHGUI_PrecisionDlg::createButtonFrame (QWidget* theParent) -{ - QGroupBox* aGrp = new QGroupBox (1, Qt::Vertical, theParent); - aGrp->setFrameStyle(QFrame::NoFrame); - aGrp->setInsideMargin(0); - - myOKBtn = new QPushButton (tr("SMESH_BUT_OK"), aGrp); - - QLabel* aLbl = new QLabel (aGrp); - aLbl->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - - myCancelBtn = new QPushButton (tr("SMESH_BUT_CANCEL"), aGrp); - - connect(myOKBtn, SIGNAL(clicked()), SLOT(onOk())); - connect(myCancelBtn, SIGNAL(clicked()), SLOT(onClose())); - - return aGrp; -} - -//======================================================================= -// name : SMESHGUI_PrecisionDlg:: createMainFrame -// Purpose : Create frame containing dialog's input fields -//======================================================================= -QFrame* SMESHGUI_PrecisionDlg::createMainFrame (QWidget* theParent) -{ - QGroupBox* aGrp = new QGroupBox(2, Qt::Horizontal, theParent); - new QLabel (tr("PRECISION"), aGrp); - mySpinBox = new QSpinBox (0, RANGE, 1, aGrp); - myNotUseChk = new QCheckBox (tr("NOT_USE"), aGrp); - - connect(myNotUseChk, SIGNAL(toggled(bool)), SLOT(onNotUse())); - - return aGrp; -} - -//======================================================================= -// name : SMESHGUI_PrecisionDlg::Init -// Purpose : Initialize dialog fields -//======================================================================= -void SMESHGUI_PrecisionDlg::Init() -{ - bool isOk = false; - int aVal = DEFAULT_VAL; - SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); - if (mgr && mgr->hasValue("SMESH", "controls_precision")) { - QString aStr = mgr->stringValue("SMESH", "controls_precision"); - aVal = aStr.toInt(&isOk); - } - - mySpinBox->setValue(isOk ? aVal : DEFAULT_VAL); - myNotUseChk->setChecked(!isOk); - - onNotUse(); - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(onClose())); -} - -//======================================================================= -// name : SMESHGUI_PrecisionDlg::onOk -// Purpose : SLOT. Called when OK button pressed -//======================================================================= -void SMESHGUI_PrecisionDlg::onOk() -{ - SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); - if (myNotUseChk->isChecked()) { - if (mgr) { - mgr->remove("SMESH", "controls_precision"); - } - SMESH::SetControlsPrecision(-1); - } else { - mySpinBox->clearFocus(); - int aVal = mySpinBox->value(); - if (mgr) { - mgr->setValue("SMESH", "controls_precision", QString("%1").arg(aVal)); - } - SMESH::SetControlsPrecision(aVal); - } - - disconnect(mySMESHGUI, 0, this, 0); - mySMESHGUI->ResetState() ; - accept(); -} - -//======================================================================= -// name : SMESHGUI_PrecisionDlg::onClose -// Purpose : SLOT. Called when "Cancel" button pressed -//======================================================================= -void SMESHGUI_PrecisionDlg::onClose() -{ - disconnect( mySMESHGUI, 0, this, 0); - reject(); -} - -//======================================================================= -// name : SMESHGUI_PrecisionDlg::closeEvent -// Purpose : -//======================================================================= -void SMESHGUI_PrecisionDlg::closeEvent (QCloseEvent*) -{ - onClose(); -} - -//======================================================================= -// name : SMESHGUI_PrecisionDlg::onNotUse -// Purpose : SLOT. Called when state of "Do not use" check box changed -//======================================================================= -void SMESHGUI_PrecisionDlg::onNotUse() -{ - mySpinBox->setEnabled(!myNotUseChk->isChecked()); -} diff --git a/src/SMESHGUI/SMESHGUI_PrecisionDlg.h b/src/SMESHGUI/SMESHGUI_PrecisionDlg.h deleted file mode 100755 index 976db3091..000000000 --- a/src/SMESHGUI/SMESHGUI_PrecisionDlg.h +++ /dev/null @@ -1,97 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_PrecisionDlg.h -// Author : Sergey LITONIN -// Module : SMESH - - -#ifndef SMESHGUI_PrecisionDlg_H -#define SMESHGUI_PrecisionDlg_H - -#include - -class QSpinBox; -class QPushButton; -class QCheckBox; -class QFrame; -class SMESHGUI; - -/* - Class : SMESHGUI_PrecisionDlg - Description : Dialog to specify precision of mesh quality controls -*/ - -class SMESHGUI_PrecisionDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_PrecisionDlg( SMESHGUI* ); - - virtual ~SMESHGUI_PrecisionDlg(); - - void Init(); - -private slots: - - void onOk(); - void onClose(); - void onNotUse(); - -private: - - QFrame* createButtonFrame( QWidget* ); - QFrame* createMainFrame( QWidget* ); - void closeEvent( QCloseEvent* ); - -private: - SMESHGUI* mySMESHGUI; - QSpinBox* mySpinBox; - QPushButton* myOKBtn; - QPushButton* myCancelBtn; - QCheckBox* myNotUseChk; - -}; - -#endif - - - - - - - - - - - - - - - - - - - - diff --git a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx b/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx deleted file mode 100644 index d51137871..000000000 --- a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx +++ /dev/null @@ -1,396 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_Preferences_ColorDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#include "SMESHGUI_Preferences_ColorDlg.h" -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" - -#include "utilities.h" - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "SUIT_Desktop.h" - -using namespace std; - -//================================================================================= -// function : SMESHGUI_Preferences_ColorDlg() -// purpose : Constructs a SMESHGUI_Preferences_ColorDlg which is a child -// of 'parent', with the name 'name' and widget flags set to 'f' -// The dialog will by default be modeless, unless you -// set'modal' to TRUE to construct a modal dialog. -//================================================================================= -SMESHGUI_Preferences_ColorDlg::SMESHGUI_Preferences_ColorDlg( SMESHGUI* theModule, const char* name) - : QDialog( SMESH::GetDesktop( theModule ), name, true, WStyle_Customize | - WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), - mySMESHGUI( theModule ) -{ - if (!name) - setName("SMESHGUI_Preferences_ColorDlg"); - setCaption(tr("Preferences - Set Color")); - setSizeGripEnabled(TRUE); - QGridLayout* SMESHGUI_Preferences_ColorDlgLayout = new QGridLayout(this); - SMESHGUI_Preferences_ColorDlgLayout->setSpacing(6); - SMESHGUI_Preferences_ColorDlgLayout->setMargin(11); - - ButtonGroup1 = new QButtonGroup(tr("Elements"), this, "ButtonGroup1"); - ButtonGroup1->setColumnLayout(0, Qt::Vertical); - ButtonGroup1->layout()->setSpacing(0); - ButtonGroup1->layout()->setMargin(0); - QGridLayout* ButtonGroup1Layout = new QGridLayout(ButtonGroup1->layout()); - ButtonGroup1Layout->setAlignment(Qt::AlignTop); - ButtonGroup1Layout->setSpacing(6); - ButtonGroup1Layout->setMargin(11); - - TextLabel_Fill = new QLabel(tr("Fill"), ButtonGroup1, "TextLabel_2D_Fill"); - ButtonGroup1Layout->addWidget(TextLabel_Fill, 0, 0); - - btnFillColor = new QPushButton(ButtonGroup1, "btnFillColor"); - btnFillColor->setFixedSize(QSize(25, 25)); - ButtonGroup1Layout->addWidget(btnFillColor, 0, 1); - - TextLabel_Outine = new QLabel(tr("Outline"), ButtonGroup1, "TextLabel_2D_Outine"); - ButtonGroup1Layout->addWidget(TextLabel_Outine, 0, 2); - - btnOutlineColor = new QPushButton(ButtonGroup1, "btnOutlineColor"); - btnOutlineColor->setFixedSize(QSize(25, 25)); - ButtonGroup1Layout->addWidget(btnOutlineColor, 0, 3); - - TextLabel_Width = new QLabel(tr("Width"), ButtonGroup1, "TextLabel_2D_Width"); - ButtonGroup1Layout->addWidget(TextLabel_Width, 0, 4); - - SpinBox_Width = new QSpinBox(0, 5, 1, ButtonGroup1, "SpinBox_Width"); - SpinBox_Width->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - SpinBox_Width->setWrapping(FALSE); - SpinBox_Width->setButtonSymbols(QSpinBox::PlusMinus); - ButtonGroup1Layout->addWidget(SpinBox_Width, 0, 5); - - TextLabel_BackFace = new QLabel(tr("Back Face"), ButtonGroup1, "TextLabel_BackFace"); - ButtonGroup1Layout->addWidget(TextLabel_BackFace, 1, 0); - - btnBackFaceColor = new QPushButton(ButtonGroup1, "btnBackFaceColor"); - btnBackFaceColor->setFixedSize(QSize(25, 25)); - ButtonGroup1Layout->addWidget(btnBackFaceColor, 1, 1); - - TextLabel_ShrinkCoeff = new QLabel(tr("Shrink coef."), ButtonGroup1, "TextLabel_ShrinkCoeff"); - ButtonGroup1Layout->addWidget(TextLabel_ShrinkCoeff, 2, 0); - - SpinBox_Shrink = new QSpinBox(20, 100, 1, ButtonGroup1, "SpinBox_Shrink"); - SpinBox_Shrink->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - SpinBox_Shrink->setButtonSymbols(QSpinBox::PlusMinus); - ButtonGroup1Layout->addMultiCellWidget(SpinBox_Shrink, 2, 2, 1, 5); - - SMESHGUI_Preferences_ColorDlgLayout->addWidget(ButtonGroup1, 0, 0); - - ButtonGroup2 = new QButtonGroup(tr("Nodes"), this, "ButtonGroup2"); - ButtonGroup2->setColumnLayout(0, Qt::Vertical); - ButtonGroup2->layout()->setSpacing(0); - ButtonGroup2->layout()->setMargin(0); - QGridLayout* ButtonGroup2Layout = new QGridLayout(ButtonGroup2->layout()); - ButtonGroup2Layout->setAlignment(Qt::AlignTop); - ButtonGroup2Layout->setSpacing(6); - ButtonGroup2Layout->setMargin(11); - - TextLabel_Nodes_Color = new QLabel(tr("Color"), ButtonGroup2, "TextLabel_Nodes_Color"); - ButtonGroup2Layout->addWidget(TextLabel_Nodes_Color, 0, 0); - - btnNodeColor = new QPushButton(ButtonGroup2, "btnNodeColor"); - btnNodeColor->setFixedSize(QSize(25, 25)); - ButtonGroup2Layout->addWidget(btnNodeColor, 0, 1); - - TextLabel_Nodes_Size = new QLabel(tr("Size"), ButtonGroup2, "TextLabel_Nodes_Size"); - ButtonGroup2Layout->addWidget(TextLabel_Nodes_Size, 0, 2); - - SpinBox_Nodes_Size = new QSpinBox(0, 5, 1, ButtonGroup2, "SpinBox_Nodes_Size"); - SpinBox_Nodes_Size->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - SpinBox_Nodes_Size->setWrapping(FALSE); - SpinBox_Nodes_Size->setButtonSymbols(QSpinBox::PlusMinus); - ButtonGroup2Layout->addWidget(SpinBox_Nodes_Size, 0, 3); - - SMESHGUI_Preferences_ColorDlgLayout->addWidget(ButtonGroup2, 1, 0); - - GroupButtons = new QButtonGroup(this, "GroupButtons"); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - - buttonOk = new QPushButton(tr("&OK"), GroupButtons, "buttonOk"); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - - GroupButtonsLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 1); - - buttonCancel = new QPushButton(tr("&Cancel"), GroupButtons, "buttonCancel"); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 2); - - SMESHGUI_Preferences_ColorDlgLayout->addWidget(GroupButtons, 2, 0); - - Init(); -} - -//================================================================================= -// function : ~SMESHGUI_Preferences_ColorDlg() -// purpose : Destructor -//================================================================================= -SMESHGUI_Preferences_ColorDlg::~SMESHGUI_Preferences_ColorDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_ColorDlg::Init() -{ - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - - connect(btnFillColor, SIGNAL(clicked()), this, SLOT(SelectFillColor())); - connect(btnOutlineColor, SIGNAL(clicked()), this, SLOT(SelectOutlineColor())); - connect(btnNodeColor, SIGNAL(clicked()), this, SLOT(SelectNodeColor())); - connect(btnBackFaceColor, SIGNAL(clicked()), this, SLOT(SelectBackFaceColor())); - - connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - /* to close dialog if study change */ - connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); - - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); -} - -//================================================================================= -// function : SelectFillColor() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_ColorDlg::SelectFillColor() -{ - QColor color = btnFillColor->palette().active().button(); - color = QColorDialog::getColor(color); - if (color.isValid()) { - QPalette pal = btnFillColor->palette(); - pal.setColor(QColorGroup::Button, color); - btnFillColor->setPalette(pal); - } -} - -//================================================================================= -// function : SelectBackFaceColor() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_ColorDlg::SelectBackFaceColor() -{ - QColor color = btnBackFaceColor->palette().active().button(); - color = QColorDialog::getColor(color); - if (color.isValid()) { - QPalette pal = btnBackFaceColor->palette(); - pal.setColor(QColorGroup::Button, color); - btnBackFaceColor->setPalette(pal); - } -} - -//================================================================================= -// function : SelectOutlineColor() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_ColorDlg::SelectOutlineColor() -{ - QColor color = btnOutlineColor->palette().active().button(); - color = QColorDialog::getColor(color); - if (color.isValid()) { - QPalette pal = btnOutlineColor->palette(); - pal.setColor(QColorGroup::Button, color); - btnOutlineColor->setPalette(pal); - } -} - -//================================================================================= -// function : SelectNodeColor() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_ColorDlg::SelectNodeColor() -{ - QColor color = btnNodeColor->palette().active().button(); - color = QColorDialog::getColor(color); - if (color.isValid()) { - QPalette pal = btnNodeColor->palette(); - pal.setColor(QColorGroup::Button, color); - btnNodeColor->setPalette(pal); - } -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_ColorDlg::ClickOnOk() -{ - mySMESHGUI->ResetState(); - accept(); -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_ColorDlg::ClickOnCancel() -{ - mySMESHGUI->ResetState(); - reject(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_ColorDlg::DeactivateActiveDialog() -{ -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_ColorDlg::closeEvent (QCloseEvent*) -{ - this->ClickOnCancel(); /* same than click on cancel button */ -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_ColorDlg::ActivateThisDialog() -{ - /* Emit a signal to deactivate any active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog(); -} - -//================================================================================= -// function : SetColor() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_ColorDlg::SetColor (int type, QColor color) -{ - switch (type) { - case 1 : // fill - { - QPalette pal = btnFillColor->palette(); - pal.setColor(QColorGroup::Button, color); - btnFillColor->setPalette(pal); - break; - } - case 2 : // outline - { - QPalette pal = btnOutlineColor->palette(); - pal.setColor(QColorGroup::Button, color); - btnOutlineColor->setPalette(pal); - break; - } - case 3 : // node - { - QPalette pal = btnNodeColor->palette(); - pal.setColor(QColorGroup::Button, color); - btnNodeColor->setPalette(pal); - break; - } - case 4 : // back face - { - QPalette pal = btnBackFaceColor->palette(); - pal.setColor(QColorGroup::Button, color); - btnBackFaceColor->setPalette(pal); - break; - } - } -} - -//================================================================================= -// function : GetColor() -// purpose : -//================================================================================= -QColor SMESHGUI_Preferences_ColorDlg::GetColor (int type) -{ - QColor color; - switch (type) { - case 1 : color = btnFillColor->palette().active().button(); break; // fill - case 2 : color = btnOutlineColor->palette().active().button(); break; // outline - case 3 : color = btnNodeColor->palette().active().button(); break; // node - case 4 : color = btnBackFaceColor->palette().active().button(); break; // back face - } - return color; -} - -//================================================================================= -// function : SetIntValue() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_ColorDlg::SetIntValue (int type, int value) -{ - switch (type) { - case 1 : SpinBox_Width->setValue(value); break; // width - case 2 : SpinBox_Nodes_Size->setValue(value); break; // nodes size = value; break; - case 3 : SpinBox_Shrink->setValue(value); break; // shrink coeff - } -} - -//================================================================================= -// function : GetIntValue() -// purpose : -//================================================================================= -int SMESHGUI_Preferences_ColorDlg::GetIntValue (int type) -{ - int res = 0; - switch (type) { - case 1 : res = SpinBox_Width->value(); break; // width - case 2 : res = SpinBox_Nodes_Size->value(); break; // nodes size - case 3 : res = SpinBox_Shrink->value(); break; // shrink coeff - } - return res; -} diff --git a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h b/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h deleted file mode 100644 index 43702b2ac..000000000 --- a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h +++ /dev/null @@ -1,105 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_Preferences_ColorDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef SMESHGUI_PREFERENCES_COLORDLG_H -#define SMESHGUI_PREFERENCES_COLORDLG_H - -// SALOME Includes -//#include "SUIT_Config.h" -//#include "SUIT_Settings.h" - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Gen) - -// QT Includes -#include - -class QButtonGroup; -class QFrame; -class QLabel; -class QPushButton; -class QSpinBox; -class QColor; -class SMESHGUI; - -class SMESHGUI_Preferences_ColorDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_Preferences_ColorDlg( SMESHGUI*, const char* name = 0 ); - ~SMESHGUI_Preferences_ColorDlg(); - - void SetColor(int type, QColor color); - QColor GetColor(int type); - void SetIntValue(int type, int value); - int GetIntValue(int type); - -private: - void closeEvent( QCloseEvent* e ) ; - void Init(); - -private slots: -// void RadioButtonClicked(int radioButtonId); - void ClickOnOk(); - void ClickOnCancel(); - void DeactivateActiveDialog() ; - void ActivateThisDialog() ; - - void SelectFillColor(); - void SelectBackFaceColor(); - void SelectOutlineColor(); - void SelectNodeColor(); - -private: - SMESH::SMESH_Gen_var myCompMesh ; - SMESHGUI* mySMESHGUI ; - - QButtonGroup* ButtonGroup1; - QLabel* TextLabel_Fill; - QPushButton* btnFillColor; - QLabel* TextLabel_Outine; - QPushButton* btnOutlineColor; - QLabel* TextLabel_Width; - QSpinBox* SpinBox_Width; - QLabel* TextLabel_BackFace; - QPushButton* btnBackFaceColor; - QLabel* TextLabel_ShrinkCoeff; - QSpinBox* SpinBox_Shrink; - QButtonGroup* ButtonGroup2; - QLabel* TextLabel_Nodes_Color; - QPushButton* btnNodeColor; - QLabel* TextLabel_Nodes_Size; - QSpinBox* SpinBox_Nodes_Size; - QButtonGroup* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; -}; - -#endif // SMESHGUI_PREFERENCES_COLORDLG_H diff --git a/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx b/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx deleted file mode 100644 index c8da7c26f..000000000 --- a/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx +++ /dev/null @@ -1,765 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_Preferences_ScalarBarDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#include "SMESHGUI_Preferences_ScalarBarDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_Utils.h" - -#include "SMESH_Actor.h" - -#include "SUIT_Desktop.h" -#include "SUIT_ResourceMgr.h" - -#include "SalomeApp_SelectionMgr.h" -#include "SALOME_ListIO.hxx" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#define MINIMUM_WIDTH 70 -#define MARGIN_SIZE 11 -#define SPACING_SIZE 6 - -#define DEF_VER_X 0.01 -#define DEF_VER_Y 0.10 -#define DEF_VER_H 0.80 -#define DEF_VER_W 0.10 -#define DEF_HOR_X 0.20 -#define DEF_HOR_Y 0.01 -#define DEF_HOR_H 0.12 -#define DEF_HOR_W 0.60 - -using namespace std; - -// Only one instance is allowed -SMESHGUI_Preferences_ScalarBarDlg* SMESHGUI_Preferences_ScalarBarDlg::myDlg = 0; - -//================================================================================================= -/*! - * SMESHGUI_Preferences_ScalarBarDlg::ScalarBarProperties - * - * Gets the only instance of "Scalar Bar Properties" dialog box - */ -//================================================================================================= -void SMESHGUI_Preferences_ScalarBarDlg::ScalarBarProperties( SMESHGUI* theModule ) -{ - if (!myDlg) { - myDlg = new SMESHGUI_Preferences_ScalarBarDlg( theModule, true); - myDlg->show(); - } else { - myDlg->show(); - myDlg->setActiveWindow(); - myDlg->raise(); - myDlg->setFocus(); - } -} - -//================================================================================================= -/*! - * SMESHGUI_Preferences_ScalarBarDlg::ScalarBarPreferences - * - * Opens "Scalar Bar Preferences" dialog box - */ -//================================================================================================= -void SMESHGUI_Preferences_ScalarBarDlg::ScalarBarPreferences( SMESHGUI* theModule ) -{ - SMESHGUI_Preferences_ScalarBarDlg* aDlg = - new SMESHGUI_Preferences_ScalarBarDlg( theModule, false); - aDlg->exec(); -} - -//================================================================================================= -/*! - * SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg - * - * Constructor - */ -//================================================================================================= -SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI* theModule, bool property, bool modal ) - : QDialog( SMESH::GetDesktop( theModule ), 0, modal, WStyle_Customize | WStyle_NormalBorder | - WStyle_Title | WStyle_SysMenu | WDestructiveClose ), - mySMESHGUI( theModule ), - mySelectionMgr( property ? SMESH::GetSelectionMgr( theModule ) : 0 ) -{ - setName("SMESHGUI_Preferences_ScalarBarDlg"); - setCaption( property ? tr("SMESH_PROPERTIES_SCALARBAR") : tr("SMESH_PREFERENCES_SCALARBAR")); - setSizeGripEnabled(TRUE); - - myActor = 0; - - /******************************************************************************/ - // Top layout - QGridLayout* aTopLayout = new QGridLayout( this ); - aTopLayout->setSpacing( SPACING_SIZE ); aTopLayout->setMargin( MARGIN_SIZE ); - int aRow = 0; - - /******************************************************************************/ - // Scalar range - if ( mySelectionMgr ) { - myRangeGrp = new QGroupBox ( tr( "SMESH_RANGE_SCALARBAR" ), this, "myRangeGrp" ); - myRangeGrp->setColumnLayout( 0, Qt::Vertical ); - myRangeGrp->layout()->setSpacing( 0 ); myRangeGrp->layout()->setMargin( 0 ); - QGridLayout* myRangeGrpLayout = new QGridLayout( myRangeGrp->layout() ); - myRangeGrpLayout->setAlignment( Qt::AlignTop ); - myRangeGrpLayout->setSpacing( SPACING_SIZE ); myRangeGrpLayout->setMargin( MARGIN_SIZE ); - - myMinEdit = new QLineEdit( myRangeGrp, "myMinEdit" ); - myMinEdit->setMinimumWidth( MINIMUM_WIDTH ); - myMinEdit->setValidator( new QDoubleValidator( this ) ); - - myMaxEdit = new QLineEdit( myRangeGrp, "myMaxEdit" ); - myMaxEdit->setMinimumWidth( MINIMUM_WIDTH ); - myMaxEdit->setValidator( new QDoubleValidator( this ) ); - - myRangeGrpLayout->addWidget( new QLabel( tr( "SMESH_RANGE_MIN" ), myRangeGrp, "myMinLab" ), 0, 0 ); - myRangeGrpLayout->addWidget( myMinEdit, 0, 1 ); - myRangeGrpLayout->addWidget( new QLabel( tr( "SMESH_RANGE_MAX" ), myRangeGrp, "myMaxLab" ), 0, 2 ); - myRangeGrpLayout->addWidget( myMaxEdit, 0, 3 ); - - aTopLayout->addWidget( myRangeGrp, aRow, 0 ); - aRow++; - } - - /******************************************************************************/ - // Text properties - myFontGrp = new QGroupBox ( tr( "SMESH_FONT_SCALARBAR" ), this, "myFontGrp" ); - myFontGrp->setColumnLayout( 0, Qt::Vertical ); - myFontGrp->layout()->setSpacing( 0 ); myFontGrp->layout()->setMargin( 0 ); - QGridLayout* myFontGrpLayout = new QGridLayout( myFontGrp->layout() ); - myFontGrpLayout->setAlignment( Qt::AlignTop ); - myFontGrpLayout->setSpacing( SPACING_SIZE ); myFontGrpLayout->setMargin( MARGIN_SIZE ); - - myTitleColorBtn = new QToolButton( myFontGrp, "myTitleColorBtn" ); - - myTitleFontCombo = new QComboBox( false, myFontGrp, "myTitleFontCombo" ); - myTitleFontCombo->setMinimumWidth( MINIMUM_WIDTH ); - myTitleFontCombo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myTitleFontCombo->insertItem( tr( "SMESH_FONT_ARIAL" ) ); - myTitleFontCombo->insertItem( tr( "SMESH_FONT_COURIER" ) ); - myTitleFontCombo->insertItem( tr( "SMESH_FONT_TIMES" ) ); - - myTitleBoldCheck = new QCheckBox( tr( "SMESH_FONT_BOLD" ), myFontGrp, "myTitleBoldCheck" ); - myTitleItalicCheck = new QCheckBox( tr( "SMESH_FONT_ITALIC" ), myFontGrp, "myTitleItalicCheck" ); - myTitleShadowCheck = new QCheckBox( tr( "SMESH_FONT_SHADOW" ), myFontGrp, "myTitleShadowCheck" ); - - myLabelsColorBtn = new QToolButton( myFontGrp, "myLabelsColorBtn" ); - - myLabelsFontCombo = new QComboBox( false, myFontGrp, "myLabelsFontCombo" ); - myLabelsFontCombo->setMinimumWidth( MINIMUM_WIDTH ); - myLabelsFontCombo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myLabelsFontCombo->insertItem( tr( "SMESH_FONT_ARIAL" ) ); - myLabelsFontCombo->insertItem( tr( "SMESH_FONT_COURIER" ) ); - myLabelsFontCombo->insertItem( tr( "SMESH_FONT_TIMES" ) ); - - myLabelsBoldCheck = new QCheckBox( tr( "SMESH_FONT_BOLD" ), myFontGrp, "myLabelsBoldCheck" ); - myLabelsItalicCheck = new QCheckBox( tr( "SMESH_FONT_ITALIC" ), myFontGrp, "myLabelsItalicCheck" ); - myLabelsShadowCheck = new QCheckBox( tr( "SMESH_FONT_SHADOW" ), myFontGrp, "myLabelsShadowCheck" ); - - myFontGrpLayout->addWidget( new QLabel( tr( "SMESH_TITLE" ), myFontGrp, "myFontTitleLab" ), 0, 0 ); - myFontGrpLayout->addWidget( myTitleColorBtn, 0, 1 ); - myFontGrpLayout->addWidget( myTitleFontCombo, 0, 2 ); - myFontGrpLayout->addWidget( myTitleBoldCheck, 0, 3 ); - myFontGrpLayout->addWidget( myTitleItalicCheck, 0, 4 ); - myFontGrpLayout->addWidget( myTitleShadowCheck, 0, 5 ); - - myFontGrpLayout->addWidget( new QLabel( tr( "SMESH_LABELS" ), myFontGrp, "myFontLabelsLab" ), 1, 0 ); - myFontGrpLayout->addWidget( myLabelsColorBtn, 1, 1 ); - myFontGrpLayout->addWidget( myLabelsFontCombo, 1, 2 ); - myFontGrpLayout->addWidget( myLabelsBoldCheck, 1, 3 ); - myFontGrpLayout->addWidget( myLabelsItalicCheck, 1, 4 ); - myFontGrpLayout->addWidget( myLabelsShadowCheck, 1, 5 ); - - aTopLayout->addWidget( myFontGrp, aRow, 0 ); - aRow++; - - /******************************************************************************/ - // Labels & Colors - myLabColorGrp = new QGroupBox ( tr( "SMESH_LABELS_COLORS_SCALARBAR" ), this, "myLabColorGrp" ); - myLabColorGrp->setColumnLayout( 0, Qt::Vertical ); - myLabColorGrp->layout()->setSpacing( 0 ); myLabColorGrp->layout()->setMargin( 0 ); - QGridLayout* myLabColorGrpLayout = new QGridLayout( myLabColorGrp->layout() ); - myLabColorGrpLayout->setAlignment( Qt::AlignTop ); - myLabColorGrpLayout->setSpacing( SPACING_SIZE ); myLabColorGrpLayout->setMargin( MARGIN_SIZE ); - - myColorsSpin = new QSpinBox( 2, 256, 1, myLabColorGrp, "myColorsSpin" ); - myColorsSpin->setMinimumWidth( MINIMUM_WIDTH ); - myColorsSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - - myLabelsSpin = new QSpinBox( 2, 65, 1, myLabColorGrp, "myLabelsSpin" ); - myLabelsSpin->setMinimumWidth( MINIMUM_WIDTH ); - myLabelsSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - - myLabColorGrpLayout->addWidget( new QLabel( tr( "SMESH_NUMBEROFCOLORS" ), myLabColorGrp, "myNbColorLab" ), 0, 0 ); - myLabColorGrpLayout->addWidget( myColorsSpin, 0, 1 ); - myLabColorGrpLayout->addWidget( new QLabel( tr( "SMESH_NUMBEROFLABELS" ), myLabColorGrp, "myNbLabsLab" ), 0, 2 ); - myLabColorGrpLayout->addWidget( myLabelsSpin, 0, 3 ); - - aTopLayout->addWidget( myLabColorGrp, aRow, 0 ); - aRow++; - - /******************************************************************************/ - // Orientation - myOrientationGrp = new QButtonGroup ( tr( "SMESH_ORIENTATION" ), this, "myOrientationGrp" ); - myOrientationGrp->setColumnLayout( 0, Qt::Vertical ); - myOrientationGrp->layout()->setSpacing( 0 ); myOrientationGrp->layout()->setMargin( 0 ); - QGridLayout* myOrientationGrpLayout = new QGridLayout( myOrientationGrp->layout() ); - myOrientationGrpLayout->setAlignment( Qt::AlignTop ); - myOrientationGrpLayout->setSpacing( SPACING_SIZE ); myOrientationGrpLayout->setMargin( MARGIN_SIZE ); - - myVertRadioBtn = new QRadioButton( tr( "SMESH_VERTICAL" ), myOrientationGrp, "myVertRadioBtn" ); - myHorizRadioBtn = new QRadioButton( tr( "SMESH_HORIZONTAL" ), myOrientationGrp, "myHorizRadioBtn" ); - myVertRadioBtn->setChecked( true ); - - myOrientationGrpLayout->addWidget( myVertRadioBtn, 0, 0 ); - myOrientationGrpLayout->addWidget( myHorizRadioBtn, 0, 1 ); - - aTopLayout->addWidget( myOrientationGrp, aRow, 0 ); - aRow++; - - /******************************************************************************/ - // Position & Size - myOriginDimGrp = new QGroupBox (tr("SMESH_POSITION_SIZE_SCALARBAR"), this, "myOriginDimGrp"); - myOriginDimGrp->setColumnLayout(0, Qt::Vertical); - myOriginDimGrp->layout()->setSpacing( 0 ); myOriginDimGrp->layout()->setMargin( 0 ); - QGridLayout* myOriginDimGrpLayout = new QGridLayout( myOriginDimGrp->layout() ); - myOriginDimGrpLayout->setAlignment( Qt::AlignTop ); - myOriginDimGrpLayout->setSpacing( SPACING_SIZE ); myOriginDimGrpLayout->setMargin( MARGIN_SIZE ); - - myXSpin = new QtxDblSpinBox (0.0, 1.0, 0.1, myOriginDimGrp); - myXSpin->setMinimumWidth( MINIMUM_WIDTH ); - myXSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - - myYSpin = new QtxDblSpinBox(0.0, 1.0, 0.1, myOriginDimGrp); - myYSpin->setMinimumWidth( MINIMUM_WIDTH ); - myYSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - - myWidthSpin = new QtxDblSpinBox(0.0, 1.0, 0.1, myOriginDimGrp); - myWidthSpin->setMinimumWidth( MINIMUM_WIDTH ); - myWidthSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - - myHeightSpin = new QtxDblSpinBox(0.0, 1.0, 0.1, myOriginDimGrp); - myHeightSpin->setMinimumWidth( MINIMUM_WIDTH ); - myHeightSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - - myOriginDimGrpLayout->addWidget( new QLabel( tr( "SMESH_X_SCALARBAR" ), myOriginDimGrp, "myXLab" ), 0, 0 ); - myOriginDimGrpLayout->addWidget( myXSpin, 0, 1 ); - myOriginDimGrpLayout->addWidget( new QLabel( tr( "SMESH_Y_SCALARBAR" ), myOriginDimGrp, "myYLab" ), 0, 2 ); - myOriginDimGrpLayout->addWidget( myYSpin, 0, 3 ); - myOriginDimGrpLayout->addWidget( new QLabel( tr( "SMESH_WIDTH" ), myOriginDimGrp, "myWidthLab" ), 1, 0 ); - myOriginDimGrpLayout->addWidget( myWidthSpin, 1, 1 ); - myOriginDimGrpLayout->addWidget( new QLabel( tr( "SMESH_HEIGHT" ), myOriginDimGrp, "myHeightLab" ), 1, 2 ); - myOriginDimGrpLayout->addWidget( myHeightSpin, 1, 3 ); - - aTopLayout->addWidget( myOriginDimGrp, aRow, 0 ); - aRow++; - - /***************************************************************/ - // Common buttons - myButtonGrp = new QGroupBox( this, "myButtonGrp" ); - myButtonGrp->setColumnLayout(0, Qt::Vertical ); - myButtonGrp->layout()->setSpacing( 0 ); myButtonGrp->layout()->setMargin( 0 ); - QHBoxLayout* myButtonGrpLayout = new QHBoxLayout( myButtonGrp->layout() ); - myButtonGrpLayout->setAlignment( Qt::AlignTop ); - myButtonGrpLayout->setSpacing( SPACING_SIZE ); myButtonGrpLayout->setMargin( MARGIN_SIZE ); - - myOkBtn = new QPushButton( tr( "SMESH_BUT_OK" ), myButtonGrp, "myOkBtn" ); - myOkBtn->setAutoDefault( TRUE ); myOkBtn->setDefault( TRUE ); - myButtonGrpLayout->addWidget( myOkBtn ); - if ( mySelectionMgr ) { - myApplyBtn = new QPushButton( tr( "SMESH_BUT_APPLY" ), myButtonGrp, "myApplyBtn" ); - myApplyBtn->setAutoDefault( TRUE ); - myButtonGrpLayout->addWidget( myApplyBtn ); - } - myButtonGrpLayout->addStretch(); - myCancelBtn = new QPushButton( tr( "SMESH_BUT_CANCEL" ), myButtonGrp, "myCancelBtn" ); - if ( mySelectionMgr ) - myCancelBtn->setText( tr( "SMESH_BUT_CLOSE" ) ); - myCancelBtn->setAutoDefault( TRUE ); - myButtonGrpLayout->addWidget( myCancelBtn ); - - aTopLayout->addWidget( myButtonGrp, aRow, 0 ); - - /***************************************************************/ - // Init - // --> first init from preferences - SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); - - QColor titleColor (255, 255, 255); - if (mgr && mgr->hasValue("SMESH", "scalar_bar_title_color")) { - QStringList aTColor = - QStringList::split(":", mgr->stringValue("SMESH", "scalar_bar_title_color"), false); - titleColor = QColor((aTColor.count() > 0 ? aTColor[0].toInt() : 255), - (aTColor.count() > 1 ? aTColor[1].toInt() : 255), - (aTColor.count() > 2 ? aTColor[2].toInt() : 255)); - } - myTitleColorBtn->setPaletteBackgroundColor(titleColor); - myTitleFontCombo->setCurrentItem(0); - if (mgr && mgr->hasValue("SMESH", "scalar_bar_title_font")) { - QFont f = mgr->fontValue( "SMESH", "scalar_bar_title_font" ); - if( f.family()=="Arial" ) - myTitleFontCombo->setCurrentItem(0); - if( f.family()=="Courier" ) - myTitleFontCombo->setCurrentItem(1); - if( f.family()=="Times") - myTitleFontCombo->setCurrentItem(2); - - myTitleBoldCheck->setChecked ( f.bold() ); - myTitleItalicCheck->setChecked( f.italic() ); - myTitleShadowCheck->setChecked( f.underline() ); - } - - QColor labelColor (255, 255, 255); - if (mgr && mgr->hasValue("SMESH", "scalar_bar_label_color")) { - QStringList aLColor = - QStringList::split(":", mgr->stringValue("SMESH", "scalar_bar_label_color"), false); - labelColor = QColor((aLColor.count() > 0 ? aLColor[0].toInt() : 255), - (aLColor.count() > 1 ? aLColor[1].toInt() : 255), - (aLColor.count() > 2 ? aLColor[2].toInt() : 255)); - } - myLabelsColorBtn->setPaletteBackgroundColor(labelColor); - myLabelsFontCombo->setCurrentItem(0); - if (mgr && mgr->hasValue("SMESH", "scalar_bar_label_font")) { - QFont f = mgr->fontValue( "SMESH", "scalar_bar_label_font" ); - if (f.family() == "Arial") - myLabelsFontCombo->setCurrentItem(0); - if (f.family() == "Courier") - myLabelsFontCombo->setCurrentItem(1); - if (f.family() == "Times") - myLabelsFontCombo->setCurrentItem(2); - - myLabelsBoldCheck ->setChecked( f.bold() ); - myLabelsItalicCheck->setChecked( f.italic() ); - myLabelsShadowCheck->setChecked( f.underline() ); - } - - int aNbColors = 64; - if (mgr && mgr->hasValue("SMESH", "scalar_bar_num_colors")) - aNbColors = mgr->integerValue("SMESH", "scalar_bar_num_colors"); - myColorsSpin->setValue(aNbColors); - - int aNbLabels = 5; - if (mgr && mgr->hasValue("SMESH", "scalar_bar_num_labels")) - aNbLabels = mgr->integerValue("SMESH", "scalar_bar_num_labels"); - myLabelsSpin->setValue(aNbLabels); - - int aOrientation = ( mgr ? mgr->integerValue( "SMESH", "scalar_bar_orientation", 1 ) : 1 ); - bool isHoriz = ( aOrientation==1 ); - if (aOrientation == 1) - myHorizRadioBtn->setChecked(true); - else - myVertRadioBtn->setChecked(true); - myIniOrientation = myVertRadioBtn->isChecked(); - - QString name = isHoriz ? "scalar_bar_horizontal_%1" : "scalar_bar_vertical_%1"; - if (mgr && mgr->hasValue("SMESH", name.arg( "x" ))) - myIniX = mgr->doubleValue("SMESH", name.arg( "x" )); - else - myIniX = myHorizRadioBtn->isChecked() ? DEF_HOR_X : DEF_VER_X; - - if (mgr && mgr->hasValue("SMESH", name.arg( "y" ))) - myIniY = mgr->doubleValue("SMESH", name.arg( "y" )); - else - myIniY = myHorizRadioBtn->isChecked() ? DEF_HOR_Y : DEF_VER_Y; - - if (mgr && mgr->hasValue("SMESH", name.arg( "width" ))) - myIniW = mgr->doubleValue("SMESH", name.arg( "width" )); - else - myIniW = myHorizRadioBtn->isChecked() ? DEF_HOR_W : DEF_VER_W; - - if (mgr && mgr->hasValue("SMESH", name.arg( "height" ))) - myIniH = mgr->doubleValue("SMESH", name.arg( "height" )); - else - myIniH = myHorizRadioBtn->isChecked() ? DEF_HOR_H : DEF_VER_H; - - setOriginAndSize(myIniX, myIniY, myIniW, myIniH); - - if (mySelectionMgr) { - // --> then init from selection if necessary - onSelectionChanged(); - } - - /***************************************************************/ - // Connect section - connect( myTitleColorBtn, SIGNAL( clicked() ), this, SLOT( onTitleColor() ) ); - connect( myLabelsColorBtn, SIGNAL( clicked() ), this, SLOT( onLabelsColor() ) ); - connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( onOk() ) ); - connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( onCancel() ) ); - connect( myXSpin, SIGNAL( valueChanged( double ) ), this, SLOT( onXYChanged() ) ); - connect( myYSpin, SIGNAL( valueChanged( double ) ), this, SLOT( onXYChanged() ) ); - connect( myOrientationGrp, SIGNAL( clicked( int ) ), this, SLOT( onOrientationChanged() ) ); - if ( mySelectionMgr ) { - connect( myApplyBtn, SIGNAL( clicked() ), this, SLOT( onApply() ) ); - connect( mySelectionMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( onSelectionChanged() ) ); - } - connect( mySMESHGUI, SIGNAL( SignalCloseAllDialogs() ), this, SLOT( onCancel() ) ) ; -} - -//================================================================================================= -/*! - * SMESHGUI_Preferences_ScalarBarDlg::~SMESHGUI_Preferences_ScalarBarDlg - * - * Destructor - */ -//================================================================================================= -SMESHGUI_Preferences_ScalarBarDlg::~SMESHGUI_Preferences_ScalarBarDlg() -{ -} - -//================================================================================================= -/*! - * SMESHGUI_Preferences_ScalarBarDlg::onOk - * - * OK button slot - */ -//================================================================================================= -void SMESHGUI_Preferences_ScalarBarDlg::onOk() -{ - if ( onApply() ) - onCancel(); -} - -//================================================================================================= -/*! - * SMESHGUI_Preferences_ScalarBarDlg::onApply - * - * Apply button slot - */ -//================================================================================================= -bool SMESHGUI_Preferences_ScalarBarDlg::onApply() -{ - if (mySelectionMgr) { - // Scalar Bar properties - if (!myActor) - return false; - vtkScalarBarActor* myScalarBarActor = myActor->GetScalarBarActor(); - - vtkTextProperty* aTitleTextPrp = myScalarBarActor->GetTitleTextProperty(); - QColor aTColor = myTitleColorBtn->paletteBackgroundColor(); - aTitleTextPrp->SetColor( aTColor.red()/255., aTColor.green()/255., aTColor.blue()/255. ); - if ( myTitleFontCombo->currentItem() == 0 ) - aTitleTextPrp->SetFontFamilyToArial(); - else if ( myTitleFontCombo->currentItem() == 1 ) - aTitleTextPrp->SetFontFamilyToCourier(); - else - aTitleTextPrp->SetFontFamilyToTimes(); - aTitleTextPrp->SetBold( myTitleBoldCheck->isChecked() ); - aTitleTextPrp->SetItalic( myTitleItalicCheck->isChecked() ); - aTitleTextPrp->SetShadow( myTitleShadowCheck->isChecked() ); - myScalarBarActor->SetTitleTextProperty( aTitleTextPrp ); - - vtkTextProperty* aLabelsTextPrp = myScalarBarActor->GetLabelTextProperty(); - QColor aLColor = myLabelsColorBtn->paletteBackgroundColor(); - aLabelsTextPrp->SetColor( aLColor.red()/255., aLColor.green()/255., aLColor.blue()/255. ); - if ( myLabelsFontCombo->currentItem() == 0 ) - aLabelsTextPrp->SetFontFamilyToArial(); - else if ( myLabelsFontCombo->currentItem() == 1 ) - aLabelsTextPrp->SetFontFamilyToCourier(); - else - aLabelsTextPrp->SetFontFamilyToTimes(); - aLabelsTextPrp->SetBold( myLabelsBoldCheck->isChecked() ); - aLabelsTextPrp->SetItalic( myLabelsItalicCheck->isChecked() ); - aLabelsTextPrp->SetShadow( myLabelsShadowCheck->isChecked() ); - myScalarBarActor->SetLabelTextProperty( aLabelsTextPrp ); - - myScalarBarActor->SetNumberOfLabels( myLabelsSpin->value() ); - myScalarBarActor->SetMaximumNumberOfColors( myColorsSpin->value() ); - - if ( myHorizRadioBtn->isChecked() ) - myScalarBarActor->SetOrientationToHorizontal(); - else - myScalarBarActor->SetOrientationToVertical(); - - myScalarBarActor->SetPosition( myXSpin->value(), myYSpin->value() ); - myScalarBarActor->SetWidth( myWidthSpin->value() ); - myScalarBarActor->SetHeight( myHeightSpin->value() ); - - double aMin = myMinEdit->text().toDouble(); - double aMax = myMaxEdit->text().toDouble(); - myScalarBarActor->GetLookupTable()->SetRange( aMin, aMax ); - SMESH::RepaintCurrentView(); - } else { - // Scalar Bar preferences - SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); - if (!mgr) return false; - - QColor titleColor = myTitleColorBtn->paletteBackgroundColor(); - mgr->setValue("SMESH", "scalar_bar_title_color", titleColor ); - - QFont f; - if (myTitleFontCombo->currentItem() == 0) - f.setFamily( "Arial" ); - else if (myTitleFontCombo->currentItem() == 1) - f.setFamily( "Courier" ); - else - f.setFamily( "Times"); - - f.setBold( myTitleBoldCheck ->isChecked() ); - f.setItalic( myTitleItalicCheck->isChecked() ); - f.setUnderline( myTitleShadowCheck->isChecked() ); - mgr->setValue( "SMESH", "scalar_bar_title_font", f ); - - QColor labelColor = myLabelsColorBtn->paletteBackgroundColor(); - mgr->setValue("SMESH", "scalar_bar_label_color", labelColor ); - - if (myLabelsFontCombo->currentItem() == 0) - f.setFamily( "Arial" ); - else if ( myLabelsFontCombo->currentItem() == 1 ) - f.setFamily( "Courier"); - else - f.setFamily( "Times"); - - f.setBold( myLabelsBoldCheck ->isChecked() ); - f.setItalic( myLabelsItalicCheck->isChecked() ); - f.setUnderline( myLabelsShadowCheck->isChecked() ); - mgr->setValue( "SMESH", "scalar_bar_label_font", f ); - - mgr->setValue("SMESH", "scalar_bar_num_colors", myColorsSpin->value()); - mgr->setValue("SMESH", "scalar_bar_num_labels", myLabelsSpin->value()); - - mgr->setValue("SMESH", "scalar_bar_orientation", myHorizRadioBtn->isChecked() ? 1 : 0 ); - - QString name = myHorizRadioBtn->isChecked() ? "scalar_bar_horizontal_%1" : "scalar_bar_vertical_%1"; - mgr->setValue("SMESH", name.arg( "x" ), myXSpin->value()); - mgr->setValue("SMESH", name.arg( "y" ), myYSpin->value()); - mgr->setValue("SMESH", name.arg( "width" ), myWidthSpin->value()); - mgr->setValue("SMESH", name.arg( "height" ), myHeightSpin->value()); - } - return true; -} - -//================================================================================================= -/*! - * SMESHGUI_Preferences_ScalarBarDlg::onCancel - * - * Cancel button slot - */ -//================================================================================================= -void SMESHGUI_Preferences_ScalarBarDlg::onCancel() -{ - close(); -} - -//================================================================================================= -/*! - * SMESHGUI_Preferences_ScalarBarDlg::onTitleColor - * - * Change Title color button slot - */ -//================================================================================================= -void SMESHGUI_Preferences_ScalarBarDlg::onTitleColor() -{ - QColor aColor = myTitleColorBtn->paletteBackgroundColor(); - aColor = QColorDialog::getColor( aColor, this ); - if ( aColor.isValid() ) - myTitleColorBtn->setPaletteBackgroundColor( aColor ); -} - -//================================================================================================= -/*! - * SMESHGUI_Preferences_ScalarBarDlg::onLabelsColor - * - * Change Labels color button slot - */ -//================================================================================================= -void SMESHGUI_Preferences_ScalarBarDlg::onLabelsColor() -{ - QColor aColor = myLabelsColorBtn->paletteBackgroundColor(); - aColor = QColorDialog::getColor( aColor, this ); - if ( aColor.isValid() ) - myLabelsColorBtn->setPaletteBackgroundColor( aColor ); -} - -//================================================================================================= -/*! - * SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged - * - * Called when selection changed - */ -//================================================================================================= -void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged() -{ - if (mySelectionMgr) { - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList); - - if (aList.Extent() == 1) { - Handle(SALOME_InteractiveObject) anIO = aList.First(); - if( anIO->hasEntry() ) { - SMESH_Actor* anActor = SMESH::FindActorByEntry(anIO->getEntry()); - if ( anActor && anActor->GetScalarBarActor() && anActor->GetControlMode() != SMESH_Actor::eNone ) { - myActor = anActor; - vtkScalarBarActor* myScalarBarActor = myActor->GetScalarBarActor(); - - if ( myScalarBarActor->GetLookupTable() ) { - float *range = myScalarBarActor->GetLookupTable()->GetRange(); - myMinEdit->setText( QString::number( range[0] ) ); - myMaxEdit->setText( QString::number( range[1] ) ); - } - - vtkTextProperty* aTitleTextPrp = myScalarBarActor->GetTitleTextProperty(); - float aTColor[3]; - aTitleTextPrp->GetColor( aTColor ); - myTitleColorBtn->setPaletteBackgroundColor( QColor( (int)( aTColor[0]*255 ), (int)( aTColor[1]*255 ), (int)( aTColor[2]*255 ) ) ); - myTitleFontCombo->setCurrentItem( aTitleTextPrp->GetFontFamily() ); - myTitleBoldCheck->setChecked( aTitleTextPrp->GetBold() ); - myTitleItalicCheck->setChecked( aTitleTextPrp->GetItalic() ); - myTitleShadowCheck->setChecked( aTitleTextPrp->GetShadow() ); - - vtkTextProperty* aLabelsTextPrp = myScalarBarActor->GetLabelTextProperty(); - float aLColor[3]; - aLabelsTextPrp->GetColor( aLColor ); - myLabelsColorBtn->setPaletteBackgroundColor( QColor( (int)( aLColor[0]*255 ), (int)( aLColor[1]*255 ), (int)( aLColor[2]*255 ) ) ); - myLabelsFontCombo->setCurrentItem( aLabelsTextPrp->GetFontFamily() ); - myLabelsBoldCheck->setChecked( aLabelsTextPrp->GetBold() ); - myLabelsItalicCheck->setChecked( aLabelsTextPrp->GetItalic() ); - myLabelsShadowCheck->setChecked( aLabelsTextPrp->GetShadow() ); - - myLabelsSpin->setValue( myScalarBarActor->GetNumberOfLabels() ); - myColorsSpin->setValue( myScalarBarActor->GetMaximumNumberOfColors() ); - - if ( myScalarBarActor->GetOrientation() == VTK_ORIENT_VERTICAL ) - myVertRadioBtn->setChecked( true ); - else - myHorizRadioBtn->setChecked( true ); - myIniOrientation = myVertRadioBtn->isChecked(); - - myIniX = myScalarBarActor->GetPosition()[0]; - myIniY = myScalarBarActor->GetPosition()[1]; - myIniW = myScalarBarActor->GetWidth(); - myIniH = myScalarBarActor->GetHeight(); - setOriginAndSize( myIniX, myIniY, myIniW, myIniH ); - - myRangeGrp->setEnabled( true ); - myFontGrp->setEnabled( true ); - myLabColorGrp->setEnabled( true ); - myOrientationGrp->setEnabled( true ); - myOriginDimGrp->setEnabled( true ); - myOkBtn->setEnabled( true ); - myApplyBtn->setEnabled( true ); - return; - } - } - } - myActor = 0; - myRangeGrp->setEnabled( false ); - myFontGrp->setEnabled( false ); - myLabColorGrp->setEnabled( false ); - myOrientationGrp->setEnabled( false ); - myOriginDimGrp->setEnabled( false ); - myOkBtn->setEnabled( false ); - myApplyBtn->setEnabled( false ); - } -} - -//================================================================================================= -/*! - * SMESHGUI_Preferences_ScalarBarDlg::closeEvent - * - * Close event handler - */ -//================================================================================================= -void SMESHGUI_Preferences_ScalarBarDlg::closeEvent( QCloseEvent* e ) -{ - if ( mySelectionMgr ) // "Properties" dialog box - myDlg = 0; - QDialog::closeEvent( e ); -} - -//================================================================================================= -/*! - * SMESHGUI_Preferences_ScalarBarDlg::onXYChanged - * - * Called when X, Y values are changed - */ -//================================================================================================= -void SMESHGUI_Preferences_ScalarBarDlg::onXYChanged() -{ - myWidthSpin->setMaxValue( 1.0 - myXSpin->value() ); - myHeightSpin->setMaxValue( 1.0 - myYSpin->value() ); -} - -//================================================================================================= -/*! - * SMESHGUI_Preferences_ScalarBarDlg::setOriginAndSize - * - * Called when X, Y values are changed - */ -//================================================================================================= -void SMESHGUI_Preferences_ScalarBarDlg::setOriginAndSize( const double x, - const double y, - const double w, - const double h ) -{ - blockSignals( true ); - myXSpin->setValue( x ); - myYSpin->setValue( y ); - myWidthSpin->setMaxValue( 1.0 ); - myWidthSpin->setValue( w ); - myHeightSpin->setMaxValue( 1.0 ); - myHeightSpin->setValue( h ); - blockSignals( false ); - onXYChanged(); -} - -//================================================================================================= -/*! - * SMESHGUI_Preferences_ScalarBarDlg::onOrientationChanged - * - * Called when orientation is changed - */ -//================================================================================================= -void SMESHGUI_Preferences_ScalarBarDlg::onOrientationChanged() -{ - int aOrientation = myVertRadioBtn->isChecked(); - if ( aOrientation == myIniOrientation ) - setOriginAndSize( myIniX, myIniY, myIniW, myIniH ); - else - setOriginAndSize( aOrientation ? DEF_VER_X : DEF_HOR_X, - aOrientation ? DEF_VER_Y : DEF_HOR_Y, - aOrientation ? DEF_VER_W : DEF_HOR_W, - aOrientation ? DEF_VER_H : DEF_HOR_H ); -} diff --git a/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.h b/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.h deleted file mode 100644 index 75fb1e4e4..000000000 --- a/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.h +++ /dev/null @@ -1,120 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_Preferences_ScalarBarDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef SMESHGUI_PREFERENCES_SCALARBARDLG_H -#define SMESHGUI_PREFERENCES_SCALARBARDLG_H - -#include - -class QButtonGroup; -class QCheckBox; -class QComboBox; -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class QToolButton; -class QRadioButton; -class QSpinBox; -class SMESHGUI; - -class QtxDblSpinBox; - -class SalomeApp_SelectionMgr; - -class SMESH_Actor; - -class SMESHGUI_Preferences_ScalarBarDlg : public QDialog -{ - Q_OBJECT - -public: - ~SMESHGUI_Preferences_ScalarBarDlg(); - static void ScalarBarPreferences( SMESHGUI* ); - static void ScalarBarProperties ( SMESHGUI* ); - -protected: - SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI*, bool, bool modal = FALSE ); - static SMESHGUI_Preferences_ScalarBarDlg* myDlg; - void closeEvent( QCloseEvent* e ); - void setOriginAndSize( const double x, const double y, const double w, const double h ); - -protected slots: - void onOk(); - bool onApply(); - void onCancel(); - void onTitleColor(); - void onLabelsColor(); - void onSelectionChanged(); - void onXYChanged(); - void onOrientationChanged(); - -private: - SMESHGUI* mySMESHGUI; - SalomeApp_SelectionMgr* mySelectionMgr; - SMESH_Actor* myActor; - double myIniX, myIniY, myIniW, myIniH; - int myIniOrientation; - - QGroupBox* myRangeGrp; - QLineEdit* myMinEdit; - QLineEdit* myMaxEdit; - - QGroupBox* myFontGrp; - QToolButton* myTitleColorBtn; - QComboBox* myTitleFontCombo; - QCheckBox* myTitleBoldCheck; - QCheckBox* myTitleItalicCheck; - QCheckBox* myTitleShadowCheck; - QToolButton* myLabelsColorBtn; - QComboBox* myLabelsFontCombo; - QCheckBox* myLabelsBoldCheck; - QCheckBox* myLabelsItalicCheck; - QCheckBox* myLabelsShadowCheck; - - QGroupBox* myLabColorGrp; - QSpinBox* myColorsSpin; - QSpinBox* myLabelsSpin; - - QButtonGroup* myOrientationGrp; - QRadioButton* myVertRadioBtn; - QRadioButton* myHorizRadioBtn; - - QGroupBox* myOriginDimGrp; - QtxDblSpinBox* myXSpin; - QtxDblSpinBox* myYSpin; - QtxDblSpinBox* myWidthSpin; - QtxDblSpinBox* myHeightSpin; - - QGroupBox* myButtonGrp; - QPushButton* myOkBtn; - QPushButton* myApplyBtn; - QPushButton* myCancelBtn; -}; - -#endif // SMESHGUI_PREFERENCES_SCALARBARDLG_H diff --git a/src/SMESHGUI/SMESHGUI_Preferences_SelectionDlg.cxx b/src/SMESHGUI/SMESHGUI_Preferences_SelectionDlg.cxx deleted file mode 100644 index 7606ccf2b..000000000 --- a/src/SMESHGUI/SMESHGUI_Preferences_SelectionDlg.cxx +++ /dev/null @@ -1,314 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_Preferences_SelectionDlg.cxx -// Author : Natalia KOPNOVA -// Module : SMESH -// $Header$ - -#include "SMESHGUI_Preferences_SelectionDlg.h" -#include "SMESHGUI.h" - -#include "SMESHGUI_Utils.h" - -#include "SUIT_Desktop.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -//================================================================================= -// class : SMESHGUI_LineEdit -// purpose : -//================================================================================= -SMESHGUI_LineEdit::SMESHGUI_LineEdit(QWidget* parent, const char *name) - : QLineEdit(parent, name) -{ -} - -SMESHGUI_LineEdit::SMESHGUI_LineEdit(const QString& text, QWidget* parent, const char *name) - : QLineEdit(text, parent, name) -{ -} - -void SMESHGUI_LineEdit::focusOutEvent(QFocusEvent* e) -{ - const QValidator* aVal = validator(); - QString aText = text(); - int aCurPos = cursorPosition(); - if (aVal && aVal->validate(aText, aCurPos) != QValidator::Acceptable) { - QString aValid = aText; - aVal->fixup(aValid); - if (aText != aValid) { - setText(aValid); - update(); - return; - } - } - QLineEdit::focusOutEvent(e); -} - - -//================================================================================= -// class : SMESHGUI_DoubleValidator -// purpose : -//================================================================================= -SMESHGUI_DoubleValidator::SMESHGUI_DoubleValidator(QObject * parent, const char *name) - : QDoubleValidator(parent, name) -{ -} - -SMESHGUI_DoubleValidator::SMESHGUI_DoubleValidator(double bottom, double top, int decimals, - QObject * parent, const char *name) - : QDoubleValidator(bottom, top, decimals, parent, name) -{ -} - -void SMESHGUI_DoubleValidator::fixup(QString& theText) const -{ - bool ok; - double aValue = theText.toDouble(&ok); - if (ok) { - if (aValue < bottom()) - theText = QString::number(bottom(), 'g', decimals()); - if (aValue > top()) - theText = QString::number(top(), 'g', decimals()); - } -} - - -//================================================================================= -// class : SMESHGUI_Preferences_SelectionDlg() -// purpose : -//================================================================================= -SMESHGUI_Preferences_SelectionDlg::SMESHGUI_Preferences_SelectionDlg( SMESHGUI* theModule, const char* name ) - : QDialog( SMESH::GetDesktop( theModule ), name, true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), - mySMESHGUI( theModule ) -{ - if ( !name ) setName( "SMESHGUI_Preferences_SelectionDlg" ); - setCaption( tr( "SMESH_PREF_SELECTION" ) ); - - QVBoxLayout* aMainLayout = new QVBoxLayout(this, 11, 6); - QLabel* aLabel; - - /***************************************************************/ - QGroupBox* aSelectBox = new QGroupBox(4, Qt::Horizontal, this, "selection"); - aSelectBox->setTitle(tr("SMESH_SELECTION")); - - aLabel = new QLabel(aSelectBox, "selection color label"); - aLabel->setText(tr("SMESH_OUTLINE_COLOR")); - myColor[2] = new QPushButton(aSelectBox, "outline color"); - myColor[2]->setFixedSize(QSize(25, 25)); - - aSelectBox->addSpace(0); - aSelectBox->addSpace(0); - - aLabel = new QLabel(aSelectBox, "selection color label"); - aLabel->setText(tr("SMESH_ELEMENTS_COLOR")); - myColor[1] = new QPushButton(aSelectBox, "elements color"); - myColor[1]->setFixedSize(QSize(25, 25)); - - aLabel = new QLabel(aSelectBox, "selection width label"); - aLabel->setText(tr("SMESH_WIDTH")); - myWidth[1] = new QSpinBox(0, 5, 1, aSelectBox, "selection width"); - myWidth[1]->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - myWidth[1]->setButtonSymbols(QSpinBox::PlusMinus); - myWidth[1]->setMinimumWidth(50); - - /***************************************************************/ - QGroupBox* aPreSelectBox = new QGroupBox(1, Qt::Vertical, this, "preselection"); - aPreSelectBox->setTitle(tr("SMESH_PRESELECTION")); - - aLabel = new QLabel(aPreSelectBox, "preselection color label"); - aLabel->setText(tr("SMESH_HILIGHT_COLOR")); - myColor[0] = new QPushButton(aPreSelectBox, "preselection color"); - myColor[0]->setFixedSize(QSize(25, 25)); - - aLabel = new QLabel(aPreSelectBox, "preselection width label"); - aLabel->setText(tr("SMESH_WIDTH")); - myWidth[0] = new QSpinBox(0, 5, 1, aPreSelectBox, "preselection width"); - myWidth[0]->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - myWidth[0]->setButtonSymbols(QSpinBox::PlusMinus); - myWidth[0]->setMinimumWidth(50); - - /***************************************************************/ - QGroupBox* aPrecisionBox = new QGroupBox(1, Qt::Vertical, this, "preselection"); - aPrecisionBox->setTitle(tr("SMESH_PRECISION")); - QDoubleValidator* aValidator = new SMESHGUI_DoubleValidator(aPrecisionBox); - aValidator->setBottom(0.001); - aValidator->setDecimals(6); - - aLabel = new QLabel(aPrecisionBox, "node tol label"); - aLabel->setText(tr("SMESH_NODES")); - myPrecision[0] = new SMESHGUI_LineEdit(aPrecisionBox, "node precision"); - myPrecision[0]->setValidator(aValidator); - - aLabel = new QLabel(aPrecisionBox, "item tol label"); - aLabel->setText(tr("SMESH_ELEMENTS")); - myPrecision[1] = new SMESHGUI_LineEdit(aPrecisionBox, "item precision"); - myPrecision[1]->setValidator(aValidator); - - /***************************************************************/ - QFrame* aButtons = new QFrame(this, "button box"); - aButtons->setFrameStyle(QFrame::Box | QFrame::Sunken); - QHBoxLayout* aBtnLayout = new QHBoxLayout(aButtons, 11, 6); - aBtnLayout->setAutoAdd(false); - - QPushButton* aOKBtn = new QPushButton(aButtons, "ok"); - aOKBtn->setText(tr("SMESH_BUT_OK")); - aOKBtn->setAutoDefault(true); - aOKBtn->setDefault(true); - QPushButton* aCloseBtn = new QPushButton(aButtons, "close"); - aCloseBtn->setText(tr("SMESH_BUT_CLOSE")); - aCloseBtn->setAutoDefault(true); - - aBtnLayout->addWidget(aOKBtn); - aBtnLayout->addStretch(); - aBtnLayout->addWidget(aCloseBtn); - - /***************************************************************/ - aMainLayout->addWidget(aSelectBox); - aMainLayout->addWidget(aPreSelectBox); - aMainLayout->addWidget(aPrecisionBox); - aMainLayout->addWidget(aButtons); - - for (int i = 0; i < 3; i++) - connect(myColor[i], SIGNAL(clicked()), this, SLOT(onSelectColor())); - - connect(aOKBtn, SIGNAL(clicked()), this, SLOT(accept())); - connect(aCloseBtn, SIGNAL(clicked()), this, SLOT(reject())); - - /* Move widget on the botton right corner of main widget */ - int x, y ; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); -} - -//================================================================================= -// function : ~SMESHGUI_Preferences_SelectionDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_Preferences_SelectionDlg::~SMESHGUI_Preferences_SelectionDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_SelectionDlg::closeEvent( QCloseEvent* e ) -{ - reject(); -} - -//================================================================================= -// function : onSelectColor() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_SelectionDlg::onSelectColor() -{ - QPushButton* aSender = (QPushButton*)sender(); - QColor aColor = aSender->palette().active().button(); - aColor = QColorDialog::getColor(aColor, this); - if (aColor.isValid()) { - QPalette aPal = aSender->palette(); - aPal.setColor(QColorGroup::Button, aColor); - aSender->setPalette(aPal); - } -} - -//================================================================================= -// function : SetColor() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_SelectionDlg::SetColor(int type, QColor color) -{ - if (type > 0 && type <= 3) { - QPalette aPal = myColor[type-1]->palette(); - aPal.setColor(QColorGroup::Button, color); - myColor[type-1]->setPalette(aPal); - } -} - -//================================================================================= -// function : GetColor() -// purpose : -//================================================================================= -QColor SMESHGUI_Preferences_SelectionDlg::GetColor(int type) -{ - QColor aColor; - if (type > 0 && type <= 3) - aColor = myColor[type-1]->palette().active().button(); - return aColor; -} - -//================================================================================= -// function : SetWidth() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_SelectionDlg::SetWidth(int type, int value) -{ - if (type > 0 && type <= 2) - myWidth[type-1]->setValue(value); -} - -//================================================================================= -// function : GetWidth() -// purpose : -//================================================================================= -int SMESHGUI_Preferences_SelectionDlg::GetWidth(int type) -{ - if (type > 0 && type <= 2) - return myWidth[type-1]->value(); - return 0; -} - -//================================================================================= -// function : SetPrecision() -// purpose : -//================================================================================= -void SMESHGUI_Preferences_SelectionDlg::SetPrecision(int type, double value) -{ - if (type > 0 && type <= 2) - myPrecision[type-1]->setText(QString::number(value)); -} - -//================================================================================= -// function : GetPrecision() -// purpose : -//================================================================================= -double SMESHGUI_Preferences_SelectionDlg::GetPrecision(int type) -{ - if (type > 0 && type <= 2) - return myPrecision[type-1]->text().toDouble(); - return 0; -} diff --git a/src/SMESHGUI/SMESHGUI_Preferences_SelectionDlg.h b/src/SMESHGUI/SMESHGUI_Preferences_SelectionDlg.h deleted file mode 100644 index 07b7a644a..000000000 --- a/src/SMESHGUI/SMESHGUI_Preferences_SelectionDlg.h +++ /dev/null @@ -1,99 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platorm.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_Preferences_SelectionDlg.h -// Author : Natalia KOPNOVA -// Module : SMESH -// $Header$ - -#ifndef SMESHGUI_PREFERENCES_SELECTIONDLG_H -#define SMESHGUI_PREFERENCES_SELECTIONDLG_H - - -// QT Includes -#include -#include -#include - -class QPushButton; -class QSpinBox; -class QColor; -class SMESHGUI; - -class SMESHGUI_LineEdit : public QLineEdit -{ - Q_OBJECT - - public: - SMESHGUI_LineEdit(QWidget* parent, const char* name = 0); - SMESHGUI_LineEdit(const QString& text, QWidget* parent, const char* name = 0); - - ~SMESHGUI_LineEdit() {}; - - protected: - void focusOutEvent(QFocusEvent* e); -}; - -class SMESHGUI_DoubleValidator : public QDoubleValidator -{ - Q_OBJECT - - public: - SMESHGUI_DoubleValidator(QObject* parent, const char* name = 0); - SMESHGUI_DoubleValidator(double bottom, double top, int decimals, - QObject* parent, const char* name = 0); - - ~SMESHGUI_DoubleValidator() {}; - - void fixup(QString& text) const; -}; - -class SMESHGUI_Preferences_SelectionDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_Preferences_SelectionDlg( SMESHGUI*, const char* name = 0 ); - ~SMESHGUI_Preferences_SelectionDlg(); - - void SetColor(int type, QColor color); - QColor GetColor(int type); - void SetWidth(int type, int value); - int GetWidth(int type); - void SetPrecision(int type, double value); - double GetPrecision(int type); - -private: - void closeEvent( QCloseEvent* e ) ; - -private slots: - void onSelectColor(); - -private: - SMESHGUI* mySMESHGUI; - QPushButton* myColor[3]; - QSpinBox* myWidth[2]; - QLineEdit* myPrecision[2]; -}; - -#endif // SMESHGUI_PREFERENCES_SELECTIONDLG_H diff --git a/src/SMESHGUI/SMESHGUI_RemoveElementsDlg.h b/src/SMESHGUI/SMESHGUI_RemoveElementsDlg.h deleted file mode 100644 index 4c9b62b1b..000000000 --- a/src/SMESHGUI/SMESHGUI_RemoveElementsDlg.h +++ /dev/null @@ -1,121 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_RemoveElementsDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef DIALOGBOX_REMOVE_ELEMENTS_H -#define DIALOGBOX_REMOVE_ELEMENTS_H - -#include "SalomeApp_SelectionMgr.h" - -// QT Includes -#include -#include - -class QVBoxLayout; -class QHBoxLayout; -class QGridLayout; -class QButtonGroup; -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class QRadioButton; - -class SMESHGUI; -class SMESH_Actor; -class SVTK_Selector; -class SVTK_ViewWindow; - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -//================================================================================= -// class : SMESHGUI_RemoveElementsDlg -// purpose : -//================================================================================= -class SMESHGUI_RemoveElementsDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_RemoveElementsDlg(SMESHGUI* theModule, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0); - ~SMESHGUI_RemoveElementsDlg(); - -private: - - void Init() ; - void closeEvent( QCloseEvent* e ) ; - void enterEvent ( QEvent * ) ; /* mouse enter the QWidget */ - void hideEvent ( QHideEvent * ); /* ESC key */ - - SalomeApp_SelectionMgr* mySelectionMgr; - SVTK_Selector* mySelector; - SMESHGUI* mySMESHGUI; - - int myNbOkElements; /* to check when arguments is defined */ - int myConstructorId; /* Current constructor id = radio button id */ - QLineEdit* myEditCurrentArgument; /* Current LineEdit */ - - bool myBusy; - SMESH::SMESH_Mesh_var myMesh; - SMESH_Actor* myActor; - - QButtonGroup* GroupConstructors; - QRadioButton* Constructor1; - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - QGroupBox* GroupC1; - QLabel* TextLabelC1A1; - QPushButton* SelectButtonC1A1; - QLineEdit* LineEditC1A1; - -private slots: - - void ConstructorsClicked(int constructorId); - void ClickOnOk(); - void ClickOnCancel(); - void ClickOnApply(); - void SetEditCurrentArgument() ; - void SelectionIntoArgument() ; - void DeactivateActiveDialog() ; - void ActivateThisDialog() ; - void onTextChange(const QString&); - -protected: - QGridLayout* SMESHGUI_RemoveElementsDlgLayout; - QGridLayout* GroupConstructorsLayout; - QGridLayout* GroupButtonsLayout; - QGridLayout* GroupC1Layout; -}; - -#endif // DIALOGBOX_REMOVE_ELEMENTS_H diff --git a/src/SMESHGUI/SMESHGUI_RemoveNodesDlg.h b/src/SMESHGUI/SMESHGUI_RemoveNodesDlg.h deleted file mode 100644 index e0a89b00d..000000000 --- a/src/SMESHGUI/SMESHGUI_RemoveNodesDlg.h +++ /dev/null @@ -1,124 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_RemoveNodesDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef DIALOGBOX_REMOVE_NODES_H -#define DIALOGBOX_REMOVE_NODES_H - -#include "SalomeApp_SelectionMgr.h" - -// QT Includes -#include -#include - -// Open CASCADE Includes -#include - -class QVBoxLayout; -class QHBoxLayout; -class QGridLayout; -class QButtonGroup; -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class QRadioButton; - -class SMESHGUI; -class SMESH_Actor; -class SVTK_Selector; -class SVTK_ViewWindow; - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -//================================================================================= -// class : SMESHGUI_RemoveNodesDlg -// purpose : -//================================================================================= -class SMESHGUI_RemoveNodesDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_RemoveNodesDlg(SMESHGUI* theModule, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0); - ~SMESHGUI_RemoveNodesDlg(); - -private: - - void Init() ; - void closeEvent( QCloseEvent* e ) ; - void enterEvent ( QEvent * ) ; /* mouse enter the QWidget */ - void hideEvent ( QHideEvent * ); /* ESC key */ - - SalomeApp_SelectionMgr* mySelectionMgr; - SVTK_Selector* mySelector; - SMESHGUI* mySMESHGUI; - - int myNbOkNodes; /* to check when arguments is defined */ - int myConstructorId; /* Current constructor id = radio button id */ - QLineEdit* myEditCurrentArgument; /* Current LineEdit */ - - bool myBusy; - SMESH::SMESH_Mesh_var myMesh; - SMESH_Actor* myActor; - - QButtonGroup* GroupConstructors; - QRadioButton* Constructor1; - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - QGroupBox* GroupC1; - QLabel* TextLabelC1A1; - QPushButton* SelectButtonC1A1; - QLineEdit* LineEditC1A1; - -private slots: - - void ConstructorsClicked(int constructorId); - void ClickOnOk(); - void ClickOnCancel(); - void ClickOnApply(); - void SetEditCurrentArgument() ; - void SelectionIntoArgument() ; - void DeactivateActiveDialog() ; - void ActivateThisDialog() ; - void onTextChange(const QString&); - -protected: - QGridLayout* SMESHGUI_RemoveNodesDlgLayout; - QGridLayout* GroupConstructorsLayout; - QGridLayout* GroupButtonsLayout; - QGridLayout* GroupC1Layout; -}; - -#endif // DIALOGBOX_REMOVE_NODES_H diff --git a/src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx b/src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx deleted file mode 100644 index be16e7ede..000000000 --- a/src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx +++ /dev/null @@ -1,421 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_RenumberingDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#include "SMESHGUI_RenumberingDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" - -#include "SMESH_Actor.h" -#include "SMESH_TypeFilter.hxx" -#include "SMDS_Mesh.hxx" - -#include "SUIT_Desktop.h" -#include "SUIT_Session.h" - -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -//================================================================================= -// class : SMESHGUI_RenumberingDlg() -// purpose : -//================================================================================= -SMESHGUI_RenumberingDlg::SMESHGUI_RenumberingDlg( SMESHGUI* theModule, const char* name, - const int unit, 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 ) ) -{ - myUnit = unit; - - if (!name) - setName("SMESHGUI_RenumberingDlg"); - resize(303, 185); - - QPixmap image0; - QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("SMESH",tr("ICON_SELECT"))); - - if (unit == 0) { - image0 = QPixmap(SUIT_Session::session()->resourceMgr()->loadPixmap("SMESH",tr("ICON_DLG_RENUMBERING_NODES"))); - setCaption(tr("SMESH_RENUMBERING_NODES_TITLE" )); - } - else if (unit == 1) { - image0 = QPixmap(SUIT_Session::session()->resourceMgr()->loadPixmap("SMESH",tr("ICON_DLG_RENUMBERING_ELEMENTS"))); - setCaption(tr("SMESH_RENUMBERING_ELEMENTS_TITLE" )); - } - - setSizeGripEnabled(TRUE); - SMESHGUI_RenumberingDlgLayout = new QGridLayout(this); - SMESHGUI_RenumberingDlgLayout->setSpacing(6); - SMESHGUI_RenumberingDlgLayout->setMargin(11); - - /***************************************************************/ - GroupConstructors = new QButtonGroup(this, "GroupConstructors"); - if (unit == 0) - GroupConstructors->setTitle(tr("SMESH_NODES" )); - else if (unit == 1) - GroupConstructors->setTitle(tr("SMESH_ELEMENTS" )); - GroupConstructors->setExclusive(TRUE); - GroupConstructors->setColumnLayout(0, Qt::Vertical); - GroupConstructors->layout()->setSpacing(0); - GroupConstructors->layout()->setMargin(0); - GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout()); - GroupConstructorsLayout->setAlignment(Qt::AlignTop); - GroupConstructorsLayout->setSpacing(6); - GroupConstructorsLayout->setMargin(11); - Constructor1 = new QRadioButton(GroupConstructors, "Constructor1"); - Constructor1->setText(tr("" )); - Constructor1->setPixmap(image0); - Constructor1->setChecked(TRUE); - Constructor1->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, Constructor1->sizePolicy().hasHeightForWidth())); - Constructor1->setMinimumSize(QSize(50, 0)); - GroupConstructorsLayout->addWidget(Constructor1, 0, 0); - QSpacerItem* spacer = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupConstructorsLayout->addItem(spacer, 0, 1); - SMESHGUI_RenumberingDlgLayout->addWidget(GroupConstructors, 0, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - GroupButtons->setTitle(tr("" )); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_APPLY" )); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - buttonOk = new QPushButton(GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_OK" )); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - SMESHGUI_RenumberingDlgLayout->addWidget(GroupButtons, 2, 0); - - /***************************************************************/ - GroupMesh = new QGroupBox(this, "GroupMesh"); - GroupMesh->setTitle(tr("SMESH_RENUMBERING" )); - GroupMesh->setMinimumSize(QSize(0, 0)); - GroupMesh->setFrameShape(QGroupBox::Box); - GroupMesh->setFrameShadow(QGroupBox::Sunken); - 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); - TextLabelMesh = new QLabel(GroupMesh, "TextLabelMesh"); - TextLabelMesh->setText(tr("SMESH_MESH")); - TextLabelMesh->setMinimumSize(QSize(50, 0)); - TextLabelMesh->setFrameShape(QLabel::NoFrame); - TextLabelMesh->setFrameShadow(QLabel::Plain); - GroupMeshLayout->addWidget(TextLabelMesh, 0, 0); - SelectButton = new QPushButton(GroupMesh, "SelectButton"); - SelectButton->setText(tr("" )); - SelectButton->setPixmap(image1); - SelectButton->setToggleButton(FALSE); - GroupMeshLayout->addWidget(SelectButton, 0, 1); - LineEditMesh = new QLineEdit(GroupMesh, "LineEditMesh"); - LineEditMesh->setReadOnly(true); - GroupMeshLayout->addWidget(LineEditMesh, 0, 2); - SMESHGUI_RenumberingDlgLayout->addWidget(GroupMesh, 1, 0); - - Init(); /* Initialisations */ -} - -//================================================================================= -// function : ~SMESHGUI_RenumberingDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_RenumberingDlg::~SMESHGUI_RenumberingDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_RenumberingDlg::Init() -{ - GroupMesh->show(); - myConstructorId = 0; - Constructor1->setChecked(TRUE); - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - myMesh = SMESH::SMESH_Mesh::_nil(); - - myMeshFilter = new SMESH_TypeFilter (MESH); - - /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect(GroupConstructors, SIGNAL(clicked(int)), SLOT(ConstructorsClicked(int))); - - connect(SelectButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - /* to close dialog if study change */ - connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); - - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); /* displays Dialog */ - - myEditCurrentArgument = LineEditMesh; - LineEditMesh->setFocus(); - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myMeshFilter); - - SelectionIntoArgument(); -} - -//================================================================================= -// function : ConstructorsClicked() -// purpose : Radio button management -//================================================================================= -void SMESHGUI_RenumberingDlg::ConstructorsClicked (int) -{ -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -void SMESHGUI_RenumberingDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return; - - if (!myMesh->_is_nil()) - { - try - { - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - SMESH_Actor* anActor = SMESH::FindActorByObject(myMesh); - bool isUnitsLabeled = false; - - if (myUnit == 0 && anActor) { - isUnitsLabeled = anActor->GetPointsLabeled(); - if (isUnitsLabeled) anActor->SetPointsLabeled(false); - } - else if (myUnit == 1 && anActor) { - isUnitsLabeled = anActor->GetCellsLabeled(); - if (isUnitsLabeled) anActor->SetCellsLabeled(false); - } - - QApplication::setOverrideCursor(Qt::waitCursor); - if (myUnit == 0) { - aMeshEditor->RenumberNodes(); - if (isUnitsLabeled && anActor) anActor->SetPointsLabeled(true); - } - else if (myUnit == 1) { - aMeshEditor->RenumberElements(); - if (isUnitsLabeled && anActor) anActor->SetCellsLabeled(true); - } - QApplication::restoreOverrideCursor(); - } - catch(...) - { - } - - mySelectionMgr->clearSelected(); - SMESH::UpdateView(); - } -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_RenumberingDlg::ClickOnOk() -{ - ClickOnApply(); - ClickOnCancel(); -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_RenumberingDlg::ClickOnCancel() -{ - mySelectionMgr->clearSelected(); - mySelectionMgr->clearFilters(); - disconnect(mySelectionMgr, 0, this, 0); - mySMESHGUI->ResetState(); - reject(); -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_RenumberingDlg::SelectionIntoArgument() -{ - if (!GroupButtons->isEnabled()) // inactive - return; - - QString aString = ""; - - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList); - int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - - if (myEditCurrentArgument == LineEditMesh) { - // mesh - if (nbSel != 1) { - myMesh = SMESH::SMESH_Mesh::_nil(); - aString = ""; - } else { - Handle(SALOME_InteractiveObject) IO = aList.First(); - myMesh = SMESH::IObjectToInterface(IO); - if (myMesh->_is_nil()) - aString = ""; - } - } - - myEditCurrentArgument->setText(aString); - - bool isEnabled = (!myMesh->_is_nil()); - buttonOk->setEnabled(isEnabled); - buttonApply->setEnabled(isEnabled); -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_RenumberingDlg::SetEditCurrentArgument() -{ - QPushButton* send = (QPushButton*)sender(); - switch (myConstructorId) - { - case 0: /* default constructor */ - { - if(send == SelectButton) { - LineEditMesh->setFocus(); - myEditCurrentArgument = LineEditMesh; - } - SelectionIntoArgument(); - break; - } - } -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_RenumberingDlg::DeactivateActiveDialog() -{ - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); - GroupMesh->setEnabled(false); - GroupButtons->setEnabled(false); - mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_RenumberingDlg::ActivateThisDialog() -{ - /* Emit a signal to deactivate the active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupConstructors->setEnabled(true); - GroupMesh->setEnabled(true); - GroupButtons->setEnabled(true); - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - SelectionIntoArgument(); -} - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_RenumberingDlg::enterEvent(QEvent* e) -{ - if (GroupConstructors->isEnabled()) - return; - ActivateThisDialog(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_RenumberingDlg::closeEvent(QCloseEvent* e) -{ - /* same than click on cancel button */ - this->ClickOnCancel(); -} - -//======================================================================= -//function : hideEvent -//purpose : caused by ESC key -//======================================================================= -void SMESHGUI_RenumberingDlg::hideEvent (QHideEvent * e) -{ - if (!isMinimized()) - ClickOnCancel(); -} diff --git a/src/SMESHGUI/SMESHGUI_RenumberingDlg.h b/src/SMESHGUI/SMESHGUI_RenumberingDlg.h deleted file mode 100644 index 22e5fc617..000000000 --- a/src/SMESHGUI/SMESHGUI_RenumberingDlg.h +++ /dev/null @@ -1,115 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_RenumberingDlg.h -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#ifndef DIALOGBOX_RENUMBERING_H -#define DIALOGBOX_RENUMBERING_H - -#include "SalomeApp_SelectionMgr.h" -//#include "SMESH_TypeFilter.hxx" -#include "SUIT_SelectionFilter.h" - -// QT Includes -#include - -// Open CASCADE Includes - -class QGridLayout; -class QButtonGroup; -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class QRadioButton; -class SMESHGUI; - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -//================================================================================= -// class : SMESHGUI_RenumberingDlg -// purpose : If the unit == 0 nodes will be renumbered, if the unit == 1 the elements will. -//================================================================================= -class SMESHGUI_RenumberingDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_RenumberingDlg( SMESHGUI*, - const char* name = 0, - const int unit = 0, - bool modal = FALSE, - WFlags fl = 0); - ~SMESHGUI_RenumberingDlg(); - -private: - void Init(); - void closeEvent( QCloseEvent* e ) ; - void enterEvent ( QEvent * ) ; /* mouse enter the QWidget */ - void hideEvent ( QHideEvent * ); /* ESC key */ - - SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ - SalomeApp_SelectionMgr* mySelectionMgr; /* User shape selection */ - int myConstructorId; /* Current constructor id = radio button id */ - QLineEdit* myEditCurrentArgument; /* Current LineEdit */ - - int myUnit; - SMESH::SMESH_Mesh_var myMesh; - //Handle(SMESH_TypeFilter) myMeshFilter; - SUIT_SelectionFilter* myMeshFilter; - - QButtonGroup* GroupConstructors; - QRadioButton* Constructor1; - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - QGroupBox* GroupMesh; - QLabel* TextLabelMesh; - QPushButton* SelectButton; - QLineEdit* LineEditMesh; - -private slots: - - void ConstructorsClicked(int constructorId); - void ClickOnOk(); - void ClickOnCancel(); - void ClickOnApply(); - void SetEditCurrentArgument() ; - void SelectionIntoArgument() ; - void DeactivateActiveDialog() ; - void ActivateThisDialog() ; - -protected: - QGridLayout* SMESHGUI_RenumberingDlgLayout; - QGridLayout* GroupConstructorsLayout; - QGridLayout* GroupButtonsLayout; - QGridLayout* GroupMeshLayout; -}; - -#endif // DIALOGBOX_RENUMBERING_H diff --git a/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx b/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx deleted file mode 100644 index 2f15f1882..000000000 --- a/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx +++ /dev/null @@ -1,910 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_RevolutionDlg.cxx -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#include "SMESHGUI_RevolutionDlg.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 "SUIT_ResourceMgr.h" - -#include "SVTK_ViewModel.h" -#include "SVTK_ViewWindow.h" -#include "SVTK_Selector.h" -#include "SVTK_Selection.h" -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// OCCT Includes -#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) - -using namespace std; - -//================================================================================= -// class : SMESHGUI_RevolutionDlg() -// purpose : -//================================================================================= -SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( 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 ) ) -{ - SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); - QPixmap image0 ( mgr->loadPixmap("SMESH", tr("ICON_DLG_EDGE"))); - QPixmap image1 ( mgr->loadPixmap("SMESH", tr("ICON_DLG_TRIANGLE"))); - QPixmap image2 ( mgr->loadPixmap("SMESH", tr("ICON_SELECT"))); - - if (!name) - setName("SMESHGUI_RevolutionDlg"); - resize(303, 185); - setCaption(tr("REVOLUTION_AROUND_AXIS")); - setSizeGripEnabled(TRUE); - SMESHGUI_RevolutionDlgLayout = new QGridLayout(this); - SMESHGUI_RevolutionDlgLayout->setSpacing(6); - SMESHGUI_RevolutionDlgLayout->setMargin(11); - - /***************************************************************/ - GroupConstructors = new QButtonGroup(this, "GroupConstructors"); - GroupConstructors->setTitle(tr("SMESH_REVOLUTION" )); - GroupConstructors->setExclusive(TRUE); - GroupConstructors->setColumnLayout(0, Qt::Vertical); - GroupConstructors->layout()->setSpacing(0); - GroupConstructors->layout()->setMargin(0); - GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout()); - GroupConstructorsLayout->setAlignment(Qt::AlignTop); - GroupConstructorsLayout->setSpacing(6); - GroupConstructorsLayout->setMargin(11); - RadioButton1= new QRadioButton(GroupConstructors, "RadioButton1"); - RadioButton1->setText(tr("" )); - RadioButton1->setPixmap(image0); - GroupConstructorsLayout->addWidget(RadioButton1, 0, 0); - RadioButton2= new QRadioButton(GroupConstructors, "RadioButton2"); - RadioButton2->setText(tr("" )); - RadioButton2->setPixmap(image1); - GroupConstructorsLayout->addWidget(RadioButton2, 0, 2); - SMESHGUI_RevolutionDlgLayout->addWidget(GroupConstructors, 0, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - GroupButtons->setTitle(tr("" )); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_APPLY" )); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - buttonOk = new QPushButton(GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_OK" )); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - SMESHGUI_RevolutionDlgLayout->addWidget(GroupButtons, 2, 0); - - /***************************************************************/ - GroupArguments = new QGroupBox(this, "GroupArguments"); - GroupArguments->setTitle(tr("REVOLUTION_1D")); - 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); - - SelectElementsButton = new QPushButton(GroupArguments, "SelectElementsButton"); - SelectElementsButton->setText(tr("" )); - SelectElementsButton->setPixmap(image2); - SelectElementsButton->setToggleButton(FALSE); - GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1); - - LineEditElements = new QLineEdit(GroupArguments, "LineEditElements"); - LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator")); - GroupArgumentsLayout->addWidget(LineEditElements, 0, 2); - - // Control for the whole mesh selection - CheckBoxMesh = new QCheckBox(GroupArguments, "CheckBoxMesh"); - CheckBoxMesh->setText(tr("SMESH_SELECT_WHOLE_MESH" )); - GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 3); - - // Controls for axis defining - GroupAxis = new QGroupBox(GroupArguments, "GroupAxis"); - GroupAxis->setTitle(tr("SMESH_AXIS")); - GroupAxis->setColumnLayout(0, Qt::Vertical); - GroupAxis->layout()->setSpacing(0); - GroupAxis->layout()->setMargin(0); - QGridLayout* GroupAxisLayout = new QGridLayout(GroupAxis->layout()); - GroupAxisLayout->setAlignment(Qt::AlignTop); - GroupAxisLayout->setSpacing(6); - GroupAxisLayout->setMargin(11); - - TextLabelPoint = new QLabel(GroupAxis, "TextLabelPoint"); - TextLabelPoint->setText(tr("SMESH_POINT")); - GroupAxisLayout->addWidget(TextLabelPoint, 0, 0); - - SelectPointButton = new QPushButton(GroupAxis, "SelectPointButton"); - SelectPointButton->setPixmap(image2); - GroupAxisLayout->addWidget(SelectPointButton, 0, 1); - - TextLabelX = new QLabel(GroupAxis, "TextLabelX"); - TextLabelX->setText(tr("SMESH_X")); - GroupAxisLayout->addWidget(TextLabelX, 0, 2); - - SpinBox_X = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_X"); - GroupAxisLayout->addWidget(SpinBox_X, 0, 3); - - TextLabelY = new QLabel(GroupAxis, "TextLabelY"); - TextLabelY->setText(tr("SMESH_Y")); - GroupAxisLayout->addWidget(TextLabelY, 0, 4); - - SpinBox_Y = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_Y"); - GroupAxisLayout->addWidget(SpinBox_Y, 0, 5); - - TextLabelZ = new QLabel(GroupAxis, "TextLabelZ"); - TextLabelZ->setText(tr("SMESH_Z")); - GroupAxisLayout->addWidget(TextLabelZ, 0, 6); - - SpinBox_Z = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_Z"); - GroupAxisLayout->addWidget(SpinBox_Z, 0, 7); - - TextLabelVector = new QLabel(GroupAxis, "TextLabelVector"); - TextLabelVector->setText(tr("SMESH_VECTOR")); - GroupAxisLayout->addWidget(TextLabelVector, 1, 0); - - SelectVectorButton = new QPushButton(GroupAxis, "SelectVectorButton"); - SelectVectorButton->setPixmap(image2); - GroupAxisLayout->addWidget(SelectVectorButton, 1, 1); - - TextLabelDX = new QLabel(GroupAxis, "TextLabelDX"); - TextLabelDX->setText(tr("SMESH_DX")); - GroupAxisLayout->addWidget(TextLabelDX, 1, 2); - - SpinBox_DX = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_DX"); - GroupAxisLayout->addWidget(SpinBox_DX, 1, 3); - - TextLabelDY = new QLabel(GroupAxis, "TextLabelDY"); - TextLabelDY->setText(tr("SMESH_DY")); - GroupAxisLayout->addWidget(TextLabelDY, 1, 4); - - SpinBox_DY = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_DY"); - GroupAxisLayout->addWidget(SpinBox_DY, 1, 5); - - TextLabelDZ = new QLabel(GroupAxis, "TextLabelDZ"); - TextLabelDZ->setText(tr("SMESH_DZ")); - GroupAxisLayout->addWidget(TextLabelDZ, 1, 6); - - SpinBox_DZ = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_DZ"); - GroupAxisLayout->addWidget(SpinBox_DZ, 1, 7); - - GroupArgumentsLayout->addMultiCellWidget(GroupAxis, 2, 2, 0, 3); - - // Controls for angle defining - TextLabelAngle = new QLabel(GroupArguments, "TextLabelAngle"); - TextLabelAngle->setText(tr("SMESH_ANGLE" )); - GroupArgumentsLayout->addMultiCellWidget(TextLabelAngle, 3, 3, 0, 1); - - SpinBox_Angle = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Angle"); - GroupArgumentsLayout->addWidget(SpinBox_Angle, 3, 2); - - // Controls for nb. steps defining - TextLabelNbSteps = new QLabel(GroupArguments, "TextLabelNbSteps"); - TextLabelNbSteps->setText(tr("SMESH_NUMBEROFSTEPS" )); - GroupArgumentsLayout->addMultiCellWidget(TextLabelNbSteps, 4, 4, 0, 1); - - SpinBox_NbSteps = new QSpinBox(GroupArguments, "SpinBox_NbSteps"); - GroupArgumentsLayout->addWidget(SpinBox_NbSteps, 4, 2); - - // Controls for tolerance defining - TextLabelTolerance = new QLabel(GroupArguments, "TextLabelTolerance"); - TextLabelTolerance->setText(tr("SMESH_TOLERANCE")); - GroupArgumentsLayout->addMultiCellWidget(TextLabelTolerance, 5, 5, 0, 1); - - SpinBox_Tolerance = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Tolerance"); - GroupArgumentsLayout->addWidget(SpinBox_Tolerance, 5, 2); - - SMESHGUI_RevolutionDlgLayout->addWidget(GroupArguments, 1, 0); - - /* Initialisations */ - SpinBox_X->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_Y->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_Z->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DX->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DY->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DZ->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - - SpinBox_Angle->RangeStepAndValidator(-999999.999, +999999.999, 5.0, 3); - - QIntValidator* anIntValidator = new QIntValidator(SpinBox_NbSteps); - SpinBox_NbSteps->setValidator(anIntValidator); - SpinBox_NbSteps->setRange(1, 999999); - - SpinBox_Tolerance->RangeStepAndValidator(0.0, +999999.999, 0.1, 6); - - GroupArguments->show(); - RadioButton1->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); - - Init(); - - /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect(GroupConstructors, SIGNAL(clicked(int)), SLOT(ConstructorsClicked(int))); - - connect(SelectElementsButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectPointButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectVectorButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - - connect(SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged())); - connect(SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged())); - connect(SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged())); - - 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&))); - connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool))); - - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); /* displays Dialog */ - - ConstructorsClicked(0); - resize(0,0); // ?? -} - -//================================================================================= -// function : ~SMESHGUI_RevolutionDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_RevolutionDlg::~SMESHGUI_RevolutionDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_RevolutionDlg::Init (bool ResetControls) -{ - myBusy = false; - - myEditCurrentArgument = 0; - LineEditElements->clear(); - myElementsId = ""; - myNbOkElements = 0; - - myActor = 0; - myMesh = SMESH::SMESH_Mesh::_nil(); - - if (ResetControls) { - SpinBox_X->SetValue(0.0); - SpinBox_Y->SetValue(0.0); - SpinBox_Z->SetValue(0.0); - SpinBox_DX->SetValue(0.0); - SpinBox_DY->SetValue(0.0); - SpinBox_DZ->SetValue(0.0); - - SpinBox_Angle->SetValue(45); - SpinBox_NbSteps->setValue(1); - SpinBox_Tolerance->SetValue(1e-05); - - CheckBoxMesh->setChecked(false); - onSelectMesh(false); - } -} - -//================================================================================= -// function : ConstructorsClicked() -// purpose : Radio button management -//================================================================================= -void SMESHGUI_RevolutionDlg::ConstructorsClicked (int constructorId) -{ - disconnect(mySelectionMgr, 0, this, 0); - - Selection_Mode aSelMode = ActorSelection; - - switch (constructorId) { - case 0: - { - GroupArguments->setTitle(tr("REVOLUTION_1D")); - aSelMode = EdgeSelection; - break; - } - case 1: - { - GroupArguments->setTitle(tr("REVOLUTION_2D")); - aSelMode = FaceSelection; - break; - } - } - - if (myEditCurrentArgument != (QWidget*)LineEditElements) { - SMESH::SetPointRepresentation(false); - } - - if (!CheckBoxMesh->isChecked()) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(aSelMode); - } - - myEditCurrentArgument = (QWidget*)LineEditElements; - LineEditElements->setFocus(); - - if (CheckBoxMesh->isChecked()) - onSelectMesh(true); - - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -void SMESHGUI_RevolutionDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return; - - if (myNbOkElements && IsAxisOk()) { - 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::AxisStruct anAxis; - - anAxis.x = SpinBox_X->GetValue(); - anAxis.y = SpinBox_Y->GetValue(); - anAxis.z = SpinBox_Z->GetValue();; - anAxis.vx = SpinBox_DX->GetValue(); - anAxis.vy = SpinBox_DY->GetValue(); - anAxis.vz = SpinBox_DZ->GetValue(); - - double anAngle = (SpinBox_Angle->GetValue())*PI/180; - long aNbSteps = (long)SpinBox_NbSteps->value(); - double aTolerance = SpinBox_Tolerance->GetValue(); - - try { - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - QApplication::setOverrideCursor(Qt::waitCursor); - aMeshEditor->RotationSweep(anElementsId.inout(), anAxis, anAngle, aNbSteps, aTolerance); - QApplication::restoreOverrideCursor(); - } catch (...) { - } - - mySelectionMgr->clearSelected(); - SMESH::UpdateView(); - Init(false); - ConstructorsClicked(GetConstructorId()); - } -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_RevolutionDlg::ClickOnOk() -{ - ClickOnApply(); - ClickOnCancel(); -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_RevolutionDlg::ClickOnCancel() -{ - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearFilters(); - mySelectionMgr->clearSelected(); - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySMESHGUI->ResetState(); - reject(); -} - -//======================================================================= -// function : onTextChange() -// purpose : -//======================================================================= -void SMESHGUI_RevolutionDlg::onTextChange (const QString& theNewText) -{ - QLineEdit* send = (QLineEdit*)sender(); - - if (myBusy) return; - myBusy = true; - - if (send == LineEditElements) - myNbOkElements = 0; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - // hilight entered elements - SMDS_Mesh* aMesh = 0; - if (myActor) - aMesh = myActor->GetObject()->GetMesh(); - - if (aMesh) { - if (send == LineEditElements) { - 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 = aMesh->FindElement(aListId[ i ].toInt()); - if (e) - newIndices.Add(e->GetID()); - myNbOkElements++; - } - - mySelector->AddOrRemoveIndex(myActor->getIO(), newIndices, false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( myActor->getIO(), true, true ); - - myElementsId = theNewText; - } - } - - if (myNbOkElements && IsAxisOk()) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } - - myBusy = false; -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_RevolutionDlg::SelectionIntoArgument() -{ - if (myBusy) return; - - // clear - myActor = 0; - QString aString = ""; - - myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) { - LineEditElements->setText(aString); - myNbOkElements = 0; - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - } - myBusy = false; - - if (!GroupButtons->isEnabled()) // inactive - return; - - // get selected mesh - const SALOME_ListIO& aList = mySelector->StoredIObjects(); - - 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; - - int aNbUnits = 0; - - if (myEditCurrentArgument == (QWidget*)LineEditElements) { - myElementsId = ""; - - if (CheckBoxMesh->isChecked()) { - int aConstructorId = GetConstructorId(); - - 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()); - aNbUnits++; - } - } - } 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()); - aNbUnits++; - } - } - } - } 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]); - aNbUnits = 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]); - } - aNbUnits = anElementsIds->length(); - } - } else { - aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aString); - myElementsId = aString; - } - - if (aNbUnits < 1) - return; - - myNbOkElements = true; - } else { - aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString); - if (aNbUnits != 1) - return; - - SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh(); - if (!aMesh) - return; - - const SMDS_MeshNode * n = aMesh->FindNode(aString.toInt()); - if (!n) - return; - - double x = n->X(); - double y = n->Y(); - double z = n->Z(); - - if (myEditCurrentArgument == (QWidget*)SpinBox_X) { - SpinBox_X->SetValue(x); - SpinBox_Y->SetValue(y); - SpinBox_Z->SetValue(z); - } else if (myEditCurrentArgument == (QWidget*)SpinBox_DX) { - SpinBox_DX->SetValue(x - SpinBox_X->GetValue()); - SpinBox_DY->SetValue(y - SpinBox_Y->GetValue()); - SpinBox_DZ->SetValue(z - SpinBox_Z->GetValue()); - } - } - - myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) - LineEditElements->setText(aString); - myBusy = false; - - // OK - if (myNbOkElements && IsAxisOk()) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_RevolutionDlg::SetEditCurrentArgument() -{ - QPushButton* send = (QPushButton*)sender(); - - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearSelected(); - mySelectionMgr->clearFilters(); - - if (send == SelectElementsButton) { - myEditCurrentArgument = (QWidget*)LineEditElements; - SMESH::SetPointRepresentation(false); - if (CheckBoxMesh->isChecked()) { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); - } else { - int aConstructorId = GetConstructorId(); - if (aConstructorId == 0) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(EdgeSelection); - } - else if (aConstructorId == 1) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(FaceSelection); - } - } - } else if (send == SelectPointButton) { - myEditCurrentArgument = (QWidget*)SpinBox_X; - SMESH::SetPointRepresentation(true); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - } else if (send == SelectVectorButton) { - myEditCurrentArgument = (QWidget*)SpinBox_DX; - SMESH::SetPointRepresentation(true); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - } else { - } - - myEditCurrentArgument->setFocus(); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - SelectionIntoArgument(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_RevolutionDlg::DeactivateActiveDialog() -{ - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); - GroupArguments->setEnabled(false); - GroupButtons->setEnabled(false); - mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_RevolutionDlg::ActivateThisDialog() -{ - /* Emit a signal to deactivate the active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupConstructors->setEnabled(true); - GroupArguments->setEnabled(true); - GroupButtons->setEnabled(true); - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - ConstructorsClicked(GetConstructorId()); - SelectionIntoArgument(); -} - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_RevolutionDlg::enterEvent (QEvent*) -{ - if (!GroupConstructors->isEnabled()) - ActivateThisDialog(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_RevolutionDlg::closeEvent (QCloseEvent*) -{ - /* same than click on cancel button */ - this->ClickOnCancel(); -} - -//======================================================================= -// function : hideEvent() -// purpose : caused by ESC key -//======================================================================= -void SMESHGUI_RevolutionDlg::hideEvent (QHideEvent*) -{ - if (!isMinimized()) - ClickOnCancel(); -} - -//======================================================================= -//function : onSelectMesh -//purpose : -//======================================================================= -void SMESHGUI_RevolutionDlg::onSelectMesh (bool toSelectMesh) -{ - if (toSelectMesh) - TextLabelElements->setText(tr("SMESH_NAME")); - else - TextLabelElements->setText(tr("SMESH_ID_ELEMENTS")); - - if (myEditCurrentArgument != LineEditElements) { - LineEditElements->clear(); - return; - } - - mySelectionMgr->clearFilters(); - SMESH::SetPointRepresentation(false); - - if (toSelectMesh) { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); - LineEditElements->setReadOnly(true); - } else { - int aConstructorId = GetConstructorId(); - if (aConstructorId == 0) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(EdgeSelection); - } - else if (aConstructorId == 0) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(FaceSelection); - } - - LineEditElements->setReadOnly(false); - onTextChange(LineEditElements->text()); - } - - SelectionIntoArgument(); -} - -//================================================================================= -// function : GetConstructorId() -// purpose : -//================================================================================= -int SMESHGUI_RevolutionDlg::GetConstructorId() -{ - if (GroupConstructors != NULL && GroupConstructors->selected() != NULL) - return GroupConstructors->id(GroupConstructors->selected()); - return -1; -} - -//================================================================================= -// function : IsAxisOk() -// purpose : -//================================================================================= -bool SMESHGUI_RevolutionDlg::IsAxisOk() -{ - return (SpinBox_DX->GetValue() != 0 || - SpinBox_DY->GetValue() != 0 || - SpinBox_DZ->GetValue() != 0); -} - -//================================================================================= -// function : onVectorChanged() -// purpose : -//================================================================================= -void SMESHGUI_RevolutionDlg::onVectorChanged() -{ - if (IsAxisOk()) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } else { - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - } -} diff --git a/src/SMESHGUI/SMESHGUI_RevolutionDlg.h b/src/SMESHGUI/SMESHGUI_RevolutionDlg.h deleted file mode 100644 index 31912fa8a..000000000 --- a/src/SMESHGUI/SMESHGUI_RevolutionDlg.h +++ /dev/null @@ -1,155 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_RevolutionDlg.h -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#ifndef DIALOGBOX_REVOLUTION_H -#define DIALOGBOX_REVOLUTION_H - -#include "SalomeApp_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 QSpinBox; -class SMESHGUI_SpinBox; -class SMESHGUI; -class SMESH_Actor; -class SMESHGUI_SpinBox; -class SVTK_ViewWindow; -class SVTK_Selector; - - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - - -//================================================================================= -// class : SMESHGUI_RevolutionDlg -// purpose : -//================================================================================= -class SMESHGUI_RevolutionDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_RevolutionDlg (SMESHGUI*, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0); - ~SMESHGUI_RevolutionDlg(); - -private: - void Init (bool ResetControls = true); - void closeEvent (QCloseEvent*); - void enterEvent (QEvent*); /* mouse enter the QWidget */ - void hideEvent (QHideEvent*); /* ESC key */ - int GetConstructorId(); - bool IsAxisOk(); - - SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ - SalomeApp_SelectionMgr* mySelectionMgr; /* User shape selection */ - int myNbOkElements; /* to check when elements are defined */ - QString myElementsId; - QWidget* myEditCurrentArgument; /* Current argument */ - SVTK_Selector* mySelector; - - bool myBusy; - SMESH::SMESH_Mesh_var myMesh; - SMESH_Actor* myActor; - SMESH_LogicalFilter* myMeshOrSubMeshOrGroupFilter; - - QButtonGroup* GroupConstructors; - QRadioButton* RadioButton1; - QRadioButton* RadioButton2; - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - QGroupBox* GroupArguments; - QGroupBox* GroupAxis; - QLabel* TextLabelElements; - QPushButton* SelectElementsButton; - QLineEdit* LineEditElements; - QCheckBox* CheckBoxMesh; - - QLabel* TextLabelPoint; - QPushButton* SelectPointButton; - QLabel* TextLabelX; - SMESHGUI_SpinBox* SpinBox_X; - QLabel* TextLabelY; - SMESHGUI_SpinBox* SpinBox_Y; - QLabel* TextLabelZ; - SMESHGUI_SpinBox* SpinBox_Z; - QLabel* TextLabelVector; - QPushButton* SelectVectorButton; - QLabel* TextLabelDX; - SMESHGUI_SpinBox* SpinBox_DX; - QLabel* TextLabelDY; - SMESHGUI_SpinBox* SpinBox_DY; - QLabel* TextLabelDZ; - SMESHGUI_SpinBox* SpinBox_DZ; - - QLabel* TextLabelAngle; - SMESHGUI_SpinBox* SpinBox_Angle; - QLabel* TextLabelNbSteps; - QSpinBox* SpinBox_NbSteps; - QLabel* TextLabelTolerance; - SMESHGUI_SpinBox* SpinBox_Tolerance; - -private slots: - - void ConstructorsClicked (int constructorId); - void ClickOnOk(); - void ClickOnCancel(); - void ClickOnApply(); - void SetEditCurrentArgument(); - void SelectionIntoArgument(); - void DeactivateActiveDialog(); - void ActivateThisDialog(); - void onTextChange (const QString&); - void onSelectMesh (bool toSelectMesh); - void onVectorChanged(); - -protected: - QGridLayout* SMESHGUI_RevolutionDlgLayout; - QGridLayout* GroupConstructorsLayout; - QGridLayout* GroupButtonsLayout; - QGridLayout* GroupArgumentsLayout; -}; - -#endif // DIALOGBOX_REVOLUTION_H diff --git a/src/SMESHGUI/SMESHGUI_RotationDlg.cxx b/src/SMESHGUI/SMESHGUI_RotationDlg.cxx deleted file mode 100644 index 8b074aba3..000000000 --- a/src/SMESHGUI/SMESHGUI_RotationDlg.cxx +++ /dev/null @@ -1,819 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_RotationDlg.cxx -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#include "SMESHGUI_RotationDlg.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 "SUIT_Desktop.h" -#include "SUIT_Session.h" - -#include "SVTK_ViewModel.h" -#include "SVTK_ViewWindow.h" -#include "SVTK_Selector.h" -#include "SVTK_Selection.h" -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// OCCT Includes -#include -#include - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// IDL Headers -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Group) - -using namespace std; - -//================================================================================= -// class : SMESHGUI_RotationDlg() -// purpose : -//================================================================================= -SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( 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 ) ) -{ - QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_ROTATION"))); - QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); - - if (!name) - setName("SMESHGUI_RotationDlg"); - resize(303, 185); - setCaption(tr("SMESH_ROTATION_TITLE")); - setSizeGripEnabled(TRUE); - SMESHGUI_RotationDlgLayout = new QGridLayout(this); - SMESHGUI_RotationDlgLayout->setSpacing(6); - SMESHGUI_RotationDlgLayout->setMargin(11); - - /***************************************************************/ - GroupConstructors = new QButtonGroup(this, "GroupConstructors"); - GroupConstructors->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)5, - (QSizePolicy::SizeType)0, 0, 0, - GroupConstructors->sizePolicy().hasHeightForWidth())); - GroupConstructors->setTitle(tr("SMESH_ROTATION")); - GroupConstructors->setExclusive(TRUE); - GroupConstructors->setColumnLayout(0, Qt::Vertical); - GroupConstructors->layout()->setSpacing(0); - GroupConstructors->layout()->setMargin(0); - GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout()); - GroupConstructorsLayout->setAlignment(Qt::AlignTop); - GroupConstructorsLayout->setSpacing(6); - GroupConstructorsLayout->setMargin(11); - RadioButton1= new QRadioButton(GroupConstructors, "RadioButton1"); - RadioButton1->setText(tr("" )); - RadioButton1->setPixmap(image0); - RadioButton1->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1, - (QSizePolicy::SizeType)0, - RadioButton1->sizePolicy().hasHeightForWidth())); - RadioButton1->setMinimumSize(QSize(50, 0)); - GroupConstructorsLayout->addWidget(RadioButton1, 0, 0); - QSpacerItem* spacer = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupConstructorsLayout->addItem(spacer, 0, 1); - SMESHGUI_RotationDlgLayout->addWidget(GroupConstructors, 0, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)7, - (QSizePolicy::SizeType)0, 0, 0, - GroupButtons->sizePolicy().hasHeightForWidth())); - GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - GroupButtons->setTitle(tr("" )); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE")); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_APPLY")); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - buttonOk = new QPushButton(GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_OK")); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - SMESHGUI_RotationDlgLayout->addWidget(GroupButtons, 2, 0); - - /***************************************************************/ - GroupArguments = new QGroupBox(this, "GroupArguments"); - GroupArguments->setTitle(tr("SMESH_ARGUMENTS")); - 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); - - SelectElementsButton = new QPushButton(GroupArguments, "SelectElementsButton"); - SelectElementsButton->setText(tr("" )); - SelectElementsButton->setPixmap(image1); - SelectElementsButton->setToggleButton(FALSE); - GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1); - - LineEditElements = new QLineEdit(GroupArguments, "LineEditElements"); - LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator")); - GroupArgumentsLayout->addWidget(LineEditElements, 0, 2); - - // 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); - - // Controls for axis defining - GroupAxis = new QGroupBox(GroupArguments, "GroupAxis"); - GroupAxis->setTitle(tr("SMESH_AXIS")); - GroupAxis->setColumnLayout(0, Qt::Vertical); - GroupAxis->layout()->setSpacing(0); - GroupAxis->layout()->setMargin(0); - QGridLayout* GroupAxisLayout = new QGridLayout(GroupAxis->layout()); - GroupAxisLayout->setAlignment(Qt::AlignTop); - GroupAxisLayout->setSpacing(6); - GroupAxisLayout->setMargin(11); - - TextLabelPoint = new QLabel(GroupAxis, "TextLabelPoint"); - TextLabelPoint->setText(tr("SMESH_POINT")); - GroupAxisLayout->addWidget(TextLabelPoint, 0, 0); - - SelectPointButton = new QPushButton(GroupAxis, "SelectPointButton"); - SelectPointButton->setPixmap(image1); - GroupAxisLayout->addWidget(SelectPointButton, 0, 1); - - TextLabelX = new QLabel(GroupAxis, "TextLabelX"); - TextLabelX->setText(tr("SMESH_X")); - GroupAxisLayout->addWidget(TextLabelX, 0, 2); - - SpinBox_X = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_X"); - GroupAxisLayout->addWidget(SpinBox_X, 0, 3); - - TextLabelY = new QLabel(GroupAxis, "TextLabelY"); - TextLabelY->setText(tr("SMESH_Y")); - GroupAxisLayout->addWidget(TextLabelY, 0, 4); - - SpinBox_Y = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_Y"); - GroupAxisLayout->addWidget(SpinBox_Y, 0, 5); - - TextLabelZ = new QLabel(GroupAxis, "TextLabelZ"); - TextLabelZ->setText(tr("SMESH_Z")); - GroupAxisLayout->addWidget(TextLabelZ, 0, 6); - - SpinBox_Z = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_Z"); - GroupAxisLayout->addWidget(SpinBox_Z, 0, 7); - - TextLabelVector = new QLabel(GroupAxis, "TextLabelVector"); - TextLabelVector->setText(tr("SMESH_VECTOR")); - GroupAxisLayout->addWidget(TextLabelVector, 1, 0); - - SelectVectorButton = new QPushButton(GroupAxis, "SelectVectorButton"); - SelectVectorButton->setPixmap(image1); - GroupAxisLayout->addWidget(SelectVectorButton, 1, 1); - - TextLabelDX = new QLabel(GroupAxis, "TextLabelDX"); - TextLabelDX->setText(tr("SMESH_DX")); - GroupAxisLayout->addWidget(TextLabelDX, 1, 2); - - SpinBox_DX = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_DX"); - GroupAxisLayout->addWidget(SpinBox_DX, 1, 3); - - TextLabelDY = new QLabel(GroupAxis, "TextLabelDY"); - TextLabelDY->setText(tr("SMESH_DY")); - GroupAxisLayout->addWidget(TextLabelDY, 1, 4); - - SpinBox_DY = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_DY"); - GroupAxisLayout->addWidget(SpinBox_DY, 1, 5); - - TextLabelDZ = new QLabel(GroupAxis, "TextLabelDZ"); - TextLabelDZ->setText(tr("SMESH_DZ")); - GroupAxisLayout->addWidget(TextLabelDZ, 1, 6); - - SpinBox_DZ = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_DZ"); - GroupAxisLayout->addWidget(SpinBox_DZ, 1, 7); - - GroupArgumentsLayout->addMultiCellWidget(GroupAxis, 2, 2, 0, 2); - - // Controls for angle defining - TextLabelAngle = new QLabel(GroupArguments, "TextLabelAngle"); - TextLabelAngle->setText(tr("SMESH_ANGLE")); - GroupArgumentsLayout->addMultiCellWidget(TextLabelAngle, 3, 3, 0, 1); - - 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); - - SMESHGUI_RotationDlgLayout->addWidget(GroupArguments, 1, 0); - - /* Initialisations */ - SpinBox_X->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_Y->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_Z->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DX->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DY->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DZ->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - - SpinBox_Angle->RangeStepAndValidator(-999999.999, +999999.999, 5.0, 3); - - GroupArguments->show(); - myConstructorId = 0; - RadioButton1->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); - - Init(); - - /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect(GroupConstructors, SIGNAL(clicked(int)), SLOT(ConstructorsClicked(int))); - - connect(SelectElementsButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectPointButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectVectorButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - - connect(SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged())); - connect(SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged())); - connect(SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged())); - - 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&))); - connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool))); - - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); /* displays Dialog */ - - ConstructorsClicked(0); - resize(0,0); // ?? -} - -//================================================================================= -// function : ~SMESHGUI_RotationDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_RotationDlg::~SMESHGUI_RotationDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_RotationDlg::Init (bool ResetControls) -{ - myBusy = false; - - myEditCurrentArgument = (QWidget*)LineEditElements; - LineEditElements->setFocus(); - myElementsId = ""; - myNbOkElements = 0; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - myActor = 0; - myMesh = SMESH::SMESH_Mesh::_nil(); - - if (ResetControls) { - SpinBox_X->SetValue(0.0); - SpinBox_Y->SetValue(0.0); - SpinBox_Z->SetValue(0.0); - SpinBox_DX->SetValue(0.0); - SpinBox_DY->SetValue(0.0); - SpinBox_DZ->SetValue(0.0); - - SpinBox_Angle->SetValue(45); - - CheckBoxCopy->setChecked(false); - CheckBoxMesh->setChecked(false); - } - - onSelectMesh(CheckBoxMesh->isChecked()); -} - -//================================================================================= -// function : ConstructorsClicked() -// purpose : Radio button management -//================================================================================= -void SMESHGUI_RotationDlg::ConstructorsClicked (int constructorId) -{ -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -void SMESHGUI_RotationDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return; - - if (myNbOkElements && IsAxisOk()) { - 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::AxisStruct anAxis; - - anAxis.x = SpinBox_X->GetValue(); - anAxis.y = SpinBox_Y->GetValue(); - anAxis.z = SpinBox_Z->GetValue();; - anAxis.vx = SpinBox_DX->GetValue(); - anAxis.vy = SpinBox_DY->GetValue(); - anAxis.vz = SpinBox_DZ->GetValue(); - - double anAngle = (SpinBox_Angle->GetValue())*PI/180; - bool toCreateCopy = CheckBoxCopy->isChecked(); - - try { - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - QApplication::setOverrideCursor(Qt::waitCursor); - aMeshEditor->Rotate(anElementsId.inout(), anAxis, anAngle, toCreateCopy); - QApplication::restoreOverrideCursor(); - } catch (...) { - } - - mySelectionMgr->clearSelected(); - SMESH::UpdateView(); - Init(false); - } -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_RotationDlg::ClickOnOk() -{ - ClickOnApply(); - ClickOnCancel(); -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_RotationDlg::ClickOnCancel() -{ - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearFilters(); - mySelectionMgr->clearSelected(); - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySMESHGUI->ResetState(); - reject(); -} - -//======================================================================= -// function : onTextChange() -// purpose : -//======================================================================= -void SMESHGUI_RotationDlg::onTextChange (const QString& theNewText) -{ - QLineEdit* send = (QLineEdit*)sender(); - - if (myBusy) return; - myBusy = true; - - if (send == LineEditElements) - myNbOkElements = 0; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - // hilight entered elements - SMDS_Mesh* aMesh = 0; - if (myActor) - aMesh = myActor->GetObject()->GetMesh(); - - if (aMesh) { - if (send == LineEditElements) { - 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 = aMesh->FindElement(aListId[ i ].toInt()); - if (e) - newIndices.Add(e->GetID()); - myNbOkElements++; - } - - mySelector->AddOrRemoveIndex( anIO, newIndices, false ); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( anIO, true, true ); - - myElementsId = theNewText; - } - } - - if (myNbOkElements && IsAxisOk()) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } - - myBusy = false; -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_RotationDlg::SelectionIntoArgument() -{ - if (myBusy) return; - - // clear - myActor = 0; - QString aString = ""; - - myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) { - LineEditElements->setText(aString); - myNbOkElements = 0; - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - } - myBusy = false; - - 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; - - int aNbUnits = 0; - - if (myEditCurrentArgument == (QWidget*)LineEditElements) { - myElementsId = ""; - - if (CheckBoxMesh->isChecked()) { - SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - - if (!SMESH::IObjectToInterface(IO)->_is_nil()) { //MESH - // get IDs from mesh - SMDS_Mesh* aSMDSMesh = myActor->GetObject()->GetMesh(); - if (!aSMDSMesh) - return; - - for (int i = aSMDSMesh->MinElementID(); i <= aSMDSMesh->MaxElementID(); i++) { - const SMDS_MeshElement * e = aSMDSMesh->FindElement(i); - if (e) { - myElementsId += QString(" %1").arg(i); - aNbUnits++; - } - } - } 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; - anElementsIds = aSubMesh->GetElementsId(); - for (int i = 0; i < anElementsIds->length(); i++) { - myElementsId += QString(" %1").arg(anElementsIds[i]); - } - aNbUnits = anElementsIds->length(); - } else { // GROUP - // get smesh group - SMESH::SMESH_GroupBase_var aGroup = - SMESH::IObjectToInterface(IO); - if (aGroup->_is_nil()) - 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]); - } - aNbUnits = anElementsIds->length(); - } - } else { - aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aString); - myElementsId = aString; - } - - if (aNbUnits < 1) - return; - - myNbOkElements = true; - } else { - aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString); - if (aNbUnits != 1) - return; - - SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh(); - if (!aMesh) - return; - - const SMDS_MeshNode * n = aMesh->FindNode(aString.toInt()); - if (!n) - return; - - double x = n->X(); - double y = n->Y(); - double z = n->Z(); - - if (myEditCurrentArgument == (QWidget*)SpinBox_X) { - SpinBox_X->SetValue(x); - SpinBox_Y->SetValue(y); - SpinBox_Z->SetValue(z); - } else if (myEditCurrentArgument == (QWidget*)SpinBox_DX) { - SpinBox_DX->SetValue(x - SpinBox_X->GetValue()); - SpinBox_DY->SetValue(y - SpinBox_Y->GetValue()); - SpinBox_DZ->SetValue(z - SpinBox_Z->GetValue()); - } - } - - myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) - LineEditElements->setText(aString); - myBusy = false; - - // OK - if (myNbOkElements && IsAxisOk()) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_RotationDlg::SetEditCurrentArgument() -{ - QPushButton* send = (QPushButton*)sender(); - - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearSelected(); - mySelectionMgr->clearFilters(); - - switch (myConstructorId) { - case 0: /* default constructor */ - { - SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ); - if (send == SelectElementsButton) { - myEditCurrentArgument = (QWidget*)LineEditElements; - SMESH::SetPointRepresentation(false); - if (CheckBoxMesh->isChecked()) { - if ( aViewWindow ) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); - } else { - if ( aViewWindow ) - aViewWindow->SetSelectionMode( CellSelection ); - } - } else if (send == SelectPointButton) { - myEditCurrentArgument = (QWidget*)SpinBox_X; - SMESH::SetPointRepresentation(true); - if ( aViewWindow ) - aViewWindow->SetSelectionMode( NodeSelection ); - } else if (send == SelectVectorButton) { - myEditCurrentArgument = (QWidget*)SpinBox_DX; - SMESH::SetPointRepresentation(true); - if ( aViewWindow ) - aViewWindow->SetSelectionMode( NodeSelection ); - } - break; - } - } - - myEditCurrentArgument->setFocus(); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - SelectionIntoArgument(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_RotationDlg::DeactivateActiveDialog() -{ - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); - GroupArguments->setEnabled(false); - GroupButtons->setEnabled(false); - mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_RotationDlg::ActivateThisDialog() -{ - /* Emit a signal to deactivate the active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupConstructors->setEnabled(true); - GroupArguments->setEnabled(true); - GroupButtons->setEnabled(true); - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( CellSelection ); - SelectionIntoArgument(); -} - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_RotationDlg::enterEvent (QEvent*) -{ - if (!GroupConstructors->isEnabled()) - ActivateThisDialog(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_RotationDlg::closeEvent (QCloseEvent*) -{ - /* same than click on cancel button */ - this->ClickOnCancel(); -} - -//================================================================================= -// function : hideEvent() -// purpose : caused by ESC key -//================================================================================= -void SMESHGUI_RotationDlg::hideEvent (QHideEvent*) -{ - if (!isMinimized()) - ClickOnCancel(); -} - -//================================================================================= -// function : onSelectMesh() -// purpose : -//================================================================================= -void SMESHGUI_RotationDlg::onSelectMesh (bool toSelectMesh) -{ - if (toSelectMesh) - TextLabelElements->setText(tr("SMESH_NAME")); - else - TextLabelElements->setText(tr("SMESH_ID_ELEMENTS")); - - if (myEditCurrentArgument != LineEditElements) { - LineEditElements->clear(); - return; - } - - mySelectionMgr->clearFilters(); - SMESH::SetPointRepresentation(false); - - if (toSelectMesh) { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); - LineEditElements->setReadOnly(true); - } else { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( CellSelection ); - LineEditElements->setReadOnly(false); - onTextChange(LineEditElements->text()); - } - - SelectionIntoArgument(); -} - -//================================================================================= -// function : IsAxisOk() -// purpose : -//================================================================================= -bool SMESHGUI_RotationDlg::IsAxisOk() -{ - return (SpinBox_DX->GetValue() != 0 || - SpinBox_DY->GetValue() != 0 || - SpinBox_DZ->GetValue() != 0); -} - -//================================================================================= -// function : onVectorChanged() -// purpose : -//================================================================================= -void SMESHGUI_RotationDlg::onVectorChanged() -{ - if (IsAxisOk()) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } else { - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - } -} diff --git a/src/SMESHGUI/SMESHGUI_RotationDlg.h b/src/SMESHGUI/SMESHGUI_RotationDlg.h deleted file mode 100644 index 7e71856d1..000000000 --- a/src/SMESHGUI/SMESHGUI_RotationDlg.h +++ /dev/null @@ -1,150 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_RotationDlg.h -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#ifndef DIALOGBOX_ROTATION_H -#define DIALOGBOX_ROTATION_H - -#include "SalomeApp_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 SMESHGUI_SpinBox; -class SMESHGUI; -class SMESH_Actor; -class SMESHGUI_SpinBox; -class SVTK_ViewWindow; -class SVTK_Selector; - - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - - -//================================================================================= -// class : SMESHGUI_RotationDlg -// purpose : -//================================================================================= -class SMESHGUI_RotationDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_RotationDlg( SMESHGUI*, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0); - ~SMESHGUI_RotationDlg(); - -private: - void Init (bool ResetControls = true); - void closeEvent (QCloseEvent*); - void enterEvent (QEvent*); /* mouse enter the QWidget */ - void hideEvent (QHideEvent*); /* ESC key */ - bool IsAxisOk(); - - SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ - SalomeApp_SelectionMgr* mySelectionMgr; /* User shape selection */ - int myNbOkElements; /* to check when elements are defined */ - QString myElementsId; - SVTK_Selector* mySelector; - - QWidget* myEditCurrentArgument; /* Current LineEdit */ - int myConstructorId; - bool myBusy; - SMESH::SMESH_Mesh_var myMesh; - SMESH_Actor* myActor; - SMESH_LogicalFilter* myMeshOrSubMeshOrGroupFilter; - - QButtonGroup* GroupConstructors; - QRadioButton* RadioButton1; - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - QGroupBox* GroupArguments; - QGroupBox* GroupAxis; - QLabel* TextLabelElements; - QPushButton* SelectElementsButton; - QLineEdit* LineEditElements; - QCheckBox* CheckBoxMesh; - - QLabel* TextLabelPoint; - QPushButton* SelectPointButton; - QLabel* TextLabelX; - SMESHGUI_SpinBox* SpinBox_X; - QLabel* TextLabelY; - SMESHGUI_SpinBox* SpinBox_Y; - QLabel* TextLabelZ; - SMESHGUI_SpinBox* SpinBox_Z; - QLabel* TextLabelVector; - QPushButton* SelectVectorButton; - QLabel* TextLabelDX; - SMESHGUI_SpinBox* SpinBox_DX; - QLabel* TextLabelDY; - SMESHGUI_SpinBox* SpinBox_DY; - QLabel* TextLabelDZ; - SMESHGUI_SpinBox* SpinBox_DZ; - - QLabel* TextLabelAngle; - SMESHGUI_SpinBox* SpinBox_Angle; - QCheckBox* CheckBoxCopy; - -private slots: - - void ConstructorsClicked (int constructorId); - void ClickOnOk(); - void ClickOnCancel(); - void ClickOnApply(); - void SetEditCurrentArgument(); - void SelectionIntoArgument(); - void DeactivateActiveDialog(); - void ActivateThisDialog(); - void onTextChange (const QString&); - void onSelectMesh (bool toSelectMesh); - void onVectorChanged(); - -protected: - QGridLayout* SMESHGUI_RotationDlgLayout; - QGridLayout* GroupConstructorsLayout; - QGridLayout* GroupButtonsLayout; - QGridLayout* GroupArgumentsLayout; -}; - -#endif // DIALOGBOX_ROTATION_H diff --git a/src/SMESHGUI/SMESHGUI_SMESHGenUtils.cxx b/src/SMESHGUI/SMESHGUI_SMESHGenUtils.cxx deleted file mode 100644 index ddfe9fbd8..000000000 --- a/src/SMESHGUI/SMESHGUI_SMESHGenUtils.cxx +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - - -#include "QAD_Desktop.h" - -#include "SMESHGUI_SMESHGenUtils.h" - -#include "SALOMEconfig.h" -#include CORBA_CLIENT_HEADER(SALOMEDS) - -namespace SMESH -{ - - SMESH::SMESH_Gen_var GetSMESHGen() - { - static SMESH::SMESH_Gen_var aSMESHGen; - if(CORBA::is_nil(aSMESHGen)){ - if(QAD_Desktop* aDesktop = QAD_Application::getDesktop()){ - Engines::Component_var aComponent = aDesktop->getEngine("FactoryServer","SMESH"); - aSMESHGen = SMESH::SMESH_Gen::_narrow(aComponent); - } - } - return aSMESHGen; - } - -} diff --git a/src/SMESHGUI/SMESHGUI_SMESHGenUtils.h b/src/SMESHGUI/SMESHGUI_SMESHGenUtils.h deleted file mode 100644 index 54a8d4374..000000000 --- a/src/SMESHGUI/SMESHGUI_SMESHGenUtils.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef SMESHGUI_SMESHGenUtils_HeaderFile -#define SMESHGUI_SMESHGenUtils_HeaderFile - -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Gen) - - -namespace SMESH -{ - - SMESH::SMESH_Gen_var GetSMESHGen(); - -} - - -#endif diff --git a/src/SMESHGUI/SMESHGUI_Selection.h b/src/SMESHGUI/SMESHGUI_Selection.h deleted file mode 100644 index 524aa26a2..000000000 --- a/src/SMESHGUI/SMESHGUI_Selection.h +++ /dev/null @@ -1,75 +0,0 @@ -// SMESH SMESHGUI_Selection -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_Selection.h -// Author : Alexander SOLOVYOV -// Module : SMESH -// $Header$ - -#ifndef SMESHGUI_SELECTION_HeaderFile -#define SMESHGUI_SELECTION_HeaderFile - -#include "SalomeApp_Selection.h" -#include "SALOMEDSClient_definitions.hxx" -#include "SUIT_DataOwner.h" - -class SalomeApp_SelectionMgr; -class SALOMEDSClient_Study; -class SalomeApp_DataOwner; -class SMESH_Actor; - -class SMESHGUI_Selection : public SalomeApp_Selection -{ -public: - SMESHGUI_Selection(); - virtual ~SMESHGUI_Selection(); - - virtual void init( const QString&, SalomeApp_SelectionMgr* ); - virtual QtxValue param( const int , const QString& paramName ) const; - - // got from object, not from actor - virtual int numberOfNodes( int ind ) const; - virtual QVariant isComputable( int ind ) const; - virtual QVariant hasReference( int ind ) const; - virtual QVariant isVisible( int ind ) const; - - // parameters got from actor return nothing if an actor is not visible - virtual QValueList elemTypes( int ind ) const; - virtual QValueList labeledTypes( int ind ) const; - virtual QString displayMode( int ind ) const; - virtual QString shrinkMode( int ind ) const; - virtual QValueList entityMode( int ind ) const; - virtual QString controlMode( int ind ) const; - - SMESH_Actor* getActor( int ind ) const; - - static int type( const QString&, _PTR(Study) ); - static int type( SalomeApp_DataOwner* owner, _PTR(Study) study); - static QString typeName( const int type); - -private: - QStringList myTypes; - SUIT_DataOwnerPtrList myDataOwners; -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_SelectionOp.cxx b/src/SMESHGUI/SMESHGUI_SelectionOp.cxx deleted file mode 100644 index 1bc466c6a..000000000 --- a/src/SMESHGUI/SMESHGUI_SelectionOp.cxx +++ /dev/null @@ -1,508 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_SelectionOp.cxx -// Author : Alexander SOLOVYOV -// Module : SMESH - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include CORBA_SERVER_HEADER(GEOM_Gen) -#include - -/* - Class : SMESHGUI_SelectionOp - Description : Base operation for all operations using object selection in viewer or objectbrowser - through common widgets created by SalomeApp_Dialog::createObject -*/ - -//================================================================================= -// name : SMESHGUI_SelectionOp -// purpose : -//================================================================================= -SMESHGUI_SelectionOp::SMESHGUI_SelectionOp( const Selection_Mode mode ) -: SMESHGUI_Operation(), - myDefSelectionMode( mode ) -{ -} - -//================================================================================= -// name : ~SMESHGUI_SelectionOp -// purpose : -//================================================================================= -SMESHGUI_SelectionOp::~SMESHGUI_SelectionOp() -{ - Filters::const_iterator anIt = myFilters.begin(), - aLast = myFilters.end(); - for( ; anIt!=aLast; anIt++ ) - if( anIt.data() ) - delete anIt.data(); -} - -//================================================================================= -// name : startOperation -// purpose : -//================================================================================= -void SMESHGUI_SelectionOp::startOperation() -{ - SMESHGUI_Operation::startOperation(); - if( dlg() ) - { - disconnect( dlg(), SIGNAL( objectActivated( int ) ), this, SLOT( onActivateObject( int ) ) ); - disconnect( dlg(), SIGNAL( objectDeactivated( int ) ), this, SLOT( onDeactivateObject( int ) ) ); - disconnect( dlg(), SIGNAL( selectionChanged( int ) ), this, SLOT( onSelectionChanged( int ) ) ); - connect( dlg(), SIGNAL( objectActivated( int ) ), this, SLOT( onActivateObject( int ) ) ); - connect( dlg(), SIGNAL( objectDeactivated( int ) ), this, SLOT( onDeactivateObject( int ) ) ); - connect( dlg(), SIGNAL( selectionChanged( int ) ), this, SLOT( onSelectionChanged( int ) ) ); - } - - myOldSelectionMode = selectionMode(); - setSelectionMode( myDefSelectionMode ); -} - -//================================================================================= -// name : removeCustomFilters -// purpose : -//================================================================================= -void SMESHGUI_SelectionOp::removeCustomFilters() const -{ - SalomeApp_SelectionMgr* mgr = selectionMgr(); - if( !mgr ) - return; - - Filters::const_iterator anIt = myFilters.begin(), - aLast = myFilters.end(); - for( ; anIt!=aLast; anIt++ ) - if( anIt.data() ) - mgr->removeFilter( anIt.data() ); -} - -//================================================================================= -// name : commitOperation -// purpose : -//================================================================================= -void SMESHGUI_SelectionOp::commitOperation() -{ - removeCustomFilters(); - setSelectionMode( myOldSelectionMode ); - SMESHGUI_Operation::commitOperation(); -} - -//================================================================================= -// name : abortOperation -// purpose : -//================================================================================= -void SMESHGUI_SelectionOp::abortOperation() -{ - removeCustomFilters(); - setSelectionMode( myOldSelectionMode ); - SMESHGUI_Operation::abortOperation(); -} - -//================================================================================= -// name : selectionDone -// purpose : -//================================================================================= -void SMESHGUI_SelectionOp::selectionDone() -{ - if( !dlg() ) - return; - - if( selectionMode()!=ActorSelection ) - { - SALOME_ListIO aList; - selectionMgr()->selectedObjects( aList, SVTK_Viewer::Type() ); - - if( aList.Extent() != 1 ) //we can select nodes or elements only within one mesh - { - dlg()->clearSelection(); - return; - } - } - - QStringList names, ids; - SalomeApp_Dialog::TypesList types; - selected( names, types, ids ); - dlg()->selectObject( names, types, ids ); -} - -//================================================================================= -// name : createFilter -// purpose : -//================================================================================= -SUIT_SelectionFilter* SMESHGUI_SelectionOp::createFilter( const int ) const -{ - return 0; -} - -//================================================================================= -// name : onActivateObject -// purpose : -//================================================================================= -void SMESHGUI_SelectionOp::onActivateObject( int id ) -{ - SalomeApp_SelectionMgr* mgr = selectionMgr(); - if( !mgr ) - return; - - if( !myFilters.contains( id ) ) - myFilters[ id ] = createFilter( id ); - - if( myFilters[ id ] ) - mgr->installFilter( myFilters[ id ] ); - - selectionDone(); -} - -//================================================================================= -// name : onDeactivateObject -// purpose : -//================================================================================= -void SMESHGUI_SelectionOp::onDeactivateObject( int id ) -{ - SalomeApp_SelectionMgr* mgr = selectionMgr(); - if( mgr && myFilters.contains( id ) && myFilters[ id ] ) - mgr->removeFilter( myFilters[ id ] ); -} - -//================================================================================= -// name : initDialog -// purpose : -//================================================================================= -void SMESHGUI_SelectionOp::initDialog() -{ - if( dlg() ) - { - dlg()->clearSelection(); - dlg()->deactivateAll(); - } -} - -//================================================================================= -// name : initDialog -// purpose : -//================================================================================= -void SMESHGUI_SelectionOp::onSelectionChanged( int ) -{ -} - -//======================================================================= -// name : selectionMode -// Purpose : Returns selection mode -//======================================================================= -Selection_Mode SMESHGUI_SelectionOp::selectionMode() const -{ - SVTK_ViewWindow* wnd = viewWindow(); - if( wnd ) - return wnd->SelectionMode(); - else - return ActorSelection; -} - -//======================================================================= -// name : setSelectionMode -// Purpose : Set selection mode -//======================================================================= -void SMESHGUI_SelectionOp::setSelectionMode( const Selection_Mode mode ) -{ - SVTK_ViewWindow* wnd = viewWindow(); - if( wnd ) - wnd->SetSelectionMode( mode ); -} - -//======================================================================= -// name : highlight -// Purpose : Highlight object in 3d viewer -//======================================================================= -void SMESHGUI_SelectionOp::highlight( const Handle( SALOME_InteractiveObject )& obj, - const bool hilight, const bool immediately ) -{ - SVTK_ViewWindow* wnd = viewWindow(); - if( wnd ) - wnd->highlight( obj, hilight, immediately ); -} - -//======================================================================= -// name : addOrRemoveIndex -// Purpose : Select/deselect cells of mesh -//======================================================================= -void SMESHGUI_SelectionOp::addOrRemoveIndex( const Handle( SALOME_InteractiveObject )& obj, - const TColStd_MapOfInteger& indices, - const bool isModeShift ) -{ - SVTK_Selector* sel = selector(); - if( sel ) - sel->AddOrRemoveIndex( obj, indices, isModeShift ); -} - -//======================================================================= -// name : viewWindow -// Purpose : Get active view window -//======================================================================= -SVTK_ViewWindow* SMESHGUI_SelectionOp::viewWindow() const -{ - return SMESH::GetViewWindow( getSMESHGUI() ); -} - -//======================================================================= -// name : selector -// Purpose : Get selector -//======================================================================= -SVTK_Selector* SMESHGUI_SelectionOp::selector() const -{ - SVTK_ViewWindow* wnd = viewWindow(); - return wnd ? wnd->GetSelector() : 0; -} - -//======================================================================= -// name : typeById -// Purpose : Find type by id -//======================================================================= -int SMESHGUI_SelectionOp::typeById( const QString& str, const EntityType objtype ) const -{ - SalomeApp_Study* _study = dynamic_cast( study() ); - if( !_study ) - return -1; - - _PTR( Study ) st = _study->studyDS(); - - int res = -1; - if( objtype == Object ) - { - SalomeApp_Study* _study = dynamic_cast( study() ); - if( _study ) - { - int t = SMESHGUI_Selection::type( str, _study->studyDS() ); - if( t<0 ) - { - //try to get GEOM type - _PTR( SObject ) sobj = st->FindObjectID( str.latin1() ); - if( sobj ) - { - GEOM::GEOM_Object_var obj = GEOM::GEOM_Object::_narrow( - dynamic_cast( sobj.get() )->GetObject() ); - if( !CORBA::is_nil( obj ) ) - res = SMESHGUI_Dialog::prefix( "GEOM" ) + obj->GetType(); - } - } - else - res = SMESHGUI_Dialog::prefix( "SMESH" ) + t; - } - } - else - { - int pos = str.find( idChar() ); - QString entry = str.left( pos ), - _id = str.mid( pos+1 ); - bool ok; - int id = _id.toInt( &ok ); - if( ok ) - { - _PTR( SObject ) sobj = st->FindObjectID( entry.latin1() ); - SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( - dynamic_cast( sobj.get() )->GetObject() ); - SMESH::SMESH_subMesh_var submesh = SMESH::SMESH_subMesh::_narrow( - dynamic_cast( sobj.get() )->GetObject() ); - if( !CORBA::is_nil( mesh ) ) - res = SMESHGUI_Dialog::prefix( "SMESH element" ) + - mesh->GetElementType( id, objtype==MeshElement ); - - else if( !CORBA::is_nil( submesh ) ) - res = SMESHGUI_Dialog::prefix( "SMESH element" ) + - submesh->GetElementType( id, objtype==MeshElement ); - } - } - - return res; -} - -//======================================================================= -// name : selected -// Purpose : Get names, types and ids of selected objects -//======================================================================= -void SMESHGUI_SelectionOp::selected( QStringList& names, - SalomeApp_Dialog::TypesList& types, - QStringList& ids ) const -{ - SUIT_DataOwnerPtrList list; selectionMgr()->selected( list ); - SUIT_DataOwnerPtrList::const_iterator anIt = list.begin(), - aLast = list.end(); - for( ; anIt!=aLast; anIt++ ) - { - SalomeApp_DataOwner* owner = dynamic_cast( (*anIt).operator->() ); - SalomeApp_SVTKDataOwner* vtkowner = dynamic_cast( (*anIt).operator->() ); - - if( vtkowner ) - { - QString id_str = QString( "%1%2%3" ).arg( vtkowner->entry() ).arg( idChar() ), current_id_str; - Selection_Mode mode = vtkowner->GetMode(); - EntityType objtype = mode == NodeSelection ? MeshNode : MeshElement; - const TColStd_IndexedMapOfInteger& ownerids = vtkowner->GetIds(); - - for( int i=1, n=ownerids.Extent(); i<=n; i++ ) - { - int curid = ownerids( i ); - current_id_str = id_str.arg( curid ); - ids.append( current_id_str ); - types.append( typeById( current_id_str, objtype ) ); - names.append( QString( "%1" ).arg( curid ) ); - } - } - - else if( owner ) - { - QString id = owner->entry(); - ids.append( id ); - types.append( typeById( id, Object ) ); - names.append( owner->IO()->getName() ); - } - } -} - -//======================================================================= -// name : idChar -// Purpose : Char using to divide and in string id representation. By default, '#' -//======================================================================= -QChar SMESHGUI_SelectionOp::idChar() const -{ - return '#'; -} - -//================================================================================= -// name : mesh -// purpose : -//================================================================================= -SMESH::SMESH_Mesh_var SMESHGUI_SelectionOp::mesh() const -{ - if( selectionMode()==ActorSelection ) - return SMESH::SMESH_Mesh::_nil(); - - SALOME_ListIO sel; selectionMgr()->selectedObjects( sel, SVTK_Viewer::Type() ); - if( sel.Extent()==1 ) - return SMESH::GetMeshByIO( sel.First() ); - else - return SMESH::SMESH_Mesh::_nil(); -} - -//================================================================================= -// name : actor -// purpose : -//================================================================================= -SMESH_Actor* SMESHGUI_SelectionOp::actor() const -{ - SMESH::SMESH_Mesh_var m = mesh(); - if( !m->_is_nil() ) - return SMESH::FindActorByObject( m.in() ); - else - return 0; -} - -//================================================================================= -// name : onTextChanged -// purpose : -//================================================================================= -void SMESHGUI_SelectionOp::onTextChanged( int, const QStringList& list ) -{ - if( !dlg() ) - return; - - TColStd_MapOfInteger newIndices; - - SALOME_ListIO sel; selectionMgr()->selectedObjects( sel ); - SMESH_Actor* anActor = actor(); - if( sel.Extent()==0 || !anActor ) - return; - - SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh(); - - IdList ids; extractIds( list, ids, '\0' ); - IdList::const_iterator anIt = ids.begin(), - aLast = ids.end(); - for( ; anIt!=aLast; anIt++ ) - if( const SMDS_MeshNode * n = aMesh->FindNode( *anIt ) ) - newIndices.Add( n->GetID() ); - - selector()->AddOrRemoveIndex( sel.First(), newIndices, false ); - highlight( sel.First(), true, true ); - - QStringList names, _ids; SalomeApp_Dialog::TypesList types; - selected( names, types, _ids ); - dlg()->selectObject( names, types, _ids, false ); -} - -//================================================================================= -// name : selectedIds -// purpose : -//================================================================================= -void SMESHGUI_SelectionOp::selectedIds( const int id, IdList& list ) const -{ - if( !dlg() ) - return; - - QStringList ids; dlg()->selectedObject( id, ids ); - extractIds( ids, list ); -} - -//================================================================================= -// name : extractIds -// purpose : -//================================================================================= -void SMESHGUI_SelectionOp::extractIds( const QStringList& ids, IdList& list, const QChar idchar ) -{ - QStringList::const_iterator anIt = ids.begin(), - aLast = ids.end(); - QString id_str; - for( ; anIt!=aLast; anIt++ ) - { - id_str = *anIt; - int pos = idchar=='\0' ? -1 : id_str.find( idchar ); - int id = -1; - if( idchar=='\0' || pos>=0 ) - { - id = id_str.mid( pos+1 ).toInt(); - list.append( id ); - } - } -} - -//================================================================================= -// name : extractIds -// purpose : -//================================================================================= -void SMESHGUI_SelectionOp::extractIds( const QStringList& ids, IdList& list ) const -{ - extractIds( ids, list, idChar() ); -} diff --git a/src/SMESHGUI/SMESHGUI_SelectionOp.h b/src/SMESHGUI/SMESHGUI_SelectionOp.h deleted file mode 100644 index 5dde0a059..000000000 --- a/src/SMESHGUI/SMESHGUI_SelectionOp.h +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_SelectionOp.h -// Author : Alexander SOLOVYOV -// Module : SMESH - - -#ifndef SMESHGUI_SelectionOp_H -#define SMESHGUI_SelectionOp_H - -#include -#include -#include -#include - -#include -#include CORBA_SERVER_HEADER(SMESH_Gen) - - -class SUIT_SelectionFilter; -class TColStd_MapOfInteger; -class SVTK_ViewWindow; -class SVTK_Selector; -class SMESH_Actor; - -/* - Class : SMESHGUI_SelectionOp - Description : Base operation for all operations using object selection in viewer or objectbrowser - through common widgets created by SalomeApp_Dialog::createObject -*/ -class SMESHGUI_SelectionOp : public SMESHGUI_Operation -{ - Q_OBJECT - -public: - typedef QValueList IdList; //! List of node or element ids - -public: - SMESHGUI_SelectionOp( const Selection_Mode = ActorSelection ); - virtual ~SMESHGUI_SelectionOp(); - - static void extractIds( const QStringList&, IdList&, const QChar ); - -protected: - typedef enum - { - Object, - MeshNode, - MeshElement - - } EntityType; - /*! - This enumeration is used in typeById method to distinguish objects, mesh nodes and mesh elements, - because node end element ids may overlap - */ - -protected: - virtual void startOperation(); - virtual void commitOperation(); - virtual void abortOperation(); - virtual void selectionDone(); - - //! sets the dialog widgets to state just after operation start - virtual void initDialog(); - - /*! - * Creates filter being used when certain object selection widget is active - * If no filter must be used, then function must return 0 - * if id is negative, then function must return filter for common using independently of active widget - */ - virtual SUIT_SelectionFilter* createFilter( const int ) const; - - //! Remove only filters set by this operation (they are in map myFilters ) - void removeCustomFilters() const; - - //! Return what selection mode is set in VTK viewer - Selection_Mode selectionMode() const; - - //! Set selection mode in VTK viewer - void setSelectionMode( const Selection_Mode ); - - //! Hilight object in VTK viewer - void highlight( const Handle( SALOME_InteractiveObject )&, - const bool, const bool = true ); - - //! Select some nodes or elements in VTK - void addOrRemoveIndex( const Handle( SALOME_InteractiveObject )&, - const TColStd_MapOfInteger&, const bool ); - - SVTK_ViewWindow* viewWindow() const; - SVTK_Selector* selector() const; - - //! Get names, types and ids of selected objects - virtual void selected( QStringList&, SMESHGUI_Dialog::TypesList&, QStringList& ) const; - - //! Find type by id - virtual int typeById( const QString&, const EntityType ) const; - - //! Char using to divide and in string id representation. By default, '#' - virtual QChar idChar() const; - - //! Try to find in certain object selection widget selected node or element ids and return it - void selectedIds( const int, IdList& ) const; - - //! Find in QStringList correct node or element ids representation and append integer(id) to IdList - void extractIds( const QStringList&, IdList& ) const; - - //! Return selected mesh if selection mode isn't ActorSelection and only one object is selected - SMESH::SMESH_Mesh_var mesh() const; - - //! Return actor according to selected mesh if selection mode isn't ActorSelection - SMESH_Actor* actor() const; - -protected slots: - //! Installs filter corresponding to certain object selection widget - virtual void onActivateObject( int ); - - //! Removes filter corresponding to certain object selection widget - virtual void onDeactivateObject( int ); - - /*! - * Empty default implementation. In successors it may be used for more advanced selection checking. - * This slot is connected to signal when the selection changed in some object selection widget - */ - virtual void onSelectionChanged( int ); - - /*! Default implementation allowing user to edit selected ids "by hands". - In order to run default mechanism, you must set for some - object selection widget the "name indication" to "ListOfNames", - "read only" state to false and connect the dialog's signal "objectChanged" - to this slot - Warning: this mechanism can process only integer ids, NOT MESH OR GROUP NAMES!!! - */ - virtual void onTextChanged( int, const QStringList& ); - -private: - typedef QMap Filters; - -private: - Filters myFilters; - Selection_Mode myDefSelectionMode, myOldSelectionMode; -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_SewingDlg.cxx b/src/SMESHGUI/SMESHGUI_SewingDlg.cxx deleted file mode 100644 index 6ee039141..000000000 --- a/src/SMESHGUI/SMESHGUI_SewingDlg.cxx +++ /dev/null @@ -1,926 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_SewingDlg.cxx -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#include "SMESHGUI_SewingDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_IdValidator.h" - -#include "SMESH_Actor.h" -#include "SMDS_Mesh.hxx" - -#include "SUIT_ResourceMgr.h" -#include "SUIT_Desktop.h" -#include "SUIT_MessageBox.h" - -#include "SVTK_ViewModel.h" -#include "SVTK_ViewWindow.h" -#include "SVTK_Selector.h" -#include "SVTK_Selection.h" -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// OCCT Includes -#include -#include - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -//================================================================================= -// class : SMESHGUI_SewingDlg() -// purpose : -//================================================================================= -SMESHGUI_SewingDlg::SMESHGUI_SewingDlg( 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 ) ) -{ - SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); - QPixmap image0 (mgr->loadPixmap("SMESH", tr("ICON_SMESH_SEWING_FREEBORDERS"))); - QPixmap image1 (mgr->loadPixmap("SMESH", tr("ICON_SMESH_SEWING_CONFORM_FREEBORDERS"))); - QPixmap image2 (mgr->loadPixmap("SMESH", tr("ICON_SMESH_SEWING_BORDERTOSIDE"))); - QPixmap image3 (mgr->loadPixmap("SMESH", tr("ICON_SMESH_SEWING_SIDEELEMENTS"))); - QPixmap image4 (mgr->loadPixmap("SMESH", tr("ICON_SELECT"))); - - if (!name) - setName("SMESHGUI_SewingDlg"); - resize(303, 185); - setCaption(tr("SMESH_SEWING")); - setSizeGripEnabled(TRUE); - SMESHGUI_SewingDlgLayout = new QGridLayout(this); - SMESHGUI_SewingDlgLayout->setSpacing(6); - SMESHGUI_SewingDlgLayout->setMargin(11); - - /***************************************************************/ - GroupConstructors = new QButtonGroup(this, "GroupConstructors"); - GroupConstructors->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)5, - (QSizePolicy::SizeType)0, 0, 0, - GroupConstructors->sizePolicy().hasHeightForWidth())); - GroupConstructors->setTitle(tr("SMESH_SEWING")); - GroupConstructors->setExclusive(TRUE); - GroupConstructors->setColumnLayout(0, Qt::Vertical); - GroupConstructors->layout()->setSpacing(0); - GroupConstructors->layout()->setMargin(0); - GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout()); - GroupConstructorsLayout->setAlignment(Qt::AlignTop); - GroupConstructorsLayout->setSpacing(6); - GroupConstructorsLayout->setMargin(11); - QHBoxLayout* RBLayout = new QHBoxLayout(0, 0, 6, "Layout2"); - RadioButton1= new QRadioButton(GroupConstructors, "RadioButton1"); - RadioButton1->setText(tr("" )); - RadioButton1->setPixmap(image0); - RBLayout->addWidget(RadioButton1); - RadioButton2= new QRadioButton(GroupConstructors, "RadioButton2"); - RadioButton2->setText(tr("" )); - RadioButton2->setPixmap(image1); - RBLayout->addWidget(RadioButton2); - RadioButton3= new QRadioButton(GroupConstructors, "RadioButton3"); - RadioButton3->setText(tr("" )); - RadioButton3->setPixmap(image2); - RBLayout->addWidget(RadioButton3); - RadioButton4= new QRadioButton(GroupConstructors, "RadioButton4"); - RadioButton4->setText(tr("" )); - RadioButton4->setPixmap(image3); - RBLayout->addWidget(RadioButton4); - GroupConstructorsLayout->addLayout(RBLayout, 0, 0); - SMESHGUI_SewingDlgLayout->addWidget(GroupConstructors, 0, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)7, - (QSizePolicy::SizeType)0, 0, 0, - GroupButtons->sizePolicy().hasHeightForWidth())); - GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - GroupButtons->setTitle(tr("" )); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE")); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_APPLY")); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - buttonOk = new QPushButton(GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_OK")); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - SMESHGUI_SewingDlgLayout->addWidget(GroupButtons, 2, 0); - - /***************************************************************/ - GroupArguments = new QGroupBox(this, "GroupArguments"); - 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); - - // First subgroup - SubGroup1 = new QGroupBox(GroupArguments, "SubGroup1"); - SubGroup1->setColumnLayout(0, Qt::Vertical); - SubGroup1->layout()->setSpacing(0); - SubGroup1->layout()->setMargin(0); - QGridLayout* SubGroup1Layout = new QGridLayout(SubGroup1->layout()); - SubGroup1Layout->setAlignment(Qt::AlignTop); - SubGroup1Layout->setSpacing(6); - SubGroup1Layout->setMargin(11); - - // Controls of the first subgroup - TextLabel1 = new QLabel(SubGroup1, "TextLabel1"); - TextLabel1->setFixedWidth(104); - SubGroup1Layout->addWidget(TextLabel1, 0, 0); - - SelectButton1 = new QPushButton(SubGroup1, "SelectButton1"); - SelectButton1->setPixmap(image4); - SubGroup1Layout->addWidget(SelectButton1, 0, 1); - - LineEdit1 = new QLineEdit(SubGroup1, "LineEdit1"); - SubGroup1Layout->addWidget(LineEdit1, 0, 2); - - TextLabel2 = new QLabel(SubGroup1, "TextLabel2"); - SubGroup1Layout->addWidget(TextLabel2, 1, 0); - - SelectButton2 = new QPushButton(SubGroup1, "SelectButton2"); - SelectButton2->setPixmap(image4); - SubGroup1Layout->addWidget(SelectButton2, 1, 1); - - LineEdit2 = new QLineEdit(SubGroup1, "LineEdit2"); - SubGroup1Layout->addWidget(LineEdit2, 1, 2); - - TextLabel3 = new QLabel(SubGroup1, "TextLabel3"); - SubGroup1Layout->addWidget(TextLabel3, 2, 0); - - SelectButton3 = new QPushButton(SubGroup1, "SelectButton3"); - SelectButton3->setPixmap(image4); - SubGroup1Layout->addWidget(SelectButton3, 2, 1); - - LineEdit3 = new QLineEdit(SubGroup1, "LineEdit3"); - SubGroup1Layout->addWidget(LineEdit3, 2, 2); - - // Second subgroup - SubGroup2 = new QGroupBox(GroupArguments, "SubGroup2"); - SubGroup2->setColumnLayout(0, Qt::Vertical); - SubGroup2->layout()->setSpacing(0); - SubGroup2->layout()->setMargin(0); - QGridLayout* SubGroup2Layout = new QGridLayout(SubGroup2->layout()); - SubGroup2Layout->setAlignment(Qt::AlignTop); - SubGroup2Layout->setSpacing(6); - SubGroup2Layout->setMargin(11); - - // Controls of the first subgroup - TextLabel4 = new QLabel(SubGroup2, "TextLabel4"); - SubGroup2Layout->addWidget(TextLabel4, 0, 0); - - SelectButton4 = new QPushButton(SubGroup2, "SelectButton4"); - SelectButton4->setPixmap(image4); - SubGroup2Layout->addWidget(SelectButton4, 0, 1); - - LineEdit4 = new QLineEdit(SubGroup2, "LineEdit4"); - SubGroup2Layout->addWidget(LineEdit4, 0, 2); - - TextLabel5 = new QLabel(SubGroup2, "TextLabel5"); - SubGroup2Layout->addWidget(TextLabel5, 1, 0); - - SelectButton5 = new QPushButton(SubGroup2, "SelectButton5"); - SelectButton5->setPixmap(image4); - SubGroup2Layout->addWidget(SelectButton5, 1, 1); - - LineEdit5 = new QLineEdit(SubGroup2, "LineEdit5"); - SubGroup2Layout->addWidget(LineEdit5, 1, 2); - - TextLabel6 = new QLabel(SubGroup2, "TextLabel6"); - SubGroup2Layout->addWidget(TextLabel6, 2, 0); - - SelectButton6 = new QPushButton(SubGroup2, "SelectButton6"); - SelectButton6->setPixmap(image4); - SubGroup2Layout->addWidget(SelectButton6, 2, 1); - - LineEdit6 = new QLineEdit(SubGroup2, "LineEdit6"); - SubGroup2Layout->addWidget(LineEdit6, 2, 2); - - // Add subgroups to the group of arguments - GroupArgumentsLayout->addWidget(SubGroup1, 0, 0); - GroupArgumentsLayout->addWidget(SubGroup2, 1, 0); - - // Control for the merging equal elements - CheckBoxMerge = new QCheckBox(GroupArguments, "CheckBoxMerge"); - CheckBoxMerge->setText(tr("MERGE_EQUAL_ELEMENTS" )); - GroupArgumentsLayout->addWidget(CheckBoxMerge, 2, 0); - -// Control for the polygons creation instead of splitting - CheckBoxPolygons = new QCheckBox( GroupArguments, "CheckBoxPolygons" ); - CheckBoxPolygons->setText( tr( "CREATE_POLYGONS_INSTEAD_SPLITTING" ) ); - GroupArgumentsLayout->addWidget( CheckBoxPolygons, 3, 0 ); - - // Control for the polyedres creation to obtain conform mesh - CheckBoxPolyedrs = new QCheckBox( GroupArguments, "CheckBoxPolyedrs" ); - CheckBoxPolyedrs->setText( tr( "CREATE_POLYEDRS_NEAR_BOUNDARY" ) ); - GroupArgumentsLayout->addWidget( CheckBoxPolyedrs, 4, 0 ); - - - SMESHGUI_SewingDlgLayout->addWidget(GroupArguments, 1, 0); - - /* Initialisations */ - GroupArguments->show(); - RadioButton1->setChecked(TRUE); - - LineEdit2->setValidator(new SMESHGUI_IdValidator(this, "validator", 1)); - LineEdit3->setValidator(new SMESHGUI_IdValidator(this, "validator", 1)); - LineEdit5->setValidator(new SMESHGUI_IdValidator(this, "validator", 1)); - LineEdit6->setValidator(new SMESHGUI_IdValidator(this, "validator", 1)); - - mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - Init(); - - /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect(GroupConstructors, SIGNAL(clicked(int)), SLOT(ConstructorsClicked(int))); - - connect(SelectButton1, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectButton2, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectButton3, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectButton4, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectButton5, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectButton6, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - - connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - /* to close dialog if study change */ - connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); - - connect(LineEdit1, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); - connect(LineEdit2, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); - connect(LineEdit3, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); - connect(LineEdit4, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); - connect(LineEdit5, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); - connect(LineEdit6, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); - - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); /* displays Dialog */ - - ConstructorsClicked(0); - resize(0,0); -} - -//================================================================================= -// function : ~SMESHGUI_SewingDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_SewingDlg::~SMESHGUI_SewingDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_SewingDlg::Init() -{ - myBusy = false; - - myEditCurrentArgument = LineEdit1; - LineEdit1->setFocus(); - myActor = 0; - myMesh = SMESH::SMESH_Mesh::_nil(); - CheckBoxMerge->setChecked(false); - CheckBoxPolygons->setChecked(false); - CheckBoxPolyedrs->setChecked(false); - SelectionIntoArgument(); -} - -//================================================================================= -// function : ConstructorsClicked() -// purpose : Radio button management -//================================================================================= -void SMESHGUI_SewingDlg::ConstructorsClicked (int constructorId) -{ - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearSelected(); - LineEdit1->setText(""); - LineEdit2->setText(""); - LineEdit3->setText(""); - LineEdit4->setText(""); - LineEdit5->setText(""); - LineEdit6->setText(""); - myOk1 = myOk2 = myOk3 = myOk4 = myOk5 = myOk6 = false; - myEditCurrentArgument = LineEdit1; - myEditCurrentArgument->setFocus(); - - if (!TextLabel5->isEnabled()) { - TextLabel5->setEnabled(true); - SelectButton5->setEnabled(true); - LineEdit5->setEnabled(true); - } else if (!TextLabel6->isEnabled()) { - TextLabel6->setEnabled(true); - SelectButton6->setEnabled(true); - LineEdit6->setEnabled(true); - } - - if (constructorId == 1 || constructorId == 3) { - if (CheckBoxPolygons->isVisible()) - CheckBoxPolygons->hide(); - if (CheckBoxPolyedrs->isVisible()) - CheckBoxPolyedrs->hide(); - } - - switch (constructorId) { - case 0: - { - GroupArguments->setTitle(tr("SEW_FREE_BORDERS")); - SubGroup1->setTitle(tr("BORDER_1")); - SubGroup2->setTitle(tr("BORDER_2")); - - if (!CheckBoxPolygons->isVisible()) - CheckBoxPolygons->show(); - if (!CheckBoxPolyedrs->isVisible()) - CheckBoxPolyedrs->show(); - - - break; - } - case 1: - { - GroupArguments->setTitle(tr("SEW_CONFORM_FREE_BORDERS")); - SubGroup1->setTitle(tr("BORDER_1")); - SubGroup2->setTitle(tr("BORDER_2")); - - TextLabel6->setEnabled(false); - SelectButton6->setEnabled(false); - LineEdit6->setEnabled(false); - - myOk6 = true; - - break; - } - case 2: - { - GroupArguments->setTitle(tr("SEW_BORDER_TO_SIDE")); - SubGroup1->setTitle(tr("BORDER")); - SubGroup2->setTitle(tr("SIDE")); - - TextLabel5->setEnabled(false); - SelectButton5->setEnabled(false); - LineEdit5->setEnabled(false); - - if (!CheckBoxPolygons->isVisible()) - CheckBoxPolygons->show(); - if (!CheckBoxPolyedrs->isVisible()) - CheckBoxPolyedrs->show(); - - - myOk5 = true; - - break; - } - case 3: - { - GroupArguments->setTitle(tr("SEW_SIDE_ELEMENTS")); - SubGroup1->setTitle(tr("SIDE_1")); - SubGroup2->setTitle(tr("SIDE_2")); - - TextLabel1->setText(tr("SMESH_ID_ELEMENTS")); - TextLabel2->setText(tr("NODE1_TO_MERGE")); - TextLabel3->setText(tr("NODE2_TO_MERGE")); - TextLabel4->setText(tr("SMESH_ID_ELEMENTS")); - TextLabel5->setText(tr("NODE1_TO_MERGE")); - TextLabel6->setText(tr("NODE2_TO_MERGE")); - - LineEdit1->setValidator(new SMESHGUI_IdValidator(this, "validator")); - LineEdit4->setValidator(new SMESHGUI_IdValidator(this, "validator")); - - SMESH::SetPointRepresentation(false); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(CellSelection); - break; - } - } - - if (constructorId != 3) { - TextLabel1->setText(tr("FIRST_NODE_ID")); - TextLabel2->setText(tr("SECOND_NODE_ID")); - TextLabel3->setText(tr("LAST_NODE_ID")); - TextLabel4->setText(tr("FIRST_NODE_ID")); - TextLabel5->setText(tr("SECOND_NODE_ID")); - TextLabel6->setText(tr("LAST_NODE_ID")); - - LineEdit1->setValidator(new SMESHGUI_IdValidator(this, "validator", 1)); - LineEdit4->setValidator(new SMESHGUI_IdValidator(this, "validator", 1)); - - SMESH::SetPointRepresentation(true); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - } - - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -bool SMESHGUI_SewingDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return false; - - bool aResult = false; - - if (IsValid()) { - bool toMerge = CheckBoxMerge->isChecked(); - bool toCreatePolygons = CheckBoxPolygons->isChecked(); - bool toCreatePolyedrs = CheckBoxPolyedrs->isChecked(); - - try { - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - QApplication::setOverrideCursor(Qt::waitCursor); - - int aConstructorId = GetConstructorId(); - SMESH::SMESH_MeshEditor::Sew_Error anError; - - if (aConstructorId == 0) - anError = aMeshEditor->SewFreeBorders(LineEdit1->text().toLong(), - LineEdit2->text().toLong(), - LineEdit3->text().toLong(), - LineEdit4->text().toLong(), - LineEdit5->text().toLong(), - LineEdit6->text().toLong(), - toCreatePolygons, - toCreatePolyedrs); - else if (aConstructorId == 1) - anError = aMeshEditor->SewConformFreeBorders(LineEdit1->text().toLong(), - LineEdit2->text().toLong(), - LineEdit3->text().toLong(), - LineEdit4->text().toLong(), - LineEdit5->text().toLong()); - else if (aConstructorId == 2) - anError = aMeshEditor->SewBorderToSide(LineEdit1->text().toLong(), - LineEdit2->text().toLong(), - LineEdit3->text().toLong(), - LineEdit4->text().toLong(), - LineEdit6->text().toLong(), - toCreatePolygons, - toCreatePolyedrs); - else if (aConstructorId == 3) { - QStringList aListElementsId1 = QStringList::split(" ", LineEdit1->text(), false); - QStringList aListElementsId2 = QStringList::split(" ", LineEdit4->text(), false); - - SMESH::long_array_var anElementsId1 = new SMESH::long_array; - SMESH::long_array_var anElementsId2 = new SMESH::long_array; - - anElementsId1->length(aListElementsId1.count()); - anElementsId2->length(aListElementsId2.count()); - - for (int i = 0; i < aListElementsId1.count(); i++) - anElementsId1[i] = aListElementsId1[i].toInt(); - for (int i = 0; i < aListElementsId2.count(); i++) - anElementsId2[i] = aListElementsId2[i].toInt(); - - anError = aMeshEditor->SewSideElements(anElementsId1.inout(), - anElementsId2.inout(), - LineEdit2->text().toLong(), - LineEdit5->text().toLong(), - LineEdit3->text().toLong(), - LineEdit6->text().toLong()); - } - aResult = (anError == SMESH::SMESH_MeshEditor::SEW_OK); - - if (toMerge && aResult) - aMeshEditor->MergeEqualElements(); - - QApplication::restoreOverrideCursor(); - - if (!aResult) { - QString msg = tr(QString("ERROR_%1").arg(anError)); - SUIT_MessageBox::warn1(SMESHGUI::desktop(), tr("SMESH_WRN_WARNING"), - msg, tr("SMESH_BUT_OK")); - } - } catch (...) { - } - - if (aResult) { - Handle(SALOME_InteractiveObject) anIO = myActor->getIO(); - - SALOME_ListIO aList; - aList.Append(anIO); - mySelectionMgr->setSelectedObjects(aList, false); - SMESH::UpdateView(); - - Init(); - ConstructorsClicked(GetConstructorId()); - } - } - - return aResult; -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_SewingDlg::ClickOnOk() -{ - if (ClickOnApply()) - ClickOnCancel(); -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_SewingDlg::ClickOnCancel() -{ - mySelectionMgr->clearSelected(); - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - disconnect(mySelectionMgr, 0, this, 0); - mySMESHGUI->ResetState(); - reject(); -} - -//======================================================================= -//function : onTextChange -//purpose : -//======================================================================= -void SMESHGUI_SewingDlg::onTextChange (const QString& theNewText) -{ - QLineEdit* send = (QLineEdit*)sender(); - - if (myBusy) return; - myBusy = true; - - if (send) - myEditCurrentArgument = send; - - if (send == LineEdit1) - myOk1 = false; - else if (send == LineEdit2) - myOk2 = false; - else if (send == LineEdit3) - myOk3 = false; - else if (send == LineEdit4) - myOk4 = false; - else if (send == LineEdit5) - myOk5 = false; - else if (send == LineEdit6) - myOk6 = false; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - // hilight entered elements/nodes - SMDS_Mesh* aMesh = 0; - - if (myActor) - aMesh = myActor->GetObject()->GetMesh(); - else - send->clear(); - - if (aMesh) { - TColStd_MapOfInteger newIndices; - - if (GetConstructorId() != 3 || (send != LineEdit1 && send != LineEdit4)) { - SMESH::SetPointRepresentation(true); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - - const SMDS_MeshNode * n = aMesh->FindNode(theNewText.toInt()); - if (n) { - newIndices.Add(n->GetID()); - mySelector->AddOrRemoveIndex(myActor->getIO(), newIndices, false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( myActor->getIO(), true, true ); - - if (send == LineEdit1) - myOk1 = true; - else if (send == LineEdit2) - myOk2 = true; - else if (send == LineEdit3) - myOk3 = true; - else if (send == LineEdit4) - myOk4 = true; - else if (send == LineEdit5) - myOk5 = true; - else if (send == LineEdit6) - myOk6 = true; - } - } else { - SMESH::SetPointRepresentation(false); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(CellSelection); - - QStringList aListId = QStringList::split(" ", theNewText, false); - - bool isEvenOneExists = false; - - for (int i = 0; i < aListId.count(); i++) { - const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt()); - if (e) - newIndices.Add(e->GetID()); - - if (!isEvenOneExists) - isEvenOneExists = true; - } - - - mySelector->AddOrRemoveIndex(myActor->getIO(), newIndices, false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( myActor->getIO(), true, true ); - - if (isEvenOneExists) { - if (send == LineEdit1) - myOk1 = true; - else if(send == LineEdit4) - myOk4 = true; - } else { - send->clear(); - } - } - } - - if (IsValid()) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } - - myBusy = false; -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_SewingDlg::SelectionIntoArgument (bool isSelectionChanged) -{ - if (myBusy) return; - - // clear - if (isSelectionChanged) - myActor = 0; - - QString aString = ""; - - myBusy = true; - myEditCurrentArgument->setText(aString); - myBusy = false; - - if (!GroupButtons->isEnabled()) // inactive - return; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - // get selected mesh - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type()); - - int nbSel = aList.Extent(); - if (nbSel != 1) - return; - - Handle(SALOME_InteractiveObject) IO = aList.First(); - myMesh = SMESH::IObjectToInterface(IO); - myActor = SMESH::FindActorByEntry(aList.First()->getEntry()); - - if (myMesh->_is_nil() || !myActor) - return; - - // get selected elements/nodes - int aNbUnits = 0; - - if (GetConstructorId() != 3 || - (myEditCurrentArgument != LineEdit1 && myEditCurrentArgument != LineEdit4)) { - aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString); - if (aNbUnits != 1) - return; - } else { - aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aString); - if (aNbUnits < 1) - return; - } - - myBusy = true; - myEditCurrentArgument->setText(aString); - myBusy = false; - - // OK - if (myEditCurrentArgument == LineEdit1) - myOk1 = true; - else if (myEditCurrentArgument == LineEdit2) - myOk2 = true; - else if (myEditCurrentArgument == LineEdit3) - myOk3 = true; - else if (myEditCurrentArgument == LineEdit4) - myOk4 = true; - else if (myEditCurrentArgument == LineEdit5) - myOk5 = true; - else if (myEditCurrentArgument == LineEdit6) - myOk6 = true; - - if (IsValid()) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_SewingDlg::SetEditCurrentArgument() -{ - QPushButton* send = (QPushButton*)sender(); - - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearSelected(); - - if (send == SelectButton1) { - myEditCurrentArgument = LineEdit1; - myOk1 = false; - } - else if (send == SelectButton2) { - myEditCurrentArgument = LineEdit2; - myOk2 = false; - } - else if (send == SelectButton3) { - myEditCurrentArgument = LineEdit3; - myOk3 = false; - } - else if (send == SelectButton4) { - myEditCurrentArgument = LineEdit4; - myOk4 = false; - } - else if (send == SelectButton5) { - myEditCurrentArgument = LineEdit5; - myOk5 = false; - } - else if (send == SelectButton6) { - myEditCurrentArgument = LineEdit6; - myOk6 = false; - } - - if (GetConstructorId() != 3 || (send != SelectButton1 && send != SelectButton4)) { - SMESH::SetPointRepresentation(true); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - - } else { - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(CellSelection); - } - - myEditCurrentArgument->setFocus(); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - SelectionIntoArgument(false); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_SewingDlg::DeactivateActiveDialog() -{ - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); - GroupArguments->setEnabled(false); - GroupButtons->setEnabled(false); - mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_SewingDlg::ActivateThisDialog() -{ - /* Emit a signal to deactivate the active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupConstructors->setEnabled(true); - GroupArguments->setEnabled(true); - GroupButtons->setEnabled(true); - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - ConstructorsClicked(GetConstructorId()); - SelectionIntoArgument(); -} - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_SewingDlg::enterEvent (QEvent* e) -{ - if (!GroupConstructors->isEnabled()) - ActivateThisDialog(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_SewingDlg::closeEvent (QCloseEvent*) -{ - /* same than click on cancel button */ - this->ClickOnCancel(); -} - -//======================================================================= -//function : hideEvent -//purpose : caused by ESC key -//======================================================================= -void SMESHGUI_SewingDlg::hideEvent (QHideEvent*) -{ - if (!isMinimized()) - ClickOnCancel(); -} - -//================================================================================= -// function : GetConstructorId() -// purpose : -//================================================================================= -int SMESHGUI_SewingDlg::GetConstructorId() -{ - if (GroupConstructors != NULL && GroupConstructors->selected() != NULL) - return GroupConstructors->id(GroupConstructors->selected()); - return -1; -} - -//================================================================================= -// function : GetConstructorId() -// purpose : -//================================================================================= -bool SMESHGUI_SewingDlg::IsValid() -{ - return (myOk1 && myOk2 && myOk3 && myOk4 && myOk5 && myOk6); -} diff --git a/src/SMESHGUI/SMESHGUI_SewingDlg.h b/src/SMESHGUI/SMESHGUI_SewingDlg.h deleted file mode 100644 index 6a800d6ac..000000000 --- a/src/SMESHGUI/SMESHGUI_SewingDlg.h +++ /dev/null @@ -1,141 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_SewingDlg.h -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#ifndef DIALOGBOX_SEWING_H -#define DIALOGBOX_SEWING_H - -#include "SalomeApp_SelectionMgr.h" - -// QT Includes -#include - -class QGridLayout; -class QButtonGroup; -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class QRadioButton; -class QCheckBox; -class SMESHGUI; -class SMESH_Actor; -class SVTK_ViewWindow; -class SVTK_Selector; - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - - -//================================================================================= -// class : SMESHGUI_SewingDlg -// purpose : -//================================================================================= -class SMESHGUI_SewingDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_SewingDlg( SMESHGUI*, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0); - ~SMESHGUI_SewingDlg(); - -private: - void Init() ; - void closeEvent( QCloseEvent* e ) ; - void enterEvent ( QEvent * ); /* mouse enter the QWidget */ - void hideEvent ( QHideEvent * ); /* ESC key */ - int GetConstructorId(); - bool IsValid(); - - SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ - SalomeApp_SelectionMgr* mySelectionMgr; /* User shape selection */ - int myOk1, myOk2, myOk3, myOk4, myOk5, myOk6; - QLineEdit* myEditCurrentArgument; /* Current LineEdit */ - SVTK_Selector* mySelector; - - bool myBusy; - SMESH::SMESH_Mesh_var myMesh; - SMESH_Actor* myActor; - - QButtonGroup* GroupConstructors; - QRadioButton* RadioButton1; - QRadioButton* RadioButton2; - QRadioButton* RadioButton3; - QRadioButton* RadioButton4; - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - QGroupBox* GroupArguments; - QGroupBox* SubGroup1; - QGroupBox* SubGroup2; - QLabel* TextLabel1; - QLabel* TextLabel2; - QLabel* TextLabel3; - QLabel* TextLabel4; - QLabel* TextLabel5; - QLabel* TextLabel6; - QPushButton* SelectButton1; - QPushButton* SelectButton2; - QPushButton* SelectButton3; - QPushButton* SelectButton4; - QPushButton* SelectButton5; - QPushButton* SelectButton6; - QLineEdit* LineEdit1; - QLineEdit* LineEdit2; - QLineEdit* LineEdit3; - QLineEdit* LineEdit4; - QLineEdit* LineEdit5; - QLineEdit* LineEdit6; - QCheckBox* CheckBoxMerge; - QCheckBox* CheckBoxPolygons; - QCheckBox* CheckBoxPolyedrs; - -private slots: - - void ConstructorsClicked(int constructorId); - void ClickOnOk(); - void ClickOnCancel(); - bool ClickOnApply(); - void SetEditCurrentArgument() ; - void SelectionIntoArgument(bool isSelectionChanged = true) ; - void DeactivateActiveDialog() ; - void ActivateThisDialog() ; - void onTextChange(const QString&); - -protected: - QGridLayout* SMESHGUI_SewingDlgLayout; - QGridLayout* GroupConstructorsLayout; - QGridLayout* GroupButtonsLayout; - QGridLayout* GroupArgumentsLayout; -}; - -#endif // DIALOGBOX_SEWING_H diff --git a/src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx b/src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx deleted file mode 100755 index fcf0682b4..000000000 --- a/src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx +++ /dev/null @@ -1,560 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_SingleEditDlg.cxx -// Author : Sergey LITONIN -// Module : SMESH - -#include "SMESHGUI_SingleEditDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_MeshUtils.h" -#include "SMESHGUI_SpinBox.h" - -#include "SMESH_Actor.h" -#include "SMDS_Mesh.hxx" - -#include "SalomeApp_SelectionMgr.h" -#include "SUIT_ResourceMgr.h" -#include "SUIT_MessageBox.h" -#include "SUIT_Desktop.h" - -#include "SVTK_Selector.h" -#include "SVTK_ViewWindow.h" -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// OCCT Includes -#include -#include - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include - - -#define SPACING 5 -#define MARGIN 10 - - -/*! - * Class : SMESHGUI_DiagValidator - * Description : validate munual input of edge like "id1-id2" - */ -class SMESHGUI_DiagValidator: public QValidator -{ - public: - SMESHGUI_DiagValidator (QWidget * parent, const char * name = 0): - QValidator(parent,name) {} - - State validate (QString & text, int & pos) const - { - text.stripWhiteSpace(); - text.replace(QRegExp("[^0-9]+"), "-"); - if (text == "-") - text = ""; - int ind = text.find(QRegExp("-[0-9]+-")); - if (ind > 0) { // leave only two ids - ind = text.find('-', ind + 1); - if (ind > 0) - text.truncate(ind); - } - if (pos > text.length()) - pos = text.length(); - return Acceptable; - } -}; - -/*! - * Class : SMESHGUI_SingleEditDlg - * Description : Inversion of the diagonal of a pseudo-quadrangle formed by - * 2 neighboring triangles with 1 common edge - */ - -//======================================================================= -// name : SMESHGUI_SingleEditDlg() -// Purpose : Constructor -//======================================================================= -SMESHGUI_SingleEditDlg -::SMESHGUI_SingleEditDlg(SMESHGUI* theModule, - const char* theName): - QDialog(SMESH::GetDesktop(theModule), - theName, - false, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), - mySelector(SMESH::GetViewWindow(theModule)->GetSelector()), - mySelectionMgr(SMESH::GetSelectionMgr(theModule)), - mySMESHGUI(theModule) -{ - QVBoxLayout* aDlgLay = new QVBoxLayout(this, MARGIN, SPACING); - - QFrame* aMainFrame = createMainFrame (this); - QFrame* aBtnFrame = createButtonFrame(this); - - aDlgLay->addWidget(aMainFrame); - aDlgLay->addWidget(aBtnFrame); - - aDlgLay->setStretchFactor(aMainFrame, 1); - - Init(); -} - -//======================================================================= -// name : createMainFrame() -// Purpose : Create frame containing dialog's input fields -//======================================================================= -QFrame* SMESHGUI_SingleEditDlg::createMainFrame (QWidget* theParent) -{ - QGroupBox* aMainGrp = new QGroupBox(1, Qt::Vertical, tr("EDGE_BETWEEN"), theParent); - - QPixmap aPix (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); - - new QLabel(tr("SMESH_EDGE"), aMainGrp); - (new QPushButton(aMainGrp))->setPixmap(aPix); - myEdge = new QLineEdit(aMainGrp); - myEdge->setValidator(new SMESHGUI_DiagValidator(this, "validator")); - - return aMainGrp; -} - -//======================================================================= -// name : createButtonFrame() -// Purpose : Create frame containing buttons -//======================================================================= -QFrame* SMESHGUI_SingleEditDlg::createButtonFrame (QWidget* theParent) -{ - QFrame* aFrame = new QFrame(theParent); - aFrame->setFrameStyle(QFrame::Box | QFrame::Sunken); - - myOkBtn = new QPushButton(tr("SMESH_BUT_OK" ), aFrame); - myApplyBtn = new QPushButton(tr("SMESH_BUT_APPLY"), aFrame); - myCloseBtn = new QPushButton(tr("SMESH_BUT_CLOSE"), aFrame); - - QSpacerItem* aSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); - - QHBoxLayout* aLay = new QHBoxLayout(aFrame, MARGIN, SPACING); - - aLay->addWidget(myOkBtn); - aLay->addWidget(myApplyBtn); - aLay->addItem(aSpacer); - aLay->addWidget(myCloseBtn); - - return aFrame; -} - -//======================================================================= -// name : isValid() -// Purpose : Verify validity of input data -//======================================================================= -bool SMESHGUI_SingleEditDlg::isValid (const bool theMess) const -{ - int id1, id2; - return getNodeIds(myEdge->text(), id1, id2); -} - -//======================================================================= -// name : getNodeIds() -// Purpose : Retrieve node ids from string -//======================================================================= -bool SMESHGUI_SingleEditDlg::getNodeIds (const QString& theStr, - int& theId1, int& theId2) const -{ - if (!theStr.contains('-')) - return false; - - bool ok1, ok2; - QString str1 = theStr.section('-', 0, 0, QString::SectionSkipEmpty); - QString str2 = theStr.section('-', 1, 1, QString::SectionSkipEmpty); - theId1 = str1.toInt(&ok1); - theId2 = str2.toInt(&ok2); - - return ok1 & ok2; -} - -//======================================================================= -// name : ~SMESHGUI_SingleEditDlg() -// Purpose : Destructor -//======================================================================= -SMESHGUI_SingleEditDlg::~SMESHGUI_SingleEditDlg() -{ -} - -//======================================================================= -// name : Init() -// Purpose : Init dialog fields, connect signals and slots, show dialog -//======================================================================= -void SMESHGUI_SingleEditDlg::Init() -{ - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - myBusy = false; - myActor = 0; - - // main buttons - connect(myOkBtn, SIGNAL(clicked()), SLOT(onOk())); - connect(myCloseBtn, SIGNAL(clicked()), SLOT(onClose())); - connect(myApplyBtn, SIGNAL(clicked()), SLOT(onApply())); - - // selection and SMESHGUI - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone())); - connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate())); - connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(onClose())); - connect(myEdge, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); - - myOkBtn->setEnabled(false); - myApplyBtn->setEnabled(false); - setEnabled(true); - - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); - - // set selection mode - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(EdgeOfCellSelection); - - onSelectionDone(); -} - -//======================================================================= -// name : onOk() -// Purpose : SLOT called when "Ok" button pressed. -// Assign filters VTK viewer and close dialog -//======================================================================= -void SMESHGUI_SingleEditDlg::onOk() -{ - if (onApply()) - onClose(); -} - -//======================================================================= -// name : onClose() -// Purpose : SLOT called when "Close" button pressed. Close dialog -//======================================================================= -void SMESHGUI_SingleEditDlg::onClose() -{ - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->clearSelected(); - disconnect(mySelectionMgr, 0, this, 0); - disconnect(mySMESHGUI, 0, this, 0); - mySMESHGUI->ResetState(); - reject(); -} - -//======================================================================= -//function : findTriangles() -//purpose : find triangles sharing theNode1-theNode2 link -// THIS IS A PIECE OF SMESH_MeshEditor.cxx -// TO DO: make it available in SMDS for ex. -//======================================================================= -static bool findTriangles (const SMDS_MeshNode * theNode1, - const SMDS_MeshNode * theNode2, - const SMDS_MeshElement*& theTria1, - const SMDS_MeshElement*& theTria2) -{ - if (!theNode1 || !theNode2) return false; - - theTria1 = theTria2 = 0; - - set< const SMDS_MeshElement* > emap; - SMDS_ElemIteratorPtr it = theNode1->GetInverseElementIterator(); - while (it->more()) { - const SMDS_MeshElement* elem = it->next(); - if (elem->GetType() == SMDSAbs_Face && elem->NbNodes() == 3) - emap.insert(elem); - } - it = theNode2->GetInverseElementIterator(); - while (it->more()) { - const SMDS_MeshElement* elem = it->next(); - if (elem->GetType() == SMDSAbs_Face && - emap.find(elem) != emap.end()) - if (theTria1) { - theTria2 = elem; - break; - } else { - theTria1 = elem; - } - } - return (theTria1 && theTria2); -} - -//======================================================================= -//function : onTextChange() -//purpose : -//======================================================================= -void SMESHGUI_SingleEditDlg::onTextChange (const QString& theNewText) -{ - if (myBusy) return; - - myOkBtn->setEnabled(false); - myApplyBtn->setEnabled(false); - - // hilight entered edge - if(myActor){ - if(SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh()){ - myBusy = true; // block onSelectionDone() - Handle(SALOME_InteractiveObject) anIO = myActor->getIO(); - SALOME_ListIO aList; - aList.Append(anIO); - mySelectionMgr->setSelectedObjects(aList,false); - - TColStd_IndexedMapOfInteger selectedIndices; - TColStd_MapOfInteger newIndices; - mySelector->GetIndex(anIO,selectedIndices); - myBusy = false; - - QStringList aListId = QStringList::split("-", theNewText, false); - if (aListId.count() != 2) - return; - - int i; - bool allOk = true; - const SMDS_MeshNode* a2Nodes[2]; - for (i = 0; i < aListId.count(); i++) { - if(const SMDS_MeshNode *aNode = aMesh->FindNode(aListId[ i ].toInt())) - a2Nodes[ i ] = aNode; - else - allOk = false; - } - - // find a triangle and an edge nb - const SMDS_MeshElement* tria[2]; - allOk &= a2Nodes[0] != a2Nodes[1] && findTriangles(a2Nodes[0],a2Nodes[1],tria[0],tria[1]); - if(allOk){ - myBusy = true; // block onSelectionDone() - newIndices.Add(tria[0]->GetID()); - mySelector->AddOrRemoveIndex(anIO,newIndices, true); - - const SMDS_MeshNode* a3Nodes [3]; - SMDS_ElemIteratorPtr it; - int edgeInd = 2; - for (i = 0, it = tria[0]->nodesIterator(); it->more(); i++) { - a3Nodes[ i ] = static_cast(it->next()); - if (i > 0) { - allOk = (a3Nodes[ i ] == a2Nodes[ 0 ] && a3Nodes[ i - 1] == a2Nodes[ 1 ]) || - (a3Nodes[ i ] == a2Nodes[ 1 ] && a3Nodes[ i - 1] == a2Nodes[ 0 ]); - if (allOk) { - edgeInd = i - 1; - break; - } - } - } - - newIndices.Clear(); - newIndices.Add(-edgeInd-1); - mySelector->AddOrRemoveIndex(anIO,newIndices,true); - myBusy = false; - - myOkBtn->setEnabled(true); - myApplyBtn->setEnabled(true); - } - } - } -} - -//======================================================================= -// name : onSelectionDone() -// Purpose : SLOT called when selection changed -//======================================================================= -void SMESHGUI_SingleEditDlg::onSelectionDone() -{ - if (myBusy) return; - - int anId1 = 0, anId2 = 0; - - myOkBtn->setEnabled(false); - myApplyBtn->setEnabled(false); - - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList); - - if (aList.Extent() != 1) { - myEdge->clear(); - return; - } - - Handle(SALOME_InteractiveObject) anIO = aList.First(); - myActor = SMESH::FindActorByEntry(anIO->getEntry()); - if(myActor){ - TVisualObjPtr aVisualObj = myActor->GetObject(); - if(SMDS_Mesh* aMesh = aVisualObj->GetMesh()){ - if(SMESH::GetEdgeNodes(mySelector, aVisualObj, anId1, anId2) >= 1){ - QString aText = QString("%1-%2").arg(anId1).arg(anId2); - myBusy = true; - myEdge->setText(aText); - myBusy = false; - - const SMDS_MeshElement* tria[2]; - if (findTriangles(aMesh->FindNode(anId1), aMesh->FindNode(anId2), tria[0],tria[1])) { - myOkBtn->setEnabled(true); - myApplyBtn->setEnabled(true); - } - } else { - myEdge->clear(); - } - } - } -} - -//======================================================================= -// name : onDeactivate() -// Purpose : SLOT called when dialog must be deativated -//======================================================================= -void SMESHGUI_SingleEditDlg::onDeactivate() -{ - setEnabled(false); -} - -//======================================================================= -// name : enterEvent() -// Purpose : Event filter -//======================================================================= -void SMESHGUI_SingleEditDlg::enterEvent (QEvent*) -{ - if (!isEnabled()) { - mySMESHGUI->EmitSignalDeactivateDialog(); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(EdgeOfCellSelection); - setEnabled(true); - } -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_SingleEditDlg::closeEvent (QCloseEvent*) -{ - onClose(); -} - -//======================================================================= -//function : hideEvent() -//purpose : caused by ESC key -//======================================================================= -void SMESHGUI_SingleEditDlg::hideEvent (QHideEvent*) -{ - if (!isMinimized()) - onClose(); -} - -//================================================================================= -// function : onApply() -// purpose : SLOT. Called when apply button is pressed -//================================================================================= -bool SMESHGUI_SingleEditDlg::onApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return false; - // verify validity of input data - if (!isValid(true)) - return false; - - // get mesh, actor and nodes - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList); - - SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(aList.First()); - - if (aMesh->_is_nil()) { - SUIT_MessageBox::info1(SMESH::GetDesktop(mySMESHGUI), - tr("SMESH_ERROR"), - tr("SMESHG_NO_MESH"), - tr("SMESH_BUT_OK")); - return false; - } - - SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor(); - int anId1= 0, anId2 = 0; - if (aMeshEditor->_is_nil() || !getNodeIds(myEdge->text(), anId1, anId2)) - return false; - - // perform operation - bool aResult = process(aMeshEditor.in(), anId1, anId2); - - // update actor - if (aResult) { - mySelectionMgr->setSelectedObjects(aList, false); - SMESH::UpdateView(); - } - - return aResult; -} - -/*! - * Class : SMESHGUI_TrianglesInversionDlg - * Description : Inversion of the diagonal of a pseudo-quadrangle formed by - * 2 neighboring triangles with 1 common edge - */ - -SMESHGUI_TrianglesInversionDlg -::SMESHGUI_TrianglesInversionDlg(SMESHGUI* theModule, - const char* theName) -: SMESHGUI_SingleEditDlg(theModule,theName) -{ - setCaption(tr("CAPTION")); -} - -SMESHGUI_TrianglesInversionDlg::~SMESHGUI_TrianglesInversionDlg() -{ -} - -bool SMESHGUI_TrianglesInversionDlg::process (SMESH::SMESH_MeshEditor_ptr theMeshEditor, - const int theId1, const int theId2) -{ - return theMeshEditor->InverseDiag(theId1, theId2); -} - -/*! - * Class : SMESHGUI_UnionOfTwoTrianglesDlg - * Description : Construction of a quadrangle by deletion of the - * common border of 2 neighboring triangles - */ - -SMESHGUI_UnionOfTwoTrianglesDlg -::SMESHGUI_UnionOfTwoTrianglesDlg(SMESHGUI* theModule, - const char* theName) -: SMESHGUI_SingleEditDlg(theModule,theName) -{ - setCaption(tr("CAPTION")); -} - -SMESHGUI_UnionOfTwoTrianglesDlg::~SMESHGUI_UnionOfTwoTrianglesDlg() -{ -} - -bool SMESHGUI_UnionOfTwoTrianglesDlg::process (SMESH::SMESH_MeshEditor_ptr theMeshEditor, - const int theId1, const int theId2) -{ - return theMeshEditor->DeleteDiag(theId1, theId2); -} diff --git a/src/SMESHGUI/SMESHGUI_SingleEditDlg.h b/src/SMESHGUI/SMESHGUI_SingleEditDlg.h deleted file mode 100755 index 01f724a4c..000000000 --- a/src/SMESHGUI/SMESHGUI_SingleEditDlg.h +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_SingleEditDlg.h -// Author : Sergey LITONIN -// Module : SMESH - - -#ifndef SMESHGUI_SingleEditDlg_H -#define SMESHGUI_SingleEditDlg_H - -#include - -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -class QCloseEvent; -class QFrame; -class QLineEdit; -class SMESHGUI_SpinBox; -class QPushButton; - -class SMESHGUI; -class SMESH_Actor; -class SVTK_Selector; -class SVTK_ViewWindow; -class SalomeApp_SelectionMgr; - -/*! - * Class : SMESHGUI_SingleEditDlg - * Description : Base class for dialogs of diagonal inversion and - * union of two neighboring triangles - */ -class SMESHGUI_SingleEditDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_SingleEditDlg(SMESHGUI* theModule, - const char* theName = 0); - virtual ~SMESHGUI_SingleEditDlg(); - - void Init(); - -protected slots: - void onOk(); - virtual bool onApply(); - void onClose(); - - void onDeactivate(); - - void onSelectionDone(); - void onTextChange (const QString&); - -protected: - void closeEvent (QCloseEvent*); - void enterEvent (QEvent*); - void hideEvent (QHideEvent*); /* ESC key */ - QFrame* createButtonFrame (QWidget*); - QFrame* createMainFrame (QWidget*); - bool isValid (const bool) const; - bool getNodeIds (const QString&, int&, int&) const; - virtual bool process (SMESH::SMESH_MeshEditor_ptr, const int, const int) = 0; - -protected: - bool myBusy; - QPushButton* myOkBtn; - QPushButton* myApplyBtn; - QPushButton* myCloseBtn; - QLineEdit* myEdge; - SMESH_Actor* myActor; - - SalomeApp_SelectionMgr* mySelectionMgr; - SVTK_Selector* mySelector; - SMESHGUI* mySMESHGUI; -}; - -/*! - * Class : SMESHGUI_TrianglesInversionDlg - * Description : Inversion of the diagonal of a pseudo-quadrangle formed by - * 2 neighboring triangles with 1 common edge - */ -class SMESHGUI_TrianglesInversionDlg : public SMESHGUI_SingleEditDlg -{ - Q_OBJECT - -public: - SMESHGUI_TrianglesInversionDlg(SMESHGUI* theModule, - const char* theName = 0); - virtual ~SMESHGUI_TrianglesInversionDlg(); - -protected: - virtual bool process (SMESH::SMESH_MeshEditor_ptr, const int, const int); -}; - -/*! - * Class : SMESHGUI_UnionOfTwoTrianglesDlg - * Description : Construction of a quadrangle by deletion of the - * common border of 2 neighboring triangles - */ -class SMESHGUI_UnionOfTwoTrianglesDlg : public SMESHGUI_SingleEditDlg -{ - Q_OBJECT - -public: - SMESHGUI_UnionOfTwoTrianglesDlg(SMESHGUI* theModule, - const char* theName = 0); - virtual ~SMESHGUI_UnionOfTwoTrianglesDlg(); - -protected: - virtual bool process (SMESH::SMESH_MeshEditor_ptr, const int, const int); -}; - -#endif diff --git a/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx b/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx deleted file mode 100644 index 40400d499..000000000 --- a/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx +++ /dev/null @@ -1,751 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_SmoothingDlg.cxx -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#include "SMESHGUI_SmoothingDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_MeshUtils.h" -#include "SMESHGUI_SpinBox.h" -#include "SMESHGUI_IdValidator.h" - -#include "SMESH_Actor.h" -#include "SMESH_TypeFilter.hxx" -#include "SMESH_NumberFilter.hxx" -#include "SMESH_LogicalFilter.hxx" - -#include "SMDS_Mesh.hxx" - -#include "SUIT_ResourceMgr.h" -#include "SUIT_OverrideCursor.h" -#include "SUIT_Desktop.h" -#include "SUIT_MessageBox.h" - -#include "SVTK_ViewModel.h" -#include "SVTK_Selector.h" -#include "SVTK_ViewWindow.h" -#include "SVTK_Selection.h" -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// OCCT Includes -#include -#include - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// IDL Headers -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Group) - -using namespace std; - -//================================================================================= -// function : SMESHGUI_SmoothingDlg() -// purpose : constructor -//================================================================================= -SMESHGUI_SmoothingDlg::SMESHGUI_SmoothingDlg( 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 ) ) -{ - QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_SMOOTHING"))); - QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); - - if (!name) - setName("SMESHGUI_SmoothingDlg"); - resize(303, 185); - setCaption(tr("SMESH_SMOOTHING")); - setSizeGripEnabled(TRUE); - SMESHGUI_SmoothingDlgLayout = new QGridLayout(this); - SMESHGUI_SmoothingDlgLayout->setSpacing(6); - SMESHGUI_SmoothingDlgLayout->setMargin(11); - - /***************************************************************/ - GroupConstructors = new QButtonGroup(this, "GroupConstructors"); - GroupConstructors->setTitle(tr("SMESH_SMOOTHING" )); - GroupConstructors->setExclusive(TRUE); - GroupConstructors->setColumnLayout(0, Qt::Vertical); - GroupConstructors->layout()->setSpacing(0); - GroupConstructors->layout()->setMargin(0); - GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout()); - GroupConstructorsLayout->setAlignment(Qt::AlignTop); - GroupConstructorsLayout->setSpacing(6); - GroupConstructorsLayout->setMargin(11); - Constructor1 = new QRadioButton(GroupConstructors, "Constructor1"); - Constructor1->setText(tr("" )); - Constructor1->setPixmap(image0); - Constructor1->setChecked(TRUE); - Constructor1->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1, - (QSizePolicy::SizeType)0, - Constructor1->sizePolicy().hasHeightForWidth())); - Constructor1->setMinimumSize(QSize(50, 0)); - GroupConstructorsLayout->addWidget(Constructor1, 0, 0); - QSpacerItem* spacer = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupConstructorsLayout->addItem(spacer, 0, 1); - SMESHGUI_SmoothingDlgLayout->addWidget(GroupConstructors, 0, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - GroupButtons->setTitle(tr("")); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_APPLY" )); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - buttonOk = new QPushButton(GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_OK" )); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - SMESHGUI_SmoothingDlgLayout->addWidget(GroupButtons, 2, 0); - - /***************************************************************/ - GroupArguments = new QGroupBox(this, "GroupArguments"); - GroupArguments->setTitle(tr("SMESH_ARGUMENTS")); - 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" )); - GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0); - - SelectElementsButton = new QPushButton(GroupArguments, "SelectElementsButton"); - SelectElementsButton->setText(tr("" )); - SelectElementsButton->setPixmap(image1); - SelectElementsButton->setToggleButton(FALSE); - GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1); - - LineEditElements = new QLineEdit(GroupArguments, "LineEditElements"); - LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator")); - GroupArgumentsLayout->addWidget(LineEditElements, 0, 2); - - // 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); - - // Controls for nodes selection - TextLabelNodes = new QLabel(GroupArguments, "TextLabelNodes"); - TextLabelNodes->setText(tr("FIXED_NODES_IDS")); - GroupArgumentsLayout->addWidget(TextLabelNodes, 2, 0); - - SelectNodesButton = new QPushButton(GroupArguments, "SelectNodesButton"); - SelectNodesButton->setText(tr("" )); - SelectNodesButton->setPixmap(image1); - SelectNodesButton->setToggleButton(FALSE); - GroupArgumentsLayout->addWidget(SelectNodesButton, 2, 1); - - LineEditNodes = new QLineEdit(GroupArguments, "LineEditNodes"); - LineEditNodes->setValidator(new SMESHGUI_IdValidator(this, "validator")); - GroupArgumentsLayout->addWidget(LineEditNodes, 2, 2); - - // Controls for method selection - TextLabelMethod = new QLabel(GroupArguments, "TextLabelMethod"); - TextLabelMethod->setText(tr("METHOD" )); - GroupArgumentsLayout->addMultiCellWidget(TextLabelMethod, 3, 3, 0, 1); - - ComboBoxMethod = new QComboBox(GroupArguments, "ComboBoxMethod"); - GroupArgumentsLayout->addWidget(ComboBoxMethod, 3, 2); - - // Controls for iteration limit defining - TextLabelLimit = new QLabel(GroupArguments, "TextLabelLimit"); - TextLabelLimit->setText(tr("ITERATION_LIMIT" )); - GroupArgumentsLayout->addMultiCellWidget(TextLabelLimit, 4, 4, 0, 1); - - SpinBox_IterationLimit = new QSpinBox(GroupArguments, "SpinBox_IterationLimit"); - GroupArgumentsLayout->addWidget(SpinBox_IterationLimit, 4, 2); - - // Controls for max. aspect ratio defining - TextLabelAspectRatio = new QLabel(GroupArguments, "TextLabelAspectRatio"); - TextLabelAspectRatio->setText(tr("MAX_ASPECT_RATIO")); - GroupArgumentsLayout->addMultiCellWidget(TextLabelAspectRatio, 5, 5, 0, 1); - - SpinBox_AspectRatio = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_AspectRatio"); - GroupArgumentsLayout->addWidget(SpinBox_AspectRatio, 5, 2); - - // Check box "Is Parametric" - CheckBoxParametric = new QCheckBox( GroupArguments, "CheckBoxParametric" ); - CheckBoxParametric->setText( tr( "IS_PARAMETRIC" ) ); - GroupArgumentsLayout->addMultiCellWidget( CheckBoxParametric, 6, 6, 0, 2 ); - - - SMESHGUI_SmoothingDlgLayout->addWidget(GroupArguments, 1, 0); - - /* Initialisations */ - ComboBoxMethod->insertItem(tr("LAPLACIAN")); - ComboBoxMethod->insertItem(tr("CENTROIDAL")); - - ComboBoxMethod->setCurrentItem(0); - - CheckBoxParametric->setChecked( TRUE ); - - QIntValidator* anIntValidator = new QIntValidator(SpinBox_IterationLimit); - SpinBox_IterationLimit->setValidator(anIntValidator); - SpinBox_IterationLimit->setRange(1, 999999); - SpinBox_IterationLimit->setValue(20); - SpinBox_AspectRatio->RangeStepAndValidator(0.0, +999999.999, 0.1, 3); - SpinBox_AspectRatio->SetValue(1.1); - - GroupArguments->show(); - myConstructorId = 0; - Constructor1->setChecked(TRUE); - - mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); - - mySMESHGUI->SetActiveDialogBox(this); - - // Costruction of the logical filter for the elements: mesh/sub-mesh/group - 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); - - Init(); - - /***************************************************************/ - // signals and slots connections - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect(GroupConstructors, SIGNAL(clicked(int)), SLOT(ConstructorsClicked(int))); - - connect(SelectElementsButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectNodesButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - /* to close dialog if study change */ - connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); - connect(LineEditElements, SIGNAL(textChanged(const QString&)), - SLOT(onTextChange(const QString&))); - connect(LineEditNodes, SIGNAL(textChanged(const QString&)), - SLOT(onTextChange(const QString&))); - connect(CheckBoxMesh, SIGNAL(toggled(bool)), - SLOT(onSelectMesh(bool))); - - /***************************************************************/ - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); // displays Dialog -} - -//================================================================================= -// function : ~SMESHGUI_SmoothingDlg() -// purpose : destructor -//================================================================================= -SMESHGUI_SmoothingDlg::~SMESHGUI_SmoothingDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : initialization -//================================================================================= -void SMESHGUI_SmoothingDlg::Init() -{ - myBusy = false; - -// ComboBoxMethod->setCurrentItem(0); - -// SpinBox_IterationLimit->setValue(20); -// SpinBox_AspectRatio->SetValue(1.1); - - myEditCurrentArgument = LineEditElements; - LineEditElements->setFocus(); - LineEditElements->clear(); - LineEditNodes->clear(); - myElementsId = ""; - myNbOkElements = 0; - myNbOkNodes = 0; - myActor = 0; - myMesh = SMESH::SMESH_Mesh::_nil(); - - CheckBoxMesh->setChecked(false); - onSelectMesh(false); -} - -//================================================================================= -// function : ConstructorsClicked() -// purpose : Radio button management -//================================================================================= -void SMESHGUI_SmoothingDlg::ConstructorsClicked (int constructorId) -{ -} - -//================================================================================= -// function : ClickOnApply() -// purpose : Called when user presses button -//================================================================================= -void SMESHGUI_SmoothingDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return; - - if (myNbOkElements && - (myNbOkNodes || LineEditNodes->text().stripWhiteSpace().isEmpty())) { - QStringList aListElementsId = QStringList::split(" ", myElementsId, false); - QStringList aListNodesId = QStringList::split(" ", LineEditNodes->text(), false); - - SMESH::long_array_var anElementsId = new SMESH::long_array; - SMESH::long_array_var aNodesId = new SMESH::long_array; - - anElementsId->length(aListElementsId.count()); - for (int i = 0; i < aListElementsId.count(); i++) - anElementsId[i] = aListElementsId[i].toInt(); - - if (myNbOkNodes) { - aNodesId->length(aListNodesId.count()); - for (int i = 0; i < aListNodesId.count(); i++) - aNodesId[i] = aListNodesId[i].toInt(); - } else { - aNodesId->length(0); - } - - long anIterationLimit = (long)SpinBox_IterationLimit->value(); - double aMaxAspectRatio = SpinBox_AspectRatio->GetValue(); - - SMESH::SMESH_MeshEditor::Smooth_Method aMethod = SMESH::SMESH_MeshEditor::LAPLACIAN_SMOOTH; - if (ComboBoxMethod->currentItem() > 0) - aMethod = SMESH::SMESH_MeshEditor::CENTROIDAL_SMOOTH; - - bool aResult = false; - try { - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - QApplication::setOverrideCursor(Qt::waitCursor); - if ( CheckBoxParametric->isChecked() ) - aResult = aMeshEditor->SmoothParametric(anElementsId.inout(), aNodesId.inout(), - anIterationLimit, aMaxAspectRatio, aMethod); - else - aResult = aMeshEditor->Smooth(anElementsId.inout(), aNodesId.inout(), - anIterationLimit, aMaxAspectRatio, aMethod); - QApplication::restoreOverrideCursor(); - } catch (...) { - } - - if (aResult) { - Handle(SALOME_InteractiveObject) anIO = myActor->getIO(); - - SALOME_ListIO aList; - aList.Append(anIO); - mySelectionMgr->setSelectedObjects(aList, false); - SMESH::UpdateView(); - Init(); - } - } -} - -//================================================================================= -// function : ClickOnOk() -// purpose : Called when user presses button -//================================================================================= -void SMESHGUI_SmoothingDlg::ClickOnOk() -{ - ClickOnApply(); - ClickOnCancel(); -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : Called when dialog box is closed -//================================================================================= -void SMESHGUI_SmoothingDlg::ClickOnCancel() -{ - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearFilters(); - mySelectionMgr->clearSelected(); - SMESH::SetPickable(); // ??? - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySMESHGUI->ResetState(); - reject(); -} - -//======================================================================= -// function : onTextChange() -// purpose : -//======================================================================= -void SMESHGUI_SmoothingDlg::onTextChange (const QString& theNewText) -{ - QLineEdit* send = (QLineEdit*)sender(); - - // return if busy - if (myBusy) return; - - // set busy flag - myBusy = true; - - if (send == LineEditElements) - myNbOkElements = 0; - else if (send == LineEditNodes) - myNbOkNodes = 0; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - // hilight entered elements/nodes - SMDS_Mesh* aMesh = 0; - if (myActor) - aMesh = myActor->GetObject()->GetMesh(); - - if (aMesh) { - - QStringList aListId = QStringList::split(" ", theNewText, false); - - if (send == LineEditElements) { - const Handle(SALOME_InteractiveObject)& anIO = myActor->getIO(); - 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++; - } - mySelector->AddOrRemoveIndex(anIO, newIndices, false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( anIO, true, true ); - myElementsId = theNewText; - - } else if (send == LineEditNodes) { - TColStd_MapOfInteger newIndices; - - for (int i = 0; i < aListId.count(); i++) { - const SMDS_MeshNode * n = aMesh->FindNode(aListId[ i ].toInt()); - if (n) - newIndices.Add(n->GetID()); - myNbOkNodes++; - } - mySelector->AddOrRemoveIndex(myActor->getIO(), newIndices, false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( myActor->getIO(), true, true ); - } - } - - if (myNbOkElements && (myNbOkNodes || LineEditNodes->text().stripWhiteSpace().isEmpty())) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } - - myBusy = false; -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_SmoothingDlg::SelectionIntoArgument() -{ - if (myBusy) return; - - // clear - myActor = 0; - QString aString = ""; - - myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) { - LineEditElements->setText(aString); - myNbOkElements = 0; - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - } - myBusy = false; - - 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) - return; - - int aNbUnits = 0; - - if (myEditCurrentArgument == LineEditElements) { - myElementsId = ""; - - if (CheckBoxMesh->isChecked()) { - SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - - if (!SMESH::IObjectToInterface(IO)->_is_nil()) { //MESH - // get IDs from mesh - SMDS_Mesh* aSMDSMesh = myActor->GetObject()->GetMesh(); - if (!aSMDSMesh) - return; - - for (int i = aSMDSMesh->MinElementID(); i <= aSMDSMesh->MaxElementID(); i++ ) { - const SMDS_MeshElement * e = aSMDSMesh->FindElement(i); - if (e) { - myElementsId += QString(" %1").arg(i); - aNbUnits++; - } - } - } 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; - anElementsIds = aSubMesh->GetElementsId(); - for (int i = 0; i < anElementsIds->length(); i++) { - myElementsId += QString(" %1").arg(anElementsIds[i]); - } - aNbUnits = anElementsIds->length(); - } else { // GROUP - // get smesh group - SMESH::SMESH_GroupBase_var aGroup = - SMESH::IObjectToInterface(IO); - if (aGroup->_is_nil()) - 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]); - } - aNbUnits = anElementsIds->length(); - } - } else { - aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aString); - myElementsId = aString; - } - } else if (myEditCurrentArgument == LineEditNodes && !myMesh->_is_nil() && myActor) { - myNbOkNodes = 0; - aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString); - } else { - } - - if (aNbUnits < 1) - return; - - myBusy = true; - myEditCurrentArgument->setText(aString); - myBusy = false; - - // OK - if (myEditCurrentArgument == LineEditElements) - myNbOkElements = true; - else if (myEditCurrentArgument == LineEditNodes) - myNbOkNodes = true; - - if (myNbOkElements) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_SmoothingDlg::SetEditCurrentArgument() -{ - QPushButton* send = (QPushButton*)sender(); - - switch (myConstructorId) { - case 0: /* default constructor */ - { - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearSelected(); - mySelectionMgr->clearFilters(); - - if (send == SelectElementsButton) { - myEditCurrentArgument = LineEditElements; - SMESH::SetPointRepresentation(false); - if (CheckBoxMesh->isChecked()) { - mySelectionMgr->setSelectionModes(ActorSelection); - mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); - } else { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(CellSelection); - } - } else if (send == SelectNodesButton) { - myEditCurrentArgument = LineEditNodes; - SMESH::SetPointRepresentation(true); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - } - - myEditCurrentArgument->setFocus(); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - SelectionIntoArgument(); - break; - } - } -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : Deactivates this dialog -//================================================================================= -void SMESHGUI_SmoothingDlg::DeactivateActiveDialog() -{ - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); - GroupArguments->setEnabled(false); - GroupButtons->setEnabled(false); - mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : Activates this dialog -//================================================================================= -void SMESHGUI_SmoothingDlg::ActivateThisDialog() -{ - // Emit a signal to deactivate the active dialog - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupConstructors->setEnabled(true); - GroupArguments->setEnabled(true); - GroupButtons->setEnabled(true); - - mySMESHGUI->SetActiveDialogBox(this); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(CellSelection); - SelectionIntoArgument(); -} - -//================================================================================= -// function : enterEvent() -// purpose : Mouse enter event -//================================================================================= -void SMESHGUI_SmoothingDlg::enterEvent (QEvent*) -{ - if (!GroupConstructors->isEnabled()) - ActivateThisDialog(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_SmoothingDlg::closeEvent (QCloseEvent*) -{ - /* same than click on cancel button */ - this->ClickOnCancel(); -} - -//======================================================================= -// function : hideEvent() -// purpose : caused by ESC key -//======================================================================= -void SMESHGUI_SmoothingDlg::hideEvent (QHideEvent*) -{ - if (!isMinimized()) - ClickOnCancel(); -} - -//======================================================================= -// function : onSelectMesh() -// purpose : -//======================================================================= -void SMESHGUI_SmoothingDlg::onSelectMesh (bool toSelectMesh) -{ - if (toSelectMesh) - TextLabelElements->setText(tr("SMESH_NAME")); - else - TextLabelElements->setText(tr("SMESH_ID_ELEMENTS")); - - if (myEditCurrentArgument != LineEditElements) { - LineEditElements->clear(); - return; - } - - mySelectionMgr->clearFilters(); - SMESH::SetPointRepresentation(false); - - if (toSelectMesh) { - mySelectionMgr->setSelectionModes(ActorSelection); - mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); - LineEditElements->setReadOnly(true); - } else { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(CellSelection); - LineEditElements->setReadOnly(false); - onTextChange(LineEditElements->text()); - } - - SelectionIntoArgument(); -} diff --git a/src/SMESHGUI/SMESHGUI_SmoothingDlg.h b/src/SMESHGUI/SMESHGUI_SmoothingDlg.h deleted file mode 100644 index 32dc80513..000000000 --- a/src/SMESHGUI/SMESHGUI_SmoothingDlg.h +++ /dev/null @@ -1,139 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_SmoothingDlg.h -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#ifndef DIALOGBOX_SMOOTHING_H -#define DIALOGBOX_SMOOTHING_H - -#include "SalomeApp_SelectionMgr.h" - -#include "SMESH_LogicalFilter.hxx" - -// QT Includes -#include - -class QGridLayout; -class QButtonGroup; -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class QRadioButton; -class QComboBox; -class QCheckBox; -class QSpinBox; -class SMESHGUI_SpinBox; -class SMESHGUI; -class SMESH_Actor; -class SVTK_ViewWindow; -class SVTK_Selector; - - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - - -//================================================================================= -// class : SMESHGUI_SmoothingDlg -// purpose : -//================================================================================= -class SMESHGUI_SmoothingDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_SmoothingDlg( SMESHGUI*, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0); - ~SMESHGUI_SmoothingDlg(); - -private: - - void Init(); - void closeEvent(QCloseEvent*); - void enterEvent (QEvent*); /* mouse enter the QWidget */ - void hideEvent (QHideEvent*); /* ESC key */ - - SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ - SalomeApp_SelectionMgr* mySelectionMgr; /* User shape selection */ - QString myElementsId; - int myNbOkElements; /* to check when elements are defined */ - int myNbOkNodes; /* to check when fixed nodes are defined */ - int myConstructorId; /* Current constructor id = radio button id */ - QLineEdit* myEditCurrentArgument; /* Current LineEdit */ - SVTK_Selector* mySelector; - - bool myBusy; - SMESH::SMESH_Mesh_var myMesh; - SMESH_Actor* myActor; - SMESH_LogicalFilter* myMeshOrSubMeshOrGroupFilter; - - QButtonGroup* GroupConstructors; - QRadioButton* Constructor1; - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - QGroupBox* GroupArguments; - QLabel* TextLabelElements; - QPushButton* SelectElementsButton; - QLineEdit* LineEditElements; - QCheckBox* CheckBoxMesh; - QLabel* TextLabelNodes; - QPushButton* SelectNodesButton; - QLineEdit* LineEditNodes; - QLabel* TextLabelMethod; - QComboBox* ComboBoxMethod; - QLabel* TextLabelLimit; - QSpinBox* SpinBox_IterationLimit; - QLabel* TextLabelAspectRatio; - SMESHGUI_SpinBox* SpinBox_AspectRatio; - QCheckBox * CheckBoxParametric; - -private slots: - - void ConstructorsClicked(int constructorId); - void ClickOnOk(); - void ClickOnCancel(); - void ClickOnApply(); - void SetEditCurrentArgument() ; - void SelectionIntoArgument() ; - void DeactivateActiveDialog() ; - void ActivateThisDialog() ; - void onTextChange(const QString&); - void onSelectMesh(bool toSelectMesh); - -protected: - QGridLayout* SMESHGUI_SmoothingDlgLayout; - QGridLayout* GroupConstructorsLayout; - QGridLayout* GroupButtonsLayout; - QGridLayout* GroupArgumentsLayout; -}; - -#endif // DIALOGBOX_SMOOTHING_H diff --git a/src/SMESHGUI/SMESHGUI_SpinBox.cxx b/src/SMESHGUI/SMESHGUI_SpinBox.cxx deleted file mode 100644 index 54c247a80..000000000 --- a/src/SMESHGUI/SMESHGUI_SpinBox.cxx +++ /dev/null @@ -1,101 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_SpinBox.cxx -// Author : Lucien PIGNOLONI -// Module : SMESH -// $Header$ - -#include "SMESHGUI_SpinBox.h" -#include "SMESHGUI.h" - -#include -#include - -using namespace std; - -//================================================================================= -// class : SMESHGUI_SpinBox() -// purpose : constructor of specific widget accepting floats in double precision. -//================================================================================= -SMESHGUI_SpinBox::SMESHGUI_SpinBox (QWidget* parent, const char* name) - : QtxDblSpinBox(parent, name) -{ -} - -//================================================================================= -// function : SetStep() [SLOT] -// purpose : -//================================================================================= -void SMESHGUI_SpinBox::SetStep (double newStep) -{ - setLineStep(newStep); -} - -//================================================================================= -// function : ~SMESHGUI_SpinBox() -// purpose : destructor -//================================================================================= -SMESHGUI_SpinBox::~SMESHGUI_SpinBox() -{ -} - -//================================================================================= -// function : SetValue() -// purpose : -//================================================================================= -void SMESHGUI_SpinBox::SetValue (double v) -{ - setValue(v); - editor()->setCursorPosition( 0 ); -} - -//================================================================================= -// function : GetValue() -// purpose : returns a double -//================================================================================= -double SMESHGUI_SpinBox::GetValue() -{ - return value(); -} - -//================================================================================= -// function : GetString() -// purpose : returns a QString -//================================================================================= -QString SMESHGUI_SpinBox::GetString() -{ - return cleanText(); -} - -//================================================================================= -// function : RangeStepAndValidator() -// purpose : -//================================================================================= -void SMESHGUI_SpinBox::RangeStepAndValidator - (double min, double max, double step, unsigned short decimals) -{ - setRange(min, max); - setLineStep(step); - ((QDoubleValidator*)validator())->setRange(min, max, decimals); -} diff --git a/src/SMESHGUI/SMESHGUI_SpinBox.h b/src/SMESHGUI/SMESHGUI_SpinBox.h deleted file mode 100644 index 8655e4dfb..000000000 --- a/src/SMESHGUI/SMESHGUI_SpinBox.h +++ /dev/null @@ -1,58 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_SpinBox.h -// Author : Lucien PIGNOLONI -// Module : SMESH -// $Header$ - -#ifndef SMESH_SPINBOX_H -#define SMESH_SPINBOX_H - -#include - -//================================================================================= -// class : SMESHGUI_SpinBox -// purpose : Derivated from QtxDblSpinBox class -//================================================================================= -class SMESHGUI_SpinBox : public QtxDblSpinBox -{ - Q_OBJECT - -public: - SMESHGUI_SpinBox (QWidget* parent, const char* name = 0); - ~SMESHGUI_SpinBox(); - - void RangeStepAndValidator (double min = -1000000.0, - double max = +1000000.0, - double step = 100.0, - unsigned short decimals = 3); - void SetValue (double v); - double GetValue(); - QString GetString(); - QLineEdit* editor() { return QtxDblSpinBox::editor(); } - -public slots: - void SetStep (double newStep); -}; -#endif // SMESH_SPINBOX_H diff --git a/src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.cxx b/src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.cxx deleted file mode 100644 index 8960524b3..000000000 --- a/src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.cxx +++ /dev/null @@ -1,446 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_StandardMeshInfosDlg.cxx -// Author : Michael ZORIN -// Module : SMESH -// $Header$ - -#include "SMESHGUI_StandardMeshInfosDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_MeshUtils.h" - -#include "SMESH.hxx" -#include "SMESH_TypeFilter.hxx" - -#include "SALOMEDSClient_Study.hxx" -#include "SALOMEDSClient_SObject.hxx" - -#include "SUIT_Desktop.h" -#include "SUIT_Session.h" -#include "SUIT_OverrideCursor.h" - -#include "SalomeApp_SelectionMgr.h" -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// QT Includes -#include -#include -#include -#include -#include -#include -#include - -// IDL Headers -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_Group) -#include CORBA_SERVER_HEADER(GEOM_Gen) - -using namespace std; - - -//================================================================================= -/*! - * SMESHGUI_StandardMeshInfosDlg::SMESHGUI_StandardMeshInfosDlg - * - * Constructor - */ -//================================================================================= -SMESHGUI_StandardMeshInfosDlg::SMESHGUI_StandardMeshInfosDlg( SMESHGUI* theModule, const char* name, - bool modal, WFlags fl) - : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | - WStyle_Title | WStyle_SysMenu | WDestructiveClose), - mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) -{ - if (!name) - setName("SMESHGUI_StandardMeshInfosDlg"); - setCaption(tr("SMESH_STANDARD_MESHINFO_TITLE" )); - setSizeGripEnabled(TRUE); - - myStartSelection = true; - myIsActiveWindow = true; - - // dialog layout - QGridLayout* aDlgLayout = new QGridLayout(this); - aDlgLayout->setSpacing(6); - aDlgLayout->setMargin(11); - - // mesh group box - myMeshGroup = new QGroupBox(this, "myMeshGroup"); - myMeshGroup->setTitle(tr("SMESH_MESH")); - myMeshGroup->setColumnLayout(0, Qt::Vertical); - myMeshGroup->layout()->setSpacing(0); - myMeshGroup->layout()->setMargin(0); - QGridLayout* myMeshGroupLayout = new QGridLayout(myMeshGroup->layout()); - myMeshGroupLayout->setAlignment(Qt::AlignTop); - myMeshGroupLayout->setSpacing(6); - myMeshGroupLayout->setMargin(11); - - // select button, label and line edit with mesh name - myNameLab = new QLabel(myMeshGroup, "myNameLab"); - myNameLab->setText(tr("SMESH_NAME" )); - myMeshGroupLayout->addWidget(myNameLab, 0, 0); - - QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap("SMESH",tr("ICON_SELECT"))); - mySelectBtn = new QPushButton(myMeshGroup, "mySelectBtn"); - mySelectBtn->setPixmap(image0); - mySelectBtn->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); - myMeshGroupLayout->addWidget(mySelectBtn, 0, 1); - - myMeshLine = new QLineEdit(myMeshGroup, "myMeshLine"); - myMeshGroupLayout->addWidget(myMeshLine, 0, 2); - - aDlgLayout->addWidget(myMeshGroup, 0, 0); - - // information group box - myInfoGroup = new QGroupBox(this, "myInfoGroup"); - myInfoGroup->setTitle(tr("SMESH_INFORMATION")); - myInfoGroup->setColumnLayout(0, Qt::Vertical); - myInfoGroup->layout()->setSpacing(0); - myInfoGroup->layout()->setMargin(0); - QGridLayout* myInfoGroupLayout = new QGridLayout(myInfoGroup->layout()); - myInfoGroupLayout->setAlignment(Qt::AlignTop); - myInfoGroupLayout->setSpacing(6); - myInfoGroupLayout->setMargin(11); - - // information text browser - myInfo = new QTextBrowser(myInfoGroup, "myInfo"); - myInfoGroupLayout->addWidget(myInfo, 0, 0); - - aDlgLayout->addWidget(myInfoGroup, 1, 0); - - // buttons group - myButtonsGroup = new QGroupBox(this, "myButtonsGroup"); - myButtonsGroup->setColumnLayout(0, Qt::Vertical); - myButtonsGroup->layout()->setSpacing(0); myButtonsGroup->layout()->setMargin(0); - QHBoxLayout* myButtonsGroupLayout = new QHBoxLayout(myButtonsGroup->layout()); - myButtonsGroupLayout->setAlignment(Qt::AlignTop); - myButtonsGroupLayout->setSpacing(6); myButtonsGroupLayout->setMargin(11); - - // buttons --> OK button - myOkBtn = new QPushButton(tr("SMESH_BUT_OK" ), myButtonsGroup, "myOkBtn"); - myOkBtn->setAutoDefault(TRUE); myOkBtn->setDefault(TRUE); - myButtonsGroupLayout->addStretch(); - myButtonsGroupLayout->addWidget(myOkBtn); - myButtonsGroupLayout->addStretch(); - - aDlgLayout->addWidget(myButtonsGroup, 2, 0); - - mySMESHGUI->SetActiveDialogBox(this); - - // connect signals - connect( myOkBtn, SIGNAL(clicked()), this, SLOT(close())); - connect( mySelectBtn, SIGNAL(clicked()), this, SLOT(onStartSelection())); - connect( mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(close())); - connect( mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect( mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionChanged())); - - // resize and move dialog, then show - this->setMinimumSize(270, 428); - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); - - // init dialog with current selection - myMeshFilter = new SMESH_TypeFilter (MESH); - mySelectionMgr->installFilter(myMeshFilter); - onSelectionChanged(); -} - -//================================================================================= -/*! - * SMESHGUI_StandardMeshInfosDlg::~SMESHGUI_StandardMeshInfosDlg - * - * Destructor - */ -//================================================================================= -SMESHGUI_StandardMeshInfosDlg::~SMESHGUI_StandardMeshInfosDlg() -{ -} - -//================================================================================= -/*! - * SMESHGUI_StandardMeshInfosDlg::DumpMeshInfos - */ -//================================================================================= -void SMESHGUI_StandardMeshInfosDlg::DumpMeshInfos() -{ - SUIT_OverrideCursor wc; - - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList); - - int nbSel = aList.Extent(); - myInfo->clear(); - if (nbSel == 1) { - myStartSelection = false; - myMeshLine->setText(""); - SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(aList.First()); - - if (!aMesh->_is_nil()) { - QString aName, anInfo; - SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aName); - myMeshLine->setText(aName); - int aNbNodes = (int)aMesh->NbNodes(); - int aNbEdges = (int)aMesh->NbEdges(); - int aNbFaces = (int)aMesh->NbFaces(); - int aNbVolumes = (int)aMesh->NbVolumes(); - - int aDimension = 0; - double aNbDimElements = 0; - if (aNbVolumes > 0) { - aNbDimElements = aNbVolumes; - aDimension = 3; - } - else if(aNbFaces > 0) { - aNbDimElements = aNbFaces; - aDimension = 2; - } - else if(aNbEdges > 0) { - aNbDimElements = aNbEdges; - aDimension = 1; - } - else if(aNbNodes > 0) { - aNbDimElements = aNbNodes; - aDimension = 0; - } - - // information about the mesh - anInfo.append(QString("Nb of element of dimension %1: %2
").arg(aDimension).arg(aNbDimElements)); - anInfo.append(QString("Nb of nodes: %1

").arg(aNbNodes)); - - // information about the groups of the mesh - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); - _PTR(SObject) aMeshSO = SMESH::FindSObject(aMesh); - _PTR(SObject) anObj; - - bool hasGroup = false; - - // info about groups on nodes - aMeshSO->FindSubObject(Tag_NodeGroups, anObj); - if (anObj) { - _PTR(ChildIterator) it = aStudy->NewChildIterator(anObj); - if (it->More()) { - anInfo.append(QString("Groups:

")); - hasGroup = true; - } - for (; it->More(); it->Next()) { - _PTR(SObject) subObj = it->Value(); - CORBA::Object_var anObject = SMESH::SObjectToObject(subObj); - SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(anObject); - if (!aGroup->_is_nil()) { - anInfo.append(QString("- %1
").arg(aGroup->GetName())); - anInfo.append(QString("%1
").arg("on nodes")); - anInfo.append(QString("%1
").arg(aGroup->Size())); - // check if the group based on geometry - SMESH::SMESH_GroupOnGeom_var aGroupOnGeom = SMESH::SMESH_GroupOnGeom::_narrow(aGroup); - if (!aGroupOnGeom->_is_nil()) { - GEOM::GEOM_Object_var aGroupMainShape = aGroupOnGeom->GetShape(); - QString aShapeName = ""; - _PTR(SObject) aGeomObj, aRef; - if (subObj->FindSubObject(1, aGeomObj) && aGeomObj->ReferencedObject(aRef)) - aShapeName = aRef->GetName().c_str(); - anInfo.append(QString("based on %1 geometry object

").arg(aShapeName)); - } else { - anInfo.append(QString("
")); - } - } - } - } - - // info about groups on edges - anObj.reset(); - aMeshSO->FindSubObject(Tag_EdgeGroups, anObj); - if (anObj) { - _PTR(ChildIterator) it = aStudy->NewChildIterator(anObj); - if (!hasGroup && it->More()) { - anInfo.append(QString("Groups:

")); - hasGroup = true; - } - for (; it->More(); it->Next()) { - _PTR(SObject) subObj = it->Value(); - CORBA::Object_var anObject = SMESH::SObjectToObject(subObj); - SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(anObject); - if (!aGroup->_is_nil()) { - anInfo.append(QString("- %1
").arg(aGroup->GetName())); - anInfo.append(QString("%1
").arg("on edges")); - anInfo.append(QString("%1
").arg(aGroup->Size())); - // check if the group based on geometry - SMESH::SMESH_GroupOnGeom_var aGroupOnGeom = SMESH::SMESH_GroupOnGeom::_narrow(aGroup); - if (!aGroupOnGeom->_is_nil()) { - GEOM::GEOM_Object_var aGroupMainShape = aGroupOnGeom->GetShape(); - QString aShapeName = ""; - _PTR(SObject) aGeomObj, aRef; - if (subObj->FindSubObject(1, aGeomObj) && aGeomObj->ReferencedObject(aRef)) - aShapeName = aRef->GetName().c_str(); - anInfo.append(QString("based on %1 geometry object

").arg(aShapeName)); - } else { - anInfo.append(QString("
")); - } - } - } - } - - // info about groups on faces - anObj.reset(); - aMeshSO->FindSubObject(Tag_FaceGroups , anObj); - if (anObj) { - _PTR(ChildIterator) it = aStudy->NewChildIterator(anObj); - if (!hasGroup && it->More()) { - anInfo.append(QString("Groups:

")); - hasGroup = true; - } - for (; it->More(); it->Next()) { - _PTR(SObject) subObj = it->Value(); - CORBA::Object_var anObject = SMESH::SObjectToObject(subObj); - SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(anObject); - if (!aGroup->_is_nil()) { - anInfo.append(QString("- %1
").arg(aGroup->GetName())); - anInfo.append(QString("%1
").arg("on faces")); - anInfo.append(QString("%1
").arg(aGroup->Size())); - // check if the group based on geometry - SMESH::SMESH_GroupOnGeom_var aGroupOnGeom = SMESH::SMESH_GroupOnGeom::_narrow(aGroup); - if (!aGroupOnGeom->_is_nil()) { - GEOM::GEOM_Object_var aGroupMainShape = aGroupOnGeom->GetShape(); - QString aShapeName = ""; - _PTR(SObject) aGeomObj, aRef; - if (subObj->FindSubObject(1, aGeomObj) && aGeomObj->ReferencedObject(aRef)) - aShapeName = aRef->GetName().c_str(); - anInfo.append(QString("based on %1 geometry object

").arg(aShapeName)); - } else { - anInfo.append(QString("
")); - } - } - } - } - - // info about groups on volumes - anObj.reset(); - aMeshSO->FindSubObject(Tag_VolumeGroups, anObj); - if (anObj) { - _PTR(ChildIterator) it = aStudy->NewChildIterator(anObj); - if (!hasGroup && it->More()) - anInfo.append(QString("Groups:
")); - for (; it->More(); it->Next()) { - _PTR(SObject) subObj = it->Value(); - CORBA::Object_var anObject = SMESH::SObjectToObject(subObj); - SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(anObject); - if (!aGroup->_is_nil()) { - anInfo.append(QString("- %1
").arg(aGroup->GetName())); - anInfo.append(QString("%1
").arg("on volumes")); - anInfo.append(QString("%1
").arg(aGroup->Size())); - // check if the group based on geometry - SMESH::SMESH_GroupOnGeom_var aGroupOnGeom = SMESH::SMESH_GroupOnGeom::_narrow(aGroup); - if (!aGroupOnGeom->_is_nil()) { - GEOM::GEOM_Object_var aGroupMainShape = aGroupOnGeom->GetShape(); - QString aShapeName = ""; - _PTR(SObject) aGeomObj, aRef; - if (subObj->FindSubObject(1, aGeomObj) && aGeomObj->ReferencedObject(aRef)) - aShapeName = aRef->GetName().c_str(); - anInfo.append(QString("based on %1 geometry object

").arg(aShapeName)); - } else { - anInfo.append(QString("
")); - } - } - } - } - - myInfo->setText(anInfo); - return; - } - } -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection has changed -//================================================================================= -void SMESHGUI_StandardMeshInfosDlg::onSelectionChanged() -{ - if (myStartSelection) - DumpMeshInfos(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_StandardMeshInfosDlg::closeEvent (QCloseEvent* e) -{ - mySelectionMgr->clearFilters(); - mySMESHGUI->ResetState(); - QDialog::closeEvent(e); -} - -//================================================================================= -// function : windowActivationChange() -// purpose : called when window is activated/deactivated -//================================================================================= -void SMESHGUI_StandardMeshInfosDlg::windowActivationChange (bool oldActive) -{ - QDialog::windowActivationChange(oldActive); - if (isActiveWindow() && myIsActiveWindow != isActiveWindow()) - ActivateThisDialog(); - myIsActiveWindow = isActiveWindow(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_StandardMeshInfosDlg::DeactivateActiveDialog() -{ - disconnect(mySelectionMgr, 0, this, 0); -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_StandardMeshInfosDlg::ActivateThisDialog() -{ - /* Emit a signal to deactivate any active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog(); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionChanged())); -} - -//================================================================================= -// function : onStartSelection() -// purpose : starts selection -//================================================================================= -void SMESHGUI_StandardMeshInfosDlg::onStartSelection() -{ - myStartSelection = true; - mySelectionMgr->installFilter(myMeshFilter); - myMeshLine->setText(tr("Select a mesh")); - onSelectionChanged(); - myStartSelection = true; -} diff --git a/src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.h b/src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.h deleted file mode 100644 index 7fcbdc239..000000000 --- a/src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.h +++ /dev/null @@ -1,88 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_StandardMeshInfosDlg.h -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#ifndef SMESHGUI_STANDARDMESHINFOSDLG_H -#define SMESHGUI_STANDARDMESHINFOSDLG_H - -//#include "SMESH_TypeFilter.hxx" -#include "SUIT_SelectionFilter.h" - -// QT Includes -#include - -class QGroupBox; -class QLabel; -class QPushButton; -class QLineEdit; -class QTextBrowser; -class SalomeApp_SelectionMgr; -class SMESHGUI; - - -class SMESHGUI_StandardMeshInfosDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_StandardMeshInfosDlg( SMESHGUI*, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ); - ~SMESHGUI_StandardMeshInfosDlg(); - -protected: - void closeEvent( QCloseEvent* e ); - void windowActivationChange( bool oldActive ); - void DumpMeshInfos(); - -private slots: - void onSelectionChanged(); - void DeactivateActiveDialog() ; - void ActivateThisDialog(); - void onStartSelection(); - -private: - SMESHGUI* mySMESHGUI; - SalomeApp_SelectionMgr* mySelectionMgr; - bool myStartSelection; - bool myIsActiveWindow; - - //Handle(SMESH_TypeFilter) myMeshFilter; - SUIT_SelectionFilter* myMeshFilter; - - QLabel* myNameLab; - QPushButton* mySelectBtn; - QLineEdit* myMeshLine; - - QTextBrowser* myInfo; - - QGroupBox* myMeshGroup; - QGroupBox* myInfoGroup; - - QGroupBox* myButtonsGroup; - QPushButton* myOkBtn; -}; - -#endif // SMESHGUI_STANDARDMESHINFOSDLG_H diff --git a/src/SMESHGUI/SMESHGUI_Swig.cxx b/src/SMESHGUI/SMESHGUI_Swig.cxx deleted file mode 100644 index d8a0805e3..000000000 --- a/src/SMESHGUI/SMESHGUI_Swig.cxx +++ /dev/null @@ -1,485 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Swig.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -using namespace std; -#include "SMESHGUI_Swig.hxx" - -#include "Utils_ORB_INIT.hxx" -#include "Utils_SINGLETON.hxx" - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_GEOMGenUtils.h" - -// SALOME Includes -#include "SUIT_ResourceMgr.h" -#include "SUIT_Session.h" - -#include "SALOMEDS_SObject.hxx" - -#include "SalomeApp_Application.h" - -#include "utilities.h" - -// Open CASCADE Includes -#include - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Gen) -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_Hypothesis) - -static CORBA::ORB_var _orb; - -static CORBA::Object_ptr StringToObject (const char* ior) -{ - return _orb->string_to_object(ior); -} - -SMESH_Swig::SMESH_Swig() -{ - MESSAGE("Constructeur"); - setOrb(); -} - -void SMESH_Swig::Init(int studyID) -{ - MESSAGE("Init"); - SMESH::SMESH_Gen_var CompMesh = SMESHGUI::GetSMESHGen(); - GEOM::GEOM_Gen_var CompGeom = SMESH::GetGEOMGen(); - - SUIT_ResourceMgr* resMgr = SMESHGUI::resourceMgr(); - if ( resMgr ) { - resMgr->loadLanguage( QString::null, "en" ); - /*QString msg; - if (!resMgr->loadResources( "SMESH", msg )) - MESSAGE ( msg )*/ - } - - SalomeApp_Application* app = dynamic_cast( SUIT_Session::session()->activeApplication() ); - if( !app ) - return; - - CORBA::Object_var obj = app->namingService()->Resolve("/myStudyManager"); - SALOMEDS::StudyManager_var myStudyMgr = SALOMEDS::StudyManager::_narrow(obj); - myStudy = myStudyMgr->GetStudyByID(studyID); - - CompMesh->SetCurrentStudy( myStudy.in() ); - - myStudyBuilder = myStudy->NewBuilder(); - SALOMEDS::GenericAttribute_var anAttr; - SALOMEDS::AttributeName_var aName; - SALOMEDS::AttributePixMap_var aPixmap; - - // See return value of SMESH::SMESH_Gen::ComponentDataType() - SALOMEDS::SComponent_var father = myStudy->FindComponent("SMESH"); - - if (father->_is_nil()) { - bool aLocked = myStudy->GetProperties()->IsLocked(); - if (aLocked) myStudy->GetProperties()->SetLocked(false); - father = myStudyBuilder->NewComponent("SMESH"); - anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributeName"); - aName = SALOMEDS::AttributeName::_narrow(anAttr); - //NRI aName->SetValue(QObject::tr("SMESH_MEN_COMPONENT")); - SMESHGUI* gui = SMESHGUI::GetSMESHGUI(); //SRN: BugID IPAL9186, load a SMESH gui if it hasn't been loaded - if(!gui) { - SalomeApp_Application* app = dynamic_cast(SUIT_Session::session()->activeApplication()); - if(app) { - CAM_Module* module = app->module( "Mesh" ); - if(!module) module = app->loadModule("Mesh"); - gui = dynamic_cast( module ); - } - else { - MESSAGE("Can't find the application"); - } - } //SRN: BugID IPAL9186: end of a fix - aName->SetValue( gui->moduleName() ); - anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap"); - aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); - aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" ); - myStudyBuilder->DefineComponentInstance(father, CompMesh ); - if (aLocked) myStudy->GetProperties()->SetLocked(true); - } - mySComponentMesh = SALOMEDS::SComponent::_narrow( father ); - - // Tags definition - Tag_HypothesisRoot = 1; - Tag_AlgorithmsRoot = 2; - - Tag_RefOnShape = 1; - Tag_RefOnAppliedHypothesis = 2; - Tag_RefOnAppliedAlgorithms = 3; - - Tag_SubMeshOnVertex = 4; - Tag_SubMeshOnEdge = 5; - Tag_SubMeshOnFace = 6; - Tag_SubMeshOnSolid = 7; - Tag_SubMeshOnCompound = 8; -} - -SMESH_Swig::~SMESH_Swig() -{ - MESSAGE("Destructeur"); -} - -const char* SMESH_Swig::AddNewMesh(const char* IOR) -{ - MESSAGE("AddNewMesh"); - - // VSR: added temporarily - to be removed - objects are published automatically by engine - SALOMEDS::SObject_var SO = myStudy->FindObjectIOR( IOR ); - if ( !SO->_is_nil() ) - return SO->GetID(); - - //Find or Create Hypothesis root - SALOMEDS::GenericAttribute_var anAttr; - SALOMEDS::AttributeName_var aName; - SALOMEDS::AttributeIOR_var anIOR; - SALOMEDS::AttributeSelectable_var aSelAttr; - SALOMEDS::AttributePixMap_var aPixmap; - - SALOMEDS::SObject_var HypothesisRoot; - if (!mySComponentMesh->FindSubObject (Tag_HypothesisRoot, HypothesisRoot)) { - HypothesisRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot); - anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeName"); - aName = SALOMEDS::AttributeName::_narrow(anAttr); - aName->SetValue(QObject::tr("SMESH_MEN_HYPOTHESIS")); - anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributePixMap"); - aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); - aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" ); - anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable"); - aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr); - aSelAttr->SetSelectable(false); - } - - SALOMEDS::SObject_var AlgorithmsRoot; - if (!mySComponentMesh->FindSubObject (Tag_AlgorithmsRoot, AlgorithmsRoot)) { - AlgorithmsRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot); - anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeName"); - aName = SALOMEDS::AttributeName::_narrow(anAttr); - aName->SetValue(QObject::tr("SMESH_MEN_ALGORITHMS")); - anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap"); - aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); - aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" ); - anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable"); - aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr); - aSelAttr->SetSelectable(false); - } - - // Add New Mesh - SALOMEDS::SObject_var newMesh = myStudyBuilder->NewObject(mySComponentMesh); - anAttr = myStudyBuilder->FindOrCreateAttribute(newMesh, "AttributePixMap"); - aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); - aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" ); - anAttr = myStudyBuilder->FindOrCreateAttribute(newMesh, "AttributeIOR"); - anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); - anIOR->SetValue(IOR); - return SALOMEDS::SObject::_narrow( newMesh )->GetID(); -} - -const char* SMESH_Swig::AddNewHypothesis(const char* IOR) -{ - MESSAGE("AddNewHypothesis"); - - // VSR: added temporarily - to be removed - objects are published automatically by engine - SALOMEDS::SObject_var SO = myStudy->FindObjectIOR( IOR ); - if ( !SO->_is_nil() ) - return SO->GetID(); - - //Find or Create Hypothesis root - SALOMEDS::SObject_var HypothesisRoot; - SALOMEDS::GenericAttribute_var anAttr; - SALOMEDS::AttributeName_var aName; - SALOMEDS::AttributeIOR_var anIOR; - SALOMEDS::AttributeSelectable_var aSelAttr; - SALOMEDS::AttributePixMap_var aPixmap; - - if (!mySComponentMesh->FindSubObject (Tag_HypothesisRoot, HypothesisRoot)) { - HypothesisRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot); - anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeName"); - aName = SALOMEDS::AttributeName::_narrow(anAttr); - aName->SetValue(QObject::tr("SMESH_MEN_HYPOTHESIS")); - anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable"); - aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr); - aSelAttr->SetSelectable(false); - anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributePixMap"); - aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); - aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" ); - } - // Add New Hypothesis - SALOMEDS::SObject_var newHypo = myStudyBuilder->NewObject(HypothesisRoot); - anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributePixMap"); - aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); - SMESH::SMESH_Hypothesis_var H = SMESH::SMESH_Hypothesis::_narrow( StringToObject(IOR) ); - QString aType = H->GetName(); - aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_" + aType ); -// if ( aType.compare("LocalLength") == 0 ) -// aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_LENGTH" ); -// else if ( aType.compare("NumberOfSegments") == 0 ) -// aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_SEGMENT" ); -// else if ( aType.compare("MaxElementArea") == 0 ) -// aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_AREA" ); -// else if ( aType.compare("MaxElementVolume") == 0 ) -// aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_VOLUME" ); - anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributeIOR"); - anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); - anIOR->SetValue(IOR); - return SALOMEDS::SObject::_narrow(newHypo)->GetID(); -} - -const char* SMESH_Swig::AddNewAlgorithms(const char* IOR) -{ - MESSAGE("AddNewAlgorithms"); - - // VSR: added temporarily - to be removed - objects are published automatically by engine - SALOMEDS::SObject_var SO = myStudy->FindObjectIOR( IOR ); - if ( !SO->_is_nil() ) - return SO->GetID(); - - //Find or Create Algorithms root - SALOMEDS::SObject_var AlgorithmsRoot; - SALOMEDS::GenericAttribute_var anAttr; - SALOMEDS::AttributeName_var aName; - SALOMEDS::AttributeIOR_var anIOR; - SALOMEDS::AttributeSelectable_var aSelAttr; - SALOMEDS::AttributePixMap_var aPixmap; - - if (!mySComponentMesh->FindSubObject (Tag_AlgorithmsRoot, AlgorithmsRoot)) { - AlgorithmsRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot); - anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeName"); - aName = SALOMEDS::AttributeName::_narrow(anAttr); - aName->SetValue(QObject::tr("SMESH_MEN_ALGORITHMS")); - anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable"); - aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr); - aSelAttr->SetSelectable(false); - anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap"); - aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); - aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" ); - } - // Add New Algorithms - SALOMEDS::SObject_var newHypo = myStudyBuilder->NewObject(AlgorithmsRoot); - anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributePixMap"); - aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); - SMESH::SMESH_Hypothesis_var H = SMESH::SMESH_Hypothesis::_narrow( StringToObject(IOR) ); - QString aType = H->GetName(); - aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_" + aType ); -// if ( aType.compare("Regular_1D") == 0 ) -// aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_REGULAR" ); -// else if ( aType.compare("MEFISTO_2D") == 0 ) -// aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_MEFISTO" ); -// else if ( aType.compare("Quadrangle_2D") == 0 ) -// aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_QUAD" ); -// else if ( aType.compare("Hexa_3D") == 0 ) -// aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_HEXA" ); - anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributeIOR"); - anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); - anIOR->SetValue(IOR); - return SALOMEDS::SObject::_narrow(newHypo)->GetID(); -} - -void SMESH_Swig::SetShape(const char* ShapeEntry, const char* MeshEntry) -{ - SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( MeshEntry ); - SALOMEDS::SObject_var SO_GeomShape = myStudy->FindObjectID( ShapeEntry ); - - if ( !SO_MorSM->_is_nil() && !SO_GeomShape->_is_nil() ) { - SALOMEDS::SObject_var SO = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnShape); - myStudyBuilder->Addreference (SO,SO_GeomShape); - } -} - -void SMESH_Swig::SetHypothesis(const char* Mesh_Or_SubMesh_Entry, const char* Hypothesis_Entry) -{ - SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( Mesh_Or_SubMesh_Entry ); - SALOMEDS::SObject_var SO_Hypothesis = myStudy->FindObjectID( Hypothesis_Entry ); - SALOMEDS::GenericAttribute_var anAttr; - SALOMEDS::AttributeName_var aName; - SALOMEDS::AttributeSelectable_var aSelAttr; - SALOMEDS::AttributePixMap_var aPixmap; - - if ( !SO_MorSM->_is_nil() && !SO_Hypothesis->_is_nil() ) { - - //Find or Create Applied Hypothesis root - SALOMEDS::SObject_var AHR; - if (!SO_MorSM->FindSubObject (Tag_RefOnAppliedHypothesis, AHR)) { - AHR = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnAppliedHypothesis); - anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeName"); - aName = SALOMEDS::AttributeName::_narrow(anAttr); - aName->SetValue(QObject::tr("SMESH_MEN_APPLIED_HYPOTHESIS")); - anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeSelectable"); - aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr); - aSelAttr->SetSelectable(false); - anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributePixMap"); - aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); - aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" ); - } - SALOMEDS::SObject_var SO = myStudyBuilder->NewObject(AHR); - myStudyBuilder->Addreference (SO,SO_Hypothesis); - } -} - -void SMESH_Swig::SetAlgorithms(const char* Mesh_Or_SubMesh_Entry, const char* Algorithms_Entry) -{ - SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( Mesh_Or_SubMesh_Entry ); - SALOMEDS::SObject_var SO_Algorithms = myStudy->FindObjectID( Algorithms_Entry ); - SALOMEDS::GenericAttribute_var anAttr; - SALOMEDS::AttributeName_var aName; - SALOMEDS::AttributeSelectable_var aSelAttr; - SALOMEDS::AttributePixMap_var aPixmap; - - if ( !SO_MorSM->_is_nil() && !SO_Algorithms->_is_nil() ) { - //Find or Create Applied Algorithms root - SALOMEDS::SObject_var AHR; - if (!SO_MorSM->FindSubObject (Tag_RefOnAppliedAlgorithms, AHR)) { - AHR = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnAppliedAlgorithms); - anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeName"); - aName = SALOMEDS::AttributeName::_narrow(anAttr); - aName->SetValue(QObject::tr("SMESH_MEN_APPLIED_ALGORIHTMS")); - anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeSelectable"); - aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr); - aSelAttr->SetSelectable(false); - anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributePixMap"); - aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); - aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" ); - } - SALOMEDS::SObject_var SO = myStudyBuilder->NewObject(AHR); - myStudyBuilder->Addreference (SO,SO_Algorithms); - } -} - -void SMESH_Swig::UnSetHypothesis(const char* Applied_Hypothesis_Entry ) -{ - SALOMEDS::SObject_var SO_Applied_Hypothesis = myStudy->FindObjectID( Applied_Hypothesis_Entry ); - if ( !SO_Applied_Hypothesis->_is_nil() ) - myStudyBuilder->RemoveObject(SO_Applied_Hypothesis); -} - -const char* SMESH_Swig::AddSubMesh(const char* SO_Mesh_Entry, const char* SM_IOR, int ST) -{ - SALOMEDS::SObject_var SO_Mesh = myStudy->FindObjectID( SO_Mesh_Entry ); - if ( !SO_Mesh->_is_nil() ) { - - long Tag_Shape ; - Standard_CString Name; - - if (ST == TopAbs_SOLID) {Tag_Shape = Tag_SubMeshOnSolid; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnSolid"));} - else if (ST == TopAbs_FACE) {Tag_Shape = Tag_SubMeshOnFace; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnFace"));} - else if (ST == TopAbs_EDGE) {Tag_Shape = Tag_SubMeshOnEdge; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnEdge"));} - else if (ST == TopAbs_VERTEX){Tag_Shape = Tag_SubMeshOnVertex; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnVertex"));} - else { - Tag_Shape = Tag_SubMeshOnCompound; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnCompound")); - } - SALOMEDS::SObject_var SubmeshesRoot; - SALOMEDS::GenericAttribute_var anAttr; - SALOMEDS::AttributeName_var aName; - SALOMEDS::AttributeIOR_var anIOR; - SALOMEDS::AttributeSelectable_var aSelAttr; - if (!SO_Mesh->FindSubObject (Tag_Shape,SubmeshesRoot )) { - SubmeshesRoot = myStudyBuilder->NewObjectToTag (SO_Mesh, Tag_Shape); - anAttr = myStudyBuilder->FindOrCreateAttribute(SubmeshesRoot, "AttributeName"); - aName = SALOMEDS::AttributeName::_narrow(anAttr); - aName->SetValue(Name); - anAttr = myStudyBuilder->FindOrCreateAttribute(SubmeshesRoot, "AttributeSelectable"); - aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr); - aSelAttr->SetSelectable(false); - } - - free(Name); - - SALOMEDS::SObject_var SO = myStudyBuilder->NewObject (SubmeshesRoot); - anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeIOR"); - anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); - anIOR->SetValue(SM_IOR); - return SALOMEDS::SObject::_narrow( SO )->GetID(); - } - return ""; -} - -const char* SMESH_Swig::AddSubMeshOnShape(const char* Mesh_Entry, const char* GeomShape_Entry, - const char* SM_IOR, int ST) -{ - SALOMEDS::SObject_var SO_GeomShape = myStudy->FindObjectID( GeomShape_Entry ); - if ( !SO_GeomShape->_is_nil() ) { - const char * SM_Entry = AddSubMesh (Mesh_Entry,SM_IOR,ST); - SALOMEDS::SObject_var SO_SM = myStudy->FindObjectID( SM_Entry ); - if ( !SO_SM->_is_nil() ) { - SetShape (GeomShape_Entry, SM_Entry); - return SALOMEDS::SObject::_narrow( SO_SM )->GetID(); - } - } - return ""; -} - -void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry ) -{ - // SMESH_Actor* Mesh = smeshGUI->ReadScript(aM); -} - -void SMESH_Swig::SetName(const char* Entry, const char* Name) -{ - SALOMEDS::SObject_var SO = myStudy->FindObjectID( Entry ); - SALOMEDS::GenericAttribute_var anAttr; - SALOMEDS::AttributeName_var aName; - if ( !SO->_is_nil() ) { - anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeName"); - aName = SALOMEDS::AttributeName::_narrow(anAttr); - aName->SetValue(Name); - } -} - -void SMESH_Swig::setOrb() -{ - try { - ORB_INIT &init = *SINGLETON_::Instance(); - ASSERT(SINGLETON_::IsAlreadyExisting()); - _orb = init( 0 , 0 ); - } catch (...) { - INFOS("internal error : orb not found"); - _orb = 0; - } - ASSERT(! CORBA::is_nil(_orb)); -} - -//================================================================================ -/*! - * \brief Set mesh icon according to compute status - * \param Mesh_Entry - entry of a mesh - * \param isComputed - is mesh computed or not - */ -//================================================================================ - -void SMESH_Swig::SetMeshIcon(const char* Mesh_Entry, const bool isComputed) -{ - SALOMEDS::SObject_var mesh_var = myStudy->FindObjectID( Mesh_Entry ); - if ( !mesh_var->_is_nil() ) { - _PTR(SObject) mesh = _PTR(SObject)(new SALOMEDS_SObject( mesh_var )); - if ( mesh ) - SMESH::ModifiedMesh( mesh, isComputed ); - } -} diff --git a/src/SMESHGUI/SMESHGUI_Swig.hxx b/src/SMESHGUI/SMESHGUI_Swig.hxx deleted file mode 100644 index e1b2ebcbc..000000000 --- a/src/SMESHGUI/SMESHGUI_Swig.hxx +++ /dev/null @@ -1,94 +0,0 @@ -// SMESH SMESH : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_Swig.hxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef _SMESHGUI_SWIG_HXX_ -#define _SMESHGUI_SWIG_HXX_ - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SALOMEDS) -#include CORBA_SERVER_HEADER(SALOMEDS_Attributes) - -class SMESH_Swig -{ -public: - SMESH_Swig(); - ~SMESH_Swig(); - - static void setOrb(); - - void Init(int studyID); - - const char* AddNewMesh(const char* IOR); - - const char* AddNewHypothesis(const char* IOR); - const char* AddNewAlgorithms(const char* IOR); - - void SetShape(const char* ShapeEntry, const char* MeshEntry); - - void SetHypothesis(const char* Mesh_Or_SubMesh_Entry, const char* Hypothesis_Entry); - void SetAlgorithms(const char* Mesh_Or_SubMesh_Entry, const char* Algorithms_Entry); - - void UnSetHypothesis(const char* Applied_Hypothesis_Entry ); - - const char* AddSubMesh (const char* Mesh_Entry, const char* SM_IOR, int ST); - const char* AddSubMeshOnShape (const char* Mesh_Entry, const char* GeomShape_Entry, const char* SM_IOR, int ST); - - void CreateAndDisplayActor( const char* Mesh_Entry ); - - void SetName(const char* Entry, const char* Name); - - /*! - * \brief Set mesh icon according to compute status - * \param Mesh_Entry - entry of a mesh - * \param isComputed - is mesh computed or not - */ - void SetMeshIcon(const char* Mesh_Entry, const bool isComputed); - -private: - SALOMEDS::Study_var myStudy; - SALOMEDS::StudyBuilder_var myStudyBuilder; - SALOMEDS::SComponent_var mySComponentMesh; - - // Tags definition - long Tag_HypothesisRoot; - long Tag_AlgorithmsRoot; - - long Tag_RefOnShape; - long Tag_RefOnAppliedHypothesis; - long Tag_RefOnAppliedAlgorithms; - - long Tag_SubMeshOnVertex; - long Tag_SubMeshOnEdge; - long Tag_SubMeshOnFace; - long Tag_SubMeshOnSolid; - long Tag_SubMeshOnCompound; -}; - - -#endif diff --git a/src/SMESHGUI/SMESHGUI_Swig.i b/src/SMESHGUI/SMESHGUI_Swig.i deleted file mode 100644 index 2a99fe192..000000000 --- a/src/SMESHGUI/SMESHGUI_Swig.i +++ /dev/null @@ -1,60 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_Swig.i -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -%{ -#include "SMESHGUI_Swig.hxx" -%} - -%include "typemaps.i" - -class SMESH_Swig -{ - public: - SMESH_Swig(); - ~SMESH_Swig(); - - void Init(int studyID); - - const char* AddNewMesh(const char* IOR); - const char* AddNewHypothesis(const char* IOR); - const char* AddNewAlgorithms(const char* IOR); - - void SetShape(const char* ShapeEntry, const char* MeshEntry); - - void SetHypothesis(const char* Mesh_Or_SubMesh_Entry, const char* Hypothesis_Entry); - void SetAlgorithms(const char* Mesh_Or_SubMesh_Entry, const char* Algorithms_Entry); - - void UnSetHypothesis(const char* Applied_Hypothesis_Entry ); - - const char* AddSubMesh (const char* Mesh_Entry, const char* SM_IOR, int ST); - const char* AddSubMeshOnShape (const char* Mesh_Entry, const char* GeomShape_Entry, const char* SM_IOR, int ST); - - void SetName(const char* Entry, const char* Name); - - void SetMeshIcon(const char* Mesh_Entry, const bool isComputed); -}; diff --git a/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx b/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx deleted file mode 100644 index fe52986e5..000000000 --- a/src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx +++ /dev/null @@ -1,893 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_SymmetryDlg.cxx -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#include "SMESHGUI_SymmetryDlg.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 "SUIT_Desktop.h" -#include "SUIT_ResourceMgr.h" - -#include "SVTK_ViewModel.h" -#include "SVTK_ViewWindow.h" -#include "SVTK_Selector.h" -#include "SVTK_Selection.h" -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// OCCT Includes -#include -#include - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// IDL Headers -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Group) - -using namespace std; - -//================================================================================= -// 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 | - WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose), - mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) -{ - QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SMESH_SYMMETRY_POINT"))); - QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SMESH_SYMMETRY_AXIS"))); - QPixmap image2 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SMESH_SYMMETRY_PLANE"))); - QPixmap image3 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); - - if (!name) - setName("SMESHGUI_SymmetryDlg"); - resize(303, 185); - setCaption(tr("SMESH_SYMMETRY")); - setSizeGripEnabled(TRUE); - SMESHGUI_SymmetryDlgLayout = new QGridLayout(this); - SMESHGUI_SymmetryDlgLayout->setSpacing(6); - SMESHGUI_SymmetryDlgLayout->setMargin(11); - - /***************************************************************/ - GroupConstructors = new QButtonGroup(this, "GroupConstructors"); - GroupConstructors->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)5, - (QSizePolicy::SizeType)0, 0, 0, - GroupConstructors->sizePolicy().hasHeightForWidth())); - GroupConstructors->setTitle(tr("SMESH_SYMMETRY" )); - GroupConstructors->setExclusive(TRUE); - GroupConstructors->setColumnLayout(0, Qt::Vertical); - GroupConstructors->layout()->setSpacing(0); - GroupConstructors->layout()->setMargin(0); - GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout()); - GroupConstructorsLayout->setAlignment(Qt::AlignTop); - GroupConstructorsLayout->setSpacing(6); - GroupConstructorsLayout->setMargin(11); - QHBoxLayout* RBLayout = new QHBoxLayout(0, 0, 6, "Layout2"); - RadioButton1= new QRadioButton(GroupConstructors, "RadioButton1"); - RadioButton1->setText(tr("" )); - RadioButton1->setPixmap(image0); - RBLayout->addWidget(RadioButton1); - RadioButton2= new QRadioButton(GroupConstructors, "RadioButton2"); - RadioButton2->setText(tr("" )); - RadioButton2->setPixmap(image1); - RBLayout->addWidget(RadioButton2); - RadioButton3= new QRadioButton(GroupConstructors, "RadioButton3"); - RadioButton3->setText(tr("" )); - RadioButton3->setPixmap(image2); - RBLayout->addWidget(RadioButton3); - GroupConstructorsLayout->addLayout(RBLayout, 0, 0); - SMESHGUI_SymmetryDlgLayout->addWidget(GroupConstructors, 0, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)7, - (QSizePolicy::SizeType)0, 0, 0, - GroupButtons->sizePolicy().hasHeightForWidth())); - GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - GroupButtons->setTitle(tr("" )); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_APPLY" )); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - buttonOk = new QPushButton(GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_OK" )); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - SMESHGUI_SymmetryDlgLayout->addWidget(GroupButtons, 2, 0); - - /***************************************************************/ - GroupArguments = new QGroupBox(this, "GroupArguments"); - GroupArguments->setTitle(tr("SMESH_ARGUMENTS")); - 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); - - SelectElementsButton = new QPushButton(GroupArguments, "SelectElementsButton"); - SelectElementsButton->setText(tr("" )); - SelectElementsButton->setPixmap(image3); - SelectElementsButton->setToggleButton(FALSE); - GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1); - - LineEditElements = new QLineEdit(GroupArguments, "LineEditElements"); - LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator")); - GroupArgumentsLayout->addWidget(LineEditElements, 0, 2); - - // 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); - - // Controls for mirror selection - GroupMirror = new QGroupBox(GroupArguments, "GroupMirror"); - GroupMirror->setColumnLayout(0, Qt::Vertical); - GroupMirror->layout()->setSpacing(0); - GroupMirror->layout()->setMargin(0); - QGridLayout* GroupMirrorLayout = new QGridLayout(GroupMirror->layout()); - GroupMirrorLayout->setAlignment(Qt::AlignTop); - GroupMirrorLayout->setSpacing(6); - GroupMirrorLayout->setMargin(11); - - TextLabelPoint = new QLabel(GroupMirror, "TextLabelPoint"); - TextLabelPoint->setText(tr("SMESH_POINT")); - GroupMirrorLayout->addWidget(TextLabelPoint, 0, 0); - - SelectPointButton = new QPushButton(GroupMirror, "SelectPointButton"); - SelectPointButton->setPixmap(image3); - GroupMirrorLayout->addWidget(SelectPointButton, 0, 1); - - TextLabelX = new QLabel(GroupMirror, "TextLabelX"); - TextLabelX->setText(tr("SMESH_X")); - GroupMirrorLayout->addWidget(TextLabelX, 0, 2); - - SpinBox_X = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_X"); - GroupMirrorLayout->addWidget(SpinBox_X, 0, 3); - - TextLabelY = new QLabel(GroupMirror, "TextLabelY"); - TextLabelY->setText(tr("SMESH_Y")); - GroupMirrorLayout->addWidget(TextLabelY, 0, 4); - - SpinBox_Y = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_Y"); - GroupMirrorLayout->addWidget(SpinBox_Y, 0, 5); - - TextLabelZ = new QLabel(GroupMirror, "TextLabelZ"); - TextLabelZ->setText(tr("SMESH_Z")); - GroupMirrorLayout->addWidget(TextLabelZ, 0, 6); - - SpinBox_Z = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_Z"); - GroupMirrorLayout->addWidget(SpinBox_Z, 0, 7); - - TextLabelVector = new QLabel(GroupMirror, "TextLabelVector"); - GroupMirrorLayout->addWidget(TextLabelVector, 1, 0); - - SelectVectorButton = new QPushButton(GroupMirror, "SelectVectorButton"); - SelectVectorButton->setPixmap(image3); - GroupMirrorLayout->addWidget(SelectVectorButton, 1, 1); - - TextLabelDX = new QLabel(GroupMirror, "TextLabelDX"); - TextLabelDX->setText(tr("SMESH_DX")); - GroupMirrorLayout->addWidget(TextLabelDX, 1, 2); - - SpinBox_DX = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_DX"); - GroupMirrorLayout->addWidget(SpinBox_DX, 1, 3); - - TextLabelDY = new QLabel(GroupMirror, "TextLabelDY"); - TextLabelDY->setText(tr("SMESH_DY")); - GroupMirrorLayout->addWidget(TextLabelDY, 1, 4); - - SpinBox_DY = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_DY"); - GroupMirrorLayout->addWidget(SpinBox_DY, 1, 5); - - TextLabelDZ = new QLabel(GroupMirror, "TextLabelDZ"); - TextLabelDZ->setText(tr("SMESH_DZ")); - 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); - - // Controls for "Create a copy" option - CheckBoxCopy = new QCheckBox(GroupArguments, "CheckBoxCopy"); - CheckBoxCopy->setText(tr("SMESH_CREATE_COPY")); - GroupArgumentsLayout->addMultiCellWidget(CheckBoxCopy, 3, 3, 0, 2); - - - SMESHGUI_SymmetryDlgLayout->addWidget(GroupArguments, 1, 0); - - /* Initialisations */ - SpinBox_X->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_Y->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_Z->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DX->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DY->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox_DZ->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - - GroupArguments->show(); - RadioButton1->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); - - Init(); - - /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect(GroupConstructors, SIGNAL(clicked(int)), SLOT(ConstructorsClicked(int))); - - connect(SelectElementsButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectPointButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectVectorButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - - connect(SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged())); - connect(SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged())); - connect(SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged())); - - 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&))); - connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool))); - - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); /* displays Dialog */ - - ConstructorsClicked(0); - resize(0,0); // ?? -} - -//================================================================================= -// function : ~SMESHGUI_SymmetryDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_SymmetryDlg::~SMESHGUI_SymmetryDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_SymmetryDlg::Init (bool ResetControls) -{ - myBusy = false; - - myEditCurrentArgument = 0; - LineEditElements->clear(); - myElementsId = ""; - myNbOkElements = 0; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - myActor = 0; - myMesh = SMESH::SMESH_Mesh::_nil(); - - if (ResetControls) { - SpinBox_X->SetValue(0.0); - SpinBox_Y->SetValue(0.0); - SpinBox_Z->SetValue(0.0); - SpinBox_DX->SetValue(0.0); - SpinBox_DY->SetValue(0.0); - SpinBox_DZ->SetValue(0.0); - - CheckBoxCopy->setChecked(false); - CheckBoxMesh->setChecked(false); - onSelectMesh(false); - } -} - -//================================================================================= -// function : ConstructorsClicked() -// purpose : Radio button management -//================================================================================= -void SMESHGUI_SymmetryDlg::ConstructorsClicked (int constructorId) -{ - disconnect(mySelectionMgr, 0, this, 0); - - if (constructorId != 0 && !TextLabelVector->isVisible()) { - TextLabelVector->show(); - SelectVectorButton->show(); - TextLabelDX->show(); - SpinBox_DX->show(); - TextLabelDY->show(); - SpinBox_DY->show(); - TextLabelDZ->show(); - SpinBox_DZ->show(); - } - - switch (constructorId) { - case 0: - { - GroupMirror->setTitle(tr("SMESH_POINT")); - - TextLabelVector->hide(); - SelectVectorButton->hide(); - TextLabelDX->hide(); - SpinBox_DX->hide(); - TextLabelDY->hide(); - SpinBox_DY->hide(); - TextLabelDZ->hide(); - SpinBox_DZ->hide(); - break; - } - case 1: - { - GroupMirror->setTitle(tr("SMESH_AXIS")); - TextLabelVector->setText(tr("SMESH_VECTOR")); - break; - } - case 2: - { - GroupMirror->setTitle(tr("SMESH_PLANE")); - TextLabelVector->setText(tr("SMESH_NORMAL")); - break; - } - } - - if (myEditCurrentArgument != (QWidget*)LineEditElements) { - SMESH::SetPointRepresentation(false); - if (!CheckBoxMesh->isChecked()) - { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(CellSelection); - } - } - - myEditCurrentArgument = (QWidget*)LineEditElements; - LineEditElements->setFocus(); - - if (CheckBoxMesh->isChecked()) - onSelectMesh(true); - - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -void SMESHGUI_SymmetryDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return; - - if (myNbOkElements && IsMirrorOk()) { - 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::AxisStruct aMirror; - - aMirror.x = SpinBox_X->GetValue(); - aMirror.y = SpinBox_Y->GetValue(); - aMirror.z = SpinBox_Z->GetValue(); - if (GetConstructorId() == 0) { - aMirror.vx = aMirror.vy = aMirror.vz = 0; - } else { - aMirror.vx = SpinBox_DX->GetValue(); - aMirror.vy = SpinBox_DY->GetValue(); - aMirror.vz = SpinBox_DZ->GetValue(); - } - - bool toCreateCopy = CheckBoxCopy->isChecked(); - - SMESH::SMESH_MeshEditor::MirrorType aMirrorType; - - if (GetConstructorId() == 0) - aMirrorType = SMESH::SMESH_MeshEditor::POINT; - if (GetConstructorId() == 1) - aMirrorType = SMESH::SMESH_MeshEditor::AXIS; - if (GetConstructorId() == 2) - aMirrorType = SMESH::SMESH_MeshEditor::PLANE; - - try { - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - QApplication::setOverrideCursor(Qt::waitCursor); - aMeshEditor->Mirror(anElementsId, aMirror, aMirrorType, toCreateCopy); - QApplication::restoreOverrideCursor(); - } catch (...) { - } - - mySelectionMgr->clearSelected(); - SMESH::UpdateView(); - Init(false); - ConstructorsClicked(GetConstructorId()); - } -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_SymmetryDlg::ClickOnOk() -{ - ClickOnApply(); - ClickOnCancel(); -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_SymmetryDlg::ClickOnCancel() -{ - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearFilters(); - mySelectionMgr->clearSelected(); - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySMESHGUI->ResetState(); - reject(); -} - -//======================================================================= -// function : onTextChange() -// purpose : -//======================================================================= -void SMESHGUI_SymmetryDlg::onTextChange (const QString& theNewText) -{ - QLineEdit* send = (QLineEdit*)sender(); - - if (myBusy) return; - myBusy = true; - - if (send == LineEditElements) - myNbOkElements = 0; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - // 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); - - if (send == LineEditElements) { - for (int i = 0; i < aListId.count(); i++) { - const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt()); - if (e) - newIndices.Add(e->GetID()); - myNbOkElements++; - } - - mySelector->AddOrRemoveIndex( anIO, newIndices, false ); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( anIO, true, true ); - - myElementsId = theNewText; - } - } - - if (myNbOkElements && IsMirrorOk()) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } - - myBusy = false; -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_SymmetryDlg::SelectionIntoArgument() -{ - if (myBusy) return; - - // clear - myActor = 0; - QString aString = ""; - - myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) { - LineEditElements->setText(aString); - myNbOkElements = 0; - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - } - myBusy = false; - - 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; - - int aNbUnits = 0; - - if (myEditCurrentArgument == (QWidget*)LineEditElements) { - myElementsId = ""; - - if (CheckBoxMesh->isChecked()) { - SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - - if (!SMESH::IObjectToInterface(IO)->_is_nil()) { //MESH - // get IDs from mesh - SMDS_Mesh* aSMDSMesh = myActor->GetObject()->GetMesh(); - if (!aSMDSMesh) - return; - - for (int i = aSMDSMesh->MinElementID(); i <= aSMDSMesh->MaxElementID(); i++) { - const SMDS_MeshElement * e = aSMDSMesh->FindElement(i); - if (e) { - myElementsId += QString(" %1").arg(i); - aNbUnits++; - } - } - } 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; - anElementsIds = aSubMesh->GetElementsId(); - for (int i = 0; i < anElementsIds->length(); i++) { - myElementsId += QString(" %1").arg(anElementsIds[i]); - } - aNbUnits = anElementsIds->length(); - } else { // GROUP - // get smesh group - SMESH::SMESH_GroupBase_var aGroup = - SMESH::IObjectToInterface(IO); - if (aGroup->_is_nil()) - 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]); - } - aNbUnits = anElementsIds->length(); - } - } else { - aNbUnits = SMESH::GetNameOfSelectedElements( mySelector, myActor->getIO(), aString); - myElementsId = aString; - } - - if (aNbUnits < 1) - return; - - myNbOkElements = true; - } else { - aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString); - if (aNbUnits != 1) - return; - - SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh(); - if (!aMesh) - return; - - const SMDS_MeshNode * n = aMesh->FindNode(aString.toInt()); - if (!n) - return; - - double x = n->X(); - double y = n->Y(); - double z = n->Z(); - - if (myEditCurrentArgument == (QWidget*)SpinBox_X) { - SpinBox_X->SetValue(x); - SpinBox_Y->SetValue(y); - SpinBox_Z->SetValue(z); - } else if (myEditCurrentArgument == (QWidget*)SpinBox_DX) { - SpinBox_DX->SetValue(x - SpinBox_X->GetValue()); - SpinBox_DY->SetValue(y - SpinBox_Y->GetValue()); - SpinBox_DZ->SetValue(z - SpinBox_Z->GetValue()); - } - } - - myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) - LineEditElements->setText(aString); - myBusy = false; - - // OK - if (myNbOkElements && IsMirrorOk()) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_SymmetryDlg::SetEditCurrentArgument() -{ - QPushButton* send = (QPushButton*)sender(); - - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearSelected(); - mySelectionMgr->clearFilters(); - - if (send == SelectElementsButton) { - myEditCurrentArgument = (QWidget*)LineEditElements; - SMESH::SetPointRepresentation(false); - if (CheckBoxMesh->isChecked()) { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); - } else { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(CellSelection); - } - } else if (send == SelectPointButton) { - myEditCurrentArgument = (QWidget*)SpinBox_X; - SMESH::SetPointRepresentation(true); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - } else if (send == SelectVectorButton) { - myEditCurrentArgument = (QWidget*)SpinBox_DX; - SMESH::SetPointRepresentation(true); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(NodeSelection); - } else { - } - - myEditCurrentArgument->setFocus(); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - SelectionIntoArgument(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_SymmetryDlg::DeactivateActiveDialog() -{ - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); - GroupArguments->setEnabled(false); - GroupButtons->setEnabled(false); - mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_SymmetryDlg::ActivateThisDialog() -{ - /* Emit a signal to deactivate the active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupConstructors->setEnabled(true); - GroupArguments->setEnabled(true); - GroupButtons->setEnabled(true); - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(CellSelection); - SelectionIntoArgument(); -} - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_SymmetryDlg::enterEvent (QEvent*) -{ - if (!GroupConstructors->isEnabled()) - ActivateThisDialog(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_SymmetryDlg::closeEvent (QCloseEvent*) -{ - /* same than click on cancel button */ - this->ClickOnCancel(); -} - -//======================================================================= -// function : hideEvent() -// purpose : caused by ESC key -//======================================================================= -void SMESHGUI_SymmetryDlg::hideEvent (QHideEvent*) -{ - if (!isMinimized()) - ClickOnCancel(); -} - -//======================================================================= -//function : onSelectMesh -//purpose : -//======================================================================= -void SMESHGUI_SymmetryDlg::onSelectMesh (bool toSelectMesh) -{ - if (toSelectMesh) - TextLabelElements->setText(tr("SMESH_NAME")); - else - TextLabelElements->setText(tr("SMESH_ID_ELEMENTS")); - - if (myEditCurrentArgument != LineEditElements) { - LineEditElements->clear(); - return; - } - - mySelectionMgr->clearFilters(); - SMESH::SetPointRepresentation(false); - - if (toSelectMesh) { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); - LineEditElements->setReadOnly(true); - } else { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode(CellSelection); - LineEditElements->setReadOnly(false); - onTextChange(LineEditElements->text()); - } - - SelectionIntoArgument(); -} - -//================================================================================= -// function : GetConstructorId() -// purpose : -//================================================================================= -int SMESHGUI_SymmetryDlg::GetConstructorId() -{ - if (GroupConstructors != NULL && GroupConstructors->selected() != NULL) - return GroupConstructors->id(GroupConstructors->selected()); - return -1; -} - -//================================================================================= -// function : IsMirrorOk() -// purpose : -//================================================================================= -bool SMESHGUI_SymmetryDlg::IsMirrorOk() -{ - bool isOk = true; - - if (GetConstructorId() != 0) - isOk = (SpinBox_DX->GetValue() != 0 || - SpinBox_DY->GetValue() != 0 || - SpinBox_DZ->GetValue() != 0); - - return isOk; -} - -//================================================================================= -// function : onVectorChanged() -// purpose : -//================================================================================= -void SMESHGUI_SymmetryDlg::onVectorChanged() -{ - if (IsMirrorOk()) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } else { - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - } -} diff --git a/src/SMESHGUI/SMESHGUI_SymmetryDlg.h b/src/SMESHGUI/SMESHGUI_SymmetryDlg.h deleted file mode 100644 index b09ad5e46..000000000 --- a/src/SMESHGUI/SMESHGUI_SymmetryDlg.h +++ /dev/null @@ -1,150 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_SymmetryDlg.h -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#ifndef DIALOGBOX_SYMMETRY_H -#define DIALOGBOX_SYMMETRY_H - -#include "SalomeApp_SelectionMgr.h" - -#include "SMESH_LogicalFilter.hxx" - -// QT Includes -#include - -class QGridLayout; -class QHBoxLayout; -class QButtonGroup; -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class QRadioButton; -class QCheckBox; -class SMESHGUI_SpinBox; -class SMESHGUI; -class SMESH_Actor; -class SVTK_ViewWindow; -class SVTK_Selector; - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - - -//================================================================================= -// class : SMESHGUI_SymmetryDlg -// purpose : -//================================================================================= -class SMESHGUI_SymmetryDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_SymmetryDlg( SMESHGUI*, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0); - ~SMESHGUI_SymmetryDlg(); - -private: - void Init (bool ResetControls = true); - void closeEvent (QCloseEvent*); - void enterEvent (QEvent*); /* mouse enter the QWidget */ - void hideEvent (QHideEvent*); /* ESC key */ - int GetConstructorId(); - bool IsMirrorOk(); - - SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ - SalomeApp_SelectionMgr* mySelectionMgr; /* User shape selection */ - int myNbOkElements; /* to check when elements are defined */ - QString myElementsId; - SVTK_Selector* mySelector; - - QWidget* myEditCurrentArgument; /* Current LineEdit */ - - bool myBusy; - SMESH::SMESH_Mesh_var myMesh; - SMESH_Actor* myActor; - SMESH_LogicalFilter* myMeshOrSubMeshOrGroupFilter; - - QButtonGroup* GroupConstructors; - QRadioButton* RadioButton1; - QRadioButton* RadioButton2; - QRadioButton* RadioButton3; - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - QGroupBox* GroupArguments; - QGroupBox* GroupMirror; - QLabel* TextLabelElements; - QPushButton* SelectElementsButton; - QLineEdit* LineEditElements; - QCheckBox* CheckBoxMesh; - - QLabel* TextLabelPoint; - QPushButton* SelectPointButton; - QLabel* TextLabelX; - SMESHGUI_SpinBox* SpinBox_X; - QLabel* TextLabelY; - SMESHGUI_SpinBox* SpinBox_Y; - QLabel* TextLabelZ; - SMESHGUI_SpinBox* SpinBox_Z; - QLabel* TextLabelVector; - QPushButton* SelectVectorButton; - QLabel* TextLabelDX; - SMESHGUI_SpinBox* SpinBox_DX; - QLabel* TextLabelDY; - SMESHGUI_SpinBox* SpinBox_DY; - QLabel* TextLabelDZ; - SMESHGUI_SpinBox* SpinBox_DZ; - - QCheckBox* CheckBoxCopy; - - private slots: - - void ConstructorsClicked(int constructorId); - void ClickOnOk(); - void ClickOnCancel(); - void ClickOnApply(); - void SetEditCurrentArgument() ; - void SelectionIntoArgument() ; - void DeactivateActiveDialog() ; - void ActivateThisDialog() ; - void onTextChange(const QString&); - void onSelectMesh(bool toSelectMesh); - void onVectorChanged(); - -protected: - QGridLayout* SMESHGUI_SymmetryDlgLayout; - QGridLayout* GroupConstructorsLayout; - QGridLayout* GroupButtonsLayout; - QGridLayout* GroupArgumentsLayout; -}; - -#endif // DIALOGBOX_SYMMETRY_H diff --git a/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx b/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx deleted file mode 100644 index 6ea4bbf29..000000000 --- a/src/SMESHGUI/SMESHGUI_TranslationDlg.cxx +++ /dev/null @@ -1,826 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_TranslationDlg.cxx -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#include "SMESHGUI_TranslationDlg.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 "SUIT_Desktop.h" -#include "SUIT_ResourceMgr.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 - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// IDL Headers -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Group) - -using namespace std; - -//================================================================================= -// class : SMESHGUI_TranslationDlg() -// purpose : -//================================================================================= -SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( 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 ) ) -{ - QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SMESH_TRANSLATION_POINTS"))); - QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SMESH_TRANSLATION_VECTOR"))); - QPixmap image2 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); - - if (!name) - setName("SMESHGUI_TranslationDlg"); - resize(303, 185); - setCaption(tr("SMESH_TRANSLATION")); - setSizeGripEnabled(TRUE); - SMESHGUI_TranslationDlgLayout = new QGridLayout(this); - SMESHGUI_TranslationDlgLayout->setSpacing(6); - SMESHGUI_TranslationDlgLayout->setMargin(11); - - /***************************************************************/ - GroupConstructors = new QButtonGroup(this, "GroupConstructors"); - GroupConstructors->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, GroupConstructors->sizePolicy().hasHeightForWidth())); - GroupConstructors->setTitle(tr("SMESH_TRANSLATION" )); - GroupConstructors->setExclusive(TRUE); - GroupConstructors->setColumnLayout(0, Qt::Vertical); - GroupConstructors->layout()->setSpacing(0); - GroupConstructors->layout()->setMargin(0); - GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout()); - GroupConstructorsLayout->setAlignment(Qt::AlignTop); - GroupConstructorsLayout->setSpacing(6); - GroupConstructorsLayout->setMargin(11); - RadioButton1= new QRadioButton(GroupConstructors, "RadioButton1"); - RadioButton1->setText(tr("" )); - RadioButton1->setPixmap(image0); - GroupConstructorsLayout->addWidget(RadioButton1, 0, 0); - RadioButton2= new QRadioButton(GroupConstructors, "RadioButton2"); - RadioButton2->setText(tr("" )); - RadioButton2->setPixmap(image1); - GroupConstructorsLayout->addWidget(RadioButton2, 0, 2 ); - SMESHGUI_TranslationDlgLayout->addWidget(GroupConstructors, 0, 0); - - /***************************************************************/ - GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, GroupButtons->sizePolicy().hasHeightForWidth())); - GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - GroupButtons->setTitle(tr("" )); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - buttonCancel = new QPushButton(GroupButtons, "buttonCancel"); - buttonCancel->setText(tr("SMESH_BUT_CLOSE" )); - buttonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonCancel, 0, 3); - buttonApply = new QPushButton(GroupButtons, "buttonApply"); - buttonApply->setText(tr("SMESH_BUT_APPLY" )); - buttonApply->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(buttonApply, 0, 1); - QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - GroupButtonsLayout->addItem(spacer_9, 0, 2); - buttonOk = new QPushButton(GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_OK" )); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(buttonOk, 0, 0); - SMESHGUI_TranslationDlgLayout->addWidget(GroupButtons, 2, 0); - - /***************************************************************/ - GroupArguments = new QGroupBox(this, "GroupArguments"); - GroupArguments->setTitle(tr("SMESH_ARGUMENTS")); - 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); - - SelectElementsButton = new QPushButton(GroupArguments, "SelectElementsButton"); - SelectElementsButton->setText(tr("" )); - SelectElementsButton->setPixmap(image2); - SelectElementsButton->setToggleButton(FALSE); - GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1); - - LineEditElements = new QLineEdit(GroupArguments, "LineEditElements"); - LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator")); - GroupArgumentsLayout->addMultiCellWidget(LineEditElements, 0, 0, 2, 7); - - // Control for the whole mesh selection - CheckBoxMesh = new QCheckBox(GroupArguments, "CheckBoxMesh"); - CheckBoxMesh->setText(tr("SMESH_SELECT_WHOLE_MESH" )); - GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 7); - - // Controls for vector and points selection - TextLabel1 = new QLabel(GroupArguments, "TextLabel1"); - GroupArgumentsLayout->addWidget(TextLabel1, 2, 0); - - SelectButton1 = new QPushButton(GroupArguments, "SelectButton1"); - SelectButton1->setText(tr("" )); - SelectButton1->setPixmap(image2); - SelectButton1->setToggleButton(FALSE); - GroupArgumentsLayout->addWidget(SelectButton1, 2, 1); - - TextLabel1_1 = new QLabel(GroupArguments, "TextLabel1_1"); - GroupArgumentsLayout->addWidget(TextLabel1_1, 2, 2); - - SpinBox1_1 = new SMESHGUI_SpinBox(GroupArguments, "SpinBox1_1"); - GroupArgumentsLayout->addWidget(SpinBox1_1, 2, 3); - - TextLabel1_2 = new QLabel(GroupArguments, "TextLabel1_2"); - GroupArgumentsLayout->addWidget(TextLabel1_2, 2, 4); - - SpinBox1_2 = new SMESHGUI_SpinBox(GroupArguments, "SpinBox1_2"); - GroupArgumentsLayout->addWidget(SpinBox1_2, 2, 5); - - TextLabel1_3 = new QLabel(GroupArguments, "TextLabel1_3"); - GroupArgumentsLayout->addWidget(TextLabel1_3, 2, 6); - - SpinBox1_3 = new SMESHGUI_SpinBox(GroupArguments, "SpinBox1_3"); - GroupArgumentsLayout->addWidget(SpinBox1_3, 2, 7); - - TextLabel2 = new QLabel(GroupArguments, "TextLabel2"); - TextLabel2->setText(tr("SMESH_POINT_2" )); - GroupArgumentsLayout->addWidget(TextLabel2, 3, 0); - - SelectButton2 = new QPushButton(GroupArguments, "SelectButton2"); - SelectButton2->setText(tr("" )); - SelectButton2->setPixmap(image2); - SelectButton2->setToggleButton(FALSE); - GroupArgumentsLayout->addWidget(SelectButton2, 3, 1); - - TextLabel2_1 = new QLabel(GroupArguments, "TextLabel2_1"); - TextLabel2_1->setText(tr("SMESH_X" )); - GroupArgumentsLayout->addWidget(TextLabel2_1, 3, 2); - - SpinBox2_1 = new SMESHGUI_SpinBox(GroupArguments, "SpinBox2_1"); - GroupArgumentsLayout->addWidget(SpinBox2_1, 3, 3); - - TextLabel2_2 = new QLabel(GroupArguments, "TextLabel2_2"); - TextLabel2_2->setText(tr("SMESH_Y" )); - GroupArgumentsLayout->addWidget(TextLabel2_2, 3, 4); - - SpinBox2_2 = new SMESHGUI_SpinBox(GroupArguments, "SpinBox2_2"); - GroupArgumentsLayout->addWidget(SpinBox2_2, 3, 5); - - TextLabel2_3 = new QLabel(GroupArguments, "TextLabel2_3"); - TextLabel2_3->setText(tr("SMESH_Z")); - GroupArgumentsLayout->addWidget(TextLabel2_3, 3, 6); - - SpinBox2_3 = new SMESHGUI_SpinBox(GroupArguments, "SpinBox2_3"); - 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); - - - SMESHGUI_TranslationDlgLayout->addWidget(GroupArguments, 1, 0); - - /* Initialisations */ - SpinBox1_1->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox1_2->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox1_3->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox2_1->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox2_2->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - SpinBox2_3->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3); - - GroupArguments->show(); - RadioButton1->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); - - Init(); - - /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect(GroupConstructors, SIGNAL(clicked(int)), SLOT(ConstructorsClicked(int))); - - connect(SelectElementsButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectButton1, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectButton2, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - - connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - /* to close dialog if study change */ - connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); - connect(LineEditElements, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); - connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool))); - - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); /* displays Dialog */ - - ConstructorsClicked(0); - resize(0,0); // ?? -} - -//================================================================================= -// function : ~SMESHGUI_TranslationDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_TranslationDlg::~SMESHGUI_TranslationDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_TranslationDlg::Init (bool ResetControls) -{ - myBusy = false; - - myEditCurrentArgument = 0; - LineEditElements->clear(); - myElementsId = ""; - myNbOkElements = 0; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - myActor = 0; - myMesh = SMESH::SMESH_Mesh::_nil(); - - if (ResetControls) { - SpinBox1_1->SetValue(0.0); - SpinBox1_2->SetValue(0.0); - SpinBox1_3->SetValue(0.0); - SpinBox2_1->SetValue(0.0); - SpinBox2_2->SetValue(0.0); - SpinBox2_3->SetValue(0.0); - - CheckBoxCopy->setChecked(false); - CheckBoxMesh->setChecked(false); - onSelectMesh(false); - } -} - -//================================================================================= -// function : ConstructorsClicked() -// purpose : Radio button management -//================================================================================= -void SMESHGUI_TranslationDlg::ConstructorsClicked (int constructorId) -{ - disconnect(mySelectionMgr, 0, this, 0); - - switch (constructorId) { - case 0: - { - TextLabel1->setText(tr("SMESH_POINT_1")); - TextLabel1_1->setText(tr("SMESH_X")); - TextLabel1_2->setText(tr("SMESH_Y")); - TextLabel1_3->setText(tr("SMESH_Z")); - - SelectButton1->show(); - TextLabel2->show(); - SelectButton2->show(); - TextLabel2_1->show(); - SpinBox2_1->show(); - TextLabel2_2->show(); - SpinBox2_2->show(); - TextLabel2_3->show(); - SpinBox2_3->show(); - break; - } - case 1: - { - TextLabel1->setText(tr("SMESH_VECTOR")); - TextLabel1_1->setText(tr("SMESH_DX")); - TextLabel1_2->setText(tr("SMESH_DY")); - TextLabel1_3->setText(tr("SMESH_DZ")); - - SelectButton1->hide(); - TextLabel2->hide(); - SelectButton2->hide(); - TextLabel2_1->hide(); - SpinBox2_1->hide(); - TextLabel2_2->hide(); - SpinBox2_2->hide(); - TextLabel2_3->hide(); - SpinBox2_3->hide(); - break; - } - } - - if (myEditCurrentArgument != (QWidget*)LineEditElements) { - SMESH::SetPointRepresentation(false); - if (!CheckBoxMesh->isChecked()) - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( CellSelection ); - } - - myEditCurrentArgument = (QWidget*)LineEditElements; - LineEditElements->setFocus(); - - if (CheckBoxMesh->isChecked()) - onSelectMesh(true); - - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -void SMESHGUI_TranslationDlg::ClickOnApply() -{ - if (mySMESHGUI->isActiveStudyLocked()) - return; - - 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; - if (GetConstructorId() == 0) { - aVector.PS.x = SpinBox2_1->GetValue() - SpinBox1_1->GetValue(); - aVector.PS.y = SpinBox2_2->GetValue() - SpinBox1_2->GetValue(); - aVector.PS.z = SpinBox2_3->GetValue() - SpinBox1_3->GetValue(); - } else if (GetConstructorId() == 1) { - aVector.PS.x = SpinBox1_1->GetValue(); - aVector.PS.y = SpinBox1_2->GetValue(); - aVector.PS.z = SpinBox1_3->GetValue(); - } - - bool toCreateCopy = CheckBoxCopy->isChecked(); - - try { - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - QApplication::setOverrideCursor(Qt::waitCursor); - aMeshEditor->Translate(anElementsId.inout(), aVector, toCreateCopy); - QApplication::restoreOverrideCursor(); - } catch (...) { - } - - mySelectionMgr->clearSelected(); - SMESH::UpdateView(); - Init(false); - ConstructorsClicked(GetConstructorId()); - } -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_TranslationDlg::ClickOnOk() -{ - ClickOnApply(); - ClickOnCancel(); -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void SMESHGUI_TranslationDlg::ClickOnCancel() -{ - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearFilters(); - mySelectionMgr->clearSelected(); - SMESH::SetPointRepresentation(false); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( ActorSelection ); - mySMESHGUI->ResetState(); - reject(); -} - -//======================================================================= -// function : onTextChange() -// purpose : -//======================================================================= -void SMESHGUI_TranslationDlg::onTextChange (const QString& theNewText) -{ - QLineEdit* send = (QLineEdit*)sender(); - - if (myBusy) return; - myBusy = true; - - if (send == LineEditElements) - myNbOkElements = 0; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - // 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); - - if (send == LineEditElements) { - for (int i = 0; i < aListId.count(); i++) { - const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt()); - if (e) - newIndices.Add(e->GetID()); - myNbOkElements++; - } - } - - mySelector->AddOrRemoveIndex( anIO, newIndices, false ); - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->highlight( anIO, true, true ); - - myElementsId = theNewText; - } - - if (myNbOkElements) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } - - myBusy = false; -} - -//================================================================================= -// function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -//================================================================================= -void SMESHGUI_TranslationDlg::SelectionIntoArgument() -{ - if (myBusy) return; - - // clear - myActor = 0; - QString aString = ""; - - myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) { - LineEditElements->setText(aString); - myNbOkElements = 0; - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - } - myBusy = false; - - 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; - - int aNbUnits = 0; - - if (myEditCurrentArgument == (QWidget*)LineEditElements) { - myElementsId = ""; - - if (CheckBoxMesh->isChecked()) { - SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString ); - - if (!SMESH::IObjectToInterface(IO)->_is_nil()) { //MESH - // get IDs from mesh - SMDS_Mesh* aSMDSMesh = myActor->GetObject()->GetMesh(); - if (!aSMDSMesh) - return; - - for (int i = aSMDSMesh->MinElementID(); i <= aSMDSMesh->MaxElementID(); i++) { - const SMDS_MeshElement * e = aSMDSMesh->FindElement(i); - if (e) { - myElementsId += QString(" %1").arg(i); - aNbUnits++; - } - } - } 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; - anElementsIds = aSubMesh->GetElementsId(); - for (int i = 0; i < anElementsIds->length(); i++) { - myElementsId += QString(" %1").arg(anElementsIds[i]); - } - aNbUnits = anElementsIds->length(); - } else { // GROUP - // get smesh group - SMESH::SMESH_GroupBase_var aGroup = - SMESH::IObjectToInterface(IO); - if (aGroup->_is_nil()) - 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]); - } - aNbUnits = anElementsIds->length(); - } - } else { - aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aString); - myElementsId = aString; - } - - if (aNbUnits < 1) - return; - - myNbOkElements = true; - } else { - aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString); - if (aNbUnits != 1) - return; - - SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh(); - if (!aMesh) - return; - - const SMDS_MeshNode * n = aMesh->FindNode(aString.toInt()); - if (!n) - return; - - double x = n->X(); - double y = n->Y(); - double z = n->Z(); - - if (myEditCurrentArgument == (QWidget*)SpinBox1_1) { - SpinBox1_1->SetValue(x); - SpinBox1_2->SetValue(y); - SpinBox2_3->SetValue(z); - } else if (myEditCurrentArgument == (QWidget*)SpinBox2_1) { - SpinBox2_1->SetValue(x); - SpinBox2_2->SetValue(y); - SpinBox2_3->SetValue(z); - } - } - - myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) - LineEditElements->setText(aString); - myBusy = false; - - // OK - if (myNbOkElements) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } -} - -//================================================================================= -// function : SetEditCurrentArgument() -// purpose : -//================================================================================= -void SMESHGUI_TranslationDlg::SetEditCurrentArgument() -{ - QPushButton* send = (QPushButton*)sender(); - - disconnect(mySelectionMgr, 0, this, 0); - mySelectionMgr->clearSelected(); - mySelectionMgr->clearFilters(); - - if (send == SelectElementsButton) { - myEditCurrentArgument = (QWidget*)LineEditElements; - SMESH::SetPointRepresentation(false); - if (CheckBoxMesh->isChecked()) { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( ActorSelection ); - mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); - } else { - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( CellSelection ); - } - } else if (send == SelectButton1) { - myEditCurrentArgument = (QWidget*)SpinBox1_1; - SMESH::SetPointRepresentation(true); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( NodeSelection ); - } else if (send == SelectButton2) { - myEditCurrentArgument = (QWidget*)SpinBox2_1; - SMESH::SetPointRepresentation(true); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( NodeSelection ); - } - - myEditCurrentArgument->setFocus(); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - SelectionIntoArgument(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void SMESHGUI_TranslationDlg::DeactivateActiveDialog() -{ - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); - GroupArguments->setEnabled(false); - GroupButtons->setEnabled(false); - mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); - } -} - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void SMESHGUI_TranslationDlg::ActivateThisDialog() -{ - /* Emit a signal to deactivate the active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog(); - GroupConstructors->setEnabled(true); - GroupArguments->setEnabled(true); - GroupButtons->setEnabled(true); - - mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( CellSelection ); - - SelectionIntoArgument(); -} - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void SMESHGUI_TranslationDlg::enterEvent (QEvent*) -{ - if (!GroupConstructors->isEnabled()) - ActivateThisDialog(); -} - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_TranslationDlg::closeEvent (QCloseEvent*) -{ - /* same than click on cancel button */ - this->ClickOnCancel(); -} - -//======================================================================= -//function : hideEvent -//purpose : caused by ESC key -//======================================================================= -void SMESHGUI_TranslationDlg::hideEvent (QHideEvent*) -{ - if (!isMinimized()) - ClickOnCancel(); -} - -//======================================================================= -//function : onSelectMesh -//purpose : -//======================================================================= -void SMESHGUI_TranslationDlg::onSelectMesh (bool toSelectMesh) -{ - if (toSelectMesh) - TextLabelElements->setText(tr("SMESH_NAME")); - else - TextLabelElements->setText(tr("SMESH_ID_ELEMENTS")); - - if (myEditCurrentArgument != LineEditElements) { - LineEditElements->clear(); - return; - } - - mySelectionMgr->clearFilters(); - SMESH::SetPointRepresentation(false); - - if (toSelectMesh) { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( ActorSelection ); - mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); - LineEditElements->setReadOnly(true); - } else { - if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) - aViewWindow->SetSelectionMode( CellSelection ); - LineEditElements->setReadOnly(false); - onTextChange(LineEditElements->text()); - } - - SelectionIntoArgument(); -} - -//================================================================================= -// function : GetConstructorId() -// purpose : -//================================================================================= -int SMESHGUI_TranslationDlg::GetConstructorId() -{ - if (GroupConstructors != NULL && GroupConstructors->selected() != NULL) - return GroupConstructors->id(GroupConstructors->selected()); - return -1; -} diff --git a/src/SMESHGUI/SMESHGUI_TranslationDlg.h b/src/SMESHGUI/SMESHGUI_TranslationDlg.h deleted file mode 100644 index 117a71b42..000000000 --- a/src/SMESHGUI/SMESHGUI_TranslationDlg.h +++ /dev/null @@ -1,144 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_TranslationDlg.h -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#ifndef DIALOGBOX_TRANSLATION_H -#define DIALOGBOX_TRANSLATION_H - -#include "SalomeApp_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 SMESHGUI; -class SMESHGUI_SpinBox; -class SMESH_Actor; -class SVTK_ViewWindow; -class SVTK_Selector; - -// IDL Headers -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - - -//================================================================================= -// class : SMESHGUI_TranslationDlg -// purpose : -//================================================================================= -class SMESHGUI_TranslationDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_TranslationDlg( SMESHGUI*, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0); - ~SMESHGUI_TranslationDlg(); - -private: - void Init (bool ResetControls = true); - void closeEvent (QCloseEvent*); - void enterEvent (QEvent*); /* mouse enter the QWidget */ - void hideEvent (QHideEvent*); /* ESC key */ - int GetConstructorId(); - - SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ - SalomeApp_SelectionMgr* mySelectionMgr; /* User shape selection */ - QString myElementsId; - int myNbOkElements; /* to check when elements are defined */ - - SVTK_Selector* mySelector; - - QWidget* myEditCurrentArgument; - - bool myBusy; - SMESH::SMESH_Mesh_var myMesh; - SMESH_Actor* myActor; - SMESH_LogicalFilter* myMeshOrSubMeshOrGroupFilter; - - QButtonGroup* GroupConstructors; - QRadioButton* RadioButton1; - QRadioButton* RadioButton2; - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonCancel; - QPushButton* buttonApply; - QGroupBox* GroupArguments; - QLabel* TextLabelElements; - QPushButton* SelectElementsButton; - QLineEdit* LineEditElements; - QCheckBox* CheckBoxMesh; - QLabel* TextLabel1; - QPushButton* SelectButton1; - QLabel* TextLabel1_1; - SMESHGUI_SpinBox* SpinBox1_1; - QLabel* TextLabel1_2; - SMESHGUI_SpinBox* SpinBox1_2; - QLabel* TextLabel1_3; - SMESHGUI_SpinBox* SpinBox1_3; - QLabel* TextLabel2; - QPushButton* SelectButton2; - QLabel* TextLabel2_1; - SMESHGUI_SpinBox* SpinBox2_1; - QLabel* TextLabel2_2; - SMESHGUI_SpinBox* SpinBox2_2; - QLabel* TextLabel2_3; - SMESHGUI_SpinBox* SpinBox2_3; - QCheckBox* CheckBoxCopy; - - private slots: - - void ConstructorsClicked(int constructorId); - void ClickOnOk(); - void ClickOnCancel(); - void ClickOnApply(); - void SetEditCurrentArgument() ; - void SelectionIntoArgument() ; - void DeactivateActiveDialog() ; - void ActivateThisDialog() ; - void onTextChange(const QString&); - void onSelectMesh(bool toSelectMesh); - -protected: - QGridLayout* SMESHGUI_TranslationDlgLayout; - QGridLayout* GroupConstructorsLayout; - QGridLayout* GroupButtonsLayout; - QGridLayout* GroupArgumentsLayout; -}; - -#endif // DIALOGBOX_TRANSLATION_H diff --git a/src/SMESHGUI/SMESHGUI_TransparencyDlg.cxx b/src/SMESHGUI/SMESHGUI_TransparencyDlg.cxx deleted file mode 100644 index 283306aa4..000000000 --- a/src/SMESHGUI/SMESHGUI_TransparencyDlg.cxx +++ /dev/null @@ -1,253 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_TransparencyDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#include "SMESHGUI_TransparencyDlg.h" - -#include "SMESHGUI.h" -#include "SMESHGUI_VTKUtils.h" -#include "SMESHGUI_Utils.h" -#include "SMESH_Actor.h" - -#include "SUIT_Desktop.h" -#include "SUIT_OverrideCursor.h" - -#include "SALOME_ListIO.hxx" -#include "SALOME_ListIteratorOfListIO.hxx" -#include "SALOME_InteractiveObject.hxx" - -#include "SalomeApp_Study.h" -#include "SalomeApp_SelectionMgr.h" - -#include "SVTK_ViewWindow.h" - -// QT Includes -#include -#include -#include -#include -#include - -using namespace std; - -//================================================================================= -// class : SMESHGUI_TransparencyDlg() -// purpose : -// -//================================================================================= -SMESHGUI_TransparencyDlg::SMESHGUI_TransparencyDlg( SMESHGUI* theModule, - const char* name, - bool modal, - WFlags fl) - : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | - WStyle_Title | WStyle_SysMenu | WDestructiveClose ), - mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ), - myViewWindow( SMESH::GetViewWindow( theModule ) ) -{ - if (!name) - setName("SMESHGUI_TransparencyDlg"); - setCaption(tr("SMESH_TRANSPARENCY_TITLE" )); - setSizeGripEnabled(TRUE); - QGridLayout* SMESHGUI_TransparencyDlgLayout = new QGridLayout(this); - SMESHGUI_TransparencyDlgLayout->setSpacing(6); - SMESHGUI_TransparencyDlgLayout->setMargin(11); - - /*************************************************************************/ - QGroupBox* GroupC1 = new QGroupBox(this, "GroupC1"); - GroupC1->setColumnLayout(0, Qt::Vertical); - GroupC1->layout()->setSpacing(0); - GroupC1->layout()->setMargin(0); - QGridLayout* GroupC1Layout = new QGridLayout(GroupC1->layout()); - GroupC1Layout->setAlignment(Qt::AlignTop); - GroupC1Layout->setSpacing(6); - GroupC1Layout->setMargin(11); - - TextLabelTransparent = new QLabel(GroupC1, "TextLabelTransparent"); - TextLabelTransparent->setText(tr("SMESH_TRANSPARENCY_TRANSPARENT" )); - TextLabelTransparent->setAlignment(AlignLeft); - GroupC1Layout->addWidget(TextLabelTransparent, 0, 0); - - ValueLab = new QLabel(GroupC1, "ValueLab"); - ValueLab->setAlignment(AlignCenter); - ValueLab->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - QFont fnt = ValueLab->font(); fnt.setBold(true); ValueLab->setFont(fnt); - GroupC1Layout->addWidget(ValueLab, 0, 1); - - TextLabelOpaque = new QLabel(GroupC1, "TextLabelOpaque"); - TextLabelOpaque->setText(tr("SMESH_TRANSPARENCY_OPAQUE" )); - TextLabelOpaque->setAlignment(AlignRight); - GroupC1Layout->addWidget(TextLabelOpaque, 0, 2); - - Slider1 = new QSlider(0, 10, 1, 5, Horizontal, GroupC1, "Slider1"); - Slider1->setFocusPolicy(QWidget::NoFocus); - Slider1->setMinimumSize(300, 0); - Slider1->setTickmarks(QSlider::Above); - Slider1->setTickInterval(10); - Slider1->setTracking(true); - Slider1->setMinValue(0); - Slider1->setMaxValue(100); - Slider1->setLineStep(1); - Slider1->setPageStep(10); - GroupC1Layout->addMultiCellWidget(Slider1, 1, 1, 0, 2); - - /*************************************************************************/ - QGroupBox* GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - - buttonOk = new QPushButton(GroupButtons, "buttonOk"); - buttonOk->setText(tr("SMESH_BUT_CLOSE")); - buttonOk->setAutoDefault(TRUE); - buttonOk->setDefault(TRUE); - GroupButtonsLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 0); - GroupButtonsLayout->addWidget(buttonOk, 0, 1); - GroupButtonsLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 2); - - SMESHGUI_TransparencyDlgLayout->addWidget(GroupC1, 0, 0); - SMESHGUI_TransparencyDlgLayout->addWidget(GroupButtons, 1, 0); - - // Initial state - this->onSelectionChanged(); - - // signals and slots connections : after ValueHasChanged() - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(Slider1, SIGNAL(valueChanged(int)), this, SLOT(SetTransparency())); - connect(Slider1, SIGNAL(sliderMoved(int)), this, SLOT(ValueHasChanged())); - connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnOk())); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionChanged())); - - /* Move widget on the botton right corner of main widget */ - int x, y; - mySMESHGUI->DefineDlgPosition(this, x, y); - this->move(x, y); - this->show(); -} - -//================================================================================= -// function : ~SMESHGUI_TransparencyDlg() -// purpose : -//================================================================================= -SMESHGUI_TransparencyDlg::~SMESHGUI_TransparencyDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -//======================================================================= -// function : ClickOnOk() -// purpose : -//======================================================================= -void SMESHGUI_TransparencyDlg::ClickOnOk() -{ - close(); -} - -//================================================================================= -// function : SetTransparency() -// purpose : Called when value of slider change -// : or the first time as initilisation -//================================================================================= -void SMESHGUI_TransparencyDlg::SetTransparency() -{ - if( myViewWindow ) { - SUIT_OverrideCursor wc; - float opacity = this->Slider1->value() / 100.; - - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList); - - SALOME_ListIteratorOfListIO It (aList); - for (;It.More(); It.Next()) { - Handle(SALOME_InteractiveObject) IOS = It.Value(); - SMESH_Actor* anActor = SMESH::FindActorByEntry(IOS->getEntry()); - if (anActor) - anActor->SetOpacity(opacity); - } - myViewWindow->Repaint(); - } - ValueHasChanged(); -} - -//================================================================================= -// function : ValueHasChanged() -// purpose : Called when user moves a slider -//================================================================================= -void SMESHGUI_TransparencyDlg::ValueHasChanged() -{ - ValueLab->setText(QString::number(this->Slider1->value()) + "%"); -} - -//================================================================================= -// function : onSelectionChanged() -// purpose : Called when selection is changed -//================================================================================= -void SMESHGUI_TransparencyDlg::onSelectionChanged() -{ - if( myViewWindow ) { - int opacity = 100; - - SALOME_ListIO aList; - mySelectionMgr->selectedObjects(aList); - - if (aList.Extent() == 1) { - Handle(SALOME_InteractiveObject) FirstIOS = aList.First(); - if (!FirstIOS.IsNull()) { - SMESH_Actor* anActor = SMESH::FindActorByEntry(FirstIOS->getEntry()); - if (anActor) - opacity = int(anActor->GetOpacity() * 100. + 0.5); - } - } else if (aList.Extent() > 1) { - SALOME_ListIteratorOfListIO It (aList); - int setOp = -1; - for (; It.More(); It.Next()) { - Handle(SALOME_InteractiveObject) IO = It.Value(); - if (!IO.IsNull()) { - SMESH_Actor* anActor = SMESH::FindActorByEntry(IO->getEntry()); - if (anActor) { - int op = int(anActor->GetOpacity() * 100. + 0.5); - if (setOp < 0) - setOp = op; - else if (setOp != op) { - setOp = 100; - break; - } - } - } - } - if (setOp >= 0) - opacity = setOp; - } else { - } - Slider1->setValue(opacity); - } - ValueHasChanged(); -} diff --git a/src/SMESHGUI/SMESHGUI_TransparencyDlg.h b/src/SMESHGUI/SMESHGUI_TransparencyDlg.h deleted file mode 100644 index c1cced61e..000000000 --- a/src/SMESHGUI/SMESHGUI_TransparencyDlg.h +++ /dev/null @@ -1,79 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_TransparencyDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef DIALOGBOX_TRANSPARENCYDLG_H -#define DIALOGBOX_TRANSPARENCYDLG_H - -// QT Includes -#include - -class QLabel; -class QPushButton; -class QSlider; -class SalomeApp_SelectionMgr; -class SVTK_Selector; -class SVTK_ViewWindow; -class SMESHGUI; - -//================================================================================= -// class : SMESHGUI_TransparencyDlg -// purpose : -//================================================================================= -class SMESHGUI_TransparencyDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_TransparencyDlg( SMESHGUI*, - const char* name = 0, - bool modal = false, - WFlags fl = 0 ); - - ~SMESHGUI_TransparencyDlg(); - -private : - - SMESHGUI* mySMESHGUI; - SalomeApp_SelectionMgr* mySelectionMgr; - SVTK_ViewWindow* myViewWindow; - - QPushButton* buttonOk; - QLabel* TextLabelOpaque; - QLabel* ValueLab; - QLabel* TextLabelTransparent; - QSlider* Slider1; - -public slots: - - void ClickOnOk(); - void ValueHasChanged(); - void SetTransparency(); - void onSelectionChanged(); -}; - -#endif // DIALOGBOX_TRANSPARENCYDLG_H diff --git a/src/SMESHGUI/SMESHGUI_Utils.cxx b/src/SMESHGUI/SMESHGUI_Utils.cxx deleted file mode 100644 index 78b997460..000000000 --- a/src/SMESHGUI/SMESHGUI_Utils.cxx +++ /dev/null @@ -1,272 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - - -#include - -#include "SMESHGUI_Utils.h" - -#include "OB_Browser.h" - -#include "SUIT_Desktop.h" -#include "SUIT_Application.h" -#include "SUIT_Session.h" - -#include "SalomeApp_SelectionMgr.h" -#include "SalomeApp_Application.h" -#include "SalomeApp_Module.h" -#include "SalomeApp_Study.h" - -#include "SALOME_ListIO.hxx" - -#include "SALOMEconfig.h" -#include CORBA_CLIENT_HEADER(GEOM_Gen) - -#include "utilities.h" - -//using namespace std; - -namespace SMESH{ - - SUIT_Desktop* - GetDesktop(const CAM_Module* theModule) - { - return theModule->application()->desktop(); - } - - SalomeApp_SelectionMgr* - GetSelectionMgr(const SalomeApp_Module* theModule) - { - return theModule->getApp()->selectionMgr(); - } - - SUIT_ResourceMgr* - GetResourceMgr( const SalomeApp_Module* ) - { - return SUIT_Session::session()->resourceMgr(); - } - - _PTR(Study) - GetCStudy(const SalomeApp_Study* theStudy) - { - return theStudy->studyDS(); - } - - CORBA::Object_var - DataOwnerToObject(const SalomeApp_DataOwnerPtr& theOwner) - { - CORBA::Object_var anObj; - if(theOwner){ - const Handle(SALOME_InteractiveObject)& anIO = theOwner->IO(); - if(!anIO.IsNull()){ - if(anIO->hasEntry()){ - _PTR(Study) aStudy = GetActiveStudyDocument(); - _PTR(SObject) aSObj = aStudy->FindObjectID(anIO->getEntry()); - anObj = SObjectToObject(aSObj,aStudy); - } - } - } - return anObj; - } - - - SUIT_Study* GetActiveStudy() - { - SUIT_Application* app = SUIT_Session::session()->activeApplication(); - if (app) - return app->activeStudy(); - else - return NULL; - } - - SUIT_ViewWindow* GetActiveWindow() - { - SalomeApp_Application* app = dynamic_cast - (SUIT_Session::session()->activeApplication()); - if (app && app->desktop() ) - return app->desktop()->activeWindow(); - else - return NULL; - } - - _PTR(Study) GetActiveStudyDocument() - { - SalomeApp_Study* aStudy = dynamic_cast(GetActiveStudy()); - if (aStudy) - return aStudy->studyDS(); - else - return _PTR(Study)(); - } - - _PTR(SObject) FindSObject (CORBA::Object_ptr theObject) - { - SalomeApp_Application* app = dynamic_cast - (SUIT_Session::session()->activeApplication()); - if (app && !CORBA::is_nil(theObject)) { - if(_PTR(Study) aStudy = GetActiveStudyDocument()){ - CORBA::String_var anIOR = app->orb()->object_to_string(theObject); - if (strcmp(anIOR.in(), "") != 0) - return aStudy->FindObjectIOR(anIOR.in()); - } - } - return _PTR(SObject)(); - } - - void SetName (_PTR(SObject) theSObject, const char* theName) - { - _PTR(Study) aStudy = GetActiveStudyDocument(); - if (aStudy->GetProperties()->IsLocked()) - return; - _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); - _PTR(GenericAttribute) anAttr = - aBuilder->FindOrCreateAttribute(theSObject, "AttributeName"); - _PTR(AttributeName) aName = anAttr; - if (aName) - aName->SetValue(theName); - } - - void SetValue (_PTR(SObject) theSObject, const char* theValue) - { - _PTR(Study) aStudy = GetActiveStudyDocument(); - if (aStudy->GetProperties()->IsLocked()) - return; - _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); - _PTR(GenericAttribute) anAttr = - aBuilder->FindOrCreateAttribute(theSObject, "AttributeComment"); - _PTR(AttributeComment) aComment = anAttr; - if (aComment) - aComment->SetValue(theValue); - } - - CORBA::Object_var SObjectToObject (_PTR(SObject) theSObject, - _PTR(Study) theStudy) - { - SalomeApp_Application* app = dynamic_cast - (SUIT_Session::session()->activeApplication()); - if (theSObject) { - _PTR(GenericAttribute) anAttr; - if (theSObject->FindAttribute(anAttr, "AttributeIOR")) { - _PTR(AttributeIOR) anIOR = anAttr; - CORBA::String_var aVal = anIOR->Value().c_str(); - return app->orb()->string_to_object(aVal); - } - } - return CORBA::Object::_nil(); - } - - CORBA::Object_var SObjectToObject (_PTR(SObject) theSObject) - { - _PTR(Study) aStudy = GetActiveStudyDocument(); - return SObjectToObject(theSObject,aStudy); - } - - CORBA::Object_var IObjectToObject (const Handle(SALOME_InteractiveObject)& theIO) - { - if (!theIO.IsNull()) { - if (theIO->hasEntry()) { - _PTR(Study) aStudy = GetActiveStudyDocument(); - _PTR(SObject) anObj = aStudy->FindObjectID(theIO->getEntry()); - return SObjectToObject(anObj,aStudy); - } - } - return CORBA::Object::_nil(); - } - - CORBA::Object_var IORToObject (const char* theIOR) - { - SalomeApp_Application* app = dynamic_cast - (SUIT_Session::session()->activeApplication()); - return app->orb()->string_to_object(theIOR); - } - - int GetNameOfSelectedIObjects(SalomeApp_SelectionMgr* theMgr, QString& theName) - { - if (!theMgr) - return 0; - - SALOME_ListIO selected; - theMgr->selectedObjects(selected); - int aNbSel = selected.Extent(); - if (aNbSel == 1) { - Handle(SALOME_InteractiveObject) anIObject = selected.First(); - theName = anIObject->getName(); - } else { - theName = QObject::tr("SMESH_OBJECTS_SELECTED").arg(aNbSel); - } - return aNbSel; - } - - _PTR(SObject) GetMeshOrSubmesh (_PTR(SObject) theSObject) - { - GEOM::GEOM_Object_var aShape = SObjectToInterface(theSObject); - if (!aShape->_is_nil()){ //It s a shape - return theSObject->GetFather(); - } - _PTR(SObject) aSObject; - if (theSObject->ReferencedObject(aSObject)) { - aSObject = theSObject->GetFather(); - return aSObject->GetFather(); - } - return theSObject->GetFather(); - } - - void ModifiedMesh (_PTR(SObject) theSObject, bool theIsRight) - { - _PTR(Study) aStudy = GetActiveStudyDocument(); - if (aStudy->GetProperties()->IsLocked()) - return; - - _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); - _PTR(GenericAttribute) anAttr = - aBuilder->FindOrCreateAttribute(theSObject,"AttributePixMap"); - _PTR(AttributePixMap) aPixmap = anAttr; - if (theIsRight) { - aPixmap->SetPixMap("ICON_SMESH_TREE_MESH"); - } else { - aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_WARN"); - } - - _PTR(ChildIterator) anIter = aStudy->NewChildIterator(theSObject); - for (int i = 1; anIter->More(); anIter->Next(), i++) { - _PTR(SObject) aSObj = anIter->Value(); - if (i >= 4) { - _PTR(ChildIterator) anIter1 = aStudy->NewChildIterator(aSObj); - for (; anIter1->More(); anIter1->Next()) { - _PTR(SObject) aSObj1 = anIter1->Value(); - anAttr = aBuilder->FindOrCreateAttribute(aSObj1, "AttributePixMap"); - aPixmap = anAttr; - if (theIsRight) { - aPixmap->SetPixMap("ICON_SMESH_TREE_MESH"); - } else { - aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_WARN"); - } - } - } - } - } - -// void UpdateObjBrowser (bool) -// { -// //SMESHGUI::activeStudy()->updateObjBrowser(true); -// //SalomeApp_Application* anApp = dynamic_cast -// // (SUIT_Session::session()->activeApplication()); -// //if (anApp) anApp->objectBrowser()->updateTree(); -// SMESHGUI::GetSMESHGUI()->updateObjBrowser(); -// } -} diff --git a/src/SMESHGUI/SMESHGUI_Utils.h b/src/SMESHGUI/SMESHGUI_Utils.h deleted file mode 100644 index 69e1f6160..000000000 --- a/src/SMESHGUI/SMESHGUI_Utils.h +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef SMESHGUI_Utils_HeaderFile -#define SMESHGUI_Utils_HeaderFile - -#include - -#include "SALOMEDSClient_definitions.hxx" -#include "SALOME_InteractiveObject.hxx" -#include "SalomeApp_DataOwner.h" - -class QString; - -class SUIT_ViewWindow; -class SUIT_Desktop; -class SUIT_Study; -class SUIT_ResourceMgr; - -class CAM_Module; - -class SALOMEDSClient_Study; -class SALOMEDSClient_SObject; - -class SalomeApp_Study; -class SalomeApp_Module; -class SalomeApp_SelectionMgr; - -namespace SMESH { - - SUIT_Desktop* - GetDesktop(const CAM_Module* theModule); - - SalomeApp_SelectionMgr* - GetSelectionMgr(const SalomeApp_Module* theModule); - - SalomeApp_Study* - GetAppStudy(const CAM_Module* theModule); - - SUIT_ResourceMgr* - GetResourceMgr( const SalomeApp_Module* ); - - _PTR(Study) - GetCStudy(const SalomeApp_Study* theStudy); - - CORBA::Object_var DataOwnerToObject(const SalomeApp_DataOwnerPtr& theOwner); - - template typename TInterface::_var_type - DataOwnerToInterface(const SalomeApp_DataOwnerPtr& theDataOwner) - { - CORBA::Object_var anObj = DataOwnerToObject(theDataOwner); - if(!CORBA::is_nil(anObj)) - return TInterface::_narrow(anObj); - return TInterface::_nil(); - } - - - SUIT_Study* GetActiveStudy(); - - SUIT_ViewWindow* GetActiveWindow(); - - _PTR(Study) GetActiveStudyDocument(); - - _PTR(SObject) FindSObject(CORBA::Object_ptr theObject); - - void SetName (_PTR(SObject) theSObject, const char* theName); - void SetValue (_PTR(SObject) theSObject, const char* theValue); - - CORBA::Object_var SObjectToObject (_PTR(SObject) theSObject, - _PTR(Study) theStudy); - - CORBA::Object_var SObjectToObject(_PTR(SObject) theSObject); - - template typename TInterface::_var_type - SObjectToInterface(_PTR(SObject) theSObject) - { - CORBA::Object_var anObj = SObjectToObject(theSObject); - if(!CORBA::is_nil(anObj)) - return TInterface::_narrow(anObj); - return TInterface::_nil(); - } - - CORBA::Object_var IObjectToObject(const Handle(SALOME_InteractiveObject)& theIO); - - template typename TInterface::_var_type - IObjectToInterface(const Handle(SALOME_InteractiveObject)& theIO) - { - CORBA::Object_var anObj = IObjectToObject(theIO); - if(!CORBA::is_nil(anObj)) - return TInterface::_narrow(anObj); - return TInterface::_nil(); - } - - CORBA::Object_var IORToObject(const char* theIOR); - - template typename TInterface::_var_type - IORToInterface(const char* theIOR) - { - CORBA::Object_var anObj = IORToObject(theIOR); - if(!CORBA::is_nil(anObj)) - return TInterface::_narrow(anObj); - return TInterface::_nil(); - } - - int GetNameOfSelectedIObjects (SalomeApp_SelectionMgr*, QString& theName); - - _PTR(SObject) GetMeshOrSubmesh (_PTR(SObject) theSObject); - - void ModifiedMesh (_PTR(SObject) theSObject, bool theIsRight); - -// void UpdateObjBrowser (bool); -} - -#endif diff --git a/src/SMESHGUI/SMESHGUI_XmlHandler.cxx b/src/SMESHGUI/SMESHGUI_XmlHandler.cxx deleted file mode 100644 index 00a1e26e1..000000000 --- a/src/SMESHGUI/SMESHGUI_XmlHandler.cxx +++ /dev/null @@ -1,210 +0,0 @@ -// SMESH SMESHGUI : reading of xml file with list of available hypotheses and algorithms -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// // modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_XmlHandler.cxx -// Author : Julia DOROVSKIKH -// Module : SMESH -// $Header$ - -#define INCLUDE_MENUITEM_DEF - -// QT Include -#include -#include - -#include "SMESHGUI.h" -#include "SUIT_ResourceMgr.h" -#include "SUIT_Desktop.h" - -#include "SMESHGUI_XmlHandler.h" -#include "SMESHGUI_Hypotheses.h" -#include "SMESHGUI_Utils.h" - -#include "utilities.h" - -using namespace std; - -/*! - Constructor -*/ -SMESHGUI_XmlHandler::SMESHGUI_XmlHandler() -{ -} - -/*! - Destructor -*/ -SMESHGUI_XmlHandler::~SMESHGUI_XmlHandler() -{ -} - -/*! - Starts parsing of document. Does some initialization - - Reimplemented from QXmlDefaultHandler. -*/ -bool SMESHGUI_XmlHandler::startDocument() -{ - myErrorProt = ""; - return TRUE; -} - -/*! - Does different actions depending on the name of the tag and the - state you are in document. - - Reimplemented from QXmlDefaultHandler. -*/ -bool SMESHGUI_XmlHandler::startElement (const QString&, const QString&, - const QString& qName, - const QXmlAttributes& atts) -{ - if (qName == "meshers") - { - myHypothesesMap.clear(); - myAlgorithmsMap.clear(); - } - else if (qName == "meshers-group") // group of hypotheses and algorithms - { -// if (atts.value("server-lib") != "") - { - myPluginName = atts.value("name"); - myServerLib = atts.value("server-lib"); - myClientLib = atts.value("gui-lib"); - - QString aResName = atts.value("resources"); - if (aResName != "") - { - MESSAGE("Loading Resources " << aResName); - SUIT_ResourceMgr* resMgr = SMESHGUI::resourceMgr(); - resMgr->loadTranslator("resources",aResName+"_msg_en.qm"); - resMgr->loadTranslator("resources",aResName+"_images.qm"); - } - } - } - else if (qName == "hypotheses") // group of hypotheses - { - } - else if (qName == "algorithms") // group of algorithms - { - } - else if (qName == "hypothesis" || qName == "algorithm") // hypothesis or algorithm - { - if (atts.value("type") != "") - { - QString aHypAlType = atts.value("type"); - QString aLabel = atts.value("label-id"); - QString anIcon = atts.value("icon-id"); - bool isAux = atts.value("auxiliary") == "true"; - - QString aDimStr = atts.value("dim"); - aDimStr = aDimStr.remove( ' ' ); - QStringList aDimList = QStringList::split( ',', aDimStr ); - QStringList::iterator anIter; - bool isOk; - QValueList aDim; - for ( anIter = aDimList.begin(); anIter != aDimList.end(); ++anIter ) - { - int aVal = (*anIter).toInt( &isOk ); - if ( isOk ) - aDim.append( aVal - 1 ); - } - - HypothesisData* aHypLibNames = - new HypothesisData (myPluginName, myServerLib, myClientLib, - aLabel, anIcon, aDim, isAux ); - - if (qName == "algorithm") - { - myAlgorithmsMap[(char*)aHypAlType.latin1()] = aHypLibNames; - } - else - { - myHypothesesMap[(char*)aHypAlType.latin1()] = aHypLibNames; - } - } - } - else - { - // error - return FALSE; - } - return TRUE; -} - - -/*! - Reimplemented from QXmlDefaultHandler. -*/ -bool SMESHGUI_XmlHandler::endElement (const QString&, const QString&, const QString&) -{ - return TRUE; -} - - -/*! - Reimplemented from QXmlDefaultHandler. -*/ -bool SMESHGUI_XmlHandler::characters (const QString& ch) -{ - // we are not interested in whitespaces - QString ch_simplified = ch.simplifyWhiteSpace(); - if ( ch_simplified.isEmpty() ) - return TRUE; - return TRUE; -} - - -/*! - Returns the default error string. - - Reimplemented from QXmlDefaultHandler. -*/ -QString SMESHGUI_XmlHandler::errorString() -{ - return "the document is not in the quote file format"; -} - -/*! - Returns the error protocol if parsing failed - - Reimplemented from QXmlDefaultHandler. -*/ -QString SMESHGUI_XmlHandler::errorProtocol() -{ - return myErrorProt; -} - -/*! - Returns exception - - Reimplemented from QXmlDefaultHandler. -*/ -bool SMESHGUI_XmlHandler::fatalError (const QXmlParseException& exception) -{ - myErrorProt += QString("fatal parsing error: %1 in line %2, column %3\n") - .arg(exception.message()) - .arg(exception.lineNumber()) - .arg(exception.columnNumber()); - - return QXmlDefaultHandler::fatalError( exception ); -} diff --git a/src/SMESHGUI/SMESHGUI_XmlHandler.h b/src/SMESHGUI/SMESHGUI_XmlHandler.h deleted file mode 100644 index c64ff86c8..000000000 --- a/src/SMESHGUI/SMESHGUI_XmlHandler.h +++ /dev/null @@ -1,64 +0,0 @@ -// SMESH SMESHGUI : reading of xml file with list of available hypotheses and algorithms -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_XmlHandler.cxx -// Author : Julia DOROVSKIKH -// Module : SMESH -// $Header$ - -#ifndef SMESHGUI_XmlHandler_HeaderFile -#define SMESHGUI_XmlHandler_HeaderFile - -#include "SMESHGUI_Hypotheses.h" - -#include -#include - -class SMESHGUI_XmlHandler : public QXmlDefaultHandler -{ - public: - SMESHGUI_XmlHandler(); - virtual ~SMESHGUI_XmlHandler(); - - bool startDocument(); - bool startElement( const QString& namespaceURI, const QString& localName, - const QString& qName, const QXmlAttributes& atts ); - bool endElement( const QString& namespaceURI, const QString& localName, const QString& qName ); - bool characters( const QString& ch ); - - QString errorString(); - QString errorProtocol(); - bool fatalError (const QXmlParseException& exception); - - public: - std::map myHypothesesMap; - std::map myAlgorithmsMap; - - private: - QString myErrorProt; - QString myPluginName; - QString myServerLib; - QString myClientLib; -}; - - -#endif diff --git a/src/SMESHGUI/SMESHGUI_aParameter.cxx b/src/SMESHGUI/SMESHGUI_aParameter.cxx deleted file mode 100644 index 3e513f04b..000000000 --- a/src/SMESHGUI/SMESHGUI_aParameter.cxx +++ /dev/null @@ -1,941 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_aParameter.cxx -// Module : SMESH -// $Header$ - -#include "SMESHGUI_aParameter.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -SMESHGUI_aParameter::~SMESHGUI_aParameter() {} - -QString SMESHGUI_aParameter::sigValueChanged() const -{ - return QString::null; -} - -//================================================================================= -// class : SMESHGUI_intParameter -// purpose : -//================================================================================= -SMESHGUI_intParameter::SMESHGUI_intParameter (const int theInitValue, - const QString& theLabel, - const int theBottom, - const int theTop) - :SMESHGUI_aParameter(theLabel), - _top(theTop), _bottom(theBottom), _initValue(theInitValue), - _newValue( theInitValue ) -{ -} -SMESHGUI_aParameter::Type SMESHGUI_intParameter::GetType() const -{ - return SMESHGUI_aParameter::INT; -} -bool SMESHGUI_intParameter::GetNewInt (int & theValue) const -{ - theValue = _newValue; - return _newValue != _initValue; -} -bool SMESHGUI_intParameter::GetNewDouble (double & Value) const -{ - return false; -} -bool SMESHGUI_intParameter::GetNewText (QString & Value) const -{ - return false; -} - -QWidget* SMESHGUI_intParameter::CreateWidget( QWidget* parent ) const -{ - return new QSpinBox( parent ); -} - -void SMESHGUI_intParameter::InitializeWidget (QWidget* theQWidget) const -{ - QSpinBox * aSpin = dynamic_cast< QSpinBox *>(theQWidget); - if (aSpin) { - aSpin->setMinValue(_bottom); - aSpin->setMaxValue(_top); - aSpin->setValue(_initValue); - } -} -void SMESHGUI_intParameter::TakeValue (QWidget* theQWidget) -{ - QSpinBox * aSpin = dynamic_cast< QSpinBox *>(theQWidget); - if (aSpin) - _newValue = aSpin->value(); -} - -QString SMESHGUI_intParameter::sigValueChanged() const -{ - return SIGNAL( valueChanged( int ) ); -} - -//================================================================================= -// class : SMESHGUI_doubleParameter -// purpose : -//================================================================================= -SMESHGUI_doubleParameter::SMESHGUI_doubleParameter (const double theInitValue, - const QString& theLabel, - const double theBottom, - const double theTop, - const double theStep, - const int theDecimals) - :SMESHGUI_aParameter(theLabel), - _top(theTop), _bottom(theBottom), _step(theStep), - _initValue(theInitValue), _decimals(theDecimals) -{ -} -SMESHGUI_aParameter::Type SMESHGUI_doubleParameter::GetType() const -{ - return SMESHGUI_aParameter::DOUBLE; -} -bool SMESHGUI_doubleParameter::GetNewInt (int & theValue) const -{ - return false; -} -bool SMESHGUI_doubleParameter::GetNewDouble (double & Value) const -{ - Value = _newValue; - return _newValue != _initValue; -} -bool SMESHGUI_doubleParameter::GetNewText (QString & Value) const -{ - return false; -} - -QWidget* SMESHGUI_doubleParameter::CreateWidget( QWidget* parent ) const -{ - return new QtxDblSpinBox( parent ); -} - -void SMESHGUI_doubleParameter::InitializeWidget (QWidget* theQWidget) const -{ - QtxDblSpinBox* aSpin = dynamic_cast(theQWidget); - if (aSpin) { - aSpin->setPrecision(_decimals); -#ifdef NEW_GUI - aSpin->setDblPrecision(_bottom); -#endif - aSpin->setRange(_bottom, _top); - aSpin->setValue(_initValue); - aSpin->setLineStep(_step); - } -} -void SMESHGUI_doubleParameter::TakeValue (QWidget* theQWidget) -{ - QtxDblSpinBox* aSpin = dynamic_cast(theQWidget); - if (aSpin) - _newValue = aSpin->value(); -} - -QString SMESHGUI_doubleParameter::sigValueChanged() const -{ - return SIGNAL( valueChanged( double ) ); -} - -//================================================================================= -// class : SMESHGUI_strParameter -// purpose : -//================================================================================= -SMESHGUI_strParameter::SMESHGUI_strParameter (const QString& theInitValue, - const QString& theLabel) - :SMESHGUI_aParameter(theLabel), - _initValue(theInitValue) -{ -} -SMESHGUI_aParameter::Type SMESHGUI_strParameter::GetType() const -{ - return SMESHGUI_aParameter::STRING; -} -bool SMESHGUI_strParameter::GetNewInt (int & theValue) const -{ - return false; -} -bool SMESHGUI_strParameter::GetNewDouble (double & Value) const -{ - return false; -} -bool SMESHGUI_strParameter::GetNewText (QString & theValue) const -{ - theValue = _newValue; - return _newValue != _initValue; -} - -QWidget* SMESHGUI_strParameter::CreateWidget( QWidget* parent ) const -{ - return new QLineEdit( parent ); -} - -void SMESHGUI_strParameter::InitializeWidget (QWidget* theQWidget) const -{ - QLineEdit* anEdit = dynamic_cast< QLineEdit* >(theQWidget); - if (anEdit) { - anEdit->setText(_initValue); - } -} -void SMESHGUI_strParameter::TakeValue (QWidget* theQWidget) -{ - QLineEdit* anEdit = dynamic_cast< QLineEdit* >(theQWidget); - if (anEdit) - _newValue = anEdit->text(); -} - -QString SMESHGUI_strParameter::sigValueChanged() const -{ - return SIGNAL( textChanged( const QString& ) ); -} - - - -//================================================================================= -// class : SMESHGUI_dependParameter -// purpose : -//================================================================================= -SMESHGUI_dependParameter::SMESHGUI_dependParameter( const QString& label ) -: SMESHGUI_aParameter( label ) -{ -} - -const SMESHGUI_dependParameter::ShownMap& SMESHGUI_dependParameter::shownMap() const -{ - return myShownMap; -} - -SMESHGUI_dependParameter::ShownMap& SMESHGUI_dependParameter::shownMap() -{ - return myShownMap; -} - - - - - -//================================================================================= -// class : SMESHGUI_enumParameter -// purpose : -//================================================================================= -SMESHGUI_enumParameter::SMESHGUI_enumParameter( const QStringList& values, - const int initValue, - const QString& label ) -: SMESHGUI_dependParameter( label ), - myInitValue( initValue ), - myValue( initValue ), - myValues( values ) -{ -} - -SMESHGUI_enumParameter::~SMESHGUI_enumParameter() -{ -} - -SMESHGUI_aParameter::Type SMESHGUI_enumParameter::GetType() const -{ - return SMESHGUI_aParameter::ENUM; -} - -bool SMESHGUI_enumParameter::GetNewInt( int& v ) const -{ - v = myValue; - return myValue!=myInitValue; -} - -bool SMESHGUI_enumParameter::GetNewDouble( double& ) const -{ - return false; -} - -bool SMESHGUI_enumParameter::GetNewText( QString& v ) const -{ - bool res = myValue>=0 && myValueinherits( "QComboBox" ) ) - { - QComboBox* c = ( QComboBox* ) w; - c->clear(); - c->insertStringList( myValues ); - c->setCurrentItem( myInitValue ); - } -} - -void SMESHGUI_enumParameter::TakeValue( QWidget* w ) -{ - if( w && w->inherits( "QComboBox" ) ) - { - QComboBox* c = ( QComboBox* ) w; - myValue = c->currentItem(); - } -} - -int SMESHGUI_enumParameter::Count() const -{ - return myValues.count(); -} - -QString SMESHGUI_enumParameter::sigValueChanged() const -{ - return SIGNAL( activated( int ) ); -} - - -//================================================================================= -// class : SMESHGUI_boolParameter -// purpose : -//================================================================================= -SMESHGUI_boolParameter::SMESHGUI_boolParameter( const bool initValue, - const QString& label ) -: SMESHGUI_dependParameter( label ), - myInitValue( initValue ), - myValue( myInitValue ) -{ -} - -SMESHGUI_boolParameter::~SMESHGUI_boolParameter() -{ -} - -SMESHGUI_aParameter::Type SMESHGUI_boolParameter::GetType() const -{ - return BOOL; -} - -bool SMESHGUI_boolParameter::GetNewInt( int& v ) const -{ - if( myValue ) - v = 1; - else - v = 0; - return v!=myInitValue; -} - -bool SMESHGUI_boolParameter::GetNewDouble( double& ) const -{ - return false; -} - -bool SMESHGUI_boolParameter::GetNewText( QString& ) const -{ - return false; -} - -QWidget* SMESHGUI_boolParameter::CreateWidget( QWidget* parent ) const -{ - return new QCheckBox( parent ); -} - -void SMESHGUI_boolParameter::InitializeWidget( QWidget* w ) const -{ - if( w && w->inherits( "QCheckBox" ) ) - { - QCheckBox* box = ( QCheckBox* )w; - box->setChecked( myInitValue ); - } -} - -void SMESHGUI_boolParameter::TakeValue( QWidget* w ) -{ - if( w && w->inherits( "QCheckBox" ) ) - { - QCheckBox* box = ( QCheckBox* )w; - myValue = box->isChecked(); - } -} - -QString SMESHGUI_boolParameter::sigValueChanged() const -{ - return SIGNAL( stateChanged( int ) ); -} - - - - -//================================================================================= -// class : SMESHGUI_doubleItem -// purpose : Custom table item which contains double and has double validator -//================================================================================= -class SMESHGUI_doubleItem: public QTableItem -{ -public: - SMESHGUI_doubleItem( QTable*, EditType, const double ); - virtual ~SMESHGUI_doubleItem(); - - void setValidator( const double, const double, const int ); - void validator( double&, double&, int& ); - virtual QWidget* createEditor() const; - -private: - QDoubleValidator* myValidator; -}; - -SMESHGUI_doubleItem::SMESHGUI_doubleItem( QTable* t, EditType e, const double num ) -: QTableItem( t, e, QString( "%1" ).arg( num ) ), - myValidator( new QDoubleValidator( 0.0, 1.0, 3, t ) ) -{ -} - -SMESHGUI_doubleItem::~SMESHGUI_doubleItem() -{ -} - -void SMESHGUI_doubleItem::setValidator( const double bot, const double top, const int dec ) -{ - myValidator->setBottom( bot ); - myValidator->setTop( top ); - myValidator->setDecimals( dec ); -} - -void SMESHGUI_doubleItem::validator( double& bot, double& top, int& dec ) -{ - bot = myValidator->bottom(); - top = myValidator->top(); - dec = myValidator->decimals(); -} - -QWidget* SMESHGUI_doubleItem::createEditor() const -{ - QWidget* res = QTableItem::createEditor(); - if( res && res->inherits( "QLineEdit" ) ) - { - QLineEdit* l = ( QLineEdit* )res; - l->setValidator( myValidator ); - } - return res; -} - - -//================================================================================= -// class : SMESHGUI_Table -// purpose : -//================================================================================= -SMESHGUI_Table::SMESHGUI_Table( int numRows, int numCols, QWidget* parent, const char* name ) -: QTable( numRows, numCols, parent, name ) -{ -} - -SMESHGUI_Table::~SMESHGUI_Table() -{ -} - -QSize SMESHGUI_Table::sizeHint() const -{ - if( cachedSizeHint().isValid() ) - return cachedSizeHint(); - - constPolish(); - - QSize sh = QScrollView::sizeHint(); - if( sh.width()<400 ) - sh.setWidth( 400 ); - if( sh.height()<200 ) - sh.setHeight( 200 ); - - setCachedSizeHint( sh ); - return sh; -} - -void SMESHGUI_Table::stopEditing() -{ - endEdit( currEditRow(), currEditCol(), false, false ); -} - -void SMESHGUI_Table::validator( const int row, const int col, double& minV, double& maxV, int& dec ) -{ - SMESHGUI_doubleItem* it = dynamic_cast( item( row, col ) ); - if( it ) - it->validator( minV, maxV, dec ); -} - -void SMESHGUI_Table::setValidator( const double minV, const double maxV, const int dec, - const int rmin, const int rmax, - const int cmin, const int cmax ) -{ - int r1 = rmin>=0 ? rmin : 0, - r2 = rmax>=0 ? rmax : numRows(), - c1 = cmin>=0 ? cmin : 0, - c2 = cmax>=0 ? cmax : numCols(); - - for( int i=r1; i<=r2; i++ ) - for( int j=c1; j<=c2; j++ ) - { - SMESHGUI_doubleItem* it = dynamic_cast( item( i, j ) ); - if( it ) - it->setValidator( minV, maxV, dec ); - } -} - - - -//================================================================================= -// class : SMESHGUI_TableFrame -// purpose : -//================================================================================= -SMESHGUI_TableFrame::SMESHGUI_TableFrame( QWidget* parent ) -: QFrame( parent ) -{ - QVBoxLayout* main = new QVBoxLayout( this, 0, 0 ); - - myTable = new SMESHGUI_Table( 1, 1, this ); - - QFrame* aButFrame = new QFrame( this ); - QHBoxLayout* butLay = new QHBoxLayout( aButFrame, 5, 5 ); - - myAddColumn = new QPushButton( "Add column", aButFrame ); - - myRemoveColumn = new QPushButton( "Remove column", aButFrame ); - - myAddRow = new QPushButton( "Add row", aButFrame ); - - myRemoveRow = new QPushButton( "Remove row", aButFrame ); - - butLay->addWidget( myAddColumn, 0 ); - butLay->addWidget( myRemoveColumn, 0 ); - butLay->addWidget( myAddRow, 0 ); - butLay->addWidget( myRemoveRow, 0 ); - butLay->addStretch( 1 ); - - main->addWidget( myTable, 1 ); - main->addWidget( aButFrame, 0 ); - - connect( myAddColumn, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) ); - connect( myRemoveColumn, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) ); - connect( myAddRow, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) ); - connect( myRemoveRow, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) ); -} - -SMESHGUI_TableFrame::~SMESHGUI_TableFrame() -{ -} - -SMESHGUI_Table* SMESHGUI_TableFrame::table() const -{ - return myTable; -} - -void SMESHGUI_TableFrame::setShown( const Button b, const bool sh ) -{ - if( button( b ) ) - button( b )->setShown( sh ); -} - -bool SMESHGUI_TableFrame::isShown( const Button b ) const -{ - bool res = false; - if( button( b ) ) - res = button( b )->isShown(); - return res; -} - -QButton* SMESHGUI_TableFrame::button( const Button b ) const -{ - QButton* res = 0; - switch( b ) - { - case ADD_COLUMN: - res = myAddColumn; - break; - - case REMOVE_COLUMN: - res = myRemoveColumn; - break; - - case ADD_ROW: - res = myAddRow; - break; - - case REMOVE_ROW: - res = myRemoveRow; - break; - } - return res; -} - -void SMESHGUI_TableFrame::onButtonClicked() -{ - if( sender()==button( ADD_COLUMN ) ) - emit toEdit( ADD_COLUMN, table()->currentColumn() ); - - else if( sender()==button( REMOVE_COLUMN ) ) - emit toEdit( REMOVE_COLUMN, table()->currentColumn() ); - - else if( sender()==button( ADD_ROW ) ) - emit toEdit( ADD_ROW, table()->currentRow() ); - - else if( sender()==button( REMOVE_ROW ) ) - emit toEdit( REMOVE_ROW, table()->currentRow() ); -} - - -//================================================================================= -// class : SMESHGUI_tableParameter -// purpose : -//================================================================================= -SMESHGUI_tableParameter::SMESHGUI_tableParameter( const double init, - const QString& label ) -: SMESHGUI_aParameter( label ), - myInitValue( init ), - myColsInt( 1 ), - myRowsInt( 1 ), - myEditCols( false ), - myEditRows( false ) -{ -} - -SMESHGUI_tableParameter::~SMESHGUI_tableParameter() -{ -} - -SMESHGUI_aParameter::Type SMESHGUI_tableParameter::GetType() const -{ - return TABLE; -} - -bool SMESHGUI_tableParameter::GetNewInt( int& ) const -{ - return false; -} - -bool SMESHGUI_tableParameter::GetNewDouble( double& ) const -{ - return false; -} - -bool SMESHGUI_tableParameter::GetNewText( QString& ) const -{ - return false; -} - -QWidget* SMESHGUI_tableParameter::CreateWidget( QWidget* par ) const -{ - SMESHGUI_TableFrame* t = new SMESHGUI_TableFrame( par ); - connect( t, SIGNAL( toEdit( SMESHGUI_TableFrame::Button, int ) ), - this, SLOT ( onEdit( SMESHGUI_TableFrame::Button, int ) ) ); - - update( t ); - return t; -} - -void SMESHGUI_tableParameter::setItems( QWidget* w, - int old_row, int new_row, - int old_col, int new_col ) const -{ - if( w && w->inherits( "SMESHGUI_TableFrame" ) ) - { - QTable* tab = ( ( SMESHGUI_TableFrame* )w )->table(); - - if( old_row<0 ) - old_row = 0; - if( new_row<0 ) - new_row = tab->numRows(); - if( old_col<0 ) - old_col = 0; - if( new_col<0 ) - new_col = tab->numCols(); - - for( int i=old_row, m=new_row; isetItem( i, j, new SMESHGUI_doubleItem( tab, QTableItem::WhenCurrent, myInitValue ) ); - - for( int i=0, m=new_row; isetItem( i, j, new SMESHGUI_doubleItem( tab, QTableItem::WhenCurrent, myInitValue ) ); - - for( int j=old_col; jsetColumnWidth( j, 50 ); - } -} - -void SMESHGUI_tableParameter::InitializeWidget( QWidget* w ) const -{ - setItems( w ); - - if( w && w->inherits( "SMESHGUI_TableFrame" ) ) - { - SMESHGUI_Table* tab = ( ( SMESHGUI_TableFrame* )w )->table(); - tab->stopEditing(); - - int col = tab->numCols(), - row = tab->numRows(); - - for( int i=0, m=row; iitem( i, j )->setText( QString( "%1" ).arg( myData[row*j+i] ) ); - } -} - -void SMESHGUI_tableParameter::TakeValue( QWidget* w ) -{ - if( w && w->inherits( "SMESHGUI_TableFrame" ) ) - { - QTable* tab = ( ( SMESHGUI_TableFrame* )w )->table(); - - int col = tab->numCols(), - row = tab->numRows(); - - myData.length( col*row ); - for( int i=0; itext( i, j ).toDouble(); - } -} - -void SMESHGUI_tableParameter::data( SMESH::double_array& v ) const -{ - v = myData; -} - -void SMESHGUI_tableParameter::setData( const SMESH::double_array& d ) -{ - myData = d; -} - -void SMESHGUI_tableParameter::update( QWidget* w ) const -{ - if( w && w->inherits( "SMESHGUI_TableFrame" ) ) - { - SMESHGUI_TableFrame* tabfr = ( SMESHGUI_TableFrame* ) w; - SMESHGUI_Table* tab = tabfr->table(); - - int old_col = tab->numCols(), - old_row = tab->numRows(); - - int col = myColsInt, row = myRowsInt; - if( myCols.get() ) - myCols->GetNewInt( col ); - - if( myRows.get() ) - myRows->GetNewInt( row ); - - if( col<=0 ) - col = 1; - if( row<=0 ) - row = 1; - - if( col!=tab->numCols() ) - tab->setNumCols( col ); - - if( row!=tab->numRows() ) - tab->setNumRows( row ); - - tabfr->setShown( SMESHGUI_TableFrame::ADD_COLUMN, myEditCols ); - tabfr->setShown( SMESHGUI_TableFrame::REMOVE_COLUMN, myEditCols ); - tabfr->setShown( SMESHGUI_TableFrame::ADD_ROW, myEditRows ); - tabfr->setShown( SMESHGUI_TableFrame::REMOVE_ROW, myEditRows ); - - setItems( w, old_row, row, old_col, col ); - - QMap< int, QString >::const_iterator aNIt = myColNames.begin(), - aNLast = myColNames.end(); - for( ; aNIt!=aNLast; aNIt++ ) - tab->horizontalHeader()->setLabel( aNIt.key(), aNIt.data() ); - - ValidatorsMap::const_iterator anIt = myValidators.begin(), - aLast = myValidators.end(); - for( ; anIt!=aLast; anIt++ ) - { - int row = anIt.key(), dec; - double minV, maxV; - validator( row, minV, maxV, dec ); - tab->setValidator( minV, maxV, dec, -1, -1, col, col ); - } - - QSize s = tab->sizeHint(); - tab->resize( s.width(), s.height() ); - } -} - -void SMESHGUI_tableParameter::setColCount( const int c, QWidget* w ) -{ - myColsInt = c; - update( w ); -} - -void SMESHGUI_tableParameter::setRowCount( const int c, QWidget* w ) -{ - myRowsInt = c; - update( w ); -} - -void SMESHGUI_tableParameter::setColCount( const SMESHGUI_aParameterPtr p, QWidget* w ) -{ - if( p.get() ) - { - myCols = p; - update( w ); - } -} - -void SMESHGUI_tableParameter::setRowCount( const SMESHGUI_aParameterPtr p, QWidget* w ) -{ - if( p.get() ) - { - myRows = p; - update( w ); - } -} - -QString SMESHGUI_tableParameter::sigValueChanged() const -{ - return SIGNAL( valueChanged( int, int ) ); -} - -void SMESHGUI_tableParameter::setValidator( const int ind, const double minV, const double maxV, const int dec ) -{ - ValidatorInfo inf; - inf.myMin = minV; - inf.myMax = maxV; - inf.myDecimals = dec; - myValidators[ ind ] = inf; -} - -void SMESHGUI_tableParameter::validator( const int ind, double& minV, double& maxV, int& dec ) const -{ - if( myValidators.contains( ind ) ) - { - const ValidatorInfo& inf = myValidators[ ind ]; - minV = inf.myMin; - maxV = inf.myMax; - dec = inf.myDecimals; - } -} - -void SMESHGUI_tableParameter::setEditCols( const bool ed ) -{ - myEditCols = ed; -} - -void SMESHGUI_tableParameter::setEditRows( const bool ed ) -{ - myEditRows = ed; -} - -void SMESHGUI_tableParameter::setColName( const int ind, const QString& name ) -{ - myColNames.insert( ind, name ); -} - -QString SMESHGUI_tableParameter::colName( const int ind ) const -{ - if( myColNames.contains( ind ) ) - return myColNames[ ind ]; - else - return QString::null; -} - -void SMESHGUI_tableParameter::onEdit( SMESHGUI_TableFrame::Button b, int n ) -{ - if( sender() && sender()->inherits( "SMESHGUI_TableFrame" ) ) - { - SMESHGUI_TableFrame* fr = ( SMESHGUI_TableFrame* )sender(); - SMESHGUI_Table* tab = fr->table(); - - switch( b ) - { - case SMESHGUI_TableFrame::ADD_COLUMN: - { - if( !myEditCols || myCols.get() ) - return; - - myColsInt++; update( fr ); - if( n>=0 ) - for( int i=0; i=n; j-- ) - if( j==n ) - tab->setText( i, j, QString( "%1" ).arg( myInitValue ) ); - else - tab->setText( i, j, tab->text( i, j-1 ) ); - break; - } - - case SMESHGUI_TableFrame::REMOVE_COLUMN: - { - if( !myEditCols || myCols.get() || myColsInt<=1 ) - return; - - if( n>=0 ) - for( int i=0; isetText( i, j, tab->text( i, j+1 ) ); - myColsInt--; update( fr ); - - break; - } - - case SMESHGUI_TableFrame::ADD_ROW: - { - if( !myEditRows || myRows.get() ) - return; - - myRowsInt++; update( fr ); - if( n>=0 ) - for( int i=myRowsInt-1; i>=n; i-- ) - for( int j=0; jsetText( i, j, QString( "%1" ).arg( myInitValue ) ); - else - tab->setText( i, j, tab->text( i-1, j ) ); - break; - } - - case SMESHGUI_TableFrame::REMOVE_ROW: - { - if( !myEditRows || myRows.get() || myRowsInt<=1 ) - return; - - if( n>=0 ) - for( int i=n; isetText( i, j, tab->text( i+1, j ) ); - myRowsInt--; update( fr ); - - break; - } - } - } -} diff --git a/src/SMESHGUI/SMESHGUI_aParameter.h b/src/SMESHGUI/SMESHGUI_aParameter.h deleted file mode 100644 index 8613b50dd..000000000 --- a/src/SMESHGUI/SMESHGUI_aParameter.h +++ /dev/null @@ -1,442 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_aParameter.h -// Module : SMESH -// $Header$ - -#ifndef SMESHGUI_aParameter_H -#define SMESHGUI_aParameter_H - -#include -#include -#include -#include - -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -class QWidget; -class SMESHGUI_aParameter; - -typedef boost::shared_ptr SMESHGUI_aParameterPtr; - -/*! - * \brief This class is the base class of all parameters - */ -class SMESHGUI_aParameter -{ -public: - SMESHGUI_aParameter(const QString& label):_label(label) {} - virtual ~SMESHGUI_aParameter(); - - enum Type { INT, DOUBLE, STRING, ENUM, BOOL, TABLE }; - virtual Type GetType() const = 0; - virtual bool GetNewInt( int & Value ) const = 0; - virtual bool GetNewDouble( double & Value ) const = 0; - virtual bool GetNewText( QString & Value ) const = 0; - virtual void TakeValue( QWidget* ) = 0; - virtual QWidget* CreateWidget( QWidget* ) const = 0; - virtual void InitializeWidget( QWidget* ) const = 0; - - /*! - * \brief Returns string representation of signal emitted when value in corrsponding widget is changed - */ - virtual QString sigValueChanged() const; - - QString & Label() { return _label; } - -private: - QString _label; -}; - -/*! - * \brief This class provides parameter with integer value - */ -class SMESHGUI_intParameter: public SMESHGUI_aParameter -{ -public: - SMESHGUI_intParameter(const int initValue = 0, - const QString& label = QString::null, - const int bottom = 0, - const int top = 1000); - int & InitValue() { return _initValue; } - int & Top() { return _top; } - int & Bottom() { return _bottom; } - virtual Type GetType() const; - virtual bool GetNewInt( int & Value ) const; - virtual bool GetNewDouble( double & Value ) const; - virtual bool GetNewText( QString & Value ) const; - virtual void TakeValue( QWidget* ); - virtual QWidget* CreateWidget( QWidget* ) const; - virtual void InitializeWidget( QWidget* ) const; - - virtual QString sigValueChanged() const; - -private: - int _top, _bottom; - int _initValue, _newValue; -}; - -/*! - * \brief This class provides parameter with double value - */ -class SMESHGUI_doubleParameter: public SMESHGUI_aParameter -{ -public: - SMESHGUI_doubleParameter(const double initValue = 0.0, - const QString& label = QString::null, - const double bottom = -1E6, - const double top = +1E6, - const double step = 1.0, - const int decimals = 3); - double & InitValue() { return _initValue; } - double & Top() { return _top; } - double & Bottom() { return _bottom; } - double & Step() { return _step; } - int & Decimals() { return _decimals; } - virtual Type GetType() const; - virtual bool GetNewInt( int & Value ) const; - virtual bool GetNewDouble( double & Value ) const; - virtual bool GetNewText( QString & Value ) const; - virtual QWidget* CreateWidget( QWidget* ) const; - virtual void InitializeWidget( QWidget* ) const; - virtual void TakeValue( QWidget* ); - - virtual QString sigValueChanged() const; - -private: - double _top, _bottom, _step; - double _initValue, _newValue; - int _decimals; -}; - -/*! - * \brief This class provides parameter with string value - */ -class SMESHGUI_strParameter: public SMESHGUI_aParameter -{ -public: - SMESHGUI_strParameter( const QString& initValue = "", - const QString& label = QString::null); - QString& InitValue() { return _initValue; } - virtual Type GetType() const; - virtual bool GetNewInt( int & Value ) const; - virtual bool GetNewDouble( double & Value ) const; - virtual bool GetNewText( QString & Value ) const; - virtual QWidget* CreateWidget( QWidget* ) const; - virtual void InitializeWidget( QWidget* ) const; - virtual void TakeValue( QWidget* ); - - virtual QString sigValueChanged() const; - -private: - QString _initValue, _newValue; -}; - - -/*! - * \brief This class represents the base parameter which contains dependency of - * shown state of other parameters on value of current - */ -class SMESHGUI_dependParameter: public SMESHGUI_aParameter -{ -public: - /*! - * \brief This map describes what parameters must be shown when this parameter has value as key - * The list contains some indices of parameters (for example, order in some list) - * Value is integer based 0. If map is empty, it means that there is no dependencies. - */ - typedef QValueList< int > IntList; - typedef QMap< int, IntList > ShownMap; - -public: - SMESHGUI_dependParameter( const QString& = QString::null ); - - const ShownMap& shownMap() const; - ShownMap& shownMap(); - -private: - ShownMap myShownMap; -}; - -/*! - * \brief This class represents parameter which can have value from fixed set - */ -class SMESHGUI_enumParameter: public SMESHGUI_dependParameter -{ -public: - /*! - * \brief Creates parameter with set of values 'values', default value 'init' and title 'label' - * Every value can be described both by integer based 0 or by string value - */ - SMESHGUI_enumParameter( const QStringList& values, - const int init = 0, - const QString& label = QString::null ); - virtual ~SMESHGUI_enumParameter(); - - /*! - * \brief Returns count of possible values - */ - int Count() const; - - int& InitValue() { return myInitValue; } - virtual Type GetType() const; - virtual bool GetNewInt( int& ) const; - virtual bool GetNewDouble( double& ) const; - virtual bool GetNewText( QString& ) const; - virtual QWidget* CreateWidget( QWidget* ) const; - virtual void InitializeWidget( QWidget* ) const; - virtual void TakeValue( QWidget* ); - - virtual QString sigValueChanged() const; - -private: - int myInitValue, myValue; - QStringList myValues; -}; - - -/*! - * \brief This class represents parameter which can have value true or false - */ -class SMESHGUI_boolParameter: public SMESHGUI_dependParameter -{ -public: - SMESHGUI_boolParameter( const bool = false, - const QString& = QString::null ); - virtual ~SMESHGUI_boolParameter(); - - bool& InitValue() { return myInitValue; } - virtual Type GetType() const; - virtual bool GetNewInt( int& ) const; - virtual bool GetNewDouble( double& ) const; - virtual bool GetNewText( QString& ) const; - virtual QWidget* CreateWidget( QWidget* ) const; - virtual void InitializeWidget( QWidget* ) const; - virtual void TakeValue( QWidget* ); - - virtual QString sigValueChanged() const; - -private: - bool myInitValue, myValue; -}; - - -class QButton; - -/*! - * \brief This class represents custom table. It has only double values and - editor for every cell has validator - */ -class SMESHGUI_Table : public QTable -{ - Q_OBJECT - -public: - SMESHGUI_Table( int numRows, int numCols, QWidget* = 0, const char* = 0 ); - virtual ~SMESHGUI_Table(); - -/*! - * \brief Hides current editor of cell - */ - void stopEditing(); - - virtual QSize sizeHint() const; - -/*! - * \brief Returns parameters of double validator corresponding to cell (row,col) - */ - void validator( const int row, const int col, double&, double&, int& ); - -/*! - * \brief Sets the double validator parameters to every cell in row range [rmin,rmax] - * and column range [cmin,cmax]. - * If rmin=-1 then rmin is set to 0, if rmax=-1 then rmax = last row. - * Analogically cmin and cmax are set - */ - void setValidator( const double, const double, const int, - const int rmin = -1, const int rmax = -1, - const int cmin = -1, const int cmax = -1 ); -}; - - -/*! - * \brief This class represents frame for table and buttons - */ -class SMESHGUI_TableFrame : public QFrame -{ - Q_OBJECT - -public: -/*! - * \brief Values corresponding to buttons for table resize - */ - typedef enum { ADD_COLUMN, REMOVE_COLUMN, ADD_ROW, REMOVE_ROW } Button; - -public: - SMESHGUI_TableFrame( QWidget* ); - ~SMESHGUI_TableFrame(); - - SMESHGUI_Table* table() const; - -/*! - * \brief Changes shown state of some button for table resize - */ - void setShown( const Button, const bool ); - -/*! - * \brief Returns shown state of some button for table resize - */ - bool isShown( const Button ) const; - -private: - QButton* button( const Button ) const; - -private slots: - void onButtonClicked(); - -signals: -/*! - * \brief This signal is emitted if some of button for table resize is clicked - * Second parameter is current column for ADD_COLUMN, REMOVE_COLUMN buttons - * and current row for ADD_ROW, REMOVE_ROW buttons. Take into account that - * this object resize table ( returned by table() ) automatically - */ - void toEdit( SMESHGUI_TableFrame::Button, int ); - -private: - QButton *myAddColumn, *myRemoveColumn, *myAddRow, *myRemoveRow; - SMESHGUI_Table* myTable; -}; - - -/*! - * \brief This class represents parameter which can have two-dimensional array of values - */ -class SMESHGUI_tableParameter: public QObject, public SMESHGUI_aParameter -{ - Q_OBJECT - -public: -/*! - * \brief Creates table parameter with default value 'init' and title 'label'. - * The default value means that by default the table is filled with default value - * and if new column or row is added then it is filled with default value - */ - SMESHGUI_tableParameter( const double init = 0.0, - const QString& label = QString::null ); - virtual ~SMESHGUI_tableParameter(); - - virtual Type GetType() const; - virtual bool GetNewInt( int& ) const; - virtual bool GetNewDouble( double& ) const; - virtual bool GetNewText( QString& ) const; - virtual QWidget* CreateWidget( QWidget* ) const; - virtual void InitializeWidget( QWidget* ) const; - virtual void TakeValue( QWidget* ); - -/*! - * \brief Updates look of widget in accordance with all parameters of this object - */ - void update( QWidget* ) const; - -/*! - * \brief Returns data taken from widget. Please don't forget to call TakeValue before. - */ - void data( SMESH::double_array& ) const; - -/*! - * \brief Sets data. The InitializeWidget must be called in order to change values in widget - */ - void setData( const SMESH::double_array& ); - -/*! - * \brief Sets count of columns and updates widget - */ - void setColCount( const int, QWidget* = 0 ); - -/*! - * \brief Sets count of rows and updates widget - */ - void setRowCount( const int, QWidget* = 0 ); - -/*! - * \brief Binds count of columns to some parameter and updates widget. Take into account that - * if this parameter is changed, the update() must be called to resize table - */ - void setColCount( const SMESHGUI_aParameterPtr, QWidget* = 0 ); - -/*! - * \brief Binds count of rows to some parameter and updates widget. Take into account that - * if this parameter is changed, the update() must be called to resize table - */ - void setRowCount( const SMESHGUI_aParameterPtr, QWidget* = 0 ); - -/*! - * \brief Enables or disables to change count of columns by buttons - */ - void setEditCols( const bool ); - -/*! - * \brief Enables or disables to change count of rows by buttons - */ - void setEditRows( const bool ); - - virtual QString sigValueChanged() const; - - void setValidator( const int col, const double, const double, const int ); - void validator( const int col, double&, double&, int& ) const; - -/*! - * \brief These methods allow to read and change name of column - */ - void setColName( const int, const QString& ); - QString colName( const int ) const; - -private slots: - void onEdit( SMESHGUI_TableFrame::Button, int ); - -private: - void setItems( QWidget*, int = -1, int = -1, int = -1, int = -1 ) const; - -private: - typedef struct - { - double myMin, myMax; - int myDecimals; - } ValidatorInfo; - - typedef QMap ValidatorsMap; - -private: - int myColsInt, myRowsInt; - SMESHGUI_aParameterPtr myCols, myRows; - double myInitValue; - SMESH::double_array myData; - ValidatorsMap myValidators; - bool myEditCols, myEditRows; - QMap< int, QString > myColNames; -}; - -#endif // SMESHGUI_aParameter.h diff --git a/src/SMESHGUI/SMESHGUI_aParameterDlg.cxx b/src/SMESHGUI/SMESHGUI_aParameterDlg.cxx deleted file mode 100644 index 7e824a7b9..000000000 --- a/src/SMESHGUI/SMESHGUI_aParameterDlg.cxx +++ /dev/null @@ -1,255 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_aParameterDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#include "SMESHGUI_aParameterDlg.h" -#include "SMESHGUI_aParameter.h" -#include "SMESHGUI.h" -#include "SMESHGUI_SpinBox.h" -#include "SMESHGUI_Utils.h" - -#include "SUIT_Tools.h" -#include "SUIT_Desktop.h" - -// QT Includes -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -//====================================================================================== -// function : SMESHGUI_aParameterDlg() -// -// The dialog will by default be modal, unless you set 'modal' to -// false when constructing dialog -// -//====================================================================================== -SMESHGUI_aParameterDlg::SMESHGUI_aParameterDlg - ( SMESHGUI* theModule, - std::list params, - QString title, - bool modal) -: QDialog( SMESH::GetDesktop( theModule ), "MyParameterDialog", modal, WStyle_Customize | - WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), - myParamList(params), - mySMESHGUI(theModule) -{ - /* creating widgets */ - init(); - /* title */ - setCaption(title); - - /* Move widget on the botton right corner of main widget */ - SUIT_Tools::centerWidget(this, SMESH::GetDesktop( theModule ) ); -} - -//====================================================================================== -// function : SMESHGUI_aParameterDlg::init() -// purpose : creates dialog's layout -//====================================================================================== -void SMESHGUI_aParameterDlg::init() -{ - setSizeGripEnabled(TRUE); - - QVBoxLayout* topLayout = new QVBoxLayout(this); - topLayout->setMargin(11); topLayout->setSpacing(6); - - /***************************************************************/ - QGroupBox* GroupC1 = new QGroupBox(this, "GroupC1"); - GroupC1->setColumnLayout(0, Qt::Vertical); - GroupC1->layout()->setSpacing(0); - GroupC1->layout()->setMargin(0); - QGridLayout* GroupC1Layout = new QGridLayout(GroupC1->layout()); - GroupC1Layout->setAlignment(Qt::AlignTop); - GroupC1Layout->setSpacing(6); - GroupC1Layout->setMargin(11); - /* Spin boxes with labels */ - list::iterator paramIt = myParamList.begin(); - for (int row = 0; paramIt != myParamList.end(); paramIt++ , row++) - { - SMESHGUI_aParameterPtr param = (*paramIt); - QLabel * label = new QLabel(GroupC1, "TextLabel"); - GroupC1Layout->addWidget(label, row, 0); - label->setText(param->Label()); - QWidget* aSpinWidget = param->CreateWidget( GroupC1 ); - if (aSpinWidget) { - GroupC1Layout->addWidget(aSpinWidget, row, 1); - aSpinWidget->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); - aSpinWidget->setMinimumSize(150, 0); - - QString sig = param->sigValueChanged(); - if( !sig.isEmpty() && param->GetType()!=SMESHGUI_aParameter::TABLE ) - connect( aSpinWidget, sig.latin1(), this, SLOT( onValueChanged() ) ); - - param->InitializeWidget(aSpinWidget); - mySpinList.push_back(aSpinWidget); - myLabelList.push_back(label); - } - } - - paramIt = myParamList.begin(); - std::list::const_iterator anIt = mySpinList.begin(); - for( ; paramIt!=myParamList.end(); paramIt++, anIt++ ) - UpdateShown( *paramIt, *anIt ); - - - /***************************************************************/ - QGroupBox* GroupButtons = new QGroupBox(this, "GroupButtons"); - GroupButtons->setColumnLayout(0, Qt::Vertical); - GroupButtons->layout()->setSpacing(0); - GroupButtons->layout()->setMargin(0); - QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); - GroupButtonsLayout->setAlignment(Qt::AlignTop); - GroupButtonsLayout->setSpacing(6); - GroupButtonsLayout->setMargin(11); - /* Ok button */ - myButtonOk = new QPushButton(GroupButtons, "buttonOk"); - myButtonOk->setText(tr("SMESH_BUT_OK")); - myButtonOk->setAutoDefault(TRUE); - myButtonOk->setDefault(TRUE); - GroupButtonsLayout->addWidget(myButtonOk, 0, 0); - /* add spacer between buttons */ - GroupButtonsLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 1); - /* Cancel button */ - myButtonCancel = new QPushButton(GroupButtons, "buttonCancel"); - myButtonCancel->setText(tr("SMESH_BUT_CANCEL")); - myButtonCancel->setAutoDefault(TRUE); - GroupButtonsLayout->addWidget(myButtonCancel, 0, 2); - - /***************************************************************/ - topLayout->addWidget(GroupC1, 1 ); - topLayout->addWidget(GroupButtons, 0 ); - - /* signals and slots connections */ - connect(myButtonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(myButtonCancel, SIGNAL(clicked()), this, SLOT(reject())); -} - -//====================================================================================== -// function : ~SMESHGUI_aParameterDlg() -// purpose : Destructor -//====================================================================================== -SMESHGUI_aParameterDlg::~SMESHGUI_aParameterDlg() -{ -} - -//======================================================================= -//function : ClickOnOk -//purpose : -//======================================================================= -void SMESHGUI_aParameterDlg::ClickOnOk() -{ - if (!mySMESHGUI->isActiveStudyLocked()) { - list::iterator paramIt = myParamList.begin(); - list::iterator widgetIt = mySpinList.begin(); - for (; - paramIt != myParamList.end() && widgetIt != mySpinList.end(); - paramIt++ , widgetIt++) - (*paramIt)->TakeValue(*widgetIt); - - accept(); - } -} - -//======================================================================= -// function : Parameters() -// purpose : return a list of parameters from a dialog box -//======================================================================= -bool SMESHGUI_aParameterDlg::Parameters( SMESHGUI* theModule, - list params, - const char *aTitle) -{ - if (!params.empty()) { - SMESHGUI_aParameterDlg *Dialog = - new SMESHGUI_aParameterDlg( theModule, params, aTitle, TRUE); - return (Dialog->exec() == QDialog::Accepted); - } - return false; -} - -//======================================================================= -// function : onValueChanged -// purpose : -//======================================================================= -void SMESHGUI_aParameterDlg::onValueChanged() -{ - if( sender()->inherits( "QWidget" ) ) - { - QWidget* w = ( QWidget* )sender(); - - SMESHGUI_aParameterPtr param; - - std::list::const_iterator anIt = mySpinList.begin(), - aLast = mySpinList.end(); - std::list::const_iterator aPIt = myParamList.begin(); - for( ; anIt!=aLast; anIt++, aPIt++ ) - if( *anIt == w ) - { - (*aPIt)->TakeValue( w ); - UpdateShown( *aPIt, w ); - break; - } - } -} - -//======================================================================= -// function : onValueChanged -// purpose : -//======================================================================= -void SMESHGUI_aParameterDlg::UpdateShown( const SMESHGUI_aParameterPtr param, QWidget* w ) -{ - SMESHGUI_dependParameter* depPar = dynamic_cast( param.get() ); - if( !depPar ) - depPar = dynamic_cast( param.get() ); - - if( !depPar ) - return; - - SMESHGUI_dependParameter::ShownMap& map = depPar->shownMap(); - if( map.isEmpty() ) - return; - - int val; - depPar->TakeValue( w ); - depPar->GetNewInt( val ); - bool hasValue = map.contains( val ); - - std::list::const_iterator anIt = mySpinList.begin(), - aLast = mySpinList.end(), - aLIt = myLabelList.begin(); - for( int i=0; anIt!=aLast; anIt++, aLIt++, i++ ) - { - bool shown = hasValue && map[ val ].contains( i ); - (*anIt)->setShown( shown ); - (*aLIt)->setShown( shown ); - } -} diff --git a/src/SMESHGUI/SMESHGUI_aParameterDlg.h b/src/SMESHGUI/SMESHGUI_aParameterDlg.h deleted file mode 100644 index 7fd28a96f..000000000 --- a/src/SMESHGUI/SMESHGUI_aParameterDlg.h +++ /dev/null @@ -1,82 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_aParameterDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef SMESHGUI_aParameterDlg_H -#define SMESHGUI_aParameterDlg_H - -// QT Includes -#include - -#include -#include "SMESHGUI_aParameter.h" - -class QLabel; -class QPushButton; -class SMESHGUI; -class QWidget; - -//================================================================================= -// class : SMESHGUI_aParameterDlg -// purpose : -//================================================================================= -class SMESHGUI_aParameterDlg : public QDialog -{ - Q_OBJECT - -public: - SMESHGUI_aParameterDlg( SMESHGUI*, - std::list params, - QString title = QString::null, - bool modal = TRUE); - - ~SMESHGUI_aParameterDlg(); - - /* Parameter function */ - static bool Parameters( SMESHGUI*, std::list params, const char *aTitle); - -protected: - void init(); - -protected slots: - virtual void onValueChanged(); - -private slots: - void ClickOnOk(); - void UpdateShown( const SMESHGUI_aParameterPtr, QWidget* ); - -private: - SMESHGUI* mySMESHGUI; - - QPushButton* myButtonOk; - QPushButton* myButtonCancel; - - std::list mySpinList, myLabelList; - std::list myParamList; -}; - -#endif // SMESHGUI_aParameterDlg.h diff --git a/src/SMESHGUI/SMESH_icons.po b/src/SMESHGUI/SMESH_icons.po deleted file mode 100644 index 60dff5a19..000000000 --- a/src/SMESHGUI/SMESH_icons.po +++ /dev/null @@ -1,222 +0,0 @@ -# This is a Qt message file in .po format. Each msgid starts with -# a scope. This scope should *NOT* be translated - eg. "Foo::Bar" -# would be translated to "Pub", not "Foo::Pub". -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2002-05-28 10:57:43 AM CEST\n" -"PO-Revision-Date: YYYY-MM-DD\n" -"Last-Translator: FULLNAME \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - - -#----------------------------------------------------------- -# Divers Mesh -#----------------------------------------------------------- - -#ObjectBrowser Icon -msgid "ICON_OBJBROWSER_SMESH" -msgstr "mesh.png" - -#Select Icon -msgid "ICON_SELECT" -msgstr "select1.png" - -#Mesh Init -msgid "ICON_DLG_INIT_MESH" -msgstr "mesh_init.png" - -# -msgid "ICON_DLG_ADD_SUBMESH" -msgstr "mesh_add_sub.png" - -#Move Node -msgid "ICON_DLG_MOVE_NODE" -msgstr "mesh_move_node.png" - -#Remove Node -msgid "ICON_DLG_REM_NODE" -msgstr "mesh_rem_node.png" - -#Remove Element -msgid "ICON_DLG_REM_ELEMENT" -msgstr "mesh_rem_element.png" - -#Orientation -msgid "ICON_DLG_MESH_ORIENTATION" -msgstr "mesh_orientation.png" - -# -msgid "ICON_DLG_MESH_DIAGONAL" -msgstr "mesh_diagonal.png" - -#Connectivity -msgid "ICON_DLG_CONNECTIVITY" -msgstr "mesh_connectivity.png" - -#Smoothing -msgid "ICON_DLG_SMOOTHING" -msgstr "mesh_smoothing.png" - -#Renumbering nodes -msgid "ICON_DLG_RENUMBERING_NODES" -msgstr "mesh_renumbering_nodes.png" - -#Renumbering elements -msgid "ICON_DLG_RENUMBERING_ELEMENTS" -msgstr "mesh_renumbering_elements.png" - -#Rotation -msgid "ICON_DLG_ROTATION" -msgstr "mesh_rotation.png" - -#Translation by vector -msgid "ICON_SMESH_TRANSLATION_VECTOR" -msgstr "mesh_translation_vector.png" - -#Translation by two points -msgid "ICON_SMESH_TRANSLATION_POINTS" -msgstr "mesh_translation_points.png" - -#Symmetry by point -msgid "ICON_SMESH_SYMMETRY_POINT" -msgstr "mesh_symmetry_point.png" - -#Symmetry by axis -msgid "ICON_SMESH_SYMMETRY_AXIS" -msgstr "mesh_symmetry_axis.png" - -#Symmetry by plane -msgid "ICON_SMESH_SYMMETRY_PLANE" -msgstr "mesh_symmetry_plane.png" - -#Sew free borders -msgid "ICON_SMESH_SEWING_FREEBORDERS" -msgstr "mesh_sew_freeborders.png" - -#Sew conform free borders -msgid "ICON_SMESH_SEWING_CONFORM_FREEBORDERS" -msgstr "mesh_sew_conform_freeborders.png" - -#Sew border to side -msgid "ICON_SMESH_SEWING_BORDERTOSIDE" -msgstr "mesh_sew_bordertoside.png" - -#Sew side elements -msgid "ICON_SMESH_SEWING_SIDEELEMENTS" -msgstr "mesh_sew_sideelements.png" - -#Merge nodes -msgid "ICON_SMESH_MERGE_NODES" -msgstr "mesh_merge_nodes.png" - -#----------------------------------------------------------- -# Hypothesis -#----------------------------------------------------------- - -#Set Algo -msgid "ICON_DLG_ADD_ALGORITHM" -msgstr "mesh_set_algo.png" - -#Set Hypo -msgid "ICON_DLG_ADD_HYPOTHESIS" -msgstr "mesh_set_hypo.png" - -#Edit Hypo. -msgid "ICON_DLG_EDIT_MESH" -msgstr "mesh_edit.png" - - -#----------------------------------------------------------- -# Elements -#----------------------------------------------------------- - -#Vertex -msgid "ICON_DLG_NODE" -msgstr "mesh_vertex.png" - -#Line -msgid "ICON_DLG_EDGE" -msgstr "mesh_line.png" - -#triangle -msgid "ICON_DLG_TRIANGLE" -msgstr "mesh_triangle.png" - -#Quadrangle -msgid "ICON_DLG_QUADRANGLE" -msgstr "mesh_quad.png" - -#triangle -msgid "ICON_DLG_TETRAS" -msgstr "mesh_tetra.png" - -#Quadrangle -msgid "ICON_DLG_HEXAS" -msgstr "mesh_hexa.png" - - -#----------------------------------------------------------- -# ObjectBrowser -#----------------------------------------------------------- - -#mesh_tree_mesh -msgid "ICON_SMESH_TREE_MESH" -msgstr "mesh_tree_mesh.png" - -#mesh_tree_group -msgid "ICON_SMESH_TREE_GROUP" -msgstr "mesh_tree_group.png" - -#mesh_tree_algo -msgid "ICON_SMESH_TREE_ALGO" -msgstr "mesh_tree_algo.png" - -#mesh_tree_hypo -msgid "ICON_SMESH_TREE_HYPO" -msgstr "mesh_tree_hypo.png" - -#mesh_tree_mesh_warn -msgid "ICON_SMESH_TREE_MESH_WARN" -msgstr "mesh_tree_mesh_warn.png" - -#mesh_tree_mesh -msgid "ICON_SMESH_TREE_MESH_IMPORTED" -msgstr "mesh_tree_importedmesh.png" - - -#----------------------------------------------------------- -# Group -#----------------------------------------------------------- - -msgid "ICON_EDIT_GROUP" -msgstr "mesh_edit_group.png" - -msgid "ICON_CONSTRUCT_GROUP" -msgstr "mesh_make_group.png" - -#----------------------------------------------------------- -# Mesh pattern -#----------------------------------------------------------- - -msgid "ICON_PATTERN_2d" -msgstr "mesh_algo_mefisto.png" - -msgid "ICON_PATTERN_3d" -msgstr "mesh_algo_hexa.png" - -msgid "ICON_PATTERN_SAMPLE_2D" -msgstr "pattern_sample_2d.png" - -msgid "ICON_PATTERN_SAMPLE_3D" -msgstr "pattern_sample_3D.png" - -#----------------------------------------------------------- -# Add/Remove buttons -#----------------------------------------------------------- - -msgid "ICON_APPEND" -msgstr "mesh_add.png" - -msgid "ICON_REMOVE" -msgstr "mesh_remove.png" \ No newline at end of file diff --git a/src/SMESHGUI/SMESH_images.po b/src/SMESHGUI/SMESH_images.po deleted file mode 100644 index 05cf07b87..000000000 --- a/src/SMESHGUI/SMESH_images.po +++ /dev/null @@ -1,338 +0,0 @@ -# This is a Qt message file in .po format. Each msgid starts with -# a scope. This scope should *NOT* be translated - eg. "Foo::Bar" -# would be translated to "Pub", not "Foo::Pub". -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2002-05-28 10:57:43 AM CEST\n" -"PO-Revision-Date: 2005-06-07 10:51+0400\n" -"Last-Translator: FULLNAME \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - - -#----------------------------------------------------------- -# Divers Mesh -#----------------------------------------------------------- - -#ObjectBrowser Icon -msgid "ICON_OBJBROWSER_SMESH" -msgstr "mesh.png" - -#Select Icon -msgid "ICON_SELECT" -msgstr "select1.png" - -#Mesh Init -msgid "ICON_DLG_INIT_MESH" -msgstr "mesh_init.png" - -# -msgid "ICON_DLG_ADD_SUBMESH" -msgstr "mesh_add_sub.png" - -#Move Node -msgid "ICON_DLG_MOVE_NODE" -msgstr "mesh_move_node.png" - -#Remove Node -msgid "ICON_DLG_REM_NODE" -msgstr "mesh_rem_node.png" - -#Remove Element -msgid "ICON_DLG_REM_ELEMENT" -msgstr "mesh_rem_element.png" - -#Orientation -msgid "ICON_DLG_MESH_ORIENTATION" -msgstr "mesh_orientation.png" - -# -msgid "ICON_DLG_MESH_DIAGONAL" -msgstr "mesh_diagonal.png" - -#Connectivity -msgid "ICON_DLG_CONNECTIVITY" -msgstr "mesh_connectivity.png" - -#Smoothing -msgid "ICON_DLG_SMOOTHING" -msgstr "mesh_smoothing.png" - -#Renumbering nodes -msgid "ICON_DLG_RENUMBERING_NODES" -msgstr "mesh_renumbering_nodes.png" - -#Renumbering elements -msgid "ICON_DLG_RENUMBERING_ELEMENTS" -msgstr "mesh_renumbering_elements.png" - -#Rotation -msgid "ICON_DLG_ROTATION" -msgstr "mesh_rotation.png" - -#Translation by vector -msgid "ICON_SMESH_TRANSLATION_VECTOR" -msgstr "mesh_translation_vector.png" - -#Translation by two points -msgid "ICON_SMESH_TRANSLATION_POINTS" -msgstr "mesh_translation_points.png" - -#Symmetry by point -msgid "ICON_SMESH_SYMMETRY_POINT" -msgstr "mesh_symmetry_point.png" - -#Symmetry by axis -msgid "ICON_SMESH_SYMMETRY_AXIS" -msgstr "mesh_symmetry_axis.png" - -#Symmetry by plane -msgid "ICON_SMESH_SYMMETRY_PLANE" -msgstr "mesh_symmetry_plane.png" - -#Sew free borders -msgid "ICON_SMESH_SEWING_FREEBORDERS" -msgstr "mesh_sew_freeborders.png" - -#Sew conform free borders -msgid "ICON_SMESH_SEWING_CONFORM_FREEBORDERS" -msgstr "mesh_sew_conform_freeborders.png" - -#Sew border to side -msgid "ICON_SMESH_SEWING_BORDERTOSIDE" -msgstr "mesh_sew_bordertoside.png" - -#Sew side elements -msgid "ICON_SMESH_SEWING_SIDEELEMENTS" -msgstr "mesh_sew_sideelements.png" - -#Merge nodes -msgid "ICON_SMESH_MERGE_NODES" -msgstr "mesh_merge_nodes.png" - -#Merge elements -msgid "ICON_DLG_MERGE_ELEMENTS" -msgstr "mesh_merge_elements.png" - -#----------------------------------------------------------- -# Hypothesis -#----------------------------------------------------------- - -msgid "ICON_HYPO" -msgstr "mesh_hypo_length.png" - -msgid "ICON_HYPO_EDIT" -msgstr "mesh_hypo_edit.png" - -#Set Algo -msgid "ICON_DLG_ADD_ALGORITHM" -msgstr "mesh_set_algo.png" - -#Set Hypo -msgid "ICON_DLG_ADD_HYPOTHESIS" -msgstr "mesh_set_hypo.png" - -#Edit Hypo. -msgid "ICON_DLG_EDIT_MESH" -msgstr "mesh_edit.png" - - -#----------------------------------------------------------- -# Elements -#----------------------------------------------------------- - -#Vertex -msgid "ICON_DLG_NODE" -msgstr "mesh_vertex.png" - -#Line -msgid "ICON_DLG_EDGE" -msgstr "mesh_line.png" - -#triangle -msgid "ICON_DLG_TRIANGLE" -msgstr "mesh_triangle.png" - -#Quadrangle -msgid "ICON_DLG_QUADRANGLE" -msgstr "mesh_quad.png" -#Polygone -msgid "ICON_DLG_POLYGON" -msgstr "mesh_polygon.png" -#triangle -msgid "ICON_DLG_TETRAS" -msgstr "mesh_tetra.png" - -#Quadrangle -msgid "ICON_DLG_HEXAS" -msgstr "mesh_hexa.png" - -#Polyhedre -msgid "ICON_DLG_POLYHEDRON" -msgstr "mesh_polyhedron.png" -#----------------------------------------------------------- -# ObjectBrowser -#----------------------------------------------------------- - -#mesh_tree_mesh -msgid "ICON_SMESH_TREE_MESH" -msgstr "mesh_tree_mesh.png" - -#mesh_tree_group -msgid "ICON_SMESH_TREE_GROUP" -msgstr "mesh_tree_group.png" - -#mesh_tree_algo -msgid "ICON_SMESH_TREE_ALGO" -msgstr "mesh_tree_algo.png" - -#mesh_tree_hypo -msgid "ICON_SMESH_TREE_HYPO" -msgstr "mesh_tree_hypo.png" - -#mesh_tree_mesh_warn -msgid "ICON_SMESH_TREE_MESH_WARN" -msgstr "mesh_tree_mesh_warn.png" - -#mesh_tree_mesh -msgid "ICON_SMESH_TREE_MESH_IMPORTED" -msgstr "mesh_tree_importedmesh.png" - - -#----------------------------------------------------------- -# Group -#----------------------------------------------------------- - -msgid "ICON_EDIT_GROUP" -msgstr "mesh_edit_group.png" - -msgid "ICON_CONSTRUCT_GROUP" -msgstr "mesh_make_group.png" - -#----------------------------------------------------------- -# Mesh pattern -#----------------------------------------------------------- - -msgid "ICON_PATTERN_2d" -msgstr "mesh_algo_mefisto.png" - -msgid "ICON_PATTERN_3d" -msgstr "mesh_algo_hexa.png" - -msgid "ICON_PATTERN_SAMPLE_2D" -msgstr "pattern_sample_2d.png" - -msgid "ICON_PATTERN_SAMPLE_3D" -msgstr "pattern_sample_3D.png" - -#----------------------------------------------------------- -# Add/Remove buttons -#----------------------------------------------------------- - -msgid "ICON_APPEND" -msgstr "mesh_add.png" - -msgid "ICON_REMOVE" -msgstr "mesh_remove.png" - -msgid "ICON_DELETE" -msgstr "delete.png" - -msgid "ICON_COMPUTE" -msgstr "mesh_compute.png" - -msgid "ICON_UNION" -msgstr "mesh_unionGroups.png" - -msgid "ICON_INTERSECT" -msgstr "mesh_intersectGroups.png" - -msgid "ICON_CUT" -msgstr "mesh_cutGroups.png" - -msgid "ICON_DEL_GROUP" -msgstr "mesh_deleteGroups.png" - -msgid "ICON_ADV_INFO" -msgstr "advanced_mesh_info.png" - -msgid "ICON_STD_INFO" -msgstr "standard_mesh_info.png" - -msgid "ICON_LENGTH" -msgstr "mesh_length.png" - -msgid "ICON_LENGTH_2D" -msgstr "mesh_length_2d.png" - -msgid "ICON_AREA" -msgstr "mesh_area.png" - -msgid "ICON_TAPER" -msgstr "mesh_taper.png" - -msgid "ICON_FREE_EDGE" -msgstr "mesh_free_edges.png" - -msgid "ICON_FREE_EDGE_2D" -msgstr "mesh_free_edges_2d.png" - -msgid "ICON_CONNECTION" -msgstr "mesh_multi_edges.png" - -msgid "ICON_CONNECTION_2D" -msgstr "mesh_multi_edges_2d.png" - -msgid "ICON_WIRE" -msgstr "mesh_wireframe.png" - -msgid "ICON_SHADE" -msgstr "mesh_shading.png" - -msgid "ICON_SHRINK" -msgstr "mesh_shrink.png" - -msgid "ICON_POINTS" -msgstr "mesh_points.png" - -msgid "ICON_ASPECT" -msgstr "mesh_aspect.png" - -msgid "ICON_ASPECT_3D" -msgstr "mesh_aspect_3d.png" - -msgid "ICON_ANGLE" -msgstr "mesh_angle.png" - -msgid "ICON_WARP" -msgstr "mesh_wrap.png" - -msgid "ICON_SKEW" -msgstr "mesh_skew.png" - -msgid "ICON_UPDATE" -msgstr "mesh_update.png" - -msgid "ICON_UNIONTRI" -msgstr "mesh_uniontri.png" - -msgid "ICON_UNION2TRI" -msgstr "mesh_union2tri.png" - -msgid "ICON_CUTQUAD" -msgstr "mesh_cutquad.png" - -msgid "ICON_EXTRUSION" -msgstr "mesh_extrusion.png" - -msgid "ICON_EXTRUSION_ALONG" -msgstr "mesh_extrusionpath.png" - -msgid "ICON_REVOLUTION" -msgstr "mesh_revolution.png" - -msgid "ICON_MAP" -msgstr "mesh_pattern.png" - -msgid "ICON_FILE_OPEN" -msgstr "open.png" diff --git a/src/SMESHGUI/SMESH_msg_en.po b/src/SMESHGUI/SMESH_msg_en.po deleted file mode 100644 index 7f5fc68d8..000000000 --- a/src/SMESHGUI/SMESH_msg_en.po +++ /dev/null @@ -1,2908 +0,0 @@ -# This is a Qt message file in .po format. Each msgid starts with -# a scope. This scope should *NOT* be translated - eg. "Foo::Bar" -# would be translated to "Pub", not "Foo::Pub". -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2002-05-28 10: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" - -#------------------------------------------------------------------------- -# BUTTON -#------------------------------------------------------------------------- - -#Apply -msgid "SMESH_BUT_APPLY" -msgstr "&Apply" - -#Close -msgid "SMESH_BUT_CLOSE" -msgstr "&Close" - -#Ok -msgid "SMESH_BUT_OK" -msgstr "&Ok" - -#Yes -msgid "SMESH_BUT_YES" -msgstr "&Yes" - -#No -msgid "SMESH_BUT_NO" -msgstr "&No" - -#Cancel -msgid "SMESH_BUT_CANCEL" -msgstr "&Cancel" - -#Add -msgid "SMESH_BUT_ADD" -msgstr "A&dd" - -#Remove -msgid "SMESH_BUT_REMOVE" -msgstr "&Remove" - -#Set Filters -msgid "SMESH_BUT_FILTER" -msgstr "Set &Filters" - -#Sort -msgid "SMESH_BUT_SORT" -msgstr "&Sort List" - -#Create -msgid "SMESH_BUT_CREATE" -msgstr "Create" - -#New -msgid "SMESH_BUT_NEW" -msgstr "New" - -#Delete -msgid "SMESH_BUT_DELETE" -msgstr "Delete" - - -#------------------------------------------------------------------------- -# WARNING -#------------------------------------------------------------------------- - -#Error -msgid "SMESH_ERROR" -msgstr "Error" - -#Warning -msgid "SMESH_WRN_WARNING" -msgstr "Warning" - -msgid "SMESH_WARNING" -msgstr "Warning" - -#Error -msgid "SMESH_OPERATION_FAILED" -msgstr "Operation failed" - -#: SMESHGUI.cxx:465 -msgid "SMESH_REALLY_DELETE" -msgstr "Do you really want to delete object(s) ?" - -#Hypothesis or Algorithm not exists -msgid "SMESH_WRN_HYPOTHESIS_NOTEXIST" -msgstr "Hypothesis or Algorithm not exists" - -#Hypothesis already exists -msgid "SMESH_WRN_HYPOTHESIS_ALREADYEXIST" -msgstr "Hypothesis already exists" - -#Algorithm already exists -msgid "SMESH_WRN_ALGORITHM_ALREADYEXIST" -msgstr "Algorithm already exists" - -#Missing parameters -msgid "SMESH_WRN_MISSING_PARAMETERS" -msgstr "Missing parameters" - -#Compute failed -msgid "SMESH_WRN_COMPUTE_FAILED" -msgstr "Mesh computation failed" - -#Study frame with VTK Viewer must be activated -msgid "SMESH_WRN_VIEWER_VTK" -msgstr "Study frame with VTK Viewer must be activated" - -#Activate Elements Selection Mode -msgid "SMESH_WRN_SELECTIONMODE_ELEMENTS" -msgstr "Activate Elements Selection Mode" - -#Activate Nodes Selection Mode -msgid "SMESH_WRN_SELECTIONMODE_NODES" -msgstr "Activate Nodes Selection Mode" - -#Activate Link Selection Mode -msgid "SMESH_WRN_SELECTIONMODE_DIAGONAL" -msgstr "Activate Link Selection Mode" - -#Empty name -msgid "SMESH_WRN_EMPTY_NAME" -msgstr "Empty name is not valid" - -#------------------------------------------------------------------------- -# MEN -#------------------------------------------------------------------------- - -#SMESH -msgid "SMESH_MEN_COMPONENT" -msgstr "SMESH" - -#SubMeshes On Vertex -msgid "SMESH_MEN_SubMeshesOnVertex" -msgstr "SubMeshes On Vertex" - -#SubMeshes On Edge -msgid "SMESH_MEN_SubMeshesOnEdge" -msgstr "SubMeshes On Edge" - -#SubMeshes On Face -msgid "SMESH_MEN_SubMeshesOnFace" -msgstr "SubMeshes On Face" - -#SubMeshes On Solid -msgid "SMESH_MEN_SubMeshesOnSolid" -msgstr "SubMeshes On Solid" - -#SubMeshes On Compound -msgid "SMESH_MEN_SubMeshesOnCompound" -msgstr "SubMeshes On Compound" - -#Applied Algorithm -msgid "SMESH_MEN_APPLIED_ALGORIHTMS" -msgstr "Applied Algorithms" - -#Applied Hypothesis -msgid "SMESH_MEN_APPLIED_HYPOTHESIS" -msgstr "Applied Hypotheses" - -#Hypothesis Definition -msgid "SMESH_MEN_HYPOTHESIS" -msgstr "Hypotheses" - -#Algorithms Definition -msgid "SMESH_MEN_ALGORITHMS" -msgstr "Algorithms" - - -#------------------------------------------------------------------------- -# DIVERS -#------------------------------------------------------------------------- - -#Arguments -msgid "SMESH_ARGUMENTS" -msgstr "Arguments" - -#Value -msgid "SMESH_VALUE" -msgstr "Value" - -#%1_objects -msgid "SMESH_OBJECTS_SELECTED" -msgstr "%1_objects" - -#Name -msgid "SMESH_NAME" -msgstr "Name" - -#Geometrical Object -msgid "SMESH_OBJECT_GEOM" -msgstr "Geometrical Object" - -#Length -msgid "SMESH_LENGTH" -msgstr "Length" - -#Coordinates -msgid "SMESH_COORDINATES" -msgstr "Coordinates" - -#X -msgid "SMESH_X" -msgstr "X" - -#Y -msgid "SMESH_Y" -msgstr "Y" - -#Z -msgid "SMESH_Z" -msgstr "Z" - -#dX -msgid "SMESH_DX" -msgstr "dX" - -#dY -msgid "SMESH_DY" -msgstr "dY" - -#dZ -msgid "SMESH_DZ" -msgstr "dZ" - -msgid "SMESH_POINT" -msgstr "Point" - -msgid "SMESH_POINT_1" -msgstr "Point 1" - -msgid "SMESH_POINT_2" -msgstr "Point 2" - -msgid "SMESH_VECTOR" -msgstr "Vector" - -#Axis -msgid "SMESH_AXIS" -msgstr "Axis" - -#Plane -msgid "SMESH_PLANE" -msgstr "Plane" - -#Normal -msgid "SMESH_NORMAL" -msgstr "Normal" - -#Parameters -msgid "SMESH_PARAMETERS" -msgstr "Parameters" - -#Distance -msgid "SMESH_DISTANCE" -msgstr "Distance" - - -#------------------------------------------------------------------------- -# DLG -#------------------------------------------------------------------------- - -# -------------- Init -------------- - -#Mesh -msgid "SMESH_INIT" -msgstr "Mesh" - -#Mesh or SubMesh -msgid "SMESH_OBJECT_MESHorSUBMESH" -msgstr "Mesh or SubMesh" - -#Mesh Construction -msgid "SMESH_INIT_MESH" -msgstr "Mesh Construction" - -#SubMesh Construction -msgid "SMESH_ADD_SUBMESH" -msgstr "SubMesh Construction" - -#Mesh -msgid "SMESH_OBJECT_MESH" -msgstr "Mesh" - -#SubMesh -msgid "SMESH_SUBMESH" -msgstr "SubMesh" - - -# -------------- Hypothesis / Algorithm -------------- - -#Meshers file -msgid "MESHERS_FILE_NO_VARIABLE" -msgstr "Environment variable SMESH_MeshersList is not defined" - -#Meshers file -msgid "MESHERS_FILE_CANT_OPEN" -msgstr "Can not open resource file" - -#Meshers file -msgid "MESHERS_FILE_CHECK_VARIABLE" -msgstr "Check environment variable SMESH_MeshersList" - -#Hypothesis -msgid "SMESH_ADD_HYPOTHESIS" -msgstr "Hypothesis" - -#Hypothesis Construction -msgid "SMESH_ADD_HYPOTHESIS_TITLE" -msgstr "Hypothesis Assignation" - -#Hypothesis -msgid "SMESH_OBJECT_HYPOTHESIS" -msgstr "Hypothesis" - -#Algorithms -msgid "SMESH_ADD_ALGORITHM" -msgstr "Algorithms" - -#Algorithms Construction -msgid "SMESH_ADD_ALGORITHM_TITLE" -msgstr "Algorithms Assignation" - -#Algorithm -msgid "SMESH_OBJECT_ALGORITHM" -msgstr "Algorithm" - - -# -------------- Nodes / Segments / Elements -------------- - -#Node -msgid "MESH_NODE" -msgstr "Node" - -#Node Construction -msgid "MESH_NODE_TITLE" -msgstr "Add Node" - -#Segments -msgid "SMESH_SEGMENTS" -msgstr "Segments" - -#Elements -msgid "SMESH_ELEMENTS" -msgstr "Elements" - -#Id Elements -msgid "SMESH_ID_ELEMENTS" -msgstr "Id Elements" - -#Remove -msgid "SMESH_REMOVE" -msgstr "Remove" - -#Remove Elements -msgid "SMESH_REMOVE_ELEMENTS_TITLE" -msgstr "Remove Elements" - -#Id Nodes -msgid "SMESH_ID_NODES" -msgstr "Id Nodes" - -#Nodes -msgid "SMESH_NODES" -msgstr "Nodes" - -#Id Faces -msgid "SMESH_ID_FACES" -msgstr "Id Faces" - -#Remove Nodes -msgid "SMESH_REMOVE_NODES_TITLE" -msgstr "Remove Nodes" - -#Move -msgid "SMESH_MOVE" -msgstr "Move" - -#Move Node -msgid "SMESH_MOVE_NODES_TITLE" -msgstr "Move Node" - -#Add Triangle -msgid "SMESH_ADD_TRIANGLE_TITLE" -msgstr "Add Triangle" - -#Add Quadrangle -msgid "SMESH_ADD_QUADRANGLE_TITLE" -msgstr "Add Quadrangle" - -#Add Edge -msgid "SMESH_ADD_EDGE_TITLE" -msgstr "Add Edge" - -#Add Tetrahedron -msgid "SMESH_ADD_TETRAS_TITLE" -msgstr "Add Tetrahedron" - -#Add Hexahedron -msgid "SMESH_ADD_HEXAS_TITLE" -msgstr "Add Hexahedron" - -#Reverse -msgid "SMESH_REVERSE" -msgstr "Reverse" - -#Triangle -msgid "SMESH_TRIANGLE" -msgstr "Triangle" - -#Quadrangle -msgid "SMESH_QUADRANGLE" -msgstr "Quadrangle" - -#Edge -msgid "SMESH_EDGE" -msgstr "Edge" - -#Tetrahedron -msgid "SMESH_TETRAS" -msgstr "Tetrahedron" - -#Hexahedron -msgid "SMESH_HEXAS" -msgstr "Hexahedron" - -#Add Triangle -msgid "SMESH_ADD_TRIANGLE" -msgstr "Add Triangle" - -#Add Quadrangle -msgid "SMESH_ADD_QUADRANGLE" -msgstr "Add Quadrangle" - -#Add Edge -msgid "SMESH_ADD_EDGE" -msgstr "Add Edge" - -#Add Tetrahedron -msgid "SMESH_ADD_TETRAS" -msgstr "Add Tetrahedron" - -#Add Hexahedron -msgid "SMESH_ADD_HEXAS" -msgstr "Add Hexahedron" - - -#Angle -msgid "SMESH_ANGLE" -msgstr "Angle" - -#Tolerance -msgid "SMESH_TOLERANCE" -msgstr "Tolerance" - -# -------------- Transparency -------------- - -#Opacity -msgid "SMESH_TRANSPARENCY_OPAQUE" -msgstr "---> Opaque" - -#Transparency -msgid "SMESH_TRANSPARENCY_TITLE" -msgstr "Change Transparency" - -#Fully Transparency -msgid "SMESH_TRANSPARENCY_TRANSPARENT" -msgstr "Transparent <---" - - -# -------------- Clipping -------------- - -#Transparency -msgid "SMESH_CLIPPING_TITLE" -msgstr "Change Clipping" - -#Front -msgid "SMESH_CLIPPING_FROM" -msgstr "From <---" - -#Back -msgid "SMESH_CLIPPING_INTO" -msgstr "---> Into" - - -# -------------- Preferences ----------- - -#Scalar Bar Preferences -msgid "SMESH_PROPERTIES_SCALARBAR" -msgstr "Scalar Bar Properties" - -#Scalar Bar Properties -msgid "SMESH_PREFERENCES_SCALARBAR" -msgstr "Scalar Bar Preferences" - -#Scalar Bar Range -msgid "SMESH_RANGE_SCALARBAR" -msgstr "Scalar Range" - -#Scalar Bar Range Min Value -msgid "SMESH_RANGE_MIN" -msgstr "Min value:" - -#Scalar Bar Range Max Value -msgid "SMESH_RANGE_MAX" -msgstr "Max value:" - -#Scalar Bar Font -msgid "SMESH_FONT_SCALARBAR" -msgstr "Font" - -#Arial -msgid "SMESH_FONT_ARIAL" -msgstr "Arial" - -#Courier -msgid "SMESH_FONT_COURIER" -msgstr "Courier" - -#Times -msgid "SMESH_FONT_TIMES" -msgstr "Times" - -#Bold -msgid "SMESH_FONT_BOLD" -msgstr "Bold" - -#Italic -msgid "SMESH_FONT_ITALIC" -msgstr "Italic" - -#Shadow -msgid "SMESH_FONT_SHADOW" -msgstr "Shadow" - -#Title -msgid "SMESH_TITLE" -msgstr "Title:" - -#Labels -msgid "SMESH_LABELS" -msgstr "Labels:" - -#Colors & Labels -msgid "SMESH_LABELS_COLORS_SCALARBAR" -msgstr "Colors && Labels" - -#Number Of Colors -msgid "SMESH_NUMBEROFCOLORS" -msgstr "Nb of colors:" - -#Number Of Labels -msgid "SMESH_NUMBEROFLABELS" -msgstr "Nb of labels:" - -#Number Of Steps -msgid "SMESH_NUMBEROFSTEPS" -msgstr "Number of steps:" - -#Orientation -msgid "SMESH_ORIENTATION" -msgstr "Orientation" - -#Vertical -msgid "SMESH_VERTICAL" -msgstr "Vertical" - -#Horizontal -msgid "SMESH_HORIZONTAL" -msgstr "Horizontal" - -#Position & Size -msgid "SMESH_POSITION_SIZE_SCALARBAR" -msgstr "Origin && Size" - -#X -msgid "SMESH_X_SCALARBAR" -msgstr "X:" - -#Y -msgid "SMESH_Y_SCALARBAR" -msgstr "Y:" - -#Width -msgid "SMESH_WIDTH" -msgstr "Width:" - -#Height -msgid "SMESH_HEIGHT" -msgstr "Height:" - -# -------------- ScalarBar -------------- - -#Max -msgid "SMESH_MAX" -msgstr "Max" - -#Min -msgid "SMESH_MIN" -msgstr "Min" - -#ScalarBar -msgid "SMESH_SCALARBAR" -msgstr "Scalar Bar" - -#Update View -msgid "SMESH_UPDATEVIEW" -msgstr "Update View" - - -# -------------- Connectivity -------------- - -#Boundary Edges -msgid "SMESH_BOUNDARYEDGES" -msgstr "Boundary Edges" - -#Feature Edges -msgid "SMESH_FEATUREEDGES" -msgstr "Feature Edges" - -#Manifold Edges -msgid "SMESH_MANIFOLDEDGES" -msgstr "Manifold Edges" - -#Non Manifold Edges -msgid "SMESH_NONMANIFOLDEDGES" -msgstr "Non Manifold Edges" - -#Edges Connectivity -msgid "SMESH_EDGES_CONNECTIVITY_TITLE" -msgstr "Edges Connectivity" - -#Mesh -msgid "SMESH_MESH" -msgstr "Mesh" - -#Feature Angle -msgid "SMESH_FEATUREANGLE" -msgstr "Feature Angle" - -# -------------- Operations -------------- - -#Change Orientation -msgid "SMESH_ORIENTATION_ELEMENTS_TITLE" -msgstr "Change Orientation" - -#Id Diagonal -msgid "SMESH_ID_DIAGONAL" -msgstr "Id Edges" - -#Diagonal Inversion -msgid "SMESH_DIAGONAL" -msgstr "Diagonal Inversion" - -#Diagonal Inversion -msgid "SMESH_DIAGONAL_INVERSION_TITLE" -msgstr "Diagonal Inversion" - -#Select whole mesh or submesh -msgid "SMESH_SELECT_WHOLE_MESH" -msgstr "Select whole mesh, submesh or group" - -#Smoothing -msgid "SMESH_SMOOTHING" -msgstr "Smoothing" - -#Renumberig -msgid "SMESH_RENUMBERING" -msgstr "Renumbering" - -#Renumberig nodes -msgid "SMESH_RENUMBERING_NODES_TITLE" -msgstr "Renumbering nodes" - -#Renumberig elements -msgid "SMESH_RENUMBERING_ELEMENTS_TITLE" -msgstr "Renumbering elements" - -#Rotation about an axis -msgid "SMESH_ROTATION_TITLE" -msgstr "Rotation about an axis" - -#Translation -msgid "SMESH_TRANSLATION" -msgstr "Translation" - -#Symmetry -msgid "SMESH_SYMMETRY" -msgstr "Symmetry" - -#Sewing -msgid "SMESH_SEWING" -msgstr "Sewing" - -#Merge nodes -msgid "SMESH_MERGE_NODES" -msgstr "Merge nodes" - -#Merge elements -msgid "SMESH_MERGE_ELEMENTS_TITLE" -msgstr "Merge elements" - -#Extrusion -msgid "SMESH_EXTRUSION" -msgstr "Extrusion" - -#Revolution -msgid "SMESH_REVOLUTION" -msgstr "Revolution" - -#Create a copy -msgid "SMESH_CREATE_COPY" -msgstr "Create a copy" - -#Rotation -msgid "SMESH_ROTATION" -msgstr "Rotation" - -# -------------- Mesh Infos -------------- - -#Mesh Infos -msgid "SMESH_MESHINFO_TITLE" -msgstr "Mesh Infos" - -#Standard Mesh Infos -msgid "SMESH_STANDARD_MESHINFO_TITLE" -msgstr "Standard Mesh Infos" - -#Mesh Infos -msgid "SMESH_MESHINFO_NAME" -msgstr "Name" - -#Faces : -msgid "SMESH_MESHINFO_ELEMENTS" -msgstr "Elements" - -#Edges : -msgid "SMESH_MESHINFO_EDGES" -msgstr "Edges" - -#Nodes : -msgid "SMESH_MESHINFO_NODES" -msgstr "Nodes" - -#Faces : -msgid "SMESH_MESHINFO_FACES" -msgstr "Faces" - -#Total : -msgid "SMESH_MESHINFO_TOTAL" -msgstr "Total" - -#Triangles : -msgid "SMESH_MESHINFO_TRIANGLES" -msgstr "Triangles" - -#Quadrangles : -msgid "SMESH_MESHINFO_QUADRANGLES" -msgstr "Quadrangles" - -#Volumes : -msgid "SMESH_MESHINFO_VOLUMES" -msgstr "Volumes" - -#Tetrahedrons : -msgid "SMESH_MESHINFO_TETRAS" -msgstr "Tetrahedrons" - -#Hexahedrons : -msgid "SMESH_MESHINFO_HEXAS" -msgstr "Hexahedrons" - -#Pyramids : -msgid "SMESH_MESHINFO_PYRAS" -msgstr "Pyramids" - -#Prisms : -msgid "SMESH_MESHINFO_PRISMS" -msgstr "Prisms" - -#Type : -msgid "SMESH_MESHINFO_TYPE" -msgstr "Type" - -#Entities : -msgid "SMESH_MESHINFO_ENTITIES" -msgstr "Entities" - -#All types : -msgid "SMESH_MESHINFO_ALL_TYPES" -msgstr "Heterogenous" - -#Polygons -msgid "SMESH_MESHINFO_POLYGONES" -msgstr "Polygons" - -#polyhedrons -msgid "SMESH_MESHINFO_POLYEDRES" -msgstr "Polyhedrons" - -#No valid selection : -msgid "SMESH_BAD_SELECTION" -msgstr "No valid selection" - -#Information : -msgid "SMESH_INFORMATION" -msgstr "Information" - -# --------- Create hypotheses/algorithms --------- - -msgid "SMESH_CREATE_HYPOTHESES" -msgstr "Create hypotheses" - -msgid "SMESH_CREATE_ALGORITHMS" -msgstr "Create algorithms" - -msgid "SMESH_AVAILABLE_ALGORITHMS" -msgstr "Available algorithms" - -msgid "SMESH_AVAILABLE_HYPOTHESES" -msgstr "Available hypotheses" - -# -------------- Edit -------------- - -#Hypotheses Assignation -msgid "SMESH_EDIT_HYPOTHESES" -msgstr "Hypotheses Assignation" - -#Hypotheses -msgid "SMESH_HYPOTHESES" -msgstr "Hypotheses" - -#Available -msgid "SMESH_AVAILABLE" -msgstr "Available" - -#Used -msgid "SMESH_EDIT_USED" -msgstr "Used" - -# -------------- Group -------------- - -#Create Group -msgid "SMESH_CREATE_GROUP_TITLE" -msgstr "Create Group" - -#Edit Group -msgid "SMESH_EDIT_GROUP_TITLE" -msgstr "Edit Group" - -#Elements Type -msgid "SMESH_ELEMENTS_TYPE" -msgstr "Elements Type" - -#Face -msgid "SMESH_FACE" -msgstr "Face" - -#Volume -msgid "SMESH_VOLUME" -msgstr "Volume" - -#Content -msgid "SMESH_CONTENT" -msgstr "Content" - -#Select from -msgid "SMESH_SELECT_FROM" -msgstr "Select From" - -#Group -msgid "SMESH_GROUP" -msgstr "Group" - -#Group type -msgid "SMESH_GROUP_TYPE" -msgstr "Group type" - -#Group type: standalone -msgid "SMESH_GROUP_STANDALONE" -msgstr "Standalone group" - -#Group type: geometry -msgid "SMESH_GROUP_GEOMETRY" -msgstr "Group on geometry" - -#Geometry group -msgid "SMESH_GEOM_GROUP" -msgstr "Geometry group" - -#%1 SubMeshes -msgid "SMESH_SUBMESH_SELECTED" -msgstr "%1 SubMeshes" - -#%1 Groups -msgid "SMESH_GROUP_SELECTED" -msgstr "%1 Groups" - - -# -------------- Preferences - Selection -------------- -msgid "SMESH_PREF_SELECTION" -msgstr "Preferences - Selection" - -msgid "SMESH_SELECTION" -msgstr "Selection" - -msgid "SMESH_PRESELECTION" -msgstr "Preselection" - -msgid "SMESH_HILIGHT_COLOR" -msgstr "Highlight Color" - -msgid "SMESH_ELEMENTS_COLOR" -msgstr "Mesh Element Color" - -msgid "SMESH_PRECISION" -msgstr "Precision" - -msgid "SMESH_OUTLINE_COLOR" -msgstr "Mesh Object Color" - -# -------------- SMESHGUI_FilterTable -------------- - -msgid "SMESHGUI_FilterTable::FILTER" -msgstr "Filter" - -msgid "SMESHGUI_FilterTable::ADD" -msgstr "Add" - -msgid "SMESHGUI_FilterTable::CLEAR" -msgstr "Clear" - -msgid "SMESHGUI_FilterTable::REMOVE" -msgstr "Remove" - -msgid "SMESHGUI_FilterTable::INSERT" -msgstr "Insert" - -msgid "SMESHGUI_FilterTable::ADD_TO" -msgstr "Add to..." - -msgid "SMESHGUI_FilterTable::COPY_FROM" -msgstr "Copy from..." - -msgid "SMESHGUI_FilterTable::ADDITIONAL_PARAMETERS" -msgstr "Additional parameters" - -msgid "SMESHGUI_FilterTable::CRITERION" -msgstr "Criterion" - -msgid "SMESHGUI_FilterTable::COMPARE" -msgstr "Compare" - -msgid "SMESHGUI_FilterTable::THRESHOLD_VALUE" -msgstr "Threshold value" - -msgid "SMESHGUI_FilterTable::UNARY" -msgstr "Unary" - -msgid "SMESHGUI_FilterTable::BINARY" -msgstr "Binary" - -msgid "SMESHGUI_FilterTable::FREE_EDGES" -msgstr "Free edges" - -msgid "SMESHGUI_FilterTable::FREE_BORDERS" -msgstr "Free borders" - -msgid "SMESHGUI_FilterTable::MULTI_BORDERS" -msgstr "Borders at multi-connections" - -#msgid "SMESHGUI_FilterTable::MULTI2D_BORDERS" -#msgstr "Borders at multi-connections 2D" - -msgid "SMESHGUI_FilterTable::LENGTH" -msgstr "Length" - -#msgid "SMESHGUI_FilterTable::LENGTH2D" -#msgstr "Length2D" - -msgid "SMESHGUI_FilterTable::ASPECT_RATIO" -msgstr "Aspect ratio" - -msgid "SMESHGUI_FilterTable::ASPECT_RATIO_3D" -msgstr "Aspect ratio 3D" - -msgid "SMESHGUI_FilterTable::WARPING" -msgstr "Warping" - -msgid "SMESHGUI_FilterTable::MINIMUM_ANGLE" -msgstr "Minimum angle" - -msgid "SMESHGUI_FilterTable::TAPER" -msgstr "Taper" - -msgid "SMESHGUI_FilterTable::SKEW" -msgstr "Skew" - -msgid "SMESHGUI_FilterTable::AREA" -msgstr "Area" - -msgid "SMESHGUI_FilterTable::BAD_ORIENTED_VOLUME" -msgstr "Bad oriented volume" - -msgid "SMESHGUI_FilterTable::LESS_THAN" -msgstr "Less than" - -msgid "SMESHGUI_FilterTable::MORE_THAN" -msgstr "More than" - -msgid "SMESHGUI_FilterTable::EQUAL_TO" -msgstr "Equal to" - -msgid "SMESHGUI_FilterTable::NOT" -msgstr "Not" - -msgid "SMESHGUI_FilterTable::AND" -msgstr "And" - -msgid "SMESHGUI_FilterTable::OR" -msgstr "Or" - -msgid "SMESHGUI_FilterTable::ERROR" -msgstr "Threshold value is not correctly specified\nPlease enter correct value and try again" - -msgid "SMESHGUI_INVALID_PARAMETERS" -msgstr "Parameters are not correctly specified\nPlease enter correct values and try again" - -msgid "SMESHGUI_FilterTable::MULTIEDGES_ERROR" -msgstr "Threshold value of borders at multi-connections can not be equal 1\nPlease enter correct value and try again" - -msgid "SMESHGUI_FilterTable::ENTITY_TYPE" -msgstr "Entity type" - -msgid "SMESHGUI_FilterTable::FACES" -msgstr "Faces" - -msgid "SMESHGUI_FilterTable::EDGES" -msgstr "Edges" - -msgid "SMESHGUI_FilterTable::NODES" -msgstr "Nodes" - -msgid "SMESHGUI_FilterTable::VOLUMES" -msgstr "Volumes" - -msgid "SMESHGUI_FilterTable::ID" -msgstr "ID" - -msgid "SMESHGUI_FilterTable::RANGE_OF_IDS" -msgstr "Range of IDs" - -msgid "SMESHGUI_FilterTable::BELONG_TO_GEOM" -msgstr "Belong to Geom" - -msgid "SMESHGUI_FilterTable::BELONG_TO_PLANE" -msgstr "Belong to Plane" - -msgid "SMESHGUI_FilterTable::BELONG_TO_CYLINDER" -msgstr "Belong to Cylinder" - -msgid "SMESHGUI_FilterTable::LYING_ON_GEOM" -msgstr "Lying on Geom" - -# -------------- SMESHGUI_FilterDlg -------------- -msgid "SMESHGUI_FilterDlg::TLT" -msgstr "Selection filter" - -msgid "SMESHGUI_FilterDlg::FACES_TLT" -msgstr "Filter for Faces" - -msgid "SMESHGUI_FilterDlg::EDGES_TLT" -msgstr "Filter for Edges" - -msgid "SMESHGUI_FilterDlg::NODES_TLT" -msgstr "Filter for Nodes" - -msgid "SMESHGUI_FilterDlg::VOLUMES_TLT" -msgstr "Filter for Volumes" - -msgid "SMESHGUI_FilterDlg::SOURCE" -msgstr "Source" - -msgid "SMESHGUI_FilterDlg::MESH" -msgstr "Mesh" - -msgid "SMESHGUI_FilterDlg::SELECTION" -msgstr "Initial Selection" - -msgid "SMESHGUI_FilterDlg::CURRENT_GROUP" -msgstr "Current Group" - -msgid "SMESHGUI_FilterDlg::SET_IN_VIEWER" -msgstr "Insert filter in viewer" - -msgid "SMESHGUI_FilterDlg::BAD_SHAPE_NAME" -msgstr "There is no \"%1\" geometrical object in the current study\nPlease select valid object and try again" - -msgid "SMESHGUI_FilterDlg::SHAPE_IS_NOT_A_FACE" -msgstr "\"%1\" is not a face\nPlease select a face and try again" - -msgid "SMESHGUI_FilterDlg::SHAPE_IS_NOT_A_PLANE" -msgstr "\"%1\" is not a plane\nPlease select a plane and try again" - -msgid "SMESHGUI_FilterDlg::SHAPE_IS_NOT_A_CYLINDER" -msgstr "\"%1\" is not a cylinderical face\nPlease select a cylindrical face and try again" - -# -------------- SMESHGUI -------------- -msgid "MESH_IS_NOT_SELECTED" -msgstr "There is no selected mesh\nPlease, select a mesh and try again" - -msgid "SMESHGUI::NOT_A_VTK_VIEWER" -msgstr "This command is available in VTK viewer only\nPlease, create VTK viewer and try again" - -msgid "LENGTH_EDGES" -msgstr "Length" - -msgid "LENGTH2D_EDGES" -msgstr "Length 2D" - -msgid "FREE_BORDERS" -msgstr "Free Borders" - -msgid "MULTI_BORDERS" -msgstr "Borders at Multi-Connections" - -msgid "MULTI2D_BORDERS" -msgstr "Borders at Multi-Connections 2D" - -msgid "AREA_ELEMENTS" -msgstr "Area" - -msgid "TAPER_ELEMENTS" -msgstr "Taper" - -msgid "ASPECTRATIO_ELEMENTS" -msgstr "Aspect Ratio" - -msgid "ASPECTRATIO_3D_ELEMENTS" -msgstr "Aspect Ratio 3D" - -msgid "MINIMUMANGLE_ELEMENTS" -msgstr "Minimum Angle" - -msgid "WARP_ELEMENTS" -msgstr "Warping" - -msgid "SKEW_ELEMENTS" -msgstr "Skew" - -msgid "SMESH_INSUFFICIENT_DATA" -msgstr "Insufficient input value" - -msgid "SMESH_CANT_ADD_HYP" -msgstr "Can not assign \"%1\":\n" - -msgid "SMESH_ADD_HYP_WRN" -msgstr "\"%1\" assigned but:\n" - -msgid "SMESH_CANT_RM_HYP" -msgstr "Can not unassign \"%1\":\n" - -msgid "SMESH_RM_HYP_WRN" -msgstr "\"%1\" unassigned but:\n" - -msgid "SMESH_HYP_1" -msgstr "Algorithm misses a hypothesis" - -msgid "SMESH_HYP_2" -msgstr "There are concurrent hypotheses on a shape" - -msgid "SMESH_HYP_3" -msgstr "Hypothesis has a bad parameter value" - -msgid "SMESH_HYP_4" -msgstr "Unknown fatal error at hypothesis definition" - -msgid "SMESH_HYP_5" -msgstr "Hypothesis is not suitable in the current context" - -msgid "SMESH_HYP_6" -msgstr "Non-conform mesh is produced using applied hypotheses" - -msgid "SMESH_HYP_7" -msgstr "Such dimention hypothesis is already assigned to the shape" - -msgid "SMESH_HYP_8" -msgstr "Hypothesis and submesh dimensions mismatch" - -msgid "SMESH_DRS_1" -msgstr "MED file contains no mesh with the given name" - -msgid "SMESH_DRS_2" -msgstr "" -"MED file has overlapped ranges of element numbers,\n" -" the numbers from the file are ignored" - -msgid "SMESH_DRS_3" -msgstr "Some elements were skipped due to incorrect file data" - -msgid "SMESH_DRS_4" -msgstr " The file is incorrect,\n" - "some information will be missed" - -msgid "SMESH_DRS_EMPTY" -msgstr " The file is empty,\n" - "there is nothing to be published" - -msgid "SMESH_EXPORT_UNV" -msgstr "During export mesh with name - \"%1\" to UNV\n" - " pyramid's elements will be missed" - -msgid "SMESH_EXPORT_MED_V2_1" -msgstr "During export mesh with name - \"%1\" to MED 2.1\n" - "polygons and polyhedrons elements will be missed\n" - "For correct export use MED 2.2\n" - "Are you sure want to export to MED 2.1 ?" - -msgid "INF_SELECT_OBJECT" -msgstr "Select an object" - -#---------------------------------------------------- - -msgid "SMESHGUI_FilterLibraryDlg::ADD_TO_TLT" -msgstr "Add selection filter to library" - -msgid "SMESHGUI_FilterLibraryDlg::COPY_FROM_TLT" -msgstr "Copy selection filter from library" - -msgid "SMESHGUI_FilterLibraryDlg::EDIT_LIB_TLT" -msgstr "Selection filter library" - -msgid "SMESHGUI_FilterLibraryDlg::LIBRARY_FILE" -msgstr "Library file name" - -msgid "SMESHGUI_FilterLibraryDlg::ADD" -msgstr "Add" - -msgid "SMESHGUI_FilterLibraryDlg::DELETE" -msgstr "Delete" - -msgid "SMESHGUI_FilterLibraryDlg::FILTER_NAME" -msgstr "Filter name" - -msgid "SMESHGUI_FilterLibraryDlg::OPEN_LIBRARY" -msgstr "Open library" - -msgid "SMESHGUI_FilterLibraryDlg::XML_FILT" -msgstr "XML files(*.xml)" - -msgid "SMESHGUI_FilterLibraryDlg::ALL_FILES_FILTER" -msgstr "All Files (*.*)" - -msgid "SMESHGUI_FilterLibraryDlg::ERROR_LOAD" -msgstr "It is impossible to load library\nPlease check library file name and attributes" - -msgid "SMESHGUI_FilterLibraryDlg::ERROR_FILTER_NAME" -msgstr "Name of the filter is not unique\nPlease enter other name" - -msgid "SMESHGUI_FilterLibraryDlg::EMPTY_FILTER_NAME" -msgstr "Name of the filter is empty\nPlease enter a non-empty name" - -msgid "SMESHGUI_FilterLibraryDlg::FACE" -msgstr "Face" - -msgid "SMESHGUI_FilterLibraryDlg::EDGE" -msgstr "Edge" - -msgid "SMESHGUI_FilterLibraryDlg::NODE" -msgstr "Node" - -msgid "SMESHGUI_FilterLibraryDlg::VOLUME" -msgstr "Volume" - -msgid "SMESHGUI_FilterLibraryDlg::ELEMENT" -msgstr "Element" - -msgid "SMESHGUI_FilterLibraryDlg::LIB_NAME" -msgstr "FilterLib.xml" - -msgid "SMESHGUI_FilterLibraryDlg::SELECTION" -msgstr "Selection" - -msgid "SMESHGUI_FilterLibraryDlg::FILTER" -msgstr "Filter" - -msgid "SMESHGUI_FilterLibraryDlg::LIBRARY_IS_NOT_LOADED" -msgstr "Library is not loaded. Please load library and try again" - -msgid "SMESHGUI_FilterLibraryDlg::ERROR_OF_ADDING" -msgstr "Internal error occurs during adiing new filter in library.\nPlease verify validity of entered information" - -msgid "SMESHGUI_FilterLibraryDlg::ERROR_OF_DELETING" -msgstr "Internal error occurs during deleting filter from library.\nPlease verify validity of entered information" - -msgid "SMESHGUI_FilterLibraryDlg::ERROR_OF_COPYING" -msgstr "Internal error occurs during copying filter from library.\nPlease verify validity of entered information" - -msgid "SMESHGUI_FilterLibraryDlg::ERROR_OF_EDITING" -msgstr "Internal error occurs during editing filter library.\nPlease verify validity of entered information" - -msgid "SMESHGUI_FilterLibraryDlg::ASSIGN_NEW_NAME" -msgstr "Library already contains filter with name \"%1\"\nNew name \"%2\" is assigned to added filter" - -msgid "SMESHGUI_FilterLibraryDlg::FILTER_NAMES" -msgstr "Names of filters" - -msgid "SMESHGUI_FilterLibraryDlg::NO_PERMISSION" -msgstr "You do not have write permission to this file" - -msgid "SMESHGUI_FilterLibraryDlg::ERROR_OF_SAVING" -msgstr "Internal error occurs during saving filter library\nPlease check input data and try again" - -#---------------------------------------------------- - -msgid "SMESHGUI_SingleEditDlg::EDGE_BETWEEN" -msgstr "Edge between neighboring triangles" - -msgid "SMESHGUI_TrianglesInversionDlg::CAPTION" -msgstr "Diagonal inversion" - -msgid "SMESHGUI_UnionOfTwoTrianglesDlg::CAPTION" -msgstr "Union of two triangles" - -#---------------------------------------------------- - -msgid "SMESHGUI_MultiEditDlg::FILTER" -msgstr "Filter" - -msgid "SMESHGUI_MultiEditDlg::ADD" -msgstr "Add" - -msgid "SMESHGUI_MultiEditDlg::REMOVE" -msgstr "Remove" - -msgid "SMESHGUI_MultiEditDlg::SORT_LIST" -msgstr "Sort list" - -msgid "SMESHGUI_MultiEditDlg::TO_ALL" -msgstr "Apply to all" - -msgid "SMESHGUI_MultiEditDlg::SPLIT_JOIN_CRITERION" -msgstr "Criterion" - -msgid "SMESHGUI_MultiEditDlg::USE_DIAGONAL_1_3" -msgstr "Use diagonal 1-3" - -msgid "SMESHGUI_MultiEditDlg::USE_DIAGONAL_2_4" -msgstr "Use diagonal 2-4" - -msgid "SMESHGUI_MultiEditDlg::USE_NUMERIC_FUNC" -msgstr "Use numeric functor" - -msgid "SMESHGUI_MultiEditDlg::SELECT_FROM" -msgstr "Select from" - -msgid "SMESHGUI_ChangeOrientationDlg::CAPTION" -msgstr "Modification of orientation" - -msgid "SMESHGUI_UnionOfTrianglesDlg::CAPTION" -msgstr "Union of triangles" - -msgid "SMESHGUI_UnionOfTrianglesDlg::MAXIMUM_ANGLE" -msgstr "Maximum bending angle" - -msgid "SMESHGUI_CuttingOfQuadsDlg::CAPTION" -msgstr "Cutting of quadrangles" - -msgid "SMESHGUI_CuttingOfQuadsDlg::PREVIEW" -msgstr "Preview" - -#---------------------------------------------------- - -msgid "SMESHGUI_MoveNodesDlg::CAPTION" -msgstr "Move node" - -msgid "SMESHGUI_MoveNodesDlg::NODE_ID" -msgstr "Node ID" - -msgid "SMESHGUI_MoveNodesDlg::NODE_ID_IS_NOT_DEFINED" -msgstr "Node ID is not defined" - -#---------------------------------------------------- - -msgid "SMESHGUI_DeleteGroupDlg::CAPTION" -msgstr "Delete groups with contents" - -msgid "SMESHGUI_DeleteGroupDlg::SELECTED_GROUPS" -msgstr "Selected groups" - -msgid "SMESHGUI_DeleteGroupDlg::NO_SELECTED_GROUPS" -msgstr "There are no selected groups\nPlease select a groups and try again" - -#---------------------------------------------------- - -msgid "SMESHGUI_GroupOpDlg::NAME" -msgstr "Name" - -msgid "SMESHGUI_GroupOpDlg::RESULT_NAME" -msgstr "Result name" - -msgid "SMESHGUI_GroupOpDlg::ARGUMENTS" -msgstr "Arguments" - -msgid "SMESHGUI_GroupOpDlg::OBJECT_1" -msgstr "Object 1" - -msgid "SMESHGUI_GroupOpDlg::OBJECT_2" -msgstr "Object 2" - -msgid "SMESHGUI_GroupOpDlg::MAIN_OBJECT" -msgstr "Main object" - -msgid "SMESHGUI_GroupOpDlg::TOOL_OBJECT" -msgstr "Tool object" - -msgid "SMESHGUI_GroupOpDlg::UNION_OF_TWO_GROUPS" -msgstr "Union of two groups" - -msgid "SMESHGUI_GroupOpDlg::INTERSECTION_OF_TWO_GROUPS" -msgstr "Intersection of two groups" - -msgid "SMESHGUI_GroupOpDlg::CUT_OF_TWO_GROUPS" -msgstr "Cut of two groups" - -msgid "SMESHGUI_GroupOpDlg::INCORRECT_ARGUMENTS" -msgstr "Arguments of operation are not specified\nPlease specify them and try again" - -msgid "SMESHGUI_GroupOpDlg::DIFF_MESHES" -msgstr "Arguments of operation are not correctly specified\nGroups correspond to a different meshes\nPlease specify valid arguments and try again" - -msgid "SMESHGUI_GroupOpDlg::DIFF_TYPES" -msgstr "Arguments of operation are not correctly specified\nGroups contain elements of different types\nPlease specify valid arguments and try again" - -msgid "SMESHGUI_GroupOpDlg::EMPTY_NAME" -msgstr "Name of group to be created is not valid\nPlease specify non-empty name and try again" - -#---------------------------------------------------- - - -msgid "SMESHGUI_SmoothingDlg::FIXED_NODES_IDS" -msgstr "Fixed nodes ids" - -msgid "SMESHGUI_SmoothingDlg::METHOD" -msgstr "Method" - -msgid "SMESHGUI_SmoothingDlg::ITERATION_LIMIT" -msgstr "Iteration limit" - -msgid "SMESHGUI_SmoothingDlg::MAX_ASPECT_RATIO" -msgstr "Max. aspect ratio" - -msgid "SMESHGUI_SmoothingDlg::LAPLACIAN" -msgstr "Laplacian" - -msgid "SMESHGUI_SmoothingDlg::CENTROIDAL" -msgstr "Centroidal" - -msgid "SMESHGUI_SmoothingDlg::IS_PARAMETRIC" -msgstr "in parametric space" - -#---------------SMESHGUI_SewingDlg----------- - -msgid "SMESHGUI_SewingDlg::CREATE_POLYGONS_INSTEAD_SPLITTING" -msgstr "Create polygons instead of splitting" - -msgid "SMESHGUI_SewingDlg::CREATE_POLYEDRS_NEAR_BOUNDARY" -msgstr "Replace affected volumes by polyedres" - -msgid "SMESHGUI_SewingDlg::MERGE_EQUAL_ELEMENTS" -msgstr "Merge equal elements" - -msgid "SMESHGUI_SewingDlg::SEW_FREE_BORDERS" -msgstr "Sew Free Borders" - -msgid "SMESHGUI_SewingDlg::BORDER" -msgstr "Border" - -msgid "SMESHGUI_SewingDlg::BORDER_1" -msgstr "Border 1" - -msgid "SMESHGUI_SewingDlg::BORDER_2" -msgstr "Border 2" - -msgid "SMESHGUI_SewingDlg::SEW_CONFORM_FREE_BORDERS" -msgstr "Sew Conform Free Borders" - -msgid "SMESHGUI_SewingDlg::SEW_BORDER_TO_SIDE" -msgstr "Sew Border To Side" - -msgid "SMESHGUI_SewingDlg::SIDE" -msgstr "Side" - -msgid "SMESHGUI_SewingDlg::SEW_SIDE_ELEMENTS" -msgstr "Sew Side Elements" - -msgid "SMESHGUI_SewingDlg::SIDE_1" -msgstr "Side 1" - -msgid "SMESHGUI_SewingDlg::SIDE_2" -msgstr "Side 2" - -msgid "SMESHGUI_SewingDlg::NODE1_TO_MERGE" -msgstr "Node 1 To Merge" - -msgid "SMESHGUI_SewingDlg::NODE2_TO_MERGE" -msgstr "Node 2 To Merge" - -msgid "SMESHGUI_SewingDlg::FIRST_NODE_ID" -msgstr "First Node ID" - -msgid "SMESHGUI_SewingDlg::SECOND_NODE_ID" -msgstr "Second Node ID" - -msgid "SMESHGUI_SewingDlg::LAST_NODE_ID" -msgstr "Last Node ID" - -msgid "SMESHGUI_SewingDlg::ERROR_1" -msgstr "Free Border1 not found by the selected nodes" - -msgid "SMESHGUI_SewingDlg::ERROR_2" -msgstr "Free Border2 not found by the selected nodes" - -msgid "SMESHGUI_SewingDlg::ERROR_3" -msgstr "Free Border1 and Border2 not found by the selected nodes" - -msgid "SMESHGUI_SewingDlg::ERROR_4" -msgstr "No path from the first side node to the last side node have been found" - -msgid "SMESHGUI_SewingDlg::ERROR_5" -msgstr "Not allowed to splite volumes on the side!" - -msgid "SMESHGUI_SewingDlg::ERROR_6" -msgstr "Different number of elements selected on the sides" - -msgid "SMESHGUI_SewingDlg::ERROR_7" -msgstr "Element sets are topologically different or given nodes are inconvenient" - -msgid "SMESHGUI_SewingDlg::ERROR_8" -msgstr "Nodes on the side 1 are either not linked or not laying on the element set boundary" - -msgid "SMESHGUI_SewingDlg::ERROR_9" -msgstr "Nodes on the side 2 are either not linked or not laying on the element set boundary" - -#---------------------------------------------------- - -msgid "SMESHGUI_ExtrusionDlg::EXTRUSION_ALONG_LINE" -msgstr "Extrusion along a line" - -msgid "SMESHGUI_ExtrusionDlg::EXTRUSION_1D" -msgstr "Extrusion of 1D elements" - -msgid "SMESHGUI_ExtrusionDlg::EXTRUSION_2D" -msgstr "Extrusion of 2D elements" - -#---------------------------------------------------- - -msgid "SMESHGUI_ExtrusionAlongPathDlg::EXTRUSION_ALONG_PATH" -msgstr "Extrusion along a path" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::EXTRUSION_1D" -msgstr "Extrusion of 1D elements" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::EXTRUSION_2D" -msgstr "Extrusion of 2D elements" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_PATH" -msgstr "Path" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_PATH_MESH" -msgstr "Mesh" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_PATH_SHAPE" -msgstr "Shape (edge or wire)" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_PATH_START" -msgstr "Start point" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_USE_ANGLES" -msgstr "Use Angles" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_ANGLES" -msgstr "Rotation Angles" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_USE_BASE_POINT" -msgstr "Use Base Point" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_BASE_POINT" -msgstr "Base Point" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::NO_ELEMENTS_SELECTED" -msgstr "No mesh elements are selected for extrusion" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::SELECTED_PATH_IS_NOT_EDGE" -msgstr "Path mesh should be of edge type" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::BAD_SHAPE_TYPE" -msgstr "The shape selected for the path is not edge" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::EXTR_BAD_STARTING_NODE" -msgstr "Wrong path starting node" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::WRONG_ANGLES_NUMBER" -msgstr "The number of angles should correspond to the number of path nodes" - -msgid "SMESHGUI_ExtrusionAlongPathDlg::CANT_GET_TANGENT" -msgstr "Can't get tangent for one of the path nodes" - -#---------------------------------------------------- - -msgid "SMESHGUI_RevolutionDlg::REVOLUTION_AROUND_AXIS" -msgstr "Revolution around an axis" - -msgid "SMESHGUI_RevolutionDlg::REVOLUTION_1D" -msgstr "Revolution of 1D elements" - -msgid "SMESHGUI_RevolutionDlg::REVOLUTION_2D" -msgstr "Revolution of 2D elements" - -#---------------------------------------------------- - -#Coincident nodes -msgid "SMESHGUI_MergeNodesDlg::COINCIDENT_NODES" -msgstr "Coincident nodes" - -#Detect -msgid "SMESHGUI_MergeNodesDlg::DETECT" -msgstr "Detect" - -#Select all -msgid "SMESHGUI_MergeNodesDlg::SELECT_ALL" -msgstr "Select all" - -# Edit group of nodes -msgid "SMESHGUI_MergeNodesDlg::EDIT_GROUP_OF_NODES" -msgstr "Edit group of nodes" - -#---------------------------------------------------- - -msgid "SMESHGUI_MeshPatternDlg::CAPTION" -msgstr "Pattern Mapping" - -msgid "SMESHGUI_MeshPatternDlg::PATTERN_TYPE" -msgstr "Pattern type" - -msgid "SMESHGUI_MeshPatternDlg::PATTERN" -msgstr "Pattern" - -msgid "SMESHGUI_MeshPatternDlg::NEW" -msgstr "New..." - -msgid "SMESHGUI_MeshPatternDlg::FACE" -msgstr "Face" - -msgid "SMESHGUI_MeshPatternDlg::VERTEX" -msgstr "Vertex " - -msgid "SMESHGUI_MeshPatternDlg::VERTEX1" -msgstr "Vertex 1" - -msgid "SMESHGUI_MeshPatternDlg::VERTEX2" -msgstr "Vertex 2" - -msgid "SMESHGUI_MeshPatternDlg::REVERSE" -msgstr "Reverse order of key-points" - -msgid "SMESHGUI_MeshPatternDlg::PREVIEW" -msgstr "Preview" - -msgid "SMESHGUI_MeshPatternDlg::3D_BLOCK" -msgstr "3D block" - -msgid "SMESHGUI_MeshPatternDlg::LOAD_PATTERN" -msgstr "Load pattern" - -msgid "SMESHGUI_MeshPatternDlg::PATTERN_FILT" -msgstr "Pattern files(*.smp)" - -msgid "SMESHGUI_MeshPatternDlg::CREATE_POLYGONS_NEAR_BOUNDARY" -msgstr "Create polygons near boundary" - -msgid "SMESHGUI_MeshPatternDlg::CREATE_POLYEDRS_NEAR_BOUNDARY" -msgstr "Create polyhedrons near boundary" - -msgid "SMESHGUI_MeshPatternDlg::ERROR_OF_LOADING" -msgstr "Loading of pattern from file failed. Probably file\nis corrupted or contains pattern of the other type" - -msgid "SMESHGUI_MeshPatternDlg::ERROR_OF_OPENING" -msgstr "It is impossible to open file. Please verify whether\nfile exists and your permission to this file" - -msgid "SMESHGUI_MeshPatternDlg::ERROR_OF_READING" -msgstr "It is impossible to load pattern\nPlease verify file's contents" - -msgid "SMESHGUI_MeshPatternDlg::ERR_READ_NB_POINTS" -msgstr "It is impossible to load pattern\nIt is impossible to read number of points from file" - -msgid "SMESHGUI_MeshPatternDlg::ERR_READ_POINT_COORDS" -msgstr "It is impossible to load pattern\nIt is impossible to read point coordinates from file" - -msgid "SMESHGUI_MeshPatternDlg::ERR_READ_TOO_FEW_POINTS" -msgstr "It is impossible to load pattern. There are\n too few points in the file for pattern loading" - -msgid "SMESHGUI_MeshPatternDlg::ERR_READ_3D_COORD" -msgstr "It is impossible to load pattern\nCoordinates of 3D points out of [0,1] range" - -msgid "SMESHGUI_MeshPatternDlg::ERR_READ_NO_KEYPOINT" -msgstr "It is impossible to load pattern\nThere are no key-points in 2D one" - -msgid "SMESHGUI_MeshPatternDlg::ERR_READ_BAD_INDEX" -msgstr "It is impossible to load pattern\nInvalid index of point detected" - -msgid "SMESHGUI_MeshPatternDlg::ERR_READ_ELEM_POINTS" -msgstr "It is impossible to load pattern\ninvalid number of points in element" - -msgid "SMESHGUI_MeshPatternDlg::ERR_READ_NO_ELEMS" -msgstr "It is impossible to load pattern\nThere are no elements in it" - -msgid "SMESHGUI_MeshPatternDlg::ERR_READ_BAD_KEY_POINT" -msgstr "It is impossible to load pattern\nKey-point not on a boundary" - -msgid "SMESHGUI_MeshPatternDlg::REFINE" -msgstr "Refine selected mesh elements" - -msgid "SMESHGUI_MeshPatternDlg::NODE_1" -msgstr "Node 1" - -msgid "SMESHGUI_MeshPatternDlg::NODE_2" -msgstr "Node 2" - -msgid "SMESHGUI_MeshPatternDlg::MESH_FACES" -msgstr "Mesh faces" - -msgid "SMESHGUI_MeshPatternDlg::MESH_VOLUMES" -msgstr "Mesh volumes" - -msgid "SMESHGUI_CreatePolyhedralVolumeDlg::FACES_BY_NODES" -msgstr "Faces by nodes" - -msgid "SMESHGUI_CreatePolyhedralVolumeDlg::SMESH_POLYEDRE_PREVIEW" -msgstr "Polyhedron preview" - -msgid "SMESH_CREATE_POLYHEDRAL_VOLUME_TITLE" -msgstr "Create polyhedral volume" - -msgid "SMESH_ADD_POLYGON_TITLE" -msgstr "Add polygon" - -msgid "SMESH_POLYGON" -msgstr "Polygon" - -msgid "SMESH_ADD_POLYGON" -msgstr "Add polygon" - -#---------------------------------------------------- - -msgid "SMESHGUI_CreatePatternDlg::CAPTION" -msgstr "Pattern Creation" - -msgid "SMESHGUI_CreatePatternDlg::MESH_OR_SUBMESH" -msgstr "Mesh or SubMesh" - -msgid "SMESHGUI_CreatePatternDlg::PROJECT" -msgstr "Project nodes on the face" - -msgid "SMESHGUI_CreatePatternDlg::PATTERN" -msgstr "Pattern" - -msgid "SMESHGUI_CreatePatternDlg::PATTERN_NAME" -msgstr "Pattern name" - -msgid "SMESHGUI_CreatePatternDlg::SAVE" -msgstr "Save..." - -msgid "SMESHGUI_CreatePatternDlg::ERROR_OF_CREATION" -msgstr "Internal error occurs during pattern creation\nPlease verify validity of entered information" - -msgid "SMESHGUI_CreatePatternDlg::DEFAULT_2D" -msgstr "Pattern_2d" - -msgid "SMESHGUI_CreatePatternDlg::DEFAULT_3D" -msgstr "Pattern_3d" - -msgid "SMESHGUI_CreatePatternDlg::SAVE_PATTERN" -msgstr "Save Pattern" - -msgid "SMESHGUI_CreatePatternDlg::ERROR_OF_SAVING" -msgstr "Internal error occurs during pattern saving. Please verify\n\free disk space and your write permission to this file" - -msgid "SMESHGUI_CreatePatternDlg::PATTERN_TYPE" -msgstr "Pattern type" - -msgid "SMESHGUI_CreatePatternDlg::PATTERN_FILT" -msgstr "Pattern files(*.smp)" - -msgid "SMESHGUI_CreatePatternDlg::ERR_LOAD_EMPTY_SUBMESH" -msgstr "There are no elements to create pattern" - -msgid "SMESHGUI_CreatePatternDlg::ERR_LOADF_NARROW_FACE" -msgstr "It is impossible to create pattern from narrow face" - -msgid "SMESHGUI_CreatePatternDlg::ERR_LOADF_CLOSED_FACE" -msgstr "It is impossible to create pattern from face having seam edge" - -msgid "SMESHGUI_CreatePatternDlg::ERR_LOADV_BAD_SHAPE" -msgstr "Pattern can be created from closed shell or solid with 6 faces only" - -msgid "SMESHGUI_CreatePatternDlg::ERR_LOADV_COMPUTE_PARAMS" -msgstr "It is impossible to compute point parameters" - -#------------------------------------------------------------------------- - -msgid "SMESHGUI_PrecisionDlg::CAPTION" -msgstr "Precision for mesh quality controls" - -msgid "SMESHGUI_PrecisionDlg::PRECISION" -msgstr "Number of digits after point" - -msgid "SMESHGUI_PrecisionDlg::NOT_USE" -msgstr "Do not use" - -msgid "NON_SMESH_OBJECTS_SELECTED" -msgstr "There are objects selected which do not belong to %1 component." - - - - - -#----------- Menu bar ----------# -#------ MEN -----# -msgid "MEN_DAT" -msgstr "DAT file" - -msgid "MEN_UNV" -msgstr "UNV file" - -msgid "MEN_MED" -msgstr "MED file" - -msgid "MEN_EXPORT_DAT" -msgstr "Export to DAT file" - -msgid "MEN_EXPORT_UNV" -msgstr "Export to UNV file" - -msgid "MEN_EXPORT_MED" -msgstr "Export to MED file" - -msgid "MEN_DELETE" -msgstr "Delete" - -msgid "MEN_SEL_FILTER_LIB" -msgstr "Selection filters library" - -msgid "MEN_CREATE_MESH" -msgstr "Create Mesh" - -msgid "MEN_EDIT_MESHSUBMESH" -msgstr "Edit Mesh/Sub-mesh" - -msgid "MEN_COMPUTE" -msgstr "Compute" - -msgid "MEN_CREATE_SUBMESH" -msgstr "Create Sub-mesh" - -msgid "MEN_GLOBAL_HYPO" -msgstr "Global Hypothesis" - -msgid "MEN_EDIT" -msgstr "Edit" - -msgid "MEN_EDIT_HYPO" -msgstr "Edit Hypothesis" - -msgid "MEN_CREATE_GROUP" -msgstr "Create Group" - -msgid "MEN_CONSTRUCT_GROUP" -msgstr "Construct Group" - -msgid "MEN_EDIT_GROUP" -msgstr "Edit Group" - -msgid "MEN_UN_GROUP" -msgstr "Union Groups" - -msgid "MEN_INT_GROUP" -msgstr "Intersect Groups" - -msgid "MEN_CUT_GROUP" -msgstr "Cut Groups" - -msgid "MEN_DEL_GROUP" -msgstr "Delete Groups" - -msgid "MEN_ADV_INFO" -msgstr "Advanced Mesh Infos" - -msgid "MEN_STD_INFO" -msgstr "Standard Mesh Infos" - -msgid "MEN_LENGTH" -msgstr "Length" - -msgid "MEN_FREE_EDGE" -msgstr "Free Edges" - -msgid "MEN_FREE_BORDER" -msgstr "Free Borders" - -msgid "MEN_CONNECTION" -msgstr "Borders at Multi-Connection" - -msgid "MEN_AREA" -msgstr "Area" - -msgid "MEN_TAPER" -msgstr "Taper" - -msgid "MEN_ASPECT" -msgstr "Aspect Ratio" - -msgid "MEN_MIN_ANG" -msgstr "Minimum Angle" - -msgid "MEN_WARP" -msgstr "Warping angle" - -msgid "MEN_SKEW" -msgstr "Skew" - -msgid "MEN_ASPECT_3D" -msgstr "Aspect Ratio 3D" - -msgid "MEN_LENGTH_2D" -msgstr "Length 2D" - -msgid "MEN_CONNECTION_2D" -msgstr "Borders at Multi-Connection 2D" - -msgid "MEN_NODE" -msgstr "Node" - -msgid "MEN_EDGE" -msgstr "Edge" - -msgid "MEN_TRIANGLE" -msgstr "Triangle" - -msgid "MEN_QUAD" -msgstr "Quadrangle" - -msgid "MEN_TETRA" -msgstr "Tetrahedron" - -msgid "MEN_HEXA" -msgstr "Hexahedron" - -msgid "MEN_POLYGON" -msgstr "Polygon" - -msgid "MEN_POLYHEDRON" -msgstr "Polyhedron" - -msgid "MEN_NODES" -msgstr "Nodes" - -msgid "MEN_REMOVE_NODES" -msgstr "Nodes" - -msgid "MEN_RENUM_NODES" -msgstr "Nodes" - -msgid "MEN_REMOVE_ELEMENTS" -msgstr "Elements" - -msgid "MEN_RENUM_ELEMENTS" -msgstr "Elements" - -msgid "MEN_TRANS" -msgstr "Translation" - -msgid "MEN_ROT" -msgstr "Rotation" - -msgid "MEN_SYM" -msgstr "Symmetry" - -msgid "MEN_SEW" -msgstr "Sewing" - -msgid "MEN_MERGE" -msgstr "Merge nodes" - -msgid "MEN_MERGE_ELEMENTS" -msgstr "Merge elements" - -msgid "MEN_MOVE" -msgstr "Move Node" - -msgid "MEN_INV" -msgstr "Diagonal Inversion" - -msgid "MEN_UNION2" -msgstr "Union of two triangles" - -msgid "MEN_ORIENT" -msgstr "Orientation" - -msgid "MEN_UNION" -msgstr "Union of triangles" - -msgid "MEN_CUT" -msgstr "Cutting of quadrangles" - -msgid "MEN_SMOOTH" -msgstr "Smoothing" - -msgid "MEN_EXTRUSION" -msgstr "Extrusion" - -msgid "MEN_REVOLUTION" -msgstr "Revolution" - -msgid "MEN_MAP" -msgstr "Pattern mapping" - -msgid "MEN_EXTRUSION_ALONG" -msgstr "Extrusion along a path" - -msgid "MEN_WIRE" -msgstr "Wireframe" - -msgid "MEN_SHADE" -msgstr "Shading" - -msgid "MEN_SHRINK" -msgstr "Shrink" - -msgid "MEN_AUTO_UPD" -msgstr "Automatic update" - -msgid "MEN_COLORS" -msgstr "Colors / Size" - -msgid "MEN_SCALAR_BAR" -msgstr "Scalar bar" - -msgid "MEN_SELECTION" -msgstr "Selection" - -msgid "MEN_PRECISION" -msgstr "Precision" - -msgid "MEN_DISP_ENT" -msgstr "Display entity" - -msgid "MEN_UPDATE" -msgstr "Update" - -msgid "MEN_FILE" -msgstr "File" - -msgid "MEN_TOOLS" -msgstr "Tools" - -msgid "MEN_HYPO" -msgstr "Hypotheses" - -msgid "MEN_MESH" -msgstr "Mesh" - -msgid "MEN_CTRL" -msgstr "Controls" - -msgid "MEN_MODIFY" -msgstr "Modification" - -msgid "MEN_PREF" -msgstr "Preferences" - -msgid "MEN_VIEW" -msgstr "View" - -msgid "MEN_IMPORT" -msgstr "Import" - -msgid "MEN_EXPORT" -msgstr "Export" - -msgid "MEN_ADD" -msgstr "Add" - -msgid "MEN_REMOVE" -msgstr "Remove" - -msgid "MEN_RENUM" -msgstr "Renumbering" - -msgid "MEN_NUM" -msgstr "Numbering" - -msgid "MEN_TRANSF" -msgstr "Transformation" - -msgid "MEN_DISPMODE" -msgstr "Display mode" - -msgid "MEN_QUALITY" -msgstr "Quality controls" - -msgid "MEN_RENAME" -msgstr "Rename" - -msgid "MEN_UNASSIGN" -msgstr "Unassign" - -msgid "MEN_NUM_NODES" -msgstr "Display Nodes #" - -msgid "MEN_NUM_ELEMENTS" -msgstr "Display Elements #" - -msgid "MEN_RESET" -msgstr "Reset" - -msgid "MEN_SCALAR_BAR_PROP" -msgstr "Scalar bar Properties" - -msgid "MEN_EDGES" -msgstr "Edges" - -msgid "MEN_FACES" -msgstr "Faces" - -msgid "MEN_VOLUMES" -msgstr "Volumes" - -msgid "MEN_ALL" -msgstr "All" - -msgid "MEN_TRANSP" -msgstr "Transparency" - -msgid "MEN_CLIP" -msgstr "Clipping" - -msgid "MEN_DISPLAY" -msgstr "Display" - -msgid "MEN_ERASE" -msgstr "Erase" - -msgid "MEN_DISPLAY_ONLY" -msgstr "Display only" - - -#------ TOP -----# -msgid "TOP_DAT" -msgstr "Import DAT file" - -msgid "TOP_UNV" -msgstr "Import UNV file" - -msgid "TOP_MED" -msgstr "Import MED file" - -msgid "TOP_EXPORT_DAT" -msgstr "Export to DAT file" - -msgid "TOP_EXPORT_UNV" -msgstr "Export to UNV file" - -msgid "TOP_EXPORT_MED" -msgstr "Export to MED file" - -msgid "TOP_DELETE" -msgstr "Delete" - -msgid "TOP_SEL_FILTER_LIB" -msgstr "Selection filters library" - -msgid "TOP_CREATE_MESH" -msgstr "Create Mesh" - -msgid "TOP_EDIT_MESHSUBMESH" -msgstr "Edit Mesh/Sub-mesh" - -msgid "TOP_COMPUTE" -msgstr "Compute" - -msgid "TOP_CREATE_SUBMESH" -msgstr "Create Sub-mesh" - -msgid "TOP_GLOBAL_HYPO" -msgstr "Global Hypothesis" - -msgid "TOP_EDIT_HYPO" -msgstr "Edit Hypothesis" - -msgid "TOP_CREATE_GROUP" -msgstr "Create Group" - -msgid "TOP_CONSTRUCT_GROUP" -msgstr "Construct Group" - -msgid "TOP_EDIT_GROUP" -msgstr "Edit Group" - -msgid "TOP_UN_GROUP" -msgstr "Union Groups" - -msgid "TOP_INT_GROUP" -msgstr "Intersect Groups" - -msgid "TOP_CUT_GROUP" -msgstr "Cut Groups" - -msgid "TOP_DEL_GROUP" -msgstr "Delete Groups" - -msgid "TOP_ADV_INFO" -msgstr "Advanced Mesh Infos" - -msgid "TOP_STD_INFO" -msgstr "Standard Mesh Infos" - -msgid "TOP_LENGTH" -msgstr "Length" - -msgid "TOP_FREE_EDGE" -msgstr "Free Edges" - -msgid "TOP_FREE_BORDER" -msgstr "Free Borders" - -msgid "TOP_CONNECTION" -msgstr "Borders at Multi-Connection" - -msgid "TOP_AREA" -msgstr "Area" - -msgid "TOP_TAPER" -msgstr "Taper" - -msgid "TOP_ASPECT" -msgstr "Aspect Ratio" - -msgid "TOP_MIN_ANG" -msgstr "Minimum Angle" - -msgid "TOP_WARP" -msgstr "Warping angle" - -msgid "TOP_SKEW" -msgstr "Skew" - -msgid "TOP_ASPECT_3D" -msgstr "Aspect Ratio 3D" - -msgid "TOP_LENGTH_2D" -msgstr "Length 2D" - -msgid "TOP_CONNECTION_2D" -msgstr "Borders at Multi-Connection 2D" - -msgid "TOP_NODE" -msgstr "Node" - -msgid "TOP_EDGE" -msgstr "Edge" - -msgid "TOP_TRIANGLE" -msgstr "Triangle" - -msgid "TOP_QUAD" -msgstr "Quadrangle" - -msgid "TOP_TETRA" -msgstr "Tetrahedron" - -msgid "TOP_HEXA" -msgstr "Hexahedron" - -msgid "TOP_POLYGON" -msgstr "Polygon" - -msgid "TOP_POLYHEDRON" -msgstr "Polyhedron" - -msgid "TOP_NODES" -msgstr "Nodes" - -msgid "TOP_REMOVE_NODES" -msgstr "Remove nodes" - -msgid "TOP_RENUM_NODES" -msgstr "Renumbering nodes" - -msgid "TOP_REMOVE_ELEMENTS" -msgstr "Remove elements" - -msgid "TOP_RENUM_ELEMENTS" -msgstr "Renumbering elements" - -msgid "TOP_TRANS" -msgstr "Translation" - -msgid "TOP_ROT" -msgstr "Rotation" - -msgid "TOP_SYM" -msgstr "Symmetry" - -msgid "TOP_SEW" -msgstr "Sewing" - -msgid "TOP_MERGE" -msgstr "Merge nodes" - -msgid "TOP_MERGE_ELEMENTS" -msgstr "Merge elements" - -msgid "TOP_MOVE" -msgstr "Move Node" - -msgid "TOP_INV" -msgstr "Diagonal Inversion" - -msgid "TOP_UNION2" -msgstr "Union of two triangles" - -msgid "TOP_ORIENT" -msgstr "Orientation" - -msgid "TOP_UNION" -msgstr "Union of triangles" - -msgid "TOP_CUT" -msgstr "Cutting of quadrangles" - -msgid "TOP_SMOOTH" -msgstr "Smoothing" - -msgid "TOP_EXTRUSION" -msgstr "Extrusion" - -msgid "TOP_REVOLUTION" -msgstr "Revolution" - -msgid "TOP_MAP" -msgstr "Pattern mapping" - -msgid "TOP_EXTRUSION_ALONG" -msgstr "Extrusion along a path" - -msgid "TOP_WIRE" -msgstr "Wireframe" - -msgid "TOP_SHADE" -msgstr "Shading" - -msgid "TOP_SHRINK" -msgstr "Shrink" - -msgid "TOP_AUTO_UPD" -msgstr "Automatic update" - -msgid "TOP_COLORS" -msgstr "Colors / Size" - -msgid "TOP_SCALAR_BAR" -msgstr "Scalar bar" - -msgid "TOP_SELECTION" -msgstr "Selection" - -msgid "TOP_PRECISION" -msgstr "Precision" - -msgid "TOP_DISP_ENT" -msgstr "Display entity" - -msgid "TOP_UPDATE" -msgstr "Update" - -msgid "TOP_RENAME" -msgstr "Rename" - -msgid "TOP_UNASSIGN" -msgstr "Unassign" - -msgid "TOP_NUM_NODES" -msgstr "Display Nodes" - -msgid "TOP_NUM_ELEMENTS" -msgstr "Display Elements" - -msgid "TOP_RESET" -msgstr "Reset" - -msgid "TOP_SCALAR_BAR_PROP" -msgstr "Scalar bar Properties" - -msgid "TOP_EDGES" -msgstr "Edges" - -msgid "TOP_FACES" -msgstr "Faces" - -msgid "TOP_VOLUMES" -msgstr "Volumes" - -msgid "TOP_ALL" -msgstr "All" - -msgid "TOP_TRANSP" -msgstr "Transparency" - -msgid "TOP_CLIP" -msgstr "Clipping" - -msgid "TOP_DISPLAY" -msgstr "Display" - -msgid "TOP_ERASE" -msgstr "Erase" - -msgid "TOP_DISPLAY_ONLY" -msgstr "Display only" - - - - -#------ STB -----# -msgid "STB_DAT" -msgstr "Import DAT file" - -msgid "STB_UNV" -msgstr "Import UNV file" - -msgid "STB_MED" -msgstr "Import MED file" - -msgid "STB_EXPORT_DAT" -msgstr "Export to DAT file" - -msgid "STB_EXPORT_UNV" -msgstr "Export to UNV file" - -msgid "STB_EXPORT_MED" -msgstr "Export to MED file" - -msgid "STB_DELETE" -msgstr "Delete" - -msgid "STB_SEL_FILTER_LIB" -msgstr "Selection filters library" - -msgid "STB_CREATE_MESH" -msgstr "Create Mesh" - -msgid "STB_EDIT_MESHSUBMESH" -msgstr "Edit Mesh/Sub-mesh" - -msgid "STB_COMPUTE" -msgstr "Compute" - -msgid "STB_CREATE_SUBMESH" -msgstr "Create Sub-mesh" - -msgid "STB_GLOBAL_HYPO" -msgstr "Global Hypothesis" - -msgid "STB_EDIT_HYPO" -msgstr "Edit Hypothesis" - -msgid "STB_CREATE_GROUP" -msgstr "Create Group" - -msgid "STB_CONSTRUCT_GROUP" -msgstr "Construct Group" - -msgid "STB_EDIT_GROUP" -msgstr "Edit Group" - -msgid "STB_UN_GROUP" -msgstr "Union Groups" - -msgid "STB_INT_GROUP" -msgstr "Intersect Groups" - -msgid "STB_CUT_GROUP" -msgstr "Cut Groups" - -msgid "STB_DEL_GROUP" -msgstr "Delete Groups" - -msgid "STB_ADV_INFO" -msgstr "Advanced Mesh Infos" - -msgid "STB_STD_INFO" -msgstr "Standard Mesh Infos" - -msgid "STB_LENGTH" -msgstr "Length" - -msgid "STB_FREE_EDGE" -msgstr "Free Edges" - -msgid "STB_FREE_BORDER" -msgstr "Free Borders" - -msgid "STB_CONNECTION" -msgstr "Borders at Multi-Connection" - -msgid "STB_AREA" -msgstr "Area" - -msgid "STB_TAPER" -msgstr "Taper" - -msgid "STB_ASPECT" -msgstr "Aspect Ratio" - -msgid "STB_MIN_ANG" -msgstr "Minimum Angle" - -msgid "STB_WARP" -msgstr "Warping angle" - -msgid "STB_SKEW" -msgstr "Skew" - -msgid "STB_ASPECT_3D" -msgstr "Aspect Ratio 3D" - -msgid "STB_LENGTH_2D" -msgstr "Length 2D" - -msgid "STB_CONNECTION_2D" -msgstr "Borders at Multi-Connection 2D" - -msgid "STB_NODE" -msgstr "Node" - -msgid "STB_EDGE" -msgstr "Edge" - -msgid "STB_TRIANGLE" -msgstr "Triangle" - -msgid "STB_QUAD" -msgstr "Quadrangle" - -msgid "STB_TETRA" -msgstr "Tetrahedron" - -msgid "STB_HEXA" -msgstr "Hexahedron" - -msgid "STB_POLYGON" -msgstr "Polygon" - -msgid "STB_POLYHEDRON" -msgstr "Polyhedron" - -msgid "STB_NODES" -msgstr "Nodes" - -msgid "STB_REMOVE_NODES" -msgstr "Remove nodes" - -msgid "STB_RENUM_NODES" -msgstr "Renumbering nodes" - -msgid "STB_REMOVE_ELEMENTS" -msgstr "Remove elements" - -msgid "STB_RENUM_ELEMENTS" -msgstr "Renumbering elements" - -msgid "STB_TRANS" -msgstr "Translation" - -msgid "STB_ROT" -msgstr "Rotation" - -msgid "STB_SYM" -msgstr "Symmetry" - -msgid "STB_SEW" -msgstr "Sewing" - -msgid "STB_MERGE" -msgstr "Merge nodes" - -msgid "STB_MERGE_ELEMENTS" -msgstr "Merge elements" - -msgid "STB_MOVE" -msgstr "Move Node" - -msgid "STB_INV" -msgstr "Diagonal Inversion" - -msgid "STB_UNION2" -msgstr "Union of two triangles" - -msgid "STB_ORIENT" -msgstr "Orientation" - -msgid "STB_UNION" -msgstr "Union of triangles" - -msgid "STB_CUT" -msgstr "Cutting of quadrangles" - -msgid "STB_SMOOTH" -msgstr "Smoothing" - -msgid "STB_EXTRUSION" -msgstr "Extrusion" - -msgid "STB_REVOLUTION" -msgstr "Revolution" - -msgid "STB_MAP" -msgstr "Pattern mapping" - -msgid "STB_EXTRUSION_ALONG" -msgstr "Extrusion along a path" - -msgid "STB_WIRE" -msgstr "Wireframe" - -msgid "STB_SHADE" -msgstr "Shading" - -msgid "STB_SHRINK" -msgstr "Shrink" - -msgid "STB_AUTO_UPD" -msgstr "Automatic update" - -msgid "STB_COLORS" -msgstr "Colors / Size" - -msgid "STB_SCALAR_BAR" -msgstr "Scalar bar" - -msgid "STB_SELECTION" -msgstr "Selection" - -msgid "STB_PRECISION" -msgstr "Precision" - -msgid "STB_DISP_ENT" -msgstr "Display entity" - -msgid "STB_UPDATE" -msgstr "Update" - -msgid "STB_RENAME" -msgstr "Rename" - -msgid "STB_UNASSIGN" -msgstr "Unassign" - -msgid "STB_NUM_NODES" -msgstr "Display Nodes" - -msgid "STB_NUM_ELEMENTS" -msgstr "Display Elements" - -msgid "STB_RESET" -msgstr "Reset" - -msgid "STB_SCALAR_BAR_PROP" -msgstr "Scalar bar Properties" - -msgid "STB_EDGES" -msgstr "Edges" - -msgid "STB_FACES" -msgstr "Faces" - -msgid "STB_VOLUMES" -msgstr "Volumes" - -msgid "STB_ALL" -msgstr "All" - -msgid "STB_TRANSP" -msgstr "Transparency" - -msgid "STB_CLIP" -msgstr "Clipping" - -msgid "STB_DISPLAY" -msgstr "Display" - -msgid "STB_ERASE" -msgstr "Erase" - -msgid "STB_DISPLAY_ONLY" -msgstr "Display only" - - - - - -msgid "TB_MESH" -msgstr "Mesh Toolbar" - -msgid "TB_HYPO" -msgstr "Hypotheses Toolbar" - -msgid "TB_CTRL" -msgstr "Controls Toolbar" - -msgid "TB_ADD_REMOVE" -msgstr "Add/Remove Toolbar" - -msgid "TB_MODIFY" -msgstr "Modification Toolbar" - -msgid "TB_DISP_MODE" -msgstr "Display Mode Toolbar" - -#------------------------------------------------------------------------- -# PREFEERENCES -#------------------------------------------------------------------------- - -msgid "SMESHGUI::PREF_TAB_GENERAL" -msgstr "General" - -msgid "SMESHGUI::PREF_GROUP_QUALITY" -msgstr "Quality controls" - -msgid "SMESHGUI::PREF_DISPLAY_ENTITY" -msgstr "Display entity" - -msgid "SMESHGUI::PREF_AUTO_UPDATE" -msgstr "Automatic update" - -msgid "SMESHGUI::PREF_PRECISION_USE" -msgstr "Use precision" - -msgid "SMESHGUI::PREF_PRECISION_VALUE" -msgstr "Number of digits after point" - -msgid "SMESHGUI::PREF_GROUP_PRECISION" -msgstr "Precision" - -msgid "SMESHGUI::PREF_TAB_MESH" -msgstr "Mesh" - -msgid "SMESHGUI::PREF_GROUP_NODES" -msgstr "Nodes" - -msgid "SMESHGUI::PREF_GROUP_ELEMENTS" -msgstr "Elements" - -msgid "SMESHGUI::PREF_COLOR" -msgstr "Color" - -msgid "SMESHGUI::PREF_SIZE" -msgstr "Size" - -msgid "SMESHGUI::PREF_WIDTH" -msgstr "Width" - -msgid "SMESHGUI::PREF_FILL" -msgstr "Fill" - -msgid "SMESHGUI::PREF_OUTLINE" -msgstr "Outline" - -msgid "SMESHGUI::PREF_BACKFACE" -msgstr "Back face" - -msgid "SMESHGUI::PREF_SHRINK_COEFF" -msgstr "Shrink coef." - -msgid "SMESHGUI::PREF_TAB_SELECTION" -msgstr "Selection" - -msgid "SMESHGUI::PREF_GROUP_SELECTION" -msgstr "Selection" - -msgid "SMESHGUI::PREF_GROUP_PRESELECTION" -msgstr "Preselection" - -msgid "SMESHGUI::PREF_OBJECT_COLOR" -msgstr "Object color" - -msgid "SMESHGUI::PREF_ELEMENT_COLOR" -msgstr "Element color" - -msgid "SMESHGUI::PREF_HIGHLIGHT_COLOR" -msgstr "Highlight color" - -msgid "SMESHGUI::PREF_NODES" -msgstr "Nodes" - -msgid "SMESHGUI::PREF_ELEMENTS" -msgstr "Elements" - -msgid "SMESHGUI::PREF_DISPLAY_MODE" -msgstr "Display mode" - -#----------------------------------------------------------- - -msgid "SMESHGUI_MeshDlg::DIM_1D" -msgstr "1D" - -msgid "SMESHGUI_MeshDlg::DIM_2D" -msgstr "2D" - -msgid "SMESHGUI_MeshDlg::DIM_3D" -msgstr "3D" - -msgid "SMESHGUI_MeshDlg::NAME" -msgstr "Name" - -msgid "SMESHGUI_MeshDlg::MESH" -msgstr "Mesh" - -msgid "SMESHGUI_MeshDlg::GEOMETRY" -msgstr "Geometry" - -msgid "SMESHGUI_MeshDlg::CREATE_MESH" -msgstr "Create mesh" - -msgid "SMESHGUI_MeshDlg::CREATE_SUBMESH" -msgstr "Create sub-mesh" - -msgid "SMESHGUI_MeshDlg::EDIT_MESH_SUBMESH" -msgstr "Edit mesh/sub-mesh" - -#----------------------------------------------------------- - -msgid "SMESHGUI_MeshTab::ALGORITHM" -msgstr "Algorithm" - -msgid "SMESHGUI_MeshTab::HYPOTHESIS" -msgstr "Hypothesis" - -msgid "SMESHGUI_MeshTab::ADD_HYPOTHESIS" -msgstr "Add. Hypothesis" - -msgid "SMESHGUI_MeshTab::NONE" -msgstr "" - -#----------------------------------------------------------- - -msgid "SMESHGUI_MeshOp::NAME_OF_MESH_IS_EMPTY" -msgstr "Name of mesh is empty\nPlease enter valid name and try again" - -msgid "SMESHGUI_MeshOp::NAME_OF_SUBMESH_IS_EMPTY" -msgstr "Name of submesh is empty\nPlease enter valid name and try again" - -msgid "SMESHGUI_MeshOp::HYPOTHESES_AND_ALGORITHMS_ARE_NOT_DEFINED" -msgstr "Hypotheses and algorithms are not defined" - -msgid "SMESHGUI_MeshOp::ALGORITHM_WITHOUT_HYPOTHESIS" -msgstr "Algorithm is defined for %1 dimension but hypothesis is not defined" - -msgid "SMESHGUI_MeshOp::HYPOTHESIS_WITHOUT_ALGORITHM" -msgstr "Hypothesis is defined for %1 dimension but algorithm is not defined" - -msgid "SMESHGUI_MeshOp::GEOMETRY_OBJECT_IS_NULL" -msgstr "Geometry object is null" - -msgid "SMESHGUI_MeshOp::GEOMETRY_OBJECT_IS_NOT_DEFINED" -msgstr "Geometry object is not defined\nPlease specify it and try again" - -msgid "SMESHGUI_MeshOp::THERE_IS_NO_OBJECT_FOR_EDITING" -msgstr "There is no object for editing. Please\nselect mesh or sub-mesh and try again" - -msgid "SMESHGUI_MeshOp::MESH_IS_NULL" -msgstr "Mesh is null" - -msgid "SMESHGUI_MeshOp::MESH_IS_NOT_DEFINED" -msgstr "Mesh is not defined\nPlease specify it and try again" - - - - - - - - - - - - - - - diff --git a/src/SMESH_I/Makefile.in b/src/SMESH_I/Makefile.in index 3954979d1..f5fe81b86 100644 --- a/src/SMESH_I/Makefile.in +++ b/src/SMESH_I/Makefile.in @@ -97,7 +97,7 @@ LDFLAGSFORBIN += -lSMDS -lSMESHDS \ -L${MED_ROOT_DIR}/lib/salome -lMEDWrapper -lMEDWrapperBase -lMEDWrapper_V2_1 -lMEDWrapper_V2_2 \ -lMeshDriver -lMeshDriverMED -lMeshDriverUNV -lMeshDriverDAT -lMeshDriverSTL \ -L${KERNEL_ROOT_DIR}/lib/salome -lSalomeContainer -lSalomeNS -lRegistry -lSalomeResourcesManager \ - -lOpUtil -lSALOMELocalTrace -lSALOMETraceCollector -lSalomeNotification -lCASCatch \ + -lOpUtil -lSALOMELocalTrace -lSALOMEBasics -lSalomeNotification -lCASCatch \ -lSalomeHDFPersist -lSalomeLifeCycleCORBA -lTOOLSDS -lSalomeGenericObj \ -L${GEOM_ROOT_DIR}/lib/salome -lGEOMClient -lSMESHimpl -lSMESHControls -lNMTTools -lNMTDS \ -L${CASROOT}/lin/lib -lTKCDF -lTKBO -lTKMath diff --git a/src/SMESH_I/SMESH.hxx b/src/SMESH_I/SMESH.hxx deleted file mode 100644 index ea68b0445..000000000 --- a/src/SMESH_I/SMESH.hxx +++ /dev/null @@ -1,56 +0,0 @@ -// SMESH SMESH_I : -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH.hxx -// Author : Michael ZORIN -// Module : SMESH -// $Header: - -#ifndef _SMESH_SMESH_HXX_ -#define _SMESH_SMESH_HXX_ - -// Tags definition -enum { - // Top level - Tag_HypothesisRoot = 1, // hypotheses root - Tag_AlgorithmsRoot = 2, // algorithms root - // Mesh/Submesh - Tag_RefOnShape = 1, // references to shape - Tag_RefOnAppliedHypothesis = 2, // applied hypotheses root - Tag_RefOnAppliedAlgorithms = 3, // applied algorithms root - // Mesh only - Tag_SubMeshOnVertex = 4, // sub-meshes roots by type - Tag_SubMeshOnEdge = 5, // ... - Tag_SubMeshOnWire = 6, // ... - Tag_SubMeshOnFace = 7, // ... - Tag_SubMeshOnShell = 8, // ... - Tag_SubMeshOnSolid = 9, // ... - Tag_SubMeshOnCompound = 10, // ... - Tag_NodeGroups = 11, // Group roots by type - Tag_EdgeGroups = 12, // ... - Tag_FaceGroups = 13, // ... - Tag_VolumeGroups = 14 // ... -}; - -#endif - diff --git a/src/SMESH_I/SMESHEngine.cxx b/src/SMESH_I/SMESHEngine.cxx deleted file mode 100644 index fc1bd440b..000000000 --- a/src/SMESH_I/SMESHEngine.cxx +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -int main(int argc, char** argv) -{ - return 1; -} diff --git a/src/SMESH_I/SMESH_1D_Algo_i.cxx b/src/SMESH_I/SMESH_1D_Algo_i.cxx deleted file mode 100644 index 06f621dc9..000000000 --- a/src/SMESH_I/SMESH_1D_Algo_i.cxx +++ /dev/null @@ -1,89 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_1D_Algo_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "SMESH_1D_Algo_i.hxx" - -#include "utilities.h" - -//============================================================================= -/*! - * SMESH_1D_Algo_i::SMESH_1D_Algo_i - * - * Constructor - */ -//============================================================================= - -SMESH_1D_Algo_i::SMESH_1D_Algo_i( PortableServer::POA_ptr thePOA ) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ), - SMESH_Algo_i( thePOA ) -{ - MESSAGE( "SMESH_1D_Algo_i::SMESH_1D_Algo_i" ); -} - -//============================================================================= -/*! - * SMESH_1D_Algo_i::~SMESH_1D_Algo_i - * - * Destructor - */ -//============================================================================= - -SMESH_1D_Algo_i::~SMESH_1D_Algo_i() -{ - MESSAGE( "SMESH_1D_Algo_i::~SMESH_1D_Algo_i" ); -} - -//================================================================================ -/*! - * \brief Verify whether algorithm supports given entity type - * \param type - dimension (see SMESH::Dimension enumeration) - * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise - * - * Verify whether algorithm supports given entity type (see SMESH::Dimension enumeration) - */ -//================================================================================ -CORBA::Boolean SMESH_1D_Algo_i::IsDimSupported( SMESH::Dimension type ) -{ - return type == SMESH::DIM_1D; -} - - - - - - - - - - - - - - diff --git a/src/SMESH_I/SMESH_1D_Algo_i.hxx b/src/SMESH_I/SMESH_1D_Algo_i.hxx deleted file mode 100644 index 1112a4019..000000000 --- a/src/SMESH_I/SMESH_1D_Algo_i.hxx +++ /dev/null @@ -1,56 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_1D_Algo_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_1D_ALGO_I_HXX_ -#define _SMESH_1D_ALGO_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_Hypothesis) - -#include "SMESH_Algo_i.hxx" - -// ====================================================== -// Generic 1D algorithm -// ====================================================== -class SMESH_1D_Algo_i: - public virtual POA_SMESH::SMESH_1D_Algo, - public virtual SMESH_Algo_i -{ -protected: - // Constructor : placed in protected section to prohibit creation of generic class instance - SMESH_1D_Algo_i( PortableServer::POA_ptr thePOA ); - -public: - // Destructor - virtual ~SMESH_1D_Algo_i(); - - // Verify whether algorithm supports given entity type - CORBA::Boolean IsDimSupported( SMESH::Dimension type ); -}; - -#endif diff --git a/src/SMESH_I/SMESH_2D_Algo_i.cxx b/src/SMESH_I/SMESH_2D_Algo_i.cxx deleted file mode 100644 index 00744eea4..000000000 --- a/src/SMESH_I/SMESH_2D_Algo_i.cxx +++ /dev/null @@ -1,75 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_2D_Algo_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "SMESH_2D_Algo_i.hxx" - -#include "utilities.h" - -//============================================================================= -/*! - * SMESH_2D_Algo_i::SMESH_2D_Algo_i - * - * Constructor - */ -//============================================================================= - -SMESH_2D_Algo_i::SMESH_2D_Algo_i( PortableServer::POA_ptr thePOA ) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ), - SMESH_Algo_i( thePOA ) -{ - MESSAGE( "SMESH_2D_Algo_i::SMESH_2D_Algo_i" ); -} - -//============================================================================= -/*! - * SMESH_2D_Algo_i::~SMESH_2D_Algo_i - * - * Destructor - */ -//============================================================================= - -SMESH_2D_Algo_i::~SMESH_2D_Algo_i() -{ - MESSAGE( "SMESH_2D_Algo_i::~SMESH_2D_Algo_i" ); -} - -//================================================================================ -/*! - * \brief Verify whether algorithm supports given entity type - * \param type - dimension (see SMESH::Dimension enumeration) - * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise - * - * Verify whether algorithm supports given entity type (see SMESH::Dimension enumeration) - */ -//================================================================================ -CORBA::Boolean SMESH_2D_Algo_i::IsDimSupported( SMESH::Dimension type ) -{ - return type == SMESH::DIM_2D; -} diff --git a/src/SMESH_I/SMESH_2D_Algo_i.hxx b/src/SMESH_I/SMESH_2D_Algo_i.hxx deleted file mode 100644 index 58664c9cf..000000000 --- a/src/SMESH_I/SMESH_2D_Algo_i.hxx +++ /dev/null @@ -1,56 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_2D_Algo_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_2D_ALGO_I_HXX_ -#define _SMESH_2D_ALGO_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_Hypothesis) - -#include "SMESH_Algo_i.hxx" - -// ====================================================== -// Generic 2D algorithm -// ====================================================== -class SMESH_2D_Algo_i: - public virtual POA_SMESH::SMESH_2D_Algo, - public virtual SMESH_Algo_i -{ -protected: - // Constructor : placed in protected section to prohibit creation of generic class instance - SMESH_2D_Algo_i( PortableServer::POA_ptr thePOA ); - -public: - // Destructor - virtual ~SMESH_2D_Algo_i(); - - // Verify whether algorithm supports given entity type - CORBA::Boolean IsDimSupported( SMESH::Dimension type ); -}; - -#endif diff --git a/src/SMESH_I/SMESH_3D_Algo_i.cxx b/src/SMESH_I/SMESH_3D_Algo_i.cxx deleted file mode 100644 index 14276fe12..000000000 --- a/src/SMESH_I/SMESH_3D_Algo_i.cxx +++ /dev/null @@ -1,76 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_3D_Algo_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "SMESH_3D_Algo_i.hxx" - -#include "utilities.h" - -//============================================================================= -/*! - * SMESH_3D_Algo_i::SMESH_3D_Algo_i - * - * Constructor - */ -//============================================================================= - -SMESH_3D_Algo_i::SMESH_3D_Algo_i( PortableServer::POA_ptr thePOA ) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ), - SMESH_Algo_i( thePOA ) -{ - MESSAGE( "SMESH_3D_Algo_i::SMESH_3D_Algo_i" ); -} - -//============================================================================= -/*! - * SMESH_3D_Algo_i::~SMESH_3D_Algo_i - * - * Destructor - */ -//============================================================================= - -SMESH_3D_Algo_i::~SMESH_3D_Algo_i() -{ - MESSAGE( "SMESH_3D_Algo_i::~SMESH_3D_Algo_i" ); -} - -//================================================================================ -/*! - * \brief Verify whether algorithm supports given entity type - * \param type - dimension (see SMESH::Dimension enumeration) - * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise - * - * Verify whether algorithm supports given entity type (see SMESH::Dimension enumeration) - */ -//================================================================================ -CORBA::Boolean SMESH_3D_Algo_i::IsDimSupported( SMESH::Dimension type ) -{ - return type == SMESH::DIM_3D; -} - diff --git a/src/SMESH_I/SMESH_3D_Algo_i.hxx b/src/SMESH_I/SMESH_3D_Algo_i.hxx deleted file mode 100644 index 8589e166a..000000000 --- a/src/SMESH_I/SMESH_3D_Algo_i.hxx +++ /dev/null @@ -1,56 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_3D_Algo_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_3D_ALGO_I_HXX_ -#define _SMESH_3D_ALGO_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_Hypothesis) - -#include "SMESH_Algo_i.hxx" - -// ====================================================== -// Generic 3D algorithm -// ====================================================== -class SMESH_3D_Algo_i: - public virtual POA_SMESH::SMESH_3D_Algo, - public virtual SMESH_Algo_i -{ -protected: - // Constructor : placed in protected section to prohibit creation of generic class instance - SMESH_3D_Algo_i( PortableServer::POA_ptr thePOA ); - -public: - // Destructor - virtual ~SMESH_3D_Algo_i(); - - // Verify whether algorithm supports given entity type - CORBA::Boolean IsDimSupported( SMESH::Dimension type ); -}; - -#endif diff --git a/src/SMESH_I/SMESH_Algo_i.cxx b/src/SMESH_I/SMESH_Algo_i.cxx deleted file mode 100644 index a57df7bef..000000000 --- a/src/SMESH_I/SMESH_Algo_i.cxx +++ /dev/null @@ -1,85 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Algo_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "SMESH_Algo_i.hxx" -#include "SMESH_Algo.hxx" - -#include "utilities.h" - -#include -#include - -//============================================================================= -/*! - * SMESH_Algo_i::SMESH_Algo_i - * - * Constructor - */ -//============================================================================= - -SMESH_Algo_i::SMESH_Algo_i( PortableServer::POA_ptr thePOA ) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ) -{ - MESSAGE( "SMESH_Algo_i::SMESH_Algo_i" ); -} - -//============================================================================= -/*! - * SMESH_Algo_i::~SMESH_Algo_i - * - * Destructor - */ -//============================================================================= - -SMESH_Algo_i::~SMESH_Algo_i() -{ - MESSAGE( "SMESH_Algo_i::~SMESH_Algo_i" ); -} - -//============================================================================= -/*! - * SMESH_Algo_i::GetCompatibleHypothesis - * - * Gets list of compatible hypotheses - */ -//============================================================================= - -SMESH::ListOfHypothesisName* SMESH_Algo_i::GetCompatibleHypothesis() -{ - MESSAGE( "SMESH_Algo_i::GetCompatibleHypothesis" ); - SMESH::ListOfHypothesisName_var listOfHypothesis = new SMESH::ListOfHypothesisName; - const vector& hypList = ( ( ::SMESH_Algo* )myBaseImpl )->GetCompatibleHypothesis(); - int nbHyp = hypList.size(); - listOfHypothesis->length( nbHyp ); - for ( int i = 0; i < nbHyp; i++ ) { - listOfHypothesis[ i ] = CORBA::string_dup( hypList[ i ].c_str() ); - } - return listOfHypothesis._retn(); -} diff --git a/src/SMESH_I/SMESH_Algo_i.hxx b/src/SMESH_I/SMESH_Algo_i.hxx deleted file mode 100644 index 21630ec8a..000000000 --- a/src/SMESH_I/SMESH_Algo_i.hxx +++ /dev/null @@ -1,56 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Algo_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_ALGO_I_HXX_ -#define _SMESH_ALGO_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_Hypothesis) - -#include "SMESH_Hypothesis_i.hxx" - -// ====================================================== -// Generic algorithm -// ====================================================== -class SMESH_Algo_i: - public virtual POA_SMESH::SMESH_Algo, - public virtual SMESH_Hypothesis_i -{ -public: - // Constructor : placed in protected section to prohibit creation of generic class instance - SMESH_Algo_i( PortableServer::POA_ptr thePOA ); - -public: - // Destructor - virtual ~SMESH_Algo_i(); - - // Gets list of compatible hypotheses - SMESH::ListOfHypothesisName* GetCompatibleHypothesis(); -}; - -#endif diff --git a/src/SMESH_I/SMESH_DumpPython.cxx b/src/SMESH_I/SMESH_DumpPython.cxx deleted file mode 100644 index 016e21639..000000000 --- a/src/SMESH_I/SMESH_DumpPython.cxx +++ /dev/null @@ -1,683 +0,0 @@ -// File : SMESH_Gen_i_DumpPython.cxx -// Created : Thu Mar 24 17:17:59 2005 -// Author : Julia DOROVSKIKH -// Module : SMESH -// $Header : $ - -#include "SMESH_PythonDump.hxx" -#include "SMESH_Gen_i.hxx" -#include "SMESH_Filter_i.hxx" - -#include -#include - - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - -static TCollection_AsciiString NotPublishedObjectName() -{ - return "__NOT__Published__Object__"; -} - -namespace SMESH -{ - - size_t TPythonDump::myCounter = 0; - - TPythonDump:: - TPythonDump() - { - ++myCounter; - } - TPythonDump:: - ~TPythonDump() - { - if(--myCounter == 0){ - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - SALOMEDS::Study_ptr aStudy = aSMESHGen->GetCurrentStudy(); - if(!aStudy->_is_nil()){ - std::string aString = myStream.str(); - TCollection_AsciiString aCollection(Standard_CString(aString.c_str())); - aSMESHGen->AddToPythonScript(aStudy->StudyId(),aCollection); - if(MYDEBUG) MESSAGE(aString); - } - } - } - - TPythonDump& - TPythonDump:: - operator<<(long int theArg){ - myStream<GetCurrentStudy(); - SALOMEDS::SObject_var aSObject = SMESH_Gen_i::ObjectToSObject(aStudy,theArg); - if(!aSObject->_is_nil()){ - aString = aSObject->GetID(); - }else if(!CORBA::is_nil(theArg)){ - aString = "smeshObj_"; - if ( aSMESHGen->CanPublishInStudy( theArg )) // not published SMESH object - aString += (int) theArg; - else - aString = NotPublishedObjectName(); - } - myStream<GetFunctorType(); - switch(aFunctorType){ - case FT_AspectRatio: - myStream<<"anAspectRatio"; - break; - case FT_AspectRatio3D: - myStream<<"anAspectRatio3D"; - break; - case FT_Warping: - myStream<<"aWarping"; - break; - case FT_MinimumAngle: - myStream<<"aMinimumAngle"; - break; - case FT_Taper: - myStream<<"aTaper"; - break; - case FT_Skew: - myStream<<"aSkew"; - break; - case FT_Area: - myStream<<"aArea"; - break; - case FT_FreeBorders: - myStream<<"aFreeBorders"; - break; - case FT_FreeEdges: - myStream<<"aFreeEdges"; - break; - case FT_MultiConnection: - myStream<<"aMultiConnection"; - break; - case FT_MultiConnection2D: - myStream<<"aMultiConnection2D"; - break; - case FT_Length: - myStream<<"aLength"; - break; - case FT_Length2D: - myStream<<"aLength"; - break; - case FT_BelongToGeom: - myStream<<"aBelongToGeom"; - break; - case FT_BelongToPlane: - myStream<<"aBelongToPlane"; - break; - case FT_BelongToCylinder: - myStream<<"aBelongToCylinder"; - break; - case FT_LyingOnGeom: - myStream<<"aLyingOnGeom"; - break; - case FT_RangeOfIds: - myStream<<"aRangeOfIds"; - break; - case FT_BadOrientedVolume: - myStream<<"aBadOrientedVolume"; - break; - case FT_LessThan: - myStream<<"aLessThan"; - break; - case FT_MoreThan: - myStream<<"aMoreThan"; - break; - case FT_EqualTo: - myStream<<"anEqualTo"; - break; - case FT_LogicalNOT: - myStream<<"aLogicalNOT"; - break; - case FT_LogicalAND: - myStream<<"aLogicalAND"; - break; - case FT_LogicalOR: - myStream<<"aLogicalOR"; - break; - case FT_Undefined: - myStream<<"anUndefined"; - break; - } - myStream<FindComponent(ComponentDataType()); - if (CORBA::is_nil(aSO)) - return new Engines::TMPFile(0); - - // Map study entries to object names - Resource_DataMapOfAsciiStringAsciiString aMap; - Resource_DataMapOfAsciiStringAsciiString aMapNames; - TCollection_AsciiString s ("qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM0987654321_"); - - SALOMEDS::ChildIterator_var Itr = aStudy->NewChildIterator(aSO); - for (Itr->InitEx(true); Itr->More(); Itr->Next()) { - SALOMEDS::SObject_var aValue = Itr->Value(); - CORBA::String_var anID = aValue->GetID(); - CORBA::String_var aName = aValue->GetName(); - TCollection_AsciiString aGUIName ( (char*) aName.in() ); - TCollection_AsciiString anEnrty ( (char*) anID.in() ); - if (aGUIName.Length() > 0) { - aMapNames.Bind( anEnrty, aGUIName ); - aMap.Bind( anEnrty, aGUIName ); - } - } - - // Get trace of restored study - //SALOMEDS::SObject_var aSO = SMESH_Gen_i::ObjectToSObject(theStudy, _this()); - SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder(); - SALOMEDS::GenericAttribute_var anAttr = - aStudyBuilder->FindOrCreateAttribute(aSO, "AttributePythonObject"); - - char* oldValue = SALOMEDS::AttributePythonObject::_narrow(anAttr)->GetObject(); - TCollection_AsciiString aSavedTrace (oldValue); - - // Add trace of API methods calls and replace study entries by names - //TCollection_AsciiString aScript = - // SALOMEDSImpl_Study::GetDumpStudyComment("SMESH") + "\n\n" + - // DumpPython_impl(aStudy->StudyId(), aMap, aMapNames, isPublished, isValidScript, aSavedTrace); - TCollection_AsciiString aScript = - "### This file is generated by SALOME automatically by dump python functionality of SMESH component\n\n"; - aScript += DumpPython_impl(aStudy->StudyId(), aMap, aMapNames, - isPublished, isValidScript, aSavedTrace); - - int aLen = aScript.Length(); - unsigned char* aBuffer = new unsigned char[aLen+1]; - strcpy((char*)aBuffer, aScript.ToCString()); - - CORBA::Octet* anOctetBuf = (CORBA::Octet*)aBuffer; - Engines::TMPFile_var aStreamFile = new Engines::TMPFile(aLen+1, aLen+1, anOctetBuf, 1); - - bool hasNotPublishedObjects = aScript.Location( NotPublishedObjectName(), 1, aLen); - isValidScript = isValidScript && !hasNotPublishedObjects; - - return aStreamFile._retn(); -} - -//============================================================================= -/*! - * AddToPythonScript - */ -//============================================================================= -void SMESH_Gen_i::AddToPythonScript (int theStudyID, const TCollection_AsciiString& theString) -{ - if (myPythonScripts.find(theStudyID) == myPythonScripts.end()) { - myPythonScripts[theStudyID] = new TColStd_HSequenceOfAsciiString; - } - myPythonScripts[theStudyID]->Append(theString); -} - -//============================================================================= -/*! - * RemoveLastFromPythonScript - */ -//============================================================================= -void SMESH_Gen_i::RemoveLastFromPythonScript (int theStudyID) -{ - if (myPythonScripts.find(theStudyID) != myPythonScripts.end()) { - int aLen = myPythonScripts[theStudyID]->Length(); - myPythonScripts[theStudyID]->Remove(aLen); - } -} - -//======================================================================= -//function : AddToCurrentPyScript -//purpose : -//======================================================================= - -void SMESH_Gen_i::AddToCurrentPyScript (const TCollection_AsciiString& theString) -{ - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - SALOMEDS::Study_ptr aStudy = aSMESHGen->GetCurrentStudy(); - if (aStudy->_is_nil()) return; - aSMESHGen->AddToPythonScript(aStudy->StudyId(), theString); -} - - -//======================================================================= -//function : AddObject -//purpose : add object to script string -//======================================================================= - -TCollection_AsciiString& SMESH_Gen_i::AddObject(TCollection_AsciiString& theStr, - CORBA::Object_ptr theObject) -{ - TCollection_AsciiString aString("None"); - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - SALOMEDS::SObject_var aSObject = - aSMESHGen->ObjectToSObject(aSMESHGen->GetCurrentStudy(), theObject); - if ( !aSObject->_is_nil() ) { - aString = aSObject->GetID(); - } else if ( !CORBA::is_nil( theObject )) { - aString = "smeshObj_"; - if ( aSMESHGen->CanPublishInStudy( theObject )) // not published SMESH object - aString += (int) theObject; - else - aString = NotPublishedObjectName(); - } - theStr += aString; - return theStr; -} - -//======================================================================= -//function : SavePython -//purpose : -//======================================================================= -void SMESH_Gen_i::SavePython (SALOMEDS::Study_ptr theStudy) -{ - // Dump trace of API methods calls - TCollection_AsciiString aScript = GetNewPythonLines(theStudy->StudyId()); - - // Check contents of PythonObject attribute - SALOMEDS::SObject_var aSO = theStudy->FindComponent(ComponentDataType()); - //SALOMEDS::SObject_var aSO = SMESH_Gen_i::ObjectToSObject(theStudy, _this()); - SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); - SALOMEDS::GenericAttribute_var anAttr = - aStudyBuilder->FindOrCreateAttribute(aSO, "AttributePythonObject"); - - char* oldValue = SALOMEDS::AttributePythonObject::_narrow(anAttr)->GetObject(); - TCollection_AsciiString oldScript (oldValue); - - if (oldScript.Length() > 0) { - oldScript += "\n"; - oldScript += aScript; - } else { - oldScript = aScript; - } - - // Store in PythonObject attribute - SALOMEDS::AttributePythonObject::_narrow(anAttr)->SetObject(oldScript.ToCString(), 1); - - // Clean trace of API methods calls - CleanPythonTrace(theStudy->StudyId()); -} - - -// impl - - -//============================================================================= -/*! - * FindEntries: Returns a sequence of start/end positions of entries in the string - */ -//============================================================================= -Handle(TColStd_HSequenceOfInteger) FindEntries (TCollection_AsciiString& theString) -{ - Handle(TColStd_HSequenceOfInteger) aSeq = new TColStd_HSequenceOfInteger; - Standard_Integer aLen = theString.Length(); - Standard_Boolean isFound = Standard_False; - - char* arr = theString.ToCString(); - Standard_Integer i = 0, j; - - while(i < aLen) { - int c = (int)arr[i]; - j = i+1; - if(c >= 48 && c <= 57) { //Is digit? - - isFound = Standard_False; - while((j < aLen) && ((c >= 48 && c <= 57) || c == 58) ) { //Check if it is an entry - c = (int)arr[j++]; - if(c == 58) isFound = Standard_True; - } - - if (isFound) { - int prev = (i < 1) ? 0 : (int)arr[i - 1]; - // last char should be a diggit, - // previous char should not be '"'. - if (arr[j-2] != 58 && prev != 34) { - aSeq->Append(i+1); // +1 because AsciiString starts from 1 - aSeq->Append(j-1); - } - } - } - - i = j; - } - - return aSeq; -} - -//============================================================================= -/*! - * DumpPython - */ -//============================================================================= -TCollection_AsciiString SMESH_Gen_i::DumpPython_impl - (int theStudyID, - Resource_DataMapOfAsciiStringAsciiString& theObjectNames, - Resource_DataMapOfAsciiStringAsciiString& theNames, - bool isPublished, - bool& aValidScript, - const TCollection_AsciiString& theSavedTrace) -{ - TCollection_AsciiString aScript; - aScript = "def RebuildData(theStudy):"; - aScript += "\n\tsmesh = salome.lcc.FindOrLoadComponent(\"FactoryServer\", \"SMESH\")"; - aScript += "\n\taFilterManager = smesh.CreateFilterManager()"; - if ( isPublished ) - aScript += "\n\tsmesh.SetCurrentStudy(theStudy)"; - else - aScript += "\n\tsmesh.SetCurrentStudy(None)"; - - // Dump trace of restored study - if (theSavedTrace.Length() > 0) { - aScript += "\n"; - aScript += theSavedTrace; - } - - // Dump trace of API methods calls - TCollection_AsciiString aNewLines = GetNewPythonLines(theStudyID); - if (aNewLines.Length() > 0) { - aScript += "\n"; - aScript += aNewLines; - } - - // Find entries to be replaced by names - Handle(TColStd_HSequenceOfInteger) aSeq = FindEntries(aScript); - Standard_Integer aLen = aSeq->Length(); - - if (aLen == 0) - return aScript; - - // Replace entries by the names - GEOM::GEOM_Gen_ptr geom = GetGeomEngine(); - TColStd_SequenceOfAsciiString seqRemoved; - Resource_DataMapOfAsciiStringAsciiString mapRemoved; - Standard_Integer objectCounter = 0, aStart = 1, aScriptLength = aScript.Length(); - TCollection_AsciiString anUpdatedScript, anEntry, aName, aBaseName("smeshObj_"), - allowedChars ("qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM0987654321_"); - - // Collect names of GEOM objects to exclude same names for SMESH objects - GEOM::string_array_var aGeomNames = geom->GetAllDumpNames(); - int ign = 0, nbgn = aGeomNames->length(); - for (; ign < nbgn; ign++) { - aName = aGeomNames[ign]; - theObjectNames.Bind(aName, "1"); - } - - bool importGeom = false; - for (Standard_Integer i = 1; i <= aLen; i += 2) { - anUpdatedScript += aScript.SubString(aStart, aSeq->Value(i) - 1); - anEntry = aScript.SubString(aSeq->Value(i), aSeq->Value(i + 1)); - // is a GEOM object? - aName = geom->GetDumpName( anEntry.ToCString() ); - if (aName.IsEmpty()) { - // is a SMESH object - if (theObjectNames.IsBound(anEntry)) { - // The Object is in Study - aName = theObjectNames.Find(anEntry); - // check validity of aName - bool isValidName = true; - if ( aName.IsIntegerValue() ) { // aName must not start with a digit - aName.Insert( 1, 'a' ); - isValidName = false; - } - int p, p2=1; // replace not allowed chars - while ((p = aName.FirstLocationNotInSet(allowedChars, p2, aName.Length()))) { - aName.SetValue(p, '_'); - p2=p; - isValidName = false; - } - if (theObjectNames.IsBound(aName) && anEntry != theObjectNames(aName)) { - // diff objects have same name - make a new name by appending a digit - TCollection_AsciiString aName2; - Standard_Integer i = 0; - do { - aName2 = aName + "_" + ++i; - } while (theObjectNames.IsBound(aName2) && anEntry != theObjectNames(aName2)); - aName = aName2; - isValidName = false; - } - if ( !isValidName ) - theObjectNames(anEntry) = aName; - - } else { - // Removed Object - do { - aName = aBaseName + TCollection_AsciiString(++objectCounter); - } while (theObjectNames.IsBound(aName)); - seqRemoved.Append(aName); - mapRemoved.Bind(anEntry, "1"); - theObjectNames.Bind(anEntry, aName); - } - theObjectNames.Bind(aName, anEntry); // to detect same name of diff objects - } - else - { - importGeom = true; - } - anUpdatedScript += aName; - aStart = aSeq->Value(i + 1) + 1; - } - - // set initial part of aSript - TCollection_AsciiString initPart = "import salome, SMESH, StdMeshers\n\n"; - if ( importGeom ) - { - initPart += ("import string, os, sys, re\n" - "sys.path.insert( 0, os.path.dirname(__file__) )\n" - "exec(\"from \"+re.sub(\"SMESH$\",\"GEOM\",__name__)+\" import *\")\n\n"); - } - anUpdatedScript.Insert ( 1, initPart ); - - // add final part of aScript - if (aSeq->Value(aLen) < aScriptLength) - anUpdatedScript += aScript.SubString(aSeq->Value(aLen) + 1, aScriptLength); - - // Remove removed objects - anUpdatedScript += "\n\taStudyBuilder = theStudy.NewBuilder()"; - for (int ir = 1; ir <= seqRemoved.Length(); ir++) { - anUpdatedScript += "\n\tSO = theStudy.FindObjectIOR(theStudy.ConvertObjectToIOR("; - anUpdatedScript += seqRemoved.Value(ir); - anUpdatedScript += "))\n\tif SO is not None: aStudyBuilder.RemoveObjectWithChildren(SO)"; - } - - // Set object names - anUpdatedScript += "\n\n\tisGUIMode = "; - anUpdatedScript += isPublished; - anUpdatedScript += "\n\tif isGUIMode:"; - anUpdatedScript += "\n\t\tsmeshgui = salome.ImportComponentGUI(\"SMESH\")"; - anUpdatedScript += "\n\t\tsmeshgui.Init(theStudy._get_StudyId())"; - anUpdatedScript += "\n"; - - TCollection_AsciiString aGUIName; - Resource_DataMapOfAsciiStringAsciiString mapEntries; - for (Standard_Integer i = 1; i <= aLen; i += 2) { - anEntry = aScript.SubString(aSeq->Value(i), aSeq->Value(i + 1)); - aName = geom->GetDumpName( anEntry.ToCString() ); - if (aName.IsEmpty() && // Not a GEOM object - theNames.IsBound(anEntry) && - !mapEntries.IsBound(anEntry) && // Not yet processed - !mapRemoved.IsBound(anEntry)) { // Was not removed - aName = theObjectNames.Find(anEntry); - aGUIName = theNames.Find(anEntry); - mapEntries.Bind(anEntry, aName); - anUpdatedScript += "\n\t\tsmeshgui.SetName(salome.ObjectToID("; - anUpdatedScript += aName + "), \"" + aGUIName + "\")"; - } - } - anUpdatedScript += "\n\n\t\tsalome.sg.updateObjBrowser(0)"; - - anUpdatedScript += "\n\n\tpass\n"; - - aValidScript = true; - - return anUpdatedScript; -} - -//============================================================================= -/*! - * GetNewPythonLines - */ -//============================================================================= -TCollection_AsciiString SMESH_Gen_i::GetNewPythonLines (int theStudyID) -{ - TCollection_AsciiString aScript; - - // Dump trace of API methods calls - if (myPythonScripts.find(theStudyID) != myPythonScripts.end()) { - Handle(TColStd_HSequenceOfAsciiString) aPythonScript = myPythonScripts[theStudyID]; - Standard_Integer istr, aLen = aPythonScript->Length(); - for (istr = 1; istr <= aLen; istr++) { - aScript += "\n\t"; - aScript += aPythonScript->Value(istr); - } - aScript += "\n"; - } - - return aScript; -} - -//============================================================================= -/*! - * CleanPythonTrace - */ -//============================================================================= -void SMESH_Gen_i::CleanPythonTrace (int theStudyID) -{ - TCollection_AsciiString aScript; - - // Clean trace of API methods calls - if (myPythonScripts.find(theStudyID) != myPythonScripts.end()) { - myPythonScripts[theStudyID]->Clear(); - } -} diff --git a/src/SMESH_I/SMESH_Filter_i.cxx b/src/SMESH_I/SMESH_Filter_i.cxx deleted file mode 100644 index 05d5f3848..000000000 --- a/src/SMESH_I/SMESH_Filter_i.cxx +++ /dev/null @@ -1,2730 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Filter_i.cxx -// Author : Alexey Petrov, OCC -// Module : SMESH - - -#include "SMESH_Filter_i.hxx" - -#include "SMESH_Gen_i.hxx" -#include "SMESH_PythonDump.hxx" - -#include "SMDS_Mesh.hxx" -#include "SMDS_MeshNode.hxx" -#include "SMDS_MeshElement.hxx" - -#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 - -using namespace SMESH; -using namespace SMESH::Controls; - - -namespace SMESH -{ - Predicate_i* - GetPredicate( Predicate_ptr thePredicate ) - { - return DownCast(thePredicate); - } -} - - -/* - Class : BelongToGeom - Description : Predicate for verifying whether entiy belong to - specified geometrical support -*/ - -Controls::BelongToGeom::BelongToGeom() -: myMeshDS(NULL), - myType(SMDSAbs_All) -{} - -void Controls::BelongToGeom::SetMesh( const SMDS_Mesh* theMesh ) -{ - myMeshDS = dynamic_cast(theMesh); -} - -void Controls::BelongToGeom::SetGeom( const TopoDS_Shape& theShape ) -{ - myShape = theShape; -} - -static bool IsContains( const SMESHDS_Mesh* theMeshDS, - const TopoDS_Shape& theShape, - const SMDS_MeshElement* theElem, - TopAbs_ShapeEnum theFindShapeEnum, - TopAbs_ShapeEnum theAvoidShapeEnum = TopAbs_SHAPE ) -{ - TopExp_Explorer anExp( theShape,theFindShapeEnum,theAvoidShapeEnum ); - - while( anExp.More() ) - { - const TopoDS_Shape& aShape = anExp.Current(); - if( SMESHDS_SubMesh* aSubMesh = theMeshDS->MeshElements( aShape ) ){ - if( aSubMesh->Contains( theElem ) ) - return true; - } - anExp.Next(); - } - return false; -} - -bool Controls::BelongToGeom::IsSatisfy( long theId ) -{ - if ( myMeshDS == 0 || myShape.IsNull() ) - return false; - - if( myType == SMDSAbs_Node ) - { - if( const SMDS_MeshNode* aNode = myMeshDS->FindNode( theId ) ) - { - const SMDS_PositionPtr& aPosition = aNode->GetPosition(); - SMDS_TypeOfPosition aTypeOfPosition = aPosition->GetTypeOfPosition(); - switch( aTypeOfPosition ) - { - case SMDS_TOP_VERTEX : return IsContains( myMeshDS,myShape,aNode,TopAbs_VERTEX ); - case SMDS_TOP_EDGE : return IsContains( myMeshDS,myShape,aNode,TopAbs_EDGE ); - case SMDS_TOP_FACE : return IsContains( myMeshDS,myShape,aNode,TopAbs_FACE ); - case SMDS_TOP_3DSPACE: return IsContains( myMeshDS,myShape,aNode,TopAbs_SHELL ); - } - } - } - else - { - if( const SMDS_MeshElement* anElem = myMeshDS->FindElement( theId ) ) - { - if( myType == SMDSAbs_All ) - { - return IsContains( myMeshDS,myShape,anElem,TopAbs_EDGE ) || - IsContains( myMeshDS,myShape,anElem,TopAbs_FACE ) || - IsContains( myMeshDS,myShape,anElem,TopAbs_SHELL )|| - IsContains( myMeshDS,myShape,anElem,TopAbs_SOLID ); - } - else if( myType == anElem->GetType() ) - { - switch( myType ) - { - case SMDSAbs_Edge : return IsContains( myMeshDS,myShape,anElem,TopAbs_EDGE ); - case SMDSAbs_Face : return IsContains( myMeshDS,myShape,anElem,TopAbs_FACE ); - case SMDSAbs_Volume: return IsContains( myMeshDS,myShape,anElem,TopAbs_SHELL )|| - IsContains( myMeshDS,myShape,anElem,TopAbs_SOLID ); - } - } - } - } - - return false; -} - -void Controls::BelongToGeom::SetType( SMDSAbs_ElementType theType ) -{ - myType = theType; -} - -SMDSAbs_ElementType Controls::BelongToGeom::GetType() const -{ - return myType; -} - -TopoDS_Shape Controls::BelongToGeom::GetShape() -{ - return myShape; -} - -const SMESHDS_Mesh* -Controls::BelongToGeom:: -GetMeshDS() const -{ - return myMeshDS; -} - -/* - Class : LyingOnGeom - Description : Predicate for verifying whether entiy lying or partially lying on - specified geometrical support -*/ - -Controls::LyingOnGeom::LyingOnGeom() -: myMeshDS(NULL), - myType(SMDSAbs_All) -{} - -void Controls::LyingOnGeom::SetMesh( const SMDS_Mesh* theMesh ) -{ - myMeshDS = dynamic_cast(theMesh); -} - -void Controls::LyingOnGeom::SetGeom( const TopoDS_Shape& theShape ) -{ - myShape = theShape; -} - -bool Controls::LyingOnGeom::IsSatisfy( long theId ) -{ - if ( myMeshDS == 0 || myShape.IsNull() ) - return false; - - if( myType == SMDSAbs_Node ) - { - if( const SMDS_MeshNode* aNode = myMeshDS->FindNode( theId ) ) - { - const SMDS_PositionPtr& aPosition = aNode->GetPosition(); - SMDS_TypeOfPosition aTypeOfPosition = aPosition->GetTypeOfPosition(); - switch( aTypeOfPosition ) - { - case SMDS_TOP_VERTEX : return IsContains( myMeshDS,myShape,aNode,TopAbs_VERTEX ); - case SMDS_TOP_EDGE : return IsContains( myMeshDS,myShape,aNode,TopAbs_EDGE ); - case SMDS_TOP_FACE : return IsContains( myMeshDS,myShape,aNode,TopAbs_FACE ); - case SMDS_TOP_3DSPACE: return IsContains( myMeshDS,myShape,aNode,TopAbs_SHELL ); - } - } - } - else - { - if( const SMDS_MeshElement* anElem = myMeshDS->FindElement( theId ) ) - { - if( myType == SMDSAbs_All ) - { - return Contains( myMeshDS,myShape,anElem,TopAbs_EDGE ) || - Contains( myMeshDS,myShape,anElem,TopAbs_FACE ) || - Contains( myMeshDS,myShape,anElem,TopAbs_SHELL )|| - Contains( myMeshDS,myShape,anElem,TopAbs_SOLID ); - } - else if( myType == anElem->GetType() ) - { - switch( myType ) - { - case SMDSAbs_Edge : return Contains( myMeshDS,myShape,anElem,TopAbs_EDGE ); - case SMDSAbs_Face : return Contains( myMeshDS,myShape,anElem,TopAbs_FACE ); - case SMDSAbs_Volume: return Contains( myMeshDS,myShape,anElem,TopAbs_SHELL )|| - Contains( myMeshDS,myShape,anElem,TopAbs_SOLID ); - } - } - } - } - - return false; -} - -void Controls::LyingOnGeom::SetType( SMDSAbs_ElementType theType ) -{ - myType = theType; -} - -SMDSAbs_ElementType Controls::LyingOnGeom::GetType() const -{ - return myType; -} - -TopoDS_Shape Controls::LyingOnGeom::GetShape() -{ - return myShape; -} - -const SMESHDS_Mesh* -Controls::LyingOnGeom:: -GetMeshDS() const -{ - return myMeshDS; -} - -bool Controls::LyingOnGeom::Contains( const SMESHDS_Mesh* theMeshDS, - const TopoDS_Shape& theShape, - const SMDS_MeshElement* theElem, - TopAbs_ShapeEnum theFindShapeEnum, - TopAbs_ShapeEnum theAvoidShapeEnum ) -{ - if (IsContains(theMeshDS, theShape, theElem, theFindShapeEnum, theAvoidShapeEnum)) - return true; - - TopTools_IndexedMapOfShape aSubShapes; - TopExp::MapShapes( theShape, aSubShapes ); - - for (int i = 1; i <= aSubShapes.Extent(); i++) - { - const TopoDS_Shape& aShape = aSubShapes.FindKey(i); - - if( SMESHDS_SubMesh* aSubMesh = theMeshDS->MeshElements( aShape ) ){ - if( aSubMesh->Contains( theElem ) ) - return true; - - SMDS_NodeIteratorPtr aNodeIt = aSubMesh->GetNodes(); - while ( aNodeIt->more() ) - { - const SMDS_MeshNode* aNode = static_cast(aNodeIt->next()); - SMDS_ElemIteratorPtr anElemIt = aNode->GetInverseElementIterator(); - while ( anElemIt->more() ) - { - const SMDS_MeshElement* anElement = static_cast(anElemIt->next()); - if (anElement == theElem) - return true; - } - } - } - } - return false; -} - - -/* - AUXILIARY METHODS -*/ - -inline -const SMDS_Mesh* -MeshPtr2SMDSMesh( SMESH_Mesh_ptr theMesh ) -{ - SMESH_Mesh_i* anImplPtr = DownCast(theMesh); - return anImplPtr ? anImplPtr->GetImpl().GetMeshDS() : 0; -} - -inline -SMESH::long_array* -toArray( const TColStd_ListOfInteger& aList ) -{ - SMESH::long_array_var anArray = new SMESH::long_array; - anArray->length( aList.Extent() ); - TColStd_ListIteratorOfListOfInteger anIter( aList ); - int i = 0; - for( ; anIter.More(); anIter.Next() ) - anArray[ i++ ] = anIter.Value(); - - return anArray._retn(); -} - -inline -SMESH::double_array* -toArray( const TColStd_ListOfReal& aList ) -{ - SMESH::double_array_var anArray = new SMESH::double_array; - anArray->length( aList.Extent() ); - TColStd_ListIteratorOfListOfReal anIter( aList ); - int i = 0; - for( ; anIter.More(); anIter.Next() ) - anArray[ i++ ] = anIter.Value(); - - return anArray._retn(); -} - -static SMESH::Filter::Criterion createCriterion() -{ - SMESH::Filter::Criterion aCriterion; - - aCriterion.Type = FT_Undefined; - aCriterion.Compare = FT_Undefined; - aCriterion.Threshold = 0; - aCriterion.UnaryOp = FT_Undefined; - aCriterion.BinaryOp = FT_Undefined; - aCriterion.ThresholdStr = ""; - aCriterion.Tolerance = Precision::Confusion(); - aCriterion.TypeOfElement = SMESH::ALL; - aCriterion.Precision = -1; - - return aCriterion; -} - -static TopoDS_Shape getShapeByName( const char* theName ) -{ - if ( theName != 0 ) - { - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - SALOMEDS::Study_ptr aStudy = aSMESHGen->GetCurrentStudy(); - if ( aStudy != 0 ) - { - SALOMEDS::Study::ListOfSObject_var aList = - aStudy->FindObjectByName( theName, "GEOM" ); - if ( aList->length() > 0 ) - { - 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(); - TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, aGeomObj ); - return aLocShape; - } - } - } - } - return TopoDS_Shape(); -} - - - -/* - FUNCTORS -*/ - -/* - Class : Functor_i - Description : An abstact class for all functors -*/ -Functor_i::Functor_i(): - SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() ) -{ - PortableServer::ObjectId_var anObjectId = - SMESH_Gen_i::GetPOA()->activate_object( this ); -} - -Functor_i::~Functor_i() -{ - TPythonDump()<SetMesh( MeshPtr2SMDSMesh( theMesh ) ); - TPythonDump()<GetType(); -} - - -/* - Class : NumericalFunctor_i - Description : Base class for numerical functors -*/ -CORBA::Double NumericalFunctor_i::GetValue( CORBA::Long theId ) -{ - return myNumericalFunctorPtr->GetValue( theId ); -} - -void NumericalFunctor_i::SetPrecision( CORBA::Long thePrecision ) -{ - myNumericalFunctorPtr->SetPrecision( thePrecision ); - TPythonDump()<GetPrecision(); -} - -Controls::NumericalFunctorPtr NumericalFunctor_i::GetNumericalFunctor() -{ - return myNumericalFunctorPtr; -} - - -/* - Class : SMESH_MinimumAngle - Description : Functor for calculation of minimum angle -*/ -MinimumAngle_i::MinimumAngle_i() -{ - myNumericalFunctorPtr.reset( new Controls::MinimumAngle() ); - myFunctorPtr = myNumericalFunctorPtr; -} - -FunctorType MinimumAngle_i::GetFunctorType() -{ - return SMESH::FT_MinimumAngle; -} - - -/* - Class : AspectRatio - Description : Functor for calculating aspect ratio -*/ -AspectRatio_i::AspectRatio_i() -{ - myNumericalFunctorPtr.reset( new Controls::AspectRatio() ); - myFunctorPtr = myNumericalFunctorPtr; -} - -FunctorType AspectRatio_i::GetFunctorType() -{ - return SMESH::FT_AspectRatio; -} - - -/* - Class : AspectRatio3D - Description : Functor for calculating aspect ratio 3D -*/ -AspectRatio3D_i::AspectRatio3D_i() -{ - myNumericalFunctorPtr.reset( new Controls::AspectRatio3D() ); - myFunctorPtr = myNumericalFunctorPtr; -} - -FunctorType AspectRatio3D_i::GetFunctorType() -{ - return SMESH::FT_AspectRatio3D; -} - - -/* - Class : Warping_i - Description : Functor for calculating warping -*/ -Warping_i::Warping_i() -{ - myNumericalFunctorPtr.reset( new Controls::Warping() ); - myFunctorPtr = myNumericalFunctorPtr; -} - -FunctorType Warping_i::GetFunctorType() -{ - return SMESH::FT_Warping; -} - - -/* - Class : Taper_i - Description : Functor for calculating taper -*/ -Taper_i::Taper_i() -{ - myNumericalFunctorPtr.reset( new Controls::Taper() ); - myFunctorPtr = myNumericalFunctorPtr; -} - -FunctorType Taper_i::GetFunctorType() -{ - return SMESH::FT_Taper; -} - - -/* - Class : Skew_i - Description : Functor for calculating skew in degrees -*/ -Skew_i::Skew_i() -{ - myNumericalFunctorPtr.reset( new Controls::Skew() ); - myFunctorPtr = myNumericalFunctorPtr; -} - -FunctorType Skew_i::GetFunctorType() -{ - return SMESH::FT_Skew; -} - -/* - Class : Area_i - Description : Functor for calculating area -*/ -Area_i::Area_i() -{ - myNumericalFunctorPtr.reset( new Controls::Area() ); - myFunctorPtr = myNumericalFunctorPtr; -} - -FunctorType Area_i::GetFunctorType() -{ - return SMESH::FT_Area; -} - -/* - Class : Length_i - Description : Functor for calculating length off edge -*/ -Length_i::Length_i() -{ - myNumericalFunctorPtr.reset( new Controls::Length() ); - myFunctorPtr = myNumericalFunctorPtr; -} - -FunctorType Length_i::GetFunctorType() -{ - return SMESH::FT_Length; -} - -/* - Class : Length2D_i - Description : Functor for calculating length of edge -*/ -Length2D_i::Length2D_i() -{ - myNumericalFunctorPtr.reset( new Controls::Length2D() ); - myFunctorPtr = myNumericalFunctorPtr; -} - -FunctorType Length2D_i::GetFunctorType() -{ - return SMESH::FT_Length2D; -} - -SMESH::Length2D::Values* Length2D_i::GetValues() -{ - INFOS("Length2D_i::GetValues"); - SMESH::Controls::Length2D::TValues aValues; - myLength2DPtr->GetValues( aValues ); - - long i = 0, iEnd = aValues.size(); - - SMESH::Length2D::Values_var aResult = new SMESH::Length2D::Values(iEnd); - - SMESH::Controls::Length2D::TValues::const_iterator anIter; - for ( anIter = aValues.begin() ; anIter != aValues.end(); anIter++, i++ ) - { - const SMESH::Controls::Length2D::Value& aVal = *anIter; - SMESH::Length2D::Value &aValue = aResult[ i ]; - - aValue.myLength = aVal.myLength; - aValue.myPnt1 = aVal.myPntId[ 0 ]; - aValue.myPnt2 = aVal.myPntId[ 1 ]; - - } - - INFOS("Length2D_i::GetValuess~"); - return aResult._retn(); -} - -/* - Class : MultiConnection_i - Description : Functor for calculating number of faces conneted to the edge -*/ -MultiConnection_i::MultiConnection_i() -{ - myNumericalFunctorPtr.reset( new Controls::MultiConnection() ); - myFunctorPtr = myNumericalFunctorPtr; -} - -FunctorType MultiConnection_i::GetFunctorType() -{ - return SMESH::FT_MultiConnection; -} - -/* - Class : MultiConnection2D_i - Description : Functor for calculating number of faces conneted to the edge -*/ -MultiConnection2D_i::MultiConnection2D_i() -{ - myNumericalFunctorPtr.reset( new Controls::MultiConnection2D() ); - myFunctorPtr = myNumericalFunctorPtr; -} - -FunctorType MultiConnection2D_i::GetFunctorType() -{ - return SMESH::FT_MultiConnection2D; -} - -SMESH::MultiConnection2D::Values* MultiConnection2D_i::GetValues() -{ - INFOS("MultiConnection2D_i::GetValues"); - SMESH::Controls::MultiConnection2D::MValues aValues; - myMulticonnection2DPtr->GetValues( aValues ); - - long i = 0, iEnd = aValues.size(); - - SMESH::MultiConnection2D::Values_var aResult = new SMESH::MultiConnection2D::Values(iEnd); - - SMESH::Controls::MultiConnection2D::MValues::const_iterator anIter; - for ( anIter = aValues.begin() ; anIter != aValues.end(); anIter++, i++ ) - { - const SMESH::Controls::MultiConnection2D::Value& aVal = (*anIter).first; - SMESH::MultiConnection2D::Value &aValue = aResult[ i ]; - - aValue.myPnt1 = aVal.myPntId[ 0 ]; - aValue.myPnt2 = aVal.myPntId[ 1 ]; - aValue.myNbConnects = (*anIter).second; - - } - - INFOS("Multiconnection2D_i::GetValuess~"); - return aResult._retn(); -} - -/* - PREDICATES -*/ - - -/* - Class : Predicate_i - Description : Base class for all predicates -*/ -CORBA::Boolean Predicate_i::IsSatisfy( CORBA::Long theId ) -{ - return myPredicatePtr->IsSatisfy( theId ); -} - -Controls::PredicatePtr Predicate_i::GetPredicate() -{ - return myPredicatePtr; -} - -/* - Class : BadOrientedVolume_i - Description : Verify whether a mesh volume is incorrectly oriented from - the point of view of MED convention -*/ -BadOrientedVolume_i::BadOrientedVolume_i() -{ - Controls::PredicatePtr control( new Controls::BadOrientedVolume() ); - myFunctorPtr = myPredicatePtr = control; -}; - -FunctorType BadOrientedVolume_i::GetFunctorType() -{ - return SMESH::FT_BadOrientedVolume; -} - -/* - Class : BelongToGeom_i - Description : Predicate for selection on geometrical support -*/ -BelongToGeom_i::BelongToGeom_i() -{ - myBelongToGeomPtr.reset( new Controls::BelongToGeom() ); - myFunctorPtr = myPredicatePtr = myBelongToGeomPtr; - myShapeName = 0; -} - -BelongToGeom_i::~BelongToGeom_i() -{ - delete myShapeName; -} - -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(); - TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom ); - myBelongToGeomPtr->SetGeom( aLocShape ); - TPythonDump()<SetGeom( theShape ); -} - -void BelongToGeom_i::SetElementType(ElementType theType){ - myBelongToGeomPtr->SetType(SMDSAbs_ElementType(theType)); - TPythonDump()<SetGeom( getShapeByName( myShapeName ) ); - TPythonDump()<_is_nil() ) - return; - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - GEOM::GEOM_Gen_var aGEOMGen = SMESH_Gen_i::GetGeomEngine(); - TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom ); - - if ( aLocShape.ShapeType() == TopAbs_FACE ) - { - Handle(Geom_Surface) aSurf = BRep_Tool::Surface( TopoDS::Face( aLocShape ) ); - if ( !aSurf.IsNull() && aSurf->DynamicType() == mySurfaceType ) - { - myElementsOnSurfacePtr->SetSurface( aLocShape, (SMDSAbs_ElementType)theType ); - return; - } - } - - myElementsOnSurfacePtr->SetSurface( TopoDS_Shape(), (SMDSAbs_ElementType)theType ); - TPythonDump()<SetSurface( getShapeByName( myShapeName ), (SMDSAbs_ElementType)theType ); - TPythonDump()<SetTolerance( theToler ); - TPythonDump()<GetTolerance(); -} - -/* - Class : BelongToPlane_i - Description : Verify whether mesh element lie in pointed Geom planar object -*/ - -BelongToPlane_i::BelongToPlane_i() -: BelongToSurface_i( STANDARD_TYPE( Geom_Plane ) ) -{ -} - -void BelongToPlane_i::SetPlane( GEOM::GEOM_Object_ptr theGeom, ElementType theType ) -{ - BelongToSurface_i::SetSurface( theGeom, theType ); - TPythonDump()<_is_nil() ) - return; - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - GEOM::GEOM_Gen_var aGEOMGen = SMESH_Gen_i::GetGeomEngine(); - TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom ); - myLyingOnGeomPtr->SetGeom( aLocShape ); - TPythonDump()<SetGeom( theShape ); -} - -void LyingOnGeom_i::SetElementType(ElementType theType){ - myLyingOnGeomPtr->SetType(SMDSAbs_ElementType(theType)); - TPythonDump()<SetGeom( getShapeByName( myShapeName ) ); - TPythonDump()<GetBoreders( aBorders ); - - long i = 0, iEnd = aBorders.size(); - - SMESH::FreeEdges::Borders_var aResult = new SMESH::FreeEdges::Borders(iEnd); - - SMESH::Controls::FreeEdges::TBorders::const_iterator anIter; - for ( anIter = aBorders.begin() ; anIter != aBorders.end(); anIter++, i++ ) - { - const SMESH::Controls::FreeEdges::Border& aBord = *anIter; - SMESH::FreeEdges::Border &aBorder = aResult[ i ]; - - aBorder.myElemId = aBord.myElemId; - aBorder.myPnt1 = aBord.myPntId[ 0 ]; - aBorder.myPnt2 = aBord.myPntId[ 1 ]; - } - - INFOS("FreeEdges_i::GetBorders~"); - return aResult._retn(); -} - -FunctorType FreeEdges_i::GetFunctorType() -{ - return SMESH::FT_FreeEdges; -} - -/* - Class : RangeOfIds_i - Description : Predicate for Range of Ids. - Range may be specified with two ways. - 1. Using AddToRange method - 2. With SetRangeStr method. Parameter of this method is a string - like as "1,2,3,50-60,63,67,70-" -*/ - -RangeOfIds_i::RangeOfIds_i() -{ - myRangeOfIdsPtr.reset( new Controls::RangeOfIds() ); - myFunctorPtr = myPredicatePtr = myRangeOfIdsPtr; -} - -void RangeOfIds_i::SetRange( const SMESH::long_array& theIds ) -{ - CORBA::Long iEnd = theIds.length(); - for ( CORBA::Long i = 0; i < iEnd; i++ ) - myRangeOfIdsPtr->AddToRange( theIds[ i ] ); - TPythonDump()<SetRangeStr( - TCollection_AsciiString( (Standard_CString)theRange ) ); -} - -char* RangeOfIds_i::GetRangeStr() -{ - TCollection_AsciiString aStr; - myRangeOfIdsPtr->GetRangeStr( aStr ); - return CORBA::string_dup( aStr.ToCString() ); -} - -void RangeOfIds_i::SetElementType( ElementType theType ) -{ - myRangeOfIdsPtr->SetType( SMDSAbs_ElementType( theType ) ); - TPythonDump()<Destroy(); -} - -void Comparator_i::SetMargin( CORBA::Double theValue ) -{ - myComparatorPtr->SetMargin( theValue ); - TPythonDump()<GetMargin(); -} - -void Comparator_i::SetNumFunctor( NumericalFunctor_ptr theFunct ) -{ - if ( myNumericalFunctor ) - myNumericalFunctor->Destroy(); - - myNumericalFunctor = DownCast(theFunct); - - if ( myNumericalFunctor ) - { - myComparatorPtr->SetNumFunctor( myNumericalFunctor->GetNumericalFunctor() ); - myNumericalFunctor->Register(); - TPythonDump()<" -*/ -MoreThan_i::MoreThan_i() -{ - myComparatorPtr.reset( new Controls::MoreThan() ); - myFunctorPtr = myPredicatePtr = myComparatorPtr; -} - -FunctorType MoreThan_i::GetFunctorType() -{ - return SMESH::FT_MoreThan; -} - - -/* - Class : EqualTo_i - Description : Comparator "=" -*/ -EqualTo_i::EqualTo_i() -: myEqualToPtr( new Controls::EqualTo() ) -{ - myFunctorPtr = myPredicatePtr = myComparatorPtr = myEqualToPtr; -} - -void EqualTo_i::SetTolerance( CORBA::Double theToler ) -{ - myEqualToPtr->SetTolerance( theToler ); - TPythonDump()<GetTolerance(); -} - -FunctorType EqualTo_i::GetFunctorType() -{ - return SMESH::FT_EqualTo; -} - -/* - Class : LogicalNOT_i - Description : Logical NOT predicate -*/ -LogicalNOT_i::LogicalNOT_i() -: myPredicate( NULL ), - myLogicalNOTPtr( new Controls::LogicalNOT() ) -{ - myFunctorPtr = myPredicatePtr = myLogicalNOTPtr; -} - -LogicalNOT_i::~LogicalNOT_i() -{ - if ( myPredicate ) - myPredicate->Destroy(); -} - -void LogicalNOT_i::SetPredicate( Predicate_ptr thePredicate ) -{ - if ( myPredicate ) - myPredicate->Destroy(); - - myPredicate = SMESH::GetPredicate(thePredicate); - - if ( myPredicate ){ - myLogicalNOTPtr->SetPredicate(myPredicate->GetPredicate()); - myPredicate->Register(); - TPythonDump()<Destroy(); - - if ( myPredicate2 ) - myPredicate2->Destroy(); -} - -void LogicalBinary_i::SetMesh( SMESH_Mesh_ptr theMesh ) -{ - if ( myPredicate1 ) - myPredicate1->SetMesh( theMesh ); - - if ( myPredicate2 ) - myPredicate2->SetMesh( theMesh ); -} - -void LogicalBinary_i::SetPredicate1( Predicate_ptr thePredicate ) -{ - if ( myPredicate1 ) - myPredicate1->Destroy(); - - myPredicate1 = SMESH::GetPredicate(thePredicate); - - if ( myPredicate1 ){ - myLogicalBinaryPtr->SetPredicate1(myPredicate1->GetPredicate()); - myPredicate1->Register(); - TPythonDump()<Destroy(); - - myPredicate2 = SMESH::GetPredicate(thePredicate); - - if ( myPredicate2 ){ - myLogicalBinaryPtr->SetPredicate2(myPredicate2->GetPredicate()); - myPredicate2->Register(); - TPythonDump()<activate_object( this ); -} - - -FilterManager_i::~FilterManager_i() -{ - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - TPythonDump()<_this(); - return anObj._retn(); -} - - -/* - FILTER -*/ - -//======================================================================= -// name : Filter_i::Filter_i -// Purpose : Constructor -//======================================================================= -Filter_i::Filter_i() -: myPredicate( NULL ) -{} - -//======================================================================= -// name : Filter_i::~Filter_i -// Purpose : Destructor -//======================================================================= -Filter_i::~Filter_i() -{ - if ( myPredicate ) - myPredicate->Destroy(); - - if(!CORBA::is_nil(myMesh)) - myMesh->Destroy(); - - TPythonDump()<Destroy(); - - myPredicate = SMESH::GetPredicate(thePredicate); - - if ( myPredicate ) - { - myFilter.SetPredicate( myPredicate->GetPredicate() ); - myPredicate->Register(); - TPythonDump()<GetElementType() : SMESH::ALL; -} - -//======================================================================= -// name : Filter_i::SetMesh -// Purpose : Set mesh -//======================================================================= -void -Filter_i:: -SetMesh( SMESH_Mesh_ptr theMesh ) -{ - if(!CORBA::is_nil(theMesh)) - theMesh->Register(); - - if(!CORBA::is_nil(myMesh)) - myMesh->Destroy(); - - myMesh = theMesh; - TPythonDump()<GetPredicate(),theSequence); -} - -void -Filter_i:: -GetElementsId( Predicate_i* thePredicate, - SMESH_Mesh_ptr theMesh, - Controls::Filter::TIdSequence& theSequence ) -{ - if(const SMDS_Mesh* aMesh = MeshPtr2SMDSMesh(theMesh)) - Controls::Filter::GetElementsId(aMesh,thePredicate->GetPredicate(),theSequence); -} - -SMESH::long_array* -Filter_i:: -GetElementsId( SMESH_Mesh_ptr theMesh ) -{ - SMESH::long_array_var anArray = new SMESH::long_array; - if(!CORBA::is_nil(theMesh)){ - Controls::Filter::TIdSequence aSequence; - GetElementsId(myPredicate,theMesh,aSequence); - long i = 0, iEnd = aSequence.size(); - anArray->length( iEnd ); - for ( ; i < iEnd; i++ ) - anArray[ i ] = aSequence[i]; - } - return anArray._retn(); -} - -//======================================================================= -// name : getCriteria -// Purpose : Retrieve criterions from predicate -//======================================================================= -static inline bool getCriteria( Predicate_i* thePred, - SMESH::Filter::Criteria_out theCriteria ) -{ - int aFType = thePred->GetFunctorType(); - - switch ( aFType ) - { - case FT_FreeBorders: - case FT_FreeEdges: - { - CORBA::ULong i = theCriteria->length(); - theCriteria->length( i + 1 ); - - theCriteria[ i ] = createCriterion(); - - theCriteria[ i ].Type = aFType; - theCriteria[ i ].TypeOfElement = thePred->GetElementType(); - return true; - } - case FT_BelongToGeom: - { - BelongToGeom_i* aPred = dynamic_cast( thePred ); - - CORBA::ULong i = theCriteria->length(); - theCriteria->length( i + 1 ); - - theCriteria[ i ] = createCriterion(); - - theCriteria[ i ].Type = FT_BelongToGeom; - theCriteria[ i ].ThresholdStr = aPred->GetShapeName(); - theCriteria[ i ].TypeOfElement = aPred->GetElementType(); - - return true; - } - case FT_BelongToPlane: - case FT_BelongToCylinder: - { - BelongToSurface_i* aPred = dynamic_cast( thePred ); - - CORBA::ULong i = theCriteria->length(); - theCriteria->length( i + 1 ); - - theCriteria[ i ] = createCriterion(); - - theCriteria[ i ].Type = aFType; - theCriteria[ i ].ThresholdStr = aPred->GetShapeName(); - theCriteria[ i ].TypeOfElement = aPred->GetElementType(); - theCriteria[ i ].Tolerance = aPred->GetTolerance(); - - return true; - } - case FT_LyingOnGeom: - { - LyingOnGeom_i* aPred = dynamic_cast( thePred ); - - CORBA::ULong i = theCriteria->length(); - theCriteria->length( i + 1 ); - - theCriteria[ i ] = createCriterion(); - - theCriteria[ i ].Type = FT_LyingOnGeom; - theCriteria[ i ].ThresholdStr = aPred->GetShapeName(); - theCriteria[ i ].TypeOfElement = aPred->GetElementType(); - - return true; - } - case FT_RangeOfIds: - { - RangeOfIds_i* aPred = dynamic_cast( thePred ); - - CORBA::ULong i = theCriteria->length(); - theCriteria->length( i + 1 ); - - theCriteria[ i ] = createCriterion(); - - theCriteria[ i ].Type = FT_RangeOfIds; - theCriteria[ i ].ThresholdStr = aPred->GetRangeStr(); - theCriteria[ i ].TypeOfElement = aPred->GetElementType(); - - return true; - } - case FT_BadOrientedVolume: - { - BadOrientedVolume_i* aPred = dynamic_cast( thePred ); - - CORBA::ULong i = theCriteria->length(); - theCriteria->length( i + 1 ); - - theCriteria[ i ] = createCriterion(); - - theCriteria[ i ].Type = FT_BadOrientedVolume; - theCriteria[ i ].TypeOfElement = aPred->GetElementType(); - - return true; - } - case FT_LessThan: - case FT_MoreThan: - case FT_EqualTo: - { - Comparator_i* aCompar = dynamic_cast( thePred ); - - CORBA::ULong i = theCriteria->length(); - theCriteria->length( i + 1 ); - - theCriteria[ i ] = createCriterion(); - - theCriteria[ i ].Type = aCompar->GetNumFunctor_i()->GetFunctorType(); - theCriteria[ i ].Compare = aFType; - theCriteria[ i ].Threshold = aCompar->GetMargin(); - theCriteria[ i ].TypeOfElement = aCompar->GetElementType(); - - if ( aFType == FT_EqualTo ) - { - EqualTo_i* aCompar = dynamic_cast( thePred ); - theCriteria[ i ].Tolerance = aCompar->GetTolerance(); - } - } - return true; - - case FT_LogicalNOT: - { - Predicate_i* aPred = ( dynamic_cast( thePred ) )->GetPredicate_i(); - getCriteria( aPred, theCriteria ); - theCriteria[ theCriteria->length() - 1 ].UnaryOp = FT_LogicalNOT; - } - return true; - - case FT_LogicalAND: - case FT_LogicalOR: - { - Predicate_i* aPred1 = ( dynamic_cast( thePred ) )->GetPredicate1_i(); - Predicate_i* aPred2 = ( dynamic_cast( thePred ) )->GetPredicate2_i(); - if ( !getCriteria( aPred1, theCriteria ) ) - return false; - theCriteria[ theCriteria->length() - 1 ].BinaryOp = aFType; - return getCriteria( aPred2, theCriteria ); - } - - case FT_Undefined: - return false; - default: - return false; - } -} - -//======================================================================= -// name : Filter_i::GetCriteria -// Purpose : Retrieve criterions from predicate -//======================================================================= -CORBA::Boolean Filter_i::GetCriteria( SMESH::Filter::Criteria_out theCriteria ) -{ - theCriteria = new SMESH::Filter::Criteria; - return myPredicate != 0 ? getCriteria( myPredicate, theCriteria ) : true; -} - -//======================================================================= -// name : Filter_i::SetCriteria -// Purpose : Create new predicate and set criterions in it -//======================================================================= -CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria ) -{ - if ( myPredicate != 0 ) - myPredicate->Destroy(); - - SMESH::FilterManager_i* aFilter = new SMESH::FilterManager_i(); - FilterManager_ptr aFilterMgr = aFilter->_this(); - - // CREATE two lists ( PREDICATES and LOG OP ) - - // Criterion - TPythonDump()<<"aCriteria = []"; - std::list aPredicates; - std::list aBinaries; - for ( int i = 0, n = theCriteria.length(); i < n; i++ ) - { - int aCriterion = theCriteria[ i ].Type; - int aCompare = theCriteria[ i ].Compare; - double aThreshold = theCriteria[ i ].Threshold; - int aUnary = theCriteria[ i ].UnaryOp; - int aBinary = theCriteria[ i ].BinaryOp; - double aTolerance = theCriteria[ i ].Tolerance; - const char* aThresholdStr = theCriteria[ i ].ThresholdStr; - ElementType aTypeOfElem = theCriteria[ i ].TypeOfElement; - long aPrecision = theCriteria[ i ].Precision; - - TPythonDump()<<"aCriteria.append(SMESH.Filter.Criterion("<< - aCriterion<<","<CreateMultiConnection(); - break; - case SMESH::FT_MultiConnection2D: - aFunctor = aFilterMgr->CreateMultiConnection2D(); - break; - case SMESH::FT_Length: - aFunctor = aFilterMgr->CreateLength(); - break; - case SMESH::FT_Length2D: - aFunctor = aFilterMgr->CreateLength2D(); - break; - case SMESH::FT_AspectRatio: - aFunctor = aFilterMgr->CreateAspectRatio(); - break; - case SMESH::FT_AspectRatio3D: - aFunctor = aFilterMgr->CreateAspectRatio3D(); - break; - case SMESH::FT_Warping: - aFunctor = aFilterMgr->CreateWarping(); - break; - case SMESH::FT_MinimumAngle: - aFunctor = aFilterMgr->CreateMinimumAngle(); - break; - case SMESH::FT_Taper: - aFunctor = aFilterMgr->CreateTaper(); - break; - case SMESH::FT_Skew: - aFunctor = aFilterMgr->CreateSkew(); - break; - case SMESH::FT_Area: - aFunctor = aFilterMgr->CreateArea(); - break; - - // Predicates - - case SMESH::FT_FreeBorders: - aPredicate = aFilterMgr->CreateFreeBorders(); - break; - case SMESH::FT_FreeEdges: - aPredicate = aFilterMgr->CreateFreeEdges(); - break; - case SMESH::FT_BelongToGeom: - { - SMESH::BelongToGeom_ptr tmpPred = aFilterMgr->CreateBelongToGeom(); - tmpPred->SetElementType( aTypeOfElem ); - tmpPred->SetShapeName( aThresholdStr ); - aPredicate = tmpPred; - } - break; - case SMESH::FT_BelongToPlane: - case SMESH::FT_BelongToCylinder: - { - SMESH::BelongToSurface_ptr tmpPred; - if ( aCriterion == SMESH::FT_BelongToPlane ) - tmpPred = aFilterMgr->CreateBelongToPlane(); - else - tmpPred = aFilterMgr->CreateBelongToCylinder(); - tmpPred->SetShapeName( aThresholdStr, aTypeOfElem ); - tmpPred->SetTolerance( aTolerance ); - aPredicate = tmpPred; - } - break; - case SMESH::FT_LyingOnGeom: - { - SMESH::LyingOnGeom_ptr tmpPred = aFilterMgr->CreateLyingOnGeom(); - tmpPred->SetElementType( aTypeOfElem ); - tmpPred->SetShapeName( aThresholdStr ); - aPredicate = tmpPred; - } - break; - case SMESH::FT_RangeOfIds: - { - SMESH::RangeOfIds_ptr tmpPred = aFilterMgr->CreateRangeOfIds(); - tmpPred->SetRangeStr( aThresholdStr ); - tmpPred->SetElementType( aTypeOfElem ); - aPredicate = tmpPred; - } - break; - case SMESH::FT_BadOrientedVolume: - { - aPredicate = aFilterMgr->CreateBadOrientedVolume(); - } - break; - - default: - continue; - } - - // Comparator - if ( !aFunctor->_is_nil() && aPredicate->_is_nil() ) - { - SMESH::Comparator_ptr aComparator = SMESH::Comparator::_nil(); - - if ( aCompare == SMESH::FT_LessThan ) - aComparator = aFilterMgr->CreateLessThan(); - else if ( aCompare == SMESH::FT_MoreThan ) - aComparator = aFilterMgr->CreateMoreThan(); - else if ( aCompare == SMESH::FT_EqualTo ) - aComparator = aFilterMgr->CreateEqualTo(); - else - continue; - - aComparator->SetNumFunctor( aFunctor ); - aComparator->SetMargin( aThreshold ); - - if ( aCompare == FT_EqualTo ) - { - SMESH::EqualTo_var anEqualTo = SMESH::EqualTo::_narrow( aComparator ); - anEqualTo->SetTolerance( aTolerance ); - } - - aPredicate = aComparator; - - aFunctor->SetPrecision( aPrecision ); - } - - // Logical not - if ( aUnary == FT_LogicalNOT ) - { - SMESH::LogicalNOT_ptr aNotPred = aFilterMgr->CreateLogicalNOT(); - aNotPred->SetPredicate( aPredicate ); - aPredicate = aNotPred; - } - - // logical op - aPredicates.push_back( aPredicate ); - aBinaries.push_back( aBinary ); - - } // end of for - TPythonDump()< aResList; - - std::list::iterator aPredIter; - std::list::iterator aBinaryIter; - - SMESH::Predicate_ptr aPrevPredicate = SMESH::Predicate::_nil(); - int aPrevBinary = SMESH::FT_Undefined; - - for ( aPredIter = aPredicates.begin(), aBinaryIter = aBinaries.begin(); - aPredIter != aPredicates.end() && aBinaryIter != aBinaries.end(); - ++aPredIter, ++aBinaryIter ) - { - int aCurrBinary = *aBinaryIter; - - SMESH::Predicate_ptr aCurrPred = SMESH::Predicate::_nil(); - - if ( aPrevBinary == SMESH::FT_LogicalAND ) - { - - SMESH::LogicalBinary_ptr aBinaryPred = aFilterMgr->CreateLogicalAND(); - aBinaryPred->SetPredicate1( aPrevPredicate ); - aBinaryPred->SetPredicate2( *aPredIter ); - aCurrPred = aBinaryPred; - } - else - aCurrPred = *aPredIter; - - if ( aCurrBinary != SMESH::FT_LogicalAND ) - aResList.push_back( aCurrPred ); - - aPrevPredicate = aCurrPred; - aPrevBinary = aCurrBinary; - } - - // combine all "OR" operations - - SMESH::Predicate_ptr aResPredicate = SMESH::Predicate::_nil(); - - if ( aResList.size() == 1 ) - aResPredicate = *aResList.begin(); - else if ( aResList.size() > 1 ) - { - std::list::iterator anIter = aResList.begin(); - aResPredicate = *anIter; - anIter++; - for ( ; anIter != aResList.end(); ++anIter ) - { - SMESH::LogicalBinary_ptr aBinaryPred = aFilterMgr->CreateLogicalOR(); - aBinaryPred->SetPredicate1( aResPredicate ); - aBinaryPred->SetPredicate2( *anIter ); - aResPredicate = aBinaryPred; - } - } - - SetPredicate( aResPredicate ); - - return !aResPredicate->_is_nil(); -} - -//======================================================================= -// name : Filter_i::GetPredicate_i -// Purpose : Get implementation of predicate -//======================================================================= -Predicate_i* Filter_i::GetPredicate_i() -{ - return myPredicate; -} - -//======================================================================= -// name : Filter_i::GetPredicate -// Purpose : Get predicate -//======================================================================= -Predicate_ptr Filter_i::GetPredicate() -{ - if ( myPredicate == 0 ) - return SMESH::Predicate::_nil(); - else - { - SMESH::Predicate_var anObj = myPredicate->_this(); - return anObj._retn(); - } -} - -/* - FILTER LIBRARY -*/ - -#define ATTR_TYPE "type" -#define ATTR_COMPARE "compare" -#define ATTR_THRESHOLD "threshold" -#define ATTR_UNARY "unary" -#define ATTR_BINARY "binary" -#define ATTR_THRESHOLD_STR "threshold_str" -#define ATTR_TOLERANCE "tolerance" -#define ATTR_ELEMENT_TYPE "ElementType" - -//======================================================================= -// name : toString -// Purpose : Convert bool to LDOMString -//======================================================================= -static inline LDOMString toString( const bool val ) -{ - return val ? "logical not" : ""; -} - -//======================================================================= -// name : toBool -// Purpose : Convert LDOMString to bool -//======================================================================= -static inline bool toBool( const LDOMString& theStr ) -{ - return theStr.equals( "logical not" ); -} - -//======================================================================= -// name : toString -// Purpose : Convert double to LDOMString -//======================================================================= -static inline LDOMString toString( const double val ) -{ - char a[ 255 ]; - sprintf( a, "%e", val ); - return LDOMString( a ); -} - -//======================================================================= -// name : toDouble -// Purpose : Convert LDOMString to double -//======================================================================= -static inline double toDouble( const LDOMString& theStr ) -{ - return atof( theStr.GetString() ); -} - -//======================================================================= -// name : toString -// Purpose : Convert functor type to LDOMString -//======================================================================= -static inline LDOMString toString( const long theType ) -{ - switch ( theType ) - { - case FT_AspectRatio : return "Aspect ratio"; - case FT_Warping : return "Warping"; - case FT_MinimumAngle : return "Minimum angle"; - case FT_Taper : return "Taper"; - case FT_Skew : return "Skew"; - case FT_Area : return "Area"; - case FT_BelongToGeom : return "Belong to Geom"; - case FT_BelongToPlane : return "Belong to Plane"; - case FT_BelongToCylinder: return "Belong to Cylinder"; - case FT_LyingOnGeom : return "Lying on Geom"; - case FT_BadOrientedVolume: return "Bad Oriented Volume"; - case FT_RangeOfIds : return "Range of IDs"; - case FT_FreeBorders : return "Free borders"; - case FT_FreeEdges : return "Free edges"; - case FT_MultiConnection : return "Borders at multi-connections"; - case FT_MultiConnection2D: return "Borders at multi-connections 2D"; - case FT_Length : return "Length"; - case FT_Length2D : return "Length2D"; - case FT_LessThan : return "Less than"; - case FT_MoreThan : return "More than"; - case FT_EqualTo : return "Equal to"; - case FT_LogicalNOT : return "Not"; - case FT_LogicalAND : return "And"; - case FT_LogicalOR : return "Or"; - case FT_Undefined : return ""; - default : return ""; - } -} - -//======================================================================= -// name : toFunctorType -// Purpose : Convert LDOMString to functor type -//======================================================================= -static inline SMESH::FunctorType toFunctorType( const LDOMString& theStr ) -{ - if ( theStr.equals( "Aspect ratio" ) ) return FT_AspectRatio; - else if ( theStr.equals( "Warping" ) ) return FT_Warping; - else if ( theStr.equals( "Minimum angle" ) ) return FT_MinimumAngle; - else if ( theStr.equals( "Taper" ) ) return FT_Taper; - else if ( theStr.equals( "Skew" ) ) return FT_Skew; - else if ( theStr.equals( "Area" ) ) return FT_Area; - else if ( theStr.equals( "Belong to Geom" ) ) return FT_BelongToGeom; - else if ( theStr.equals( "Belong to Plane" ) ) return FT_BelongToPlane; - else if ( theStr.equals( "Belong to Cylinder" ) ) return FT_BelongToCylinder; - else if ( theStr.equals( "Lying on Geom" ) ) return FT_LyingOnGeom; - else if ( theStr.equals( "Free borders" ) ) return FT_FreeBorders; - else if ( theStr.equals( "Free edges" ) ) return FT_FreeEdges; - else if ( theStr.equals( "Borders at multi-connections" ) ) return FT_MultiConnection; - // else if ( theStr.equals( "Borders at multi-connections 2D" ) ) return FT_MultiConnection2D; - else if ( theStr.equals( "Length" ) ) return FT_Length; - // else if ( theStr.equals( "Length2D" ) ) return FT_Length2D; - else if ( theStr.equals( "Range of IDs" ) ) return FT_RangeOfIds; - else if ( theStr.equals( "Bad Oriented Volume" ) ) return FT_BadOrientedVolume; - else if ( theStr.equals( "Less than" ) ) return FT_LessThan; - else if ( theStr.equals( "More than" ) ) return FT_MoreThan; - else if ( theStr.equals( "Equal to" ) ) return FT_EqualTo; - else if ( theStr.equals( "Not" ) ) return FT_LogicalNOT; - else if ( theStr.equals( "And" ) ) return FT_LogicalAND; - else if ( theStr.equals( "Or" ) ) return FT_LogicalOR; - else if ( theStr.equals( "" ) ) return FT_Undefined; - else return FT_Undefined; -} - -//======================================================================= -// name : toFunctorType -// Purpose : Convert LDOMString to value of ElementType enumeration -//======================================================================= -static inline SMESH::ElementType toElementType( const LDOMString& theStr ) -{ - if ( theStr.equals( "NODE" ) ) return SMESH::NODE; - else if ( theStr.equals( "EDGE" ) ) return SMESH::EDGE; - else if ( theStr.equals( "FACE" ) ) return SMESH::FACE; - else if ( theStr.equals( "VOLUME" ) ) return SMESH::VOLUME; - else return SMESH::ALL; -} - -//======================================================================= -// name : toString -// Purpose : Convert ElementType to string -//======================================================================= -static inline LDOMString toString( const SMESH::ElementType theType ) -{ - switch ( theType ) - { - case SMESH::NODE : return "NODE"; - case SMESH::EDGE : return "EDGE"; - case SMESH::FACE : return "FACE"; - case SMESH::VOLUME : return "VOLUME"; - case SMESH::ALL : return "ALL"; - default : return ""; - } -} - -//======================================================================= -// name : findFilter -// Purpose : Find filter in document -//======================================================================= -static LDOM_Element findFilter( const char* theFilterName, - const LDOM_Document& theDoc, - LDOM_Node* theParent = 0 ) -{ - LDOM_Element aRootElement = theDoc.getDocumentElement(); - if ( aRootElement.isNull() || !aRootElement.hasChildNodes() ) - return LDOM_Element(); - - for ( LDOM_Node aTypeNode = aRootElement.getFirstChild(); - !aTypeNode.isNull(); aTypeNode = aTypeNode.getNextSibling() ) - { - for ( LDOM_Node aFilter = aTypeNode.getFirstChild(); - !aFilter.isNull(); aFilter = aFilter.getNextSibling() ) - { - LDOM_Element* anElem = ( LDOM_Element* )&aFilter; - if ( anElem->getTagName().equals( LDOMString( "filter" ) ) && - anElem->getAttribute( "name" ).equals( LDOMString( theFilterName ) ) ) - { - if ( theParent != 0 ) - *theParent = aTypeNode; - return (LDOM_Element&)aFilter; - } - } - } - return LDOM_Element(); -} - -//======================================================================= -// name : getSectionName -// Purpose : Get name of section of filters -//======================================================================= -static const char* getSectionName( const ElementType theType ) -{ - switch ( theType ) - { - case SMESH::NODE : return "Filters for nodes"; - case SMESH::EDGE : return "Filters for edges"; - case SMESH::FACE : return "Filters for faces"; - case SMESH::VOLUME : return "Filters for volumes"; - case SMESH::ALL : return "Filters for elements"; - default : return ""; - } -} - -//======================================================================= -// name : getSection -// Purpose : Create section for filters corresponding to the entity type -//======================================================================= -static LDOM_Node getSection( const ElementType theType, - LDOM_Document& theDoc, - const bool toCreate = false ) -{ - LDOM_Element aRootElement = theDoc.getDocumentElement(); - if ( aRootElement.isNull() ) - return LDOM_Node(); - - // Find section - bool anExist = false; - const char* aSectionName = getSectionName( theType ); - if ( strcmp( aSectionName, "" ) == 0 ) - return LDOM_Node(); - - LDOM_NodeList aSections = theDoc.getElementsByTagName( "section" ); - LDOM_Node aNode; - for ( int i = 0, n = aSections.getLength(); i < n; i++ ) - { - aNode = aSections.item( i ); - LDOM_Element& anItem = ( LDOM_Element& )aNode; - if ( anItem.getAttribute( "name" ).equals( LDOMString( aSectionName ) ) ) - { - anExist = true; - break; - } - } - - // Create new section if necessary - if ( !anExist ) - { - if ( toCreate ) - { - LDOM_Element aNewItem = theDoc.createElement( "section" ); - aNewItem.setAttribute( "name", aSectionName ); - aRootElement.appendChild( aNewItem ); - return aNewItem; - } - else - return LDOM_Node(); - } - return - aNode; -} - -//======================================================================= -// name : createFilterItem -// Purpose : Create filter item or LDOM document -//======================================================================= -static LDOM_Element createFilterItem( const char* theName, - SMESH::Filter_ptr theFilter, - LDOM_Document& theDoc ) -{ - // create new filter in document - LDOM_Element aFilterItem = theDoc.createElement( "filter" ); - aFilterItem.setAttribute( "name", theName ); - - // save filter criterions - SMESH::Filter::Criteria_var aCriteria = new SMESH::Filter::Criteria; - - if ( !theFilter->GetCriteria( aCriteria ) ) - return LDOM_Element(); - - for ( CORBA::ULong i = 0, n = aCriteria->length(); i < n; i++ ) - { - LDOM_Element aCriterionItem = theDoc.createElement( "criterion" ); - - aCriterionItem.setAttribute( ATTR_TYPE , toString( aCriteria[ i ].Type ) ); - aCriterionItem.setAttribute( ATTR_COMPARE , toString( aCriteria[ i ].Compare ) ); - aCriterionItem.setAttribute( ATTR_THRESHOLD , toString( aCriteria[ i ].Threshold ) ); - aCriterionItem.setAttribute( ATTR_UNARY , toString( aCriteria[ i ].UnaryOp ) ); - aCriterionItem.setAttribute( ATTR_BINARY , toString( aCriteria[ i ].BinaryOp ) ); - - aCriterionItem.setAttribute( ATTR_THRESHOLD_STR, (const char*)aCriteria[ i ].ThresholdStr ); - aCriterionItem.setAttribute( ATTR_TOLERANCE , toString( aCriteria[ i ].Tolerance ) ); - aCriterionItem.setAttribute( ATTR_ELEMENT_TYPE , - toString( (SMESH::ElementType)aCriteria[ i ].TypeOfElement ) ); - - aFilterItem.appendChild( aCriterionItem ); - } - - return aFilterItem; -} - -//======================================================================= -// name : FilterLibrary_i::FilterLibrary_i -// Purpose : Constructor -//======================================================================= -FilterLibrary_i::FilterLibrary_i( const char* theFileName ) -{ - myFileName = strdup( theFileName ); - SMESH::FilterManager_i* aFilterMgr = new SMESH::FilterManager_i(); - myFilterMgr = aFilterMgr->_this(); - - LDOMParser aParser; - - // Try to use existing library file - bool anExists = false; - if ( !aParser.parse( myFileName ) ) - { - myDoc = aParser.getDocument(); - anExists = true; - } - // Create a new XML document if it doesn't exist - else - myDoc = LDOM_Document::createDocument( LDOMString() ); - - LDOM_Element aRootElement = myDoc.getDocumentElement(); - if ( aRootElement.isNull() ) - { - // If the existing document is empty --> try to create a new one - if ( anExists ) - myDoc = LDOM_Document::createDocument( LDOMString() ); - } -} - -//======================================================================= -// name : FilterLibrary_i::FilterLibrary_i -// Purpose : Constructor -//======================================================================= -FilterLibrary_i::FilterLibrary_i() -{ - myFileName = 0; - SMESH::FilterManager_i* aFilter = new SMESH::FilterManager_i(); - myFilterMgr = aFilter->_this(); - - myDoc = LDOM_Document::createDocument( LDOMString() ); -} - -FilterLibrary_i::~FilterLibrary_i() -{ - delete myFileName; - TPythonDump()< aCriteria; - - for ( LDOM_Node aCritNode = aFilter.getFirstChild(); - !aCritNode.isNull() ; aCritNode = aCritNode.getNextSibling() ) - { - LDOM_Element* aCrit = (LDOM_Element*)&aCritNode; - - const char* aTypeStr = aCrit->getAttribute( ATTR_TYPE ).GetString(); - const char* aCompareStr = aCrit->getAttribute( ATTR_COMPARE ).GetString(); - const char* aUnaryStr = aCrit->getAttribute( ATTR_UNARY ).GetString(); - const char* aBinaryStr = aCrit->getAttribute( ATTR_BINARY ).GetString(); - const char* anElemTypeStr = aCrit->getAttribute( ATTR_ELEMENT_TYPE ).GetString(); - - SMESH::Filter::Criterion aCriterion = createCriterion(); - - aCriterion.Type = toFunctorType( aTypeStr ); - aCriterion.Compare = toFunctorType( aCompareStr ); - aCriterion.UnaryOp = toFunctorType( aUnaryStr ); - aCriterion.BinaryOp = toFunctorType( aBinaryStr ); - - aCriterion.TypeOfElement = toElementType( anElemTypeStr ); - - LDOMString str = aCrit->getAttribute( ATTR_THRESHOLD ); - int val = 0; - aCriterion.Threshold = str.Type() == LDOMBasicString::LDOM_Integer && str.GetInteger( val ) - ? val : atof( str.GetString() ); - - str = aCrit->getAttribute( ATTR_TOLERANCE ); - aCriterion.Tolerance = str.Type() == LDOMBasicString::LDOM_Integer && str.GetInteger( val ) - ? val : atof( str.GetString() ); - - str = aCrit->getAttribute( ATTR_THRESHOLD_STR ); - if ( str.Type() == LDOMBasicString::LDOM_Integer && str.GetInteger( val ) ) - { - char a[ 255 ]; - sprintf( a, "%d", val ); - aCriterion.ThresholdStr = strdup( a ); - } - else - aCriterion.ThresholdStr = str.GetString(); - - aCriteria.push_back( aCriterion ); - } - - SMESH::Filter::Criteria_var aCriteriaVar = new SMESH::Filter::Criteria; - aCriteriaVar->length( aCriteria.size() ); - - CORBA::ULong i = 0; - std::list::iterator anIter = aCriteria.begin(); - - for( ; anIter != aCriteria.end(); ++anIter ) - aCriteriaVar[ i++ ] = *anIter; - - aRes = myFilterMgr->CreateFilter(); - aRes->SetCriteria( aCriteriaVar.inout() ); - - TPythonDump()<_is_nil() ) - return false; - - // get section corresponding to the filter type - ElementType anEntType = theFilter->GetElementType(); - - LDOM_Node aSection = getSection( anEntType, myDoc, true ); - if ( aSection.isNull() ) - return false; - - // create filter item - LDOM_Element aFilterItem = createFilterItem( theFilterName, theFilter, myDoc ); - if ( aFilterItem.isNull() ) - return false; - else - { - aSection.appendChild( aFilterItem ); - if(Filter_i* aFilter = DownCast(theFilter)) - TPythonDump()<CreateFilter(); - - LDOM_Element aFilterItem = createFilterItem( theFilterName, aFilter, myDoc ); - if ( aFilterItem.isNull() ) - return false; - else - { - aSection.appendChild( aFilterItem ); - TPythonDump()<_is_nil() ) - return false; - - LDOM_Element aNewItem = createFilterItem( theNewName, theFilter, myDoc ); - if ( aNewItem.isNull() ) - return false; - else - { - aFilterItem.ReplaceElement( aNewItem ); - if(Filter_i* aFilter = DownCast(theFilter)) - TPythonDump()<length(); -} - -//======================================================================= -// name : FilterLibrary_i::GetNames -// Purpose : Get names of filters from library -//======================================================================= -string_array* FilterLibrary_i::GetNames( ElementType theType ) -{ - string_array_var anArray = new string_array; - TColStd_SequenceOfHAsciiString aSeq; - - LDOM_Node aSection = getSection( theType, myDoc, false ); - - if ( !aSection.isNull() ) - { - for ( LDOM_Node aFilter = aSection.getFirstChild(); - !aFilter.isNull(); aFilter = aFilter.getNextSibling() ) - { - LDOM_Element& anElem = ( LDOM_Element& )aFilter; - aSeq.Append( new TCollection_HAsciiString( - (Standard_CString)anElem.getAttribute( "name" ).GetString() ) ); - } - } - - anArray->length( aSeq.Length() ); - for ( int i = 1, n = aSeq.Length(); i <= n; i++ ) - anArray[ i - 1 ] = CORBA::string_dup( aSeq( i )->ToCString() ); - - return anArray._retn(); -} - -//======================================================================= -// name : FilterLibrary_i::GetAllNames -// Purpose : Get names of filters from library -//======================================================================= -string_array* FilterLibrary_i::GetAllNames() -{ - string_array_var aResArray = new string_array; - for ( int type = SMESH::ALL; type <= SMESH::VOLUME; type++ ) - { - SMESH::string_array_var aNames = GetNames( (SMESH::ElementType)type ); - - int aPrevLength = aResArray->length(); - aResArray->length( aPrevLength + aNames->length() ); - for ( int i = 0, n = aNames->length(); i < n; i++ ) - aResArray[ aPrevLength + i ] = aNames[ i ]; - } - - return aResArray._retn(); -} diff --git a/src/SMESH_I/SMESH_Filter_i.hxx b/src/SMESH_I/SMESH_Filter_i.hxx deleted file mode 100644 index b634bfe9d..000000000 --- a/src/SMESH_I/SMESH_Filter_i.hxx +++ /dev/null @@ -1,781 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Filter_i.hxx -// Author : Alexey Petrov, OCC -// Module : SMESH - -#ifndef _SMESH_FILTER_I_HXX_ -#define _SMESH_FILTER_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_Filter) - -#include -#include - -#include "SALOME_GenericObj_i.hh" -#include "SMESH_ControlsDef.hxx" - -class SMESHDS_Mesh; - -namespace SMESH -{ - - namespace Controls - { - - /* - Class : BelongToGeom - Description : Predicate for verifying whether entiy belong to - specified geometrical support - */ - class BelongToGeom: public virtual Predicate - { - public: - BelongToGeom(); - - virtual void SetMesh( const SMDS_Mesh* theMesh ); - virtual void SetGeom( const TopoDS_Shape& theShape ); - - virtual bool IsSatisfy( long theElementId ); - - virtual void SetType( SMDSAbs_ElementType theType ); - virtual SMDSAbs_ElementType GetType() const; - - TopoDS_Shape GetShape(); - const SMESHDS_Mesh* GetMeshDS() const; - - private: - TopoDS_Shape myShape; - const SMESHDS_Mesh* myMeshDS; - SMDSAbs_ElementType myType; - }; - typedef boost::shared_ptr BelongToGeomPtr; - - /* - Class : LyingOnGeom - Description : Predicate for verifying whether entiy lying or partially lying on - specified geometrical support - */ - class LyingOnGeom: public virtual Predicate - { - public: - LyingOnGeom(); - - virtual void SetMesh( const SMDS_Mesh* theMesh ); - virtual void SetGeom( const TopoDS_Shape& theShape ); - - virtual bool IsSatisfy( long theElementId ); - - virtual void SetType( SMDSAbs_ElementType theType ); - virtual SMDSAbs_ElementType GetType() const; - - TopoDS_Shape GetShape(); - const SMESHDS_Mesh* GetMeshDS() const; - - virtual bool Contains( const SMESHDS_Mesh* theMeshDS, - const TopoDS_Shape& theShape, - const SMDS_MeshElement* theElem, - TopAbs_ShapeEnum theFindShapeEnum, - TopAbs_ShapeEnum theAvoidShapeEnum = TopAbs_SHAPE ); - private: - TopoDS_Shape myShape; - const SMESHDS_Mesh* myMeshDS; - SMDSAbs_ElementType myType; - }; - typedef boost::shared_ptr LyingOnGeomPtr; - } - - /* - FUNCTORS - */ - - /* - Class : Functor_i - Description : An abstact class for all functors - */ - class Functor_i: public virtual POA_SMESH::Functor, - public virtual SALOME::GenericObj_i - { - public: - void SetMesh( SMESH_Mesh_ptr theMesh ); - Controls::FunctorPtr GetFunctor(){ return myFunctorPtr;} - ElementType GetElementType(); - - protected: - Functor_i(); - ~Functor_i(); - protected: - Controls::FunctorPtr myFunctorPtr; - }; - - /* - Class : NumericalFunctor_i - Description : Base class for numerical functors - */ - class NumericalFunctor_i: public virtual POA_SMESH::NumericalFunctor, - public virtual Functor_i - { - public: - CORBA::Double GetValue( CORBA::Long theElementId ); - void SetPrecision( CORBA::Long thePrecision ); - CORBA::Long GetPrecision(); - Controls::NumericalFunctorPtr GetNumericalFunctor(); - - protected: - Controls::NumericalFunctorPtr myNumericalFunctorPtr; - }; - - - /* - Class : SMESH_MinimumAngleFunct - Description : Functor for calculation of minimum angle - */ - class MinimumAngle_i: public virtual POA_SMESH::MinimumAngle, - public virtual NumericalFunctor_i - { - public: - MinimumAngle_i(); - FunctorType GetFunctorType(); - }; - - - /* - Class : AspectRatio_i - Description : Functor for calculating aspect ratio - */ - class AspectRatio_i: public virtual POA_SMESH::AspectRatio, - public virtual NumericalFunctor_i - { - public: - AspectRatio_i(); - FunctorType GetFunctorType(); - }; - - - /* - Class : AspectRatio3D_i - Description : Functor for calculating aspect ratio for 3D - */ - class AspectRatio3D_i: public virtual POA_SMESH::AspectRatio3D, - public virtual NumericalFunctor_i - { - public: - AspectRatio3D_i(); - FunctorType GetFunctorType(); - }; - - - /* - Class : Warping_i - Description : Functor for calculating warping - */ - class Warping_i: public virtual POA_SMESH::Warping, - public virtual NumericalFunctor_i - { - public: - Warping_i(); - FunctorType GetFunctorType(); - }; - - - /* - Class : Taper_i - Description : Functor for calculating taper - */ - class Taper_i: public virtual POA_SMESH::Taper, - public virtual NumericalFunctor_i - { - public: - Taper_i(); - FunctorType GetFunctorType(); - }; - - - /* - Class : Skew_i - Description : Functor for calculating skew in degrees - */ - class Skew_i: public virtual POA_SMESH::Skew, - public virtual NumericalFunctor_i - { - public: - Skew_i(); - FunctorType GetFunctorType(); - }; - - - /* - Class : Area_i - Description : Functor for calculating area - */ - class Area_i: public virtual POA_SMESH::Area, - public virtual NumericalFunctor_i - { - public: - Area_i(); - FunctorType GetFunctorType(); - }; - - - /* - Class : Length_i - Description : Functor for calculating length of edge - */ - class Length_i: public virtual POA_SMESH::Length, - public virtual NumericalFunctor_i - { - public: - Length_i(); - FunctorType GetFunctorType(); - }; - - /* - Class : Length2D_i - Description : Functor for calculating length of edge - */ - class Length2D_i: public virtual POA_SMESH::Length2D, - public virtual NumericalFunctor_i - { - public: - Length2D_i(); - SMESH::Length2D::Values* GetValues(); - FunctorType GetFunctorType(); - - protected: - Controls::Length2DPtr myLength2DPtr; - }; - - - /* - Class : MultiConnection_i - Description : Functor for calculating number of faces conneted to the edge - */ - class MultiConnection_i: public virtual POA_SMESH::MultiConnection, - public virtual NumericalFunctor_i - { - public: - MultiConnection_i(); - FunctorType GetFunctorType(); - }; - - /* - Class : MultiConnection2D_i - Description : Functor for calculating number of faces conneted to the edge - */ - class MultiConnection2D_i: public virtual POA_SMESH::MultiConnection2D, - public virtual NumericalFunctor_i - { - public: - MultiConnection2D_i(); - SMESH::MultiConnection2D::Values* GetValues(); - FunctorType GetFunctorType(); - - protected: - Controls::MultiConnection2DPtr myMulticonnection2DPtr; - }; - - - /* - PREDICATES - */ - /* - Class : Predicate_i - Description : Base class for all predicates - */ - class Predicate_i: public virtual POA_SMESH::Predicate, - public virtual Functor_i - { - public: - CORBA::Boolean IsSatisfy( CORBA::Long theElementId ); - Controls::PredicatePtr GetPredicate(); - - protected: - Controls::PredicatePtr myPredicatePtr; - }; - - - /* - Class : BadOrientedVolume_i - Description : Verify whether a mesh volume is incorrectly oriented from - the point of view of MED convention - */ - class BadOrientedVolume_i: public virtual POA_SMESH::BadOrientedVolume, - public virtual Predicate_i - { - public: - BadOrientedVolume_i(); - FunctorType GetFunctorType(); - }; - - /* - Class : BelongToGeom_i - Description : Predicate for selection on geometrical support - */ - class BelongToGeom_i: public virtual POA_SMESH::BelongToGeom, - public virtual Predicate_i - { - public: - BelongToGeom_i(); - virtual ~BelongToGeom_i(); - - void SetGeom( GEOM::GEOM_Object_ptr theGeom ); - void SetElementType( ElementType theType ); - FunctorType GetFunctorType(); - - void SetGeom( const TopoDS_Shape& theShape ); - - void SetShapeName( const char* theName ); - char* GetShapeName(); - - protected: - Controls::BelongToGeomPtr myBelongToGeomPtr; - char* myShapeName; - }; - - /* - Class : BelongToSurface_i - Description : Verify whether mesh element lie in pointed Geom planar object - */ - class BelongToSurface_i: public virtual POA_SMESH::BelongToSurface, - public virtual Predicate_i - { - public: - BelongToSurface_i( const Handle(Standard_Type)& ); - virtual ~BelongToSurface_i(); - - void SetSurface( GEOM::GEOM_Object_ptr theGeom, ElementType theType ); - - void SetShapeName( const char* theName, ElementType theType ); - char* GetShapeName(); - - void SetTolerance( CORBA::Double ); - CORBA::Double GetTolerance(); - - protected: - Controls::ElementsOnSurfacePtr myElementsOnSurfacePtr; - char* myShapeName; - Handle(Standard_Type) mySurfaceType; - }; - - /* - Class : BelongToPlane_i - Description : Verify whether mesh element lie in pointed Geom planar object - */ - class BelongToPlane_i: public virtual POA_SMESH::BelongToPlane, - public virtual BelongToSurface_i - { - public: - BelongToPlane_i(); - void SetPlane( GEOM::GEOM_Object_ptr theGeom, ElementType theType ); - FunctorType GetFunctorType(); - }; - - /* - Class : BelongToCylinder_i - Description : Verify whether mesh element lie in pointed Geom cylindrical object - */ - class BelongToCylinder_i: public virtual POA_SMESH::BelongToCylinder, - public virtual BelongToSurface_i - { - public: - BelongToCylinder_i(); - void SetCylinder( GEOM::GEOM_Object_ptr theGeom, ElementType theType ); - FunctorType GetFunctorType(); - }; - - /* - Class : LyingOnGeom_i - Description : Predicate for selection on geometrical support(lying or partially lying) - */ - class LyingOnGeom_i: public virtual POA_SMESH::LyingOnGeom, - public virtual Predicate_i - { - public: - LyingOnGeom_i(); - virtual ~LyingOnGeom_i(); - - void SetGeom( GEOM::GEOM_Object_ptr theGeom ); - void SetElementType( ElementType theType ); - FunctorType GetFunctorType(); - - void SetGeom( const TopoDS_Shape& theShape ); - - void SetShapeName( const char* theName ); - char* GetShapeName(); - - protected: - Controls::LyingOnGeomPtr myLyingOnGeomPtr; - char* myShapeName; - }; - - /* - Class : FreeBorders_i - Description : Predicate for free borders - */ - class FreeBorders_i: public virtual POA_SMESH::FreeBorders, - public virtual Predicate_i - { - public: - FreeBorders_i(); - FunctorType GetFunctorType(); - }; - - - /* - Class : FreeEdges_i - Description : Predicate for free edges - */ - class FreeEdges_i: public virtual POA_SMESH::FreeEdges, - public virtual Predicate_i - { - public: - FreeEdges_i(); - SMESH::FreeEdges::Borders* GetBorders(); - FunctorType GetFunctorType(); - - protected: - Controls::FreeEdgesPtr myFreeEdgesPtr; - }; - - - /* - Class : RangeOfIds_i - Description : Predicate for Range of Ids - */ - class RangeOfIds_i: public virtual POA_SMESH::RangeOfIds, - public virtual Predicate_i - { - public: - RangeOfIds_i(); - void SetRange( const SMESH::long_array& theIds ); - CORBA::Boolean SetRangeStr( const char* theRange ); - char* GetRangeStr(); - - void SetElementType( ElementType theType ); - FunctorType GetFunctorType(); - - protected: - Controls::RangeOfIdsPtr myRangeOfIdsPtr; - }; - - /* - Class : Comparator_i - Description : Base class for comparators - */ - class Comparator_i: public virtual POA_SMESH::Comparator, - public virtual Predicate_i - { - public: - virtual ~Comparator_i(); - - virtual void SetMargin( CORBA::Double ); - virtual void SetNumFunctor( NumericalFunctor_ptr ); - - Controls::ComparatorPtr GetComparator(); - NumericalFunctor_i* GetNumFunctor_i(); - CORBA::Double GetMargin(); - - protected: - Comparator_i(); - protected: - Controls::ComparatorPtr myComparatorPtr; - NumericalFunctor_i* myNumericalFunctor; - }; - - - /* - Class : LessThan_i - Description : Comparator "<" - */ - class LessThan_i: public virtual POA_SMESH::LessThan, - public virtual Comparator_i - { - public: - LessThan_i(); - FunctorType GetFunctorType(); - }; - - - /* - Class : MoreThan_i - Description : Comparator ">" - */ - class MoreThan_i: public virtual POA_SMESH::MoreThan, - public virtual Comparator_i - { - public: - MoreThan_i(); - FunctorType GetFunctorType(); - }; - - - /* - Class : EqualTo_i - Description : Comparator "=" - */ - class EqualTo_i: public virtual POA_SMESH::EqualTo, - public virtual Comparator_i - { - public: - EqualTo_i(); - virtual void SetTolerance( CORBA::Double ); - CORBA::Double GetTolerance(); - FunctorType GetFunctorType(); - - protected: - Controls::EqualToPtr myEqualToPtr; - }; - - - /* - Class : LogicalNOT_i - Description : Logical NOT predicate - */ - class LogicalNOT_i: public virtual POA_SMESH::LogicalNOT, - public virtual Predicate_i - { - public: - LogicalNOT_i(); - virtual ~LogicalNOT_i(); - - virtual void SetPredicate( Predicate_ptr ); - Predicate_i* GetPredicate_i(); - FunctorType GetFunctorType(); - - protected: - Controls::LogicalNOTPtr myLogicalNOTPtr; - Predicate_i* myPredicate; - }; - - - /* - Class : LogicalBinary_i - Description : Base class for binary logical predicate - */ - class LogicalBinary_i: public virtual POA_SMESH::LogicalBinary, - public virtual Predicate_i - { - public: - virtual ~LogicalBinary_i(); - virtual void SetMesh( SMESH_Mesh_ptr theMesh ); - virtual void SetPredicate1( Predicate_ptr ); - virtual void SetPredicate2( Predicate_ptr ); - - Controls::LogicalBinaryPtr GetLogicalBinary(); - Predicate_i* GetPredicate1_i(); - Predicate_i* GetPredicate2_i(); - - protected: - LogicalBinary_i(); - protected: - Controls::LogicalBinaryPtr myLogicalBinaryPtr; - Predicate_i* myPredicate1; - Predicate_i* myPredicate2; - }; - - - /* - Class : LogicalAND_i - Description : Logical AND - */ - class LogicalAND_i: public virtual POA_SMESH::LogicalAND, - public virtual LogicalBinary_i - { - public: - LogicalAND_i(); - FunctorType GetFunctorType(); - }; - - - /* - Class : LogicalOR_i - Description : Logical OR - */ - class LogicalOR_i: public virtual POA_SMESH::LogicalOR, - public virtual LogicalBinary_i - { - public: - LogicalOR_i(); - FunctorType GetFunctorType(); - }; - - - /* - FILTER - */ - class Filter_i: public virtual POA_SMESH::Filter, - public virtual SALOME::GenericObj_i - { - public: - Filter_i(); - ~Filter_i(); - - virtual - void - SetPredicate( Predicate_ptr ); - - virtual - void - SetMesh( SMESH_Mesh_ptr ); - - virtual - SMESH::long_array* - GetIDs(); - - static - void - GetElementsId( Predicate_i*, - const SMDS_Mesh*, - Controls::Filter::TIdSequence& ); - static - void - GetElementsId( Predicate_i*, - SMESH_Mesh_ptr, - Controls::Filter::TIdSequence& ); - - virtual - long_array* - GetElementsId( SMESH_Mesh_ptr ); - - virtual - ElementType - GetElementType(); - - virtual - CORBA::Boolean - GetCriteria( SMESH::Filter::Criteria_out theCriteria ); - - virtual - CORBA::Boolean - SetCriteria( const SMESH::Filter::Criteria& theCriteria ); - - virtual - Predicate_ptr - GetPredicate(); - - Predicate_i* GetPredicate_i(); - - private: - Controls::Filter myFilter; - Predicate_i* myPredicate; - SMESH_Mesh_var myMesh; - }; - - - /* - FILTER LIBRARY - */ - class FilterLibrary_i: public virtual POA_SMESH::FilterLibrary, - public virtual SALOME::GenericObj_i - { - public: - FilterLibrary_i( const char* theFileName ); - FilterLibrary_i(); - ~FilterLibrary_i(); - - Filter_ptr Copy( const char* theFilterName ); - - CORBA::Boolean Add ( const char* theFilterName, Filter_ptr theFilter ); - CORBA::Boolean AddEmpty( const char* theFilterName, ElementType theType ); - CORBA::Boolean Delete ( const char* theFilterName ); - CORBA::Boolean Replace ( const char* theFilterName, - const char* theNewName, - Filter_ptr theFilter ); - - CORBA::Boolean Save(); - CORBA::Boolean SaveAs( const char* aFileName ); - - CORBA::Boolean IsPresent( const char* aFilterName ); - CORBA::Long NbFilters( ElementType ); - string_array* GetNames( ElementType ); - string_array* GetAllNames(); - void SetFileName( const char* theFileName ); - char* GetFileName(); - - private: - char* myFileName; - LDOM_Document myDoc; - FilterManager_var myFilterMgr; - }; - - - /* - FILTER MANAGER - */ - - class FilterManager_i: public virtual POA_SMESH::FilterManager, - public virtual SALOME::GenericObj_i - { - public: - FilterManager_i(); - ~FilterManager_i(); - - MinimumAngle_ptr CreateMinimumAngle(); - AspectRatio_ptr CreateAspectRatio(); - AspectRatio3D_ptr CreateAspectRatio3D(); - Warping_ptr CreateWarping(); - Taper_ptr CreateTaper(); - Skew_ptr CreateSkew(); - Area_ptr CreateArea(); - Length_ptr CreateLength(); - Length2D_ptr CreateLength2D(); - MultiConnection_ptr CreateMultiConnection(); - MultiConnection2D_ptr CreateMultiConnection2D(); - - BelongToGeom_ptr CreateBelongToGeom(); - BelongToPlane_ptr CreateBelongToPlane(); - BelongToCylinder_ptr CreateBelongToCylinder(); - - LyingOnGeom_ptr CreateLyingOnGeom(); - - FreeBorders_ptr CreateFreeBorders(); - FreeEdges_ptr CreateFreeEdges(); - - RangeOfIds_ptr CreateRangeOfIds(); - - BadOrientedVolume_ptr CreateBadOrientedVolume(); - - LessThan_ptr CreateLessThan(); - MoreThan_ptr CreateMoreThan(); - EqualTo_ptr CreateEqualTo(); - - LogicalNOT_ptr CreateLogicalNOT(); - LogicalAND_ptr CreateLogicalAND(); - LogicalOR_ptr CreateLogicalOR(); - - Filter_ptr CreateFilter(); - - FilterLibrary_ptr LoadLibrary( const char* aFileName ); - FilterLibrary_ptr CreateLibrary(); - CORBA::Boolean DeleteLibrary( const char* aFileName ); - }; - - - Predicate_i* - GetPredicate( SMESH::Predicate_ptr thePredicate ); -} - - -#endif diff --git a/src/SMESH_I/SMESH_Gen_i.cxx b/src/SMESH_I/SMESH_Gen_i.cxx deleted file mode 100644 index a51c17b9e..000000000 --- a/src/SMESH_I/SMESH_Gen_i.cxx +++ /dev/null @@ -1,2587 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Gen_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "Utils_CorbaException.hxx" - -#include "utilities.h" -#include -#include -#include - -#include - -#include "SMESH_Gen_i.hxx" -#include "SMESH_Mesh_i.hxx" -#include "SMESH_Hypothesis_i.hxx" -#include "SMESH_Algo_i.hxx" -#include "SMESH_Group_i.hxx" - -#include "SMESHDS_Document.hxx" -#include "SMESHDS_Group.hxx" -#include "SMESHDS_GroupOnGeom.hxx" -#include "SMESH_Group.hxx" - -#include "SMDS_EdgePosition.hxx" -#include "SMDS_FacePosition.hxx" - -#include CORBA_SERVER_HEADER(SMESH_Group) -#include CORBA_SERVER_HEADER(SMESH_Filter) - -#include "DriverMED_W_SMESHDS_Mesh.h" -#include "DriverMED_R_SMESHDS_Mesh.h" - -#include "SALOMEDS_Tool.hxx" -#include "SALOME_NamingService.hxx" -#include "SALOME_LifeCycleCORBA.hxx" -#include "Utils_SINGLETON.hxx" -#include "OpUtil.hxx" - -#include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog) - -#include "GEOM_Client.hxx" -#include "Utils_ExceptHandlers.hxx" - -#include -#include - -using namespace std; - -#define NUM_TMP_FILES 2 - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - -// Static variables definition -CORBA::ORB_var SMESH_Gen_i::myOrb; -PortableServer::POA_var SMESH_Gen_i::myPoa; -SALOME_NamingService* SMESH_Gen_i::myNS = NULL; -SALOME_LifeCycleCORBA* SMESH_Gen_i::myLCC = NULL; -SMESH_Gen_i* SMESH_Gen_i::mySMESHGen = NULL; - -//============================================================================= -/*! - * GetServant [ static ] - * - * Get servant of the CORBA object - */ -//============================================================================= - -PortableServer::ServantBase_var SMESH_Gen_i::GetServant( CORBA::Object_ptr theObject ) -{ - if( CORBA::is_nil( theObject ) || CORBA::is_nil( GetPOA() ) ) - return NULL; - try { - PortableServer::Servant aServant = GetPOA()->reference_to_servant( theObject ); - return aServant; - } - catch (...) { - INFOS( "GetServant - Unknown exception was caught!!!" ); - return NULL; - } -} - -//============================================================================= -/*! - * SObjectToObject [ static ] - * - * Get CORBA object corresponding to the SALOMEDS::SObject - */ -//============================================================================= - -CORBA::Object_var SMESH_Gen_i::SObjectToObject( SALOMEDS::SObject_ptr theSObject ) -{ - SALOMEDS::GenericAttribute_var anAttr; - CORBA::Object_var anObj; - if ( !theSObject->_is_nil() ) { - try { - if( theSObject->FindAttribute( anAttr, "AttributeIOR" ) ) { - SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow( anAttr ); - CORBA::String_var aValue = anIOR->Value(); - if( strcmp( aValue, "" ) != 0 ) - anObj = GetORB()->string_to_object( aValue ); - } - } - catch( ... ) { - INFOS( "SObjectToObject - Unknown exception was caught!!!" ); - } - } - return anObj; -} - -//============================================================================= -/*! - * GetNS [ static ] - * - * Get SALOME_NamingService object - */ -//============================================================================= - -SALOME_NamingService* SMESH_Gen_i::GetNS() -{ - if ( myNS == NULL ) { - myNS = SINGLETON_::Instance(); - ASSERT(SINGLETON_::IsAlreadyExisting()); - myNS->init_orb( GetORB() ); - } - return myNS; -} - -//============================================================================= -/*! - * GetLCC [ static ] - * - * Get SALOME_LifeCycleCORBA object - */ -//============================================================================= -SALOME_LifeCycleCORBA* SMESH_Gen_i::GetLCC() { - if ( myLCC == NULL ) { - myLCC = new SALOME_LifeCycleCORBA( GetNS() ); - } - return myLCC; -} - - -//============================================================================= -/*! - * GetGeomEngine [ static ] - * - * Get GEOM::GEOM_Gen reference - */ -//============================================================================= -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(); -} - -//============================================================================= -/*! - * SMESH_Gen_i::SMESH_Gen_i - * - * Default constructor: not for use - */ -//============================================================================= - -SMESH_Gen_i::SMESH_Gen_i() -{ - INFOS( "SMESH_Gen_i::SMESH_Gen_i : default constructor" ); -} - -//============================================================================= -/*! - * SMESH_Gen_i::SMESH_Gen_i - * - * Standard constructor, used with Container - */ -//============================================================================= - -SMESH_Gen_i::SMESH_Gen_i( CORBA::ORB_ptr orb, - PortableServer::POA_ptr poa, - PortableServer::ObjectId* contId, - const char* instanceName, - const char* interfaceName ) - : Engines_Component_i( orb, poa, contId, instanceName, interfaceName ) -{ - INFOS( "SMESH_Gen_i::SMESH_Gen_i : standard constructor" ); - - myOrb = CORBA::ORB::_duplicate(orb); - myPoa = PortableServer::POA::_duplicate(poa); - - _thisObj = this ; - _id = myPoa->activate_object( _thisObj ); - - myShapeReader = NULL; // shape reader - mySMESHGen = this; -} - -//============================================================================= -/*! - * SMESH_Gen_i::~SMESH_Gen_i - * - * Destructor - */ -//============================================================================= - -SMESH_Gen_i::~SMESH_Gen_i() -{ - INFOS( "SMESH_Gen_i::~SMESH_Gen_i" ); - - // delete hypothesis creators - map::iterator itHyp; - for (itHyp = myHypCreatorMap.begin(); itHyp != myHypCreatorMap.end(); itHyp++) - { - delete (*itHyp).second; - } - myHypCreatorMap.clear(); - - // Clear study contexts data - map::iterator it; - for ( it = myStudyContextMap.begin(); it != myStudyContextMap.end(); ++it ) { - delete it->second; - } - myStudyContextMap.clear(); - // delete shape reader - if ( !myShapeReader ) - delete myShapeReader; -} - -//============================================================================= -/*! - * SMESH_Gen_i::createHypothesis - * - * Create hypothesis of given type - */ -//============================================================================= -SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::createHypothesis(const char* theHypName, - const char* theLibName) - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - if(MYDEBUG) MESSAGE( "Create Hypothesis <" << theHypName << "> from " << theLibName); - - // create a new hypothesis object servant - SMESH_Hypothesis_i* myHypothesis_i = 0; - SMESH::SMESH_Hypothesis_var hypothesis_i; - - try - { - // check, if creator for this hypothesis type already exists - if (myHypCreatorMap.find(string(theHypName)) == myHypCreatorMap.end()) - { - // load plugin library - if(MYDEBUG) MESSAGE("Loading server meshers plugin library ..."); - void* libHandle = dlopen (theLibName, RTLD_LAZY); - if (!libHandle) - { - // report any error, if occured - const char* anError = dlerror(); - throw(SALOME_Exception(anError)); - } - - // get method, returning hypothesis creator - if(MYDEBUG) MESSAGE("Find GetHypothesisCreator() method ..."); - typedef GenericHypothesisCreator_i* (*GetHypothesisCreator)(const char* theHypName); - GetHypothesisCreator procHandle = - (GetHypothesisCreator)dlsym( libHandle, "GetHypothesisCreator" ); - if (!procHandle) - { - throw(SALOME_Exception(LOCALIZED("bad hypothesis plugin library"))); - dlclose(libHandle); - } - - // get hypothesis creator - if(MYDEBUG) MESSAGE("Get Hypothesis Creator for " << theHypName); - GenericHypothesisCreator_i* aCreator = procHandle(theHypName); - if (!aCreator) - { - throw(SALOME_Exception(LOCALIZED("no such a hypothesis in this plugin"))); - } - - // map hypothesis creator to a hypothesis name - myHypCreatorMap[string(theHypName)] = aCreator; - } - - // create a new hypothesis object, store its ref. in studyContext - if(MYDEBUG) MESSAGE("Create Hypothesis " << theHypName); - myHypothesis_i = - myHypCreatorMap[string(theHypName)]->Create (myPoa, GetCurrentStudyID(), &myGen); - // _CS_gbo Explicit activation (no longer made in the constructor). - myHypothesis_i->Activate(); - myHypothesis_i->SetLibName(theLibName); // for persistency assurance - } - catch (SALOME_Exception& S_ex) - { - THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); - } - - if (!myHypothesis_i) - return hypothesis_i._retn(); - - // activate the CORBA servant of hypothesis - hypothesis_i = SMESH::SMESH_Hypothesis::_narrow( myHypothesis_i->_this() ); - int nextId = RegisterObject( hypothesis_i ); - if(MYDEBUG) MESSAGE( "Add hypo to map with id = "<< nextId ); - - return hypothesis_i._retn(); -} - -//============================================================================= -/*! - * SMESH_Gen_i::createMesh - * - * Create empty mesh on shape - */ -//============================================================================= -SMESH::SMESH_Mesh_ptr SMESH_Gen_i::createMesh() - throw ( SALOME::SALOME_Exception ) -{ - Unexpect aCatch(SALOME_SalomeException); - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::createMesh" ); - - // Get or create the GEOM_Client instance - try { - // create a new mesh object servant, store it in a map in study context - SMESH_Mesh_i* meshServant = new SMESH_Mesh_i( GetPOA(), this, GetCurrentStudyID() ); - // create a new mesh object - meshServant->SetImpl( myGen.CreateMesh( GetCurrentStudyID() )); - - // activate the CORBA servant of Mesh - SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( meshServant->_this() ); - int nextId = RegisterObject( mesh ); - if(MYDEBUG) MESSAGE( "Add mesh to map with id = "<< nextId); - return mesh._retn(); - } - catch (SALOME_Exception& S_ex) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM ); - } - return SMESH::SMESH_Mesh::_nil(); -} - -//============================================================================= -/*! - * SMESH_Gen_i::GetShapeReader - * - * Get shape reader - */ -//============================================================================= -GEOM_Client* SMESH_Gen_i::GetShapeReader() -{ - // create shape reader if necessary - if ( !myShapeReader ) - myShapeReader = new GEOM_Client(GetContainerRef()); - ASSERT( myShapeReader ); - return myShapeReader; -} - -//============================================================================= -/*! - * SMESH_Gen_i::SetCurrentStudy - * - * Set current study - */ -//============================================================================= - -void SMESH_Gen_i::SetCurrentStudy( SALOMEDS::Study_ptr theStudy ) -{ - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::SetCurrentStudy" ); - myCurrentStudy = SALOMEDS::Study::_duplicate( theStudy ); - // create study context, if it doesn't exist and set current study - int studyId = GetCurrentStudyID(); - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::SetCurrentStudy: study Id = " << studyId ); - if ( myStudyContextMap.find( studyId ) == myStudyContextMap.end() ) { - myStudyContextMap[ studyId ] = new StudyContext; - } - // set current study for geom engine - /* - if ( !CORBA::is_nil( GetGeomEngine() ) ) - GetGeomEngine()->GetCurrentStudy( myCurrentStudy->StudyId() ); - */ -} - -//============================================================================= -/*! - * SMESH_Gen_i::GetCurrentStudy - * - * Get current study - */ -//============================================================================= - -SALOMEDS::Study_ptr SMESH_Gen_i::GetCurrentStudy() -{ - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::GetCurrentStudy: study Id = " << GetCurrentStudyID() ); - return SALOMEDS::Study::_duplicate( myCurrentStudy ); -} - -//============================================================================= -/*! - * SMESH_Gen_i::GetCurrentStudyContext - * - * Get current study context - */ -//============================================================================= -StudyContext* SMESH_Gen_i::GetCurrentStudyContext() -{ - if ( !CORBA::is_nil( myCurrentStudy ) && - myStudyContextMap.find( GetCurrentStudyID() ) != myStudyContextMap.end() ) - return myStudyContextMap[ myCurrentStudy->StudyId() ]; - else - return 0; -} - -//============================================================================= -/*! - * SMESH_Gen_i::CreateHypothesis - * - * Create hypothesis/algorothm of given type and publish it in the study - */ -//============================================================================= - -SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::CreateHypothesis( const char* theHypName, - const char* theLibName ) - throw ( SALOME::SALOME_Exception ) -{ - Unexpect aCatch(SALOME_SalomeException); - // Create hypothesis/algorithm - SMESH::SMESH_Hypothesis_var hyp = this->createHypothesis( theHypName, theLibName ); - - // Publish hypothesis/algorithm in the study - if ( CanPublishInStudy( hyp ) ) { - SALOMEDS::SObject_var aSO = PublishHypothesis( myCurrentStudy, hyp ); - if ( !aSO->_is_nil() ) { - // Update Python script - TCollection_AsciiString aStr (aSO->GetID()); - aStr += " = smesh.CreateHypothesis(\""; - aStr += Standard_CString(theHypName); - aStr += "\", \""; - aStr += Standard_CString(theLibName); - aStr += "\")"; - - AddToCurrentPyScript(aStr); - } - } - - return hyp._retn(); -} - -//============================================================================= -/*! - * SMESH_Gen_i::CreateMesh - * - * Create empty mesh on a shape and publish it in the study - */ -//============================================================================= - -SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMesh( GEOM::GEOM_Object_ptr theShapeObject ) - throw ( SALOME::SALOME_Exception ) -{ - Unexpect aCatch(SALOME_SalomeException); - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::CreateMesh" ); - // create mesh - SMESH::SMESH_Mesh_var mesh = this->createMesh(); - // set shape - SMESH_Mesh_i* meshServant = dynamic_cast( GetServant( mesh ).in() ); - ASSERT( meshServant ); - meshServant->SetShape( theShapeObject ); - - // publish mesh in the study - if ( CanPublishInStudy( mesh ) ) { - SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder(); - aStudyBuilder->NewCommand(); // There is a transaction - SALOMEDS::SObject_var aSO = PublishMesh( myCurrentStudy, mesh.in() ); - aStudyBuilder->CommitCommand(); - if ( !aSO->_is_nil() ) { - // Update Python script - TCollection_AsciiString aStr (aSO->GetID()); - aStr += " = smesh.CreateMesh("; - SMESH_Gen_i::AddObject(aStr, theShapeObject) += ")"; - - AddToCurrentPyScript(aStr); - } - } - - return mesh._retn(); -} - -//============================================================================= -/*! - * SMESH_Gen_i::CreateMeshFromUNV - * - * Create mesh and import data from UNV file - */ -//============================================================================= - -SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromUNV( const char* theFileName ) - throw ( SALOME::SALOME_Exception ) -{ - Unexpect aCatch(SALOME_SalomeException); - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::CreateMeshesFromUNV" ); - - SMESH::SMESH_Mesh_var aMesh = createMesh(); - string aFileName; // = boost::filesystem::path(theFileName).leaf(); - // publish mesh in the study - if ( CanPublishInStudy( aMesh ) ) { - SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder(); - aStudyBuilder->NewCommand(); // There is a transaction - SALOMEDS::SObject_var aSO = PublishMesh( myCurrentStudy, aMesh.in(), aFileName.c_str() ); - aStudyBuilder->CommitCommand(); - if ( !aSO->_is_nil() ) { - // Update Python script - TCollection_AsciiString aStr (aSO->GetID()); - aStr += " = smesh.CreateMeshesFromUNV(\""; - aStr += Standard_CString(theFileName); - aStr += "\")"; - - AddToCurrentPyScript(aStr); - } - } - - SMESH_Mesh_i* aServant = dynamic_cast( GetServant( aMesh ).in() ); - ASSERT( aServant ); - aServant->ImportUNVFile( theFileName ); - return aMesh._retn(); -} - -//============================================================================= -/*! - * SMESH_Gen_i::CreateMeshFromMED - * - * Create mesh and import data from MED file - */ -//============================================================================= - -SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* theFileName, - SMESH::DriverMED_ReadStatus& theStatus) - throw ( SALOME::SALOME_Exception ) -{ - Unexpect aCatch(SALOME_SalomeException); - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::CreateMeshFromMED" ); - - // Python Dump - TCollection_AsciiString aStr ("(["); - - // Retrieve mesh names from the file - DriverMED_R_SMESHDS_Mesh myReader; - myReader.SetFile( theFileName ); - myReader.SetMeshId( -1 ); - Driver_Mesh::Status aStatus; - list aNames = myReader.GetMeshNames(aStatus); - SMESH::mesh_array_var aResult = new SMESH::mesh_array(); - theStatus = (SMESH::DriverMED_ReadStatus)aStatus; - if (theStatus == SMESH::DRS_OK) { - SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder(); - aStudyBuilder->NewCommand(); // There is a transaction - aResult->length( aNames.size() ); - int i = 0; - - // Iterate through all meshes and create mesh objects - for ( list::iterator it = aNames.begin(); it != aNames.end(); it++ ) { - // Python Dump - if (i > 0) aStr += ", "; - - // create mesh - SMESH::SMESH_Mesh_var mesh = createMesh(); - - // publish mesh in the study - SALOMEDS::SObject_var aSO; - if ( CanPublishInStudy( mesh ) ) - aSO = PublishMesh( myCurrentStudy, mesh.in(), (*it).c_str() ); - if ( !aSO->_is_nil() ) { - // Python Dump - aStr += aSO->GetID(); - } else { - // Python Dump - aStr += "mesh_"; - aStr += TCollection_AsciiString(i); - } - - // Read mesh data (groups are published automatically by ImportMEDFile()) - SMESH_Mesh_i* meshServant = dynamic_cast( GetServant( mesh ).in() ); - ASSERT( meshServant ); - SMESH::DriverMED_ReadStatus status1 = - meshServant->ImportMEDFile( theFileName, (*it).c_str() ); - if (status1 > theStatus) - theStatus = status1; - - aResult[i++] = SMESH::SMESH_Mesh::_duplicate( mesh ); - } - aStudyBuilder->CommitCommand(); - } - - // Update Python script - aStr += "], status) = smesh.CreateMeshesFromMED(\""; - aStr += Standard_CString(theFileName); - aStr += "\")"; - - AddToCurrentPyScript(aStr); - - return aResult._retn(); -} - -//============================================================================= -/*! - * SMESH_Gen_i::CreateMeshFromSTL - * - * Create mesh and import data from STL file - */ -//============================================================================= - -SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromSTL( const char* theFileName ) - throw ( SALOME::SALOME_Exception ) -{ - Unexpect aCatch(SALOME_SalomeException); - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::CreateMeshesFromSTL" ); - - SMESH::SMESH_Mesh_var aMesh = createMesh(); - string aFileName; // = boost::filesystem::path(theFileName).leaf(); - // publish mesh in the study - if ( CanPublishInStudy( aMesh ) ) { - SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder(); - aStudyBuilder->NewCommand(); // There is a transaction - SALOMEDS::SObject_var aSO = PublishInStudy - ( myCurrentStudy, SALOMEDS::SObject::_nil(), aMesh.in(), aFileName.c_str() ); - aStudyBuilder->CommitCommand(); - if ( !aSO->_is_nil() ) { - // Update Python script - TCollection_AsciiString aStr (aSO->GetID()); - aStr += " = smesh.CreateMeshesFromSTL(\""; - aStr += Standard_CString(theFileName); - aStr += "\")"; - - AddToCurrentPyScript(aStr); - } - } - - SMESH_Mesh_i* aServant = dynamic_cast( GetServant( aMesh ).in() ); - ASSERT( aServant ); - aServant->ImportSTLFile( theFileName ); - return aMesh._retn(); -} - -//============================================================================= -/*! - * SMESH_Gen_i::IsReadyToCompute - * - * Returns true if mesh contains enough data to be computed - */ -//============================================================================= - -CORBA::Boolean SMESH_Gen_i::IsReadyToCompute( SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theShapeObject ) - throw ( SALOME::SALOME_Exception ) -{ - Unexpect aCatch(SALOME_SalomeException); - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::IsReadyToCompute" ); - - if ( CORBA::is_nil( theShapeObject ) ) - THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference", - SALOME::BAD_PARAM ); - - if ( CORBA::is_nil( theMesh ) ) - THROW_SALOME_CORBA_EXCEPTION( "bad Mesh reference", - SALOME::BAD_PARAM ); - - try { - // get mesh servant - SMESH_Mesh_i* meshServant = dynamic_cast( GetServant( theMesh ).in() ); - ASSERT( meshServant ); - if ( meshServant ) { - // get local TopoDS_Shape - TopoDS_Shape myLocShape = GeomObjectToShape( theShapeObject ); - // call implementation - ::SMESH_Mesh& myLocMesh = meshServant->GetImpl(); - return myGen.CheckAlgoState( myLocMesh, myLocShape ); - } - } - catch ( SALOME_Exception& S_ex ) { - INFOS( "catch exception "<< S_ex.what() ); - } - return false; -} - -//============================================================================= -/*! - * SMESH_Gen_i::GetSubShapesId - * - * Get sub-shapes unique ID's list - */ -//============================================================================= - -SMESH::long_array* SMESH_Gen_i::GetSubShapesId( GEOM::GEOM_Object_ptr theMainShapeObject, - const SMESH::object_array& theListOfSubShapeObject ) - throw ( SALOME::SALOME_Exception ) -{ - Unexpect aCatch(SALOME_SalomeException); - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::GetSubShapesId" ); - - SMESH::long_array_var shapesId = new SMESH::long_array; - set setId; - - if ( CORBA::is_nil( theMainShapeObject ) ) - THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference", - SALOME::BAD_PARAM ); - - try - { - TopoDS_Shape myMainShape = GeomObjectToShape(theMainShapeObject); - TopTools_IndexedMapOfShape myIndexToShape; - TopExp::MapShapes(myMainShape,myIndexToShape); - - for ( int i = 0; i < theListOfSubShapeObject.length(); i++ ) - { - GEOM::GEOM_Object_var aShapeObject - = GEOM::GEOM_Object::_narrow(theListOfSubShapeObject[i]); - if ( CORBA::is_nil( aShapeObject ) ) - THROW_SALOME_CORBA_EXCEPTION ("bad shape object reference", \ - SALOME::BAD_PARAM ); - - TopoDS_Shape locShape = GeomObjectToShape(aShapeObject); - for (TopExp_Explorer exp(locShape,TopAbs_FACE); exp.More(); exp.Next()) - { - const TopoDS_Face& F = TopoDS::Face(exp.Current()); - setId.insert(myIndexToShape.FindIndex(F)); - if(MYDEBUG) SCRUTE(myIndexToShape.FindIndex(F)); - } - for (TopExp_Explorer exp(locShape,TopAbs_EDGE); exp.More(); exp.Next()) - { - const TopoDS_Edge& E = TopoDS::Edge(exp.Current()); - setId.insert(myIndexToShape.FindIndex(E)); - if(MYDEBUG) SCRUTE(myIndexToShape.FindIndex(E)); - } - for (TopExp_Explorer exp(locShape,TopAbs_VERTEX); exp.More(); exp.Next()) - { - const TopoDS_Vertex& V = TopoDS::Vertex(exp.Current()); - setId.insert(myIndexToShape.FindIndex(V)); - if(MYDEBUG) SCRUTE(myIndexToShape.FindIndex(V)); - } - } - shapesId->length(setId.size()); - set::iterator iind; - int i=0; - for (iind = setId.begin(); iind != setId.end(); iind++) - { - if(MYDEBUG) SCRUTE((*iind)); - shapesId[i] = (*iind); - if(MYDEBUG) SCRUTE(shapesId[i]); - i++; - } - } - catch (SALOME_Exception& S_ex) - { - THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); - } - - return shapesId._retn(); -} - -//============================================================================= -/*! - * SMESH_Gen_i::Compute - * - * Compute mesh on a shape - */ -//============================================================================= - -CORBA::Boolean SMESH_Gen_i::Compute( SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theShapeObject ) - throw ( SALOME::SALOME_Exception ) -{ - Unexpect aCatch(SALOME_SalomeException); - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::Compute" ); - - if ( CORBA::is_nil( theShapeObject ) ) - THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference", - SALOME::BAD_PARAM ); - - if ( CORBA::is_nil( theMesh ) ) - THROW_SALOME_CORBA_EXCEPTION( "bad Mesh reference", - SALOME::BAD_PARAM ); - - // Update Python script - TCollection_AsciiString aStr ("isDone = smesh.Compute("); - SMESH_Gen_i::AddObject(aStr, theMesh) += ", "; - SMESH_Gen_i::AddObject(aStr, theShapeObject) += ")"; - - AddToCurrentPyScript(aStr); - - aStr = "if isDone == 0: print \"Mesh "; - SMESH_Gen_i::AddObject(aStr, theMesh) += " computation failed\""; - AddToCurrentPyScript(aStr); - - try { - // get mesh servant - SMESH_Mesh_i* meshServant = dynamic_cast( GetServant( theMesh ).in() ); - ASSERT( meshServant ); - if ( meshServant ) { - // get local TopoDS_Shape - TopoDS_Shape myLocShape = GeomObjectToShape( theShapeObject ); - // call implementation compute - ::SMESH_Mesh& myLocMesh = meshServant->GetImpl(); - return myGen.Compute( myLocMesh, myLocShape); - } - } - catch ( SALOME_Exception& S_ex ) { - INFOS( "Compute(): catch exception "<< S_ex.what() ); - } - catch ( ... ) { - INFOS( "Compute(): unknown exception " ); - } - return false; -} - -//============================================================================= -/*! - * SMESH_Gen_i::Save - * - * Save SMESH module's data - */ -//============================================================================= -SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent, - const char* theURL, - bool isMultiFile ) -{ - INFOS( "SMESH_Gen_i::Save" ); - -// ASSERT( theComponent->GetStudy()->StudyId() == myCurrentStudy->StudyId() ) - // san -- in case differs from theComponent's study, - // use that of the component - if ( myCurrentStudy->_is_nil() || - theComponent->GetStudy()->StudyId() != myCurrentStudy->StudyId() ) - SetCurrentStudy( theComponent->GetStudy() ); - - // Store study contents as a set of python commands - SavePython(myCurrentStudy); - - StudyContext* myStudyContext = GetCurrentStudyContext(); - - // Declare a byte stream - SALOMEDS::TMPFile_var aStreamFile; - - // Obtain a temporary dir - TCollection_AsciiString tmpDir = - ( isMultiFile ) ? TCollection_AsciiString( ( char* )theURL ) : ( char* )SALOMEDS_Tool::GetTmpDir().c_str(); - - // Create a sequence of files processed - SALOMEDS::ListOfFileNames_var aFileSeq = new SALOMEDS::ListOfFileNames; - aFileSeq->length( NUM_TMP_FILES ); - - TCollection_AsciiString aStudyName( "" ); - if ( isMultiFile ) - aStudyName = ( (char*)SALOMEDS_Tool::GetNameFromPath( myCurrentStudy->URL() ).c_str() ); - - // Set names of temporary files - TCollection_AsciiString filename = - aStudyName + TCollection_AsciiString( "_SMESH.hdf" ); // for SMESH data itself - TCollection_AsciiString meshfile = - aStudyName + TCollection_AsciiString( "_SMESH_Mesh.med" ); // for mesh data to be stored in MED file - aFileSeq[ 0 ] = CORBA::string_dup( filename.ToCString() ); - aFileSeq[ 1 ] = CORBA::string_dup( meshfile.ToCString() ); - filename = tmpDir + filename; - meshfile = tmpDir + meshfile; - - HDFfile* aFile; - HDFdataset* aDataset; - HDFgroup* aTopGroup; - HDFgroup* aGroup; - HDFgroup* aSubGroup; - HDFgroup* aSubSubGroup; - hdf_size aSize[ 1 ]; - - // MED writer to be used by storage process - DriverMED_W_SMESHDS_Mesh myWriter; - myWriter.SetFile( meshfile.ToCString() ); - - // Write data - // ---> create HDF file - aFile = new HDFfile( filename.ToCString() ); - aFile->CreateOnDisk(); - - // --> iterator for top-level objects - SALOMEDS::ChildIterator_var itBig = myCurrentStudy->NewChildIterator( theComponent ); - for ( ; itBig->More(); itBig->Next() ) { - SALOMEDS::SObject_var gotBranch = itBig->Value(); - - // --> hypotheses root branch (only one for the study) - if ( gotBranch->Tag() == GetHypothesisRootTag() ) { - // create hypotheses root HDF group - aTopGroup = new HDFgroup( "Hypotheses", aFile ); - aTopGroup->CreateOnDisk(); - - // iterator for all hypotheses - SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( gotBranch ); - for ( ; it->More(); it->Next() ) { - SALOMEDS::SObject_var mySObject = it->Value(); - CORBA::Object_var anObject = SObjectToObject( mySObject ); - if ( !CORBA::is_nil( anObject ) ) { - SMESH::SMESH_Hypothesis_var myHyp = SMESH::SMESH_Hypothesis::_narrow( anObject ); - if ( !myHyp->_is_nil() ) { - SMESH_Hypothesis_i* myImpl = dynamic_cast( GetServant( myHyp ).in() ); - if ( myImpl ) { - string hypname = string( myHyp->GetName() ); - string libname = string( myHyp->GetLibName() ); - int id = myStudyContext->findId( string( GetORB()->object_to_string( anObject ) ) ); - string hypdata = string( myImpl->SaveTo() ); - - // for each hypothesis create HDF group basing on its id - char hypGrpName[30]; - sprintf( hypGrpName, "Hypothesis %d", id ); - aGroup = new HDFgroup( hypGrpName, aTopGroup ); - aGroup->CreateOnDisk(); - // --> type name of hypothesis - aSize[ 0 ] = hypname.length() + 1; - aDataset = new HDFdataset( "Name", aGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - aDataset->WriteOnDisk( ( char* )( hypname.c_str() ) ); - aDataset->CloseOnDisk(); - // --> server plugin library name of hypothesis - aSize[ 0 ] = libname.length() + 1; - aDataset = new HDFdataset( "LibName", aGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - aDataset->WriteOnDisk( ( char* )( libname.c_str() ) ); - aDataset->CloseOnDisk(); - // --> persistent data of hypothesis - aSize[ 0 ] = hypdata.length() + 1; - aDataset = new HDFdataset( "Data", aGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - aDataset->WriteOnDisk( ( char* )( hypdata.c_str() ) ); - aDataset->CloseOnDisk(); - // close hypothesis HDF group - aGroup->CloseOnDisk(); - } - } - } - } - // close hypotheses root HDF group - aTopGroup->CloseOnDisk(); - } - // --> algorithms root branch (only one for the study) - else if ( gotBranch->Tag() == GetAlgorithmsRootTag() ) { - // create algorithms root HDF group - aTopGroup = new HDFgroup( "Algorithms", aFile ); - aTopGroup->CreateOnDisk(); - - // iterator for all algorithms - SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( gotBranch ); - for ( ; it->More(); it->Next() ) { - SALOMEDS::SObject_var mySObject = it->Value(); - CORBA::Object_var anObject = SObjectToObject( mySObject ); - if ( !CORBA::is_nil( anObject ) ) { - SMESH::SMESH_Hypothesis_var myHyp = SMESH::SMESH_Hypothesis::_narrow( anObject ); - if ( !myHyp->_is_nil() ) { - SMESH_Hypothesis_i* myImpl = dynamic_cast( GetServant( myHyp ).in() ); - if ( myImpl ) { - string hypname = string( myHyp->GetName() ); - string libname = string( myHyp->GetLibName() ); - int id = myStudyContext->findId( string( GetORB()->object_to_string( anObject ) ) ); - string hypdata = string( myImpl->SaveTo() ); - - // for each algorithm create HDF group basing on its id - char hypGrpName[30]; - sprintf( hypGrpName, "Algorithm %d", id ); - aGroup = new HDFgroup( hypGrpName, aTopGroup ); - aGroup->CreateOnDisk(); - // --> type name of algorithm - aSize[0] = hypname.length() + 1; - aDataset = new HDFdataset( "Name", aGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - aDataset->WriteOnDisk( ( char* )( hypname.c_str() ) ); - aDataset->CloseOnDisk(); - // --> server plugin library name of hypothesis - aSize[0] = libname.length() + 1; - aDataset = new HDFdataset( "LibName", aGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - aDataset->WriteOnDisk( ( char* )( libname.c_str() ) ); - aDataset->CloseOnDisk(); - // --> persistent data of algorithm - aSize[0] = hypdata.length() + 1; - aDataset = new HDFdataset( "Data", aGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - aDataset->WriteOnDisk( ( char* )( hypdata.c_str() ) ); - aDataset->CloseOnDisk(); - // close algorithm HDF group - aGroup->CloseOnDisk(); - } - } - } - } - // close algorithms root HDF group - aTopGroup->CloseOnDisk(); - } - // --> mesh objects roots branches - else if ( gotBranch->Tag() > GetAlgorithmsRootTag() ) { - CORBA::Object_var anObject = SObjectToObject( gotBranch ); - if ( !CORBA::is_nil( anObject ) ) { - SMESH::SMESH_Mesh_var myMesh = SMESH::SMESH_Mesh::_narrow( anObject ) ; - if ( !myMesh->_is_nil() ) { - SMESH_Mesh_i* myImpl = dynamic_cast( GetServant( myMesh ).in() ); - if ( myImpl ) { - int id = myStudyContext->findId( string( GetORB()->object_to_string( anObject ) ) ); - ::SMESH_Mesh& myLocMesh = myImpl->GetImpl(); - SMESHDS_Mesh* mySMESHDSMesh = myLocMesh.GetMeshDS(); - - // for each mesh open the HDF group basing on its id - char meshGrpName[ 30 ]; - sprintf( meshGrpName, "Mesh %d", id ); - aTopGroup = new HDFgroup( meshGrpName, aFile ); - aTopGroup->CreateOnDisk(); - - // --> put dataset to hdf file which is a flag that mesh has data - string strHasData = "0"; - // check if the mesh is not empty - if ( mySMESHDSMesh->NbNodes() > 0 ) { - // write mesh data to med file - myWriter.SetMesh( mySMESHDSMesh ); - myWriter.SetMeshId( id ); - strHasData = "1"; - } - aSize[ 0 ] = strHasData.length() + 1; - aDataset = new HDFdataset( "Has data", aTopGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - aDataset->WriteOnDisk( ( char* )( strHasData.c_str() ) ); - aDataset->CloseOnDisk(); - - // write reference on a shape if exists - SALOMEDS::SObject_var myRef; - bool shapeRefFound = false; - bool found = gotBranch->FindSubObject( GetRefOnShapeTag(), myRef ); - if ( found ) { - SALOMEDS::SObject_var myShape; - bool ok = myRef->ReferencedObject( myShape ); - if ( ok ) { - shapeRefFound = (! CORBA::is_nil( myShape->GetObject() )); - string myRefOnObject = myShape->GetID(); - if ( shapeRefFound && myRefOnObject.length() > 0 ) { - aSize[ 0 ] = myRefOnObject.length() + 1; - aDataset = new HDFdataset( "Ref on shape", aTopGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) ); - aDataset->CloseOnDisk(); - } - } - } - - // write applied hypotheses if exist - SALOMEDS::SObject_var myHypBranch; - found = gotBranch->FindSubObject( GetRefOnAppliedHypothesisTag(), myHypBranch ); - if ( found && !shapeRefFound ) { // remove applied hyps - myCurrentStudy->NewBuilder()->RemoveObjectWithChildren( myHypBranch ); - } - if ( found && shapeRefFound ) { - aGroup = new HDFgroup( "Applied Hypotheses", aTopGroup ); - aGroup->CreateOnDisk(); - - SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( myHypBranch ); - int hypNb = 0; - for ( ; it->More(); it->Next() ) { - SALOMEDS::SObject_var mySObject = it->Value(); - SALOMEDS::SObject_var myRefOnHyp; - bool ok = mySObject->ReferencedObject( myRefOnHyp ); - if ( ok ) { - // san - it is impossible to recover applied hypotheses - // using their entries within Load() method, - // for there are no AttributeIORs in the study when Load() is working. - // Hence, it is better to store persistent IDs of hypotheses as references to them - - //string myRefOnObject = myRefOnHyp->GetID(); - CORBA::Object_var anObject = SObjectToObject( myRefOnHyp ); - int id = myStudyContext->findId( string( GetORB()->object_to_string( anObject ) ) ); - //if ( myRefOnObject.length() > 0 ) { - //aSize[ 0 ] = myRefOnObject.length() + 1; - char hypName[ 30 ], hypId[ 30 ]; - sprintf( hypName, "Hyp %d", ++hypNb ); - sprintf( hypId, "%d", id ); - aSize[ 0 ] = strlen( hypId ) + 1; - aDataset = new HDFdataset( hypName, aGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - //aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) ); - aDataset->WriteOnDisk( hypId ); - aDataset->CloseOnDisk(); - //} - } - } - aGroup->CloseOnDisk(); - } - - // write applied algorithms if exist - SALOMEDS::SObject_var myAlgoBranch; - found = gotBranch->FindSubObject( GetRefOnAppliedAlgorithmsTag(), myAlgoBranch ); - if ( found && !shapeRefFound ) { // remove applied algos - myCurrentStudy->NewBuilder()->RemoveObjectWithChildren( myAlgoBranch ); - } - if ( found && shapeRefFound ) { - aGroup = new HDFgroup( "Applied Algorithms", aTopGroup ); - aGroup->CreateOnDisk(); - - SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( myAlgoBranch ); - int algoNb = 0; - for ( ; it->More(); it->Next() ) { - SALOMEDS::SObject_var mySObject = it->Value(); - SALOMEDS::SObject_var myRefOnAlgo; - bool ok = mySObject->ReferencedObject( myRefOnAlgo ); - if ( ok ) { - // san - it is impossible to recover applied algorithms - // using their entries within Load() method, - // for there are no AttributeIORs in the study when Load() is working. - // Hence, it is better to store persistent IDs of algorithms as references to them - - //string myRefOnObject = myRefOnAlgo->GetID(); - CORBA::Object_var anObject = SObjectToObject( myRefOnAlgo ); - int id = myStudyContext->findId( string( GetORB()->object_to_string( anObject ) ) ); - //if ( myRefOnObject.length() > 0 ) { - //aSize[ 0 ] = myRefOnObject.length() + 1; - char algoName[ 30 ], algoId[ 30 ]; - sprintf( algoName, "Algo %d", ++algoNb ); - sprintf( algoId, "%d", id ); - aSize[ 0 ] = strlen( algoId ) + 1; - aDataset = new HDFdataset( algoName, aGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - //aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) ); - aDataset->WriteOnDisk( algoId ); - aDataset->CloseOnDisk(); - //} - } - } - aGroup->CloseOnDisk(); - } - - // --> submesh objects sub-branches - - for ( int i = GetSubMeshOnVertexTag(); i <= GetSubMeshOnCompoundTag(); i++ ) { - SALOMEDS::SObject_var mySubmeshBranch; - found = gotBranch->FindSubObject( i, mySubmeshBranch ); - - if ( found ) // check if there is shape reference in submeshes - { - bool hasShapeRef = false; - SALOMEDS::ChildIterator_var itSM = - myCurrentStudy->NewChildIterator( mySubmeshBranch ); - for ( ; itSM->More(); itSM->Next() ) { - SALOMEDS::SObject_var mySubRef, myShape, mySObject = itSM->Value(); - if ( mySObject->FindSubObject( GetRefOnShapeTag(), mySubRef )) - mySubRef->ReferencedObject( myShape ); - if ( !CORBA::is_nil( myShape ) && !CORBA::is_nil( myShape->GetObject() )) - hasShapeRef = true; - else - { // remove one submesh - if ( shapeRefFound ) - { // unassign hypothesis - SMESH::SMESH_subMesh_var mySubMesh = - SMESH::SMESH_subMesh::_narrow( SObjectToObject( mySObject )); - if ( !mySubMesh->_is_nil() ) { - int shapeID = mySubMesh->GetId(); - TopoDS_Shape S = mySMESHDSMesh->IndexToShape( shapeID ); - const list& hypList = - mySMESHDSMesh->GetHypothesis( S ); - list::const_iterator hyp = hypList.begin(); - while ( hyp != hypList.end() ) { - int hypID = (*hyp++)->GetID(); // goto next hyp here because - myLocMesh.RemoveHypothesis( S, hypID ); // hypList changes here - } - } - } - myCurrentStudy->NewBuilder()->RemoveObjectWithChildren( mySObject ); - } - } // loop on submeshes of a type - if ( !shapeRefFound || !hasShapeRef ) { // remove the whole submeshes branch - myCurrentStudy->NewBuilder()->RemoveObjectWithChildren( mySubmeshBranch ); - found = false; - } - } // end check if there is shape reference in submeshes - if ( found ) { - char name_meshgroup[ 30 ]; - if ( i == GetSubMeshOnVertexTag() ) - strcpy( name_meshgroup, "SubMeshes On Vertex" ); - else if ( i == GetSubMeshOnEdgeTag() ) - strcpy( name_meshgroup, "SubMeshes On Edge" ); - else if ( i == GetSubMeshOnWireTag() ) - strcpy( name_meshgroup, "SubMeshes On Wire" ); - else if ( i == GetSubMeshOnFaceTag() ) - strcpy( name_meshgroup, "SubMeshes On Face" ); - else if ( i == GetSubMeshOnShellTag() ) - strcpy( name_meshgroup, "SubMeshes On Shell" ); - else if ( i == GetSubMeshOnSolidTag() ) - strcpy( name_meshgroup, "SubMeshes On Solid" ); - else if ( i == GetSubMeshOnCompoundTag() ) - strcpy( name_meshgroup, "SubMeshes On Compound" ); - - // for each type of submeshes create container HDF group - aGroup = new HDFgroup( name_meshgroup, aTopGroup ); - aGroup->CreateOnDisk(); - - // iterator for all submeshes of given type - SALOMEDS::ChildIterator_var itSM = myCurrentStudy->NewChildIterator( mySubmeshBranch ); - for ( ; itSM->More(); itSM->Next() ) { - SALOMEDS::SObject_var mySObject = itSM->Value(); - CORBA::Object_var anSubObject = SObjectToObject( mySObject ); - if ( !CORBA::is_nil( anSubObject )) - { - SMESH::SMESH_subMesh_var mySubMesh = SMESH::SMESH_subMesh::_narrow( anSubObject ) ; - int subid = myStudyContext->findId( string( GetORB()->object_to_string( anSubObject ) ) ); - - // for each mesh open the HDF group basing on its id - char submeshGrpName[ 30 ]; - sprintf( submeshGrpName, "SubMesh %d", subid ); - aSubGroup = new HDFgroup( submeshGrpName, aGroup ); - aSubGroup->CreateOnDisk(); - - // write reference on a shape, already checked if it exists - SALOMEDS::SObject_var mySubRef, myShape; - if ( mySObject->FindSubObject( GetRefOnShapeTag(), mySubRef )) - mySubRef->ReferencedObject( myShape ); - string myRefOnObject = myShape->GetID(); - if ( myRefOnObject.length() > 0 ) { - aSize[ 0 ] = myRefOnObject.length() + 1; - aDataset = new HDFdataset( "Ref on shape", aSubGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) ); - aDataset->CloseOnDisk(); - } - - // write applied hypotheses if exist - SALOMEDS::SObject_var mySubHypBranch; - found = mySObject->FindSubObject( GetRefOnAppliedHypothesisTag(), mySubHypBranch ); - if ( found ) { - aSubSubGroup = new HDFgroup( "Applied Hypotheses", aSubGroup ); - aSubSubGroup->CreateOnDisk(); - - SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( mySubHypBranch ); - int hypNb = 0; - for ( ; it->More(); it->Next() ) { - SALOMEDS::SObject_var mySubSObject = it->Value(); - SALOMEDS::SObject_var myRefOnHyp; - bool ok = mySubSObject->ReferencedObject( myRefOnHyp ); - if ( ok ) { - //string myRefOnObject = myRefOnHyp->GetID(); - CORBA::Object_var anObject = SObjectToObject( myRefOnHyp ); - int id = myStudyContext->findId( string( GetORB()->object_to_string( anObject ) ) ); - //if ( myRefOnObject.length() > 0 ) { - //aSize[ 0 ] = myRefOnObject.length() + 1; - char hypName[ 30 ], hypId[ 30 ]; - sprintf( hypName, "Hyp %d", ++hypNb ); - sprintf( hypId, "%d", id ); - aSize[ 0 ] = strlen( hypId ) + 1; - aDataset = new HDFdataset( hypName, aSubSubGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - //aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) ); - aDataset->WriteOnDisk( hypId ); - aDataset->CloseOnDisk(); - //} - } - } - aSubSubGroup->CloseOnDisk(); - } - - // write applied algorithms if exist - SALOMEDS::SObject_var mySubAlgoBranch; - found = mySObject->FindSubObject( GetRefOnAppliedAlgorithmsTag(), mySubAlgoBranch ); - if ( found ) { - aSubSubGroup = new HDFgroup( "Applied Algorithms", aSubGroup ); - aSubSubGroup->CreateOnDisk(); - - SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( mySubAlgoBranch ); - int algoNb = 0; - for ( ; it->More(); it->Next() ) { - SALOMEDS::SObject_var mySubSObject = it->Value(); - SALOMEDS::SObject_var myRefOnAlgo; - bool ok = mySubSObject->ReferencedObject( myRefOnAlgo ); - if ( ok ) { - //string myRefOnObject = myRefOnAlgo->GetID(); - CORBA::Object_var anObject = SObjectToObject( myRefOnAlgo ); - int id = myStudyContext->findId( string( GetORB()->object_to_string( anObject ) ) ); - //if ( myRefOnObject.length() > 0 ) { - //aSize[ 0 ] = myRefOnObject.length() + 1; - char algoName[ 30 ], algoId[ 30 ]; - sprintf( algoName, "Algo %d", ++algoNb ); - sprintf( algoId, "%d", id ); - aSize[ 0 ] = strlen( algoId ) + 1; - aDataset = new HDFdataset( algoName, aSubSubGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - //aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) ); - aDataset->WriteOnDisk( algoId ); - aDataset->CloseOnDisk(); - //} - } - } - aSubSubGroup->CloseOnDisk(); - } - // close submesh HDF group - aSubGroup->CloseOnDisk(); - } - } - // close container of submeshes by type HDF group - aGroup->CloseOnDisk(); - } - } - // All sub-meshes will be stored in MED file - if ( shapeRefFound ) - myWriter.AddAllSubMeshes(); - - // groups root sub-branch - SALOMEDS::SObject_var myGroupsBranch; - for ( int i = GetNodeGroupsTag(); i <= GetVolumeGroupsTag(); i++ ) { - found = gotBranch->FindSubObject( i, myGroupsBranch ); - if ( found ) { - char name_group[ 30 ]; - if ( i == GetNodeGroupsTag() ) - strcpy( name_group, "Groups of Nodes" ); - else if ( i == GetEdgeGroupsTag() ) - strcpy( name_group, "Groups of Edges" ); - else if ( i == GetFaceGroupsTag() ) - strcpy( name_group, "Groups of Faces" ); - else if ( i == GetVolumeGroupsTag() ) - strcpy( name_group, "Groups of Volumes" ); - - aGroup = new HDFgroup( name_group, aTopGroup ); - aGroup->CreateOnDisk(); - - SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( myGroupsBranch ); - for ( ; it->More(); it->Next() ) { - SALOMEDS::SObject_var mySObject = it->Value(); - CORBA::Object_var aSubObject = SObjectToObject( mySObject ); - if ( !CORBA::is_nil( aSubObject ) ) { - SMESH_GroupBase_i* myGroupImpl = - dynamic_cast( GetServant( aSubObject ).in() ); - if ( !myGroupImpl ) - continue; - - int anId = myStudyContext->findId( string( GetORB()->object_to_string( aSubObject ) ) ); - - // For each group, create a dataset named "Group " - // and store the group's user name into it - char grpName[ 30 ]; - sprintf( grpName, "Group %d", anId ); - char* aUserName = myGroupImpl->GetName(); - aSize[ 0 ] = strlen( aUserName ) + 1; - - aDataset = new HDFdataset( grpName, aGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - aDataset->WriteOnDisk( aUserName ); - aDataset->CloseOnDisk(); - - // Store the group contents into MED file - if ( myLocMesh.GetGroup( myGroupImpl->GetLocalID() ) ) { - - if(MYDEBUG) MESSAGE( "VSR - SMESH_Gen_i::Save(): saving group with StoreName = " - << grpName << " to MED file" ); - SMESHDS_GroupBase* aGrpBaseDS = - myLocMesh.GetGroup( myGroupImpl->GetLocalID() )->GetGroupDS(); - aGrpBaseDS->SetStoreName( grpName ); - - // Pass SMESHDS_Group to MED writer - SMESHDS_Group* aGrpDS = dynamic_cast( aGrpBaseDS ); - if ( aGrpDS ) - myWriter.AddGroup( aGrpDS ); - - // write reference on a shape if exists - SMESHDS_GroupOnGeom* aGeomGrp = - dynamic_cast( aGrpBaseDS ); - if ( aGeomGrp ) { - SALOMEDS::SObject_var mySubRef, myShape; - if (mySObject->FindSubObject( GetRefOnShapeTag(), mySubRef ) && - mySubRef->ReferencedObject( myShape ) && - !CORBA::is_nil( myShape->GetObject() )) - { - string myRefOnObject = myShape->GetID(); - if ( myRefOnObject.length() > 0 ) { - char aRefName[ 30 ]; - sprintf( aRefName, "Ref on shape %d", anId); - aSize[ 0 ] = myRefOnObject.length() + 1; - aDataset = new HDFdataset(aRefName, aGroup, HDF_STRING, aSize, 1); - aDataset->CreateOnDisk(); - aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) ); - aDataset->CloseOnDisk(); - } - } - else // shape ref is invalid: - { - // save a group on geometry as ordinary group - myWriter.AddGroup( aGeomGrp ); - } - } - } - } - } - aGroup->CloseOnDisk(); - } - } // loop on groups - - if ( strcmp( strHasData.c_str(), "1" ) == 0 ) - { - // Flush current mesh information into MED file - myWriter.Perform(); - - // maybe a shape was deleted in the study - if ( !shapeRefFound && !mySMESHDSMesh->ShapeToMesh().IsNull() ) { - TopoDS_Shape nullShape; - myLocMesh.ShapeToMesh( nullShape ); // remove shape referring data - } - - // Store node positions on sub-shapes (SMDS_Position): - - if ( !mySMESHDSMesh->SubMeshes().empty() ) - { - aGroup = new HDFgroup( "Node Positions", aTopGroup ); - aGroup->CreateOnDisk(); - - // in aGroup, create 5 datasets to contain: - // "Nodes on Edges" - ID of node on edge - // "Edge positions" - U parameter on node on edge - // "Nodes on Faces" - ID of node on face - // "Face U positions" - U parameter of node on face - // "Face V positions" - V parameter of node on face - - // Find out nb of nodes on edges and faces - // Collect corresponing sub-meshes - int nbEdgeNodes = 0, nbFaceNodes = 0; - list aEdgeSM, aFaceSM; - // loop on SMESHDS_SubMesh'es - const map& aSubMeshes = mySMESHDSMesh->SubMeshes(); - map::const_iterator itSubM ( aSubMeshes.begin() ); - for ( ; itSubM != aSubMeshes.end() ; itSubM++ ) - { - SMESHDS_SubMesh* aSubMesh = (*itSubM).second; - if ( aSubMesh->IsComplexSubmesh() ) - continue; // submesh containing other submeshs - int nbNodes = aSubMesh->NbNodes(); - if ( nbNodes == 0 ) continue; - - int aShapeID = (*itSubM).first; - int aShapeType = mySMESHDSMesh->IndexToShape( aShapeID ).ShapeType(); - // write only SMDS_FacePosition and SMDS_EdgePosition - switch ( aShapeType ) { - case TopAbs_FACE: - nbFaceNodes += nbNodes; - aFaceSM.push_back( aSubMesh ); - break; - case TopAbs_EDGE: - nbEdgeNodes += nbNodes; - aEdgeSM.push_back( aSubMesh ); - break; - default: - continue; - } - } - // Treat positions on edges or faces - for ( int onFace = 0; onFace < 2; onFace++ ) - { - // Create arrays to store in datasets - int iNode = 0, nbNodes = ( onFace ? nbFaceNodes : nbEdgeNodes ); - if (!nbNodes) continue; - int* aNodeIDs = new int [ nbNodes ]; - double* aUPos = new double [ nbNodes ]; - double* aVPos = ( onFace ? new double[ nbNodes ] : 0 ); - - // Fill arrays - // loop on sub-meshes - list * pListSM = ( onFace ? &aFaceSM : &aEdgeSM ); - list::iterator itSM = pListSM->begin(); - for ( ; itSM != pListSM->end(); itSM++ ) - { - SMESHDS_SubMesh* aSubMesh = (*itSM); - if ( aSubMesh->IsComplexSubmesh() ) - continue; // submesh containing other submeshs - - SMDS_NodeIteratorPtr itNode = aSubMesh->GetNodes(); - // loop on nodes in aSubMesh - while ( itNode->more() ) - { - //node ID - const SMDS_MeshNode* node = itNode->next(); - aNodeIDs [ iNode ] = node->GetID(); - - // Position - const SMDS_PositionPtr pos = node->GetPosition(); - if ( onFace ) { // on FACE - const SMDS_FacePosition* fPos = - dynamic_cast( pos.get() ); - if ( fPos ) { - aUPos[ iNode ] = fPos->GetUParameter(); - aVPos[ iNode ] = fPos->GetVParameter(); - iNode++; - } - else - nbNodes--; - } - else { // on EDGE - const SMDS_EdgePosition* ePos = - dynamic_cast( pos.get() ); - if ( ePos ) { - aUPos[ iNode ] = ePos->GetUParameter(); - iNode++; - } - else - nbNodes--; - } - } // loop on nodes in aSubMesh - } // loop on sub-meshes - - // Write datasets - if ( nbNodes ) - { - aSize[ 0 ] = nbNodes*sizeof(int); - // IDS - string aDSName( onFace ? "Nodes on Faces" : "Nodes on Edges"); - aDataset = new HDFdataset( (char*)aDSName.c_str(), aGroup, HDF_STRING, aSize, 1 ); - aDataset->CreateOnDisk(); - aDataset->WriteOnDisk( aNodeIDs ); - aDataset->CloseOnDisk(); - - aSize[ 0 ] = nbNodes; - // U Positions - aDSName = ( onFace ? "Face U positions" : "Edge positions"); - aDataset = new HDFdataset( (char*)aDSName.c_str(), aGroup, HDF_FLOAT64, aSize, 1); - aDataset->CreateOnDisk(); - aDataset->WriteOnDisk( aUPos ); - aDataset->CloseOnDisk(); - // V Positions - if ( onFace ) { - aDataset = new HDFdataset( "Face V positions", aGroup, HDF_FLOAT64, aSize, 1); - aDataset->CreateOnDisk(); - aDataset->WriteOnDisk( aVPos ); - aDataset->CloseOnDisk(); - } - } - delete [] aNodeIDs; - delete [] aUPos; - if ( aVPos ) delete [] aVPos; - - } // treat positions on edges or faces - - // close "Node Positions" group - aGroup->CloseOnDisk(); - - } // if ( there are submeshes in SMESHDS_Mesh ) - } // if ( hasData ) - - // close mesh HDF group - aTopGroup->CloseOnDisk(); - } - } - } - } - } - - // close HDF file - aFile->CloseOnDisk(); - delete aFile; - - // Convert temporary files to stream - aStreamFile = SALOMEDS_Tool::PutFilesToStream( tmpDir.ToCString(), aFileSeq.in(), isMultiFile ); - - // Remove temporary files and directory - if ( !isMultiFile ) - SALOMEDS_Tool::RemoveTemporaryFiles( tmpDir.ToCString(), aFileSeq.in(), true ); - - INFOS( "SMESH_Gen_i::Save() completed" ); - return aStreamFile._retn(); -} - -//============================================================================= -/*! - * SMESH_Gen_i::SaveASCII - * - * Save SMESH module's data in ASCII format (not implemented yet) - */ -//============================================================================= - -SALOMEDS::TMPFile* SMESH_Gen_i::SaveASCII( SALOMEDS::SComponent_ptr theComponent, - const char* theURL, - bool isMultiFile ) { - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::SaveASCII" ); - SALOMEDS::TMPFile_var aStreamFile = Save( theComponent, theURL, isMultiFile ); - return aStreamFile._retn(); -} - -//============================================================================= -/*! - * SMESH_Gen_i::loadGeomData - * - * Load GEOM module data - */ -//============================================================================= - -void SMESH_Gen_i::loadGeomData( SALOMEDS::SComponent_ptr theCompRoot ) -{ - if ( theCompRoot->_is_nil() ) - return; - - SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow( theCompRoot->GetStudy() ); - if ( aStudy->_is_nil() ) - return; - - SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder(); - aStudyBuilder->LoadWith( theCompRoot, GetGeomEngine() ); -} - -//============================================================================= -/*! - * SMESH_Gen_i::Load - * - * Load SMESH module's data - */ -//============================================================================= - -bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, - const SALOMEDS::TMPFile& theStream, - const char* theURL, - bool isMultiFile ) -{ - INFOS( "SMESH_Gen_i::Load" ); - - if ( myCurrentStudy->_is_nil() || - theComponent->GetStudy()->StudyId() != myCurrentStudy->StudyId() ) - SetCurrentStudy( theComponent->GetStudy() ); - - StudyContext* myStudyContext = GetCurrentStudyContext(); - - // Get temporary files location - TCollection_AsciiString tmpDir = - isMultiFile ? TCollection_AsciiString( ( char* )theURL ) : ( char* )SALOMEDS_Tool::GetTmpDir().c_str(); - - // Convert the stream into sequence of files to process - SALOMEDS::ListOfFileNames_var aFileSeq = SALOMEDS_Tool::PutStreamToFiles( theStream, - tmpDir.ToCString(), - isMultiFile ); - TCollection_AsciiString aStudyName( "" ); - if ( isMultiFile ) - aStudyName = ( (char*)SALOMEDS_Tool::GetNameFromPath( myCurrentStudy->URL() ).c_str() ); - - // Set names of temporary files - TCollection_AsciiString filename = tmpDir + aStudyName + TCollection_AsciiString( "_SMESH.hdf" ); - TCollection_AsciiString meshfile = tmpDir + aStudyName + TCollection_AsciiString( "_SMESH_Mesh.med" ); - - int size; - HDFfile* aFile; - HDFdataset* aDataset; - HDFgroup* aTopGroup; - HDFgroup* aGroup; - HDFgroup* aSubGroup; - HDFgroup* aSubSubGroup; - - // Read data - // ---> open HDF file - aFile = new HDFfile( filename.ToCString() ); - try { - aFile->OpenOnDisk( HDF_RDONLY ); - } - catch ( HDFexception ) { - INFOS( "Load(): " << filename << " not found!" ); - return false; - } - - DriverMED_R_SMESHDS_Mesh myReader; - myReader.SetFile( meshfile.ToCString() ); - - // get total number of top-level groups - int aNbGroups = aFile->nInternalObjects(); - if ( aNbGroups > 0 ) { - // --> in first turn we should read&create hypotheses - if ( aFile->ExistInternalObject( "Hypotheses" ) ) { - // open hypotheses root HDF group - aTopGroup = new HDFgroup( "Hypotheses", aFile ); - aTopGroup->OpenOnDisk(); - - // get number of hypotheses - int aNbObjects = aTopGroup->nInternalObjects(); - for ( int j = 0; j < aNbObjects; j++ ) { - // try to identify hypothesis - char hypGrpName[ HDF_NAME_MAX_LEN+1 ]; - aTopGroup->InternalObjectIndentify( j, hypGrpName ); - - if ( string( hypGrpName ).substr( 0, 10 ) == string( "Hypothesis" ) ) { - // open hypothesis group - aGroup = new HDFgroup( hypGrpName, aTopGroup ); - aGroup->OpenOnDisk(); - - // --> get hypothesis id - int id = atoi( string( hypGrpName ).substr( 10 ).c_str() ); - string hypname; - string libname; - string hypdata; - - // get number of datasets - int aNbSubObjects = aGroup->nInternalObjects(); - for ( int k = 0; k < aNbSubObjects; k++ ) { - // identify dataset - char name_of_subgroup[ HDF_NAME_MAX_LEN+1 ]; - aGroup->InternalObjectIndentify( k, name_of_subgroup ); - // --> get hypothesis name - if ( strcmp( name_of_subgroup, "Name" ) == 0 ) { - aDataset = new HDFdataset( name_of_subgroup, aGroup ); - aDataset->OpenOnDisk(); - size = aDataset->GetSize(); - char* hypname_str = new char[ size ]; - aDataset->ReadFromDisk( hypname_str ); - hypname = string( hypname_str ); - delete hypname_str; - aDataset->CloseOnDisk(); - } - // --> get hypothesis plugin library name - if ( strcmp( name_of_subgroup, "LibName" ) == 0 ) { - aDataset = new HDFdataset( name_of_subgroup, aGroup ); - aDataset->OpenOnDisk(); - size = aDataset->GetSize(); - char* libname_str = new char[ size ]; - aDataset->ReadFromDisk( libname_str ); - if(MYDEBUG) SCRUTE( libname_str ); - libname = string( libname_str ); - delete libname_str; - aDataset->CloseOnDisk(); - } - // --> get hypothesis data - if ( strcmp( name_of_subgroup, "Data" ) == 0 ) { - aDataset = new HDFdataset( name_of_subgroup, aGroup ); - aDataset->OpenOnDisk(); - size = aDataset->GetSize(); - char* hypdata_str = new char[ size ]; - aDataset->ReadFromDisk( hypdata_str ); - hypdata = string( hypdata_str ); - delete hypdata_str; - aDataset->CloseOnDisk(); - } - } - // close hypothesis HDF group - aGroup->CloseOnDisk(); - - // --> restore hypothesis from data - if ( id > 0 && !hypname.empty()/* && !hypdata.empty()*/ ) { // VSR : persistent data can be empty - if(MYDEBUG) MESSAGE("VSR - load hypothesis : id = " << id << - ", name = " << hypname.c_str() << ", persistent string = " << hypdata.c_str()); - SMESH::SMESH_Hypothesis_var myHyp; - - try { // protect persistence mechanism against exceptions - myHyp = this->createHypothesis( hypname.c_str(), libname.c_str() ); - } - catch (...) { - INFOS( "Exception during hypothesis creation" ); - } - - SMESH_Hypothesis_i* myImpl = dynamic_cast( GetServant( myHyp ).in() ); - if ( myImpl ) { - myImpl->LoadFrom( hypdata.c_str() ); - string iorString = GetORB()->object_to_string( myHyp ); - int newId = myStudyContext->findId( iorString ); - myStudyContext->mapOldToNew( id, newId ); - } - else - if(MYDEBUG) MESSAGE( "VSR - SMESH_Gen::Load - can't get servant" ); - } - } - } - // close hypotheses root HDF group - aTopGroup->CloseOnDisk(); - } - - // --> then we should read&create algorithms - if ( aFile->ExistInternalObject( "Algorithms" ) ) { - // open algorithms root HDF group - aTopGroup = new HDFgroup( "Algorithms", aFile ); - aTopGroup->OpenOnDisk(); - - // get number of algorithms - int aNbObjects = aTopGroup->nInternalObjects(); - for ( int j = 0; j < aNbObjects; j++ ) { - // try to identify algorithm - char hypGrpName[ HDF_NAME_MAX_LEN+1 ]; - aTopGroup->InternalObjectIndentify( j, hypGrpName ); - - if ( string( hypGrpName ).substr( 0, 9 ) == string( "Algorithm" ) ) { - // open algorithm group - aGroup = new HDFgroup( hypGrpName, aTopGroup ); - aGroup->OpenOnDisk(); - - // --> get algorithm id - int id = atoi( string( hypGrpName ).substr( 9 ).c_str() ); - string hypname; - string libname; - string hypdata; - - // get number of datasets - int aNbSubObjects = aGroup->nInternalObjects(); - for ( int k = 0; k < aNbSubObjects; k++ ) { - // identify dataset - char name_of_subgroup[ HDF_NAME_MAX_LEN+1 ]; - aGroup->InternalObjectIndentify( k, name_of_subgroup ); - // --> get algorithm name - if ( strcmp( name_of_subgroup, "Name" ) == 0 ) { - aDataset = new HDFdataset( name_of_subgroup, aGroup ); - aDataset->OpenOnDisk(); - size = aDataset->GetSize(); - char* hypname_str = new char[ size ]; - aDataset->ReadFromDisk( hypname_str ); - hypname = string( hypname_str ); - delete hypname_str; - aDataset->CloseOnDisk(); - } - // --> get algorithm plugin library name - if ( strcmp( name_of_subgroup, "LibName" ) == 0 ) { - aDataset = new HDFdataset( name_of_subgroup, aGroup ); - aDataset->OpenOnDisk(); - size = aDataset->GetSize(); - char* libname_str = new char[ size ]; - aDataset->ReadFromDisk( libname_str ); - if(MYDEBUG) SCRUTE( libname_str ); - libname = string( libname_str ); - delete libname_str; - aDataset->CloseOnDisk(); - } - // --> get algorithm data - if ( strcmp( name_of_subgroup, "Data" ) == 0 ) { - aDataset = new HDFdataset( name_of_subgroup, aGroup ); - aDataset->OpenOnDisk(); - size = aDataset->GetSize(); - char* hypdata_str = new char[ size ]; - aDataset->ReadFromDisk( hypdata_str ); - if(MYDEBUG) SCRUTE( hypdata_str ); - hypdata = string( hypdata_str ); - delete hypdata_str; - aDataset->CloseOnDisk(); - } - } - // close algorithm HDF group - aGroup->CloseOnDisk(); - - // --> restore algorithm from data - if ( id > 0 && !hypname.empty()/* && !hypdata.empty()*/ ) { // VSR : persistent data can be empty - if(MYDEBUG) MESSAGE("VSR - load algo : id = " << id << - ", name = " << hypname.c_str() << ", persistent string = " << hypdata.c_str()); - SMESH::SMESH_Hypothesis_var myHyp; - - try { // protect persistence mechanism against exceptions - myHyp = this->createHypothesis( hypname.c_str(), libname.c_str() ); - } - catch (...) { - INFOS( "Exception during hypothesis creation" ); - } - - SMESH_Hypothesis_i* myImpl = dynamic_cast( GetServant( myHyp ).in() ); - if ( myImpl ) { - myImpl->LoadFrom( hypdata.c_str() ); - string iorString = GetORB()->object_to_string( myHyp ); - int newId = myStudyContext->findId( iorString ); - myStudyContext->mapOldToNew( id, newId ); - } - else - if(MYDEBUG) MESSAGE( "VSR - SMESH_Gen::Load - can't get servant" ); - } - } - } - // close algorithms root HDF group - aTopGroup->CloseOnDisk(); - } - - // --> the rest groups should be meshes - for ( int i = 0; i < aNbGroups; i++ ) { - // identify next group - char meshName[ HDF_NAME_MAX_LEN+1 ]; - aFile->InternalObjectIndentify( i, meshName ); - - if ( string( meshName ).substr( 0, 4 ) == string( "Mesh" ) ) { - // --> get mesh id - int id = atoi( string( meshName ).substr( 4 ).c_str() ); - if ( id <= 0 ) - continue; - - bool hasData = false; - - // open mesh HDF group - aTopGroup = new HDFgroup( meshName, aFile ); - aTopGroup->OpenOnDisk(); - - // get number of child HDF objects - int aNbObjects = aTopGroup->nInternalObjects(); - if ( aNbObjects > 0 ) { - // create mesh - if(MYDEBUG) MESSAGE( "VSR - load mesh : id = " << id ); - SMESH::SMESH_Mesh_var myNewMesh = this->createMesh(); - SMESH_Mesh_i* myNewMeshImpl = dynamic_cast( GetServant( myNewMesh ).in() ); - if ( !myNewMeshImpl ) - continue; - string iorString = GetORB()->object_to_string( myNewMesh ); - int newId = myStudyContext->findId( iorString ); - myStudyContext->mapOldToNew( id, newId ); - - ::SMESH_Mesh& myLocMesh = myNewMeshImpl->GetImpl(); - SMESHDS_Mesh* mySMESHDSMesh = myLocMesh.GetMeshDS(); - - // try to find mesh data dataset - if ( aTopGroup->ExistInternalObject( "Has data" ) ) { - // load mesh "has data" flag - aDataset = new HDFdataset( "Has data", aTopGroup ); - aDataset->OpenOnDisk(); - size = aDataset->GetSize(); - char* strHasData = new char[ size ]; - aDataset->ReadFromDisk( strHasData ); - aDataset->CloseOnDisk(); - if ( strcmp( strHasData, "1") == 0 ) { - // read mesh data from MED file - myReader.SetMesh( mySMESHDSMesh ); - myReader.SetMeshId( id ); - myReader.Perform(); - hasData = true; - } - } - - // try to read and set reference to shape - GEOM::GEOM_Object_var aShapeObject; - if ( aTopGroup->ExistInternalObject( "Ref on shape" ) ) { - // load mesh "Ref on shape" - it's an entry to SObject - aDataset = new HDFdataset( "Ref on shape", aTopGroup ); - aDataset->OpenOnDisk(); - size = aDataset->GetSize(); - char* refFromFile = new char[ size ]; - aDataset->ReadFromDisk( refFromFile ); - aDataset->CloseOnDisk(); - if ( strlen( refFromFile ) > 0 ) { - SALOMEDS::SObject_var shapeSO = myCurrentStudy->FindObjectID( refFromFile ); - - // Make sure GEOM data are loaded first - loadGeomData( shapeSO->GetFatherComponent() ); - - CORBA::Object_var shapeObject = SObjectToObject( shapeSO ); - if ( !CORBA::is_nil( shapeObject ) ) { - aShapeObject = GEOM::GEOM_Object::_narrow( shapeObject ); - if ( !aShapeObject->_is_nil() ) - myNewMeshImpl->SetShape( aShapeObject ); - } - } - } - - // try to get applied algorithms - if ( aTopGroup->ExistInternalObject( "Applied Algorithms" ) ) { - aGroup = new HDFgroup( "Applied Algorithms", aTopGroup ); - aGroup->OpenOnDisk(); - // get number of applied algorithms - int aNbSubObjects = aGroup->nInternalObjects(); - if(MYDEBUG) MESSAGE( "VSR - number of applied algos " << aNbSubObjects ); - for ( int j = 0; j < aNbSubObjects; j++ ) { - char name_dataset[ HDF_NAME_MAX_LEN+1 ]; - aGroup->InternalObjectIndentify( j, name_dataset ); - // check if it is an algorithm - if ( string( name_dataset ).substr( 0, 4 ) == string( "Algo" ) ) { - aDataset = new HDFdataset( name_dataset, aGroup ); - aDataset->OpenOnDisk(); - size = aDataset->GetSize(); - char* refFromFile = new char[ size ]; - aDataset->ReadFromDisk( refFromFile ); - aDataset->CloseOnDisk(); - - // san - it is impossible to recover applied algorithms using their entries within Load() method - - //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile ); - //CORBA::Object_var hypObject = SObjectToObject( hypSO ); - int id = atoi( refFromFile ); - string anIOR = myStudyContext->getIORbyOldId( id ); - if ( !anIOR.empty() ) { - CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() ); - if ( !CORBA::is_nil( hypObject ) ) { - SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject ); - if ( !anHyp->_is_nil() && !aShapeObject->_is_nil() ) - myNewMeshImpl->addHypothesis( aShapeObject, anHyp ); - } - } - } - } - aGroup->CloseOnDisk(); - } - - // try to get applied hypotheses - if ( aTopGroup->ExistInternalObject( "Applied Hypotheses" ) ) { - aGroup = new HDFgroup( "Applied Hypotheses", aTopGroup ); - aGroup->OpenOnDisk(); - // get number of applied hypotheses - int aNbSubObjects = aGroup->nInternalObjects(); - for ( int j = 0; j < aNbSubObjects; j++ ) { - char name_dataset[ HDF_NAME_MAX_LEN+1 ]; - aGroup->InternalObjectIndentify( j, name_dataset ); - // check if it is a hypothesis - if ( string( name_dataset ).substr( 0, 3 ) == string( "Hyp" ) ) { - aDataset = new HDFdataset( name_dataset, aGroup ); - aDataset->OpenOnDisk(); - size = aDataset->GetSize(); - char* refFromFile = new char[ size ]; - aDataset->ReadFromDisk( refFromFile ); - aDataset->CloseOnDisk(); - - // san - it is impossible to recover applied hypotheses using their entries within Load() method - - //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile ); - //CORBA::Object_var hypObject = SObjectToObject( hypSO ); - int id = atoi( refFromFile ); - string anIOR = myStudyContext->getIORbyOldId( id ); - if ( !anIOR.empty() ) { - CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() ); - if ( !CORBA::is_nil( hypObject ) ) { - SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject ); - if ( !anHyp->_is_nil() && !aShapeObject->_is_nil() ) - myNewMeshImpl->addHypothesis( aShapeObject, anHyp ); - } - } - } - } - aGroup->CloseOnDisk(); - } - - // --> try to find submeshes containers for each type of submesh - for ( int j = GetSubMeshOnVertexTag(); j <= GetSubMeshOnCompoundTag(); j++ ) { - char name_meshgroup[ 30 ]; - if ( j == GetSubMeshOnVertexTag() ) - strcpy( name_meshgroup, "SubMeshes On Vertex" ); - else if ( j == GetSubMeshOnEdgeTag() ) - strcpy( name_meshgroup, "SubMeshes On Edge" ); - else if ( j == GetSubMeshOnWireTag() ) - strcpy( name_meshgroup, "SubMeshes On Wire" ); - else if ( j == GetSubMeshOnFaceTag() ) - strcpy( name_meshgroup, "SubMeshes On Face" ); - else if ( j == GetSubMeshOnShellTag() ) - strcpy( name_meshgroup, "SubMeshes On Shell" ); - else if ( j == GetSubMeshOnSolidTag() ) - strcpy( name_meshgroup, "SubMeshes On Solid" ); - else if ( j == GetSubMeshOnCompoundTag() ) - strcpy( name_meshgroup, "SubMeshes On Compound" ); - - // try to get submeshes container HDF group - if ( aTopGroup->ExistInternalObject( name_meshgroup ) ) { - // open submeshes containers HDF group - aGroup = new HDFgroup( name_meshgroup, aTopGroup ); - aGroup->OpenOnDisk(); - - // get number of submeshes - int aNbSubMeshes = aGroup->nInternalObjects(); - for ( int k = 0; k < aNbSubMeshes; k++ ) { - // identify submesh - char name_submeshgroup[ HDF_NAME_MAX_LEN+1 ]; - aGroup->InternalObjectIndentify( k, name_submeshgroup ); - if ( string( name_submeshgroup ).substr( 0, 7 ) == string( "SubMesh" ) ) { - // --> get submesh id - int subid = atoi( string( name_submeshgroup ).substr( 7 ).c_str() ); - if ( subid <= 0 ) - continue; - // open submesh HDF group - aSubGroup = new HDFgroup( name_submeshgroup, aGroup ); - aSubGroup->OpenOnDisk(); - - // try to read and set reference to subshape - GEOM::GEOM_Object_var aSubShapeObject; - SMESH::SMESH_subMesh_var aSubMesh; - - if ( aSubGroup->ExistInternalObject( "Ref on shape" ) ) { - // load submesh "Ref on shape" - it's an entry to SObject - aDataset = new HDFdataset( "Ref on shape", aSubGroup ); - aDataset->OpenOnDisk(); - size = aDataset->GetSize(); - char* refFromFile = new char[ size ]; - aDataset->ReadFromDisk( refFromFile ); - aDataset->CloseOnDisk(); - if ( strlen( refFromFile ) > 0 ) { - SALOMEDS::SObject_var subShapeSO = myCurrentStudy->FindObjectID( refFromFile ); - CORBA::Object_var subShapeObject = SObjectToObject( subShapeSO ); - if ( !CORBA::is_nil( subShapeObject ) ) { - aSubShapeObject = GEOM::GEOM_Object::_narrow( subShapeObject ); - if ( !aSubShapeObject->_is_nil() ) - aSubMesh = SMESH::SMESH_subMesh::_duplicate - ( myNewMeshImpl->createSubMesh( aSubShapeObject ) ); - if ( aSubMesh->_is_nil() ) - continue; - string iorSubString = GetORB()->object_to_string( aSubMesh ); - int newSubId = myStudyContext->findId( iorSubString ); - myStudyContext->mapOldToNew( subid, newSubId ); - } - } - } - - if ( aSubMesh->_is_nil() ) - continue; - - // VSR: Get submesh data from MED convertor -// int anInternalSubmeshId = aSubMesh->GetId(); // this is not a persistent ID, it's an internal one computed from sub-shape -// if (myNewMeshImpl->_mapSubMesh.find(anInternalSubmeshId) != myNewMeshImpl->_mapSubMesh.end()) { -// if(MYDEBUG) MESSAGE("VSR - SMESH_Gen_i::Load(): loading from MED file submesh with ID = " << -// subid << " for subshape # " << anInternalSubmeshId); -// SMESHDS_SubMesh* aSubMeshDS = -// myNewMeshImpl->_mapSubMesh[anInternalSubmeshId]->CreateSubMeshDS(); -// if ( !aSubMeshDS ) { -// if(MYDEBUG) MESSAGE("VSR - SMESH_Gen_i::Load(): FAILED to create a submesh for subshape # " << -// anInternalSubmeshId << " in current mesh!"); -// } -// else -// myReader.GetSubMesh( aSubMeshDS, subid ); -// } - - // try to get applied algorithms - if ( aSubGroup->ExistInternalObject( "Applied Algorithms" ) ) { - // open "applied algorithms" HDF group - aSubSubGroup = new HDFgroup( "Applied Algorithms", aSubGroup ); - aSubSubGroup->OpenOnDisk(); - // get number of applied algorithms - int aNbSubObjects = aSubSubGroup->nInternalObjects(); - for ( int l = 0; l < aNbSubObjects; l++ ) { - char name_dataset[ HDF_NAME_MAX_LEN+1 ]; - aSubSubGroup->InternalObjectIndentify( l, name_dataset ); - // check if it is an algorithm - if ( string( name_dataset ).substr( 0, 4 ) == string( "Algo" ) ) { - aDataset = new HDFdataset( name_dataset, aSubSubGroup ); - aDataset->OpenOnDisk(); - size = aDataset->GetSize(); - char* refFromFile = new char[ size ]; - aDataset->ReadFromDisk( refFromFile ); - aDataset->CloseOnDisk(); - - //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile ); - //CORBA::Object_var hypObject = SObjectToObject( hypSO ); - int id = atoi( refFromFile ); - string anIOR = myStudyContext->getIORbyOldId( id ); - if ( !anIOR.empty() ) { - CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() ); - if ( !CORBA::is_nil( hypObject ) ) { - SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject ); - if ( !anHyp->_is_nil() && !aShapeObject->_is_nil() ) - myNewMeshImpl->addHypothesis( aSubShapeObject, anHyp ); - } - } - } - } - // close "applied algorithms" HDF group - aSubSubGroup->CloseOnDisk(); - } - - // try to get applied hypotheses - if ( aSubGroup->ExistInternalObject( "Applied Hypotheses" ) ) { - // open "applied hypotheses" HDF group - aSubSubGroup = new HDFgroup( "Applied Hypotheses", aSubGroup ); - aSubSubGroup->OpenOnDisk(); - // get number of applied hypotheses - int aNbSubObjects = aSubSubGroup->nInternalObjects(); - for ( int l = 0; l < aNbSubObjects; l++ ) { - char name_dataset[ HDF_NAME_MAX_LEN+1 ]; - aSubSubGroup->InternalObjectIndentify( l, name_dataset ); - // check if it is a hypothesis - if ( string( name_dataset ).substr( 0, 3 ) == string( "Hyp" ) ) { - aDataset = new HDFdataset( name_dataset, aSubSubGroup ); - aDataset->OpenOnDisk(); - size = aDataset->GetSize(); - char* refFromFile = new char[ size ]; - aDataset->ReadFromDisk( refFromFile ); - aDataset->CloseOnDisk(); - - //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile ); - //CORBA::Object_var hypObject = SObjectToObject( hypSO ); - int id = atoi( refFromFile ); - string anIOR = myStudyContext->getIORbyOldId( id ); - if ( !anIOR.empty() ) { - CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() ); - if ( !CORBA::is_nil( hypObject ) ) { - SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject ); - if ( !anHyp->_is_nil() && !aShapeObject->_is_nil() ) - myNewMeshImpl->addHypothesis( aSubShapeObject, anHyp ); - } - } - } - } - // close "applied hypotheses" HDF group - aSubSubGroup->CloseOnDisk(); - } - - // close submesh HDF group - aSubGroup->CloseOnDisk(); - } - } - // close submeshes containers HDF group - aGroup->CloseOnDisk(); - } - } - - if(hasData) { - // Read sub-meshes from MED - if(MYDEBUG) MESSAGE("JFA - Create all sub-meshes"); - myReader.CreateAllSubMeshes(); - - - // Read node positions on sub-shapes (SMDS_Position) - - if ( aTopGroup->ExistInternalObject( "Node Positions" )) - { - // There are 5 datasets to read: - // "Nodes on Edges" - ID of node on edge - // "Edge positions" - U parameter on node on edge - // "Nodes on Faces" - ID of node on face - // "Face U positions" - U parameter of node on face - // "Face V positions" - V parameter of node on face - char* aEid_DSName = "Nodes on Edges"; - char* aEu_DSName = "Edge positions"; - char* aFu_DSName = "Face U positions"; - //char* aFid_DSName = "Nodes on Faces"; - //char* aFv_DSName = "Face V positions"; - - // data to retrieve - int nbEids = 0, nbFids = 0; - int *aEids = 0, *aFids = 0; - double *aEpos = 0, *aFupos = 0, *aFvpos = 0; - - // open a group - aGroup = new HDFgroup( "Node Positions", aTopGroup ); - aGroup->OpenOnDisk(); - - // loop on 5 data sets - int aNbObjects = aGroup->nInternalObjects(); - for ( int i = 0; i < aNbObjects; i++ ) - { - // identify dataset - char aDSName[ HDF_NAME_MAX_LEN+1 ]; - aGroup->InternalObjectIndentify( i, aDSName ); - // read data - aDataset = new HDFdataset( aDSName, aGroup ); - aDataset->OpenOnDisk(); - if ( aDataset->GetType() == HDF_FLOAT64 ) // Positions - { - double* pos = new double [ aDataset->GetSize() ]; - aDataset->ReadFromDisk( pos ); - // which one? - if ( strncmp( aDSName, aEu_DSName, strlen( aEu_DSName )) == 0 ) - aEpos = pos; - else if ( strncmp( aDSName, aFu_DSName, strlen( aFu_DSName )) == 0 ) - aFupos = pos; - else - aFvpos = pos; - } - else // NODE IDS - { - int aSize = aDataset->GetSize()/sizeof(int); - int* ids = new int [aSize]; - aDataset->ReadFromDisk( ids ); - // on face or nodes? - if ( strncmp( aDSName, aEid_DSName, strlen( aEid_DSName )) == 0 ) { - aEids = ids; - nbEids = aSize; - } - else { - aFids = ids; - nbFids = aSize; - } - } - } // loop on 5 datasets - - // Set node positions on edges or faces - for ( int onFace = 0; onFace < 2; onFace++ ) - { - int nbNodes = ( onFace ? nbFids : nbEids ); - if ( nbNodes == 0 ) continue; - int* aNodeIDs = ( onFace ? aFids : aEids ); - double* aUPos = ( onFace ? aFupos : aEpos ); - double* aVPos = ( onFace ? aFvpos : 0 ); - // loop on node IDs - for ( int iNode = 0; iNode < nbNodes; iNode++ ) - { - const SMDS_MeshNode* node = mySMESHDSMesh->FindNode( aNodeIDs[ iNode ]); - ASSERT( node ); - SMDS_PositionPtr aPos = node->GetPosition(); - ASSERT( aPos ) - if ( onFace ) { - ASSERT( aPos->GetTypeOfPosition() == SMDS_TOP_FACE ); - SMDS_FacePosition* fPos = const_cast - ( static_cast( aPos.get() )); - fPos->SetUParameter( aUPos[ iNode ]); - fPos->SetVParameter( aVPos[ iNode ]); - } - else { - ASSERT( aPos->GetTypeOfPosition() == SMDS_TOP_EDGE ); - SMDS_EdgePosition* fPos = const_cast - ( static_cast( aPos.get() )); - fPos->SetUParameter( aUPos[ iNode ]); - } - } - } - if ( aEids ) delete [] aEids; - if ( aFids ) delete [] aFids; - if ( aEpos ) delete [] aEpos; - if ( aFupos ) delete [] aFupos; - if ( aFvpos ) delete [] aFvpos; - - aGroup->CloseOnDisk(); - - } // if ( aTopGroup->ExistInternalObject( "Node Positions" ) ) - } // if ( hasData ) - - // Recompute State (as computed sub-meshes are restored from MED) - if ( !aShapeObject->_is_nil() ) { - MESSAGE("JFA - Compute State Engine ..."); - TopoDS_Shape myLocShape = GeomObjectToShape( aShapeObject ); - myNewMeshImpl->GetImpl().GetSubMesh(myLocShape)->ComputeStateEngine - (SMESH_subMesh::SUBMESH_RESTORED); - MESSAGE("JFA - Compute State Engine finished"); - } - - // try to get groups - for ( int ii = GetNodeGroupsTag(); ii <= GetVolumeGroupsTag(); ii++ ) { - char name_group[ 30 ]; - if ( ii == GetNodeGroupsTag() ) - strcpy( name_group, "Groups of Nodes" ); - else if ( ii == GetEdgeGroupsTag() ) - strcpy( name_group, "Groups of Edges" ); - else if ( ii == GetFaceGroupsTag() ) - strcpy( name_group, "Groups of Faces" ); - else if ( ii == GetVolumeGroupsTag() ) - strcpy( name_group, "Groups of Volumes" ); - - if ( aTopGroup->ExistInternalObject( name_group ) ) { - aGroup = new HDFgroup( name_group, aTopGroup ); - aGroup->OpenOnDisk(); - // get number of groups - int aNbSubObjects = aGroup->nInternalObjects(); - for ( int j = 0; j < aNbSubObjects; j++ ) { - char name_dataset[ HDF_NAME_MAX_LEN+1 ]; - aGroup->InternalObjectIndentify( j, name_dataset ); - // check if it is an group - if ( string( name_dataset ).substr( 0, 5 ) == string( "Group" ) ) { - // --> get group id - int subid = atoi( string( name_dataset ).substr( 5 ).c_str() ); - if ( subid <= 0 ) - continue; - aDataset = new HDFdataset( name_dataset, aGroup ); - aDataset->OpenOnDisk(); - - // Retrieve actual group name - size = aDataset->GetSize(); - char* nameFromFile = new char[ size ]; - aDataset->ReadFromDisk( nameFromFile ); - aDataset->CloseOnDisk(); - - // Try to find a shape reference - TopoDS_Shape aShape; - char aRefName[ 30 ]; - sprintf( aRefName, "Ref on shape %d", subid); - if ( aGroup->ExistInternalObject( aRefName ) ) { - // load mesh "Ref on shape" - it's an entry to SObject - aDataset = new HDFdataset( aRefName, aGroup ); - aDataset->OpenOnDisk(); - size = aDataset->GetSize(); - char* refFromFile = new char[ size ]; - aDataset->ReadFromDisk( refFromFile ); - aDataset->CloseOnDisk(); - if ( strlen( refFromFile ) > 0 ) { - SALOMEDS::SObject_var shapeSO = myCurrentStudy->FindObjectID( refFromFile ); - CORBA::Object_var shapeObject = SObjectToObject( shapeSO ); - if ( !CORBA::is_nil( shapeObject ) ) { - aShapeObject = GEOM::GEOM_Object::_narrow( shapeObject ); - if ( !aShapeObject->_is_nil() ) - aShape = GeomObjectToShape( aShapeObject ); - } - } - } - // Create group servant - SMESH::ElementType type = (SMESH::ElementType)(ii - GetNodeGroupsTag() + 1); - SMESH::SMESH_GroupBase_var aNewGroup = SMESH::SMESH_GroupBase::_duplicate - ( myNewMeshImpl->createGroup( type, nameFromFile, aShape ) ); - // Obtain a SMESHDS_Group object - if ( aNewGroup->_is_nil() ) - continue; - - string iorSubString = GetORB()->object_to_string( aNewGroup ); - int newSubId = myStudyContext->findId( iorSubString ); - myStudyContext->mapOldToNew( subid, newSubId ); - - SMESH_GroupBase_i* aGroupImpl = - dynamic_cast( GetServant( aNewGroup ).in() ); - if ( !aGroupImpl ) - continue; - - SMESH_Group* aLocalGroup = myLocMesh.GetGroup( aGroupImpl->GetLocalID() ); - if ( !aLocalGroup ) - continue; - - SMESHDS_GroupBase* aGroupBaseDS = aLocalGroup->GetGroupDS(); - aGroupBaseDS->SetStoreName( name_dataset ); - - // Fill group with contents from MED file - SMESHDS_Group* aGrp = dynamic_cast( aGroupBaseDS ); - if ( aGrp ) - myReader.GetGroup( aGrp ); - } - } - aGroup->CloseOnDisk(); - } - } - } - // close mesh group - aTopGroup->CloseOnDisk(); - } - } - } - // close HDF file - aFile->CloseOnDisk(); - delete aFile; - - // Remove temporary files created from the stream - if ( !isMultiFile ) - SALOMEDS_Tool::RemoveTemporaryFiles( tmpDir.ToCString(), aFileSeq.in(), true ); - - INFOS( "SMESH_Gen_i::Load completed" ); - return true; -} - -//============================================================================= -/*! - * SMESH_Gen_i::LoadASCII - * - * Load SMESH module's data in ASCII format (not implemented yet) - */ -//============================================================================= - -bool SMESH_Gen_i::LoadASCII( SALOMEDS::SComponent_ptr theComponent, - const SALOMEDS::TMPFile& theStream, - const char* theURL, - bool isMultiFile ) { - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::LoadASCII" ); - return Load( theComponent, theStream, theURL, isMultiFile ); -} - -//============================================================================= -/*! - * SMESH_Gen_i::Close - * - * Clears study-connected data when it is closed - */ -//============================================================================= - -void SMESH_Gen_i::Close( SALOMEDS::SComponent_ptr theComponent ) -{ - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::Close" ); - - // Clear study contexts data - int studyId = GetCurrentStudyID(); - if ( myStudyContextMap.find( studyId ) != myStudyContextMap.end() ) { - delete myStudyContextMap[ studyId ]; - myStudyContextMap.erase( studyId ); - } - return; -} - -//============================================================================= -/*! - * SMESH_Gen_i::ComponentDataType - * - * Get component data type - */ -//============================================================================= - -char* SMESH_Gen_i::ComponentDataType() -{ - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::ComponentDataType" ); - return CORBA::string_dup( "SMESH" ); -} - - -//============================================================================= -/*! - * SMESH_Gen_i::IORToLocalPersistentID - * - * Transform data from transient form to persistent - */ -//============================================================================= - -char* SMESH_Gen_i::IORToLocalPersistentID( SALOMEDS::SObject_ptr /*theSObject*/, - const char* IORString, - CORBA::Boolean /*isMultiFile*/, - CORBA::Boolean /*isASCII*/ ) -{ - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::IORToLocalPersistentID" ); - StudyContext* myStudyContext = GetCurrentStudyContext(); - - if ( myStudyContext && strcmp( IORString, "" ) != 0 ) { - int anId = myStudyContext->findId( IORString ); - if ( anId ) { - if(MYDEBUG) MESSAGE( "VSR " << anId ) - char strId[ 20 ]; - sprintf( strId, "%d", anId ); - return CORBA::string_dup( strId ); - } - } - return CORBA::string_dup( "" ); -} - -//============================================================================= -/*! - * SMESH_Gen_i::LocalPersistentIDToIOR - * - * Transform data from persistent form to transient - */ -//============================================================================= - -char* SMESH_Gen_i::LocalPersistentIDToIOR( SALOMEDS::SObject_ptr /*theSObject*/, - const char* aLocalPersistentID, - CORBA::Boolean /*isMultiFile*/, - CORBA::Boolean /*isASCII*/ ) -{ - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::LocalPersistentIDToIOR(): id = " << aLocalPersistentID ); - StudyContext* myStudyContext = GetCurrentStudyContext(); - - if ( myStudyContext && strcmp( aLocalPersistentID, "" ) != 0 ) { - int anId = atoi( aLocalPersistentID ); - return CORBA::string_dup( myStudyContext->getIORbyOldId( anId ).c_str() ); - } - return CORBA::string_dup( "" ); -} - -//======================================================================= -//function : RegisterObject -//purpose : -//======================================================================= - -int SMESH_Gen_i::RegisterObject(CORBA::Object_ptr theObject) -{ - StudyContext* myStudyContext = GetCurrentStudyContext(); - if ( myStudyContext && !CORBA::is_nil( theObject )) { - string iorString = GetORB()->object_to_string( theObject ); - return myStudyContext->addObject( iorString ); - } - return 0; -} - -//============================================================================= -/*! - * SMESHEngine_factory - * - * C factory, accessible with dlsym, after dlopen - */ -//============================================================================= - -extern "C" -{ - PortableServer::ObjectId* SMESHEngine_factory( CORBA::ORB_ptr orb, - PortableServer::POA_ptr poa, - PortableServer::ObjectId* contId, - const char* instanceName, - const char* interfaceName ) - { - if(MYDEBUG) MESSAGE( "PortableServer::ObjectId* SMESHEngine_factory()" ); - if(MYDEBUG) SCRUTE(interfaceName); - SMESH_Gen_i* aSMESHGen = new SMESH_Gen_i(orb, poa, contId, instanceName, interfaceName); - return aSMESHGen->getId() ; - } -} diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx deleted file mode 100644 index 152edb6ce..000000000 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ /dev/null @@ -1,444 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Gen_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_GEN_I_HXX_ -#define _SMESH_GEN_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_Gen) -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_Hypothesis) -#include CORBA_CLIENT_HEADER(GEOM_Gen) -#include CORBA_CLIENT_HEADER(SALOMEDS) -#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) - -#include "SMESH_Mesh_i.hxx" -#include "SMESH_Hypothesis_i.hxx" -#include "SALOME_Component_i.hxx" -#include "SALOME_NamingService.hxx" - -#include "SMESH_Gen.hxx" -#include "GEOM_Client.hxx" - -#include -#include -#include - -#include -#include - -class SMESH_Mesh_i; -class SALOME_LifeCycleCORBA; - -// =========================================================== -// Study context - stores study-connected objects references -// ========================================================== -class StudyContext -{ -public: - // constructor - StudyContext() {} - // destructor - ~StudyContext() - { - mapIdToIOR.clear(); - mapIdToId.clear(); - } - // register object in the internal map and return its id - int addObject( string theIOR ) - { - int nextId = getNextId(); - mapIdToIOR[ nextId ] = theIOR; - return nextId; - } - // find the object id in the internal map by the IOR - int findId( string theIOR ) - { - map::iterator imap; - for ( imap = mapIdToIOR.begin(); imap != mapIdToIOR.end(); ++imap ) { - if ( imap->second == theIOR ) - return imap->first; - } - return 0; - } - // get object's IOR by id - string getIORbyId( const int theId ) - { - if ( mapIdToIOR.find( theId ) != mapIdToIOR.end() ) - return mapIdToIOR[ theId ]; - return string( "" ); - } - // get object's IOR by old id - string getIORbyOldId( const int theOldId ) - { - if ( mapIdToId.find( theOldId ) != mapIdToId.end() ) - return getIORbyId( mapIdToId[ theOldId ] ); - return string( "" ); - } - // maps old object id to the new one (used when restoring data) - void mapOldToNew( const int oldId, const int newId ) { - mapIdToId[ oldId ] = newId; - } - -private: - // get next free object identifier - int getNextId() - { - int id = 1; - while( mapIdToIOR.find( id ) != mapIdToIOR.end() ) - id++; - return id; - } - - map mapIdToIOR; // persistent-to-transient map - map mapIdToId; // used to translate object from persistent to transient form -}; - -// =========================================================== -// SMESH module's engine -// ========================================================== -class SMESH_Gen_i: - public virtual POA_SMESH::SMESH_Gen, - public virtual Engines_Component_i -{ -public: - // Get last created instance of the class - static SMESH_Gen_i* GetSMESHGen() { return mySMESHGen;} - // Get ORB object - static CORBA::ORB_var GetORB() { return myOrb;} - // Get SMESH module's POA object - static PortableServer::POA_var GetPOA() { return myPoa;} - // Get Naming Service object - static SALOME_NamingService* GetNS(); - // Get SALOME_LifeCycleCORBA object - static SALOME_LifeCycleCORBA* GetLCC(); - // Retrieve and get GEOM engine reference - static GEOM::GEOM_Gen_ptr GetGeomEngine(); - // Get object of the CORBA reference - static PortableServer::ServantBase_var GetServant( CORBA::Object_ptr theObject ); - // Get CORBA object corresponding to the SALOMEDS::SObject - static CORBA::Object_var SObjectToObject( SALOMEDS::SObject_ptr theSObject ); - // Get the SALOMEDS::SObject corresponding to a CORBA object - static SALOMEDS::SObject_ptr ObjectToSObject(SALOMEDS::Study_ptr theStudy, - CORBA::Object_ptr theObject); - // Get GEOM Object correspoding to TopoDS_Shape - GEOM::GEOM_Object_ptr ShapeToGeomObject (const TopoDS_Shape& theShape ); - // Get TopoDS_Shape correspoding to GEOM_Object - TopoDS_Shape GeomObjectToShape(GEOM::GEOM_Object_ptr theGeomObject); - - // Default constructor - SMESH_Gen_i(); - // Standard constructor - SMESH_Gen_i( CORBA::ORB_ptr orb, - PortableServer::POA_ptr poa, - PortableServer::ObjectId* contId, - const char* instanceName, - const char* interfaceName ); - // Destructor - virtual ~SMESH_Gen_i(); - - // ***************************************** - // Interface methods - // ***************************************** - - // Set current study - void SetCurrentStudy( SALOMEDS::Study_ptr theStudy ); - // Get current study - SALOMEDS::Study_ptr GetCurrentStudy(); - - // Create hypothesis/algorothm of given type - SMESH::SMESH_Hypothesis_ptr CreateHypothesis (const char* theHypType, - const char* theLibName) - throw ( SALOME::SALOME_Exception ); - - // Create empty mesh on a shape - SMESH::SMESH_Mesh_ptr CreateMesh( GEOM::GEOM_Object_ptr theShapeObject ) - throw ( SALOME::SALOME_Exception ); - - // Create mesh(es) and import data from UNV file - SMESH::SMESH_Mesh_ptr CreateMeshesFromUNV( const char* theFileName ) - throw ( SALOME::SALOME_Exception ); - - // Create mesh(es) and import data from MED file - SMESH::mesh_array* CreateMeshesFromMED( const char* theFileName, - SMESH::DriverMED_ReadStatus& theStatus ) - throw ( SALOME::SALOME_Exception ); - - // Create mesh(es) and import data from STL file - SMESH::SMESH_Mesh_ptr CreateMeshesFromSTL( const char* theFileName ) - throw ( SALOME::SALOME_Exception ); - - // Compute mesh on a shape - CORBA::Boolean Compute( SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theShapeObject ) - throw ( SALOME::SALOME_Exception ); - - // Returns true if mesh contains enough data to be computed - CORBA::Boolean IsReadyToCompute( SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theShapeObject ) - throw ( SALOME::SALOME_Exception ); - - // Get sub-shapes unique ID's list - SMESH::long_array* GetSubShapesId( GEOM::GEOM_Object_ptr theMainShapeObject, - const SMESH::object_array& theListOfSubShape ) - throw ( SALOME::SALOME_Exception ); - - - // **************************************************** - // Interface inherited methods (from SALOMEDS::Driver) - // **************************************************** - - // Save SMESH data - SALOMEDS::TMPFile* Save( SALOMEDS::SComponent_ptr theComponent, - const char* theURL, - bool isMultiFile ); - // Load SMESH data - bool Load( SALOMEDS::SComponent_ptr theComponent, - const SALOMEDS::TMPFile& theStream, - const char* theURL, - bool isMultiFile ); - // Save SMESH data in ASCII format - SALOMEDS::TMPFile* SaveASCII( SALOMEDS::SComponent_ptr theComponent, - const char* theURL, - bool isMultiFile ); - // Load SMESH data in ASCII format - bool LoadASCII( SALOMEDS::SComponent_ptr theComponent, - const SALOMEDS::TMPFile& theStream, - const char* theURL, - bool isMultiFile ); - - // Create filter manager - SMESH::FilterManager_ptr CreateFilterManager(); - - // Return a pattern mesher - SMESH::SMESH_Pattern_ptr GetPattern(); - - // Clears study-connected data when it is closed - void Close( SALOMEDS::SComponent_ptr theComponent ); - - // Get component data type - char* ComponentDataType(); - - // Transform data from transient form to persistent - char* IORToLocalPersistentID( SALOMEDS::SObject_ptr theSObject, - const char* IORString, - CORBA::Boolean isMultiFile, - CORBA::Boolean isASCII ); - // Transform data from persistent form to transient - char* LocalPersistentIDToIOR( SALOMEDS::SObject_ptr theSObject, - const char* aLocalPersistentID, - CORBA::Boolean isMultiFile, - CORBA::Boolean isASCII ); - - // Returns true if object can be published in the study - bool CanPublishInStudy( CORBA::Object_ptr theIOR ); - // Publish object in the study - SALOMEDS::SObject_ptr PublishInStudy( SALOMEDS::Study_ptr theStudy, - SALOMEDS::SObject_ptr theSObject, - CORBA::Object_ptr theObject, - const char* theName ) - throw ( SALOME::SALOME_Exception ); - - // Copy-paste methods - returns true if object can be copied to the clipboard - CORBA::Boolean CanCopy( SALOMEDS::SObject_ptr theObject ) { return false; } - // Copy-paste methods - copy object to the clipboard - SALOMEDS::TMPFile* CopyFrom( SALOMEDS::SObject_ptr theObject, CORBA::Long& theObjectID ) { return false; } - // Copy-paste methods - returns true if object can be pasted from the clipboard - CORBA::Boolean CanPaste( const char* theComponentName, CORBA::Long theObjectID ) { return false; } - // Copy-paste methods - paste object from the clipboard - SALOMEDS::SObject_ptr PasteInto( const SALOMEDS::TMPFile& theStream, - CORBA::Long theObjectID, - SALOMEDS::SObject_ptr theObject ) { - SALOMEDS::SObject_var aResultSO; - return aResultSO._retn(); - } - - // ============ - // Dump python - // ============ - - virtual Engines::TMPFile* DumpPython(CORBA::Object_ptr theStudy, - CORBA::Boolean isPublished, - CORBA::Boolean& isValidScript); - - void AddToPythonScript (int theStudyID, const TCollection_AsciiString& theString); - - void RemoveLastFromPythonScript (int theStudyID); - - static void AddToCurrentPyScript (const TCollection_AsciiString& theString); - - void SavePython (SALOMEDS::Study_ptr theStudy); - - TCollection_AsciiString DumpPython_impl (int theStudyID, - Resource_DataMapOfAsciiStringAsciiString& theObjectNames, - Resource_DataMapOfAsciiStringAsciiString& theNames, - bool isPublished, - bool& aValidScript, - const TCollection_AsciiString& theSavedTrace); - - TCollection_AsciiString GetNewPythonLines (int theStudyID); - - void CleanPythonTrace (int theStudyID); - - // Dump python comfort methods - - static TCollection_AsciiString& AddObject(TCollection_AsciiString& theStr, - CORBA::Object_ptr theObject); - // add object to script string - - template - static TCollection_AsciiString& AddArray(TCollection_AsciiString& theStr, - const _array & array) - // put array contents into theStr like this: "[ 1, 2, 5 ]" - { - ostringstream sout; // can convert long int, and TCollection_AsciiString cant - sout << "[ "; - for (int i = 1; i <= array.length(); i++) { - sout << array[i-1]; - if ( i < array.length() ) - sout << ", "; - } - sout << " ]"; - theStr += (char*) sout.str().c_str(); - return theStr; - } - - // ***************************************** - // Internal methods - // ***************************************** -public: - // Get shape reader - GEOM_Client* GetShapeReader(); - - // Tags definition - static long GetHypothesisRootTag(); - static long GetAlgorithmsRootTag(); - static long GetRefOnShapeTag(); - static long GetRefOnAppliedHypothesisTag(); - static long GetRefOnAppliedAlgorithmsTag(); - static long GetSubMeshOnVertexTag(); - static long GetSubMeshOnEdgeTag(); - static long GetSubMeshOnFaceTag(); - static long GetSubMeshOnSolidTag(); - static long GetSubMeshOnCompoundTag(); - static long GetSubMeshOnWireTag(); - static long GetSubMeshOnShellTag(); - static long GetNodeGroupsTag(); - static long GetEdgeGroupsTag(); - static long GetFaceGroupsTag(); - static long GetVolumeGroupsTag(); - - // publishing methods - SALOMEDS::SComponent_ptr PublishComponent(SALOMEDS::Study_ptr theStudy); - SALOMEDS::SObject_ptr PublishMesh (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, - const char* theName = 0); - SALOMEDS::SObject_ptr PublishHypothesis (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Hypothesis_ptr theHyp, - const char* theName = 0); - SALOMEDS::SObject_ptr PublishSubMesh (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, - SMESH::SMESH_subMesh_ptr theSubMesh, - GEOM::GEOM_Object_ptr theShapeObject, - const char* theName = 0); - SALOMEDS::SObject_ptr PublishGroup (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, - SMESH::SMESH_GroupBase_ptr theGroup, - GEOM::GEOM_Object_ptr theShapeObject, - const char* theName = 0); - bool AddHypothesisToShape(SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theShapeObject, - SMESH::SMESH_Hypothesis_ptr theHyp); - bool RemoveHypothesisFromShape(SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theShapeObject, - SMESH::SMESH_Hypothesis_ptr theHyp); - SALOMEDS::SObject_ptr GetMeshOrSubmeshByShape (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theShape); - static void SetName(SALOMEDS::SObject_ptr theSObject, - const char* theName, - const char* theDefaultName = 0); - - // Get study context - StudyContext* GetCurrentStudyContext(); - - // Register an object in a StudyContext; return object id - int RegisterObject(CORBA::Object_ptr theObject); - - // Get current study ID - int GetCurrentStudyID() - { return myCurrentStudy->_is_nil() ? -1 : myCurrentStudy->StudyId(); } - -private: - // Create hypothesis of given type - SMESH::SMESH_Hypothesis_ptr createHypothesis( const char* theHypName, - const char* theLibName) - throw ( SALOME::SALOME_Exception ); - - // Create empty mesh on shape - SMESH::SMESH_Mesh_ptr createMesh() - throw ( SALOME::SALOME_Exception ); - - static void loadGeomData( SALOMEDS::SComponent_ptr theCompRoot ); - -private: - - static CORBA::ORB_var myOrb; // ORB reference - static PortableServer::POA_var myPoa; // POA reference - static SALOME_NamingService* myNS; // Naming Service - static SALOME_LifeCycleCORBA* myLCC; // Life Cycle CORBA - static SMESH_Gen_i* mySMESHGen; // Point to last created instance of the class - ::SMESH_Gen myGen; // SMESH_Gen local implementation - - // hypotheses managing - map myHypCreatorMap; - - map myStudyContextMap; // Map of study context objects - - GEOM_Client* myShapeReader; // Shape reader - SALOMEDS::Study_var myCurrentStudy; // Current study - - // Dump Python: trace of API methods calls - std::map < int, Handle(TColStd_HSequenceOfAsciiString) > myPythonScripts; -}; - - -namespace SMESH -{ - template - T - DownCast(CORBA::Object_ptr theArg) - { - return dynamic_cast(SMESH_Gen_i::GetServant(theArg).in()); - } -} - - -#endif diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx deleted file mode 100644 index d3c645941..000000000 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ /dev/null @@ -1,845 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// File : SMESH_Gen_i_1.cxx -// Created : Thu Oct 21 17:24:06 2004 -// Author : Edward AGAPOV (eap) -// Module : SMESH -// $Header: - -#include "SMESH_Gen_i.hxx" - -#include "SMESH_Mesh_i.hxx" -#include "SMESH_Hypothesis_i.hxx" -#include "SMESH_Algo_i.hxx" -#include "SMESH_Group_i.hxx" - -#include "SMESH.hxx" - -#include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog) - -#include "utilities.h" -#include "Utils_ExceptHandlers.hxx" - -#include - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - -//============================================================================= -/*! - * Get...Tag [ static ] - * - * Methods which determine SMESH data model structure - */ -//============================================================================= - -long SMESH_Gen_i::GetHypothesisRootTag() -{ - return Tag_HypothesisRoot; -} - -long SMESH_Gen_i::GetAlgorithmsRootTag() -{ - return Tag_AlgorithmsRoot; -} - -long SMESH_Gen_i::GetRefOnShapeTag() -{ - return Tag_RefOnShape; -} - -long SMESH_Gen_i::GetRefOnAppliedHypothesisTag() -{ - return Tag_RefOnAppliedHypothesis; -} - -long SMESH_Gen_i::GetRefOnAppliedAlgorithmsTag() -{ - return Tag_RefOnAppliedAlgorithms; -} - -long SMESH_Gen_i::GetSubMeshOnVertexTag() -{ - return Tag_SubMeshOnVertex; -} - -long SMESH_Gen_i::GetSubMeshOnEdgeTag() -{ - return Tag_SubMeshOnEdge; -} - -long SMESH_Gen_i::GetSubMeshOnFaceTag() -{ - return Tag_SubMeshOnFace; -} - -long SMESH_Gen_i::GetSubMeshOnSolidTag() -{ - return Tag_SubMeshOnSolid; -} - -long SMESH_Gen_i::GetSubMeshOnCompoundTag() -{ - return Tag_SubMeshOnCompound; -} - -long SMESH_Gen_i::GetSubMeshOnWireTag() -{ - return Tag_SubMeshOnWire; -} - -long SMESH_Gen_i::GetSubMeshOnShellTag() -{ - return Tag_SubMeshOnShell; -} - -long SMESH_Gen_i::GetNodeGroupsTag() -{ - return Tag_NodeGroups; -} - -long SMESH_Gen_i::GetEdgeGroupsTag() -{ - return Tag_EdgeGroups; -} - -long SMESH_Gen_i::GetFaceGroupsTag() -{ - return Tag_FaceGroups; -} - -long SMESH_Gen_i::GetVolumeGroupsTag() -{ - return Tag_VolumeGroups; -} - -//============================================================================= -/*! - * SMESH_Gen_i::CanPublishInStudy - * - * Returns true if object can be published in the study - */ -//============================================================================= - -bool SMESH_Gen_i::CanPublishInStudy(CORBA::Object_ptr theIOR) -{ - if(MYDEBUG) MESSAGE("CanPublishInStudy - "<_is_nil() ) - return true; - - SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(theIOR); - if( !aSubMesh->_is_nil() ) - return true; - - SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow(theIOR); - if( !aHyp->_is_nil() ) - return true; - - SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(theIOR); - if( !aGroup->_is_nil() ) - return true; - - if(MYDEBUG) MESSAGE("CanPublishInStudy--CANT"); - return false; -} - -//======================================================================= -//function : ObjectToSObject -//purpose : -//======================================================================= - -SALOMEDS::SObject_ptr SMESH_Gen_i::ObjectToSObject(SALOMEDS::Study_ptr theStudy, - CORBA::Object_ptr theObject) -{ - SALOMEDS::SObject_var aSO; - if ( !CORBA::is_nil( theStudy ) && !CORBA::is_nil( theObject )) - aSO = theStudy->FindObjectIOR( SMESH_Gen_i::GetORB()->object_to_string( theObject ) ); - return aSO._retn(); -} - -//======================================================================= -//function : objectToServant -//purpose : -//======================================================================= - -template static inline T* objectToServant( CORBA::Object_ptr theIOR ) -{ - return dynamic_cast( SMESH_Gen_i::GetServant( theIOR ).in() ); -} - -//======================================================================= -//function : ShapeToGeomObject -//purpose : -//======================================================================= - -GEOM::GEOM_Object_ptr SMESH_Gen_i::ShapeToGeomObject (const TopoDS_Shape& theShape ) -{ - GEOM::GEOM_Object_var aShapeObj; - if ( !theShape.IsNull() ) { - GEOM_Client* aClient = GetShapeReader(); - TCollection_AsciiString IOR; - if ( aClient && aClient->Find( theShape, IOR )) - aShapeObj = GEOM::GEOM_Object::_narrow - ( GetORB()->string_to_object( IOR.ToCString() ) ); - } - return aShapeObj._retn(); -} - -//======================================================================= -//function : GeomObjectToShape -//purpose : -//======================================================================= - -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(); - if ( aClient && !aGeomEngine->_is_nil () ) - S = aClient->GetShape( aGeomEngine, theGeomObject ); - } - return S; -} - -//======================================================================= -//function : publish -//purpose : -//======================================================================= - -static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, - CORBA::Object_ptr theIOR, - SALOMEDS::SObject_ptr theFatherObject, - const int theTag = 0, - const char* thePixMap = 0, - const bool theSelectable = true) -{ - SALOMEDS::SObject_var SO = SMESH_Gen_i::ObjectToSObject( theStudy, theIOR ); - SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); - if ( SO->_is_nil() ) { - if ( theTag == 0 ) - SO = aStudyBuilder->NewObject( theFatherObject ); - else if ( !theFatherObject->FindSubObject( theTag, SO )) - SO = aStudyBuilder->NewObjectToTag( theFatherObject, theTag ); - } - - SALOMEDS::GenericAttribute_var anAttr; - if ( !CORBA::is_nil( theIOR )) { - anAttr = aStudyBuilder->FindOrCreateAttribute( SO, "AttributeIOR" ); - SALOMEDS::AttributeIOR::_narrow(anAttr)->SetValue - ( SMESH_Gen_i::GetORB()->object_to_string( theIOR ) ); - } - if ( thePixMap ) { - anAttr = aStudyBuilder->FindOrCreateAttribute( SO, "AttributePixMap" ); - SALOMEDS::AttributePixMap::_narrow( anAttr )->SetPixMap( thePixMap ); - } - if ( !theSelectable ) { - anAttr = aStudyBuilder->FindOrCreateAttribute( SO, "AttributeSelectable" ); - SALOMEDS::AttributeSelectable::_narrow( anAttr )->SetSelectable( false ); - } - return SO._retn(); -} - -//======================================================================= -//function : setName -//purpose : -//======================================================================= - -void SMESH_Gen_i::SetName(SALOMEDS::SObject_ptr theSObject, - const char* theName, - const char* theDefaultName) -{ - if ( !theSObject->_is_nil() ) { - SALOMEDS::StudyBuilder_var aStudyBuilder = theSObject->GetStudy()->NewBuilder(); - SALOMEDS::GenericAttribute_var anAttr = - aStudyBuilder->FindOrCreateAttribute( theSObject, "AttributeName" ); - SALOMEDS::AttributeName_var aNameAttr = SALOMEDS::AttributeName::_narrow( anAttr ); - if ( theName && strlen( theName ) != 0 ) - aNameAttr->SetValue( theName ); - else { - CORBA::String_var curName = CORBA::string_dup( aNameAttr->Value() ); - if ( strlen( curName ) == 0 ) { - TCollection_AsciiString aName( (char*) theDefaultName ); - aName += TCollection_AsciiString("_") + TCollection_AsciiString( theSObject->Tag() ); - aNameAttr->SetValue( aName.ToCString() ); - } - } - } -} - -//======================================================================= -//function : addReference -//purpose : -//======================================================================= - -static void addReference (SALOMEDS::Study_ptr theStudy, - SALOMEDS::SObject_ptr theSObject, - CORBA::Object_ptr theToObject, - int theTag = 0) -{ - SALOMEDS::SObject_var aToObjSO = SMESH_Gen_i::ObjectToSObject( theStudy, theToObject ); - if ( !aToObjSO->_is_nil() && !theSObject->_is_nil() ) { - SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); - SALOMEDS::SObject_var aReferenceSO; - if ( !theTag ) { - bool isReferred = false; - SALOMEDS::ChildIterator_var anIter = theStudy->NewChildIterator( theSObject ); - for ( ; !isReferred && anIter->More(); anIter->Next() ) { - if ( anIter->Value()->ReferencedObject( aReferenceSO ) && - strcmp( aReferenceSO->GetID(), aToObjSO->GetID() ) == 0 ) - isReferred = true; - } - if ( !isReferred ) { - aReferenceSO = aStudyBuilder->NewObject( theSObject ); - aStudyBuilder->Addreference( aReferenceSO, aToObjSO ); - } - } - else { - if ( !theSObject->FindSubObject( theTag, aReferenceSO )) - aReferenceSO = aStudyBuilder->NewObjectToTag( theSObject, theTag ); - aStudyBuilder->Addreference( aReferenceSO, aToObjSO ); - } - } -} - -//============================================================================= -/*! - * SMESH_Gen_i::PublishInStudy - * - * Publish object in the study - */ -//============================================================================= - -SALOMEDS::SObject_ptr SMESH_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy, - SALOMEDS::SObject_ptr theSObject, - CORBA::Object_ptr theIOR, - const char* theName) - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - SALOMEDS::SObject_var aSO; - if ( CORBA::is_nil( theStudy ) || CORBA::is_nil( theIOR )) - return aSO._retn(); - if(MYDEBUG) MESSAGE("PublishInStudy"); - - // Publishing a mesh - SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( theIOR ); - if( !aMesh->_is_nil() ) - aSO = PublishMesh( theStudy, aMesh, theName ); - - // Publishing a sub-mesh - SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( theIOR ); - if( aSO->_is_nil() && !aSubMesh->_is_nil() ) { - GEOM::GEOM_Object_var aShapeObject = aSubMesh->GetSubShape(); - aMesh = aSubMesh->GetFather(); - aSO = PublishSubMesh( theStudy, aMesh, aSubMesh, aShapeObject, theName ); - } - - // Publishing a hypothesis or algorithm - SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow( theIOR ); - if ( aSO->_is_nil() && !aHyp->_is_nil() ) - aSO = PublishHypothesis( theStudy, aHyp ); - - // Publishing a group - SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(theIOR); - if ( aSO->_is_nil() && !aGroup->_is_nil() ) { - GEOM::GEOM_Object_var aShapeObject; - aMesh = aGroup->GetMesh(); - aSO = PublishGroup( theStudy, aMesh, aGroup, aShapeObject, theName ); - } - if(MYDEBUG) MESSAGE("PublishInStudy_END"); - - return aSO._retn(); -} - -//======================================================================= -//function : PublishComponent -//purpose : -//======================================================================= - -SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent(SALOMEDS::Study_ptr theStudy) -{ - if ( CORBA::is_nil( theStudy )) - return SALOMEDS::SComponent::_nil(); - if(MYDEBUG) MESSAGE("PublishComponent"); - - SALOMEDS::SComponent_var father = - SALOMEDS::SComponent::_narrow( theStudy->FindComponent( ComponentDataType() ) ); - if ( !CORBA::is_nil( father ) ) - return father._retn(); - - SALOME_ModuleCatalog::ModuleCatalog_var aCat = - SALOME_ModuleCatalog::ModuleCatalog::_narrow( GetNS()->Resolve("/Kernel/ModulCatalog") ); - if ( CORBA::is_nil( aCat ) ) - return father._retn(); - - SALOME_ModuleCatalog::Acomponent_var aComp = aCat->GetComponent( ComponentDataType() ); - if ( CORBA::is_nil( aComp ) ) - return father._retn(); - - SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); - SALOMEDS::GenericAttribute_var anAttr; - SALOMEDS::AttributePixMap_var aPixmap; - - father = aStudyBuilder->NewComponent( ComponentDataType() ); - aStudyBuilder->DefineComponentInstance( father, SMESH_Gen::_this() ); - anAttr = aStudyBuilder->FindOrCreateAttribute( father, "AttributePixMap" ); - aPixmap = SALOMEDS::AttributePixMap::_narrow( anAttr ); - aPixmap ->SetPixMap( "ICON_OBJBROWSER_SMESH" ); - SetName( father, aComp->componentusername(), "MESH" ); - if(MYDEBUG) MESSAGE("PublishComponent--END"); - - return father._retn(); -} - -//============================================================================= -/*! - * findMaxChildTag [ static internal ] - * - * Finds maximum child tag for the given object - */ -//============================================================================= - -static long findMaxChildTag( SALOMEDS::SObject_ptr theSObject ) -{ - long aTag = 0; - if ( !theSObject->_is_nil() ) { - SALOMEDS::Study_var aStudy = theSObject->GetStudy(); - if ( !aStudy->_is_nil() ) { - SALOMEDS::ChildIterator_var anIter = aStudy->NewChildIterator( theSObject ); - for ( ; anIter->More(); anIter->Next() ) { - long nTag = anIter->Value()->Tag(); - if ( nTag > aTag ) - aTag = nTag; - } - } - } - return aTag; -} - -//======================================================================= -//function : PublishMesh -//purpose : -//======================================================================= - -SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, - const char* theName) -{ - if ( CORBA::is_nil( theStudy ) || - CORBA::is_nil( theMesh )) - return SALOMEDS::SComponent::_nil(); - if(MYDEBUG) MESSAGE("PublishMesh--IN"); - - // find or publish a mesh - - SALOMEDS::SObject_var aMeshSO = ObjectToSObject( theStudy, theMesh ); - if ( aMeshSO->_is_nil() ) - { - SALOMEDS::SComponent_var father = PublishComponent( theStudy ); - if ( father->_is_nil() ) - return aMeshSO._retn(); - - // Find correct free tag - long aTag = findMaxChildTag( father.in() ); - if ( aTag <= GetAlgorithmsRootTag() ) - aTag = GetAlgorithmsRootTag() + 1; - else - aTag++; - - aMeshSO = publish (theStudy, theMesh, father, aTag, "ICON_SMESH_TREE_MESH_WARN" ); - if ( aMeshSO->_is_nil() ) - return aMeshSO._retn(); - } - SetName( aMeshSO, theName, "Mesh" ); - - // Add shape reference - - GEOM::GEOM_Object_var aShapeObject = theMesh->GetShapeToMesh(); - if ( !CORBA::is_nil( aShapeObject )) { - addReference( theStudy, aMeshSO, aShapeObject, GetRefOnShapeTag() ); - - // Publish global hypotheses - - SMESH::ListOfHypothesis * hypList = theMesh->GetHypothesisList( aShapeObject ); - if ( hypList ) - for ( int i = 0; i < hypList->length(); i++ ) { - SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow( (*hypList)[ i ]); - PublishHypothesis( theStudy, aHyp ); - AddHypothesisToShape( theStudy, theMesh, aShapeObject, aHyp ); - } - } - - // Publish submeshes - - SMESH_Mesh_i* mesh_i = objectToServant( theMesh ); - if ( !mesh_i ) - return aMeshSO._retn(); - map& subMap = mesh_i->_mapSubMesh_i; - map::iterator subIt = subMap.begin(); - for ( ; subIt != subMap.end(); subIt++ ) { - SMESH::SMESH_subMesh_ptr aSubMesh = (*subIt).second->_this(); - if ( !CORBA::is_nil( aSubMesh )) { - aShapeObject = aSubMesh->GetSubShape(); - PublishSubMesh( theStudy, theMesh, aSubMesh, aShapeObject ); - } - } - - // Publish groups - const map& grMap = mesh_i->getGroups(); - map::const_iterator it = grMap.begin(); - for ( ; it != grMap.end(); it++ ) - { - SMESH::SMESH_GroupBase_ptr aGroup = (*it).second; - if ( !aGroup->_is_nil() ) { - GEOM::GEOM_Object_var aShapeObj; - SMESH::SMESH_GroupOnGeom_var aGeomGroup = - SMESH::SMESH_GroupOnGeom::_narrow( aGroup ); - if ( !aGeomGroup->_is_nil() ) - aShapeObj = aGeomGroup->GetShape(); - PublishGroup( theStudy, theMesh, aGroup, aShapeObj ); - } - } - - if(MYDEBUG) MESSAGE("PublishMesh_END"); - return aMeshSO._retn(); -} - -//======================================================================= -//function : PublishSubMesh -//purpose : -//======================================================================= - -SALOMEDS::SObject_ptr SMESH_Gen_i::PublishSubMesh (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, - SMESH::SMESH_subMesh_ptr theSubMesh, - GEOM::GEOM_Object_ptr theShapeObject, - const char* theName) -{ - if (theStudy->_is_nil() || theMesh->_is_nil() || - theSubMesh->_is_nil() || theShapeObject->_is_nil() ) - return SALOMEDS::SObject::_nil(); - - SALOMEDS::SObject_var aSubMeshSO = ObjectToSObject( theStudy, theSubMesh ); - if ( aSubMeshSO->_is_nil() ) - { - SALOMEDS::SObject_var aMeshSO = ObjectToSObject( theStudy, theMesh ); - if ( aMeshSO->_is_nil() ) { - aMeshSO = PublishMesh( theStudy, theMesh ); - if ( aMeshSO->_is_nil()) - return SALOMEDS::SObject::_nil(); - } - // Find submesh sub-tree tag - long aRootTag; - char* aRootName = ""; - switch ( theShapeObject->GetShapeType() ) { - case GEOM::VERTEX: - aRootTag = GetSubMeshOnVertexTag(); - aRootName = "SubMeshes on Vertex"; - break; - case GEOM::EDGE: - aRootTag = GetSubMeshOnEdgeTag(); - aRootName = "SubMeshes on Edge"; - break; - case GEOM::WIRE: - aRootTag = GetSubMeshOnWireTag(); - aRootName = "SubMeshes on Wire"; - break; - case GEOM::FACE: - aRootTag = GetSubMeshOnFaceTag(); - aRootName = "SubMeshes on Face"; - break; - case GEOM::SHELL: - aRootTag = GetSubMeshOnShellTag(); - aRootName = "SubMeshes on Shell"; - break; - case GEOM::SOLID: - aRootTag = GetSubMeshOnSolidTag(); - aRootName = "SubMeshes on Solid"; - break; - default: - aRootTag = GetSubMeshOnCompoundTag(); - aRootName = "SubMeshes on Compound"; - break; - } - - // Find or create submesh root - SALOMEDS::SObject_var aRootSO = publish (theStudy, CORBA::Object::_nil(), - aMeshSO, aRootTag, 0, false ); - SetName( aRootSO, aRootName ); - - // Add new submesh to corresponding sub-tree - aSubMeshSO = publish (theStudy, theSubMesh, aRootSO, 0, "ICON_SMESH_TREE_MESH_WARN"); - if ( aSubMeshSO->_is_nil() ) - return aSubMeshSO._retn(); - } - SetName( aSubMeshSO, theName, "SubMesh" ); - - // Add reference to theShapeObject - - addReference( theStudy, aSubMeshSO, theShapeObject, 1 ); - - // Publish hypothesis - - SMESH::ListOfHypothesis * hypList = theMesh->GetHypothesisList( theShapeObject ); - if ( hypList ) - for ( int i = 0; i < hypList->length(); i++ ) { - SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow( (*hypList)[ i ]); - PublishHypothesis( theStudy, aHyp ); - AddHypothesisToShape( theStudy, theMesh, theShapeObject, aHyp ); - } - - return aSubMeshSO._retn(); -} - -//======================================================================= -//function : PublishGroup -//purpose : -//======================================================================= - -SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, - SMESH::SMESH_GroupBase_ptr theGroup, - GEOM::GEOM_Object_ptr theShapeObject, - const char* theName) -{ - if (theStudy->_is_nil() || theMesh->_is_nil() || theGroup->_is_nil() ) - return SALOMEDS::SObject::_nil(); - - SALOMEDS::SObject_var aGroupSO = ObjectToSObject( theStudy, theGroup ); - if ( aGroupSO->_is_nil() ) - { - SALOMEDS::SObject_var aMeshSO = ObjectToSObject( theStudy, theMesh ); - if ( aMeshSO->_is_nil() ) { - aMeshSO = PublishInStudy( theStudy, SALOMEDS::SObject::_nil(), theMesh, ""); - if ( aMeshSO->_is_nil()) - return SALOMEDS::SObject::_nil(); - } - int aType = (int)theGroup->GetType(); - const char* aRootNames[] = { - "Compound Groups", "Groups of Nodes", - "Groups of Edges", "Groups of Faces", "Groups of Volumes" }; - - // Currently, groups with heterogenous content are not supported - if ( aType != SMESH::ALL ) { - long aRootTag = GetNodeGroupsTag() + aType - 1; - - // Find or create groups root - SALOMEDS::SObject_var aRootSO = publish (theStudy, CORBA::Object::_nil(), - aMeshSO, aRootTag, 0, false ); - if ( aType < 5 ) - SetName( aRootSO, aRootNames[aType] ); - - // Add new group to corresponding sub-tree - aGroupSO = publish (theStudy, theGroup, aRootSO, 0, "ICON_SMESH_TREE_GROUP" ); - } - if ( aGroupSO->_is_nil() ) - return aGroupSO._retn(); - } - - SetName( aGroupSO, theName, "Group" ); - - //Add reference to geometry - if ( !theShapeObject->_is_nil() ) - addReference( theStudy, aGroupSO, theShapeObject, 1 ); - - return aGroupSO._retn(); -} - -//======================================================================= -//function : PublishHypothesis -//purpose : -//======================================================================= - -SALOMEDS::SObject_ptr - SMESH_Gen_i::PublishHypothesis (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Hypothesis_ptr theHyp, - const char* theName) -{ - if(MYDEBUG) MESSAGE("PublishHypothesis") - if (theStudy->_is_nil() || theHyp->_is_nil()) - return SALOMEDS::SObject::_nil(); - - SALOMEDS::SObject_var aHypSO = ObjectToSObject( theStudy, theHyp ); - if ( aHypSO->_is_nil() ) - { - SALOMEDS::SComponent_var father = PublishComponent( theStudy ); - if ( father->_is_nil() ) - return aHypSO._retn(); - - //Find or Create Hypothesis root - bool isAlgo = ( !SMESH::SMESH_Algo::_narrow( theHyp )->_is_nil() ); - int aRootTag = isAlgo ? GetAlgorithmsRootTag() : GetHypothesisRootTag(); - SALOMEDS::SObject_var aRootSO = - publish (theStudy, CORBA::Object::_nil(),father, aRootTag, - isAlgo ? "ICON_SMESH_TREE_ALGO" : "ICON_SMESH_TREE_HYPO", false); - SetName( aRootSO, isAlgo ? "Algorithms" : "Hypotheses" ); - - // Add New Hypothesis - string aPmName = isAlgo ? "ICON_SMESH_TREE_ALGO_" : "ICON_SMESH_TREE_HYPO_"; - aPmName += theHyp->GetName(); - aHypSO = publish( theStudy, theHyp, aRootSO, 0, aPmName.c_str() ); - } - - if ( !aHypSO->_is_nil() ) { - CORBA::String_var aHypName = CORBA::string_dup( theHyp->GetName() ); - SetName( aHypSO, theName, aHypName ); - } - - if(MYDEBUG) MESSAGE("PublishHypothesis--END") - return aHypSO._retn(); -} - -//======================================================================= -//function : GetMeshOrSubmeshByShape -//purpose : -//======================================================================= - -SALOMEDS::SObject_ptr - SMESH_Gen_i::GetMeshOrSubmeshByShape (SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theShape) -{ - if(MYDEBUG) MESSAGE("GetMeshOrSubmeshByShape") - SALOMEDS::SObject_var aMeshOrSubMesh; - if ( theShape->_is_nil() || theMesh->_is_nil() ) - return aMeshOrSubMesh._retn(); - - TopoDS_Shape aShape = GeomObjectToShape( theShape ); - SMESH_Mesh_i* mesh_i = objectToServant( theMesh ); - - if ( !aShape.IsNull() && mesh_i && mesh_i->GetImpl().GetMeshDS() ) { - SMESHDS_Mesh* meshDS = mesh_i->GetImpl().GetMeshDS(); - if ( aShape.IsSame( meshDS->ShapeToMesh() )) - aMeshOrSubMesh = ObjectToSObject( theStudy, theMesh ); - else { - int shapeID = meshDS->ShapeToIndex( aShape ); - SMESH::SMESH_subMesh_var aSubMesh = mesh_i->getSubMesh(shapeID); - if ( !aSubMesh->_is_nil() ) - aMeshOrSubMesh = ObjectToSObject( theStudy, aSubMesh ); - } - } - if(MYDEBUG) MESSAGE("GetMeshOrSubmeshByShape--END") - return aMeshOrSubMesh._retn(); -} - -//======================================================================= -//function : AddHypothesisToShape -//purpose : -//======================================================================= - -bool SMESH_Gen_i::AddHypothesisToShape(SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theShape, - SMESH::SMESH_Hypothesis_ptr theHyp) -{ - if(MYDEBUG) MESSAGE("AddHypothesisToShape") - if (theStudy->_is_nil() || theMesh->_is_nil() || - theHyp->_is_nil() || theShape->_is_nil() ) - return false; - - SALOMEDS::SObject_var aMeshSO = ObjectToSObject( theStudy, theMesh ); - if ( aMeshSO->_is_nil() ) - aMeshSO = PublishMesh( theStudy, theMesh ); - SALOMEDS::SObject_var aHypSO = PublishHypothesis( theStudy, theHyp ); - if ( aMeshSO->_is_nil() || aHypSO->_is_nil()) - return false; - - // Find a mesh or submesh refering to theShape - SALOMEDS::SObject_var aMeshOrSubMesh = - GetMeshOrSubmeshByShape( theStudy, theMesh, theShape ); - if ( aMeshOrSubMesh->_is_nil() ) - { - // publish submesh - TopoDS_Shape aShape = GeomObjectToShape( theShape ); - SMESH_Mesh_i* mesh_i = objectToServant( theMesh ); - if ( !aShape.IsNull() && mesh_i && mesh_i->GetImpl().GetMeshDS() ) { - SMESHDS_Mesh* meshDS = mesh_i->GetImpl().GetMeshDS(); - int shapeID = meshDS->ShapeToIndex( aShape ); - SMESH::SMESH_subMesh_var aSubMesh = mesh_i->getSubMesh(shapeID); - aMeshOrSubMesh = PublishSubMesh( theStudy, theMesh, aSubMesh, theShape ); - } - if ( aMeshOrSubMesh->_is_nil() ) - return false; - } - - //Find or Create Applied Hypothesis root - bool aIsAlgo = !SMESH::SMESH_Algo::_narrow( theHyp )->_is_nil(); - SALOMEDS::SObject_var AHR = - publish (theStudy, CORBA::Object::_nil(), aMeshOrSubMesh, - aIsAlgo ? GetRefOnAppliedAlgorithmsTag() : GetRefOnAppliedHypothesisTag(), - aIsAlgo ? "ICON_SMESH_TREE_ALGO" : "ICON_SMESH_TREE_HYPO", false); - SetName( AHR, aIsAlgo ? "Applied algorithms" : "Applied hypotheses" ); - if ( AHR->_is_nil() ) - return false; - - addReference( theStudy, AHR, theHyp ); - if(MYDEBUG) MESSAGE("AddHypothesisToShape--END") - return true; -} - -//======================================================================= -//function : RemoveHypothesisFromShape -//purpose : -//======================================================================= - -bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr theStudy, - SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theShape, - SMESH::SMESH_Hypothesis_ptr theHyp) -{ - if (theStudy->_is_nil() || theMesh->_is_nil() || - theHyp->_is_nil() || theShape->_is_nil() ) - return false; - - SALOMEDS::SObject_var aHypSO = ObjectToSObject( theStudy, theHyp ); - if ( aHypSO->_is_nil() ) - return false; - - // Find a mesh or submesh refering to theShape - SALOMEDS::SObject_var aMeshOrSubMesh = - GetMeshOrSubmeshByShape( theStudy, theMesh, theShape ); - if ( aMeshOrSubMesh->_is_nil() ) - return false; - - // Find and remove a reference to aHypSO - SALOMEDS::SObject_var aRef, anObj; - CORBA::String_var anID = CORBA::string_dup( aHypSO->GetID() ); - SALOMEDS::ChildIterator_var it = theStudy->NewChildIterator( aMeshOrSubMesh ); - for ( it->InitEx( true ); it->More(); it->Next() ) { - anObj = it->Value(); - if (anObj->ReferencedObject( aRef ) && strcmp( aRef->GetID(), anID ) == 0 ) { - theStudy->NewBuilder()->RemoveObject( anObj ); - break; - } - } - return true; -} - diff --git a/src/SMESH_I/SMESH_Group_i.cxx b/src/SMESH_I/SMESH_Group_i.cxx deleted file mode 100644 index 47236abcc..000000000 --- a/src/SMESH_I/SMESH_Group_i.cxx +++ /dev/null @@ -1,436 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's classes -// -// Copyright (C) 2004 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Group_i.cxx -// Author : Sergey ANIKIN, OCC -// Module : SMESH -// $Header$ - - -#include "SMESH_Group_i.hxx" -#include "SMESH_Mesh_i.hxx" -#include "SMESH_Gen_i.hxx" -#include "SMESH_Group.hxx" -#include "SMESHDS_Group.hxx" -#include "SMESHDS_GroupOnGeom.hxx" -#include "SMDSAbs_ElementType.hxx" - -#include "SMESH_Filter_i.hxx" -#include "SMESH_PythonDump.hxx" - -#include "utilities.h" - -using namespace SMESH; - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_GroupBase_i::SMESH_GroupBase_i( PortableServer::POA_ptr thePOA, SMESH_Mesh_i* theMeshServant, const int theLocalID ) -: SALOME::GenericObj_i( thePOA ), - myMeshServant( theMeshServant ), - myLocalID( theLocalID ) -{ - // PAL7962: san -- To ensure correct mapping of servant and correct reference counting in GenericObj_i, - // servant activation is performed by SMESH_Mesh_i::createGroup() - // thePOA->activate_object( this ); -} - -SMESH_Group_i::SMESH_Group_i( PortableServer::POA_ptr thePOA, SMESH_Mesh_i* theMeshServant, const int theLocalID ) - : SALOME::GenericObj_i( thePOA ), - SMESH_GroupBase_i( thePOA, theMeshServant, theLocalID ) -{ - MESSAGE("SMESH_Group_i; this = "<SetName(theName); - - // Update group name in a study - SMESH_Gen_i* aGen = myMeshServant->GetGen(); - aGen->SetName( aGen->ObjectToSObject( aGen->GetCurrentStudy(), _this() ), theName ); - return; - } - MESSAGE("can't set name of a vague group"); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -char* SMESH_GroupBase_i::GetName() -{ - ::SMESH_Group* aGroup = GetSmeshGroup(); - if (aGroup) - return CORBA::string_dup (aGroup->GetName()); - MESSAGE("get name of a vague group"); - return CORBA::string_dup( "NO_NAME" ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::ElementType SMESH_GroupBase_i::GetType() -{ - SMESHDS_GroupBase* aGroupDS = GetGroupDS(); - if (aGroupDS) { - SMDSAbs_ElementType aSMDSType = aGroupDS->GetType(); - SMESH::ElementType aType; - switch (aSMDSType) { - case SMDSAbs_Node: aType = SMESH::NODE; break; - case SMDSAbs_Edge: aType = SMESH::EDGE; break; - case SMDSAbs_Face: aType = SMESH::FACE; break; - case SMDSAbs_Volume: aType = SMESH::VOLUME; break; - default: aType = SMESH::ALL; break; - } - return aType; - } - MESSAGE("get type of a vague group"); - return SMESH::ALL; -} - - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Long SMESH_GroupBase_i::Size() -{ - SMESHDS_GroupBase* aGroupDS = GetGroupDS(); - if (aGroupDS) - return aGroupDS->Extent(); - MESSAGE("get size of a vague group"); - return 0; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Boolean SMESH_GroupBase_i::IsEmpty() -{ - SMESHDS_GroupBase* aGroupDS = GetGroupDS(); - if (aGroupDS) - return aGroupDS->IsEmpty(); - MESSAGE("checking IsEmpty of a vague group"); - return true; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_Group_i::Clear() -{ - // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".Clear()"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - // Clear the group - SMESHDS_Group* aGroupDS = dynamic_cast( GetGroupDS() ); - if (aGroupDS) { - aGroupDS->Clear(); - return; - } - MESSAGE("attempt to clear a vague group"); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Boolean SMESH_GroupBase_i::Contains( CORBA::Long theID ) -{ - SMESHDS_GroupBase* aGroupDS = GetGroupDS(); - if (aGroupDS) - return aGroupDS->Contains(theID); - MESSAGE("attempt to check contents of a vague group"); - return false; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Long SMESH_Group_i::Add( const SMESH::long_array& theIDs ) -{ - // Update Python script - TCollection_AsciiString aStr ("nbAdd = "); - SMESH_Gen_i::AddObject(aStr, _this()) += ".Add("; - SMESH_Gen_i::AddArray(aStr, theIDs) += ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - // Add elements to the group - SMESHDS_Group* aGroupDS = dynamic_cast( GetGroupDS() ); - if (aGroupDS) { - int nbAdd = 0; - for (int i = 0; i < theIDs.length(); i++) { - int anID = (int) theIDs[i]; - if (aGroupDS->Add(anID)) - nbAdd++; - } - return nbAdd; - } - MESSAGE("attempt to add elements to a vague group"); - return 0; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Long SMESH_Group_i::Remove( const SMESH::long_array& theIDs ) -{ - // Update Python script - TCollection_AsciiString aStr ("nbDel = "); - SMESH_Gen_i::AddObject(aStr, _this()) += ".Remove("; - SMESH_Gen_i::AddArray(aStr, theIDs) += ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - // Remove elements from the group - SMESHDS_Group* aGroupDS = dynamic_cast( GetGroupDS() ); - if (aGroupDS) { - int nbDel = 0; - for (int i = 0; i < theIDs.length(); i++) { - int anID = (int) theIDs[i]; - if (aGroupDS->Remove(anID)) - nbDel++; - } - return nbDel; - } - MESSAGE("attempt to remove elements from a vague group"); - return 0; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -typedef bool (SMESHDS_Group::*TFunChangeGroup)(const int); - -CORBA::Long -ChangeByPredicate( SMESH::Predicate_i* thePredicate, - SMESHDS_GroupBase* theGroupBase, - TFunChangeGroup theFun) -{ - CORBA::Long aNb = 0; - if(SMESHDS_Group* aGroupDS = dynamic_cast(theGroupBase)){ - SMESH::Controls::Filter::TIdSequence aSequence; - const SMDS_Mesh* aMesh = theGroupBase->GetMesh(); - SMESH::Filter_i::GetElementsId(thePredicate,aMesh,aSequence); - - CORBA::Long i = 0, iEnd = aSequence.size(); - for(; i < iEnd; i++) - if((aGroupDS->*theFun)(aSequence[i])) - aNb++; - return aNb; - } - return aNb; -} - -CORBA::Long -SMESH_Group_i:: -AddByPredicate( SMESH::Predicate_ptr thePredicate ) -{ - if(SMESH::Predicate_i* aPredicate = SMESH::GetPredicate(thePredicate)){ - TPythonDump()<<_this()<<".AddByPredicate("<GetID(theIndex); - MESSAGE("attempt to iterate on a vague group"); - return -1; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::long_array* SMESH_GroupBase_i::GetListOfID() -{ - SMESH::long_array_var aRes = new SMESH::long_array(); - SMESHDS_GroupBase* aGroupDS = GetGroupDS(); - if (aGroupDS) { - int aSize = aGroupDS->Extent(); - aRes->length(aSize); - for (int i = 0; i < aSize; i++) - aRes[i] = aGroupDS->GetID(i+1); - return aRes._retn(); - } - MESSAGE("get list of IDs of a vague group"); - return aRes._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -SMESH::SMESH_Mesh_ptr SMESH_GroupBase_i::GetMesh() -{ - SMESH::SMESH_Mesh_var aMesh; - if ( myMeshServant ) - aMesh = SMESH::SMESH_Mesh::_narrow( myMeshServant->_this() ); - return aMesh._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -SMESH::long_array* SMESH_GroupBase_i::GetIDs() -{ - SMESH::long_array_var aResult = GetListOfID(); - return aResult._retn(); -} - -//======================================================================= -//function : GetShape -//purpose : -//======================================================================= - -GEOM::GEOM_Object_ptr SMESH_GroupOnGeom_i::GetShape() -{ - GEOM::GEOM_Object_var aGeomObj; - SMESHDS_GroupOnGeom* aGroupDS = dynamic_cast( GetGroupDS() ); - if ( aGroupDS ) { - SMESH_Gen_i* aGen = GetMeshServant()->GetGen(); - aGeomObj = aGen->ShapeToGeomObject( aGroupDS->GetShape() ); - } - return aGeomObj._retn(); -} - diff --git a/src/SMESH_I/SMESH_Group_i.hxx b/src/SMESH_I/SMESH_Group_i.hxx deleted file mode 100644 index e9801b258..000000000 --- a/src/SMESH_I/SMESH_Group_i.hxx +++ /dev/null @@ -1,115 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's classes -// -// Copyright (C) 2004 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Group_i.hxx -// Author : Sergey ANIKIN, OCC -// Module : SMESH -// $Header$ - - -#ifndef SMESH_Group_i_HeaderFile -#define SMESH_Group_i_HeaderFile - -#include -#include CORBA_SERVER_HEADER(SMESH_Group) -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_CLIENT_HEADER(GEOM_Gen) - -#include "SALOME_GenericObj_i.hh" - -class SMESH_Mesh_i; -class SMESH_Group; -class SMESHDS_GroupBase; - -// =========== -// Group Base -// =========== -class SMESH_GroupBase_i: - public virtual POA_SMESH::SMESH_GroupBase, - public virtual SALOME::GenericObj_i -{ - public: - SMESH_GroupBase_i(PortableServer::POA_ptr thePOA, - SMESH_Mesh_i* theMeshServant, - const int theLocalID ); - virtual ~SMESH_GroupBase_i(); - - // CORBA interface implementation - void SetName(const char* name); - char* GetName(); - SMESH::ElementType GetType(); - CORBA::Long Size(); - CORBA::Boolean IsEmpty(); - CORBA::Boolean Contains(CORBA::Long elem_id); - CORBA::Long GetID(CORBA::Long elem_index); - SMESH::long_array* GetListOfID(); - SMESH::SMESH_Mesh_ptr GetMesh(); - - // Inherited from SMESH_IDSource interface - virtual SMESH::long_array* GetIDs(); - - // Internal C++ interface - int GetLocalID() const { return myLocalID; } - SMESH_Mesh_i* GetMeshServant() const { return myMeshServant; } - SMESH_Group* GetSmeshGroup() const; - SMESHDS_GroupBase* GetGroupDS() const; - -private: - SMESH_Mesh_i* myMeshServant; - int myLocalID; -}; - -// ====== -// Group -// ====== - -class SMESH_Group_i: - public virtual POA_SMESH::SMESH_Group, - public SMESH_GroupBase_i -{ - public: - SMESH_Group_i( PortableServer::POA_ptr thePOA, SMESH_Mesh_i* theMeshServant, const int theLocalID ); - - // CORBA interface implementation - void Clear(); - CORBA::Long Add( const SMESH::long_array& theIDs ); - CORBA::Long Remove( const SMESH::long_array& theIDs ); - - CORBA::Long AddByPredicate( SMESH::Predicate_ptr thePredicate ); - CORBA::Long RemoveByPredicate( SMESH::Predicate_ptr thePredicate ); -}; - -// ========================= -// Group linked to geometry -// ========================= - -class SMESH_GroupOnGeom_i: - public virtual POA_SMESH::SMESH_GroupOnGeom, - public SMESH_GroupBase_i -{ - public: - SMESH_GroupOnGeom_i( PortableServer::POA_ptr thePOA, SMESH_Mesh_i* theMeshServant, const int theLocalID ); - - // CORBA interface implementation - GEOM::GEOM_Object_ptr GetShape(); -}; -#endif diff --git a/src/SMESH_I/SMESH_Hypothesis_i.cxx b/src/SMESH_I/SMESH_Hypothesis_i.cxx deleted file mode 100644 index d5cdce9fb..000000000 --- a/src/SMESH_I/SMESH_Hypothesis_i.cxx +++ /dev/null @@ -1,181 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Hypothesis_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include -#include -#include "SMESH_Hypothesis_i.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * SMESH_Hypothesis_i::SMESH_Hypothesis_i - * - * Constructor - */ -//============================================================================= - -SMESH_Hypothesis_i::SMESH_Hypothesis_i( PortableServer::POA_ptr thePOA ) - : SALOME::GenericObj_i( thePOA ) -{ - MESSAGE( "SMESH_Hypothesis_i::SMESH_Hypothesis_i / Début" ); - myBaseImpl = 0; - // _CS_gbo This instruction fails - // thePOA->activate_object( this ); - // _CS_gbo I keep the POA reference to activate the object in the future. - myPOA = thePOA; - - MESSAGE( "SMESH_Hypothesis_i::SMESH_Hypothesis_i / Fin" ); -}; - -//============================================================================= -/*! - * SMESH_Hypothesis_i::Activate() - * - * Activation of the object - */ -//============================================================================= -void SMESH_Hypothesis_i::Activate() { - myPOA->activate_object( this ); -} - -//============================================================================= -/*! - * SMESH_Hypothesis_i::~SMESH_Hypothesis_i - * - * Destructor - */ -//============================================================================= - -SMESH_Hypothesis_i::~SMESH_Hypothesis_i() -{ - MESSAGE( "SMESH_Hypothesis_i::~SMESH_Hypothesis_i" ); - if ( myBaseImpl ) - delete myBaseImpl; -}; - -//============================================================================= -/*! - * SMESH_Hypothesis_i::GetName - * - * Get type name of hypothesis - */ -//============================================================================= - -char* SMESH_Hypothesis_i::GetName() -{ - MESSAGE( "SMESH_Hypothesis_i::GetName" ); - return CORBA::string_dup( myBaseImpl->GetName() ); -}; - -//============================================================================= -/*! - * SMESH_Hypothesis_i::GetLibName - * - * Get plugin library name of hypothesis (required by persistency mechanism) - */ -//============================================================================= - -char* SMESH_Hypothesis_i::GetLibName() -{ - MESSAGE( "SMESH_Hypothesis_i::GetLibName" ); - return CORBA::string_dup( myBaseImpl->GetLibName() ); -}; - -//============================================================================= -/*! - * SMESH_Hypothesis_i::SetLibName - * - * Set plugin library name of hypothesis (required by persistency mechanism) - */ -//============================================================================= - -void SMESH_Hypothesis_i::SetLibName(const char* theLibName) -{ - MESSAGE( "SMESH_Hypothesis_i::SetLibName" ); - myBaseImpl->SetLibName( theLibName ); -}; - -//============================================================================= -/*! - * SMESH_Hypothesis_i::GetId - * - * Get unique id of hypothesis - */ -//============================================================================= - -CORBA::Long SMESH_Hypothesis_i::GetId() -{ - MESSAGE( "SMESH_Hypothesis_i::GetId" ); - return myBaseImpl->GetID(); -} - -//============================================================================= -/*! - * SMESH_Hypothesis_i::GetImpl - * - * Get implementation - */ -//============================================================================= - -::SMESH_Hypothesis* SMESH_Hypothesis_i::GetImpl() -{ - MESSAGE( "SMESH_Hypothesis_i::GetImpl" ); - return myBaseImpl; -} - -//============================================================================= -/*! - * SMESH_Hypothesis_i::SaveTo - * - * Persistence: Dumps parameters to the string stream - */ -//============================================================================= - -char* SMESH_Hypothesis_i::SaveTo() -{ - MESSAGE( "SMESH_Hypothesis_i::SaveTo" ); - std::ostringstream os; - myBaseImpl->SaveTo( os ); - return CORBA::string_dup( os.str().c_str() ); -} - -//============================================================================= -/*! -* SMESH_Hypothesis_i::LoadFrom -* -* Persistence: Restores parameters from string -*/ -//============================================================================= - -void SMESH_Hypothesis_i::LoadFrom( const char* theStream ) -{ - MESSAGE( "SMESH_Hypothesis_i::LoadFrom" ); - std::istringstream is( theStream ); - myBaseImpl->LoadFrom( is ); -} diff --git a/src/SMESH_I/SMESH_Hypothesis_i.hxx b/src/SMESH_I/SMESH_Hypothesis_i.hxx deleted file mode 100644 index df89d82c8..000000000 --- a/src/SMESH_I/SMESH_Hypothesis_i.hxx +++ /dev/null @@ -1,115 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Hypothesis_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_HYPOTHESIS_I_HXX_ -#define _SMESH_HYPOTHESIS_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_Hypothesis) - -#include "SMESH_Hypothesis.hxx" -#include "SALOME_GenericObj_i.hh" - -#include "SMESH_Gen.hxx" - -// ====================================================== -// Generic hypothesis -// ====================================================== -class SMESH_Hypothesis_i: - public virtual POA_SMESH::SMESH_Hypothesis, - public virtual SALOME::GenericObj_i -{ -public: - // Constructor : placed in protected section to prohibit creation of generic class instance - SMESH_Hypothesis_i( PortableServer::POA_ptr thePOA ); - -public: - // Destructor - virtual ~SMESH_Hypothesis_i(); - - // Get type name of hypothesis - char* GetName(); - - // Get plugin library name of hypothesis - char* GetLibName(); - - // Set plugin library name of hypothesis - void SetLibName( const char* theLibName ); - - // Get unique id of hypothesis - CORBA::Long GetId(); - - // Get implementation - ::SMESH_Hypothesis* GetImpl(); - - // _CS_gbo_ Activate the object using the POA - void Activate(); - - // Persistence - virtual char* SaveTo(); - virtual void LoadFrom( const char* theStream ); - -protected: - ::SMESH_Hypothesis* myBaseImpl; // base hypothesis implementation - - // _CS_gbo_070505 To keep the reference and delayed the activation - // in the methode Activate(). - PortableServer::POA_ptr myPOA; -}; - -// ====================================================== -// Generic hypothesis creator -// ====================================================== -class GenericHypothesisCreator_i -{ -public: - // Create a hypothesis - virtual SMESH_Hypothesis_i* Create(PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl) = 0; -}; - -//============================================================================= -// -// Specific Hypothesis Creators are generated with a template which inherits a -// generic hypothesis creator. Each creator returns an hypothesis of the type -// given in the template. -// -//============================================================================= -template class HypothesisCreator_i: public GenericHypothesisCreator_i -{ -public: - virtual SMESH_Hypothesis_i* Create (PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl) - { - return new T (thePOA, theStudyId, theGenImpl); - }; -}; - -#endif diff --git a/src/SMESH_I/SMESH_MEDFamily_i.cxx b/src/SMESH_I/SMESH_MEDFamily_i.cxx deleted file mode 100644 index 6e2508962..000000000 --- a/src/SMESH_I/SMESH_MEDFamily_i.cxx +++ /dev/null @@ -1,300 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_MEDFamily_i.cxx -// Module : SMESH - -using namespace std; -#include "SMESH_MEDFamily_i.hxx" -#include "utilities.h" -#include "Utils_CorbaException.hxx" - -//============================================================================= -/*! - * Default constructor - */ -//============================================================================= -SMESH_MEDFamily_i::SMESH_MEDFamily_i() -{ - BEGIN_OF("Default Constructor SMESH_MEDFamily_i"); - END_OF("Default Constructor SMESH_MEDFamily_i"); -} -//============================================================================= -/*! - * constructor par recopie - */ -//============================================================================= -SMESH_MEDFamily_i::SMESH_MEDFamily_i(const SMESH_MEDFamily_i & f): - SMESH_MEDSupport_i(f._subMesh_i,f._name,f._description,f._entity), - _subMesh_i(f._subMesh_i), - _identifier(f._identifier), - _numberOfAttribute(f._numberOfAttribute), - _numberOfGroup(f._numberOfGroup), - _attributeValue(f._attributeValue) -{ - BEGIN_OF("Copy Constructor SMESH_MEDFamily_i"); - _attributeDescription=new string[_numberOfAttribute]; - for (int i=0;i<_numberOfAttribute;i++) { - _attributeDescription[i]=f._attributeDescription[i]; - }; - _groupName=new string[_numberOfGroup]; - for (int i=0;i<_numberOfAttribute;i++) { - _groupName[i]=f._groupName[i]; - }; - END_OF("Copy Constructor SMESH_MEDFamily_i"); -} -//============================================================================= -/*! - * Destructor - */ -//============================================================================= -SMESH_MEDFamily_i::~SMESH_MEDFamily_i() -{ -} -//============================================================================= -/*! - * Constructor - */ -//============================================================================= -SMESH_MEDFamily_i::SMESH_MEDFamily_i(int identifier, SMESH_subMesh_i* sm, - string name, string description, SALOME_MED::medEntityMesh entity): - SMESH_MEDSupport_i( sm, name, description, entity ), - - _subMesh_i(sm), - _identifier(identifier), - _numberOfAttribute(0), - _attributeIdentifier((int*)NULL), - _attributeValue((int*)NULL), - _attributeDescription((string*)NULL), - _numberOfGroup(0), - _groupName((string*)NULL) -{ - BEGIN_OF("Constructor SMESH_MEDFamily_i"); - END_OF("Constructor SMESH_MEDFamily_i"); -} -//============================================================================= -/*! - * CORBA: Accessor for Family's Identifier - */ -//============================================================================= - -CORBA::Long SMESH_MEDFamily_i::getIdentifier() -throw (SALOME::SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Family",\ - SALOME::INTERNAL_ERROR); - return _identifier; - -} -//============================================================================= -/*! - * CORBA: Accessor for number of attributes - */ -//============================================================================= -CORBA::Long SMESH_MEDFamily_i::getNumberOfAttributes() -throw (SALOME::SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Family",\ - SALOME::INTERNAL_ERROR); - return _numberOfAttribute; -} -//============================================================================= -/*! - * CORBA: Accessor for attributes identifiers - */ -//============================================================================= -SALOME_MED::long_array* SMESH_MEDFamily_i::getAttributesIdentifiers() -throw (SALOME::SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Family",\ - SALOME::INTERNAL_ERROR); - if (_numberOfAttribute == 0) - { - MESSAGE("Les familles SMESH n ont pas d attribut"); - THROW_SALOME_CORBA_EXCEPTION("No attributes"\ - ,SALOME::BAD_PARAM); - }; - - SALOME_MED::long_array_var myseq= new SALOME_MED::long_array; - myseq->length(_numberOfAttribute); - for (int i=0;i<_numberOfAttribute;i++) - { - myseq[i]=_attributeIdentifier[i]; - }; - return myseq._retn(); - -} -//============================================================================= -/*! - * CORBA: Accessor for attribute identifier I - */ -//============================================================================= -CORBA::Long SMESH_MEDFamily_i::getAttributeIdentifier(CORBA::Long i) - throw (SALOME::SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Family",\ - SALOME::INTERNAL_ERROR); - MESSAGE("Les familles SMESH n ont pas d attribut"); - THROW_SALOME_CORBA_EXCEPTION("No attributes"\ - ,SALOME::BAD_PARAM); - if (_numberOfAttribute == 0) - { - MESSAGE("Les familles SMESH n ont pas d attribut"); - THROW_SALOME_CORBA_EXCEPTION("No attributes"\ - ,SALOME::BAD_PARAM); - }; - ASSERT (i <= _numberOfAttribute); - return _attributeIdentifier[i]; -} -//============================================================================= -/*! - * CORBA: Accessor for attributes values - */ -//============================================================================= -SALOME_MED::long_array* SMESH_MEDFamily_i::getAttributesValues() - throw (SALOME::SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Family",\ - SALOME::INTERNAL_ERROR); - - if (_numberOfAttribute == 0) - { - MESSAGE("Les familles SMESH n ont pas d attribut"); - THROW_SALOME_CORBA_EXCEPTION("No attributes"\ - ,SALOME::BAD_PARAM); - }; - - SALOME_MED::long_array_var myseq= new SALOME_MED::long_array; - myseq->length(_numberOfAttribute); - for (int i=0;i<_numberOfAttribute;i++) - { - myseq[i]=_attributeValue[i]; - }; - return myseq._retn(); -} -//============================================================================= -/*! - * CORBA: Accessor for attribute value I - */ -//============================================================================= -CORBA::Long SMESH_MEDFamily_i::getAttributeValue(CORBA::Long i) - throw (SALOME::SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Family",\ - SALOME::INTERNAL_ERROR); - if (_numberOfAttribute == 0) - { - MESSAGE("Les familles SMESH n ont pas d attribut"); - THROW_SALOME_CORBA_EXCEPTION("No attributes"\ - ,SALOME::BAD_PARAM); - } - - ASSERT (i <= _numberOfAttribute); - return _attributeValue[i]; -} -//============================================================================= -/*! - * CORBA: Accessor for attributes desriptions - */ -//============================================================================= -SALOME_MED::string_array * SMESH_MEDFamily_i::getAttributesDescriptions() - throw (SALOME::SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Family",\ - SALOME::INTERNAL_ERROR); - if (_numberOfAttribute == 0) - { - MESSAGE("Les familles SMESH n ont pas d attribut"); - THROW_SALOME_CORBA_EXCEPTION("No attributes"\ - ,SALOME::BAD_PARAM); - } - SALOME_MED::string_array_var myseq = new SALOME_MED::string_array; - for (int i=0;i<_numberOfAttribute;i++) - { - myseq[i]=CORBA::string_dup(_attributeDescription[i].c_str()); - } - return myseq._retn(); -} -//============================================================================= -/*! - * CORBA: Accessor for attribute description i - */ -//============================================================================= -char * SMESH_MEDFamily_i::getAttributeDescription( CORBA::Long i) - throw (SALOME::SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Family",\ - SALOME::INTERNAL_ERROR); - if (_numberOfAttribute == 0) - { - MESSAGE("Les familles SMESH n ont pas d attribut"); - THROW_SALOME_CORBA_EXCEPTION("No attributes"\ - ,SALOME::BAD_PARAM); - } - ASSERT (i <= _numberOfAttribute); - return CORBA::string_dup(_attributeDescription[i].c_str()); -} -//============================================================================= -/*! - * CORBA: Accessor for the number of groups - */ -//============================================================================= -CORBA::Long SMESH_MEDFamily_i::getNumberOfGroups() - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!! NOT YET IMPLEMENTED !!!!"); - THROW_SALOME_CORBA_EXCEPTION("Not Implemented", SALOME::BAD_PARAM); - return 0; -} -//============================================================================= -/*! - * CORBA: Accessor for the name of the group i - */ -//============================================================================= -char * SMESH_MEDFamily_i::getGroupName( CORBA::Long i) - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!! NOT YET IMPLEMENTED !!!!"); - THROW_SALOME_CORBA_EXCEPTION("Not Implemented", SALOME::BAD_PARAM); - return NULL; -} -//============================================================================= -/*! - * CORBA: Accessor for all the groups name - */ -//============================================================================= -SALOME_MED::string_array* SMESH_MEDFamily_i::getGroupsNames() - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!! NOT YET IMPLEMENTED !!!!"); - THROW_SALOME_CORBA_EXCEPTION("Not Implemented", SALOME::BAD_PARAM); - return NULL; -} diff --git a/src/SMESH_I/SMESH_MEDFamily_i.hxx b/src/SMESH_I/SMESH_MEDFamily_i.hxx deleted file mode 100644 index e60379c04..000000000 --- a/src/SMESH_I/SMESH_MEDFamily_i.hxx +++ /dev/null @@ -1,90 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_MEDFamily_i.hxx -// Module : SMESH - -#ifndef SMESH_MED_FAMILY_I_HXX_ -#define SMESH_MED_FAMILY_I_HXX_ - -#include "SMESH_MEDSupport_i.hxx" - -#include - -class SMESH_MEDFamily_i: - public POA_SALOME_MED::FAMILY, - public SMESH_MEDSupport_i -{ -protected : - SMESH_MEDFamily_i(); - ~SMESH_MEDFamily_i(); - - ::SMESH_subMesh_i* _subMesh_i; - - // Values - int _identifier; - int _numberOfAttribute; - int * _attributeIdentifier; - int * _attributeValue; - string * _attributeDescription; - int _numberOfGroup ; - string * _groupName ; - - -public : - - // Constructors and associated internal methods - SMESH_MEDFamily_i(int identifier, SMESH_subMesh_i* sm, - string name, string description, SALOME_MED::medEntityMesh entity ); - SMESH_MEDFamily_i(const SMESH_MEDFamily_i & f); - - // IDL Methods - void setProtocol(SALOME::TypeOfCommunication typ) {} - void release() {} - SALOME::SenderInt_ptr getSenderForNumber(long int) {return SALOME::SenderInt::_nil();} - SALOME::SenderInt_ptr getSenderForNumberIndex() {return SALOME::SenderInt::_nil();} - - CORBA::Long getIdentifier() - throw (SALOME::SALOME_Exception); - CORBA::Long getNumberOfAttributes() - throw (SALOME::SALOME_Exception); - SALOME_MED::long_array* getAttributesIdentifiers() - throw (SALOME::SALOME_Exception); - CORBA::Long getAttributeIdentifier(CORBA::Long i) - throw (SALOME::SALOME_Exception); - SALOME_MED::long_array* getAttributesValues() - throw (SALOME::SALOME_Exception); - CORBA::Long getAttributeValue(CORBA::Long i) - throw (SALOME::SALOME_Exception); - SALOME_MED::string_array* getAttributesDescriptions() - throw (SALOME::SALOME_Exception); - char* getAttributeDescription( CORBA::Long i) - throw (SALOME::SALOME_Exception); - CORBA::Long getNumberOfGroups() - throw (SALOME::SALOME_Exception); - char * getGroupName( CORBA::Long i) - throw (SALOME::SALOME_Exception); - SALOME_MED::string_array* getGroupsNames() - throw (SALOME::SALOME_Exception); -}; -#endif /* MED_FAMILY_I_HXX_ */ diff --git a/src/SMESH_I/SMESH_MEDMesh_i.cxx b/src/SMESH_I/SMESH_MEDMesh_i.cxx deleted file mode 100644 index 3f1c017d4..000000000 --- a/src/SMESH_I/SMESH_MEDMesh_i.cxx +++ /dev/null @@ -1,1206 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_MEDMesh_i.cxx -// Module : SMESH - -#include "SMESH_MEDMesh_i.hxx" -#include "SMESH_Mesh_i.hxx" - -#include "SMESHDS_Mesh.hxx" -#include "SMESHDS_SubMesh.hxx" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "utilities.h" -#include "Utils_CorbaException.hxx" - -#include "SMESH_MEDSupport_i.hxx" -#include "SMESH_MEDFamily_i.hxx" - -# include "Utils_ORB_INIT.hxx" -# include "Utils_SINGLETON.hxx" -# include "Utils_ExceptHandlers.hxx" - -extern "C" -{ -#include -} - -using namespace std; - -//============================================================================= -/*! - * Default constructor - */ -//============================================================================= -// PN Est-ce un const ? -SMESH_MEDMesh_i::SMESH_MEDMesh_i() -{ - BEGIN_OF("Default Constructor SMESH_MEDMesh_i"); - END_OF("Default Constructor SMESH_MEDMesh_i"); -} - -//============================================================================= -/*! - * Destructor - */ -//============================================================================= -SMESH_MEDMesh_i::~SMESH_MEDMesh_i() -{ -} - -//============================================================================= -/*! - * Constructor - */ -//============================================================================= -SMESH_MEDMesh_i::SMESH_MEDMesh_i(::SMESH_Mesh_i * m_i):_meshId(""), - _compte(false), - _creeFamily(false), - _famIdent(0), - _indexElts(0), - _indexEnts(0) -{ - BEGIN_OF("Constructor SMESH_MEDMesh_i"); - - _mesh_i = m_i; - _meshDS = _mesh_i->GetImpl().GetMeshDS(); - - END_OF("Constructor SMESH_MEDMesh_i"); -} - -//============================================================================= -/*! - * CORBA: Accessor for Name - */ -//============================================================================= -char *SMESH_MEDMesh_i::getName() throw(SALOME::SALOME_Exception) -{ - if (_meshDS == NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - - try - { - // A COMPLETER PAR LE NOM DU MAILLAGE - //return CORBA::string_dup(_mesh_i->getName().c_str()); - return CORBA::string_dup("toto"); - } - catch(...) - { - MESSAGE("Exception en accedant au nom"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", - SALOME::INTERNAL_ERROR); - } -} - -//============================================================================= -/*! - * CORBA: Accessor for corbaindex cuisine interne - */ -//============================================================================= -CORBA::Long SMESH_MEDMesh_i::getCorbaIndex()throw(SALOME::SALOME_Exception) -{ - MESSAGE("Non Implemente"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); -} - -//============================================================================= -/*! - * CORBA: Accessor for Space Dimension - */ -//============================================================================= -CORBA::Long SMESH_MEDMesh_i::getSpaceDimension()throw(SALOME::SALOME_Exception) -{ - // PN : Il semblerait que la dimension soit fixee a 3 - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - return 3; -} - -//============================================================================= -/*! - * CORBA: Accessor for Mesh Dimension - */ -//============================================================================= -CORBA::Long SMESH_MEDMesh_i::getMeshDimension()throw(SALOME::SALOME_Exception) -{ - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - // PN : Il semblerait que la dimension soit fixee a 3 - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - return 3; -} -//============================================================================= -/*! - * CORBA: Accessor for the boolean _isAGrid - */ -//============================================================================= -CORBA::Boolean SMESH_MEDMesh_i::getIsAGrid() throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!!!!! NOT YET IMPLEMENTED !!!!!!"); - - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - - return false; -} -//============================================================================= -/*! - * CORBA: Accessor for the connectivities, to see if they exist - */ -//============================================================================= -CORBA::Boolean -SMESH_MEDMesh_i::existConnectivity(SALOME_MED::medConnectivity connectivityType, - SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!!!!! IMPLEMENTED BUT ONLY PARTIALLY !!!!!!"); - - - return false; - -} -//============================================================================= -/*! - * CORBA: Accessor for Coordinate - */ -//============================================================================= -CORBA::Double SMESH_MEDMesh_i::getCoordinate(CORBA::Long Number, CORBA::Long Axis) - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!!!!! NOT YET IMPLEMENTED !!!!"); - - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - - return 0.0; -} -//============================================================================= -/*! - * CORBA: Accessor for Coordinates System - */ -//============================================================================= -char *SMESH_MEDMesh_i::getCoordinatesSystem() throw(SALOME::SALOME_Exception) -{ - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - // PN : En dur. Non encore prevu - try - { - string systcoo = "CARTESIEN"; - return CORBA::string_dup(systcoo.c_str()); - } - catch(...) - { - MESSAGE("Exception en accedant au maillage"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", - SALOME::INTERNAL_ERROR); - } -} - -//============================================================================= -/*! - * CORBA: Accessor for Coordinates - */ -//============================================================================= -SALOME_MED::double_array * SMESH_MEDMesh_i::getCoordinates( - SALOME_MED::medModeSwitch typeSwitch) throw(SALOME::SALOME_Exception) -{ - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - SALOME_MED::double_array_var myseq = new SALOME_MED::double_array; - try - { - // PN : En dur - int spaceDimension = 3; - int nbNodes = _meshDS->NbNodes(); - SCRUTE(nbNodes); - myseq->length(nbNodes * spaceDimension); - int i = 0; - - SMDS_NodeIteratorPtr itNodes=_meshDS->nodesIterator(); - while(itNodes->more()) - { - const SMDS_MeshNode* node = itNodes->next(); - - if (typeSwitch == SALOME_MED::MED_FULL_INTERLACE) - { - myseq[i * 3] = node->X(); - myseq[i * 3 + 1] = node->Y(); - myseq[i * 3 + 2] = node->Z(); - SCRUTE(myseq[i * 3]); - SCRUTE(myseq[i * 3 + 1]); - SCRUTE(myseq[i * 3 + 2]); - } - else - { - ASSERT(typeSwitch == SALOME_MED::MED_NO_INTERLACE); - myseq[i] = node->X(); - myseq[i + nbNodes] = node->Y(); - myseq[i + (nbNodes * 2)] = node->Z(); - SCRUTE(myseq[i]); - SCRUTE(myseq[i + nbNodes]); - SCRUTE(myseq[i + (nbNodes * 2)]); - } - i++; - } - } - catch(...) - { - MESSAGE("Exception en accedant aux coordonnees"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", - SALOME::INTERNAL_ERROR); - } - return myseq._retn(); -} - -//============================================================================= -/*! - * CORBA: Accessor for Coordinates Names - */ -//============================================================================= -SALOME_MED::string_array * - SMESH_MEDMesh_i::getCoordinatesNames()throw(SALOME::SALOME_Exception) -{ - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - SALOME_MED::string_array_var myseq = new SALOME_MED::string_array; - try - { - // PN : en dur - int spaceDimension = 3; - myseq->length(spaceDimension); - myseq[0] = CORBA::string_dup("x"); - myseq[1] = CORBA::string_dup("y"); - myseq[2] = CORBA::string_dup("z"); - } - catch(...) - { - MESSAGE("Exception en accedant aux noms des coordonnees"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", - SALOME::INTERNAL_ERROR); - } - return myseq._retn(); - -} - -//============================================================================= -/*! - * CORBA: Accessor for Coordinates Units - */ -//============================================================================= -SALOME_MED::string_array * - SMESH_MEDMesh_i::getCoordinatesUnits()throw(SALOME::SALOME_Exception) -{ - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - SALOME_MED::string_array_var myseq = new SALOME_MED::string_array; - try - { - // PN : en dur - int spaceDimension = 3; - myseq->length(spaceDimension); - myseq[0] = CORBA::string_dup("m"); - myseq[1] = CORBA::string_dup("m"); - myseq[2] = CORBA::string_dup("m"); - } - catch(...) - { - MESSAGE("Exception en accedant aux unites des coordonnees"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", - SALOME::INTERNAL_ERROR); - } - return myseq._retn(); -} - -//============================================================================= -/*! - * CORBA: Accessor for Number of Nodes - */ -//============================================================================= -CORBA::Long SMESH_MEDMesh_i::getNumberOfNodes()throw(SALOME::SALOME_Exception) -{ - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - try - { - return _meshDS->NbNodes(); - } - catch(...) - { - MESSAGE("Exception en accedant au nombre de noeuds"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", - SALOME::INTERNAL_ERROR); - } -} - -//============================================================================= -/*! - * CORBA: Accessor for number of Types - */ -//============================================================================= -CORBA::Long SMESH_MEDMesh_i::getNumberOfTypes(SALOME_MED::medEntityMesh entity) -throw(SALOME::SALOME_Exception) -{ - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - try - { - if (!_compte) - calculeNbElts(); - int retour = 0; - if (_mapNbTypes.find(entity) != _mapNbTypes.end()) - retour = _mapNbTypes[entity]; - return retour; - } - catch(...) - { - MESSAGE("Exception en accedant au nombre de Types"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", - SALOME::INTERNAL_ERROR); - } -} - -//============================================================================= -/*! - * CORBA: Accessor for existing geometry element types - * Not implemented for MED_ALL_ENTITIES - */ -//============================================================================= -SALOME_MED::medGeometryElement_array * - SMESH_MEDMesh_i::getTypes(SALOME_MED::medEntityMesh entity) throw(SALOME:: - SALOME_Exception) -{ - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - if (entity == SALOME_MED::MED_ALL_ENTITIES) - THROW_SALOME_CORBA_EXCEPTION("Not implemented for MED_ALL_ENTITIES", - SALOME::BAD_PARAM); - if (!_compte) - calculeNbElts(); - SALOME_MED::medGeometryElement_array_var myseq = - new SALOME_MED::medGeometryElement_array; - try - { - if (_mapNbTypes.find(entity) == _mapNbTypes.end()) - THROW_SALOME_CORBA_EXCEPTION("No Such Entity in the mesh", - SALOME::BAD_PARAM); - int nbTypes = _mapNbTypes[entity]; - - myseq->length(nbTypes); - - if (_mapIndToVectTypes.find(entity) == _mapIndToVectTypes.end()) - THROW_SALOME_CORBA_EXCEPTION("No Such Entity in the mesh", - SALOME::INTERNAL_ERROR); - - int index = _mapIndToVectTypes[entity]; - ASSERT(_TypesId[index].size() != 0); - int i = 0; - vector < SALOME_MED::medGeometryElement >::iterator it; - for (it = _TypesId[index].begin(); it != _TypesId[index].end(); it++) - { - myseq[i++] = *it; - }; - } - catch(...) - { - MESSAGE("Exception en accedant aux differents types"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", - SALOME::INTERNAL_ERROR); - } - return myseq._retn(); -} - -//============================================================================= -/*! - * CORBA: Returns number of elements of type medGeometryElement - * Not implemented for MED_ALL_ELEMENTS - * implemented for MED_ALL_ENTITIES - * - * Dans cette implementation, il n est pas prevu de tenir compte du entity - * qui ne doit pas pouvoir avoir deux valeurs differentes pour un geomElement - */ -//============================================================================= -CORBA::Long SMESH_MEDMesh_i::getNumberOfElements(SALOME_MED:: - medEntityMesh entity, - SALOME_MED::medGeometryElement geomElement) throw(SALOME::SALOME_Exception) -{ - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - if (geomElement == SALOME_MED::MED_ALL_ELEMENTS) - THROW_SALOME_CORBA_EXCEPTION("Not implemented for MED_ALL_ELEMENTS", - SALOME::BAD_PARAM); - if (!_compte) - calculeNbElts(); - - try - { - int retour = 0; - if (_mapIndToSeqElts.find(geomElement) != _mapIndToSeqElts.end()) - { - int index = _mapIndToSeqElts[geomElement]; - - retour = _seq_elemId[index]->length(); - } - return retour; - } - catch(...) - { - MESSAGE("Exception en accedant au nombre d élements"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Mesh C++ Object", - SALOME::INTERNAL_ERROR); - } -} - -//============================================================================= -/*! - * CORBA: Accessor for connectivities - */ -//============================================================================= -SALOME_MED::long_array * -SMESH_MEDMesh_i::getConnectivity(SALOME_MED::medModeSwitch typeSwitch, - SALOME_MED::medConnectivity mode, - SALOME_MED::medEntityMesh entity, - SALOME_MED::medGeometryElement geomElement) - throw(SALOME::SALOME_Exception) -{ - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - if (mode != SALOME_MED::MED_NODAL) - THROW_SALOME_CORBA_EXCEPTION("Not Implemented", SALOME::BAD_PARAM); - if (typeSwitch == SALOME_MED::MED_NO_INTERLACE) - THROW_SALOME_CORBA_EXCEPTION("Not Yet Implemented", SALOME::BAD_PARAM); - if (!_compte) - calculeNbElts(); - - // Faut-il renvoyer un pointeur vide ??? - if (_mapIndToSeqElts.find(geomElement) != _mapIndToSeqElts.end()) - THROW_SALOME_CORBA_EXCEPTION("No Such Element in the mesh", - SALOME::BAD_PARAM); - - int index = _mapIndToSeqElts[geomElement]; - - return _seq_elemId[index]._retn(); -} - -//============================================================================= -/*! - * CORBA: Accessor for connectivities - */ -//============================================================================= -SALOME_MED::long_array * -SMESH_MEDMesh_i::getConnectivityIndex(SALOME_MED::medConnectivity mode, - SALOME_MED::medEntityMesh entity) - throw(SALOME::SALOME_Exception) -{ - MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - return 0; -} - -//============================================================================= -/*! - * CORBA: Find an element corresponding to the given connectivity - */ -//============================================================================= -CORBA::Long -SMESH_MEDMesh_i::getElementNumber(SALOME_MED::medConnectivity mode, - SALOME_MED::medEntityMesh entity, - SALOME_MED::medGeometryElement type, - const SALOME_MED::long_array & connectivity) - throw(SALOME::SALOME_Exception) -{ - const char *LOC = "getElementNumber "; - MESSAGE(LOC << "Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - return -1; -} - -//============================================================================= -/*! - * CORBA: Accessor for Ascendant connectivities - * not implemented for MED_ALL_ENTITIES and MED_MAILLE - */ -//============================================================================= -SALOME_MED::long_array * - SMESH_MEDMesh_i::getReverseConnectivity(SALOME_MED:: - medConnectivity mode) throw(SALOME::SALOME_Exception) -{ - MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - return 0; -} - -//============================================================================= -/*! - * CORBA: Accessor for connectivities - */ -//============================================================================= -SALOME_MED::long_array * - SMESH_MEDMesh_i::getReverseConnectivityIndex(SALOME_MED:: - medConnectivity mode) throw(SALOME::SALOME_Exception) -{ - MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - return 0; -} - -//============================================================================= -/*! - * CORBA: Returns number of families within the mesh - */ -//============================================================================= -CORBA::Long SMESH_MEDMesh_i::getNumberOfFamilies(SALOME_MED:: - medEntityMesh entity) throw(SALOME::SALOME_Exception) -{ - if (_creeFamily == false) - createFamilies(); - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - return _families.size(); -} - -//============================================================================= -/*! - * CORBA: Returns number of groups within the mesh - */ -//============================================================================= -CORBA::Long SMESH_MEDMesh_i::getNumberOfGroups(SALOME_MED::medEntityMesh entity) -throw(SALOME::SALOME_Exception) -{ - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - MESSAGE(" Pas d implementation des groupes dans SMESH"); - return 0; -} - -//============================================================================= -/*! - * CORBA: Returns references for families within the mesh - */ -//============================================================================= -SALOME_MED::Family_array * - SMESH_MEDMesh_i::getFamilies(SALOME_MED:: - medEntityMesh entity) throw(SALOME::SALOME_Exception) -{ - if (_creeFamily == false) - createFamilies(); - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - SALOME_MED::Family_array_var myseq = new SALOME_MED::Family_array; - int nbfam = _families.size(); - myseq->length(nbfam); - int i = 0; - vector < SALOME_MED::FAMILY_ptr >::iterator it; - for (it = _families.begin(); it != _families.end(); it++) - { - myseq[i++] = *it; - }; - return myseq._retn(); -} - -//============================================================================= -/*! - * CORBA: Returns references for family i within the mesh - */ -//============================================================================= -SALOME_MED::FAMILY_ptr SMESH_MEDMesh_i::getFamily(SALOME_MED:: - medEntityMesh entity, CORBA::Long i) throw(SALOME::SALOME_Exception) -{ - if (_creeFamily == false) - createFamilies(); - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - - SCRUTE(_families[i]->getName()); - MESSAGE(" SMESH_MEDMesh_i::getFamily " << i) return _families[i]; -} - -//============================================================================= -/*! - * CORBA: Returns references for groups within the mesh - */ -//============================================================================= -SALOME_MED::Group_array * - SMESH_MEDMesh_i::getGroups(SALOME_MED::medEntityMesh entity) throw(SALOME:: - SALOME_Exception) -{ - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - MESSAGE(" Pas d implementation des groupes dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("No group implementation", SALOME::BAD_PARAM); -} - -//============================================================================= -/*! - * CORBA: Returns references for group i within the mesh - */ -//============================================================================= -SALOME_MED::GROUP_ptr SMESH_MEDMesh_i::getGroup(SALOME_MED:: - medEntityMesh entity, CORBA::Long i) throw(SALOME::SALOME_Exception) -{ - if (_mesh_i == 0) - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - MESSAGE(" Pas d implementation des groupes dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("No group implementation", SALOME::BAD_PARAM); -} -//============================================================================= -/*! - * CORBA: Returns references for the global numbering index - */ -//============================================================================= -SALOME_MED::long_array* -SMESH_MEDMesh_i::getGlobalNumberingIndex(SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); - - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - - return NULL; -} -//============================================================================= -/*! - * CORBA: Returns references for the support of boundary elements of type - * entity - */ -//============================================================================= -SALOME_MED::SUPPORT_ptr -SMESH_MEDMesh_i::getBoundaryElements(SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); - - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - - return NULL; -} -//============================================================================= -/*! - * CORBA: Returns references for the support of the skin of the support - * mySupport3D - */ -//============================================================================= -SALOME_MED::SUPPORT_ptr -SMESH_MEDMesh_i::getSkin(SALOME_MED::SUPPORT_ptr mySupport3D) - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); - - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - - return NULL; -} -//============================================================================= -/*! - * CORBA: - */ -//============================================================================= -SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getVolume(SALOME_MED:: - SUPPORT_ptr mySupport) throw(SALOME::SALOME_Exception) -{ - MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - return 0; -} - -//============================================================================= -/*! - * CORBA: - */ -//============================================================================= -SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getArea(SALOME_MED:: - SUPPORT_ptr mySupport) throw(SALOME::SALOME_Exception) -{ - MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - return 0; -} - -//============================================================================= -/*! - * CORBA: - */ -//============================================================================= -SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getLength(SALOME_MED:: - SUPPORT_ptr mySupport) throw(SALOME::SALOME_Exception) -{ - MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - return 0; -} - -//============================================================================= -/*! - * CORBA: - */ -//============================================================================= -SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getNormal(SALOME_MED:: - SUPPORT_ptr mySupport) throw(SALOME::SALOME_Exception) -{ - MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - return 0; -} - -//============================================================================= -/*! - * CORBA: - */ -//============================================================================= -SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getBarycenter(SALOME_MED:: - SUPPORT_ptr mySupport) throw(SALOME::SALOME_Exception) -{ - MESSAGE("Pas Implemente dans SMESH"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - return 0; -} - -//============================================================================= -/*! - * CORBA: - */ -//============================================================================= -SALOME_MED::FIELD_ptr SMESH_MEDMesh_i::getNeighbourhood(SALOME_MED:: - SUPPORT_ptr mySupport) throw(SALOME::SALOME_Exception) -{ - MESSAGE("Non Implemente"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - return 0; -} - -//============================================================================= -/*! - * CORBA: add the Mesh in the StudyManager - * PN Pas Implemente - */ -//============================================================================= -void SMESH_MEDMesh_i::addInStudy(SALOMEDS::Study_ptr myStudy, - SALOME_MED::MESH_ptr myIor) throw(SALOME::SALOME_Exception) -{ - BEGIN_OF("MED_Mesh_i::addInStudy"); - if (_meshId != "") - { - MESSAGE("Mesh already in Study"); - THROW_SALOME_CORBA_EXCEPTION("Mesh already in Study", - SALOME::BAD_PARAM); - }; - - /* - * SALOMEDS::StudyBuilder_var myBuilder = myStudy->NewBuilder(); - * - * // Create SComponent labelled 'MED' if it doesn't already exit - * SALOMEDS::SComponent_var medfather = myStudy->FindComponent("MED"); - * if ( CORBA::is_nil(medfather) ) - * { - * MESSAGE("Add Component MED"); - * medfather = myBuilder->NewComponent("MED"); - * //myBuilder->AddAttribute (medfather,SALOMEDS::Name,"MED"); - * SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow( - * myBuilder->FindOrCreateAttribute(medfather, "AttributeName")); - * aName->SetValue("MED"); - * - * myBuilder->DefineComponentInstance(medfather,myIor); - * - * } ; - * - * MESSAGE("Add a mesh Object under MED"); - * myBuilder->NewCommand(); - * SALOMEDS::SObject_var newObj = myBuilder->NewObject(medfather); - * - * ORB_INIT &init = *SINGLETON_::Instance() ; - * ASSERT(SINGLETON_::IsAlreadyExisting()) ; - * CORBA::ORB_var &orb = init(0,0); - * string iorStr = orb->object_to_string(myIor); - * //myBuilder->AddAttribute(newObj,SALOMEDS::IOR,iorStr.c_str()); - * SALOMEDS::AttributeIOR_var aIOR = SALOMEDS::AttributeIOR::_narrow( - * myBuilder->FindOrCreateAttribute(newObj, "AttributeIOR")); - * aIOR->SetValue(iorStr.c_str()); - * - * //myBuilder->AddAttribute(newObj,SALOMEDS::Name,_mesh_i->getName().c_str()); - * SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow( - * myBuilder->FindOrCreateAttribute(newObj, "AttributeName")); - * aName->SetValue(_mesh_i->getName().c_str()); - * - * _meshId = newObj->GetID(); - * myBuilder->CommitCommand(); - * - */ - END_OF("Mesh_i::addInStudy(SALOMEDS::Study_ptr myStudy)"); -} - -//============================================================================= -/*! - * CORBA: write mesh in a med file - */ -//============================================================================= -void SMESH_MEDMesh_i::write(CORBA::Long i, const char *driverMeshName) -throw(SALOME::SALOME_Exception) -{ - MESSAGE("Non Implemente"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); -} - -//============================================================================= -/*! - * CORBA: read mesh in a med file - */ -//============================================================================= -void SMESH_MEDMesh_i::read(CORBA::Long i) throw(SALOME::SALOME_Exception) -{ - MESSAGE("Non Implemente"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); -} - -//============================================================================= -/*! - * CORBA : release driver - */ -//============================================================================= -void SMESH_MEDMesh_i::rmDriver(CORBA::Long i) throw(SALOME::SALOME_Exception) -{ - MESSAGE("Non Implemente"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); -} - -//============================================================================= -/*! - * CORBA : attach driver - */ -//============================================================================= -CORBA::Long SMESH_MEDMesh_i::addDriver(SALOME_MED::medDriverTypes driverType, - const char *fileName, const char *meshName) throw(SALOME::SALOME_Exception) -{ - MESSAGE("Non Implemente"); - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - return 0; -} - -//============================================================================= -/*! - * Calcule le Nb d'elements par entite geometrique - */ -//============================================================================= -void SMESH_MEDMesh_i::calculeNbElts() throw(SALOME::SALOME_Exception) -{ - if (!_compte) - { - _compte = true; - - _mapNbTypes[SALOME_MED::MED_NODE] = 1; - // On compte les aretes MED_SEG2 ou MED_SEG3 - // On range les elements dans les vecteurs correspondants - - _mapIndToSeqElts[SALOME_MED::MED_SEG2] = _indexElts++; - _mapIndToSeqElts[SALOME_MED::MED_SEG3] = _indexElts++; - _mapIndToVectTypes[SALOME_MED::MED_EDGE] = _indexEnts++; - - int trouveSeg2 = 0; - int trouveSeg3 = 0; - SALOME_MED::medGeometryElement medElement; - - SMDS_EdgeIteratorPtr itEdges=_meshDS->edgesIterator(); - while(itEdges->more()) - { - const SMDS_MeshEdge* elem = itEdges->next(); - int nb_of_nodes = elem->NbNodes(); - - switch (nb_of_nodes) - { - case 2: - { - medElement = SALOME_MED::MED_SEG2; - if (trouveSeg2 == 0) - { - trouveSeg2 = 1; - _TypesId[SALOME_MED::MED_EDGE]. - push_back(SALOME_MED::MED_SEG2); - } - break; - } - case 3: - { - medElement = SALOME_MED::MED_SEG3; - if (trouveSeg3 == 0) - { - trouveSeg3 = 1; - _TypesId[SALOME_MED::MED_EDGE]. - push_back(SALOME_MED::MED_SEG3); - } - break; - } - } - int index = _mapIndToSeqElts[medElement]; - SCRUTE(index); - // Traitement de l arete - - int longueur = _seq_elemId[index]->length(); - _seq_elemId[index]->length(longueur + nb_of_nodes); - - SMDS_NodeIteratorPtr itn=_meshDS->nodesIterator(); - - for(int k=0; itn->more(); k++) - _seq_elemId[index][longueur + k] = itn->next()->GetID()+1; - } - - _mapNbTypes[SALOME_MED::MED_EDGE] = trouveSeg2 + trouveSeg3; - - // On compte les faces MED_TRIA3, MED_HEXA8, MED_TRIA6 - // On range les elements dans les vecteurs correspondants - int trouveTria3 = 0; - int trouveTria6 = 0; - int trouveQuad4 = 0; - - _mapIndToSeqElts[SALOME_MED::MED_TRIA3] = _indexElts++; - _mapIndToSeqElts[SALOME_MED::MED_TRIA6] = _indexElts++; - _mapIndToSeqElts[SALOME_MED::MED_QUAD4] = _indexElts++; - _mapIndToVectTypes[SALOME_MED::MED_FACE] = _indexEnts++; - - SMDS_FaceIteratorPtr itFaces=_meshDS->facesIterator(); - while(itFaces->more()) - { - const SMDS_MeshFace * elem = itFaces->next(); - int nb_of_nodes = elem->NbNodes(); - - switch (nb_of_nodes) - { - case 3: - { - medElement = SALOME_MED::MED_TRIA3; - if (trouveTria3 == 0) - { - trouveTria3 = 1; - _TypesId[SALOME_MED::MED_FACE]. - push_back(SALOME_MED::MED_TRIA3); - } - break; - } - case 4: - { - medElement = SALOME_MED::MED_QUAD4; - if (trouveQuad4 == 0) - { - trouveQuad4 = 1; - _TypesId[SALOME_MED::MED_FACE]. - push_back(SALOME_MED::MED_QUAD4); - } - break; - } - case 6: - { - medElement = SALOME_MED::MED_TRIA6; - if (trouveTria6 == 0) - { - trouveTria6 = 1; - _TypesId[SALOME_MED::MED_FACE]. - push_back(SALOME_MED::MED_TRIA6); - } - break; - } - } - int index = _mapIndToSeqElts[medElement]; - SCRUTE(index); - - // Traitement de la face - // Attention La numérotation des noeuds Med commence a 1 - - int longueur = _seq_elemId[index]->length(); - _seq_elemId[index]->length(longueur + nb_of_nodes); - - SMDS_NodeIteratorPtr itn=_meshDS->nodesIterator(); - - for(int k=0; itn->more(); k++) - _seq_elemId[index][longueur + k] = itn->next()->GetID()+1; - } //itFaces - - _mapNbTypes[SALOME_MED::MED_FACE] = - trouveTria3 + trouveTria6 + trouveQuad4; - - _mapIndToSeqElts[SALOME_MED::MED_HEXA8] = _indexElts++; - _mapIndToVectTypes[SALOME_MED::MED_CELL] = _indexEnts++; - int index = _mapIndToSeqElts[medElement]; - - int trouveHexa8 = 0; - - SMDS_VolumeIteratorPtr itVolumes=_meshDS->volumesIterator(); - while(itVolumes->more()) - { - const SMDS_MeshVolume * elem = itVolumes->next(); - - int nb_of_nodes = elem->NbNodes(); - medElement = SALOME_MED::MED_HEXA8; - ASSERT(nb_of_nodes = 8); - - if (trouveHexa8 == 0) - { - trouveHexa8 = 1; - _TypesId[SALOME_MED::MED_CELL].push_back(SALOME_MED::MED_HEXA8); - }; - // Traitement de la maille - int longueur = _seq_elemId[index]->length(); - _seq_elemId[index]->length(longueur + nb_of_nodes); - - SMDS_NodeIteratorPtr itn=_meshDS->nodesIterator(); - for(int k=0; itn->more(); k++) - _seq_elemId[index][longueur + k] = itn->next()->GetID()+1; - } - - _mapNbTypes[SALOME_MED::MED_CELL] = trouveHexa8; - _mapNbTypes[SALOME_MED::MED_ALL_ENTITIES] - = - trouveHexa8 + trouveTria3 + trouveTria6 + trouveQuad4 + trouveSeg2 + - trouveSeg3; - }// fin du _compte -}; - -//============================================================================= -/*! - * Creation des familles - */ -//============================================================================= -void SMESH_MEDMesh_i::createFamilies() throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - string famDes = ("Je ne sais pas"); - string famName0 = "Famille_"; - string famName; - char numero[10]; - - if (_creeFamily == false) - { - _creeFamily = true; - SMESH_subMesh_i *subMeshServant; - - map < int, SMESH_subMesh_i * >::iterator it; - for (it = _mesh_i->_mapSubMesh_i.begin(); - it != _mesh_i->_mapSubMesh_i.end(); it++) - { - SMESH_subMesh_i *submesh_i = (*it).second; - int famIdent = (*it).first; - - ASSERT(famIdent < 999999999); - sprintf(numero, "%d\n", famIdent); - famName = famName0 + numero; - - SMESH_MEDFamily_i *famservant = - new SMESH_MEDFamily_i(famIdent, submesh_i, - famName, famDes, SALOME_MED::MED_NODE); - SALOME_MED::FAMILY_ptr famille = - SALOME_MED::FAMILY::_narrow(famservant-> - POA_SALOME_MED::FAMILY::_this()); - _families.push_back(famille); - } - } -}; -//============================================================================= -/*! - * Gives informations of the considered mesh. - */ -//============================================================================= -SALOME_MED::MESH::meshInfos * SMESH_MEDMesh_i::getMeshGlobal() - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); - - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - - return NULL; -} -//============================================================================= -/*! - * Gives informations on coordinates of the considered mesh. - */ -//============================================================================= -SALOME_MED::MESH::coordinateInfos * SMESH_MEDMesh_i::getCoordGlobal() - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); - - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - - return NULL; -} -//============================================================================= -/*! - * Gives informations on connectivities of the considered mesh for the entity - * entity. - */ -//============================================================================= -SALOME_MED::MESH::connectivityInfos * -SMESH_MEDMesh_i::getConnectGlobal(SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); - - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - - return NULL; -} -//============================================================================= -/*! - * Gives the type of the element number of entity entity - */ -//============================================================================= -SALOME_MED::medGeometryElement -SMESH_MEDMesh_i::getElementType(SALOME_MED::medEntityMesh entity, - CORBA::Long number) - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!!! NOT YET IMPLEMENTED !!!!!"); - - THROW_SALOME_CORBA_EXCEPTION("Unimplemented Method", SALOME::BAD_PARAM); - - return (SALOME_MED::medGeometryElement) 0; -} diff --git a/src/SMESH_I/SMESH_MEDMesh_i.hxx b/src/SMESH_I/SMESH_MEDMesh_i.hxx deleted file mode 100644 index 3e8fe7a35..000000000 --- a/src/SMESH_I/SMESH_MEDMesh_i.hxx +++ /dev/null @@ -1,233 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_MEDMesh_i.hxx -// Module : SMESH - -#ifndef _MED_SMESH_MESH_I_HXX_ -#define _MED_SMESH_MESH_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(MED) -#include -#include -#include - -#include "SMESHDS_Mesh.hxx" - -#include "SMDS_MeshElement.hxx" -#include "SMDS_MeshNode.hxx" - -#define MED_NBR_GEOMETRIE_MAILLE 15 -#define MED_NBR_TYPE 5 - -class SMESH_Mesh_i; - -class SMESH_MEDMesh_i: - public POA_SALOME_MED::MESH, public PortableServer::RefCountServantBase -{ - public: private: protected: - // C++ object containing values - ::SMESH_Mesh_i * _mesh_i; - SMESHDS_Mesh *_meshDS; - - string _meshId; - bool _compte; - bool _creeFamily; - int _indexElts; - int _indexEnts; - int _famIdent; - - map < SALOME_MED::medGeometryElement, int >_mapIndToSeqElts; - SALOME_MED::long_array_var _seq_elemId[MED_NBR_GEOMETRIE_MAILLE]; - - map < SALOME_MED::medEntityMesh, int >_mapNbTypes; - map < SALOME_MED::medEntityMesh, int >_mapIndToVectTypes; - vector < SALOME_MED::medGeometryElement > - _TypesId[MED_NBR_GEOMETRIE_MAILLE]; - - vector < SALOME_MED::FAMILY_ptr > _families; - public: - - // Constructors and associated internal methods - SMESH_MEDMesh_i(); - SMESH_MEDMesh_i(SMESH_Mesh_i * m); - ~SMESH_MEDMesh_i(); - - // IDL Methods - void setProtocol(SALOME::TypeOfCommunication typ) {} - void release() {} - SALOME::SenderDouble_ptr getSenderForCoordinates(long int) {return SALOME::SenderDouble::_nil();} - SALOME::SenderInt_ptr getSenderForConnectivity(long int, long int, long int, long int) {return SALOME::SenderInt::_nil();} - - char *getName() throw(SALOME::SALOME_Exception); - CORBA::Long getSpaceDimension() throw(SALOME::SALOME_Exception); - - CORBA::Long getMeshDimension() throw(SALOME::SALOME_Exception); - - CORBA::Boolean getIsAGrid() throw (SALOME::SALOME_Exception); - - CORBA::Boolean - existConnectivity(SALOME_MED::medConnectivity connectivityType, - SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception); - - char *getCoordinatesSystem() throw(SALOME::SALOME_Exception); - - CORBA::Double getCoordinate(CORBA::Long Number, CORBA::Long Axis) - throw (SALOME::SALOME_Exception); - - SALOME_MED::double_array * getCoordinates(SALOME_MED::medModeSwitch typeSwitch) - throw(SALOME::SALOME_Exception); - - SALOME_MED::string_array * getCoordinatesNames() - throw(SALOME::SALOME_Exception); - - SALOME_MED::string_array * getCoordinatesUnits() - throw(SALOME::SALOME_Exception); - - CORBA::Long getNumberOfNodes() throw(SALOME::SALOME_Exception); - - CORBA::Long getNumberOfTypes(SALOME_MED::medEntityMesh entity) - throw(SALOME::SALOME_Exception); - - SALOME_MED::medGeometryElement_array * - getTypes(SALOME_MED::medEntityMesh entity) throw(SALOME:: - SALOME_Exception); - - SALOME_MED::medGeometryElement - getElementType(SALOME_MED::medEntityMesh entity, - CORBA::Long number) - throw (SALOME::SALOME_Exception); - - CORBA::Long getNumberOfElements(SALOME_MED::medEntityMesh entity, - SALOME_MED::medGeometryElement geomElement) - throw(SALOME::SALOME_Exception); - - SALOME_MED::long_array * - getConnectivity(SALOME_MED::medModeSwitch typeSwitch, - SALOME_MED::medConnectivity mode, - SALOME_MED::medEntityMesh entity, - SALOME_MED::medGeometryElement geomElement) - throw(SALOME::SALOME_Exception); - - SALOME_MED::long_array * - getConnectivityIndex(SALOME_MED::medConnectivity mode, - SALOME_MED::medEntityMesh entity) - throw(SALOME::SALOME_Exception); - - SALOME_MED::long_array* - getGlobalNumberingIndex(SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception); - - CORBA::Long getElementNumber(SALOME_MED::medConnectivity mode, - SALOME_MED::medEntityMesh entity, - SALOME_MED::medGeometryElement type, - const SALOME_MED::long_array & connectivity) - throw(SALOME::SALOME_Exception); - - SALOME_MED::long_array * - getReverseConnectivity(SALOME_MED::medConnectivity mode) - throw(SALOME::SALOME_Exception); - - SALOME_MED::long_array * - getReverseConnectivityIndex(SALOME_MED:: - medConnectivity mode) throw(SALOME::SALOME_Exception); - - // Family and Group - CORBA::Long getNumberOfFamilies(SALOME_MED::medEntityMesh entity) - throw(SALOME::SALOME_Exception); - - CORBA::Long getNumberOfGroups(SALOME_MED::medEntityMesh entity) - throw(SALOME::SALOME_Exception); - - SALOME_MED::Family_array * - getFamilies(SALOME_MED::medEntityMesh entity) - throw(SALOME::SALOME_Exception); - - SALOME_MED::FAMILY_ptr getFamily(SALOME_MED::medEntityMesh entity, - CORBA::Long i) throw(SALOME::SALOME_Exception); - - SALOME_MED::Group_array * getGroups(SALOME_MED::medEntityMesh entity) - throw(SALOME::SALOME_Exception); - - SALOME_MED::GROUP_ptr getGroup(SALOME_MED::medEntityMesh entity, - CORBA::Long i) throw(SALOME::SALOME_Exception); - - SALOME_MED::SUPPORT_ptr - getBoundaryElements(SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception); - - SALOME_MED::SUPPORT_ptr getSkin(SALOME_MED::SUPPORT_ptr mySupport3D) - throw (SALOME::SALOME_Exception); - - SALOME_MED::FIELD_ptr getVolume(SALOME_MED::SUPPORT_ptr mySupport) - throw(SALOME::SALOME_Exception); - - SALOME_MED::FIELD_ptr getArea(SALOME_MED::SUPPORT_ptr mySupport) - throw(SALOME::SALOME_Exception); - - SALOME_MED::FIELD_ptr getLength(SALOME_MED::SUPPORT_ptr mySupport) - throw(SALOME::SALOME_Exception); - - SALOME_MED::FIELD_ptr getNormal(SALOME_MED::SUPPORT_ptr mySupport) - throw(SALOME::SALOME_Exception); - - SALOME_MED::FIELD_ptr getBarycenter(SALOME_MED::SUPPORT_ptr mySupport) - throw(SALOME::SALOME_Exception); - - SALOME_MED::FIELD_ptr getNeighbourhood(SALOME_MED::SUPPORT_ptr mySupport) - throw(SALOME::SALOME_Exception); - - // Others - void addInStudy(SALOMEDS::Study_ptr myStudy, - SALOME_MED::MESH_ptr myIor) throw(SALOME::SALOME_Exception); - CORBA::Long addDriver(SALOME_MED::medDriverTypes driverType, - const char *fileName, const char *meshName) - throw(SALOME::SALOME_Exception); - void rmDriver(CORBA::Long i) throw(SALOME::SALOME_Exception); - void read(CORBA::Long i) throw(SALOME::SALOME_Exception); - void write(CORBA::Long i, const char *driverMeshName) - throw(SALOME::SALOME_Exception); - - // Cuisine interne - CORBA::Long getCorbaIndex() throw(SALOME::SALOME_Exception); - - SALOME_MED::MESH::meshInfos * getMeshGlobal() - throw (SALOME::SALOME_Exception); - - bool areEquals(SALOME_MED::MESH_ptr other) { return false;}; - - SALOME_MED::MESH::coordinateInfos * getCoordGlobal() - throw (SALOME::SALOME_Exception); - - SALOME_MED::MESH::connectivityInfos * - getConnectGlobal(SALOME_MED::medEntityMesh entity) - throw (SALOME::SALOME_Exception); - - // - void calculeNbElts() throw(SALOME::SALOME_Exception); - void createFamilies() throw(SALOME::SALOME_Exception); -}; - -#endif /* _MED_MESH_I_HXX_ */ diff --git a/src/SMESH_I/SMESH_MEDSupport_i.cxx b/src/SMESH_I/SMESH_MEDSupport_i.cxx deleted file mode 100644 index 7b5289ebb..000000000 --- a/src/SMESH_I/SMESH_MEDSupport_i.cxx +++ /dev/null @@ -1,401 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_MEDSupport_i.cxx -// Module : SMESH - -using namespace std; -#include "SMESH_MEDSupport_i.hxx" -#include "utilities.h" -#include "Utils_CorbaException.hxx" -#include "Utils_ExceptHandlers.hxx" - -#include -#include "SMESHDS_Mesh.hxx" - -#include "SMESH_subMesh.hxx" -#include "SMESH_Mesh_i.hxx" -#include "SMESH_subMesh_i.hxx" - - -//============================================================================= -/*! - * Default constructor - */ -//============================================================================= -SMESH_MEDSupport_i::SMESH_MEDSupport_i() -{ - BEGIN_OF("Default Constructor SMESH_MEDSupport_i"); - END_OF("Default Constructor SMESH_MEDSupport_i"); -} - -//============================================================================= -/*! - * Constructor - */ -//============================================================================= -SMESH_MEDSupport_i::SMESH_MEDSupport_i(SMESH_subMesh_i * sm, string name, - string description, SALOME_MED::medEntityMesh entity) - :_subMesh_i(sm), _name(name), _description(description), _entity(entity), - _seqNumber(false), _seqLength(0) -{ - BEGIN_OF("Constructor SMESH_MEDSupport_i"); - - _meshDS = _subMesh_i->_mesh_i->GetImpl().GetMeshDS(); - - int subMeshId = _subMesh_i->GetId(); - - MESSAGE(" subMeshId " << subMeshId) - - if (_subMesh_i->_mesh_i->_mapSubMesh.find(subMeshId) != - _subMesh_i->_mesh_i->_mapSubMesh.end()) - { - ::SMESH_subMesh * subMesh = _subMesh_i->_mesh_i->_mapSubMesh[subMeshId]; - _subMeshDS = subMesh->GetSubMeshDS(); - } - - if (_entity == SALOME_MED::MED_NODE) - { - _numberOfGeometricType = 1; - _geometricType = new SALOME_MED::medGeometryElement[1]; - _geometricType[0] = SALOME_MED::MED_NONE; - } - else - { - MESSAGE("Pas implemente dans cette version"); - THROW_SALOME_CORBA_EXCEPTION - ("Seules les familles de noeuds sont implementees ", - SALOME::BAD_PARAM); - } - - END_OF("Constructor SMESH_MEDSupport_i"); -} - -//============================================================================= -/*! - * Constructor - */ -//============================================================================= -SMESH_MEDSupport_i:: -SMESH_MEDSupport_i(const SMESH_MEDSupport_i & s):_subMesh_i(s._subMesh_i), -_name(s._name), _description(s._description), _entity(s._entity), -_seqNumber(false), _seqLength(0) -{ - BEGIN_OF("Constructor SMESH_MEDSupport_i"); - - _meshDS = _subMesh_i->_mesh_i->GetImpl().GetMeshDS(); - - int subMeshId = _subMesh_i->GetId(); - if (_subMesh_i->_mesh_i->_mapSubMesh.find(subMeshId) != - _subMesh_i->_mesh_i->_mapSubMesh.end()) - { - ::SMESH_subMesh * subMesh = _subMesh_i->_mesh_i->_mapSubMesh[subMeshId]; - _subMeshDS = subMesh->GetSubMeshDS(); - } - - END_OF("Constructor SMESH_MEDSupport_i"); -} - -//============================================================================= -/*! - * Destructor - */ -//============================================================================= - -SMESH_MEDSupport_i::~SMESH_MEDSupport_i() -{ -} - -//============================================================================= -/*! - * CORBA: Accessor for Corba Index - */ -//============================================================================= - -CORBA::Long SMESH_MEDSupport_i::getCorbaIndex()throw(SALOME::SALOME_Exception) -{ - if (_subMeshDS == NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Support", - SALOME::INTERNAL_ERROR); - MESSAGE("Not implemented for SMESH_i"); - THROW_SALOME_CORBA_EXCEPTION("Not Implemented ", SALOME::BAD_PARAM); - -} - -//============================================================================= -/*! - * CORBA: Accessor for Name - */ -//============================================================================= - -char *SMESH_MEDSupport_i::getName() throw(SALOME::SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Support", - SALOME::INTERNAL_ERROR); - return CORBA::string_dup(_name.c_str()); - -} - -//============================================================================= -/*! - * CORBA: Accessor for Description - */ -//============================================================================= - -char *SMESH_MEDSupport_i::getDescription() throw(SALOME::SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Support", - SALOME::INTERNAL_ERROR); - return CORBA::string_dup(_description.c_str()); -} - -//============================================================================= -/*! - * CORBA: Accessor for Mesh - */ -//============================================================================= - -SALOME_MED::MESH_ptr SMESH_MEDSupport_i::getMesh()throw(SALOME:: - SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Support", - SALOME::INTERNAL_ERROR); - - return _subMesh_i->_mesh_i->GetMEDMesh(); -} - -//============================================================================= -/*! - * CORBA: boolean indicating if support concerns all elements - */ -//============================================================================= - -CORBA::Boolean SMESH_MEDSupport_i::isOnAllElements()throw(SALOME:: - SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Support", - SALOME::INTERNAL_ERROR); - if (_seqNumber == false) - { - if (_entity != SALOME_MED::MED_NONE) - { - _seqLength = _subMeshDS->NbNodes(); - _seqNumber = true; - } - else - { - MESSAGE("Only Node Families are implemented "); - THROW_SALOME_CORBA_EXCEPTION("Not implemented Yet ", - SALOME::BAD_PARAM); - } - } - try - { - _isOnAllElements = (_seqLength == _meshDS->NbNodes()); - } - catch(...) - { - MESSAGE("unable to acces related Mesh"); - THROW_SALOME_CORBA_EXCEPTION("No associated Mesh", - SALOME::INTERNAL_ERROR); - }; - return _isOnAllElements; -} - -//============================================================================= -/*! - * CORBA: Accessor for type of support's entity - */ -//============================================================================= - -SALOME_MED::medEntityMesh SMESH_MEDSupport_i::getEntity()throw(SALOME:: - SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Support", - SALOME::INTERNAL_ERROR); - return _entity; -} - -//============================================================================= -/*! - * CORBA: Accessor for types of geometry elements - */ -//============================================================================= - -SALOME_MED::medGeometryElement_array * - SMESH_MEDSupport_i::getTypes()throw(SALOME::SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Support", - SALOME::INTERNAL_ERROR); - SALOME_MED::medGeometryElement_array_var myseq = - new SALOME_MED::medGeometryElement_array; - try - { - int mySeqLength = _numberOfGeometricType; - myseq->length(mySeqLength); - for (int i = 0; i < mySeqLength; i++) - { - myseq[i] = _geometricType[i]; - } - } - catch(...) - { - MESSAGE("Exception lors de la recherche des differents types"); - THROW_SALOME_CORBA_EXCEPTION("Unable to acces Support Types", - SALOME::INTERNAL_ERROR); - } - return myseq._retn(); -} - -//============================================================================= -/*! - * CORBA: Number of different types of geometry elements - * existing in the support - */ -//============================================================================= -CORBA::Long SMESH_MEDSupport_i::getNumberOfElements(SALOME_MED:: - medGeometryElement geomElement) throw(SALOME::SALOME_Exception) -{ - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Support", - SALOME::INTERNAL_ERROR); - return _numberOfGeometricType; - -} - -//============================================================================= -/*! - * CORBA: get Nodes - */ -//============================================================================= - -SALOME_MED::long_array * SMESH_MEDSupport_i::getNumber( - SALOME_MED::medGeometryElement geomElement) throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - if (_subMeshDS==NULL) - THROW_SALOME_CORBA_EXCEPTION("No associated Support", - SALOME::INTERNAL_ERROR); - - // A changer s'il ne s agit plus seulement de famille de noeuds - if (geomElement != SALOME_MED::MED_NONE) - THROW_SALOME_CORBA_EXCEPTION("Not implemented", SALOME::BAD_PARAM); - - SALOME_MED::long_array_var myseq = new SALOME_MED::long_array; - - int i = 0; - myseq->length(_subMeshDS->NbNodes()); - - SMDS_NodeIteratorPtr it = _subMeshDS->GetNodes(); - while(it->more()) - { - myseq[i] = it->next()->GetID(); - i++; - }; - - SCRUTE(myseq->length()); - MESSAGE("End of SMESH_MEDSupport_i::getNumber"); - return myseq._retn(); - -} - -//============================================================================= -/*! - * CORBA: Global Nodes Index (optionnaly designed by the user) - * CORBA: ?????????????????????????????? - */ -//============================================================================= - -SALOME_MED::long_array * - SMESH_MEDSupport_i::getNumberIndex()throw(SALOME::SALOME_Exception) -{ - MESSAGE("Not implemented for SMESH_i"); - THROW_SALOME_CORBA_EXCEPTION("Not Implemented", SALOME::BAD_PARAM); - return NULL; -} -//============================================================================= -/*! - * CORBA: Array containing indexes for elements included in the support - */ -//============================================================================= - -CORBA::Long SMESH_MEDSupport_i::getNumberOfGaussPoint(SALOME_MED:: - medGeometryElement geomElement) throw(SALOME::SALOME_Exception) -{ - MESSAGE("Not implemented for SMESH_i"); - return 0; -} -//============================================================================= -/*! - * Gives the number of types of elements included in the support - */ -//============================================================================= -CORBA::Long SMESH_MEDSupport_i::getNumberOfTypes() - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!! NOT YET IMPLEMENTED !!!!"); - THROW_SALOME_CORBA_EXCEPTION("Not Implemented", SALOME::BAD_PARAM); - return 0; -} -//============================================================================= -/*! - * Gives CORBA: Array containing the numbers of Gauss point of elements - * included in the support - */ -//============================================================================= -SALOME_MED::long_array* SMESH_MEDSupport_i::getNumbersOfGaussPoint() - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!! NOT YET IMPLEMENTED !!!!"); - THROW_SALOME_CORBA_EXCEPTION("Not Implemented", SALOME::BAD_PARAM); - return NULL; -} -//============================================================================= -/*! - * build the object which will contain all the boundary elements of the mesh. - */ -//============================================================================= -void SMESH_MEDSupport_i::getBoundaryElements() - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!! NOT YET IMPLEMENTED !!!!"); - THROW_SALOME_CORBA_EXCEPTION("Not Implemented", SALOME::BAD_PARAM); -} -//============================================================================= -/*! - * Gives information on the support - */ -//============================================================================= -SALOME_MED::SUPPORT::supportInfos * SMESH_MEDSupport_i::getSupportGlobal() - throw (SALOME::SALOME_Exception) -{ - MESSAGE("!!! NOT YET IMPLEMENTED !!!!"); - THROW_SALOME_CORBA_EXCEPTION("Not Implemented", SALOME::BAD_PARAM); - return NULL; -} diff --git a/src/SMESH_I/SMESH_MEDSupport_i.hxx b/src/SMESH_I/SMESH_MEDSupport_i.hxx deleted file mode 100644 index 5be60dda4..000000000 --- a/src/SMESH_I/SMESH_MEDSupport_i.hxx +++ /dev/null @@ -1,111 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_MEDSupport_i.hxx -// Module : SMESH - -#ifndef _MED_SMESH_MEDSUPPORT_I_HXX_ -#define _MED_SMESH_MEDSUPPORT_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(MED) -#include - -#include "SMESHDS_Mesh.hxx" -#include "SMESHDS_SubMesh.hxx" -#include "SMDS_MeshElement.hxx" -#include "SMDS_MeshNode.hxx" - -#include "SMESH_MEDSupport_i.hxx" - -class SMESH_subMesh_i; - -class SMESH_MEDSupport_i: - public POA_SALOME_MED::SUPPORT, public PortableServer::RefCountServantBase -{ - public: - -// Constructors and associated internal methods - SMESH_MEDSupport_i(SMESH_subMesh_i * sm, - string name, string description, SALOME_MED::medEntityMesh entity); - SMESH_MEDSupport_i(const SMESH_MEDSupport_i & s); - -// IDL Methods - char *getName() throw(SALOME::SALOME_Exception); - char *getDescription() throw(SALOME::SALOME_Exception); - SALOME_MED::MESH_ptr getMesh() throw(SALOME::SALOME_Exception); - CORBA::Boolean isOnAllElements() throw(SALOME::SALOME_Exception); - SALOME_MED::medEntityMesh getEntity() throw(SALOME::SALOME_Exception); - CORBA::Long - getNumberOfElements(SALOME_MED::medGeometryElement geomElement) - throw(SALOME::SALOME_Exception); - - CORBA::Long getNumberOfTypes() throw (SALOME::SALOME_Exception); - - SALOME_MED::long_array * - getNumber(SALOME_MED::medGeometryElement geomElement) - throw(SALOME::SALOME_Exception); - - SALOME_MED::long_array * getNumberIndex() - throw(SALOME::SALOME_Exception); - - CORBA::Long - getNumberOfGaussPoint(SALOME_MED::medGeometryElement geomElement) - throw(SALOME::SALOME_Exception); - - SALOME_MED::long_array* getNumbersOfGaussPoint() - throw (SALOME::SALOME_Exception); - - SALOME_MED::medGeometryElement_array *getTypes() - throw(SALOME::SALOME_Exception); - - void getBoundaryElements() throw (SALOME::SALOME_Exception); - - CORBA::Long getCorbaIndex() throw(SALOME::SALOME_Exception); - - SALOME_MED::SUPPORT::supportInfos * getSupportGlobal() - throw (SALOME::SALOME_Exception); - - void createSeq() throw(SALOME::SALOME_Exception); - - public: //public field - const SMESHDS_SubMesh * _subMeshDS; - ::SMESH_subMesh_i * _subMesh_i; - - SMESHDS_Mesh * _meshDS; - string _name; - string _description; - bool _isOnAllElements; - bool _seqNumber; - int _seqLength; - - SALOME_MED::medEntityMesh _entity; - SALOME_MED::medGeometryElement * _geometricType; - int _numberOfGeometricType; - - protected: - SMESH_MEDSupport_i(); - ~SMESH_MEDSupport_i(); -}; - -#endif /* _MED_MEDSUPPORT_I_HXX_ */ diff --git a/src/SMESH_I/SMESH_MeshEditor_i.cxx b/src/SMESH_I/SMESH_MeshEditor_i.cxx deleted file mode 100644 index 0c46be9fe..000000000 --- a/src/SMESH_I/SMESH_MeshEditor_i.cxx +++ /dev/null @@ -1,1702 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_MeshEditor_i.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#include "SMESH_MeshEditor_i.hxx" - -#include "SMDS_MeshEdge.hxx" -#include "SMDS_MeshFace.hxx" -#include "SMDS_MeshVolume.hxx" - -#include "SMESH_MeshEditor.hxx" - -#include "SMESH_Gen_i.hxx" -#include "SMESH_Filter_i.hxx" - -#include "utilities.h" - -#include -#include -#include - -#include - -using namespace std; - -//======================================================================= -//function : addAxis -//purpose : -//======================================================================= - -static TCollection_AsciiString& addAxis(TCollection_AsciiString& theStr, - const SMESH::AxisStruct & theAxis) -{ - theStr += "SMESH.AxisStruct( "; - theStr += TCollection_AsciiString( theAxis.x ) + ", "; - theStr += TCollection_AsciiString( theAxis.y ) + ", "; - theStr += TCollection_AsciiString( theAxis.z ) + ", "; - theStr += TCollection_AsciiString( theAxis.vx ) + ", "; - theStr += TCollection_AsciiString( theAxis.vy ) + ", "; - theStr += TCollection_AsciiString( theAxis.vz ) + " )"; - return theStr; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_MeshEditor_i::SMESH_MeshEditor_i(SMESH_Mesh* theMesh) -{ - _myMesh = theMesh; -}; - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Boolean - SMESH_MeshEditor_i::RemoveElements(const SMESH::long_array & IDsOfElements) -{ - ::SMESH_MeshEditor anEditor( _myMesh ); - list< int > IdList; - - for (int i = 0; i < IDsOfElements.length(); i++) - IdList.push_back( IDsOfElements[i] ); - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.RemoveElements("); - SMESH_Gen_i::AddArray( str, IDsOfElements ) += ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -#ifdef _DEBUG_ - SMESH_Gen_i::AddToCurrentPyScript( "print \"RemoveElements: \", isDone" ); -#endif - // Remove Elements - return anEditor.Remove( IdList, false ); -}; - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Boolean SMESH_MeshEditor_i::RemoveNodes(const SMESH:: - long_array & IDsOfNodes) -{ - ::SMESH_MeshEditor anEditor( _myMesh ); - list< int > IdList; - for (int i = 0; i < IDsOfNodes.length(); i++) - IdList.push_back( IDsOfNodes[i] ); - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.RemoveNodes("); - SMESH_Gen_i::AddArray( str, IDsOfNodes ) += ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -#ifdef _DEBUG_ - SMESH_Gen_i::AddToCurrentPyScript( "print \"RemoveNodes: \", isDone" ); -#endif - - return anEditor.Remove( IdList, true ); -}; - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Boolean SMESH_MeshEditor_i::AddEdge(const SMESH::long_array & IDsOfNodes) -{ - int NbNodes = IDsOfNodes.length(); - if (NbNodes == 2) - { - CORBA::Long index1 = IDsOfNodes[0]; - CORBA::Long index2 = IDsOfNodes[1]; - GetMeshDS()->AddEdge(GetMeshDS()->FindNode(index1), GetMeshDS()->FindNode(index2)); - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.AddEdge(["); - str += TCollection_AsciiString((int) index1) + ", "; - str += TCollection_AsciiString((int) index2) + " ])"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - } - return true; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Boolean SMESH_MeshEditor_i::AddNode(CORBA::Double x, - CORBA::Double y, CORBA::Double z) -{ - GetMeshDS()->AddNode(x, y, z); - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.AddNode("); - str += TCollection_AsciiString( x ) + ", "; - str += TCollection_AsciiString( y ) + ", "; - str += TCollection_AsciiString( z ) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - return true; -} - -//============================================================================= -/*! - * AddFace - */ -//============================================================================= - -CORBA::Boolean SMESH_MeshEditor_i::AddFace(const SMESH::long_array & IDsOfNodes) -{ - int NbNodes = IDsOfNodes.length(); - if (NbNodes < 3) - { - return false; - } - - std::vector nodes (NbNodes); - for (int i = 0; i < NbNodes; i++) - nodes[i] = GetMeshDS()->FindNode(IDsOfNodes[i]); - - if (NbNodes == 3) - { - GetMeshDS()->AddFace(nodes[0], nodes[1], nodes[2]); - } - else if (NbNodes == 4) - { - GetMeshDS()->AddFace(nodes[0], nodes[1], nodes[2], nodes[3]); - } - else - { - GetMeshDS()->AddPolygonalFace(nodes); - } - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.AddFace("); - SMESH_Gen_i::AddArray( str, IDsOfNodes ) += ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -#ifdef _DEBUG_ - SMESH_Gen_i::AddToCurrentPyScript( "print \"AddFace: \", isDone" ); -#endif - - return true; -}; - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Boolean SMESH_MeshEditor_i::AddVolume(const SMESH:: - long_array & IDsOfNodes) -{ - int NbNodes = IDsOfNodes.length(); - vector< const SMDS_MeshNode*> n(NbNodes); - for(int i=0;iFindNode(IDsOfNodes[i]); - - switch(NbNodes) - { - case 4:GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3]); break; - case 5:GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4]); break; - case 6:GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5]); break; - case 8:GetMeshDS()->AddVolume(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7]); break; - } - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.AddVolume("); - SMESH_Gen_i::AddArray( str, IDsOfNodes ) += ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -#ifdef _DEBUG_ - SMESH_Gen_i::AddToCurrentPyScript( "print \"AddVolume: \", isDone" ); -#endif - - return true; -}; - -//============================================================================= -/*! - * AddPolyhedralVolume - */ -//============================================================================= -CORBA::Boolean SMESH_MeshEditor_i::AddPolyhedralVolume - (const SMESH::long_array & IDsOfNodes, - const SMESH::long_array & Quantities) -{ - int NbNodes = IDsOfNodes.length(); - std::vector n (NbNodes); - for (int i = 0; i < NbNodes; i++) - n[i] = GetMeshDS()->FindNode(IDsOfNodes[i]); - - int NbFaces = Quantities.length(); - std::vector q (NbFaces); - for (int j = 0; j < NbFaces; j++) - q[j] = Quantities[j]; - - GetMeshDS()->AddPolyhedralVolume(n, q); - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.AddPolyhedralVolume("); - SMESH_Gen_i::AddArray( str, IDsOfNodes ) += ", "; - SMESH_Gen_i::AddArray( str, Quantities ) += ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -#ifdef _DEBUG_ - SMESH_Gen_i::AddToCurrentPyScript( "print \"AddPolyhedralVolume: \", isDone" ); -#endif - - return true; -}; - -//============================================================================= -/*! - * AddPolyhedralVolumeByFaces - */ -//============================================================================= -CORBA::Boolean SMESH_MeshEditor_i::AddPolyhedralVolumeByFaces - (const SMESH::long_array & IdsOfFaces) -{ - int NbFaces = IdsOfFaces.length(); - std::vector poly_nodes; - std::vector quantities (NbFaces); - - for (int i = 0; i < NbFaces; i++) { - const SMDS_MeshElement* aFace = GetMeshDS()->FindElement(IdsOfFaces[i]); - quantities[i] = aFace->NbNodes(); - - SMDS_ElemIteratorPtr It = aFace->nodesIterator(); - while (It->more()) { - poly_nodes.push_back(static_cast(It->next())); - } - } - - GetMeshDS()->AddPolyhedralVolume(poly_nodes, quantities); - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.AddPolyhedralVolumeByFaces("); - SMESH_Gen_i::AddArray( str, IdsOfFaces ) += ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -#ifdef _DEBUG_ - SMESH_Gen_i::AddToCurrentPyScript( "print \"AddPolyhedralVolume: \", isDone" ); -#endif - - return true; -}; - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Boolean SMESH_MeshEditor_i::MoveNode(CORBA::Long NodeID, - CORBA::Double x, - CORBA::Double y, - CORBA::Double z) -{ - const SMDS_MeshNode * node = GetMeshDS()->FindNode( NodeID ); - if ( !node ) - return false; - - GetMeshDS()->MoveNode(node, x, y, z); - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.MoveNode("); - str += TCollection_AsciiString((Standard_Integer) NodeID) + ", "; - str += TCollection_AsciiString((Standard_Real) x) + ", "; - str += TCollection_AsciiString((Standard_Real) y) + ", "; - str += TCollection_AsciiString((Standard_Real) z) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - return true; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Boolean SMESH_MeshEditor_i::InverseDiag(CORBA::Long NodeID1, - CORBA::Long NodeID2) -{ - const SMDS_MeshNode * n1 = GetMeshDS()->FindNode( NodeID1 ); - const SMDS_MeshNode * n2 = GetMeshDS()->FindNode( NodeID2 ); - if ( !n1 || !n2 ) - return false; - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.InverseDiag("); - str += TCollection_AsciiString((Standard_Integer) NodeID1) + ", "; - str += TCollection_AsciiString((Standard_Integer) NodeID2) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - ::SMESH_MeshEditor aMeshEditor( _myMesh ); - return aMeshEditor.InverseDiag ( n1, n2 ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Boolean SMESH_MeshEditor_i::DeleteDiag(CORBA::Long NodeID1, - CORBA::Long NodeID2) -{ - const SMDS_MeshNode * n1 = GetMeshDS()->FindNode( NodeID1 ); - const SMDS_MeshNode * n2 = GetMeshDS()->FindNode( NodeID2 ); - if ( !n1 || !n2 ) - return false; - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.DeleteDiag("); - str += TCollection_AsciiString((Standard_Integer) NodeID1) + ", "; - str += TCollection_AsciiString((Standard_Integer) NodeID2) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - ::SMESH_MeshEditor aMeshEditor( _myMesh ); - return aMeshEditor.DeleteDiag ( n1, n2 ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Boolean SMESH_MeshEditor_i::Reorient(const SMESH::long_array & IDsOfElements) -{ - ::SMESH_MeshEditor anEditor( _myMesh ); - for (int i = 0; i < IDsOfElements.length(); i++) - { - CORBA::Long index = IDsOfElements[i]; - const SMDS_MeshElement * elem = GetMeshDS()->FindElement(index); - if ( elem ) - anEditor.Reorient( elem ); - } - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.Reorient("); - SMESH_Gen_i::AddArray( str, IDsOfElements ) += ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - return true; -} - - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Boolean SMESH_MeshEditor_i::ReorientObject(SMESH::SMESH_IDSource_ptr theObject) -{ - SMESH::long_array_var anElementsId = theObject->GetIDs(); - CORBA::Boolean isDone = Reorient(anElementsId); - - // Clear python line, created by Reorient() - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID()); - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.ReorientObject("); - SMESH_Gen_i::AddObject( str, theObject ) += ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - return isDone; -} - -//============================================================================= -/*! - * - */ -//============================================================================= -CORBA::Boolean SMESH_MeshEditor_i::TriToQuad (const SMESH::long_array & IDsOfElements, - SMESH::NumericalFunctor_ptr Criterion, - CORBA::Double MaxAngle) -{ - set faces; - for (int i = 0; i < IDsOfElements.length(); i++) - { - CORBA::Long index = IDsOfElements[i]; - const SMDS_MeshElement * elem = GetMeshDS()->FindElement(index); - if ( elem && elem->GetType() == SMDSAbs_Face) - faces.insert( elem ); - } - SMESH::NumericalFunctor_i* aNumericalFunctor = - dynamic_cast( SMESH_Gen_i::GetServant( Criterion ).in() ); - SMESH::Controls::NumericalFunctorPtr aCrit; - if ( !aNumericalFunctor ) - aCrit.reset( new SMESH::Controls::AspectRatio() ); - else - aCrit = aNumericalFunctor->GetNumericalFunctor(); - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.TriToQuad("); - SMESH_Gen_i::AddArray( str, IDsOfElements ) += ", None, "; - str += TCollection_AsciiString((Standard_Real) MaxAngle) + ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -#ifdef _DEBUG_ - SMESH_Gen_i::AddToCurrentPyScript( "print \"TriToQuad: \", isDone" ); -#endif - - ::SMESH_MeshEditor anEditor( _myMesh ); - return anEditor.TriToQuad( faces, aCrit, MaxAngle ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -CORBA::Boolean SMESH_MeshEditor_i::TriToQuadObject (SMESH::SMESH_IDSource_ptr theObject, - SMESH::NumericalFunctor_ptr Criterion, - CORBA::Double MaxAngle) -{ - SMESH::long_array_var anElementsId = theObject->GetIDs(); - CORBA::Boolean isDone = TriToQuad(anElementsId, Criterion, MaxAngle); - - // Clear python line(s), created by TriToQuad() - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID()); -#ifdef _DEBUG_ - aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID()); -#endif - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.TriToQuadObject("); - SMESH_Gen_i::AddObject( str, theObject ) += ", None, "; - str += TCollection_AsciiString((Standard_Real) MaxAngle) + ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -#ifdef _DEBUG_ - SMESH_Gen_i::AddToCurrentPyScript( "print \"TriToQuadObject: \", isDone" ); -#endif - - return isDone; -} - -//============================================================================= -/*! - * - */ -//============================================================================= -CORBA::Boolean SMESH_MeshEditor_i::QuadToTri (const SMESH::long_array & IDsOfElements, - SMESH::NumericalFunctor_ptr Criterion) -{ - set faces; - for (int i = 0; i < IDsOfElements.length(); i++) - { - CORBA::Long index = IDsOfElements[i]; - const SMDS_MeshElement * elem = GetMeshDS()->FindElement(index); - if ( elem && elem->GetType() == SMDSAbs_Face) - faces.insert( elem ); - } - SMESH::NumericalFunctor_i* aNumericalFunctor = - dynamic_cast( SMESH_Gen_i::GetServant( Criterion ).in() ); - SMESH::Controls::NumericalFunctorPtr aCrit; - if ( !aNumericalFunctor ) - aCrit.reset( new SMESH::Controls::AspectRatio() ); - else - aCrit = aNumericalFunctor->GetNumericalFunctor(); - - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.QuadToTri("); - SMESH_Gen_i::AddArray( str, IDsOfElements ) += ", None )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -#ifdef _DEBUG_ - SMESH_Gen_i::AddToCurrentPyScript( "print \"QuadToTri: \", isDone" ); -#endif - - ::SMESH_MeshEditor anEditor( _myMesh ); - return anEditor.QuadToTri( faces, aCrit ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -CORBA::Boolean SMESH_MeshEditor_i::QuadToTriObject (SMESH::SMESH_IDSource_ptr theObject, - SMESH::NumericalFunctor_ptr Criterion) -{ - SMESH::long_array_var anElementsId = theObject->GetIDs(); - CORBA::Boolean isDone = QuadToTri(anElementsId, Criterion); - - // Clear python line(s), created by QuadToTri() - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID()); -#ifdef _DEBUG_ - aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID()); -#endif - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.QuadToTriObject("); - SMESH_Gen_i::AddObject( str, theObject ) += ", None )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -#ifdef _DEBUG_ - SMESH_Gen_i::AddToCurrentPyScript( "print \"QuadToTriObject: \", isDone" ); -#endif - - return isDone; -} - -//============================================================================= -/*! - * - */ -//============================================================================= -CORBA::Boolean SMESH_MeshEditor_i::SplitQuad (const SMESH::long_array & IDsOfElements, - CORBA::Boolean Diag13) -{ - set faces; - for (int i = 0; i < IDsOfElements.length(); i++) - { - CORBA::Long index = IDsOfElements[i]; - const SMDS_MeshElement * elem = GetMeshDS()->FindElement(index); - if ( elem && elem->GetType() == SMDSAbs_Face) - faces.insert( elem ); - } - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.SplitQuad("); - SMESH_Gen_i::AddArray( str, IDsOfElements ) += ", "; - str += TCollection_AsciiString( Diag13 ) + ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -#ifdef _DEBUG_ - SMESH_Gen_i::AddToCurrentPyScript( "print \"SplitQuad: \", isDone" ); -#endif - - ::SMESH_MeshEditor anEditor( _myMesh ); - return anEditor.QuadToTri( faces, Diag13 ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -CORBA::Boolean SMESH_MeshEditor_i::SplitQuadObject (SMESH::SMESH_IDSource_ptr theObject, - CORBA::Boolean Diag13) -{ - SMESH::long_array_var anElementsId = theObject->GetIDs(); - CORBA::Boolean isDone = SplitQuad(anElementsId, Diag13); - - // Clear python line(s), created by SplitQuad() - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID()); -#ifdef _DEBUG_ - aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID()); -#endif - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor.SplitQuadObject("); - SMESH_Gen_i::AddObject( str, theObject ) += ", "; - str += TCollection_AsciiString( Diag13 ) + ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -#ifdef _DEBUG_ - SMESH_Gen_i::AddToCurrentPyScript( "print \"SplitQuadObject: \", isDone" ); -#endif - - return isDone; -} - -//============================================================================= -/*! - * BestSplit - */ -//============================================================================= -CORBA::Long SMESH_MeshEditor_i::BestSplit (CORBA::Long IDOfQuad, - SMESH::NumericalFunctor_ptr Criterion) -{ - const SMDS_MeshElement* quad = GetMeshDS()->FindElement(IDOfQuad); - if (quad && quad->GetType() == SMDSAbs_Face && quad->NbNodes() == 4) - { - SMESH::NumericalFunctor_i* aNumericalFunctor = - dynamic_cast(SMESH_Gen_i::GetServant(Criterion).in()); - SMESH::Controls::NumericalFunctorPtr aCrit; - if (aNumericalFunctor) - aCrit = aNumericalFunctor->GetNumericalFunctor(); - else - aCrit.reset(new SMESH::Controls::AspectRatio()); - - ::SMESH_MeshEditor anEditor (_myMesh); - return anEditor.BestSplit(quad, aCrit); - } - return -1; -} - -//======================================================================= -//function : Smooth -//purpose : -//======================================================================= - -CORBA::Boolean - SMESH_MeshEditor_i::Smooth(const SMESH::long_array & IDsOfElements, - const SMESH::long_array & IDsOfFixedNodes, - CORBA::Long MaxNbOfIterations, - CORBA::Double MaxAspectRatio, - SMESH::SMESH_MeshEditor::Smooth_Method Method) -{ - return smooth( IDsOfElements, IDsOfFixedNodes, MaxNbOfIterations, - MaxAspectRatio, Method, false ); -} - -//======================================================================= -//function : SmoothParametric -//purpose : -//======================================================================= - -CORBA::Boolean - SMESH_MeshEditor_i::SmoothParametric(const SMESH::long_array & IDsOfElements, - const SMESH::long_array & IDsOfFixedNodes, - CORBA::Long MaxNbOfIterations, - CORBA::Double MaxAspectRatio, - SMESH::SMESH_MeshEditor::Smooth_Method Method) -{ - return smooth( IDsOfElements, IDsOfFixedNodes, MaxNbOfIterations, - MaxAspectRatio, Method, true ); -} - -//======================================================================= -//function : SmoothObject -//purpose : -//======================================================================= - -CORBA::Boolean - SMESH_MeshEditor_i::SmoothObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::long_array & IDsOfFixedNodes, - CORBA::Long MaxNbOfIterations, - CORBA::Double MaxAspectRatio, - SMESH::SMESH_MeshEditor::Smooth_Method Method) -{ - return smoothObject (theObject, IDsOfFixedNodes, MaxNbOfIterations, - MaxAspectRatio, Method, false); -} - -//======================================================================= -//function : SmoothParametricObject -//purpose : -//======================================================================= - -CORBA::Boolean - SMESH_MeshEditor_i::SmoothParametricObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::long_array & IDsOfFixedNodes, - CORBA::Long MaxNbOfIterations, - CORBA::Double MaxAspectRatio, - SMESH::SMESH_MeshEditor::Smooth_Method Method) -{ - return smoothObject (theObject, IDsOfFixedNodes, MaxNbOfIterations, - MaxAspectRatio, Method, true); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Boolean - SMESH_MeshEditor_i::smooth(const SMESH::long_array & IDsOfElements, - const SMESH::long_array & IDsOfFixedNodes, - CORBA::Long MaxNbOfIterations, - CORBA::Double MaxAspectRatio, - SMESH::SMESH_MeshEditor::Smooth_Method Method, - bool IsParametric) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - set elements; - for (int i = 0; i < IDsOfElements.length(); i++) - { - CORBA::Long index = IDsOfElements[i]; - const SMDS_MeshElement * elem = aMesh->FindElement(index); - if ( elem && elem->GetType() == SMDSAbs_Face) - elements.insert( elem ); - } - - set fixedNodes; - for (int i = 0; i < IDsOfFixedNodes.length(); i++) - { - CORBA::Long index = IDsOfFixedNodes[i]; - const SMDS_MeshNode * node = aMesh->FindNode(index); - if ( node ) - fixedNodes.insert( node ); - } - ::SMESH_MeshEditor::SmoothMethod method = ::SMESH_MeshEditor::LAPLACIAN; - if ( Method != SMESH::SMESH_MeshEditor::LAPLACIAN_SMOOTH ) - method = ::SMESH_MeshEditor::CENTROIDAL; - - ::SMESH_MeshEditor anEditor( _myMesh ); - anEditor.Smooth(elements, fixedNodes, method, - MaxNbOfIterations, MaxAspectRatio, IsParametric ); - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor."); - str += (char*) (IsParametric ? "SmoothParametric( " : "Smooth( "); - SMESH_Gen_i::AddArray( str, IDsOfElements ) += ", "; - SMESH_Gen_i::AddArray( str, IDsOfFixedNodes ) += ", "; - str += (Standard_Integer) MaxNbOfIterations; - str += ", "; - str += (Standard_Real) MaxAspectRatio; - if ( method == ::SMESH_MeshEditor::CENTROIDAL ) - str += ", SMESH.SMESH_MeshEditor.CENTROIDAL_SMOOTH, "; - else - str += ", SMESH.SMESH_MeshEditor.LAPLACIAN_SMOOTH, "; - str += IsParametric; - str += " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -#ifdef _DEBUG_ - SMESH_Gen_i::AddToCurrentPyScript( "print \"Smooth: \", isDone" ); -#endif - - return true; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Boolean - SMESH_MeshEditor_i::smoothObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::long_array & IDsOfFixedNodes, - CORBA::Long MaxNbOfIterations, - CORBA::Double MaxAspectRatio, - SMESH::SMESH_MeshEditor::Smooth_Method Method, - bool IsParametric) -{ - SMESH::long_array_var anElementsId = theObject->GetIDs(); - CORBA::Boolean isDone = smooth (anElementsId, IDsOfFixedNodes, MaxNbOfIterations, - MaxAspectRatio, Method, IsParametric); - - // Clear python line(s), created by Smooth() - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID()); -#ifdef _DEBUG_ - aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID()); -#endif - - // Update Python script - TCollection_AsciiString str ("isDone = mesh_editor."); - str += (char*) (IsParametric ? "SmoothParametricObject( " : "SmoothObject( "); - SMESH_Gen_i::AddObject( str, theObject ) += ", "; - SMESH_Gen_i::AddArray( str, IDsOfFixedNodes ) += ", "; - str += (Standard_Integer) MaxNbOfIterations; - str += ", "; - str += (Standard_Real) MaxAspectRatio; - if ( Method == SMESH::SMESH_MeshEditor::CENTROIDAL_SMOOTH ) - str += ", SMESH.SMESH_MeshEditor.CENTROIDAL_SMOOTH, "; - else - str += ", SMESH.SMESH_MeshEditor.LAPLACIAN_SMOOTH, "; - str += IsParametric; - str += " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -#ifdef _DEBUG_ - SMESH_Gen_i::AddToCurrentPyScript( "print \"SmoothObject: \", isDone" ); -#endif - - return isDone; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_MeshEditor_i::RenumberNodes() -{ - // Update Python script - SMESH_Gen_i::AddToCurrentPyScript( "mesh_editor.RenumberNodes()" ); - - GetMeshDS()->Renumber( true ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_MeshEditor_i::RenumberElements() -{ - // Update Python script - SMESH_Gen_i::AddToCurrentPyScript( "mesh_editor.RenumberElements()" ); - - GetMeshDS()->Renumber( false ); -} - -//======================================================================= -//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) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - set elements; - for (int i = 0; i < theIDsOfElements.length(); i++) - { - CORBA::Long index = theIDsOfElements[i]; - const SMDS_MeshElement * elem = aMesh->FindElement(index); - if ( elem ) - elements.insert( elem ); - } - gp_Ax1 Ax1 (gp_Pnt( theAxis.x, theAxis.y, theAxis.z ), - gp_Vec( theAxis.vx, theAxis.vy, theAxis.vz )); - - ::SMESH_MeshEditor anEditor( _myMesh ); - anEditor.RotationSweep (elements, Ax1, theAngleInRadians, - theNbOfSteps, theTolerance); - - // Update Python script - TCollection_AsciiString str = "axis = "; - addAxis( str, theAxis ); - SMESH_Gen_i::AddToCurrentPyScript( str ); - str = "mesh_editor.RotationSweep("; - SMESH_Gen_i::AddArray( str, theIDsOfElements ) += ", axis, "; - str += TCollection_AsciiString( theAngleInRadians ) + ", "; - str += TCollection_AsciiString( (int)theNbOfSteps ) + ", "; - str += TCollection_AsciiString( theTolerance ) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -} - -//======================================================================= -//function : RotationSweepObject -//purpose : -//======================================================================= - -void SMESH_MeshEditor_i::RotationSweepObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::AxisStruct & theAxis, - CORBA::Double theAngleInRadians, - CORBA::Long theNbOfSteps, - CORBA::Double theTolerance) -{ - SMESH::long_array_var anElementsId = theObject->GetIDs(); - RotationSweep(anElementsId, theAxis, theAngleInRadians, theNbOfSteps, theTolerance); - - // Clear python line, created by RotationSweep() - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID()); - - // Update Python script - TCollection_AsciiString str ("mesh_editor.RotationSweepObject("); - SMESH_Gen_i::AddObject( str, theObject ) += ", axis, "; - str += TCollection_AsciiString( theAngleInRadians ) + ", "; - str += TCollection_AsciiString( (int)theNbOfSteps ) + ", "; - str += TCollection_AsciiString( theTolerance ) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -} - -//======================================================================= -//function : ExtrusionSweep -//purpose : -//======================================================================= - -void SMESH_MeshEditor_i::ExtrusionSweep(const SMESH::long_array & theIDsOfElements, - const SMESH::DirStruct & theStepVector, - CORBA::Long theNbOfSteps) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - set elements; - for (int i = 0; i < theIDsOfElements.length(); i++) - { - CORBA::Long index = theIDsOfElements[i]; - const SMDS_MeshElement * elem = aMesh->FindElement(index); - if ( elem ) - elements.insert( elem ); - } - const SMESH::PointStruct * P = &theStepVector.PS; - gp_Vec stepVec( P->x, P->y, P->z ); - - ::SMESH_MeshEditor anEditor( _myMesh ); - anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps); - - // Update Python script - TCollection_AsciiString str = "stepVector = SMESH.DirStruct( SMESH.PointStruct ( "; - str += (TCollection_AsciiString) stepVec.X() + ", "; - str += (TCollection_AsciiString) stepVec.Y() + ", "; - str += (TCollection_AsciiString) stepVec.Z() + " ))"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - str = ("mesh_editor.ExtrusionSweep("); - SMESH_Gen_i::AddArray( str, theIDsOfElements ) += ", stepVector, "; - str += TCollection_AsciiString((int)theNbOfSteps) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -} - - -//======================================================================= -//function : ExtrusionSweepObject -//purpose : -//======================================================================= - -void SMESH_MeshEditor_i::ExtrusionSweepObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::DirStruct & theStepVector, - CORBA::Long theNbOfSteps) -{ - 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 - TCollection_AsciiString str ("mesh_editor.ExtrusionSweepObject("); - SMESH_Gen_i::AddObject( str, theObject ) += ", stepVector, "; - str += TCollection_AsciiString((int)theNbOfSteps) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -} -//======================================================================= -//function : ExtrusionSweepObject1D -//purpose : -//======================================================================= - -void SMESH_MeshEditor_i::ExtrusionSweepObject1D(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::DirStruct & theStepVector, - CORBA::Long theNbOfSteps) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - SMESH::long_array_var allElementsId = theObject->GetIDs(); - - set elements; - for (int i = 0; i < allElementsId->length(); i++) - { - CORBA::Long index = allElementsId[i]; - const SMDS_MeshElement * elem = aMesh->FindElement(index); - if ( elem && elem->GetType() == SMDSAbs_Edge ) - elements.insert( elem ); - } - const SMESH::PointStruct * P = &theStepVector.PS; - gp_Vec stepVec( P->x, P->y, P->z ); - - ::SMESH_MeshEditor anEditor( _myMesh ); - anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps); -} - -//======================================================================= -//function : ExtrusionSweepObject2D -//purpose : -//======================================================================= - -void SMESH_MeshEditor_i::ExtrusionSweepObject2D(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::DirStruct & theStepVector, - CORBA::Long theNbOfSteps) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - SMESH::long_array_var allElementsId = theObject->GetIDs(); - - set elements; - for (int i = 0; i < allElementsId->length(); i++) - { - CORBA::Long index = allElementsId[i]; - const SMDS_MeshElement * elem = aMesh->FindElement(index); - if ( elem && elem->GetType() == SMDSAbs_Face ) - elements.insert( elem ); - } - const SMESH::PointStruct * P = &theStepVector.PS; - gp_Vec stepVec( P->x, P->y, P->z ); - - ::SMESH_MeshEditor anEditor( _myMesh ); - anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps); -} - -#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 ) -{ - switch ( e ) { - RETCASE( EXTR_OK ); - RETCASE( EXTR_NO_ELEMENTS ); - RETCASE( EXTR_PATH_NOT_EDGE ); - RETCASE( EXTR_BAD_PATH_SHAPE ); - RETCASE( EXTR_BAD_STARTING_NODE ); - RETCASE( EXTR_BAD_ANGLES_NUMBER ); - RETCASE( EXTR_CANT_GET_TANGENT ); - } - return SMESH::SMESH_MeshEditor::EXTR_OK; -} - -//======================================================================= -//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) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - if ( thePathMesh->_is_nil() || thePathShape->_is_nil() ) - return SMESH::SMESH_MeshEditor::EXTR_BAD_PATH_SHAPE; - - 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 ) - return SMESH::SMESH_MeshEditor::EXTR_BAD_PATH_SHAPE; - - SMDS_MeshNode* nodeStart = (SMDS_MeshNode*)aMeshImp->GetImpl().GetMeshDS()->FindNode(theNodeStart); - if ( !nodeStart ) - return SMESH::SMESH_MeshEditor::EXTR_BAD_STARTING_NODE; - - set elements; - for (int i = 0; i < theIDsOfElements.length(); i++) - { - CORBA::Long index = theIDsOfElements[i]; - const SMDS_MeshElement * elem = aMesh->FindElement(index); - if ( elem ) - elements.insert( elem ); - } - - list angles; - for (int i = 0; i < theAngles.length(); i++) - { - angles.push_back( theAngles[i] ); - } - - gp_Pnt refPnt( theRefPoint.x, theRefPoint.y, theRefPoint.z ); - - // Update Python script - TCollection_AsciiString str = "refPoint = SMESH.PointStruct( "; - str += (TCollection_AsciiString) refPnt.X() + ", "; - str += (TCollection_AsciiString) refPnt.Y() + ", "; - str += (TCollection_AsciiString) refPnt.Z() + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - str = ("error = mesh_editor.ExtrusionAlongPath("); - SMESH_Gen_i::AddArray ( str, theIDsOfElements ) += ", "; - SMESH_Gen_i::AddObject( str, thePathMesh ) += ", "; - SMESH_Gen_i::AddObject( str, thePathShape ) += ", "; - str += TCollection_AsciiString( (int)theNodeStart ) + ", "; - str += TCollection_AsciiString( (int)theHasAngles ) + ", "; - SMESH_Gen_i::AddArray ( str, theAngles ) += ", "; - str += (TCollection_AsciiString) theHasRefPoint + ", refPoint )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - ::SMESH_MeshEditor anEditor( _myMesh ); - return convExtrError( anEditor.ExtrusionAlongTrack( elements, aSubMesh, nodeStart, theHasAngles, angles, theHasRefPoint, refPnt ) ); -} - -//======================================================================= -//function : ExtrusionAlongPathObject -//purpose : -//======================================================================= - -SMESH::SMESH_MeshEditor::Extrusion_Error - SMESH_MeshEditor_i::ExtrusionAlongPathObject(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::long_array_var anElementsId = theObject->GetIDs(); - SMESH::SMESH_MeshEditor::Extrusion_Error error = ExtrusionAlongPath - (anElementsId, thePathMesh, thePathShape, theNodeStart, - theHasAngles, theAngles, theHasRefPoint, theRefPoint); - - // Clear python line, created by ExtrusionAlongPath() - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID()); - - // Update Python script - TCollection_AsciiString str ("error = mesh_editor.ExtrusionAlongPathObject("); - SMESH_Gen_i::AddObject( str, theObject ) += ", "; - SMESH_Gen_i::AddObject( str, thePathMesh ) += ", "; - SMESH_Gen_i::AddObject( str, thePathShape ) += ", "; - str += TCollection_AsciiString( (int)theNodeStart ) + ", "; - str += TCollection_AsciiString( theHasAngles ) + ", "; - SMESH_Gen_i::AddArray ( str, theAngles ) += ", "; - str += TCollection_AsciiString( theHasRefPoint ) + ", refPoint )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - return error; -} - -//======================================================================= -//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) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - set elements; - for (int i = 0; i < theIDsOfElements.length(); i++) - { - CORBA::Long index = theIDsOfElements[i]; - const SMDS_MeshElement * elem = aMesh->FindElement(index); - if ( elem ) - elements.insert( elem ); - } - gp_Pnt P ( theAxis.x, theAxis.y, theAxis.z ); - gp_Vec V ( theAxis.vx, theAxis.vy, theAxis.vz ); - - gp_Trsf aTrsf; - TCollection_AsciiString typeStr, copyStr( theCopy ); - 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 - TCollection_AsciiString str ("mesh_editor.Mirror("); - SMESH_Gen_i::AddArray( str, theIDsOfElements ) += ", "; - addAxis( str, theAxis ) += ", "; - str += typeStr + ", "; - str += copyStr + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - ::SMESH_MeshEditor anEditor( _myMesh ); - anEditor.Transform (elements, aTrsf, theCopy); -} - -//======================================================================= -//function : MirrorObject -//purpose : -//======================================================================= - -void SMESH_MeshEditor_i::MirrorObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::AxisStruct & theAxis, - SMESH::SMESH_MeshEditor::MirrorType theMirrorType, - CORBA::Boolean theCopy) -{ - SMESH::long_array_var anElementsId = theObject->GetIDs(); - Mirror(anElementsId, theAxis, theMirrorType, theCopy); - - // Clear python line, created by Mirror() - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID()); - - // Update Python script - TCollection_AsciiString typeStr, copyStr( theCopy ); - 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"; - } - - TCollection_AsciiString str ("mesh_editor.MirrorObject("); - SMESH_Gen_i::AddObject( str, theObject ) += ", "; - addAxis( str, theAxis ) += ", "; - str += typeStr + ", " + copyStr + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -} - -//======================================================================= -//function : Translate -//purpose : -//======================================================================= - -void SMESH_MeshEditor_i::Translate(const SMESH::long_array & theIDsOfElements, - const SMESH::DirStruct & theVector, - CORBA::Boolean theCopy) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - set elements; - for (int i = 0; i < theIDsOfElements.length(); i++) - { - CORBA::Long index = theIDsOfElements[i]; - const SMDS_MeshElement * elem = aMesh->FindElement(index); - if ( elem ) - elements.insert( elem ); - } - 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); - - // Update Python script - TCollection_AsciiString str = "vector = SMESH.DirStruct( SMESH.PointStruct ( "; - str += (TCollection_AsciiString) P->x + ", "; - str += (TCollection_AsciiString) P->y + ", "; - str += (TCollection_AsciiString) P->z + " ))"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - str = ("mesh_editor.Translate("); - SMESH_Gen_i::AddArray( str, theIDsOfElements ) += ", vector, "; - str += (TCollection_AsciiString) theCopy + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -} - -//======================================================================= -//function : TranslateObject -//purpose : -//======================================================================= - -void SMESH_MeshEditor_i::TranslateObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::DirStruct & theVector, - CORBA::Boolean theCopy) -{ - SMESH::long_array_var anElementsId = theObject->GetIDs(); - Translate(anElementsId, theVector, theCopy); - - // Clear python line, created by Translate() - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID()); - - // Update Python script - TCollection_AsciiString str ("mesh_editor.TranslateObject("); - SMESH_Gen_i::AddObject( str, theObject ) += ", vector, "; - str += TCollection_AsciiString( theCopy ) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -} - -//======================================================================= -//function : Rotate -//purpose : -//======================================================================= - -void SMESH_MeshEditor_i::Rotate(const SMESH::long_array & theIDsOfElements, - const SMESH::AxisStruct & theAxis, - CORBA::Double theAngle, - CORBA::Boolean theCopy) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - set elements; - for (int i = 0; i < theIDsOfElements.length(); i++) - { - CORBA::Long index = theIDsOfElements[i]; - const SMDS_MeshElement * elem = aMesh->FindElement(index); - if ( elem ) - elements.insert( elem ); - } - gp_Pnt P ( theAxis.x, theAxis.y, theAxis.z ); - gp_Vec V ( theAxis.vx, theAxis.vy, theAxis.vz ); - - gp_Trsf aTrsf; - aTrsf.SetRotation( gp_Ax1( P, V ), theAngle); - - ::SMESH_MeshEditor anEditor( _myMesh ); - anEditor.Transform (elements, aTrsf, theCopy); - - // Update Python script - TCollection_AsciiString str ("axis = "); - addAxis( str, theAxis ); - SMESH_Gen_i::AddToCurrentPyScript( str ); - str = ("mesh_editor.Rotate("); - SMESH_Gen_i::AddArray( str, theIDsOfElements ) += ", axis, "; - str += (TCollection_AsciiString) theAngle + ", "; - str += (TCollection_AsciiString) theCopy + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -} - -//======================================================================= -//function : RotateObject -//purpose : -//======================================================================= - -void SMESH_MeshEditor_i::RotateObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::AxisStruct & theAxis, - CORBA::Double theAngle, - CORBA::Boolean theCopy) -{ - SMESH::long_array_var anElementsId = theObject->GetIDs(); - Rotate(anElementsId, theAxis, theAngle, theCopy); - - // Clear python line, created by Rotate() - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID()); - - // Update Python script - TCollection_AsciiString str ("mesh_editor.RotateObject("); - SMESH_Gen_i::AddObject( str, theObject ) += ", axis, "; - str += TCollection_AsciiString( theAngle ) + ", "; - str += TCollection_AsciiString( theCopy ) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -} - -//======================================================================= -//function : FindCoincidentNodes -//purpose : -//======================================================================= - -void SMESH_MeshEditor_i::FindCoincidentNodes (CORBA::Double Tolerance, - SMESH::array_of_long_array_out GroupsOfNodes) -{ - ::SMESH_MeshEditor::TListOfListOfNodes aListOfListOfNodes; - ::SMESH_MeshEditor anEditor( _myMesh ); - set nodes; // no input nodes - anEditor.FindCoincidentNodes( nodes, Tolerance, aListOfListOfNodes ); - - GroupsOfNodes = new SMESH::array_of_long_array; - GroupsOfNodes->length( aListOfListOfNodes.size() ); - ::SMESH_MeshEditor::TListOfListOfNodes::iterator llIt = aListOfListOfNodes.begin(); - for ( CORBA::Long i = 0; llIt != aListOfListOfNodes.end(); llIt++, i++ ) - { - list< const SMDS_MeshNode* >& aListOfNodes = *llIt; - list< const SMDS_MeshNode* >::iterator lIt = aListOfNodes.begin();; - SMESH::long_array& aGroup = GroupsOfNodes[ i ]; - aGroup.length( aListOfNodes.size() ); - for ( int j = 0; lIt != aListOfNodes.end(); lIt++, j++ ) - aGroup[ j ] = (*lIt)->GetID(); - } -} - -//======================================================================= -//function : MergeNodes -//purpose : -//======================================================================= - -void SMESH_MeshEditor_i::MergeNodes (const SMESH::array_of_long_array& GroupsOfNodes) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - TCollection_AsciiString str( "mesh_editor.MergeNodes([" ); - ::SMESH_MeshEditor::TListOfListOfNodes aListOfListOfNodes; - for (int i = 0; i < GroupsOfNodes.length(); i++) - { - const SMESH::long_array& aNodeGroup = GroupsOfNodes[ i ]; - aListOfListOfNodes.push_back( list< const SMDS_MeshNode* >() ); - list< const SMDS_MeshNode* >& aListOfNodes = aListOfListOfNodes.back(); - for ( int j = 0; j < aNodeGroup.length(); j++ ) - { - CORBA::Long index = aNodeGroup[ j ]; - const SMDS_MeshNode * node = aMesh->FindNode(index); - if ( node ) - aListOfNodes.push_back( node ); - } - if ( aListOfNodes.size() < 2 ) - aListOfListOfNodes.pop_back(); - - if ( i > 0 ) - str += ","; - SMESH_Gen_i::AddArray( str, aNodeGroup ); - } - ::SMESH_MeshEditor anEditor( _myMesh ); - anEditor.MergeNodes( aListOfListOfNodes ); - - // Update Python script - SMESH_Gen_i::AddToCurrentPyScript( str + "])" ); -} - -//======================================================================= -//function : MergeEqualElements -//purpose : -//======================================================================= - -void SMESH_MeshEditor_i::MergeEqualElements() -{ - ::SMESH_MeshEditor anEditor( _myMesh ); - anEditor.MergeEqualElements(); - - // Update Python script - SMESH_Gen_i::AddToCurrentPyScript( "mesh_editor.MergeEqualElements()" ); -} - -//======================================================================= -//function : operator -//purpose : -//======================================================================= - -#define RETCASE(enm) case ::SMESH_MeshEditor::enm: return SMESH::SMESH_MeshEditor::enm; - -static SMESH::SMESH_MeshEditor::Sew_Error convError( const::SMESH_MeshEditor::Sew_Error e ) -{ - switch ( e ) { - RETCASE( SEW_OK ); - RETCASE( SEW_BORDER1_NOT_FOUND ); - RETCASE( SEW_BORDER2_NOT_FOUND ); - RETCASE( SEW_BOTH_BORDERS_NOT_FOUND ); - RETCASE( SEW_BAD_SIDE_NODES ); - RETCASE( SEW_VOLUMES_TO_SPLIT ); - RETCASE( SEW_DIFF_NB_OF_ELEMENTS ); - RETCASE( SEW_TOPO_DIFF_SETS_OF_ELEMENTS ); - RETCASE( SEW_BAD_SIDE1_NODES ); - RETCASE( SEW_BAD_SIDE2_NODES ); - } - return SMESH::SMESH_MeshEditor::SEW_OK; -} - -//======================================================================= -//function : SewFreeBorders -//purpose : -//======================================================================= - -SMESH::SMESH_MeshEditor::Sew_Error - SMESH_MeshEditor_i::SewFreeBorders(CORBA::Long FirstNodeID1, - CORBA::Long SecondNodeID1, - CORBA::Long LastNodeID1, - CORBA::Long FirstNodeID2, - CORBA::Long SecondNodeID2, - CORBA::Long LastNodeID2, - CORBA::Boolean CreatePolygons, - CORBA::Boolean CreatePolyedrs) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - const SMDS_MeshNode* aBorderFirstNode = aMesh->FindNode( FirstNodeID1 ); - const SMDS_MeshNode* aBorderSecondNode = aMesh->FindNode( SecondNodeID1 ); - const SMDS_MeshNode* aBorderLastNode = aMesh->FindNode( LastNodeID1 ); - const SMDS_MeshNode* aSide2FirstNode = aMesh->FindNode( FirstNodeID2 ); - const SMDS_MeshNode* aSide2SecondNode = aMesh->FindNode( SecondNodeID2 ); - const SMDS_MeshNode* aSide2ThirdNode = aMesh->FindNode( LastNodeID2 ); - - if (!aBorderFirstNode || - !aBorderSecondNode|| - !aBorderLastNode) - return SMESH::SMESH_MeshEditor::SEW_BORDER1_NOT_FOUND; - if (!aSide2FirstNode || - !aSide2SecondNode || - !aSide2ThirdNode) - return SMESH::SMESH_MeshEditor::SEW_BORDER2_NOT_FOUND; - - // Update Python script - TCollection_AsciiString str ("error = mesh_editor.SewFreeBorders( "); - str += TCollection_AsciiString( (int) FirstNodeID1 ) + ", "; - str += TCollection_AsciiString( (int) SecondNodeID1 ) + ", "; - str += TCollection_AsciiString( (int) LastNodeID1 ) + ", "; - str += TCollection_AsciiString( (int) FirstNodeID2 ) + ", "; - str += TCollection_AsciiString( (int) SecondNodeID2 ) + ", "; - str += TCollection_AsciiString( (int) LastNodeID2 ) + ", "; - str += TCollection_AsciiString( CreatePolygons ) + ", "; - str += TCollection_AsciiString( CreatePolyedrs ) + ") "; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - ::SMESH_MeshEditor anEditor( _myMesh ); - return convError( anEditor.SewFreeBorder (aBorderFirstNode, - aBorderSecondNode, - aBorderLastNode, - aSide2FirstNode, - aSide2SecondNode, - aSide2ThirdNode, - true, - CreatePolygons, - CreatePolyedrs) ); -} - -//======================================================================= -//function : SewConformFreeBorders -//purpose : -//======================================================================= - -SMESH::SMESH_MeshEditor::Sew_Error - SMESH_MeshEditor_i::SewConformFreeBorders(CORBA::Long FirstNodeID1, - CORBA::Long SecondNodeID1, - CORBA::Long LastNodeID1, - CORBA::Long FirstNodeID2, - CORBA::Long SecondNodeID2) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - const SMDS_MeshNode* aBorderFirstNode = aMesh->FindNode( FirstNodeID1 ); - const SMDS_MeshNode* aBorderSecondNode = aMesh->FindNode( SecondNodeID1 ); - const SMDS_MeshNode* aBorderLastNode = aMesh->FindNode( LastNodeID1 ); - const SMDS_MeshNode* aSide2FirstNode = aMesh->FindNode( FirstNodeID2 ); - const SMDS_MeshNode* aSide2SecondNode = aMesh->FindNode( SecondNodeID2 ); - const SMDS_MeshNode* aSide2ThirdNode = 0; - - if (!aBorderFirstNode || - !aBorderSecondNode|| - !aBorderLastNode ) - return SMESH::SMESH_MeshEditor::SEW_BORDER1_NOT_FOUND; - if (!aSide2FirstNode || - !aSide2SecondNode) - return SMESH::SMESH_MeshEditor::SEW_BORDER2_NOT_FOUND; - - // Update Python script - TCollection_AsciiString str ("error = mesh_editor.SewConformFreeBorders( "); - str += TCollection_AsciiString( (int) FirstNodeID1 ) + ", "; - str += TCollection_AsciiString( (int) SecondNodeID1 ) + ", "; - str += TCollection_AsciiString( (int) LastNodeID1 ) + ", "; - str += TCollection_AsciiString( (int) FirstNodeID2 ) + ", "; - str += TCollection_AsciiString( (int) SecondNodeID2 ) + ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - ::SMESH_MeshEditor anEditor( _myMesh ); - return convError( anEditor.SewFreeBorder (aBorderFirstNode, - aBorderSecondNode, - aBorderLastNode, - aSide2FirstNode, - aSide2SecondNode, - aSide2ThirdNode, - true, - false, false) ); -} - -//======================================================================= -//function : SewBorderToSide -//purpose : -//======================================================================= - -SMESH::SMESH_MeshEditor::Sew_Error - SMESH_MeshEditor_i::SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder, - CORBA::Long SecondNodeIDOnFreeBorder, - CORBA::Long LastNodeIDOnFreeBorder, - CORBA::Long FirstNodeIDOnSide, - CORBA::Long LastNodeIDOnSide, - CORBA::Boolean CreatePolygons, - CORBA::Boolean CreatePolyedrs) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - const SMDS_MeshNode* aBorderFirstNode = aMesh->FindNode( FirstNodeIDOnFreeBorder ); - const SMDS_MeshNode* aBorderSecondNode = aMesh->FindNode( SecondNodeIDOnFreeBorder ); - const SMDS_MeshNode* aBorderLastNode = aMesh->FindNode( LastNodeIDOnFreeBorder ); - const SMDS_MeshNode* aSide2FirstNode = aMesh->FindNode( FirstNodeIDOnSide ); - const SMDS_MeshNode* aSide2SecondNode = aMesh->FindNode( LastNodeIDOnSide ); - const SMDS_MeshNode* aSide2ThirdNode = 0; - - if (!aBorderFirstNode || - !aBorderSecondNode|| - !aBorderLastNode ) - return SMESH::SMESH_MeshEditor::SEW_BORDER1_NOT_FOUND; - if (!aSide2FirstNode || - !aSide2SecondNode) - return SMESH::SMESH_MeshEditor::SEW_BAD_SIDE_NODES; - - // Update Python script - TCollection_AsciiString str ("error = mesh_editor.SewBorderToSide( "); - str += TCollection_AsciiString( (int) FirstNodeIDOnFreeBorder ) + ", "; - str += TCollection_AsciiString( (int) SecondNodeIDOnFreeBorder ) + ", "; - str += TCollection_AsciiString( (int) LastNodeIDOnFreeBorder ) + ", "; - str += TCollection_AsciiString( (int) FirstNodeIDOnSide ) + ", "; - str += TCollection_AsciiString( (int) LastNodeIDOnSide ) + ", "; - str += TCollection_AsciiString( CreatePolygons ) + ", "; - str += TCollection_AsciiString( CreatePolyedrs ) + ") "; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - ::SMESH_MeshEditor anEditor( _myMesh ); - return convError( anEditor.SewFreeBorder (aBorderFirstNode, - aBorderSecondNode, - aBorderLastNode, - aSide2FirstNode, - aSide2SecondNode, - aSide2ThirdNode, - false, - CreatePolygons, - CreatePolyedrs) ); -} - -//======================================================================= -//function : SewSideElements -//purpose : -//======================================================================= - -SMESH::SMESH_MeshEditor::Sew_Error - SMESH_MeshEditor_i::SewSideElements(const SMESH::long_array& IDsOfSide1Elements, - const SMESH::long_array& IDsOfSide2Elements, - CORBA::Long NodeID1OfSide1ToMerge, - CORBA::Long NodeID1OfSide2ToMerge, - CORBA::Long NodeID2OfSide1ToMerge, - CORBA::Long NodeID2OfSide2ToMerge) -{ - SMESHDS_Mesh* aMesh = GetMeshDS(); - - const SMDS_MeshNode* aFirstNode1ToMerge = aMesh->FindNode( NodeID1OfSide1ToMerge ); - const SMDS_MeshNode* aFirstNode2ToMerge = aMesh->FindNode( NodeID1OfSide2ToMerge ); - const SMDS_MeshNode* aSecondNode1ToMerge = aMesh->FindNode( NodeID2OfSide1ToMerge ); - const SMDS_MeshNode* aSecondNode2ToMerge = aMesh->FindNode( NodeID2OfSide2ToMerge ); - - if (!aFirstNode1ToMerge || - !aFirstNode2ToMerge ) - return SMESH::SMESH_MeshEditor::SEW_BAD_SIDE1_NODES; - if (!aSecondNode1ToMerge|| - !aSecondNode2ToMerge) - return SMESH::SMESH_MeshEditor::SEW_BAD_SIDE2_NODES; - - set aSide1Elems, aSide2Elems; - for (int i = 0; i < IDsOfSide1Elements.length(); i++) - { - CORBA::Long index = IDsOfSide1Elements[i]; - const SMDS_MeshElement * elem = aMesh->FindElement(index); - if ( elem ) - aSide1Elems.insert( elem ); - } - for (int i = 0; i < IDsOfSide2Elements.length(); i++) - { - CORBA::Long index = IDsOfSide2Elements[i]; - const SMDS_MeshElement * elem = aMesh->FindElement(index); - if ( elem ) - aSide2Elems.insert( elem ); - } - // Update Python script - TCollection_AsciiString str ("error = mesh_editor.SewSideElements( "); - SMESH_Gen_i::AddArray( str, IDsOfSide1Elements ) += ", "; - SMESH_Gen_i::AddArray( str, IDsOfSide2Elements ) += ", "; - str += TCollection_AsciiString( (int) NodeID1OfSide1ToMerge ) + ", "; - str += TCollection_AsciiString( (int) NodeID1OfSide2ToMerge ) + ", "; - str += TCollection_AsciiString( (int) NodeID2OfSide1ToMerge ) + ", "; - str += TCollection_AsciiString( (int) NodeID2OfSide2ToMerge ) + ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - ::SMESH_MeshEditor anEditor( _myMesh ); - return convError( anEditor.SewSideElements (aSide1Elems, aSide2Elems, - aFirstNode1ToMerge, - aFirstNode2ToMerge, - aSecondNode1ToMerge, - aSecondNode2ToMerge)); -} diff --git a/src/SMESH_I/SMESH_MeshEditor_i.hxx b/src/SMESH_I/SMESH_MeshEditor_i.hxx deleted file mode 100644 index 327c497a5..000000000 --- a/src/SMESH_I/SMESH_MeshEditor_i.hxx +++ /dev/null @@ -1,229 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_MeshEditor_i.hxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef _SMESH_MESHEDITOR_I_HXX_ -#define _SMESH_MESHEDIOTR_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -#include "SMESH_Mesh.hxx" - -class SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor -{ - public: - SMESH_MeshEditor_i(SMESH_Mesh * theMesh); - - virtual ~ SMESH_MeshEditor_i() - { - }; - - // --- CORBA - CORBA::Boolean RemoveElements(const SMESH::long_array & IDsOfElements); - CORBA::Boolean RemoveNodes(const SMESH::long_array & IDsOfNodes); - - CORBA::Boolean AddNode(CORBA::Double x, CORBA::Double y, CORBA::Double z); - CORBA::Boolean AddEdge(const SMESH::long_array & IDsOfNodes); - CORBA::Boolean AddFace(const SMESH::long_array & IDsOfNodes); - CORBA::Boolean AddVolume(const SMESH::long_array & IDsOfNodes); - - CORBA::Boolean AddPolyhedralVolume(const SMESH::long_array & IDsOfNodes, - const SMESH::long_array & Quantities); - CORBA::Boolean AddPolyhedralVolumeByFaces(const SMESH::long_array & IdsOfFaces); - - CORBA::Boolean MoveNode(CORBA::Long NodeID, - CORBA::Double x, CORBA::Double y, CORBA::Double z); - - CORBA::Boolean InverseDiag(CORBA::Long NodeID1, CORBA::Long NodeID2); - CORBA::Boolean DeleteDiag(CORBA::Long NodeID1, CORBA::Long NodeID2); - CORBA::Boolean Reorient(const SMESH::long_array & IDsOfElements); - CORBA::Boolean ReorientObject(SMESH::SMESH_IDSource_ptr theObject); - - // Split/Join faces - CORBA::Boolean TriToQuad (const SMESH::long_array & IDsOfElements, - SMESH::NumericalFunctor_ptr Criterion, - CORBA::Double MaxAngle); - CORBA::Boolean TriToQuadObject (SMESH::SMESH_IDSource_ptr theObject, - SMESH::NumericalFunctor_ptr Criterion, - CORBA::Double MaxAngle); - CORBA::Boolean QuadToTri (const SMESH::long_array & IDsOfElements, - SMESH::NumericalFunctor_ptr Criterion); - CORBA::Boolean QuadToTriObject (SMESH::SMESH_IDSource_ptr theObject, - SMESH::NumericalFunctor_ptr Criterion); - CORBA::Boolean SplitQuad (const SMESH::long_array & IDsOfElements, - CORBA::Boolean Diag13); - CORBA::Boolean SplitQuadObject (SMESH::SMESH_IDSource_ptr theObject, - CORBA::Boolean Diag13); - CORBA::Long BestSplit (CORBA::Long IDOfQuad, - SMESH::NumericalFunctor_ptr Criterion); - - CORBA::Boolean Smooth(const SMESH::long_array & IDsOfElements, - const SMESH::long_array & IDsOfFixedNodes, - CORBA::Long MaxNbOfIterations, - CORBA::Double MaxAspectRatio, - SMESH::SMESH_MeshEditor::Smooth_Method Method); - CORBA::Boolean SmoothObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::long_array & IDsOfFixedNodes, - CORBA::Long MaxNbOfIterations, - CORBA::Double MaxAspectRatio, - SMESH::SMESH_MeshEditor::Smooth_Method Method); - CORBA::Boolean SmoothParametric(const SMESH::long_array & IDsOfElements, - const SMESH::long_array & IDsOfFixedNodes, - CORBA::Long MaxNbOfIterations, - CORBA::Double MaxAspectRatio, - SMESH::SMESH_MeshEditor::Smooth_Method Method); - CORBA::Boolean SmoothParametricObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::long_array & IDsOfFixedNodes, - CORBA::Long MaxNbOfIterations, - CORBA::Double MaxAspectRatio, - SMESH::SMESH_MeshEditor::Smooth_Method Method); - CORBA::Boolean smooth(const SMESH::long_array & IDsOfElements, - const SMESH::long_array & IDsOfFixedNodes, - CORBA::Long MaxNbOfIterations, - CORBA::Double MaxAspectRatio, - SMESH::SMESH_MeshEditor::Smooth_Method Method, - bool IsParametric); - CORBA::Boolean smoothObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::long_array & IDsOfFixedNodes, - CORBA::Long MaxNbOfIterations, - CORBA::Double MaxAspectRatio, - SMESH::SMESH_MeshEditor::Smooth_Method Method, - bool IsParametric); - - void RenumberNodes(); - void RenumberElements(); - - void RotationSweep(const SMESH::long_array & IDsOfElements, - const SMESH::AxisStruct & Axis, - CORBA::Double AngleInRadians, - CORBA::Long NbOfSteps, - CORBA::Double Tolerance); - void RotationSweepObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::AxisStruct & Axis, - CORBA::Double AngleInRadians, - CORBA::Long NbOfSteps, - CORBA::Double Tolerance); - - void ExtrusionSweep(const SMESH::long_array & IDsOfElements, - const SMESH::DirStruct & StepVector, - CORBA::Long NbOfSteps); - void ExtrusionSweepObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::DirStruct & StepVector, - CORBA::Long NbOfSteps); - void ExtrusionSweepObject1D(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::DirStruct & StepVector, - CORBA::Long NbOfSteps); - void ExtrusionSweepObject2D(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::DirStruct & StepVector, - CORBA::Long NbOfSteps); - - SMESH::SMESH_MeshEditor::Extrusion_Error - 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); - - SMESH::SMESH_MeshEditor::Extrusion_Error - ExtrusionAlongPathObject(SMESH::SMESH_IDSource_ptr theObject, - 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); - - void Mirror(const SMESH::long_array & IDsOfElements, - const SMESH::AxisStruct & Axis, - SMESH::SMESH_MeshEditor::MirrorType MirrorType, - CORBA::Boolean Copy); - void MirrorObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::AxisStruct & Axis, - SMESH::SMESH_MeshEditor::MirrorType MirrorType, - CORBA::Boolean Copy); - void Translate(const SMESH::long_array & IDsOfElements, - const SMESH::DirStruct & Vector, - CORBA::Boolean Copy); - void TranslateObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::DirStruct & Vector, - CORBA::Boolean Copy); - void Rotate(const SMESH::long_array & IDsOfElements, - const SMESH::AxisStruct & Axis, - CORBA::Double Angle, - CORBA::Boolean Copy); - void RotateObject(SMESH::SMESH_IDSource_ptr theObject, - const SMESH::AxisStruct & Axis, - CORBA::Double Angle, - CORBA::Boolean Copy); - - void FindCoincidentNodes (CORBA::Double Tolerance, - SMESH::array_of_long_array_out GroupsOfNodes); - void MergeNodes (const SMESH::array_of_long_array& GroupsOfNodes); - void MergeEqualElements(); - - 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); - SMESH::SMESH_MeshEditor::Sew_Error - 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); - 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); - - private: - SMESHDS_Mesh * GetMeshDS() { return _myMesh->GetMeshDS(); } - SMESH_Mesh *_myMesh; -}; - -#endif diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx deleted file mode 100644 index 22bde5e38..000000000 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ /dev/null @@ -1,1606 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Mesh_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $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 "Utils_CorbaException.hxx" -#include "Utils_ExceptHandlers.hxx" -#include "utilities.h" - -#include "SALOME_NamingService.hxx" -#include "Utils_SINGLETON.hxx" -#include "OpUtil.hxx" - -#include "TCollection_AsciiString.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 -#include -#include - -#include -#include -#include - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - -using namespace std; - -int SMESH_Mesh_i::myIdGenerator = 0; - -//============================================================================= -/*! - * Constructor - */ -//============================================================================= - -SMESH_Mesh_i::SMESH_Mesh_i( PortableServer::POA_ptr thePOA, - SMESH_Gen_i* gen_i, - CORBA::Long studyId ) -: SALOME::GenericObj_i( thePOA ) -{ - INFOS("SMESH_Mesh_i"); - _impl = NULL; - _gen_i = gen_i; - _id = myIdGenerator++; - _studyId = studyId; - thePOA->activate_object( this ); -} - -//============================================================================= -/*! - * Destructor - */ -//============================================================================= - -SMESH_Mesh_i::~SMESH_Mesh_i() -{ - INFOS("~SMESH_Mesh_i"); - map::iterator it; - for ( it = _mapGroups.begin(); it != _mapGroups.end(); it++ ) { - SMESH_GroupBase_i* aGroup = dynamic_cast( SMESH_Gen_i::GetServant( it->second ).in() ); - if ( aGroup ) { - - // this method is colled from destructor of group (PAL6331) - //_impl->RemoveGroup( aGroup->GetLocalID() ); - - aGroup->Destroy(); - } - } - _mapGroups.clear(); -} - -//============================================================================= -/*! - * SetShape - * - * Associates mesh with and puts a reference - * to into the current study; - * the previous shape is substituted by the new one. - */ -//============================================================================= - -void SMESH_Mesh_i::SetShape( GEOM::GEOM_Object_ptr theShapeObject ) - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - try { - _impl->ShapeToMesh( _gen_i->GeomObjectToShape( theShapeObject )); - } - catch(SALOME_Exception & S_ex) { - THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); - } -} - -//======================================================================= -//function : GetShapeToMesh -//purpose : -//======================================================================= - -GEOM::GEOM_Object_ptr SMESH_Mesh_i::GetShapeToMesh() - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - GEOM::GEOM_Object_var aShapeObj; - try { - TopoDS_Shape S = _impl->GetMeshDS()->ShapeToMesh(); - if ( !S.IsNull() ) - aShapeObj = _gen_i->ShapeToGeomObject( S ); - } - catch(SALOME_Exception & S_ex) { - THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); - } - return aShapeObj._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -static SMESH::DriverMED_ReadStatus ConvertDriverMEDReadStatus (int theStatus) -{ - SMESH::DriverMED_ReadStatus res; - switch (theStatus) - { - case DriverMED_R_SMESHDS_Mesh::DRS_OK: - res = SMESH::DRS_OK; break; - case DriverMED_R_SMESHDS_Mesh::DRS_EMPTY: - res = SMESH::DRS_EMPTY; break; - case DriverMED_R_SMESHDS_Mesh::DRS_WARN_RENUMBER: - res = SMESH::DRS_WARN_RENUMBER; break; - case DriverMED_R_SMESHDS_Mesh::DRS_WARN_SKIP_ELEM: - res = SMESH::DRS_WARN_SKIP_ELEM; break; - case DriverMED_R_SMESHDS_Mesh::DRS_FAIL: - default: - res = SMESH::DRS_FAIL; break; - } - return res; -} - -//============================================================================= -/*! - * ImportMEDFile - * - * Imports mesh data from MED file - */ -//============================================================================= - -SMESH::DriverMED_ReadStatus -SMESH_Mesh_i::ImportMEDFile( const char* theFileName, const char* theMeshName ) - throw ( SALOME::SALOME_Exception ) -{ - Unexpect aCatch(SALOME_SalomeException); - int status; - try { - status = importMEDFile( theFileName, theMeshName ); - } - catch( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); - } - catch ( ... ) { - 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()); - } - } - return ConvertDriverMEDReadStatus(status); -} - -//============================================================================= -/*! - * ImportUNVFile - * - * Imports mesh data from MED file - */ -//============================================================================= - -int SMESH_Mesh_i::ImportUNVFile( const char* theFileName ) - throw ( SALOME::SALOME_Exception ) -{ - // Read mesh with name = into SMESH_Mesh - _impl->UNVToMesh( theFileName ); - - return 1; -} - -//============================================================================= -/*! - * ImportSTLFile - * - * Imports mesh data from STL file - */ -//============================================================================= -int SMESH_Mesh_i::ImportSTLFile( const char* theFileName ) - throw ( SALOME::SALOME_Exception ) -{ - // Read mesh with name = into SMESH_Mesh - _impl->STLToMesh( theFileName ); - - return 1; -} - -//============================================================================= -/*! - * importMEDFile - * - * Imports mesh data from MED file - */ -//============================================================================= - -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 ); - - // 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 ); - - // PAL7962: san -- 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 ); - - // register CORBA object for persistence - int nextId = _gen_i->RegisterObject( aGroup ); - if(MYDEBUG) MESSAGE( "Add group to map with id = "<< nextId); - } - - return status; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -static SMESH::Hypothesis_Status ConvertHypothesisStatus - (SMESH_Hypothesis::Hypothesis_Status theStatus) -{ - SMESH::Hypothesis_Status res; - switch (theStatus) - { - case SMESH_Hypothesis::HYP_OK: - res = SMESH::HYP_OK; break; - case SMESH_Hypothesis::HYP_MISSING: - res = SMESH::HYP_MISSING; break; - case SMESH_Hypothesis::HYP_CONCURENT: - res = SMESH::HYP_CONCURENT; break; - case SMESH_Hypothesis::HYP_BAD_PARAMETER: - res = SMESH::HYP_BAD_PARAMETER; break; - case SMESH_Hypothesis::HYP_INCOMPATIBLE: - res = SMESH::HYP_INCOMPATIBLE; break; - case SMESH_Hypothesis::HYP_NOTCONFORM: - res = SMESH::HYP_NOTCONFORM; break; - case SMESH_Hypothesis::HYP_ALREADY_EXIST: - res = SMESH::HYP_ALREADY_EXIST; break; - case SMESH_Hypothesis::HYP_BAD_DIM: - res = SMESH::HYP_BAD_DIM; break; - default: - res = SMESH::HYP_UNKNOWN_FATAL; - } - return res; -} - -//============================================================================= -/*! - * AddHypothesis - * - * calls internal addHypothesis() and then adds a reference to under - * the SObject actually having a reference to . - * NB: For this method to work, it is necessary to add a reference to sub-shape first. - */ -//============================================================================= - -SMESH::Hypothesis_Status SMESH_Mesh_i::AddHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject, - SMESH::SMESH_Hypothesis_ptr anHyp) - throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - SMESH_Hypothesis::Hypothesis_Status status = addHypothesis( aSubShapeObject, anHyp ); - - if ( !SMESH_Hypothesis::IsStatusFatal(status) ) - _gen_i->AddHypothesisToShape(_gen_i->GetCurrentStudy(), _this(), - aSubShapeObject, anHyp ); - - if(MYDEBUG) MESSAGE( " AddHypothesis(): status = " << status ); - - // Update Python script - TCollection_AsciiString aStr ("status = "); - SMESH_Gen_i::AddObject(aStr, _this()) += ".AddHypothesis("; - SMESH_Gen_i::AddObject(aStr, aSubShapeObject) += ", "; - SMESH_Gen_i::AddObject(aStr, anHyp) += ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - return ConvertHypothesisStatus(status); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Hypothesis::Hypothesis_Status - SMESH_Mesh_i::addHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject, - SMESH::SMESH_Hypothesis_ptr anHyp) -{ - if(MYDEBUG) MESSAGE("addHypothesis"); - - if (CORBA::is_nil(aSubShapeObject)) - THROW_SALOME_CORBA_EXCEPTION("bad subShape reference", - SALOME::BAD_PARAM); - - SMESH::SMESH_Hypothesis_var myHyp = SMESH::SMESH_Hypothesis::_narrow(anHyp); - if (CORBA::is_nil(myHyp)) - THROW_SALOME_CORBA_EXCEPTION("bad hypothesis reference", - SALOME::BAD_PARAM); - - SMESH_Hypothesis::Hypothesis_Status status = SMESH_Hypothesis::HYP_OK; - try - { - TopoDS_Shape myLocSubShape = _gen_i->GeomObjectToShape( aSubShapeObject); - int hypId = myHyp->GetId(); - status = _impl->AddHypothesis(myLocSubShape, hypId); - if ( !SMESH_Hypothesis::IsStatusFatal(status) ) { - _mapHypo[hypId] = myHyp; - // assure there is a corresponding submesh - if ( !_impl->IsMainShape( myLocSubShape )) { - int shapeId = _impl->GetMeshDS()->ShapeToIndex( myLocSubShape ); - if ( _mapSubMesh_i.find( shapeId ) == _mapSubMesh_i.end() ) - createSubMesh( aSubShapeObject ); - } - } - } - catch(SALOME_Exception & S_ex) - { - THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); - } - return status; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::Hypothesis_Status SMESH_Mesh_i::RemoveHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject, - SMESH::SMESH_Hypothesis_ptr anHyp) - throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - SMESH_Hypothesis::Hypothesis_Status status = removeHypothesis( aSubShapeObject, anHyp ); - - if ( !SMESH_Hypothesis::IsStatusFatal(status) ) - _gen_i->RemoveHypothesisFromShape(_gen_i->GetCurrentStudy(), _this(), - aSubShapeObject, anHyp ); - - // Update Python script - TCollection_AsciiString aStr ("status = "); - SMESH_Gen_i::AddObject(aStr, _this()) += ".RemoveHypothesis("; - SMESH_Gen_i::AddObject(aStr, aSubShapeObject) += ", "; - SMESH_Gen_i::AddObject(aStr, anHyp) += ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - return ConvertHypothesisStatus(status); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_Hypothesis::Hypothesis_Status SMESH_Mesh_i::removeHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject, - SMESH::SMESH_Hypothesis_ptr anHyp) -{ - if(MYDEBUG) MESSAGE("removeHypothesis()"); - // **** proposer liste de subShape (selection multiple) - - if (CORBA::is_nil(aSubShapeObject)) - THROW_SALOME_CORBA_EXCEPTION("bad subShape reference", - SALOME::BAD_PARAM); - - SMESH::SMESH_Hypothesis_var myHyp = SMESH::SMESH_Hypothesis::_narrow(anHyp); - if (CORBA::is_nil(myHyp)) - THROW_SALOME_CORBA_EXCEPTION("bad hypothesis reference", - SALOME::BAD_PARAM); - - SMESH_Hypothesis::Hypothesis_Status status = SMESH_Hypothesis::HYP_OK; - try - { - TopoDS_Shape myLocSubShape = _gen_i->GeomObjectToShape(aSubShapeObject); - int hypId = myHyp->GetId(); - status = _impl->RemoveHypothesis(myLocSubShape, hypId); - if ( !SMESH_Hypothesis::IsStatusFatal(status) ) - _mapHypo.erase( hypId ); - } - catch(SALOME_Exception & S_ex) - { - THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); - } - return status; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::ListOfHypothesis * - SMESH_Mesh_i::GetHypothesisList(GEOM::GEOM_Object_ptr aSubShapeObject) -throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - if (MYDEBUG) MESSAGE("GetHypothesisList"); - if (CORBA::is_nil(aSubShapeObject)) - THROW_SALOME_CORBA_EXCEPTION("bad subShape reference", - SALOME::BAD_PARAM); - - SMESH::ListOfHypothesis_var aList = new SMESH::ListOfHypothesis(); - - try { - TopoDS_Shape myLocSubShape = _gen_i->GeomObjectToShape(aSubShapeObject); - const list& aLocalList = _impl->GetHypothesisList( myLocSubShape ); - int i = 0, n = aLocalList.size(); - aList->length( n ); - - for ( list::const_iterator anIt = aLocalList.begin(); i < n && anIt != aLocalList.end(); anIt++ ) { - SMESHDS_Hypothesis* aHyp = (SMESHDS_Hypothesis*)(*anIt); - if ( _mapHypo.find( aHyp->GetID() ) != _mapHypo.end() ) - aList[i++] = SMESH::SMESH_Hypothesis::_narrow( _mapHypo[aHyp->GetID()] ); - } - - aList->length( i ); - } - catch(SALOME_Exception & S_ex) { - THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); - } - - return aList._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::GetSubMesh(GEOM::GEOM_Object_ptr aSubShapeObject, - const char* theName ) - throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - MESSAGE("SMESH_Mesh_i::GetSubMesh"); - if (CORBA::is_nil(aSubShapeObject)) - THROW_SALOME_CORBA_EXCEPTION("bad subShape reference", - SALOME::BAD_PARAM); - - SMESH::SMESH_subMesh_var subMesh; - SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow(_this()); - try { - TopoDS_Shape myLocSubShape = _gen_i->GeomObjectToShape(aSubShapeObject); - - //Get or Create the SMESH_subMesh object implementation - - int subMeshId = _impl->GetMeshDS()->ShapeToIndex( myLocSubShape ); - subMesh = getSubMesh( subMeshId ); - - // create a new subMesh object servant if there is none for the shape - if ( subMesh->_is_nil() ) - subMesh = createSubMesh( aSubShapeObject ); - - if ( _gen_i->CanPublishInStudy( subMesh )) { - SALOMEDS::SObject_var aSO = - _gen_i->PublishSubMesh(_gen_i->GetCurrentStudy(), aMesh, - subMesh, aSubShapeObject, theName ); - if ( !aSO->_is_nil()) { - // Update Python script - TCollection_AsciiString aStr (aSO->GetID()); - aStr += " = "; - SMESH_Gen_i::AddObject(aStr, _this()) += ".GetSubMesh("; - SMESH_Gen_i::AddObject(aStr, aSubShapeObject) += ", \""; - aStr += (char*)theName; - aStr += "\")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - } - } - } - catch(SALOME_Exception & S_ex) { - THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); - } - return subMesh._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_Mesh_i::RemoveSubMesh( SMESH::SMESH_subMesh_ptr theSubMesh ) - throw (SALOME::SALOME_Exception) -{ - if(MYDEBUG) MESSAGE("SMESH_Mesh_i::RemoveSubMesh"); - if ( theSubMesh->_is_nil() ) - return; - - GEOM::GEOM_Object_var aSubShapeObject; - SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy(); - if ( !aStudy->_is_nil() ) { - // Remove submesh's SObject - SALOMEDS::SObject_var anSO = _gen_i->ObjectToSObject( aStudy, theSubMesh ); - if ( !anSO->_is_nil() ) { - long aTag = SMESH_Gen_i::GetRefOnShapeTag(); - SALOMEDS::SObject_var anObj, aRef; - if ( anSO->FindSubObject( aTag, anObj ) && anObj->ReferencedObject( aRef ) ) - aSubShapeObject = GEOM::GEOM_Object::_narrow( aRef->GetObject() ); - - aStudy->NewBuilder()->RemoveObjectWithChildren( anSO ); - - // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".RemoveSubMesh("; - aStr += anSO->GetID(); - aStr += ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - } - } - - removeSubMesh( theSubMesh, aSubShapeObject.in() ); -} - -//============================================================================= -/*! - * ElementTypeString - */ -//============================================================================= -inline TCollection_AsciiString ElementTypeString (SMESH::ElementType theElemType) -{ - TCollection_AsciiString aStr; - switch (theElemType) { - case SMESH::ALL: - aStr = "SMESH.ALL"; - break; - case SMESH::NODE: - aStr = "SMESH.NODE"; - break; - case SMESH::EDGE: - aStr = "SMESH.EDGE"; - break; - case SMESH::FACE: - aStr = "SMESH.FACE"; - break; - case SMESH::VOLUME: - aStr = "SMESH.VOLUME"; - break; - default: - break; - } - return aStr; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::SMESH_Group_ptr SMESH_Mesh_i::CreateGroup( SMESH::ElementType theElemType, - const char* theName ) - throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - SMESH::SMESH_Group_var aNewGroup = - SMESH::SMESH_Group::_narrow( createGroup( theElemType, theName )); - - if ( _gen_i->CanPublishInStudy( aNewGroup ) ) { - SALOMEDS::SObject_var aSO = - _gen_i->PublishGroup(_gen_i->GetCurrentStudy(), _this(), - aNewGroup, GEOM::GEOM_Object::_nil(), theName); - if ( !aSO->_is_nil()) { - // Update Python script - TCollection_AsciiString aStr (aSO->GetID()); - aStr += " = "; - SMESH_Gen_i::AddObject(aStr, _this()) += ".CreateGroup("; - aStr += ElementTypeString(theElemType) + ", \"" + (char*)theName + "\")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - } - } - - return aNewGroup._retn(); -} - - -//============================================================================= -/*! - * - */ -//============================================================================= -SMESH::SMESH_GroupOnGeom_ptr SMESH_Mesh_i::CreateGroupFromGEOM (SMESH::ElementType theElemType, - const char* theName, - GEOM::GEOM_Object_ptr theGeomObj) - throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - SMESH::SMESH_GroupOnGeom_var aNewGroup; - - TopoDS_Shape aShape = _gen_i->GeomObjectToShape( theGeomObj ); - if ( !aShape.IsNull() ) { - aNewGroup = SMESH::SMESH_GroupOnGeom::_narrow - ( createGroup( theElemType, theName, aShape )); - if ( _gen_i->CanPublishInStudy( aNewGroup ) ) { - SALOMEDS::SObject_var aSO = - _gen_i->PublishGroup(_gen_i->GetCurrentStudy(), _this(), - aNewGroup, theGeomObj, theName); - if ( !aSO->_is_nil()) { - // Update Python script - TCollection_AsciiString aStr (aSO->GetID()); - aStr += " = "; - SMESH_Gen_i::AddObject(aStr, _this()) += ".CreateGroupFromGEOM("; - aStr += ElementTypeString(theElemType) + ", \"" + (char*)theName + "\", "; - SMESH_Gen_i::AddObject(aStr, theGeomObj) += ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - } - } - } - - return aNewGroup._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_Mesh_i::RemoveGroup( SMESH::SMESH_GroupBase_ptr theGroup ) - throw (SALOME::SALOME_Exception) -{ - if ( theGroup->_is_nil() ) - return; - - SMESH_GroupBase_i* aGroup = - dynamic_cast( SMESH_Gen_i::GetServant( theGroup ).in() ); - if ( !aGroup ) - return; - - SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy(); - if ( !aStudy->_is_nil() ) { - SALOMEDS::SObject_var aGroupSO = _gen_i->ObjectToSObject( aStudy, theGroup ); - - if ( !aGroupSO->_is_nil() ) { - // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".RemoveGroup("; - aStr += aGroupSO->GetID(); - aStr += ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - // Remove group's SObject - aStudy->NewBuilder()->RemoveObject( aGroupSO ); - } - } - - // Remove the group from SMESH data structures - removeGroup( aGroup->GetLocalID() ); -} - -//============================================================================= -/*! RemoveGroupWithContents - * Remove group with its contents - */ -//============================================================================= -void SMESH_Mesh_i::RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup ) - throw (SALOME::SALOME_Exception) -{ - if ( theGroup->_is_nil() ) - return; - - SMESH_GroupBase_i* aGroup = - dynamic_cast( SMESH_Gen_i::GetServant( theGroup ).in() ); - if ( !aGroup ) - return; - - SMESH::long_array_var anIds = aGroup->GetListOfID(); - SMESH::SMESH_MeshEditor_var aMeshEditor = SMESH_Mesh_i::GetMeshEditor(); - - // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".RemoveGroupWithContents("; - SMESH_Gen_i::AddObject(aStr, theGroup) += ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - // Remove contents - if ( aGroup->GetType() == SMESH::NODE ) - aMeshEditor->RemoveNodes( anIds ); - else - aMeshEditor->RemoveElements( anIds ); - - // Remove group - RemoveGroup( theGroup ); - - // Clear python lines, created by RemoveNodes/Elements() and RemoveGroup() - _gen_i->RemoveLastFromPythonScript(_gen_i->GetCurrentStudy()->StudyId()); - _gen_i->RemoveLastFromPythonScript(_gen_i->GetCurrentStudy()->StudyId()); -} - -//============================================================================= -/*! UnionGroups - * New group is created. All mesh elements that are - * present in initial groups are added to the new one - */ -//============================================================================= -SMESH::SMESH_Group_ptr SMESH_Mesh_i::UnionGroups( SMESH::SMESH_GroupBase_ptr theGroup1, - SMESH::SMESH_GroupBase_ptr theGroup2, - const char* theName ) - throw (SALOME::SALOME_Exception) -{ - try - { - if ( theGroup1->_is_nil() || theGroup2->_is_nil() || - theGroup1->GetType() != theGroup2->GetType() ) - return SMESH::SMESH_Group::_nil(); - - // Create Union - SMESH::SMESH_Group_var aResGrp = CreateGroup( theGroup1->GetType(), theName ); - if ( aResGrp->_is_nil() ) - return SMESH::SMESH_Group::_nil(); - - SMESH::long_array_var anIds1 = theGroup1->GetListOfID(); - SMESH::long_array_var anIds2 = theGroup2->GetListOfID(); - - TColStd_MapOfInteger aResMap; - - for ( int i1 = 0, n1 = anIds1->length(); i1 < n1; i1++ ) - aResMap.Add( anIds1[ i1 ] ); - - for ( int i2 = 0, n2 = anIds2->length(); i2 < n2; i2++ ) - aResMap.Add( anIds2[ i2 ] ); - - SMESH::long_array_var aResIds = new SMESH::long_array; - aResIds->length( aResMap.Extent() ); - - int resI = 0; - TColStd_MapIteratorOfMapOfInteger anIter( aResMap ); - for( ; anIter.More(); anIter.Next() ) - aResIds[ resI++ ] = anIter.Key(); - - aResGrp->Add( aResIds ); - - // Clear python lines, created by CreateGroup() and Add() - SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy(); - _gen_i->RemoveLastFromPythonScript(aStudy->StudyId()); - _gen_i->RemoveLastFromPythonScript(aStudy->StudyId()); - - // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, aResGrp) += " = "; - SMESH_Gen_i::AddObject(aStr, _this()) += ".UnionGroups("; - SMESH_Gen_i::AddObject(aStr, theGroup1) += ", "; - SMESH_Gen_i::AddObject(aStr, theGroup2) += ", \""; - aStr += TCollection_AsciiString((char*)theName) + "\")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - return aResGrp._retn(); - } - catch( ... ) - { - return SMESH::SMESH_Group::_nil(); - } -} - -//============================================================================= -/*! IntersectGroups - * New group is created. All mesh elements that are - * present in both initial groups are added to the new one. - */ -//============================================================================= -SMESH::SMESH_Group_ptr SMESH_Mesh_i::IntersectGroups( SMESH::SMESH_GroupBase_ptr theGroup1, - SMESH::SMESH_GroupBase_ptr theGroup2, - const char* theName ) - throw (SALOME::SALOME_Exception) -{ - if ( theGroup1->_is_nil() || theGroup2->_is_nil() || - theGroup1->GetType() != theGroup2->GetType() ) - return SMESH::SMESH_Group::_nil(); - - // Create Intersection - SMESH::SMESH_Group_var aResGrp = CreateGroup( theGroup1->GetType(), theName ); - if ( aResGrp->_is_nil() ) - return aResGrp; - - SMESH::long_array_var anIds1 = theGroup1->GetListOfID(); - SMESH::long_array_var anIds2 = theGroup2->GetListOfID(); - - TColStd_MapOfInteger aMap1; - - for ( int i1 = 0, n1 = anIds1->length(); i1 < n1; i1++ ) - aMap1.Add( anIds1[ i1 ] ); - - TColStd_SequenceOfInteger aSeq; - - for ( int i2 = 0, n2 = anIds2->length(); i2 < n2; i2++ ) - if ( aMap1.Contains( anIds2[ i2 ] ) ) - aSeq.Append( anIds2[ i2 ] ); - - SMESH::long_array_var aResIds = new SMESH::long_array; - aResIds->length( aSeq.Length() ); - - for ( int resI = 0, resN = aSeq.Length(); resI < resN; resI++ ) - aResIds[ resI ] = aSeq( resI + 1 ); - - aResGrp->Add( aResIds ); - - // Clear python lines, created by CreateGroup() and Add() - SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy(); - _gen_i->RemoveLastFromPythonScript(aStudy->StudyId()); - _gen_i->RemoveLastFromPythonScript(aStudy->StudyId()); - - // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, aResGrp) += " = "; - SMESH_Gen_i::AddObject(aStr, _this()) += ".IntersectGroups("; - SMESH_Gen_i::AddObject(aStr, theGroup1) += ", "; - SMESH_Gen_i::AddObject(aStr, theGroup2) += ", \""; - aStr += TCollection_AsciiString((char*)theName) + "\")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - return aResGrp._retn(); -} - -//============================================================================= -/*! CutGroups - * 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 - */ -//============================================================================= -SMESH::SMESH_Group_ptr SMESH_Mesh_i::CutGroups( SMESH::SMESH_GroupBase_ptr theGroup1, - SMESH::SMESH_GroupBase_ptr theGroup2, - const char* theName ) - throw (SALOME::SALOME_Exception) -{ - if ( theGroup1->_is_nil() || theGroup2->_is_nil() || - theGroup1->GetType() != theGroup2->GetType() ) - return SMESH::SMESH_Group::_nil(); - - // Perform Cutting - SMESH::SMESH_Group_var aResGrp = CreateGroup( theGroup1->GetType(), theName ); - if ( aResGrp->_is_nil() ) - return aResGrp; - - SMESH::long_array_var anIds1 = theGroup1->GetListOfID(); - SMESH::long_array_var anIds2 = theGroup2->GetListOfID(); - - TColStd_MapOfInteger aMap2; - - for ( int i2 = 0, n2 = anIds2->length(); i2 < n2; i2++ ) - aMap2.Add( anIds2[ i2 ] ); - - - TColStd_SequenceOfInteger aSeq; - for ( int i1 = 0, n1 = anIds1->length(); i1 < n1; i1++ ) - if ( !aMap2.Contains( anIds1[ i1 ] ) ) - aSeq.Append( anIds1[ i1 ] ); - - SMESH::long_array_var aResIds = new SMESH::long_array; - aResIds->length( aSeq.Length() ); - - for ( int resI = 0, resN = aSeq.Length(); resI < resN; resI++ ) - aResIds[ resI ] = aSeq( resI + 1 ); - - aResGrp->Add( aResIds ); - - // Clear python lines, created by CreateGroup() and Add() - SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy(); - _gen_i->RemoveLastFromPythonScript(aStudy->StudyId()); - _gen_i->RemoveLastFromPythonScript(aStudy->StudyId()); - - // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, aResGrp) += " = "; - SMESH_Gen_i::AddObject(aStr, _this()) += ".CutGroups("; - SMESH_Gen_i::AddObject(aStr, theGroup1) += ", "; - SMESH_Gen_i::AddObject(aStr, theGroup2) += ", \""; - aStr += TCollection_AsciiString((char*)theName) + "\")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - return aResGrp._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::createSubMesh( GEOM::GEOM_Object_ptr theSubShapeObject ) -{ - if(MYDEBUG) MESSAGE( "createSubMesh" ); - TopoDS_Shape myLocSubShape = _gen_i->GeomObjectToShape(theSubShapeObject); - - ::SMESH_subMesh * mySubMesh = _impl->GetSubMesh(myLocSubShape); - int subMeshId = _impl->GetMeshDS()->ShapeToIndex( myLocSubShape ); - SMESH_subMesh_i *subMeshServant = new SMESH_subMesh_i(myPOA, _gen_i, this, subMeshId); - SMESH::SMESH_subMesh_var subMesh - = SMESH::SMESH_subMesh::_narrow(subMeshServant->_this()); - - _mapSubMesh[subMeshId] = mySubMesh; - _mapSubMesh_i[subMeshId] = subMeshServant; - _mapSubMeshIor[subMeshId] = SMESH::SMESH_subMesh::_duplicate(subMesh); - - // register CORBA object for persistence - int nextId = _gen_i->RegisterObject( subMesh ); - if(MYDEBUG) MESSAGE( "Add submesh to map with id = "<< nextId); - - return subMesh._retn(); -} - -//======================================================================= -//function : getSubMesh -//purpose : -//======================================================================= - -SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::getSubMesh(int shapeID) -{ - map::iterator it = _mapSubMeshIor.find( shapeID ); - if ( it == _mapSubMeshIor.end() ) - return SMESH::SMESH_subMesh::_nil(); - - return SMESH::SMESH_subMesh::_duplicate( (*it).second ); -} - - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_Mesh_i::removeSubMesh (SMESH::SMESH_subMesh_ptr theSubMesh, - GEOM::GEOM_Object_ptr theSubShapeObject ) -{ - MESSAGE("SMESH_Mesh_i::removeSubMesh()"); - if ( theSubMesh->_is_nil() || theSubShapeObject->_is_nil() ) - return; - - try { - SMESH::ListOfHypothesis_var aHypList = GetHypothesisList( theSubShapeObject ); - for ( int i = 0, n = aHypList->length(); i < n; i++ ) { - removeHypothesis( theSubShapeObject, aHypList[i] ); - } - } - catch( const SALOME::SALOME_Exception& ) { - INFOS("SMESH_Mesh_i::removeSubMesh(): exception caught!"); - } - - int subMeshId = theSubMesh->GetId(); - - _mapSubMesh.erase(subMeshId); - _mapSubMesh_i.erase(subMeshId); - _mapSubMeshIor.erase(subMeshId); - if(MYDEBUG) MESSAGE("SMESH_Mesh_i::removeSubMesh() completed"); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::SMESH_GroupBase_ptr SMESH_Mesh_i::createGroup (SMESH::ElementType theElemType, - const char* theName, - const TopoDS_Shape& theShape ) -{ - int anId; - SMESH::SMESH_GroupBase_var aGroup; - if ( _impl->AddGroup( (SMDSAbs_ElementType)theElemType, theName, anId, theShape )) { - SMESH_GroupBase_i* aGroupImpl; - if ( !theShape.IsNull() ) - aGroupImpl = new SMESH_GroupOnGeom_i( SMESH_Gen_i::GetPOA(), this, anId ); - else - aGroupImpl = new SMESH_Group_i( SMESH_Gen_i::GetPOA(), this, anId ); - - // PAL7962: san -- 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 - - aGroup = SMESH::SMESH_GroupBase::_narrow( aGroupImpl->_this() ); - _mapGroups[anId] = SMESH::SMESH_GroupBase::_duplicate( aGroup ); - - // register CORBA object for persistence - int nextId = _gen_i->RegisterObject( aGroup ); - if(MYDEBUG) MESSAGE( "Add group to map with id = "<< nextId); - } - return aGroup._retn(); -} - -//============================================================================= -/*! - * SMESH_Mesh_i::removeGroup - * - * Should be called by ~SMESH_Group_i() - */ -//============================================================================= - -void SMESH_Mesh_i::removeGroup( const int theId ) -{ - if(MYDEBUG) MESSAGE("SMESH_Mesh_i::removeGroup()" ); - if ( _mapGroups.find( theId ) != _mapGroups.end() ) { - _mapGroups.erase( theId ); - _impl->RemoveGroup( theId ); - } -} - - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::log_array * SMESH_Mesh_i::GetLog(CORBA::Boolean clearAfterGet) -throw(SALOME::SALOME_Exception) -{ - if(MYDEBUG) MESSAGE("SMESH_Mesh_i::GetLog"); - - SMESH::log_array_var aLog; - try{ - list < SMESHDS_Command * >logDS = _impl->GetLog(); - aLog = new SMESH::log_array; - int indexLog = 0; - int lg = logDS.size(); - SCRUTE(lg); - aLog->length(lg); - list < SMESHDS_Command * >::iterator its = logDS.begin(); - while(its != logDS.end()){ - SMESHDS_Command *com = *its; - int comType = com->GetType(); - //SCRUTE(comType); - int lgcom = com->GetNumber(); - //SCRUTE(lgcom); - const list < int >&intList = com->GetIndexes(); - int inum = intList.size(); - //SCRUTE(inum); - list < int >::const_iterator ii = intList.begin(); - const list < double >&coordList = com->GetCoords(); - int rnum = coordList.size(); - //SCRUTE(rnum); - list < double >::const_iterator ir = coordList.begin(); - aLog[indexLog].commandType = comType; - aLog[indexLog].number = lgcom; - aLog[indexLog].coords.length(rnum); - aLog[indexLog].indexes.length(inum); - for(int i = 0; i < rnum; i++){ - aLog[indexLog].coords[i] = *ir; - //MESSAGE(" "<ClearLog(); - } - catch(SALOME_Exception & S_ex){ - THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); - } - return aLog._retn(); -} - - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_Mesh_i::ClearLog() throw(SALOME::SALOME_Exception) -{ - if(MYDEBUG) MESSAGE("SMESH_Mesh_i::ClearLog"); - // **** -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Long SMESH_Mesh_i::GetId()throw(SALOME::SALOME_Exception) -{ - if(MYDEBUG) MESSAGE("SMESH_Mesh_i::GetId"); - return _id; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Long SMESH_Mesh_i::GetStudyId()throw(SALOME::SALOME_Exception) -{ - return _studyId; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void SMESH_Mesh_i::SetImpl(::SMESH_Mesh * impl) -{ - if(MYDEBUG) MESSAGE("SMESH_Mesh_i::SetImpl"); - _impl = impl; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -::SMESH_Mesh & SMESH_Mesh_i::GetImpl() -{ - if(MYDEBUG) MESSAGE("SMESH_Mesh_i::GetImpl()"); - return *_impl; -} - - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor() -{ - // Update Python script - TCollection_AsciiString aStr ("mesh_editor = "); - SMESH_Gen_i::AddObject(aStr, _this()) += ".GetMeshEditor()"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - // Create MeshEditor - SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( _impl ); - SMESH::SMESH_MeshEditor_var aMesh = aMeshEditor->_this(); - return aMesh._retn(); -} - -//============================================================================= -/*! - * Export in different formats - */ -//============================================================================= - -void SMESH_Mesh_i::ExportToMED (const char* file, - CORBA::Boolean auto_groups, - SMESH::MED_VERSION theVersion) - throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - - // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".ExportToMED(\""; - aStr += TCollection_AsciiString((char*)file) + "\", "; - aStr += TCollection_AsciiString((int)auto_groups) + ", "; - switch (theVersion) { - case SMESH::MED_V2_1: - aStr += "SMESH.MED_V2_1)"; - break; - case SMESH::MED_V2_2: - aStr += "SMESH.MED_V2_2)"; - break; - default: - aStr += TCollection_AsciiString(theVersion) + ")"; - break; - } - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - // Perform Export - char* aMeshName = "Mesh"; - SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy(); - if ( !aStudy->_is_nil() ) { - SALOMEDS::SObject_var aMeshSO = _gen_i->ObjectToSObject( aStudy, _this() ); - if ( !aMeshSO->_is_nil() ) { - aMeshName = aMeshSO->GetName(); - //SCRUTE(file); - //SCRUTE(aMeshName); - //SCRUTE(aMeshSO->GetID()); - - // asv : 27.10.04 : fix of 6903: check for StudyLocked before adding attributes - if ( !aStudy->GetProperties()->IsLocked() ) - { - SALOMEDS::GenericAttribute_var anAttr; - SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder(); - SALOMEDS::AttributeExternalFileDef_var aFileName; - anAttr=aStudyBuilder->FindOrCreateAttribute(aMeshSO, "AttributeExternalFileDef"); - aFileName = SALOMEDS::AttributeExternalFileDef::_narrow(anAttr); - ASSERT(!aFileName->_is_nil()); - aFileName->SetValue(file); - SALOMEDS::AttributeFileType_var aFileType; - anAttr=aStudyBuilder->FindOrCreateAttribute(aMeshSO, "AttributeFileType"); - aFileType = SALOMEDS::AttributeFileType::_narrow(anAttr); - ASSERT(!aFileType->_is_nil()); - aFileType->SetValue("FICHIERMED"); - } - } - } - _impl->ExportMED( file, aMeshName, auto_groups, theVersion ); -} - -void SMESH_Mesh_i::ExportMED (const char* file, - CORBA::Boolean auto_groups) - throw(SALOME::SALOME_Exception) -{ - ExportToMED(file,auto_groups,SMESH::MED_V2_1); -} - -void SMESH_Mesh_i::ExportDAT (const char *file) - throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - - // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".ExportDAT(\""; - aStr += TCollection_AsciiString((char*)file) + "\")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - // Perform Export - _impl->ExportDAT(file); -} - -void SMESH_Mesh_i::ExportUNV (const char *file) - throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - - // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".ExportUNV(\""; - aStr += TCollection_AsciiString((char*)file) + "\")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - // Perform Export - _impl->ExportUNV(file); -} - -void SMESH_Mesh_i::ExportSTL (const char *file, const bool isascii) - throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - - // Update Python script - TCollection_AsciiString aStr; - SMESH_Gen_i::AddObject(aStr, _this()) += ".ExportToMED(\""; - aStr += TCollection_AsciiString((char*)file) + "\", "; - aStr += TCollection_AsciiString((int)isascii) + ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); - - // Perform Export - _impl->ExportSTL(file, isascii); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SALOME_MED::MESH_ptr SMESH_Mesh_i::GetMEDMesh()throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - SMESH_MEDMesh_i *aMedMesh = new SMESH_MEDMesh_i(this); - SALOME_MED::MESH_var aMesh = aMedMesh->_this(); - return aMesh._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -CORBA::Long SMESH_Mesh_i::NbNodes()throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - return _impl->NbNodes(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -CORBA::Long SMESH_Mesh_i::NbElements()throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - return NbEdges() + NbFaces() + NbVolumes(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -CORBA::Long SMESH_Mesh_i::NbEdges()throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - return _impl->NbEdges(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -CORBA::Long SMESH_Mesh_i::NbFaces()throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - return _impl->NbFaces(); -} - -CORBA::Long SMESH_Mesh_i::NbTriangles()throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - return _impl->NbTriangles(); -} - -CORBA::Long SMESH_Mesh_i::NbQuadrangles()throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - return _impl->NbQuadrangles(); -} - -CORBA::Long SMESH_Mesh_i::NbPolygons()throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - return _impl->NbPolygons(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -CORBA::Long SMESH_Mesh_i::NbVolumes()throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - return _impl->NbVolumes(); -} - -CORBA::Long SMESH_Mesh_i::NbTetras()throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - return _impl->NbTetras(); -} - -CORBA::Long SMESH_Mesh_i::NbHexas()throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - return _impl->NbHexas(); -} - -CORBA::Long SMESH_Mesh_i::NbPyramids()throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - return _impl->NbPyramids(); -} - -CORBA::Long SMESH_Mesh_i::NbPrisms()throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - return _impl->NbPrisms(); -} - -CORBA::Long SMESH_Mesh_i::NbPolyhedrons()throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - return _impl->NbPolyhedrons(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -CORBA::Long SMESH_Mesh_i::NbSubMesh()throw(SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - return _impl->NbSubMesh(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -char* SMESH_Mesh_i::Dump() -{ - std::ostringstream os; - _impl->Dump( os ); - return CORBA::string_dup( os.str().c_str() ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -SMESH::long_array* SMESH_Mesh_i::GetIDs() -{ - SMESH::long_array_var aResult = new SMESH::long_array(); - SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS(); - int aMinId = aSMESHDS_Mesh->MinElementID(); - int aMaxId = aSMESHDS_Mesh->MaxElementID(); - - aResult->length(aMaxId - aMinId + 1); - - for (int i = 0, id = aMinId; id <= aMaxId; id++ ) - aResult[i++] = id; - - return aResult._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::long_array* SMESH_Mesh_i::GetElementsId() - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - MESSAGE("SMESH_Mesh_i::GetElementsId"); - SMESH::long_array_var aResult = new SMESH::long_array(); - SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS(); - - if ( aSMESHDS_Mesh == NULL ) - return aResult._retn(); - - long nbElements = NbElements(); - aResult->length( nbElements ); - SMDS_ElemIteratorPtr anIt = aSMESHDS_Mesh->elementsIterator(); - for ( int i = 0, n = nbElements; i < n && anIt->more(); i++ ) - aResult[i] = anIt->next()->GetID(); - - return aResult._retn(); -} - - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::long_array* SMESH_Mesh_i::GetElementsByType( SMESH::ElementType theElemType ) - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - MESSAGE("SMESH_subMesh_i::GetElementsByType"); - SMESH::long_array_var aResult = new SMESH::long_array(); - SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS(); - - if ( aSMESHDS_Mesh == NULL ) - return aResult._retn(); - - long nbElements = NbElements(); - - // No sense in returning ids of elements along with ids of nodes: - // when theElemType == SMESH::ALL, return node ids only if - // there are no elements - if ( theElemType == SMESH::NODE || theElemType == SMESH::ALL && nbElements == 0 ) - return GetNodesId(); - - aResult->length( nbElements ); - - int i = 0; - - SMDS_ElemIteratorPtr anIt = aSMESHDS_Mesh->elementsIterator(); - while ( i < nbElements && anIt->more() ) { - const SMDS_MeshElement* anElem = anIt->next(); - if ( theElemType == SMESH::ALL || anElem->GetType() == (SMDSAbs_ElementType)theElemType ) - aResult[i++] = anElem->GetID(); - } - - aResult->length( i ); - - return aResult._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::long_array* SMESH_Mesh_i::GetNodesId() - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - MESSAGE("SMESH_subMesh_i::GetNodesId"); - SMESH::long_array_var aResult = new SMESH::long_array(); - SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS(); - - if ( aSMESHDS_Mesh == NULL ) - return aResult._retn(); - - long nbNodes = NbNodes(); - aResult->length( nbNodes ); - SMDS_NodeIteratorPtr anIt = aSMESHDS_Mesh->nodesIterator(); - for ( int i = 0, n = nbNodes; i < n && anIt->more(); i++ ) - aResult[i] = anIt->next()->GetID(); - - return aResult._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::ElementType SMESH_Mesh_i::GetElementType( const CORBA::Long id, const bool iselem ) - throw (SALOME::SALOME_Exception) -{ - return ( SMESH::ElementType )_impl->GetElementType( id, iselem ); -} diff --git a/src/SMESH_I/SMESH_Mesh_i.hxx b/src/SMESH_I/SMESH_Mesh_i.hxx deleted file mode 100644 index 42fac7d5d..000000000 --- a/src/SMESH_I/SMESH_Mesh_i.hxx +++ /dev/null @@ -1,268 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Mesh_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_MESH_I_HXX_ -#define _SMESH_MESH_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_Group) -#include CORBA_SERVER_HEADER(SMESH_Hypothesis) -#include CORBA_CLIENT_HEADER(GEOM_Gen) -#include CORBA_CLIENT_HEADER(MED) - -#include "SMESH_Hypothesis.hxx" -#include "SMESH_Mesh.hxx" -#include "SMESH_subMesh_i.hxx" -#include "SMESH_subMesh.hxx" - -#include "SALOME_GenericObj_i.hh" - -class SMESH_Gen_i; -class SMESH_GroupBase_i; - -#include - -class SMESH_Mesh_i: - public virtual POA_SMESH::SMESH_Mesh, - public virtual SALOME::GenericObj_i -{ - SMESH_Mesh_i(); - SMESH_Mesh_i(const SMESH_Mesh_i&); -public: - SMESH_Mesh_i( PortableServer::POA_ptr thePOA, - SMESH_Gen_i* myGen_i, - CORBA::Long studyId ); - - virtual ~SMESH_Mesh_i(); - - // --- CORBA - void SetShape( GEOM::GEOM_Object_ptr theShapeObject ) - throw (SALOME::SALOME_Exception); - - GEOM::GEOM_Object_ptr GetShapeToMesh() - throw (SALOME::SALOME_Exception); - - SMESH::Hypothesis_Status AddHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject, - SMESH::SMESH_Hypothesis_ptr anHyp) - throw (SALOME::SALOME_Exception); - - SMESH::Hypothesis_Status RemoveHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject, - SMESH::SMESH_Hypothesis_ptr anHyp) - throw (SALOME::SALOME_Exception); - - SMESH::ListOfHypothesis* GetHypothesisList(GEOM::GEOM_Object_ptr aSubShapeObject) - throw (SALOME::SALOME_Exception); - - SMESH::SMESH_subMesh_ptr GetSubMesh(GEOM::GEOM_Object_ptr aSubShapeObject, const char* theName) - throw (SALOME::SALOME_Exception); - - void RemoveSubMesh( SMESH::SMESH_subMesh_ptr theSubMesh ) - throw (SALOME::SALOME_Exception); - - SMESH::SMESH_Group_ptr CreateGroup( SMESH::ElementType theElemType, const char* theName ) - throw (SALOME::SALOME_Exception); - - SMESH::SMESH_GroupOnGeom_ptr CreateGroupFromGEOM(SMESH::ElementType theElemType, - const char* theName, - GEOM::GEOM_Object_ptr theGeomObj ) - throw (SALOME::SALOME_Exception); - - void RemoveGroup( SMESH::SMESH_GroupBase_ptr theGroup ) - throw (SALOME::SALOME_Exception); - - void RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup ) - throw (SALOME::SALOME_Exception); - - SMESH::SMESH_Group_ptr UnionGroups( SMESH::SMESH_GroupBase_ptr theGroup1, - SMESH::SMESH_GroupBase_ptr theGroup2, - const char* theName ) - throw (SALOME::SALOME_Exception); - - SMESH::SMESH_Group_ptr IntersectGroups( SMESH::SMESH_GroupBase_ptr theGroup1, - SMESH::SMESH_GroupBase_ptr theGroup2, - const char* theName ) - throw (SALOME::SALOME_Exception); - - SMESH::SMESH_Group_ptr CutGroups( SMESH::SMESH_GroupBase_ptr theGroup1, - SMESH::SMESH_GroupBase_ptr theGroup2, - const char* theName ) - throw (SALOME::SALOME_Exception); - -// SMESH::string_array* GetLog(CORBA::Boolean clearAfterGet) -// throw (SALOME::SALOME_Exception); - - SMESH::log_array* GetLog(CORBA::Boolean clearAfterGet) - throw (SALOME::SALOME_Exception); - - SMESH::SMESH_MeshEditor_ptr GetMeshEditor(); - - void ClearLog() - throw (SALOME::SALOME_Exception); - - CORBA::Long GetId() - throw (SALOME::SALOME_Exception); - - CORBA::Long GetStudyId() - throw (SALOME::SALOME_Exception); - - // --- C++ interface - - void SetImpl(::SMESH_Mesh* impl); - ::SMESH_Mesh& GetImpl(); // :: force no namespace here - - SMESH_Gen_i* GetGen() { return _gen_i; } - - int ImportUNVFile( const char* theFileName ) - throw (SALOME::SALOME_Exception); - - int ImportSTLFile( const char* theFileName ) - throw (SALOME::SALOME_Exception); - - /*! - * consult DriverMED_R_SMESHDS_Mesh::ReadStatus for returned value - */ - SMESH::DriverMED_ReadStatus ImportMEDFile( const char* theFileName, const char* theMeshName ) - throw (SALOME::SALOME_Exception); - - void ExportToMED( const char* file, CORBA::Boolean auto_groups, SMESH::MED_VERSION theVersion ) - throw (SALOME::SALOME_Exception); - void ExportMED( const char* file, CORBA::Boolean auto_groups ) - throw (SALOME::SALOME_Exception); - - void ExportDAT( const char* file ) - throw (SALOME::SALOME_Exception); - void ExportUNV( const char* file ) - throw (SALOME::SALOME_Exception); - void ExportSTL( const char* file, const bool isascii ) - throw (SALOME::SALOME_Exception); - - SALOME_MED::MESH_ptr GetMEDMesh() - throw (SALOME::SALOME_Exception); - - CORBA::Long NbNodes() - throw (SALOME::SALOME_Exception); - - CORBA::Long NbElements() - throw (SALOME::SALOME_Exception); - - CORBA::Long NbEdges() - throw (SALOME::SALOME_Exception); - - CORBA::Long NbFaces() - throw (SALOME::SALOME_Exception); - - CORBA::Long NbTriangles() - throw (SALOME::SALOME_Exception); - - CORBA::Long NbQuadrangles() - throw (SALOME::SALOME_Exception); - - CORBA::Long NbPolygons() - throw (SALOME::SALOME_Exception); - - CORBA::Long NbVolumes() - throw (SALOME::SALOME_Exception); - - CORBA::Long NbTetras() - throw (SALOME::SALOME_Exception); - - CORBA::Long NbHexas() - throw (SALOME::SALOME_Exception); - - CORBA::Long NbPyramids() - throw (SALOME::SALOME_Exception); - - CORBA::Long NbPrisms() - throw (SALOME::SALOME_Exception); - - CORBA::Long NbPolyhedrons() - throw (SALOME::SALOME_Exception); - - CORBA::Long NbSubMesh() - throw (SALOME::SALOME_Exception); - - SMESH::long_array* GetElementsId() - throw (SALOME::SALOME_Exception); - - SMESH::long_array* GetElementsByType( SMESH::ElementType theElemType ) - throw (SALOME::SALOME_Exception); - - SMESH::long_array* GetNodesId() - throw (SALOME::SALOME_Exception); - - SMESH::ElementType GetElementType( const CORBA::Long id, const bool iselem ) - throw (SALOME::SALOME_Exception); - - char* Dump(); - - // Internal methods not available through CORBA - // They are called by corresponding interface methods - SMESH_Hypothesis::Hypothesis_Status addHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject, - SMESH::SMESH_Hypothesis_ptr anHyp); - - SMESH_Hypothesis::Hypothesis_Status removeHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject, - SMESH::SMESH_Hypothesis_ptr anHyp); - - int importMEDFile( const char* theFileName, const char* theMeshName ); - - SMESH::SMESH_subMesh_ptr createSubMesh( GEOM::GEOM_Object_ptr theSubShapeObject ); - - void removeSubMesh(SMESH::SMESH_subMesh_ptr theSubMesh, - GEOM::GEOM_Object_ptr theSubShapeObject ); - - SMESH::SMESH_GroupBase_ptr createGroup(SMESH::ElementType theElemType, - const char* theName, - const TopoDS_Shape& theShape = TopoDS_Shape()); - - void removeGroup( const int theId ); - - SMESH::SMESH_subMesh_ptr getSubMesh(int shapeID); - // return an existing subMesh object for the shapeID. shapeID == submeshID. - - const map& getGroups() { return _mapGroups; } - // return an existing group object. - - virtual SMESH::long_array* GetIDs(); - - map _mapSubMesh_i; //NRI - map _mapSubMesh; //NRI - -private: - static int myIdGenerator; - ::SMESH_Mesh* _impl; // :: force no namespace here - SMESH_Gen_i* _gen_i; - int _id; // id given by creator (unique within the creator instance) - int _studyId; - map _mapSubMeshIor; - map _mapGroups; - map _mapHypo; -}; - -#endif - diff --git a/src/SMESH_I/SMESH_Pattern_i.cxx b/src/SMESH_I/SMESH_Pattern_i.cxx deleted file mode 100644 index e8da5c8d1..000000000 --- a/src/SMESH_I/SMESH_Pattern_i.cxx +++ /dev/null @@ -1,510 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Pattern_i.cxx -// Created : Fri Aug 20 16:15:49 2004 -// Author : Edward AGAPOV (eap) -// $Header: - -#include "SMESH_Pattern_i.hxx" - -#include "GEOM_Client.hxx" -#include "SMESH_Gen_i.hxx" -#include "SMESH_Mesh.hxx" -#include "SMESH_Mesh_i.hxx" -#include "SMDS_MeshFace.hxx" -#include "SMDS_MeshVolume.hxx" - -#include -#include -#include - -#include -#include - -//======================================================================= -//function : dumpErrorCode -//purpose : -//======================================================================= - -static void addErrorCode(const char* thePyCommand) -{ - SMESH_Gen_i::AddToCurrentPyScript("if (isDone != 1):"); - TCollection_AsciiString str ("\tprint \""); - str += (char*) thePyCommand; - str += ":\", pattern.GetErrorCode()"; - SMESH_Gen_i::AddToCurrentPyScript( str ); -} - -//============================================================================= -/*! - * SMESH_Gen_i::GetPattern - * - * Create pattern mapper - */ -//============================================================================= - -SMESH::SMESH_Pattern_ptr SMESH_Gen_i::GetPattern() -{ - // Update Python script - SMESH_Gen_i::AddToCurrentPyScript( "pattern = smesh.GetPattern()" ); - - SMESH_Pattern_i* i = new SMESH_Pattern_i( this ); - SMESH::SMESH_Pattern_var anObj = i->_this(); - return anObj._retn(); -} - -//======================================================================= -//function : SMESH_Pattern_i -//purpose : -//======================================================================= - -SMESH_Pattern_i::SMESH_Pattern_i( SMESH_Gen_i* theGen_i ): - myGen( theGen_i ) -{ -} - -//======================================================================= -//function : getMesh -//purpose : -//======================================================================= - -::SMESH_Mesh* SMESH_Pattern_i::getMesh( SMESH::SMESH_Mesh_ptr & theMesh ) -{ - SMESH_Mesh_i* anImplPtr = - dynamic_cast( SMESH_Gen_i::GetServant( theMesh ).in() ); - if ( anImplPtr ) - return & anImplPtr->GetImpl(); - - return 0; -} - -//======================================================================= -//function : LoadFromFile -//purpose : -//======================================================================= - -CORBA::Boolean SMESH_Pattern_i::LoadFromFile(const char* theFileContents) -{ - // Update Python script - TCollection_AsciiString str( "isDone = pattern.LoadFromFile(" ); - str += TCollection_AsciiString( (char*) theFileContents ) + ")"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - addErrorCode( "LoadFromFile" ); - - return myPattern.Load( theFileContents ); -} - -//======================================================================= -//function : LoadFromFace -//purpose : -//======================================================================= - -CORBA::Boolean SMESH_Pattern_i::LoadFromFace(SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theFace, - CORBA::Boolean theProject) -{ - if ( theMesh->_is_nil() || theFace->_is_nil() ) - return false; - - ::SMESH_Mesh* aMesh = getMesh( theMesh ); - if ( !aMesh ) - return false; - - TopoDS_Face aFace = TopoDS::Face( myGen->GeomObjectToShape( theFace )); - if ( aFace.IsNull() ) - return false; - - // Update Python script - TCollection_AsciiString str( "isDone = pattern.LoadFromFace( " ); - SMESH_Gen_i::AddObject( str, theMesh ) += ", "; - SMESH_Gen_i::AddObject( str, theFace ) += ", "; - str += TCollection_AsciiString( theProject ) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - addErrorCode( "LoadFromFace" ); - - return myPattern.Load( aMesh, aFace, theProject ); -} - -//======================================================================= -//function : LoadFrom3DBlock -//purpose : -//======================================================================= - -CORBA::Boolean SMESH_Pattern_i::LoadFrom3DBlock(SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theBlock) -{ - if ( theMesh->_is_nil() || theBlock->_is_nil() ) - return false; - - ::SMESH_Mesh* aMesh = getMesh( theMesh ); - if ( !aMesh ) - return false; - - TopoDS_Shape aShape = myGen->GeomObjectToShape( theBlock ); - if ( aShape.IsNull()) - return false; - - TopExp_Explorer exp ( aShape, TopAbs_SHELL ); - if ( !exp.More() ) - return false; - - // Update Python script - TCollection_AsciiString str( "isDone = pattern.LoadFrom3DBlock( " ); - SMESH_Gen_i::AddObject( str, theMesh ) += ", "; - SMESH_Gen_i::AddObject( str, theBlock ) += " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - addErrorCode( "LoadFrom3DBlock" ); - - return myPattern.Load( aMesh, TopoDS::Shell( exp.Current() )); -} - -//======================================================================= -//function : ApplyToFace -//purpose : -//======================================================================= - -SMESH::point_array* SMESH_Pattern_i::ApplyToFace(GEOM::GEOM_Object_ptr theFace, - GEOM::GEOM_Object_ptr theVertexOnKeyPoint1, - CORBA::Boolean theReverse) -{ - SMESH::point_array_var points = new SMESH::point_array; - list xyzList; - - TopoDS_Shape F = myGen->GeomObjectToShape( theFace ); - TopoDS_Shape V = myGen->GeomObjectToShape( theVertexOnKeyPoint1 ); - - if (!F.IsNull() && F.ShapeType() == TopAbs_FACE && - !V.IsNull() && V.ShapeType() == TopAbs_VERTEX - && - myPattern.Apply( TopoDS::Face( F ), TopoDS::Vertex( V ), theReverse ) && - myPattern.GetMappedPoints( xyzList )) - { - points->length( xyzList.size() ); - list::iterator xyzIt = xyzList.begin(); - for ( int i = 0; xyzIt != xyzList.end(); xyzIt++ ) { - SMESH::PointStruct & p = points[ i++ ]; - (*xyzIt)->Coord( p.x, p.y, p.z ); - } - } - - // Update Python script - TCollection_AsciiString str( "pattern.ApplyToFace( " ); - SMESH_Gen_i::AddObject( str, theFace ) += ", "; - SMESH_Gen_i::AddObject( str, theVertexOnKeyPoint1 ) += ", "; - str += TCollection_AsciiString( theReverse ) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - return points._retn(); -} - -//======================================================================= -//function : ApplyTo3DBlock -//purpose : -//======================================================================= - -SMESH::point_array* SMESH_Pattern_i::ApplyTo3DBlock(GEOM::GEOM_Object_ptr theBlock, - GEOM::GEOM_Object_ptr theVertex000, - GEOM::GEOM_Object_ptr theVertex001) -{ - SMESH::point_array_var points = new SMESH::point_array; - list xyzList; - - TopExp_Explorer exp( myGen->GeomObjectToShape( theBlock ), TopAbs_SHELL ); - TopoDS_Shape V000 = myGen->GeomObjectToShape( theVertex000 ); - TopoDS_Shape V001 = myGen->GeomObjectToShape( theVertex001 ); - - if (exp.More() && - !V000.IsNull() && V000.ShapeType() == TopAbs_VERTEX && - !V001.IsNull() && V001.ShapeType() == TopAbs_VERTEX - && - myPattern.Apply(TopoDS::Shell( exp.Current() ), - TopoDS::Vertex( V000 ), - TopoDS::Vertex( V001 )) && - myPattern.GetMappedPoints( xyzList )) - { - points->length( xyzList.size() ); - list::iterator xyzIt = xyzList.begin(); - for ( int i = 0; xyzIt != xyzList.end(); xyzIt++ ) { - SMESH::PointStruct & p = points[ i++ ]; - (*xyzIt)->Coord( p.x, p.y, p.z ); - } - } - - // Update Python script - TCollection_AsciiString str( "pattern.ApplyTo3DBlock( " ); - SMESH_Gen_i::AddObject( str, theBlock ) += ", "; - SMESH_Gen_i::AddObject( str, theVertex000 ) += ", "; - SMESH_Gen_i::AddObject( str, theVertex001 ) += " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - return points._retn(); -} - -//======================================================================= -//function : ApplyToMeshFaces -//purpose : -//======================================================================= - -SMESH::point_array* - SMESH_Pattern_i::ApplyToMeshFaces(SMESH::SMESH_Mesh_ptr theMesh, - const SMESH::long_array& theFacesIDs, - CORBA::Long theNodeIndexOnKeyPoint1, - CORBA::Boolean theReverse) -{ - SMESH::point_array_var points = new SMESH::point_array; - - ::SMESH_Mesh* aMesh = getMesh( theMesh ); - if ( !aMesh ) - return points._retn(); - - list xyzList; - set fset; - for (int i = 0; i < theFacesIDs.length(); i++) - { - CORBA::Long index = theFacesIDs[i]; - const SMDS_MeshElement * elem = aMesh->GetMeshDS()->FindElement(index); - if ( elem && elem->GetType() == SMDSAbs_Face ) - fset.insert( static_cast( elem )); - } - if (myPattern.Apply( fset, theNodeIndexOnKeyPoint1, theReverse ) && - myPattern.GetMappedPoints( xyzList )) - { - points->length( xyzList.size() ); - list::iterator xyzIt = xyzList.begin(); - for ( int i = 0; xyzIt != xyzList.end(); xyzIt++ ) { - SMESH::PointStruct & p = points[ i++ ]; - (*xyzIt)->Coord( p.x, p.y, p.z ); - } - } - - // Update Python script - TCollection_AsciiString str( "pattern.ApplyToMeshFaces( " ); - SMESH_Gen_i::AddObject( str, theMesh ) += ", "; - SMESH_Gen_i::AddArray( str, theFacesIDs ) += ", "; - str += TCollection_AsciiString( (int)theNodeIndexOnKeyPoint1 ) + ", "; - str += TCollection_AsciiString( theReverse ) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - return points._retn(); -} - -//======================================================================= -//function : ApplyToHexahedrons -//purpose : -//======================================================================= - -SMESH::point_array* - SMESH_Pattern_i::ApplyToHexahedrons(SMESH::SMESH_Mesh_ptr theMesh, - const SMESH::long_array& theVolumesIDs, - CORBA::Long theNode000Index, - CORBA::Long theNode001Index) -{ - SMESH::point_array_var points = new SMESH::point_array; - - ::SMESH_Mesh* aMesh = getMesh( theMesh ); - if ( !aMesh ) - return points._retn(); - - list xyzList; - set vset; - for (int i = 0; i < theVolumesIDs.length(); i++) - { - CORBA::Long index = theVolumesIDs[i]; - const SMDS_MeshElement * elem = aMesh->GetMeshDS()->FindElement(index); - if ( elem && elem->GetType() == SMDSAbs_Volume && elem->NbNodes() == 8 ) - vset.insert( static_cast( elem )); - } - if (myPattern.Apply( vset, theNode000Index, theNode001Index ) && - myPattern.GetMappedPoints( xyzList )) - { - points->length( xyzList.size() ); - list::iterator xyzIt = xyzList.begin(); - for ( int i = 0; xyzIt != xyzList.end(); xyzIt++ ) { - SMESH::PointStruct & p = points[ i++ ]; - (*xyzIt)->Coord( p.x, p.y, p.z ); - } - } - - // Update Python script - TCollection_AsciiString str( "pattern.ApplyToHexahedrons( " ); - SMESH_Gen_i::AddObject( str, theMesh ) += ", "; - SMESH_Gen_i::AddArray( str, theVolumesIDs ) += ", "; - str += TCollection_AsciiString( (int)theNode000Index ) + ", "; - str += TCollection_AsciiString( (int)theNode001Index ) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - - return points._retn(); -} - -//======================================================================= -//function : MakeMesh -//purpose : -//======================================================================= - -CORBA::Boolean SMESH_Pattern_i::MakeMesh (SMESH::SMESH_Mesh_ptr theMesh, - const CORBA::Boolean CreatePolygons, - const CORBA::Boolean CreatePolyedrs) -{ - ::SMESH_Mesh* aMesh = getMesh( theMesh ); - if ( !aMesh ) - return false; - - // Update Python script - TCollection_AsciiString str( "isDone = pattern.MakeMesh( " ); - SMESH_Gen_i::AddObject( str, theMesh ) += ", "; - str += TCollection_AsciiString( CreatePolygons ) + ", "; - str += TCollection_AsciiString( CreatePolyedrs ) + " )"; - SMESH_Gen_i::AddToCurrentPyScript( str ); - addErrorCode( "MakeMesh" ); - - return myPattern.MakeMesh( aMesh, CreatePolygons, CreatePolyedrs ); -} - -//======================================================================= -//function : GetString -//purpose : -//======================================================================= - -char* SMESH_Pattern_i::GetString() -{ - ostringstream os; - myPattern.Save( os ); - - return CORBA::string_dup( os.str().c_str() ); -} - -//======================================================================= -//function : Is2D -//purpose : -//======================================================================= - -CORBA::Boolean SMESH_Pattern_i::Is2D() -{ - return myPattern.Is2D(); -} - -//======================================================================= -//function : GetPoints -//purpose : -//======================================================================= - -SMESH::point_array* SMESH_Pattern_i::GetPoints() -{ - SMESH::point_array_var points = new SMESH::point_array; - list xyzList; - - if (myPattern.GetPoints( xyzList )) - { - points->length( xyzList.size() ); - list::iterator xyzIt = xyzList.begin(); - for ( int i = 0; xyzIt != xyzList.end(); xyzIt++ ) { - SMESH::PointStruct & p = points[ i++ ]; - (*xyzIt)->Coord( p.x, p.y, p.z ); - } - } - - return points._retn(); -} - -//======================================================================= -//function : GetKeyPoints -//purpose : -//======================================================================= - -SMESH::long_array* SMESH_Pattern_i::GetKeyPoints() -{ - SMESH::long_array_var ids = new SMESH::long_array; - if ( myPattern.IsLoaded() ) { - const list< int > & idList = myPattern.GetKeyPointIDs(); - ids->length( idList.size() ); - list< int >::const_iterator iIt = idList.begin(); - for ( int i = 0; iIt != idList.end(); iIt++, i++ ) - ids[ i ] = *iIt; - } - return ids._retn(); -} - -//======================================================================= -//function : GetElementPoints -//purpose : -//======================================================================= - -SMESH::array_of_long_array* SMESH_Pattern_i::GetElementPoints(CORBA::Boolean applied) -{ - SMESH::array_of_long_array_var arrayOfArray = new SMESH::array_of_long_array; - - const list< list< int > >& listOfIdList = myPattern.GetElementPointIDs(applied); - arrayOfArray->length( listOfIdList.size() ); - list< list< int > >::const_iterator llIt = listOfIdList.begin(); - for ( int i = 0 ; llIt != listOfIdList.end(); llIt++, i++ ) - { - const list< int > & idList = (*llIt); - SMESH::long_array& ids = arrayOfArray[ i ]; - ids.length( idList.size() ); - list< int >::const_iterator iIt = idList.begin(); - for ( int j = 0; iIt != idList.end(); iIt++, j++ ) - ids[ j ] = *iIt; - } - return arrayOfArray._retn(); -} - -//======================================================================= -//function : GetErrorCode -//purpose : -//======================================================================= - -#define RETCASE(enm) case ::SMESH_Pattern::enm: return SMESH::SMESH_Pattern::enm; - -SMESH::SMESH_Pattern::ErrorCode SMESH_Pattern_i::GetErrorCode() -{ - switch ( myPattern.GetErrorCode() ) { - RETCASE( ERR_OK ); - RETCASE( ERR_READ_NB_POINTS ); - RETCASE( ERR_READ_POINT_COORDS ); - RETCASE( ERR_READ_TOO_FEW_POINTS ); - RETCASE( ERR_READ_3D_COORD ); - RETCASE( ERR_READ_NO_KEYPOINT ); - RETCASE( ERR_READ_BAD_INDEX ); - RETCASE( ERR_READ_ELEM_POINTS ); - RETCASE( ERR_READ_NO_ELEMS ); - RETCASE( ERR_READ_BAD_KEY_POINT ); - RETCASE( ERR_SAVE_NOT_LOADED ); - RETCASE( ERR_LOAD_EMPTY_SUBMESH ); - RETCASE( ERR_LOADF_NARROW_FACE ); - RETCASE( ERR_LOADF_CLOSED_FACE ); - RETCASE( ERR_LOADV_BAD_SHAPE ); - RETCASE( ERR_LOADV_COMPUTE_PARAMS ); - RETCASE( ERR_APPL_NOT_LOADED ); - RETCASE( ERR_APPL_BAD_DIMENTION ); - RETCASE( ERR_APPL_BAD_NB_VERTICES ); - RETCASE( ERR_APPLF_BAD_TOPOLOGY ); - RETCASE( ERR_APPLF_BAD_VERTEX ); - RETCASE( ERR_APPLF_INTERNAL_EEROR ); - RETCASE( ERR_APPLV_BAD_SHAPE ); - RETCASE( ERR_MAKEM_NOT_COMPUTED ); - default:; - }; - return SMESH::SMESH_Pattern::ERR_OK; -} - diff --git a/src/SMESH_I/SMESH_Pattern_i.hxx b/src/SMESH_I/SMESH_Pattern_i.hxx deleted file mode 100644 index 29b5084cd..000000000 --- a/src/SMESH_I/SMESH_Pattern_i.hxx +++ /dev/null @@ -1,103 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_Pattern_i.hxx -// Created : Fri Aug 20 16:03:15 2004 -// Author : Edward AGAPOV (eap) - -// $Header: - -#ifndef SMESH_Pattern_I_HeaderFile -#define SMESH_Pattern_I_HeaderFile - -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_Pattern) -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_CLIENT_HEADER(GEOM_Gen) - -#include -#include "SMESH_Pattern.hxx" - -class SMESH_Gen_i; -class SMESH_Mesh; - -class SMESH_Pattern_i: - public virtual POA_SMESH::SMESH_Pattern -{ - public: - - SMESH_Pattern_i (SMESH_Gen_i* theGen_i); - - CORBA::Boolean LoadFromFile(const char* theFileContents); - - CORBA::Boolean LoadFromFace(SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theFace, - CORBA::Boolean theProject); - - CORBA::Boolean LoadFrom3DBlock(SMESH::SMESH_Mesh_ptr theMesh, - GEOM::GEOM_Object_ptr theBlock); - - SMESH::point_array* ApplyToFace(GEOM::GEOM_Object_ptr theFace, - GEOM::GEOM_Object_ptr theVertexOnKeyPoint1, - CORBA::Boolean theReverse); - - SMESH::point_array* ApplyTo3DBlock(GEOM::GEOM_Object_ptr theBlock, - GEOM::GEOM_Object_ptr theVertex000, - GEOM::GEOM_Object_ptr theVertex001); - - SMESH::point_array* ApplyToMeshFaces(SMESH::SMESH_Mesh_ptr theMesh, - const SMESH::long_array& theFacesIDs, - CORBA::Long theNodeIndexOnKeyPoint1, - CORBA::Boolean theReverse); - - SMESH::point_array* ApplyToHexahedrons(SMESH::SMESH_Mesh_ptr theMesh, - const SMESH::long_array& theVolumesIDs, - CORBA::Long theNode000Index, - CORBA::Long theNode001Index); - - CORBA::Boolean MakeMesh (SMESH::SMESH_Mesh_ptr theMesh, - const CORBA::Boolean CreatePolygons, - const CORBA::Boolean CreatePolyedrs); - - SMESH::SMESH_Pattern::ErrorCode GetErrorCode(); - - char* GetString(); - - CORBA::Boolean Is2D(); - - SMESH::point_array* GetPoints(); - - SMESH::long_array* GetKeyPoints(); - - SMESH::array_of_long_array* GetElementPoints(CORBA::Boolean applied); - - - private: - - ::SMESH_Mesh* getMesh( SMESH::SMESH_Mesh_ptr & theMesh ); - - ::SMESH_Pattern myPattern; - - SMESH_Gen_i* myGen; -}; -#endif diff --git a/src/SMESH_I/SMESH_PythonDump.hxx b/src/SMESH_I/SMESH_PythonDump.hxx deleted file mode 100644 index 86133cf8a..000000000 --- a/src/SMESH_I/SMESH_PythonDump.hxx +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org - -#ifndef _SMESH_PYTHONDUMP_HXX_ -#define _SMESH_PYTHONDUMP_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -#include - -namespace SMESH -{ - class FilterLibrary_i; - class FilterManager_i; - class Filter_i; - class Functor_i; - - class TPythonDump - { - std::ostringstream myStream; - static size_t myCounter; - public: - TPythonDump(); - virtual ~TPythonDump(); - - TPythonDump& - operator<<(long int theArg); - - TPythonDump& - operator<<(int theArg); - - TPythonDump& - operator<<(double theArg); - - TPythonDump& - operator<<(float theArg); - - TPythonDump& - operator<<(const void* theArg); - - TPythonDump& - operator<<(const char* theArg); - - TPythonDump& - operator<<(const SMESH::ElementType& theArg); - - TPythonDump& - operator<<(const SMESH::long_array& theArg); - - TPythonDump& - operator<<(CORBA::Object_ptr theArg); - - TPythonDump& - operator<<(SMESH::FilterLibrary_i* theArg); - - TPythonDump& - operator<<(SMESH::FilterManager_i* theArg); - - TPythonDump& - operator<<(SMESH::Filter_i* theArg); - - TPythonDump& - operator<<(SMESH::Functor_i* theArg); - }; -} - - -#endif diff --git a/src/SMESH_I/SMESH_subMesh_i.cxx b/src/SMESH_I/SMESH_subMesh_i.cxx deleted file mode 100644 index f8ade30f5..000000000 --- a/src/SMESH_I/SMESH_subMesh_i.cxx +++ /dev/null @@ -1,487 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_subMesh_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "SMESH_subMesh_i.hxx" -#include "SMESH_Gen_i.hxx" -#include "SMESH_Mesh_i.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" -#include "OpUtil.hxx" -#include "Utils_ExceptHandlers.hxx" - -#include -#include -#include - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_subMesh_i::SMESH_subMesh_i() - : SALOME::GenericObj_i( PortableServer::POA::_nil() ) -{ - MESSAGE("SMESH_subMesh_i::SMESH_subMesh_i default, not for use"); - ASSERT(0); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_subMesh_i::SMESH_subMesh_i( PortableServer::POA_ptr thePOA, - SMESH_Gen_i* gen_i, - SMESH_Mesh_i* mesh_i, - int localId ) - : SALOME::GenericObj_i( thePOA ) -{ - MESSAGE("SMESH_subMesh_i::SMESH_subMesh_i"); - _gen_i = gen_i; - _mesh_i = mesh_i; - _localId = localId; - thePOA->activate_object( this ); - // **** -} -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH_subMesh_i::~SMESH_subMesh_i() -{ - MESSAGE("SMESH_subMesh_i::~SMESH_subMesh_i"); - // **** -} - -//======================================================================= -//function : getSubMeshes -//purpose : for a submesh on shape to which elements are not bound directly, -// return submeshes containing elements -//======================================================================= - -typedef list TListOfSubMeshes; - -bool getSubMeshes(::SMESH_subMesh* theSubMesh, - TListOfSubMeshes& theSubMeshList) -{ - int size = theSubMeshList.size(); - - SMESH_Mesh* aMesh = theSubMesh->GetFather(); - SMESHDS_Mesh* aMeshDS = aMesh->GetMeshDS(); - SMESHDS_SubMesh* aSubMeshDS = theSubMesh->GetSubMeshDS(); - - // nodes can be bound to either vertex, edge, face or solid_or_shell - TopoDS_Shape aShape = theSubMesh->GetSubShape(); - switch ( aShape.ShapeType() ) - { - case TopAbs_SOLID: { - // add submesh of solid itself - aSubMeshDS = aMeshDS->MeshElements( aShape ); - if ( aSubMeshDS ) - theSubMeshList.push_back( aSubMeshDS ); - // and of the first shell - TopExp_Explorer exp( aShape, TopAbs_SHELL ); - if ( exp.More() ) { - aSubMeshDS = aMeshDS->MeshElements( exp.Current() ); - if ( aSubMeshDS ) - theSubMeshList.push_back( aSubMeshDS ); - } - break; - } - case TopAbs_WIRE: - case TopAbs_COMPOUND: - case TopAbs_COMPSOLID: { - // call getSubMeshes() for sub-shapes - list shapeList; - shapeList.push_back( aShape ); - list::iterator sh = shapeList.begin(); - for ( ; sh != shapeList.end(); ++sh ) { - for ( TopoDS_Iterator it( *sh ); it.More(); it.Next() ) { - ::SMESH_subMesh* aSubMesh = aMesh->GetSubMeshContaining( it.Value() ); - if ( aSubMesh ) - getSubMeshes( aSubMesh, theSubMeshList ); - else - // no submesh for a compound inside compound - shapeList.push_back( it.Value() ); - } - } - // return only unique submeshes - set smSet; - TListOfSubMeshes::iterator sm = theSubMeshList.begin(); - while ( sm != theSubMeshList.end() ) { - if ( !smSet.insert( *sm ).second ) - sm = theSubMeshList.erase( sm ); - else - ++sm; - } - break; - } - } - return size < theSubMeshList.size(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Long SMESH_subMesh_i::GetNumberOfElements() - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - MESSAGE("SMESH_subMesh_i::GetNumberOfElements"); - if ( _mesh_i->_mapSubMesh.find( _localId ) == _mesh_i->_mapSubMesh.end() ) - return 0; - - ::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId]; - SMESHDS_SubMesh* aSubMeshDS = aSubMesh->GetSubMeshDS(); - - int nbElems = aSubMeshDS ? aSubMeshDS->NbElements() : 0; - - // volumes are bound to shell - TListOfSubMeshes smList; - if ( nbElems == 0 && getSubMeshes( aSubMesh, smList )) - { - TListOfSubMeshes::iterator sm = smList.begin(); - for ( ; sm != smList.end(); ++sm ) - nbElems += (*sm)->NbElements(); - } - return nbElems; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Long SMESH_subMesh_i::GetNumberOfNodes(CORBA::Boolean all) - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - MESSAGE("SMESH_subMesh_i::GetNumberOfNodes"); - if ( _mesh_i->_mapSubMesh.find( _localId ) == _mesh_i->_mapSubMesh.end() ) - return 0; - - ::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId]; - SMESHDS_SubMesh* aSubMeshDS = aSubMesh->GetSubMeshDS(); - - set nodeIds; - - // nodes are bound to shell instead of solid - TListOfSubMeshes smList; - if ( all && getSubMeshes( aSubMesh, smList )) - { - TListOfSubMeshes::iterator sm = smList.begin(); - for ( ; sm != smList.end(); ++sm ) - { - SMDS_ElemIteratorPtr eIt = (*sm)->GetElements(); - while ( eIt->more() ) { - const SMDS_MeshElement* anElem = eIt->next(); - SMDS_ElemIteratorPtr nIt = anElem->nodesIterator(); - while ( nIt->more() ) - nodeIds.insert( nIt->next()->GetID() ); - } - } - return nodeIds.size(); - } - - if ( aSubMeshDS == NULL ) - return 0; - - if ( all ) { // all nodes of submesh elements - SMDS_ElemIteratorPtr eIt = aSubMeshDS->GetElements(); - while ( eIt->more() ) { - const SMDS_MeshElement* anElem = eIt->next(); - SMDS_ElemIteratorPtr nIt = anElem->nodesIterator(); - while ( nIt->more() ) - nodeIds.insert( nIt->next()->GetID() ); - } - return nodeIds.size(); - } - - return aSubMeshDS->NbNodes(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::long_array* SMESH_subMesh_i::GetElementsId() - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - MESSAGE("SMESH_subMesh_i::GetElementsId"); - SMESH::long_array_var aResult = new SMESH::long_array(); - - if ( _mesh_i->_mapSubMesh.find( _localId ) == _mesh_i->_mapSubMesh.end() ) - return aResult._retn(); - - ::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId]; - SMESHDS_SubMesh* aSubMeshDS = aSubMesh->GetSubMeshDS(); - - int nbElems = aSubMeshDS ? aSubMeshDS->NbElements() : 0; - TListOfSubMeshes smList; - if ( nbElems ) - smList.push_back( aSubMeshDS ); - - // volumes are bound to shell - if ( nbElems == 0 && getSubMeshes( aSubMesh, smList )) - { - TListOfSubMeshes::iterator sm = smList.begin(); - for ( ; sm != smList.end(); ++sm ) - nbElems += (*sm)->NbElements(); - } - - aResult->length( nbElems ); - if ( nbElems ) - { - TListOfSubMeshes::iterator sm = smList.begin(); - for ( int i = 0; sm != smList.end(); sm++ ) - { - SMDS_ElemIteratorPtr anIt = (*sm)->GetElements(); - for ( int n = aSubMeshDS->NbElements(); i < n && anIt->more(); i++ ) - aResult[i] = anIt->next()->GetID(); - } - } - return aResult._retn(); -} - - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::long_array* SMESH_subMesh_i::GetElementsByType( SMESH::ElementType theElemType ) - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - MESSAGE("SMESH_subMesh_i::GetElementsByType"); - SMESH::long_array_var aResult = new SMESH::long_array(); - - if ( _mesh_i->_mapSubMesh.find( _localId ) == _mesh_i->_mapSubMesh.end() ) - return aResult._retn(); - - ::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId]; - SMESHDS_SubMesh* aSubMeshDS = aSubMesh->GetSubMeshDS(); - - // PAL5440, return all nodes belonging to elements of submesh - set nodeIds; - int nbElems = aSubMeshDS ? aSubMeshDS->NbElements() : 0; - - // volumes may be bound to shell instead of solid - TListOfSubMeshes smList; - if ( nbElems == 0 && getSubMeshes( aSubMesh, smList )) - { - TListOfSubMeshes::iterator sm = smList.begin(); - for ( ; sm != smList.end(); ++sm ) - { - if ( theElemType == SMESH::NODE ) - { - SMDS_ElemIteratorPtr eIt = (*sm)->GetElements(); - while ( eIt->more() ) { - const SMDS_MeshElement* anElem = eIt->next(); - SMDS_ElemIteratorPtr nIt = anElem->nodesIterator(); - while ( nIt->more() ) - nodeIds.insert( nIt->next()->GetID() ); - } - } - else - { - nbElems += (*sm)->NbElements(); - } - } - aSubMeshDS = 0; - } - else - { - if ( nbElems ) - smList.push_back( aSubMeshDS ); - } - - if ( theElemType == SMESH::NODE && aSubMeshDS ) - { - SMDS_ElemIteratorPtr eIt = aSubMeshDS->GetElements(); - while ( eIt->more() ) { - const SMDS_MeshElement* anElem = eIt->next(); - SMDS_ElemIteratorPtr nIt = anElem->nodesIterator(); - while ( nIt->more() ) - nodeIds.insert( nIt->next()->GetID() ); - } - } - - if ( theElemType == SMESH::NODE ) - aResult->length( nodeIds.size() ); - else - aResult->length( nbElems ); - - int i = 0, n = aResult->length(); - - if ( theElemType == SMESH::NODE && !nodeIds.empty() ) { - set::iterator idIt = nodeIds.begin(); - for ( ; i < n && idIt != nodeIds.end() ; i++, idIt++ ) - aResult[i] = *idIt; - } - - if ( theElemType != SMESH::NODE ) { - TListOfSubMeshes::iterator sm = smList.begin(); - for ( i = 0; sm != smList.end(); sm++ ) - { - aSubMeshDS = *sm; - SMDS_ElemIteratorPtr anIt = aSubMeshDS->GetElements(); - while ( i < n && anIt->more() ) { - const SMDS_MeshElement* anElem = anIt->next(); - if ( theElemType == SMESH::ALL || anElem->GetType() == (SMDSAbs_ElementType)theElemType ) - aResult[i++] = anElem->GetID(); - } - } - } - - aResult->length( i ); - - return aResult._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::long_array* SMESH_subMesh_i::GetNodesId() - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - MESSAGE("SMESH_subMesh_i::GetNodesId"); - SMESH::long_array_var aResult = GetElementsByType( SMESH::NODE ); - return aResult._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -SMESH::SMESH_Mesh_ptr SMESH_subMesh_i::GetFather() - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - MESSAGE("SMESH_subMesh_i::GetFather"); - return _mesh_i->_this(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -CORBA::Long SMESH_subMesh_i::GetId() -{ - MESSAGE("SMESH_subMesh_i::GetId"); - return _localId; -} - -//======================================================================= -//function : GetSubShape -//purpose : -//======================================================================= - -GEOM::GEOM_Object_ptr SMESH_subMesh_i::GetSubShape() - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - GEOM::GEOM_Object_var aShapeObj; - try { - if ( _mesh_i->_mapSubMesh.find( _localId ) != _mesh_i->_mapSubMesh.end()) { - TopoDS_Shape S = _mesh_i->_mapSubMesh[ _localId ]->GetSubShape(); - if ( !S.IsNull() ) - aShapeObj = _gen_i->ShapeToGeomObject( S ); - } - } - catch(SALOME_Exception & S_ex) { - THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM); - } - return aShapeObj._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -SALOME_MED::FAMILY_ptr SMESH_subMesh_i::GetFamily() - throw (SALOME::SALOME_Exception) -{ - Unexpect aCatch(SALOME_SalomeException); - SALOME_MED::MESH_var MEDMesh = GetFather()->GetMEDMesh(); - - SALOME_MED::Family_array_var families = - MEDMesh->getFamilies(SALOME_MED::MED_NODE); - - for ( int i = 0; i < families->length(); i++ ) { - if ( families[i]->getIdentifier() == ( _localId ) ) - return families[i]; - } - - return SALOME_MED::FAMILY::_nil(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -SMESH::long_array* SMESH_subMesh_i::GetIDs() -{ - SMESH::long_array_var aResult = GetElementsId(); - return aResult._retn(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -SMESH::ElementType SMESH_subMesh_i::GetElementType( const CORBA::Long id, const bool iselem ) - throw (SALOME::SALOME_Exception) -{ - return GetFather()->GetElementType( id, iselem ); -} diff --git a/src/SMESH_I/SMESH_subMesh_i.hxx b/src/SMESH_I/SMESH_subMesh_i.hxx deleted file mode 100644 index e8d84b37e..000000000 --- a/src/SMESH_I/SMESH_subMesh_i.hxx +++ /dev/null @@ -1,93 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESH_subMesh_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_SUBMESH_I_HXX_ -#define _SMESH_SUBMESH_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_Hypothesis) -#include CORBA_CLIENT_HEADER(GEOM_Gen) -#include CORBA_CLIENT_HEADER(MED) - -#include "SALOME_GenericObj_i.hh" - -class SMESH_Gen_i; -class SMESH_Mesh_i; - -class SMESH_subMesh_i: - public virtual POA_SMESH::SMESH_subMesh, - public virtual SALOME::GenericObj_i -{ -public: - SMESH_subMesh_i(); - SMESH_subMesh_i( PortableServer::POA_ptr thePOA, - SMESH_Gen_i* gen_i, - SMESH_Mesh_i* mesh_i, - int localId ); - ~SMESH_subMesh_i(); - - CORBA::Long GetNumberOfElements() - throw (SALOME::SALOME_Exception); - - CORBA::Long GetNumberOfNodes( CORBA::Boolean all ) - throw (SALOME::SALOME_Exception); - - SMESH::long_array* GetElementsId() - throw (SALOME::SALOME_Exception); - - SMESH::long_array* GetElementsByType( SMESH::ElementType theElemType ) - throw (SALOME::SALOME_Exception); - - SMESH::ElementType GetElementType( const CORBA::Long id, const bool iselem ) - throw (SALOME::SALOME_Exception); - - SMESH::long_array* GetNodesId() - throw (SALOME::SALOME_Exception); - - SMESH::SMESH_Mesh_ptr GetFather() - throw (SALOME::SALOME_Exception); - - GEOM::GEOM_Object_ptr GetSubShape() - throw (SALOME::SALOME_Exception); - - CORBA::Long GetId(); - - SALOME_MED::FAMILY_ptr GetFamily() - throw (SALOME::SALOME_Exception); - - virtual SMESH::long_array* GetIDs(); - - SMESH_Mesh_i* _mesh_i; //NRI - -protected: - SMESH_Gen_i* _gen_i; - int _localId; -}; - -#endif diff --git a/src/SMESH_I/smeshpy.py b/src/SMESH_I/smeshpy.py deleted file mode 100644 index 9fb4709e7..000000000 --- a/src/SMESH_I/smeshpy.py +++ /dev/null @@ -1,96 +0,0 @@ -# SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -# -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : smeshpy.py -# Module : SMESH - -import salome -import SMESH - -from SALOME_utilities import * - -#============================================================================= - -class smeshpy: - _geom = None - _smesh = None - _studyId = None - - #-------------------------------------------------------------------------- - - def __init__(self): - try: - self._geom = salome.lcc.FindOrLoadComponent("FactoryServer","GEOM") - self._smesh = salome.lcc.FindOrLoadComponent("FactoryServer","SMESH") - except: - MESSAGE( "exception in smeshpy:__init__" ) - self._study = salome.myStudy - self._smesh.SetCurrentStudy(self._study) - - #-------------------------------------------------------------------------- - - def CreateMesh(self, shapeId): - try: - shape = salome.IDToObject(shapeId) - aMesh = self._smesh.CreateMesh(shape) - return aMesh - except: - MESSAGE( "exception in smeshpy:Init" ) - return None - - #-------------------------------------------------------------------------- - - def CreateHypothesis(self, name, libname): - try: - hyp = self._smesh.CreateHypothesis(name, libname) - return hyp - except: - MESSAGE( "exception in smeshpy:CreateHypothesis" ) - return None - - #-------------------------------------------------------------------------- - - def Compute(self, mesh, shapeId): - try: - shape = salome.IDToObject(shapeId) - ret=self._smesh.Compute(mesh, shape) - return ret - except: - MESSAGE( "exception in smeshpy:Compute" ) - return 0 - -#============================================================================= -## #-------------------------------------------------------------------------- - -##def SmeshInit(shapeId): -## import salome -## import SMESH -## geom = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM") -## smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") -## shape = salome.IDToObject(shapeId) -## studyId = salome.myStudyId -## MESSAGE( str(studyId) ) -## aMesh = smesh.Init(geom, studyId, shape) -## return aMesh - -## #-------------------------------------------------------------------------- diff --git a/src/SMESH_SWIG/Makefile.in b/src/SMESH_SWIG/Makefile.in deleted file mode 100644 index df7e19a17..000000000 --- a/src/SMESH_SWIG/Makefile.in +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : Makefile.in -# Author : Nicolas REJNERI, Paul RASCLE -# Module : SMESH -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl - - -@COMMENCE@ - -# Libraries targets - -LIB = libSMESH_Swigcmodule.la -LIB_SRC = - -SWIG_DEF = libSMESH_Swig.i -EXPORT_PYSCRIPTS = libSMESH_Swig.py \ - smesh.py \ - batchmode_smesh.py \ - batchmode_mefisto.py \ - ex00_all.py \ - ex01_cube2build.py \ - ex02_cube2primitive.py \ - ex03_cube2partition.py \ - ex04_cube5tetraHexa.py \ - ex05_hole1build.py \ - ex06_hole1boolean.py \ - ex07_hole1partition.py \ - ex08_hole2build.py \ - ex09_grid4build.py \ - ex10_grid4geometry.py \ - ex11_grid3partition.py \ - ex12_grid17partition.py \ - ex13_hole1partial.py \ - ex14_cyl1holed.py \ - ex15_cyl2geometry.py \ - ex16_cyl2complementary.py \ - ex17_dome1.py \ - ex18_dome2.py \ - ex19_sphereINcube.py \ - SMESH_test.py\ - SMESH_test0.py\ - SMESH_test1.py \ - SMESH_test2.py \ - SMESH_test3.py \ - SMESH_test4.py \ - SMESH_test5.py \ - SMESH_mechanic.py \ - SMESH_mechanic_tetra.py \ - SMESH_mechanic_editor.py \ - SMESH_fixation.py \ - SMESH_fixation_hexa.py \ - SMESH_fixation_tetra.py \ - SMESH_box_tetra.py \ - SMESH_box2_tetra.py \ - SMESH_box3_tetra.py \ - SMESH_flight_skin.py \ - SMESH_Partition1_tetra.py\ - SMESH_controls.py \ - SMESH_freebord.py \ - SMESH_blocks.py \ - SMESH_BelongToGeom.py \ - SMESH_GroupFromGeom2.py \ - SMESH_box.py \ - SMESH_demo_hexa2_upd.py \ - SMESH_hexaedre.py \ - SMESH_Sphere.py \ - SMESH_GroupFromGeom.py \ - SMESH_Nut.py \ - SMESH_GroupLyingOnGeom.py \ - PAL_MESH_041_mesh.py \ - PAL_MESH_043_2D.py \ - PAL_MESH_043_3D.py \ - SMESH_reg.py - -LIB_CLIENT_IDL = SALOMEDS.idl \ - SALOME_Exception.idl \ - GEOM_Gen.idl \ - SMESH_Gen.idl \ - SMESH_Mesh.idl \ - SMESH_Hypothesis.idl \ - SMESH_BasicHypothesis.idl \ - SMESH_Group.idl \ - SALOME_ModuleCatalog.idl \ - SALOME_Component.idl \ - SALOME_GenericObj.idl \ - MED.idl \ - SALOME_Comm.idl - -EXPORT_SHAREDPYSCRIPTS=SMESH_shared_modules.py - -CPPFLAGS+=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(OCC_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome -DHAVE_CONFIG_H -LIBS+= $(PYTHON_LIBS) -LDFLAGS+= -lSMESH -L${KERNEL_ROOT_DIR}/lib/salome -lSalomeGenericObj - -@CONCLUDE@ diff --git a/src/SMESH_SWIG/PAL_MESH_041_mesh.py b/src/SMESH_SWIG/PAL_MESH_041_mesh.py deleted file mode 100755 index 8585c9f6f..000000000 --- a/src/SMESH_SWIG/PAL_MESH_041_mesh.py +++ /dev/null @@ -1,103 +0,0 @@ -import geompy -import salome - -import StdMeshers - -#-----------------------------GEOM---------------------------------------- - -#----------Vertexes------------ -p1 = geompy.MakeVertex(20.0,30.0,40.0) -p2 = geompy.MakeVertex(90.0,80.0,0.0) -p3 = geompy.MakeVertex(30.0,80.0,200.0) - -#----------Edges--------------- -e1 = geompy.MakeEdge(p1,p2) -e2 = geompy.MakeEdge(p2,p3) -e3 = geompy.MakeEdge(p3,p1) - -#----------Wire---------------- -ListOfEdges = [] -ListOfEdges.append(e3) -ListOfEdges.append(e2) -ListOfEdges.append(e1) -wire1 = geompy.MakeWire(ListOfEdges) - - -#----------Face---------------- -WantPlanarFace = 1 -face1 = geompy.MakeFace(wire1,WantPlanarFace) - -Id_face1 = geompy.addToStudy(face1,"Face1") - - - -#-----------------------------SMESH------------------------------------------- -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") - -# -- Init -- -plane_mesh = salome.IDToObject( Id_face1) -smesh.SetCurrentStudy(salome.myStudy) - -mesh = smesh.CreateMesh(plane_mesh) - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId) - -id_mesh = salome.ObjectToID(mesh) -smeshgui.SetName( id_mesh, "Mesh_1") - - -print"---------------------Hypothesis" - - -#---------------- NumberOfSegments -numberOfSegment = 9 - -hypNbSeg = smesh.CreateHypothesis( "NumberOfSegments", "libStdMeshersEngine.so" ) -hypNbSeg.SetNumberOfSegments( numberOfSegment ) - -print hypNbSeg.GetName() -print hypNbSeg.GetNumberOfSegments() -smeshgui.SetName(salome.ObjectToID(hypNbSeg), "Nb. Segments") - - -#--------------------------Max. Element Area -maxElementArea = 200 - -hypArea200 = smesh.CreateHypothesis("MaxElementArea","libStdMeshersEngine.so") -hypArea200.SetMaxElementArea( maxElementArea ) -print hypArea200.GetName() -print hypArea200.GetMaxElementArea() - -smeshgui.SetName(salome.ObjectToID(hypArea200), "Max. Element Area") - -print"---------------------Algorithms" - -#----------------------------Wire discretisation -algoWireDes = smesh.CreateHypothesis( "Regular_1D", "libStdMeshersEngine.so" ) -listHyp = algoWireDes.GetCompatibleHypothesis() - -print algoWireDes.GetName() -smeshgui.SetName(salome.ObjectToID(algoWireDes), "Ware descritisation") - -#----------------------------Triangle (Mefisto) -algoMef = smesh.CreateHypothesis( "MEFISTO_2D", "libStdMeshersEngine.so" ) -listHyp = algoMef.GetCompatibleHypothesis() - -print algoMef.GetName() - -#----------------------------Add hipothesis to the plane -mesh.AddHypothesis( plane_mesh, hypNbSeg ) # nb segments -mesh.AddHypothesis( plane_mesh, hypArea200 ) # max area - -mesh.AddHypothesis( plane_mesh, algoWireDes ) # Regular 1D/wire discretisation -mesh.AddHypothesis( plane_mesh, algoMef ) # MEFISTO 2D - -smeshgui.SetName(salome.ObjectToID(algoMef), "Triangle (Mefisto)") - -print "---------------------Compute the mesh" - -smesh.Compute(mesh, plane_mesh) - -salome.sg.updateObjBrowser(1) - diff --git a/src/SMESH_SWIG/PAL_MESH_043_2D.py b/src/SMESH_SWIG/PAL_MESH_043_2D.py deleted file mode 100755 index 76ab25924..000000000 --- a/src/SMESH_SWIG/PAL_MESH_043_2D.py +++ /dev/null @@ -1,102 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_testExtrusion2D.py -# Module : SMESH -# Description : Create meshes to test extrusion of mesh elements along path - -import salome -import geompy -import SMESH -import StdMeshers - -#----------------------------------GEOM - -# create points -p1 = geompy.MakeVertex(100, 0, 0) -p2 = geompy.MakeVertex(100, 0, 100) -p3 = geompy.MakeVertex(0, 0, 0) -p4 = geompy.MakeVertex(0, 100, 0) - - -# create two vectors -vector1 = geompy.MakeVector(p1,p2) -vector2 = geompy.MakeVector(p3,p4) - -# make two ellipses -ellipse1 = geompy.MakeEllipse(p1,vector1,50,25) -ellipse2 = geompy.MakeEllipse(p3,vector2,300,50) - -# publish circular face and second circle -id_ellipse1 = geompy.addToStudy(ellipse1, "Ellips 1") -id_ellipse2 = geompy.addToStudy(ellipse2, "Ellips 2") - - -#---------------------------------SMESH -# get smesh engine -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") -smesh.SetCurrentStudy(salome.myStudy) - -# get SMESH GUI -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId) - -# create hypoteses -hypNbSeg1 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSeg1.SetNumberOfSegments(18) -id_hypNbSeg1 = salome.ObjectToID(hypNbSeg1) -smeshgui.SetName(id_hypNbSeg1, "NumberOfSegments 1"); - -hypNbSeg2 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSeg2.SetNumberOfSegments(34) -id_hypNbSeg2 = salome.ObjectToID(hypNbSeg2) -smeshgui.SetName(id_hypNbSeg2, "NumberOfSegments 2"); - -# create algorithmes -algoReg = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -id_algoReg = salome.ObjectToID(algoReg) -smeshgui.SetName(id_algoReg, "Regular_1D"); - -# create the path mesh -mesh1 = smesh.CreateMesh(ellipse1) -id_mesh1 = salome.ObjectToID(mesh1) -smeshgui.SetName(id_mesh1, "Path Mesh"); - -# set hypotheses and algos -mesh1.AddHypothesis(ellipse1,algoReg) -mesh1.AddHypothesis(ellipse1,hypNbSeg1) - -# create the tool mesh -mesh2 = smesh.CreateMesh(ellipse2) -id_mesh2 = salome.ObjectToID(mesh2) -smeshgui.SetName(id_mesh2, "Tool Mesh"); - -# set hypotheses and algos -mesh2.AddHypothesis(ellipse2,algoReg) -mesh2.AddHypothesis(ellipse2,hypNbSeg2) - -# compute meshes -smesh.Compute(mesh1,ellipse1) -smesh.Compute(mesh2,ellipse2) - - -# ---- udate object browser -salome.sg.updateObjBrowser(1); diff --git a/src/SMESH_SWIG/PAL_MESH_043_3D.py b/src/SMESH_SWIG/PAL_MESH_043_3D.py deleted file mode 100755 index cfd0f45c4..000000000 --- a/src/SMESH_SWIG/PAL_MESH_043_3D.py +++ /dev/null @@ -1,104 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_testExtrusion3D.py -# Module : SMESH -# Description : Create meshes to test extrusion of mesh elements along path - -import salome -import geompy -import SMESH -import StdMeshers - -# get smesh engine -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") -smesh.SetCurrentStudy(salome.myStudy) - -# create points to build two circles -p1 = geompy.MakeVertex(0, 100, 0) -p2 = geompy.MakeVertex(100, 0, 0) -p3 = geompy.MakeVertex(0, -100, 0) -p4 = geompy.MakeVertex(0, 70, 0) -p5 = geompy.MakeVertex(0, 100, 30) -p6 = geompy.MakeVertex(0, 130, 0) - -# create two circles -circle = geompy.MakeCircleThreePnt(p1, p2, p3) -cf = geompy.MakeCircleThreePnt(p4, p5, p6) - -# make circular face -wire = geompy.MakeWire([cf]) -face = geompy.MakeFace(wire, 1) - -# publish circular face and second circle -idcircle = geompy.addToStudy(circle, "Circle") -idface = geompy.addToStudy(face, "Circular face") - -# get SMESH GUI -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId) - -# create hypoteses -hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSeg.SetNumberOfSegments(12) -idseg = salome.ObjectToID(hypNbSeg) -smeshgui.SetName(idseg, "NumberOfSegments_10"); - -hypArea = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hypArea.SetMaxElementArea(30) -idarea = salome.ObjectToID(hypArea) -smeshgui.SetName(idarea, "MaxElementArea_20"); - -# create algorithmes -algoReg = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -idreg = salome.ObjectToID(algoReg) -smeshgui.SetName(idreg, "Regular_1D"); - -algoMef = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so") -idmef = salome.ObjectToID(algoMef) -smeshgui.SetName(idmef, "MEFISTO_2D"); - -# init a Mesh with the circular face -mesh1 = smesh.CreateMesh(face) -idmesh1 = salome.ObjectToID(mesh1) -smeshgui.SetName(idmesh1, "Mesh on circular face"); - -# set hypotheses and algos -mesh1.AddHypothesis(face,algoReg) -mesh1.AddHypothesis(face,hypNbSeg) -mesh1.AddHypothesis(face,algoMef) -mesh1.AddHypothesis(face,hypArea) - -# init a Mesh with the second circle -mesh2 = smesh.CreateMesh(circle) -idmesh2 = salome.ObjectToID(mesh2) -smeshgui.SetName(idmesh2, "Mesh on circular edge"); - -# set hypotheses and algos -mesh2.AddHypothesis(circle,algoReg) -mesh2.AddHypothesis(circle,hypNbSeg) - -# compute meshes -smesh.Compute(mesh1,face) -smesh.Compute(mesh2,circle) - -# ---- udate object browser -salome.sg.updateObjBrowser(1); diff --git a/src/SMESH_SWIG/SMESH_BelongToGeom.py b/src/SMESH_SWIG/SMESH_BelongToGeom.py deleted file mode 100644 index c4ee39dcd..000000000 --- a/src/SMESH_SWIG/SMESH_BelongToGeom.py +++ /dev/null @@ -1,28 +0,0 @@ -import SMESH -from SMESH_test1 import * - -def CheckBelongToGeomFilter(theMeshGen, theMesh, theShape, theSubShape, theElemType): - import geompy - if theShape != theSubShape: - aName = str(theSubShape) - geompy.addToStudyInFather(theShape,theSubShape,aName) - - theMeshGen.Compute(theMesh,theShape) - - aFilterMgr = theMeshGen.CreateFilterManager() - aFilter = aFilterMgr.CreateFilter() - - aBelongToGeom = aFilterMgr.CreateBelongToGeom() - aBelongToGeom.SetGeom(theSubShape) - aBelongToGeom.SetElementType(theElemType) - - aFilter.SetPredicate(aBelongToGeom) - return aFilter.GetElementsId(theMesh) - -anElemType = SMESH.ALL; -print "anElemType =", anElemType -#anIds = CheckBelongToGeomFilter(smesh,mesh,box,subShapeList[1],SMESH.FACE) -anIds = CheckBelongToGeomFilter(smesh,mesh,box,box,SMESH.FACE) -print "anIds = ", anIds - -salome.sg.updateObjBrowser(1); diff --git a/src/SMESH_SWIG/SMESH_GroupFromGeom.py b/src/SMESH_SWIG/SMESH_GroupFromGeom.py deleted file mode 100644 index 3647c77d2..000000000 --- a/src/SMESH_SWIG/SMESH_GroupFromGeom.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_GroupFromGeom.py -# Module : SMESH - -from SMESH_test1 import * -import SMESH - -# Compute the mesh created in SMESH_test1 - -smesh.Compute(mesh, box) - -# Create geometry groups on plane: -aGeomGroup1 = geompy.CreateGroup(face , geompy.ShapeType["FACE"]) -geompy.AddObject(aGeomGroup1, 1) - -aGeomGroup2 = geompy.CreateGroup(face , geompy.ShapeType["EDGE"]) - -geompy.AddObject(aGeomGroup2, 3) -geompy.AddObject(aGeomGroup2, 6) -geompy.AddObject(aGeomGroup2, 8) -geompy.AddObject(aGeomGroup2, 10) - -geompy.addToStudy(aGeomGroup1, "Group on Faces") -geompy.addToStudy(aGeomGroup2, "Group on Edges") - -aSmeshGroup1 = mesh.CreateGroupFromGEOM(SMESH.FACE, "SMESHGroup1", aGeomGroup1) -aSmeshGroup2 = mesh.CreateGroupFromGEOM(SMESH.EDGE, "SMESHGroup2", aGeomGroup2) - -salome.sg.updateObjBrowser(1); diff --git a/src/SMESH_SWIG/SMESH_GroupFromGeom2.py b/src/SMESH_SWIG/SMESH_GroupFromGeom2.py deleted file mode 100755 index 37f333d88..000000000 --- a/src/SMESH_SWIG/SMESH_GroupFromGeom2.py +++ /dev/null @@ -1,53 +0,0 @@ -#============================================================================== -# Info. -# Bug (from script, bug) : SMESH_GroupFromGeom.py, PAL6945 -# Modified : 25/11/2004 -# Author : Kovaltchuk Alexey -# Project : PAL/SALOME -#============================================================================== -from SMESH_test1 import * -import SMESH - -# Compute the mesh created in SMESH_test1 - -smesh.Compute(mesh, box) - -# Create geometry groups on plane: -aGeomGroup1 = geompy.CreateGroup(face , geompy.ShapeType["FACE"]) -geompy.AddObject(aGeomGroup1, 1) - -aGeomGroup2 = geompy.CreateGroup(face , geompy.ShapeType["EDGE"]) - -geompy.AddObject(aGeomGroup2, 3) -geompy.AddObject(aGeomGroup2, 6) -geompy.AddObject(aGeomGroup2, 8) -geompy.AddObject(aGeomGroup2, 10) - -geompy.addToStudy(aGeomGroup1, "Group on Faces") -geompy.addToStudy(aGeomGroup2, "Group on Edges") - -aSmeshGroup1 = mesh.CreateGroupFromGEOM(SMESH.FACE, "SMESHGroup1", aGeomGroup1) -aSmeshGroup2 = mesh.CreateGroupFromGEOM(SMESH.EDGE, "SMESHGroup2", aGeomGroup2) - -print "Create aGroupOnShell - a group linked to a shell" -aGroupOnShell = mesh.CreateGroupFromGEOM(SMESH.EDGE, "GroupOnShell", shell) -print "aGroupOnShell type =", aGroupOnShell.GetType() -print "aGroupOnShell size =", aGroupOnShell.Size() -print "aGroupOnShell ids :", aGroupOnShell.GetListOfID() - -print " " - -print "Modify hypothesis: 100 -> 50" -hypLen1.SetLength(50) -print "Contents of aGroupOnShell changes:" -print "aGroupOnShell size =", aGroupOnShell.Size() -print "aGroupOnShell ids :", aGroupOnShell.GetListOfID() - -print " " - -print "Re-compute mesh, contents of aGroupOnShell changes again:" -smesh.Compute(mesh, box) -print "aGroupOnShell size =", aGroupOnShell.Size() -print "aGroupOnShell ids :", aGroupOnShell.GetListOfID() - -salome.sg.updateObjBrowser(1); diff --git a/src/SMESH_SWIG/SMESH_GroupLyingOnGeom.py b/src/SMESH_SWIG/SMESH_GroupLyingOnGeom.py deleted file mode 100644 index 6a4533ea7..000000000 --- a/src/SMESH_SWIG/SMESH_GroupLyingOnGeom.py +++ /dev/null @@ -1,23 +0,0 @@ -from smesh import * - -def BuildGroupLyingOn(theMesh, theElemType, theName, theShape): - aFilterMgr = smesh.CreateFilterManager() - aFilter = aFilterMgr.CreateFilter() - - aLyingOnGeom = aFilterMgr.CreateLyingOnGeom() - aLyingOnGeom.SetGeom(theShape) - aLyingOnGeom.SetElementType(theElemType) - - aFilter.SetPredicate(aLyingOnGeom) - anIds = aFilter.GetElementsId(theMesh) - - aGroup = theMesh.CreateGroup(theElemType, theName) - aGroup.Add(anIds) - -#Example -## from SMESH_test1 import * - -## smesh.Compute(mesh, box) -## BuildGroupLyingOn(mesh, SMESH.FACE, "Group of faces lying on edge", edge ) - -## salome.sg.updateObjBrowser(1); diff --git a/src/SMESH_SWIG/SMESH_Nut.py b/src/SMESH_SWIG/SMESH_Nut.py deleted file mode 100755 index 2a208b9a7..000000000 --- a/src/SMESH_SWIG/SMESH_Nut.py +++ /dev/null @@ -1,161 +0,0 @@ -##################################################################### -#Created :17/02/2005 -#Auhtor :MASLOV Eugeny, KOVALTCHUK Alexey -##################################################################### - -import geompy -import salome -import os -import math -import StdMeshers -import SMESH - -#Sketcher_1 creation -print "Sketcher creation..." -Sketcher_1 = geompy.MakeSketcher("Sketcher:F 100 -57.7:TT 100 57.7:TT 0 115.47:TT -100 57.7:TT -100 -57.7:TT 0 -115.47:WW") -geompy.addToStudy(Sketcher_1, "Sketcher_1") -Face_1 = geompy.MakeFace(Sketcher_1, 1) -geompy.addToStudy(Face_1, "Face_1") - -#Line creation -print "Line creation..." -Line_1 = geompy.MakeLineTwoPnt(geompy.MakeVertex(0,0,0), geompy.MakeVertex(0,0,100)) -geompy.addToStudy(Line_1, "Line_1") - -#Prism creation -print "Prism creation..." -Prism_1 = geompy.MakePrismVecH(Face_1, Line_1, 100) -geompy.addToStudy(Prism_1, "Prism_1") - -#Sketcher_2 creation -print "Sketcher creation..." -Sketcher_2 = geompy.MakeSketcher("Sketcher:F 50 0:TT 80 0:TT 112 13:TT 112 48:TT 80 63:TT 80 90:TT 50 90:WW", [0,0,0, 1,0,0, 0,1,0]) -geompy.addToStudy(Sketcher_2, "Sketcher_2") -Face_2 = geompy.MakeFace(Sketcher_2, 1) -geompy.addToStudy(Face_2, "Face_2") - -#Revolution creation -print "Revolution creation..." -Revolution_1 = geompy.MakeRevolution(Face_2, Line_1, 2*math.pi) -geompy.addToStudy(Revolution_1, "Revolution_1") - -#Common applying -print "Common of Revolution and Prism..." -Common_1 = geompy.MakeBoolean(Revolution_1, Prism_1, 1) -geompy.addToStudy(Common_1, "Common_1") - -#Explode Common_1 on edges -CommonExplodedListEdges = geompy.SubShapeAll(Common_1, geompy.ShapeType["EDGE"]) -for i in range(0, len(CommonExplodedListEdges)): - name = "Edge_"+str(i+1) - geompy.addToStudyInFather(Common_1, CommonExplodedListEdges[i], name) - -#Fillet applying -print "Fillet creation..." -Fillet_1 = geompy.MakeFillet(Common_1, 10, geompy.ShapeType["EDGE"], [6]) -geompy.addToStudy(Fillet_1, "Fillet_1") - -#Chamfer applying -print "Chamfer creation..." -Chamfer_1 = geompy.MakeChamferEdge(Fillet_1, 10, 10, 16, 50 ) -geompy.addToStudy(Chamfer_1, "Chamfer_1") -Chamfer_2 = geompy.MakeChamferEdge(Chamfer_1, 10, 10, 21, 31 ) -geompy.addToStudy(Chamfer_2, "Chamfer_2") - -#Import of the shape from "slots.brep" -print "Import multi-rotation from the KERNEL_ROOT_DIR/examples/slots.brep" -thePath = os.getenv("KERNEL_ROOT_DIR") -theFileName = thePath + "/examples/slots.brep" -theShapeForCut = geompy.ImportBREP(theFileName) -geompy.addToStudy(theShapeForCut, "slot.brep_1") - -#Cut applying -print "Cut..." -Cut_1 = geompy.MakeBoolean(Chamfer_2, theShapeForCut, 2) -Cut_1_ID = geompy.addToStudy(Cut_1, "Cut_1") - -#Mesh creation -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") - -# -- Init -- -shape_mesh = salome.IDToObject( Cut_1_ID ) -smesh.SetCurrentStudy(salome.myStudy) -mesh = smesh.CreateMesh(shape_mesh) -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId) -idmesh = salome.ObjectToID(mesh) -smeshgui.SetName( idmesh, "Nut" ) - -#HYPOTHESIS CREATION -print "-------------------------- Average length" -theAverageLength = 5 -hAvLength = smesh.CreateHypothesis( "LocalLength", "libStdMeshersEngine.so" ) -hAvLength.SetLength( theAverageLength ) -print hAvLength.GetName() -print hAvLength.GetId() -smeshgui.SetName(salome.ObjectToID(hAvLength), "AverageLength_5") - -print "-------------------------- MaxElementArea" -theMaxElementArea = 20 -hArea20 = smesh.CreateHypothesis( "MaxElementArea", "libStdMeshersEngine.so" ) -hArea20.SetMaxElementArea( theMaxElementArea ) -print hArea20.GetName() -print hArea20.GetId() -print hArea20.GetMaxElementArea() -smeshgui.SetName(salome.ObjectToID(hArea20), "MaxElementArea_20") - -print "-------------------------- MaxElementVolume" -theMaxElementVolume = 150 -hVolume150 = smesh.CreateHypothesis( "MaxElementVolume", "libStdMeshersEngine.so" ) -hVolume150.SetMaxElementVolume( theMaxElementVolume ) -print hVolume150.GetName() -print hVolume150.GetId() -print hVolume150.GetMaxElementVolume() -smeshgui.SetName(salome.ObjectToID(hVolume150), "MaxElementVolume_150") - -mesh.AddHypothesis(shape_mesh, hAvLength) -mesh.AddHypothesis(shape_mesh, hArea20) -mesh.AddHypothesis(shape_mesh, hVolume150) - -print "-------------------------- Regular_1D" - -algoReg1D = smesh.CreateHypothesis( "Regular_1D", "libStdMeshersEngine.so" ) -listHyp = algoReg1D.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoReg1D.GetName() -print algoReg1D.GetId() -smeshgui.SetName(salome.ObjectToID(algoReg1D), "Wire discretisation") - -print "-------------------------- MEFISTO_2D" -algoMef = smesh.CreateHypothesis( "MEFISTO_2D", "libStdMeshersEngine.so" ) -listHyp = algoMef.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoMef.GetName() -print algoMef.GetId() -smeshgui.SetName(salome.ObjectToID(algoMef), "Triangle (Mefisto)") - -print "-------------------------- NETGEN_3D" - -algoNg = smesh.CreateHypothesis( "NETGEN_3D", "libNETGENEngine.so" ) -print algoNg.GetName() -print algoNg.GetId() -smeshgui.SetName(salome.ObjectToID(algoNg), "Tetrahedron (NETGEN)") -mesh.AddHypothesis(shape_mesh, algoReg1D) -mesh.AddHypothesis(shape_mesh, algoMef) -mesh.AddHypothesis(shape_mesh, algoNg) - -print "-------------------------- compute the mesh of the mechanic piece" -smesh.Compute(mesh,shape_mesh) - -print "Information about the Nut:" -print "Number of nodes : ", mesh.NbNodes() -print "Number of edges : ", mesh.NbEdges() -print "Number of faces : ", mesh.NbFaces() -print "Number of triangles : ", mesh.NbTriangles() -print "Number of quadrangles : ", mesh.NbQuadrangles() -print "Number of volumes : ", mesh.NbVolumes() -print "Number of tetrahedrons: ", mesh.NbTetras() - -salome.sg.updateObjBrowser(1) diff --git a/src/SMESH_SWIG/SMESH_Partition1_tetra.py b/src/SMESH_SWIG/SMESH_Partition1_tetra.py deleted file mode 100644 index e9bb55fa7..000000000 --- a/src/SMESH_SWIG/SMESH_Partition1_tetra.py +++ /dev/null @@ -1,200 +0,0 @@ -# -# Tetrahedrization of the geometry generated by the Python script GEOM_Partition1.py -# Hypothesis and algorithms for the mesh generation are global -# -#%Make geometry (like CEA script (A1)) using Partition algorithm% from OCC -# -- Rayon de la bariere - -import salome -import geompy -from math import sqrt - -import StdMeshers -import NETGENPlugin - -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") -smesh.SetCurrentStudy(salome.myStudy) - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId) - -#--------------------------------------------------------------- - -barier_height = 7.0 -barier_radius = 5.6 / 2 # Rayon de la bariere -colis_radius = 1.0 / 2 # Rayon du colis -colis_step = 2.0 # Distance s‰parant deux colis -cc_width = 0.11 # Epaisseur du complement de colisage - -# -- - -cc_radius = colis_radius + cc_width -colis_center = sqrt(2.0)*colis_step/2 - -# -- - -boolean_common = 1 -boolean_cut = 2 -boolean_fuse = 3 -boolean_section = 4 - -# -- - -p0 = geompy.MakeVertex(0.,0.,0.) -vz = geompy.MakeVectorDXDYDZ(0.,0.,1.) - -# -- - -barier = geompy.MakeCylinder(p0, vz, barier_radius, barier_height) - -# -- - -colis = geompy.MakeCylinder(p0, vz, colis_radius, barier_height) -cc = geompy.MakeCylinder(p0, vz, cc_radius, barier_height) - -colis_cc = geompy.MakeCompound([colis, cc]) -colis_cc = geompy.MakeTranslation(colis_cc, colis_center, 0.0, 0.0) - -colis_cc_multi = geompy.MultiRotate1D(colis_cc, vz, 4) - -# -- - -alveole = geompy.MakePartition([colis_cc_multi, barier]) - -print "Analysis of the geometry to mesh (right after the Partition) :" - -subShellList = geompy.SubShapeAll(alveole, geompy.ShapeType["SHELL"]) -subFaceList = geompy.SubShapeAll(alveole, geompy.ShapeType["FACE"]) -subEdgeList = geompy.SubShapeAll(alveole, geompy.ShapeType["EDGE"]) - -print "number of Shells in alveole : ", len(subShellList) -print "number of Faces in alveole : ", len(subFaceList) -print "number of Edges in alveole : ", len(subEdgeList) - -subshapes = geompy.SubShapeAll(alveole, geompy.ShapeType["SHAPE"]) - -## there are 9 subshapes - -comp1 = geompy.MakeCompound( [ subshapes[0], subshapes[1] ] ) -comp2 = geompy.MakeCompound( [ subshapes[2], subshapes[3] ] ) -comp3 = geompy.MakeCompound( [ subshapes[4], subshapes[5] ] ) -comp4 = geompy.MakeCompound( [ subshapes[6], subshapes[7] ] ) - -compGOs = [] -compGOs.append( comp1 ) -compGOs.append( comp2 ) -compGOs.append( comp3 ) -compGOs.append( comp4 ) -comp = geompy.MakeCompound( compGOs ) - -alveole = geompy.MakeCompound( [ comp, subshapes[8] ]) - -idalveole = geompy.addToStudy(alveole, "alveole") - -print "Analysis of the geometry to mesh (right after the MakeCompound) :" - -subShellList = geompy.SubShapeAll(alveole, geompy.ShapeType["SHELL"]) -subFaceList = geompy.SubShapeAll(alveole, geompy.ShapeType["FACE"]) -subEdgeList = geompy.SubShapeAll(alveole, geompy.ShapeType["EDGE"]) - -print "number of Shells in alveole : ", len(subShellList) -print "number of Faces in alveole : ", len(subFaceList) -print "number of Edges in alveole : ", len(subEdgeList) - -status = geompy.CheckShape(alveole) -print " check status ", status - -# ---- launch SMESH - -print "-------------------------- create Hypothesis (In this case global hypothesis are used)" - -print "-------------------------- NumberOfSegments" - -numberOfSegments = 10 - -hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSeg.SetNumberOfSegments(numberOfSegments) -print hypNbSeg.GetName() -print hypNbSeg.GetId() -print hypNbSeg.GetNumberOfSegments() - -smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10") - -print "-------------------------- MaxElementArea" - -maxElementArea = 0.1 - -hypArea = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hypArea.SetMaxElementArea(maxElementArea) -print hypArea.GetName() -print hypArea.GetId() -print hypArea.GetMaxElementArea() - -smeshgui.SetName(salome.ObjectToID(hypArea), "MaxElementArea_0.1") - -print "-------------------------- MaxElementVolume" - -maxElementVolume = 0.5 - -hypVolume = smesh.CreateHypothesis("MaxElementVolume", "libStdMeshersEngine.so") -hypVolume.SetMaxElementVolume(maxElementVolume) -print hypVolume.GetName() -print hypVolume.GetId() -print hypVolume.GetMaxElementVolume() - -smeshgui.SetName(salome.ObjectToID(hypVolume), "MaxElementVolume_0.5") - -print "-------------------------- create Algorithms" - -print "-------------------------- Regular_1D" - -regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation") - -print "-------------------------- MEFISTO_2D" - -mefisto2D = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so") -smeshgui.SetName(salome.ObjectToID(mefisto2D), "MEFISTO_2D") - -print "-------------------------- NETGEN_3D" - -netgen3D = smesh.CreateHypothesis("NETGEN_3D", "libNETGENEngine.so") -smeshgui.SetName(salome.ObjectToID(netgen3D), "NETGEN_3D") - -# ---- init a Mesh with the alveole -shape_mesh = salome.IDToObject( idalveole ) - -mesh = smesh.CreateMesh(shape_mesh) -smeshgui.SetName(salome.ObjectToID(mesh), "MeshAlveole") - -# ---- add hypothesis to alveole - -print "-------------------------- add hypothesis to alveole" - -mesh.AddHypothesis(shape_mesh,regular1D) -mesh.AddHypothesis(shape_mesh,hypNbSeg) - -mesh.AddHypothesis(shape_mesh,mefisto2D) -mesh.AddHypothesis(shape_mesh,hypArea) - -mesh.AddHypothesis(shape_mesh,netgen3D) -mesh.AddHypothesis(shape_mesh,hypVolume) - -print "-------------------------- compute the mesh of alveole " -ret = smesh.Compute(mesh,shape_mesh) - -if ret != 0: - log=mesh.GetLog(0) # no erase trace - for linelog in log: - print linelog - print "Information about the Mesh_mechanic:" - print "Number of nodes : ", mesh.NbNodes() - print "Number of edges : ", mesh.NbEdges() - print "Number of faces : ", mesh.NbFaces() - print "Number of triangles : ", mesh.NbTriangles() - print "Number of volumes : ", mesh.NbVolumes() - print "Number of tetrahedrons: ", mesh.NbTetras() -else: - print "problem when computing the mesh" - -salome.sg.updateObjBrowser(1) diff --git a/src/SMESH_SWIG/SMESH_Sphere.py b/src/SMESH_SWIG/SMESH_Sphere.py deleted file mode 100644 index 893e5441f..000000000 --- a/src/SMESH_SWIG/SMESH_Sphere.py +++ /dev/null @@ -1,111 +0,0 @@ -# GEOM GEOM_SWIG : binding of C++ omplementaion with Python -# -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : GEOM_Sphere.py -# Author : Damien COQUERET, Open CASCADE -# Module : GEOM -# $Header: - -from geompy import * -from math import * - -import smesh - -# It is an example of creating a hexahedrical mesh on a sphere. -# -# Used approach allows to avoid problems with degenerated and -# seam edges without special processing of geometrical shapes - -#----------------------------------------------------------------------- -#Variables -Radius = 100. -Dist = Radius / 2. -Factor = 2.5 -Angle90 = pi / 2. -NbSeg = 10 - -PointsList = [] -ShapesList = [] - -#Basic Elements -P0 = MakeVertex(0., 0., 0.) -P1 = MakeVertex(-Dist, -Dist, -Dist) -P2 = MakeVertex(-Dist, -Dist, Dist) -P3 = MakeVertex(-Dist, Dist, Dist) -P4 = MakeVertex(-Dist, Dist, -Dist) - -VZ = MakeVectorDXDYDZ(0., 0., 1.) - -#Construction Elements -PointsList.append(P1) -PointsList.append(P2) -PointsList.append(P3) -PointsList.append(P4) -PointsList.append(P1) - -PolyLine = MakePolyline(PointsList) - -Face1 = MakeFace(PolyLine, 1) -Face2 = MakeScaleTransform(Face1, P0, Factor) -Face3 = MakeScaleTransform(Face1, P0, -1.) - -#Models -Sphere = MakeSphereR(Radius) - -Block = MakeHexa2Faces(Face1, Face2) -Cube = MakeHexa2Faces(Face1, Face3) - -Common1 = MakeBoolean(Sphere, Block, 1) -Common2 = MakeRotation(Common1, VZ, Angle90) - -MultiBlock1 = MakeMultiTransformation1D(Common1, 21, -1, 3) -MultiBlock2 = MakeMultiTransformation1D(Common2, 31, -1, 3) - -#Reconstruct sphere from several blocks -ShapesList.append(Cube) -ShapesList.append(MultiBlock1) -ShapesList.append(MultiBlock2) -Compound = MakeCompound(ShapesList) - -Result = MakeGlueFaces(Compound, 0.1) - -#addToStudy -Id_Sphere = addToStudy(Sphere, "Sphere") -Id_Cube = addToStudy(Cube, "Cube") - -Id_Common1 = addToStudy(Common1, "Common1") -Id_Common2 = addToStudy(Common2, "Common2") - -Id_MultiBlock1 = addToStudy(MultiBlock1, "MultiBlock1") -Id_MultiBlock2 = addToStudy(MultiBlock2, "MultiBlock2") - -Id_Result = addToStudy(Result, "Result") - -#----------------------------------------------------------------------- -#Meshing -my_hexa = smesh.Mesh(Result, "Sphere_Mesh") -algo = my_hexa.Segment() -algo.NumberOfSegments(NbSeg) -my_hexa.Quadrangle() -my_hexa.Hexahedron() -my_hexa.Compute() diff --git a/src/SMESH_SWIG/SMESH_blocks.py b/src/SMESH_SWIG/SMESH_blocks.py deleted file mode 100644 index 0430867fb..000000000 --- a/src/SMESH_SWIG/SMESH_blocks.py +++ /dev/null @@ -1,43 +0,0 @@ -# SMESH SMESH_SWIG : binding of C++ implementaion with Python -# -# Copyright (C) 2003 CEA -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_blocks.py -# Author : Julia DOROVSKIKH -# Module : SMESH -# $Header$ - -import salome -import geompy -import math - -import GEOM_Spanner - -isBlocksTest = 0 # False -isMeshTest = 1 # True -hasGUI = 1 # True - -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") -smesh.SetCurrentStudy(salome.myStudy) - -GEOM_Spanner.MakeSpanner(salome, geompy, math, isBlocksTest, isMeshTest, smesh, hasGUI) - -salome.sg.updateObjBrowser(1); diff --git a/src/SMESH_SWIG/SMESH_box.py b/src/SMESH_SWIG/SMESH_box.py deleted file mode 100755 index 2902c739b..000000000 --- a/src/SMESH_SWIG/SMESH_box.py +++ /dev/null @@ -1,73 +0,0 @@ -#============================================================================== -# Info. -# Bug (from script, bug) : box.py, PAL5223 -# Modified : 25/11/2004 -# Author : Kovaltchuk Alexey -# Project : PAL/SALOME -#============================================================================== -# -# Salome geometry and meshing for a box -# -import salome -from salome import sg -import geompy - -import StdMeshers - -# ---- launch GEOM - -geom = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM") -meshgenerator = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") - -###geom.GetCurrentStudy(salome.myStudy._get_StudyId()) -meshgenerator.SetCurrentStudy(salome.myStudy) - -# Plate - -box = geompy.MakeBox(0.,0.,0.,1.,1.,1.) -boxId = geompy.addToStudy(box,"box") - -# ---- launch SMESH - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId) -# meshgenerator=smeshpy.smeshpy() - - -# Hypothesis - -hypL1=meshgenerator.CreateHypothesis("LocalLength","libStdMeshersEngine.so") -hypL1.SetLength(0.25) -hypL1Id = salome.ObjectToID(hypL1) -smeshgui.SetName(hypL1Id, "LocalLength") - -# Algorithm - -alg1D=meshgenerator.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -alg1DId = salome.ObjectToID(alg1D) -smeshgui.SetName(alg1DId, "algo1D") - -alg2D=meshgenerator.CreateHypothesis("Quadrangle_2D", "libStdMeshersEngine.so") -alg2DId = salome.ObjectToID(alg2D) -smeshgui.SetName(alg2DId, "algo2D") - -alg3D=meshgenerator.CreateHypothesis("Hexa_3D", "libStdMeshersEngine.so") -alg3DId = salome.ObjectToID(alg3D) -smeshgui.SetName(alg3DId, "algo3D") - -# ---- init a Mesh - -box_mesh=meshgenerator.CreateMesh(box) -box_meshId = salome.ObjectToID(box_mesh) -smeshgui.SetName(box_meshId, "box_mesh") - -# ---- set Hypothesis & Algorithm - -box_mesh.AddHypothesis(box,alg1D) -box_mesh.AddHypothesis(box,alg2D) -box_mesh.AddHypothesis(box,alg3D) -box_mesh.AddHypothesis(box,hypL1) - -meshgenerator.Compute(box_mesh,box) - -sg.updateObjBrowser(1) diff --git a/src/SMESH_SWIG/SMESH_box2_tetra.py b/src/SMESH_SWIG/SMESH_box2_tetra.py deleted file mode 100644 index e8a4afd9f..000000000 --- a/src/SMESH_SWIG/SMESH_box2_tetra.py +++ /dev/null @@ -1,160 +0,0 @@ -# -# Tetrahedrization of the geometry union of 2 boxes having a face in common -# Hypothesis and algorithms for the mesh generation are global -# - -import salome -import geompy - -import StdMeshers -import NETGENPlugin - -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId); - -# ---- define 2 boxes box1 and box2 - -box1 = geompy.MakeBox(0., 0., 0., 100., 200., 300.) - -idbox1 = geompy.addToStudy(box1, "box1") - -print "Analysis of the geometry box1 :" -subShellList = geompy.SubShapeAll(box1, geompy.ShapeType["SHELL"]) -subFaceList = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"]) -subEdgeList = geompy.SubShapeAll(box1, geompy.ShapeType["EDGE"]) - -print "number of Shells in box1 : ", len(subShellList) -print "number of Faces in box1 : ", len(subFaceList) -print "number of Edges in box1 : ", len(subEdgeList) - -box2 = geompy.MakeBox(100., 0., 0., 200., 200., 300.) - -idbox2 = geompy.addToStudy(box2, "box2") - -print "Analysis of the geometry box2 :" -subShellList = geompy.SubShapeAll(box2, geompy.ShapeType["SHELL"]) -subFaceList = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"]) -subEdgeList = geompy.SubShapeAll(box2, geompy.ShapeType["EDGE"]) - -print "number of Shells in box2 : ", len(subShellList) -print "number of Faces in box2 : ", len(subFaceList) -print "number of Edges in box2 : ", len(subEdgeList) - -# append the tow boxes to make ine shel, referrencing only once -# the internal interface - -shell = geompy.MakePartition([box1, box2]) -idshell = geompy.addToStudy(shell, "shell") - -print "Analysis of the geometry shell (union of box1 and box2) :" -subShellList = geompy.SubShapeAll(shell, geompy.ShapeType["SHELL"]) -subFaceList = geompy.SubShapeAll(shell, geompy.ShapeType["FACE"]) -subEdgeList = geompy.SubShapeAll(shell, geompy.ShapeType["EDGE"]) - -print "number of Shells in shell : ", len(subShellList) -print "number of Faces in shell : ", len(subFaceList) -print "number of Edges in shell : ", len(subEdgeList) - - -### ---------------------------- SMESH -------------------------------------- - -# ---- create Hypothesis - -print "-------------------------- create Hypothesis" - -print "-------------------------- NumberOfSegments" - -numberOfSegments = 10 - -hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSeg.SetNumberOfSegments(numberOfSegments) - -print hypNbSeg.GetName() -print hypNbSeg.GetId() -print hypNbSeg.GetNumberOfSegments() - -smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10") - -print "-------------------------- MaxElementArea" - -maxElementArea = 500 - -hypArea = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hypArea.SetMaxElementArea(maxElementArea) - -print hypArea.GetName() -print hypArea.GetId() -print hypArea.GetMaxElementArea() - -smeshgui.SetName(salome.ObjectToID(hypArea), "MaxElementArea_500") - -print "-------------------------- MaxElementVolume" - -maxElementVolume = 500 - -hypVolume = smesh.CreateHypothesis("MaxElementVolume", "libStdMeshersEngine.so") -hypVolume.SetMaxElementVolume(maxElementVolume) - -print hypVolume.GetName() -print hypVolume.GetId() -print hypVolume.GetMaxElementVolume() - -smeshgui.SetName(salome.ObjectToID(hypVolume), "MaxElementVolume_500") - -# ---- create Algorithms - -print "-------------------------- create Algorithms" - -print "-------------------------- Regular_1D" - -regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation") - -print "-------------------------- MEFISTO_2D" - -mefisto2D = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so") -smeshgui.SetName(salome.ObjectToID(mefisto2D), "MEFISTO_2D") - -print "-------------------------- NETGEN_3D" - -netgen3D = smesh.CreateHypothesis("NETGEN_3D", "libNETGENEngine.so") -smeshgui.SetName(salome.ObjectToID(netgen3D), "NETGEN_3D") - -# ---- init a Mesh with the shell - -mesh = smesh.CreateMesh(shell) -smeshgui.SetName(salome.ObjectToID(mesh), "MeshBox2") - -# ---- add hypothesis to shell - -print "-------------------------- add hypothesis to shell" - -mesh.AddHypothesis(shell,regular1D) -mesh.AddHypothesis(shell,hypNbSeg) - -mesh.AddHypothesis(shell,mefisto2D) -mesh.AddHypothesis(shell,hypArea) - -mesh.AddHypothesis(shell,netgen3D) -mesh.AddHypothesis(shell,hypVolume) - -salome.sg.updateObjBrowser(1) - -print "-------------------------- compute shell" -ret = smesh.Compute(mesh,shell) -print ret -if ret != 0: - log = mesh.GetLog(0) # no erase trace - for linelog in log: - print linelog - print "Information about the MeshBox2:" - print "Number of nodes : ", mesh.NbNodes() - print "Number of edges : ", mesh.NbEdges() - print "Number of faces : ", mesh.NbFaces() - print "Number of triangles : ", mesh.NbTriangles() - print "Number of volumes : ", mesh.NbVolumes() - print "Number of tetrahedrons: ", mesh.NbTetras() -else: - print "probleme when computing the mesh" diff --git a/src/SMESH_SWIG/SMESH_box3_tetra.py b/src/SMESH_SWIG/SMESH_box3_tetra.py deleted file mode 100644 index af4082774..000000000 --- a/src/SMESH_SWIG/SMESH_box3_tetra.py +++ /dev/null @@ -1,171 +0,0 @@ -# -# Tetrahedrization of the geometry union of 3 boxes aligned where the middle -# one has a race in common with the two others. -# Hypothesis and algorithms for the mesh generation are global -# - -import salome -import geompy - -import StdMeshers -import NETGENPlugin - -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId); - -# ---- define 3 boxes box1, box2 and box3 - -box1 = geompy.MakeBox(0., 0., 0., 100., 200., 300.) - -idbox1 = geompy.addToStudy(box1, "box1") - -print "Analysis of the geometry box1 :" -subShellList = geompy.SubShapeAll(box1, geompy.ShapeType["SHELL"]) -subFaceList = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"]) -subEdgeList = geompy.SubShapeAll(box1, geompy.ShapeType["EDGE"]) - -print "number of Shells in box1 : ", len(subShellList) -print "number of Faces in box1 : ", len(subFaceList) -print "number of Edges in box1 : ", len(subEdgeList) - -box2 = geompy.MakeBox(100., 0., 0., 200., 200., 300.) - -idbox2 = geompy.addToStudy(box2, "box2") - -print "Analysis of the geometry box2 :" -subShellList = geompy.SubShapeAll(box2, geompy.ShapeType["SHELL"]) -subFaceList = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"]) -subEdgeList = geompy.SubShapeAll(box2, geompy.ShapeType["EDGE"]) - -print "number of Shells in box2 : ", len(subShellList) -print "number of Faces in box2 : ", len(subFaceList) -print "number of Edges in box2 : ", len(subEdgeList) - -box3 = geompy.MakeBox(0., 0., 300., 200., 200., 500.) - -idbox3 = geompy.addToStudy(box3, "box3") - -print "Analysis of the geometry box3 :" -subShellList = geompy.SubShapeAll(box3, geompy.ShapeType["SHELL"]) -subFaceList = geompy.SubShapeAll(box3, geompy.ShapeType["FACE"]) -subEdgeList = geompy.SubShapeAll(box3, geompy.ShapeType["EDGE"]) - -print "number of Shells in box3 : ", len(subShellList) -print "number of Faces in box3 : ", len(subFaceList) -print "number of Edges in box3 : ", len(subEdgeList) - -shell = geompy.MakePartition([box1, box2, box3]) -idshell = geompy.addToStudy(shell,"shell") - -print "Analysis of the geometry shell (union of box1, box2 and box3) :" -subShellList = geompy.SubShapeAll(shell, geompy.ShapeType["SHELL"]) -subFaceList = geompy.SubShapeAll(shell, geompy.ShapeType["FACE"]) -subEdgeList = geompy.SubShapeAll(shell, geompy.ShapeType["EDGE"]) - -print "number of Shells in shell : ", len(subShellList) -print "number of Faces in shell : ", len(subFaceList) -print "number of Edges in shell : ", len(subEdgeList) - - -### ---------------------------- SMESH -------------------------------------- - -# ---- create Hypothesis - -print "-------------------------- create Hypothesis" - -print "-------------------------- NumberOfSegments" - -numberOfSegments = 10 - -hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSeg.SetNumberOfSegments(numberOfSegments) - -print hypNbSeg.GetName() -print hypNbSeg.GetId() -print hypNbSeg.GetNumberOfSegments() - -smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10") - -print "-------------------------- MaxElementArea" - -maxElementArea = 500 - -hypArea = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hypArea.SetMaxElementArea(maxElementArea) - -print hypArea.GetName() -print hypArea.GetId() -print hypArea.GetMaxElementArea() - -smeshgui.SetName(salome.ObjectToID(hypArea), "MaxElementArea_500") - -print "-------------------------- MaxElementVolume" - -maxElementVolume = 500 - -hypVolume = smesh.CreateHypothesis("MaxElementVolume", "libStdMeshersEngine.so") -hypVolume.SetMaxElementVolume(maxElementVolume) - -print hypVolume.GetName() -print hypVolume.GetId() -print hypVolume.GetMaxElementVolume() - -smeshgui.SetName(salome.ObjectToID(hypVolume), "MaxElementVolume_500") - -# ---- create Algorithms - -print "-------------------------- create Algorithms" - -print "-------------------------- Regular_1D" - -regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation") - -print "-------------------------- MEFISTO_2D" - -mefisto2D = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so") -smeshgui.SetName(salome.ObjectToID(mefisto2D), "MEFISTO_2D") - -print "-------------------------- NETGEN_3D" - -netgen3D = smesh.CreateHypothesis("NETGEN_3D", "libNETGENEngine.so") -smeshgui.SetName(salome.ObjectToID(netgen3D), "NETGEN_3D") - -# ---- init a Mesh with the shell - -mesh = smesh.CreateMesh(shell) -smeshgui.SetName(salome.ObjectToID(mesh), "MeshBox3") - -# ---- add hypothesis to shell - -print "-------------------------- add hypothesis to shell" - -mesh.AddHypothesis(shell,regular1D) -mesh.AddHypothesis(shell,hypNbSeg) - -mesh.AddHypothesis(shell,mefisto2D) -mesh.AddHypothesis(shell,hypArea) - -mesh.AddHypothesis(shell,netgen3D) -mesh.AddHypothesis(shell,hypVolume) - -salome.sg.updateObjBrowser(1) - -print "-------------------------- compute shell" -ret = smesh.Compute(mesh,shell) -print ret -if ret != 0: - log = mesh.GetLog(0) # no erase trace - for linelog in log: - print linelog - print "Information about the MeshBox3:" - print "Number of nodes : ", mesh.NbNodes() - print "Number of edges : ", mesh.NbEdges() - print "Number of faces : ", mesh.NbFaces() - print "Number of triangles : ", mesh.NbTriangles() - print "Number of volumes : ", mesh.NbVolumes() - print "Number of tetrahedrons: ", mesh.NbTetras() -else: - print "probleme when computing the mesh" diff --git a/src/SMESH_SWIG/SMESH_box_tetra.py b/src/SMESH_SWIG/SMESH_box_tetra.py deleted file mode 100644 index 72b45e12b..000000000 --- a/src/SMESH_SWIG/SMESH_box_tetra.py +++ /dev/null @@ -1,132 +0,0 @@ -# -# Tetrahedrization of a simple box. Hypothesis and algorithms for -# the mesh generation are global -# - -import salome -import geompy - -import StdMeshers -import NETGENPlugin - -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId); - -# ---- define a boxe - -box = geompy.MakeBox(0., 0., 0., 100., 200., 300.) - -idbox = geompy.addToStudy(box, "box") - -print "Analysis of the geometry box :" -subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"]) -subFaceList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"]) -subEdgeList = geompy.SubShapeAll(box, geompy.ShapeType["EDGE"]) - -print "number of Shells in box : ", len(subShellList) -print "number of Faces in box : ", len(subFaceList) -print "number of Edges in box : ", len(subEdgeList) - - -### ---------------------------- SMESH -------------------------------------- - -# ---- create Hypothesis - -print "-------------------------- create Hypothesis" - -print "-------------------------- NumberOfSegments" - -numberOfSegments = 10 - -hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSeg.SetNumberOfSegments(numberOfSegments) - -print hypNbSeg.GetName() -print hypNbSeg.GetId() -print hypNbSeg.GetNumberOfSegments() - -smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10") - -print "-------------------------- MaxElementArea" - -maxElementArea = 500 - -hypArea = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hypArea.SetMaxElementArea(maxElementArea) - -print hypArea.GetName() -print hypArea.GetId() -print hypArea.GetMaxElementArea() - -smeshgui.SetName(salome.ObjectToID(hypArea), "MaxElementArea_500") - -print "-------------------------- MaxElementVolume" - -maxElementVolume = 500 - -hypVolume = smesh.CreateHypothesis("MaxElementVolume", "libStdMeshersEngine.so") -hypVolume.SetMaxElementVolume(maxElementVolume) - -print hypVolume.GetName() -print hypVolume.GetId() -print hypVolume.GetMaxElementVolume() - -smeshgui.SetName(salome.ObjectToID(hypVolume), "MaxElementVolume_500") - -# ---- create Algorithms - -print "-------------------------- create Algorithms" - -print "-------------------------- Regular_1D" - -regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation") - -print "-------------------------- MEFISTO_2D" - -mefisto2D = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so") -smeshgui.SetName(salome.ObjectToID(mefisto2D), "MEFISTO_2D") - -print "-------------------------- NETGEN_3D" - -netgen3D = smesh.CreateHypothesis("NETGEN_3D", "libNETGENEngine.so") -smeshgui.SetName(salome.ObjectToID(netgen3D), "NETGEN_3D") - -# ---- init a Mesh with the boxe - -mesh = smesh.CreateMesh(box) -smeshgui.SetName(salome.ObjectToID(mesh), "MeshBox") - -# ---- add hypothesis to the boxe - -print "-------------------------- add hypothesis to the box" - -mesh.AddHypothesis(box,regular1D) -mesh.AddHypothesis(box,hypNbSeg) - -mesh.AddHypothesis(box,mefisto2D) -mesh.AddHypothesis(box,hypArea) - -mesh.AddHypothesis(box,netgen3D) -mesh.AddHypothesis(box,hypVolume) - -salome.sg.updateObjBrowser(1) - -print "-------------------------- compute the mesh of the boxe" -ret = smesh.Compute(mesh,box) -print ret -if ret != 0: - log = mesh.GetLog(0) # no erase trace - for linelog in log: - print linelog - print "Information about the MeshBox:" - print "Number of nodes : ", mesh.NbNodes() - print "Number of edges : ", mesh.NbEdges() - print "Number of faces : ", mesh.NbFaces() - print "Number of triangles : ", mesh.NbTriangles() - print "Number of volumes : ", mesh.NbVolumes() - print "Number of tetrahedrons: ", mesh.NbTetras() -else: - print "probleme when computing the mesh" diff --git a/src/SMESH_SWIG/SMESH_controls.py b/src/SMESH_SWIG/SMESH_controls.py deleted file mode 100644 index 1d5080d87..000000000 --- a/src/SMESH_SWIG/SMESH_controls.py +++ /dev/null @@ -1,209 +0,0 @@ -# Copyright (C) 2004 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_control.py -# Author : Sergey LITONIN -# Module : SMESH - - -import SMESH -import SMESH_mechanic - -smesh = SMESH_mechanic.smesh -mesh = SMESH_mechanic.mesh -salome = SMESH_mechanic.salome - - -aFilterMgr = smesh.CreateFilterManager() - -# Criterion : AREA > 100 - -aFunctor = aFilterMgr.CreateArea() -aPredicate = aFilterMgr.CreateMoreThan() -aPredicate.SetNumFunctor( aFunctor ) -aPredicate.SetMargin( 100 ) - -aFilter = aFilterMgr.CreateFilter() -aFilter.SetPredicate( aPredicate ) - -anIds = aFilter.GetElementsId( mesh ) - -# print result -print "Criterion: Area > 100 Nb = ", len( anIds ) -#for i in range( len( anIds ) ): - #print anIds[ i ] - -# create group -aGroup = mesh.CreateGroup( SMESH.FACE, "Area > 100" ) -aGroup.Add( anIds ) - - -# Criterion : Taper > 3e-15 - -aFunctor = aFilterMgr.CreateTaper() -aPredicate = aFilterMgr.CreateMoreThan() -aPredicate.SetNumFunctor( aFunctor ) -aPredicate.SetMargin( 3e-15 ) - -aFilter = aFilterMgr.CreateFilter() -aFilter.SetPredicate( aPredicate ) - -anIds = aFilter.GetElementsId( mesh ) - -# print result -print "Criterion: Taper > 3e-15 Nb = ", len( anIds ) -#for i in range( len( anIds ) ): - #print anIds[ i ] - -# create group -aGroup = mesh.CreateGroup( SMESH.FACE, "Taper > 3e-15" ) -aGroup.Add( anIds ) - - -# Criterion : ASPECT RATIO > 1.3 - -aFunctor = aFilterMgr.CreateAspectRatio() -aPredicate = aFilterMgr.CreateMoreThan() -aPredicate.SetNumFunctor( aFunctor ) -aPredicate.SetMargin( 1.3 ) - -aFilter = aFilterMgr.CreateFilter() -aFilter.SetPredicate( aPredicate ) - -anIds = aFilter.GetElementsId( mesh ) - -# print result -print "Criterion: Aspect Ratio > 1.3 Nb = ", len( anIds ) -#for i in range( len( anIds ) ): - #print anIds[ i ] - -# create group -aGroup = mesh.CreateGroup( SMESH.FACE, "Aspect Ratio > 1.3" ) -aGroup.Add( anIds ) - - -# Criterion : MINIMUM ANGLE < 30 - -aFunctor = aFilterMgr.CreateMinimumAngle() -aPredicate = aFilterMgr.CreateLessThan() -aPredicate.SetNumFunctor( aFunctor ) -aPredicate.SetMargin( 30 ) - -aFilter = aFilterMgr.CreateFilter() -aFilter.SetPredicate( aPredicate ) - -anIds = aFilter.GetElementsId( mesh ) - -# print result -print "Criterion: Minimum Angle < 30 Nb = ", len( anIds ) -#for i in range( len( anIds ) ): - #print anIds[ i ] - -# create group -aGroup = mesh.CreateGroup( SMESH.FACE, "Minimum Angle < 30" ) -aGroup.Add( anIds ) - -# Criterion : Warp > 2e-13 - -aFunctor = aFilterMgr.CreateWarping() -aPredicate = aFilterMgr.CreateMoreThan() -aPredicate.SetNumFunctor( aFunctor ) -aPredicate.SetMargin( 2e-13 ) - -aFilter = aFilterMgr.CreateFilter() -aFilter.SetPredicate( aPredicate ) - -anIds = aFilter.GetElementsId( mesh ) - -# print result -print "Criterion: Warp > 2e-13 Nb = ", len( anIds ) -#for i in range( len( anIds ) ): - #print anIds[ i ] - -# create group -aGroup = mesh.CreateGroup( SMESH.FACE, "Warp > 2e-13" ) -aGroup.Add( anIds ) - -# Criterion : Skew > 18 - -aFunctor = aFilterMgr.CreateSkew() -aPredicate = aFilterMgr.CreateMoreThan() -aPredicate.SetNumFunctor( aFunctor ) -aPredicate.SetMargin( 18 ) - -aFilter = aFilterMgr.CreateFilter() -aFilter.SetPredicate( aPredicate ) - -anIds = aFilter.GetElementsId( mesh ) - -# print result -print "Criterion: Skew > 18 Nb = ", len( anIds ) -#for i in range( len( anIds ) ): - #print anIds[ i ] - -# create group -aGroup = mesh.CreateGroup( SMESH.FACE, "Skew > 18" ) -aGroup.Add( anIds ) - -# Criterion : Length > 10 - -aFunctor = aFilterMgr.CreateLength() -aPredicate = aFilterMgr.CreateMoreThan() -aPredicate.SetNumFunctor( aFunctor ) -aPredicate.SetMargin( 10 ) - -aFilter = aFilterMgr.CreateFilter() -aFilter.SetPredicate( aPredicate ) - -anIds = aFilter.GetElementsId( mesh ) - -# print result -print "Criterion: Length > 10 Nb = ", len( anIds ) -#for i in range( len( anIds ) ): - #print anIds[ i ] - -# create group -aGroup = mesh.CreateGroup( SMESH.EDGE, "Length > 10" ) -aGroup.Add( anIds ) - -# Criterion : Borders at multi-connections = 2 - -aFunctor = aFilterMgr.CreateMultiConnection() -aPredicate = aFilterMgr.CreateEqualTo() -aPredicate.SetNumFunctor( aFunctor ) -aPredicate.SetMargin( 2 ) - -aFilter = aFilterMgr.CreateFilter() -aFilter.SetPredicate( aPredicate ) - -anIds = aFilter.GetElementsId( mesh ) - -# print result -print "Criterion: Borders at multi-connections = 2 Nb = ", len( anIds ) -#for i in range( len( anIds ) ): - #print anIds[ i ] - -# create group -aGroup = mesh.CreateGroup( SMESH.EDGE, "Borders at multi-connections = 2" ) -aGroup.Add( anIds ) - - -salome.sg.updateObjBrowser(1) diff --git a/src/SMESH_SWIG/SMESH_demo_hexa2_upd.py b/src/SMESH_SWIG/SMESH_demo_hexa2_upd.py deleted file mode 100755 index 755214a59..000000000 --- a/src/SMESH_SWIG/SMESH_demo_hexa2_upd.py +++ /dev/null @@ -1,210 +0,0 @@ -#============================================================================== -# Info. -# Bug (from script, bug) : SMESH_demo_hexa2_upd.py, PAL6781 -# Modified : 25/11/2004 -# Author : Kovaltchuk Alexey -# Project : PAL/SALOME -#============================================================================== -# Tetrahedrization of a geometry (box minus a inner cylinder). -# Hypothesis and algorithms for the mesh generation are not global: -# the mesh of some edges is thinner -# - -import salome -import geompy - -import StdMeshers -import NETGENPlugin - -geom = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM") -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId); - -import math - -# ----------------------------------------------------------------------------- - -ShapeTypeShell = 3 -ShapeTypeFace = 4 -ShapeTypeEdge = 6 - -a = math.sqrt(2.)/4. -ma = - a -zero = 0. -un = 1. -mun= - un -demi = 1./2. - -Orig = geompy.MakeVertex(zero,zero,zero) -P0 = geompy.MakeVertex(a,a,zero) -P1 = geompy.MakeVertex(zero,demi,zero) -P2 = geompy.MakeVertex(ma,a,zero) -P3 = geompy.MakeVertex(mun,un,zero) -P4 = geompy.MakeVertex(un,un,zero) -P5 = geompy.MakeVertex(zero,zero,un) - -arc = geompy.MakeArc(P0,P1,P2) -e1 = geompy.MakeEdge(P2,P3) -e2 = geompy.MakeEdge(P3,P4) -e3 = geompy.MakeEdge(P4,P0) - -list = [] -list.append(arc) -list.append(e1) -list.append(e2) -list.append(e3) - -wire = geompy.MakeWire(list) -face = geompy.MakeFace(wire,1) - -dir = geompy.MakeVector(Orig,P5) -vol1 = geompy.MakePipe(face,dir) - -angle = math.pi/2. -#dir = geom.MakeVector(Orig,P5) -vol2 = geompy.MakeRotation(vol1,dir,angle) - -vol3 = geompy.MakeRotation(vol2,dir,angle) - -vol4 = geompy.MakeRotation(vol3,dir,angle) - -list = [] -list.append(vol1) -list.append(vol2) -list.append(vol3) -list.append(vol4) - -volComp = geompy.MakeCompound(list) - -tol3d = 1.e-3 -vol = geompy.MakeGlueFaces(volComp,tol3d) -idVol = geompy.addToStudy(vol,"volume") - -print "Analysis of the final volume:" -subShellList = geompy.SubShapeAllSorted(vol,ShapeTypeShell) -subFaceList = geompy.SubShapeAllSorted(vol,ShapeTypeFace) -subEdgeList = geompy.SubShapeAllSorted(vol,ShapeTypeEdge) - -print "number of Shells in the volume : ",len(subShellList) -print "number of Faces in the volume : ",len(subFaceList) -print "number of Edges in the volume : ",len(subEdgeList) - -idSubEdge = [] -for k in range(len(subEdgeList)): - idSubEdge.append(geompy.addToStudyInFather(vol,subEdgeList[k],"SubEdge"+str(k))) - -edgeZ = [] -edgeZ.append(subEdgeList[0]) -edgeZ.append(subEdgeList[3]) -edgeZ.append(subEdgeList[10]) -edgeZ.append(subEdgeList[11]) -edgeZ.append(subEdgeList[20]) -edgeZ.append(subEdgeList[21]) -edgeZ.append(subEdgeList[28]) -edgeZ.append(subEdgeList[31]) - -idEdgeZ = [] -for i in range(8): - idEdgeZ.append(geompy.addToStudyInFather(vol,edgeZ[i],"EdgeZ"+str(i+1))) - -### ---------------------------- SMESH -------------------------------------- - -# ---- create Hypothesis - -print "-------------------------- create Hypothesis" - -print "-------------------------- NumberOfSegments the global one" - -numberOfSegments = 10 - -hypNbSeg=smesh.CreateHypothesis("NumberOfSegments","libStdMeshersEngine.so") -hypNbSeg.SetNumberOfSegments(numberOfSegments) -hypNbSegID = hypNbSeg.GetId() -print hypNbSeg.GetName() -print hypNbSegID -print hypNbSeg.GetNumberOfSegments() - -smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments") - -print "-------------------------- NumberOfSegments in the Z direction" - -numberOfSegmentsZ = 40 - -hypNbSegZ=smesh.CreateHypothesis("NumberOfSegments","libStdMeshersEngine.so") -hypNbSegZ.SetNumberOfSegments(numberOfSegmentsZ) -hypNbSegZID = hypNbSegZ.GetId() -print hypNbSegZ.GetName() -print hypNbSegZID -print hypNbSegZ.GetNumberOfSegments() - -smeshgui.SetName(salome.ObjectToID(hypNbSegZ), "NumberOfSegmentsZ") - -# ---- create Algorithms - -print "-------------------------- create Algorithms" - -print "-------------------------- Regular_1D" - -regular1D=smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation") - -print "-------------------------- Quadrangle_2D" - -quad2D=smesh.CreateHypothesis("Quadrangle_2D", "libStdMeshersEngine.so") -smeshgui.SetName(salome.ObjectToID(quad2D), "Quadrangle_2D") - -print "-------------------------- Hexa_3D" - -hexa3D=smesh.CreateHypothesis("Hexa_3D", "libStdMeshersEngine.so") -smeshgui.SetName(salome.ObjectToID(hexa3D), "Hexa_3D") - -# ---- init a Mesh with the volume - -mesh = smesh.CreateMesh(vol) -smeshgui.SetName(salome.ObjectToID(mesh), "meshVolume") - -# ---- add hypothesis to the volume - -print "-------------------------- add hypothesis to the volume" - -ret=mesh.AddHypothesis(vol,regular1D) -print ret -ret=mesh.AddHypothesis(vol,hypNbSeg) -print ret -ret=mesh.AddHypothesis(vol,quad2D) -print ret -ret=mesh.AddHypothesis(vol,hexa3D) -print ret - -for i in range(8): - print "-------------------------- add hypothesis to edge in the Z directions", (i+1) - - subMeshEdgeZ = mesh.GetSubMesh(edgeZ[i],"SubMeshEdgeZ_"+str(i+1)) - - retZ = mesh.AddHypothesis(edgeZ[i],hypNbSegZ) - print " add hyp Z ", retZ - -salome.sg.updateObjBrowser(1) - -print "-------------------------- compute the mesh of the volume" - -ret=smesh.Compute(mesh,vol) - -print ret -if ret != 0: -## log=mesh.GetLog(0) # no erase trace -## for linelog in log: -## print linelog - print "Information about the MeshBox :" - print "Number of nodes : ", mesh.NbNodes() - print "Number of edges : ", mesh.NbEdges() - print "Number of faces : ", mesh.NbFaces() - print "Number of triangles : ", mesh.NbTriangles() - print "Number of volumes : ", mesh.NbVolumes() - print "Number of tetrahedrons: ", mesh.NbTetras() -else: - print "problem when Computing the mesh" - -salome.sg.updateObjBrowser(1) diff --git a/src/SMESH_SWIG/SMESH_fixation.py b/src/SMESH_SWIG/SMESH_fixation.py deleted file mode 100644 index b10fcc81f..000000000 --- a/src/SMESH_SWIG/SMESH_fixation.py +++ /dev/null @@ -1,294 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_fix_volute.py -# Author : Paul RASCLE, EDF -# Module : SMESH -# $Header$ - -import salome -import geompy -import math - -# ----------------------------------------------------------------------------- - -def MakeFace(lstEdges) : - """ - Creates a planar face from 4 edges - """ - wire = geompy.MakeWire(lstEdges) - face = geompy.MakeFace(wire, 1) - return face - -# ----------------------------------------------------------------------------- - -# ---- dimensions - -##longueurPlq = 0.686 -##largeurPlq = 0.573 -##epaisseurPlq = 0.150 - -##hauteurFlanc = 0.380 -##epaisseurFlanc = 0.112 -##rayonConge = 0.150 - epaisseurFlanc - -##epaisseurFond = 0.162 -##rayonTrou = 0.075 -##posAxeTrou = hauteurFlanc -(0.180 + rayonTrou) -##marge = 0.01 -##tol3d = 1.e-5 - -longueurPlq = 686 -largeurPlq = 573 -epaisseurPlq = 150 - -hauteurFlanc = 380 -epaisseurFlanc = 112 -rayonConge = 150 - epaisseurFlanc - -epaisseurFond = 162 -rayonTrou = 75 -posAxeTrou = hauteurFlanc - (180 + rayonTrou) -marge = 10 -tol3d = 1.e-3 - -# ---- points, directions de base - -p0 = geompy.MakeVertex(0., 0., 0.) - -vx = geompy.MakeVectorDXDYDZ(100., 0., 0.) -vy = geompy.MakeVectorDXDYDZ(0., 100., 0.) -vz = geompy.MakeVectorDXDYDZ(0., 0., 100.) - -# ---- ellipse du flanc - -he = hauteurFlanc - 2*rayonConge -re = 0.5*(largeurPlq - epaisseurFond) - rayonConge -sine = re/he -cose = math.sqrt(1. - sine*sine) - -ve = geompy.MakeVectorDXDYDZ(sine, 0., cose) -cyl0 = geompy.MakeCylinder(p0, ve, re, 2*he) -cyl1 = geompy.MakeRotation(cyl0, ve, 0.5) -cyle = geompy.MakeTranslation(cyl1, -marge*sine, 0., -marge*cose) - -pbe = geompy.MakeVertex(3*he, -2*re, 3*he) -boxe = geompy.MakeBoxTwoPnt(p0, pbe) - -cylcoup = geompy.MakeBoolean(cyle, boxe, 2) - -aretes = [] -aretes = geompy.SubShapeAllSorted(cylcoup, geompy.ShapeType["EDGE"]) - -shape = geompy.MakeCopy(aretes[0]) -aShape = geompy.MakeTranslation(shape, 0., rayonConge + re, epaisseurPlq + 2*rayonConge) - - -# ----------------------------------------------------------------------------- -# ---- decoupage de la piece en volumes a 6 faces de 4 cotes -# ----------------------------------------------------------------------------- - -# ---- cotes x - -x0 = 0. -x0h = rayonConge -x1 = rayonConge + epaisseurFlanc -xc = longueurPlq/2 -x2 = longueurPlq - rayonConge - epaisseurFlanc -x3h = longueurPlq - rayonConge -x3 = longueurPlq - -# ---- cotes y - -y0 = 0. -y0h = rayonConge -y1 = largeurPlq - epaisseurFond -y1m = y1 - marge -y2 = largeurPlq -y2p = largeurPlq + marge - -# ---- cotes z - -z0 = 0. -z1m = epaisseurPlq - marge -z1 = epaisseurPlq -z2 = epaisseurPlq + rayonConge -z3 = epaisseurPlq + 2*rayonConge -z4 = epaisseurPlq + hauteurFlanc -z4p = epaisseurPlq + hauteurFlanc + marge - -zc = epaisseurPlq + posAxeTrou -zc2 = epaisseurPlq + (posAxeTrou - rayonTrou)/3 -zc3 = epaisseurPlq + 2*(posAxeTrou - rayonTrou)/3 - -# ---- decoupe du fond - -p11 = geompy.MakeVertex(x1, y1m, z1) -p12 = geompy.MakeVertex(x1, y1m, z2) -p13 = geompy.MakeVertex(x1, y1m, z3) -p14 = geompy.MakeVertex(x1, y1m, z4) -pc1 = geompy.MakeVertex(xc, y1m, z1) -pc2 = geompy.MakeVertex(xc, y1m, zc2) -pc3 = geompy.MakeVertex(xc, y1m, zc3) -pcc = geompy.MakeVertex(xc, y1m, zc) -pc4 = geompy.MakeVertex(xc, y1m, z4) -p21 = geompy.MakeVertex(x2, y1m, z1) -p22 = geompy.MakeVertex(x2, y1m, z2) -p23 = geompy.MakeVertex(x2, y1m, z3) -p24 = geompy.MakeVertex(x2, y1m, z4) -pcf = geompy.MakeVertex(xc, y2p, zc) - -arc2 = geompy.MakeArc(p12,pc2,p22) -arc3 = geompy.MakeArc(p13,pc3,p23) - -segz1 = geompy.MakeVector(p11,p21) -segz41 = geompy.MakeVector(p14,pc4) -segz42 = geompy.MakeVector(pc4,p24) -segx11 = geompy.MakeVector(p11,p12) -segx12 = geompy.MakeVector(p12,p13) -segx13 = geompy.MakeVector(p13,p14) -segxc2 = geompy.MakeVector(pc1,pc2) -segxc3 = geompy.MakeVector(pc2,pc3) -segxc4 = geompy.MakeVector(pcc,pc4) -segx21 = geompy.MakeVector(p21,p22) -segx22 = geompy.MakeVector(p22,p23) -segx23 = geompy.MakeVector(p23,p24) -segx1c1 = geompy.MakeVector(p13,pcc) -segx1c2 = geompy.MakeVector(p14,pcc) -segx2c1 = geompy.MakeVector(p23,pcc) -segx2c2 = geompy.MakeVector(p24,pcc) - -facef = [] -facef.append(MakeFace([segx13,segx1c2,segx1c1])) -facef.append(MakeFace([segx23,segx2c2,segx2c1])) -facef.append(MakeFace([segx2c2,segxc4,segz42])) -facef.append(MakeFace([segx1c2,segz41,segxc4])) -facef.append(MakeFace([segx1c1,arc3,segx2c1])) -facef.append(MakeFace([segx12,arc2,segx22,arc3])) -facef.append(MakeFace([segx11,segz1,segx21,arc2])) - -vcccf = geompy.MakeVector(pcc, pcf) -hcccf = y2p - y1m -decf = [] -for face in facef: - decf.append(geompy.MakePrismVecH(face,vcccf,hcccf)) - -pc = geompy.MakeVertex(xc, 0., zc) -py2 = geompy.MakeVertex(xc, y2, zc) -axeCyl = geompy.MakeVector(pc, py2) - -cylFond = geompy.MakeCylinder(pc, vy, rayonTrou, 1.1*largeurPlq) -cylFond2 = geompy.MakeRotation(cylFond, axeCyl, math.pi) - -fondec = [] -for id in (0,1,2,3): - fondec.append(geompy.MakeBoolean(decf[id], cylFond2, 2)) -fondec.append(geompy.MakeBoolean(decf[4], cylFond, 2)) -for id in (5,6): - fondec.append(decf[id]) - -p_xcy2pz4p = geompy.MakeVertex(xc,y2p,z4p) -p_x3y2pz4p = geompy.MakeVertex(x3,y2p,z4p) -pxc = geompy.MakeVertex(xc,y0,z0) -bcut1 = geompy.MakeBoxTwoPnt(p0, p_xcy2pz4p) -bcut2 = geompy.MakeBoxTwoPnt(pxc, p_x3y2pz4p) - -fondec2 = [] -for id in (0,1,2,3): - fondec2.append(fondec[id]) -for id in (4,5,6): - fondec2.append(geompy.MakeBoolean(fondec[id], bcut1, 1)) - fondec2.append(geompy.MakeBoolean(fondec[id], bcut2, 1)) - -# ----- autres blocs de decoupe - -bcong1 = geompy.MakeBox(x0,y0,z1, x1,y1,z2) -bcong2 = geompy.MakeBox(x0,y1,z1, x1,y2,z2) -bcong3 = geompy.MakeBox(x2,y0,z1, x3,y1,z2) -bcong4 = geompy.MakeBox(x2,y1,z1, x3,y2,z2) - -pcylx0 = geompy.MakeVertex(0., -marge, z2) -pcylx3 = geompy.MakeVertex(longueurPlq, -marge, z2) -pcyly0 = geompy.MakeVertex(-marge, 0., z2) - -cylcongx0 = geompy.MakeCylinder(pcylx0, vy, rayonConge, largeurPlq + 2*marge) -cylcongx3 = geompy.MakeCylinder(pcylx3, vy, rayonConge, largeurPlq + 2*marge) -cylcongy0 = geompy.MakeCylinder(pcyly0, vx, rayonConge, longueurPlq + 2*marge) - -bcong1 = geompy.MakeBoolean(bcong1,cylcongx0,2) -bcong2 = geompy.MakeBoolean(bcong2,cylcongx0,2) -bcong1 = geompy.MakeBoolean(bcong1,cylcongy0,2) -#NRI : inverse order of BOP -bcong3 = geompy.MakeBoolean(bcong3,cylcongy0,2) -bcong3 = geompy.MakeBoolean(bcong3,cylcongx3,2) -bcong4 = geompy.MakeBoolean(bcong4,cylcongx3,2) - -pf1 = geompy.MakeVertex(0., y0h, z3) -pf2 = geompy.MakeVertex(0., y1, z3) -pf3 = geompy.MakeVertex(0., y1, z4) -pf4 = geompy.MakeVertex(0., 0.5*(largeurPlq - epaisseurFond) , z4) - -vf1 = geompy.MakeEdge(pf1, pf2) -vf2 = geompy.MakeEdge(pf2, pf3) -vf3 = geompy.MakeEdge(pf3, pf4) - -faceFlanc = MakeFace([vf1,vf2,vf3,aShape]) - -flanc1 = geompy.MakePrismVecH(faceFlanc, vx, epaisseurFlanc) -flanc2 = geompy.MakeCopy(flanc1) -flanc1 = geompy.MakeTranslation(flanc1, rayonConge, 0., 0.) -flanc2 = geompy.MakeTranslation(flanc2, longueurPlq - rayonConge - epaisseurFlanc, 0., 0.) - -# ---- constitution et decoupe des blocs -boxfond2 = geompy.MakeBox(x0, y1, z0, x3, y2, z4p) - -blocs = [] -for dec in fondec2: - blocs.append(geompy.MakeBoolean(boxfond2, dec, 1)) - -blocs.append(geompy.MakeBox(x0,y1,z0, x1,y2,z1)) -blocs.append(geompy.MakeBox(x1,y1,z0, xc,y2,z1)) -blocs.append(geompy.MakeBox(xc,y1,z0, x2,y2,z1)) -blocs.append(geompy.MakeBox(x2,y1,z0, x3,y2,z1)) -blocs.append(geompy.MakeBox(x0,y0,z0, x1,y1,z1)) -blocs.append(geompy.MakeBox(x1,y0,z0, xc,y1,z1)) -blocs.append(geompy.MakeBox(xc,y0,z0, x2,y1,z1)) -blocs.append(geompy.MakeBox(x2,y0,z0, x3,y1,z1)) -blocs.append(bcong2) -blocs.append(bcong4) -blocs.append(bcong1) -blocs.append(bcong3) -blocs.append(geompy.MakeBox(x0h,y1, z2, x1, y2, z3)) -blocs.append(geompy.MakeBox(x2, y1, z2, x3h,y2, z3)) -blocs.append(geompy.MakeBox(x0h,y0h,z2, x1, y1, z3)) -blocs.append(geompy.MakeBox(x2, y0h,z2, x3h,y1, z3)) -blocs.append(geompy.MakeBox(x0h,y1, z3, x1, y2, z4)) -blocs.append(geompy.MakeBox(x2, y1, z3, x3h,y2, z4)) -blocs.append(flanc1) -blocs.append(flanc2) - -compbloc = geompy.MakeCompound(blocs) -idcomp = geompy.addToStudy(compbloc, "compbloc") - -# ---- eliminer les faces en double, solid-->shell - -compshell = geompy.MakeGlueFaces(compbloc,tol3d) -idcomp = geompy.addToStudy(compshell, "compshell") diff --git a/src/SMESH_SWIG/SMESH_fixation_hexa.py b/src/SMESH_SWIG/SMESH_fixation_hexa.py deleted file mode 100644 index 1845b2218..000000000 --- a/src/SMESH_SWIG/SMESH_fixation_hexa.py +++ /dev/null @@ -1,101 +0,0 @@ -# -# Hexahedrization of the geometry generated by the Python script -# SMESH_fixation.py -# Hypothesis and algorithms for the mesh generation are global -# - -import SMESH_fixation - -import StdMeshers - -compshell = SMESH_fixation.compshell -idcomp = SMESH_fixation.idcomp -geompy = SMESH_fixation.geompy -salome = SMESH_fixation.salome - -print "Analysis of the geometry to be meshed :" -subShellList = geompy.SubShapeAll(compshell, geompy.ShapeType["SHELL"]) -subFaceList = geompy.SubShapeAll(compshell, geompy.ShapeType["FACE"]) -subEdgeList = geompy.SubShapeAll(compshell, geompy.ShapeType["EDGE"]) - -print "number of Shells in compshell : ", len(subShellList) -print "number of Faces in compshell : ", len(subFaceList) -print "number of Edges in compshell : ", len(subEdgeList) - -status = geompy.CheckShape(compshell) -print " check status ", status - -### ---------------------------- SMESH -------------------------------------- -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId) - -print "-------------------------- create Hypothesis" - -print "-------------------------- NumberOfSegments" - -numberOfSegments = 5 - -hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSeg.SetNumberOfSegments(numberOfSegments) - -print hypNbSeg.GetName() -print hypNbSeg.GetId() -print hypNbSeg.GetNumberOfSegments() - -smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_5") - -print "-------------------------- create Algorithms" - -print "-------------------------- Regular_1D" - -regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") - -smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation") - -print "-------------------------- Quadrangle_2D" - -quad2D = smesh.CreateHypothesis("Quadrangle_2D", "libStdMeshersEngine.so") - -smeshgui.SetName(salome.ObjectToID(quad2D), "Quadrangle_2D") - -print "-------------------------- Hexa_3D" - -hexa3D = smesh.CreateHypothesis("Hexa_3D", "libStdMeshersEngine.so") - -smeshgui.SetName(salome.ObjectToID(hexa3D), "Hexa_3D") - -# ---- init a Mesh with the compshell -shape_mesh = salome.IDToObject( idcomp ) - -mesh = smesh.CreateMesh(shape_mesh) -smeshgui.SetName(salome.ObjectToID(mesh), "MeshCompShell") - - -print "-------------------------- add hypothesis to compshell" - -mesh.AddHypothesis(shape_mesh,regular1D) -mesh.AddHypothesis(shape_mesh,hypNbSeg) - -mesh.AddHypothesis(shape_mesh,quad2D) -mesh.AddHypothesis(shape_mesh,hexa3D) - -salome.sg.updateObjBrowser(1) - -print "-------------------------- compute compshell" -ret = smesh.Compute(mesh, shape_mesh) -print ret -if ret != 0: - log = mesh.GetLog(0) # no erase trace - for linelog in log: - print linelog - print "Information about the MeshcompShel:" - print "Number of nodes : ", mesh.NbNodes() - print "Number of edges : ", mesh.NbEdges() - print "Number of faces : ", mesh.NbFaces() - print "Number of quadrangles : ", mesh.NbQuadrangles() - print "Number of volumes : ", mesh.NbVolumes() - print "Number of hexahedrons : ", mesh.NbHexas() -else: - print "problem when Computing the mesh" diff --git a/src/SMESH_SWIG/SMESH_fixation_tetra.py b/src/SMESH_SWIG/SMESH_fixation_tetra.py deleted file mode 100644 index 2d588bbd9..000000000 --- a/src/SMESH_SWIG/SMESH_fixation_tetra.py +++ /dev/null @@ -1,131 +0,0 @@ -# -# Tetrahedrization of the geometry generated by the Python script -# SMESH_fixation.py -# Hypothesis and algorithms for the mesh generation are global -# - -import StdMeshers -import NETGENPlugin -import SMESH_fixation - -compshell = SMESH_fixation.compshell -idcomp = SMESH_fixation.idcomp -geompy = SMESH_fixation.geompy -salome = SMESH_fixation.salome - -print "Analysis of the geometry to be meshed :" -subShellList = geompy.SubShapeAll(compshell, geompy.ShapeType["SHELL"]) -subFaceList = geompy.SubShapeAll(compshell, geompy.ShapeType["FACE"]) -subEdgeList = geompy.SubShapeAll(compshell, geompy.ShapeType["EDGE"]) - -print "number of Shells in compshell : ", len(subShellList) -print "number of Faces in compshell : ", len(subFaceList) -print "number of Edges in compshell : ", len(subEdgeList) - -status = geompy.CheckShape(compshell) -print " check status ", status - -### ---------------------------- SMESH -------------------------------------- -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId) - -print "-------------------------- create Hypothesis" - -print "-------------------------- NumberOfSegments" - -numberOfSegments = 5 - -hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSeg.SetNumberOfSegments(numberOfSegments) - -print hypNbSeg.GetName() -print hypNbSeg.GetId() -print hypNbSeg.GetNumberOfSegments() - -smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_5") - -print "-------------------------- MaxElementArea" - -## maxElementArea = 80 - -## hypArea=smesh.CreateHypothesis("MaxElementArea") -## hypArea.SetMaxElementArea(maxElementArea) -## print hypArea.GetName() -## print hypArea.GetId() -## print hypArea.GetMaxElementArea() -## smeshgui.SetName(salome.ObjectToID(hypArea), "MaxElementArea_160") - -hypLengthFromEdges = smesh.CreateHypothesis("LengthFromEdges", "libStdMeshersEngine.so") -smeshgui.SetName(salome.ObjectToID(hypLengthFromEdges), "LengthFromEdges") - - -print "-------------------------- MaxElementVolume" - -maxElementVolume = 1000 - -hypVolume = smesh.CreateHypothesis("MaxElementVolume", "libStdMeshersEngine.so") -hypVolume.SetMaxElementVolume(maxElementVolume) - -print hypVolume.GetName() -print hypVolume.GetId() -print hypVolume.GetMaxElementVolume() - -smeshgui.SetName(salome.ObjectToID(hypVolume), "MaxElementVolume_1000") - -print "-------------------------- create Algorithms" - -print "-------------------------- Regular_1D" - -regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") - -smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation") - -print "-------------------------- MEFISTO_2D" - -mefisto2D = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so") - -smeshgui.SetName(salome.ObjectToID(mefisto2D), "MEFISTO_2D") - -print "-------------------------- NETGEN_3D" - -netgen3D = smesh.CreateHypothesis("NETGEN_3D", "libNETGENEngine.so") - -smeshgui.SetName(salome.ObjectToID(netgen3D), "NETGEN_3D") - -# ---- init a Mesh with the compshell - -mesh = smesh.CreateMesh(compshell) -smeshgui.SetName(salome.ObjectToID(mesh), "MeshcompShel") - -print "-------------------------- add hypothesis to compshell" - -mesh.AddHypothesis(compshell,regular1D) -mesh.AddHypothesis(compshell,hypNbSeg) - -mesh.AddHypothesis(compshell,mefisto2D) -mesh.AddHypothesis(compshell,hypLengthFromEdges) - -mesh.AddHypothesis(compshell,netgen3D) -mesh.AddHypothesis(compshell,hypVolume) - -salome.sg.updateObjBrowser(1) - -print "-------------------------- compute compshell" -ret = smesh.Compute(mesh,compshell) -print ret -if ret != 0: - log = mesh.GetLog(0) # no erase trace - for linelog in log: - print linelog - print "Information about the MeshcompShel:" - print "Number of nodes : ", mesh.NbNodes() - print "Number of edges : ", mesh.NbEdges() - print "Number of faces : ", mesh.NbFaces() - print "Number of triangles : ", mesh.NbTriangles() - print "Number of volumes : ", mesh.NbVolumes() - print "Number of tetrahedrons : ", mesh.NbTetras() - -else: - print "problem when computing the mesh" diff --git a/src/SMESH_SWIG/SMESH_flight_skin.py b/src/SMESH_SWIG/SMESH_flight_skin.py deleted file mode 100644 index fa3b8ef12..000000000 --- a/src/SMESH_SWIG/SMESH_flight_skin.py +++ /dev/null @@ -1,115 +0,0 @@ -# -# Triangulation of the skin of the geometry from a Brep representing a plane -# This geometry is from EADS -# Hypothesis and algorithms for the mesh generation are global -# - -import os -import salome -import geompy -import StdMeshers - -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId) - - -# ---------------------------- GEOM -------------------------------------- - -# import a BRep -#before running this script, please be sure about -#the path the file fileName - -filePath = os.environ["SMESH_ROOT_DIR"] -filePath = filePath + "/share/salome/resources/" - -filename = "flight_solid.brep" -filename = filePath + filename - -shape = geompy.Import(filename, "BREP") -idShape = geompy.addToStudy(shape, "flight") - -print "Analysis of the geometry flight :" -subShellList = geompy.SubShapeAll(shape, geompy.ShapeType["SHELL"]) -subFaceList = geompy.SubShapeAll(shape, geompy.ShapeType["FACE"]) -subEdgeList = geompy.SubShapeAll(shape, geompy.ShapeType["EDGE"]) - -print "number of Shells in flight : ", len(subShellList) -print "number of Faces in flight : ", len(subFaceList) -print "number of Edges in flight : ", len(subEdgeList) - - -### ---------------------------- SMESH -------------------------------------- - -print "-------------------------- create Hypothesis" - -print "-------------------------- LocalLength" - -lengthOfSegments = 0.3 - -hypLength = smesh.CreateHypothesis("LocalLength", "libStdMeshersEngine.so") -hypLength.SetLength(lengthOfSegments) - -print hypLength.GetName() -print hypLength.GetId() -print hypLength.GetLength() - -smeshgui.SetName(salome.ObjectToID(hypLength), "LocalLength_0.3") - -print "-------------------------- LengthFromEdges" - -hypLengthFromEdge = smesh.CreateHypothesis("LengthFromEdges", "libStdMeshersEngine.so") - -print hypLengthFromEdge.GetName() -print hypLengthFromEdge.GetId() - -smeshgui.SetName(salome.ObjectToID(hypLengthFromEdge), "LengthFromEdge") - -print "-------------------------- create Algorithms" - -print "-------------------------- Regular_1D" - -regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") - -smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation") - -print "-------------------------- MEFISTO_2D" - -mefisto2D = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so") - -smeshgui.SetName(salome.ObjectToID(mefisto2D), "MEFISTO_2D") - -# ---- init a Mesh with the shell -shape_mesh = salome.IDToObject( idShape ) - -mesh = smesh.CreateMesh(shape_mesh) -smeshgui.SetName(salome.ObjectToID(mesh), "MeshFlight") - -# ---- add hypothesis to flight - -print "-------------------------- add hypothesis to flight" - -mesh.AddHypothesis(shape_mesh,regular1D) -mesh.AddHypothesis(shape_mesh,hypLength) -mesh.AddHypothesis(shape_mesh,mefisto2D) -mesh.AddHypothesis(shape_mesh,hypLengthFromEdge) - -salome.sg.updateObjBrowser(1) - - -print "-------------------------- compute the skin flight" -ret = smesh.Compute(mesh,shape_mesh) -print ret -if ret != 0: - log = mesh.GetLog(0) # no erase trace - for linelog in log: - print linelog - print "Information about the Mesh_mechanic_tetra:" - print "Number of nodes : ", mesh.NbNodes() - print "Number of edges : ", mesh.NbEdges() - print "Number of faces : ", mesh.NbFaces() - print "Number of triangles : ", mesh.NbTriangles() - print "Number of volumes : ", mesh.NbVolumes() -else: - print "probleme when computing the mesh" diff --git a/src/SMESH_SWIG/SMESH_freebord.py b/src/SMESH_SWIG/SMESH_freebord.py deleted file mode 100644 index d240a354f..000000000 --- a/src/SMESH_SWIG/SMESH_freebord.py +++ /dev/null @@ -1,66 +0,0 @@ -import salome -import geompy -import SMESH -import StdMeshers - -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") -smesh.SetCurrentStudy(salome.myStudy) - -# Create box without one plane - -box = geompy.MakeBox(0., 0., 0., 10., 20., 30.) -subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"]) - -FaceList = [] -for i in range( 5 ): - FaceList.append( subShapeList[ i ] ) - -aComp = geompy.MakeCompound( FaceList ) -aBox = geompy.Sew( aComp, 1. ) -idbox = geompy.addToStudy( aBox, "box" ) - -aBox = salome.IDToObject( idbox ) - -# Create mesh - -hyp1 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hyp1.SetNumberOfSegments(5) -hyp2 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hyp2.SetMaxElementArea(20) -hyp3 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hyp3.SetMaxElementArea(50) - -algo1 = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -algo2 = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so") - -mesh = smesh.CreateMesh(aBox) -mesh.AddHypothesis(aBox,hyp1) -mesh.AddHypothesis(aBox,hyp2) -mesh.AddHypothesis(aBox,algo1) -mesh.AddHypothesis(aBox,algo2) - -smesh.Compute(mesh,aBox) - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId); -smeshgui.SetName( salome.ObjectToID( mesh ), "Mesh_freebord" ); - -# Criterion : Free edges -aFilterMgr = smesh.CreateFilterManager() -aPredicate = aFilterMgr.CreateFreeBorders() -aFilter = aFilterMgr.CreateFilter() -aFilter.SetPredicate( aPredicate ) - -anIds = aFilter.GetElementsId( mesh ) - -# print result -print "Criterion: Free edges Nb = ", len( anIds ) -for i in range( len( anIds ) ): - print anIds[ i ] - -# create group -aGroup = mesh.CreateGroup( SMESH.EDGE, "Free edges" ) -aGroup.Add( anIds ) - - -salome.sg.updateObjBrowser(1) diff --git a/src/SMESH_SWIG/SMESH_hexaedre.py b/src/SMESH_SWIG/SMESH_hexaedre.py deleted file mode 100755 index 1b93e1c08..000000000 --- a/src/SMESH_SWIG/SMESH_hexaedre.py +++ /dev/null @@ -1,148 +0,0 @@ -#============================================================================== -# Info. -# Bug (from script, bug) : hexaedre_modified.py, PAL6194, PAL7153 -# Modified : 25/11/2004 -# Author : Kovaltchuk Alexey -# Project : PAL/SALOME -#============================================================================== - -import salome -from salome import sg - -import geompy - -import math - -# ----------------------------------------------------------------------------- - -geom = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM") -myBuilder = salome.myStudy.NewBuilder() -gg = salome.ImportComponentGUI("GEOM") -from salome import sg - -ShapeTypeCompSolid = 1 -ShapeTypeSolid = 2 -ShapeTypeShell = 3 -ShapeTypeFace = 4 -ShapeTypeWire = 5 -ShapeTypeEdge = 6 -ShapeTypeVertex = 7 - -Boolop_common = 1 -Boolop_cut = 2 -Boolop_fuse = 3 -Boolop_section = 4 - -p0 = geompy.MakeVertex(0., 0., 0.) -px = geompy.MakeVertex(100., 0., 0.) -py = geompy.MakeVertex(0., 100., 0.) -pz = geompy.MakeVertex(0., 0., 100.) -vx = geompy.MakeVector(p0, px) -vy = geompy.MakeVector(p0, py) -vz = geompy.MakeVector(p0, pz) - -sphereExt = geompy.MakeSphere( 0., 0., 0., 400.) -sphereInt = geompy.MakeSphere( 0.,-50., 0., 350.) -sphereA = geompy.MakeSphere( -400., 50., 50., 400.) -sphereB = geompy.MakeSphere( 350.,-50.,-50., 350.) -ptcyle = geompy.MakeVertex(0., -300., -450.) -cylindre = geompy.MakeCylinder(ptcyle,vz,500.,900.) - -vol1=geompy.MakeCut(sphereExt,sphereA) -vol2=geompy.MakeCut(vol1,sphereB) -vol3=geompy.MakeCut(vol2,cylindre) -blob=geompy.MakeCut(vol3,sphereInt) - -idblob = geompy.addToStudy(blob,"blob") - -aretes = [] -aretes = geompy.SubShapeAllSorted(blob, ShapeTypeEdge) -eid=0 - -# ------------------------------- -# --- numerotation des aretes -##for edge in aretes: -## edname="arete%d"%eid -## idedge=geompy.addToStudy(edge,edname) -## eid=eid+1 - -salome.sg.updateObjBrowser(1) - -# --- epaisseur 0 2 8 10 -# --- hauteur 1 3 9 11 -# --- largeur 4 5 6 7 - -# ----------------------------------------------------------------------------- - -print "-------------------------- mesh" - -import SMESH -import StdMeshers -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") -smesh.SetCurrentStudy(salome.myStudy) - -# ---- create Hypothesis -print "-------------------------- create Hypothesis" -numberOfSegments = 4 -hypNbSegA=smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSegA.SetNumberOfSegments(numberOfSegments) -numberOfSegments = 10 -hypNbSegB=smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSegB.SetNumberOfSegments(numberOfSegments) -numberOfSegments = 15 -hypNbSegC=smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSegC.SetNumberOfSegments(numberOfSegments) - -# ---- create Algorithms -print "-------------------------- create Algorithms" -regular1D=smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -quad2D=smesh.CreateHypothesis("Quadrangle_2D", "libStdMeshersEngine.so") -hexa3D=smesh.CreateHypothesis("Hexa_3D", "libStdMeshersEngine.so") - -# ---- init a Mesh with the geom shape -shape_mesh = blob -myMesh=smesh.CreateMesh(shape_mesh) - -# ---- add hypothesis and algorithms to mesh -print "-------------------------- add hypothesis to mesh" -myMesh.AddHypothesis(shape_mesh,regular1D) -myMesh.AddHypothesis(shape_mesh,quad2D) -myMesh.AddHypothesis(shape_mesh,hexa3D) - -#myMesh.AddHypothesis(shape_mesh,hypNbSeg) - -myMesh.AddHypothesis(aretes[0],hypNbSegA) -myMesh.AddHypothesis(aretes[2],hypNbSegA) -myMesh.AddHypothesis(aretes[8],hypNbSegA) -myMesh.AddHypothesis(aretes[10],hypNbSegA) - -myMesh.AddHypothesis(aretes[1],hypNbSegC) -myMesh.AddHypothesis(aretes[3],hypNbSegC) -myMesh.AddHypothesis(aretes[9],hypNbSegC) -myMesh.AddHypothesis(aretes[11],hypNbSegC) - -myMesh.AddHypothesis(aretes[4],hypNbSegB) -myMesh.AddHypothesis(aretes[5],hypNbSegB) -myMesh.AddHypothesis(aretes[6],hypNbSegB) -myMesh.AddHypothesis(aretes[7],hypNbSegB) - -# ---- compute mesh - -print "-------------------------- compute mesh" -ret=smesh.Compute(myMesh, shape_mesh) -print ret -if ret != 0: - #log=myMesh.GetLog(0) # no erase trace - #for linelog in log: - # print linelog - print "Information about the Mesh:" - print "Number of nodes : ", myMesh.NbNodes() - print "Number of edges : ", myMesh.NbEdges() - print "Number of faces : ", myMesh.NbFaces() - print "Number of quadrangles : ", myMesh.NbQuadrangles() - print "Number of volumes : ", myMesh.NbVolumes() - print "Number of hexahedrons : ", myMesh.NbHexas() -else: - print "problem when Computing the mesh" - -salome.sg.updateObjBrowser(1) diff --git a/src/SMESH_SWIG/SMESH_mechanic.py b/src/SMESH_SWIG/SMESH_mechanic.py deleted file mode 100644 index 7c1fdbd22..000000000 --- a/src/SMESH_SWIG/SMESH_mechanic.py +++ /dev/null @@ -1,257 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_withHole.py -# Author : Lucien PIGNOLONI -# Module : SMESH -# $Header$ - -#------------------------------------------------------------------------- - -import salome -import geompy - -import StdMeshers - -# ---------------------------- GEOM -------------------------------------- - -# ---- define contigous arcs and segment to define a closed wire -p1 = geompy.MakeVertex( 100.0, 0.0, 0.0 ) -p2 = geompy.MakeVertex( 50.0, 50.0, 0.0 ) -p3 = geompy.MakeVertex( 100.0, 100.0, 0.0 ) -arc1 = geompy.MakeArc( p1, p2, p3 ) - -p4 = geompy.MakeVertex( 170.0, 100.0, 0.0 ) -seg1 = geompy.MakeVector( p3, p4 ) - -p5 = geompy.MakeVertex( 200.0, 70.0, 0.0 ) -p6 = geompy.MakeVertex( 170.0, 40.0, 0.0 ) -arc2 = geompy.MakeArc( p4, p5, p6 ) - -p7 = geompy.MakeVertex( 120.0, 30.0, 0.0 ) -arc3 = geompy.MakeArc( p6, p7, p1 ) - -# ---- define a closed wire with arcs and segment -List1 = [] -List1.append( arc1 ) -List1.append( seg1 ) -List1.append( arc2 ) -List1.append( arc3 ) - -wire1 = geompy.MakeWire( List1 ) -Id_wire1 = geompy.addToStudy( wire1, "wire1" ) - -# ---- define a planar face with wire -WantPlanarFace = 1 #True -face1 = geompy.MakeFace( wire1, WantPlanarFace ) -Id_face1 = geompy.addToStudy( face1, "face1" ) - -# ---- create a shape by extrusion -pO = geompy.MakeVertex( 0.0, 0.0, 0.0 ) -pz = geompy.MakeVertex( 0.0, 0.0, 100.0 ) -vz = geompy.MakeVector( pO, pz ) - -prism1 = geompy.MakePrismVecH( face1, vz, 100.0 ) -Id_prism1 = geompy.addToStudy( prism1, "prism1" ) - -# ---- create two cylinders -pc1 = geompy.MakeVertex( 90.0, 50.0, -40.0 ) -pc2 = geompy.MakeVertex( 170.0, 70.0, -40.0 ) - -radius = 20.0 -height = 180.0 -cyl1 = geompy.MakeCylinder( pc1, vz, radius, height ) -cyl2 = geompy.MakeCylinder( pc2, vz, radius, height ) - -Id_Cyl1 = geompy.addToStudy( cyl1, "cyl1" ) -Id_Cyl2 = geompy.addToStudy( cyl2, "cyl2" ) - -# ---- cut with cyl1 -shape = geompy.MakeBoolean( prism1, cyl1, 2 ) - -# ---- fuse with cyl2 to obtain the final mechanic piece :) -mechanic = geompy.MakeBoolean( shape, cyl2, 3 ) -Id_mechanic = geompy.addToStudy( mechanic, "mechanic" ) - -# ---- explode on faces -SubFaceL = geompy.SubShapeAllSorted(mechanic, geompy.ShapeType["FACE"]) - -# ---- add a face sub shape in study to be meshed different -sub_face1 = SubFaceL[0] -name = geompy.SubShapeName( sub_face1, mechanic ) - -Id_SubFace1 = geompy.addToStudyInFather( mechanic, sub_face1, name ) - -# ---- add a face sub shape in study to be meshed different -sub_face2 = SubFaceL[4] -name = geompy.SubShapeName( sub_face2, mechanic ) - -Id_SubFace2 = geompy.addToStudyInFather( mechanic, sub_face2, name ) - -# ---- add a face sub shape in study to be meshed different -sub_face3 = SubFaceL[5] -name = geompy.SubShapeName( sub_face3, mechanic ) - -Id_SubFace3 = geompy.addToStudyInFather( mechanic, sub_face3, name ) - -# ---- add a face sub shape in study to be meshed different -sub_face4 = SubFaceL[10] -name = geompy.SubShapeName( sub_face4, mechanic ) - -Id_SubFace4 = geompy.addToStudyInFather( mechanic, sub_face4, name ) - -# ---------------------------- SMESH -------------------------------------- - -# ---- launch SMESH, init a Mesh with shape 'mechanic' - -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") - -# -- Init -- -shape_mesh = salome.IDToObject( Id_mechanic ) -smesh.SetCurrentStudy(salome.myStudy) - -mesh = smesh.CreateMesh(shape_mesh) - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId) - -idmesh = salome.ObjectToID(mesh) -smeshgui.SetName( idmesh, "Mesh_mechanic" ) - -print "-------------------------- NumberOfSegments" - -numberOfSegment = 10 - -hypNbSeg = smesh.CreateHypothesis( "NumberOfSegments", "libStdMeshersEngine.so" ) -hypNbSeg.SetNumberOfSegments( numberOfSegment ) -print hypNbSeg.GetName() -print hypNbSeg.GetId() -print hypNbSeg.GetNumberOfSegments() - -smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10") - -print "-------------------------- MaxElementArea" - -maxElementArea = 25 - -hypArea25 = smesh.CreateHypothesis( "MaxElementArea", "libStdMeshersEngine.so" ) -hypArea25.SetMaxElementArea( maxElementArea ) -print hypArea25.GetName() -print hypArea25.GetId() -print hypArea25.GetMaxElementArea() - -smeshgui.SetName(salome.ObjectToID(hypArea25), "MaxElementArea_25") - -print "-------------------------- MaxElementArea" - -maxElementArea = 35 - -hypArea35 = smesh.CreateHypothesis( "MaxElementArea", "libStdMeshersEngine.so" ) -hypArea35.SetMaxElementArea( maxElementArea ) -print hypArea35.GetName() -print hypArea35.GetId() -print hypArea35.GetMaxElementArea() - -smeshgui.SetName(salome.ObjectToID(hypArea35), "MaxElementArea_35") - -print "-------------------------- Regular_1D" - -algoReg1D = smesh.CreateHypothesis( "Regular_1D", "libStdMeshersEngine.so" ) -listHyp = algoReg1D.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoReg1D.GetName() -print algoReg1D.GetId() - -smeshgui.SetName(salome.ObjectToID(algoReg1D), "Regular_1D") - -print "-------------------------- MEFISTO_2D" - -algoMef = smesh.CreateHypothesis( "MEFISTO_2D", "libStdMeshersEngine.so" ) -listHyp = algoMef.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoMef.GetName() -print algoMef.GetId() - -smeshgui.SetName(salome.ObjectToID(algoMef), "MEFISTO_2D") - -print "-------------------------- SMESH_Quadrangle_2D" - -algoQuad = smesh.CreateHypothesis( "Quadrangle_2D", "libStdMeshersEngine.so" ) -listHyp = algoQuad.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoQuad.GetName() -print algoQuad.GetId() - -smeshgui.SetName(salome.ObjectToID(algoQuad), "SMESH_Quadrangle_2D") - -print "-------------------------- add hypothesis to main shape" - -mesh.AddHypothesis( shape_mesh, hypNbSeg ) # nb segments -mesh.AddHypothesis( shape_mesh, hypArea25 ) # max area - -mesh.AddHypothesis( shape_mesh, algoReg1D ) # Regular 1D/wire discretisation -mesh.AddHypothesis( shape_mesh, algoMef ) # MEFISTO 2D - -print "-------------------------- add hypothesis and algorithm to sub face 1" - -submesh = mesh.GetSubMesh(sub_face1, "SubMeshFace1") - -mesh.AddHypothesis( sub_face1, algoQuad ) # Quadrangle 2D -mesh.AddHypothesis( sub_face1, hypArea35 ) # max area - -print "-------------------------- add hypothesis and algorithm to sub face 2" - -submesh = mesh.GetSubMesh(sub_face2, "SubMeshFace2") - -mesh.AddHypothesis( sub_face2, algoQuad ) # Quadrangle 2D -mesh.AddHypothesis( sub_face2, hypArea35 ) # max area - -print "-------------------------- add hypothesis and algorith to sub face 3" - -submesh = mesh.GetSubMesh(sub_face3, "SubMeshFace3") - -mesh.AddHypothesis( sub_face3, algoQuad ) # Quadrangle 2D -mesh.AddHypothesis( sub_face3, hypArea35 ) # max area - -print "-------------------------- add hypothesis and algorith to sub face 4" - -submesh = mesh.GetSubMesh(sub_face4, "SubMeshFace4") - -mesh.AddHypothesis( sub_face4, algoQuad ) # Quadrangle 2D -mesh.AddHypothesis( sub_face4, hypArea35 ) # max area - -print "-------------------------- compute the mesh of the mechanic piece" - -smesh.Compute(mesh, shape_mesh) - -print "Information about the Mesh_mechanic:" -print "Number of nodes : ", mesh.NbNodes() -print "Number of edges : ", mesh.NbEdges() -print "Number of faces : ", mesh.NbFaces() -print "Number of triangles : ", mesh.NbTriangles() -print "Number of quadrangles : ", mesh.NbQuadrangles() -print "Number of volumes : ", mesh.NbVolumes() -print "Number of tetrahedrons: ", mesh.NbTetras() - -salome.sg.updateObjBrowser(1) diff --git a/src/SMESH_SWIG/SMESH_mechanic_editor.py b/src/SMESH_SWIG/SMESH_mechanic_editor.py deleted file mode 100644 index 596786ed9..000000000 --- a/src/SMESH_SWIG/SMESH_mechanic_editor.py +++ /dev/null @@ -1,308 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_withHole.py -# Author : Lucien PIGNOLONI -# Module : SMESH -# $Header$ - -#------------------------------------------------------------------------- - -import salome -import geompy - -import StdMeshers - -import SMESH - -# ---------------------------- GEOM -------------------------------------- - -# ---- define contigous arcs and segment to define a closed wire -p1 = geompy.MakeVertex( 100.0, 0.0, 0.0 ) -p2 = geompy.MakeVertex( 50.0, 50.0, 0.0 ) -p3 = geompy.MakeVertex( 100.0, 100.0, 0.0 ) -arc1 = geompy.MakeArc( p1, p2, p3 ) - -p4 = geompy.MakeVertex( 170.0, 100.0, 0.0 ) -seg1 = geompy.MakeVector( p3, p4 ) - -p5 = geompy.MakeVertex( 200.0, 70.0, 0.0 ) -p6 = geompy.MakeVertex( 170.0, 40.0, 0.0 ) -arc2 = geompy.MakeArc( p4, p5, p6 ) - -p7 = geompy.MakeVertex( 120.0, 30.0, 0.0 ) -arc3 = geompy.MakeArc( p6, p7, p1 ) - -# ---- define a closed wire with arcs and segment -List1 = [] -List1.append( arc1 ) -List1.append( seg1 ) -List1.append( arc2 ) -List1.append( arc3 ) - -wire1 = geompy.MakeWire( List1 ) -Id_wire1 = geompy.addToStudy( wire1, "wire1" ) - -# ---- define a planar face with wire -WantPlanarFace = 1 #True -face1 = geompy.MakeFace( wire1, WantPlanarFace ) -Id_face1 = geompy.addToStudy( face1, "face1" ) - -# ---- create a shape by extrusion -pO = geompy.MakeVertex( 0.0, 0.0, 0.0 ) -pz = geompy.MakeVertex( 0.0, 0.0, 100.0 ) -vz = geompy.MakeVector( pO, pz ) - -prism1 = geompy.MakePrismVecH( face1, vz, 100.0 ) -Id_prism1 = geompy.addToStudy( prism1, "prism1" ) - -# ---- create two cylinders -pc1 = geompy.MakeVertex( 90.0, 50.0, -40.0 ) -pc2 = geompy.MakeVertex( 170.0, 70.0, -40.0 ) - -radius = 20.0 -height = 180.0 -cyl1 = geompy.MakeCylinder( pc1, vz, radius, height ) -cyl2 = geompy.MakeCylinder( pc2, vz, radius, height ) - -Id_Cyl1 = geompy.addToStudy( cyl1, "cyl1" ) -Id_Cyl2 = geompy.addToStudy( cyl2, "cyl2" ) - -# ---- cut with cyl1 -shape = geompy.MakeBoolean( prism1, cyl1, 2 ) - -# ---- fuse with cyl2 to obtain the final mechanic piece :) -mechanic = geompy.MakeBoolean( shape, cyl2, 3 ) -Id_mechanic = geompy.addToStudy( mechanic, "mechanic" ) - -# ---- explode on faces -SubFaceL = geompy.SubShapeAllSorted(mechanic, geompy.ShapeType["FACE"]) - -# ---- add a face sub shape in study to be meshed different -sub_face1 = SubFaceL[0] -name = geompy.SubShapeName( sub_face1, mechanic ) - -Id_SubFace1 = geompy.addToStudyInFather( mechanic, sub_face1, name ) - -# ---- add a face sub shape in study to be meshed different -sub_face2 = SubFaceL[4] -name = geompy.SubShapeName( sub_face2, mechanic ) - -Id_SubFace2 = geompy.addToStudyInFather( mechanic, sub_face2, name ) - -# ---- add a face sub shape in study to be meshed different -sub_face3 = SubFaceL[5] -name = geompy.SubShapeName( sub_face3, mechanic ) - -Id_SubFace3 = geompy.addToStudyInFather( mechanic, sub_face3, name ) - -# ---- add a face sub shape in study to be meshed different -sub_face4 = SubFaceL[10] -name = geompy.SubShapeName( sub_face4, mechanic ) - -Id_SubFace4 = geompy.addToStudyInFather( mechanic, sub_face4, name ) - -# ---------------------------- SMESH -------------------------------------- - -# ---- launch SMESH, init a Mesh with shape 'mechanic' - -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") - -# -- Init -- -shape_mesh = salome.IDToObject( Id_mechanic ) -smesh.SetCurrentStudy(salome.myStudy) - -mesh = smesh.CreateMesh(shape_mesh) - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId) - -idmesh = salome.ObjectToID(mesh) -smeshgui.SetName( idmesh, "Mesh_mechanic" ) - -print "-------------------------- NumberOfSegments" - -numberOfSegment = 10 - -hypNbSeg = smesh.CreateHypothesis( "NumberOfSegments", "libStdMeshersEngine.so" ) -hypNbSeg.SetNumberOfSegments( numberOfSegment ) -print hypNbSeg.GetName() -print hypNbSeg.GetId() -print hypNbSeg.GetNumberOfSegments() - -smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10") - -print "-------------------------- MaxElementArea" - -maxElementArea = 25 - -hypArea25 = smesh.CreateHypothesis( "MaxElementArea", "libStdMeshersEngine.so" ) -hypArea25.SetMaxElementArea( maxElementArea ) -print hypArea25.GetName() -print hypArea25.GetId() -print hypArea25.GetMaxElementArea() - -smeshgui.SetName(salome.ObjectToID(hypArea25), "MaxElementArea_25") - -print "-------------------------- MaxElementArea" - -maxElementArea = 35 - -hypArea35 = smesh.CreateHypothesis( "MaxElementArea", "libStdMeshersEngine.so" ) -hypArea35.SetMaxElementArea( maxElementArea ) -print hypArea35.GetName() -print hypArea35.GetId() -print hypArea35.GetMaxElementArea() - -smeshgui.SetName(salome.ObjectToID(hypArea35), "MaxElementArea_35") - -print "-------------------------- Regular_1D" - -algoReg1D = smesh.CreateHypothesis( "Regular_1D", "libStdMeshersEngine.so" ) -listHyp = algoReg1D.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoReg1D.GetName() -print algoReg1D.GetId() - -smeshgui.SetName(salome.ObjectToID(algoReg1D), "Regular_1D") - -print "-------------------------- MEFISTO_2D" - -algoMef = smesh.CreateHypothesis( "MEFISTO_2D", "libStdMeshersEngine.so" ) -listHyp = algoMef.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoMef.GetName() -print algoMef.GetId() - -smeshgui.SetName(salome.ObjectToID(algoMef), "MEFISTO_2D") - -print "-------------------------- SMESH_Quadrangle_2D" - -algoQuad = smesh.CreateHypothesis( "Quadrangle_2D", "libStdMeshersEngine.so" ) -listHyp = algoQuad.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoQuad.GetName() -print algoQuad.GetId() - -smeshgui.SetName(salome.ObjectToID(algoQuad), "SMESH_Quadrangle_2D") - -print "-------------------------- add hypothesis to main shape" - -mesh.AddHypothesis( shape_mesh, hypNbSeg ) # nb segments -mesh.AddHypothesis( shape_mesh, hypArea25 ) # max area - -mesh.AddHypothesis( shape_mesh, algoReg1D ) # Regular 1D/wire discretisation -mesh.AddHypothesis( shape_mesh, algoMef ) # MEFISTO 2D - -print "-------------------------- add hypothesis and algorithm to sub face 1" - -submesh = mesh.GetSubMesh(sub_face1, "SubMeshFace1") - -mesh.AddHypothesis( sub_face1, algoQuad ) # Quadrangle 2D -mesh.AddHypothesis( sub_face1, hypArea35 ) # max area - -print "-------------------------- add hypothesis and algorithm to sub face 2" - -submesh = mesh.GetSubMesh(sub_face2, "SubMeshFace2") - -mesh.AddHypothesis( sub_face2, algoQuad ) # Quadrangle 2D -mesh.AddHypothesis( sub_face2, hypArea35 ) # max area - -print "-------------------------- add hypothesis and algorith to sub face 3" - -submesh = mesh.GetSubMesh(sub_face3, "SubMeshFace3") - -mesh.AddHypothesis( sub_face3, algoQuad ) # Quadrangle 2D -mesh.AddHypothesis( sub_face3, hypArea35 ) # max area - -print "-------------------------- add hypothesis and algorith to sub face 4" - -submesh = mesh.GetSubMesh(sub_face4, "SubMeshFace4") - -mesh.AddHypothesis( sub_face4, algoQuad ) # Quadrangle 2D -mesh.AddHypothesis( sub_face4, hypArea35 ) # max area - -print "-------------------------- compute the mesh of the mechanic piece" - -smesh.Compute(mesh, shape_mesh) - -print "Information about the Mesh_mechanic:" -print "Number of nodes : ", mesh.NbNodes() -print "Number of edges : ", mesh.NbEdges() -print "Number of faces : ", mesh.NbFaces() -print "Number of triangles : ", mesh.NbTriangles() -print "Number of quadrangles : ", mesh.NbQuadrangles() -print "Number of volumes : ", mesh.NbVolumes() -print "Number of tetrahedrons: ", mesh.NbTetras() - - -MeshEditor = mesh.GetMeshEditor() - -#1 cutting of quadrangles of the 'SubMeshFace2' submesh -submesh = mesh.GetSubMesh(sub_face2, "SubMeshFace2") -MeshEditor.SplitQuadObject(submesh, 1) - -#2 cutting of triangles of the group -FacesTriToQuad = [2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422] -GroupTriToQuad = mesh.CreateGroup(SMESH.FACE,"Group of faces (quad)") -GroupTriToQuad.Add(FacesTriToQuad) -MeshEditor.TriToQuadObject(GroupTriToQuad, None , 1.57) - -#3 extrusion of the group -point = SMESH.PointStruct(0, 0, 5) -vector = SMESH.DirStruct(point) -MeshEditor.ExtrusionSweepObject(GroupTriToQuad, vector, 5) - -#4 mirror object -MeshEditor.MirrorObject(mesh, SMESH.AxisStruct(0, 0, 0, 0, 0, 0), SMESH.SMESH_MeshEditor.POINT, 0) - -#5 mesh translation -point = SMESH.PointStruct(10, 10, 10) -vector = SMESH.DirStruct(point) -MeshEditor.TranslateObject(mesh, vector, 0) - -#6 mesh rotation -axisXYZ = SMESH.AxisStruct(0, 0, 0, 10, 10, 10) -angle180 = 180*3.141/180 -MeshEditor.RotateObject(mesh, axisXYZ, angle180, 0) - -#7 group smoothing -FacesSmooth = [864, 933, 941, 950, 1005, 1013] -GroupSmooth = mesh.CreateGroup(SMESH.FACE,"Group of faces (smooth)") -GroupSmooth.Add(FacesSmooth) -MeshEditor.SmoothObject(GroupSmooth, [], 20, 2, SMESH.SMESH_MeshEditor.CENTROIDAL_SMOOTH) - -#8 rotation sweep object -FacesRotate = [492, 493, 502, 503] -GroupRotate = mesh.CreateGroup(SMESH.FACE,"Group of faces (rotate)") -GroupRotate.Add(FacesRotate) -angle45 = 45*3.141/180 -axisXYZ = SMESH.AxisStruct(-38.3128, -73.3658, -133.321, -13.3402, -13.3265, 6.66632) -MeshEditor.RotationSweepObject(GroupRotate, axisXYZ, angle45, 4, 1e-5) - -#9 reorientation of the whole mesh -submesh = mesh.GetSubMesh(sub_face1, "SubMeshFace1") -MeshEditor.ReorientObject(submesh) - -salome.sg.updateObjBrowser(1) diff --git a/src/SMESH_SWIG/SMESH_mechanic_tetra.py b/src/SMESH_SWIG/SMESH_mechanic_tetra.py deleted file mode 100644 index eee3f87d8..000000000 --- a/src/SMESH_SWIG/SMESH_mechanic_tetra.py +++ /dev/null @@ -1,212 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_withHole.py -# Author : Lucien PIGNOLONI -# Module : SMESH -# $Header$ - -import salome -import geompy - -geom = geompy.geom -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") -smesh.SetCurrentStudy(salome.myStudy) - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId) - -import StdMeshers -import NETGENPlugin - -# ---------------------------- GEOM -------------------------------------- - -# ---- define contigous arcs and segment to define a closed wire -p1 = geompy.MakeVertex( 100.0, 0.0, 0.0 ) -p2 = geompy.MakeVertex( 50.0, 50.0, 0.0 ) -p3 = geompy.MakeVertex( 100.0, 100.0, 0.0 ) -arc1 = geompy.MakeArc( p1, p2, p3 ) - -p4 = geompy.MakeVertex( 170.0, 100.0, 0.0 ) -seg1 = geompy.MakeVector( p3, p4 ) - -p5 = geompy.MakeVertex( 200.0, 70.0, 0.0 ) -p6 = geompy.MakeVertex( 170.0, 40.0, 0.0 ) -arc2 = geompy.MakeArc( p4, p5, p6 ) - -p7 = geompy.MakeVertex( 120.0, 30.0, 0.0 ) -arc3 = geompy.MakeArc( p6, p7, p1 ) - -# ---- define a closed wire with arcs and segment -List1 = [] -List1.append( arc1 ) -List1.append( seg1 ) -List1.append( arc2 ) -List1.append( arc3 ) - -wire1 = geompy.MakeWire( List1 ) -Id_wire1 = geompy.addToStudy( wire1, "wire1" ) - -# ---- define a planar face with wire -WantPlanarFace = 1 #True -face1 = geompy.MakeFace( wire1, WantPlanarFace ) -Id_face1 = geompy.addToStudy( face1, "face1" ) - -# ---- create a shape by extrusion -pO = geompy.MakeVertex( 0.0, 0.0, 0.0 ) -pz = geompy.MakeVertex( 0.0, 0.0, 100.0 ) -vz = geompy.MakeVector( pO, pz ) - -prism1 = geompy.MakePrismVecH( face1, vz, 100.0 ) -Id_prism1 = geompy.addToStudy( prism1, "prism1") - -# ---- create two cylinders - -pc1 = geompy.MakeVertex( 90.0, 50.0, -40.0 ) -pc2 = geompy.MakeVertex( 170.0, 70.0, -40.0 ) -radius = 20.0 -height = 180.0 -cyl1 = geompy.MakeCylinder( pc1, vz, radius, height ) -cyl2 = geompy.MakeCylinder( pc2, vz, radius, height ) - -Id_Cyl1 = geompy.addToStudy( cyl1, "cyl1" ) -Id_Cyl2 = geompy.addToStudy( cyl2, "cyl2" ) - -# ---- cut with cyl1 -shape = geompy.MakeBoolean( prism1, cyl1, 2 ) - -# ---- fuse with cyl2 to obtain the final mechanic piece :) -mechanic = geompy.MakeBoolean( shape, cyl2, 3 ) -Id_mechanic = geompy.addToStudy( mechanic, "mechanic" ) - -# ---- Analysis of the geometry - -print "Analysis of the geometry mechanic :" - -subShellList = geompy.SubShapeAll(mechanic,geompy.ShapeType["SHELL"]) -subFaceList = geompy.SubShapeAll(mechanic,geompy.ShapeType["FACE"]) -subEdgeList = geompy.SubShapeAll(mechanic,geompy.ShapeType["EDGE"]) - -print "number of Shells in mechanic : ",len(subShellList) -print "number of Faces in mechanic : ",len(subFaceList) -print "number of Edges in mechanic : ",len(subEdgeList) - -### ---------------------------- SMESH -------------------------------------- - -print "-------------------------- NumberOfSegments" - -numberOfSegment = 10 - -hypNbSeg = smesh.CreateHypothesis( "NumberOfSegments", "libStdMeshersEngine.so" ) -hypNbSeg.SetNumberOfSegments( numberOfSegment ) -print hypNbSeg.GetName() -print hypNbSeg.GetId() -print hypNbSeg.GetNumberOfSegments() - -smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10") - -print "-------------------------- MaxElementArea" - -maxElementArea = 20 - -hypArea = smesh.CreateHypothesis( "MaxElementArea", "libStdMeshersEngine.so" ) -hypArea.SetMaxElementArea( maxElementArea ) -print hypArea.GetName() -print hypArea.GetId() -print hypArea.GetMaxElementArea() - -smeshgui.SetName(salome.ObjectToID(hypArea), "MaxElementArea_20") - -print "-------------------------- MaxElementVolume" - -maxElementVolume = 20 - -hypVolume = smesh.CreateHypothesis( "MaxElementVolume", "libStdMeshersEngine.so" ) -hypVolume.SetMaxElementVolume( maxElementVolume ) -print hypVolume.GetName() -print hypVolume.GetId() -print hypVolume.GetMaxElementVolume() - -smeshgui.SetName(salome.ObjectToID(hypVolume), "MaxElementVolume_20") - -print "-------------------------- Regular_1D" - -algoReg1D = smesh.CreateHypothesis( "Regular_1D", "libStdMeshersEngine.so" ) -listHyp =algoReg1D.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoReg1D.GetName() -print algoReg1D.GetId() - -smeshgui.SetName(salome.ObjectToID(algoReg1D), "Regular_1D") - -print "-------------------------- MEFISTO_2D" - -algoMef = smesh.CreateHypothesis( "MEFISTO_2D", "libStdMeshersEngine.so" ) -listHyp = algoMef.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoMef.GetName() -print algoMef.GetId() - -smeshgui.SetName(salome.ObjectToID(algoMef), "MEFISTO_2D") - -print "-------------------------- NETGEN_3D" - -algoNg = smesh.CreateHypothesis( "NETGEN_3D", "libNETGENEngine.so" ) -listHyp = algoNg.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoNg.GetName() -print algoNg.GetId() - -smeshgui.SetName(salome.ObjectToID(algoNg), "NETGEN_3D") - -print "-------------------------- add hypothesis to main mechanic" - -shape_mesh = salome.IDToObject( Id_mechanic ) - -mesh = smesh.CreateMesh(shape_mesh) - -idmesh = salome.ObjectToID(mesh) -smeshgui.SetName( idmesh, "Mesh_mechanic_tetra" ) - -mesh.AddHypothesis( shape_mesh, hypNbSeg ) # nb segments -mesh.AddHypothesis( shape_mesh, hypArea ) # max area -mesh.AddHypothesis( shape_mesh, hypVolume ) # max volume - -mesh.AddHypothesis( shape_mesh, algoReg1D ) # Regular 1D/wire discretisation -mesh.AddHypothesis( shape_mesh, algoMef ) # MEFISTO 2D -mesh.AddHypothesis( shape_mesh, algoNg ) # NETGEN 3D - -print "-------------------------- compute the mesh of the mechanic piece" -smesh.Compute(mesh,shape_mesh) - -print "Information about the Mesh_mechanic_tetra:" -print "Number of nodes : ", mesh.NbNodes() -print "Number of edges : ", mesh.NbEdges() -print "Number of faces : ", mesh.NbFaces() -print "Number of triangles : ", mesh.NbTriangles() -print "Number of quadrangles: ", mesh.NbQuadrangles() -print "Number of volumes : ", mesh.NbVolumes() -print "Number of tetrahedrons: ", mesh.NbTetras() - -salome.sg.updateObjBrowser(1) diff --git a/src/SMESH_SWIG/SMESH_reg.py b/src/SMESH_SWIG/SMESH_reg.py deleted file mode 100644 index 8235deb6f..000000000 --- a/src/SMESH_SWIG/SMESH_reg.py +++ /dev/null @@ -1,181 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_reg.py -# Module : SMESH - -import salome -import geompy - -import StdMeshers - -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") -smesh.SetCurrentStudy(salome.myStudy) - -# ---- define a box -print "Define box" -box = geompy.MakeBox(0., 0., 0., 100., 200., 300.) -idbox = geompy.addToStudy(box, "box") - -# ---- add faces of box to study -print "Add faces to study" -idface = [] -subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"]) -for f in subShapeList: - name = geompy.SubShapeName(f, box) - print name - idface.append( geompy.addToStudyInFather(box, f, name) ) - -# ---- add edges of box to study -print "Add edges to study" -idedge = [] -subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["EDGE"]) -for f in subShapeList: - name = geompy.SubShapeName(f, box) - print name - idedge.append( geompy.addToStudyInFather(box, f, name) ) - -salome.sg.updateObjBrowser(1); - -# ---- launch SMESH -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId) - - -print "-------------------------- create Hypothesis" - -print "-------------------------- LocalLength" -hypLen1 = smesh.CreateHypothesis("LocalLength", "libStdMeshersEngine.so") -hypLen1.SetLength(100) -print hypLen1.GetName() -print hypLen1.GetId() -print hypLen1.GetLength() - -idlength = salome.ObjectToID(hypLen1) -smeshgui.SetName(idlength, "Local_Length_100"); - -hypNbSeg = [] -print "-------------------------- NumberOfSegments" -hypNbSeg1 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSeg1.SetDistrType(0) -hypNbSeg1.SetNumberOfSegments(7) -print hypNbSeg1.GetName() -print hypNbSeg1.GetId() -print hypNbSeg1.GetNumberOfSegments() -idseg1 = salome.ObjectToID(hypNbSeg1) -smeshgui.SetName(idseg1, "NumberOfSegmentsReg"); -hypNbSeg.append(hypNbSeg1) - -hypNbSeg2 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSeg2.SetDistrType(1) -hypNbSeg2.SetNumberOfSegments(7) -hypNbSeg2.SetScaleFactor(2) -print hypNbSeg2.GetName() -print hypNbSeg2.GetId() -print hypNbSeg2.GetNumberOfSegments() -idseg2 = salome.ObjectToID(hypNbSeg2) -smeshgui.SetName(idseg2, "NumberOfSegmentsScale"); -hypNbSeg.append(hypNbSeg2) - -hypNbSeg3 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSeg3.SetDistrType(2) -hypNbSeg3.SetNumberOfSegments(7) -hypNbSeg3.SetTableFunction( [0.25, 0.5, 0.5, 0.25] ) -print hypNbSeg3.GetName() -print hypNbSeg3.GetId() -print hypNbSeg3.GetNumberOfSegments() -idseg3 = salome.ObjectToID(hypNbSeg3) -smeshgui.SetName(idseg3, "NumberOfSegmentsTable"); -hypNbSeg.append(hypNbSeg3) - -hypNbSeg4 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSeg4.SetDistrType(3) -hypNbSeg4.SetNumberOfSegments(7) -hypNbSeg4.SetExpressionFunction("sin(t)") -print hypNbSeg4.GetName() -print hypNbSeg4.GetId() -print hypNbSeg4.GetNumberOfSegments() -idseg4 = salome.ObjectToID(hypNbSeg4) -smeshgui.SetName(idseg4, "NumberOfSegmentsExpr"); -hypNbSeg.append(hypNbSeg4) - -print "-------------------------- MaxElementArea" -hypArea1 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hypArea1.SetMaxElementArea(2500) -print hypArea1.GetName() -print hypArea1.GetId() -print hypArea1.GetMaxElementArea() - -idarea1 = salome.ObjectToID(hypArea1) -smeshgui.SetName(idarea1, "MaxElementArea_2500"); - -print "-------------------------- MaxElementArea" -hypArea2 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hypArea2.SetMaxElementArea(500) -print hypArea2.GetName() -print hypArea2.GetId() -print hypArea2.GetMaxElementArea() - -idarea2 = salome.ObjectToID(hypArea2) -smeshgui.SetName(idarea2, "MaxElementArea_500"); - -print "-------------------------- Regular_1D" -algoReg = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -listHyp = algoReg.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoReg.GetName() -print algoReg.GetId() - -idreg = salome.ObjectToID(algoReg) -smeshgui.SetName(idreg, "Regular_1D"); - -print "-------------------------- MEFISTO_2D" -algoMef = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so") -listHyp = algoMef.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoMef.GetName() -print algoMef.GetId() - -idmef = salome.ObjectToID(algoMef) -smeshgui.SetName(idmef, "MEFISTO_2D"); - -salome.sg.updateObjBrowser(1); - -# ---- Init a Mesh with the box - -box = salome.IDToObject(idbox) -names = [ "MeshBoxReg", "MeshBoxScale", "MeshBoxTable", "MeshBoxExpr" ]; -j = 0 -for i in range(4): - mesh = smesh.CreateMesh(box) - idmesh = salome.ObjectToID(mesh) - smeshgui.SetName(idmesh, names[j]); - print "-------------------------- add hypothesis to box" - mesh.AddHypothesis(box,algoReg) - mesh.AddHypothesis(box,hypNbSeg[j]) - mesh.AddHypothesis(box,algoMef) - mesh.AddHypothesis(box,hypArea1) - j=j+1 - -salome.sg.updateObjBrowser(1); - diff --git a/src/SMESH_SWIG/SMESH_shared_modules.py b/src/SMESH_SWIG/SMESH_shared_modules.py deleted file mode 100644 index e40362fff..000000000 --- a/src/SMESH_SWIG/SMESH_shared_modules.py +++ /dev/null @@ -1,19 +0,0 @@ -""" - -""" - -# force SMESH importation at interpretor initialization -# see salome_shared_modules.py -# (avoids incomplete import at run time) - -print "============== import SMESH =======================" - -import SMESH - -# this function is required - -def init_shared_modules(): - """ - This function initializes shared modules that need to be - """ - pass diff --git a/src/SMESH_SWIG/SMESH_test.py b/src/SMESH_SWIG/SMESH_test.py deleted file mode 100644 index 8e484a4b3..000000000 --- a/src/SMESH_SWIG/SMESH_test.py +++ /dev/null @@ -1,200 +0,0 @@ -# SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -# -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_test.py -# Module : SMESH - -import salome -import geompy -import smesh - -import SMESH -import StdMeshers - -# ---- define a box - -box = geompy.MakeBox(0., 0., 0., 100., 200., 300.) -idb = geompy.addToStudy(box, "box") - -# ---- add first face of box in study - -subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"]) -face = subShapeList[0] -name = geompy.SubShapeName(face, box) -idf = geompy.addToStudyInFather(box, face, name) - -# ---- add shell from box in study - -subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"]) -shell = subShellList[0] -name = geompy.SubShapeName(shell, box) -ids = geompy.addToStudyInFather(box, shell, name) - -# ---- add first edge of face in study - -edgeList = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"]) -edge = edgeList[0]; -name = geompy.SubShapeName(edge, face) -ide = geompy.addToStudyInFather(face, edge, name) - -# ---- launch SMESH, init a Mesh with the box - -gen = smesh.smesh() -mesh = gen.CreateMesh(idb) - -print "-------------------------- create Hypothesis" - -print "-------------------------- LocalLength" - -hypo1 = gen.CreateHypothesis("LocalLength", "libStdMeshersEngine.so") -print hypo1.GetName() -print hypo1.GetId() -print hypo1.GetLength() -hypo1.SetLength(100) -print hypo1.GetLength() - -print "-------------------------- bidon" - -hyp3 = gen.CreateHypothesis("bidon", "") - -print "-------------------------- NumberOfSegments" - -hypo3 = gen.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypo3.SetNumberOfSegments(7) -print hypo3.GetName() -print hypo3.GetNumberOfSegments() -print hypo3.GetId() - -print "-------------------------- MaxElementArea" - -hypo4 = gen.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hypo4.SetMaxElementArea(5000) -print hypo4.GetName() -print hypo4.GetMaxElementArea() -print hypo4.GetId() - -print "-------------------------- Regular_1D" - -algo_1 = gen.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -print algo_1.GetName() -print algo_1.GetId() -listHyp = algo_1.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algo_1.GetId() - -print "-------------------------- MEFISTO_2D" - -algo_2 = gen.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so") -print algo_2.GetName() -print algo_2.GetId() -listHyp = algo_2.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algo_2.GetId() - -print "-------------------------- add hypothesis to edge" - -edge = salome.IDToObject(ide) -submesh = mesh.GetSubMesh(edge, "SubMeshEdge") -ret = mesh.AddHypothesis(edge,algo_1) -print ret -ret = mesh.AddHypothesis(edge,hypo1) -print ret - -##print "-------------------------- compute edge" -##ret=gen.Compute(mesh,ide) -##print ret -##log=mesh.GetLog(1); -##for a in log: -## print a - -print "-------------------------- add hypothesis to box" - -box = salome.IDToObject(idb) -submesh = mesh.GetSubMesh(box, "SubMeshBox") -ret = mesh.AddHypothesis(box,algo_1) -print ret -ret = mesh.AddHypothesis(box,hypo1) -print ret -ret = mesh.AddHypothesis(box,algo_2) -print ret -ret = mesh.AddHypothesis(box,hypo4) -print ret - -print "-------------------------- compute face" - -ret = gen.Compute(mesh,idf) -print ret -log = mesh.GetLog(0) # 0 - GetLog without ClearLog after, else if 1 - ClearLog after -for a in log: - print "-------" - ii = 0 - ir = 0 - comType = a.commandType - if comType == 0: - for i in range(a.number): - ind = a.indexes[ii] - ii = ii+1 - r1 = a.coords[ir] - ir = ir+1 - r2 = a.coords[ir] - ir = ir+1 - r3 = a.coords[ir] - ir = ir+1 - print "AddNode %i - %g %g %g" % (ind, r1, r2, r3) - elif comType == 1: - for i in range(a.number): - ind = a.indexes[ii] - ii = ii+1 - i1 = a.indexes[ii] - ii = ii+1 - i2 = a.indexes[ii] - ii = ii+1 - print "AddEdge %i - %i %i" % (ind, i1, i2) - elif comType == 2: - for i in range(a.number): - ind = a.indexes[ii] - ii = ii+1 - i1 = a.indexes[ii] - ii = ii+1 - i2 = a.indexes[ii] - ii = ii+1 - i3 = a.indexes[ii] - ii = ii+1 - print "AddTriangle %i - %i %i %i" % (ind, i1, i2, i3) - -##print "-------------------------- compute box" -##ret=gen.Compute(mesh,idb) -##print ret -##log=mesh.GetLog(1); -##print log - -##shell=salome.IDToObject(ids) -##submesh=mesh.GetElementsOnShape(shell) -##ret=mesh.AddHypothesis(shell,algo_1) -##print ret -##ret=mesh.AddHypothesis(shell,hypo1) -##print ret -##ret=gen.Compute(mesh,ids) -##print ret diff --git a/src/SMESH_SWIG/SMESH_test0.py b/src/SMESH_SWIG/SMESH_test0.py deleted file mode 100644 index a7a5282a5..000000000 --- a/src/SMESH_SWIG/SMESH_test0.py +++ /dev/null @@ -1,63 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_test0.py -# Module : SMESH - -import salome -import geompy -from geompy import geom -from geompy import gg - -import SMESH - -myBuilder = salome.myStudy.NewBuilder() - -# ---- define a box - -box = geompy.MakeBox(0., 0., 0., 100., 200., 300.) -idbox = geompy.addToStudy(box, "box") - -# ---- add first face of box in study - -subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"]) -face = subShapeList[0] -name = geompy.SubShapeName(face, box) -print name -idface = geompy.addToStudyInFather(box, face, name) - -# ---- add shell from box in study - -subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"]) -shell = subShellList[0] -name = geompy.SubShapeName(shell, box) -print name -idshell = geompy.addToStudyInFather(box, shell, name) - -# ---- add first edge of face in study - -edgeList = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"]) -edge = edgeList[0] -name = geompy.SubShapeName(edge, face) -print name -idedge = geompy.addToStudyInFather(face, edge, name) - -salome.sg.updateObjBrowser(1) diff --git a/src/SMESH_SWIG/SMESH_test1.py b/src/SMESH_SWIG/SMESH_test1.py deleted file mode 100644 index c0b04299a..000000000 --- a/src/SMESH_SWIG/SMESH_test1.py +++ /dev/null @@ -1,157 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_test1.py -# Module : SMESH - -import salome -import geompy - -import StdMeshers - -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") -smesh.SetCurrentStudy(salome.myStudy) - -# ---- define a box - -box = geompy.MakeBox(0., 0., 0., 100., 200., 300.) -idbox = geompy.addToStudy(box, "box") - -# ---- add first face of box in study - -subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"]) -face = subShapeList[0] -name = geompy.SubShapeName(face, box) -print name -idface = geompy.addToStudyInFather(box, face, name) - -# ---- add shell from box in study - -subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"]) -shell = subShellList[0] -name = geompy.SubShapeName(shell, box) -print name -idshell = geompy.addToStudyInFather(box, shell, name) - -# ---- add first edge of face in study - -edgeList = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"]) -edge = edgeList[0] -name = geompy.SubShapeName(edge, face) -print name -idedge = geompy.addToStudyInFather(face, edge, name) - -# ---- launch SMESH - -smeshgui = salome.ImportComponentGUI("SMESH") -smeshgui.Init(salome.myStudyId) - -print "-------------------------- create Hypothesis" - -print "-------------------------- LocalLength" -hypLen1 = smesh.CreateHypothesis("LocalLength", "libStdMeshersEngine.so") -hypLen1.SetLength(100) -print hypLen1.GetName() -print hypLen1.GetId() -print hypLen1.GetLength() - -idlength = salome.ObjectToID(hypLen1) -smeshgui.SetName(idlength, "Local_Length_100"); - -print "-------------------------- NumberOfSegments" -hypNbSeg1 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hypNbSeg1.SetNumberOfSegments(7) -print hypNbSeg1.GetName() -print hypNbSeg1.GetId() -print hypNbSeg1.GetNumberOfSegments() - -idseg = salome.ObjectToID(hypNbSeg1) -smeshgui.SetName(idseg, "NumberOfSegments_7"); - -print "-------------------------- MaxElementArea" -hypArea1 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hypArea1.SetMaxElementArea(2500) -print hypArea1.GetName() -print hypArea1.GetId() -print hypArea1.GetMaxElementArea() - -idarea1 = salome.ObjectToID(hypArea1) -smeshgui.SetName(idarea1, "MaxElementArea_2500"); - -print "-------------------------- MaxElementArea" -hypArea2 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hypArea2.SetMaxElementArea(500) -print hypArea2.GetName() -print hypArea2.GetId() -print hypArea2.GetMaxElementArea() - -idarea2 = salome.ObjectToID(hypArea2) -smeshgui.SetName(idarea2, "MaxElementArea_500"); - -print "-------------------------- Regular_1D" -algoReg = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -listHyp = algoReg.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoReg.GetName() -print algoReg.GetId() - -idreg = salome.ObjectToID(algoReg) -smeshgui.SetName(idreg, "Regular_1D"); - -print "-------------------------- MEFISTO_2D" -algoMef = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so") -listHyp = algoMef.GetCompatibleHypothesis() -for hyp in listHyp: - print hyp -print algoMef.GetName() -print algoMef.GetId() - -idmef = salome.ObjectToID(algoMef) -smeshgui.SetName(idmef, "MEFISTO_2D"); - -# ---- Init a Mesh with the box - -box = salome.IDToObject(idbox) -mesh = smesh.CreateMesh(box) -idmesh = salome.ObjectToID(mesh) -smeshgui.SetName(idmesh, "Meshbox"); - -print "-------------------------- add hypothesis to box" -mesh.AddHypothesis(box,algoReg) -mesh.AddHypothesis(box,hypNbSeg1) -mesh.AddHypothesis(box,algoMef) -mesh.AddHypothesis(box,hypArea1) - -# ---- add hypothesis to edge - -print "-------------------------- add hypothesis to edge" -edge = salome.IDToObject(idedge) -submesh = mesh.GetSubMesh(edge, "SubMeshEdge") -mesh.AddHypothesis(edge, algoReg) -mesh.AddHypothesis(edge, hypLen1) - -print "-------------------------- add hypothesis to face" -face = salome.IDToObject(idface) -submesh = mesh.GetSubMesh(face, "SubMeshFace") -mesh.AddHypothesis(face, hypArea2) - -salome.sg.updateObjBrowser(1); diff --git a/src/SMESH_SWIG/SMESH_test2.py b/src/SMESH_SWIG/SMESH_test2.py deleted file mode 100644 index b552a1490..000000000 --- a/src/SMESH_SWIG/SMESH_test2.py +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_test2.py -# Module : SMESH - -from SMESH_test1 import * - -# ---- compute box - -print "-------------------------- compute box" -ret = smesh.Compute(mesh,box) -print ret -log = mesh.GetLog(0); # no erase trace -for linelog in log: - print linelog - -salome.sg.updateObjBrowser(1); - -# ---- compute edge - -##print "-------------------------- compute edge" -##ret=gen.Compute(mesh,idedge) -##print ret -##log=mesh.GetLog(1); -##for a in log: -## print a - -# ---- add hypothesis to face - -# ---- compute face - -#print "-------------------------- compute face" -#ret=gen.Compute(mesh,idface) -#print ret -#log=mesh.GetLog(1); -#for a in log: -# print a - -##shell=salome.IDToObject(ids) -##submesh=mesh.GetElementsOnShape(shell) -##ret=mesh.AddHypothesis(shell,algoReg) -##print ret -##ret=mesh.AddHypothesis(shell,hypLen1) -##print ret -##ret=gen.Compute(mesh,ids) -##print ret diff --git a/src/SMESH_SWIG/SMESH_test3.py b/src/SMESH_SWIG/SMESH_test3.py deleted file mode 100644 index e10501858..000000000 --- a/src/SMESH_SWIG/SMESH_test3.py +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_test3.py -# Module : SMESH - -#import salome -import math -import geompy - -pi = math.pi - -# --------------------------------------------- -xa = math.sin(pi/12) -ya = 0 -za = math.cos(pi/12) - -xb = 0 -yb = math.sin(pi/18) -zb = math.cos(pi/18) - -xc = math.cos(-pi/18) -yc = 0 -zc = math.sin(-pi/18) - -rc1 = 150 -rc2 = 150 -rc3 = 150 -rc4 = 300 - -hc1 = 300 -hc2 = 2*hc1 -hc3 = 2*hc1 -hc4 = 2*hc1 - -# --------------------------------------------- -point_0 = geompy.MakeVertex(0, 0, 0) -point_z = geompy.MakeVertex(0, 0, 1) - -point_a = geompy.MakeVertex(xa, ya, za) -point_b = geompy.MakeVertex(xb, yb, zb) -point_c = geompy.MakeVertex(xc, yc, zc) - -dir_z = geompy.MakeVector(point_0, point_z) -dir_a = geompy.MakeVector(point_0, point_a) -dir_b = geompy.MakeVector(point_0, point_b) -dir_c = geompy.MakeVector(point_0, point_c) - -axe_z = dir_z -axe_a = dir_a -axe_b = dir_b -axe_c = dir_c - -cyl_1 = geompy.MakeCylinder(point_0, dir_z, rc1, hc1) - -cyl_t = geompy.MakeCylinder(point_0, dir_a, rc2, hc2) -cyl_a = geompy.MakeTranslation(cyl_t, 1.2*rc1, 0.1*rc1, -0.5*hc1) - -cyl_t = geompy.MakeCylinder(point_0, dir_b, rc3, hc3) -cyl_b = geompy.MakeTranslation(cyl_t, -1.2*rc1, -0.1*rc1, -0.5*hc1) - -cyl_t = geompy.MakeCylinder(point_0, dir_c, rc4, hc4) -cyl_t = geompy.MakeRotation(cyl_t, axe_c, pi/2) -cyl_c = geompy.MakeTranslation(cyl_t, -hc1, 0, 0) -cyl_d = geompy.MakeTranslation(cyl_t, -hc1, 0, 1.3*rc4) - -inter_t = geompy.MakeBoolean(cyl_c,cyl_d, 1) # common - -blob_t = geompy.MakeBoolean(cyl_1, cyl_a, 2) # cut -blob_t = geompy.MakeBoolean(blob_t, cyl_b, 2) - -blob = geompy.MakeBoolean(blob_t, inter_t, 1) # common - -idblob = geompy.addToStudy(blob,"blob") -#idc = geompy.addToStudy(cyl_c,"cyl_c") -#idd = geompy.addToStudy(cyl_d,"cyl_d") diff --git a/src/SMESH_SWIG/SMESH_test4.py b/src/SMESH_SWIG/SMESH_test4.py deleted file mode 100755 index 09271b6f1..000000000 --- a/src/SMESH_SWIG/SMESH_test4.py +++ /dev/null @@ -1,52 +0,0 @@ -import salome -import geompy -import SMESH -import StdMeshers - -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") -smesh.SetCurrentStudy(salome.myStudy) - -box = geompy.MakeBox(0., 0., 0., 100., 200., 300.) -idbox = geompy.addToStudy(box, "box") - -subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"]) -face = subShapeList[0] -name = geompy.SubShapeName(face, box) -idface = geompy.addToStudyInFather(box, face, name) - -box = salome.IDToObject(idbox) -face = salome.IDToObject(idface) - -hyp1 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") -hyp1.SetNumberOfSegments(10) -hyp2 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hyp2.SetMaxElementArea(10) -hyp3 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") -hyp3.SetMaxElementArea(100) - -algo1 = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") -algo2 = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so") - -mesh = smesh.CreateMesh(box) -mesh.AddHypothesis(box,hyp1) -mesh.AddHypothesis(box,hyp2) -mesh.AddHypothesis(box,algo1) -mesh.AddHypothesis(box,algo2) - -submesh = mesh.GetSubMesh(face, "SubMeshFace") -mesh.AddHypothesis(face,hyp1) -mesh.AddHypothesis(face,hyp3) -mesh.AddHypothesis(face,algo1) -mesh.AddHypothesis(face,algo2) - -smesh.Compute(mesh,box) - -faces = submesh.GetElementsByType(SMESH.FACE) -if len(faces) > 1: - print len(faces), len(faces)/2 - group1 = mesh.CreateGroup(SMESH.FACE,"Group of faces") - group2 = mesh.CreateGroup(SMESH.FACE,"Another group of faces") - group1.Add(faces[:int(len(faces)/2)]) - group2.Add(faces[int(len(faces)/2):]) - -salome.sg.updateObjBrowser(1) diff --git a/src/SMESH_SWIG/SMESH_test5.py b/src/SMESH_SWIG/SMESH_test5.py deleted file mode 100644 index 8a9e148dd..000000000 --- a/src/SMESH_SWIG/SMESH_test5.py +++ /dev/null @@ -1,80 +0,0 @@ -# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -# -# -# -# File : SMESH_test1.py -# Module : SMESH - -import salome -import SMESH -import SALOMEDS -import CORBA -import os -import os.path - -def SetSObjName(theSObj,theName) : - ok, anAttr = theSObj.FindAttribute("AttributeName") - if ok: - aName = anAttr._narrow(SALOMEDS.AttributeName) - #print aName.__dict__ - aName.SetValue(theName) - -def ConvertMED2UNV(thePath,theFile) : - anInitFileName = thePath + theFile - aMeshes,aResult = smesh.CreateMeshesFromMED(anInitFileName) - print aResult, aMeshes - - for iMesh in range(len(aMeshes)) : - aMesh = aMeshes[iMesh] - anSObj = salome.ObjectToSObject(aMesh) - print anSObj.GetName(), - aFileName = anInitFileName - aFileName = os.path.basename(aFileName) - SetSObjName(anSObj,aFileName) - print anSObj.GetName() - - aOutPath = '/tmp/' - aFileName = aOutPath + theFile + "." + str(iMesh) + ".unv" - aMesh.ExportUNV(aFileName) - aMesh = smesh.CreateMeshesFromUNV(aFileName) - anSObj = salome.ObjectToSObject(aMesh) - print anSObj.GetName(), - os.remove(aFileName) - aFileName = os.path.basename(aFileName) - SetSObjName(anSObj,aFileName) - print anSObj.GetName() - -smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH") -smesh.SetCurrentStudy(salome.myStudy) - -aPath = os.getenv('KERNEL_ROOT_DIR') + '/examples/' -aListDir = os.listdir(aPath) -print aListDir - -for iFile in range(len(aListDir)) : - aFileName = aListDir[iFile] - aName,anExt = os.path.splitext(aFileName) - if anExt == ".med" : - aFileName = os.path.basename(aFileName) - print aFileName - ConvertMED2UNV(aPath,aFileName) - #break - -salome.sg.updateObjBrowser(1) diff --git a/src/SMESH_SWIG/batchmode_mefisto.py b/src/SMESH_SWIG/batchmode_mefisto.py deleted file mode 100644 index 203b1602e..000000000 --- a/src/SMESH_SWIG/batchmode_mefisto.py +++ /dev/null @@ -1,136 +0,0 @@ -import os -import re - -import batchmode_salome -import batchmode_geompy -import batchmode_smesh -import StdMeshers - -smesh = batchmode_smesh.smesh -smesh.SetCurrentStudy(batchmode_salome.myStudy) - -def CreateMesh (theFileName, area, len = None, nbseg = None): - - if not(os.path.isfile(theFileName)) or re.search("\.brep$", theFileName) is None : - print "Incorrect file name !" - return - - if (len is None) and (nbseg is None): - print "Define length or number of segments !" - return - - if (len is not None) and (nbseg is not None): - print "Only one Hypothesis (from length and number of segments) can be defined !" - return - - - # ---- Import shape from BREP file and add it to the study - shape_mesh = batchmode_geompy.Import(theFileName, "BREP") - Id_shape = batchmode_geompy.addToStudy(shape_mesh, "shape_mesh") - - - # ---- SMESH - - print "-------------------------- create Hypothesis" - if (len is not None): - print "-------------------------- LocalLength" - hypLength1 = smesh.CreateHypothesis("LocalLength", "libStdMeshersEngine.so") - hypLength1.SetLength(len) - print "Hypothesis type : ", hypLength1.GetName() - print "Hypothesis ID : ", hypLength1.GetId() - print "Hypothesis Value: ", hypLength1.GetLength() - - if (nbseg is not None): - print "-------------------------- NumberOfSegments" - hypNbSeg1 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so") - hypNbSeg1.SetNumberOfSegments(nbseg) - print "Hypothesis type : ", hypNbSeg1.GetName() - print "Hypothesis ID : ", hypNbSeg1.GetId() - print "Hypothesis Value: ", hypNbSeg1.GetNumberOfSegments() - - if (area == "LengthFromEdges"): - print "-------------------------- LengthFromEdges" - hypLengthFromEdges = smesh.CreateHypothesis("LengthFromEdges", "libStdMeshersEngine.so") - hypLengthFromEdges.SetMode(1) - print "Hypothesis type : ", hypLengthFromEdges.GetName() - print "Hypothesis ID : ", hypLengthFromEdges.GetId() - print "LengthFromEdges Mode: ", hypLengthFromEdges.GetMode() - - else: - print "-------------------------- MaxElementArea" - hypArea1 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so") - hypArea1.SetMaxElementArea(area) - print "Hypothesis type : ", hypArea1.GetName() - print "Hypothesis ID : ", hypArea1.GetId() - print "Hypothesis Value: ", hypArea1.GetMaxElementArea() - - - print "-------------------------- Regular_1D" - algoReg = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so") - - listHyp = algoReg.GetCompatibleHypothesis() - for hyp in listHyp: - print hyp - - print "Algo name: ", algoReg.GetName() - print "Algo ID : ", algoReg.GetId() - - print "-------------------------- MEFISTO_2D" - algoMef = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so") - - listHyp = algoMef.GetCompatibleHypothesis() - for hyp in listHyp: - print hyp - - print "Algo name: ", algoMef.GetName() - print "Algo ID : ", algoMef.GetId() - - - # ---- add hypothesis to shape - - print "-------------------------- add hypothesis to shape" - mesh = smesh.CreateMesh(shape_mesh) - - ret = mesh.AddHypothesis(shape_mesh, algoReg) - print "Add Regular_1D algo .... ", - print ret - - if (nbseg is not None): - ret = mesh.AddHypothesis(shape_mesh, hypNbSeg1) - print "Add Number Of Segements algo .... ", - print ret - - if (len is not None): - ret = mesh.AddHypothesis(shape_mesh,hypLength1) - print "Add Local Length algo .... ", - print ret - - ret = mesh.AddHypothesis(shape_mesh, algoMef) - print "Add MEFISTO_2D algo....", - print ret - - if (area == "LengthFromEdges"): - ret = mesh.AddHypothesis( shape_mesh, hypLengthFromEdges) # length from edge - print "Add Length From Edges algo .... ", - print ret - else: - ret = mesh.AddHypothesis(shape_mesh, hypArea1) - print "Add Max Triangle Area algo .... ", - print ret - - print "-------------------------- compute mesh" - ret = smesh.Compute(mesh,shape_mesh) - print "Compute Mesh .... ", - print ret - log = mesh.GetLog(0); # no erase trace - #for linelog in log: - # print linelog - - print "------------ INFORMATION ABOUT MESH ------------" - - print "Number of nodes : ", mesh.NbNodes() - print "Number of edges : ", mesh.NbEdges() - print "Number of faces : ", mesh.NbFaces() - print "Number of triangles: ", mesh.NbTriangles() - - return mesh diff --git a/src/SMESH_SWIG/batchmode_smesh.py b/src/SMESH_SWIG/batchmode_smesh.py deleted file mode 100644 index 4964c8b0c..000000000 --- a/src/SMESH_SWIG/batchmode_smesh.py +++ /dev/null @@ -1,304 +0,0 @@ -# Copyright (C) 2003 CEA/DEN, EDF R&D -# -# -# -# File : batchmode_smesh.py -# Author : Oksana TCHEBANOVA -# Module : SMESH -# $Header$ - -from batchmode_salome import * -from batchmode_geompy import ShapeType -import SMESH - -#-------------------------------------------------------------------------- -modulecatalog = naming_service.Resolve("/Kernel/ModulCatalog") - -smesh = lcc.FindOrLoadComponent("FactoryServer", "SMESH") -myStudyBuilder = myStudy.NewBuilder() - -if myStudyBuilder is None: - raise RuntimeError, " Null myStudyBuilder" - -father = myStudy.FindComponent("SMESH") -if father is None: - father = myStudyBuilder.NewComponent("SMESH") - FName = myStudyBuilder.FindOrCreateAttribute(father, "AttributeName") - Comp = modulecatalog.GetComponent("SMESH") - FName.SetValue(Comp._get_componentusername()) - aPixmap = myStudyBuilder.FindOrCreateAttribute(father, "AttributePixMap") - aPixmap.SetPixMap("ICON_OBJBROWSER_Mesh") - -myStudyBuilder.DefineComponentInstance(father,smesh) - -mySComponentMesh = father._narrow(SALOMEDS.SComponent) - -Tag_HypothesisRoot = 1 -Tag_AlgorithmsRoot = 2 - -Tag_RefOnShape = 1 -Tag_RefOnAppliedHypothesis = 2 -Tag_RefOnAppliedAlgorithms = 3 - -Tag_SubMeshOnVertex = 4 -Tag_SubMeshOnEdge = 5 -Tag_SubMeshOnFace = 6 -Tag_SubMeshOnSolid = 7 -Tag_SubMeshOnCompound = 8 - -Tag = {"HypothesisRoot":1,"AlgorithmsRoot":2,"RefOnShape":1,"RefOnAppliedHypothesis":2,"RefOnAppliedAlgorithms":3,"SubMeshOnVertex":4,"SubMeshOnEdge":5,"SubMeshOnFace":6,"SubMeshOnSolid":7,"SubMeshOnCompound":8} - -#------------------------------------------------------------ -def Init(): - pass -#------------------------------------------------------------ -def AddNewMesh(IOR): - # VSR: added temporarily - objects are published automatically by the engine - aSO = myStudy.FindObjectIOR( IOR ) - if aSO is not None: - return aSO.GetID() - # VSR ###################################################################### - - res,HypothesisRoot = mySComponentMesh.FindSubObject ( Tag_HypothesisRoot ) - if HypothesisRoot is None or res == 0: - HypothesisRoot = myStudyBuilder.NewObjectToTag(mySComponentMesh, Tag_HypothesisRoot) - aName = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributeName") - aName.SetValue("Hypotheses") - aPixmap = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributePixMap") - aPixmap.SetPixMap( "mesh_tree_hypo.png" ) - aSelAttr = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable") - aSelAttr.SetSelectable(0) - - res, AlgorithmsRoot = mySComponentMesh.FindSubObject (Tag_AlgorithmsRoot) - if AlgorithmsRoot is None or res == 0: - AlgorithmsRoot = myStudyBuilder.NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot) - aName = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributeName") - aName.SetValue("Algorithms") - aPixmap = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap") - aPixmap.SetPixMap( "mesh_tree_algo.png" ) - aSelAttr = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable") - aSelAttr.SetSelectable(0) - - HypothesisRoot = HypothesisRoot._narrow(SALOMEDS.SObject) - newMesh = myStudyBuilder.NewObject(mySComponentMesh) - aPixmap = myStudyBuilder.FindOrCreateAttribute(newMesh, "AttributePixMap") - aPixmap.SetPixMap( "mesh_tree_mesh.png" ) - anIOR = myStudyBuilder.FindOrCreateAttribute(newMesh, "AttributeIOR") - anIOR.SetValue(IOR) - return newMesh.GetID() - -#------------------------------------------------------------ -def AddNewHypothesis(IOR): - # VSR: added temporarily - objects are published automatically by the engine - aSO = myStudy.FindObjectIOR( IOR ) - if aSO is not None: - return aSO.GetID() - # VSR ###################################################################### - - res, HypothesisRoot = mySComponentMesh.FindSubObject (Tag_HypothesisRoot) - if HypothesisRoot is None or res == 0: - HypothesisRoot = myStudyBuilder.NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot) - aName = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributeName") - aName.SetValue("Hypotheses") - aSelAttr = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable") - aSelAttr.SetSelectable(0) - aPixmap = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributePixMap") - aPixmap.SetPixMap( "mesh_tree_hypo.png" ) - - # Add New Hypothesis - newHypo = myStudyBuilder.NewObject(HypothesisRoot) - aPixmap = myStudyBuilder.FindOrCreateAttribute(newHypo, "AttributePixMap") - H = orb.string_to_object(IOR) - aType = H.GetName() - aPixmap.SetPixMap( "mesh_tree_hypo.png_" + aType ) - anIOR = myStudyBuilder.FindOrCreateAttribute(newHypo, "AttributeIOR") - anIOR.SetValue(IOR) - return newHypo.GetID() - -#------------------------------------------------------------ -def AddNewAlgorithms(IOR): - # VSR: added temporarily - objects are published automatically by the engine - aSO = myStudy.FindObjectIOR( IOR ) - if aSO is not None: - return aSO.GetID() - # VSR ###################################################################### - - res, AlgorithmsRoot = mySComponentMesh.FindSubObject (Tag_AlgorithmsRoot) - if AlgorithmsRoot is None or res == 0: - AlgorithmsRoot = myStudyBuilde.NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot) - aName = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributeName") - aName.SetValue("Algorithms") - aSelAttr = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable") - aSelAttr.SetSelectable(0) - aPixmap = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap") - aPixmap.SetPixMap( "mesh_tree_algo.png" ) - - # Add New Algorithms - newHypo = myStudyBuilder.NewObject(AlgorithmsRoot) - aPixmap = myStudyBuilder.FindOrCreateAttribute(newHypo, "AttributePixMap") - aPixmap = anAttr._narrow(SALOMEDS.AttributePixMap) - H = orb.string_to_object(IOR) - aType = H.GetName(); #QString in fact - aPixmap.SetPixMap( "mesh_tree_algo.png_" + aType ) - anIOR = myStudyBuilder.FindOrCreateAttribute(newHypo, "AttributeIOR") - anIOR.SetValue(IOR) - return newHypo.GetID() - - -#------------------------------------------------------------ -def SetShape(ShapeEntry, MeshEntry): - SO_MorSM = myStudy.FindObjectID( MeshEntry ) - SO_GeomShape = myStudy.FindObjectID( ShapeEntry ) - - if SO_MorSM is not None and SO_GeomShape is not None : - # VSR: added temporarily - shape reference is published automatically by the engine - res, Ref = SO_MorSM.FindSubObject( Tag_RefOnShape ) - if res == 1 : - return - # VSR ###################################################################### - - SO = myStudyBuilder.NewObjectToTag (SO_MorSM, Tag_RefOnShape) - myStudyBuilder.Addreference (SO,SO_GeomShape) - - -#------------------------------------------------------------ -def SetHypothesis(Mesh_Or_SubMesh_Entry, Hypothesis_Entry): - SO_MorSM = myStudy.FindObjectID( Mesh_Or_SubMesh_Entry ) - SO_Hypothesis = myStudy.FindObjectID( Hypothesis_Entry ) - - if SO_MorSM is not None and SO_Hypothesis is not None : - - #Find or Create Applied Hypothesis root - res, AHR = SO_MorSM.FindSubObject (Tag_RefOnAppliedHypothesis) - if AHR is None or res == 0: - AHR = myStudyBuilder.NewObjectToTag (SO_MorSM, Tag_RefOnAppliedHypothesis) - aName = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributeName") - - # The same name as in SMESH_Mesh_i::AddHypothesis() ################## - aName.SetValue("Applied hypotheses") - - aSelAttr = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributeSelectable") - aSelAttr.SetSelectable(0) - aPixmap = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributePixMap") - aPixmap.SetPixMap( "mesh_tree_hypo.png" ) - - # VSR: added temporarily - reference to applied hypothesis is published automatically by the engine - else : - it = myStudy.NewChildIterator(AHR) - while it.More() : - res, Ref = it.Value().ReferencedObject() - if res and Ref is not None and Ref.GetID() == Hypothesis_Entry : - return - it.Next() - # VSR ###################################################################### - - SO = myStudyBuilder.NewObject(AHR) - myStudyBuilder.Addreference (SO,SO_Hypothesis) - -#------------------------------------------------------------ -def SetAlgorithms(Mesh_Or_SubMesh_Entry, Algorithms_Entry): - SO_MorSM = myStudy.FindObjectID( Mesh_Or_SubMesh_Entry ) - SO_Algorithms = myStudy.FindObjectID( Algorithms_Entry ) - if SO_MorSM != None and SO_Algorithms != None : - #Find or Create Applied Algorithms root - res, AHR = SO_MorSM.FindSubObject (Tag_RefOnAppliedAlgorithms) - if AHR is None or res == 0: - AHR = myStudyBuilder.NewObjectToTag (SO_MorSM, Tag_RefOnAppliedAlgorithms) - aName = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributeName") - - # The same name as in SMESH_Mesh_i::AddHypothesis() ################## - aName.SetValue("Applied algorithms") - - aSelAttr = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributeSelectable") - aSelAttr.SetSelectable(0) - aPixmap = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributePixMap") - aPixmap.SetPixMap( "mesh_tree_algo.png" ) - - # VSR: added temporarily - reference to applied hypothesis is published automatically by the engine - else : - it = myStudy.NewChildIterator(AHR) - while it.More() : - res, Ref = it.Value().ReferencedObject() - if res and Ref is not None and Ref.GetID() == Algorithms_Entry : - return - it.Next() - # VSR ###################################################################### - - SO = myStudyBuilder.NewObject(AHR) - myStudyBuilder.Addreference (SO,SO_Algorithms) - - -#------------------------------------------------------------ -def UnSetHypothesis( Applied_Hypothesis_Entry ): - SO_Applied_Hypothesis = myStudy.FindObjectID( Applied_Hypothesis_Entry ) - if SO_Applied_Hypothesis : - myStudyBuilder.RemoveObject(SO_Applied_Hypothesis) - - -#------------------------------------------------------------ -def AddSubMesh ( SO_Mesh_Entry, SM_IOR, ST): - # VSR: added temporarily - objects are published automatically by the engine - aSO = myStudy.FindObjectIOR( SM_IOR ) - if aSO is not None: - return aSO.GetID() - # VSR ###################################################################### - - SO_Mesh = myStudy.FindObjectID( SO_Mesh_Entry ) - if ( SO_Mesh ) : - - if ST == ShapeType["COMPSOLID"] : - Tag_Shape = Tag_SubMeshOnSolid - Name = "SubMeshes on Solid" - elif ST == ShapeType["FACE"] : - Tag_Shape = Tag_SubMeshOnFace - Name = "SubMeshes on Face" - elif ST == ShapeType["EDGE"] : - Tag_Shape = Tag_SubMeshOnEdge - Name = "SubMeshes on Edge" - elif ST == ShapeType["VERTEX"] : - Tag_Shape = Tag_SubMeshOnVertex - Name = "SubMeshes on Vertex" - else : - Tag_Shape = Tag_SubMeshOnCompound - Name = "SubMeshes on Compound" - - res, SubmeshesRoot = SO_Mesh.FindSubObject (Tag_Shape) - if SubmeshesRoot is None or res == 0: - SubmeshesRoot = myStudyBuilder.NewObjectToTag (SO_Mesh, Tag_Shape) - aName = myStudyBuilder.FindOrCreateAttribute(SubmeshesRoot, "AttributeName") - aName.SetValue(Name) - aSelAttr = myStudyBuilder.FindOrCreateAttribute(SubmeshesRoot, "AttributeSelectable") - aSelAttr.SetSelectable(0) - - SO = myStudyBuilder.NewObject (SubmeshesRoot) - anIOR = myStudyBuilder.FindOrCreateAttribute(SO, "AttributeIOR") - anIOR.SetValue(SM_IOR) - return SO.GetID() - - return None - -#------------------------------------------------------------ -def AddSubMeshOnShape (Mesh_Entry, GeomShape_Entry, SM_IOR, ST) : - # VSR: added temporarily - objects are published automatically by the engine - aSO = myStudy.FindObjectIOR( SM_IOR ) - if aSO is not None: - return aSO.GetID() - # VSR ###################################################################### - SO_GeomShape = myStudy.FindObjectID( GeomShape_Entry ) - if SO_GeomShape != None : - SM_Entry = AddSubMesh (Mesh_Entry,SM_IOR,ST) - SO_SM = myStudy.FindObjectID( SM_Entry ) - - if SO_SM != None : - SetShape (GeomShape_Entry, SM_Entry) - return SM_Entry - - return None - - -#------------------------------------------------------------ -def SetName(Entry, Name): - SO = myStudy.FindObjectID( Entry ) - if SO != None : - aName = myStudyBuilder.FindOrCreateAttribute(SO, "AttributeName") - aName.SetValue(Name) diff --git a/src/SMESH_SWIG/ex00_all.py b/src/SMESH_SWIG/ex00_all.py deleted file mode 100644 index b1aa726b2..000000000 --- a/src/SMESH_SWIG/ex00_all.py +++ /dev/null @@ -1,25 +0,0 @@ -# CEA/LGLS 2005, Francis KLOSS (OCC) -# ================================== - -# Load all examples -# ----------------- - -import ex01_cube2build -import ex02_cube2primitive -import ex03_cube2partition -import ex04_cube5tetraHexa -import ex05_hole1build -import ex06_hole1boolean -import ex07_hole1partition -import ex08_hole2build -import ex09_grid4build -import ex10_grid4geometry -import ex11_grid3partition -import ex12_grid17partition -import ex13_hole1partial -import ex14_cyl1holed -import ex15_cyl2geometry -import ex16_cyl2complementary -import ex17_dome1 -import ex18_dome2 -import ex19_sphereINcube diff --git a/src/SMESH_SWIG/ex01_cube2build.py b/src/SMESH_SWIG/ex01_cube2build.py deleted file mode 100644 index 02b5b1506..000000000 --- a/src/SMESH_SWIG/ex01_cube2build.py +++ /dev/null @@ -1,293 +0,0 @@ -# CEA/LGLS 2004-2005, Francis KLOSS (OCC) -# ======================================= - -from geompy import * - -import smesh - -# Geometry -# ======== - -# A small cube centered and put on a great cube build by points, edges, faces and solids - -# Points -# ------ - -greatPoint111 = MakeVertex( 0, 0, 0) -greatPoint211 = MakeVertex(10, 0, 0) -greatPoint311 = MakeVertex(20, 0, 0) -greatPoint411 = MakeVertex(30, 0, 0) - -greatPoint121 = MakeVertex( 0, 10, 0) -greatPoint221 = MakeVertex(10, 10, 0) -greatPoint321 = MakeVertex(20, 10, 0) -greatPoint421 = MakeVertex(30, 10, 0) - -greatPoint112 = MakeVertex( 0, 0, 10) -greatPoint212 = MakeVertex(10, 0, 10) -greatPoint312 = MakeVertex(20, 0, 10) -greatPoint412 = MakeVertex(30, 0, 10) - -greatPoint122 = MakeVertex( 0, 10, 10) -greatPoint222 = MakeVertex(10, 10, 10) -greatPoint322 = MakeVertex(20, 10, 10) -greatPoint422 = MakeVertex(30, 10, 10) - -greatPoint113 = MakeVertex( 0, 0, 20) -greatPoint213 = MakeVertex(10, 0, 20) -greatPoint313 = MakeVertex(20, 0, 20) -greatPoint413 = MakeVertex(30, 0, 20) - -greatPoint123 = MakeVertex( 0, 10, 20) -greatPoint223 = MakeVertex(10, 10, 20) -greatPoint323 = MakeVertex(20, 10, 20) -greatPoint423 = MakeVertex(30, 10, 20) - -greatPoint114 = MakeVertex( 0, 0, 30) -greatPoint214 = MakeVertex(10, 0, 30) -greatPoint314 = MakeVertex(20, 0, 30) -greatPoint414 = MakeVertex(30, 0, 30) - -greatPoint124 = MakeVertex( 0, 10, 30) -greatPoint224 = MakeVertex(10, 10, 30) -greatPoint324 = MakeVertex(20, 10, 30) -greatPoint424 = MakeVertex(30, 10, 30) - - -smallPoint111 = greatPoint222 -smallPoint211 = greatPoint322 -smallPoint121 = MakeVertex(10, 20, 10) -smallPoint221 = MakeVertex(20, 20, 10) - -smallPoint112 = greatPoint223 -smallPoint212 = greatPoint323 -smallPoint122 = MakeVertex(10, 20, 20) -smallPoint222 = MakeVertex(20, 20, 20) - -# Edges -# ----- - -smallEdgeX11 = MakeEdge(smallPoint111, smallPoint211) -smallEdgeX21 = MakeEdge(smallPoint121, smallPoint221) -smallEdgeX12 = MakeEdge(smallPoint112, smallPoint212) -smallEdgeX22 = MakeEdge(smallPoint122, smallPoint222) - -smallEdgeY11 = MakeEdge(smallPoint111, smallPoint121) -smallEdgeY21 = MakeEdge(smallPoint211, smallPoint221) -smallEdgeY12 = MakeEdge(smallPoint112, smallPoint122) -smallEdgeY22 = MakeEdge(smallPoint212, smallPoint222) - -smallEdgeZ11 = MakeEdge(smallPoint111, smallPoint112) -smallEdgeZ21 = MakeEdge(smallPoint211, smallPoint212) -smallEdgeZ12 = MakeEdge(smallPoint121, smallPoint122) -smallEdgeZ22 = MakeEdge(smallPoint221, smallPoint222) - - -greatEdgeX111 = MakeEdge(greatPoint111, greatPoint211) -greatEdgeX211 = MakeEdge(greatPoint211, greatPoint311) -greatEdgeX311 = MakeEdge(greatPoint311, greatPoint411) -greatEdgeX121 = MakeEdge(greatPoint121, greatPoint221) -greatEdgeX221 = MakeEdge(greatPoint221, greatPoint321) -greatEdgeX321 = MakeEdge(greatPoint321, greatPoint421) - -greatEdgeX112 = MakeEdge(greatPoint112, greatPoint212) -greatEdgeX212 = MakeEdge(greatPoint212, greatPoint312) -greatEdgeX312 = MakeEdge(greatPoint312, greatPoint412) -greatEdgeX122 = MakeEdge(greatPoint122, greatPoint222) -greatEdgeX222 = smallEdgeX11 -greatEdgeX322 = MakeEdge(greatPoint322, greatPoint422) - -greatEdgeX113 = MakeEdge(greatPoint113, greatPoint213) -greatEdgeX213 = MakeEdge(greatPoint213, greatPoint313) -greatEdgeX313 = MakeEdge(greatPoint313, greatPoint413) -greatEdgeX123 = MakeEdge(greatPoint123, greatPoint223) -greatEdgeX223 = smallEdgeX12 -greatEdgeX323 = MakeEdge(greatPoint323, greatPoint423) - -greatEdgeX114 = MakeEdge(greatPoint114, greatPoint214) -greatEdgeX214 = MakeEdge(greatPoint214, greatPoint314) -greatEdgeX314 = MakeEdge(greatPoint314, greatPoint414) -greatEdgeX124 = MakeEdge(greatPoint124, greatPoint224) -greatEdgeX224 = MakeEdge(greatPoint224, greatPoint324) -greatEdgeX324 = MakeEdge(greatPoint324, greatPoint424) - -greatEdgeY11 = MakeEdge(greatPoint111, greatPoint121) -greatEdgeY21 = MakeEdge(greatPoint211, greatPoint221) -greatEdgeY31 = MakeEdge(greatPoint311, greatPoint321) -greatEdgeY41 = MakeEdge(greatPoint411, greatPoint421) - -greatEdgeY12 = MakeEdge(greatPoint112, greatPoint122) -greatEdgeY22 = MakeEdge(greatPoint212, greatPoint222) -greatEdgeY32 = MakeEdge(greatPoint312, greatPoint322) -greatEdgeY42 = MakeEdge(greatPoint412, greatPoint422) - -greatEdgeY13 = MakeEdge(greatPoint113, greatPoint123) -greatEdgeY23 = MakeEdge(greatPoint213, greatPoint223) -greatEdgeY33 = MakeEdge(greatPoint313, greatPoint323) -greatEdgeY43 = MakeEdge(greatPoint413, greatPoint423) - -greatEdgeY14 = MakeEdge(greatPoint114, greatPoint124) -greatEdgeY24 = MakeEdge(greatPoint214, greatPoint224) -greatEdgeY34 = MakeEdge(greatPoint314, greatPoint324) -greatEdgeY44 = MakeEdge(greatPoint414, greatPoint424) - -greatEdgeZ111 = MakeEdge(greatPoint111, greatPoint112) -greatEdgeZ211 = MakeEdge(greatPoint211, greatPoint212) -greatEdgeZ311 = MakeEdge(greatPoint311, greatPoint312) -greatEdgeZ411 = MakeEdge(greatPoint411, greatPoint412) - -greatEdgeZ121 = MakeEdge(greatPoint121, greatPoint122) -greatEdgeZ221 = MakeEdge(greatPoint221, greatPoint222) -greatEdgeZ321 = MakeEdge(greatPoint321, greatPoint322) -greatEdgeZ421 = MakeEdge(greatPoint421, greatPoint422) - -greatEdgeZ112 = MakeEdge(greatPoint112, greatPoint113) -greatEdgeZ212 = MakeEdge(greatPoint212, greatPoint213) -greatEdgeZ312 = MakeEdge(greatPoint312, greatPoint313) -greatEdgeZ412 = MakeEdge(greatPoint412, greatPoint413) - -greatEdgeZ122 = MakeEdge(greatPoint122, greatPoint123) -greatEdgeZ222 = smallEdgeZ11 -greatEdgeZ322 = smallEdgeZ21 -greatEdgeZ422 = MakeEdge(greatPoint422, greatPoint423) - -greatEdgeZ113 = MakeEdge(greatPoint113, greatPoint114) -greatEdgeZ213 = MakeEdge(greatPoint213, greatPoint214) -greatEdgeZ313 = MakeEdge(greatPoint313, greatPoint314) -greatEdgeZ413 = MakeEdge(greatPoint413, greatPoint414) - -greatEdgeZ123 = MakeEdge(greatPoint123, greatPoint124) -greatEdgeZ223 = MakeEdge(greatPoint223, greatPoint224) -greatEdgeZ323 = MakeEdge(greatPoint323, greatPoint324) -greatEdgeZ423 = MakeEdge(greatPoint423, greatPoint424) - -# Faces -# ----- - -smallFaceX1 = MakeQuad(smallEdgeY11, smallEdgeZ11, smallEdgeY12, smallEdgeZ12) -smallFaceX2 = MakeQuad(smallEdgeY21, smallEdgeZ21, smallEdgeY22, smallEdgeZ22) -smallFaceY1 = MakeQuad(smallEdgeX11, smallEdgeZ11, smallEdgeX12, smallEdgeZ21) -smallFaceY2 = MakeQuad(smallEdgeX21, smallEdgeZ12, smallEdgeX22, smallEdgeZ22) -smallFaceZ1 = MakeQuad(smallEdgeX11, smallEdgeY11, smallEdgeX21, smallEdgeY21) -smallFaceZ2 = MakeQuad(smallEdgeX12, smallEdgeY12, smallEdgeX22, smallEdgeY22) - - -greatFaceX11 = MakeQuad(greatEdgeY11, greatEdgeZ111, greatEdgeY12, greatEdgeZ121) -greatFaceX21 = MakeQuad(greatEdgeY21, greatEdgeZ211, greatEdgeY22, greatEdgeZ221) -greatFaceX31 = MakeQuad(greatEdgeY31, greatEdgeZ311, greatEdgeY32, greatEdgeZ321) -greatFaceX41 = MakeQuad(greatEdgeY41, greatEdgeZ411, greatEdgeY42, greatEdgeZ421) - -greatFaceX12 = MakeQuad(greatEdgeY12, greatEdgeZ112, greatEdgeY13, greatEdgeZ122) -greatFaceX22 = MakeQuad(greatEdgeY22, greatEdgeZ212, greatEdgeY23, greatEdgeZ222) -greatFaceX32 = MakeQuad(greatEdgeY32, greatEdgeZ312, greatEdgeY33, greatEdgeZ322) -greatFaceX42 = MakeQuad(greatEdgeY42, greatEdgeZ412, greatEdgeY43, greatEdgeZ422) - -greatFaceX13 = MakeQuad(greatEdgeY13, greatEdgeZ113, greatEdgeY14, greatEdgeZ123) -greatFaceX23 = MakeQuad(greatEdgeY23, greatEdgeZ213, greatEdgeY24, greatEdgeZ223) -greatFaceX33 = MakeQuad(greatEdgeY33, greatEdgeZ313, greatEdgeY34, greatEdgeZ323) -greatFaceX43 = MakeQuad(greatEdgeY43, greatEdgeZ413, greatEdgeY44, greatEdgeZ423) - -greatFaceY111 = MakeQuad(greatEdgeX111, greatEdgeZ111, greatEdgeX112, greatEdgeZ211) -greatFaceY211 = MakeQuad(greatEdgeX211, greatEdgeZ211, greatEdgeX212, greatEdgeZ311) -greatFaceY311 = MakeQuad(greatEdgeX311, greatEdgeZ311, greatEdgeX312, greatEdgeZ411) -greatFaceY121 = MakeQuad(greatEdgeX121, greatEdgeZ121, greatEdgeX122, greatEdgeZ221) -greatFaceY221 = MakeQuad(greatEdgeX221, greatEdgeZ221, greatEdgeX222, greatEdgeZ321) -greatFaceY321 = MakeQuad(greatEdgeX321, greatEdgeZ321, greatEdgeX322, greatEdgeZ421) - -greatFaceY112 = MakeQuad(greatEdgeX112, greatEdgeZ112, greatEdgeX113, greatEdgeZ212) -greatFaceY212 = MakeQuad(greatEdgeX212, greatEdgeZ212, greatEdgeX213, greatEdgeZ312) -greatFaceY312 = MakeQuad(greatEdgeX312, greatEdgeZ312, greatEdgeX313, greatEdgeZ412) -greatFaceY122 = MakeQuad(greatEdgeX122, greatEdgeZ122, greatEdgeX123, greatEdgeZ222) -greatFaceY222 = smallFaceY1 -greatFaceY322 = MakeQuad(greatEdgeX322, greatEdgeZ322, greatEdgeX323, greatEdgeZ422) - -greatFaceY113 = MakeQuad(greatEdgeX113, greatEdgeZ113, greatEdgeX114, greatEdgeZ213) -greatFaceY213 = MakeQuad(greatEdgeX213, greatEdgeZ213, greatEdgeX214, greatEdgeZ313) -greatFaceY313 = MakeQuad(greatEdgeX313, greatEdgeZ313, greatEdgeX314, greatEdgeZ413) -greatFaceY123 = MakeQuad(greatEdgeX123, greatEdgeZ123, greatEdgeX124, greatEdgeZ223) -greatFaceY223 = MakeQuad(greatEdgeX223, greatEdgeZ223, greatEdgeX224, greatEdgeZ323) -greatFaceY323 = MakeQuad(greatEdgeX323, greatEdgeZ323, greatEdgeX324, greatEdgeZ423) - -greatFaceZ11 = MakeQuad(greatEdgeX111, greatEdgeY11, greatEdgeX121, greatEdgeY21) -greatFaceZ21 = MakeQuad(greatEdgeX211, greatEdgeY21, greatEdgeX221, greatEdgeY31) -greatFaceZ31 = MakeQuad(greatEdgeX311, greatEdgeY31, greatEdgeX321, greatEdgeY41) - -greatFaceZ12 = MakeQuad(greatEdgeX112, greatEdgeY12, greatEdgeX122, greatEdgeY22) -greatFaceZ22 = MakeQuad(greatEdgeX212, greatEdgeY22, greatEdgeX222, greatEdgeY32) -greatFaceZ32 = MakeQuad(greatEdgeX312, greatEdgeY32, greatEdgeX322, greatEdgeY42) - -greatFaceZ13 = MakeQuad(greatEdgeX113, greatEdgeY13, greatEdgeX123, greatEdgeY23) -greatFaceZ23 = MakeQuad(greatEdgeX213, greatEdgeY23, greatEdgeX223, greatEdgeY33) -greatFaceZ33 = MakeQuad(greatEdgeX313, greatEdgeY33, greatEdgeX323, greatEdgeY43) - -greatFaceZ14 = MakeQuad(greatEdgeX114, greatEdgeY14, greatEdgeX124, greatEdgeY24) -greatFaceZ24 = MakeQuad(greatEdgeX214, greatEdgeY24, greatEdgeX224, greatEdgeY34) -greatFaceZ34 = MakeQuad(greatEdgeX314, greatEdgeY34, greatEdgeX324, greatEdgeY44) - -# Solids -# ------ - -smallBlock = MakeHexa(smallFaceX1, smallFaceX2, smallFaceY1, smallFaceY2, smallFaceZ1, smallFaceZ2) - -greatBlock11 = MakeHexa(greatFaceX11, greatFaceX21, greatFaceY111, greatFaceY121, greatFaceZ11, greatFaceZ12) -greatBlock21 = MakeHexa(greatFaceX21, greatFaceX31, greatFaceY211, greatFaceY221, greatFaceZ21, greatFaceZ22) -greatBlock31 = MakeHexa(greatFaceX31, greatFaceX41, greatFaceY311, greatFaceY321, greatFaceZ31, greatFaceZ32) - -greatBlock12 = MakeHexa(greatFaceX12, greatFaceX22, greatFaceY112, greatFaceY122, greatFaceZ12, greatFaceZ13) -greatBlock22 = MakeHexa(greatFaceX22, greatFaceX32, greatFaceY212, greatFaceY222, greatFaceZ22, greatFaceZ23) -greatBlock32 = MakeHexa(greatFaceX32, greatFaceX42, greatFaceY312, greatFaceY322, greatFaceZ32, greatFaceZ33) - -greatBlock13 = MakeHexa(greatFaceX13, greatFaceX23, greatFaceY113, greatFaceY123, greatFaceZ13, greatFaceZ14) -greatBlock23 = MakeHexa(greatFaceX23, greatFaceX33, greatFaceY213, greatFaceY223, greatFaceZ23, greatFaceZ24) -greatBlock33 = MakeHexa(greatFaceX33, greatFaceX43, greatFaceY313, greatFaceY323, greatFaceZ33, greatFaceZ34) - -# Compound -# -------- - -c_l = [] -c_l.append(smallBlock) -c_l.append(greatBlock11) -c_l.append(greatBlock21) -c_l.append(greatBlock31) -c_l.append(greatBlock12) -c_l.append(greatBlock22) -c_l.append(greatBlock32) -c_l.append(greatBlock13) -c_l.append(greatBlock23) -c_l.append(greatBlock33) - -piece = MakeCompound(c_l) - -# Add in study -# ------------ - -piece_id = addToStudy(piece, "ex01_cube2build") - -# Meshing -# ======= - -# Create hexahedrical mesh on piece -# --------------------------------- - -hexa = smesh.Mesh(piece, "ex01_cube2build:hexa") - -algo = hexa.Segment() -algo.NumberOfSegments(4) - -hexa.Quadrangle() - -hexa.Hexahedron() - -# Create local hypothesis -# ----------------------- - -algo = hexa.Segment(greatEdgeX111) - -algo.Arithmetic1D(1, 4) - -algo.Propagation() - -# Compute the mesh -# ---------------- - -hexa.Compute() diff --git a/src/SMESH_SWIG/ex02_cube2primitive.py b/src/SMESH_SWIG/ex02_cube2primitive.py deleted file mode 100644 index 747507211..000000000 --- a/src/SMESH_SWIG/ex02_cube2primitive.py +++ /dev/null @@ -1,95 +0,0 @@ -# CEA/LGLS 2004-2005, Francis KLOSS (OCC) -# ======================================= - -from geompy import * - -import smesh - -# Geometry -# ======== - -# A small cube centered and put on a great cube build by primitive geometric functionalities - -# Values -# ------ - -ox = 0 -oy = 0 -oz = 0 - -arete = 10 - -# Points -# ------ - -blockPoint111 = MakeVertex(ox , oy, oz) -blockPoint211 = MakeVertex(ox+arete, oy, oz) -blockPoint112 = MakeVertex(ox , oy, oz+arete) -blockPoint212 = MakeVertex(ox+arete, oy, oz+arete) - -# Face and solid -# -------------- - -blockFace1 = MakeQuad4Vertices(blockPoint111, blockPoint211, blockPoint212, blockPoint112) - -blockSolid11 = MakePrismVecH(blockFace1, MakeVectorDXDYDZ(0, 1, 0), arete) - -# Translations -# ------------ - -blockSolid21 = MakeTranslation(blockSolid11, arete, 0, 0) -blockSolid31 = MakeTranslation(blockSolid21, arete, 0, 0) - -blockSolid12 = MakeTranslation(blockSolid11, 0, 0, arete) -blockSolid22 = MakeTranslation(blockSolid12, arete, 0, 0) -blockSolid32 = MakeTranslation(blockSolid22, arete, 0, 0) - -blockSolid13 = MakeTranslation(blockSolid12, 0, 0, arete) -blockSolid23 = MakeTranslation(blockSolid13, arete, 0, 0) -blockSolid33 = MakeTranslation(blockSolid23, arete, 0, 0) - -blockSolid111 = MakeTranslation(blockSolid22, 0, arete, 0) - -# Compound and glue -# ----------------- - -c_l = [] -c_l.append(blockSolid11) -c_l.append(blockSolid21) -c_l.append(blockSolid31) -c_l.append(blockSolid12) -c_l.append(blockSolid22) -c_l.append(blockSolid32) -c_l.append(blockSolid13) -c_l.append(blockSolid23) -c_l.append(blockSolid33) -c_l.append(blockSolid111) - -c_cpd = MakeCompound(c_l) - -piece = MakeGlueFaces(c_cpd, 1.e-5) - -# Add in study -# ------------ - -piece_id = addToStudy(piece, "ex02_cube2primitive") - -# Meshing -# ======= - -# Create hexahedrical mesh on piece -# --------------------------------- - -hexa = smesh.Mesh(piece, "ex02_cube2primitive:hexa") - -algo = hexa.Segment() -algo.LocalLength(1) - -hexa.Quadrangle() - -hexa.Hexahedron() - -# Compute the mesh -# ---------------- - -hexa.Compute() diff --git a/src/SMESH_SWIG/ex03_cube2partition.py b/src/SMESH_SWIG/ex03_cube2partition.py deleted file mode 100644 index cc566893c..000000000 --- a/src/SMESH_SWIG/ex03_cube2partition.py +++ /dev/null @@ -1,82 +0,0 @@ -# CEA/LGLS 2004-2005, Francis KLOSS (OCC) -# ======================================= - -from geompy import * - -import smesh - -# Geometry -# ======== - -# A small cube centered and put on a great cube build with partition - -# Values -# ------ - -g_ox = 0 -g_oy = 0 -g_oz = 0 - -g_arete = 10 - -g_trim = 1000 - -# Points -# ------ - -v_arete2 = g_arete*2 -v_arete3 = g_arete*3 - -v_1 = MakeVertex(g_ox , g_oy , g_oz ) -v_2 = MakeVertex(g_ox+v_arete3, g_oy+g_arete , g_oz+v_arete3) - -v_3 = MakeVertex(g_ox+g_arete , g_oy+g_arete , g_oz+g_arete ) -v_4 = MakeVertex(g_ox+v_arete2, g_oy+v_arete2, g_oz+v_arete2) - -# Solids -# ------ - -s_base = MakeBoxTwoPnt(v_1, v_2) -s_haut = MakeBoxTwoPnt(v_3, v_4) - -# Partition -# --------- - -p_dir1 = MakeVectorDXDYDZ(1, 0, 0) -p_dir2 = MakeVectorDXDYDZ(0, 0, 1) -p_dir3 = MakeVectorDXDYDZ(0, 1, 0) - -p_tools = [] - -p_tools.append(MakePlane(v_3, p_dir1, g_trim)) -p_tools.append(MakePlane(v_4, p_dir1, g_trim)) -p_tools.append(MakePlane(v_3, p_dir2, g_trim)) -p_tools.append(MakePlane(v_4, p_dir2, g_trim)) -p_tools.append(MakePlane(v_3, p_dir3, g_trim)) - -piece = MakePartition([s_base, s_haut], p_tools, [], [], ShapeType["SOLID"]) - -# Study -# ----- - -piece_id = addToStudy(piece, "ex03_cube2partition") - -# Meshing -# ======= - -# Create hexahedrical mesh on piece -# --------------------------------- - -hexa = smesh.Mesh(piece, "ex03_cube2partition:hexa") - -algo = hexa.Segment() -algo.NumberOfSegments(5) - -hexa.Quadrangle() - -hexa.Hexahedron() - -# Compute the mesh -# ---------------- - -hexa.Compute() diff --git a/src/SMESH_SWIG/ex04_cube5tetraHexa.py b/src/SMESH_SWIG/ex04_cube5tetraHexa.py deleted file mode 100644 index 5bb4a1c89..000000000 --- a/src/SMESH_SWIG/ex04_cube5tetraHexa.py +++ /dev/null @@ -1,87 +0,0 @@ -# CEA/LGLS 2004-2005, Francis KLOSS (OCC) -# ======================================= - -from geompy import * - -import smesh - -# Geometry -# ======== - -# 5 box with a hexahedral mesh and with 2 box in tetrahedral mesh - -# Values -# ------ - -arete = 100 - -arete0 = 0 -arete1 = arete -arete2 = arete*2 -arete3 = arete*3 - -# Solids -# ------ - -box_tetra1 = MakeBox(arete0, arete0, 0, arete1, arete1, arete) - -box_ijk1 = MakeBox(arete1, arete0, 0, arete2, arete1, arete) - -box_hexa = MakeBox(arete1, arete1, 0, arete2, arete2, arete) - -box_ijk2 = MakeBox(arete2, arete1, 0, arete3, arete2, arete) - -box_tetra2 = MakeBox(arete2, arete2, 0, arete3 ,arete3, arete) - -# Piece -# ----- - -piece_cpd = MakeCompound([box_tetra1, box_ijk1, box_hexa, box_ijk2, box_tetra2]) - -piece = MakeGlueFaces(piece_cpd, 1e-4) - -piece_id = addToStudy(piece, "ex04_cube5tetraHexa") - -# Meshing -# ======= - -# Create a hexahedral mesh -# ------------------------ - -mixed = smesh.Mesh(piece, "ex04_cube5tetraHexa:mixed") - -algo = mixed.Segment() - -algo.StartEndLength(3, 25) - -mixed.Quadrangle() - -mixed.Hexahedron() - -# Tetrahedral local mesh -# ---------------------- - -def localMesh(b, hyp): - box = GetInPlace(piece, b) - faces = SubShapeAll(box, ShapeType["FACE"]) - - i = 0 - n = len(faces) - while i> _begLength); - if (!isOK) - load.clear(ios::badbit | load.rdstate()); - isOK = (load >> _endLength); - if (!isOK) - load.clear(ios::badbit | load.rdstate()); - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator <<(ostream & save, StdMeshers_Arithmetic1D & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >>(istream & load, StdMeshers_Arithmetic1D & hyp) -{ - return hyp.LoadFrom( load ); -} diff --git a/src/StdMeshers/StdMeshers_Arithmetic1D.hxx b/src/StdMeshers/StdMeshers_Arithmetic1D.hxx deleted file mode 100644 index ca49df175..000000000 --- a/src/StdMeshers/StdMeshers_Arithmetic1D.hxx +++ /dev/null @@ -1,55 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Arithmetic1D.hxx -// Author : Damien COQUERET, OCC -// Module : SMESH -// $Header$ - -#ifndef _SMESH_ARITHMETIC1D_HXX_ -#define _SMESH_ARITHMETIC1D_HXX_ - -#include "SMESH_Hypothesis.hxx" -#include "Utils_SALOME_Exception.hxx" - -class StdMeshers_Arithmetic1D: - public SMESH_Hypothesis -{ -public: - StdMeshers_Arithmetic1D(int hypId, int studyId, SMESH_Gen* gen); - virtual ~StdMeshers_Arithmetic1D(); - - void SetLength(double length, bool isStartLength) throw(SALOME_Exception); - - double GetLength(bool isStartLength) const; - - virtual ostream & SaveTo(ostream & save); - virtual istream & LoadFrom(istream & load); - friend ostream& operator << (ostream & save, StdMeshers_Arithmetic1D & hyp); - friend istream& operator >> (istream & load, StdMeshers_Arithmetic1D & hyp); - -protected: - double _begLength, _endLength; -}; - -#endif diff --git a/src/StdMeshers/StdMeshers_Deflection1D.cxx b/src/StdMeshers/StdMeshers_Deflection1D.cxx deleted file mode 100644 index f6e54691c..000000000 --- a/src/StdMeshers/StdMeshers_Deflection1D.cxx +++ /dev/null @@ -1,136 +0,0 @@ -// SMESH StdMeshers_Deflection1D : 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Deflection1D.cxx -// Module : SMESH -// $Header$ - -using namespace std; - -#include "StdMeshers_Deflection1D.hxx" -#include "utilities.h" - - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_Deflection1D::StdMeshers_Deflection1D(int hypId, - int studyId, - SMESH_Gen * gen) - :SMESH_Hypothesis(hypId, studyId, gen) -{ - _value = 1.; - _name = "Deflection1D"; - _param_algo_dim = 1; // is used by SMESH_Regular_1D -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_Deflection1D::~StdMeshers_Deflection1D() -{ -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void StdMeshers_Deflection1D::SetDeflection(double value) - throw(SALOME_Exception) -{ - if (_value != value) { - if (value <= 0.) - throw SALOME_Exception(LOCALIZED("Value must be positive")); - - NotifySubMeshesHypothesisModification(); - - _value = value; - } -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -double StdMeshers_Deflection1D::GetDeflection() const -{ - return _value; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & StdMeshers_Deflection1D::SaveTo(ostream & save) -{ - save << _value; - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & StdMeshers_Deflection1D::LoadFrom(istream & load) -{ - bool isOK = (load >> _value); - if (!isOK) - load.clear(ios::badbit | load.rdstate()); - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator <<(ostream & save, StdMeshers_Deflection1D & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >>(istream & load, StdMeshers_Deflection1D & hyp) -{ - return hyp.LoadFrom( load ); -} diff --git a/src/StdMeshers/StdMeshers_Deflection1D.hxx b/src/StdMeshers/StdMeshers_Deflection1D.hxx deleted file mode 100644 index 1ed43cb7d..000000000 --- a/src/StdMeshers/StdMeshers_Deflection1D.hxx +++ /dev/null @@ -1,53 +0,0 @@ -// SMESH StdMeshers : 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Deflection1D.hxx -// Module : SMESH -// $Header$ - -#ifndef _StdMeshers_Deflection1D_HXX_ -#define _StdMeshers_Deflection1D_HXX_ - -#include "SMESH_Hypothesis.hxx" -#include "Utils_SALOME_Exception.hxx" - -class StdMeshers_Deflection1D:public SMESH_Hypothesis -{ - public: - StdMeshers_Deflection1D(int hypId, int studyId, SMESH_Gen * gen); - virtual ~ StdMeshers_Deflection1D(); - - void SetDeflection(double value) throw(SALOME_Exception); - - double GetDeflection() const; - - virtual ostream & SaveTo(ostream & save); - virtual istream & LoadFrom(istream & load); - friend ostream & operator <<(ostream & save, StdMeshers_Deflection1D & hyp); - friend istream & operator >>(istream & load, StdMeshers_Deflection1D & hyp); - - protected: - double _value; -}; - -#endif diff --git a/src/StdMeshers/StdMeshers_Hexa_3D.cxx b/src/StdMeshers/StdMeshers_Hexa_3D.cxx deleted file mode 100644 index 597c35404..000000000 --- a/src/StdMeshers/StdMeshers_Hexa_3D.cxx +++ /dev/null @@ -1,1081 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Hexa_3D.cxx -// Moved here from SMESH_Hexa_3D.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_Hexa_3D.hxx" -#include "StdMeshers_Quadrangle_2D.hxx" -#include "SMESH_Gen.hxx" -#include "SMESH_Mesh.hxx" -#include "SMESH_subMesh.hxx" - -#include "SMDS_MeshElement.hxx" -#include "SMDS_MeshNode.hxx" -#include "SMDS_FacePosition.hxx" -#include "SMDS_VolumeTool.hxx" -#include "SMDS_VolumeOfNodes.hxx" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "utilities.h" -#include "Utils_ExceptHandlers.hxx" - -//modified by NIZNHY-PKV Wed Nov 17 15:31:58 2004 f -#include "StdMeshers_Penta_3D.hxx" - -static bool ComputePentahedralMesh(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape); -//modified by NIZNHY-PKV Wed Nov 17 15:32:00 2004 t - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_Hexa_3D::StdMeshers_Hexa_3D(int hypId, int studyId, - SMESH_Gen * gen):SMESH_3D_Algo(hypId, studyId, gen) -{ - MESSAGE("StdMeshers_Hexa_3D::StdMeshers_Hexa_3D"); - _name = "Hexa_3D"; -// _shapeType = TopAbs_SOLID; - _shapeType = (1 << TopAbs_SHELL) | (1 << TopAbs_SOLID); // 1 bit /shape type -// MESSAGE("_shapeType octal " << oct << _shapeType); - for (int i = 0; i < 6; i++) - _quads[i] = 0; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_Hexa_3D::~StdMeshers_Hexa_3D() -{ - MESSAGE("StdMeshers_Hexa_3D::~StdMeshers_Hexa_3D"); - for (int i = 0; i < 6; i++) - StdMeshers_Quadrangle_2D::QuadDelete(_quads[i]); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool StdMeshers_Hexa_3D::CheckHypothesis - (SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - SMESH_Hypothesis::Hypothesis_Status& aStatus) -{ - //MESSAGE("StdMeshers_Hexa_3D::CheckHypothesis"); - - bool isOk = true; - aStatus = SMESH_Hypothesis::HYP_OK; - - // nothing to check - - return isOk; -} - -//======================================================================= -//function : findIJ -//purpose : return i,j of the node -//======================================================================= - -static bool findIJ (const SMDS_MeshNode* node, const FaceQuadStruct * quad, int& I, int& J) -{ - I = J = 0; - const SMDS_FacePosition* fpos = - static_cast(node->GetPosition().get()); - if ( ! fpos ) return false; - gp_Pnt2d uv( fpos->GetUParameter(), fpos->GetVParameter() ); - - double minDist = DBL_MAX; - int nbhoriz = Min(quad->nbPts[0], quad->nbPts[2]); - int nbvertic = Min(quad->nbPts[1], quad->nbPts[3]); - for (int i = 1; i < nbhoriz - 1; i++) { - for (int j = 1; j < nbvertic - 1; j++) { - int ij = j * nbhoriz + i; - gp_Pnt2d uv2( quad->uv_grid[ij].u, quad->uv_grid[ij].v ); - double dist = uv.SquareDistance( uv2 ); - if ( dist < minDist ) { - minDist = dist; - I = i; - J = j; - } - } - } - return true; -} - -//============================================================================= -/*! - * Hexahedron mesh on hexaedron like form - * -0. - shape and face mesh verification - * -1. - identify faces and vertices of the "cube" - * -2. - Algorithm from: - * "Application de l'interpolation transfinie à la création de maillages - * C0 ou G1 continus sur des triangles, quadrangles, tetraedres, pentaedres - * et hexaedres déformés." - * Alain PERONNET - 8 janvier 1999 - */ -//============================================================================= - -bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh, - const TopoDS_Shape & aShape)throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - MESSAGE("StdMeshers_Hexa_3D::Compute"); - //bool isOk = false; - SMESHDS_Mesh * meshDS = aMesh.GetMeshDS(); - //SMESH_subMesh *theSubMesh = aMesh.GetSubMesh(aShape); - //const SMESHDS_SubMesh *& subMeshDS = theSubMesh->GetSubMeshDS(); - - // 0. - shape and face mesh verification - // 0.1 - shape must be a solid (or a shell) with 6 faces - //MESSAGE("---"); - - vector < SMESH_subMesh * >meshFaces; - for (TopExp_Explorer exp(aShape, TopAbs_FACE); exp.More(); exp.Next()) - { - SMESH_subMesh *aSubMesh = aMesh.GetSubMeshContaining(exp.Current()); - ASSERT(aSubMesh); - meshFaces.push_back(aSubMesh); - } - if (meshFaces.size() != 6) - { - SCRUTE(meshFaces.size()); -// ASSERT(0); - return false; - } - - // 0.2 - is each face meshed with Quadrangle_2D? (so, with a wire of 4 edges) - //MESSAGE("---"); - - for (int i = 0; i < 6; i++) - { - TopoDS_Shape aFace = meshFaces[i]->GetSubShape(); - SMESH_Algo *algo = _gen->GetAlgo(aMesh, aFace); - string algoName = algo->GetName(); - bool isAllQuad = false; - if (algoName == "Quadrangle_2D") { - SMESHDS_SubMesh * sm = meshDS->MeshElements( aFace ); - if ( sm ) { - isAllQuad = true; - SMDS_ElemIteratorPtr eIt = sm->GetElements(); - while ( isAllQuad && eIt->more() ) - isAllQuad = ( eIt->next()->NbNodes() == 4 ); - } - } - if ( ! isAllQuad ) { - //modified by NIZNHY-PKV Wed Nov 17 15:31:37 2004 f - bool bIsOk; - // - bIsOk=ComputePentahedralMesh(aMesh, aShape); - if (bIsOk) { - return true; - } - //modified by NIZNHY-PKV Wed Nov 17 15:31:42 2004 t - SCRUTE(algoName); - // ASSERT(0); - return false; - } - StdMeshers_Quadrangle_2D *quadAlgo = - dynamic_cast < StdMeshers_Quadrangle_2D * >(algo); - ASSERT(quadAlgo); - try - { - _quads[i] = quadAlgo->CheckAnd2Dcompute(aMesh, aFace); - // *** to delete after usage - } - catch(SALOME_Exception & S_ex) - { - // *** delete _quads - // *** throw exception - // ASSERT(0); - return false; - } - - // 0.2.1 - number of points on the opposite edges must be the same - if (_quads[i]->nbPts[0] != _quads[i]->nbPts[2] || - _quads[i]->nbPts[1] != _quads[i]->nbPts[3]) - { - MESSAGE("different number of points on the opposite edges of face " << i); - // ASSERT(0); - return false; - } - } - - // 1. - identify faces and vertices of the "cube" - // 1.1 - ancestor maps vertex->edges in the cube - //MESSAGE("---"); - - TopTools_IndexedDataMapOfShapeListOfShape MS; - TopExp::MapShapesAndAncestors(aShape, TopAbs_VERTEX, TopAbs_EDGE, MS); - - // 1.2 - first face is choosen as face Y=0 of the unit cube - //MESSAGE("---"); - - const TopoDS_Shape & aFace = meshFaces[0]->GetSubShape(); - const TopoDS_Face & F = TopoDS::Face(aFace); - - // 1.3 - identify the 4 vertices of the face Y=0: V000, V100, V101, V001 - //MESSAGE("---"); - - int i = 0; - TopoDS_Edge E = _quads[0]->edge[i]; //edge will be Y=0,Z=0 on unit cube - double f, l; - Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, f, l); - TopoDS_Vertex VFirst, VLast; - TopExp::Vertices(E, VFirst, VLast); // corresponds to f and l - bool isForward = - (((l - f) * (_quads[0]->last[i] - _quads[0]->first[i])) > 0); - - if (isForward) - { - _cube.V000 = VFirst; // will be (0,0,0) on the unit cube - _cube.V100 = VLast; // will be (1,0,0) on the unit cube - } - else - { - _cube.V000 = VLast; - _cube.V100 = VFirst; - } - - i = 1; - E = _quads[0]->edge[i]; - C2d = BRep_Tool::CurveOnSurface(E, F, f, l); - TopExp::Vertices(E, VFirst, VLast); - isForward = (((l - f) * (_quads[0]->last[i] - _quads[0]->first[i])) > 0); - if (isForward) - _cube.V101 = VLast; // will be (1,0,1) on the unit cube - else - _cube.V101 = VFirst; - - i = 2; - E = _quads[0]->edge[i]; - C2d = BRep_Tool::CurveOnSurface(E, F, f, l); - TopExp::Vertices(E, VFirst, VLast); - isForward = (((l - f) * (_quads[0]->last[i] - _quads[0]->first[i])) > 0); - if (isForward) - _cube.V001 = VLast; // will be (0,0,1) on the unit cube - else - _cube.V001 = VFirst; - - // 1.4 - find edge X=0, Z=0 (ancestor of V000 not in face Y=0) - // - find edge X=1, Z=0 (ancestor of V100 not in face Y=0) - // - find edge X=1, Z=1 (ancestor of V101 not in face Y=0) - // - find edge X=0, Z=1 (ancestor of V001 not in face Y=0) - //MESSAGE("---"); - - TopoDS_Edge E_0Y0 = EdgeNotInFace(aMesh, aShape, F, _cube.V000, MS); - ASSERT(!E_0Y0.IsNull()); - - TopoDS_Edge E_1Y0 = EdgeNotInFace(aMesh, aShape, F, _cube.V100, MS); - ASSERT(!E_1Y0.IsNull()); - - TopoDS_Edge E_1Y1 = EdgeNotInFace(aMesh, aShape, F, _cube.V101, MS); - ASSERT(!E_1Y1.IsNull()); - - TopoDS_Edge E_0Y1 = EdgeNotInFace(aMesh, aShape, F, _cube.V001, MS); - ASSERT(!E_0Y1.IsNull()); - - // 1.5 - identify the 4 vertices in face Y=1: V010, V110, V111, V011 - //MESSAGE("---"); - - TopExp::Vertices(E_0Y0, VFirst, VLast); - if (VFirst.IsSame(_cube.V000)) - _cube.V010 = VLast; - else - _cube.V010 = VFirst; - - TopExp::Vertices(E_1Y0, VFirst, VLast); - if (VFirst.IsSame(_cube.V100)) - _cube.V110 = VLast; - else - _cube.V110 = VFirst; - - TopExp::Vertices(E_1Y1, VFirst, VLast); - if (VFirst.IsSame(_cube.V101)) - _cube.V111 = VLast; - else - _cube.V111 = VFirst; - - TopExp::Vertices(E_0Y1, VFirst, VLast); - if (VFirst.IsSame(_cube.V001)) - _cube.V011 = VLast; - else - _cube.V011 = VFirst; - - // 1.6 - find remaining faces given 4 vertices - //MESSAGE("---"); - - _indY0 = 0; - _cube.quad_Y0 = _quads[_indY0]; - - _indY1 = GetFaceIndex(aMesh, aShape, meshFaces, - _cube.V010, _cube.V011, _cube.V110, _cube.V111); - _cube.quad_Y1 = _quads[_indY1]; - - _indZ0 = GetFaceIndex(aMesh, aShape, meshFaces, - _cube.V000, _cube.V010, _cube.V100, _cube.V110); - _cube.quad_Z0 = _quads[_indZ0]; - - _indZ1 = GetFaceIndex(aMesh, aShape, meshFaces, - _cube.V001, _cube.V011, _cube.V101, _cube.V111); - _cube.quad_Z1 = _quads[_indZ1]; - - _indX0 = GetFaceIndex(aMesh, aShape, meshFaces, - _cube.V000, _cube.V001, _cube.V010, _cube.V011); - _cube.quad_X0 = _quads[_indX0]; - - _indX1 = GetFaceIndex(aMesh, aShape, meshFaces, - _cube.V100, _cube.V101, _cube.V110, _cube.V111); - _cube.quad_X1 = _quads[_indX1]; - - //MESSAGE("---"); - - // 1.7 - get convertion coefs from face 2D normalized to 3D normalized - - Conv2DStruct cx0; // for face X=0 - Conv2DStruct cx1; // for face X=1 - Conv2DStruct cy0; - Conv2DStruct cy1; - Conv2DStruct cz0; - Conv2DStruct cz1; - - GetConv2DCoefs(*_cube.quad_X0, meshFaces[_indX0]->GetSubShape(), - _cube.V000, _cube.V010, _cube.V011, _cube.V001, cx0); - GetConv2DCoefs(*_cube.quad_X1, meshFaces[_indX1]->GetSubShape(), - _cube.V100, _cube.V110, _cube.V111, _cube.V101, cx1); - GetConv2DCoefs(*_cube.quad_Y0, meshFaces[_indY0]->GetSubShape(), - _cube.V000, _cube.V100, _cube.V101, _cube.V001, cy0); - GetConv2DCoefs(*_cube.quad_Y1, meshFaces[_indY1]->GetSubShape(), - _cube.V010, _cube.V110, _cube.V111, _cube.V011, cy1); - GetConv2DCoefs(*_cube.quad_Z0, meshFaces[_indZ0]->GetSubShape(), - _cube.V000, _cube.V100, _cube.V110, _cube.V010, cz0); - GetConv2DCoefs(*_cube.quad_Z1, meshFaces[_indZ1]->GetSubShape(), - _cube.V001, _cube.V101, _cube.V111, _cube.V011, cz1); - - // 1.8 - create a 3D structure for normalized values - - //MESSAGE("---"); - int nbx = _cube.quad_Z0->nbPts[0]; - if (cz0.a1 == 0.) nbx = _cube.quad_Z0->nbPts[1]; - - int nby = _cube.quad_X0->nbPts[0]; - if (cx0.a1 == 0.) nby = _cube.quad_X0->nbPts[1]; - - int nbz = _cube.quad_Y0->nbPts[0]; - if (cy0.a1 != 0.) nbz = _cube.quad_Y0->nbPts[1]; - - int i1, j1, nbxyz = nbx * nby * nbz; - Point3DStruct *np = new Point3DStruct[nbxyz]; - - // 1.9 - store node indexes of faces - - { - const TopoDS_Face & F = TopoDS::Face(meshFaces[_indX0]->GetSubShape()); - - faceQuadStruct *quad = _cube.quad_X0; - int i = 0; // j = x/face , k = y/face - int nbdown = quad->nbPts[0]; - int nbright = quad->nbPts[1]; - - - SMDS_NodeIteratorPtr itf= aMesh.GetSubMesh(F)->GetSubMeshDS()->GetNodes(); - - while(itf->more()) - { - const SMDS_MeshNode * node = itf->next(); - findIJ( node, quad, i1, j1 ); - int ij1 = j1 * nbdown + i1; - quad->uv_grid[ij1].node = node; - } - - for (int i1 = 0; i1 < nbdown; i1++) - for (int j1 = 0; j1 < nbright; j1++) - { - int ij1 = j1 * nbdown + i1; - int j = cx0.ia * i1 + cx0.ib * j1 + cx0.ic; // j = x/face - int k = cx0.ja * i1 + cx0.jb * j1 + cx0.jc; // k = y/face - int ijk = k * nbx * nby + j * nbx + i; - //MESSAGE(" "<uv_grid[ij1].node; - //SCRUTE(np[ijk].nodeId); - } - } - - { - const TopoDS_Face & F = TopoDS::Face(meshFaces[_indX1]->GetSubShape()); - - SMDS_NodeIteratorPtr itf= aMesh.GetSubMesh(F)->GetSubMeshDS()->GetNodes(); - - faceQuadStruct *quad = _cube.quad_X1; - int i = nbx - 1; // j = x/face , k = y/face - int nbdown = quad->nbPts[0]; - int nbright = quad->nbPts[1]; - - while(itf->more()) - { - const SMDS_MeshNode * node = itf->next(); - findIJ( node, quad, i1, j1 ); - int ij1 = j1 * nbdown + i1; - quad->uv_grid[ij1].node = node; - } - - for (int i1 = 0; i1 < nbdown; i1++) - for (int j1 = 0; j1 < nbright; j1++) - { - int ij1 = j1 * nbdown + i1; - int j = cx1.ia * i1 + cx1.ib * j1 + cx1.ic; // j = x/face - int k = cx1.ja * i1 + cx1.jb * j1 + cx1.jc; // k = y/face - int ijk = k * nbx * nby + j * nbx + i; - //MESSAGE(" "<uv_grid[ij1].node; - //SCRUTE(np[ijk].nodeId); - } - } - - { - const TopoDS_Face & F = TopoDS::Face(meshFaces[_indY0]->GetSubShape()); - - SMDS_NodeIteratorPtr itf= aMesh.GetSubMesh(F)->GetSubMeshDS()->GetNodes(); - - faceQuadStruct *quad = _cube.quad_Y0; - int j = 0; // i = x/face , k = y/face - int nbdown = quad->nbPts[0]; - int nbright = quad->nbPts[1]; - - while(itf->more()) - { - const SMDS_MeshNode * node = itf->next(); - findIJ( node, quad, i1, j1 ); - int ij1 = j1 * nbdown + i1; - quad->uv_grid[ij1].node = node; - } - - for (int i1 = 0; i1 < nbdown; i1++) - for (int j1 = 0; j1 < nbright; j1++) - { - int ij1 = j1 * nbdown + i1; - int i = cy0.ia * i1 + cy0.ib * j1 + cy0.ic; // i = x/face - int k = cy0.ja * i1 + cy0.jb * j1 + cy0.jc; // k = y/face - int ijk = k * nbx * nby + j * nbx + i; - //MESSAGE(" "<uv_grid[ij1].node; - //SCRUTE(np[ijk].nodeId); - } - } - - { - const TopoDS_Face & F = TopoDS::Face(meshFaces[_indY1]->GetSubShape()); - - SMDS_NodeIteratorPtr itf= aMesh.GetSubMesh(F)->GetSubMeshDS()->GetNodes(); - - faceQuadStruct *quad = _cube.quad_Y1; - int j = nby - 1; // i = x/face , k = y/face - int nbdown = quad->nbPts[0]; - int nbright = quad->nbPts[1]; - - while(itf->more()) - { - const SMDS_MeshNode * node = itf->next(); - findIJ( node, quad, i1, j1 ); - int ij1 = j1 * nbdown + i1; - quad->uv_grid[ij1].node = node; - } - - for (int i1 = 0; i1 < nbdown; i1++) - for (int j1 = 0; j1 < nbright; j1++) - { - int ij1 = j1 * nbdown + i1; - int i = cy1.ia * i1 + cy1.ib * j1 + cy1.ic; // i = x/face - int k = cy1.ja * i1 + cy1.jb * j1 + cy1.jc; // k = y/face - int ijk = k * nbx * nby + j * nbx + i; - //MESSAGE(" "<uv_grid[ij1].node; - //SCRUTE(np[ijk].nodeId); - } - } - - { - const TopoDS_Face & F = TopoDS::Face(meshFaces[_indZ0]->GetSubShape()); - - SMDS_NodeIteratorPtr itf= aMesh.GetSubMesh(F)->GetSubMeshDS()->GetNodes(); - - faceQuadStruct *quad = _cube.quad_Z0; - int k = 0; // i = x/face , j = y/face - int nbdown = quad->nbPts[0]; - int nbright = quad->nbPts[1]; - - while(itf->more()) - { - const SMDS_MeshNode * node = itf->next(); - findIJ( node, quad, i1, j1 ); - int ij1 = j1 * nbdown + i1; - quad->uv_grid[ij1].node = node; - } - - for (int i1 = 0; i1 < nbdown; i1++) - for (int j1 = 0; j1 < nbright; j1++) - { - int ij1 = j1 * nbdown + i1; - int i = cz0.ia * i1 + cz0.ib * j1 + cz0.ic; // i = x/face - int j = cz0.ja * i1 + cz0.jb * j1 + cz0.jc; // j = y/face - int ijk = k * nbx * nby + j * nbx + i; - //MESSAGE(" "<uv_grid[ij1].node; - //SCRUTE(np[ijk].nodeId); - } - } - - { - const TopoDS_Face & F = TopoDS::Face(meshFaces[_indZ1]->GetSubShape()); - - SMDS_NodeIteratorPtr itf= aMesh.GetSubMesh(F)->GetSubMeshDS()->GetNodes(); - - faceQuadStruct *quad = _cube.quad_Z1; - int k = nbz - 1; // i = x/face , j = y/face - int nbdown = quad->nbPts[0]; - int nbright = quad->nbPts[1]; - - while(itf->more()) - { - const SMDS_MeshNode * node = itf->next(); - findIJ( node, quad, i1, j1 ); - int ij1 = j1 * nbdown + i1; - quad->uv_grid[ij1].node = node; - } - - for (int i1 = 0; i1 < nbdown; i1++) - for (int j1 = 0; j1 < nbright; j1++) - { - int ij1 = j1 * nbdown + i1; - int i = cz1.ia * i1 + cz1.ib * j1 + cz1.ic; // i = x/face - int j = cz1.ja * i1 + cz1.jb * j1 + cz1.jc; // j = y/face - int ijk = k * nbx * nby + j * nbx + i; - //MESSAGE(" "<uv_grid[ij1].node; - //SCRUTE(np[ijk].nodeId); - } - } - - // 2.0 - for each node of the cube: - // - get the 8 points 3D = 8 vertices of the cube - // - get the 12 points 3D on the 12 edges of the cube - // - get the 6 points 3D on the 6 faces with their ID - // - compute the point 3D - // - store the point 3D in SMESHDS, store its ID in 3D structure - - TopoDS_Shell aShell; - TopExp_Explorer exp(aShape, TopAbs_SHELL); - if (exp.More()) - { - aShell = TopoDS::Shell(exp.Current()); - } - else - { - MESSAGE("no shell..."); - ASSERT(0); - } - - Pt3 p000, p001, p010, p011, p100, p101, p110, p111; - Pt3 px00, px01, px10, px11; - Pt3 p0y0, p0y1, p1y0, p1y1; - Pt3 p00z, p01z, p10z, p11z; - Pt3 pxy0, pxy1, px0z, px1z, p0yz, p1yz; - - GetPoint(p000, 0, 0, 0, nbx, nby, nbz, np, meshDS); - GetPoint(p001, 0, 0, nbz - 1, nbx, nby, nbz, np, meshDS); - GetPoint(p010, 0, nby - 1, 0, nbx, nby, nbz, np, meshDS); - GetPoint(p011, 0, nby - 1, nbz - 1, nbx, nby, nbz, np, meshDS); - GetPoint(p100, nbx - 1, 0, 0, nbx, nby, nbz, np, meshDS); - GetPoint(p101, nbx - 1, 0, nbz - 1, nbx, nby, nbz, np, meshDS); - GetPoint(p110, nbx - 1, nby - 1, 0, nbx, nby, nbz, np, meshDS); - GetPoint(p111, nbx - 1, nby - 1, nbz - 1, nbx, nby, nbz, np, meshDS); - - for (int i = 1; i < nbx - 1; i++) - { - for (int j = 1; j < nby - 1; j++) - { - for (int k = 1; k < nbz - 1; k++) - { - // *** seulement maillage regulier - // 12 points on edges - GetPoint(px00, i, 0, 0, nbx, nby, nbz, np, meshDS); - GetPoint(px01, i, 0, nbz - 1, nbx, nby, nbz, np, meshDS); - GetPoint(px10, i, nby - 1, 0, nbx, nby, nbz, np, meshDS); - GetPoint(px11, i, nby - 1, nbz - 1, nbx, nby, nbz, np, meshDS); - - GetPoint(p0y0, 0, j, 0, nbx, nby, nbz, np, meshDS); - GetPoint(p0y1, 0, j, nbz - 1, nbx, nby, nbz, np, meshDS); - GetPoint(p1y0, nbx - 1, j, 0, nbx, nby, nbz, np, meshDS); - GetPoint(p1y1, nbx - 1, j, nbz - 1, nbx, nby, nbz, np, meshDS); - - GetPoint(p00z, 0, 0, k, nbx, nby, nbz, np, meshDS); - GetPoint(p01z, 0, nby - 1, k, nbx, nby, nbz, np, meshDS); - GetPoint(p10z, nbx - 1, 0, k, nbx, nby, nbz, np, meshDS); - GetPoint(p11z, nbx - 1, nby - 1, k, nbx, nby, nbz, np, meshDS); - - // 12 points on faces - GetPoint(pxy0, i, j, 0, nbx, nby, nbz, np, meshDS); - GetPoint(pxy1, i, j, nbz - 1, nbx, nby, nbz, np, meshDS); - GetPoint(px0z, i, 0, k, nbx, nby, nbz, np, meshDS); - GetPoint(px1z, i, nby - 1, k, nbx, nby, nbz, np, meshDS); - GetPoint(p0yz, 0, j, k, nbx, nby, nbz, np, meshDS); - GetPoint(p1yz, nbx - 1, j, k, nbx, nby, nbz, np, meshDS); - - int ijk = k * nbx * nby + j * nbx + i; - double x = double (i) / double (nbx - 1); // *** seulement - double y = double (j) / double (nby - 1); // *** maillage - double z = double (k) / double (nbz - 1); // *** regulier - - Pt3 X; - for (int i = 0; i < 3; i++) - { - X[i] = - (1 - x) * p0yz[i] + x * p1yz[i] - + (1 - y) * px0z[i] + y * px1z[i] - + (1 - z) * pxy0[i] + z * pxy1[i] - - (1 - x) * ((1 - y) * p00z[i] + y * p01z[i]) - - x * ((1 - y) * p10z[i] + y * p11z[i]) - - (1 - y) * ((1 - z) * px00[i] + z * px01[i]) - - y * ((1 - z) * px10[i] + z * px11[i]) - - (1 - z) * ((1 - x) * p0y0[i] + x * p1y0[i]) - - z * ((1 - x) * p0y1[i] + x * p1y1[i]) - + (1 - x) * ((1 - y) * ((1 - z) * p000[i] + z * p001[i]) - + y * ((1 - z) * p010[i] + z * p011[i])) - + x * ((1 - y) * ((1 - z) * p100[i] + z * p101[i]) - + y * ((1 - z) * p110[i] + z * p111[i])); - } - - SMDS_MeshNode * node = meshDS->AddNode(X[0], X[1], X[2]); - np[ijk].node = node; - //meshDS->SetNodeInVolume(node, TopoDS::Solid(aShape)); - meshDS->SetNodeInVolume(node, aShell); - } - } - } - - // find orientation of furute volumes according to MED convention - vector< bool > forward( nbx * nby ); - SMDS_VolumeTool vTool; - for (int i = 0; i < nbx - 1; i++) - for (int j = 0; j < nby - 1; j++) - { - int n1 = j * nbx + i; - int n2 = j * nbx + i + 1; - int n3 = (j + 1) * nbx + i + 1; - int n4 = (j + 1) * nbx + i; - int n5 = nbx * nby + j * nbx + i; - int n6 = nbx * nby + j * nbx + i + 1; - int n7 = nbx * nby + (j + 1) * nbx + i + 1; - int n8 = nbx * nby + (j + 1) * nbx + i; - - SMDS_VolumeOfNodes tmpVol (np[n1].node,np[n2].node,np[n3].node,np[n4].node, - np[n5].node,np[n6].node,np[n7].node,np[n8].node); - vTool.Set( &tmpVol ); - forward[ n1 ] = vTool.IsForward(); - } - - //2.1 - for each node of the cube (less 3 *1 Faces): - // - store hexahedron in SMESHDS - MESSAGE("Storing hexahedron into the DS"); - for (int i = 0; i < nbx - 1; i++) - for (int j = 0; j < nby - 1; j++) - { - bool isForw = forward.at( j * nbx + i ); - for (int k = 0; k < nbz - 1; k++) - { - int n1 = k * nbx * nby + j * nbx + i; - int n2 = k * nbx * nby + j * nbx + i + 1; - int n3 = k * nbx * nby + (j + 1) * nbx + i + 1; - int n4 = k * nbx * nby + (j + 1) * nbx + i; - int n5 = (k + 1) * nbx * nby + j * nbx + i; - int n6 = (k + 1) * nbx * nby + j * nbx + i + 1; - int n7 = (k + 1) * nbx * nby + (j + 1) * nbx + i + 1; - int n8 = (k + 1) * nbx * nby + (j + 1) * nbx + i; - - SMDS_MeshVolume * elt; - if ( isForw ) - elt = meshDS->AddVolume(np[n1].node, - np[n2].node, - np[n3].node, - np[n4].node, - np[n5].node, - np[n6].node, - np[n7].node, - np[n8].node); - else - elt = meshDS->AddVolume(np[n1].node, - np[n4].node, - np[n3].node, - np[n2].node, - np[n5].node, - np[n8].node, - np[n7].node, - np[n6].node); - - meshDS->SetMeshElementOnShape(elt, aShell); - - - } - } - if ( np ) delete [] np; - //MESSAGE("End of StdMeshers_Hexa_3D::Compute()"); - return true; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void StdMeshers_Hexa_3D::GetPoint(Pt3 p, int i, int j, int k, int nbx, int nby, - int nbz, Point3DStruct * np, const SMESHDS_Mesh * meshDS) -{ - int ijk = k * nbx * nby + j * nbx + i; - const SMDS_MeshNode * node = np[ijk].node; - p[0] = node->X(); - p[1] = node->Y(); - p[2] = node->Z(); - //MESSAGE(" "<&meshFaces, - const TopoDS_Vertex & V0, - const TopoDS_Vertex & V1, - const TopoDS_Vertex & V2, const TopoDS_Vertex & V3) -{ - //MESSAGE("StdMeshers_Hexa_3D::GetFaceIndex"); - int faceIndex = -1; - for (int i = 1; i < 6; i++) - { - const TopoDS_Shape & aFace = meshFaces[i]->GetSubShape(); - //const TopoDS_Face& F = TopoDS::Face(aFace); - TopTools_IndexedMapOfShape M; - TopExp::MapShapes(aFace, TopAbs_VERTEX, M); - bool verticesInShape = false; - if (M.Contains(V0)) - if (M.Contains(V1)) - if (M.Contains(V2)) - if (M.Contains(V3)) - verticesInShape = true; - if (verticesInShape) - { - faceIndex = i; - break; - } - } - ASSERT(faceIndex > 0); - //SCRUTE(faceIndex); - return faceIndex; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -TopoDS_Edge - StdMeshers_Hexa_3D::EdgeNotInFace(SMESH_Mesh & aMesh, - const TopoDS_Shape & aShape, - const TopoDS_Face & aFace, - const TopoDS_Vertex & aVertex, - const TopTools_IndexedDataMapOfShapeListOfShape & MS) -{ - //MESSAGE("StdMeshers_Hexa_3D::EdgeNotInFace"); - TopTools_IndexedDataMapOfShapeListOfShape MF; - TopExp::MapShapesAndAncestors(aFace, TopAbs_VERTEX, TopAbs_EDGE, MF); - const TopTools_ListOfShape & ancestorsInSolid = MS.FindFromKey(aVertex); - const TopTools_ListOfShape & ancestorsInFace = MF.FindFromKey(aVertex); -// SCRUTE(ancestorsInSolid.Extent()); -// SCRUTE(ancestorsInFace.Extent()); - ASSERT(ancestorsInSolid.Extent() == 6); // 6 (edges doublees) - ASSERT(ancestorsInFace.Extent() == 2); - - TopoDS_Edge E; - E.Nullify(); - TopTools_ListIteratorOfListOfShape its(ancestorsInSolid); - for (; its.More(); its.Next()) - { - TopoDS_Shape ancestor = its.Value(); - TopTools_ListIteratorOfListOfShape itf(ancestorsInFace); - bool isInFace = false; - for (; itf.More(); itf.Next()) - { - TopoDS_Shape ancestorInFace = itf.Value(); - if (ancestorInFace.IsSame(ancestor)) - { - isInFace = true; - break; - } - } - if (!isInFace) - { - E = TopoDS::Edge(ancestor); - break; - } - } - return E; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void StdMeshers_Hexa_3D::GetConv2DCoefs(const faceQuadStruct & quad, - const TopoDS_Shape & aShape, - const TopoDS_Vertex & V0, - const TopoDS_Vertex & V1, - const TopoDS_Vertex & V2, const TopoDS_Vertex & V3, Conv2DStruct & conv) -{ -// MESSAGE("StdMeshers_Hexa_3D::GetConv2DCoefs"); - const TopoDS_Face & F = TopoDS::Face(aShape); - TopoDS_Edge E = quad.edge[0]; - double f, l; - Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, f, l); - TopoDS_Vertex VFirst, VLast; - TopExp::Vertices(E, VFirst, VLast); // corresponds to f and l - bool isForward = (((l - f) * (quad.last[0] - quad.first[0])) > 0); - TopoDS_Vertex VA, VB; - if (isForward) - { - VA = VFirst; - VB = VLast; - } - else - { - VA = VLast; - VB = VFirst; - } - int a1, b1, c1, a2, b2, c2; - if (VA.IsSame(V0)) - if (VB.IsSame(V1)) - { - a1 = 1; - b1 = 0; - c1 = 0; // x - a2 = 0; - b2 = 1; - c2 = 0; // y - } - else - { - ASSERT(VB.IsSame(V3)); - a1 = 0; - b1 = 1; - c1 = 0; // y - a2 = 1; - b2 = 0; - c2 = 0; // x - } - if (VA.IsSame(V1)) - if (VB.IsSame(V2)) - { - a1 = 0; - b1 = -1; - c1 = 1; // 1-y - a2 = 1; - b2 = 0; - c2 = 0; // x - } - else - { - ASSERT(VB.IsSame(V0)); - a1 = -1; - b1 = 0; - c1 = 1; // 1-x - a2 = 0; - b2 = 1; - c2 = 0; // y - } - if (VA.IsSame(V2)) - if (VB.IsSame(V3)) - { - a1 = -1; - b1 = 0; - c1 = 1; // 1-x - a2 = 0; - b2 = -1; - c2 = 1; // 1-y - } - else - { - ASSERT(VB.IsSame(V1)); - a1 = 0; - b1 = -1; - c1 = 1; // 1-y - a2 = -1; - b2 = 0; - c2 = 1; // 1-x - } - if (VA.IsSame(V3)) - if (VB.IsSame(V0)) - { - a1 = 0; - b1 = 1; - c1 = 0; // y - a2 = -1; - b2 = 0; - c2 = 1; // 1-x - } - else - { - ASSERT(VB.IsSame(V2)); - a1 = 1; - b1 = 0; - c1 = 0; // x - a2 = 0; - b2 = -1; - c2 = 1; // 1-y - } -// MESSAGE("X = " << c1 << "+ " << a1 << "*x + " << b1 << "*y"); -// MESSAGE("Y = " << c2 << "+ " << a2 << "*x + " << b2 << "*y"); - conv.a1 = a1; - conv.b1 = b1; - conv.c1 = c1; - conv.a2 = a2; - conv.b2 = b2; - conv.c2 = c2; - - int nbdown = quad.nbPts[0]; - int nbright = quad.nbPts[1]; - conv.ia = int (a1); - conv.ib = int (b1); - conv.ic = - int (c1 * a1 * a1) * (nbdown - 1) + int (c1 * b1 * b1) * (nbright - 1); - conv.ja = int (a2); - conv.jb = int (b2); - conv.jc = - int (c2 * a2 * a2) * (nbdown - 1) + int (c2 * b2 * b2) * (nbright - 1); -// MESSAGE("I " << conv.ia << " " << conv.ib << " " << conv.ic); -// MESSAGE("J " << conv.ja << " " << conv.jb << " " << conv.jc); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & StdMeshers_Hexa_3D::SaveTo(ostream & save) -{ - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & StdMeshers_Hexa_3D::LoadFrom(istream & load) -{ - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator <<(ostream & save, StdMeshers_Hexa_3D & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >>(istream & load, StdMeshers_Hexa_3D & hyp) -{ - return hyp.LoadFrom( load ); -} - -//modified by NIZNHY-PKV Wed Nov 17 15:34:13 2004 f -/////////////////////////////////////////////////////////////////////////////// -//ZZ -//#include - -//======================================================================= -//function : ComputePentahedralMesh -//purpose : -//======================================================================= -bool ComputePentahedralMesh(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) -{ - //printf(" ComputePentahedralMesh HERE\n"); - // - bool bOK; - int iErr; - StdMeshers_Penta_3D anAlgo; - // - bOK=anAlgo.Compute(aMesh, aShape); - /* - iErr=anAlgo.ErrorStatus(); - - if (iErr) { - printf(" *** Error# %d\n", iErr); - } - else { - printf(" *** No errors# %d\n", iErr); - } - */ - return bOK; -} - diff --git a/src/StdMeshers/StdMeshers_Hexa_3D.hxx b/src/StdMeshers/StdMeshers_Hexa_3D.hxx deleted file mode 100644 index a9e20459c..000000000 --- a/src/StdMeshers/StdMeshers_Hexa_3D.hxx +++ /dev/null @@ -1,140 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Hexa_3D.hxx -// Moved here from SMESH_Hexa_3D.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_HEXA_3D_HXX_ -#define _SMESH_HEXA_3D_HXX_ - -#include "SMESH_3D_Algo.hxx" -#include "SMESH_Mesh.hxx" -#include "StdMeshers_Quadrangle_2D.hxx" -#include "Utils_SALOME_Exception.hxx" - -typedef struct point3Dstruct -{ - const SMDS_MeshNode * node; -} Point3DStruct; - -typedef double Pt3[3]; - -typedef struct conv2dstruct -{ - double a1; // X = a1*x + b1*y + c1 - double b1; // Y = a2*x + b2*y + c2 - double c1; // a1, b1 a2, b2 in {-1,0,1} - double a2; // c1, c2 in {0,1} - double b2; - double c2; - int ia; // I = ia*i + ib*j + ic - int ib; - int ic; - int ja; // J = ja*i + jb*j + jc - int jb; - int jc; -} Conv2DStruct; - -typedef struct cubeStruct -{ - TopoDS_Vertex V000; - TopoDS_Vertex V001; - TopoDS_Vertex V010; - TopoDS_Vertex V011; - TopoDS_Vertex V100; - TopoDS_Vertex V101; - TopoDS_Vertex V110; - TopoDS_Vertex V111; - faceQuadStruct* quad_X0; - faceQuadStruct* quad_X1; - faceQuadStruct* quad_Y0; - faceQuadStruct* quad_Y1; - faceQuadStruct* quad_Z0; - faceQuadStruct* quad_Z1; - Point3DStruct* np; // normalised 3D coordinates -} CubeStruct; - -class StdMeshers_Hexa_3D: - public SMESH_3D_Algo -{ -public: - StdMeshers_Hexa_3D(int hypId, int studyId, SMESH_Gen* gen); - virtual ~StdMeshers_Hexa_3D(); - - virtual bool CheckHypothesis(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - SMESH_Hypothesis::Hypothesis_Status& aStatus); - - virtual bool Compute(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape) - throw (SALOME_Exception); - - ostream & SaveTo(ostream & save); - istream & LoadFrom(istream & load); - friend ostream & operator << (ostream & save, StdMeshers_Hexa_3D & hyp); - friend istream & operator >> (istream & load, StdMeshers_Hexa_3D & hyp); - -protected: - TopoDS_Edge - EdgeNotInFace(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - const TopoDS_Face& aFace, - const TopoDS_Vertex& aVertex, - const TopTools_IndexedDataMapOfShapeListOfShape& MS); - - int GetFaceIndex(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - const vector& meshFaces, - const TopoDS_Vertex& V0, - const TopoDS_Vertex& V1, - const TopoDS_Vertex& V2, - const TopoDS_Vertex& V3); - - void GetConv2DCoefs(const faceQuadStruct& quad, - const TopoDS_Shape& aShape, - const TopoDS_Vertex& V0, - const TopoDS_Vertex& V1, - const TopoDS_Vertex& V2, - const TopoDS_Vertex& V3, - Conv2DStruct& conv); - - void GetPoint(Pt3 p, - int i, int j, int k, - int nbx, int nby, int nbz, - Point3DStruct *np, - const SMESHDS_Mesh* meshDS); - - CubeStruct _cube; - FaceQuadStruct* _quads[6]; - int _indX0; - int _indX1; - int _indY0; - int _indY1; - int _indZ0; - int _indZ1; -}; - -#endif diff --git a/src/StdMeshers/StdMeshers_LengthFromEdges.cxx b/src/StdMeshers/StdMeshers_LengthFromEdges.cxx deleted file mode 100644 index f21f199f5..000000000 --- a/src/StdMeshers/StdMeshers_LengthFromEdges.cxx +++ /dev/null @@ -1,139 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_LengthFromEdges.cxx -// Moved here from SMESH_LengthFromEdges.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_LengthFromEdges.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_LengthFromEdges::StdMeshers_LengthFromEdges(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_Hypothesis(hypId, studyId, gen) -{ - _mode =1; - _name = "LengthFromEdges"; -// SCRUTE(_name); -// SCRUTE(&_name); - _param_algo_dim = 2; // is used by SMESH_MEFISTO_2D -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_LengthFromEdges::~StdMeshers_LengthFromEdges() -{ -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void StdMeshers_LengthFromEdges::SetMode(int mode) - throw (SALOME_Exception) -{ - int oldMode = _mode; - if (mode <= 0) - throw SALOME_Exception(LOCALIZED("mode must be positive")); - _mode = mode; - if (oldMode != _mode) - NotifySubMeshesHypothesisModification(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -int StdMeshers_LengthFromEdges::GetMode() -{ - return _mode; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & StdMeshers_LengthFromEdges::SaveTo(ostream & save) -{ - save << this->_mode; - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & StdMeshers_LengthFromEdges::LoadFrom(istream & load) -{ - bool isOK = true; - int a; - isOK = (load >> a); - if (isOK) - this->_mode = a; - else - load.clear(ios::badbit | load.rdstate()); - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator << (ostream & save, StdMeshers_LengthFromEdges & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >> (istream & load, StdMeshers_LengthFromEdges & hyp) -{ - return hyp.LoadFrom( load ); -} - diff --git a/src/StdMeshers/StdMeshers_LengthFromEdges.hxx b/src/StdMeshers/StdMeshers_LengthFromEdges.hxx deleted file mode 100644 index d514e7c94..000000000 --- a/src/StdMeshers/StdMeshers_LengthFromEdges.hxx +++ /dev/null @@ -1,57 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_LengthFromEdges.hxx -// Moved here from SMESH_LengthFromEdges.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_LENGTHFROMEDGES_HXX_ -#define _SMESH_LENGTHFROMEDGES_HXX_ - -#include "SMESH_Hypothesis.hxx" -#include "Utils_SALOME_Exception.hxx" - -class StdMeshers_LengthFromEdges: - public SMESH_Hypothesis -{ -public: - StdMeshers_LengthFromEdges(int hypId, int studyId, SMESH_Gen* gen); - virtual ~StdMeshers_LengthFromEdges(); - - void SetMode(int mode) - throw (SALOME_Exception); - - int GetMode(); - - virtual ostream & SaveTo(ostream & save); - virtual istream & LoadFrom(istream & load); - friend ostream & operator << (ostream & save, StdMeshers_LengthFromEdges & hyp); - friend istream & operator >> (istream & load, StdMeshers_LengthFromEdges & hyp); - -protected: - int _mode; -}; - -#endif diff --git a/src/StdMeshers/StdMeshers_LocalLength.cxx b/src/StdMeshers/StdMeshers_LocalLength.cxx deleted file mode 100644 index 457d8d80c..000000000 --- a/src/StdMeshers/StdMeshers_LocalLength.cxx +++ /dev/null @@ -1,137 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_LocalLength.cxx -// Moved here from SMESH_LocalLength.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_LocalLength.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_LocalLength::StdMeshers_LocalLength(int hypId, int studyId, - SMESH_Gen * gen):SMESH_Hypothesis(hypId, studyId, gen) -{ - _length = 1.; - _name = "LocalLength"; -// SCRUTE(_name); -// SCRUTE(&_name); - _param_algo_dim = 1; // is used by SMESH_Regular_1D -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -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 StdMeshers_LocalLength::GetLength() const -{ - return _length; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & StdMeshers_LocalLength::SaveTo(ostream & save) -{ - save << this->_length; - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -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()); - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator <<(ostream & save, StdMeshers_LocalLength & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >>(istream & load, StdMeshers_LocalLength & hyp) -{ - return hyp.LoadFrom( load ); -} diff --git a/src/StdMeshers/StdMeshers_LocalLength.hxx b/src/StdMeshers/StdMeshers_LocalLength.hxx deleted file mode 100644 index aba58e51a..000000000 --- a/src/StdMeshers/StdMeshers_LocalLength.hxx +++ /dev/null @@ -1,55 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_LocalLength.hxx -// Moved here from SMESH_LocalLength.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_LOCALLENGTH_HXX_ -#define _SMESH_LOCALLENGTH_HXX_ - -#include "SMESH_Hypothesis.hxx" -#include "Utils_SALOME_Exception.hxx" - -class 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); - - double GetLength() const; - - virtual ostream & SaveTo(ostream & save); - virtual istream & LoadFrom(istream & load); - friend ostream & operator <<(ostream & save, StdMeshers_LocalLength & hyp); - friend istream & operator >>(istream & load, StdMeshers_LocalLength & hyp); - - protected: - double _length; -}; - -#endif diff --git a/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx b/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx deleted file mode 100644 index b7da7cbe6..000000000 --- a/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx +++ /dev/null @@ -1,875 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_MEFISTO_2D.cxx -// Moved here from SMESH_MEFISTO_2D.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_MEFISTO_2D.hxx" -#include "SMESH_Gen.hxx" -#include "SMESH_Mesh.hxx" -#include "SMESH_subMesh.hxx" - -#include "StdMeshers_MaxElementArea.hxx" -#include "StdMeshers_LengthFromEdges.hxx" - -#include "Rn.h" -#include "aptrte.h" - -#include "SMDS_MeshElement.hxx" -#include "SMDS_MeshNode.hxx" -#include "SMDS_EdgePosition.hxx" -#include "SMDS_FacePosition.hxx" - -#include "utilities.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -//#include - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_MEFISTO_2D::StdMeshers_MEFISTO_2D(int hypId, int studyId, - SMESH_Gen * gen):SMESH_2D_Algo(hypId, studyId, gen) -{ - MESSAGE("StdMeshers_MEFISTO_2D::StdMeshers_MEFISTO_2D"); - _name = "MEFISTO_2D"; -// _shapeType = TopAbs_FACE; - _shapeType = (1 << TopAbs_FACE); - _compatibleHypothesis.push_back("MaxElementArea"); - _compatibleHypothesis.push_back("LengthFromEdges"); - - _edgeLength = 0; - _maxElementArea = 0; - _hypMaxElementArea = NULL; - _hypLengthFromEdges = NULL; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_MEFISTO_2D::~StdMeshers_MEFISTO_2D() -{ - MESSAGE("StdMeshers_MEFISTO_2D::~StdMeshers_MEFISTO_2D"); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool StdMeshers_MEFISTO_2D::CheckHypothesis - (SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - SMESH_Hypothesis::Hypothesis_Status& aStatus) -{ - //MESSAGE("StdMeshers_MEFISTO_2D::CheckHypothesis"); - - _hypMaxElementArea = NULL; - _hypLengthFromEdges = NULL; - - list ::const_iterator itl; - const SMESHDS_Hypothesis *theHyp; - - const list &hyps = GetUsedHypothesis(aMesh, aShape); - int nbHyp = hyps.size(); - if (!nbHyp) - { - aStatus = SMESH_Hypothesis::HYP_MISSING; - return false; // can't work with no hypothesis - } - - itl = hyps.begin(); - theHyp = (*itl); // use only the first hypothesis - - string hypName = theHyp->GetName(); - int hypId = theHyp->GetID(); - //SCRUTE(hypName); - - bool isOk = false; - - if (hypName == "MaxElementArea") - { - _hypMaxElementArea = static_cast(theHyp); - ASSERT(_hypMaxElementArea); - _maxElementArea = _hypMaxElementArea->GetMaxArea(); - _edgeLength = 0; - isOk = true; - aStatus = SMESH_Hypothesis::HYP_OK; - } - - else if (hypName == "LengthFromEdges") - { - _hypLengthFromEdges = static_cast(theHyp); - ASSERT(_hypLengthFromEdges); - _edgeLength = 0; - _maxElementArea = 0; - isOk = true; - aStatus = SMESH_Hypothesis::HYP_OK; - } - else - aStatus = SMESH_Hypothesis::HYP_INCOMPATIBLE; - - if (isOk) - { - isOk = false; - if (_maxElementArea > 0) - { -// _edgeLength = 2 * sqrt(_maxElementArea); // triangles : minorant - _edgeLength = 2 * sqrt(_maxElementArea/sqrt(3.0)); - isOk = true; - } - else - isOk = (_hypLengthFromEdges != NULL); // **** check mode - if (!isOk) - aStatus = SMESH_Hypothesis::HYP_BAD_PARAMETER; - } - - //SCRUTE(_edgeLength); - //SCRUTE(_maxElementArea); - return isOk; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool StdMeshers_MEFISTO_2D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) -{ - MESSAGE("StdMeshers_MEFISTO_2D::Compute"); - - if (_hypLengthFromEdges) - _edgeLength = ComputeEdgeElementLength(aMesh, aShape); - - bool isOk = false; - const SMESHDS_Mesh * meshDS = aMesh.GetMeshDS(); - SMESH_subMesh *theSubMesh = aMesh.GetSubMesh(aShape); - - const TopoDS_Face & FF = TopoDS::Face(aShape); - bool faceIsForward = (FF.Orientation() == TopAbs_FORWARD); - TopoDS_Face F = TopoDS::Face(FF.Oriented(TopAbs_FORWARD)); - - Z nblf; //nombre de lignes fermees (enveloppe en tete) - Z *nudslf = NULL; //numero du dernier sommet de chaque ligne fermee - R2 *uvslf = NULL; - Z nbpti = 0; //nombre points internes futurs sommets de la triangulation - R2 *uvpti = NULL; - - Z nbst; - R2 *uvst = NULL; - Z nbt; - Z *nust = NULL; - Z ierr = 0; - - Z nutysu = 1; // 1: il existe un fonction areteideale_() - // Z nutysu=0; // 0: on utilise aretmx - R aretmx = _edgeLength; // longueur max aretes future triangulation - - nblf = NumberOfWires(F); - - nudslf = new Z[1 + nblf]; - nudslf[0] = 0; - int iw = 1; - int nbpnt = 0; - - myOuterWire = BRepTools::OuterWire(F); - nbpnt += NumberOfPoints(aMesh, myOuterWire); - if ( nbpnt < 3 ) // ex: a circle with 2 segments - return false; - nudslf[iw++] = nbpnt; - - for (TopExp_Explorer exp(F, TopAbs_WIRE); exp.More(); exp.Next()) - { - const TopoDS_Wire & W = TopoDS::Wire(exp.Current()); - if (!myOuterWire.IsSame(W)) - { - nbpnt += NumberOfPoints(aMesh, W); - nudslf[iw++] = nbpnt; - } - } - - // avoid passing same uv points for a vertex common to 2 wires - TopTools_IndexedDataMapOfShapeListOfShape VWMap; - if ( iw - 1 > 1 ) // nbofWires > 1 - TopExp::MapShapesAndAncestors( F , TopAbs_VERTEX, TopAbs_WIRE, VWMap ); - - uvslf = new R2[nudslf[nblf]]; - int m = 0; - - double scalex, scaley; - ComputeScaleOnFace(aMesh, F, scalex, scaley); - - map mefistoToDS; // correspondence mefisto index--> points IDNodes - if ( !LoadPoints(aMesh, F, myOuterWire, uvslf, m, - mefistoToDS, scalex, scaley, VWMap)) - return false; - - for (TopExp_Explorer exp(F, TopAbs_WIRE); exp.More(); exp.Next()) - { - const TopoDS_Wire & W = TopoDS::Wire(exp.Current()); - if (!myOuterWire.IsSame(W)) - { - if (! LoadPoints(aMesh, F, W, uvslf, m, - mefistoToDS, scalex, scaley, VWMap )) - return false; - } - } - - uvst = NULL; - nust = NULL; - aptrte(nutysu, aretmx, - nblf, nudslf, uvslf, nbpti, uvpti, nbst, uvst, nbt, nust, ierr); - - if (ierr == 0) - { - MESSAGE("... End Triangulation Generated Triangle Number " << nbt); - MESSAGE(" Node Number " << nbst); - StoreResult(aMesh, nbst, uvst, nbt, nust, F, - faceIsForward, mefistoToDS, scalex, scaley); - isOk = true; - } - else - { - MESSAGE("Error in Triangulation"); - isOk = false; - } - if (nudslf != NULL) - delete[]nudslf; - if (uvslf != NULL) - delete[]uvslf; - if (uvst != NULL) - delete[]uvst; - if (nust != NULL) - delete[]nust; - return isOk; -} - -//======================================================================= -//function : fixOverlappedLinkUV -//purpose : prevent failure due to overlapped adjacent links -//======================================================================= - -static bool fixOverlappedLinkUV( R2& uv0, const R2& uv1, const R2& uv2 ) -{ - gp_XY v1( uv0.x - uv1.x, uv0.y - uv1.y ); - gp_XY v2( uv2.x - uv1.x, uv2.y - uv1.y ); - - double tol2 = DBL_MIN * DBL_MIN; - double sqMod1 = v1.SquareModulus(); - if ( sqMod1 <= tol2 ) return false; - double sqMod2 = v2.SquareModulus(); - if ( sqMod2 <= tol2 ) return false; - - double dot = v1*v2; - - // check sinus >= 1.e-3 - const double minSin = 1.e-3; - if ( dot > 0 && 1 - dot * dot / ( sqMod1 * sqMod2 ) < minSin * minSin ) { - MESSAGE(" ___ FIX UV ____" << uv0.x << " " << uv0.y); - v1.SetCoord( -v1.Y(), v1.X() ); - double delta = sqrt( sqMod1 ) * minSin; - if ( v1.X() < 0 ) - uv0.x -= delta; - else - uv0.x += delta; - if ( v1.Y() < 0 ) - uv0.y -= delta; - else - uv0.y += delta; -// MESSAGE(" -> " << uv0.x << " " << uv0.y << " "); -// MESSAGE("v1( " << v1.X() << " " << v1.Y() << " ) " << -// "v2( " << v2.X() << " " << v2.Y() << " ) "); -// MESSAGE("SIN: " << sqrt(1 - dot * dot / (sqMod1 * sqMod2))); -// v1.SetCoord( uv0.x - uv1.x, uv0.y - uv1.y ); -// v2.SetCoord( uv2.x - uv1.x, uv2.y - uv1.y ); -// gp_XY v3( uv2.x - uv0.x, uv2.y - uv0.y ); -// sqMod1 = v1.SquareModulus(); -// sqMod2 = v2.SquareModulus(); -// dot = v1*v2; -// double sin = sqrt(1 - dot * dot / (sqMod1 * sqMod2)); -// MESSAGE("NEW SIN: " << sin); - return true; - } - return false; -} - -//======================================================================= -//function : fixCommonVertexUV -//purpose : -//======================================================================= - -static bool fixCommonVertexUV (gp_Pnt2d & theUV, - const TopoDS_Vertex& theV, - const TopoDS_Wire& theW, - const TopoDS_Wire& theOW, - const TopoDS_Face& theF, - const TopTools_IndexedDataMapOfShapeListOfShape & theVWMap, - SMESH_Mesh & theMesh) -{ - if( theW.IsSame( theOW ) || - !theVWMap.Contains( theV )) return false; - - // check if there is another wire sharing theV - const TopTools_ListOfShape& WList = theVWMap.FindFromKey( theV ); - TopTools_ListIteratorOfListOfShape aWIt; - for ( aWIt.Initialize( WList ); aWIt.More(); aWIt.Next() ) - if ( !theW.IsSame( aWIt.Value() )) - break; - if ( !aWIt.More() ) return false; - - TopTools_ListOfShape EList; - list< double > UList; - - // find edges of theW sharing theV - // and find 2d normal to them at theV - gp_Vec2d N(0.,0.); - TopoDS_Iterator itE( theW ); - for ( ; itE.More(); itE.Next() ) - { - const TopoDS_Edge& E = TopoDS::Edge( itE.Value() ); - TopoDS_Iterator itV( E ); - for ( ; itV.More(); itV.Next() ) - { - const TopoDS_Vertex & V = TopoDS::Vertex( itV.Value() ); - if ( !V.IsSame( theV )) - continue; - EList.Append( E ); - Standard_Real u = BRep_Tool::Parameter( V, E ); - UList.push_back( u ); - double f, l; - Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, theF, f, l); - gp_Vec2d d1; - gp_Pnt2d p; - C2d->D1( u, p, d1 ); - gp_Vec2d n( d1.Y(), -d1.X() ); - if ( E.Orientation() == TopAbs_REVERSED ) - n.Reverse(); - N += n.Normalized(); - } - } - - // define step size by which to move theUV - - gp_Pnt2d nextUV; // uv of next node on edge, most distant of the four - double maxDist = -DBL_MAX; - TopTools_ListIteratorOfListOfShape aEIt (EList); - list< double >::iterator aUIt = UList.begin(); - for ( ; aEIt.More(); aEIt.Next(), aUIt++ ) - { - const TopoDS_Edge& E = TopoDS::Edge( aEIt.Value() ); - double f, l; - Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, theF, f, l); - - double umin = DBL_MAX, umax = -DBL_MAX; - SMDS_NodeIteratorPtr nIt = theMesh.GetSubMesh(E)->GetSubMeshDS()->GetNodes(); - if ( !nIt->more() ) // no nodes on edge, only on vertices - { - umin = l; - umax = f; - } - else - { - while ( nIt->more() ) { - const SMDS_MeshNode* node = nIt->next(); - const SMDS_EdgePosition* epos = - static_cast(node->GetPosition().get()); - double u = epos->GetUParameter(); - if ( u < umin ) - umin = u; - if ( u > umax ) - umax = u; - } - } - bool isFirstCommon = ( *aUIt == f ); - gp_Pnt2d uv = C2d->Value( isFirstCommon ? umin : umax ); - double dist = theUV.SquareDistance( uv ); - if ( dist > maxDist ) { - maxDist = dist; - nextUV = uv; - } - } - R2 uv0, uv1, uv2; - uv0.x = theUV.X(); uv0.y = theUV.Y(); - uv1.x = nextUV.X(); uv1.y = nextUV.Y(); - uv2.x = uv0.x; uv2.y = uv0.y; - if ( fixOverlappedLinkUV( uv0, uv1, uv2 )) - { - double step = theUV.Distance( gp_Pnt2d( uv0.x, uv0.y )); - - // move theUV along the normal by the step - - N *= step; - - MESSAGE("--fixCommonVertexUV move(" << theUV.X() << " " << theUV.Y() - << ") by (" << N.X() << " " << N.Y() << ")" - << endl << "--- MAX DIST " << maxDist); - - theUV.SetXY( theUV.XY() + N.XY() ); - - return true; - } - return false; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool StdMeshers_MEFISTO_2D::LoadPoints(SMESH_Mesh & aMesh, - const TopoDS_Face & FF, - const TopoDS_Wire & WW, - R2 * uvslf, - int & m, - map&mefistoToDS, - double scalex, - double scaley, - const TopTools_IndexedDataMapOfShapeListOfShape& VWMap) -{ -// MESSAGE("StdMeshers_MEFISTO_2D::LoadPoints"); - - SMDS_Mesh * meshDS = aMesh.GetMeshDS(); - - TopoDS_Face F = TopoDS::Face(FF.Oriented(TopAbs_FORWARD)); - - int mInit = m, mFirst, iEdge; - gp_XY scale( scalex, scaley ); - - TopoDS_Wire W = TopoDS::Wire(WW.Oriented(TopAbs_FORWARD)); - BRepTools_WireExplorer wexp(W, F); - for (wexp.Init(W, F), iEdge = 0; wexp.More(); wexp.Next(), iEdge++) - { - const TopoDS_Edge & E = wexp.Current(); - - // --- IDNodes of first and last Vertex - - TopoDS_Vertex VFirst, VLast; - TopExp::Vertices(E, VFirst, VLast); // corresponds to f and l - - ASSERT(!VFirst.IsNull()); - SMDS_NodeIteratorPtr lid= - aMesh.GetSubMesh(VFirst)->GetSubMeshDS()->GetNodes(); - if ( !lid->more() ) { - MESSAGE (" NO NODE BUILT ON VERTEX "); - return false; - } - const SMDS_MeshNode* idFirst = lid->next(); - - ASSERT(!VLast.IsNull()); - lid=aMesh.GetSubMesh(VLast)->GetSubMeshDS()->GetNodes(); - if ( !lid->more() ) { - MESSAGE (" NO NODE BUILT ON VERTEX "); - return false; - } - const SMDS_MeshNode* idLast = lid->next(); - - // --- edge internal IDNodes (relies on good order storage, not checked) - - int nbPoints = aMesh.GetSubMesh(E)->GetSubMeshDS()->NbNodes(); - - double f, l; - Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, f, l); - - SMDS_NodeIteratorPtr ite= aMesh.GetSubMesh(E)->GetSubMeshDS()->GetNodes(); - - bool isForward = (E.Orientation() == TopAbs_FORWARD); - map params; - - while(ite->more()) - { - const SMDS_MeshNode * node = ite->next(); - const SMDS_EdgePosition* epos = - static_cast(node->GetPosition().get()); - double param = epos->GetUParameter(); - params[param] = node; - } - if ( nbPoints != params.size()) - { - MESSAGE( "BAD NODE ON EDGE POSITIONS" ); - return false; - } - - mFirst = m; - - // --- load 2D values into MEFISTO structure, - // add IDNodes in mefistoToDS map - if (E.Orientation() == TopAbs_FORWARD) - { - gp_Pnt2d p = C2d->Value(f).XY().Multiplied( scale ); // first point = Vertex Forward - if ( fixCommonVertexUV( p, VFirst, W, myOuterWire, F, VWMap, aMesh )) - myNodesOnCommonV.push_back( idFirst ); - uvslf[m].x = p.X(); - uvslf[m].y = p.Y(); - mefistoToDS[m + 1] = idFirst; - //MESSAGE(" "<::iterator itp = params.begin(); - for (int i = 1; i <= nbPoints; i++) // nbPoints internal - { - double param = (*itp).first; - gp_Pnt2d p = C2d->Value(param).XY().Multiplied( scale ); - uvslf[m].x = p.X(); - uvslf[m].y = p.Y(); - mefistoToDS[m + 1] = (*itp).second; - //MESSAGE(" "<Value(l).XY().Multiplied( scale ); // last point = Vertex Reversed - if ( fixCommonVertexUV( p, VLast, W, myOuterWire, F, VWMap, aMesh )) - myNodesOnCommonV.push_back( idLast ); - uvslf[m].x = p.X(); - uvslf[m].y = p.Y(); - mefistoToDS[m + 1] = idLast; - //MESSAGE(" "<::reverse_iterator itp = params.rbegin(); - for (int i = nbPoints; i >= 1; i--) - { - double param = (*itp).first; - gp_Pnt2d p = C2d->Value(param).XY().Multiplied( scale ); - uvslf[m].x = p.X(); - uvslf[m].y = p.Y(); - mefistoToDS[m + 1] = (*itp).second; - //MESSAGE(" "< 0 ) - fixOverlappedLinkUV (uvslf[ mFirst - 1], - uvslf[ mFirst ], - uvslf[ mFirst + 1 ]); - - } // for wexp - - fixOverlappedLinkUV (uvslf[ m - 1], - uvslf[ mInit ], - uvslf[ mInit + 1 ]); - - return true; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void StdMeshers_MEFISTO_2D::ComputeScaleOnFace(SMESH_Mesh & aMesh, - const TopoDS_Face & aFace, double &scalex, double &scaley) -{ - //MESSAGE("StdMeshers_MEFISTO_2D::ComputeScaleOnFace"); - TopoDS_Face F = TopoDS::Face(aFace.Oriented(TopAbs_FORWARD)); - TopoDS_Wire W = BRepTools::OuterWire(F); - - double xmin = 1.e300; // min & max of face 2D parametric coord. - double xmax = -1.e300; - double ymin = 1.e300; - double ymax = -1.e300; - int nbp = 23; - scalex = 1; - scaley = 1; - - TopExp_Explorer wexp(W, TopAbs_EDGE); - for ( ; wexp.More(); wexp.Next()) - { - const TopoDS_Edge & E = TopoDS::Edge( wexp.Current() ); - double f, l; - Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, f, l); - if ( C2d.IsNull() ) continue; - double du = (l - f) / double (nbp); - for (int i = 0; i <= nbp; i++) - { - double param = f + double (i) * du; - gp_Pnt2d p = C2d->Value(param); - if (p.X() < xmin) - xmin = p.X(); - if (p.X() > xmax) - xmax = p.X(); - if (p.Y() < ymin) - ymin = p.Y(); - if (p.Y() > ymax) - ymax = p.Y(); - // MESSAGE(" "<< f<<" "<Value(xmin, ymoy); - gp_Pnt PY0 = S->Value(xmoy, ymin); - double dx = xsize / double (nbp); - double dy = ysize / double (nbp); - for (int i = 1; i <= nbp; i++) - { - double x = xmin + double (i) * dx; - gp_Pnt PX = S->Value(x, ymoy); - double y = ymin + double (i) * dy; - gp_Pnt PY = S->Value(xmoy, y); - length_x += PX.Distance(PX0); - length_y += PY.Distance(PY0); - PX0 = PX; - PY0 = PY; - } - scalex = length_x / xsize; - scaley = length_y / ysize; -// SCRUTE(xsize); -// SCRUTE(ysize); - double xyratio = xsize*scalex/(ysize*scaley); - const double maxratio = 1.e2; - //SCRUTE(xyratio); - if (xyratio > maxratio) { - SCRUTE( scaley ); - scaley *= xyratio / maxratio; - SCRUTE( scaley ); - } - else if (xyratio < 1./maxratio) { - SCRUTE( scalex ); - scalex *= 1 / xyratio / maxratio; - SCRUTE( scalex ); - } - ASSERT(scalex); - ASSERT(scaley); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void StdMeshers_MEFISTO_2D::StoreResult(SMESH_Mesh & aMesh, - Z nbst, R2 * uvst, Z nbt, Z * nust, - const TopoDS_Face & F, bool faceIsForward, - map&mefistoToDS, - double scalex, double scaley) -{ - SMESHDS_Mesh * meshDS = aMesh.GetMeshDS(); - - Z n, m; - Handle(Geom_Surface) S = BRep_Tool::Surface(F); - - for (n = 0; n < nbst; n++) - { - if (mefistoToDS.find(n + 1) == mefistoToDS.end()) - { - double u = uvst[n][0] / scalex; - double v = uvst[n][1] / scaley; - gp_Pnt P = S->Value(u, v); - - SMDS_MeshNode * node = meshDS->AddNode(P.X(), P.Y(), P.Z()); - meshDS->SetNodeOnFace(node, F); - - //MESSAGE(P.X()<<" "<(node->GetPosition().get()); - fpos->SetUParameter(u); - fpos->SetVParameter(v); - } - } - - m = 0; - int mt = 0; - - //SCRUTE(faceIsForward); - for (n = 1; n <= nbt; n++) - { - int inode1 = nust[m++]; - int inode2 = nust[m++]; - int inode3 = nust[m++]; - - const SMDS_MeshNode *n1, *n2, *n3; - n1 = mefistoToDS[inode1]; - n2 = mefistoToDS[inode2]; - n3 = mefistoToDS[inode3]; - //MESSAGE("-- "<AddFace(n1, n2, n3); - else - elt = meshDS->AddFace(n1, n3, n2); - - meshDS->SetMeshElementOnShape(elt, F); - m++; - } - - // remove bad elements build on vertices shared by wires - - list::iterator itN = myNodesOnCommonV.begin(); - for ( ; itN != myNodesOnCommonV.end(); itN++ ) - { - const SMDS_MeshNode* node = *itN; - SMDS_ElemIteratorPtr invElemIt = node->GetInverseElementIterator(); - while ( invElemIt->more() ) - { - const SMDS_MeshElement* elem = invElemIt->next(); - SMDS_ElemIteratorPtr itN = elem->nodesIterator(); - int nbSame = 0; - while ( itN->more() ) - if ( itN->next() == node) - nbSame++; - if (nbSame > 1) { - MESSAGE( "RM bad element " << elem->GetID()); - meshDS->RemoveElement( elem ); - } - } - } - -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -double StdMeshers_MEFISTO_2D::ComputeEdgeElementLength(SMESH_Mesh & aMesh, - const TopoDS_Shape & aShape) -{ - //MESSAGE("StdMeshers_MEFISTO_2D::ComputeEdgeElementLength"); - // **** a mettre dans SMESH_2D_Algo ? - - const TopoDS_Face & FF = TopoDS::Face(aShape); - bool faceIsForward = (FF.Orientation() == TopAbs_FORWARD); - TopoDS_Face F = TopoDS::Face(FF.Oriented(TopAbs_FORWARD)); - - double meanElementLength = 100; - double wireLength = 0; - int wireElementsNumber = 0; - for (TopExp_Explorer exp(F, TopAbs_WIRE); exp.More(); exp.Next()) - { - const TopoDS_Wire & W = TopoDS::Wire(exp.Current()); - for (TopExp_Explorer expe(W, TopAbs_EDGE); expe.More(); expe.Next()) - { - const TopoDS_Edge & E = TopoDS::Edge(expe.Current()); - int nb = aMesh.GetSubMesh(E)->GetSubMeshDS()->NbNodes(); - double length = EdgeLength(E); - wireLength += length; - wireElementsNumber += nb; - } - } - if (wireElementsNumber) - meanElementLength = wireLength / wireElementsNumber; - //SCRUTE(meanElementLength); - return meanElementLength; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & StdMeshers_MEFISTO_2D::SaveTo(ostream & save) -{ - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & StdMeshers_MEFISTO_2D::LoadFrom(istream & load) -{ - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator <<(ostream & save, StdMeshers_MEFISTO_2D & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >>(istream & load, StdMeshers_MEFISTO_2D & hyp) -{ - return hyp.LoadFrom( load ); -} diff --git a/src/StdMeshers/StdMeshers_MEFISTO_2D.hxx b/src/StdMeshers/StdMeshers_MEFISTO_2D.hxx deleted file mode 100644 index fac85f07d..000000000 --- a/src/StdMeshers/StdMeshers_MEFISTO_2D.hxx +++ /dev/null @@ -1,100 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_MEFISTO_2D.hxx -// Moved here from SMESH_MEFISTO_2D.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _StdMeshers_MEFISTO_2D_HXX_ -#define _StdMeshers_MEFISTO_2D_HXX_ - -#include "SMESH_2D_Algo.hxx" -#include - -class SMDS_MeshNode; -class TopTools_IndexedDataMapOfShapeListOfShape; -class TopoDS_Face; -class TopoDS_WIre; -class StdMeshers_MaxElementArea; -class StdMeshers_LengthFromEdges; -class SMDS_MeshNode; - -#include -#include -#include "Rn.h" - -class StdMeshers_MEFISTO_2D: - public SMESH_2D_Algo -{ -public: - StdMeshers_MEFISTO_2D(int hypId, int studyId, SMESH_Gen* gen); - virtual ~StdMeshers_MEFISTO_2D(); - - virtual bool CheckHypothesis(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - SMESH_Hypothesis::Hypothesis_Status& aStatus); - - virtual bool Compute(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape); - - double ComputeEdgeElementLength(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape); - - bool LoadPoints(SMESH_Mesh& aMesh, - const TopoDS_Face& F, - const TopoDS_Wire& W, - R2* uvslf, - int& m, - map& mefistoToDS, - double scalex, double scaley, - const TopTools_IndexedDataMapOfShapeListOfShape& VWMap); - - void ComputeScaleOnFace(SMESH_Mesh& aMesh, - const TopoDS_Face& aFace, - double& scalex, - double& scaley); - - void StoreResult (SMESH_Mesh& aMesh, - Z nbst, R2* uvst, Z nbt, Z* nust, - const TopoDS_Face& F, bool faceIsForward, - map& mefistoToDS, - double scalex, double scaley); - - ostream & SaveTo(ostream & save); - istream & LoadFrom(istream & load); - friend ostream & operator << (ostream & save, StdMeshers_MEFISTO_2D & hyp); - friend istream & operator >> (istream & load, StdMeshers_MEFISTO_2D & hyp); - -protected: - double _edgeLength; - double _maxElementArea; - const StdMeshers_MaxElementArea* _hypMaxElementArea; - const StdMeshers_LengthFromEdges* _hypLengthFromEdges; - - TopoDS_Wire myOuterWire; - std::list myNodesOnCommonV; -}; - -#endif diff --git a/src/StdMeshers/StdMeshers_MaxElementArea.cxx b/src/StdMeshers/StdMeshers_MaxElementArea.cxx deleted file mode 100644 index c4a2d5e17..000000000 --- a/src/StdMeshers/StdMeshers_MaxElementArea.cxx +++ /dev/null @@ -1,139 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_MaxElementArea.cxx -// Moved here from SMESH_MaxElementArea.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_MaxElementArea.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_MaxElementArea::StdMeshers_MaxElementArea(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_Hypothesis(hypId, studyId, gen) -{ - _maxArea =1.; - _name = "MaxElementArea"; -// SCRUTE(_name); -// SCRUTE(&_name); - _param_algo_dim = 2; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_MaxElementArea::~StdMeshers_MaxElementArea() -{ -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void StdMeshers_MaxElementArea::SetMaxArea(double maxArea) - throw (SALOME_Exception) -{ - double oldArea = _maxArea; - if (maxArea <= 0) - throw SALOME_Exception(LOCALIZED("maxArea must be positive")); - _maxArea = maxArea; - if (_maxArea != oldArea) - NotifySubMeshesHypothesisModification(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -double StdMeshers_MaxElementArea::GetMaxArea() const -{ - return _maxArea; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & StdMeshers_MaxElementArea::SaveTo(ostream & save) -{ - save << this->_maxArea; - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & StdMeshers_MaxElementArea::LoadFrom(istream & load) -{ - bool isOK = true; - double a; - isOK = (load >> a); - if (isOK) - this->_maxArea = a; - else - load.clear(ios::badbit | load.rdstate()); - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator << (ostream & save, StdMeshers_MaxElementArea & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >> (istream & load, StdMeshers_MaxElementArea & hyp) -{ - return hyp.LoadFrom( load ); -} - diff --git a/src/StdMeshers/StdMeshers_MaxElementArea.hxx b/src/StdMeshers/StdMeshers_MaxElementArea.hxx deleted file mode 100644 index 52af887c8..000000000 --- a/src/StdMeshers/StdMeshers_MaxElementArea.hxx +++ /dev/null @@ -1,55 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_MaxElementArea.hxx -// Moved here from SMESH_MaxElementArea.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_MAXELEMENTAREA_HXX_ -#define _SMESH_MAXELEMENTAREA_HXX_ - -#include "SMESH_Hypothesis.hxx" -#include "Utils_SALOME_Exception.hxx" - -class StdMeshers_MaxElementArea:public SMESH_Hypothesis -{ - public: - StdMeshers_MaxElementArea(int hypId, int studyId, SMESH_Gen * gen); - virtual ~ StdMeshers_MaxElementArea(); - - void SetMaxArea(double maxArea) throw(SALOME_Exception); - - double GetMaxArea() const; - - virtual ostream & SaveTo(ostream & save); - virtual istream & LoadFrom(istream & load); - friend ostream & operator <<(ostream & save, StdMeshers_MaxElementArea & hyp); - friend istream & operator >>(istream & load, StdMeshers_MaxElementArea & hyp); - - protected: - double _maxArea; -}; - -#endif diff --git a/src/StdMeshers/StdMeshers_MaxElementVolume.cxx b/src/StdMeshers/StdMeshers_MaxElementVolume.cxx deleted file mode 100644 index f9f6b6322..000000000 --- a/src/StdMeshers/StdMeshers_MaxElementVolume.cxx +++ /dev/null @@ -1,141 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_MaxElementVolume.cxx -// Moved here from SMESH_MaxElementVolume.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; - -#include "StdMeshers_MaxElementVolume.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_MaxElementVolume::StdMeshers_MaxElementVolume(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_Hypothesis(hypId, studyId, gen) -{ - _maxVolume =1.; - _name = "MaxElementVolume"; -// SCRUTE(_name); - SCRUTE(&_name); - _param_algo_dim = 3; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_MaxElementVolume::~StdMeshers_MaxElementVolume() -{ - MESSAGE("StdMeshers_MaxElementVolume::~StdMeshers_MaxElementVolume"); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void StdMeshers_MaxElementVolume::SetMaxVolume(double maxVolume) - throw (SALOME_Exception) -{ - double oldVolume = _maxVolume; - if (maxVolume <= 0) - throw SALOME_Exception(LOCALIZED("maxVolume must be positive")); - _maxVolume = maxVolume; - if (_maxVolume != oldVolume) - NotifySubMeshesHypothesisModification(); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -double StdMeshers_MaxElementVolume::GetMaxVolume() const -{ - return _maxVolume; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & StdMeshers_MaxElementVolume::SaveTo(ostream & save) -{ - save << this->_maxVolume; - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & StdMeshers_MaxElementVolume::LoadFrom(istream & load) -{ - bool isOK = true; - double a; - isOK = (load >> a); - if (isOK) - this->_maxVolume = a; - else - load.clear(ios::badbit | load.rdstate()); - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator << (ostream & save, StdMeshers_MaxElementVolume & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >> (istream & load, StdMeshers_MaxElementVolume & hyp) -{ - return hyp.LoadFrom( load ); -} - diff --git a/src/StdMeshers/StdMeshers_MaxElementVolume.hxx b/src/StdMeshers/StdMeshers_MaxElementVolume.hxx deleted file mode 100644 index ee9986f1f..000000000 --- a/src/StdMeshers/StdMeshers_MaxElementVolume.hxx +++ /dev/null @@ -1,57 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_MaxElementVolume.hxx -// Moved here from SMESH_MaxElementVolume.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_MAXELEMENTVOLUME_HXX_ -#define _SMESH_MAXELEMENTVOLUME_HXX_ - -#include "SMESH_Hypothesis.hxx" -#include "Utils_SALOME_Exception.hxx" - -class StdMeshers_MaxElementVolume: - public SMESH_Hypothesis -{ -public: - StdMeshers_MaxElementVolume(int hypId, int studyId, SMESH_Gen* gen); - virtual ~StdMeshers_MaxElementVolume(); - - void SetMaxVolume(double maxVolume) - throw (SALOME_Exception); - - double GetMaxVolume() const; - - virtual ostream & SaveTo(ostream & save); - virtual istream & LoadFrom(istream & load); - friend ostream & operator << (ostream & save, StdMeshers_MaxElementVolume & hyp); - friend istream & operator >> (istream & load, StdMeshers_MaxElementVolume & hyp); - -protected: - double _maxVolume; -}; - -#endif diff --git a/src/StdMeshers/StdMeshers_NotConformAllowed.cxx b/src/StdMeshers/StdMeshers_NotConformAllowed.cxx deleted file mode 100644 index 5c471b2a0..000000000 --- a/src/StdMeshers/StdMeshers_NotConformAllowed.cxx +++ /dev/null @@ -1,98 +0,0 @@ -// SMESH StdMeshers : 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_NotConformAllowed.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_NotConformAllowed.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_NotConformAllowed::StdMeshers_NotConformAllowed(int hypId, int studyId, SMESH_Gen* gen) - : SMESH_Hypothesis(hypId, studyId, gen) -{ - _name = "NotConformAllowed"; - _param_algo_dim = -1; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_NotConformAllowed::~StdMeshers_NotConformAllowed() -{ -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & StdMeshers_NotConformAllowed::SaveTo(ostream & save) -{ - return save << this; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & StdMeshers_NotConformAllowed::LoadFrom(istream & load) -{ - return load >> (*this); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator << (ostream & save, StdMeshers_NotConformAllowed & hyp) -{ - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >> (istream & load, StdMeshers_NotConformAllowed & hyp) -{ - return load; -} diff --git a/src/StdMeshers/StdMeshers_NotConformAllowed.hxx b/src/StdMeshers/StdMeshers_NotConformAllowed.hxx deleted file mode 100644 index 079742458..000000000 --- a/src/StdMeshers/StdMeshers_NotConformAllowed.hxx +++ /dev/null @@ -1,48 +0,0 @@ -// SMESH StdMeshers : 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_NotConformAllowed.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _StdMeshers_NotConformAllowed_HXX_ -#define _StdMeshers_NotConformAllowed_HXX_ - -#include "SMESH_Hypothesis.hxx" -#include "Utils_SALOME_Exception.hxx" - -class StdMeshers_NotConformAllowed: - public SMESH_Hypothesis -{ -public: - StdMeshers_NotConformAllowed(int hypId, int studyId, SMESH_Gen* gen); - virtual ~StdMeshers_NotConformAllowed(); - - virtual ostream & SaveTo(ostream & save); - virtual istream & LoadFrom(istream & load); - friend ostream & operator << (ostream & save, StdMeshers_NotConformAllowed & hyp); - friend istream & operator >> (istream & load, StdMeshers_NotConformAllowed & hyp); -}; - -#endif diff --git a/src/StdMeshers/StdMeshers_NumberOfSegments.cxx b/src/StdMeshers/StdMeshers_NumberOfSegments.cxx deleted file mode 100644 index 44ac15909..000000000 --- a/src/StdMeshers/StdMeshers_NumberOfSegments.cxx +++ /dev/null @@ -1,496 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_NumberOfSegments.cxx -// Moved here from SMESH_NumberOfSegments.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_NumberOfSegments.hxx" -#include -#include -#include -#include - -const double PRECISION = 1e-7; - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_NumberOfSegments::StdMeshers_NumberOfSegments(int hypId, int studyId, - SMESH_Gen * gen) - : SMESH_Hypothesis(hypId, studyId, gen), - _numberOfSegments(1), - _distrType(DT_Regular), - _scaleFactor(1.), - _expMode(false) -{ - _name = "NumberOfSegments"; - _param_algo_dim = 1; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_NumberOfSegments::~StdMeshers_NumberOfSegments() -{ -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -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 StdMeshers_NumberOfSegments::GetNumberOfSegments() const -{ - return _numberOfSegments; -} - -//================================================================================ -/*! - * - */ -//================================================================================ - -void StdMeshers_NumberOfSegments::SetDistrType(DistrType typ) - throw(SALOME_Exception) -{ - if (typ < DT_Regular || typ > DT_ExprFunc) - throw SALOME_Exception(LOCALIZED("distribution type is out of range")); - - if (typ != _distrType) - { - _distrType = typ; - NotifySubMeshesHypothesisModification(); - } -} - -//================================================================================ -/*! - * - */ -//================================================================================ - -StdMeshers_NumberOfSegments::DistrType StdMeshers_NumberOfSegments::GetDistrType() const -{ - return _distrType; -} - -//================================================================================ -/*! - * - */ -//================================================================================ - -void StdMeshers_NumberOfSegments::SetScaleFactor(double scaleFactor) - throw(SALOME_Exception) -{ - if (_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) - throw SALOME_Exception(LOCALIZED("scale factor must not be equal to 1")); - - if (fabs(_scaleFactor - scaleFactor) > PRECISION) - { - _scaleFactor = scaleFactor; - NotifySubMeshesHypothesisModification(); - } -} - -//================================================================================ -/*! - * - */ -//================================================================================ - -double StdMeshers_NumberOfSegments::GetScaleFactor() const - throw(SALOME_Exception) -{ - if (_distrType != DT_Scale) - throw SALOME_Exception(LOCALIZED("not a scale distribution")); - return _scaleFactor; -} - -//================================================================================ -/*! - * - */ -//================================================================================ - -void StdMeshers_NumberOfSegments::SetTableFunction(const std::vector& table) - throw(SALOME_Exception) -{ - if (_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")); - - int i; - double prev = -PRECISION; - bool isSame = table.size() == _table.size(); - - for (i=0; i < table.size()/2; i++) { - double par = table[i*2]; - double val = table[i*2+1]; - if ( par<0 || par > 1) - throw SALOME_Exception(LOCALIZED("parameter of table function is out of range [0,1]")); - if ( fabs(par-prev) PRECISION || fabs(val - oldval) > PRECISION) - isSame = false; - } - prev = par; - } - - if (!isSame) - { - _table = table; - NotifySubMeshesHypothesisModification(); - } -} - -//================================================================================ -/*! - * - */ -//================================================================================ - -const std::vector& StdMeshers_NumberOfSegments::GetTableFunction() const - throw(SALOME_Exception) -{ - if (_distrType != DT_TabFunc) - throw SALOME_Exception(LOCALIZED("not a table function distribution")); - return _table; -} - -//================================================================================ -/*! check if only 't' is unknown variable in expression - */ -//================================================================================ -bool isCorrect( const Handle( Expr_GeneralExpression )& expr ) -{ - if( expr.IsNull() ) - return true; - - bool res = true; - for( int i=1, n=expr->NbSubExpressions(); i<=n && res; i++ ) - { - Handle( Expr_GeneralExpression ) subexpr = expr->SubExpression( i ); - Handle( Expr_NamedUnknown ) name = Handle( Expr_NamedUnknown )::DownCast( subexpr ); - if( !name.IsNull() ) - { - if( name->GetName()!="t" ) - res = false; - } - else - res = isCorrect( subexpr ); - } - return res; -} - -//================================================================================ -/*! this function parses the expression 'str' in order to check if syntax is correct - * ( result in 'syntax' ) and if only 't' is unknown variable in expression ( result in 'args' ) - */ -//================================================================================ -void casProcess( const TCollection_AsciiString& str, bool& syntax, bool& args ) -{ - // check validity of expression - syntax = false; - args = false; - try - { - Handle( ExprIntrp_GenExp ) gen = ExprIntrp_GenExp::Create(); - gen->Process( str ); - - if( gen->IsDone() ) - { - syntax = true; - args = isCorrect( gen->Expression() ); - } - } - catch (Standard_Failure) - { - } -} - -//================================================================================ -/*! - * - */ -//================================================================================ - -void StdMeshers_NumberOfSegments::SetExpressionFunction(const char* expr) - throw(SALOME_Exception) -{ - if (_distrType != DT_ExprFunc) - throw SALOME_Exception(LOCALIZED("not an expression function distribution")); - - // remove white spaces - TCollection_AsciiString str((Standard_CString)expr); - str.RemoveAll(' '); - str.RemoveAll('\t'); - str.RemoveAll('\r'); - str.RemoveAll('\n'); - - bool syntax, args; - casProcess( str, syntax, args ); - if( !syntax ) - throw SALOME_Exception(LOCALIZED("invalid expression syntax")); - if( !args ) - throw SALOME_Exception(LOCALIZED("only 't' may be used as function argument")); - - string func(str.ToCString()); - if (_func != func) - { - _func = func; - NotifySubMeshesHypothesisModification(); - } -} - -//================================================================================ -/*! - * - */ -//================================================================================ - -const char* StdMeshers_NumberOfSegments::GetExpressionFunction() const - throw(SALOME_Exception) -{ - if (_distrType != DT_ExprFunc) - throw SALOME_Exception(LOCALIZED("not an expression function distribution")); - return _func.c_str(); -} - -//================================================================================ -/*! - * - */ -//================================================================================ - -void StdMeshers_NumberOfSegments::SetExponentMode(bool isExp) - throw(SALOME_Exception) -{ - if (_distrType != DT_TabFunc && _distrType != DT_ExprFunc) - throw SALOME_Exception(LOCALIZED("not a functional distribution")); - - if (isExp != _expMode) - { - _expMode = isExp; - NotifySubMeshesHypothesisModification(); - } -} - -//================================================================================ -/*! - * - */ -//================================================================================ - -bool StdMeshers_NumberOfSegments::IsExponentMode() const - throw(SALOME_Exception) -{ - if (_distrType != DT_TabFunc && _distrType != DT_ExprFunc) - throw SALOME_Exception(LOCALIZED("not a functional distribution")); - return _expMode; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & StdMeshers_NumberOfSegments::SaveTo(ostream & save) -{ - save << _numberOfSegments << " " << (int)_distrType; - switch (_distrType) - { - case DT_Scale: - save << " " << _scaleFactor; - break; - case DT_TabFunc: - int i; - save << " " << _table.size(); - for (i=0; i < _table.size(); i++) - save << " " << _table[i]; - break; - case DT_ExprFunc: - save << " " << _func; - break; - case DT_Regular: - default: - break; - } - - if (_distrType == DT_TabFunc || _distrType == DT_ExprFunc) - save << " " << (int)_expMode; - - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & StdMeshers_NumberOfSegments::LoadFrom(istream & load) -{ - bool isOK = true; - int a; - - // read number of segments - isOK = (load >> a); - if (isOK) - _numberOfSegments = a; - else - load.clear(ios::badbit | load.rdstate()); - - // read ditribution type - isOK = (load >> a); - if (isOK) - { - if (a < DT_Regular || a > DT_ExprFunc) - _distrType = DT_Regular; - else - _distrType = (DistrType) a; - } - else - load.clear(ios::badbit | load.rdstate()); - - // parameters of distribution - double b; - switch (_distrType) - { - case DT_Scale: - { - isOK = (load >> b); - if (isOK) - _scaleFactor = b; - else - load.clear(ios::badbit | load.rdstate()); - } - break; - case DT_TabFunc: - { - isOK = (load >> a); - if (isOK) - _table.resize(a, 0.); - else - load.clear(ios::badbit | load.rdstate()); - int i; - for (i=0; i < _table.size(); i++) - { - isOK = (load >> b); - if (isOK) - _table[i] = b; - else - load.clear(ios::badbit | load.rdstate()); - } - } - break; - case DT_ExprFunc: - { - string str; - isOK = (load >> str); - if (isOK) - _func = str; - else - load.clear(ios::badbit | load.rdstate()); - } - break; - case DT_Regular: - default: - break; - } - - if (_distrType == DT_TabFunc || _distrType == DT_ExprFunc) - { - isOK = (load >> a); - if (isOK) - _expMode = (bool) a; - else - load.clear(ios::badbit | load.rdstate()); - } - - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator <<(ostream & save, StdMeshers_NumberOfSegments & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >>(istream & load, StdMeshers_NumberOfSegments & hyp) -{ - return hyp.LoadFrom( load ); -} diff --git a/src/StdMeshers/StdMeshers_NumberOfSegments.hxx b/src/StdMeshers/StdMeshers_NumberOfSegments.hxx deleted file mode 100644 index 2f559fb04..000000000 --- a/src/StdMeshers/StdMeshers_NumberOfSegments.hxx +++ /dev/null @@ -1,173 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_NumberOfSegments.hxx -// Moved here from SMESH_NumberOfSegments.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_NUMBEROFSEGMENTS_HXX_ -#define _SMESH_NUMBEROFSEGMENTS_HXX_ - -#include "SMESH_Hypothesis.hxx" -#include "Utils_SALOME_Exception.hxx" -#include - -/*! - * \brief This class represents hypothesis for 1d algorithm - * - * It provides parameters for subdivision an edge by various - * distribution types, considering the given number of resulting segments - */ -class StdMeshers_NumberOfSegments: - public SMESH_Hypothesis -{ -public: - StdMeshers_NumberOfSegments(int hypId, int studyId, SMESH_Gen* gen); - virtual ~StdMeshers_NumberOfSegments(); - - /*! - * \brief Set the number of segments - * \param segmentsNumber - must be greater than zero - */ - void SetNumberOfSegments(int segmentsNumber) - throw (SALOME_Exception); - - /*! - * \brief Get the number of segments - */ - int GetNumberOfSegments() const; - - /*! - * \brief This enumeration presents available types of distribution - */ - enum DistrType - { - DT_Regular, //!< equidistant distribution - DT_Scale, //!< scale distribution - DT_TabFunc, //!< distribution with density function presented by table - DT_ExprFunc //!< distribution with density function presented by expression - }; - - /*! - * \brief Set distribution type - */ - void SetDistrType(DistrType typ) - throw (SALOME_Exception); - - /*! - * \brief Get distribution type - */ - DistrType GetDistrType() const; - - /*! - * \brief Set scale factor for scale distribution - * \param scaleFactor - positive value different from 1 - * - * Throws SALOME_Exception if distribution type is not DT_Scale, - * or scaleFactor is not a positive value different from 1 - */ - virtual void SetScaleFactor(double scaleFactor) - throw (SALOME_Exception); - - /*! - * \brief Get scale factor for scale distribution - * - * Throws SALOME_Exception if distribution type is not DT_Scale - */ - double GetScaleFactor() const - throw (SALOME_Exception); - - /*! - * \brief Set table function for distribution DT_TabFunc - * \param table - this vector contains the pairs (parameter, value) - * following each by other, so the number of elements in the vector - * must be even. The parameters must be in range [0,1] and sorted in - * increase order. The values of function must be positive. - * - * Throws SALOME_Exception if distribution type is not DT_TabFunc - */ - void SetTableFunction(const std::vector& table) - throw (SALOME_Exception); - - /*! - * \brief Get table function for distribution DT_TabFunc - * - * Throws SALOME_Exception if distribution type is not DT_TabFunc - */ - const std::vector& GetTableFunction() const - throw (SALOME_Exception); - - /*! - * \brief Set expression function for distribution DT_ExprFunc - * \param expr - string containing the expression of the function - * f(t), e.g. "sin(t)" - * - * Throws SALOME_Exception if distribution type is not DT_ExprFunc - */ - void SetExpressionFunction(const char* expr) - throw (SALOME_Exception); - - /*! - * \brief Get expression function for distribution DT_ExprFunc - * - * Throws SALOME_Exception if distribution type is not DT_ExprFunc - */ - const char* GetExpressionFunction() const - throw (SALOME_Exception); - - /*! - * \brief When exponent mode is set, the function of distribution of density - * is used as an exponent of 10, i,e, 10^f(t). This mode is sensible only when - * function distribution is used (DT_TabFunc or DT_ExprFunc) - * \param isExp - boolean switching on/off the mode - * - * Throws SALOME_Exception if distribution type is not functional - */ - void SetExponentMode(bool isExp) - throw (SALOME_Exception); - - /*! - * \brief Returns true if the exponent mode is set - * - * Throws SALOME_Exception if distribution type is not functional - */ - bool IsExponentMode() const - throw (SALOME_Exception); - - virtual ostream & SaveTo(ostream & save); - virtual istream & LoadFrom(istream & load); - friend ostream& operator << (ostream & save, StdMeshers_NumberOfSegments & hyp); - friend istream& operator >> (istream & load, StdMeshers_NumberOfSegments & hyp); - -protected: - int _numberOfSegments; //!< an edge will be split on to this number of segments - DistrType _distrType; //!< the type of distribution of density function - double _scaleFactor; //!< the scale parameter for DT_Scale - std::vector _table; //!< the table for DT_TabFunc, a sequence of pairs of numbers - std::string _func; //!< the expression of the function for DT_ExprFunc - bool _expMode; //!< flag of exponent mode -}; - -#endif diff --git a/src/StdMeshers/StdMeshers_Penta_3D.cxx b/src/StdMeshers/StdMeshers_Penta_3D.cxx deleted file mode 100644 index e1a4c028f..000000000 --- a/src/StdMeshers/StdMeshers_Penta_3D.cxx +++ /dev/null @@ -1,1593 +0,0 @@ -// SMESH StdMeshers_Penta_3D 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Penta_3D.cxx -// Module : SMESH - -#include "StdMeshers_Penta_3D.hxx" - -#include "utilities.h" -#include "Utils_ExceptHandlers.hxx" - -#include "SMDS_EdgePosition.hxx" -#include "SMDS_MeshElement.hxx" -#include "SMDS_VolumeOfNodes.hxx" -#include "SMDS_VolumeTool.hxx" -#include "SMESHDS_SubMesh.hxx" -#include "SMESH_Mesh.hxx" -#include "SMESH_subMesh.hxx" -#include "SMESH_MeshEditor.hxx" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using namespace std; - -typedef map < int, int, less >::iterator \ - StdMeshers_IteratorOfDataMapOfIntegerInteger; - -//======================================================================= -// -// StdMeshers_Penta_3D -// -//======================================================================= -//function : StdMeshers_Penta_3D -//purpose : -//======================================================================= -StdMeshers_Penta_3D::StdMeshers_Penta_3D() -: myErrorStatus(1) -{ - myTol3D=0.1; - myWallNodesMaps.resize( SMESH_Block::NbFaces() ); - myShapeXYZ.resize( SMESH_Block::NbSubShapes() ); -} -//======================================================================= -//function : Compute -//purpose : -//======================================================================= -bool StdMeshers_Penta_3D::Compute(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape) -{ - MESSAGE("StdMeshers_Penta_3D::Compute()"); - // - myErrorStatus=0; - // - bool bOK=false; - // - myShape=aShape; - SetMesh(aMesh); - // - CheckData(); - if (myErrorStatus){ - return bOK; - } - // - MakeBlock(); - if (myErrorStatus){ - return bOK; - } - // - MakeNodes(); - if (myErrorStatus){ - return bOK; - } - // - MakeConnectingMap(); - // - ClearMeshOnFxy1(); - if (myErrorStatus) { - return bOK; - } - // - MakeMeshOnFxy1(); - if (myErrorStatus) { - return bOK; - } - // - MakeVolumeMesh(); - // - return !bOK; -} -//======================================================================= -//function : MakeNodes -//purpose : -//======================================================================= -void StdMeshers_Penta_3D::MakeNodes() -{ - myErrorStatus=0; - // - const int aNbSIDs=9; - int i, j, k, ij, iNbN, aNodeID, aSize, iErr; - double aX, aY, aZ; - SMESH_Block::TShapeID aSID, aSIDs[aNbSIDs]={ - SMESH_Block::ID_V000, SMESH_Block::ID_V100, - SMESH_Block::ID_V110, SMESH_Block::ID_V010, - SMESH_Block::ID_Ex00, SMESH_Block::ID_E1y0, - SMESH_Block::ID_Ex10, SMESH_Block::ID_E0y0, - SMESH_Block::ID_Fxy0 - }; - // - SMESH_Mesh* pMesh=GetMesh(); - // - // 1. Define the sizes of mesh - // - // 1.1 Horizontal size - myJSize=0; - for (i=0; iGetSubMeshContaining(aS); - ASSERT(aSubMesh); - SMESHDS_SubMesh *aSM=aSubMesh->GetSubMeshDS(); - iNbN=aSM->NbNodes(); - myJSize+=iNbN; - } - //printf("*** Horizontal: number of nodes summary=%d\n", myJSize); - // - // 1.2 Vertical size - myISize=2; - { - const TopoDS_Shape& aS=myBlock.Shape(SMESH_Block::ID_E00z); - SMESH_subMesh *aSubMesh = pMesh->GetSubMeshContaining(aS); - ASSERT(aSubMesh); - SMESHDS_SubMesh *aSM=aSubMesh->GetSubMeshDS(); - iNbN=aSM->NbNodes(); - myISize+=iNbN; - } - //printf("*** Vertical: number of nodes on edges and vertices=%d\n", myISize); - // - aSize=myISize*myJSize; - myTNodes.resize(aSize); - // - StdMeshers_TNode aTNode; - gp_XYZ aCoords; - gp_Pnt aP3D; - // - // 2. Fill the repers on base face (Z=0) - i=0; j=0; - // vertices - for (k=0; kGetSubMeshContaining(aS)->GetSubMeshDS()->GetNodes(); - while(ite->more()) { - const SMDS_MeshNode* aNode = ite->next(); - aNodeID=aNode->GetID(); - // - aTNode.SetNode(aNode); - aTNode.SetShapeSupportID(aSID); - aTNode.SetBaseNodeID(aNodeID); - // - if ( SMESH_Block::IsEdgeID (aSID)) - { - const SMDS_EdgePosition* epos = - static_cast(aNode->GetPosition().get()); - myBlock.ComputeParameters( epos->GetUParameter(), aS, aCoords ); - } - else { - aX=aNode->X(); - aY=aNode->Y(); - aZ=aNode->Z(); - aP3D.SetCoord(aX, aY, aZ); - myBlock.ComputeParameters(aP3D, aS, aCoords); - } - iErr=myBlock.ErrorStatus(); - if (iErr) { - MESSAGE("StdMeshers_Penta_3D::MakeNodes()," << - "SMESHBlock: ComputeParameters operation failed"); - myErrorStatus=101; // SMESHBlock: ComputeParameters operation failed - return; - } - aTNode.SetNormCoord(aCoords); - ij=i*myJSize+j; - myTNodes[ij]=aTNode; - ++j; - } - } - /* - //DEB - { - int iShapeSupportID, iBaseNodeID; - // - //printf("\n\n*** Base Face\n"); - i=0; - for (j=0; j aZL(myISize); -// vector::iterator aItZL1, aItZL2 ; -// // -// const TopoDS_Shape& aE00z=myBlock.Shape(SMESH_Block::ID_E00z); -// SMDS_NodeIteratorPtr aItaE00z = -// pMesh->GetSubMeshContaining(aE00z)->GetSubMeshDS()->GetNodes(); -// // -// aZL[0]=0.; -// i=1; -// while (aItaE00z->more()) { -// const SMDS_MeshNode* aNode=aItaE00z->next(); -// const SMDS_EdgePosition* epos = -// static_cast(aNode->GetPosition().get()); -// myBlock.ComputeParameters( epos->GetUParameter(), aE00z, aCoords ); -// iErr=myBlock.ErrorStatus(); -// if (iErr) { -// MESSAGE("StdMeshers_Penta_3D::MakeNodes()," << -// "SMESHBlock: ComputeParameters operation failed"); -// myErrorStatus=101; // SMESHBlock: ComputeParameters operation failed -// return; -// } -// aZL[i]=aCoords.Z(); -// ++i; -// } -// aZL[i]=1.; -// // -// aItZL1=aZL.begin(); -// aItZL2=aZL.end(); -// // -// // Sorting the layers -// sort(aItZL1, aItZL2); - //DEB - /* - printf("** \n\n Layers begin\n"); - for(i=0, aItZL=aItZL1; aItZL!=aItZL2; ++aItZL, ++i) { - printf(" #%d : %lf\n", i, *aItZL); - } - printf("** Layers end\n"); - */ - //DEB - // - // - - // 3.1 Fill maps of wall nodes - SMESH_Block::TShapeID wallFaceID[4] = { - SMESH_Block::ID_Fx0z, SMESH_Block::ID_Fx1z, - SMESH_Block::ID_F0yz, SMESH_Block::ID_F1yz - }; - SMESH_Block::TShapeID baseEdgeID[4] = { - SMESH_Block::ID_Ex00, SMESH_Block::ID_Ex10, - SMESH_Block::ID_E0y0, SMESH_Block::ID_E1y0 - }; - for ( i = 0; i < 4; ++i ) { - int fIndex = SMESH_Block::ShapeIndex( wallFaceID[ i ]); - bool ok = LoadIJNodes (myWallNodesMaps[ fIndex ], - TopoDS::Face( myBlock.Shape( wallFaceID[ i ] )), - TopoDS::Edge( myBlock.Shape( baseEdgeID[ i ] )), - pMesh->GetMeshDS()); - if ( !ok ) { - myErrorStatus = i + 1; - MESSAGE(" Cant LoadIJNodes() from a wall face " << myErrorStatus ); - return; - } - } - - // 3.2 find node columns for vertical edges and edge IDs - vector * verticEdgeNodes[ 4 ]; - SMESH_Block::TShapeID verticEdgeID [ 4 ]; - for ( i = 0; i < 4; ++i ) { // 4 first base nodes are nodes on vertices - // edge ID - SMESH_Block::TShapeID eID, vID = aSIDs[ i ]; - ShapeSupportID(false, vID, eID); - verticEdgeID[ i ] = eID; - // column nodes - StdMeshers_TNode& aTNode = myTNodes[ i ]; - verticEdgeNodes[ i ] = 0; - for ( j = 0; j < 4; ++j ) { // loop on 4 wall faces - int fIndex = SMESH_Block::ShapeIndex( wallFaceID[ j ]); - StdMeshers_IJNodeMap & ijNodes= myWallNodesMaps[ fIndex ]; - if ( ijNodes.begin()->second[0] == aTNode.Node() ) - verticEdgeNodes[ i ] = & ijNodes.begin()->second; - else if ( ijNodes.rbegin()->second[0] == aTNode.Node() ) - verticEdgeNodes[ i ] = & ijNodes.rbegin()->second; - if ( verticEdgeNodes[ i ] ) - break; - } - } - - // 3.3 set XYZ of vertices, and initialize of the rest - SMESHDS_Mesh* aMesh = GetMesh()->GetMeshDS(); - for ( int id = SMESH_Block::ID_V000; id < SMESH_Block::ID_Shell; ++id ) - { - if ( SMESH_Block::IsVertexID( id )) { - TopoDS_Shape V = myBlock.Shape( id ); - SMESHDS_SubMesh* sm = aMesh->MeshElements( V ); - const SMDS_MeshNode* n = sm->GetNodes()->next(); - myShapeXYZ[ id ].SetCoord( n->X(), n->Y(), n->Z() ); - } - else - myShapeXYZ[ id ].SetCoord( 0., 0., 0. ); - } - - - // 4. Fill the rest repers - bool bIsUpperLayer; - int iBNID; - SMESH_Block::TShapeID aSSID, aBNSSID; - StdMeshers_TNode aTN; - // - for (j=0; j* nColumns[8]; - double ratio[4]; // base node position between columns [0.-1.] - if ( createNode ) - for ( k = 0; k < 4; ++k ) - ratio[ k ] = SetHorizEdgeXYZ (aBNXYZ, wallFaceID[ k ], - nColumns[k*2], nColumns[k*2+1]); - // - // XYZ on the bottom and top faces - const SMDS_MeshNode* n = aBN.Node(); - myShapeXYZ[ SMESH_Block::ID_Fxy0 ].SetCoord( n->X(), n->Y(), n->Z() ); - myShapeXYZ[ SMESH_Block::ID_Fxy1 ].SetCoord( 0., 0., 0. ); - // - // first create or find a top node, then the rest ones in a column - for (i=myISize-1; i>0; --i) - { - if ( createNode ) { - // set XYZ on vertical edges and faces - for ( k = 0; k < 4; ++k ) { - const SMDS_MeshNode* n = (*verticEdgeNodes[ k ]) [ i ]; - myShapeXYZ[ verticEdgeID[ k ] ].SetCoord( n->X(), n->Y(), n->Z() ); - // - n = (*nColumns[k*2]) [ i ]; - gp_XYZ xyz( n->X(), n->Y(), n->Z() ); - myShapeXYZ[ wallFaceID[ k ]] = ( 1. - ratio[ k ]) * xyz; - n = (*nColumns[k*2+1]) [ i ]; - xyz.SetCoord( n->X(), n->Y(), n->Z() ); - myShapeXYZ[ wallFaceID[ k ]] += ratio[ k ] * xyz; - } - } - // fill current node info - // -index in aTNodes - ij=i*myJSize+j; - // -normalized coordinates - aX=aBNXYZ.X(); - aY=aBNXYZ.Y(); - //aZ=aZL[i]; - aZ=(double)i/(double)(myISize-1); - aCoords.SetCoord(aX, aY, aZ); - // - // suporting shape ID - bIsUpperLayer=(i==(myISize-1)); - ShapeSupportID(bIsUpperLayer, aBNSSID, aSSID); - if (myErrorStatus) { - MESSAGE("StdMeshers_Penta_3D::MakeNodes() "); - return; - } - // - aTN.SetShapeSupportID(aSSID); - aTN.SetNormCoord(aCoords); - aTN.SetBaseNodeID(iBNID); - // - if (aSSID!=SMESH_Block::ID_NONE){ - // try to find the node - const TopoDS_Shape& aS=myBlock.Shape((int)aSSID); - FindNodeOnShape(aS, aCoords, i, aTN); - } - else{ - // create node and get it id - CreateNode (bIsUpperLayer, aCoords, aTN); - // - if ( bIsUpperLayer ) { - const SMDS_MeshNode* n = aTN.Node(); - myShapeXYZ[ SMESH_Block::ID_Fxy1 ].SetCoord( n->X(), n->Y(), n->Z() ); - } - } - if (myErrorStatus) { - MESSAGE("StdMeshers_Penta_3D::MakeNodes() "); - return; - } - // - myTNodes[ij]=aTN; - } - } - //DEB - /* - { - int iSSID, iBNID, aID; - // - for (i=0; iGetID(); - aX=aNode->X(); - aY=aNode->Y(); - aZ=aNode->Z(); - printf("*** j:%d BNID#%d iSSID:%d ID:%d { %lf %lf %lf }, { %lf %lf %lf }\n", - j, iBNID, iSSID, aID, aXYZ.X(), aXYZ.Y(), aXYZ.Z(), aX, aY, aZ); - } - } - } - */ - //DEB t -} -//======================================================================= -//function : FindNodeOnShape -//purpose : -//======================================================================= -void StdMeshers_Penta_3D::FindNodeOnShape(const TopoDS_Shape& aS, - const gp_XYZ& aParams, - const int z, - StdMeshers_TNode& aTN) -{ - myErrorStatus=0; - // - double aX, aY, aZ, aD, aTol2, minD; - gp_Pnt aP1, aP2; - // - SMESH_Mesh* pMesh=GetMesh(); - aTol2=myTol3D*myTol3D; - minD = 1.e100; - SMDS_MeshNode* pNode=NULL; - // - if ( aS.ShapeType() == TopAbs_FACE || - aS.ShapeType() == TopAbs_EDGE ) - { - // find a face ID to which aTN belongs to - int faceID; - if ( aS.ShapeType() == TopAbs_FACE ) - faceID = myBlock.ShapeID( aS ); - else { // edge maybe vertical or top horizontal - gp_XYZ aCoord = aParams; - if ( aCoord.Z() == 1. ) - aCoord.SetZ( 0.5 ); // move from top down - else - aCoord.SetX( 0.5 ); // move along X - faceID = SMESH_Block::GetShapeIDByParams( aCoord ); - } - ASSERT( SMESH_Block::IsFaceID( faceID )); - int fIndex = SMESH_Block::ShapeIndex( faceID ); - StdMeshers_IJNodeMap & ijNodes= myWallNodesMaps[ fIndex ]; - // look for a base node in ijNodes - const SMDS_MeshNode* baseNode = pMesh->GetMeshDS()->FindNode( aTN.BaseNodeID() ); - StdMeshers_IJNodeMap::const_iterator par_nVec = ijNodes.begin(); - for ( ; par_nVec != ijNodes.end(); par_nVec++ ) - if ( par_nVec->second[ 0 ] == baseNode ) { - pNode=(SMDS_MeshNode*)par_nVec->second.at( z ); - aTN.SetNode(pNode); - return; - } - } - // - myBlock.Point(aParams, aS, aP1); - // - SMDS_NodeIteratorPtr ite= - pMesh->GetSubMeshContaining(aS)->GetSubMeshDS()->GetNodes(); - while(ite->more()) { - const SMDS_MeshNode* aNode = ite->next(); - aX=aNode->X(); - aY=aNode->Y(); - aZ=aNode->Z(); - aP2.SetCoord(aX, aY, aZ); - aD=(double)aP1.SquareDistance(aP2); - //printf("** D=%lf ", aD, aTol2); - if (aD < minD) { - pNode=(SMDS_MeshNode*)aNode; - aTN.SetNode(pNode); - minD = aD; - //printf(" Ok\n"); - if (aD*& aCol1, - vector*& aCol2) -{ - // find base and top edges of the face - vector< int > edgeVec; // 0-base, 1-top - SMESH_Block::GetFaceEdgesIDs( aFaceID, edgeVec ); - // - int coord = SMESH_Block::GetCoordIndOnEdge( edgeVec[ 0 ] ); - double param = aBaseNodeParams.Coord( coord ); - if ( !myBlock.IsForwadEdge( edgeVec[ 0 ] )) - param = 1. - param; - // - // look for columns around param - StdMeshers_IJNodeMap & ijNodes = - myWallNodesMaps[ SMESH_Block::ShapeIndex( aFaceID )]; - StdMeshers_IJNodeMap::iterator par_nVec_1 = ijNodes.begin(); - while ( par_nVec_1->first < param ) - par_nVec_1++; - StdMeshers_IJNodeMap::iterator par_nVec_2 = par_nVec_1; - // - double r = 0; - if ( par_nVec_1 != ijNodes.begin() ) { - par_nVec_1--; - r = ( param - par_nVec_1->first ) / ( par_nVec_2->first - par_nVec_1->first ); - } - aCol1 = & par_nVec_1->second; - aCol2 = & par_nVec_2->second; - - // base edge - const SMDS_MeshNode* n1 = aCol1->front(); - const SMDS_MeshNode* n2 = aCol2->front(); - gp_XYZ xyz1( n1->X(), n1->Y(), n1->Z() ), xyz2( n2->X(), n2->Y(), n2->Z() ); - myShapeXYZ[ edgeVec[ 0 ] ] = ( 1. - r ) * xyz1 + r * xyz2; - - // top edge - n1 = aCol1->back(); - n2 = aCol2->back(); - xyz1.SetCoord( n1->X(), n1->Y(), n1->Z() ); - xyz2.SetCoord( n2->X(), n2->Y(), n2->Z() ); - myShapeXYZ[ edgeVec[ 1 ] ] = ( 1. - r ) * xyz1 + r * xyz2; - - return r; -} - -//======================================================================= -//function : MakeVolumeMesh -//purpose : -//======================================================================= -void StdMeshers_Penta_3D::MakeVolumeMesh() -{ - myErrorStatus=0; - // - int i, j, ij, ik, i1, i2, aSSID; - // - TopoDS_Shell aShell; - TopExp_Explorer aExp; - // - SMESH_Mesh* pMesh =GetMesh(); - SMESHDS_Mesh* meshDS=pMesh->GetMeshDS(); - // - aExp.Init(myShape, TopAbs_SHELL); - for (; aExp.More(); aExp.Next()){ - aShell=TopoDS::Shell(aExp.Current()); - break; - } - // - // 1. Set Node In Volume - ik=myISize-1; - for (i=1; iSetNodeInVolume(aNode, aShell); - } - } - } - // - // 2. Make pentahedrons - int aID0, k , aJ[3]; - vector aN; - // - SMDS_ElemIteratorPtr itf, aItNodes; - // - const TopoDS_Face& aFxy0= - TopoDS::Face(myBlock.Shape(SMESH_Block::ID_Fxy0)); - SMESH_subMesh *aSubMesh0 = pMesh->GetSubMeshContaining(aFxy0); - SMESHDS_SubMesh *aSM0=aSubMesh0->GetSubMeshDS(); - // - itf=aSM0->GetElements(); - while(itf->more()) { - const SMDS_MeshElement* pE0=itf->next(); - // - int nbFaceNodes = pE0->NbNodes(); - if ( aN.size() < nbFaceNodes * 2 ) - aN.resize( nbFaceNodes * 2 ); - // - k=0; - aItNodes=pE0->nodesIterator(); - while (aItNodes->more()) { - const SMDS_MeshElement* pNode=aItNodes->next(); - aID0=pNode->GetID(); - aJ[k]=GetIndexOnLayer(aID0); - if (myErrorStatus) { - MESSAGE("StdMeshers_Penta_3D::MakeVolumeMesh"); - return; - } - // - ++k; - } - // - bool forward = true; - for (i=0; iAddVolume(aN[0], aN[1], aN[2], - aN[3], aN[4], aN[5]); - else - aV = meshDS->AddVolume(aN[0], aN[2], aN[1], - aN[3], aN[5], aN[4]); - break; - case 4: - if ( forward ) - aV = meshDS->AddVolume(aN[0], aN[1], aN[2], aN[3], - aN[4], aN[5], aN[6], aN[7]); - else - aV = meshDS->AddVolume(aN[0], aN[3], aN[2], aN[1], - aN[4], aN[7], aN[6], aN[5]); - break; - default: - continue; - } - meshDS->SetMeshElementOnShape(aV, aShell); - } - } -} - -//======================================================================= -//function : MakeMeshOnFxy1 -//purpose : -//======================================================================= -void StdMeshers_Penta_3D::MakeMeshOnFxy1() -{ - myErrorStatus=0; - // - int aID0, aJ, aLevel, ij, aNbNodes, k; - // - SMDS_NodeIteratorPtr itn; - SMDS_ElemIteratorPtr itf, aItNodes; - SMDSAbs_ElementType aElementType; - // - const TopoDS_Face& aFxy0= - TopoDS::Face(myBlock.Shape(SMESH_Block::ID_Fxy0)); - const TopoDS_Face& aFxy1= - TopoDS::Face(myBlock.Shape(SMESH_Block::ID_Fxy1)); - // - SMESH_Mesh* pMesh=GetMesh(); - SMESHDS_Mesh * meshDS = pMesh->GetMeshDS(); - // - SMESH_subMesh *aSubMesh0 = pMesh->GetSubMeshContaining(aFxy0); - SMESHDS_SubMesh *aSM0=aSubMesh0->GetSubMeshDS(); - // - // set nodes on aFxy1 - aLevel=myISize-1; - itn=aSM0->GetNodes(); - aNbNodes=aSM0->NbNodes(); - //printf("** aNbNodes=%d\n", aNbNodes); - while(itn->more()) { - const SMDS_MeshNode* aN0=itn->next(); - aID0=aN0->GetID(); - aJ=GetIndexOnLayer(aID0); - if (myErrorStatus) { - MESSAGE("StdMeshers_Penta_3D::MakeMeshOnFxy1() "); - return; - } - // - ij=aLevel*myJSize+aJ; - const StdMeshers_TNode& aTN1=myTNodes[ij]; - SMDS_MeshNode* aN1=(SMDS_MeshNode*)aTN1.Node(); - // - meshDS->SetNodeOnFace(aN1, aFxy1); - } - // - // set elements on aFxy1 - vector aNodes1; - // - itf=aSM0->GetElements(); - while(itf->more()) { - const SMDS_MeshElement * pE0=itf->next(); - aElementType=pE0->GetType(); - if (!aElementType==SMDSAbs_Face) { - continue; - } - aNbNodes=pE0->NbNodes(); -// if (aNbNodes!=3) { -// continue; -// } - if ( aNodes1.size() < aNbNodes ) - aNodes1.resize( aNbNodes ); - // - k=aNbNodes-1; // reverse a face - aItNodes=pE0->nodesIterator(); - while (aItNodes->more()) { - const SMDS_MeshElement* pNode=aItNodes->next(); - aID0=pNode->GetID(); - aJ=GetIndexOnLayer(aID0); - if (myErrorStatus) { - MESSAGE("StdMeshers_Penta_3D::MakeMeshOnFxy1() "); - return; - } - // - ij=aLevel*myJSize+aJ; - const StdMeshers_TNode& aTN1=myTNodes[ij]; - const SMDS_MeshNode* aN1=aTN1.Node(); - aNodes1[k]=aN1; - --k; - } - SMDS_MeshFace * face = 0; - switch ( aNbNodes ) { - case 3: - face = meshDS->AddFace(aNodes1[0], aNodes1[1], aNodes1[2]); - break; - case 4: - face = meshDS->AddFace(aNodes1[0], aNodes1[1], aNodes1[2], aNodes1[3]); - break; - default: - continue; - } - meshDS->SetMeshElementOnShape(face, aFxy1); - } -} -//======================================================================= -//function : ClearMeshOnFxy1 -//purpose : -//======================================================================= -void StdMeshers_Penta_3D::ClearMeshOnFxy1() -{ - myErrorStatus=0; - // - SMESH_subMesh* aSubMesh; - SMESH_Mesh* pMesh=GetMesh(); - // - const TopoDS_Shape& aFxy1=myBlock.Shape(SMESH_Block::ID_Fxy1); - aSubMesh = pMesh->GetSubMeshContaining(aFxy1); - if (aSubMesh) - aSubMesh->ComputeStateEngine( SMESH_subMesh::CLEAN ); -} - -//======================================================================= -//function : GetIndexOnLayer -//purpose : -//======================================================================= -int StdMeshers_Penta_3D::GetIndexOnLayer(const int aID) -{ - myErrorStatus=0; - // - int j=-1; - StdMeshers_IteratorOfDataMapOfIntegerInteger aMapIt; - // - aMapIt=myConnectingMap.find(aID); - if (aMapIt==myConnectingMap.end()) { - myErrorStatus=200; - return j; - } - j=(*aMapIt).second; - return j; -} -//======================================================================= -//function : MakeConnectingMap -//purpose : -//======================================================================= -void StdMeshers_Penta_3D::MakeConnectingMap() -{ - int j, aBNID; - // - for (j=0; jGetMeshDS(); - // - pNode = pMeshDS->AddNode(aX, aY, aZ); - aTN.SetNode(pNode); -} -//======================================================================= -//function : ShapeSupportID -//purpose : -//======================================================================= -void StdMeshers_Penta_3D::ShapeSupportID(const bool bIsUpperLayer, - const SMESH_Block::TShapeID aBNSSID, - SMESH_Block::TShapeID& aSSID) -{ - myErrorStatus=0; - // - switch (aBNSSID) { - case SMESH_Block::ID_V000: - aSSID=(bIsUpperLayer) ? SMESH_Block::ID_V001 : SMESH_Block::ID_E00z; - break; - case SMESH_Block::ID_V100: - aSSID=(bIsUpperLayer) ? SMESH_Block::ID_V101 : SMESH_Block::ID_E10z; - break; - case SMESH_Block::ID_V110: - aSSID=(bIsUpperLayer) ? SMESH_Block::ID_V111 : SMESH_Block::ID_E11z; - break; - case SMESH_Block::ID_V010: - aSSID=(bIsUpperLayer) ? SMESH_Block::ID_V011 : SMESH_Block::ID_E01z; - break; - case SMESH_Block::ID_Ex00: - aSSID=(bIsUpperLayer) ? SMESH_Block::ID_Ex01 : SMESH_Block::ID_Fx0z; - break; - case SMESH_Block::ID_Ex10: - aSSID=(bIsUpperLayer) ? SMESH_Block::ID_Ex11 : SMESH_Block::ID_Fx1z; - break; - case SMESH_Block::ID_E0y0: - aSSID=(bIsUpperLayer) ? SMESH_Block::ID_E0y1 : SMESH_Block::ID_F0yz; - break; - case SMESH_Block::ID_E1y0: - aSSID=(bIsUpperLayer) ? SMESH_Block::ID_E1y1 : SMESH_Block::ID_F1yz; - break; - case SMESH_Block::ID_Fxy0: - aSSID=SMESH_Block::ID_NONE;//(bIsUpperLayer) ? Shape_ID_Fxy1 : Shape_ID_NONE; - break; - default: - aSSID=SMESH_Block::ID_NONE; - myErrorStatus=10; // Can not find supporting shape ID - break; - } - return; -} -//======================================================================= -//function : MakeBlock -//purpose : -//======================================================================= -void StdMeshers_Penta_3D::MakeBlock() -{ - myErrorStatus=0; - // - bool bFound; - int i, j, iNbEV, iNbE, iErr, iCnt, iNbNodes, iNbF; - // - TopoDS_Vertex aV000, aV001; - TopoDS_Shape aFTr; - TopTools_IndexedDataMapOfShapeListOfShape aMVES; - TopTools_IndexedMapOfShape aME ,aMEV, aM; - TopTools_ListIteratorOfListOfShape aIt; - // - TopExp::MapShapes(myShape, TopAbs_FACE, aM); - // - // 0. Find triangulated face aFTr - SMDSAbs_ElementType aElementType; - SMESH_Mesh* pMesh=GetMesh(); - // - iCnt=0; - iNbF=aM.Extent(); - for (i=1; i<=iNbF; ++i) { - const TopoDS_Shape& aF=aM(i); - SMESH_subMesh *aSubMesh = pMesh->GetSubMeshContaining(aF); - ASSERT(aSubMesh); - SMESHDS_SubMesh *aSM=aSubMesh->GetSubMeshDS(); - SMDS_ElemIteratorPtr itf=aSM->GetElements(); - while(itf->more()) { - const SMDS_MeshElement * pElement=itf->next(); - aElementType=pElement->GetType(); - if (aElementType==SMDSAbs_Face) { - iNbNodes=pElement->NbNodes(); - if (iNbNodes==3) { - aFTr=aF; - ++iCnt; - if (iCnt>1) { - MESSAGE("StdMeshers_Penta_3D::MakeBlock() "); - myErrorStatus=5; // more than one face has triangulation - return; - } - break; // next face - } - } - } - } - // - // 1. Vetrices V00, V001; - // - TopExp::MapShapes(aFTr, TopAbs_EDGE, aME); - TopExp::MapShapesAndAncestors(myShape, TopAbs_VERTEX, TopAbs_EDGE, aMVES); - // - // 1.1 Base vertex V000 - iNbE=aME.Extent(); - if (iNbE!=4){ - MESSAGE("StdMeshers_Penta_3D::MakeBlock() "); - myErrorStatus=7; // too few edges are in base face aFTr - return; - } - const TopoDS_Edge& aE1=TopoDS::Edge(aME(1)); - aV000=TopExp::FirstVertex(aE1); - // - const TopTools_ListOfShape& aLE=aMVES.FindFromKey(aV000); - aIt.Initialize(aLE); - for (; aIt.More(); aIt.Next()) { - const TopoDS_Shape& aEx=aIt.Value(); - aMEV.Add(aEx); - } - iNbEV=aMEV.Extent(); - if (iNbEV!=3){ - MESSAGE("StdMeshers_Penta_3D::MakeBlock() "); - myErrorStatus=7; // too few edges meet in base vertex - return; - } - // - // 1.2 Vertex V001 - bFound=false; - for (j=1; j<=iNbEV; ++j) { - const TopoDS_Shape& aEx=aMEV(j); - if (!aME.Contains(aEx)) { - TopoDS_Vertex aV[2]; - // - const TopoDS_Edge& aE=TopoDS::Edge(aEx); - TopExp::Vertices(aE, aV[0], aV[1]); - for (i=0; i<2; ++i) { - if (!aV[i].IsSame(aV000)) { - aV001=aV[i]; - bFound=!bFound; - break; - } - } - } - } - // - if (!bFound) { - MESSAGE("StdMeshers_Penta_3D::MakeBlock() "); - myErrorStatus=8; // can not find reper V001 - return; - } - //DEB - //gp_Pnt aP000, aP001; - // - //aP000=BRep_Tool::Pnt(TopoDS::Vertex(aV000)); - //printf("*** aP000 { %lf, %lf, %lf }\n", aP000.X(), aP000.Y(), aP000.Z()); - //aP001=BRep_Tool::Pnt(TopoDS::Vertex(aV001)); - //printf("*** aP001 { %lf, %lf, %lf }\n", aP001.X(), aP001.Y(), aP001.Z()); - //DEB - // - aME.Clear(); - TopExp::MapShapes(myShape, TopAbs_SHELL, aME); - iNbE=aME.Extent(); - if (iNbE!=1) { - MESSAGE("StdMeshers_Penta_3D::MakeBlock() "); - myErrorStatus=9; // number of shells in source shape !=1 - return; - } - // - // 2. Load Block - const TopoDS_Shell& aShell=TopoDS::Shell(aME(1)); - myBlock.Load(aShell, aV000, aV001); - iErr=myBlock.ErrorStatus(); - if (iErr) { - MESSAGE("StdMeshers_Penta_3D::MakeBlock() "); - myErrorStatus=100; // SMESHBlock: Load operation failed - return; - } -} -//======================================================================= -//function : CheckData -//purpose : -//======================================================================= -void StdMeshers_Penta_3D::CheckData() -{ - myErrorStatus=0; - // - int i, iNb; - int iNbEx[]={8, 12, 6}; - // - TopAbs_ShapeEnum aST; - TopAbs_ShapeEnum aSTEx[]={ - TopAbs_VERTEX, TopAbs_EDGE, TopAbs_FACE - }; - TopTools_IndexedMapOfShape aM; - // - if (myShape.IsNull()){ - MESSAGE("StdMeshers_Penta_3D::CheckData() "); - myErrorStatus=2; // null shape - return; - } - // - aST=myShape.ShapeType(); - if (!(aST==TopAbs_SOLID || aST==TopAbs_SHELL)) { - MESSAGE("StdMeshers_Penta_3D::CheckData() "); - myErrorStatus=3; // not compatible type of shape - return; - } - // - for (i=0; i<3; ++i) { - aM.Clear(); - TopExp::MapShapes(myShape, aSTEx[i], aM); - iNb=aM.Extent(); - if (iNb!=iNbEx[i]){ - MESSAGE("StdMeshers_Penta_3D::CheckData() "); - myErrorStatus=4; // number of subshape is not compatible - return; - } - } -} - -//======================================================================= -//function : LoadIJNodes -//purpose : Load nodes bound to theFace into column (vectors) and rows -// of theIJNodes. -// The value of theIJNodes map is a vector of ordered nodes so -// that the 0-the one lies on theBaseEdge. -// The key of theIJNodes map is a normalized parameter of each -// 0-the node on theBaseEdge. -//======================================================================= - -bool StdMeshers_Penta_3D::LoadIJNodes(StdMeshers_IJNodeMap & theIJNodes, - const TopoDS_Face& theFace, - const TopoDS_Edge& theBaseEdge, - SMESHDS_Mesh* theMesh) -{ - // get vertices of theBaseEdge - TopoDS_Vertex vfb, vlb, vft; // first and last, bottom and top vertices - TopoDS_Edge eFrw = TopoDS::Edge( theBaseEdge.Oriented( TopAbs_FORWARD )); - TopExp::Vertices( eFrw, vfb, vlb ); - - // find the other edges of theFace and orientation of e1 - TopoDS_Edge e1, e2, eTop; - bool rev1, CumOri = false; - TopExp_Explorer exp( theFace, TopAbs_EDGE ); - int nbEdges = 0; - for ( ; exp.More(); exp.Next() ) - { - if ( ++nbEdges > 4 ) - return false; // more than 4 edges in theFace - TopoDS_Edge e = TopoDS::Edge( exp.Current() ); - if ( theBaseEdge.IsSame( e )) - continue; - TopoDS_Vertex vCommon; - if ( !TopExp::CommonVertex( theBaseEdge, e, vCommon )) - eTop = e; - else if ( vCommon.IsSame( vfb )) { - e1 = e; - vft = TopExp::LastVertex( e1, CumOri ); - rev1 = vfb.IsSame( vft ); - if ( rev1 ) - vft = TopExp::FirstVertex( e1, CumOri ); - } - else - e2 = e; - } - if ( nbEdges < 4 ) - return false; // lass than 4 edges in theFace - - // submeshes corresponding to shapes - SMESHDS_SubMesh* smFace = theMesh->MeshElements( theFace ); - SMESHDS_SubMesh* smb = theMesh->MeshElements( theBaseEdge ); - SMESHDS_SubMesh* smt = theMesh->MeshElements( eTop ); - SMESHDS_SubMesh* sm1 = theMesh->MeshElements( e1 ); - SMESHDS_SubMesh* sm2 = theMesh->MeshElements( e2 ); - SMESHDS_SubMesh* smVfb = theMesh->MeshElements( vfb ); - SMESHDS_SubMesh* smVlb = theMesh->MeshElements( vlb ); - SMESHDS_SubMesh* smVft = theMesh->MeshElements( vft ); - if (!smFace || !smb || !smt || !sm1 || !sm2 || !smVfb || !smVlb || !smVft ) { - MESSAGE( "NULL submesh " <NbNodes() != smt->NbNodes() || sm1->NbNodes() != sm2->NbNodes() ) { - MESSAGE(" Diff nb of nodes on opposite edges" ); - return false; - } - if (smVfb->NbNodes() != 1 || smVlb->NbNodes() != 1 || smVft->NbNodes() != 1) { - MESSAGE("Empty submesh of vertex"); - return false; - } - if ( sm1->NbNodes() * smb->NbNodes() != smFace->NbNodes() ) { - MESSAGE( "Wrong nb face nodes: " << - sm1->NbNodes()<<" "<NbNodes()<<" "<NbNodes()); - return false; - } - // IJ size - int vsize = sm1->NbNodes() + 2; - int hsize = smb->NbNodes() + 2; - - // load nodes from theBaseEdge - - set loadedNodes; - const SMDS_MeshNode* nullNode = 0; - - vector & nVecf = theIJNodes[ 0.]; - nVecf.resize( vsize, nullNode ); - loadedNodes.insert( nVecf[ 0 ] = smVfb->GetNodes()->next() ); - - vector & nVecl = theIJNodes[ 1.]; - nVecl.resize( vsize, nullNode ); - loadedNodes.insert( nVecl[ 0 ] = smVlb->GetNodes()->next() ); - - double f, l; - BRep_Tool::Range( eFrw, f, l ); - double range = l - f; - SMDS_NodeIteratorPtr nIt = smb->GetNodes(); - const SMDS_MeshNode* node; - while ( nIt->more() ) - { - node = nIt->next(); - const SMDS_EdgePosition* pos = - dynamic_cast( node->GetPosition().get() ); - if ( !pos ) return false; - double u = ( pos->GetUParameter() - f ) / range; - vector & nVec = theIJNodes[ u ]; - nVec.resize( vsize, nullNode ); - loadedNodes.insert( nVec[ 0 ] = node ); - } - if ( theIJNodes.size() != hsize ) { - MESSAGE( "Wrong node positions on theBaseEdge" ); - return false; - } - - // load nodes from e1 - - map< double, const SMDS_MeshNode*> sortedNodes; // sort by param on edge - nIt = sm1->GetNodes(); - while ( nIt->more() ) - { - node = nIt->next(); - const SMDS_EdgePosition* pos = - dynamic_cast( node->GetPosition().get() ); - if ( !pos ) return false; - sortedNodes.insert( make_pair( pos->GetUParameter(), node )); - } - loadedNodes.insert( nVecf[ vsize - 1 ] = smVft->GetNodes()->next() ); - map< double, const SMDS_MeshNode*>::iterator u_n = sortedNodes.begin(); - int row = rev1 ? vsize - 1 : 0; - for ( ; u_n != sortedNodes.end(); u_n++ ) - { - if ( rev1 ) row--; - else row++; - loadedNodes.insert( nVecf[ row ] = u_n->second ); - } - - // try to load the rest nodes - - // get all faces from theFace - set allFaces, foundFaces; - SMDS_ElemIteratorPtr eIt = smFace->GetElements(); - while ( eIt->more() ) { - const SMDS_MeshElement* e = eIt->next(); - if ( e->GetType() == SMDSAbs_Face ) - allFaces.insert( e ); - } - // Starting from 2 neighbour nodes on theBaseEdge, look for a face - // the nodes belong to, and between the nodes of the found face, - // look for a not loaded node considering this node to be the next - // in a column of the starting second node. Repeat, starting - // from nodes next to the previous starting nodes in their columns, - // and so on while a face can be found. Then go the the next pair - // of nodes on theBaseEdge. - StdMeshers_IJNodeMap::iterator par_nVec_1 = theIJNodes.begin(); - StdMeshers_IJNodeMap::iterator par_nVec_2 = par_nVec_1; - // loop on columns - int col = 0; - for ( par_nVec_2++; par_nVec_2 != theIJNodes.end(); par_nVec_1++, par_nVec_2++ ) - { - col++; - row = 0; - const SMDS_MeshNode* n1 = par_nVec_1->second[ row ]; - const SMDS_MeshNode* n2 = par_nVec_2->second[ row ]; - const SMDS_MeshElement* face = 0; - do { - // look for a face by 2 nodes - face = SMESH_MeshEditor::FindFaceInSet( n1, n2, allFaces, foundFaces ); - if ( face ) - { - int nbFaceNodes = face->NbNodes(); - if ( nbFaceNodes > 4 ) { - MESSAGE(" Too many nodes in a face: " << nbFaceNodes ); - return false; - } - // look for a not loaded node of the - bool found = false; - const SMDS_MeshNode* n3 = 0; // a node defferent from n1 and n2 - eIt = face->nodesIterator() ; - while ( !found && eIt->more() ) { - node = static_cast( eIt->next() ); - found = loadedNodes.insert( node ).second; - if ( !found && node != n1 && node != n2 ) - n3 = node; - } - if ( found ) { - if ( ++row > vsize - 1 ) { - MESSAGE( "Too many nodes in column "<< col <<": "<< row+1); - return false; - } - par_nVec_2->second[ row ] = node; - foundFaces.insert( face ); - n2 = node; - if ( nbFaceNodes == 4 ) - n1 = par_nVec_1->second[ row ]; - } - else if (nbFaceNodes == 3 && - n3 == par_nVec_1->second[ row ] ) - n1 = n3; - else { - MESSAGE( "Not quad mesh, column "<< col ); - return false; - } - } - } while ( face && n1 && n2 ); - - if ( row < vsize - 1 ) { - MESSAGE( "Too few nodes in column "<< col <<": "<< row+1); - MESSAGE( "Base node 1: "<< par_nVec_1->second[0]); - MESSAGE( "Base node 2: "<< par_nVec_2->second[0]); - MESSAGE( "Current node 1: "<< n1); - MESSAGE( "Current node 2: "<< n2); - MESSAGE( "first base node: "<< theIJNodes.begin()->second[0]); - MESSAGE( "last base node: "<< theIJNodes.rbegin()->second[0]); - return false; - } - } // loop on columns - - return true; -} - -////////////////////////////////////////////////////////////////////////// -// -// StdMeshers_SMESHBlock -// -////////////////////////////////////////////////////////////////////////// - -//======================================================================= -//function : StdMeshers_SMESHBlock -//purpose : -//======================================================================= -StdMeshers_SMESHBlock::StdMeshers_SMESHBlock() -{ - myErrorStatus=1; - myIsEdgeForward.resize( SMESH_Block::NbEdges(), -1 ); -} - -//======================================================================= -//function : IsForwadEdge -//purpose : -//======================================================================= - -bool StdMeshers_SMESHBlock::IsForwadEdge(const int theEdgeID) -{ - int index = myTBlock.ShapeIndex( theEdgeID ); - if ( !myTBlock.IsEdgeID( theEdgeID )) - return false; - - if ( myIsEdgeForward[ index ] < 0 ) - myIsEdgeForward[ index ] = - myTBlock.IsForwardEdge( TopoDS::Edge( Shape( theEdgeID )), myShapeIDMap ); - - return myIsEdgeForward[ index ]; -} - -//======================================================================= -//function : ErrorStatus -//purpose : -//======================================================================= -int StdMeshers_SMESHBlock::ErrorStatus() const -{ - return myErrorStatus; -} -//======================================================================= -//function : Load -//purpose : -//======================================================================= -void StdMeshers_SMESHBlock::Load(const TopoDS_Shell& theShell) -{ - - TopoDS_Vertex aV000, aV001; - // - Load(theShell, aV000, aV001); -} -//======================================================================= -//function : Load -//purpose : -//======================================================================= -void StdMeshers_SMESHBlock::Load(const TopoDS_Shell& theShell, - const TopoDS_Vertex& theV000, - const TopoDS_Vertex& theV001) -{ - myErrorStatus=0; - // - myShell=theShell; - // - bool bOk; - // - myShapeIDMap.Clear(); - bOk=myTBlock.LoadBlockShapes(myShell, theV000, theV001, myShapeIDMap); - if (!bOk) { - myErrorStatus=2; - return; - } -} -//======================================================================= -//function : ComputeParameters -//purpose : -//======================================================================= -void StdMeshers_SMESHBlock::ComputeParameters(const gp_Pnt& thePnt, - gp_XYZ& theXYZ) -{ - ComputeParameters(thePnt, myShell, theXYZ); -} -//======================================================================= -//function : ComputeParameters -//purpose : -//======================================================================= -void StdMeshers_SMESHBlock::ComputeParameters(const gp_Pnt& thePnt, - const TopoDS_Shape& theShape, - gp_XYZ& theXYZ) -{ - myErrorStatus=0; - // - int aID; - bool bOk; - // - aID=ShapeID(theShape); - if (myErrorStatus) { - return; - } - bOk=myTBlock.ComputeParameters(thePnt, theXYZ, aID); - if (!bOk) { - myErrorStatus=4; // problems with computation Parameters - return; - } -} - -//======================================================================= -//function : ComputeParameters -//purpose : -//======================================================================= - -void StdMeshers_SMESHBlock::ComputeParameters(const double& theU, - const TopoDS_Shape& theShape, - gp_XYZ& theXYZ) -{ - myErrorStatus=0; - // - int aID; - bool bOk=false; - // - aID=ShapeID(theShape); - if (myErrorStatus) { - return; - } - if ( SMESH_Block::IsEdgeID( aID )) - bOk=myTBlock.EdgeParameters( aID, theU, theXYZ ); - if (!bOk) { - myErrorStatus=4; // problems with computation Parameters - return; - } -} - -//======================================================================= -//function : Point -//purpose : -//======================================================================= - void StdMeshers_SMESHBlock::Point(const gp_XYZ& theParams, - gp_Pnt& aP3D) -{ - TopoDS_Shape aS; - // - Point(theParams, aS, aP3D); -} -//======================================================================= -//function : Point -//purpose : -//======================================================================= - void StdMeshers_SMESHBlock::Point(const gp_XYZ& theParams, - const TopoDS_Shape& theShape, - gp_Pnt& aP3D) -{ - myErrorStatus=0; - // - int aID; - bool bOk=false; - gp_XYZ aXYZ(99.,99.,99.); - aP3D.SetXYZ(aXYZ); - // - if (theShape.IsNull()) { - bOk=myTBlock.ShellPoint(theParams, aXYZ); - } - // - else { - aID=ShapeID(theShape); - if (myErrorStatus) { - return; - } - // - if (SMESH_Block::IsVertexID(aID)) { - bOk=myTBlock.VertexPoint(aID, aXYZ); - } - else if (SMESH_Block::IsEdgeID(aID)) { - bOk=myTBlock.EdgePoint(aID, theParams, aXYZ); - } - // - else if (SMESH_Block::IsFaceID(aID)) { - bOk=myTBlock.FacePoint(aID, theParams, aXYZ); - } - } - if (!bOk) { - myErrorStatus=4; // problems with point computation - return; - } - aP3D.SetXYZ(aXYZ); -} -//======================================================================= -//function : ShapeID -//purpose : -//======================================================================= -int StdMeshers_SMESHBlock::ShapeID(const TopoDS_Shape& theShape) -{ - myErrorStatus=0; - // - int aID=-1; - TopoDS_Shape aSF, aSR; - // - aSF=theShape; - aSF.Orientation(TopAbs_FORWARD); - aSR=theShape; - aSR.Orientation(TopAbs_REVERSED); - // - if (myShapeIDMap.Contains(aSF)) { - aID=myShapeIDMap.FindIndex(aSF); - return aID; - } - if (myShapeIDMap.Contains(aSR)) { - aID=myShapeIDMap.FindIndex(aSR); - return aID; - } - myErrorStatus=2; // unknown shape; - return aID; -} -//======================================================================= -//function : Shape -//purpose : -//======================================================================= -const TopoDS_Shape& StdMeshers_SMESHBlock::Shape(const int theID) -{ - myErrorStatus=0; - // - int aNb; - // - aNb=myShapeIDMap.Extent(); - if (theID<1 || theID>aNb) { - myErrorStatus=3; // ID is out of range - return myEmptyShape; - } - // - const TopoDS_Shape& aS=myShapeIDMap.FindKey(theID); - return aS; -} diff --git a/src/StdMeshers/StdMeshers_Penta_3D.hxx b/src/StdMeshers/StdMeshers_Penta_3D.hxx deleted file mode 100644 index dc8ba72cf..000000000 --- a/src/StdMeshers/StdMeshers_Penta_3D.hxx +++ /dev/null @@ -1,256 +0,0 @@ -// SMESH StdMeshers : 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Penta_3D.hxx -// Module : SMESH - -#ifndef StdMeshers_Penta_3D_HeaderFile -#define StdMeshers_Penta_3D_HeaderFile - -#include - -//////////////////////////////////////////////////////////////////////// -// -// class StdMeshers_SMESHBlock -// -//////////////////////////////////////////////////////////////////////// -#include -#include -#include -#include -#include - -#include "SMESH_Block.hxx" - -typedef std::map< double, std::vector > StdMeshers_IJNodeMap; - -class StdMeshers_SMESHBlock { - -public: - // - StdMeshers_SMESHBlock(); - - void Load (const TopoDS_Shell& theShell); - - void Load (const TopoDS_Shell& theShell, - const TopoDS_Vertex& theV000, - const TopoDS_Vertex& theV001); - - void ComputeParameters(const gp_Pnt& thePnt, - gp_XYZ& theXYZ); - - void ComputeParameters(const gp_Pnt& thePnt, - const TopoDS_Shape& theShape, - gp_XYZ& theXYZ); - - void ComputeParameters(const double& theU, - const TopoDS_Shape& theShape, - gp_XYZ& theXYZ); - - void Point(const gp_XYZ& theParams, - gp_Pnt& thePnt); - - void Point(const gp_XYZ& theParams, - const TopoDS_Shape& theShape, - gp_Pnt& thePnt); - - int ShapeID(const TopoDS_Shape& theShape); - - const TopoDS_Shape& Shape(const int theID); - - SMESH_Block & Block() { return myTBlock; } - - bool IsForwadEdge(const int theEdgeID); - - int ErrorStatus() const; - - -protected: - TopoDS_Shell myShell; - TopTools_IndexedMapOfOrientedShape myShapeIDMap; - SMESH_Block myTBlock; - TopoDS_Shape myEmptyShape; - vector myIsEdgeForward; - // - int myErrorStatus; -}; - -//////////////////////////////////////////////////////////////////////// -// -// class StdMeshers_TNode -// -//////////////////////////////////////////////////////////////////////// -#include "SMDS_MeshNode.hxx" - -class StdMeshers_TNode { - -public: - - StdMeshers_TNode(){ - myNode=NULL; - myXYZ.SetCoord(99., 99., 99.); - myShapeSupportID=-1; - myBaseNodeID=-1; - } - - void SetNode(const SMDS_MeshNode* theNode) { - myNode=(SMDS_MeshNode*) theNode; - } - - const SMDS_MeshNode* Node()const { - return myNode; - } - - void SetShapeSupportID (const int theID) { - myShapeSupportID=theID; - } - - int ShapeSupportID()const { - return myShapeSupportID; - } - - void SetNormCoord (const gp_XYZ& theXYZ) { - myXYZ=theXYZ; - } - - const gp_XYZ& NormCoord ()const{ - return myXYZ; - } - - void SetBaseNodeID (const int theID) { - myBaseNodeID=theID; - } - - int BaseNodeID ()const{ - return myBaseNodeID; - } - -private: - SMDS_MeshNode* myNode; - int myShapeSupportID; - gp_XYZ myXYZ; - int myBaseNodeID; -}; - -//////////////////////////////////////////////////////////////////////// -// -// class StdMeshers_Penta_3D -// -//////////////////////////////////////////////////////////////////////// -#include "SMESH_Mesh.hxx" -#include -// -class StdMeshers_Penta_3D { -// - public: // methods - StdMeshers_Penta_3D(); - - //~StdMeshers_Penta_3D(); - - bool Compute(SMESH_Mesh& , const TopoDS_Shape& ); - - int ErrorStatus() const { - return myErrorStatus; - } - - void SetTolerance(const double theTol3D) { - myTol3D=theTol3D; - } - - double Tolerance() const { - return myTol3D; - } - - static bool LoadIJNodes(StdMeshers_IJNodeMap & theIJNodes, - const TopoDS_Face& theFace, - const TopoDS_Edge& theBaseEdge, - SMESHDS_Mesh* theMesh); - // Load nodes bound to theFace into column (vectors) and rows - // of theIJNodes. - // The value of theIJNodes map is a vector of ordered nodes so - // that the 0-the one lies on theBaseEdge. - // The key of theIJNodes map is a normalized parameter of each - // 0-the node on theBaseEdge. - - - protected: // methods - - void CheckData(); - - void MakeBlock(); - - void MakeNodes(); - - double SetHorizEdgeXYZ(const gp_XYZ& aBNXYZ, - const int aFaceID, - vector*& aCol1, - vector*& aCol2); - - void ShapeSupportID(const bool theIsUpperLayer, - const SMESH_Block::TShapeID theBNSSID, - SMESH_Block::TShapeID& theSSID); - - void FindNodeOnShape(const TopoDS_Shape& aS, - const gp_XYZ& aParams, - const int z, - StdMeshers_TNode& aTN); - - void CreateNode(const bool theIsUpperLayer, - const gp_XYZ& aParams, - StdMeshers_TNode& aTN); - - void ClearMeshOnFxy1(); - - void MakeMeshOnFxy1(); - - void MakeConnectingMap(); - - int GetIndexOnLayer(const int aID); - - void MakeVolumeMesh(); - - void SetMesh(SMESH_Mesh& theMesh) { - myMesh=(void *)&theMesh; - } - - SMESH_Mesh* GetMesh()const { - return (SMESH_Mesh*)myMesh; - } - - protected: // fields - TopoDS_Shape myShape; - StdMeshers_SMESHBlock myBlock; - void * myMesh; - int myErrorStatus; - // - vector myTNodes; - int myISize; - int myJSize; - double myTol3D; // Tolerance value - std::map < int, int > myConnectingMap; - // - vector myWallNodesMaps; // nodes on a face - vector myShapeXYZ; // point on each sub-shape -}; - -#endif diff --git a/src/StdMeshers/StdMeshers_Propagation.cxx b/src/StdMeshers/StdMeshers_Propagation.cxx deleted file mode 100644 index f314b4c28..000000000 --- a/src/StdMeshers/StdMeshers_Propagation.cxx +++ /dev/null @@ -1,102 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Propagation.cxx -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_Propagation.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * - */ -//============================================================================= -StdMeshers_Propagation::StdMeshers_Propagation (int hypId, int studyId, - SMESH_Gen * gen) - : SMESH_Hypothesis(hypId, studyId, gen) -{ - _name = GetName(); - _param_algo_dim = -2; -} - -//============================================================================= -/*! - * - */ -//============================================================================= -StdMeshers_Propagation::~StdMeshers_Propagation() -{ -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & StdMeshers_Propagation::SaveTo (ostream & save) -{ - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= -istream & StdMeshers_Propagation::LoadFrom (istream & load) -{ - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= -ostream & operator << (ostream & save, StdMeshers_Propagation & hyp) -{ - return hyp.SaveTo(save); -} - -//============================================================================= -/*! - * - */ -//============================================================================= -istream & operator >> (istream & load, StdMeshers_Propagation & hyp) -{ - return hyp.LoadFrom(load); -} - -//============================================================================= -/*! - * GetName - */ -//============================================================================= -std::string StdMeshers_Propagation::GetName () -{ - return "Propagation"; -} diff --git a/src/StdMeshers/StdMeshers_Propagation.hxx b/src/StdMeshers/StdMeshers_Propagation.hxx deleted file mode 100644 index 4ee7c5628..000000000 --- a/src/StdMeshers/StdMeshers_Propagation.hxx +++ /dev/null @@ -1,47 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Propagation.hxx -// Module : SMESH -// $Header$ - -#ifndef _SMESH_PROPAGATION_HXX_ -#define _SMESH_PROPAGATION_HXX_ - -#include "SMESH_Hypothesis.hxx" -#include "Utils_SALOME_Exception.hxx" - -class StdMeshers_Propagation:public SMESH_Hypothesis -{ - public: - StdMeshers_Propagation(int hypId, int studyId, SMESH_Gen * gen); - virtual ~ StdMeshers_Propagation(); - - virtual ostream & SaveTo(ostream & save); - virtual istream & LoadFrom(istream & load); - friend ostream & operator <<(ostream & save, StdMeshers_Propagation & hyp); - friend istream & operator >>(istream & load, StdMeshers_Propagation & hyp); - - static std::string GetName (); -}; - -#endif diff --git a/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx b/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx deleted file mode 100644 index da6b6a2e4..000000000 --- a/src/StdMeshers/StdMeshers_Quadrangle_2D.cxx +++ /dev/null @@ -1,1117 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Quadrangle_2D.cxx -// Moved here from SMESH_Quadrangle_2D.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_Quadrangle_2D.hxx" -#include "SMESH_Gen.hxx" -#include "SMESH_Mesh.hxx" -#include "SMESH_subMesh.hxx" - -#include "SMDS_MeshElement.hxx" -#include "SMDS_MeshNode.hxx" -#include "SMDS_EdgePosition.hxx" -#include "SMDS_FacePosition.hxx" - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "utilities.h" -#include "Utils_ExceptHandlers.hxx" - - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_Quadrangle_2D::StdMeshers_Quadrangle_2D (int hypId, int studyId, SMESH_Gen* gen) - : SMESH_2D_Algo(hypId, studyId, gen) -{ - MESSAGE("StdMeshers_Quadrangle_2D::StdMeshers_Quadrangle_2D"); - _name = "Quadrangle_2D"; - // _shapeType = TopAbs_FACE; - _shapeType = (1 << TopAbs_FACE); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_Quadrangle_2D::~StdMeshers_Quadrangle_2D() -{ - MESSAGE("StdMeshers_Quadrangle_2D::~StdMeshers_Quadrangle_2D"); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool StdMeshers_Quadrangle_2D::CheckHypothesis - (SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - SMESH_Hypothesis::Hypothesis_Status& aStatus) -{ - //MESSAGE("StdMeshers_Quadrangle_2D::CheckHypothesis"); - - bool isOk = true; - aStatus = SMESH_Hypothesis::HYP_OK; - - // nothing to check - - return isOk; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool StdMeshers_Quadrangle_2D::Compute (SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape) throw (SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - //MESSAGE("StdMeshers_Quadrangle_2D::Compute"); - SMESHDS_Mesh * meshDS = aMesh.GetMeshDS(); - aMesh.GetSubMesh(aShape); - - FaceQuadStruct *quad = CheckAnd2Dcompute(aMesh, aShape); - if (!quad) - return false; - - // --- compute 3D values on points, store points & quadrangles - - int nbdown = quad->nbPts[0]; - int nbup = quad->nbPts[2]; -// bool isDownOut = (nbdown > nbup); -// bool isUpOut = (nbdown < nbup); - - int nbright = quad->nbPts[1]; - int nbleft = quad->nbPts[3]; -// bool isRightOut = (nbright > nbleft); -// bool isLeftOut = (nbright < nbleft); - - int nbhoriz = Min(nbdown, nbup); - int nbvertic = Min(nbright, nbleft); - - int nbVertices = nbhoriz * nbvertic; - int nbQuad = (nbhoriz - 1) * (nbvertic - 1); - //SCRUTE(nbVertices); - //SCRUTE(nbQuad); - - // const TopoDS_Face& FF = TopoDS::Face(aShape); - // bool faceIsForward = (FF.Orientation() == TopAbs_FORWARD); - // TopoDS_Face F = TopoDS::Face(FF.Oriented(TopAbs_FORWARD)); - const TopoDS_Face& F = TopoDS::Face(aShape); - bool faceIsForward = (F.Orientation() == TopAbs_FORWARD); - Handle(Geom_Surface) S = BRep_Tool::Surface(F); - - // internal mesh nodes - int i, j; - for (i = 1; i < nbhoriz - 1; i++) { - for (j = 1; j < nbvertic - 1; j++) { - int ij = j * nbhoriz + i; - double u = quad->uv_grid[ij].u; - double v = quad->uv_grid[ij].v; - gp_Pnt P = S->Value(u, v); - SMDS_MeshNode * node = meshDS->AddNode(P.X(), P.Y(), P.Z()); - meshDS->SetNodeOnFace(node, F); - quad->uv_grid[ij].node = node; - SMDS_FacePosition* fpos = - dynamic_cast(node->GetPosition().get()); - fpos->SetUParameter(u); - fpos->SetVParameter(v); - } - } - - // mesh faces - - // [2] - // --.--.--.--.--.-- nbvertic - // | | ^ - // | | ^ - // [3] | | ^ j [1] - // | | ^ - // | | ^ - // ---.----.----.--- 0 - // 0 > > > > > > > > nbhoriz - // i - // [0] - - i = 0; - int ilow = 0; - int iup = nbhoriz - 1; - if (quad->isEdgeOut[3]) { ilow++; } else { if (quad->isEdgeOut[1]) iup--; } - - int jlow = 0; - int jup = nbvertic - 1; - if (quad->isEdgeOut[0]) { jlow++; } else { if (quad->isEdgeOut[2]) jup--; } - - // regular quadrangles - // bool isQuadForward = ( faceIsForward == quad->isEdgeForward[0]); - for (i = ilow; i < iup; i++) { - for (j = jlow; j < jup; j++) { - const SMDS_MeshNode *a, *b, *c, *d; - a = quad->uv_grid[j * nbhoriz + i].node; - b = quad->uv_grid[j * nbhoriz + i + 1].node; - c = quad->uv_grid[(j + 1) * nbhoriz + i + 1].node; - d = quad->uv_grid[(j + 1) * nbhoriz + i].node; - // if (isQuadForward) faceId = meshDS->AddFace(a,b,c,d); - // else faceId = meshDS->AddFace(a,d,c,b); - SMDS_MeshFace * face = meshDS->AddFace(a, b, c, d); - meshDS->SetMeshElementOnShape(face, F); - } - } - - UVPtStruct *uv_e0 = quad->uv_edges[0]; - UVPtStruct *uv_e1 = quad->uv_edges[1]; - UVPtStruct *uv_e2 = quad->uv_edges[2]; - UVPtStruct *uv_e3 = quad->uv_edges[3]; - - double eps = Precision::Confusion(); - - // Boundary quadrangles - - if (quad->isEdgeOut[0]) { - // Down edge is out - // - // |___|___|___|___|___|___| - // | | | | | | | - // |___|___|___|___|___|___| - // | | | | | | | - // |___|___|___|___|___|___| __ first row of the regular grid - // . . . . . . . . . __ down edge nodes - // - // >->->->->->->->->->->->-> -- direction of processing - - int g = 0; // number of last processed node in the regular grid - - // number of last node of the down edge to be processed - int stop = nbdown - 1; - // if right edge is out, we will stop at a node, previous to the last one - if (quad->isEdgeOut[1]) stop--; - - // for each node of the down edge find nearest node - // in the first row of the regular grid and link them - for (i = 0; i < stop; i++) { - const SMDS_MeshNode *a, *b, *c, *d; - a = uv_e0[i].node; - b = uv_e0[i + 1].node; - gp_Pnt pb (b->X(), b->Y(), b->Z()); - - // find node c in the regular grid, which will be linked with node b - int near = g; - if (i == stop - 1) { - // right bound reached, link with the rightmost node - near = iup; - c = quad->uv_grid[nbhoriz + iup].node; - } else { - // find in the grid node c, nearest to the b - double mind = RealLast(); - for (int k = g; k <= iup; k++) { - - const SMDS_MeshNode *nk; - if (k < ilow) // this can be, if left edge is out - nk = uv_e3[1].node; // get node from the left edge - else - nk = quad->uv_grid[nbhoriz + k].node; // get one of middle nodes - - gp_Pnt pnk (nk->X(), nk->Y(), nk->Z()); - double dist = pb.Distance(pnk); - if (dist < mind - eps) { - c = nk; - near = k; - mind = dist; - } else { - break; - } - } - } - - if (near == g) { // make triangle - SMDS_MeshFace* face = meshDS->AddFace(a, b, c); - meshDS->SetMeshElementOnShape(face, F); - } else { // make quadrangle - if (near - 1 < ilow) - d = uv_e3[1].node; - else - d = quad->uv_grid[nbhoriz + near - 1].node; - SMDS_MeshFace* face = meshDS->AddFace(a, b, c, d); - meshDS->SetMeshElementOnShape(face, F); - - // if node d is not at position g - make additional triangles - if (near - 1 > g) { - for (int k = near - 1; k > g; k--) { - c = quad->uv_grid[nbhoriz + k].node; - if (k - 1 < ilow) - d = uv_e3[1].node; - else - d = quad->uv_grid[nbhoriz + k - 1].node; - SMDS_MeshFace* face = meshDS->AddFace(a, c, d); - meshDS->SetMeshElementOnShape(face, F); - } - } - g = near; - } - } - } else { - if (quad->isEdgeOut[2]) { - // Up edge is out - // - // <-<-<-<-<-<-<-<-<-<-<-<-< -- direction of processing - // - // . . . . . . . . . __ up edge nodes - // ___ ___ ___ ___ ___ ___ __ first row of the regular grid - // | | | | | | | - // |___|___|___|___|___|___| - // | | | | | | | - // |___|___|___|___|___|___| - // | | | | | | | - - int g = nbhoriz - 1; // last processed node in the regular grid - - int stop = 0; - // if left edge is out, we will stop at a second node - if (quad->isEdgeOut[3]) stop++; - - // for each node of the up edge find nearest node - // in the first row of the regular grid and link them - for (i = nbup - 1; i > stop; i--) { - const SMDS_MeshNode *a, *b, *c, *d; - a = uv_e2[i].node; - b = uv_e2[i - 1].node; - gp_Pnt pb (b->X(), b->Y(), b->Z()); - - // find node c in the grid, which will be linked with node b - int near = g; - if (i == stop + 1) { // left bound reached, link with the leftmost node - c = quad->uv_grid[nbhoriz*(nbvertic - 2) + ilow].node; - near = ilow; - } else { - // find node c in the grid, nearest to the b - double mind = RealLast(); - for (int k = g; k >= ilow; k--) { - const SMDS_MeshNode *nk; - if (k > iup) - nk = uv_e1[nbright - 2].node; - else - nk = quad->uv_grid[nbhoriz*(nbvertic - 2) + k].node; - gp_Pnt pnk (nk->X(), nk->Y(), nk->Z()); - double dist = pb.Distance(pnk); - if (dist < mind - eps) { - c = nk; - near = k; - mind = dist; - } else { - break; - } - } - } - - if (near == g) { // make triangle - SMDS_MeshFace* face = meshDS->AddFace(a, b, c); - meshDS->SetMeshElementOnShape(face, F); - } else { // make quadrangle - if (near + 1 > iup) - d = uv_e1[nbright - 2].node; - else - d = quad->uv_grid[nbhoriz*(nbvertic - 2) + near + 1].node; - SMDS_MeshFace* face = meshDS->AddFace(a, b, c, d); - meshDS->SetMeshElementOnShape(face, F); - - if (near + 1 < g) { // if d not is at g - make additional triangles - for (int k = near + 1; k < g; k++) { - c = quad->uv_grid[nbhoriz*(nbvertic - 2) + k].node; - if (k + 1 > iup) - d = uv_e1[nbright - 2].node; - else - d = quad->uv_grid[nbhoriz*(nbvertic - 2) + k + 1].node; - SMDS_MeshFace* face = meshDS->AddFace(a, c, d); - meshDS->SetMeshElementOnShape(face, F); - } - } - g = near; - } - } - } - } - - // right or left boundary quadrangles - if (quad->isEdgeOut[1]) { -// MESSAGE("right edge is out"); - int g = 0; // last processed node in the grid - int stop = nbright - 1; - if (quad->isEdgeOut[2]) stop--; - for (i = 0; i < stop; i++) { - const SMDS_MeshNode *a, *b, *c, *d; - a = uv_e1[i].node; - b = uv_e1[i + 1].node; - gp_Pnt pb (b->X(), b->Y(), b->Z()); - - // find node c in the grid, nearest to the b - int near = g; - if (i == stop - 1) { // up bondary reached - c = quad->uv_grid[nbhoriz*(jup + 1) - 2].node; - near = jup; - } else { - double mind = RealLast(); - for (int k = g; k <= jup; k++) { - const SMDS_MeshNode *nk; - if (k < jlow) - nk = uv_e0[nbdown - 2].node; - else - nk = quad->uv_grid[nbhoriz*(k + 1) - 2].node; - gp_Pnt pnk (nk->X(), nk->Y(), nk->Z()); - double dist = pb.Distance(pnk); - if (dist < mind - eps) { - c = nk; - near = k; - mind = dist; - } else { - break; - } - } - } - - if (near == g) { // make triangle - SMDS_MeshFace* face = meshDS->AddFace(a, b, c); - meshDS->SetMeshElementOnShape(face, F); - } else { // make quadrangle - if (near - 1 < jlow) - d = uv_e0[nbdown - 2].node; - else - d = quad->uv_grid[nbhoriz*near - 2].node; - SMDS_MeshFace* face = meshDS->AddFace(a, b, c, d); - meshDS->SetMeshElementOnShape(face, F); - - if (near - 1 > g) { // if d not is at g - make additional triangles - for (int k = near - 1; k > g; k--) { - c = quad->uv_grid[nbhoriz*(k + 1) - 2].node; - if (k - 1 < jlow) - d = uv_e0[nbdown - 2].node; - else - d = quad->uv_grid[nbhoriz*k - 2].node; - SMDS_MeshFace* face = meshDS->AddFace(a, c, d); - meshDS->SetMeshElementOnShape(face, F); - } - } - g = near; - } - } - } else { - if (quad->isEdgeOut[3]) { -// MESSAGE("left edge is out"); - int g = nbvertic - 1; // last processed node in the grid - int stop = 0; - if (quad->isEdgeOut[0]) stop++; - for (i = nbleft - 1; i > stop; i--) { - const SMDS_MeshNode *a, *b, *c, *d; - a = uv_e3[i].node; - b = uv_e3[i - 1].node; - gp_Pnt pb (b->X(), b->Y(), b->Z()); - - // find node c in the grid, nearest to the b - int near = g; - if (i == stop + 1) { // down bondary reached - c = quad->uv_grid[nbhoriz*jlow + 1].node; - near = jlow; - } else { - double mind = RealLast(); - for (int k = g; k >= jlow; k--) { - const SMDS_MeshNode *nk; - if (k > jup) - nk = uv_e2[1].node; - else - nk = quad->uv_grid[nbhoriz*k + 1].node; - gp_Pnt pnk (nk->X(), nk->Y(), nk->Z()); - double dist = pb.Distance(pnk); - if (dist < mind - eps) { - c = nk; - near = k; - mind = dist; - } else { - break; - } - } - } - - if (near == g) { // make triangle - SMDS_MeshFace* face = meshDS->AddFace(a, b, c); - meshDS->SetMeshElementOnShape(face, F); - } else { // make quadrangle - if (near + 1 > jup) - d = uv_e2[1].node; - else - d = quad->uv_grid[nbhoriz*(near + 1) + 1].node; - SMDS_MeshFace* face = meshDS->AddFace(a, b, c, d); - meshDS->SetMeshElementOnShape(face, F); - - if (near + 1 < g) { // if d not is at g - make additional triangles - for (int k = near + 1; k < g; k++) { - c = quad->uv_grid[nbhoriz*k + 1].node; - if (k + 1 > jup) - d = uv_e2[1].node; - else - d = quad->uv_grid[nbhoriz*(k + 1) + 1].node; - SMDS_MeshFace* face = meshDS->AddFace(a, c, d); - meshDS->SetMeshElementOnShape(face, F); - } - } - g = near; - } - } - } - } - - QuadDelete(quad); - bool isOk = true; - return isOk; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -FaceQuadStruct *StdMeshers_Quadrangle_2D::CheckAnd2Dcompute - (SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) throw(SALOME_Exception) -{ - Unexpect aCatch(SalomeException); -// MESSAGE("StdMeshers_Quadrangle_2D::CheckAnd2Dcompute"); - - SMESH_subMesh *theSubMesh = aMesh.GetSubMesh(aShape); - - // const TopoDS_Face& FF = TopoDS::Face(aShape); - // bool faceIsForward = (FF.Orientation() == TopAbs_FORWARD); - // TopoDS_Face F = TopoDS::Face(FF.Oriented(TopAbs_FORWARD)); - const TopoDS_Face & F = TopoDS::Face(aShape); - bool faceIsForward = (F.Orientation() == TopAbs_FORWARD); - - // verify 1 wire only, with 4 edges - - if (NumberOfWires(F) != 1) - { - MESSAGE("only 1 wire by face (quadrangles)"); - return 0; - //throw SALOME_Exception(LOCALIZED("only 1 wire by face (quadrangles)")); - } - // const TopoDS_Wire WW = BRepTools::OuterWire(F); - // TopoDS_Wire W = TopoDS::Wire(WW.Oriented(TopAbs_FORWARD)); - const TopoDS_Wire& W = BRepTools::OuterWire(F); - BRepTools_WireExplorer wexp (W, F); - - FaceQuadStruct *quad = new FaceQuadStruct; - for (int i = 0; i < 4; i++) - quad->uv_edges[i] = 0; - quad->uv_grid = 0; - - int nbEdges = 0; - for (wexp.Init(W, F); wexp.More(); wexp.Next()) - { - // const TopoDS_Edge& EE = wexp.Current(); - // TopoDS_Edge E = TopoDS::Edge(EE.Oriented(TopAbs_FORWARD)); - const TopoDS_Edge& E = wexp.Current(); - int nb = aMesh.GetSubMesh(E)->GetSubMeshDS()->NbNodes(); - if (nbEdges < 4) - { - quad->edge[nbEdges] = E; - quad->nbPts[nbEdges] = nb + 2; // internal points + 2 extrema - } - nbEdges++; - } - - if (nbEdges != 4) - { - MESSAGE("face must have 4 edges /quadrangles"); - QuadDelete(quad); - return 0; - //throw SALOME_Exception(LOCALIZED("face must have 4 edges /quadrangles")); - } - -// if (quad->nbPts[0] != quad->nbPts[2]) { -// MESSAGE("different point number-opposed edge"); -// QuadDelete(quad); -// return 0; -// //throw SALOME_Exception(LOCALIZED("different point number-opposed edge")); -// } -// -// if (quad->nbPts[1] != quad->nbPts[3]) { -// MESSAGE("different point number-opposed edge"); -// QuadDelete(quad); -// return 0; -// //throw SALOME_Exception(LOCALIZED("different point number-opposed edge")); -// } - - // set normalized grid on unit square in parametric domain - - SetNormalizedGrid(aMesh, F, quad); - - return quad; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void StdMeshers_Quadrangle_2D::QuadDelete (FaceQuadStruct * quad) -{ - //MESSAGE("StdMeshers_Quadrangle_2D::QuadDelete"); - if (quad) - { - for (int i = 0; i < 4; i++) - { - if (quad->uv_edges[i]) - delete [] quad->uv_edges[i]; - quad->edge[i].Nullify(); - } - if (quad->uv_grid) - delete [] quad->uv_grid; - delete quad; - } -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void StdMeshers_Quadrangle_2D::SetNormalizedGrid (SMESH_Mesh & aMesh, - const TopoDS_Shape& aShape, - FaceQuadStruct* quad) throw (SALOME_Exception) -{ - Unexpect aCatch(SalomeException); - // Algorithme décrit dans "Génération automatique de maillages" - // P.L. GEORGE, MASSON, § 6.4.1 p. 84-85 - // traitement dans le domaine paramétrique 2d u,v - // transport - projection sur le carré unité - -// MESSAGE("StdMeshers_Quadrangle_2D::SetNormalizedGrid"); - const TopoDS_Face& F = TopoDS::Face(aShape); - - // 1 --- find orientation of the 4 edges, by test on extrema - - // max min 0 x1 1 - // |<----north-2-------^ a3 -------------> a2 - // | | ^1 1^ - // west-3 east-1 =right | | - // | | ==> | | - // y0 | | y1 | | - // | | |0 0| - // v----south-0--------> a0 -------------> a1 - // min max 0 x0 1 - // =down - // - - Handle(Geom2d_Curve) c2d[4]; - gp_Pnt2d pf[4]; - gp_Pnt2d pl[4]; - for (int i = 0; i < 4; i++) - { - c2d[i] = BRep_Tool::CurveOnSurface(quad->edge[i], F, - quad->first[i], quad->last[i]); - pf[i] = c2d[i]->Value(quad->first[i]); - pl[i] = c2d[i]->Value(quad->last[i]); - quad->isEdgeForward[i] = false; - } - - double eps2d = 1.e-3; // *** utiliser plutot TopExp::CommonVertex, puis - // distances si piece fausse -// int i = 0; - if ((pf[1].Distance(pl[0]) < eps2d) || (pl[1].Distance(pl[0]) < eps2d)) - { - quad->isEdgeForward[0] = true; - } else { - double tmp = quad->first[0]; - quad->first[0] = quad->last[0]; - quad->last[0] = tmp; - pf[0] = c2d[0]->Value(quad->first[0]); - pl[0] = c2d[0]->Value(quad->last[0]); - } - - for (int i = 1; i < 4; i++) - { - quad->isEdgeForward[i] = (pf[i].Distance(pl[i - 1]) < eps2d); - if (!quad->isEdgeForward[i]) - { - double tmp = quad->first[i]; - quad->first[i] = quad->last[i]; - quad->last[i] = tmp; - pf[i] = c2d[i]->Value(quad->first[i]); - pl[i] = c2d[i]->Value(quad->last[i]); - //SCRUTE(pf[i].Distance(pl[i-1])); - ASSERT(pf[i].Distance(pl[i - 1]) < eps2d); - } - } - //SCRUTE(pf[0].Distance(pl[3])); - ASSERT(pf[0].Distance(pl[3]) < eps2d); - -// for (int i=0; i<4; i++) -// { -// SCRUTE(quad->isEdgeForward[i]); -// MESSAGE(" -first "<uv_edges[i] = LoadEdgePoints(aMesh, F, quad->edge[i], - quad->first[i], quad->last[i]); - if (!quad->uv_edges[i]) loadOk = false; - // quad->isEdgeForward[i]); - } - - for (int i = 2; i < 4; i++) - { - quad->uv_edges[i] = LoadEdgePoints(aMesh, F, quad->edge[i], - quad->last[i], quad->first[i]); - if (!quad->uv_edges[i]) loadOk = false; - // !quad->isEdgeForward[i]); - } - - if (!loadOk) - { -// MESSAGE("StdMeshers_Quadrangle_2D::SetNormalizedGrid - LoadEdgePoints failed"); - QuadDelete( quad ); - quad = 0; - return; - } - // 3 --- 2D normalized values on unit square [0..1][0..1] - -// int nbdown = quad->nbPts[0]; -// int nbright = quad->nbPts[1]; - int nbhoriz = Min(quad->nbPts[0], quad->nbPts[2]); - int nbvertic = Min(quad->nbPts[1], quad->nbPts[3]); -// MESSAGE("nbhoriz, nbvertic = " << nbhoriz << nbvertic); - - quad->isEdgeOut[0] = (quad->nbPts[0] > quad->nbPts[2]); - quad->isEdgeOut[1] = (quad->nbPts[1] > quad->nbPts[3]); - quad->isEdgeOut[2] = (quad->nbPts[2] > quad->nbPts[0]); - quad->isEdgeOut[3] = (quad->nbPts[3] > quad->nbPts[1]); - - quad->uv_grid = new UVPtStruct[nbvertic * nbhoriz]; - - UVPtStruct *uv_grid = quad->uv_grid; - UVPtStruct *uv_e0 = quad->uv_edges[0]; - UVPtStruct *uv_e1 = quad->uv_edges[1]; - UVPtStruct *uv_e2 = quad->uv_edges[2]; - UVPtStruct *uv_e3 = quad->uv_edges[3]; - - // nodes Id on "in" edges - if (! quad->isEdgeOut[0]) { - int j = 0; - for (int i = 0; i < nbhoriz; i++) { // down - int ij = j * nbhoriz + i; - uv_grid[ij].node = uv_e0[i].node; - } - } - if (! quad->isEdgeOut[1]) { - int i = nbhoriz - 1; - for (int j = 0; j < nbvertic; j++) { // right - int ij = j * nbhoriz + i; - uv_grid[ij].node = uv_e1[j].node; - } - } - if (! quad->isEdgeOut[2]) { - int j = nbvertic - 1; - for (int i = 0; i < nbhoriz; i++) { // up - int ij = j * nbhoriz + i; - uv_grid[ij].node = uv_e2[i].node; - } - } - if (! quad->isEdgeOut[3]) { - int i = 0; - for (int j = 0; j < nbvertic; j++) { // left - int ij = j * nbhoriz + i; - uv_grid[ij].node = uv_e3[j].node; - } - } - - // falsificate "out" edges - if (quad->isEdgeOut[0]) // down - uv_e0 = MakeEdgePoints - (aMesh, F, quad->edge[0], quad->first[0], quad->last[0], nbhoriz - 1); - else if (quad->isEdgeOut[2]) // up - uv_e2 = MakeEdgePoints - (aMesh, F, quad->edge[2], quad->last[2], quad->first[2], nbhoriz - 1); - - if (quad->isEdgeOut[1]) // right - uv_e1 = MakeEdgePoints - (aMesh, F, quad->edge[1], quad->first[1], quad->last[1], nbvertic - 1); - else if (quad->isEdgeOut[3]) // left - uv_e3 = MakeEdgePoints - (aMesh, F, quad->edge[3], quad->last[3], quad->first[3], nbvertic - 1); - - // normalized 2d values on grid - for (int i = 0; i < nbhoriz; i++) - { - for (int j = 0; j < nbvertic; j++) - { - int ij = j * nbhoriz + i; - // --- droite i cste : x = x0 + y(x1-x0) - double x0 = uv_e0[i].normParam; // bas - sud - double x1 = uv_e2[i].normParam; // haut - nord - // --- droite j cste : y = y0 + x(y1-y0) - double y0 = uv_e3[j].normParam; // gauche-ouest - double y1 = uv_e1[j].normParam; // droite - est - // --- intersection : x=x0+(y0+x(y1-y0))(x1-x0) - double x = (x0 + y0 * (x1 - x0)) / (1 - (y1 - y0) * (x1 - x0)); - double y = y0 + x * (y1 - y0); - uv_grid[ij].x = x; - uv_grid[ij].y = y; - //MESSAGE("-xy-01 "<Value(param_0); - gp_Pnt2d p1 = c2d[1]->Value(param_1); - gp_Pnt2d p2 = c2d[2]->Value(param_2); - gp_Pnt2d p3 = c2d[3]->Value(param_3); - - double u = (1 - y) * p0.X() + x * p1.X() + y * p2.X() + (1 - x) * p3.X(); - double v = (1 - y) * p0.Y() + x * p1.Y() + y * p2.Y() + (1 - x) * p3.Y(); - - u -= (1 - x) * (1 - y) * a0.X() + x * (1 - y) * a1.X() + - x * y * a2.X() + (1 - x) * y * a3.X(); - v -= (1 - x) * (1 - y) * a0.Y() + x * (1 - y) * a1.Y() + - x * y * a2.Y() + (1 - x) * y * a3.Y(); - - uv_grid[ij].u = u; - uv_grid[ij].v = v; - - //MESSAGE("-uv- "<GetSubMeshDS()->GetNodes(); - if (!lid->more()) - { - MESSAGE ( "NO NODE BUILT ON VERTEX" ); - return 0; - } - const SMDS_MeshNode* idFirst = lid->next(); - - ASSERT(!VLast.IsNull()); - lid = aMesh.GetSubMesh(VLast)->GetSubMeshDS()->GetNodes(); - if (!lid->more()) - { - MESSAGE ( "NO NODE BUILT ON VERTEX" ); - return 0; - } - const SMDS_MeshNode* idLast = lid->next(); - - // --- edge internal IDNodes (relies on good order storage, not checked) - - map params; - SMDS_NodeIteratorPtr ite = aMesh.GetSubMesh(E)->GetSubMeshDS()->GetNodes(); - - while(ite->more()) - { - const SMDS_MeshNode* node = ite->next(); - const SMDS_EdgePosition* epos = - static_cast(node->GetPosition().get()); - double param = epos->GetUParameter(); - params[param] = node; - } - - int nbPoints = aMesh.GetSubMesh(E)->GetSubMeshDS()->NbNodes(); - if (nbPoints != params.size()) - { - MESSAGE( "BAD NODE ON EDGE POSITIONS" ); - return 0; - } - UVPtStruct* uvslf = new UVPtStruct[nbPoints + 2]; - - double f, l; - Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, f, l); - - bool isForward = (((l - f) * (last - first)) > 0); - double paramin = 0; - double paramax = 0; - if (isForward) - { - paramin = f; - paramax = l; - gp_Pnt2d p = C2d->Value(f); // first point = Vertex Forward - uvslf[0].x = p.X(); - uvslf[0].y = p.Y(); - uvslf[0].param = f; - uvslf[0].node = idFirst; - //MESSAGE("__ f "<::iterator itp = params.begin(); - for (int i = 1; i <= nbPoints; i++) // nbPoints internal - { - double param = (*itp).first; - gp_Pnt2d p = C2d->Value(param); - uvslf[i].x = p.X(); - uvslf[i].y = p.Y(); - uvslf[i].param = param; - uvslf[i].node = (*itp).second; - //MESSAGE("__ "<Value(l); // last point = Vertex Reversed - uvslf[nbPoints + 1].x = p.X(); - uvslf[nbPoints + 1].y = p.Y(); - uvslf[nbPoints + 1].param = l; - uvslf[nbPoints + 1].node = idLast; - //MESSAGE("__ l "<Value(l); // first point = Vertex Reversed - uvslf[0].x = p.X(); - uvslf[0].y = p.Y(); - uvslf[0].param = l; - uvslf[0].node = idLast; - //MESSAGE("__ l "<::reverse_iterator itp = params.rbegin(); - - for (int j = nbPoints; j >= 1; j--) // nbPoints internal - { - double param = (*itp).first; - int i = nbPoints + 1 - j; - gp_Pnt2d p = C2d->Value(param); - uvslf[i].x = p.X(); - uvslf[i].y = p.Y(); - uvslf[i].param = param; - uvslf[i].node = (*itp).second; - //MESSAGE("__ "<Value(f); // last point = Vertex Forward - uvslf[nbPoints + 1].x = p.X(); - uvslf[nbPoints + 1].y = p.Y(); - uvslf[nbPoints + 1].param = f; - uvslf[nbPoints + 1].node = idFirst; - //MESSAGE("__ f "< params; - - // --- edge internal points - double fi, li; - Handle(Geom_Curve) Curve = BRep_Tool::Curve(E, fi, li); - if (!Curve.IsNull()) { - try { - GeomAdaptor_Curve C3d (Curve); - double length = EdgeLength(E); - double eltSize = length / nb_segm; - GCPnts_UniformAbscissa Discret (C3d, eltSize, fi, li); - if (!Discret.IsDone()) return false; - int NbPoints = Discret.NbPoints(); - for (int i = 1; i <= NbPoints; i++) { - double param = Discret.Parameter(i); - params.push_back(param); - } - } - catch (Standard_Failure) { - return 0; - } - } - else - { - // Edge is a degenerated Edge - BRep_Tool::Range(E, fi, li); - double du = (li - fi) / nb_segm; - for (int i = 1; i <= nb_segm + 1; i++) - { - double param = fi + (i - 1) * du; - params.push_back(param); - } - } - - double f, l; - Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, f, l); - ASSERT(f != l); - - bool isForward = (((l - f) * (last - first)) > 0); - if (isForward) { - list::iterator itU = params.begin(); - for (int i = 0; i <= nb_segm; i++) // nbPoints internal - { - double param = *itU; - gp_Pnt2d p = C2d->Value(param); - uvslf[i].x = p.X(); - uvslf[i].y = p.Y(); - uvslf[i].param = param; - uvslf[i].normParam = (param - f) / (l - f); - itU++; - } - } else { - list::reverse_iterator itU = params.rbegin(); - for (int j = nb_segm; j >= 0; j--) // nbPoints internal - { - double param = *itU; - int i = nb_segm - j; - gp_Pnt2d p = C2d->Value(param); - uvslf[i].x = p.X(); - uvslf[i].y = p.Y(); - uvslf[i].param = param; - uvslf[i].normParam = (param - l) / (f - l); - itU++; - } - } - - return uvslf; -} - - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & StdMeshers_Quadrangle_2D::SaveTo(ostream & save) -{ - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & StdMeshers_Quadrangle_2D::LoadFrom(istream & load) -{ - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator <<(ostream & save, StdMeshers_Quadrangle_2D & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >>(istream & load, StdMeshers_Quadrangle_2D & hyp) -{ - return hyp.LoadFrom( load ); -} diff --git a/src/StdMeshers/StdMeshers_Quadrangle_2D.hxx b/src/StdMeshers/StdMeshers_Quadrangle_2D.hxx deleted file mode 100644 index b54edea3f..000000000 --- a/src/StdMeshers/StdMeshers_Quadrangle_2D.hxx +++ /dev/null @@ -1,104 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Quadrangle_2D.hxx -// Moved here from SMESH_Quadrangle_2D.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_QUADRANGLE_2D_HXX_ -#define _SMESH_QUADRANGLE_2D_HXX_ - -#include "SMESH_2D_Algo.hxx" -#include "SMESH_Mesh.hxx" -#include "Utils_SALOME_Exception.hxx" - -class SMDS_MeshNode; - -typedef struct uvPtStruct -{ - double param; - double normParam; - double u; // original 2d parameter - double v; - double x; // 2d parameter, normalized [0,1] - double y; - const SMDS_MeshNode * node; -} UVPtStruct; - -typedef struct faceQuadStruct -{ - int nbPts[4]; - TopoDS_Edge edge[4]; - 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; - -class StdMeshers_Quadrangle_2D: - public SMESH_2D_Algo -{ -public: - StdMeshers_Quadrangle_2D(int hypId, int studyId, SMESH_Gen* gen); - virtual ~StdMeshers_Quadrangle_2D(); - - virtual bool CheckHypothesis(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - SMESH_Hypothesis::Hypothesis_Status& aStatus); - - virtual bool Compute(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape) - throw (SALOME_Exception); - - FaceQuadStruct* CheckAnd2Dcompute(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape) - throw (SALOME_Exception); - - static void QuadDelete(FaceQuadStruct* quad); - - ostream & SaveTo(ostream & save); - istream & LoadFrom(istream & load); - friend ostream & operator << (ostream & save, StdMeshers_Quadrangle_2D & hyp); - friend istream & operator >> (istream & load, StdMeshers_Quadrangle_2D & hyp); - -protected: - - void SetNormalizedGrid(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - FaceQuadStruct* quad) - throw (SALOME_Exception); - - UVPtStruct* LoadEdgePoints(SMESH_Mesh& aMesh, - const TopoDS_Face& F, const TopoDS_Edge& E, - double first, double last); - - UVPtStruct* MakeEdgePoints(SMESH_Mesh& aMesh, - const TopoDS_Face& F, const TopoDS_Edge& E, - double first, double last, int nb_segm); -}; - -#endif diff --git a/src/StdMeshers/StdMeshers_Regular_1D.cxx b/src/StdMeshers/StdMeshers_Regular_1D.cxx deleted file mode 100644 index be3e69f1d..000000000 --- a/src/StdMeshers/StdMeshers_Regular_1D.cxx +++ /dev/null @@ -1,885 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Regular_1D.cxx -// Moved here from SMESH_Regular_1D.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; - -#include "StdMeshers_Regular_1D.hxx" -#include "SMESH_Gen.hxx" -#include "SMESH_Mesh.hxx" - -#include "StdMeshers_LocalLength.hxx" -#include "StdMeshers_NumberOfSegments.hxx" -#include "StdMeshers_Arithmetic1D.hxx" -#include "StdMeshers_StartEndLength.hxx" -#include "StdMeshers_Deflection1D.hxx" - -#include "SMDS_MeshElement.hxx" -#include "SMDS_MeshNode.hxx" -#include "SMDS_EdgePosition.hxx" -#include "SMESH_subMesh.hxx" - -#include "Utils_SALOME_Exception.hxx" -#include "utilities.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_Regular_1D::StdMeshers_Regular_1D(int hypId, int studyId, - SMESH_Gen * gen):SMESH_1D_Algo(hypId, studyId, gen) -{ - MESSAGE("StdMeshers_Regular_1D::StdMeshers_Regular_1D"); - _name = "Regular_1D"; - _shapeType = (1 << TopAbs_EDGE); - - _compatibleHypothesis.push_back("LocalLength"); - _compatibleHypothesis.push_back("NumberOfSegments"); - _compatibleHypothesis.push_back("StartEndLength"); - _compatibleHypothesis.push_back("Deflection1D"); - _compatibleHypothesis.push_back("Arithmetic1D"); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_Regular_1D::~StdMeshers_Regular_1D() -{ -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool StdMeshers_Regular_1D::CheckHypothesis - (SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - SMESH_Hypothesis::Hypothesis_Status& aStatus) -{ - _hypType = NONE; - - const list &hyps = GetUsedHypothesis(aMesh, aShape); - if (hyps.size() == 0) - { - aStatus = SMESH_Hypothesis::HYP_MISSING; - return false; // can't work without a hypothesis - } - - // use only the first hypothesis - const SMESHDS_Hypothesis *theHyp = hyps.front(); - - string hypName = theHyp->GetName(); - - if (hypName == "LocalLength") - { - const StdMeshers_LocalLength * hyp = - dynamic_cast (theHyp); - ASSERT(hyp); - _value[ BEG_LENGTH_IND ] = _value[ END_LENGTH_IND ] = hyp->GetLength(); - ASSERT( _value[ BEG_LENGTH_IND ] > 0 ); - _hypType = LOCAL_LENGTH; - aStatus = SMESH_Hypothesis::HYP_OK; - } - - else if (hypName == "NumberOfSegments") - { - const StdMeshers_NumberOfSegments * hyp = - dynamic_cast (theHyp); - ASSERT(hyp); - _ivalue[ NB_SEGMENTS_IND ] = hyp->GetNumberOfSegments(); - ASSERT( _ivalue[ NB_SEGMENTS_IND ] > 0 ); - _ivalue[ DISTR_TYPE_IND ] = (int) hyp->GetDistrType(); - switch (_ivalue[ DISTR_TYPE_IND ]) - { - case StdMeshers_NumberOfSegments::DT_Scale: - _value[ SCALE_FACTOR_IND ] = hyp->GetScaleFactor(); - break; - case StdMeshers_NumberOfSegments::DT_TabFunc: - _vvalue[ TAB_FUNC_IND ] = hyp->GetTableFunction(); - break; - case StdMeshers_NumberOfSegments::DT_ExprFunc: - _svalue[ EXPR_FUNC_IND ] = hyp->GetExpressionFunction(); - break; - case StdMeshers_NumberOfSegments::DT_Regular: - break; - default: - ASSERT(0); - break; - } - if (_ivalue[ DISTR_TYPE_IND ] == StdMeshers_NumberOfSegments::DT_TabFunc || - _ivalue[ DISTR_TYPE_IND ] == StdMeshers_NumberOfSegments::DT_ExprFunc) - _ivalue[ EXP_MODE_IND ] = (int) hyp->IsExponentMode(); - _hypType = NB_SEGMENTS; - aStatus = SMESH_Hypothesis::HYP_OK; - } - - else if (hypName == "Arithmetic1D") - { - const StdMeshers_Arithmetic1D * hyp = - dynamic_cast (theHyp); - ASSERT(hyp); - _value[ BEG_LENGTH_IND ] = hyp->GetLength( true ); - _value[ END_LENGTH_IND ] = hyp->GetLength( false ); - ASSERT( _value[ BEG_LENGTH_IND ] > 0 && _value[ END_LENGTH_IND ] > 0 ); - _hypType = ARITHMETIC_1D; - aStatus = SMESH_Hypothesis::HYP_OK; - } - - else if (hypName == "StartEndLength") - { - const StdMeshers_StartEndLength * hyp = - dynamic_cast (theHyp); - ASSERT(hyp); - _value[ BEG_LENGTH_IND ] = hyp->GetLength( true ); - _value[ END_LENGTH_IND ] = hyp->GetLength( false ); - ASSERT( _value[ BEG_LENGTH_IND ] > 0 && _value[ END_LENGTH_IND ] > 0 ); - _hypType = BEG_END_LENGTH; - aStatus = SMESH_Hypothesis::HYP_OK; - } - - else if (hypName == "Deflection1D") - { - const StdMeshers_Deflection1D * hyp = - dynamic_cast (theHyp); - ASSERT(hyp); - _value[ DEFLECTION_IND ] = hyp->GetDeflection(); - ASSERT( _value[ DEFLECTION_IND ] > 0 ); - _hypType = DEFLECTION; - aStatus = SMESH_Hypothesis::HYP_OK; - } - else - aStatus = SMESH_Hypothesis::HYP_INCOMPATIBLE; - - return ( _hypType != NONE ); -} - -//======================================================================= -//function : compensateError -//purpose : adjust theParams so that the last segment length == an -//======================================================================= - -static void compensateError(double a1, double an, - double U1, double Un, - double length, - GeomAdaptor_Curve& C3d, - list & theParams) -{ - int i, nPar = theParams.size(); - if ( a1 + an < length && nPar > 1 ) - { - list::reverse_iterator itU = theParams.rbegin(); - double Ul = *itU++; - // dist from the last point to the edge end , it should be equal - double Ln = GCPnts_AbscissaPoint::Length( C3d, Ul, Un ); - double dLn = an - Ln; // error of - if ( Abs( dLn ) <= Precision::Confusion() ) - return; - double dU = Abs( Ul - *itU ); // parametric length of the last but one segment - double dUn = dLn * Abs( Un - U1 ) / length; // parametric error of - if ( dUn < 0.5 * dU ) { // last segment is a bit shorter than it should - dUn = -dUn; // move the last parameter to the edge beginning - } - else { // last segment is much shorter than it should -> remove the last param and - theParams.pop_back(); nPar--; // move the rest points toward the edge end - Ln = GCPnts_AbscissaPoint::Length( C3d, theParams.back(), Un ); - dUn = ( an - Ln ) * Abs( Un - U1 ) / length; - if ( dUn < 0.5 * dU ) - dUn = -dUn; - } - if ( U1 > Un ) - dUn = -dUn; - double q = dUn / ( nPar - 1 ); - for ( itU = theParams.rbegin(), i = 1; i < nPar; itU++, i++ ) { - (*itU) += dUn; - dUn -= q; - } - } -} - -/*! - * \brief This class provides interface for a density function - */ -class Function -{ -public: - Function(bool expMode) : _expMode(expMode) {} - double operator() (double t) const; - virtual bool IsReady() const = 0; -protected: - virtual double compute(double t) const = 0; -private: - bool _expMode; -}; - -/*! - * \brief This class provides computation of density function given by a table - */ -class TabFunction: public Function -{ -public: - TabFunction(const vector& table, bool expMode); - virtual bool IsReady() const; -protected: - virtual double compute(double t) const; -private: - const vector& _table; -}; - -/*! - * \brief This class provides computation of density function given by an expression - */ -class ExprFunction: public Function -{ -public: - ExprFunction(const char* expr, bool expMode); - virtual bool IsReady() const; -protected: - virtual double compute(double t) const; -private: - Handle(Expr_GeneralExpression) _expression; - Expr_Array1OfNamedUnknown _var; - mutable TColStd_Array1OfReal _val; -}; - -double Function::operator() (double t) const -{ - double res = compute(t); - if (_expMode) - res = pow(10, res); - return res; -} - -TabFunction::TabFunction(const vector& table, bool expMode) - : Function(expMode), - _table(table) -{ -} - -bool TabFunction::IsReady() const -{ - return true; -} - -double TabFunction::compute (double t) const -{ - //find place of in table - int i; - for (i=0; i < _table.size()/2; i++) - if (_table[i*2] > t) - break; - if (i >= _table.size()/2) - i = _table.size()/2 - 1; - - if (i == 0) - return _table[1]; - - // interpolate function value on found interval - // (t - x[i-1]) / (x[i] - x[i-1]) = (y - f[i-1]) / (f[i] - f[i-1]) - // => y = f[i-1] + (f[i] - f[i-1]) * (t - x[i-1]) / (x[i] - x[i-1]) - double x1 = _table[(i-1)*2]; - double x2 = _table[i*2]; - double y1 = _table[(i-1)*2+1]; - double y2 = _table[i*2+1]; - if (x2 - x1 < Precision::Confusion()) - throw SALOME_Exception("TabFunction::compute : confused points"); - return y1 + (y2 - y1) * ((t - x1) / (x2 - x1)); -} - -ExprFunction::ExprFunction(const char* expr, bool expMode) - : Function(expMode), - _var(1,1), - _val(1,1) -{ - Handle( ExprIntrp_GenExp ) gen = ExprIntrp_GenExp::Create(); - gen->Process(TCollection_AsciiString((char*)expr)); - if (gen->IsDone()) - { - _expression = gen->Expression(); - _var(1) = new Expr_NamedUnknown("t"); - } -} - -bool ExprFunction::IsReady() const -{ - return !_expression.IsNull(); -} - -double ExprFunction::compute (double t) const -{ - ASSERT(!_expression.IsNull()); - _val(1) = t; - return _expression->Evaluate(_var, _val); -} - -//================================================================================ -/*! - * \brief Compute next abscissa when two previous ones are given - * \param sm2 - before previous abscissa - * \param sm1 - previous abscissa - * \param func - function of density - * \param reverse - the direction of next abscissa, increase (0) or decrease (1) - * \retval double - the new abscissa - * - * The abscissa s is given by the formulae - * - * ....|--------|----------------|..... - * sm2 sm1 s - * - * func(sm2) / func(sm1) = (sm1-sm2) / (s-sm1) - * => (s-sm1) * func(sm2) = (sm1-sm2) * func(sm1) - * => s = sm1 + (sm1-sm2) * func(sm1) / func(sm2) - */ -//================================================================================ - -static double nextAbscissa(double sm2, double sm1, const Function& func, int reverse) -{ - if (reverse) - { - sm1 = 1.0 - sm1; - sm2 = 1.0 - sm2; - } - return sm1 + (sm1-sm2) * func(sm1) / func(sm2); -} - -//================================================================================ -/*! - * \brief Compute distribution of points on a curve following the law of a function - * \param C3d - the curve to discretize - * \param first - the first parameter on the curve - * \param last - the last parameter on the curve - * \param theReverse - flag indicating that the curve must be reversed - * \param nbSeg - number of output segments - * \param func - the function f(t) - * \param theParams - output points - * \retval bool - true if success - */ -//================================================================================ - -static bool computeParamByFunc(Adaptor3d_Curve& C3d, double first, double last, - double length, bool theReverse, - int nbSeg, const Function& func, - list& theParams) -{ - if (!func.IsReady()) - return false; - vector xxx[2]; - int nbPnt = 1 + nbSeg; - int rev, i; - for (rev=0; rev < 2; rev++) - { - // curv abscisses initialisation - vector x(nbPnt, 0.); - // the first abscissa is 0.0 - - // The aim of the algorithm is to find a second abscisse x[1] such as the last - // one x[nbSeg] is very close to 1.0 with the epsilon precision - - double x1_too_small = 0.0; - double x1_too_large = RealLast(); - double x1 = 1.0/nbSeg; - while (1) - { - x[1] = x1; - - // Check if the abscissa of the point 2 to N-1 - // are in the segment ... - - bool ok = true; - for (i=2; i <= nbSeg; i++) - { - x[i] = nextAbscissa(x[i-2], x[i-1], func, rev); - if (x[i] - 1.0 > Precision::Confusion()) - { - x[nbSeg] = x[i]; - ok = false; - break; - } - } - if (!ok) - { - // The segments are to large - // Decrease x1 ... - x1_too_large = x1; - x1 = (x1_too_small+x1_too_large)/2; - continue; - } - - // Look at the abscissa of the point N - // which is to be close to 1.0 - - // break condition --> algo converged !! - - if (1.0 - x[nbSeg] < Precision::Confusion()) - break; - - // not ok ... - - x1_too_small = x1; - - // Modify x1 value - - if (x1_too_large > 1e100) - x1 = 2*x1; - else - x1 = (x1_too_small+x1_too_large)/2; - } - xxx[rev] = x; - } - - // average - vector x(nbPnt, 0.); - for (i=0; i < nbPnt; i++) - x[i] = (xxx[0][i] + (1.0 - xxx[1][nbPnt-i])) / 2; - - // apply parameters in range [0,1] to the space of the curve - double prevU = first; - double sign = 1.; - if (theReverse) - { - prevU = last; - sign = -1.; - } - for (i = 1; i < nbSeg; i++) - { - double curvLength = length * (x[i] - x[i-1]) * sign; - GCPnts_AbscissaPoint Discret( C3d, curvLength, prevU ); - if ( !Discret.IsDone() ) - return false; - double U = Discret.Parameter(); - if ( U > first && U < last ) - theParams.push_back( U ); - else - return false; - prevU = U; - } - return false; -} - -//============================================================================= -/*! - * - */ -//============================================================================= -bool StdMeshers_Regular_1D::computeInternalParameters(const TopoDS_Edge& theEdge, - list & theParams, - const bool theReverse) const -{ - theParams.clear(); - - double f, l; - Handle(Geom_Curve) Curve = BRep_Tool::Curve(theEdge, f, l); - GeomAdaptor_Curve C3d(Curve); - - double length = EdgeLength(theEdge); - - switch( _hypType ) - { - case LOCAL_LENGTH: - case NB_SEGMENTS: { - - double eltSize = 1; - if ( _hypType == LOCAL_LENGTH ) - { - // Local Length hypothesis - double nbseg = ceil(length / _value[ BEG_LENGTH_IND ]); // integer sup - if (nbseg <= 0) - nbseg = 1; // degenerated edge - eltSize = length / nbseg; - } - else - { - // Number Of Segments hypothesis - switch (_ivalue[ DISTR_TYPE_IND ]) - { - case StdMeshers_NumberOfSegments::DT_Scale: - { - double scale = _value[ SCALE_FACTOR_IND ]; - if ( theReverse ) - scale = 1. / scale; - double alpha = pow( scale , 1.0 / (_ivalue[ NB_SEGMENTS_IND ] - 1)); - double factor = (l - f) / (1 - pow( alpha,_ivalue[ NB_SEGMENTS_IND ])); - - int i, NbPoints = 1 + _ivalue[ NB_SEGMENTS_IND ]; - for ( i = 2; i < NbPoints; i++ ) - { - double param = f + factor * (1 - pow(alpha, i - 1)); - theParams.push_back( param ); - } - return true; - } - break; - case StdMeshers_NumberOfSegments::DT_TabFunc: - { - TabFunction func(_vvalue[ TAB_FUNC_IND ], (bool)_ivalue[ EXP_MODE_IND ]); - return computeParamByFunc(C3d, f, l, length, theReverse, - _ivalue[ NB_SEGMENTS_IND ], func, - theParams); - } - break; - case StdMeshers_NumberOfSegments::DT_ExprFunc: - { - ExprFunction func(_svalue[ EXPR_FUNC_IND ].c_str(), (bool)_ivalue[ EXP_MODE_IND ]); - return computeParamByFunc(C3d, f, l, length, theReverse, - _ivalue[ NB_SEGMENTS_IND ], func, - theParams); - } - break; - case StdMeshers_NumberOfSegments::DT_Regular: - eltSize = length / _ivalue[ NB_SEGMENTS_IND ]; - break; - default: - return false; - } - } - - GCPnts_UniformAbscissa Discret(C3d, eltSize, f, l); - if ( !Discret.IsDone() ) - return false; - - int NbPoints = Discret.NbPoints(); - for ( int i = 2; i < NbPoints; i++ ) - { - double param = Discret.Parameter(i); - theParams.push_back( param ); - } - return true; - } - - case BEG_END_LENGTH: { - - // geometric progression: SUM(n) = ( a1 - an * q ) / ( 1 - q ) = length - - double a1 = _value[ BEG_LENGTH_IND ]; - double an = _value[ END_LENGTH_IND ]; - double q = ( length - a1 ) / ( length - an ); - - double U1 = theReverse ? l : f; - double Un = theReverse ? f : l; - double param = U1; - double eltSize = theReverse ? -a1 : a1; - while ( 1 ) { - // computes a point on a curve at the distance - // from the point of parameter . - GCPnts_AbscissaPoint Discret( C3d, eltSize, param ); - if ( !Discret.IsDone() ) break; - param = Discret.Parameter(); - if ( param > f && param < l ) - theParams.push_back( param ); - else - break; - eltSize *= q; - } - compensateError( a1, an, U1, Un, length, C3d, theParams ); - return true; - } - - case ARITHMETIC_1D: { - - // arithmetic progression: SUM(n) = ( an - a1 + q ) * ( a1 + an ) / ( 2 * q ) = length - - double a1 = _value[ BEG_LENGTH_IND ]; - double an = _value[ END_LENGTH_IND ]; - - double q = ( an - a1 ) / ( 2 *length/( a1 + an ) - 1 ); - int n = int( 1 + ( an - a1 ) / q ); - - double U1 = theReverse ? l : f; - double Un = theReverse ? f : l; - double param = U1; - double eltSize = a1; - if ( theReverse ) { - eltSize = -eltSize; - q = -q; - } - while ( n-- > 0 && eltSize * ( Un - U1 ) > 0 ) { - // computes a point on a curve at the distance - // from the point of parameter . - GCPnts_AbscissaPoint Discret( C3d, eltSize, param ); - if ( !Discret.IsDone() ) break; - param = Discret.Parameter(); - if ( param > f && param < l ) - theParams.push_back( param ); - else - break; - eltSize += q; - } - compensateError( a1, an, U1, Un, length, C3d, theParams ); - - return true; - } - - case DEFLECTION: { - - GCPnts_UniformDeflection Discret(C3d, _value[ DEFLECTION_IND ], true); - if ( !Discret.IsDone() ) - return false; - - int NbPoints = Discret.NbPoints(); - for ( int i = 2; i < NbPoints; i++ ) - { - double param = Discret.Parameter(i); - theParams.push_back( param ); - } - return true; - - } - - default:; - } - - return false; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) -{ - MESSAGE("StdMeshers_Regular_1D::Compute"); - - if ( _hypType == NONE ) - return false; - - SMESHDS_Mesh * meshDS = aMesh.GetMeshDS(); - aMesh.GetSubMesh(aShape); - - const TopoDS_Edge & EE = TopoDS::Edge(aShape); - TopoDS_Edge E = TopoDS::Edge(EE.Oriented(TopAbs_FORWARD)); - - double f, l; - Handle(Geom_Curve) Curve = BRep_Tool::Curve(E, f, l); - - TopoDS_Vertex VFirst, VLast; - TopExp::Vertices(E, VFirst, VLast); // Vfirst corresponds to f and Vlast to l - - ASSERT(!VFirst.IsNull()); - SMDS_NodeIteratorPtr lid= aMesh.GetSubMesh(VFirst)->GetSubMeshDS()->GetNodes(); - if (!lid->more()) - { - MESSAGE (" NO NODE BUILT ON VERTEX "); - return false; - } - const SMDS_MeshNode * idFirst = lid->next(); - - ASSERT(!VLast.IsNull()); - lid=aMesh.GetSubMesh(VLast)->GetSubMeshDS()->GetNodes(); - if (!lid->more()) - { - MESSAGE (" NO NODE BUILT ON VERTEX "); - return false; - } - const SMDS_MeshNode * idLast = lid->next(); - - if (!Curve.IsNull()) - { - list< double > params; - bool reversed = false; - if ( !_mainEdge.IsNull() ) - reversed = aMesh.IsReversedInChain( EE, _mainEdge ); - try { - if ( ! computeInternalParameters( E, params, reversed )) - return false; - } - catch ( Standard_Failure ) { - return false; - } - - // edge extrema (indexes : 1 & NbPoints) already in SMDS (TopoDS_Vertex) - // only internal nodes receive an edge position with param on curve - - const SMDS_MeshNode * idPrev = idFirst; - - for (list::iterator itU = params.begin(); itU != params.end(); itU++) - { - double param = *itU; - gp_Pnt P = Curve->Value(param); - - //Add the Node in the DataStructure - SMDS_MeshNode * node = meshDS->AddNode(P.X(), P.Y(), P.Z()); - meshDS->SetNodeOnEdge(node, E); - - // **** edgePosition associe au point = param. - SMDS_EdgePosition* epos = - dynamic_cast(node->GetPosition().get()); - epos->SetUParameter(param); - - SMDS_MeshEdge * edge = meshDS->AddEdge(idPrev, node); - meshDS->SetMeshElementOnShape(edge, E); - idPrev = node; - } - SMDS_MeshEdge* edge = meshDS->AddEdge(idPrev, idLast); - meshDS->SetMeshElementOnShape(edge, E); - } - else - { - // Edge is a degenerated Edge : We put n = 5 points on the edge. - int NbPoints = 5; - BRep_Tool::Range(E, f, l); - double du = (l - f) / (NbPoints - 1); - //MESSAGE("************* Degenerated edge! *****************"); - - TopoDS_Vertex V1, V2; - TopExp::Vertices(E, V1, V2); - gp_Pnt P = BRep_Tool::Pnt(V1); - - const SMDS_MeshNode * idPrev = idFirst; - for (int i = 2; i < NbPoints; i++) - { - double param = f + (i - 1) * du; - SMDS_MeshNode * node = meshDS->AddNode(P.X(), P.Y(), P.Z()); - meshDS->SetNodeOnEdge(node, E); - - SMDS_EdgePosition* epos = - dynamic_cast(node->GetPosition().get()); - epos->SetUParameter(param); - - SMDS_MeshEdge * edge = meshDS->AddEdge(idPrev, node); - meshDS->SetMeshElementOnShape(edge, E); - idPrev = node; - } - SMDS_MeshEdge * edge = meshDS->AddEdge(idPrev, idLast); - meshDS->SetMeshElementOnShape(edge, E); - } - return true; -} - -//============================================================================= -/*! - * See comments in SMESH_Algo.cxx - */ -//============================================================================= - -const list & StdMeshers_Regular_1D::GetUsedHypothesis( - SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) -{ - _usedHypList.clear(); - _usedHypList = GetAppliedHypothesis(aMesh, aShape); // copy - int nbHyp = _usedHypList.size(); - _mainEdge.Nullify(); - if (nbHyp == 0) - { - // Check, if propagated from some other edge - if (aShape.ShapeType() == TopAbs_EDGE && - aMesh.IsPropagatedHypothesis(aShape, _mainEdge)) - { - // Propagation of 1D hypothesis from on this edge - //_usedHypList = GetAppliedHypothesis(aMesh, _mainEdge); // copy - // use a general method in order not to nullify _mainEdge - _usedHypList = SMESH_Algo::GetUsedHypothesis(aMesh, _mainEdge); // copy - nbHyp = _usedHypList.size(); - } - } - if (nbHyp == 0) - { - TopTools_ListIteratorOfListOfShape ancIt( aMesh.GetAncestors( aShape )); - for (; ancIt.More(); ancIt.Next()) - { - const TopoDS_Shape& ancestor = ancIt.Value(); - _usedHypList = GetAppliedHypothesis(aMesh, ancestor); // copy - nbHyp = _usedHypList.size(); - if (nbHyp == 1) - break; - } - } - if (nbHyp > 1) - _usedHypList.clear(); //only one compatible hypothesis allowed - return _usedHypList; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & StdMeshers_Regular_1D::SaveTo(ostream & save) -{ - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & StdMeshers_Regular_1D::LoadFrom(istream & load) -{ - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator <<(ostream & save, StdMeshers_Regular_1D & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >>(istream & load, StdMeshers_Regular_1D & hyp) -{ - return hyp.LoadFrom( load ); -} diff --git a/src/StdMeshers/StdMeshers_Regular_1D.hxx b/src/StdMeshers/StdMeshers_Regular_1D.hxx deleted file mode 100644 index b02e21028..000000000 --- a/src/StdMeshers/StdMeshers_Regular_1D.hxx +++ /dev/null @@ -1,100 +0,0 @@ -// SMESH SMESH : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Regular_1D.hxx -// Moved here from SMESH_Regular_1D.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_REGULAR_1D_HXX_ -#define _SMESH_REGULAR_1D_HXX_ - -#include "SMESH_1D_Algo.hxx" - -class TopoDS_Edge; - -class StdMeshers_Regular_1D: - public SMESH_1D_Algo -{ -public: - StdMeshers_Regular_1D(int hypId, int studyId, SMESH_Gen* gen); - virtual ~StdMeshers_Regular_1D(); - - virtual bool CheckHypothesis(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape, - SMESH_Hypothesis::Hypothesis_Status& aStatus); - - virtual bool Compute(SMESH_Mesh& aMesh, - const TopoDS_Shape& aShape); - - virtual const std::list & - GetUsedHypothesis(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape); - - ostream & SaveTo(ostream & save); - istream & LoadFrom(istream & load); - friend ostream & operator << (ostream & save, StdMeshers_Regular_1D & hyp); - friend istream & operator >> (istream & load, StdMeshers_Regular_1D & hyp); - -protected: - - virtual bool computeInternalParameters (const TopoDS_Edge& theEdge, - std::list< double > & theParameters, - const bool theReverse) const; - - enum HypothesisType { LOCAL_LENGTH, NB_SEGMENTS, BEG_END_LENGTH, DEFLECTION, ARITHMETIC_1D, NONE }; - - enum ValueIndex { - SCALE_FACTOR_IND = 0, - BEG_LENGTH_IND = 0, - END_LENGTH_IND = 1, - DEFLECTION_IND = 0 - }; - - enum IValueIndex { - NB_SEGMENTS_IND = 0, - DISTR_TYPE_IND = 1, - EXP_MODE_IND = 2 - }; - - enum VValueIndex { - TAB_FUNC_IND = 0 - }; - - enum SValueIndex { - EXPR_FUNC_IND = 0 - }; - - HypothesisType _hypType; - - double _value[2]; - int _ivalue[3]; - std::vector _vvalue[1]; - std::string _svalue[1]; - - // a source of propagated hypothesis, is set by CheckHypothesis() - // always called before Compute() - TopoDS_Shape _mainEdge; -}; - -#endif diff --git a/src/StdMeshers/StdMeshers_StartEndLength.cxx b/src/StdMeshers/StdMeshers_StartEndLength.cxx deleted file mode 100644 index 1d7016206..000000000 --- a/src/StdMeshers/StdMeshers_StartEndLength.cxx +++ /dev/null @@ -1,143 +0,0 @@ -// SMESH StdMeshers_StartEndLength : 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_StartEndLength.cxx -// Module : SMESH -// $Header$ - -using namespace std; - -#include "StdMeshers_StartEndLength.hxx" -#include "utilities.h" - - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_StartEndLength::StdMeshers_StartEndLength(int hypId, - int studyId, - SMESH_Gen * gen) - :SMESH_Hypothesis(hypId, studyId, gen) -{ - _begLength = 1.; - _endLength = 1.; - _name = "StartEndLength"; - _param_algo_dim = 1; // is used by SMESH_Regular_1D -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_StartEndLength::~StdMeshers_StartEndLength() -{ -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -void StdMeshers_StartEndLength::SetLength(double length, bool isStartLength) - throw(SALOME_Exception) -{ - if ( (isStartLength ? _begLength : _endLength) != length ) { - if (length <= 0) - throw SALOME_Exception(LOCALIZED("length must be positive")); - if ( isStartLength ) - _begLength = length; - else - _endLength = length; - - NotifySubMeshesHypothesisModification(); - } -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -double StdMeshers_StartEndLength::GetLength(bool isStartLength) const -{ - return isStartLength ? _begLength : _endLength; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & StdMeshers_StartEndLength::SaveTo(ostream & save) -{ - save << _begLength << " " <<_endLength; - return save; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & StdMeshers_StartEndLength::LoadFrom(istream & load) -{ - bool isOK = true; - isOK = (load >> _begLength); - if (!isOK) - load.clear(ios::badbit | load.rdstate()); - isOK = (load >> _endLength); - if (!isOK) - load.clear(ios::badbit | load.rdstate()); - return load; -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -ostream & operator <<(ostream & save, StdMeshers_StartEndLength & hyp) -{ - return hyp.SaveTo( save ); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -istream & operator >>(istream & load, StdMeshers_StartEndLength & hyp) -{ - return hyp.LoadFrom( load ); -} diff --git a/src/StdMeshers/StdMeshers_StartEndLength.hxx b/src/StdMeshers/StdMeshers_StartEndLength.hxx deleted file mode 100644 index 05bd2e0bb..000000000 --- a/src/StdMeshers/StdMeshers_StartEndLength.hxx +++ /dev/null @@ -1,53 +0,0 @@ -// SMESH StdMeshers : 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_StartEndLength.hxx -// Module : SMESH -// $Header$ - -#ifndef _STDMESHERS_STARTENDLENGTH_HXX_ -#define _STDMESHERS_STARTENDLENGTH_HXX_ - -#include "SMESH_Hypothesis.hxx" -#include "Utils_SALOME_Exception.hxx" - -class StdMeshers_StartEndLength:public SMESH_Hypothesis -{ - public: - StdMeshers_StartEndLength(int hypId, int studyId, SMESH_Gen * gen); - virtual ~ StdMeshers_StartEndLength(); - - void SetLength(double length, bool isStartLength) throw(SALOME_Exception); - - double GetLength(bool isStartLength) const; - - virtual ostream & SaveTo(ostream & save); - virtual istream & LoadFrom(istream & load); - friend ostream & operator <<(ostream & save, StdMeshers_StartEndLength & hyp); - friend istream & operator >>(istream & load, StdMeshers_StartEndLength & hyp); - - protected: - double _begLength, _endLength; -}; - -#endif diff --git a/src/StdMeshersGUI/Makefile.in b/src/StdMeshersGUI/Makefile.in deleted file mode 100644 index 9e0d50398..000000000 --- a/src/StdMeshersGUI/Makefile.in +++ /dev/null @@ -1,79 +0,0 @@ -# SMESH StdMeshersGUI : GUI for StdMeshers plugin -# -# Copyright (C) 2003 CEA -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -# -# -# -# File : Makefile.in -# Author : Julia DOROVSKIKH -# Module : SMESH -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl:${KERNEL_ROOT_DIR}/idl/salome:${MED_ROOT_DIR}/idl/salome - - -@COMMENCE@ - -# .po files to transform in .qm - PO_FILES = \ - StdMeshers_images.po \ - StdMeshers_msg_en.po - -# Libraries targets -LIB = libStdMeshersGUI.la -LIB_SRC = \ - StdMeshersGUI.cxx \ - StdMeshersGUI_CreateHypothesisDlg.cxx \ - StdMeshersGUI_CreateStdHypothesisDlg.cxx \ - StdMeshersGUI_Parameters.cxx - -LIB_MOC = \ - StdMeshersGUI_CreateHypothesisDlg.h \ - StdMeshersGUI_CreateStdHypothesisDlg.h - -EXPORT_HEADERS = StdMeshersGUI_CreateHypothesisDlg.h \ - StdMeshersGUI_Parameters.h - -LIB_CLIENT_IDL = \ - SALOME_Exception.idl \ - SMESH_Hypothesis.idl \ - SMESH_BasicHypothesis.idl - -## pb in dependencies search -LIB_CLIENT_IDL += \ - SALOME_GenericObj.idl \ - SALOME_Component.idl \ - GEOM_Gen.idl - -LIB_SERVER_IDL = - -# additionnal information to compil and link file - -CPPFLAGS += $(QT_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) $(OCC_INCLUDES) $(PYTHON_INCLUDES) \ - -I${KERNEL_ROOT_DIR}/include/salome -I${GUI_ROOT_DIR}/include/salome -I${GEOM_ROOT_DIR}/include/salome \ - $(BOOST_CPPFLAGS) -CXXFLAGS += -I${KERNEL_ROOT_DIR}/include/salome -I${GUI_ROOT_DIR}/include/salome -I${GEOM_ROOT_DIR}/include/salome -#$(OCC_CXXFLAGS) - -LDFLAGS += -lSMESH -lVTKViewer -lSalomeApp -lSMESHObject -lSMESHFiltersSelection $(OCC_KERNEL_LIBS) -lTKBO -L${KERNEL_ROOT_DIR}/lib/salome -L${GEOM_ROOT_DIR}/lib/salome -L${GUI_ROOT_DIR}/lib/salome - -@CONCLUDE@ diff --git a/src/StdMeshersGUI/StdMeshersGUI.cxx b/src/StdMeshersGUI/StdMeshersGUI.cxx deleted file mode 100644 index fa48527de..000000000 --- a/src/StdMeshersGUI/StdMeshersGUI.cxx +++ /dev/null @@ -1,184 +0,0 @@ -// SMESH StdMeshersGUI : GUI for plugged-in meshers -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshersGUI.cxx -// Author : Julia DOROVSKIKH -// Module : SMESH -// $Header$ - -#include "SALOMEconfig.h" -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESHGUI.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_Hypotheses.h" -#include "SMESHGUI_HypothesesUtils.h" - -#include "SMESHGUI_aParameterDlg.h" -#include "StdMeshersGUI_Parameters.h" -#include "StdMeshersGUI_CreateStdHypothesisDlg.h" - -#include "SUIT_Desktop.h" -#include "SUIT_ResourceMgr.h" - -#include - -#include - -#include "utilities.h" - -using namespace std; - -//============================================================================= -/*! class HypothesisCreator - * - */ -//============================================================================= -class StdMeshersGUI_HypothesisCreator : public SMESHGUI_GenericHypothesisCreator -{ - public: - StdMeshersGUI_HypothesisCreator (const QString& aHypType, - const QString& aServerLibName, - SMESHGUI* aSMESHGUI) - : myHypType(aHypType), - myServerLibName(aServerLibName), - mySMESHGUI(aSMESHGUI) {} - - virtual void CreateHypothesis (const bool isAlgo, QWidget* parent = 0); - virtual void EditHypothesis (SMESH::SMESH_Hypothesis_ptr theHyp); - - private: - QString myHypType; - QString myServerLibName; - SMESHGUI* mySMESHGUI; -}; - -//============================================================================= -/*! HypothesisCreator::CreateHypothesis - * - */ -//============================================================================= -void StdMeshersGUI_HypothesisCreator::CreateHypothesis - (bool isAlgo, QWidget* parent) -{ - MESSAGE("StdMeshersGUI_HypothesisCreator::CreateHypothesis"); - - // Get default name for hypothesis/algorithm creation - char* sHypType = (char*)myHypType.latin1(); - HypothesisData* aHypData = SMESH::GetHypothesisData(sHypType); - QString aHypName; - if (aHypData) - aHypName = aHypData->Label; - else - aHypName = myHypType; - - // Create hypothesis/algorithm - if (isAlgo) - { - SMESH::CreateHypothesis(myHypType, aHypName, isAlgo); - } - else - { - if ( StdMeshersGUI_Parameters::HasParameters( myHypType )) - { - // Show Dialog for hypothesis creation - StdMeshersGUI_CreateStdHypothesisDlg *aDlg = - new StdMeshersGUI_CreateStdHypothesisDlg(myHypType, parent, ""); - /* Move widget on the botton right corner of main widget */ -// int x, y ; -// mySMESHGUI->DefineDlgPosition( aDlg, x, y ) ; -// aDlg->move( x, y ) ; - aDlg->exec() ; /* displays Dialog */ - } - else - SMESH::CreateHypothesis(myHypType, aHypName, isAlgo); // without GUI - } -} - -//============================================================================= -/*! HypothesisCreator::EditHypothesis - * - */ -//============================================================================= -void StdMeshersGUI_HypothesisCreator::EditHypothesis - (SMESH::SMESH_Hypothesis_ptr theHyp) -{ - MESSAGE("StdMeshersGUI_HypothesisCreator::EditHypothesis"); - - SMESH::SObjectList listSOmesh = SMESH::GetMeshesUsingAlgoOrHypothesis(theHyp); - - list paramList; - StdMeshersGUI_Parameters::GetParameters( theHyp, paramList ); - - bool modified = false; - if ( SMESHGUI_aParameterDlg::Parameters( SMESHGUI::GetSMESHGUI(), paramList, QObject::tr("SMESH_VALUE")) ) - { - try - { - modified = StdMeshersGUI_Parameters::SetParameters( theHyp, paramList ); - } - catch (const SALOME::SALOME_Exception& S_ex) - { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - return; - } - } - - if ( modified ) { - //set new Attribute Comment for hypothesis which parameters were modified - QString aParams = ""; - StdMeshersGUI_Parameters::GetParameters( theHyp, paramList, aParams ); - _PTR(SObject) SHyp = SMESH::FindSObject(theHyp); - if (SHyp) - if (!aParams.isEmpty()) { - SMESH::SetValue(SHyp, aParams); - //mySMESHGUI->GetActiveStudy()->updateObjBrowser(true); - } - - if ( listSOmesh.size() > 0 ) { - _PTR(SObject) submSO = listSOmesh[0]; - SMESH::SMESH_Mesh_var aMesh = - SMESH::SObjectToInterface(submSO); - SMESH::SMESH_subMesh_var aSubMesh = - SMESH::SObjectToInterface(submSO); - if ( !aSubMesh->_is_nil() ) - aMesh = aSubMesh->GetFather(); - _PTR(SObject) meshSO = SMESH::FindSObject( aMesh ); - SMESH::ModifiedMesh( meshSO, false); - } - } -} - -//============================================================================= -/*! GetHypothesisCreator - * - */ -//============================================================================= -extern "C" -{ - SMESHGUI_GenericHypothesisCreator* GetHypothesisCreator - (QString aHypType, QString aServerLibName, SMESHGUI* aSMESHGUI) - { - return new StdMeshersGUI_HypothesisCreator - (aHypType, aServerLibName, aSMESHGUI); - } -} diff --git a/src/StdMeshersGUI/StdMeshersGUI_CreateHypothesisDlg.cxx b/src/StdMeshersGUI/StdMeshersGUI_CreateHypothesisDlg.cxx deleted file mode 100644 index d399b595c..000000000 --- a/src/StdMeshersGUI/StdMeshersGUI_CreateHypothesisDlg.cxx +++ /dev/null @@ -1,435 +0,0 @@ -// SMESH StdMeshersGUI : GUI for StdMeshers plugin -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshersGUI_CreateHypothesisDlg.cxx -// Moved here from SMESHGUI_CreateHypothesisDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#include "StdMeshersGUI_CreateHypothesisDlg.h" -#include "StdMeshersGUI_Parameters.h" -#include "SMESHGUI.h" -#include "SMESHGUI_SpinBox.h" -#include "SMESHGUI_Hypotheses.h" -#include "SMESHGUI_HypothesesUtils.h" -#include "SMESHGUI_Utils.h" - -#include "SUIT_Application.h" -#include "SUIT_Desktop.h" -#include "SUIT_MessageBox.h" -#include "SUIT_OverrideCursor.h" -#include "utilities.h" - -#include "SalomeApp_Tools.h" -#include "SalomeApp_Application.h" - -#include "OB_Browser.h" - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -//================================================================================= -// class : StdMeshersGUI_CreateHypothesisDlg() -// purpose : Constructs a StdMeshersGUI_CreateHypothesisDlg which is a child of 'parent', with the -// name 'name' and widget flags set to 'f'. -// The dialog will by default be modeless, unless you set 'modal' to -// TRUE to construct a modal dialog. -//================================================================================= -StdMeshersGUI_CreateHypothesisDlg::StdMeshersGUI_CreateHypothesisDlg (const QString& hypType, - QWidget* parent, - const char* name, - bool modal, - WFlags /*fl*/) - : QDialog (parent, name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose), myHypType( hypType ) -{ -} - -//======================================================================= -//function : CreateDlgLayout -//purpose : -//======================================================================= - -void StdMeshersGUI_CreateHypothesisDlg::CreateDlgLayout(const QString & theCaption, - const QPixmap & theHypIcon, - const QString & theHypTypeName) -{ - setCaption( theCaption ); - - setSizeGripEnabled( TRUE ); - QVBoxLayout* StdMeshersGUI_CreateHypothesisDlgLayout = new QVBoxLayout( this ); - StdMeshersGUI_CreateHypothesisDlgLayout->setSpacing( 6 ); - StdMeshersGUI_CreateHypothesisDlgLayout->setMargin( 11 ); - - /***************************************************************/ - QFrame* titFrame = new QFrame( this ); - QHBoxLayout* titLay = new QHBoxLayout( titFrame, 0, 0 ); - - iconLabel = new QLabel( titFrame ); - iconLabel->setPixmap( theHypIcon ); - iconLabel->setScaledContents( false ); - iconLabel->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) ); - typeLabel = new QLabel( titFrame ); - typeLabel->setText( theHypTypeName ); - titLay->addWidget( iconLabel, 0 ); - titLay->addWidget( typeLabel, 0 ); - titLay->addStretch( 1 ); - - StdMeshersGUI_CreateHypothesisDlgLayout->addWidget( titFrame, 0); - - /***************************************************************/ - GroupC1 = new QGroupBox( this, "GroupC1" ); - GroupC1->setTitle( tr( "SMESH_ARGUMENTS" ) ); - GroupC1->setColumnLayout(0, Qt::Vertical ); - GroupC1->layout()->setSpacing( 0 ); - GroupC1->layout()->setMargin( 0 ); - QGridLayout* GroupC1Layout = new QGridLayout( GroupC1->layout() ); - GroupC1Layout->setAlignment( Qt::AlignTop ); - GroupC1Layout->setSpacing( 6 ); - GroupC1Layout->setMargin( 11 ); - - TextLabel_NameHypothesis = new QLabel( GroupC1, "TextLabel_NameHypothesis" ); - TextLabel_NameHypothesis->setText( tr( "SMESH_NAME" ) ); - GroupC1Layout->addWidget( TextLabel_NameHypothesis, 0, 0 ); - - LineEdit_NameHypothesis = new QLineEdit( GroupC1, "LineEdit_NameHypothesis" ); - GroupC1Layout->addWidget( LineEdit_NameHypothesis, 0, 1 ); - - myParamMap.clear(); - std::list aParamList; - GetParameters( myHypType, aParamList ); - ASSERT( !aParamList.empty() ); - - /* Spin boxes with labels */ - list::iterator paramIt = aParamList.begin(); - for ( int row = 1; paramIt != aParamList.end(); paramIt++ , row++ ) - { - SMESHGUI_aParameterPtr param = (*paramIt); - QLabel * label = new QLabel( GroupC1, "TextLabel" ); - GroupC1Layout->addWidget( label, row, 0 ); - label->setText( param->Label() ); - QWidget* aWidget = param->CreateWidget( GroupC1 ); - - if ( aWidget ) { - GroupC1Layout->addWidget( aWidget, row, 1 ); - aWidget->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) ); - aWidget->setMinimumSize( 150, 0 ); - - QString sig = param->sigValueChanged(); - if( !sig.isEmpty() && param->GetType()!=SMESHGUI_aParameter::TABLE ) - connect( aWidget, sig.latin1(), this, SLOT( onValueChanged() ) ); - - param->InitializeWidget( aWidget ); - - ParamInfo info; - info.editor = aWidget; - info.label = label; - info.order = row-1; - - myParamMap.insert( param, info ); - } - } - - StdMeshersGUI_CreateHypothesisDlgLayout->addWidget( GroupC1, 1 ); - - /***************************************************************/ - GroupButtons = new QGroupBox( this, "GroupButtons" ); - GroupButtons->setColumnLayout(0, Qt::Vertical ); - GroupButtons->layout()->setSpacing( 0 ); - GroupButtons->layout()->setMargin( 0 ); - QGridLayout* GroupButtonsLayout = new QGridLayout( GroupButtons->layout() ); - GroupButtonsLayout->setAlignment( Qt::AlignTop ); - GroupButtonsLayout->setSpacing( 6 ); - GroupButtonsLayout->setMargin( 11 ); - buttonOk = new QPushButton( GroupButtons, "buttonOk" ); - buttonOk->setText( tr( "SMESH_BUT_OK" ) ); - buttonOk->setAutoDefault( TRUE ); - buttonOk->setDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonOk, 0, 0 ); - buttonApply = new QPushButton( GroupButtons, "buttonApply" ); - buttonApply->setText( tr( "SMESH_BUT_APPLY" ) ); - buttonApply->setAutoDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonApply, 0, 1 ); - QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); - GroupButtonsLayout->addItem( spacer, 0, 2 ); - buttonCancel = new QPushButton( GroupButtons, "buttonCancel" ); - buttonCancel->setText( tr( "SMESH_BUT_CLOSE" ) ); - buttonCancel->setAutoDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonCancel, 0, 3 ); - StdMeshersGUI_CreateHypothesisDlgLayout->addWidget( GroupButtons, 0 ); - - /***************************************************************/ - Init() ; -} - - -//================================================================================= -// function : ~StdMeshersGUI_CreateHypothesisDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -StdMeshersGUI_CreateHypothesisDlg::~StdMeshersGUI_CreateHypothesisDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - - -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void StdMeshersGUI_CreateHypothesisDlg::Init() -{ - ParameterMap::const_iterator anIt = myParamMap.begin(), - aLast = myParamMap.end(); - for( ; anIt!=aLast; anIt++ ) - UpdateShown( anIt.key() ); - - mySMESHGUI = SMESHGUI::GetSMESHGUI() ; - - char* sHypType = const_cast(myHypType.latin1()); - HypothesisData* aHypData = SMESH::GetHypothesisData(sHypType); - LineEdit_NameHypothesis->setText( aHypData ? aHypData->Label : QString("") ); - - mySMESHGUI->SetActiveDialogBox( (QDialog*)this ); - - /* signals and slots connections */ - connect( buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()) ); - connect( buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()) ) ; - connect( buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()) ); - - connect( mySMESHGUI, SIGNAL ( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) ) ; - connect( mySMESHGUI, SIGNAL ( SignalCloseAllDialogs() ), this, SLOT( ClickOnCancel() ) ) ; - - /* Move widget on the botton right corner of main widget */ - int x, y ; - mySMESHGUI->DefineDlgPosition( this, x, y ) ; - this->move( x, y ) ; - this->show() ; /* displays Dialog */ -} - - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void StdMeshersGUI_CreateHypothesisDlg::ClickOnOk() -{ - if ( ClickOnApply() ) - ClickOnCancel() ; -} - -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -bool StdMeshersGUI_CreateHypothesisDlg::ClickOnApply() -{ - if ( !mySMESHGUI || mySMESHGUI->isActiveStudyLocked() ) - return false; - - QString myHypName = LineEdit_NameHypothesis->text().stripWhiteSpace(); - if ( myHypName.isEmpty() ) { - SUIT_MessageBox::warn1 (this, tr( "SMESH_WRN_WARNING" ), - tr( "SMESH_WRN_EMPTY_NAME" ), tr( "SMESH_BUT_OK" ) ); - return false; - } - - SUIT_OverrideCursor wc; - - SMESH::SMESH_Hypothesis_var Hyp = SMESH::SMESH_Hypothesis::_narrow - ( SMESH::CreateHypothesis( myHypType, myHypName, false ) ); // isAlgorithm - - try { - - list aParamList; - ParameterMap::const_iterator anIt = myParamMap.begin(), - aLast = myParamMap.end(); - for( int i=0; iTakeValue( anIt.data().editor ); - aParamList.push_back( anIt.key() ); - break; - } - - SetParameters( Hyp, aParamList ); - - //set new Attribute Comment for hypothesis which parameters were set - QString aParams = ""; - StdMeshersGUI_Parameters::GetParameters( Hyp.in(), aParamList, aParams ); - _PTR(SObject) SHyp = SMESH::FindSObject(Hyp.in()); - if (SHyp) - if (!aParams.isEmpty()) - { - SMESH::SetValue(SHyp, aParams); - mySMESHGUI->getApp()->objectBrowser()->updateTree(); - } - } - catch (const SALOME::SALOME_Exception& S_ex) - { - wc.suspend(); - - _PTR(SObject) SHyp = SMESH::FindSObject(Hyp.in()); - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); - if( aStudy && !aStudy->GetProperties()->IsLocked() ) - { - _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); - aBuilder->RemoveObjectWithChildren( SHyp ); - mySMESHGUI->updateObjBrowser( true, 0 ); - } - - SalomeApp_Tools::QtCatchCorbaException(S_ex); - return false; - } - return true; -} - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void StdMeshersGUI_CreateHypothesisDlg::ClickOnCancel() -{ - close(); -} - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void StdMeshersGUI_CreateHypothesisDlg::DeactivateActiveDialog() -{ -// iconLabel->setEnabled(false) ; -// typeLabel->setEnabled(false) ; -// GroupC1->setEnabled(false) ; -// GroupButtons->setEnabled(false) ; - setEnabled(false); -} - - -//================================================================================= -// function : ActivateThisDialog() -// purpose : -//================================================================================= -void StdMeshersGUI_CreateHypothesisDlg::ActivateThisDialog() -{ - if (! isEnabled() ) { - mySMESHGUI->EmitSignalDeactivateDialog() ; -// iconLabel->setEnabled(true) ; -// typeLabel->setEnabled(true) ; -// GroupC1->setEnabled(true) ; -// GroupButtons->setEnabled(true) ; - setEnabled(true) ; - } -} - - -//================================================================================= -// function : enterEvent() -// purpose : -//================================================================================= -void StdMeshersGUI_CreateHypothesisDlg::enterEvent(QEvent* e) -{ - ActivateThisDialog() ; -} - - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void StdMeshersGUI_CreateHypothesisDlg::closeEvent( QCloseEvent* e ) -{ - mySMESHGUI->ResetState(); - QDialog::closeEvent( e ); -} - -//================================================================================= -// function : onValueChanged() -// purpose : -//================================================================================= -void StdMeshersGUI_CreateHypothesisDlg::onValueChanged() -{ - if( sender()->inherits( "QWidget" ) ) - { - QWidget* w = ( QWidget* )sender(); - - SMESHGUI_aParameterPtr param; - - ParameterMap::const_iterator anIt = myParamMap.begin(), - aLast = myParamMap.end(); - for( ; anIt!=aLast; anIt++ ) - if( anIt.data().editor == w ) - { - param = anIt.key(); - param->TakeValue( w ); - UpdateShown( param ); - break; - } - } -} - -//================================================================================= -// function : UpdateShown() -// purpose : -//================================================================================= -void StdMeshersGUI_CreateHypothesisDlg::UpdateShown( const SMESHGUI_aParameterPtr param ) -{ - SMESHGUI_dependParameter* depPar = dynamic_cast( param.get() ); - if( !depPar ) - depPar = dynamic_cast( param.get() ); - - if( !depPar ) - return; - - SMESHGUI_dependParameter::ShownMap& map = depPar->shownMap(); - if( map.isEmpty() ) - return; - - int val; - depPar->TakeValue( myParamMap[ param ].editor ); - depPar->GetNewInt( val ); - - bool hasValue = map.contains( val ); - - ParameterMap::const_iterator anIt = myParamMap.begin(), - aLast = myParamMap.end(); - for( ; anIt!=aLast; anIt++ ) - { - bool shown = hasValue && map[ val ].contains( (*anIt).order ); - (*anIt).editor->setShown( shown ); - (*anIt).label->setShown( shown ); - } -} diff --git a/src/StdMeshersGUI/StdMeshersGUI_CreateHypothesisDlg.h b/src/StdMeshersGUI/StdMeshersGUI_CreateHypothesisDlg.h deleted file mode 100644 index 3230f8eef..000000000 --- a/src/StdMeshersGUI/StdMeshersGUI_CreateHypothesisDlg.h +++ /dev/null @@ -1,119 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshersGUI_CreateHypothesisDlg.h -// Module : SMESH -// $Header$ - -#ifndef DIALOGBOX_CreateHypothesisDlg_H -#define DIALOGBOX_CreateHypothesisDlg_H - -// QT Includes -#include -#include -#include - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESHGUI_aParameter.h" - -class QGroupBox; -class QLabel; -class QLineEdit; -class QPushButton; -class SMESHGUI; -class SMESHGUI_SpinBox; - -//================================================================================= -// class : StdMeshersGUI_CreateHypothesisDlg -// purpose : -//================================================================================= -class StdMeshersGUI_CreateHypothesisDlg : public QDialog -{ - Q_OBJECT - -public: - StdMeshersGUI_CreateHypothesisDlg (const QString& hypType, - QWidget* parent = 0, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0); - ~StdMeshersGUI_CreateHypothesisDlg (); - -protected: - - void CreateDlgLayout(const QString & caption, - const QPixmap & hypIcon, - const QString & hypTypeName); - - virtual void GetParameters( const QString& hypType, - std::list& ) = 0; - - virtual bool SetParameters( SMESH::SMESH_Hypothesis_ptr theHyp, - const std::list & params ) = 0; - -protected slots: - virtual void onValueChanged(); - -private: - void UpdateShown( const SMESHGUI_aParameterPtr ); - void Init() ; - void closeEvent( QCloseEvent* e ) ; - void enterEvent ( QEvent * ) ; - - SMESHGUI* mySMESHGUI; - QString myHypType; - - typedef struct - { - QWidget* editor; - QLabel* label; - int order; - - } ParamInfo; - - typedef QMap< SMESHGUI_aParameterPtr, ParamInfo > ParameterMap; - ParameterMap myParamMap; - - QLabel* iconLabel; - QLabel* typeLabel; - QGroupBox* GroupC1; - QLabel* TextLabel_NameHypothesis ; - QLineEdit* LineEdit_NameHypothesis ; - QLabel* TextLabel_Length ; - QGroupBox* GroupButtons; - QPushButton* buttonOk; - QPushButton* buttonApply; - QPushButton* buttonCancel; - -private slots: - - void ClickOnOk(); - void ClickOnCancel(); - bool ClickOnApply(); - void DeactivateActiveDialog() ; - void ActivateThisDialog() ; -}; - -#endif // DIALOGBOX_LOCAL_LENGTH_H diff --git a/src/StdMeshersGUI/StdMeshersGUI_CreateStdHypothesisDlg.cxx b/src/StdMeshersGUI/StdMeshersGUI_CreateStdHypothesisDlg.cxx deleted file mode 100644 index 542600141..000000000 --- a/src/StdMeshersGUI/StdMeshersGUI_CreateStdHypothesisDlg.cxx +++ /dev/null @@ -1,109 +0,0 @@ -// SMESH StdMeshersGUI : GUI for StdMeshers plugin -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshersGUI_CreateStdHypothesisDlg.cxx -// Moved here from SMESHGUI_CreateStdHypothesisDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshersGUI_CreateStdHypothesisDlg.h" -#include "StdMeshersGUI_Parameters.h" -#include "SMESHGUI.h" -#include "SMESHGUI_Hypotheses.h" - -#include "utilities.h" - -#include "SUIT_MessageBox.h" -#include "SUIT_ResourceMgr.h" -#include "SUIT_OverrideCursor.h" -#include "SUIT_Desktop.h" - -//================================================================================= -// class : StdMeshersGUI_CreateStdHypothesisDlg() -// purpose : -//================================================================================= -StdMeshersGUI_CreateStdHypothesisDlg::StdMeshersGUI_CreateStdHypothesisDlg (const QString& hypType, - QWidget* parent, - const char* name, - bool /*modal*/, - WFlags fl) - : StdMeshersGUI_CreateHypothesisDlg (hypType, parent, name, true, fl) -{ - QString hypTypeStr; - if (hypType.compare("LocalLength") == 0) - hypTypeStr = "LOCAL_LENGTH"; - else if (hypType.compare("NumberOfSegments") == 0) - hypTypeStr = "NB_SEGMENTS"; - else if (hypType.compare("MaxElementArea") == 0) - hypTypeStr = "MAX_ELEMENT_AREA"; - else if (hypType.compare("MaxElementVolume") == 0) - hypTypeStr = "MAX_ELEMENT_VOLUME"; - else if (hypType.compare("StartEndLength") == 0) - hypTypeStr = "START_END_LENGTH"; - else if (hypType.compare("Deflection1D") == 0) - hypTypeStr = "DEFLECTION1D"; - else if (hypType.compare("Arithmetic1D") == 0) - hypTypeStr = "ARITHMETIC_1D"; - else - return; - - QString caption( tr ( QString( "SMESH_%1_TITLE" ).arg( hypTypeStr ))); - QString hypTypeName( tr ( QString( "SMESH_%1_HYPOTHESIS" ).arg( hypTypeStr ))); - QString hypIconName( tr ( QString( "ICON_DLG_%1" ).arg( hypTypeStr ))); - - CreateDlgLayout(caption, - SMESHGUI::resourceMgr()->loadPixmap( "SMESH", hypIconName ), - hypTypeName); -} - -//================================================================================= -// function : ~StdMeshersGUI_CreateStdHypothesisDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -StdMeshersGUI_CreateStdHypothesisDlg::~StdMeshersGUI_CreateStdHypothesisDlg() -{ - // no need to delete child widgets, Qt does it all for us -} -//================================================================================= -// function : FillParameters() -// purpose : -//================================================================================= -void StdMeshersGUI_CreateStdHypothesisDlg::GetParameters - (const QString & hypType, - std::list & params) -{ - StdMeshersGUI_Parameters::GetParameters( hypType, params ); -} - -//================================================================================= -// function : SetParameters() -// purpose : -//================================================================================= -bool StdMeshersGUI_CreateStdHypothesisDlg::SetParameters - (SMESH::SMESH_Hypothesis_ptr theHyp, const list & params) -{ - StdMeshersGUI_Parameters::SetParameters( theHyp, params ); - return true; -} diff --git a/src/StdMeshersGUI/StdMeshersGUI_CreateStdHypothesisDlg.h b/src/StdMeshersGUI/StdMeshersGUI_CreateStdHypothesisDlg.h deleted file mode 100644 index 027c88acb..000000000 --- a/src/StdMeshersGUI/StdMeshersGUI_CreateStdHypothesisDlg.h +++ /dev/null @@ -1,59 +0,0 @@ -// SMESH SMESHGUI : GUI for SMESH component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshersGUI_CreateStdHypothesisDlg.h -// Moved here from SMESHGUI_CreateStdHypothesisDlg.h -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ - -#ifndef DIALOGBOX_CreateStdHypothesisDlg_H -#define DIALOGBOX_CreateStdHypothesisDlg_H - -#include "StdMeshersGUI_CreateHypothesisDlg.h" - -//================================================================================= -// class : StdMeshersGUI_CreateStdHypothesisDlg -// purpose : -//================================================================================= -class StdMeshersGUI_CreateStdHypothesisDlg : public StdMeshersGUI_CreateHypothesisDlg -{ - Q_OBJECT - - public: - StdMeshersGUI_CreateStdHypothesisDlg (const QString& hypType, - QWidget* parent = 0, - const char* name = 0, - bool modal = FALSE, - WFlags fl = 0); - ~StdMeshersGUI_CreateStdHypothesisDlg (); - - private: - virtual void GetParameters(const QString & hypType, - std::list & params); - - virtual bool SetParameters(SMESH::SMESH_Hypothesis_ptr theHyp, - const std::list & params); -}; - -#endif diff --git a/src/StdMeshersGUI/StdMeshersGUI_Parameters.cxx b/src/StdMeshersGUI/StdMeshersGUI_Parameters.cxx deleted file mode 100644 index 7d52876d9..000000000 --- a/src/StdMeshersGUI/StdMeshersGUI_Parameters.cxx +++ /dev/null @@ -1,479 +0,0 @@ -// SMESH StdMeshersGUI : GUI for standard meshers -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshersGUI_Parameters.cxx -// Module : SMESH -// $Header$ - -#include "StdMeshersGUI_Parameters.h" - -//#include "SMESHGUI_SpinBox.h" // for the sake of COORD_MAX, COORD_MIN definition - -#include - -using namespace std; - -#define VALUE_MAX 1.0e+15 // COORD_MAX -#define VALUE_MAX_2 (VALUE_MAX*VALUE_MAX) -#define VALUE_MAX_3 (VALUE_MAX*VALUE_MAX*VALUE_MAX) - -#define VALUE_SMALL 1.0e-15 -#define VALUE_SMALL_2 (VALUE_SMALL*VALUE_SMALL) -#define VALUE_SMALL_3 (VALUE_SMALL*VALUE_SMALL*VALUE_SMALL) - -//======================================================================= -//function : HasParameters -//purpose : -//======================================================================= - -bool StdMeshersGUI_Parameters::HasParameters (const QString& hypType) -{ - return ((hypType.compare("LocalLength") == 0) || - (hypType.compare("NumberOfSegments") == 0) || - (hypType.compare("MaxElementArea") == 0) || - (hypType.compare("MaxElementVolume") == 0) || - (hypType.compare("StartEndLength") == 0) || - (hypType.compare("Deflection1D") == 0) || - (hypType.compare("Arithmetic1D") == 0)); -} - -//======================================================================= -//function : SetInitValue -//purpose : -//======================================================================= - -void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param, - int initValue) -{ - SMESHGUI_intParameter* p = dynamic_cast(param.get()); - if ( p ) - { - p->InitValue() = initValue; - return; - } - - SMESHGUI_enumParameter* q = dynamic_cast(param.get()); - if( q ) - { - q->InitValue() = initValue; - return; - } - - SMESHGUI_boolParameter* b = dynamic_cast(param.get()); - if( b ) - { - b->InitValue() = (bool)initValue; - return; - } -} - -//======================================================================= -//function : SetInitValue -//purpose : -//======================================================================= - -void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param, - double initValue) -{ - SMESHGUI_doubleParameter* p = dynamic_cast(param.get()); - if ( p ) p->InitValue() = initValue; -} - -//======================================================================= -//function : SetInitValue -//purpose : -//======================================================================= - -void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param, - const char* initValue) -{ - SMESHGUI_strParameter* p = dynamic_cast(param.get()); - if ( p ) p->InitValue() = initValue; -} - -//======================================================================= -//function : SetInitValue -//purpose : -//======================================================================= -void StdMeshersGUI_Parameters::SetInitValue( SMESHGUI_aParameterPtr param, - SMESH::double_array& initValue) -{ - SMESHGUI_tableParameter* p = dynamic_cast(param.get()); - if( p ) - { - p->setRowCount( initValue.length()/2 ); - p->setData( initValue ); - } -} - -//======================================================================= -//function : GetParameters -//purpose : -//======================================================================= - -// SMESHGUI_doubleParameter( initValue, label, bottom, top, step, decimals ) -#define DOUBLE_PARAM(v,l,b,t,s,d) SMESHGUI_aParameterPtr(new SMESHGUI_doubleParameter(v,l,b,t,s,d)) -#define INT_PARAM(v,l,b,t) SMESHGUI_aParameterPtr(new SMESHGUI_intParameter(v,l,b,t)) -#define ENUM_PARAM(v,i,l) SMESHGUI_aParameterPtr(new SMESHGUI_enumParameter(v,i,l)) -#define STR_PARAM(i,l) SMESHGUI_aParameterPtr(new SMESHGUI_strParameter(i,l)) -#define BOOL_PARAM(i,l) SMESHGUI_aParameterPtr(new SMESHGUI_boolParameter(i,l)) - -void StdMeshersGUI_Parameters::GetParameters (const QString& hypType, - list & paramList ) -{ - paramList.clear(); - - if (hypType.compare("LocalLength") == 0) - { - paramList.push_back( DOUBLE_PARAM (1.0, - QObject::tr("SMESH_LOCAL_LENGTH_PARAM"), - VALUE_SMALL, VALUE_MAX, 1.0, 6)); - } - else if (hypType.compare("NumberOfSegments") == 0) - { - //0-th parameter in list - paramList.push_back ( INT_PARAM (3, - QObject::tr("SMESH_NB_SEGMENTS_PARAM"), - 1, 9999 )); - QStringList types; - types.append( QObject::tr( "SMESH_DISTR_REGULAR" ) ); - types.append( QObject::tr( "SMESH_DISTR_SCALE" ) ); - types.append( QObject::tr( "SMESH_DISTR_TAB" ) ); - types.append( QObject::tr( "SMESH_DISTR_EXPR" ) ); - //string description of distribution types - - SMESHGUI_enumParameter* type = new SMESHGUI_enumParameter( types, 0, QObject::tr( "SMESH_DISTR_TYPE" ) ); - SMESHGUI_dependParameter::ShownMap& aMap = type->shownMap(); - aMap[0].append( 0 ); // if DistrType=0 (regular), then number of segments and types are shown (0-th and 1-th) - aMap[0].append( 1 ); - aMap[1].append( 0 ); // if DistrType=1 (scale), then number of segments, types and scale are shown - aMap[1].append( 1 ); - aMap[1].append( 2 ); - aMap[2].append( 0 ); // if DistrType=2 (table), then number of segments, types, table and exponent are shown - aMap[2].append( 1 ); - aMap[2].append( 3 ); - aMap[2].append( 5 ); - aMap[3].append( 0 ); // if DistrType=3 (expression), then number of segments, types, expression and exponent are shown - aMap[3].append( 1 ); - aMap[3].append( 4 ); - aMap[3].append( 5 ); - //1-th parameter in list - paramList.push_back ( SMESHGUI_aParameterPtr( type ) ); - - //2-th parameter in list - paramList.push_back ( DOUBLE_PARAM (1.0, - QObject::tr("SMESH_NB_SEGMENTS_SCALE_PARAM"), - VALUE_SMALL, VALUE_MAX, 0.1, 6 )); - SMESHGUI_tableParameter* tab = new SMESHGUI_tableParameter( 0.0, QObject::tr( "SMESH_TAB_FUNC" ) ); - tab->setRowCount( 5 ); - tab->setColCount( 2 ); - //default size of table: 5x2 - - tab->setColName( 0, "t" ); - tab->setColName( 1, "f(t)" ); - tab->setValidator( 0, 0.0, 1.0, 3 ); - tab->setValidator( 1, 1E-7, 1E+300, 3 ); - tab->setEditRows( true ); - - //3-th parameter in list - paramList.push_back ( SMESHGUI_aParameterPtr( tab ) ); - - //4-th parameter in list - paramList.push_back ( STR_PARAM ( "", QObject::tr( "SMESH_EXPR_FUNC" ) ) ); - - //5-th parameter in list - paramList.push_back ( BOOL_PARAM ( false, QObject::tr( "SMESH_EXP_MODE" ) ) ); - } - else if (hypType.compare("Arithmetic1D") == 0) - { - paramList.push_back( DOUBLE_PARAM ( 1.0, - QObject::tr("SMESH_START_LENGTH_PARAM"), - VALUE_SMALL, VALUE_MAX, 1, 6)); - paramList.push_back( DOUBLE_PARAM ( 10.0, - QObject::tr("SMESH_END_LENGTH_PARAM"), - VALUE_SMALL, VALUE_MAX, 1, 6)); - } - else if (hypType.compare("MaxElementArea") == 0) - { - paramList.push_back( DOUBLE_PARAM (1.0, - QObject::tr("SMESH_MAX_ELEMENT_AREA_PARAM"), - VALUE_SMALL_2, VALUE_MAX_2, 1.0, 6)); - } - else if (hypType.compare("MaxElementVolume") == 0) - { - paramList.push_back( DOUBLE_PARAM ( 1.0, - QObject::tr("SMESH_MAX_ELEMENT_VOLUME_PARAM"), - VALUE_SMALL_3, VALUE_MAX_3, 1.0, 6)); - } - else if (hypType.compare("StartEndLength") == 0) - { - paramList.push_back( DOUBLE_PARAM ( 1.0, - QObject::tr("SMESH_START_LENGTH_PARAM"), - VALUE_SMALL, VALUE_MAX, 1, 6)); - paramList.push_back( DOUBLE_PARAM ( 10.0, - QObject::tr("SMESH_END_LENGTH_PARAM"), - VALUE_SMALL, VALUE_MAX, 1, 6)); - } - else if (hypType.compare("Deflection1D") == 0) - { - paramList.push_back( DOUBLE_PARAM ( 1.0, - QObject::tr("SMESH_DEFLECTION1D_PARAM"), - VALUE_SMALL, VALUE_MAX, 1, 6)); - } -} - -//======================================================================= -//function : GetParameters -//purpose : -//======================================================================= - -void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr theHyp, - list & paramList ) -{ - paramList.clear(); - - if (theHyp->_is_nil()) return; - - QString hypType = theHyp->GetName(); - GetParameters( hypType, paramList ); // get default parameters - if ( paramList.empty() ) - return; - - // set current values - if (hypType.compare("LocalLength") == 0) - { - StdMeshers::StdMeshers_LocalLength_var LL = - StdMeshers::StdMeshers_LocalLength::_narrow(theHyp); - SetInitValue( paramList.front(), LL->GetLength() ); - } - else if (hypType.compare("NumberOfSegments") == 0) - { - StdMeshers::StdMeshers_NumberOfSegments_var NOS = - StdMeshers::StdMeshers_NumberOfSegments::_narrow(theHyp); - - list::iterator anIt = paramList.begin(); - SetInitValue( *anIt, (int) NOS->GetNumberOfSegments()); anIt++; - int DType = (int) NOS->GetDistrType(); - SetInitValue( *anIt, DType ); anIt++; - - if( DType==1 ) - SetInitValue( *anIt, NOS->GetScaleFactor()); - anIt++; - - if( DType==2 ) - { - SMESH::double_array* tab_func = NOS->GetTableFunction(); - SetInitValue( *anIt, *tab_func ); - delete tab_func; - } - anIt++; - - if( DType==3 ) - { - char* expr_func = NOS->GetExpressionFunction(); - SetInitValue( *anIt, expr_func ); - delete expr_func; - } - anIt++; - - if( DType==2 || DType==3 ) - SetInitValue( *anIt, (bool)NOS->IsExponentMode()); - } - else if (hypType.compare("Arithmetic1D") == 0) - { - StdMeshers::StdMeshers_Arithmetic1D_var hyp = - StdMeshers::StdMeshers_Arithmetic1D::_narrow(theHyp); - SetInitValue( paramList.front(), hyp->GetLength( true )) ; - SetInitValue( paramList.back(), hyp->GetLength( false )) ; - } - else if (hypType.compare("MaxElementArea") == 0) - { - StdMeshers::StdMeshers_MaxElementArea_var MEA = - StdMeshers::StdMeshers_MaxElementArea::_narrow(theHyp); - SetInitValue( paramList.front(), MEA->GetMaxElementArea() ); - } - else if (hypType.compare("MaxElementVolume") == 0) - { - StdMeshers::StdMeshers_MaxElementVolume_var MEV = - StdMeshers::StdMeshers_MaxElementVolume::_narrow(theHyp); - SetInitValue( paramList.front(), MEV->GetMaxElementVolume() ); - } - else if (hypType.compare("StartEndLength") == 0) - { - StdMeshers::StdMeshers_StartEndLength_var hyp = - StdMeshers::StdMeshers_StartEndLength::_narrow(theHyp); - SetInitValue( paramList.front(), hyp->GetLength( true )); - SetInitValue( paramList.back(), hyp->GetLength( false )); - } - else if (hypType.compare("Deflection1D") == 0) - { - StdMeshers::StdMeshers_Deflection1D_var hyp = - StdMeshers::StdMeshers_Deflection1D::_narrow(theHyp); - SetInitValue( paramList.back(), hyp->GetDeflection()) ; - } -} - -//======================================================================= -//function : GetParameters -//purpose : -//======================================================================= -void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr hyp, - list & paramList, - QString& params) -{ - params = ""; - list::iterator paramIt = paramList.begin(); - for ( ; paramIt != paramList.end(); paramIt++) { - if (params.compare("")) params += " ; "; - - SMESHGUI_aParameter::Type t = (*paramIt)->GetType(); - if( t==SMESHGUI_aParameter::DOUBLE ) - { - double aDoubleValue = 0.; - (*paramIt)->GetNewDouble(aDoubleValue); - params += QString::number(aDoubleValue); - } - else if( t==SMESHGUI_aParameter::STRING || t==SMESHGUI_aParameter::ENUM ) - { - QString aStrValue( "" ); - (*paramIt)->GetNewText(aStrValue); - params += aStrValue.simplifyWhiteSpace(); - } - else if( t==SMESHGUI_aParameter::TABLE ) - { - params += "TABLE"; - } - else - { - int aIntValue = 0; - (*paramIt)->GetNewInt(aIntValue); - params += QString::number(aIntValue); - } - } -} - -//======================================================================= -//function : SetParameters -//purpose : -//======================================================================= - -bool StdMeshersGUI_Parameters::SetParameters(SMESH::SMESH_Hypothesis_ptr theHyp, - const list & paramList ) -{ - if (theHyp->_is_nil() || paramList.empty()) return false; - - bool modified = false; - - QString hypType = theHyp->GetName(); - - if (hypType.compare("LocalLength") == 0) - { - StdMeshers::StdMeshers_LocalLength_var LL = - StdMeshers::StdMeshers_LocalLength::_narrow(theHyp); - double length = LL->GetLength(); - modified = paramList.front()->GetNewDouble( length ); - LL->SetLength(length); - } - else if (hypType.compare("NumberOfSegments") == 0) - { - StdMeshers::StdMeshers_NumberOfSegments_var NOS = - StdMeshers::StdMeshers_NumberOfSegments::_narrow(theHyp); - - list::const_iterator anIt = paramList.begin(); - int NbSeg, DType; - double Scale; - SMESH::double_array TabF; - QString exprF; - int expType; - - modified = (*anIt)->GetNewInt( NbSeg ); anIt++; - modified = (*anIt)->GetNewInt( DType ) || modified; anIt++; - modified = (*anIt)->GetNewDouble( Scale ) || modified; anIt++; - SMESHGUI_aParameterPtr p = *anIt; - ((SMESHGUI_tableParameter*)p.get())->data( TabF ); anIt++; modified = true; - modified = (*anIt)->GetNewText( exprF ) || modified; anIt++; - modified = (*anIt)->GetNewInt( expType ) || modified; - - NOS->SetNumberOfSegments( NbSeg ); - NOS->SetDistrType( DType ); - if( DType==1 ) - NOS->SetScaleFactor( Scale ); - if( DType==2 ) - NOS->SetTableFunction( TabF ); - if( DType==3 ) - NOS->SetExpressionFunction( CORBA::string_dup( exprF.latin1() ) ); - if( DType==2 || DType==3 ) - NOS->SetExponentMode( (bool)expType ); - } - else if (hypType.compare("Arithmetic1D") == 0) - { - if ( paramList.size() != 2 ) - return false; - StdMeshers::StdMeshers_Arithmetic1D_var hyp = - StdMeshers::StdMeshers_Arithmetic1D::_narrow(theHyp); - double begLength = hyp->GetLength( true ) ; - double endLength = hyp->GetLength( false ) ; - modified = paramList.front()->GetNewDouble( begLength ); - modified = paramList.back()->GetNewDouble( endLength ) || modified; - hyp->SetLength( begLength, true ); - hyp->SetLength( endLength, false ); - } - else if (hypType.compare("MaxElementArea") == 0) - { - StdMeshers::StdMeshers_MaxElementArea_var MEA = - StdMeshers::StdMeshers_MaxElementArea::_narrow(theHyp); - double MaxArea = MEA->GetMaxElementArea(); - modified = paramList.front()->GetNewDouble( MaxArea ); - MEA->SetMaxElementArea(MaxArea); - } - else if (hypType.compare("MaxElementVolume") == 0) - { - StdMeshers::StdMeshers_MaxElementVolume_var MEV = - StdMeshers::StdMeshers_MaxElementVolume::_narrow(theHyp); - double MaxVolume = MEV->GetMaxElementVolume() ; - modified = paramList.front()->GetNewDouble( MaxVolume ); - MEV->SetMaxElementVolume(MaxVolume); - } - else if (hypType.compare("StartEndLength") == 0) - { - if ( paramList.size() != 2 ) - return false; - StdMeshers::StdMeshers_StartEndLength_var hyp = - StdMeshers::StdMeshers_StartEndLength::_narrow(theHyp); - double begLength = hyp->GetLength( true ) ; - double endLength = hyp->GetLength( false ) ; - modified = paramList.front()->GetNewDouble( begLength ); - modified = paramList.back()->GetNewDouble( endLength ) || modified; - hyp->SetLength( begLength, true ); - hyp->SetLength( endLength, false ); - } - else if (hypType.compare("Deflection1D") == 0) - { - StdMeshers::StdMeshers_Deflection1D_var hyp = - StdMeshers::StdMeshers_Deflection1D::_narrow(theHyp); - double value = hyp->GetDeflection() ; - modified = paramList.front()->GetNewDouble( value ); - hyp->SetDeflection( value ); - } - return modified ; -} - diff --git a/src/StdMeshersGUI/StdMeshersGUI_Parameters.h b/src/StdMeshersGUI/StdMeshersGUI_Parameters.h deleted file mode 100644 index 40be46f46..000000000 --- a/src/StdMeshersGUI/StdMeshersGUI_Parameters.h +++ /dev/null @@ -1,65 +0,0 @@ -// SMESH StdMeshersGUI : GUI for standard meshers -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshersGUI_Parameters.h -// Module : SMESH -// $Header$ - -#ifndef STDMESHERSGUI_PARAMETERS_H -#define STDMESHERSGUI_PARAMETERS_H - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -#include "SMESHGUI_aParameter.h" - -#include -#include - -class StdMeshersGUI_Parameters -{ - public: - static bool HasParameters (const QString& hypType); - - static void GetParameters (const QString& hypType, - std::list & params ); - - static void GetParameters (SMESH::SMESH_Hypothesis_ptr hyp, - std::list & params ); - static void GetParameters (SMESH::SMESH_Hypothesis_ptr hyp, - std::list & paramList, - QString& params); - - static bool SetParameters(SMESH::SMESH_Hypothesis_ptr hyp, - const std::list & params ); - - static void SetInitValue(SMESHGUI_aParameterPtr param, - int initValue); - static void SetInitValue(SMESHGUI_aParameterPtr param, - double initValue); - static void SetInitValue(SMESHGUI_aParameterPtr param, - const char* initValue); - static void SetInitValue(SMESHGUI_aParameterPtr param, - SMESH::double_array& initValue); -}; -#endif diff --git a/src/StdMeshersGUI/StdMeshers_icons.po b/src/StdMeshersGUI/StdMeshers_icons.po deleted file mode 100644 index 64fe98459..000000000 --- a/src/StdMeshersGUI/StdMeshers_icons.po +++ /dev/null @@ -1,113 +0,0 @@ -# This is a Qt message file in .po format. Each msgid starts with -# a scope. This scope should *NOT* be translated - eg. "Foo::Bar" -# would be translated to "Pub", not "Foo::Pub". -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2002-05-28 10:57:43 AM CEST\n" -"PO-Revision-Date: YYYY-MM-DD\n" -"Last-Translator: FULLNAME \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - - -#Select Icon -msgid "ICON_SELECT" -msgstr "select1.png" - - -#----------------------------------------------------------- -# Hypothesis -#----------------------------------------------------------- - -#Hypo Local Length -msgid "ICON_DLG_LOCAL_LENGTH" -msgstr "mesh_hypo_length.png" - -#Hypo Nb Segments -msgid "ICON_DLG_NB_SEGMENTS" -msgstr "mesh_hypo_segment.png" - -#Hypo Max Area -msgid "ICON_DLG_MAX_ELEMENT_AREA" -msgstr "mesh_hypo_area.png" - -#Hypo Max Volume -msgid "ICON_DLG_MAX_ELEMENT_VOLUME" -msgstr "mesh_hypo_volume.png" - -#Hypo Start End Length -msgid "ICON_DLG_START_END_LENGTH" -msgstr "mesh_hypo_length.png" - -#Hypo deflection 1D -msgid "ICON_DLG_DEFLECTION1D" -msgstr "mesh_hypo_length.png" - -#Hypo Geometric 1D -msgid "ICON_DLG_GEOMETRIC_1D" -msgstr "mesh_hypo_length.png" - -#Hypo Arithmetic 1D -msgid "ICON_DLG_ARITHMETIC_1D" -msgstr "mesh_hypo_length.png" - - -#----------------------------------------------------------- -# ObjectBrowser -#----------------------------------------------------------- - -#mesh_tree_algo_regular -msgid "ICON_SMESH_TREE_ALGO_Regular_1D" -msgstr "mesh_tree_algo_regular.png" - -#mesh_tree_algo_hexa -msgid "ICON_SMESH_TREE_ALGO_Hexa_3D" -msgstr "mesh_tree_algo_hexa.png" - -#mesh_tree_algo_mefisto -msgid "ICON_SMESH_TREE_ALGO_MEFISTO_2D" -msgstr "mesh_tree_algo_mefisto.png" - -#mesh_tree_algo_quad -msgid "ICON_SMESH_TREE_ALGO_Quadrangle_2D" -msgstr "mesh_tree_algo_quad.png" - -#mesh_tree_hypo_area -msgid "ICON_SMESH_TREE_HYPO_MaxElementArea" -msgstr "mesh_tree_hypo_area.png" - -#mesh_tree_hypo_length -msgid "ICON_SMESH_TREE_HYPO_LocalLength" -msgstr "mesh_tree_hypo_length.png" - -#mesh_tree_hypo_segment -msgid "ICON_SMESH_TREE_HYPO_NumberOfSegments" -msgstr "mesh_tree_hypo_segment.png" - -#mesh_tree_hypo_volume -msgid "ICON_SMESH_TREE_HYPO_MaxElementVolume" -msgstr "mesh_tree_hypo_volume.png" - -#mesh_tree_hypo_length -msgid "ICON_SMESH_TREE_HYPO_LengthFromEdges" -msgstr "mesh_tree_hypo_length.png" - -#mesh_tree_hypo_nonconform -msgid "ICON_SMESH_TREE_HYPO_NotConformAllowed" -msgstr "mesh_tree_hypo_length.png" - -#mesh_tree_hypo_start_end_length -msgid "ICON_SMESH_TREE_HYPO_StartEndLength" -msgstr "mesh_tree_hypo_length.png" - -#mesh_tree_hypo_deflection1d -msgid "ICON_SMESH_TREE_HYPO_Deflection1D" -msgstr "mesh_tree_hypo_length.png" - -#mesh_tree_hypo_Arithmetic1d -msgid "ICON_SMESH_TREE_HYPO_Arithmetic1D" -msgstr "mesh_tree_hypo_length.png" - -#mesh_tree_hypo_propagation -msgid "ICON_SMESH_TREE_HYPO_Propagation" -msgstr "mesh_tree_hypo_length.png" diff --git a/src/StdMeshersGUI/StdMeshers_images.po b/src/StdMeshersGUI/StdMeshers_images.po deleted file mode 100644 index 64fe98459..000000000 --- a/src/StdMeshersGUI/StdMeshers_images.po +++ /dev/null @@ -1,113 +0,0 @@ -# This is a Qt message file in .po format. Each msgid starts with -# a scope. This scope should *NOT* be translated - eg. "Foo::Bar" -# would be translated to "Pub", not "Foo::Pub". -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2002-05-28 10:57:43 AM CEST\n" -"PO-Revision-Date: YYYY-MM-DD\n" -"Last-Translator: FULLNAME \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - - -#Select Icon -msgid "ICON_SELECT" -msgstr "select1.png" - - -#----------------------------------------------------------- -# Hypothesis -#----------------------------------------------------------- - -#Hypo Local Length -msgid "ICON_DLG_LOCAL_LENGTH" -msgstr "mesh_hypo_length.png" - -#Hypo Nb Segments -msgid "ICON_DLG_NB_SEGMENTS" -msgstr "mesh_hypo_segment.png" - -#Hypo Max Area -msgid "ICON_DLG_MAX_ELEMENT_AREA" -msgstr "mesh_hypo_area.png" - -#Hypo Max Volume -msgid "ICON_DLG_MAX_ELEMENT_VOLUME" -msgstr "mesh_hypo_volume.png" - -#Hypo Start End Length -msgid "ICON_DLG_START_END_LENGTH" -msgstr "mesh_hypo_length.png" - -#Hypo deflection 1D -msgid "ICON_DLG_DEFLECTION1D" -msgstr "mesh_hypo_length.png" - -#Hypo Geometric 1D -msgid "ICON_DLG_GEOMETRIC_1D" -msgstr "mesh_hypo_length.png" - -#Hypo Arithmetic 1D -msgid "ICON_DLG_ARITHMETIC_1D" -msgstr "mesh_hypo_length.png" - - -#----------------------------------------------------------- -# ObjectBrowser -#----------------------------------------------------------- - -#mesh_tree_algo_regular -msgid "ICON_SMESH_TREE_ALGO_Regular_1D" -msgstr "mesh_tree_algo_regular.png" - -#mesh_tree_algo_hexa -msgid "ICON_SMESH_TREE_ALGO_Hexa_3D" -msgstr "mesh_tree_algo_hexa.png" - -#mesh_tree_algo_mefisto -msgid "ICON_SMESH_TREE_ALGO_MEFISTO_2D" -msgstr "mesh_tree_algo_mefisto.png" - -#mesh_tree_algo_quad -msgid "ICON_SMESH_TREE_ALGO_Quadrangle_2D" -msgstr "mesh_tree_algo_quad.png" - -#mesh_tree_hypo_area -msgid "ICON_SMESH_TREE_HYPO_MaxElementArea" -msgstr "mesh_tree_hypo_area.png" - -#mesh_tree_hypo_length -msgid "ICON_SMESH_TREE_HYPO_LocalLength" -msgstr "mesh_tree_hypo_length.png" - -#mesh_tree_hypo_segment -msgid "ICON_SMESH_TREE_HYPO_NumberOfSegments" -msgstr "mesh_tree_hypo_segment.png" - -#mesh_tree_hypo_volume -msgid "ICON_SMESH_TREE_HYPO_MaxElementVolume" -msgstr "mesh_tree_hypo_volume.png" - -#mesh_tree_hypo_length -msgid "ICON_SMESH_TREE_HYPO_LengthFromEdges" -msgstr "mesh_tree_hypo_length.png" - -#mesh_tree_hypo_nonconform -msgid "ICON_SMESH_TREE_HYPO_NotConformAllowed" -msgstr "mesh_tree_hypo_length.png" - -#mesh_tree_hypo_start_end_length -msgid "ICON_SMESH_TREE_HYPO_StartEndLength" -msgstr "mesh_tree_hypo_length.png" - -#mesh_tree_hypo_deflection1d -msgid "ICON_SMESH_TREE_HYPO_Deflection1D" -msgstr "mesh_tree_hypo_length.png" - -#mesh_tree_hypo_Arithmetic1d -msgid "ICON_SMESH_TREE_HYPO_Arithmetic1D" -msgstr "mesh_tree_hypo_length.png" - -#mesh_tree_hypo_propagation -msgid "ICON_SMESH_TREE_HYPO_Propagation" -msgstr "mesh_tree_hypo_length.png" diff --git a/src/StdMeshersGUI/StdMeshers_msg_en.po b/src/StdMeshersGUI/StdMeshers_msg_en.po deleted file mode 100644 index 177b70189..000000000 --- a/src/StdMeshersGUI/StdMeshers_msg_en.po +++ /dev/null @@ -1,119 +0,0 @@ -# This is a Qt message file in .po format. Each msgid starts with -# a scope. This scope should *NOT* be translated - eg. "Foo::Bar" -# would be translated to "Pub", not "Foo::Pub". -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2002-05-28 10:46:48 AM CEST\n" -"PO-Revision-Date: YYYY-MM-DD\n" -"Last-Translator: FULLNAME \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - - -# -------------- Local Length -------------- - -msgid "SMESH_LOCAL_LENGTH_HYPOTHESIS" -msgstr "Average Length" - -msgid "SMESH_LOCAL_LENGTH_PARAM" -msgstr "Length" - -msgid "SMESH_LOCAL_LENGTH_TITLE" -msgstr "Hypothesis Construction" - -# ----------- Number of Segments ----------- - -msgid "SMESH_NB_SEGMENTS_HYPOTHESIS" -msgstr "Number of Segments" - -msgid "SMESH_NB_SEGMENTS_PARAM" -msgstr "Number of Segments" - -msgid "SMESH_DISTR_TYPE" -msgstr "Type of distribution" - -msgid "SMESH_DISTR_REGULAR" -msgstr "Equidistant distribution" - -msgid "SMESH_DISTR_SCALE" -msgstr "Scale distribution" - -msgid "SMESH_DISTR_TAB" -msgstr "Distribution with table density" - -msgid "SMESH_DISTR_EXPR" -msgstr "Distribution with analitic density" - -msgid "SMESH_NB_SEGMENTS_SCALE_PARAM" -msgstr "Scale Factor" - -msgid "SMESH_TAB_FUNC" -msgstr "Table function" - -msgid "SMESH_EXPR_FUNC" -msgstr "Density function f(t) = " - -msgid "SMESH_EXP_MODE" -msgstr "Exponent mode " - -msgid "SMESH_NB_SEGMENTS_TITLE" -msgstr "Hypothesis Construction" - -# ----------- Max. Element Area ------------ - -msgid "SMESH_MAX_ELEMENT_AREA_PARAM" -msgstr "Max. Area" - -msgid "SMESH_MAX_ELEMENT_AREA_HYPOTHESIS" -msgstr "Max. Element Area" - -msgid "SMESH_MAX_ELEMENT_AREA_TITLE" -msgstr "Hypothesis Construction" - -# ---------- Max. Element Volume ----------- - -msgid "SMESH_MAX_ELEMENT_VOLUME_PARAM" -msgstr "Max. Volume" - -msgid "SMESH_MAX_ELEMENT_VOLUME_HYPOTHESIS" -msgstr "Max. Element Volume" - -msgid "SMESH_MAX_ELEMENT_VOLUME_TITLE" -msgstr "Hypothesis Construction" - - -# -------------- Start and End Length -------------- - -msgid "SMESH_START_LENGTH_PARAM" -msgstr "Start Length" - -msgid "SMESH_END_LENGTH_PARAM" -msgstr "End Length" - -msgid "SMESH_START_END_LENGTH_HYPOTHESIS" -msgstr "Start and EndLocal Length" - -msgid "SMESH_START_END_LENGTH_TITLE" -msgstr "Hypothesis Construction" - -# -------------- Deflection 1D -------------- - -msgid "SMESH_DEFLECTION1D_HYPOTHESIS" -msgstr "Deflection 1D" - -msgid "SMESH_DEFLECTION1D_PARAM" -msgstr "Deflection" - -msgid "SMESH_DEFLECTION1D_TITLE" -msgstr "Hypothesis Construction" - -# -------------- Arithmetic 1D -------------- - -msgid "SMESH_ARITHMETIC_1D_HYPOTHESIS" -msgstr "Arithmetic 1D" - -msgid "SMESH_ARITHMETIC_1D_PARAM" -msgstr "Arithmetic Reason" - -msgid "SMESH_ARITHMETIC_1D_TITLE" -msgstr "Hypothesis Construction" diff --git a/src/StdMeshers_I/Makefile.in b/src/StdMeshers_I/Makefile.in deleted file mode 100644 index 6b50f0c63..000000000 --- a/src/StdMeshers_I/Makefile.in +++ /dev/null @@ -1,98 +0,0 @@ -# SMESH StdMeshers_I : idl implementation based on 'StdMeshersPlugin' unit's classes -# -# Copyright (C) 2003 CEA -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -# -# -# -# File : Makefile.in -# Author : Julia DOROVSKIKH -# Module : SMESH -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl - - -@COMMENCE@ - -# EXPORT_PYSCRIPTS = smeshpy.py SMESH_test.py - -# header files -EXPORT_HEADERS = \ - StdMeshers_LocalLength_i.hxx \ - StdMeshers_StartEndLength_i.hxx \ - StdMeshers_Arithmetic1D_i.hxx \ - StdMeshers_NumberOfSegments_i.hxx \ - StdMeshers_Deflection1D_i.hxx \ - StdMeshers_Propagation_i.hxx \ - StdMeshers_LengthFromEdges_i.hxx \ - StdMeshers_MaxElementArea_i.hxx \ - StdMeshers_MaxElementVolume_i.hxx \ - StdMeshers_NotConformAllowed_i.hxx \ - StdMeshers_Regular_1D_i.hxx \ - StdMeshers_Quadrangle_2D_i.hxx \ - StdMeshers_MEFISTO_2D_i.hxx \ - StdMeshers_Hexa_3D_i.hxx - -# Libraries targets - -LIB= libStdMeshersEngine.la - -LIB_SRC = \ - StdMeshers_i.cxx \ - StdMeshers_LocalLength_i.cxx \ - StdMeshers_StartEndLength_i.cxx \ - StdMeshers_Arithmetic1D_i.cxx \ - StdMeshers_NumberOfSegments_i.cxx \ - StdMeshers_Deflection1D_i.cxx \ - StdMeshers_Propagation_i.cxx \ - StdMeshers_LengthFromEdges_i.cxx \ - StdMeshers_MaxElementArea_i.cxx \ - StdMeshers_MaxElementVolume_i.cxx \ - StdMeshers_NotConformAllowed_i.cxx \ - StdMeshers_Regular_1D_i.cxx \ - StdMeshers_Quadrangle_2D_i.cxx \ - StdMeshers_MEFISTO_2D_i.cxx \ - StdMeshers_Hexa_3D_i.cxx - -LIB_SERVER_IDL = SMESH_BasicHypothesis.idl - -LIB_CLIENT_IDL = \ - SALOMEDS.idl SALOME_Exception.idl \ - GEOM_Gen.idl MED.idl SALOMEDS_Attributes.idl \ - SMESH_Gen.idl SMESH_Hypothesis.idl SMESH_Group.idl \ - SALOME_Comm.idl - -# Executables targets -BIN = -BIN_SRC = - -# additionnal information to compil and link file -CPPFLAGS+= $(OCC_INCLUDES) $(HDF5_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome \ - -I${GEOM_ROOT_DIR}/include/salome $(BOOST_CPPFLAGS) -CXXFLAGS+= $(OCC_CXXFLAGS) $(HDF5_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome -I${GEOM_ROOT_DIR}/include/salome - -#IDLCXXFLAGS+= -Wbtp - -#LDFLAGS+= $(HDF5_LIBS) -lStdMeshers -lSMESHEngine -lSalomeLifeCycleCORBA -L${KERNEL_ROOT_DIR}/lib/salome -L${GEOM_ROOT_DIR}/lib/salome -lSalomeGenericObj -LDFLAGS+= $(HDF5_LIBS) -lStdMeshers -lSMESHEngine -L${KERNEL_ROOT_DIR}/lib/salome - -@CONCLUDE@ diff --git a/src/StdMeshers_I/StdMeshers_Arithmetic1D_i.cxx b/src/StdMeshers_I/StdMeshers_Arithmetic1D_i.cxx deleted file mode 100644 index 9c39bc72b..000000000 --- a/src/StdMeshers_I/StdMeshers_Arithmetic1D_i.cxx +++ /dev/null @@ -1,144 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Arithmetic1D_i.cxx -// Author : Damien COQUERET, OCC -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_Arithmetic1D_i.hxx" -#include "SMESH_Gen_i.hxx" -#include "SMESH_Gen.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" - -#include - -//============================================================================= -/*! - * StdMeshers_Arithmetic1D_i::StdMeshers_Arithmetic1D_i - * - * Constructor - */ -//============================================================================= - -StdMeshers_Arithmetic1D_i::StdMeshers_Arithmetic1D_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ) -{ - MESSAGE( "StdMeshers_Arithmetic1D_i::StdMeshers_Arithmetic1D_i" ); - myBaseImpl = new ::StdMeshers_Arithmetic1D( theGenImpl->GetANewId(), - theStudyId, - theGenImpl ); -} - -//============================================================================= -/*! - * StdMeshers_Arithmetic1D_i::~StdMeshers_Arithmetic1D_i - * - * Destructor - */ -//============================================================================= - -StdMeshers_Arithmetic1D_i::~StdMeshers_Arithmetic1D_i() -{ - MESSAGE( "StdMeshers_Arithmetic1D_i::~StdMeshers_Arithmetic1D_i" ); -} - -//============================================================================= -/*! - * StdMeshers_Arithmetic1D_i::SetLength - * - * Set length - */ -//============================================================================= - -void StdMeshers_Arithmetic1D_i::SetLength(CORBA::Double theLength, - CORBA::Boolean theIsStart ) - throw ( SALOME::SALOME_Exception ) -{ - MESSAGE( "StdMeshers_StartEndLength_i::SetLength" ); - ASSERT( myBaseImpl ); - try { - this->GetImpl()->SetLength( theLength, theIsStart ); - } - catch ( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } - - // Update Python script - TCollection_AsciiString aStr, aStrLen ((double)theLength), aStrFlag ((int)theIsStart); - SMESH_Gen_i::AddObject(aStr, _this()) += ".SetLength("; - aStr += aStrLen + ", " + aStrFlag + ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); -} - -//============================================================================= -/*! - * StdMeshers_Arithmetic1D_i::GetLength - * - * Get length - */ -//============================================================================= - -CORBA::Double StdMeshers_Arithmetic1D_i::GetLength( CORBA::Boolean theIsStart) -{ - MESSAGE( "StdMeshers_StartEndLength_i::GetLength" ); - ASSERT( myBaseImpl ); - return this->GetImpl()->GetLength( theIsStart ); -} - -//============================================================================= -/*! - * StdMeshers_Arithmetic1D_i::GetImpl - * - * Get implementation - */ -//============================================================================= - -::StdMeshers_Arithmetic1D* StdMeshers_Arithmetic1D_i::GetImpl() -{ - MESSAGE( "StdMeshers_Arithmetic1D_i::GetImpl" ); - return ( ::StdMeshers_Arithmetic1D* )myBaseImpl; -} - -//================================================================================ -/*! - * \brief Verify whether hypothesis supports given entity type - * \param type - dimension (see SMESH::Dimension enumeration) - * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise - * - * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration) - */ -//================================================================================ -CORBA::Boolean StdMeshers_Arithmetic1D_i::IsDimSupported( SMESH::Dimension type ) -{ - return type == SMESH::DIM_1D; -} - diff --git a/src/StdMeshers_I/StdMeshers_Arithmetic1D_i.hxx b/src/StdMeshers_I/StdMeshers_Arithmetic1D_i.hxx deleted file mode 100644 index 090f0a7d2..000000000 --- a/src/StdMeshers_I/StdMeshers_Arithmetic1D_i.hxx +++ /dev/null @@ -1,66 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Arithmetic1D_i.hxx -// Author : Damien COQUERET, OCC -// Module : SMESH -// $Header$ - -#ifndef _SMESH_ARITHMETIC1D_I_HXX_ -#define _SMESH_ARITHMETIC1D_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESH_Hypothesis_i.hxx" -#include "StdMeshers_Arithmetic1D.hxx" - -// ====================================================== -// Arithmetic 1D hypothesis -// ====================================================== -class StdMeshers_Arithmetic1D_i: - public virtual POA_StdMeshers::StdMeshers_Arithmetic1D, - public virtual SMESH_Hypothesis_i -{ -public: - // Constructor - StdMeshers_Arithmetic1D_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ); - // Destructor - virtual ~StdMeshers_Arithmetic1D_i(); - - // Set length - void SetLength( CORBA::Double theLength, CORBA::Boolean theIsStart ) - throw ( SALOME::SALOME_Exception ); - // Get length - CORBA::Double GetLength(CORBA::Boolean theIsStart); - - // Get implementation - ::StdMeshers_Arithmetic1D* GetImpl(); - - // Verify whether hypothesis supports given entity type - CORBA::Boolean IsDimSupported( SMESH::Dimension type ); -}; - -#endif diff --git a/src/StdMeshers_I/StdMeshers_Deflection1D_i.cxx b/src/StdMeshers_I/StdMeshers_Deflection1D_i.cxx deleted file mode 100644 index 0f3f4a942..000000000 --- a/src/StdMeshers_I/StdMeshers_Deflection1D_i.cxx +++ /dev/null @@ -1,144 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Deflection1D_i.cxx -// Moved here from SMESH_LocalLength_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_Deflection1D_i.hxx" -#include "SMESH_Gen_i.hxx" -#include "SMESH_Gen.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" - -#include - -//============================================================================= -/*! - * StdMeshers_Deflection1D_i::StdMeshers_Deflection1D_i - * - * Constructor - */ -//============================================================================= - -StdMeshers_Deflection1D_i::StdMeshers_Deflection1D_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ) -{ - MESSAGE( "StdMeshers_Deflection1D_i::StdMeshers_Deflection1D_i" ); - myBaseImpl = new ::StdMeshers_Deflection1D( theGenImpl->GetANewId(), - theStudyId, - theGenImpl ); -} - -//============================================================================= -/*! - * StdMeshers_Deflection1D_i::~StdMeshers_Deflection1D_i - * - * Destructor - */ -//============================================================================= - -StdMeshers_Deflection1D_i::~StdMeshers_Deflection1D_i() -{ - MESSAGE( "StdMeshers_Deflection1D_i::~StdMeshers_Deflection1D_i" ); -} - -//============================================================================= -/*! - * StdMeshers_Deflection1D_i::SetDeflection - * - * Set deflection - */ -//============================================================================= - -void StdMeshers_Deflection1D_i::SetDeflection( CORBA::Double theValue ) - throw ( SALOME::SALOME_Exception ) -{ - MESSAGE( "StdMeshers_Deflection1D_i::SetDeflection" ); - ASSERT( myBaseImpl ); - try { - this->GetImpl()->SetDeflection( theValue ); - } - catch ( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } - - // Update Python script - TCollection_AsciiString aStr, aStrVal ((double)theValue); - SMESH_Gen_i::AddObject(aStr, _this()) += ".SetDeflection("; - aStr += aStrVal + ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); -} - -//============================================================================= -/*! - * StdMeshers_Deflection1D_i::GetDeflection - * - * Get deflection - */ -//============================================================================= - -CORBA::Double StdMeshers_Deflection1D_i::GetDeflection() -{ - MESSAGE( "StdMeshers_Deflection1D_i::GetDeflection" ); - ASSERT( myBaseImpl ); - return this->GetImpl()->GetDeflection(); -} - -//============================================================================= -/*! - * StdMeshers_Deflection1D_i::GetImpl - * - * Get implementation - */ -//============================================================================= - -::StdMeshers_Deflection1D* StdMeshers_Deflection1D_i::GetImpl() -{ - MESSAGE( "StdMeshers_Deflection1D_i::GetImpl" ); - return ( ::StdMeshers_Deflection1D* )myBaseImpl; -} - -//================================================================================ -/*! - * \brief Verify whether hypothesis supports given entity type - * \param type - dimension (see SMESH::Dimension enumeration) - * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise - * - * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration) - */ -//================================================================================ -CORBA::Boolean StdMeshers_Deflection1D_i::IsDimSupported( SMESH::Dimension type ) -{ - return type == SMESH::DIM_1D; -} - diff --git a/src/StdMeshers_I/StdMeshers_Deflection1D_i.hxx b/src/StdMeshers_I/StdMeshers_Deflection1D_i.hxx deleted file mode 100644 index 138b1d9cf..000000000 --- a/src/StdMeshers_I/StdMeshers_Deflection1D_i.hxx +++ /dev/null @@ -1,70 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Deflection1D_i.hxx -// Moved here from SMESH_LocalLength_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_Deflection1D_I_HXX_ -#define _SMESH_Deflection1D_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESH_Hypothesis_i.hxx" -#include "StdMeshers_Deflection1D.hxx" - -class SMESH_Gen; - -// ====================================================== -// Local Length hypothesis -// ====================================================== -class StdMeshers_Deflection1D_i: - public virtual POA_StdMeshers::StdMeshers_Deflection1D, - public virtual SMESH_Hypothesis_i -{ -public: - // Constructor - StdMeshers_Deflection1D_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ); - // Destructor - virtual ~StdMeshers_Deflection1D_i(); - - // Set deflection - void SetDeflection( CORBA::Double theLength ) - throw ( SALOME::SALOME_Exception ); - // Get deflection - CORBA::Double GetDeflection(); - - // Get implementation - ::StdMeshers_Deflection1D* GetImpl(); - - // Verify whether hypothesis supports given entity type - CORBA::Boolean IsDimSupported( SMESH::Dimension type ); -}; - -#endif - diff --git a/src/StdMeshers_I/StdMeshers_Hexa_3D_i.cxx b/src/StdMeshers_I/StdMeshers_Hexa_3D_i.cxx deleted file mode 100644 index 0ca4839ba..000000000 --- a/src/StdMeshers_I/StdMeshers_Hexa_3D_i.cxx +++ /dev/null @@ -1,84 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Hexa_3D_i.cxx -// Moved here from SMESH_Hexa_3D_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_Hexa_3D_i.hxx" -#include "SMESH_Gen.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * StdMeshers_Hexa_3D_i::StdMeshers_Hexa_3D_i - * - * Constructor - */ -//============================================================================= - -StdMeshers_Hexa_3D_i::StdMeshers_Hexa_3D_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ), - SMESH_Algo_i( thePOA ), - SMESH_3D_Algo_i( thePOA ) -{ - MESSAGE( "StdMeshers_Hexa_3D_i::StdMeshers_Hexa_3D_i" ); - myBaseImpl = new ::StdMeshers_Hexa_3D( theGenImpl->GetANewId(), - theStudyId, - theGenImpl ); -} - -//============================================================================= -/*! - * StdMeshers_Hexa_3D_i::~StdMeshers_Hexa_3D_i - * - * Destructor - */ -//============================================================================= - -StdMeshers_Hexa_3D_i::~StdMeshers_Hexa_3D_i() -{ - MESSAGE( "StdMeshers_Hexa_3D_i::~StdMeshers_Hexa_3D_i" ); -} - -//============================================================================= -/*! - * StdMeshers_Hexa_3D_i::GetImpl - * - * Get implementation - */ -//============================================================================= - -::StdMeshers_Hexa_3D* StdMeshers_Hexa_3D_i::GetImpl() -{ - MESSAGE( "StdMeshers_Hexa_3D_i::GetImpl" ); - return ( ::StdMeshers_Hexa_3D* )myBaseImpl; -} diff --git a/src/StdMeshers_I/StdMeshers_Hexa_3D_i.hxx b/src/StdMeshers_I/StdMeshers_Hexa_3D_i.hxx deleted file mode 100644 index 91bcabdb8..000000000 --- a/src/StdMeshers_I/StdMeshers_Hexa_3D_i.hxx +++ /dev/null @@ -1,61 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Hexa_3D_i.hxx -// Moved here from SMESH_Hexa_3D_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_HEXA_3D_I_HXX_ -#define _SMESH_HEXA_3D_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESH_3D_Algo_i.hxx" -#include "StdMeshers_Hexa_3D.hxx" - -class SMESH_Gen; - -// ====================================================== -// Hexaedron 3d algorithm -// ====================================================== -class StdMeshers_Hexa_3D_i: - public virtual POA_StdMeshers::StdMeshers_Hexa_3D, - public virtual SMESH_3D_Algo_i -{ -public: - // Constructor - StdMeshers_Hexa_3D_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ); - - // Destructor - virtual ~StdMeshers_Hexa_3D_i(); - - // Get implementation - ::StdMeshers_Hexa_3D* GetImpl(); -}; - -#endif diff --git a/src/StdMeshers_I/StdMeshers_LengthFromEdges_i.cxx b/src/StdMeshers_I/StdMeshers_LengthFromEdges_i.cxx deleted file mode 100644 index 35d871c56..000000000 --- a/src/StdMeshers_I/StdMeshers_LengthFromEdges_i.cxx +++ /dev/null @@ -1,135 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_LengthFromEdges_i.cxx -// Moved here from SMESH_LengthFromEdges_i.cxx -// Author : Nadir BOUHAMOU CEA/DEN, Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_LengthFromEdges_i.hxx" -#include "SMESH_Gen.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * StdMeshers_LengthFromEdges_i::StdMeshers_LengthFromEdges_i - * - * Constructor - */ -//============================================================================= - -StdMeshers_LengthFromEdges_i::StdMeshers_LengthFromEdges_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ) -{ - MESSAGE( "StdMeshers_LengthFromEdges_i::StdMeshers_LengthFromEdges_i" ); - myBaseImpl = new ::StdMeshers_LengthFromEdges( theGenImpl->GetANewId(), - theStudyId, - theGenImpl ); -} - -//============================================================================= -/*! - * StdMeshers_LengthFromEdges_i::~StdMeshers_LengthFromEdges_i - * - * Destructor - */ -//============================================================================= - -StdMeshers_LengthFromEdges_i::~StdMeshers_LengthFromEdges_i() -{ - MESSAGE( "StdMeshers_LengthFromEdges_i::~StdMeshers_LengthFromEdges_i" ); -} - -//============================================================================= -/*! - * StdMeshers_LengthFromEdges_i::SetMode - * - * Set mode - */ -//============================================================================= - -void StdMeshers_LengthFromEdges_i::SetMode( CORBA::Long theMode ) - throw (SALOME::SALOME_Exception) -{ - MESSAGE( "StdMeshers_LengthFromEdges_i::SetMode" ); - ASSERT( myBaseImpl ); - try { - this->GetImpl()->SetMode( theMode ); - } - catch ( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } -} - -//============================================================================= -/*! - * StdMeshers_LengthFromEdges_i::GetMode - * - * Get mode - */ -//============================================================================= - -CORBA::Long StdMeshers_LengthFromEdges_i::GetMode() -{ - MESSAGE( "StdMeshers_LengthFromEdges_i::GetMode" ); - ASSERT( myBaseImpl ); - return this->GetImpl()->GetMode(); -} - - -//============================================================================= -/*! - * StdMeshers_LengthFromEdges_i::GetImpl - * - * Get implementation - */ -//============================================================================= - -::StdMeshers_LengthFromEdges* StdMeshers_LengthFromEdges_i::GetImpl() -{ - MESSAGE( "StdMeshers_LengthFromEdges_i::GetImpl" ); - return ( ::StdMeshers_LengthFromEdges* )myBaseImpl; -} - -//================================================================================ -/*! - * \brief Verify whether hypothesis supports given entity type - * \param type - dimension (see SMESH::Dimension enumeration) - * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise - * - * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration) - */ -//================================================================================ -CORBA::Boolean StdMeshers_LengthFromEdges_i::IsDimSupported( SMESH::Dimension type ) -{ - return type == SMESH::DIM_2D; -} - diff --git a/src/StdMeshers_I/StdMeshers_LengthFromEdges_i.hxx b/src/StdMeshers_I/StdMeshers_LengthFromEdges_i.hxx deleted file mode 100644 index 1075278d7..000000000 --- a/src/StdMeshers_I/StdMeshers_LengthFromEdges_i.hxx +++ /dev/null @@ -1,68 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_LengthFromEdges_i.hxx -// Moved here from SMESH_LengthFromEdges_i.hxx -// Author : Nadir BOUHAMOU CEA/DEN, Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_LENGTHFROMEDGES_I_HXX_ -#define _SMESH_LENGTHFROMEDGES_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESH_Hypothesis_i.hxx" -#include "StdMeshers_LengthFromEdges.hxx" - -// ====================================================== -// Length from edges hypothesis -// ====================================================== -class StdMeshers_LengthFromEdges_i: - public virtual POA_StdMeshers::StdMeshers_LengthFromEdges, - public virtual SMESH_Hypothesis_i -{ -public: - // Constructor - StdMeshers_LengthFromEdges_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ); - // Destructor - virtual ~StdMeshers_LengthFromEdges_i(); - - // Set mode - void SetMode( CORBA::Long theMode ) - throw ( SALOME::SALOME_Exception ); - // Get mode - CORBA::Long GetMode(); - - // Get implementation - ::StdMeshers_LengthFromEdges* GetImpl(); - - // Verify whether hypothesis supports given entity type - CORBA::Boolean IsDimSupported( SMESH::Dimension type ); -}; - -#endif - diff --git a/src/StdMeshers_I/StdMeshers_LocalLength_i.cxx b/src/StdMeshers_I/StdMeshers_LocalLength_i.cxx deleted file mode 100644 index a37b8e14a..000000000 --- a/src/StdMeshers_I/StdMeshers_LocalLength_i.cxx +++ /dev/null @@ -1,144 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_LocalLength_i.cxx -// Moved here from SMESH_LocalLength_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_LocalLength_i.hxx" -#include "SMESH_Gen_i.hxx" -#include "SMESH_Gen.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" - -#include - -//============================================================================= -/*! - * StdMeshers_LocalLength_i::StdMeshers_LocalLength_i - * - * Constructor - */ -//============================================================================= - -StdMeshers_LocalLength_i::StdMeshers_LocalLength_i( PortableServer::POA_ptr 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 ); -} - -//============================================================================= -/*! - * StdMeshers_LocalLength_i::~StdMeshers_LocalLength_i - * - * Destructor - */ -//============================================================================= - -StdMeshers_LocalLength_i::~StdMeshers_LocalLength_i() -{ - MESSAGE( "StdMeshers_LocalLength_i::~StdMeshers_LocalLength_i" ); -} - -//============================================================================= -/*! - * StdMeshers_LocalLength_i::SetLength - * - * Set length - */ -//============================================================================= - -void StdMeshers_LocalLength_i::SetLength( CORBA::Double theLength ) - throw ( SALOME::SALOME_Exception ) -{ - MESSAGE( "StdMeshers_LocalLength_i::SetLength" ); - ASSERT( myBaseImpl ); - try { - this->GetImpl()->SetLength( theLength ); - } - catch ( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } - - // Update Python script - TCollection_AsciiString aStr, aStrLen ((double)theLength); - SMESH_Gen_i::AddObject(aStr, _this()) += ".SetLength("; - aStr += aStrLen + ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); -} - -//============================================================================= -/*! - * StdMeshers_LocalLength_i::GetLength - * - * Get length - */ -//============================================================================= - -CORBA::Double StdMeshers_LocalLength_i::GetLength() -{ - MESSAGE( "StdMeshers_LocalLength_i::GetLength" ); - ASSERT( myBaseImpl ); - return this->GetImpl()->GetLength(); -} - -//============================================================================= -/*! - * StdMeshers_LocalLength_i::GetImpl - * - * Get implementation - */ -//============================================================================= - -::StdMeshers_LocalLength* StdMeshers_LocalLength_i::GetImpl() -{ - MESSAGE( "StdMeshers_LocalLength_i::GetImpl" ); - return ( ::StdMeshers_LocalLength* )myBaseImpl; -} - -//================================================================================ -/*! - * \brief Verify whether hypothesis supports given entity type - * \param type - dimension (see SMESH::Dimension enumeration) - * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise - * - * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration) - */ -//================================================================================ -CORBA::Boolean StdMeshers_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 deleted file mode 100644 index f0b6b21e6..000000000 --- a/src/StdMeshers_I/StdMeshers_LocalLength_i.hxx +++ /dev/null @@ -1,70 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_LocalLength_i.hxx -// Moved here from SMESH_LocalLength_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_LOCALLENGTH_I_HXX_ -#define _SMESH_LOCALLENGTH_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESH_Hypothesis_i.hxx" -#include "StdMeshers_LocalLength.hxx" - -class SMESH_Gen; - -// ====================================================== -// Local Length hypothesis -// ====================================================== -class StdMeshers_LocalLength_i: - public virtual POA_StdMeshers::StdMeshers_LocalLength, - public virtual SMESH_Hypothesis_i -{ -public: - // Constructor - StdMeshers_LocalLength_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ); - // Destructor - virtual ~StdMeshers_LocalLength_i(); - - // Set length - void SetLength( CORBA::Double theLength ) - throw ( SALOME::SALOME_Exception ); - // Get length - CORBA::Double GetLength(); - - // Get implementation - ::StdMeshers_LocalLength* GetImpl(); - - // Verify whether hypothesis supports given entity type - CORBA::Boolean IsDimSupported( SMESH::Dimension type ); -}; - -#endif - diff --git a/src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.cxx b/src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.cxx deleted file mode 100644 index efcc37c5c..000000000 --- a/src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.cxx +++ /dev/null @@ -1,85 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_MEFISTO_2D_i.cxx -// Moved here from SMESH_MEFISTO_2D_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_MEFISTO_2D_i.hxx" -#include "SMESH_Gen.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * StdMeshers_MEFISTO_2D_i::StdMeshers_MEFISTO_2D_i - * - * Constructor - */ -//============================================================================= - -StdMeshers_MEFISTO_2D_i::StdMeshers_MEFISTO_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_MEFISTO_2D_i::StdMeshers_MEFISTO_2D_i" ); - myBaseImpl = new ::StdMeshers_MEFISTO_2D( theGenImpl->GetANewId(), - theStudyId, - theGenImpl ); -} - -//============================================================================= -/*! - * StdMeshers_MEFISTO_2D_i::~StdMeshers_MEFISTO_2D_i - * - * Destructor - */ -//============================================================================= - -StdMeshers_MEFISTO_2D_i::~StdMeshers_MEFISTO_2D_i() -{ - MESSAGE( "StdMeshers_MEFISTO_2D_i::~StdMeshers_MEFISTO_2D_i" ); -} - -//============================================================================= -/*! - * StdMeshers_MEFISTO_2D_i::GetImpl - * - * Get implementation - */ -//============================================================================= - -::StdMeshers_MEFISTO_2D* StdMeshers_MEFISTO_2D_i::GetImpl() -{ - MESSAGE( "StdMeshers_MEFISTO_2D_i::GetImpl" ); - return ( ::StdMeshers_MEFISTO_2D* )myBaseImpl; -} - diff --git a/src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.hxx b/src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.hxx deleted file mode 100644 index d7021df8a..000000000 --- a/src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.hxx +++ /dev/null @@ -1,61 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_MEFISTO_2D_i.hxx -// Moved here from SMESH_MEFISTO_2D_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _StdMeshers_MEFISTO_2D_I_HXX_ -#define _StdMeshers_MEFISTO_2D_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESH_2D_Algo_i.hxx" -#include "StdMeshers_MEFISTO_2D.hxx" - -class SMESH_Gen; - -// ====================================================== -// Triangle (MEFISTO) 2d algorithm -// ====================================================== -class StdMeshers_MEFISTO_2D_i: - public virtual POA_StdMeshers::StdMeshers_MEFISTO_2D, - public virtual SMESH_2D_Algo_i -{ -public: - // Constructor - StdMeshers_MEFISTO_2D_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ); - - // Destructor - virtual ~StdMeshers_MEFISTO_2D_i(); - - // Get implementation - ::StdMeshers_MEFISTO_2D* GetImpl(); -}; - -#endif diff --git a/src/StdMeshers_I/StdMeshers_MaxElementArea_i.cxx b/src/StdMeshers_I/StdMeshers_MaxElementArea_i.cxx deleted file mode 100644 index c7ab79555..000000000 --- a/src/StdMeshers_I/StdMeshers_MaxElementArea_i.cxx +++ /dev/null @@ -1,144 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_MaxElementArea_i.cxx -// Moved here from SMESH_MaxElementArea_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_MaxElementArea_i.hxx" -#include "SMESH_Gen_i.hxx" -#include "SMESH_Gen.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" - -#include - -//============================================================================= -/*! - * StdMeshers_MaxElementArea_i::StdMeshers_MaxElementArea_i - * - * Constructor - */ -//============================================================================= - -StdMeshers_MaxElementArea_i::StdMeshers_MaxElementArea_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ) -{ - MESSAGE( "StdMeshers_MaxElementArea_i::StdMeshers_MaxElementArea_i" ); - myBaseImpl = new ::StdMeshers_MaxElementArea( theGenImpl->GetANewId(), - theStudyId, - theGenImpl ); -} - -//============================================================================= -/*! - * StdMeshers_MaxElementArea_i::~StdMeshers_MaxElementArea_i - * - * Destructor - */ -//============================================================================= - -StdMeshers_MaxElementArea_i::~StdMeshers_MaxElementArea_i() -{ - MESSAGE( "StdMeshers_MaxElementArea_i::~StdMeshers_MaxElementArea_i" ); -} - -//============================================================================= -/*! - * StdMeshers_MaxElementArea_i::SetMaxElementArea - * - * Set maximum element area - */ -//============================================================================= - -void StdMeshers_MaxElementArea_i::SetMaxElementArea( CORBA::Double theArea ) - throw ( SALOME::SALOME_Exception ) -{ - MESSAGE( "StdMeshers_MaxElementArea_i::SetMaxElementArea" ); - ASSERT( myBaseImpl ); - try { - this->GetImpl()->SetMaxArea( theArea ); - } - catch (SALOME_Exception& S_ex) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } - - // Update Python script - TCollection_AsciiString aStr, aStrArea ((double)theArea); - SMESH_Gen_i::AddObject(aStr, _this()) += ".SetMaxElementArea("; - aStr += aStrArea + ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); -} - -//============================================================================= -/*! - * StdMeshers_MaxElementArea_i::GetMaxElementArea - * - * Get maximum element area - */ -//============================================================================= - -CORBA::Double StdMeshers_MaxElementArea_i::GetMaxElementArea() -{ - MESSAGE( "StdMeshers_MaxElementArea_i::GetMaxElementArea" ); - ASSERT( myBaseImpl ); - return this->GetImpl()->GetMaxArea(); -} - -//============================================================================= -/*! - * StdMeshers_MaxElementArea_i::GetImpl - * - * Get implementation - */ -//============================================================================= - -::StdMeshers_MaxElementArea* StdMeshers_MaxElementArea_i::GetImpl() -{ - MESSAGE( "StdMeshers_MaxElementArea_i::GetImpl" ); - return ( ::StdMeshers_MaxElementArea* )myBaseImpl; -} - -//================================================================================ -/*! - * \brief Verify whether hypothesis supports given entity type - * \param type - dimension (see SMESH::Dimension enumeration) - * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise - * - * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration) - */ -//================================================================================ -CORBA::Boolean StdMeshers_MaxElementArea_i::IsDimSupported( SMESH::Dimension type ) -{ - return type == SMESH::DIM_2D; -} - diff --git a/src/StdMeshers_I/StdMeshers_MaxElementArea_i.hxx b/src/StdMeshers_I/StdMeshers_MaxElementArea_i.hxx deleted file mode 100644 index 39dde7639..000000000 --- a/src/StdMeshers_I/StdMeshers_MaxElementArea_i.hxx +++ /dev/null @@ -1,67 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_MaxElementArea_i.hxx -// Moved here from SMESH_MaxElementArea_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_MAXELEMENTAREA_I_HXX_ -#define _SMESH_MAXELEMENTAREA_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESH_Hypothesis_i.hxx" -#include "StdMeshers_MaxElementArea.hxx" - -// ====================================================== -// Maximum Element Area hypothesis -// ====================================================== -class StdMeshers_MaxElementArea_i: - public virtual POA_StdMeshers::StdMeshers_MaxElementArea, - public virtual SMESH_Hypothesis_i -{ -public: - // Constructor - StdMeshers_MaxElementArea_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ); - // Destructor - virtual ~StdMeshers_MaxElementArea_i(); - - // Set maximum element area - void SetMaxElementArea( CORBA::Double theArea ) - throw ( SALOME::SALOME_Exception ); - // Get maximum element area - CORBA::Double GetMaxElementArea(); - - // Get implementation - ::StdMeshers_MaxElementArea* GetImpl(); - - // Verify whether hypothesis supports given entity type - CORBA::Boolean IsDimSupported( SMESH::Dimension type ); -}; - -#endif diff --git a/src/StdMeshers_I/StdMeshers_MaxElementVolume_i.cxx b/src/StdMeshers_I/StdMeshers_MaxElementVolume_i.cxx deleted file mode 100644 index d8686ab33..000000000 --- a/src/StdMeshers_I/StdMeshers_MaxElementVolume_i.cxx +++ /dev/null @@ -1,144 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_MaxElementVolume_i.cxx -// Moved here from SMESH_MaxElementVolume_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_MaxElementVolume_i.hxx" -#include "SMESH_Gen_i.hxx" -#include "SMESH_Gen.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" - -#include - -//============================================================================= -/*! - * StdMeshers_MaxElementVolume_i::StdMeshers_MaxElementVolume_i - * - * Constructor - */ -//============================================================================= - -StdMeshers_MaxElementVolume_i::StdMeshers_MaxElementVolume_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ) -{ - MESSAGE( "StdMeshers_MaxElementVolume_i::StdMeshers_MaxElementVolume_i" ); - myBaseImpl = new ::StdMeshers_MaxElementVolume( theGenImpl->GetANewId(), - theStudyId, - theGenImpl ); -} - -//============================================================================= -/*! - * StdMeshers_MaxElementVolume_i::~StdMeshers_MaxElementVolume_i - * - * Destructor - */ -//============================================================================= - -StdMeshers_MaxElementVolume_i::~StdMeshers_MaxElementVolume_i() -{ - MESSAGE( "StdMeshers_MaxElementVolume_i::~StdMeshers_MaxElementVolume_i()" ); -} - -//============================================================================= -/*! - * StdMeshers_MaxElementVolume_i::SetMaxElementVolume - * - * Set maximum element volume - */ -//============================================================================= - -void StdMeshers_MaxElementVolume_i::SetMaxElementVolume( CORBA::Double theVolume ) - throw ( SALOME::SALOME_Exception ) -{ - MESSAGE( "StdMeshers_MaxElementVolume_i::SetMaxElementVolume" ); - ASSERT( myBaseImpl ); - try { - this->GetImpl()->SetMaxVolume( theVolume ); - } - catch (SALOME_Exception& S_ex) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } - - // Update Python script - TCollection_AsciiString aStr, aStrVol ((double)theVolume); - SMESH_Gen_i::AddObject(aStr, _this()) += ".SetMaxElementVolume("; - aStr += aStrVol + ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); -} - -//============================================================================= -/*! - * StdMeshers_MaxElementVolume_i::GetMaxElementVolume - * - * Get maximum element volume - */ -//============================================================================= - -CORBA::Double StdMeshers_MaxElementVolume_i::GetMaxElementVolume() -{ - MESSAGE( "StdMeshers_MaxElementVolume_i::GetMaxElementVolume" ); - ASSERT( myBaseImpl ); - return this->GetImpl()->GetMaxVolume(); -} - -//============================================================================= -/*! - * StdMeshers_MaxElementVolume_i::GetImpl - * - * Get implementation - */ -//============================================================================= - -::StdMeshers_MaxElementVolume* StdMeshers_MaxElementVolume_i::GetImpl() -{ - MESSAGE( "StdMeshers_MaxElementVolume_i::GetImpl" ); - return ( ::StdMeshers_MaxElementVolume* )myBaseImpl; -} - -//================================================================================ -/*! - * \brief Verify whether hypothesis supports given entity type - * \param type - dimension (see SMESH::Dimension enumeration) - * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise - * - * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration) - */ -//================================================================================ -CORBA::Boolean StdMeshers_MaxElementVolume_i::IsDimSupported( SMESH::Dimension type ) -{ - return type == SMESH::DIM_3D; -} - diff --git a/src/StdMeshers_I/StdMeshers_MaxElementVolume_i.hxx b/src/StdMeshers_I/StdMeshers_MaxElementVolume_i.hxx deleted file mode 100644 index 928fab59a..000000000 --- a/src/StdMeshers_I/StdMeshers_MaxElementVolume_i.hxx +++ /dev/null @@ -1,67 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_MaxElementVolume_i.hxx -// Moved here from SMESH_MaxElementVolume_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_MAXELEMENTVOLUME_I_HXX_ -#define _SMESH_MAXELEMENTVOLUME_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESH_Hypothesis_i.hxx" -#include "StdMeshers_MaxElementVolume.hxx" - -// ====================================================== -// Maximum Element Volume hypothesis -// ====================================================== -class StdMeshers_MaxElementVolume_i: - public virtual POA_StdMeshers::StdMeshers_MaxElementVolume, - public virtual SMESH_Hypothesis_i -{ -public: - // Constructor - StdMeshers_MaxElementVolume_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ); - // Destructor - virtual ~StdMeshers_MaxElementVolume_i(); - - // Set maximum element volume - void SetMaxElementVolume( CORBA::Double theVolume ) - throw (SALOME::SALOME_Exception); - // Get maximum element volume - CORBA::Double GetMaxElementVolume(); - - // Get implementation - ::StdMeshers_MaxElementVolume* GetImpl(); - - // Verify whether hypothesis supports given entity type - CORBA::Boolean IsDimSupported( SMESH::Dimension type ); -}; - -#endif diff --git a/src/StdMeshers_I/StdMeshers_NotConformAllowed_i.cxx b/src/StdMeshers_I/StdMeshers_NotConformAllowed_i.cxx deleted file mode 100644 index 8940cf7a7..000000000 --- a/src/StdMeshers_I/StdMeshers_NotConformAllowed_i.cxx +++ /dev/null @@ -1,81 +0,0 @@ -// SMESH StdMeshers_I : idl implementation based on 'SMESH' unit's classes -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_NotConformAllowed_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -using namespace std; -#include "StdMeshers_NotConformAllowed_i.hxx" -#include "SMESH_Gen.hxx" - -#include "utilities.h" - -//============================================================================= -/*! - * Constructor: - * _name is related to the class name: prefix = SMESH_ ; suffix = _i . - */ -//============================================================================= - -StdMeshers_NotConformAllowed_i::StdMeshers_NotConformAllowed_i - (PortableServer::POA_ptr thePOA, - int studyId, - ::SMESH_Gen* genImpl) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ) -{ - MESSAGE("StdMeshers_NotConformAllowed_i::StdMeshers_NotConformAllowed_i"); - myBaseImpl = new ::StdMeshers_NotConformAllowed(genImpl->GetANewId(), - studyId, - genImpl); -} - -//============================================================================= -/*! - * - */ -//============================================================================= - -StdMeshers_NotConformAllowed_i::~StdMeshers_NotConformAllowed_i() -{ -} - -//================================================================================ -/*! - * \brief Verify whether hypothesis supports given entity type - * \param type - dimension (see SMESH::Dimension enumeration) - * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise - * - * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration) - */ -//================================================================================ -CORBA::Boolean StdMeshers_NotConformAllowed_i::IsDimSupported( SMESH::Dimension /*type*/ ) -{ - return true; -} - - - diff --git a/src/StdMeshers_I/StdMeshers_NotConformAllowed_i.hxx b/src/StdMeshers_I/StdMeshers_NotConformAllowed_i.hxx deleted file mode 100644 index ceddb3287..000000000 --- a/src/StdMeshers_I/StdMeshers_NotConformAllowed_i.hxx +++ /dev/null @@ -1,57 +0,0 @@ -// SMESH StdMeshers_I : idl implementation based on 'SMESH' unit's classes -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_NotConformAllowed_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _StdMeshers_NotConformAllowed_I_HXX_ -#define _StdMeshers_NotConformAllowed_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESH_Hypothesis_i.hxx" - -#include "StdMeshers_NotConformAllowed.hxx" - -class StdMeshers_NotConformAllowed_i: - public POA_StdMeshers::StdMeshers_NotConformAllowed, - public SMESH_Hypothesis_i -{ -public: - StdMeshers_NotConformAllowed_i(PortableServer::POA_ptr thePOA, - int studyId, - ::SMESH_Gen* genImpl); - virtual ~StdMeshers_NotConformAllowed_i(); - - // Verify whether hypothesis supports given entity type - CORBA::Boolean IsDimSupported( SMESH::Dimension type ); - -protected: - ::StdMeshers_NotConformAllowed* _impl; -}; - -#endif - diff --git a/src/StdMeshers_I/StdMeshers_NumberOfSegments_i.cxx b/src/StdMeshers_I/StdMeshers_NumberOfSegments_i.cxx deleted file mode 100644 index 69d507346..000000000 --- a/src/StdMeshers_I/StdMeshers_NumberOfSegments_i.cxx +++ /dev/null @@ -1,348 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_NumberOfSegments_i.cxx -// Moved here from SMESH_NumberOfSegments_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_NumberOfSegments_i.hxx" -#include "SMESH_Gen_i.hxx" -#include "SMESH_Gen.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" - -#include - -//============================================================================= -/*! - * StdMeshers_NumberOfSegments_i::StdMeshers_NumberOfSegments_i - * - * Constructor - */ -//============================================================================= - -StdMeshers_NumberOfSegments_i::StdMeshers_NumberOfSegments_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ) -{ - MESSAGE( "StdMeshers_NumberOfSegments_i::StdMeshers_NumberOfSegments_i" ); - myBaseImpl = new ::StdMeshers_NumberOfSegments( theGenImpl->GetANewId(), - theStudyId, - theGenImpl ); -} - -//============================================================================= -/*! - * StdMeshers_NumberOfSegments_i::~StdMeshers_NumberOfSegments_i - * - * Destructor - */ -//============================================================================= - -StdMeshers_NumberOfSegments_i::~StdMeshers_NumberOfSegments_i() -{ - MESSAGE( "StdMeshers_NumberOfSegments_i::~StdMeshers_NumberOfSegments_i" ); -} - -//============================================================================= -/*! - * StdMeshers_NumberOfSegments_i::SetNumberOfSegments - * - * Set number of segments - */ -//============================================================================= - -void StdMeshers_NumberOfSegments_i::SetNumberOfSegments( CORBA::Long theSegmentsNumber ) - throw ( SALOME::SALOME_Exception ) -{ - MESSAGE( "StdMeshers_NumberOfSegments_i::SetNumberOfSegments" ); - ASSERT( myBaseImpl ); - try { - this->GetImpl()->SetNumberOfSegments( theSegmentsNumber ); - } - catch (SALOME_Exception& S_ex) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } - - // Update Python script - TCollection_AsciiString aStr, aStrNb ((int)theSegmentsNumber); - SMESH_Gen_i::AddObject(aStr, _this()) += ".SetNumberOfSegments("; - aStr += aStrNb + ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); -} - -//============================================================================= -/*! - * StdMeshers_NumberOfSegments_i::GetNumberOfSegments - * - * Get number of segments - */ -//============================================================================= - -CORBA::Long StdMeshers_NumberOfSegments_i::GetNumberOfSegments() -{ - MESSAGE( "StdMeshers_NumberOfSegments_i::GetNumberOfSegments" ); - ASSERT( myBaseImpl ); - return this->GetImpl()->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 ); - } - catch ( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } -} - -//============================================================================= -/*! - */ -//============================================================================= - -CORBA::Long StdMeshers_NumberOfSegments_i::GetDistrType() -{ - MESSAGE( "StdMeshers_NumberOfSegments_i::GetDistrType" ); - ASSERT( myBaseImpl ); - return this->GetImpl()->GetDistrType(); -} - -//============================================================================= -/*! - * StdMeshers_NumberOfSegments_i::SetScaleFactor - * - * Set scalar factor - */ -//============================================================================= - -void StdMeshers_NumberOfSegments_i::SetScaleFactor( CORBA::Double theScaleFactor ) - throw ( SALOME::SALOME_Exception ) -{ - MESSAGE( "StdMeshers_NumberOfSegments_i::SetScaleFactor" ); - ASSERT( myBaseImpl ); - try { - this->GetImpl()->SetScaleFactor( theScaleFactor ); - } - catch ( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } -} - -//============================================================================= -/*! - * StdMeshers_NumberOfSegments_i::GetScaleFactor - * - * Get scalar factor - */ -//============================================================================= - -CORBA::Double StdMeshers_NumberOfSegments_i::GetScaleFactor() - throw ( SALOME::SALOME_Exception ) -{ - MESSAGE( "StdMeshers_NumberOfSegments_i::GetScaleFactor" ); - ASSERT( myBaseImpl ); - double scale; - try { - scale = this->GetImpl()->GetScaleFactor(); - } - catch ( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } - return scale; -} - -//============================================================================= -/*! - */ -//============================================================================= - -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++) - tbl[i] = table[i]; - try { - this->GetImpl()->SetTableFunction( tbl ); - } - catch ( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } -} - -//============================================================================= -/*! - */ -//============================================================================= - -SMESH::double_array* StdMeshers_NumberOfSegments_i::GetTableFunction() - throw ( SALOME::SALOME_Exception ) -{ - MESSAGE( "StdMeshers_NumberOfSegments_i::GetTableFunction" ); - ASSERT( myBaseImpl ); - const std::vector* tbl; - try { - tbl = &this->GetImpl()->GetTableFunction(); - } - catch ( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } - SMESH::double_array_var aRes = new SMESH::double_array(); - aRes->length(tbl->size()); - for (int i = 0; i < tbl->size(); i++) - aRes[i] = (*tbl)[i]; - return aRes._retn(); -} - -//============================================================================= -/*! - */ -//============================================================================= - -void StdMeshers_NumberOfSegments_i::SetExpressionFunction(const char* expr) - throw ( SALOME::SALOME_Exception ) -{ - MESSAGE( "StdMeshers_NumberOfSegments_i::SetExpressionFunction" ); - ASSERT( myBaseImpl ); - try { - this->GetImpl()->SetExpressionFunction( expr ); - } - catch ( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } -} - -//============================================================================= -/*! - */ -//============================================================================= - -char* StdMeshers_NumberOfSegments_i::GetExpressionFunction() - throw ( SALOME::SALOME_Exception ) -{ - MESSAGE( "StdMeshers_NumberOfSegments_i::GetExpressionFunction" ); - ASSERT( myBaseImpl ); - const char* expr; - try { - expr = this->GetImpl()->GetExpressionFunction(); - } - catch ( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } - return CORBA::string_dup(expr); -} - -//============================================================================= -/*! - */ -//============================================================================= - -void StdMeshers_NumberOfSegments_i::SetExponentMode(CORBA::Boolean isExp) - throw ( SALOME::SALOME_Exception ) -{ - MESSAGE( "StdMeshers_NumberOfSegments_i::SetExponentMode" ); - ASSERT( myBaseImpl ); - try { - this->GetImpl()->SetExponentMode( isExp ); - } - catch ( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } -} - -//============================================================================= -/*! - */ -//============================================================================= - -CORBA::Boolean StdMeshers_NumberOfSegments_i::IsExponentMode() - throw ( SALOME::SALOME_Exception ) -{ - MESSAGE( "StdMeshers_NumberOfSegments_i::IsExponentMode" ); - ASSERT( myBaseImpl ); - bool isExp; - try { - isExp = this->GetImpl()->IsExponentMode(); - } - catch ( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } - return isExp; -} - -//============================================================================= -/*! - * StdMeshers_NumberOfSegments_i::GetImpl - * - * Get implementation - */ -//============================================================================= - -::StdMeshers_NumberOfSegments* StdMeshers_NumberOfSegments_i::GetImpl() -{ - MESSAGE( "StdMeshers_NumberOfSegments_i::GetImpl" ); - return ( ::StdMeshers_NumberOfSegments* )myBaseImpl; -} - -//================================================================================ -/*! - * \brief Verify whether hypothesis supports given entity type - * \param type - dimension (see SMESH::Dimension enumeration) - * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise - * - * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration) - */ -//================================================================================ -CORBA::Boolean StdMeshers_NumberOfSegments_i::IsDimSupported( SMESH::Dimension type ) -{ - return type == SMESH::DIM_1D; -} - diff --git a/src/StdMeshers_I/StdMeshers_NumberOfSegments_i.hxx b/src/StdMeshers_I/StdMeshers_NumberOfSegments_i.hxx deleted file mode 100644 index 270980f13..000000000 --- a/src/StdMeshers_I/StdMeshers_NumberOfSegments_i.hxx +++ /dev/null @@ -1,102 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_NumberOfSegments_i.hxx -// Moved here from SMESH_NumberOfSegments_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_NUMBEROFSEGMENTS_I_HXX_ -#define _SMESH_NUMBEROFSEGMENTS_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESH_Hypothesis_i.hxx" -#include "StdMeshers_NumberOfSegments.hxx" - -// ====================================================== -// Number of segments hypothesis -// ====================================================== -class StdMeshers_NumberOfSegments_i: - public virtual POA_StdMeshers::StdMeshers_NumberOfSegments, - public virtual SMESH_Hypothesis_i -{ -public: - // Constructor - StdMeshers_NumberOfSegments_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ); - // Destructor - virtual ~StdMeshers_NumberOfSegments_i(); - - // Set number of segments - void SetNumberOfSegments( CORBA::Long theSegmentsNumber ) - throw ( SALOME::SALOME_Exception ); - // Get number of segments - CORBA::Long GetNumberOfSegments(); - - // Set distribution type - void SetDistrType(CORBA::Long typ) - throw ( SALOME::SALOME_Exception ); - // Get distribution type - CORBA::Long GetDistrType(); - - // Set scalar factor - void SetScaleFactor( CORBA::Double theScaleFactor ) - throw ( SALOME::SALOME_Exception ); - // Get scalar factor - CORBA::Double GetScaleFactor() - throw ( SALOME::SALOME_Exception ); - - // Set table function for distribution DT_TabFunc - void SetTableFunction(const SMESH::double_array& table) - throw ( SALOME::SALOME_Exception ); - // Get table function for distribution DT_TabFunc - SMESH::double_array* GetTableFunction() - throw ( SALOME::SALOME_Exception ); - - // Set expression function for distribution DT_ExprFunc - void SetExpressionFunction(const char* expr) - throw ( SALOME::SALOME_Exception ); - // Get expression function for distribution DT_ExprFunc - char* GetExpressionFunction() - throw ( SALOME::SALOME_Exception ); - - // Set the exponent mode on/off - void SetExponentMode(CORBA::Boolean isExp) - throw ( SALOME::SALOME_Exception ); - // Returns true if the exponent mode is set - CORBA::Boolean IsExponentMode() - throw ( SALOME::SALOME_Exception ); - - // Get implementation - ::StdMeshers_NumberOfSegments* GetImpl(); - - // Verify whether hypothesis supports given entity type - CORBA::Boolean IsDimSupported( SMESH::Dimension type ); -}; - -#endif diff --git a/src/StdMeshers_I/StdMeshers_Propagation_i.cxx b/src/StdMeshers_I/StdMeshers_Propagation_i.cxx deleted file mode 100644 index 4e038748c..000000000 --- a/src/StdMeshers_I/StdMeshers_Propagation_i.cxx +++ /dev/null @@ -1,91 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Propagation_i.cxx -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_Propagation_i.hxx" -#include "SMESH_Gen.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * StdMeshers_Propagation_i::StdMeshers_Propagation_i - * - * Constructor - */ -//============================================================================= -StdMeshers_Propagation_i::StdMeshers_Propagation_i (PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ) -{ - MESSAGE( "StdMeshers_Propagation_i::StdMeshers_Propagation_i" ); - myBaseImpl = new ::StdMeshers_Propagation(theGenImpl->GetANewId(), - theStudyId, - theGenImpl); -} - -//============================================================================= -/*! - * StdMeshers_Propagation_i::~StdMeshers_Propagation_i - * - * Destructor - */ -//============================================================================= -StdMeshers_Propagation_i::~StdMeshers_Propagation_i() -{ - MESSAGE( "StdMeshers_Propagation_i::~StdMeshers_Propagation_i" ); -} - -//============================================================================= -/*! - * StdMeshers_Propagation_i::GetImpl - * - * Get implementation - */ -//============================================================================= -::StdMeshers_Propagation* StdMeshers_Propagation_i::GetImpl() -{ - MESSAGE( "StdMeshers_Propagation_i::GetImpl" ); - return ( ::StdMeshers_Propagation* )myBaseImpl; -} - -//================================================================================ -/*! - * \brief Verify whether hypothesis supports given entity type - * \param type - dimension (see SMESH::Dimension enumeration) - * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise - * - * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration) - */ -//================================================================================ -CORBA::Boolean StdMeshers_Propagation_i::IsDimSupported( SMESH::Dimension type ) -{ - return type == SMESH::DIM_1D; -} - diff --git a/src/StdMeshers_I/StdMeshers_Propagation_i.hxx b/src/StdMeshers_I/StdMeshers_Propagation_i.hxx deleted file mode 100644 index ca130bc2f..000000000 --- a/src/StdMeshers_I/StdMeshers_Propagation_i.hxx +++ /dev/null @@ -1,60 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Propagation_i.hxx -// Module : SMESH -// $Header$ - -#ifndef _SMESH_PROPAGATION_I_HXX_ -#define _SMESH_PROPAGATION_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESH_Hypothesis_i.hxx" -#include "StdMeshers_Propagation.hxx" - -class SMESH_Gen; - -// ====================================================== -// Propagation hypothesis -// ====================================================== -class StdMeshers_Propagation_i: - public virtual POA_StdMeshers::StdMeshers_Propagation, - public virtual SMESH_Hypothesis_i -{ -public: - // Constructor - StdMeshers_Propagation_i (PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl); - // Destructor - virtual ~StdMeshers_Propagation_i(); - - // Get implementation - ::StdMeshers_Propagation* GetImpl(); - - // Verify whether hypothesis supports given entity type - CORBA::Boolean IsDimSupported( SMESH::Dimension type ); -}; - -#endif diff --git a/src/StdMeshers_I/StdMeshers_Quadrangle_2D_i.cxx b/src/StdMeshers_I/StdMeshers_Quadrangle_2D_i.cxx deleted file mode 100644 index 059eac91f..000000000 --- a/src/StdMeshers_I/StdMeshers_Quadrangle_2D_i.cxx +++ /dev/null @@ -1,86 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Quadrangle_2D_i.cxx -// Moved here from SMESH_Quadrangle_2D_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_Quadrangle_2D_i.hxx" -#include "SMESH_Gen.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * StdMeshers_Quadrangle_2D_i::StdMeshers_Quadrangle_2D_i - * - * Constructor - */ -//============================================================================= - -StdMeshers_Quadrangle_2D_i::StdMeshers_Quadrangle_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_Quadrangle_2D_i::StdMeshers_Quadrangle_2D_i" ); - myBaseImpl = new ::StdMeshers_Quadrangle_2D( theGenImpl->GetANewId(), - theStudyId, - theGenImpl ); -} - -//============================================================================= -/*! - * StdMeshers_Quadrangle_2D_i::~StdMeshers_Quadrangle_2D_i - * - * Destructor - * - */ -//============================================================================= - -StdMeshers_Quadrangle_2D_i::~StdMeshers_Quadrangle_2D_i() -{ - MESSAGE( "StdMeshers_Quadrangle_2D_i::~StdMeshers_Quadrangle_2D_i" ); -} - -//============================================================================= -/*! - * StdMeshers_Quadrangle_2D_i::GetImpl - * - * Get implementation - */ -//============================================================================= - -::StdMeshers_Quadrangle_2D* StdMeshers_Quadrangle_2D_i::GetImpl() -{ - MESSAGE( "StdMeshers_Quadrangle_2D_i::GetImpl" ); - return ( ::StdMeshers_Quadrangle_2D* )myBaseImpl; -} - diff --git a/src/StdMeshers_I/StdMeshers_Quadrangle_2D_i.hxx b/src/StdMeshers_I/StdMeshers_Quadrangle_2D_i.hxx deleted file mode 100644 index a8c1e281f..000000000 --- a/src/StdMeshers_I/StdMeshers_Quadrangle_2D_i.hxx +++ /dev/null @@ -1,61 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Quadrangle_2D_i.hxx -// Moved here from SMESH_Quadrangle_2D_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_QUADRANGLE_2D_I_HXX_ -#define _SMESH_QUADRANGLE_2D_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESH_2D_Algo_i.hxx" -#include "StdMeshers_Quadrangle_2D.hxx" - -class SMESH_Gen; - -// ====================================================== -// Quadrangle (Mapping) 2d algorithm -// ====================================================== -class StdMeshers_Quadrangle_2D_i: - public virtual POA_StdMeshers::StdMeshers_Quadrangle_2D, - public virtual SMESH_2D_Algo_i -{ -public: - // Constructor - StdMeshers_Quadrangle_2D_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ); - - // Destructor - virtual ~StdMeshers_Quadrangle_2D_i(); - - // Get implementation - ::StdMeshers_Quadrangle_2D* GetImpl(); -}; - -#endif diff --git a/src/StdMeshers_I/StdMeshers_Regular_1D_i.cxx b/src/StdMeshers_I/StdMeshers_Regular_1D_i.cxx deleted file mode 100644 index 24f322c58..000000000 --- a/src/StdMeshers_I/StdMeshers_Regular_1D_i.cxx +++ /dev/null @@ -1,85 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Regular_1D_i.cxx -// Moved here from SMESH_Regular_1D_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_Regular_1D_i.hxx" -#include "SMESH_Gen.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" - -//============================================================================= -/*! - * StdMeshers_Regular_1D_i::StdMeshers_Regular_1D_i - * - * Constructor - */ -//============================================================================= - -StdMeshers_Regular_1D_i::StdMeshers_Regular_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_Regular_1D_i::StdMeshers_Regular_1D_i" ); - myBaseImpl = new ::StdMeshers_Regular_1D( theGenImpl->GetANewId(), - theStudyId, - theGenImpl ); -} - -//============================================================================= -/*! - * StdMeshers_Regular_1D_i::~StdMeshers_Regular_1D_i - * - * Destructor - */ -//============================================================================= - -StdMeshers_Regular_1D_i::~StdMeshers_Regular_1D_i() -{ - MESSAGE( "StdMeshers_Regular_1D_i::~StdMeshers_Regular_1D_i" ); -} - -//============================================================================= -/*! - * StdMeshers_Regular_1D_i::GetImpl - * - * Get implementation - */ -//============================================================================= - -::StdMeshers_Regular_1D* StdMeshers_Regular_1D_i::GetImpl() -{ - MESSAGE( "StdMeshers_Regular_1D_i::GetImpl" ); - return ( ::StdMeshers_Regular_1D* )myBaseImpl; -} - diff --git a/src/StdMeshers_I/StdMeshers_Regular_1D_i.hxx b/src/StdMeshers_I/StdMeshers_Regular_1D_i.hxx deleted file mode 100644 index 3231532fd..000000000 --- a/src/StdMeshers_I/StdMeshers_Regular_1D_i.hxx +++ /dev/null @@ -1,58 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_Regular_1D_i.hxx -// Moved here from SMESH_Regular_1D_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_REGULAR_1D_I_HXX_ -#define _SMESH_REGULAR_1D_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESH_1D_Algo_i.hxx" -#include "StdMeshers_Regular_1D.hxx" - -// ====================================================== -// Wire Discretization 1d algorithm -// ====================================================== -class StdMeshers_Regular_1D_i: - public virtual POA_StdMeshers::StdMeshers_Regular_1D, - public virtual SMESH_1D_Algo_i -{ -public: - // Constructor - StdMeshers_Regular_1D_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ); - // Destructor - virtual ~StdMeshers_Regular_1D_i(); - - // Get implementation - ::StdMeshers_Regular_1D* GetImpl(); -}; - -#endif diff --git a/src/StdMeshers_I/StdMeshers_StartEndLength_i.cxx b/src/StdMeshers_I/StdMeshers_StartEndLength_i.cxx deleted file mode 100644 index 56ce6f51d..000000000 --- a/src/StdMeshers_I/StdMeshers_StartEndLength_i.cxx +++ /dev/null @@ -1,145 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_StartEndLength_i.cxx -// Moved here from SMESH_LocalLength_i.cxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -using namespace std; -#include "StdMeshers_StartEndLength_i.hxx" -#include "SMESH_Gen_i.hxx" -#include "SMESH_Gen.hxx" - -#include "Utils_CorbaException.hxx" -#include "utilities.h" - -#include - -//============================================================================= -/*! - * StdMeshers_StartEndLength_i::StdMeshers_StartEndLength_i - * - * Constructor - */ -//============================================================================= - -StdMeshers_StartEndLength_i::StdMeshers_StartEndLength_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ) - : SALOME::GenericObj_i( thePOA ), - SMESH_Hypothesis_i( thePOA ) -{ - MESSAGE( "StdMeshers_StartEndLength_i::StdMeshers_StartEndLength_i" ); - myBaseImpl = new ::StdMeshers_StartEndLength( theGenImpl->GetANewId(), - theStudyId, - theGenImpl ); -} - -//============================================================================= -/*! - * StdMeshers_StartEndLength_i::~StdMeshers_StartEndLength_i - * - * Destructor - */ -//============================================================================= - -StdMeshers_StartEndLength_i::~StdMeshers_StartEndLength_i() -{ - MESSAGE( "StdMeshers_StartEndLength_i::~StdMeshers_StartEndLength_i" ); -} - -//============================================================================= -/*! - * StdMeshers_StartEndLength_i::SetLength - * - * Set length - */ -//============================================================================= - -void StdMeshers_StartEndLength_i::SetLength(CORBA::Double theLength, - CORBA::Boolean theIsStart ) - throw ( SALOME::SALOME_Exception ) -{ - MESSAGE( "StdMeshers_StartEndLength_i::SetLength" ); - ASSERT( myBaseImpl ); - try { - this->GetImpl()->SetLength( theLength, theIsStart ); - } - catch ( SALOME_Exception& S_ex ) { - THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), - SALOME::BAD_PARAM ); - } - - // Update Python script - TCollection_AsciiString aStr, aStrLen ((double)theLength), aStrFlag ((int)theIsStart); - SMESH_Gen_i::AddObject(aStr, _this()) += ".SetLength("; - aStr += aStrLen + ", " + aStrFlag + ")"; - - SMESH_Gen_i::AddToCurrentPyScript(aStr); -} - -//============================================================================= -/*! - * StdMeshers_StartEndLength_i::GetLength - * - * Get length - */ -//============================================================================= - -CORBA::Double StdMeshers_StartEndLength_i::GetLength( CORBA::Boolean theIsStart) -{ - MESSAGE( "StdMeshers_StartEndLength_i::GetLength" ); - ASSERT( myBaseImpl ); - return this->GetImpl()->GetLength( theIsStart ); -} - -//============================================================================= -/*! - * StdMeshers_StartEndLength_i::GetImpl - * - * Get implementation - */ -//============================================================================= - -::StdMeshers_StartEndLength* StdMeshers_StartEndLength_i::GetImpl() -{ - MESSAGE( "StdMeshers_StartEndLength_i::GetImpl" ); - return ( ::StdMeshers_StartEndLength* )myBaseImpl; -} - -//================================================================================ -/*! - * \brief Verify whether hypothesis supports given entity type - * \param type - dimension (see SMESH::Dimension enumeration) - * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise - * - * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration) - */ -//================================================================================ -CORBA::Boolean StdMeshers_StartEndLength_i::IsDimSupported( SMESH::Dimension type ) -{ - return type == SMESH::DIM_1D; -} - diff --git a/src/StdMeshers_I/StdMeshers_StartEndLength_i.hxx b/src/StdMeshers_I/StdMeshers_StartEndLength_i.hxx deleted file mode 100644 index d937f9390..000000000 --- a/src/StdMeshers_I/StdMeshers_StartEndLength_i.hxx +++ /dev/null @@ -1,70 +0,0 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_StartEndLength_i.hxx -// Moved here from SMESH_LocalLength_i.hxx -// Author : Paul RASCLE, EDF -// Module : SMESH -// $Header$ - -#ifndef _SMESH_StartEndLength_I_HXX_ -#define _SMESH_StartEndLength_I_HXX_ - -#include -#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) - -#include "SMESH_Hypothesis_i.hxx" -#include "StdMeshers_StartEndLength.hxx" - -class SMESH_Gen; - -// ====================================================== -// Local Length hypothesis -// ====================================================== -class StdMeshers_StartEndLength_i: - public virtual POA_StdMeshers::StdMeshers_StartEndLength, - public virtual SMESH_Hypothesis_i -{ -public: - // Constructor - StdMeshers_StartEndLength_i(PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ); - // Destructor - virtual ~StdMeshers_StartEndLength_i(); - - // Set length - void SetLength( CORBA::Double theLength, CORBA::Boolean theIsStart ) - throw ( SALOME::SALOME_Exception ); - // Get length - CORBA::Double GetLength(CORBA::Boolean theIsStart); - - // Get implementation - ::StdMeshers_StartEndLength* GetImpl(); - - // Verify whether hypothesis supports given entity type - CORBA::Boolean IsDimSupported( SMESH::Dimension type ); -}; - -#endif - diff --git a/src/StdMeshers_I/StdMeshers_i.cxx b/src/StdMeshers_I/StdMeshers_i.cxx deleted file mode 100644 index f045bbe72..000000000 --- a/src/StdMeshers_I/StdMeshers_i.cxx +++ /dev/null @@ -1,98 +0,0 @@ -// SMESH StdMeshers : implementaion of SMESH idl descriptions -// -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org -// -// -// -// File : StdMeshers_i.cxx -// Author : Julia DOROVSKIKH -// Module : SMESH -// $Header$ - -using namespace std; -#include "SMESH_Gen_i.hxx" - -#include "utilities.h" - -#include "StdMeshers_LocalLength_i.hxx" -#include "StdMeshers_StartEndLength_i.hxx" -#include "StdMeshers_Arithmetic1D_i.hxx" -#include "StdMeshers_NumberOfSegments_i.hxx" -#include "StdMeshers_Deflection1D_i.hxx" -#include "StdMeshers_Propagation_i.hxx" -#include "StdMeshers_LengthFromEdges_i.hxx" -#include "StdMeshers_MaxElementArea_i.hxx" -#include "StdMeshers_MaxElementVolume_i.hxx" -#include "StdMeshers_NotConformAllowed_i.hxx" - -#include "StdMeshers_Regular_1D_i.hxx" -#include "StdMeshers_MEFISTO_2D_i.hxx" -#include "StdMeshers_Quadrangle_2D_i.hxx" -#include "StdMeshers_Hexa_3D_i.hxx" - -//============================================================================= -/*! - * - */ -//============================================================================= - -extern "C" -{ - GenericHypothesisCreator_i* GetHypothesisCreator (const char* aHypName) - { - MESSAGE("Get HypothesisCreator for " << aHypName); - - GenericHypothesisCreator_i* aCreator = 0; - - // Hypotheses - if (strcmp(aHypName, "LocalLength") == 0) - aCreator = new HypothesisCreator_i; - else if (strcmp(aHypName, "NumberOfSegments") == 0) - aCreator = new HypothesisCreator_i; - else if (strcmp(aHypName, "LengthFromEdges") == 0) - aCreator = new HypothesisCreator_i; - else if (strcmp(aHypName, "NotConformAllowed") == 0) - aCreator = new HypothesisCreator_i; - else if (strcmp(aHypName, "Propagation") == 0) - aCreator = new HypothesisCreator_i; - else if (strcmp(aHypName, "MaxElementArea") == 0) - aCreator = new HypothesisCreator_i; - else if (strcmp(aHypName, "MaxElementVolume") == 0) - aCreator = new HypothesisCreator_i; - else if (strcmp(aHypName, "StartEndLength") == 0) - aCreator = new HypothesisCreator_i; - else if (strcmp(aHypName, "Deflection1D") == 0) - aCreator = new HypothesisCreator_i; - else if (strcmp(aHypName, "Arithmetic1D") == 0) - aCreator = new HypothesisCreator_i; - - // Algorithms - else if (strcmp(aHypName, "Regular_1D") == 0) - aCreator = new HypothesisCreator_i; - else if (strcmp(aHypName, "MEFISTO_2D") == 0) - aCreator = new HypothesisCreator_i; - else if (strcmp(aHypName, "Quadrangle_2D") == 0) - aCreator = new HypothesisCreator_i; - else if (strcmp(aHypName, "Hexa_3D") == 0) - aCreator = new HypothesisCreator_i; - else ; - - return aCreator; - } -} -- 2.39.2

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 diff --git a/doc/salome/gui/SMESH/image25.gif b/doc/salome/gui/SMESH/image25.gif deleted file mode 100755 index cd7c967bcbc83e7e0861612299c9259aa600c9ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6114 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 QeimwVR%smuLBQ~T0IcS182|tP diff --git a/doc/salome/gui/SMESH/image25.jpg b/doc/salome/gui/SMESH/image25.jpg deleted file mode 100755 index 4b2d4dfe47d70a0b36e26ba345664836fcdcc6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmex=wkpZH5*GHWn6E78W*ER#tX4Hg-+{E=~>(PGLSiZUJ!-2?;R~F)>LQ6?sW%C227+ z1#JZ-HFZr*O$j+&104+m6%9>wMmBbKP7Y2XE-oQ;DKRN^lEMEYjEfi;7+D#?fB^~^ znV4Bv+1NQaxwsh_m?3gN5+aKvDZs$Q$jr>d!psWv1<;sUpd15>Aghp~p(C4cU?RIx zp@>oA#DyHnP8$!323`E1Vw_ae#K|QlE+HwUs-~`?sbyknW^Q3==I-I?6&w;8 z79J59m7J2AmY$KBRa{b9R$ftA)!fqB*51+CHEHscsne#9glAUcUPH>GPMb-@gC&`AZP! zWF{6CW)^mklNp)HftXp4g;mjzO~^5jJ+V+&$*7S-#A)KfjR!fEje|ajCKX-e5>qjG zsQMA)YOte;b8{0}j)uD#?&SXm7z8;OWEf1^(5((%# z+U9=7?f&kG^8>>ck5_(vO5~w3+tl_DR91cbkt&DwthX)?}Dqse4lSWkg8(u4OKZmm6OFx$o<_lwvv6 z%j-?qw#~ZXUNC`8DDu=(v6xK)2ix5kJtW!NZMCC<1Ija2oSr)8=&{z?!h9+F_Vua} z+gpWR39>u*?6}?J_@5zS&y(6)SFicrURd+$>0ML3_oXT`Zog7CI`Q804!8IzXN|l4 zdk%U$zr5Git8=xYSNKKQ?XzQ^rR9HPz5bWSYWm-g`TrS?tzh_fVAp?!h3!HA8TRS^ sXZUfILH>q#{1<~)@!yZ`|IZ+`fcZDm>wj&s-v54V|IhF^gz^7P0Hh~}fB*mh diff --git a/doc/salome/gui/SMESH/image26.gif b/doc/salome/gui/SMESH/image26.gif deleted file mode 100755 index 62eef533d06b81d79b15bba4c78118df499eb673..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 945 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 S&Ie%0{^wHvxAX{yhW`uK(B>Ne diff --git a/doc/salome/gui/SMESH/image27.gif b/doc/salome/gui/SMESH/image27.gif deleted file mode 100755 index d21b890b97d7e01c8c392adf3c73df61890a30e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4187 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 diff --git a/doc/salome/gui/SMESH/image27.jpg b/doc/salome/gui/SMESH/image27.jpg deleted file mode 100755 index d2f32b1848125e95728d52dc90dc6dc6c38981a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15997 zcmeHt2|Seh{{J%uV+q;!C6qnc_pKP)5h=2jBr&$J8^oY2$zCYLltc=VB_hjMLb677 zM)oXY9ox)*&N=toTb*<7Jhf6&p==DXlv@8k}5g*(C=y!rIq?N9QVOPxF=1rSDnTL3vJDH$m#IT;xlgq$2g zd6bHhf`XEfmX`V`D-#a>jFZ5PnZ4>9C|n6auG98kkLc)&ym)dWBO` zv9PkSa~wY*BrGB-D<`j@sHA*GTL-GEr*Clnf|>b63rj2eYYx{PonX%1KE8hbh=9PG zw<02=qHo6}-@TWTns)y|`s17@xli-*pB0q8Dl4z3d|g%Dh;C|bX?@q$-rLvzabWP% z(C`#y`t!`}-2B2Kc70=WYkLQ`yGKtvG6^Xum=yBkkwGN>#9uHyDcLb8at5t)5Iavs ze(5j@rqfA}N*X8yWK7qXuX^=Ru?Wge9moE7>Yon%`_3Hxrw;x1Gyna_gnEFU0+a!2 z27`#Frw4)QL4;x82pB|s0Mi2+z+OQp6(9_tNd7n9L?&F6uct1i4aXJcD7L@Y5M@v+ zbs{M~IG)8r08rZ*1R%_l0K@^jYpIAJ{LNuFo~#uw3m_XUr&jmqV0AcFUR*bb08lzc z)y=CtB>%PJ@un@PI~YIfp*lww`evIMd24`BHZjgqa!te-GaEBZ~62|Zn53yWpc z zot;CJCR05XucmX0cnyEapw=;ZiPyp1yHmUG6!d{ zMq_19>LPtojUpwh0z71@EVd4Z!0}Q3N+?<^y}gdMNkI-svz{cB`fAkQzQU9F8(CeywnQ? zkvrCs)CLpMBf4d&*TG3iiF8H6U?h6@cwOYCp#)FQL)5DXJ1DZI0V*9l4~BlTC%K`x zA6B;XT}jJL@f8oIz`L5vvcXroF1<8df;d+CIhbD)%VeN~ROnvb1Z}jo)`cm5cs?B@ z$%ZfmahWPtJdwz_R&ZejR;3};s;MRnp65Ms*=oW`{=DTPgEM`AfqIYB;dG+%>w0ux zEEUk3G$80`A7P@e-Vd6V$4d;<1n1$Rni6plWpFyDjkd$|?E<@?&KQaf>a};qY-~hP z4Nh^lyvav!beLgjQE7we4-^XQO<9CLqs8sj?s1tw9DkM`L}+@I{_?`WIanaQrSHg` z#pEq7Giik?{0gflDK=?5R9;nSYDDq~?2g?vw(wa?2V|XWT!#v>%=kp8+@A&;uuxOh zv9h&+^udcKM?QTC7asJvs~0FLX|9g$?k2w&dPB`WZ(-VeFv+&bf2n%gWF&l}QE11+ z!*8=q7WA?ETO}uVuSE?b;+rfc*h9Kz#j2tE+M!75z-KEe-DJ3{@#BJ#f)>+pryu9n zn<#@c=}>eUIBx>LAjyb$-e|iN(&c-Yw;lgrU;p}0!nWVmswVemY(Td@i)XFDTpxd^ z>KR*{@AOhO&^l>Nt){lQEHy16-bdmqYYBD};H^IN?hRFQY?QZ3&3@ECo?p@PL)8%6 zHO#)!cq-bysHX+d3Ap`ajn@$wO)MeI-EiOMhnRs6YU{2xnU37*PeY|{P*3f5DD=xM z+Z^lPg54O)sLZf@u;g$FH zA1o~H(Zrv=+s2NfW&+uo7(S5QzgOxTzwp?Ox>Dx`_Y*wP2_(K{Lu6y(pJ9iWpsxoo z3gKo67ZMvEorocULONPWr*nbeJO6MZ0SAHy+E|;5N!c2W!&gf~M~`=QySm#1&z!5$ zQ*|r{{3ihb4EQhsWq;hi{p=7y9gFHhZ>q7%2>9uEp{k1Y+5Qvvxf8WVBU(vc0Uo+U zM@#<01oamCiBvuOF+>)rzc_z9BK+xD5B0P6K;=`m6k|AdOo021^DkUZU!W4`7lc~u zF3RW6hRUkyKJF}r#W|1{2R%{pn1GdBDLvxXMtY^2G@Ul(eAQ<|m2fu%{ON8_SgVT+2!>_8?6cC|KlQE!7|Eoqbpm^v zln0HlFPqLLBlPIl1y)Z6#Q>8Z}T~d%MK)|zn7K@m7fC_TLGi}5|_7If-Y30e$0(U zWifzT^!7WlFrkV_oLP0=AyYOpF#^%HJX3LO5S%S!XjXadfAUL~l{jr>Y0W z6)2&oLR1FfH?0ssn)e=B?U`As*44q`+2eY2I#+0+fqNXlyev0WD>~3d***Jc3`MEu z*!|2`yk7c3OPU;i0)hXgp;4Gs`sS%Ii3b+thwr2;HSg5Uq;c5=g*B+(JP|5}<3%UW zr(4-9I`dwt)wz2vvtqs1SCnoCB;+(t2Ke0j)-XV1TX99Xu;UMxYy4SyV^vM_9qi_{ zP?RaBh0WN2E1=;}mTw^K$RX0Qat)v0`^-jJw1HieyCMocWwUoTRJ{z;g#$w$rXpFK zqp?dIqvvGTO24cNnD}X5+;3+K59)^4{lkv`Ao28F($-pnyb&5=6#MTNcV_j?xty(h+1qA}6IAMNWM z)e`*$GEGR+X`ViE$VJmWy8(wQ!Hy3zUCUf%`=Sh9{*{bCb3|olrEcN3-LkqEDapeh z*EKvRax-P#gq)P8iU~CT2g&+641<6%`nIi?k0ms2)1J+KY9p}Z5YM0^mgKH$YH@Uk z%Ttqk^qe65i*tP1S`j9v02JgKw+!OiIXc`rYbKdFj<+^~mwgsgai= z)Db4N6-A&e0a;N0&-V7M!TioAo{J|Vu+kl^R;|<~XSCX?g|a+kCx+Pd&bN%?=?> z@qrl6onM|{t(&KrGCnwxO#p7A!2g?{$qjw6ffiXBUyxKqGXnhUAsX0W;N4ne0@k)s znXD*@C1WZmheBoL+ME0OGLEYX9c@46MZ^34&8vH0#CZY$79s!`C*c2(4@iuJ&{-mb zs`?Ivh($&xPi7UxV?`?Cf4pVM^hbDzn7kNbbR?C_h3G&lu!r*I6W zOf?LPfEE_KuP|4?I-@#3dN6*IYV=SToc(HzJmJZr6v7?x1mE?#4-?st`a=g}!|ODf z1963L&VllAo~W#}S1t1RUh`e}ZpJXnn_%MqV>tJ3w5j#4yCNeh{_<)&!Nk>&o zsT%mjpANcyS9qo_q&b9~0SnPI))HoWhZmOuGaXs_&kE}s z3C`mAmSB%?rrSoPs)N+qPNo7IX^CG*{ipq=)}(Hr{o*|K z^Nf04w@^(*o9M#tQ5D4WcF#5#wciS;Bmm);27S0SngYES_U`ex(j5+nwg;O}fnshjzH1AK}4EUiUfoG&VTHNy>r*8=R zkMWF_N`^O1T~PM^33Q{Q^V|%)qS{M$=WhF5UMpagxF@Z>Zov0!*|K9+|dv(YXH=SB1bT4-_cxqnhoQ4_o8RFcef51 zl>CLRyM(9Sg!~X-0=-APCjgEexh~lOt|w2I+20g;uwT+u;)-W}Ay;Fp!M>tsj=#7& z@3WOOPX?R`aD*dWBy#)3WEn+t<66#;oYDb2kKNE(!=DlOAP1+`S$}a_+I^Xc0MIKP zVkF0?n2w&(pX`RX!TjODZp_W#E{GZ#zg(zFJz74F6( zH-$47>T1SzPTafux!~n|PpLcKbR_pLiF7BHCA0czoUiNE4O=@zn&Kg5Jqo`^QgHG; zn%;QW)U)zHL+dSjf8_JWRv)f!T)#kn_EXDo+mzPH`kv$0#pR4)`UX3}!REvi=b5Pw z86Y6+AX?8XK*|#ts`&g(P(oCi>7u+|AHvIj%-<>Wl_leVMg8Zzg4k)W6S1TpSJ=;5 zfgK$&C`I$H=$=W`0SteY*ZzgH8>Gp8Sp-W~8F51;-^D-t4B5RCy6b}yI4YnM7x3tk zQx-3SGgSVgFT2(DAw~)MpuWvkE40Q0V*K+VATm=;Mx53kWwrM6sSgW!I9CE@8v z;}a1u3Dcyxsoq?3A3y8jEF$rJ=8h=hNlAiCAk5y5$Tj@J%BBlvq2ZZ_cZ{A|@xk0O zH=Qmd%HNGG(qt37mJTdz8o9SNaoq6VX4p+q*MdYsA!HVQeBpGxp_1Pu|9??4K#hnG z=2+v~vJ+%z_T(-N*N-+gdUg$Ct=~b6W&EJVYdkc7zi>eeJ(L*=aOZ>mritDha|ebu zF6B5o&RHi8BVs)+RCc}5SUX}rULIfKw6TO=r9Yd8^j{qy_Hz3MbbloM#|+2IYCJ0V zv9lybgQn%F?y+)C+B*o8y%z!S(+cZS0%EVthAQ}|d9^kv`w$6dy}eHL65WC>IE827 zrcjLmy8mOaDC%4ts|?NXMtW$*k4w*qlY1zF)w;B{P_&LyPqRIS9a^Kej-Gu~^t$Tm zqS0DkvB3zjQ9-$)~@0^3Ua+4Ex&swoO@F zaZeJ9_x$cZA*cbwC@KM;=TuF|KSW@RB%91T2ErcGmd#b-BZX*JM-klhqYhiM{9d& z%`4+>Apwp#v7Y`w67U1xJs#JiNSm4jZ4t z`DFOc{TEaB9SRHYO^R0fdcAct#-M1&zv4IeK@IN^k8JrH<7Aq%0yIqtJ7@Ctav>!u z8B10YcJ8g&8e>=QrS_U5CF0XxseJ|FN?nWy=b)kK0Uubz(@N(I`@1-yA3itpt>k3} za`AjZQD5f3imM+BH*>n&i~o4b-_I);XS?^TL3FHD7WC>DHT?6TxCa4Xc0ajNwyc6q zca2&eZpJ{nW9gKKEREWe5#V--)rC&L&#$6;$oha0OyA22fSNSgyE#?%sOcJ7`^D z^HNj$qR6mb+oGb9&1e4>onMu;|EP8x<0CN!Odyn#WpE~3#(C_$TjkjY0WkYjDE6fO zLzx{z76&y&t?#QvN7C7f_?@oDU5jgB=k{U?q}NP0vi#zWhrIU8?a2MGeEdV2jP?7^ zpQZNEkfKxdAp=U1n; zJ^@|juo^XDW7eWrM6wx<RjeTJ1D9Z*v7bY)7Ut&C#Ff4W`BpM-%@^oH0wLiwQLN7l4(ECq8@aJ`TTh zN${bH)`Z>li(!IIcmm*+HGl4OQhZ(^V2ULGO|}dO|8p!H#*w+13HLwrltnL%a4K`n z-MqxK05w?7qSZLnWRiVc)PG}QT@~4cWKuON*7v4q-WVR~j0n<;{AgnzAHbDh^(9VN z*M0`eo+bLq*|ap6*3{*85rxbT>-JB#g_sKynf7aO!i*sq$DG!;E(&6{j15 zh+RRLSId6tlKG7BkjwD=M*?sws>ya!sEZg6lpy2OEeL=VuSFBGD{Tk$-8-%l{FQ&Z zc?0%rIff#`n7Hs1bC!s>(5~Sn=u*@!Cm+|QP}a?7n6g{;1y#*4g_pcOZX0>MT`G!P zMBHs+;IBqNubZrs-Kect-Gg0ZARSKch7NIx z=>~C1iIWxA)4@AS_u{I?T*rPlvhfT?a*uJ2I3)C`t|gvG)2U#4dIF$sJN^wre_Zb7 z5?jLVI)0OPEfIGIe`}Z6w3U~{=A>%8|0`_Jm^y}KJ)|VIMkZZtr*(;PQ!j}o0NIkO zTEy`6oZvrV-p! zUNA6?o8eS%f!=vxi|{vzLWl4_oRjvnE6|U%2|Hk*ufLmzay`hosn@+U{}r75+Z61p zuw+)94;QwnMvA`v*zNo|PZxW5@{wKz6S}KMWsvnwVBN;IJW-8rc}shyQu6j?wRooL z=~V2~;O1)jC>m#AuDlDtxip;<_aDBXcyXedex^iy#>3dESME6X1GFtDs;E#AA4P-V z9ojc|v+=a2Sg_f2^Zw&e?H(3x%_~r(6>MlUCUNd&l($fW!g3JmbTVJu zvSne#PLrz%<3b_|FK5R5#QREtQjh*--%9s*zRFju`pJ_E6GMrFXxRmy< z=OSO)(J6MH;&lM8fw!V}8~iDA5EXMf;-@W~GbpV?&yuJ^+NbMWugno~;iKiHGXmtM z(iE!nnzUcz&F@7CMU`8&>^Jmcz@1SM6c6emBBt}&5>|!oEoTP;t6wjoh>UjHlP^Re z>W`(;@arF|I(vsp#_i&RjF*~K8oi+^77p=uXrySyMsl-n=`cZ4NKU|`` z$wgfHk-mUuVmp*VppOaEqT{K7z7tVVldOLrb&P~FO-VUG=oWFPM|B_EGLhmr9;)ID zSp7Yi{hfMzs>TIlaUe1^@=zz5k>RD)bCF|tiC=D?RbdsST-Kx~HWZO-cW_?RN(!9M z3~g*uuQVARJ2^?;Pkt5hk_puPHM*GhmyHn!*?L%(82J%oPILV?y zpiSXq=XGe>g}%v+>1@8j<|;4xNc9!<*}krhtWD6+Pi*j3moV=umhJS@7}Ir;?-;sR zoLGPGdPU*hg4LM|m;l_HzI$RP6KsufLBGbzpO6#8-CU#Kp$}Je5i~tH0A(jNfw05H zCumQaewc~PVohnZ9+hhAYnzWp&SmHDRzuzgFo8zI#DpFAp0Se>vqFhq0Q+l!{PTDe zLRrX+m24{HHH?N=c4LA@>Is0XX&M>5RA1mrny#}HDB6|pBA8P*jHa@evrp``OnzG2 zM#`1<;`66*iR-7lV?TRqGRg9CXJkB+ojAHsI?r*-{`3C%;uIecTJ;CYUGHvrPDq~B zPoq&s>KGR~o;xX|#=d`a*YCo$89lp$0@SkLhZ{y3Fz7k%samtGTB;6{RJj<-sf)>S z8lKTJNGic9YpuwFCDYjPWezhT&0lFA8KC3oMl(tW_oOm9a?_=iKhm7%7Ec+dNj^>k zeHvbNq55t2*sFl6>t&@{T{2LcIUsnZOJ^7A1THUmThU+0|K`<$>)~cc;`73VNdo_X zCU#Kv!s$oH-LRl7tG`F2)5 zP?_H@v*K1K;Oq1E(3p(d#j}vT*!f%X(wuqK5SN zEMoh4>@{!~X}l(iri&UE-`8Bt{IuMTYXRmLu2-`;+#Kwg4tzu%8S_V{8{aNu>9gpY zd>g?TDE^Mq-X0VgNS{>(YS)NTwVfgzn+i7G_v-iQ^S%9H-Pn9zYxEPBogZEnB#2~? z^!a>r2~R&z=uV6^5}qwf94skD`7tC*qrA>S&S@G7fW#UEfgyFVG8_68J-i z25e_I0j&mA;afR}N!IJWR!zy2-R-!BqCJm^e4e*7aim7$F)W!nqoW5Duj1FC{YdF5 zL{pi!5D3f;FZKzlqqA;(boSM!VFHkobBy!`%AZ)$9skMyp9YgWA)zDX*#uEp3~NtK zmq)PqIK+|=I~jvVhY)YH`#SL9GRowb)w? zfcZ_DkdCH6FI!6)vJXT2Nq%jN@db+krfM_*>^Cg#H$=$1x_Y(GHLvDjcryv>RXuLv zAkw=7nTlY8-lZ0WBvt?FT}J-)+-s4auAv#@Gw#Va^3)mue*J$p1CS<-kN(jd;@ngC z3uzkQT=^P4#o<`;gmGnD7dw4C1hvU)0F>D04Z{+tgT$N)A3=`so8)L{X|nu6KA5h> zT!Hm1Z3TfqGL*>zhd*m`8VkM$)7?*isxC={ZQkAYok{tA_#zC=?8`_2waPA z4icN`uE+#>g<2Z8%-`3$-ig~U)gDzntNfg{iMJ~s6DphkJHQQm6BoLSQL{H(leJwe z4tvvY_L{~iid4*(uBH{|nEoxw|3lV4uY6ju8SoCFw1>0g=j9s}jAk8_ z%$7at*-<=odGVoolHcVhL(7L#|I}(g?Jj#{D;XhpfwkWJI=;(IY?c0G5wNkq9AS}*?9un4>5U1_Y6f_-O^4Y z-#*?xAjMo;=E9^$>sJs9+NA=rzC-1&7bjIEaRSeFaU9rSXKz^hk$-MI}1rl(kUg^s~9ly^Gg* z@`fDS=I(Q=m+)rqW+B(o@CGOD5P(b81VGbyzVJXEQFU>DS!3zZmRW$~e8a!s0!WiB zL|`p44Wq-*MTO4SMp;iZz0M+`g${5{t3f@q__k0~SzK7|PqlD5+->`t7Pk$d3;3e- zQ=YRzbpl@7LSO-6r(ym#N%%=AC8LLHKR%65ho*?NK3}5SHgvp&Uk65ICw=)=V5751hcK|ApH8nBc@?#>MglE3@R1MVOxF9EpU4 z3tKS?KNDgtnM`*KpIftSQR5jKmanWz*LQ38j2IrZuTTzQ9-qzA&t^A-h@WtvsLgN- z5vm&mZ9n>#EFuFO5O>fOSpu&t93`37>N4EC>6;Sul%=y;lhto^lfxqqbp0eXrg*Tl z@3!*qdKuiQ5bNi@7VEcTlU&8F+Wkwn2lT65JkU;neyNvdV^{tf`Bc*uYNl?r#t?kY*Fm%mJ|-mYqOB046fB@uH!0l90IL62Z%>tGrO=cy^4$7O*yMsx znb(@0T~#|5eQW2uk?gQJ)GL>=&A`yC1pXb91T_Dj=E{FqC&-O&t4d)Nno@ZkQ#Tq@ z2k9Sf?|7g+1S>sz1|?z>&Ljri)Z{L{S+?w`zt$O%7VS$c^;+2T&tfk+rIZG=KwRk> gL*SSmJBUk3{$)q<^(aUjbhlF&2TK6 z<5;o4v0{m1)r!ZeHP5veo@=o@*V59`<8-da>s(Jy&lIn7Q-aP-i8?oB%9J@#=jJ2> z(X~0**XGQbvo!nK(&B4NtFJ9xx^!*zwY4qR)~;Q{#$IczQckbM|Ysc7l4=YqG6D;ejdEU(23X+F;R(?OGML0hN0jgQ)ib}$fkr>S6VuS zZ2$ePl|y-Ywr;e>(Hk#@EaN0C&C#d$|2WN^EbBpiC%vRmsF*FKNM%Y#`MGy-P) zT$7?5r!E#=8w2V)C>+BIqi7()sZF1D<)_%edQ3= zugbcRaL^&?=*H+d6FL{QaBQDzn$q#%_o22MhJO1r1Q%7cUlUVGsSudn@<8mt(*Cd+ zw-TJ%&hJwWiEt=N{_%mKC8&4C0mp_T3{K1we*ddI!kx?;a4?`NR^VcU$`|o_IiZaX q4IBl%tW2B=AyXGLJ>U%w3S-jP#>lCaks;KkGA-j#rvw`dgEasMFyEU1 diff --git a/doc/salome/gui/SMESH/image28.jpg b/doc/salome/gui/SMESH/image28.jpg deleted file mode 100755 index 8ec5266cfaf67297ea93cd0e6c0f9c3270ada07d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32873 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

In - the Create Algorithms dialog box - select this algorithm and click Create.